From 868c91ac11a9fb5395e99c81102b03d039828a05 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 28 May 2021 13:51:49 +0800 Subject: [PATCH] 1 --- server/gameserver/android.cc | 29 +++++++++++++++++++++++++ server/gameserver/android.h | 1 + server/gameserver/human.cc | 21 ------------------ server/gameserver/human.h | 3 +-- server/gameserver/metadata.cc | 8 ++++++- server/gameserver/metadata.h | 1 + server/gameserver/room.cc | 2 +- server/tools/protobuild/metatable.proto | 3 ++- 8 files changed, 42 insertions(+), 26 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index f7947de..1701352 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -95,3 +95,32 @@ void Android::SetAiLevel(int ai_level) ai->SetAiLevel(ai_level); } } + +void Android::RandSkin() +{ + #if 1 + if (!robot_meta->skin_id.empty()) { + Skin& skin = skins[0]; + skin.skin_id = 13001 + robot_meta->skin_id[rand() % robot_meta->skin_id.size()]; + skin.skin_lv = 1; + } + #else + std::vector ids = {1, 2, 3, 4, 5, 6}; + for (int i = 0; i < kSkinNum; ++i) { + int rand_idx = rand() % ids.size(); + int skin_id = ids[rand_idx]; + if (i == 1) { + skin_id = 13001 + (rand() % 6); + } else if (i == 2) { + skin_id = 15001 + (rand() % 6); + } + #if 1 + skin_id = 1; + #endif + Skin& skin = skins[i]; + skin.skin_id = skin_id; + skin.skin_lv = 1; + ids.erase(ids.begin() + rand_idx); + } + #endif +} diff --git a/server/gameserver/android.h b/server/gameserver/android.h index 3cd1df6..1e5ba8f 100644 --- a/server/gameserver/android.h +++ b/server/gameserver/android.h @@ -24,6 +24,7 @@ protected: private: void InternalUpdate(int delta_time); + void RandSkin(); friend class EntityFactory; }; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index bf488e8..7353d72 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2551,27 +2551,6 @@ void Human::FreeReviveTimer() } } -void Human::RandSkin() -{ - std::vector ids = {1, 2, 3, 4, 5, 6}; - for (int i = 0; i < kSkinNum; ++i) { - int rand_idx = rand() % ids.size(); - int skin_id = ids[rand_idx]; - if (i == 1) { - skin_id = 13001 + (rand() % 6); - } else if (i == 2) { - skin_id = 15001 + (rand() % 6); - } - #if 1 - skin_id = 1; - #endif - Skin& skin = skins[i]; - skin.skin_id = skin_id; - skin.skin_lv = 1; - ids.erase(ids.begin() + rand_idx); - } -} - void Human::SetSkin(int idx, int skin_id) { if (idx < kSkinNum) { diff --git a/server/gameserver/human.h b/server/gameserver/human.h index f5c6b01..d0f1e50 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -222,7 +222,6 @@ class Human : public Creature void OnDie(); void FreeDownedTimer(); void FreeReviveTimer(); - void RandSkin(); void SetSkin(int idx, int skin_id); Skin* GetSkinByIdx(int idx); int GetLevel() {return level_;}; @@ -344,6 +343,7 @@ protected: int seat_ = 0; std::set view_objects_; xtimer_list* refresh_view_timer_ = nullptr; + std::vector skins; private: CircleCollider* self_collider_ = nullptr; @@ -360,7 +360,6 @@ private: bool sent_battlereport_ = false; bool sent_game_end_ = false; - std::vector skins; Entity* last_collision_door_ = nullptr; long long jump_frameno_ = 0; diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index b837914..5503ba3 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -342,7 +342,13 @@ namespace MetaData void Robot::Init() { - + { + std::vector strings; + a8::Split(i->skin_id(), strings, '|'); + for (auto& str : strings) { + skin_id.push_back(a8::XValue(str)); + } + } } void Drop::Init() diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index eb699c6..e488c42 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -104,6 +104,7 @@ namespace MetaData const metatable::Robot* i = nullptr; void Init(); + std::vector skin_id; }; struct Building diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index bda3582..286ac27 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -332,7 +332,7 @@ void Room::CreateAndroid(int robot_num) Android* hum = EntityFactory::Instance()->MakeAndroid(AllocUniid()); hum->name = robot_meta->i->name(); - hum->meta = MetaMgr::Instance()->android_meta; + hum->meta = MetaMgr::Instance()->GetPlayer(robot_meta->i->hero_id()); hum->robot_meta = robot_meta; hum->born_point = AllocBornPoint(hum); if (!hum->born_point) { diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 368f6e8..c913f5c 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -171,7 +171,8 @@ message Robot { optional int32 id = 1; optional string name = 2; - optional int32 skin = 3; + optional int32 hero_id = 3; + optional string skin_id = 10; optional int32 weapon_id = 4; optional int32 weapon_lv = 5;