diff --git a/server/gameserver/mt/Map.cc b/server/gameserver/mt/Map.cc index 197544e6..3121c0df 100644 --- a/server/gameserver/mt/Map.cc +++ b/server/gameserver/mt/Map.cc @@ -242,28 +242,26 @@ namespace mt auto group = root.At("group"); for (int i = 0; i < group->Size(); ++i) { auto group_obj = group->At(i); - for (int ii = 0; ii < group_obj->Size(); ++ii) { - std::vector keys; - group_obj->GetKeys(keys); - for (auto key : keys) { - int ikey = a8::XValue(key); - if (_group_world_objects.find(ikey) != _group_world_objects.end()) { - abort(); - } - std::vector> objects; - auto items = group_obj->At(key); - for (int iii = 0; iii < items->Size(); ++iii) { - auto item_obj = items->At(iii); - auto obj = std::make_shared(); - { - obj->pos.x = item_obj->At("x")->AsXValue().GetDouble(); - obj->pos.y = item_obj->At("y")->AsXValue().GetDouble(); - obj->pos.z = item_obj->At("z")->AsXValue().GetDouble(); - } - objects.push_back(obj); - } - _group_world_objects[ikey] = objects; + std::vector keys; + group_obj->GetKeys(keys); + for (auto key : keys) { + int ikey = a8::XValue(key); + if (_group_world_objects.find(ikey) != _group_world_objects.end()) { + abort(); } + std::vector> objects; + auto items = group_obj->At(key); + for (int iii = 0; iii < items->Size(); ++iii) { + auto item_obj = items->At(iii); + auto obj = std::make_shared(); + { + obj->pos.x = item_obj->At("x")->AsXValue().GetDouble(); + obj->pos.y = item_obj->At("y")->AsXValue().GetDouble(); + obj->pos.z = item_obj->At("z")->AsXValue().GetDouble(); + } + objects.push_back(obj); + } + _group_world_objects[ikey] = objects; } } } diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index e4f02418..c0510403 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -838,7 +838,7 @@ namespace mtb { a8::reflect::Class* meta_class = nullptr; if (!meta_class) { - meta_class = new a8::reflect::Class("MapThingGroup", 3, 0); + meta_class = new a8::reflect::Class("MapThingGroup", 4, 0); meta_class->SetSimpleField(0, "mtGroupId", a8::reflect::ET_INT32, my_offsetof2(MapThingGroup, mtGroupId_)); meta_class->SetSimpleField(1, "rule", a8::reflect::ET_STRING, my_offsetof2(MapThingGroup, rule_)); meta_class->SetSimpleField(2, "mapThings", a8::reflect::ET_STRING, my_offsetof2(MapThingGroup, mapThings_)); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 122979bb..94019ee2 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3719,7 +3719,20 @@ void Room::CreateWorldObjects() } } if (born_point_hash_.size() < 10) { + #if 1 + while (born_point_hash_.size() < 10) { + int uniid = AllocUniid(); + std::shared_ptr born_point = std::make_shared(); + std::shared_ptr wo_meta = std::make_shared(); + wo_meta->pos.x = (60 + rand() % ((int)GetMapMeta()->map_width() - 100)); + wo_meta->pos.y = 6.250846862793; + wo_meta->pos.z = (60 + rand() % ((int)GetMapMeta()->map_height() - 100)); + born_point->wo_meta = wo_meta; + born_point_hash_[uniid] = born_point; + } + #else abort(); + #endif } } diff --git a/server/gameserver/sandtable.cc b/server/gameserver/sandtable.cc index c3619cf0..a36d15a5 100644 --- a/server/gameserver/sandtable.cc +++ b/server/gameserver/sandtable.cc @@ -7,6 +7,9 @@ SandTable::SandTable(Room* room): room_(room) { + if (room_->IsNewBieRoom()) { + return; + } room->OpenRoomSwitch(kRoomSwitchDisableUseSkill); room->OpenRoomSwitch(kRoomSwitchDisableUseItem); room->OpenRoomSwitch(kRoomSwitchDisableShot); @@ -26,6 +29,9 @@ SandTable::SandTable(Room* room): room_(room) void SandTable::OnGameStart() { + if (room_->IsNewBieRoom()) { + return; + } room_->OpenRoomSwitch(kRoomSwitchDisableMove); room_->OpenRoomSwitch(kRoomSwitchDisableUseSkill); room_->OpenRoomSwitch(kRoomSwitchDisableUseItem);