From ff6ad94b131c04fc754b9406d2ad7e8ab9894e19 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 29 Aug 2022 14:19:30 +0800 Subject: [PATCH] 1 --- server/gameserver/incubator.cc | 68 ++++++++++++++----------- server/gameserver/metadata.cc | 1 + server/gameserver/metadata.h | 1 + server/tools/protobuild/cs_proto.proto | 2 +- server/tools/protobuild/metatable.proto | 2 +- 5 files changed, 41 insertions(+), 33 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 7b158250..1abf0f09 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -288,41 +288,47 @@ void Incubator::SpawnWaveMon(int wave) { auto& mons = room->pve_mode_meta->waves[wave]; for (MetaData::PveGeminiContent* content : mons) { - room->xtimer.AddDeadLineTimerAndAttach - ( - room->IsDestoryRoom() ? 0 : SERVER_FRAME_RATE * 2, - a8::XParams() - .SetSender(this) - .SetParam1(content) - .SetParam2(room), - [] (const a8::XParams& param) - { - MetaData::PveGeminiContent* content = (MetaData::PveGeminiContent*)param.param1.GetUserData(); - Room* room = (Room*)param.param2.GetUserData(); - MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(content->pb->enemy_id()); - if (hero_meta) { - a8::Vec2 hero_pos = content->spawn_point; + for (int i = 0; i < content->enemys.size(); ++i) { + room->xtimer.AddDeadLineTimerAndAttach + ( + room->IsDestoryRoom() ? 0 : SERVER_FRAME_RATE * 2, + a8::XParams() + .SetSender(this) + .SetParam1(content) + .SetParam2(room) + .SetParam3(i), + [] (const a8::XParams& param) + { + MetaData::PveGeminiContent* content = (MetaData::PveGeminiContent*)param.param1.GetUserData(); + Room* room = (Room*)param.param2.GetUserData(); + if (param.param3.GetInt() < content->enemys.size()) { + int enemy_id = content->enemys[param.param3.GetInt()]; + MetaData::Player* hero_meta = MetaMgr::Instance()->GetPlayer(enemy_id); + if (hero_meta) { + a8::Vec2 hero_pos = content->spawn_point; - int team_id = 666; - Creature* master = nullptr; + int team_id = 666; + Creature* master = nullptr; - a8::Vec2 dir = hero_pos; - dir.Normalize(); + a8::Vec2 dir = hero_pos; + dir.Normalize(); - Hero* hero = room->CreateHero(master, - hero_meta, - hero_pos, - dir, - team_id); - if (!hero) { - A8_ABORT(); + Hero* hero = room->CreateHero(master, + hero_meta, + hero_pos, + dir, + team_id); + if (!hero) { + A8_ABORT(); + } + ++room->pve_data.mon_num; + room->NotifyUiUpdate(); + } } - ++room->pve_data.mon_num; - room->NotifyUiUpdate(); - } - }, - &xtimer_attacher_.timer_list_); - ++room->pve_data.refreshed_mon; + }, + &xtimer_attacher_.timer_list_); + } + room->pve_data.refreshed_mon += content->enemys.size(); } } diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index ce6d87f1..e4e651ab 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -1659,6 +1659,7 @@ namespace MetaData void PveGeminiContent::Init() { + } void PveGeminiMode::Init() diff --git a/server/gameserver/metadata.h b/server/gameserver/metadata.h index c68272df..f2c792fc 100644 --- a/server/gameserver/metadata.h +++ b/server/gameserver/metadata.h @@ -405,6 +405,7 @@ namespace MetaData { const metatable::PveGeminiContent* pb = nullptr; a8::Vec2 spawn_point; + std::vector enemys; void Init(); }; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index ba75f70a..6b9e8dd1 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -637,7 +637,7 @@ message MFTeamData optional bool disconnected = 5 [default = false]; //是否短线 optional bool dead = 6 [default = false]; //是否死亡 optional bool downed = 7 [default = false]; //是否倒下 - optional string name = 8; //名字 + optional string name = 8; //名字(只同步一次) optional float max_health = 9; //最大血量 optional bool riding = 40 [default = false]; //是否倒 下 optional string user_data = 60 [default = ""]; //用户自定义数据(只同步一次) diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 25d1f107..57757d72 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -476,7 +476,7 @@ message PveGeminiContent optional int32 mode_id = 2; optional int32 round = 3; optional string spawn_point = 4; - optional int32 enemy_id = 5; + optional string enemy_id = 5; } message PveGeminiMode