From 4bb0317e9db04a1e353ed58430d0744d838f0ed4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 15 Jul 2020 10:09:05 +0800 Subject: [PATCH] 1 --- server/gameserver/metamgr.cc | 26 ++++++++++++++++++++++---- server/gameserver/metamgr.h | 4 ++-- server/gameserver/room.cc | 26 +++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 2aef3d0..241a0cd 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -238,33 +238,51 @@ public: METAMGR_READ_STR(mini_room_ai, ""); std::vector tmpstrings; a8::Split(MetaMgr::Instance()->mini_room_ai, tmpstrings, '|'); + int i = 1; for (auto& str : tmpstrings) { int weight = a8::XValue(str).GetInt(); + MetaMgr::Instance()->mini_room_ai_weights_space += weight; MetaMgr::Instance()->mini_room_ai_weights.push_back ( - weight + std::make_tuple + ( + i, + MetaMgr::Instance()->mini_room_ai_weights_space + ) ); - MetaMgr::Instance()->mini_room_ai_weights_space += weight; + ++i; } if (MetaMgr::Instance()->mini_room_ai_weights.size() != 8) { abort(); } + if (MetaMgr::Instance()->mini_room_ai_weights_space <= 0) { + abort(); + } } { METAMGR_READ_STR(normal_room_ai, ""); std::vector tmpstrings; a8::Split(MetaMgr::Instance()->mini_room_ai, tmpstrings, '|'); + int i = 1; for (auto& str : tmpstrings) { int weight = a8::XValue(str).GetInt(); + MetaMgr::Instance()->normal_room_ai_weights_space += weight; MetaMgr::Instance()->normal_room_ai_weights.push_back ( - weight + std::make_tuple + ( + i, + MetaMgr::Instance()->normal_room_ai_weights_space + ) ); - MetaMgr::Instance()->normal_room_ai_weights_space += weight; + ++i; } if (MetaMgr::Instance()->normal_room_ai_weights.size() != 8) { abort(); } + if (MetaMgr::Instance()->normal_room_ai_weights_space <= 0) { + abort(); + } } METAMGR_READ(level1room_shua_robot_min_time, 5); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 1f52bfe..f925473 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -91,9 +91,9 @@ class MetaMgr : public a8::Singleton int level0room_robot_autodie_distance = 0; std::set level0room_spec_things_set; std::vector level0room_spec_airdrops; - std::vector mini_room_ai_weights; + std::vector> mini_room_ai_weights; int mini_room_ai_weights_space = 0; - std::vector normal_room_ai_weights; + std::vector> normal_room_ai_weights; int normal_room_ai_weights_space = 0; std::string mini_room_ai; std::string normal_room_ai; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index c189864..5ccc88f 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2905,5 +2905,29 @@ void Room::InitAndroidAI() androids.push_back((Android*)hum); } } - + for (Android* hum : androids) { + if (IsMiniRoom()) { + int rnd = rand() % MetaMgr::Instance()->mini_room_ai_weights_space; + ++rnd; + for (auto& tuple : MetaMgr::Instance()->mini_room_ai_weights) { + int ai_level = std::get<0>(tuple); + int space = std::get<1>(tuple); + if (rnd <= space) { + hum->SetAiLevel(ai_level); + break; + } + } + } else { + int rnd = rand() % MetaMgr::Instance()->normal_room_ai_weights_space; + ++rnd; + for (auto& tuple : MetaMgr::Instance()->normal_room_ai_weights) { + int ai_level = std::get<0>(tuple); + int space = std::get<1>(tuple); + if (rnd <= space) { + hum->SetAiLevel(ai_level); + break; + } + } + } + } }