From f84d35b8e6b9d9d5797561599153811bcdafaf3c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 22 Jul 2021 11:31:00 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ai=E5=9F=BA=E7=A1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/android.ai.cc | 2 +- server/gameserver/constant_export.h | 8 ++++++++ server/gameserver/hero.ai.cc | 2 +- server/gameserver/metadata.cc | 5 +++++ server/gameserver/metadata.h | 17 +++++++++++++++++ server/gameserver/metamgr.cc | 14 +++++++++++--- server/gameserver/metamgr.h | 3 ++- server/gameserver/zombiemode.ai.cc | 2 +- server/tools/protobuild/metatable.proto | 8 ++++++++ 9 files changed, 54 insertions(+), 7 deletions(-) diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 635e0c5..d06ed42 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -245,7 +245,7 @@ void AndroidAI::UpdateNewAI() return; } if (!ai_meta && GetAiLevel() != 0) { - ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 0); + ai_meta = MetaMgr::Instance()->GetAndroidAI(GetAiLevel(), 0); if (!ai_meta) { abort(); } diff --git a/server/gameserver/constant_export.h b/server/gameserver/constant_export.h index 5914235..60ed9c2 100644 --- a/server/gameserver/constant_export.h +++ b/server/gameserver/constant_export.h @@ -116,3 +116,11 @@ enum EntityType_e ET_Unuse = 30, ET_MAX }; + +enum AIKind_e +{ + kAI_Begin = 0, + kAI_Android = 1, + kAI_MineSweeper = 2, + kAI_End +}; diff --git a/server/gameserver/hero.ai.cc b/server/gameserver/hero.ai.cc index 9bb53ed..054b487 100644 --- a/server/gameserver/hero.ai.cc +++ b/server/gameserver/hero.ai.cc @@ -76,7 +76,7 @@ void HeroAI::UpdateAI() { Hero* hero = (Hero*)owner; if (!ai_meta && GetAiLevel() != 0) { - ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 0); + ai_meta = MetaMgr::Instance()->GetAndroidAI(GetAiLevel(), 0); if (!ai_meta) { abort(); } diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 485869f..451460b 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -1110,6 +1110,11 @@ namespace MetaData } } + void AI::Init2() + { + + } + int AI::GetMoveIdleTime() { return a8::RandEx( diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 105d277..27a010c 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -291,9 +291,26 @@ namespace MetaData { const metatable::AI* i = nullptr; void Init(); + void Init2(); int GetMoveIdleTime(); int GetMoveTime(); + float param1 = 0.0f; + float param2 = 0.0f; + float param3 = 0.0f; + float param4 = 0.0f; + float param5 = 0.0f; + int int_param1 = 0; + int int_param2 = 0; + int int_param3 = 0; + int int_param4 = 0; + int int_param5 = 0; + std::vector int_list_param1; + std::vector int_list_param2; + std::vector int_list_param3; + std::vector int_list_param4; + std::vector int_list_param5; + private: std::tuple random_move_idle_time_; std::tuple random_move_time_; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 46de99a..9e4a965 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -99,6 +99,7 @@ public: std::map equipupgrade_hash; std::map robot_hash; std::map> airline_hash; + std::map android_ai_hash; std::map ai_hash; std::map text_hash; @@ -691,7 +692,8 @@ private: MetaData::AI& item = a8::FastAppend(ai_list); item.i = &meta; item.Init(); - ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; + ai_hash[item.i->id()] = &item; + android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; } for (auto& meta : text_meta_list) { @@ -963,9 +965,15 @@ MetaData::Robot* MetaMgr::RandRobot(std::set& refreshed_robot_set) } } -MetaData::AI* MetaMgr::GetAI(int ai_level, int ai_mode) +MetaData::AI* MetaMgr::GetAndroidAI(int ai_level, int ai_mode) { - auto itr = loader_->ai_hash.find(a8::MakeInt64(ai_level, ai_mode)); + auto itr = loader_->android_ai_hash.find(a8::MakeInt64(ai_level, ai_mode)); + return itr != loader_->android_ai_hash.end() ? itr->second : nullptr; +} + +MetaData::AI* MetaMgr::GetHeroAI(int id) +{ + auto itr = loader_->ai_hash.find(id); return itr != loader_->ai_hash.end() ? itr->second : nullptr; } diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 79def08..672cf10 100644 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -55,7 +55,8 @@ 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, int ai_mode); + MetaData::AI* GetAndroidAI(int ai_level, int ai_mode); + MetaData::AI* GetHeroAI(int id); std::string GetText(const std::string& textid, const std::string& def_text=""); int gas_inactive_time = 10; diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 0f7884f..3238c64 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -91,7 +91,7 @@ void ZombieModeAI::UpdateAI() return; } if (!node_->ai_meta && GetAiLevel() != 0) { - node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), GetAiMode()); + node_->ai_meta = MetaMgr::Instance()->GetAndroidAI(GetAiLevel(), GetAiMode()); if (!node_->ai_meta) { abort(); } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 664b90f..8db88ec 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -187,6 +187,7 @@ message Player optional int32 default_weapon = 28; optional int32 dead_drop = 29; optional int32 delay_delete = 39; + optional int32 ai = 46; } message Robot @@ -337,6 +338,7 @@ message KillPoint message AI { + optional int32 id = 13; optional int32 ai_level = 1; optional int32 pursuit_radius = 2; optional int32 attack_interval = 3; @@ -348,6 +350,12 @@ message AI optional int32 attack_range = 10; optional float attack_rate = 11; optional int32 ai_mode = 12; + optional int32 ai_kind = 14; + optional string param1 = 15; + optional string param2 = 16; + optional string param3 = 17; + optional string param4 = 18; + optional string param5 = 19; } message Text