From a9b23fbf6f9bdbdb10019eaa1a7869d7e6626ca0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 17 Mar 2023 21:44:28 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/cond_add.cc | 52 +++++++++++++++++++++ server/gameserver/buff/cond_add.h | 1 - server/gameserver/buff/event_add.cc | 72 ----------------------------- server/gameserver/buff/event_add.h | 5 -- server/gameserver/player.cc | 6 +++ 5 files changed, 58 insertions(+), 78 deletions(-) diff --git a/server/gameserver/buff/cond_add.cc b/server/gameserver/buff/cond_add.cc index a1ca8430..4006093b 100644 --- a/server/gameserver/buff/cond_add.cc +++ b/server/gameserver/buff/cond_add.cc @@ -142,7 +142,59 @@ void CondAddBuff::ProcBulletEnd() void CondAddBuff::ProcDisengageBattle() { + #if 0 + const float disengate_time = meta->GetBuffParam2(this); + auto context = A8_MAKE_ANON_STRUCT_SHARED + ( + ); + + std::get<0>(*context.get()) = 0; + a8::XTimerWp timer = owner->room->xtimer.SetIntervalWpEx + ( + disengate_time * SERVER_FRAME_RATE, + [this, context] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + if (!owner->dead) { + if (std::get<0>(*context.get()) == 0) { + std::get<0>(*context.get()) = 1; + #if 0 + owner->AddEnergyShield(meta->_number_meta->shield() * owner->GetMaxHP()); + #endif + } + } + } + }, + &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->RemoveBuffByUniId(buff_uniid); + } + std::get<0>(*context.get()) = 0; + std::get<1>(*context.get()).clear(); + } + }; + + owner->GetTrigger()->AddListener + ( + kDieEvent, + cb + ); + owner->GetTrigger()->AddListener + ( + kReceiveDmgEvent, + cb + ); + #endif } void CondAddBuff::ProcLimitTimeKillTarget() diff --git a/server/gameserver/buff/cond_add.h b/server/gameserver/buff/cond_add.h index 3a6e94a4..b8d2b24e 100644 --- a/server/gameserver/buff/cond_add.h +++ b/server/gameserver/buff/cond_add.h @@ -30,5 +30,4 @@ class CondAddBuff : public Buff private: std::vector> handlers_; - }; diff --git a/server/gameserver/buff/event_add.cc b/server/gameserver/buff/event_add.cc index 9fcc0623..6ba85207 100644 --- a/server/gameserver/buff/event_add.cc +++ b/server/gameserver/buff/event_add.cc @@ -16,81 +16,9 @@ void EventAddBuff::Activate() A8_ABORT(); } list_add_tail(&cond_entry, &owner->cond_buffs_[meta->_int_buff_param1]); - switch (meta->_int_buff_param1) { - case kEventBuffDisengageBattle: - { - ProcDisengageBattle(); - } - break; - case kEventBuffLimitTimeKillTarget: - { - ProcLimitTimeSkillTarget(); - } - break; - default: - { - } - break; - } } void EventAddBuff::Deactivate() { } - -void EventAddBuff::ProcDisengageBattle() -{ - #if 0 - auto context = std::make_shared>>(); - std::get<0>(*context.get()) = 0; - a8::XTimerWp timer = owner->room->xtimer.SetIntervalWpEx - ( - skill_meta->_number_meta->number() * SERVER_FRAME_RATE, - [this, context] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - if (!owner->dead) { - if (std::get<0>(*context.get()) == 0) { - std::get<0>(*context.get()) = 1; - owner->AddEnergyShield(meta->_number_meta->shield() * owner->GetMaxHP()); - } - } - } - }, - &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->RemoveBuffByUniId(buff_uniid); - } - std::get<0>(*context.get()) = 0; - std::get<1>(*context.get()).clear(); - owner->ClearEnergyShield(); - } - }; - - owner->GetTrigger()->AddListener - ( - kDieEvent, - cb - ); - owner->GetTrigger()->AddListener - ( - kReceiveDmgEvent, - cb - ); - #endif -} - -void EventAddBuff::ProcLimitTimeSkillTarget() -{ - -} diff --git a/server/gameserver/buff/event_add.h b/server/gameserver/buff/event_add.h index 130f920d..a92136f1 100644 --- a/server/gameserver/buff/event_add.h +++ b/server/gameserver/buff/event_add.h @@ -9,9 +9,4 @@ class EventAddBuff : public Buff virtual void Activate() override; virtual void Deactivate() override; -private: - - void ProcDisengageBattle(); - void ProcLimitTimeSkillTarget(); - }; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 9b7795ed..0c916b5d 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -616,6 +616,12 @@ void Player::ProcInteraction() if (HasBuffEffect(kBET_Jump)) { return; } + if (dead) { + return; + } + if (downed) { + return; + } cs::SMGetItemNotify notify_msg; for (auto obj_id : interaction_objids) { Entity* entity = room->GetEntityByUniId(obj_id);