diff --git a/server/gameserver/selfchecker.cc b/server/gameserver/selfchecker.cc index b5c039a1..277b4089 100644 --- a/server/gameserver/selfchecker.cc +++ b/server/gameserver/selfchecker.cc @@ -1,10 +1,18 @@ #include "precompile.h" +#include + #include "selfchecker.h" +#include "mt/Equip.h" +#include "mt/Buff.h" + +std::set SelfChecker::used_buffs; + void SelfChecker::Init() { - std::set buff_list({ + #if 0 + std::set used_buffs({ 1005, 1025, 1039, @@ -15,6 +23,44 @@ void SelfChecker::Init() FLY_BUFFID, JUMP_BUFFID }); + #endif + auto fields = a8::GetEnumFields(); + for (auto& pair : *fields) { + AddBuff(pair.second); + } + mt::Equip::Traverse + ( + [] (const mt::Equip* meta, bool& stop) + { + if (meta->buffid()) { + SelfChecker::AddBuff(meta->buffid()); + } + if (meta->equip_subtype() == GUN_SUB_EQUIP_TYPE_FLY_HOOk) { + SelfCheker::AddBuff(meta->_int_param1); + SelfChecker::AddBuff(meta->_int_param2); + } + if (meta->equip_type() == EQUIP_TYPE_THROW && + meta->equip_subtype() == THROW_EQUIP_TYPE_ADD_BUFF) { + SelfCheker::AddBuff(meta->_int_param1); + } + switch (meta->_inventory_slot()) { + case IS_C4: + { + SelfCheker::AddBuff(meta->_int_param1); + } + break; + default: + { + } + break; + } + }); + mt::Buff::Traverse + ( + [] (const mt::Buff* meta, bool& stop) + { + + }); } void SelfChecker::UnInit() @@ -26,3 +72,11 @@ void SelfChecker::Check() { } + +void SelfChecker::AddBuff(int buff_id) +{ + if (!mt::Buff::GetById(buff_id)) { + abort(); + } + used_buffs.insert(buff_id); +} diff --git a/server/gameserver/selfchecker.h b/server/gameserver/selfchecker.h index a7165a2e..becb982e 100644 --- a/server/gameserver/selfchecker.h +++ b/server/gameserver/selfchecker.h @@ -7,4 +7,9 @@ class SelfChecker static void UnInit(); static void Check(); + + private: + static void AddBuff(int buff_id); + + static std::set used_buffs; };