From 876fb6e6faa5a9ca14350985d753f1378ce7a06c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 7 Apr 2023 18:19:04 +0800 Subject: [PATCH] 1 --- server/gameserver/mt/Robot.cc | 28 ++++++++++++++++++++++++++++ server/gameserver/mt/Robot.h | 5 +++++ server/gameserver/mtb/Robot.h | 8 +++++++- server/gameserver/mtb/mtb.all.cc | 4 +++- server/tools/protobuild/mt.proto | 2 ++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/server/gameserver/mt/Robot.cc b/server/gameserver/mt/Robot.cc index 5a17a880..40b1911b 100644 --- a/server/gameserver/mt/Robot.cc +++ b/server/gameserver/mt/Robot.cc @@ -17,6 +17,21 @@ namespace mt if (_skin_id.size() != 3) { A8_ABORT(); } + { + std::vector strings; + a8::Split(bullet_offset(), strings, '|'); + for (auto& str : strings) { + std::vector strings2; + a8::Split(str, strings2, ':'); + if (strings2.size() != 2) { + abort(); + } + float angle = a8::XValue(strings2[0]).GetDouble(); + int rnd = a8::XValue(strings2[1]).GetInt(); + _bullet_offset_rand_space += rnd; + _bullet_offset.push_back(std::make_tuple(angle, _bullet_offset_rand_space)); + } + } } const mt::Robot* Robot::RandRobot(std::set& refreshed_robot_set) @@ -34,4 +49,17 @@ namespace mt } } + float Robot::RandBulletAngleOfsset() const + { + if (_bullet_offset_rand_space > 0) { + int rnd = rand() % _bullet_offset_rand_space; + for (auto& tuple : _bullet_offset) { + if (rnd < std::get<1>(tuple)) { + return std::get<0>(tuple); + } + } + } + return 0.0f; + } + } diff --git a/server/gameserver/mt/Robot.h b/server/gameserver/mt/Robot.h index b40982e8..6437e6a4 100644 --- a/server/gameserver/mt/Robot.h +++ b/server/gameserver/mt/Robot.h @@ -15,6 +15,11 @@ namespace mt static const mt::Robot* RandRobot(std::set& refreshed_robot_set); std::vector _skin_id; + float RandBulletAngleOfsset() const; + + private: + int _bullet_offset_rand_space = 0; + std::vector> _bullet_offset; }; } diff --git a/server/gameserver/mtb/Robot.h b/server/gameserver/mtb/Robot.h index 2fe602a2..7f08d7be 100644 --- a/server/gameserver/mtb/Robot.h +++ b/server/gameserver/mtb/Robot.h @@ -17,6 +17,8 @@ namespace mtb int weapon_id() const { return weapon_id_; }; int weapon_lv() const { return weapon_lv_; }; int sex() const { return sex_; }; + float dmg_ratio() const { return dmg_ratio_; }; + const std::string bullet_offset() const { return bullet_offset_; }; bool has_id() const { return __flags__.test(0);}; bool has_name() const { return __flags__.test(1);}; @@ -25,6 +27,8 @@ namespace mtb bool has_weapon_id() const { return __flags__.test(4);}; bool has_weapon_lv() const { return __flags__.test(5);}; bool has_sex() const { return __flags__.test(6);}; + bool has_dmg_ratio() const { return __flags__.test(7);}; + bool has_bullet_offset() const { return __flags__.test(8);}; protected: @@ -35,9 +39,11 @@ namespace mtb int weapon_id_ = 0; int weapon_lv_ = 0; int sex_ = 0; + float dmg_ratio_ = 0.0f; + std::string bullet_offset_; public: - std::bitset<7> __flags__; + std::bitset<9> __flags__; }; }; diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index 2e94852c..2ace87a8 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -348,7 +348,7 @@ namespace mtb { a8::reflect::Class* meta_class = nullptr; if (!meta_class) { - meta_class = new a8::reflect::Class("Robot", 7, 0); + meta_class = new a8::reflect::Class("Robot", 9, 0); meta_class->SetSimpleField(0, "id", a8::reflect::ET_INT32, my_offsetof2(Robot, id_)); meta_class->SetSimpleField(1, "name", a8::reflect::ET_STRING, my_offsetof2(Robot, name_)); meta_class->SetSimpleField(2, "hero_id", a8::reflect::ET_INT32, my_offsetof2(Robot, hero_id_)); @@ -356,6 +356,8 @@ namespace mtb meta_class->SetSimpleField(4, "weapon_id", a8::reflect::ET_INT32, my_offsetof2(Robot, weapon_id_)); meta_class->SetSimpleField(5, "weapon_lv", a8::reflect::ET_INT32, my_offsetof2(Robot, weapon_lv_)); meta_class->SetSimpleField(6, "sex", a8::reflect::ET_INT32, my_offsetof2(Robot, sex_)); + meta_class->SetSimpleField(7, "dmg_ratio", a8::reflect::ET_FLOAT, my_offsetof2(Robot, dmg_ratio_)); + meta_class->SetSimpleField(8, "bullet_offset", a8::reflect::ET_STRING, my_offsetof2(Robot, bullet_offset_)); } return meta_class; } diff --git a/server/tools/protobuild/mt.proto b/server/tools/protobuild/mt.proto index 67808d57..ddb1ea7e 100755 --- a/server/tools/protobuild/mt.proto +++ b/server/tools/protobuild/mt.proto @@ -276,6 +276,8 @@ message Robot optional int32 weapon_lv = 5; optional int32 sex = 8; + optional float dmg_ratio = 20; + optional string bullet_offset = 21; } message Skill