diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 2281695..38ed926 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -63,6 +63,7 @@ public: std::map> maptpl_meta_hash; std::map> maptpl_hash; std::map dress_hash; + std::vector dress_vec; std::map skill_hash; std::map rankreward_hash; std::map killreward_hash; @@ -262,6 +263,7 @@ private: MetaData::Dress& item = a8::FastAppend(dress_list); item.i = &meta; dress_hash[item.i->id()] = &item; + dress_vec.push_back(&item); } for (auto& meta : skill_meta_list) { @@ -440,6 +442,14 @@ MetaData::Dress* MetaMgr::GetDress(int dress_id) return itr != loader_->dress_hash.end() ? itr->second : nullptr; } +MetaData::Dress* MetaMgr::RandDress() +{ + if (loader_->dress_vec.empty()) { + return nullptr; + } + return loader_->dress_vec[rand() % loader_->dress_vec.size()]; +} + float MetaMgr::GetRankRewardParam(int rank) { auto itr = loader_->rankreward_hash.find(rank); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 697c916..ebba418 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -33,6 +33,7 @@ class MetaMgr : public a8::Singleton MetaData::AirLine* RandAirLine(int map_id); MetaData::Skill* GetSkill(int skill_id); MetaData::Dress* GetDress(int dress_id); + MetaData::Dress* RandDress(); float GetRankRewardParam(int rank); float GetKillRewardParam(int kill_num); int GetRankPointParam1(int rank); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e21f380..fbcbf64 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -242,6 +242,10 @@ void Room::CreateAndroid(int robot_num) if (!hum_meta) { abort(); } + if (robot_num <= 0) { + return; + } + int rnd_skin_robot_idx = rand() % robot_num; for (int i = 0; i < robot_num; ++i) { if (human_hash_.size() >= ROOM_MAX_PLAYER_NUM) { return; @@ -281,6 +285,13 @@ void Room::CreateAndroid(int robot_num) hum->room = this; hum->Initialize(); + if (rnd_skin_robot_idx == i) { + MetaData::Dress* skin_meta = MetaMgr::Instance()->RandDress(); + if (skin_meta) { + hum->skin_meta = skin_meta; + hum->SetSkinInfo(skin_meta->i->id()); + } + } uniid_hash_[hum->entity_uniid] = hum; moveable_hash_[hum->entity_uniid] = hum; human_hash_[hum->entity_uniid] = hum;