diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 854facf0..258f7d12 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -167,6 +167,11 @@ void CallFuncBuff::Activate() owner->room->frame_event.AddHpChg(owner->GetWeakPtrRef()); } break; + case BuffCallFunc_e::kSummonCarSpecPoint: + { + SummonCarSpecPoint(); + } + break; default: { } @@ -870,3 +875,8 @@ void CallFuncBuff::ProcAddMaxHp() owner->SetMaxHP(owner->GetMaxHP() + hold_param2_); } } + +void CallFuncBuff::SummonCarSpecPoint() +{ + +} diff --git a/server/gameserver/buff/callfunc.h b/server/gameserver/buff/callfunc.h index ae3ecbf3..4f394caa 100644 --- a/server/gameserver/buff/callfunc.h +++ b/server/gameserver/buff/callfunc.h @@ -27,6 +27,7 @@ A8_DECLARE_CLASS_ENUM(BuffCallFunc_e, int, kDecSkillCd = 27, kRefreshHp = 28, kAddMaxHp = 29, + kSummonCarSpecPoint = 30 ); @@ -56,6 +57,7 @@ class CallFuncBuff : public Buff void SummonObstacleSpecDistance(); void ClearSummonObstacle(); void DecSkillCd(); + void SummonCarSpecPoint(); float hold_param2_ = 0.0; Weapon* hold_weapon_ = nullptr; diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 6873ffde..5933ed62 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -11,6 +11,7 @@ #include "bullet.h" #include "buff.h" #include "stats.h" +#include "team.h" #include "mt/Buff.h" #include "mt/Skill.h" @@ -269,7 +270,33 @@ void Trigger::Die(int killer_id, int weapon_id) owner_->RemoveBuffByUniId(buff_uniid); } } - TriggeCondBuffAll(kEventBuffDid); + Creature* killer = owner_->room->GetCreatureByUniId(killer_id); + TraverseCondBuffs + (kEventBuffDid, + [this, killer, killer_id] (Buff* buff, bool& stop) + { + switch (buff->meta->_int_buff_param2) { + case 0: + { + AddBuffs(buff, kEventBuffDid, buff->meta->_buff_param4_int_list); + } + break; + case 1: + { + if (killer && killer->IsHuman()) { + auto buff_vars = std::make_shared>(); + buff_vars->push_back(killer->GetUniId()); + buff_vars->push_back(killer->GetTeam()->GetTeamId()); + AddBuffs(buff, kEventBuffDid, buff->meta->_buff_param4_int_list, buff_vars); + } + } + break; + default: + { + } + break; + } + }); DispatchEvent(kDieEvent, {killer_id, weapon_id}); }