diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 3e31dd4..01efa9c 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -215,6 +215,19 @@ public: } } } + { + METAMGR_READ_STR(level0room_spec_airdrop, ""); + std::vector tmpstrings; + a8::Split(MetaMgr::Instance()->level0room_spec_airdrop, tmpstrings, ':'); + for (auto& str : tmpstrings) { + if (!str.empty()) { + MetaMgr::Instance()->level0room_spec_airdrops.push_back + ( + 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 8516896..733ac9e 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -87,6 +87,7 @@ class MetaMgr : public a8::Singleton int level0room_robot_autodie_time = 0; int level0room_robot_autodie_distance = 0; std::set level0room_spec_things_set; + std::vector level0room_spec_airdrops; int level1room_shua_robot_min_time = 0; int level1room_shua_robot_max_time = 0; @@ -117,5 +118,6 @@ class MetaMgr : public a8::Singleton MetaDataLoader* loader_ = nullptr; std::string level0room_spec_things; + std::string level0room_spec_airdrop; friend class MetaDataLoader; }; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 0461fb9..339097d 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1134,6 +1134,14 @@ void Room::InitAirDrop() void Room::AirDrop(int appear_time, int box_id) { MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(box_id); + if (room_type_ == RT_NewBrid && + airdrop_times_ < MetaMgr::Instance()->level0room_spec_airdrops.size()) { + int spec_box_id = MetaMgr::Instance()->level0room_spec_airdrops[airdrop_times_]; + if (MetaMgr::Instance()->GetMapThing(spec_box_id)) { + thing_meta = MetaMgr::Instance()->GetMapThing(spec_box_id); + box_id = spec_box_id; + } + } if (thing_meta && thing_meta->i->type() == 2) { a8::Vec2 dir = a8::Vec2::UP; dir.Rotate(a8::RandAngle());