diff --git a/server/gameserver/building.cc b/server/gameserver/building.cc index abc05c6..b6b1826 100644 --- a/server/gameserver/building.cc +++ b/server/gameserver/building.cc @@ -66,6 +66,9 @@ void Building::RecalcSelfCollider() Obstacle* entity = new Obstacle(); entity->room = room; entity->meta = thing; + #if 1 + entity->building = this; + #endif entity->entity_uniid = room->AllocUniid(); entity->pos = Vector2D(pos.x + obj.x() - meta->i->tilewidth() / 2.0, pos.y + obj.y() - meta->i->tileheight() / 2.0); diff --git a/server/gameserver/building.h b/server/gameserver/building.h index 2fd5356..1d046fa 100644 --- a/server/gameserver/building.h +++ b/server/gameserver/building.h @@ -16,6 +16,7 @@ class Building : public Entity { public: MetaData::Building* meta = nullptr; + int building_id = 0; Building(); virtual ~Building() override; diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index d151fc2..f450a83 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -15,7 +15,7 @@ namespace MetaData std::vector strings2; a8::Split(str, strings2, ':'); assert(strings2.size() == 2); - rand_space += a8::XValue(strings[1]).GetInt(); + rand_space += a8::XValue(strings2[1]).GetInt(); template_list.push_back(std::make_tuple( strings2[0], rand_space @@ -26,7 +26,7 @@ namespace MetaData std::string Map::RandTemplate() { - if (rand_space > 0) { + if (rand_space <= 0) { return ""; } int rnd = rand() % rand_space; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 8fc44c5..24a47ea 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -86,6 +86,8 @@ private: if (itr == maptpl_meta_hash.end()) { maptpl_meta_hash[std::get<0>(tuple)] = std::list(); itr = maptpl_meta_hash.find(std::get<0>(tuple)); + } else { + itr->second.clear(); } f8::ReadJsonMetaFile(res_path + std::get<0>(tuple) + ".json", itr->second); } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index f72d0b6..82c237e 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -411,6 +411,7 @@ void Room::CreateThings() Building* entity = new Building(); entity->room = this; entity->meta = building_meta; + entity->building_id = thing_id; entity->entity_uniid = AllocUniid(); entity->pos = Vector2D(thing_tpl.i->x(), thing_tpl.i->y()); entity->Initialize(); @@ -439,6 +440,37 @@ void Room::CreateThings() } } +void Room::FillSMMapInfo(cs::SMMapInfo& map_info) +{ + for (auto& pair :uniid_hash_) { + switch (pair.second->entity_type) { + case ET_Obstacle: + { + Obstacle* entity = (Obstacle*)pair.second; + if (!entity->building) { + cs::MFMapObject* p = map_info.add_objects(); + p->set_object_id(entity->meta->i->thing_id()); + entity->pos.ToPB(p->mutable_pos()); + } + } + break; + case ET_Building: + { + Building* entity = (Building*)pair.second; + cs::MFMapObject* p = map_info.add_objects(); + p->set_object_id(entity->building_id); + entity->pos.ToPB(p->mutable_pos()); + } + break; + default: + { + + } + break; + } + } +} + void Room::ClearDeletedObjects() { for (auto& obj_uniid : frame_data.deleted_objects) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 23ee8c6..a57afec 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -62,6 +62,7 @@ public: void BeAddedObject(Entity* entity); void ProcDrop(Vector2D center, int drop_id); void CreateThings(); + void FillSMMapInfo(cs::SMMapInfo& map_info); private: void ClearDeletedObjects(); diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index c48d59a..d872c74 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -52,8 +52,12 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) hum->socket_handle = hdr.socket_handle; hum->Initialize(); room->AddPlayer(hum); + #if 1 + room->CreateThings(); + #else room->ShuaObstacle(hum); room->ShuaBuilding(hum); + #endif { cs::SMJoinedNotify notifymsg; @@ -64,6 +68,7 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg) { cs::SMMapInfo notifymsg; notifymsg.set_map_id(room->map_meta->i->map_id()); + room->FillSMMapInfo(notifymsg); 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 e9c8cd5..900dec0 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -91,10 +91,8 @@ message MFVector2D //地图物件 message MFMapObject { - //type - optional MFVector2D pos = 1; //位置 - optional int32 ori = 2; //zzzzz - optional int32 scale = 3; //缩放比 + optional int32 object_id = 1; //物件id(mapThing表id) + optional MFVector2D pos = 2; //位置 } //玩家信息