diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 6dd2256e..0f82b79b 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -315,10 +315,12 @@ void Skill::Proc30101HL() void Skill::Proc30201HX() { #if 1 - a8::XTimerWp recover_timer = owner->room->xtimer.SetIntervalWpEx + auto context = std::make_shared>>(); + std::get<0>(*context.get()) = 0; + a8::XTimerWp timer = owner->room->xtimer.SetIntervalWpEx ( - GetCd() / FRAME_RATE_MS, - [this] (int event, const a8::Args* args) + meta->_number_meta->number() * SERVER_FRAME_RATE, + [this, context] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { if (!owner->dead) { @@ -328,16 +330,31 @@ void Skill::Proc30201HX() }, &xtimer_attacher); + auto cb = + [this, timer, context] (const a8::Args& args) mutable + { + if (timer.expired()) { + return; + } + owner->room->xtimer.ResetTimer(timer); + if (std::get<0>(*context.get()) == 1) { + for (int buff_uniid : std::get<1>(*context.get())) { + + } + } + }; + + owner->GetTrigger()->AddListener + ( + kDieEvent, + cb + ); owner->GetTrigger()->AddListener ( kReceiveDmgEvent, - [this, recover_timer] (const a8::Args& args) mutable - { - if (!recover_timer.expired()) { - owner->room->xtimer.ResetTimer(recover_timer); - } - } + cb ); + #else a8::XTimerWp add_speed_timer; owner->GetTrigger()->AddListener diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 3ded24b1..5a095109 100644 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -69,7 +69,7 @@ struct Position glm::vec3 ToGlmVec3() const { return loc_; }; - const Position& AddGlmVec3(const glm::vec3& v) { loc_ += v; }; + const Position& AddGlmVec3(const glm::vec3& v) { loc_ += v; return *this; }; private: glm::vec3 loc_ = glm::vec3(0.0, 0.0, 0.0);