diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 65b4a7f..6657f5f 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -410,7 +410,7 @@ void AndroidNewAI::UpdateNewAI() return; } if (!ai_meta && GetAiLevel() != 0) { - ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel()); + ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 0); if (!ai_meta) { abort(); } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 73f57b4..3508847 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -602,12 +602,7 @@ private: MetaData::AI& item = a8::FastAppend(ai_list); item.i = &meta; item.Init(); - ai_hash[meta.ai_level()] = &item; - } - for (int i = 1; i <= MAX_AI_LEVEL; ++i) { - if (ai_hash.find(i) == ai_hash.end()) { - abort(); - } + ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; } } @@ -836,8 +831,8 @@ MetaData::Robot* MetaMgr::RandRobot(std::set& refreshed_robot_set) } } -MetaData::AI* MetaMgr::GetAI(int ai_level) +MetaData::AI* MetaMgr::GetAI(int ai_level, int ai_mode) { - auto itr = loader_->ai_hash.find(ai_level); + auto itr = loader_->ai_hash.find(a8::MakeInt64(ai_level, ai_mode)); return itr != loader_->ai_hash.end() ? itr->second : nullptr; } diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index de59096..0accc4e 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -47,7 +47,7 @@ class MetaMgr : public a8::Singleton int GetKillPointParam1(int kill_num); int GetKillPointParam2(int kill_num); MetaData::Robot* RandRobot(std::set& refreshed_robot_set); - MetaData::AI* GetAI(int ai_level); + MetaData::AI* GetAI(int ai_level, int ai_mode); int gas_inactive_time = 10; int newbie_gas_inactive_time = 5; diff --git a/server/gameserver/zombie.ai.cc b/server/gameserver/zombie.ai.cc index 17ec0f2..47f8c15 100644 --- a/server/gameserver/zombie.ai.cc +++ b/server/gameserver/zombie.ai.cc @@ -97,7 +97,7 @@ void ZombieAI::UpdateAI() return; } if (!node_->ai_meta && GetAiLevel() != 0) { - node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel()); + node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 1); if (!node_->ai_meta) { abort(); } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 848789f..c479199 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -263,6 +263,7 @@ message AI optional string random_move_time = 9; optional int32 attack_range = 10; optional float attack_rate = 11; + optional int32 ai_mode = 12; } //end