From 3fc0c50c98533ff526ad1a83060f593a4e3ed50c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 9 Apr 2019 11:20:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=88=BF=E9=97=B4=E8=AF=BB?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/metadata.cc | 2 +- server/gameserver/metamgr.cc | 2 +- server/gameserver/room.cc | 44 +++++++++++++++++++++++++ server/gameserver/room.h | 1 + server/tools/protobuild/metatable.proto | 8 +++-- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 865c175..d151fc2 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -156,7 +156,7 @@ namespace MetaData for (auto& str : strings) { std::vector strings2; a8::Split(str, strings2, ':'); - assert(strings.size() == 2); + assert(strings2.size() == 2); rand_space += a8::XValue(strings2[1]).GetInt(); things.push_back(std::make_tuple( a8::XValue(strings2[0]), diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 5c62c13..8fc44c5 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -79,7 +79,7 @@ private: item.i = &meta; item.Init(); gamemap_hash[item.i->map_id()] = &item; - #if 0 + #if 1 { for (auto& tuple : item.template_list) { auto itr = maptpl_meta_hash.find(std::get<0>(tuple)); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index cb96385..f72d0b6 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -395,6 +395,50 @@ void Room::ProcDrop(Vector2D center, int drop_id) } } +void Room::CreateThings() +{ + std::string tpl_name = map_meta->RandTemplate(); + std::vector* things = MetaMgr::Instance()->GetMapTplThing(tpl_name); + if (things) { + for (auto& thing_tpl : *things) { + if (thing_tpl.i->weight() >= rand() % 10000) { + int thing_id = thing_tpl.RandThing(); + MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(thing_id); + if (thing_meta) { + if (thing_meta->i->is_house()) { + MetaData::Building* building_meta = MetaMgr::Instance()->GetBuilding(1); + if (building_meta) { + Building* entity = new Building(); + entity->room = this; + entity->meta = building_meta; + entity->entity_uniid = AllocUniid(); + entity->pos = Vector2D(thing_tpl.i->x(), thing_tpl.i->y()); + entity->Initialize(); + uniid_hash_[entity->entity_uniid] = entity; + for (auto& pair : human_hash_) { + pair.second->new_objects.insert(entity); + pair.second->part_objects.insert(entity); + } + } + } else { + Obstacle* entity = new Obstacle(); + entity->room = this; + entity->meta = thing_meta; + entity->entity_uniid = AllocUniid(); + entity->pos = Vector2D(thing_tpl.i->x(), thing_tpl.i->y()); + entity->Initialize(); + uniid_hash_[entity->entity_uniid] = entity; + for (auto& pair : human_hash_) { + pair.second->new_objects.insert(entity); + pair.second->part_objects.insert(entity); + } + } + } + } + } + } +} + void Room::ClearDeletedObjects() { for (auto& obj_uniid : frame_data.deleted_objects) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 1ceee83..23ee8c6 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -61,6 +61,7 @@ public: std::function func); void BeAddedObject(Entity* entity); void ProcDrop(Vector2D center, int drop_id); + void CreateThings(); private: void ClearDeletedObjects(); diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index fa9d3dd..b6b86e7 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -23,6 +23,10 @@ message MapThing optional float damage_dia = 7; //伤害半径 optional int32 drop = 8; //掉落 optional int32 attackable = 9; //是否可攻击 + optional int32 is_door = 10; //是否门 + optional int32 is_house = 11; //是否房间 + optional int32 is_tree = 12; //是否树 + optional int32 house_id = 13; //房间id } message SafeArea @@ -140,6 +144,6 @@ message MapTplThingJson optional string name = 2; optional string things = 3; optional int32 weight = 4; - // optional float x = 5; - // optional float y = 6; + optional float x = 5; + optional float y = 6; } \ No newline at end of file