From 3ee4fb2175e21df87a06d9da0fda985c35fd4304 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 28 Jun 2021 06:08:21 +0000 Subject: [PATCH] 1 --- server/gameserver/buff.cc | 5 ----- server/gameserver/buff.h | 1 - server/gameserver/creature.cc | 8 +++++++- server/gameserver/global.cc | 5 +++++ server/gameserver/global.h | 1 + server/gameserver/metadata.cc | 5 +++++ 6 files changed, 18 insertions(+), 7 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 7214b47..6ebce80 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -491,8 +491,3 @@ void Buff::ProcPullToWalkable() owner->FindLocation(); } } - -void Buff::ProcCondAddBuff() -{ - -} diff --git a/server/gameserver/buff.h b/server/gameserver/buff.h index b438383..58ed6dd 100644 --- a/server/gameserver/buff.h +++ b/server/gameserver/buff.h @@ -57,7 +57,6 @@ class Buff void ProcSeletTargetWithSelfPos(); void ProcTurnOver(); void ProcPullToWalkable(); - void ProcCondAddBuff(); private: void InternalTimerAddBuff(); diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index b3f920c..430f6d9 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -288,6 +288,9 @@ void Creature::RemoveBuffById(int buff_id) if (!list_empty(&buff.depend_entry)) { list_del_init(&buff.depend_entry); } + if (!list_empty(&buff.cond_entry)) { + list_del_init(&buff.cond_entry); + } removed_buffs.push_back(std::make_tuple(buff.meta, buff.GetCaster().Get())); OnBuffRemove(buff); buff_list_.erase(itr); @@ -1001,7 +1004,10 @@ void Creature::ProcBuffEffect(Creature* caster, Buff* buff) break; case kBET_CondAddBuff: { - buff->ProcCondAddBuff(); + if (!IsValidCondBuff(buff->meta->int_param1)) { + abort(); + } + list_add_tail(&buff->cond_entry, &cond_buffs_[buff->meta->int_param1]); } break; default: diff --git a/server/gameserver/global.cc b/server/gameserver/global.cc index cc9682e..48471a1 100755 --- a/server/gameserver/global.cc +++ b/server/gameserver/global.cc @@ -46,3 +46,8 @@ bool IsValidHumanAttr(int attr_type) { return attr_type > kHAT_Begin && attr_type < kHAT_End; } + +bool IsValidCondBuff(int cond) +{ + return cond >= 0 && cond < kCondBuffEnd; +} diff --git a/server/gameserver/global.h b/server/gameserver/global.h index 45276ab..799488d 100755 --- a/server/gameserver/global.h +++ b/server/gameserver/global.h @@ -24,3 +24,4 @@ class Global : public a8::Singleton bool IsValidSlotId(int slot_id); bool IsValidBuffEffect(int buff_effect); bool IsValidHumanAttr(int attr_type); +bool IsValidCondBuff(int cond); diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index b3dc436..f14d3d5 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -888,6 +888,11 @@ namespace MetaData } } } + if (i->buff_effect() == kBET_CondAddBuff) { + if (!IsValidCondBuff(int_param1)) { + abort(); + } + } } bool Buff::EffectCanStack()