diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 21901f91..a778c48c 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -506,6 +506,32 @@ void CallFuncBuff::ProcLightCircle() } } ); + + owner->GetTrigger()->AddListener + ( + kStartJump, + [this, context] (const a8::Args& args) mutable + { + if (context->keep_buff_uniid) { + owner->RemoveBuffByUniId(context->keep_buff_uniid); + context->keep_buff_uniid = 0; + } + } + ); + + owner->GetTrigger()->AddListener + ( + kEndJump, + [this, context] (const a8::Args& args) mutable + { + if (context->keep_buff_uniid) { + owner->RemoveBuffByUniId(context->keep_buff_uniid); + context->keep_buff_uniid = 0; + } + context->keep_buff_uniid = owner->TryAddBuff(GetCaster().Get(), meta->_int_buff_param4, skill_meta); + } + ); + } { context->keep_buff_uniid = owner->TryAddBuff(GetCaster().Get(), meta->_int_buff_param4, skill_meta); diff --git a/server/gameserver/buff/jump.cc b/server/gameserver/buff/jump.cc index 551dd4ea..c4590c0f 100644 --- a/server/gameserver/buff/jump.cc +++ b/server/gameserver/buff/jump.cc @@ -5,10 +5,11 @@ #include "creature.h" #include "human.h" #include "room.h" +#include "trigger.h" void JumpBuff::Activate() { - + owner->GetTrigger()->StartJump(owner); } void JumpBuff::Deactivate() @@ -22,6 +23,7 @@ void JumpBuff::Deactivate() if (a8::TIMER_EXEC_EVENT == event) { if (c.Get()) { c.Get()->OnLand(); + c.Get()->GetTrigger()->EndJump(c.Get()); } } }, diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index ec8d2423..e42452b1 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -496,3 +496,13 @@ void Trigger::BulletBlock(IBullet* bullet, const glm::vec3& pos) { DispatchEvent(kBulletBlockEvent, {bullet, pos}); } + +void Trigger::StartJump(Creature* sender) +{ + DispatchEvent(kStartJump, {}); +} + +void Trigger::EndJump(Creature* sender) +{ + DispatchEvent(kEndJump, {}); +} diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index a639ec1e..a9eed9ee 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -38,7 +38,9 @@ enum EventId_e kDmgOutEvent, kHpChgEvent, kRevive, - kAttacked + kAttacked, + kStartJump, + kEndJump, }; class Weapon; @@ -78,6 +80,8 @@ public: void Attacked(Creature* sender); void DmgOut(Creature* target, float dmg); void BulletBlock(IBullet* bullet, const glm::vec3& pos); + void StartJump(Creature* sender); + void EndJump(Creature* sender); std::weak_ptr AddListener(int event_id, a8::CommonCbProc cb); void RemoveEventHandler(std::weak_ptr handler_ptr);