From 50e68ed8545d6c263cf9ba5e8252879991f97fbc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 6 Mar 2023 10:24:21 +0800 Subject: [PATCH] 1 --- server/gameserver/app.cc | 6 -- server/gameserver/buff/callfunc.cc | 1 + server/gameserver/mt/SkillNumber.cc | 111 +++++++++++++++++++++++++++- 3 files changed, 108 insertions(+), 10 deletions(-) diff --git a/server/gameserver/app.cc b/server/gameserver/app.cc index 0b8ee810..4fc0fd20 100644 --- a/server/gameserver/app.cc +++ b/server/gameserver/app.cc @@ -122,12 +122,6 @@ static void SavePerfLog() bool App::Init(int argc, char* argv[]) { - { - auto env = std::make_shared(); - auto p = a8::lisp::Expr::Compile("(+ 1 3 (+ 100 200))", env); - auto ret = a8::lisp::Expr::Eval(p, env); - a8::XPrintf("p:%s ret:%f\n", {p->ToXObject().ToJsonStr(), ret->ToXObject().ToJsonStr()}); - } signal(SIGPIPE, SIG_IGN); this->argc = argc; this->argv = argv; diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index b2d33ae5..8026d700 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -31,6 +31,7 @@ void CallFuncBuff::Activate() break; case BuffCallFunc_e::kDecHp: { + hold_param2_ = meta->GetBuffParam2(owner, skill_meta); } break; case BuffCallFunc_e::kMarkTag: diff --git a/server/gameserver/mt/SkillNumber.cc b/server/gameserver/mt/SkillNumber.cc index b268e9d0..13677e53 100644 --- a/server/gameserver/mt/SkillNumber.cc +++ b/server/gameserver/mt/SkillNumber.cc @@ -1,10 +1,28 @@ #include "precompile.h" +#include + #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 + ); + namespace mt { @@ -107,15 +125,100 @@ namespace mt 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; + default: + { + abort(); + } + break; + } } int SkillNumber::GetAttrIdxByName(const std::string& name) { - if (name == "${skillNumber.speed}") { - return 0; + 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; } - return -1; + abort(); } }