From ad44ba7cea366c51aca9cf5977750cc1d26478d0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 15 Jul 2020 16:24:07 +0800 Subject: [PATCH] 1 --- server/gameserver/android_new.ai.cc | 19 +++++++-- server/gameserver/android_new.ai.h | 1 + server/gameserver/metadata.cc | 54 +++++++++++++++++++++++++ server/gameserver/metadata.h | 8 ++++ server/gameserver/metamgr.cc | 1 + server/tools/protobuild/metatable.proto | 3 ++ 6 files changed, 82 insertions(+), 4 deletions(-) diff --git a/server/gameserver/android_new.ai.cc b/server/gameserver/android_new.ai.cc index 8fefbed..f2af085 100644 --- a/server/gameserver/android_new.ai.cc +++ b/server/gameserver/android_new.ai.cc @@ -470,10 +470,15 @@ void AndroidNewAI::UpdateThinking() node_.target = target; ChangeToStateNewAI(ASE_Attack); } else { - if ((rand() % 7) < 4) { - ChangeToStateNewAI(ASE_Idle); + if (hum->room->GetFrameNo() >= node_.next_random_move_frameno) { + if ((rand() % 7) < 4) { + ChangeToStateNewAI(ASE_Idle); + } else { + ChangeToStateNewAI(ASE_RandomWalk); + } } else { - ChangeToStateNewAI(ASE_RandomWalk); + ChangeToStateNewAI(ASE_Idle); + node_.param1 = node_.next_random_move_frameno - hum->room->GetFrameNo(); } } } @@ -620,9 +625,15 @@ void AndroidNewAI::ChangeToStateNewAI(AndroidStateEx_e to_state) { moving_ = true; node_.target = nullptr; + #if 1 + node_.param1 = SERVER_FRAME_RATE * ai_meta->GetMoveTime(); + #else node_.param1 = SERVER_FRAME_RATE * 5 + rand() % (SERVER_FRAME_RATE * 3); + #endif node_.start_shot_frameno = 0; node_.shot_times = 0; + node_.next_random_move_frameno = hum->room->GetFrameNo() + + SERVER_FRAME_RATE * ai_meta->GetMoveIdleTime(); hum->move_dir = a8::Vec2(1.0f, 0); hum->move_dir.Rotate(a8::RandAngle()); hum->move_dir.Normalize(); @@ -694,7 +705,7 @@ float AndroidNewAI::GetAttackRange() if (myself->curr_weapon && myself->curr_weapon->meta) { attack_range = myself->curr_weapon->meta->i->range(); } - attack_range = std::min(300.0f, attack_range); + attack_range = std::min(ai_meta->i->attack_range(), (int)attack_range); return attack_range; } diff --git a/server/gameserver/android_new.ai.h b/server/gameserver/android_new.ai.h index e2dde8e..01a979a 100644 --- a/server/gameserver/android_new.ai.h +++ b/server/gameserver/android_new.ai.h @@ -19,6 +19,7 @@ public: long long frameno = 0; long long exec_frame_num = 0; long long start_shot_frameno = 0; + long long next_random_move_frameno = 0; int shot_times = 0; int total_shot_times = 0; int next_total_shot_times = 0; diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index a7b1fd0..70c1ecd 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -497,4 +497,58 @@ namespace MetaData { } + void AI::Init() + { + { + std::vector strings; + a8::Split(i->random_move_idle_time(), strings, ';'); + if (!i->random_move_idle_time().empty()) { + random_move_idle_time_ = std::make_tuple + ( + a8::XValue(strings[0]).GetInt(), + a8::XValue(strings[1]).GetInt() + ); + } else { + random_move_idle_time_ = std::make_tuple + ( + 2, + 3 + ); + } + } + { + std::vector strings; + a8::Split(i->random_move_time(), strings, ';'); + if (!i->random_move_time().empty()) { + random_move_time_ = std::make_tuple + ( + a8::XValue(strings[0]).GetInt(), + a8::XValue(strings[1]).GetInt() + ); + } else { + random_move_time_ = std::make_tuple + ( + 3, + 7 + ); + } + } + } + + int AI::GetMoveIdleTime() + { + return a8::RandEx( + std::get<0>(random_move_idle_time_), + std::get<1>(random_move_idle_time_) + ); + } + + int AI::GetMoveTime() + { + return a8::RandEx( + std::get<0>(random_move_time_), + std::get<1>(random_move_time_) + ); + } + } diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index 8f96cbd..db51212 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -218,6 +218,14 @@ namespace MetaData struct AI { const metatable::AI* i = nullptr; + void Init(); + int GetMoveIdleTime(); + int GetMoveTime(); + + 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 e779cf4..3d9e3fe 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -570,6 +570,7 @@ private: for (auto& meta : ai_meta_list) { MetaData::AI& item = a8::FastAppend(ai_list); item.i = &meta; + item.Init(); ai_hash[meta.ai_level()] = &item; } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 107f3d4..f20645f 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -243,6 +243,9 @@ message AI optional int32 attack_times = 4; optional int32 attack_type = 5; optional float shot_offset_angle = 6; + optional string random_move_idle_time = 8; + optional string random_move_time = 9; + optional int32 attack_range = 10; } //end