From 7254d889a3534c9a8081e0752573f78d5ca01f29 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 20 May 2024 15:47:18 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 1 + server/gameserver/human.cc | 1 + server/gameserver/trigger.cc | 17 +++++++++++++++++ server/gameserver/trigger.h | 1 + 4 files changed, 20 insertions(+) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 5bfac351..c0615f03 100644 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -376,6 +376,7 @@ enum EventAddBuff_e kEventBuffDmgOut = 19, kEventEnterBattleMode = 20, kEventLeaveBattleMode = 21, + kEventBeAttack = 22, kEventBuffEnd }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4dfa8638..11643420 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -432,6 +432,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string killer_name, in only_self); } } + GetTrigger()->BeAttack(killer_id); } GetTrigger()->HpChg(); room->OnTeamPartChg(this); diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 22991a75..56a7f145 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -706,3 +706,20 @@ void Trigger::LeaveBattleMode() } }); } + + +void Trigger::BeAttack(int attacker_id) +{ + TraverseCondBuffs + (kEventBeAttack, + [this] (Buff* buff, bool& stop) + { + for (int buff_id : buff->meta->_buff_param4_int_list) { + if (buff_id > 0) { + owner_->TryAddBuff(owner_, buff_id, buff->skill_meta); + } else { + owner_->ClearBuffById(-buff_id); + } + } + }); +} diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index de3cf071..a179c2a0 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -89,6 +89,7 @@ public: void EnterCrazeMode(); void EnterBattleMode(); void LeaveBattleMode(); + void BeAttack(int attacker_id); std::weak_ptr AddListener(int event_id, a8::CommonCbProc cb); void RemoveEventHandler(std::weak_ptr handler_ptr);