From 6a18bf87a5423f580d32f0649ae54bda1577ad52 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 8 Apr 2019 18:44:33 +0800 Subject: [PATCH] 1 --- server/gameserver/constant.h | 2 + server/gameserver/human.cc | 4 +- server/gameserver/metadata.cc | 33 +++++++++++++ server/gameserver/metadata.h | 6 +++ server/gameserver/obstacle.cc | 64 +------------------------ server/gameserver/room.cc | 4 +- server/gameserver/roommgr.cc | 2 - server/tools/protobuild/cs_proto.proto | 2 - server/tools/protobuild/metatable.proto | 13 ++++- 9 files changed, 58 insertions(+), 72 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 3d731be..e1a5fed 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -105,3 +105,5 @@ const int GUN_SLOT2 = 2; const int FRAG_SLOT = 3; const int SMOKE_SLOT = 4; +const int MAP_HEIGHT = 8192; +const int MAP_WIDTH = 8192; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 493ae74..8ff61b9 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -166,14 +166,14 @@ bool Human::IsCollision() return true; } int right_x = pos.x + meta->i->radius(); - if (right_x > room->map_meta->i->width()) { + if (right_x > MAP_WIDTH) { return true; } } //检查y轴 { int up_y = pos.y + meta->i->radius(); - if (up_y > room->map_meta->i->height()) { + if (up_y > MAP_HEIGHT) { return true; } int down_y = pos.y - meta->i->radius(); diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 5818577..1e304e4 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -5,6 +5,39 @@ namespace MetaData { + void Map::Init() + { + rand_space = 0; + { + std::vector strings; + a8::Split(i->template_list(), strings, '|'); + for (auto& str : strings) { + std::vector strings2; + a8::Split(str, strings2, ':'); + assert(strings2.size() == 2); + rand_space += a8::XValue(strings[1]).GetInt(); + template_list.push_back(std::make_tuple( + strings[0], + rand_space + )); + } + } + } + + std::string Map::RandTemplate() + { + if (rand_space > 0) { + return ""; + } + int rnd = rand() % rand_space; + for (auto& tpl : template_list) { + if (rnd <= std::get<1>(tpl)) { + return std::get<0>(tpl); + } + } + return ""; + } + void Drop::Init() { std::vector item_list; diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index a19b97c..836f919 100755 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -13,6 +13,12 @@ namespace MetaData struct Map { const metatable::Map* i = nullptr; + + std::vector> template_list; + int rand_space = 0; + + void Init(); + std::string RandTemplate(); }; struct MapThing diff --git a/server/gameserver/obstacle.cc b/server/gameserver/obstacle.cc index 5392629..c242a89 100644 --- a/server/gameserver/obstacle.cc +++ b/server/gameserver/obstacle.cc @@ -24,7 +24,6 @@ void Obstacle::Initialize() void Obstacle::RecalcSelfCollider() { - #if 1 if (is_door) { //门 if (!self_collider2_) { @@ -61,71 +60,12 @@ void Obstacle::RecalcSelfCollider() self_collider2_->owner = this; colliders.push_back(self_collider2_); } - self_collider2_->_min = Vector2D(meta->i->height() / -2.0f, meta->i->width() / -2.0f); - self_collider2_->_max = Vector2D(meta->i->height() / 2.0f, meta->i->width() / 2.0f); + self_collider2_->_min = Vector2D(meta->i->width() / -2.0f, meta->i->height() / -2.0f); + self_collider2_->_max = Vector2D(meta->i->width() / 2.0f, meta->i->height() / 2.0f); } break; } } - #else - switch (meta->i->thing_id()) { - case 61101: - { - if (!self_collider2_) { - self_collider2_ = new AabbCollider(); - self_collider2_->owner = this; - colliders.push_back(self_collider2_); - } - self_collider2_->_min = Vector2D(-16.0f, -16.0f); - self_collider2_->_max = Vector2D(16.0f, 16.0f); - } - break; - case 61017: - { - //玻璃32 * 12 - if (!self_collider2_) { - self_collider2_ = new AabbCollider(); - self_collider2_->owner = this; - colliders.push_back(self_collider2_); - } - self_collider2_->_min = Vector2D(-16.0f, -16.0f); - self_collider2_->_max = Vector2D(6.0f, 6.0f); - } - break; - case 61401: - { - if (!self_collider_) { - self_collider_ = new CircleCollider(); - self_collider_->owner = this; - colliders.push_back(self_collider_); - } - self_collider_->pos = Vector2D(); - self_collider_->rad = 32 / 2.0; - } - break; - case 61018: - { - if (is_door) { - //门 - if (!self_collider2_) { - self_collider2_ = new AabbCollider(); - self_collider2_->owner = this; - colliders.push_back(self_collider2_); - } - if (door_state == DoorStateClose) { - self_collider2_->_min = Vector2D(0.0f - door_state0->width() / 2.0f, - 0.0f - door_state0->height() / 2.0f); - self_collider2_->_max = Vector2D(door_state0->width() / 2.0f, door_state0->height() / 2.0f); - } else { - self_collider2_->_min = Vector2D(0.0f - door_state1->width() / 2.0f, - 0.0f - door_state1->height() / 2.0f); - self_collider2_->_max = Vector2D(door_state1->width(), door_state1->height()); - } - } - } - break; - } - #endif } void Obstacle::FillMFObjectPart(cs::MFObjectPart* part_data) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index f6f2a81..cb96385 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -470,8 +470,8 @@ void Room::UpdateGas() gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002); gas_data.gas_progress = gas_data.old_area_meta->i->rad(); gas_data.gas_start_frameno = frame_no; - gas_data.pos_old = Vector2D(map_meta->i->width() / 2.0f, - map_meta->i->height() / 2.0f); + gas_data.pos_old = Vector2D(MAP_WIDTH / 2.0f, + MAP_HEIGHT / 2.0f); gas_data.pos_old_bk = gas_data.pos_old; { bool gen_ok = GenSmallCircle(gas_data.pos_old, diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 0b67671..c48d59a 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -64,8 +64,6 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) { cs::SMMapInfo notifymsg; notifymsg.set_map_id(room->map_meta->i->map_id()); - notifymsg.set_width(room->map_meta->i->width()); - notifymsg.set_height(room->map_meta->i->height()); GGListener::Instance()->SendToClient(hdr.socket_handle, hdr.seqid, notifymsg); } } diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 253eb5e..e9c8cd5 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -591,8 +591,6 @@ message SMJoinedNotify message SMMapInfo { optional int32 map_id = 1; //地图id - optional int32 width = 2; //地图宽度 - optional int32 height = 3; //地图高度 repeated MFMapObject objects = 6; //地图对象 } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index bac0e62..8d84ed6 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -9,8 +9,7 @@ message Parameter message Map { optional int32 map_id = 1; //地图id - optional int32 width = 2; //地图宽度 - optional int32 height = 3; //地图高度 + optional string template_list = 2; //模板列表 } message MapThing @@ -134,3 +133,13 @@ message BuildingJson optional int32 _building_id = 20; } + +message MapTplThingJson +{ + optional string layer_name = 1; + optional string name = 2; + optional string things = 3; + optional int32 weight = 4; + optional float x = 5; + optional float y = 6; +} \ No newline at end of file