280 lines
9.1 KiB
C++
280 lines
9.1 KiB
C++
#include "precompile.h"
|
|
|
|
#include <a8/magicenum.h>
|
|
|
|
#include "app.h"
|
|
|
|
#include "mt/SkillNumber.h"
|
|
#include "mt/Skill.h"
|
|
|
|
IMPL_TABLE(mt::SkillNumber)
|
|
|
|
A8_DECLARE_CLASS_ENUM(SkillNumberLispField_e, int,
|
|
damage,
|
|
damage_addition,
|
|
damage_change,
|
|
shield,
|
|
shield_addition,
|
|
resume,
|
|
resume_addition,
|
|
speed,
|
|
range,
|
|
range2,
|
|
range3,
|
|
range4,
|
|
time,
|
|
cd,
|
|
number,
|
|
time2
|
|
);
|
|
|
|
namespace mt
|
|
{
|
|
|
|
void SkillNumber::Init1()
|
|
{
|
|
#if 0
|
|
_int_ratio = a8::XValue(ratio());
|
|
_float_ratio = a8::XValue(ratio()).GetDouble();
|
|
if (ratio().find('%') != std::string::npos) {
|
|
std::string tmp_str = ratio();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_ratio = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_ratio2 = a8::XValue(ratio2());
|
|
_float_ratio2 = a8::XValue(ratio2()).GetDouble();
|
|
if (ratio2().find('%') != std::string::npos) {
|
|
std::string tmp_str = ratio2();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_ratio2 = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
#endif
|
|
|
|
_int_speed = a8::XValue(speed());
|
|
_float_speed = a8::XValue(speed()).GetDouble();
|
|
if (speed().find('%') != std::string::npos) {
|
|
std::string tmp_str = speed();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_speed = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_range = a8::XValue(range());
|
|
_float_range = a8::XValue(range()).GetDouble();
|
|
if (range().find('%') != std::string::npos) {
|
|
std::string tmp_str = range();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_range = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_range2 = a8::XValue(range2());
|
|
_float_range2 = a8::XValue(range2()).GetDouble();
|
|
if (range2().find('%') != std::string::npos) {
|
|
std::string tmp_str = range2();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_range2 = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_range3 = a8::XValue(range3());
|
|
_float_range3 = a8::XValue(range3()).GetDouble();
|
|
if (range3().find('%') != std::string::npos) {
|
|
std::string tmp_str = range3();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_range3 = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_range4 = a8::XValue(range4());
|
|
_float_range4 = a8::XValue(range4()).GetDouble();
|
|
if (range4().find('%') != std::string::npos) {
|
|
std::string tmp_str = range4();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_range4 = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_probability = a8::XValue(probability());
|
|
_float_probability = a8::XValue(probability()).GetDouble();
|
|
if (probability().find('%') != std::string::npos) {
|
|
std::string tmp_str = probability();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_probability = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_time = a8::XValue(time());
|
|
_float_time = a8::XValue(time()).GetDouble();
|
|
if (time().find('%') != std::string::npos) {
|
|
std::string tmp_str = time();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_time = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_time2 = a8::XValue(time2());
|
|
_float_time2 = a8::XValue(time2()).GetDouble();
|
|
if (time2().find('%') != std::string::npos) {
|
|
std::string tmp_str = time2();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_time2 = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
_int_cd = a8::XValue(cd());
|
|
_float_cd = a8::XValue(cd()).GetDouble();
|
|
if (cd().find('%') != std::string::npos) {
|
|
std::string tmp_str = cd();
|
|
a8::ReplaceString(tmp_str, "%", "");
|
|
_float_cd = a8::XValue(tmp_str).GetDouble() / 100;
|
|
}
|
|
|
|
{
|
|
const mt::Skill* skill_meta = mt::Skill::GetById(skill_id());
|
|
if (!skill_meta) {
|
|
abort();
|
|
}
|
|
#ifdef DEBUG
|
|
if (App::Instance()->instance_id == 600 ||
|
|
App::Instance()->instance_id == 100) {
|
|
_float_cd = 6;
|
|
}
|
|
#endif
|
|
//metatable::Skill* skill_pb = (metatable::Skill*)(skill_meta->pb);
|
|
//skill_pb->set_skill_cd(float_cd);
|
|
//skill_cd_ = _float_cd;
|
|
}
|
|
{
|
|
std::vector<std::string> strings;
|
|
a8::Split(effect_list(), strings, '|');
|
|
for (auto& str : strings) {
|
|
_effect_list.push_back(a8::XValue(str));
|
|
}
|
|
}
|
|
}
|
|
|
|
float SkillNumber::GetAttrByIdx(int idx)
|
|
{
|
|
switch ((SkillNumberLispField_e)idx) {
|
|
case SkillNumberLispField_e::damage:
|
|
{
|
|
return damage();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::damage_addition:
|
|
{
|
|
return damage_addition();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::damage_change:
|
|
{
|
|
return damage_change();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::shield:
|
|
{
|
|
return shield();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::shield_addition:
|
|
{
|
|
return shield_addition();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::resume:
|
|
{
|
|
return resume();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::resume_addition:
|
|
{
|
|
return resume_addition();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::speed:
|
|
{
|
|
return _float_speed;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::range:
|
|
{
|
|
return _float_range;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::range2:
|
|
{
|
|
return _float_range2;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::range3:
|
|
{
|
|
return _float_range3;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::range4:
|
|
{
|
|
return _float_range4;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::time:
|
|
{
|
|
return _float_time;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::cd:
|
|
{
|
|
return _float_cd;
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::number:
|
|
{
|
|
return number();
|
|
}
|
|
break;
|
|
case SkillNumberLispField_e::time2:
|
|
{
|
|
return _float_time2;
|
|
}
|
|
break;
|
|
default:
|
|
{
|
|
abort();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
int SkillNumber::GetAttrIdxByName(const std::string& name)
|
|
{
|
|
if (name == "${skillNumber.damage}") {
|
|
return (int)SkillNumberLispField_e::damage;
|
|
} else if (name == "${skillNumber.damage_addition}") {
|
|
return (int)SkillNumberLispField_e::damage_addition;
|
|
} else if (name == "${skillNumber.damage_change}") {
|
|
return (int)SkillNumberLispField_e::damage_change;
|
|
} else if (name == "${skillNumber.shield}") {
|
|
return (int)SkillNumberLispField_e::shield;
|
|
} else if (name == "${skillNumber.shield_addition}") {
|
|
return (int)SkillNumberLispField_e::shield_addition;
|
|
} else if (name == "${skillNumber.resume}") {
|
|
return (int)SkillNumberLispField_e::resume;
|
|
} else if (name == "${skillNumber.resume_addition}") {
|
|
return (int)SkillNumberLispField_e::resume_addition;
|
|
} else if (name == "${skillNumber.speed}") {
|
|
return (int)SkillNumberLispField_e::speed;
|
|
} else if (name == "${skillNumber.range}") {
|
|
return (int)SkillNumberLispField_e::range;
|
|
} else if (name == "${skillNumber.range2}") {
|
|
return (int)SkillNumberLispField_e::range2;
|
|
} else if (name == "${skillNumber.range3}") {
|
|
return (int)SkillNumberLispField_e::range3;
|
|
} else if (name == "${skillNumber.range4}") {
|
|
return (int)SkillNumberLispField_e::range4;
|
|
} else if (name == "${skillNumber.time}") {
|
|
return (int)SkillNumberLispField_e::time;
|
|
} else if (name == "${skillNumber.cd}") {
|
|
return (int)SkillNumberLispField_e::cd;
|
|
} else if (name == "${skillNumber.number}") {
|
|
return (int)SkillNumberLispField_e::number;
|
|
} else if (name == "${skillNumber.time2}") {
|
|
return (int)SkillNumberLispField_e::time2;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
}
|