From 892da19824b85b2e8c8e68a8fad9b0da80599567 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 6 Mar 2024 16:19:18 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/callfunc.cc | 67 ++++++++++++++++++++++++++++++ server/gameserver/buff/callfunc.h | 6 +++ 2 files changed, 73 insertions(+) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 46511b24..aea890d9 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -245,6 +245,21 @@ void CallFuncBuff::Activate() BatchRandomPosSummonObstacle(); } break; + case BuffCallFunc_e::kOnBreakSkill: + { + OnBreakSkill(); + } + break; + case BuffCallFunc_e::kBreakSkill: + { + BreakSkill(); + } + break; + case BuffCallFunc_e::kBuffEffectCondAdd: + { + BuffEffectCondAdd(); + } + break; default: { } @@ -1580,3 +1595,55 @@ void CallFuncBuff::BatchRandomPosSummonObstacle() } } } + +void CallFuncBuff::OnBreakSkill() +{ + +} + +void CallFuncBuff::BreakSkill() +{ + Buff* on_break_buff = nullptr; + for (auto buff_id : meta->_buff_param2_int_list) { + on_break_buff = owner->GetBuffById(buff_id); + if (on_break_buff) { + break; + } + } + if (on_break_buff) { + int buff_uniid = on_break_buff->buff_uniid; + for (auto buff_id : meta->_buff_param3_int_list) { + if (buff_id > 0) { + owner->TryAddBuff( + GetCaster().Get(), + buff_id, + skill_meta, + init_args, + buff_vars + ); + } else { + owner->RemoveBuffById(-buff_id); + } + } + owner->RemoveBuffByUniId(buff_uniid); + } else { + for (auto buff_id : meta->_buff_param4_int_list) { + if (buff_id > 0) { + owner->TryAddBuff( + GetCaster().Get(), + buff_id, + skill_meta, + init_args, + buff_vars + ); + } else { + owner->RemoveBuffById(-buff_id); + } + } + } +} + +void CallFuncBuff::BuffEffectCondAdd() +{ + +} diff --git a/server/gameserver/buff/callfunc.h b/server/gameserver/buff/callfunc.h index a38b5abe..902c0835 100644 --- a/server/gameserver/buff/callfunc.h +++ b/server/gameserver/buff/callfunc.h @@ -40,6 +40,9 @@ A8_DECLARE_CLASS_ENUM(BuffCallFunc_e, int, kAccumulatePower = 40, kCallShot = 41, kBatchRandomPosSummonObstacle = 42, + kOnBreakSkill = 43, + kBreakSkill = 44, + kBuffEffectCondAdd = 45 ); @@ -78,6 +81,9 @@ class CallFuncBuff : public Buff void AccumulatePower(); void Shot(); void BatchRandomPosSummonObstacle(); + void OnBreakSkill(); + void BreakSkill(); + void BuffEffectCondAdd(); void InternalRangeHoldBuff(std::function get_center_func);