From eec621edc425b11eb12d09fd9825cac7972a5767 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 12 Oct 2022 19:48:29 +0800 Subject: [PATCH] 1 --- server/gameserver/buff.cc | 16 +++++++++++ server/gameserver/buff.h | 2 ++ server/gameserver/creature.cc | 10 +++++++ server/gameserver/skill.cc | 53 ++++++++++++++++++----------------- 4 files changed, 55 insertions(+), 26 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index aa77a632..75b952e8 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -1225,3 +1225,19 @@ void Buff::ClearEventHandlers() } event_handlers_.clear(); } + +void Buff::ProcRescuer() +{ + Human* target = owner->room->GetHumanByUniId(owner->AsHuman()->GetActionTargetId()); + if (target) { + owner->GetTrigger()->StartRescue(target); + } +} + +void Buff::ProcRemoveRescuer() +{ + Human* target = owner->room->GetHumanByUniId(owner->AsHuman()->GetActionTargetId()); + if (target) { + owner->GetTrigger()->EndRescue(target); + } +} diff --git a/server/gameserver/buff.h b/server/gameserver/buff.h index 10eeaf5f..f60c0aba 100644 --- a/server/gameserver/buff.h +++ b/server/gameserver/buff.h @@ -85,6 +85,8 @@ class Buff void ProcRemoveHoldShield(); void ProcHide(); void ProcRemoveHide(); + void ProcRescuer(); + void ProcRemoveRescuer(); void CalcPassengerShotOffset(); diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 077b1bd8..ffa2fca5 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -522,6 +522,11 @@ void Creature::OnBuffRemove(Buff& buff) int i = 0; } break; + case kBET_Rescuer: + { + buff.ProcRemoveRescuer(); + } + break; default: { } @@ -1235,6 +1240,11 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) buff->ProcHide(); } break; + case kBET_Rescuer: + { + buff->ProcRescuer(); + } + break; case kBET_SummonObstacle: { if (!dead || buff->meta->i->dead_valid() != 0) { diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 9be720e8..5b863bc2 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -711,41 +711,42 @@ void Skill::ProcGZJS() void Skill::ProcJYFH() { + int buff_id = SkillHelper::GetJyfhBuffId(meta); + float buff_time = SkillHelper::GetJyfhBuffTime(meta); + owner->GetTrigger()->AddListener ( kStartRescueEvent, - [this] (const std::vector& params) + [this, buff_id, buff_time] (const std::vector& params) { Human* target = std::any_cast(params.at(0)); - int buff_id = SkillHelper::GetJyfhBuffId(meta); - float buff_time = SkillHelper::GetJyfhBuffTime(meta); owner->TryAddBuffAndSetTime(owner, buff_id, buff_time, meta); target->TryAddBuffAndSetTime(owner, buff_id, buff_time, meta); - owner->GetTrigger()->AddListener - ( - kEndRescueEvent, - [this, buff_id] (const std::vector& params) - { - Human* target = std::any_cast(params.at(0)); - owner->RemoveBuffById(buff_id); - target->RemoveBuffById(buff_id); - } - ); -#ifdef DEBUG - { - std::string dbg_msg = a8::Format - ( - "skill_id:%d 救援防护 time:%f", - { - meta->i->skill_id(), - buff_time - }); - owner->SendDebugMsg(dbg_msg); - a8::XPrintf("%s\n", {dbg_msg}); - } -#endif } ); + owner->GetTrigger()->AddListener + ( + kEndRescueEvent, + [this, buff_id] (const std::vector& params) + { + Human* target = std::any_cast(params.at(0)); + owner->RemoveBuffById(buff_id); + target->RemoveBuffById(buff_id); + } + ); +#ifdef DEBUG + { + std::string dbg_msg = a8::Format + ( + "skill_id:%d 救援防护 time:%f", + { + meta->i->skill_id(), + buff_time + }); + owner->SendDebugMsg(dbg_msg); + a8::XPrintf("%s\n", {dbg_msg}); + } +#endif } void Skill::ProcFH()