diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 6d175d36..50ad20c4 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -77,7 +77,7 @@ int Buff::GetLeftTime() int Buff::GetLastingTime() { - return meta->GetDurationTime(skill_meta) * 1000; + return meta->GetDurationTime(owner, skill_meta) * 1000; } void Buff::InternalTimerAddBuff() diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 1b2ac97b..b4b3b81f 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -275,7 +275,7 @@ int Creature::AddBuff(Creature* caster, { buff->remover_timer = room->xtimer.SetTimeoutWpEx ( - buff_meta->GetDurationTime(buff_skill_meta) * SERVER_FRAME_RATE, + buff_meta->GetDurationTime(this, buff_skill_meta) * SERVER_FRAME_RATE, [buff_wp = (std::weak_ptr)buff] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { diff --git a/server/gameserver/mt/Buff.cc b/server/gameserver/mt/Buff.cc index 4e2f0a04..ac618697 100644 --- a/server/gameserver/mt/Buff.cc +++ b/server/gameserver/mt/Buff.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include "lispenv.h" + #include "mt/Buff.h" #include "mt/Hero.h" @@ -319,11 +321,44 @@ namespace mt } } - float Buff::GetDurationTime(const mt::Skill* skill_meta) const + float Buff::GetDurationTime(Creature* c, const mt::Skill* skill_meta) const { + if (_duration_time_expr) { + return LispEnv::Instance()->EvalSkillNumberExpr + ( + _duration_time_expr, + c, + skill_meta + ); + } return 0.0f; } + float Buff::GetBuffParam1(Creature* c, const mt::Skill* skill_meta) const + { + + } + + float Buff::GetBuffParam2(Creature* c, const mt::Skill* skill_meta) const + { + + } + + float Buff::GetBuffParam3(Creature* c, const mt::Skill* skill_meta) const + { + + } + + float Buff::GetBuffParam4(Creature* c, const mt::Skill* skill_meta) const + { + + } + + float Buff::GetBuffParam5(Creature* c, const mt::Skill* skill_meta) const + { + + } + std::string Buff::duration_time() const { return mtb::Buff::duration_time(); diff --git a/server/gameserver/mt/Buff.h b/server/gameserver/mt/Buff.h index 780d3eb8..3df3bace 100644 --- a/server/gameserver/mt/Buff.h +++ b/server/gameserver/mt/Buff.h @@ -12,6 +12,7 @@ namespace a8 } +class Creature; namespace mt { @@ -53,11 +54,21 @@ namespace mt std::vector _child_buff_list; - float GetDurationTime(const mt::Skill* skill_meta) const; + float GetDurationTime(Creature* c, const mt::Skill* skill_meta) const; + float GetBuffParam1(Creature* c, const mt::Skill* skill_meta) const; + float GetBuffParam2(Creature*, const mt::Skill* skill_meta) const; + float GetBuffParam3(Creature* c, const mt::Skill* skill_meta) const; + float GetBuffParam4(Creature* c, const mt::Skill* skill_meta) const; + float GetBuffParam5(Creature* c, const mt::Skill* skill_meta) const; private: float _duration_time = 0.0f; std::shared_ptr _duration_time_expr; + std::shared_ptr _buff_param1_expr; + std::shared_ptr _buff_param2_expr; + std::shared_ptr _buff_param3_expr; + std::shared_ptr _buff_param4_expr; + std::shared_ptr _buff_param5_expr; std::string duration_time() const;