添加空投读取
This commit is contained in:
parent
5de5f931d2
commit
2f8844344e
@ -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()
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -1303,23 +1303,46 @@ void Room::CombineTeam()
|
||||
|
||||
void Room::InitAirDrop()
|
||||
{
|
||||
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) {
|
||||
xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * air_drop.i->time(),
|
||||
a8::XParams()
|
||||
.SetSender(this)
|
||||
.SetParam1(air_drop.i->appear_time())
|
||||
.SetParam2(air_drop.i->drop_id())
|
||||
.SetParam3(air_drop.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_);
|
||||
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) {
|
||||
xtimer.AddDeadLineTimerAndAttach(SERVER_FRAME_RATE * air_drop.i->time(),
|
||||
a8::XParams()
|
||||
.SetSender(this)
|
||||
.SetParam1(air_drop.i->appear_time())
|
||||
.SetParam2(air_drop.i->drop_id())
|
||||
.SetParam3(air_drop.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_);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user