添加空投读取

This commit is contained in:
aozhiwei 2020-07-28 16:05:42 +08:00
parent 5de5f931d2
commit 2f8844344e
6 changed files with 59 additions and 17 deletions

View File

@ -29,6 +29,13 @@ namespace MetaData
));
}
}
{
std::vector<std::string> strings;
a8::Split(i->airdrops(), strings, '|');
for (auto& str : strings) {
airdrops.push_back(a8::XValue(str).GetInt());
}
}
}
std::string Map::RandTemplate()

View File

@ -22,6 +22,7 @@ namespace MetaData
std::vector<std::tuple<std::string, int>> template_list;
int rand_space = 0;
std::vector<int> airdrops;
void Init();
std::string RandTemplate();

View File

@ -64,6 +64,7 @@ public:
std::map<std::string, MetaData::Parameter*> parameter_hash;
std::map<int, MetaData::Map*> gamemap_hash;
std::map<int, MetaData::AirDrop*> airdrop_hash;
std::map<int, MetaData::SafeArea*> safearea_hash;
std::map<int, MetaData::Item*> item_hash;
std::map<int, MetaData::Equip*> equip_hash;
@ -500,6 +501,7 @@ private:
for (auto& meta : airdrop_meta_list) {
MetaData::AirDrop& item = a8::FastAppend(airdrop_list);
item.i = &meta;
airdrop_hash[meta.id()] = &item;
}
for (auto& meta : airline_meta_list) {
@ -716,6 +718,12 @@ std::list<MetaData::AirDrop>& MetaMgr::GetAirDrops()
return loader_->airdrop_list;
}
MetaData::AirDrop* MetaMgr::GetAirDrop(int airdrop_id)
{
auto itr = loader_->airdrop_hash.find(airdrop_id);
return itr != loader_->airdrop_hash.end() ? itr->second : nullptr;
}
MetaData::AirLine* MetaMgr::RandAirLine(int map_id)
{
auto itr = loader_->airline_hash.find(map_id);

View File

@ -30,6 +30,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
MetaData::SafeArea* GetSafeArea(int area_id);
std::vector<MetaData::MapTplThing>* GetMapTplThing(std::string& map_name);
std::list<MetaData::AirDrop>& GetAirDrops();
MetaData::AirDrop* GetAirDrop(int airdrop_id);
MetaData::AirLine* RandAirLine(int map_id);
MetaData::Skill* GetSkill(int skill_id);
MetaData::Buff* GetBuff(int buff_id);

View File

@ -1303,6 +1303,28 @@ void Room::CombineTeam()
void Room::InitAirDrop()
{
if (GetRoomMode() == kZombieMode) {
for (int airdrop_id : map_meta_->airdrops) {
MetaData::AirDrop* airdrop_meta = MetaMgr::Instance()->GetAirDrop(airdrop_id);
if (airdrop_meta) {
xtimer.AddDeadLineTimerAndAttach
(SERVER_FRAME_RATE * airdrop_meta->i->time(),
a8::XParams()
.SetSender(this)
.SetParam1(airdrop_meta->i->appear_time())
.SetParam2(airdrop_meta->i->drop_id())
.SetParam3(airdrop_meta->i->id()),
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
if (!room->IsGameOver()) {
room->AirDrop(param.param1, param.param2);
}
},
&xtimer_attacher_.timer_list_);
}
}
} else {
std::list<MetaData::AirDrop>& air_drops = MetaMgr::Instance()->GetAirDrops();
for (auto& air_drop : air_drops) {
if (air_drop.i->id() >= 1 && air_drop.i->id() <= 6) {
@ -1322,6 +1344,7 @@ void Room::InitAirDrop()
&xtimer_attacher_.timer_list_);
}
}
}
}
void Room::AirDrop(int appear_time, int box_id)

View File

@ -26,6 +26,8 @@ message Map
optional string map_name = 3; //
optional float map_width = 4;
optional float map_height = 5;
optional string airdrops = 6;
optional int32 terminator_airdrop = 7;
}
message MapThing