game2006/server/gameserver/mt/SkillNumber.cc
aozhiwei 9805565612 1
2023-03-13 15:11:17 +08:00

233 lines
7.5 KiB
C++

#include "precompile.h"
#include <a8/magicenum.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,
time,
cd,
number
);
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_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_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();
}
#if 1
_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::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::time:
{
return _float_time;
}
break;
case SkillNumberLispField_e::cd:
{
return _float_cd;
}
break;
case SkillNumberLispField_e::number:
{
return number();
}
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.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;
}
return -1;
}
}