This commit is contained in:
aozhiwei 2021-06-10 16:40:48 +08:00
parent 311a184e98
commit 93edcf786d
10 changed files with 153 additions and 1 deletions

View File

@ -18,6 +18,14 @@ void FrameEvent::AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos)
TypeConvert::ToPb(box_pos, airdrop->mutable_pos()); TypeConvert::ToPb(box_pos, airdrop->mutable_pos());
} }
void FrameEvent::AddAirRaid(int appear_time, const a8::Vec2& raid_pos, float raid_rad)
{
cs::MFAirRaid* airraid = airraids_.Add();
airraid->set_appear_time(appear_time);
airraid->set_rad(raid_rad);
TypeConvert::ToPb(raid_pos, airraid->mutable_pos());
}
void FrameEvent::AddEmote(CreatureWeakPtr& sender, int emote_id) void FrameEvent::AddEmote(CreatureWeakPtr& sender, int emote_id)
{ {
{ {
@ -381,6 +389,9 @@ void FrameEvent::Clear()
if (airdrops_.size() > 0) { if (airdrops_.size() > 0) {
airdrops_.Clear(); airdrops_.Clear();
} }
if (airraids_.size() > 0) {
airraids_.Clear();
}
if (!chged_bullet_nums_.empty()) { if (!chged_bullet_nums_.empty()) {
chged_bullet_nums_.clear(); chged_bullet_nums_.clear();
} }

View File

@ -12,6 +12,7 @@ struct FrameEvent
{ {
public: public:
void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos); void AddAirDrop(int appear_time, int box_id, a8::Vec2 box_pos);
void AddAirRaid(int appear_time, const a8::Vec2& raid_pos, float raid_rad);
void AddEmote(CreatureWeakPtr& sender, int emote_id); void AddEmote(CreatureWeakPtr& sender, int emote_id);
void AddShot(CreatureWeakPtr& sender); void AddShot(CreatureWeakPtr& sender);
void AddBullet(CreatureWeakPtr& sender, void AddBullet(CreatureWeakPtr& sender,
@ -40,6 +41,7 @@ public:
void Clear(); void Clear();
private: private:
::google::protobuf::RepeatedPtrField<::cs::MFAirDrop> airdrops_; ::google::protobuf::RepeatedPtrField<::cs::MFAirDrop> airdrops_;
::google::protobuf::RepeatedPtrField<::cs::MFAirRaid> airraids_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFShot>> shots_; std::vector<std::tuple<CreatureWeakPtr, ::cs::MFShot>> shots_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFBullet>> bullets_; std::vector<std::tuple<CreatureWeakPtr, ::cs::MFBullet>> bullets_;
std::vector<std::tuple<CreatureWeakPtr, ::cs::MFExplosion>> explosions_; std::vector<std::tuple<CreatureWeakPtr, ::cs::MFExplosion>> explosions_;

View File

@ -38,6 +38,13 @@ namespace MetaData
airdrops.push_back(a8::XValue(str).GetInt()); airdrops.push_back(a8::XValue(str).GetInt());
} }
} }
{
std::vector<std::string> strings;
a8::Split(i->airraids(), strings, '|');
for (auto& str : strings) {
airraids.push_back(a8::XValue(str).GetInt());
}
}
{ {
std::vector<std::string> strings; std::vector<std::string> strings;
a8::Split(i->game_start_buff_list(), strings, ':'); a8::Split(i->game_start_buff_list(), strings, ':');
@ -609,6 +616,11 @@ namespace MetaData
return 0; return 0;
} }
void AirRaid::Init()
{
}
void AirLine::Init() void AirLine::Init()
{ {
{ {

View File

@ -23,6 +23,7 @@ namespace MetaData
std::vector<std::tuple<std::string, int>> template_list; std::vector<std::tuple<std::string, int>> template_list;
int rand_space = 0; int rand_space = 0;
std::vector<int> airdrops; std::vector<int> airdrops;
std::vector<int> airraids;
int refresh_robot_min_num = 0; int refresh_robot_min_num = 0;
int refresh_robot_max_num = 0; int refresh_robot_max_num = 0;
int refresh_robot_min_time = 0; int refresh_robot_min_time = 0;
@ -161,6 +162,13 @@ namespace MetaData
const metatable::AirDrop* i = nullptr; const metatable::AirDrop* i = nullptr;
}; };
struct AirRaid
{
const metatable::AirRaid* i = nullptr;
void Init();
};
struct AirLine struct AirLine
{ {
const metatable::AirLine* i = nullptr; const metatable::AirLine* i = nullptr;

View File

@ -41,6 +41,8 @@ public:
std::list<MetaData::Drop> drop_list; std::list<MetaData::Drop> drop_list;
std::list<metatable::AirDrop> airdrop_meta_list; std::list<metatable::AirDrop> airdrop_meta_list;
std::list<MetaData::AirDrop> airdrop_list; std::list<MetaData::AirDrop> airdrop_list;
std::list<metatable::AirRaid> airraid_meta_list;
std::list<MetaData::AirRaid> airraid_list;
std::list<metatable::AirLine> airline_meta_list; std::list<metatable::AirLine> airline_meta_list;
std::list<MetaData::AirLine> airline_list; std::list<MetaData::AirLine> airline_list;
std::list<metatable::Dress> dress_meta_list; std::list<metatable::Dress> dress_meta_list;
@ -71,6 +73,7 @@ public:
std::map<std::string, MetaData::Parameter*> parameter_hash; std::map<std::string, MetaData::Parameter*> parameter_hash;
std::map<int, MetaData::Map*> gamemap_hash; std::map<int, MetaData::Map*> gamemap_hash;
std::map<int, MetaData::AirDrop*> airdrop_hash; std::map<int, MetaData::AirDrop*> airdrop_hash;
std::map<int, MetaData::AirRaid*> airraid_hash;
std::map<int, MetaData::SafeArea*> safearea_hash; std::map<int, MetaData::SafeArea*> safearea_hash;
std::map<int, MetaData::Item*> item_hash; std::map<int, MetaData::Item*> item_hash;
std::map<int, MetaData::Equip*> equip_hash; std::map<int, MetaData::Equip*> equip_hash;
@ -129,6 +132,7 @@ public:
f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list); f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list);
f8::ReadCsvMetaFile(res_path + "drop@drop.csv", drop_meta_list); f8::ReadCsvMetaFile(res_path + "drop@drop.csv", drop_meta_list);
f8::ReadCsvMetaFile(res_path + "airdrop@airdrop.csv", airdrop_meta_list); f8::ReadCsvMetaFile(res_path + "airdrop@airdrop.csv", airdrop_meta_list);
f8::ReadCsvMetaFile(res_path + "airraid@airraid.csv", airraid_meta_list);
f8::ReadCsvMetaFile(res_path + "airline@airline.csv", airline_meta_list); f8::ReadCsvMetaFile(res_path + "airline@airline.csv", airline_meta_list);
f8::ReadJsonMetaFile(res_path + "maps.json", building_meta_list); f8::ReadJsonMetaFile(res_path + "maps.json", building_meta_list);
f8::ReadCsvMetaFile(res_path + "dress@dress.csv", dress_meta_list); f8::ReadCsvMetaFile(res_path + "dress@dress.csv", dress_meta_list);
@ -570,6 +574,13 @@ private:
airdrop_hash[meta.id()] = &item; airdrop_hash[meta.id()] = &item;
} }
for (auto& meta : airraid_meta_list) {
MetaData::AirRaid& item = a8::FastAppend(airraid_list);
item.i = &meta;
item.Init();
airraid_hash[meta.id()] = &item;
}
for (auto& meta : airline_meta_list) { for (auto& meta : airline_meta_list) {
MetaData::AirLine& item = a8::FastAppend(airline_list); MetaData::AirLine& item = a8::FastAppend(airline_list);
item.i = &meta; item.i = &meta;
@ -801,6 +812,17 @@ MetaData::AirDrop* MetaMgr::GetAirDrop(int airdrop_id)
return itr != loader_->airdrop_hash.end() ? itr->second : nullptr; return itr != loader_->airdrop_hash.end() ? itr->second : nullptr;
} }
std::list<MetaData::AirRaid>& MetaMgr::GetAirRaids()
{
return loader_->airraid_list;
}
MetaData::AirRaid* MetaMgr::GetAirRaid(int airraid_id)
{
auto itr = loader_->airraid_hash.find(airraid_id);
return itr != loader_->airraid_hash.end() ? itr->second : nullptr;
}
MetaData::AirLine* MetaMgr::RandAirLine(int map_id) MetaData::AirLine* MetaMgr::RandAirLine(int map_id)
{ {
auto itr = loader_->airline_hash.find(map_id); auto itr = loader_->airline_hash.find(map_id);

View File

@ -36,6 +36,8 @@ class MetaMgr : public a8::Singleton<MetaMgr>
std::list<metatable::MapLayerJson>* GetMapLayer(const std::string& map_name); std::list<metatable::MapLayerJson>* GetMapLayer(const std::string& map_name);
std::list<MetaData::AirDrop>& GetAirDrops(); std::list<MetaData::AirDrop>& GetAirDrops();
MetaData::AirDrop* GetAirDrop(int airdrop_id); MetaData::AirDrop* GetAirDrop(int airdrop_id);
std::list<MetaData::AirRaid>& GetAirRaids();
MetaData::AirRaid* GetAirRaid(int airraid_id);
MetaData::AirLine* RandAirLine(int map_id); MetaData::AirLine* RandAirLine(int map_id);
MetaData::Skill* GetSkill(int skill_id); MetaData::Skill* GetSkill(int skill_id);
MetaData::Buff* GetBuff(int buff_id); MetaData::Buff* GetBuff(int buff_id);

View File

@ -1275,7 +1275,6 @@ void Room::UpdateGasInactive()
CombineTeam(); CombineTeam();
ShuaPlane(); ShuaPlane();
NotifyWxVoip(); NotifyWxVoip();
InitAirDrop();
InitAndroidAI(); InitAndroidAI();
RoomMgr::Instance()->ActiveRoom(GetRoomUuid()); RoomMgr::Instance()->ActiveRoom(GetRoomUuid());
int auto_jump_interval = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_interval"); int auto_jump_interval = MetaMgr::Instance()->GetSysParamAsInt("auto_jump_interval");
@ -1418,6 +1417,7 @@ void Room::UpdateGasJump()
NotifyWxVoip(); NotifyWxVoip();
if (room_type_ != RT_NewBrid) { if (room_type_ != RT_NewBrid) {
InitAirDrop(); InitAirDrop();
InitAirRaid();
} }
} }
} }
@ -3880,3 +3880,75 @@ void Room::SetInfiniteBulletMode()
pair.second->SetInfiniteBulletMode(); pair.second->SetInfiniteBulletMode();
} }
} }
void Room::InitAirRaid()
{
std::list<MetaData::AirRaid>& air_raids = MetaMgr::Instance()->GetAirRaids();
for (auto& air_raid : air_raids) {
xtimer.AddDeadLineTimerAndAttach
(SERVER_FRAME_RATE * air_raid.i->time(),
a8::XParams()
.SetSender(this)
.SetParam1(air_raid.i->id()),
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
if (!room->IsGameOver()) {
room->AirRaid(param.param1);
}
},
&xtimer_attacher_.timer_list_);
}
}
void Room::AirRaid(int airraid_id)
{
MetaData::AirRaid* raid_meta = MetaMgr::Instance()->GetAirRaid(airraid_id);
if (!raid_meta) {
return;
}
MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(raid_meta->i->bomb_id());
if (!thing_meta) {
return;
}
a8::Vec2 dir = a8::Vec2::UP;
dir.Rotate(a8::RandAngle());
a8::Vec2 center = gas_data_.pos_new + dir * (500 + rand() % 300);
frame_event.AddAirRaid(raid_meta->i->appear_time(), center, raid_meta->i->rad());
auto raid_cb =
[] (const a8::XParams& param)
{
Room* room = (Room*)param.sender.GetUserData();
if (room->IsGameOver()) {
return;
}
MetaData::AirRaid* raid_meta = (MetaData::AirRaid*)param.param1.GetUserData();
a8::Vec2 center = a8::Vec2
(
param.param2.GetDouble(),
param.param3.GetDouble()
);
for (int i = 0; i < raid_meta->i->bomb_num(); ++i) {
a8::Vec2 pos = center;
RoomObstacle* obstacle = room->CreateObstacle
(
raid_meta->i->bomb_id(),
pos.x,
pos.y
);
if (obstacle) {
}
}
};
xtimer.AddDeadLineTimerAndAttach
(SERVER_FRAME_RATE * raid_meta->i->appear_time() / 1000.f,
a8::XParams()
.SetSender(this)
.SetParam2(raid_meta)
.SetParam2(center.x)
.SetParam3(center.y),
raid_cb,
&xtimer_attacher_.timer_list_);
}

View File

@ -160,6 +160,7 @@ public:
long long GetGasInactiveTime(); long long GetGasInactiveTime();
void ShuaGuideAndroid(Human* target); void ShuaGuideAndroid(Human* target);
void InitAirDrop(); void InitAirDrop();
void InitAirRaid();
void CheckPartObjects(Human* testa = nullptr, Human* testb = nullptr); void CheckPartObjects(Human* testa = nullptr, Human* testb = nullptr);
bool RuningInTimer(); bool RuningInTimer();
Human* GetOneCanEnableAndroid(); Human* GetOneCanEnableAndroid();
@ -200,6 +201,7 @@ private:
void CombineTeam(); void CombineTeam();
void AirDrop(int appear_time, int box_id, int airdrop_id); void AirDrop(int appear_time, int box_id, int airdrop_id);
void AdjustAirDropPos(MetaData::MapThing* thing_meta, a8::Vec2& box_pos); void AdjustAirDropPos(MetaData::MapThing* thing_meta, a8::Vec2& box_pos);
void AirRaid(int airraid_id);
void ShuaPlane(); void ShuaPlane();
Team* NewTeam(); Team* NewTeam();
RoomObstacle* InternalCreateObstacle(int id, float x, float y, RoomObstacle* InternalCreateObstacle(int id, float x, float y,
@ -303,6 +305,7 @@ private:
MetaData::AirLine* airline_ = nullptr; MetaData::AirLine* airline_ = nullptr;
a8::XTimerAttacher xtimer_attacher_; a8::XTimerAttacher xtimer_attacher_;
size_t airdrop_times_ = 0; size_t airdrop_times_ = 0;
size_t airraid_times_ = 0;
int level0room_born_point_uniid_ = 0; int level0room_born_point_uniid_ = 0;
int level1room_born_point_uniid_ = 0; int level1room_born_point_uniid_ = 0;
bool show_handed_ = false; bool show_handed_ = false;

View File

@ -706,6 +706,14 @@ message MFAirDrop
optional MFVec2 pos = 3; // optional MFVec2 pos = 3; //
} }
//
message MFAirRaid
{
optional int32 appear_time = 1; //()
optional MFVec2 pos = 3; //
optional float rad = 4; //
}
//buff //buff
message MFBuff message MFBuff
{ {
@ -1074,6 +1082,7 @@ message SMUpdate
repeated MFBuffChg chged_buff_list = 28; //buff变更列表 repeated MFBuffChg chged_buff_list = 28; //buff变更列表
repeated MFPropertyChg chged_property_list = 31; //property变更列表 repeated MFPropertyChg chged_property_list = 31; //property变更列表
repeated MFPlaySkill play_skill_list = 32; // repeated MFPlaySkill play_skill_list = 32; //
optional MFAirRaid airraid = 33; //
repeated MFTuple dead_alive_objs = 42; //values[0]:objid values[1]: values[2]: 0: 1: repeated MFTuple dead_alive_objs = 42; //values[0]:objid values[1]: values[2]: 0: 1:
// //

View File

@ -36,6 +36,7 @@ message Map
optional string map_pic = 13; optional string map_pic = 13;
optional string first_safearea_center = 14; optional string first_safearea_center = 14;
optional int32 init_gas_ring = 15; optional int32 init_gas_ring = 15;
optional string airraids = 16;
} }
message MapThing message MapThing
@ -254,6 +255,16 @@ message AirDrop
optional int32 drop_id = 4; optional int32 drop_id = 4;
} }
message AirRaid
{
optional int32 id = 1;
optional int32 time = 2;
optional int32 appear_time = 3;
optional int32 bomb_id = 4;
optional int32 bomb_num = 5;
optional float rad = 6;
}
message AirLine message AirLine
{ {
optional int32 id = 1; optional int32 id = 1;