From 31356be871bda2326ee65591a576c3288c14cde0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 1 Jun 2020 13:53:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=89=8B=E6=88=BF?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E7=89=A9=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/mapmgr.cc | 9 +++++++++ server/gameserver/mapmgr.h | 1 + server/gameserver/metamgr.cc | 16 ++++++++++++++++ server/gameserver/metamgr.h | 4 ++++ server/gameserver/room.cc | 20 ++++++++++++++++++++ server/gameserver/room.h | 2 ++ server/gameserver/types.h | 1 + 7 files changed, 53 insertions(+) diff --git a/server/gameserver/mapmgr.cc b/server/gameserver/mapmgr.cc index 04d2764..fe211ab 100644 --- a/server/gameserver/mapmgr.cc +++ b/server/gameserver/mapmgr.cc @@ -62,6 +62,7 @@ void MapMgr::AttachRoom(Room* room, RoomInitInfo& init_info) init_info.newbie_born_point_meta = newbie_born_point_; init_info.loots = &loots_; init_info.buildings = &buildings_; + init_info.level0room_spec_things = &level0room_spec_things_; } void MapMgr::CreateThings() @@ -74,6 +75,14 @@ void MapMgr::CreateThings() switch (thing_tpl.i->_object_type()) { case kMOT_Object: { + { + int thing_id = thing_tpl.RandThing(); + if (MetaMgr::Instance()->level0room_spec_things_set.find(thing_id) != + MetaMgr::Instance()->level0room_spec_things_set.end()) { + level0room_spec_things_.push_back(&thing_tpl); + continue; + } + } if (thing_tpl.i->weight() >= rand() % 10000) { CreateMapObject(thing_tpl); } diff --git a/server/gameserver/mapmgr.h b/server/gameserver/mapmgr.h index db7e77a..2b42b16 100644 --- a/server/gameserver/mapmgr.h +++ b/server/gameserver/mapmgr.h @@ -45,4 +45,5 @@ class MapMgr : public a8::Singleton MetaData::MapTplThing* newbie_born_point_ = nullptr; std::vector loots_; std::vector buildings_; + std::vector level0room_spec_things_; }; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 1965282..fe6cc0d 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -11,6 +11,9 @@ #define METAMGR_READ(field_name, def_val) MetaMgr::Instance()->field_name = \ a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, #def_val)); +#define METAMGR_READ_STR(field_name, def_val) MetaMgr::Instance()->field_name = \ + a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString(); + class MetaDataLoader { public: @@ -200,6 +203,19 @@ public: METAMGR_READ(level0room_robot_protect_time, 60); METAMGR_READ(level0room_robot_autodie_time, 10); METAMGR_READ(level0room_robot_autodie_distance, 500); + { + METAMGR_READ_STR(level0room_spec_things, ""); + std::vector tmpstrings; + a8::Split(MetaMgr::Instance()->level0room_spec_things, tmpstrings, ':'); + for (auto& str : tmpstrings) { + if (!!str.empty()) { + MetaMgr::Instance()->level0room_spec_things_set.insert + ( + a8::XValue(str).GetInt() + ); + } + } + } METAMGR_READ(level1room_shua_robot_min_time, 5); METAMGR_READ(level1room_shua_robot_max_time, 7); diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index 97a4481..b1f9913 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -87,6 +87,7 @@ class MetaMgr : public a8::Singleton int level0room_robot_protect_time = 0; int level0room_robot_autodie_time = 0; int level0room_robot_autodie_distance = 0; + std::set level0room_spec_things_set; int level1room_shua_robot_min_time = 0; int level1room_shua_robot_max_time = 0; @@ -115,4 +116,7 @@ class MetaMgr : public a8::Singleton private: MetaDataLoader* loader_ = nullptr; + + std::string level0room_spec_things; + friend class MetaDataLoader; }; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index a25db4a..2ba1030 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -52,6 +52,7 @@ void Room::InitData(RoomInitInfo& init_info) newbie_born_point_meta_ = init_info.newbie_born_point_meta; loots_ = init_info.loots; buildings_ = init_info.buildings; + level0room_spec_things_ = init_info.level0room_spec_things; } void Room::Init() @@ -64,6 +65,9 @@ void Room::Init() CreateDropObjs(); InitObstacleDatas(); ShuaAndroid(); + if (room_type_ == RT_NewBrid) { + CreateLevel0RoomSpecThings(); + } #ifdef DEBUG InitDebugInfo(); #endif @@ -2459,3 +2463,19 @@ int Room::GetCanShuaNum(int shua_num) } return real_shua_num; } + +void Room::CreateLevel0RoomSpecThings() +{ + if (level0room_spec_things_) { + for (auto& thing_tpl : *level0room_spec_things_) { + int thing_id = thing_tpl->RandThing(); + MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(thing_id); + if (thing_meta) { + InternalCreateObstacle(thing_id, thing_tpl->i->x(), thing_tpl->i->y(), + [] (Obstacle* entity) + { + }); + } + } + } +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index a0022b7..ceabedb 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -186,6 +186,7 @@ private: void CombineTeamBornPoint(); void ForceSetBornPoint(Human* hum, BornPoint* born_point); void NewBieRoomStart(); + void CreateLevel0RoomSpecThings(); #ifdef DEBUG void InitDebugInfo(); @@ -202,6 +203,7 @@ private: const MetaData::MapTplThing* newbie_born_point_meta_ = nullptr; const std::vector* loots_ = nullptr; const std::vector* buildings_ = nullptr; + const std::vector* level0room_spec_things_ = nullptr; Human* first_newbie_ = nullptr; bool waiting_start_ = false; diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 09b8158..d90b3b5 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -170,4 +170,5 @@ struct RoomInitInfo const MetaData::MapTplThing* newbie_born_point_meta = nullptr; const std::vector* loots = nullptr; const std::vector* buildings = nullptr; + const std::vector* level0room_spec_things = nullptr; };