From 3f0a482ea2992c259f654b9bef1bc23e0e80b20a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 14 Jul 2020 14:13:44 +0800 Subject: [PATCH] add ai config --- server/gameserver/android_new.ai.cc | 14 +++++++------- server/gameserver/android_new.ai.h | 12 ++++++------ server/gameserver/metadata.h | 5 +++++ server/gameserver/metamgr.cc | 20 +++++++++++++------- server/gameserver/metamgr.h | 3 +-- server/tools/protobuild/metatable.proto | 10 ++++++++++ 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/server/gameserver/android_new.ai.cc b/server/gameserver/android_new.ai.cc index 0252b4f..cb39173 100644 --- a/server/gameserver/android_new.ai.cc +++ b/server/gameserver/android_new.ai.cc @@ -15,13 +15,13 @@ const int SHUA_RANGE = 580; ai级别 1: 木桩(不射击) -2: 站桩间隔开枪 -3: 站桩描边射击 -4: 站桩扫射(连续射击) -5: 跑动间隔开枪 -6: 跑动描边射击 -7: 跑动扫射 -8: 跑动射击 +2: 站桩间隔开枪 param1: 攻击距离 param2:攻击间隔 +3: 站桩描边射击 param1: 攻击距离 +4: 站桩扫射(连续射击) param1: 攻击距离 +5: 跑动间隔开枪 param1: 追击距离 param2:攻击间隔 +6: 跑动描边射击 param1: 追击距离 +7: 跑动扫射 param1: 追击距离 +8: 跑动射击 param1: 追击距离 */ AndroidNewAI::~AndroidNewAI() diff --git a/server/gameserver/android_new.ai.h b/server/gameserver/android_new.ai.h index 5cab97b..b2242e0 100644 --- a/server/gameserver/android_new.ai.h +++ b/server/gameserver/android_new.ai.h @@ -34,6 +34,11 @@ struct OldAiData long long series_attack_frames = 0; }; +namespace MetaData +{ + class AI; +} + class Human; class AndroidNewAI : public AIComponent { @@ -64,12 +69,7 @@ private: private: OldAiData old_ai_data_; - double param1_ = 0; - double param2_ = 0; - double param3_ = 0; - double param4_ = 0; - + MetaData::AI* ai_meta = nullptr; AINode node_; bool moving_ = false; - }; diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index c5df9ab..8f96cbd 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -215,4 +215,9 @@ namespace MetaData const metatable::KillPoint* i = nullptr; }; + struct AI + { + const metatable::AI* i = nullptr; + }; + } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 75564dc..1f9cd12 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -59,6 +59,8 @@ public: std::list killpoint_list; std::list robot_meta_list; std::vector robot_list; + std::list ai_meta_list; + std::vector ai_list; std::map parameter_hash; std::map gamemap_hash; @@ -85,6 +87,7 @@ public: std::map equipupgrade_hash; std::map robot_hash; std::map> airline_hash; + std::map ai_hash; void Load() { @@ -130,6 +133,7 @@ public: f8::ReadCsvMetaFile(res_path + "rankPoint@rankPoint.csv", rankpoint_meta_list); f8::ReadCsvMetaFile(res_path + "equipUpgrade@equipUpgrade.csv", equipupgrade_meta_list); f8::ReadCsvMetaFile(res_path + "robot@robot.csv", robot_meta_list); + f8::ReadCsvMetaFile(res_path + "ai@ai.csv", ai_meta_list); BindToMetaData(); #if 1 { @@ -513,6 +517,12 @@ private: robot_hash[meta.id()] = &item; } + for (auto& meta : ai_meta_list) { + MetaData::AI& item = a8::FastAppend(ai_list); + item.i = &meta; + ai_hash[meta.ai_level()] = &item; + } + } private: @@ -728,12 +738,8 @@ MetaData::Robot* MetaMgr::RandRobot(std::set& refreshed_robot_set) } } -double MetaMgr::GetAiParam(int ai_level, int param_idx) +MetaData::AI* MetaMgr::GetAI(int ai_level) { - if (ai_level >= 0 && ai_level < (int)ai_params.size()) { - if (param_idx >= 0 && param_idx < (int)ai_params[ai_level].size()) { - return ai_params[ai_level][param_idx]; - } - } - return 0; + auto itr = loader_->ai_hash.find(ai_level); + return itr != loader_->ai_hash.end() ? itr->second : nullptr; } diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 91e39c4..cff45eb 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -45,7 +45,7 @@ class MetaMgr : public a8::Singleton int GetKillPointParam1(int kill_num); int GetKillPointParam2(int kill_num); MetaData::Robot* RandRobot(std::set& refreshed_robot_set); - double GetAiParam(int ai_level, int param_idx); + MetaData::AI* GetAI(int ai_level); int gas_inactive_time = 10; int newbie_gas_inactive_time = 5; @@ -123,6 +123,5 @@ class MetaMgr : public a8::Singleton std::string level0room_spec_things; std::string level0room_spec_airdrop; - std::vector> ai_params; friend class MetaDataLoader; }; diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index c3ed78e..a64f81b 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -235,6 +235,16 @@ message KillPoint optional int32 parameter2 = 3; } +message AI +{ + optional int32 ai_level = 1; + optional int32 pursuit_distance = 2; + optional int32 attack_interval = 3; + optional int32 attack_times = 4; + optional int32 attack_type = 5; + optional float shot_offset_angle = 6; +} + //end message DoorObjJson