diff --git a/server/gameserver/mt/Buff.cc b/server/gameserver/mt/Buff.cc index ac618697..4a598451 100644 --- a/server/gameserver/mt/Buff.cc +++ b/server/gameserver/mt/Buff.cc @@ -105,6 +105,13 @@ namespace mt _tags.insert(a8::XValue(str).GetInt()); } } + { + if (a8::lisp::Expr::MaybeExpr(duration_time())) { + _duration_time_expr = LispEnv::Instance()->CompileSkillNumberExpr(duration_time()); + } else { + _duration_time = a8::XValue(duration_time()).GetDouble(); + } + } { std::vector strings; a8::Split(post_remove_action(), strings, '|'); @@ -331,32 +338,72 @@ namespace mt skill_meta ); } - return 0.0f; + return _duration_time; } float Buff::GetBuffParam1(Creature* c, const mt::Skill* skill_meta) const { - + if (_buff_param1_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param1_expr, + c, + skill_meta + ); + } + return _buff_param1; } float Buff::GetBuffParam2(Creature* c, const mt::Skill* skill_meta) const { - + if (_buff_param2_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param2_expr, + c, + skill_meta + ); + } + return _buff_param2; } float Buff::GetBuffParam3(Creature* c, const mt::Skill* skill_meta) const { - + if (_buff_param3_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param3_expr, + c, + skill_meta + ); + } + return _buff_param3; } float Buff::GetBuffParam4(Creature* c, const mt::Skill* skill_meta) const { - + if (_buff_param4_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param4_expr, + c, + skill_meta + ); + } + return _buff_param4; } float Buff::GetBuffParam5(Creature* c, const mt::Skill* skill_meta) const { - + if (_buff_param5_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _buff_param5_expr, + c, + skill_meta + ); + } + return _buff_param5; } std::string Buff::duration_time() const diff --git a/third_party/a8 b/third_party/a8 index c4610bed..abee0bed 160000 --- a/third_party/a8 +++ b/third_party/a8 @@ -1 +1 @@ -Subproject commit c4610bed765a4b0fea47ef34dc9ecf8fbcaf3e68 +Subproject commit abee0bed17773019250dc4ed042fa8fd8763cf23