From c7d45faa84779b097f5a9d5eb65b9720b950c798 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 28 Apr 2023 11:47:20 +0800 Subject: [PATCH 01/13] 1 --- server/gameserver/guide.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/server/gameserver/guide.cc b/server/gameserver/guide.cc index 1ee30861..f3493d88 100644 --- a/server/gameserver/guide.cc +++ b/server/gameserver/guide.cc @@ -27,11 +27,7 @@ void Guide::Init(Human* owner) UpdateStep(); owner_->room->xtimer.SetTimeoutEx ( - #ifdef DEBUG - SERVER_FRAME_RATE * 1, - #else SERVER_FRAME_RATE * 60 * 10, - #endif [this] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { From ac98f6a6e0be5262d6be69460ca78bd350ce9623 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 28 Apr 2023 13:22:14 +0800 Subject: [PATCH 02/13] 1 --- server/gameserver/human.cc | 12 ++++++++++-- server/gameserver/mt/Param.cc | 1 + server/gameserver/mt/Param.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index fbb64c27..45d52549 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2583,9 +2583,17 @@ void Human::ProcLootWeapon(AddItemDTO& dto) } if (weapons[GUN_SLOT1].weapon_id != 0 && weapons[GUN_SLOT2].weapon_id != 0) { if (GetCurrWeapon() == &weapons[GUN_SLOT1]) { - DropWeapon(GUN_SLOT2, 1); + if (mt::Param::s().pickup_weapon_replace_type) { + DropWeapon(GUN_SLOT1, 1); + } else { + DropWeapon(GUN_SLOT2, 1); + } } else { - DropWeapon(GUN_SLOT1, 1); + if (mt::Param::s().pickup_weapon_replace_type) { + DropWeapon(GUN_SLOT2, 1); + } else { + DropWeapon(GUN_SLOT1, 1); + } } } bool switch_gun = false; diff --git a/server/gameserver/mt/Param.cc b/server/gameserver/mt/Param.cc index 83d9a79c..0a30e7ae 100644 --- a/server/gameserver/mt/Param.cc +++ b/server/gameserver/mt/Param.cc @@ -36,6 +36,7 @@ namespace mt s_.match_robot_time = GetIntParam("match_robot_time", 0); s_.match_choose_time = GetIntParam("match_choose_time", 0); s_.match_lock_time = GetIntParam("match_lock_time", 0); + s_.pickup_weapon_replace_type = GetIntParam("pickup_weapon_replace_type", 0); #if 1 s_.match_lock_time++; #endif diff --git a/server/gameserver/mt/Param.h b/server/gameserver/mt/Param.h index 870e1657..09b08679 100644 --- a/server/gameserver/mt/Param.h +++ b/server/gameserver/mt/Param.h @@ -25,6 +25,7 @@ namespace mt int newbie_room_weapon_id = 0; std::vector newbie_room_skills; std::vector newbie_room_area; + int pickup_weapon_replace_type = 0; int downed_relive_recover_hp = 0; From 99970f916a91cc2f76c8c19ffe52e8499957ecc4 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 28 Apr 2023 15:22:20 +0800 Subject: [PATCH 03/13] 1 --- server/gameserver/human.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 45d52549..4840b86f 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2584,15 +2584,15 @@ void Human::ProcLootWeapon(AddItemDTO& dto) if (weapons[GUN_SLOT1].weapon_id != 0 && weapons[GUN_SLOT2].weapon_id != 0) { if (GetCurrWeapon() == &weapons[GUN_SLOT1]) { if (mt::Param::s().pickup_weapon_replace_type) { - DropWeapon(GUN_SLOT1, 1); - } else { DropWeapon(GUN_SLOT2, 1); + } else { + DropWeapon(GUN_SLOT1, 1); } } else { if (mt::Param::s().pickup_weapon_replace_type) { - DropWeapon(GUN_SLOT2, 1); - } else { DropWeapon(GUN_SLOT1, 1); + } else { + DropWeapon(GUN_SLOT2, 1); } } } From 801e8335911fcee2ec36d854916b4bb56ad9bd60 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 28 Apr 2023 16:12:13 +0800 Subject: [PATCH 04/13] 1 --- server/gameserver/human.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 4840b86f..24ed1504 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2581,6 +2581,7 @@ void Human::ProcLootWeapon(AddItemDTO& dto) if (FreezeOperate()) { return; } + bool droped = false; if (weapons[GUN_SLOT1].weapon_id != 0 && weapons[GUN_SLOT2].weapon_id != 0) { if (GetCurrWeapon() == &weapons[GUN_SLOT1]) { if (mt::Param::s().pickup_weapon_replace_type) { @@ -2595,6 +2596,7 @@ void Human::ProcLootWeapon(AddItemDTO& dto) DropWeapon(GUN_SLOT2, 1); } } + droped = true; } bool switch_gun = false; Weapon* weapon = TakeonWeapon(dto.item_meta); @@ -2606,6 +2608,9 @@ void Human::ProcLootWeapon(AddItemDTO& dto) if (!weapon) { return; } + if (droped && !mt::Param::s().pickup_weapon_replace_type) { + switch_gun = true; + } weapon->weapon_id = dto.item_id; weapon->meta = dto.item_meta; weapon->ammo = 0; From 339b301db3c61633b4c0652bf9a77527edf0a0da Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 9 May 2023 16:03:17 +0800 Subject: [PATCH 05/13] 1 --- server/gameserver/buff/callfunc.cc | 5 +++-- server/gameserver/buff/callfunc.h | 1 + server/gameserver/creature.cc | 7 ++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index e288b4a8..41dc3b37 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -22,6 +22,7 @@ void CallFuncBuff::Activate() { + hold_weapon_ = owner->GetCurrWeapon(); switch ((BuffCallFunc_e)meta->_int_buff_param1) { case BuffCallFunc_e::kAddMinorMode: { @@ -179,7 +180,7 @@ void CallFuncBuff::Deactivate() break; case BuffCallFunc_e::kSetBulletBornOffset: { - owner->GetCurrWeapon()->bullet_born_offset_ptr = nullptr; + hold_weapon_->bullet_born_offset_ptr = nullptr; } break; case BuffCallFunc_e::kImmuneAllMove: @@ -194,7 +195,7 @@ void CallFuncBuff::Deactivate() break; case BuffCallFunc_e::kSetGunBuffId: { - owner->GetCurrWeapon()->buff_id = 0; + hold_weapon_->buff_id = 0; } break; case BuffCallFunc_e::kAddEnergyShield: diff --git a/server/gameserver/buff/callfunc.h b/server/gameserver/buff/callfunc.h index c070c926..98700fe5 100644 --- a/server/gameserver/buff/callfunc.h +++ b/server/gameserver/buff/callfunc.h @@ -56,4 +56,5 @@ class CallFuncBuff : public Buff void DecSkillCd(); float hold_param2_ = 0.0; + Weapon* hold_weapon_ = nullptr; }; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 2ed541d5..d8c68bb5 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1674,10 +1674,11 @@ void Creature::SetCurrWeapon(Weapon* weapon) if (!auto_switch_weapon_timer_.expired()) { room->xtimer.Delete(auto_switch_weapon_timer_); } - if (curr_weapon_ != weapon) { - GetTrigger()->TakeonWeapon(curr_weapon_, weapon); - } + Weapon* old_weapon = curr_weapon_; curr_weapon_ = weapon; + if (old_weapon != weapon) { + GetTrigger()->TakeonWeapon(old_weapon, weapon); + } if (need_recalc) { RecalcDtoAttr(); } From 7101ef89e882d2542a8b9e1cc11a1c786c195398 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 9 May 2023 16:50:12 +0800 Subject: [PATCH 06/13] 1 --- server/gameserver/mtb/AirRaid.h | 6 ++++++ server/gameserver/mtb/mtb.all.cc | 2 ++ server/tools/protobuild/mt.proto | 2 ++ 3 files changed, 10 insertions(+) diff --git a/server/gameserver/mtb/AirRaid.h b/server/gameserver/mtb/AirRaid.h index e9956e5c..f3d3809d 100644 --- a/server/gameserver/mtb/AirRaid.h +++ b/server/gameserver/mtb/AirRaid.h @@ -16,6 +16,8 @@ namespace mtb const std::string bomb_id() const { return bomb_id_; }; const std::string raid_wave() const { return raid_wave_; }; float rad() const { return rad_; }; + const std::string bombling_time() const { return bombling_time_; }; + float damage() const { return damage_; }; bool has_id() const { return __flags__.test(0);}; bool has_time() const { return __flags__.test(1);}; @@ -23,6 +25,8 @@ namespace mtb bool has_bomb_id() const { return __flags__.test(3);}; bool has_raid_wave() const { return __flags__.test(4);}; bool has_rad() const { return __flags__.test(5);}; + bool has_bombling_time() const { return __flags__.test(6);}; + bool has_damage() const { return __flags__.test(7);}; protected: @@ -32,6 +36,8 @@ namespace mtb std::string bomb_id_; std::string raid_wave_; float rad_ = 0.0f; + std::string bombling_time_; + float damage_ = 0.0f; public: std::bitset<6> __flags__; diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index 7811255b..b6424c03 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -528,6 +528,8 @@ namespace mtb meta_class->SetSimpleField(3, "bomb_id", a8::reflect::ET_STRING, my_offsetof2(AirRaid, bomb_id_)); meta_class->SetSimpleField(4, "raid_wave", a8::reflect::ET_STRING, my_offsetof2(AirRaid, raid_wave_)); meta_class->SetSimpleField(5, "rad", a8::reflect::ET_FLOAT, my_offsetof2(AirRaid, rad_)); + meta_class->SetSimpleField(6, "bombling_time", a8::reflect::ET_STRING, my_offsetof2(AirRaid, bombling_time_)); + meta_class->SetSimpleField(7, "damage", a8::reflect::ET_FLOAT, my_offsetof2(AirRaid, damage_)); } return meta_class; } diff --git a/server/tools/protobuild/mt.proto b/server/tools/protobuild/mt.proto index 9eadd4d9..044cbfe3 100755 --- a/server/tools/protobuild/mt.proto +++ b/server/tools/protobuild/mt.proto @@ -417,6 +417,8 @@ message AirRaid optional string bomb_id = 4; optional string raid_wave = 5; optional float rad = 6; + optional string bombling_time = 7; + optional float damage = 8; } message AirLine From f192457a77956754ce666b1ee363e267528ae7e3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 9 May 2023 17:55:19 +0800 Subject: [PATCH 07/13] 1 --- server/gameserver/mt/AirRaid.cc | 12 ++++++++++++ server/gameserver/mt/AirRaid.h | 1 + server/tools/protobuild/cs_proto.proto | 1 + 3 files changed, 14 insertions(+) diff --git a/server/gameserver/mt/AirRaid.cc b/server/gameserver/mt/AirRaid.cc index 9c382b94..77428678 100644 --- a/server/gameserver/mt/AirRaid.cc +++ b/server/gameserver/mt/AirRaid.cc @@ -28,6 +28,18 @@ namespace mt ); } } + { + std::vector strings; + a8::Split(bombling_time(), strings, ':'); + if (strings.size() == 0) { + _bombling_time = std::make_tuple(0, 0); + } else if (strings.size() == 2) { + _bombling_time = std::make_tuple(a8::XValue(strings[0]).GetInt(), + a8::XValue(strings[1]).GetInt()); + } else { + abort(); + } + } } } diff --git a/server/gameserver/mt/AirRaid.h b/server/gameserver/mt/AirRaid.h index 5242ab4b..08d76e13 100644 --- a/server/gameserver/mt/AirRaid.h +++ b/server/gameserver/mt/AirRaid.h @@ -15,6 +15,7 @@ namespace mt std::vector> _raid_waves; std::vector _bomb_ids; + std::tuple _bombling_time; }; diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index 80afdb78..835515d9 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -834,6 +834,7 @@ message MFAirRaid optional int32 appear_time = 1; //空袭出现时间(毫秒) optional MFVec3 pos = 3; //空袭位置 optional float rad = 4; //空袭半径 + optional int32 continue_time = 5; //轰炸持续时间,(在空袭出现后!!!) } //buff From 9fa549a75ca9d270e9c546d7af09f8ebd986653e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 May 2023 10:25:20 +0800 Subject: [PATCH 08/13] 1 --- server/gameserver/airraid.cc | 9 ++++++++- server/gameserver/frameevent.cc | 3 ++- server/gameserver/frameevent.h | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index bd24e7cd..40e532fe 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -104,12 +104,18 @@ bool AirRaid::GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center) } center = point; } - room_->frame_event.AddAirRaid(raid_meta->appear_time(), center, raid_meta->rad()); + room_->frame_event.AddAirRaid(raid_meta->appear_time(), + center, + raid_meta->rad(), + std::get<0>(raid_meta->_bombling_time) + ); return true; } void AirRaid::ExecOneRoundAirRaid(const mt::AirRaid* raid_meta, const glm::vec3& pos) { + #if 1 + #else for (auto& tuple : raid_meta->_raid_waves) { int num = std::get<0>(tuple); int delay = std::get<1>(tuple); @@ -154,4 +160,5 @@ void AirRaid::ExecOneRoundAirRaid(const mt::AirRaid* raid_meta, const glm::vec3& &room_->xtimer_attacher_); } } + #endif } diff --git a/server/gameserver/frameevent.cc b/server/gameserver/frameevent.cc index ae0094a0..b62533f2 100644 --- a/server/gameserver/frameevent.cc +++ b/server/gameserver/frameevent.cc @@ -21,11 +21,12 @@ void FrameEvent::AddAirDrop(int appear_time, int box_id, const glm::vec3& box_po TypeConvert::ToPb(box_pos, airdrop->mutable_pos()); } -void FrameEvent::AddAirRaid(int appear_time, const glm::vec3& raid_pos, float raid_rad) +void FrameEvent::AddAirRaid(int appear_time, const glm::vec3& raid_pos, float raid_rad, int continue_time) { cs::MFAirRaid* airraid = room->frame_event_data->airraids_.Add(); airraid->set_appear_time(appear_time); airraid->set_rad(raid_rad); + airraid->set_continue_time(continue_time); TypeConvert::ToPb(raid_pos, airraid->mutable_pos()); } diff --git a/server/gameserver/frameevent.h b/server/gameserver/frameevent.h index ffda6485..73ccd31b 100644 --- a/server/gameserver/frameevent.h +++ b/server/gameserver/frameevent.h @@ -14,7 +14,7 @@ public: Room* room = nullptr; void AddAirDrop(int appear_time, int box_id, const glm::vec3& box_pos); - void AddAirRaid(int appear_time, const glm::vec3& raid_pos, float raid_rad); + void AddAirRaid(int appear_time, const glm::vec3& raid_pos, float raid_rad, int continue_time); void AddEmote(CreatureWeakPtr& sender, int emote_id); void AddShot(CreatureWeakPtr& sender); void AddBullet(int bullet_uniid, From abb8cf4681835ec9f3be7f6b084c4d4b76ffa6b5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 May 2023 10:34:19 +0800 Subject: [PATCH 09/13] 1 --- server/gameserver/airraid.cc | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index 40e532fe..6a2dc2d3 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -115,6 +115,51 @@ bool AirRaid::GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center) void AirRaid::ExecOneRoundAirRaid(const mt::AirRaid* raid_meta, const glm::vec3& pos) { #if 1 + int continue_time = std::get<0>(raid_meta->_bombling_time); + int interval_time = std::get<1>(raid_meta->_bombling_time); + int bomb_times = continue_time / std::max(1, interval_time); + for (int i = 0; i < bomb_times; ++i) { + glm::vec3 born_pos = pos; + int num = 1; + int delay = i * interval_time * 1000; + + auto bomb_cb = + [this, raid_meta, num, delay, born_pos] + (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + if (room_->IsGameOver()) { + return; + } + glm::vec3 center = born_pos; + room_->map_instance->Scale(center); + glm::vec3 point; + if (room_->map_instance->FindRandomPointAroundCircle + ( + center, + 100 * room_->GetMapMeta()->scale(), + point + )) { + room_->map_instance->UnScale(point); + for (auto bomb_id : raid_meta->_bomb_ids) { + RoomObstacle* obstacle = room_->CreateObstacle + ( + bomb_id, + point.x, + point.y, + point.z + ); + obstacle->Active(); + } + } + } + }; + + room_->xtimer.SetTimeoutEx + (delay / FRAME_RATE_MS, + bomb_cb, + &room_->xtimer_attacher_); + } #else for (auto& tuple : raid_meta->_raid_waves) { int num = std::get<0>(tuple); From c323f750614cb2c5ba97ad38ff12e8a38171120b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 May 2023 11:14:28 +0800 Subject: [PATCH 10/13] 1 --- server/gameserver/airraid.cc | 6 +++--- server/gameserver/mt/AirRaid.cc | 6 +++--- server/gameserver/mt/AirRaid.h | 2 +- server/gameserver/mtb/AirRaid.h | 8 ++++---- server/gameserver/mtb/mtb.all.cc | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index 6a2dc2d3..978799e4 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -107,7 +107,7 @@ bool AirRaid::GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center) room_->frame_event.AddAirRaid(raid_meta->appear_time(), center, raid_meta->rad(), - std::get<0>(raid_meta->_bombling_time) + std::get<0>(raid_meta->_bombing_time) ); return true; } @@ -115,8 +115,8 @@ bool AirRaid::GenAirRaidPos(const mt::AirRaid* raid_meta, glm::vec3& center) void AirRaid::ExecOneRoundAirRaid(const mt::AirRaid* raid_meta, const glm::vec3& pos) { #if 1 - int continue_time = std::get<0>(raid_meta->_bombling_time); - int interval_time = std::get<1>(raid_meta->_bombling_time); + int continue_time = std::get<0>(raid_meta->_bombing_time); + int interval_time = std::get<1>(raid_meta->_bombing_time); int bomb_times = continue_time / std::max(1, interval_time); for (int i = 0; i < bomb_times; ++i) { glm::vec3 born_pos = pos; diff --git a/server/gameserver/mt/AirRaid.cc b/server/gameserver/mt/AirRaid.cc index 77428678..990a1571 100644 --- a/server/gameserver/mt/AirRaid.cc +++ b/server/gameserver/mt/AirRaid.cc @@ -30,11 +30,11 @@ namespace mt } { std::vector strings; - a8::Split(bombling_time(), strings, ':'); + a8::Split(bombing_time(), strings, ':'); if (strings.size() == 0) { - _bombling_time = std::make_tuple(0, 0); + _bombing_time = std::make_tuple(0, 0); } else if (strings.size() == 2) { - _bombling_time = std::make_tuple(a8::XValue(strings[0]).GetInt(), + _bombing_time = std::make_tuple(a8::XValue(strings[0]).GetInt(), a8::XValue(strings[1]).GetInt()); } else { abort(); diff --git a/server/gameserver/mt/AirRaid.h b/server/gameserver/mt/AirRaid.h index 08d76e13..f539613c 100644 --- a/server/gameserver/mt/AirRaid.h +++ b/server/gameserver/mt/AirRaid.h @@ -15,7 +15,7 @@ namespace mt std::vector> _raid_waves; std::vector _bomb_ids; - std::tuple _bombling_time; + std::tuple _bombing_time; }; diff --git a/server/gameserver/mtb/AirRaid.h b/server/gameserver/mtb/AirRaid.h index f3d3809d..7aaa40ef 100644 --- a/server/gameserver/mtb/AirRaid.h +++ b/server/gameserver/mtb/AirRaid.h @@ -16,7 +16,7 @@ namespace mtb const std::string bomb_id() const { return bomb_id_; }; const std::string raid_wave() const { return raid_wave_; }; float rad() const { return rad_; }; - const std::string bombling_time() const { return bombling_time_; }; + const std::string bombing_time() const { return bombing_time_; }; float damage() const { return damage_; }; bool has_id() const { return __flags__.test(0);}; @@ -25,7 +25,7 @@ namespace mtb bool has_bomb_id() const { return __flags__.test(3);}; bool has_raid_wave() const { return __flags__.test(4);}; bool has_rad() const { return __flags__.test(5);}; - bool has_bombling_time() const { return __flags__.test(6);}; + bool has_bombing_time() const { return __flags__.test(6);}; bool has_damage() const { return __flags__.test(7);}; protected: @@ -36,11 +36,11 @@ namespace mtb std::string bomb_id_; std::string raid_wave_; float rad_ = 0.0f; - std::string bombling_time_; + std::string bombing_time_; float damage_ = 0.0f; public: - std::bitset<6> __flags__; + std::bitset<8> __flags__; }; }; diff --git a/server/gameserver/mtb/mtb.all.cc b/server/gameserver/mtb/mtb.all.cc index b6424c03..e4afea28 100644 --- a/server/gameserver/mtb/mtb.all.cc +++ b/server/gameserver/mtb/mtb.all.cc @@ -521,14 +521,14 @@ namespace mtb { a8::reflect::Class* meta_class = nullptr; if (!meta_class) { - meta_class = new a8::reflect::Class("AirRaid", 6, 0); + meta_class = new a8::reflect::Class("AirRaid", 8, 0); meta_class->SetSimpleField(0, "id", a8::reflect::ET_INT32, my_offsetof2(AirRaid, id_)); meta_class->SetSimpleField(1, "time", a8::reflect::ET_INT32, my_offsetof2(AirRaid, time_)); meta_class->SetSimpleField(2, "appear_time", a8::reflect::ET_INT32, my_offsetof2(AirRaid, appear_time_)); meta_class->SetSimpleField(3, "bomb_id", a8::reflect::ET_STRING, my_offsetof2(AirRaid, bomb_id_)); meta_class->SetSimpleField(4, "raid_wave", a8::reflect::ET_STRING, my_offsetof2(AirRaid, raid_wave_)); meta_class->SetSimpleField(5, "rad", a8::reflect::ET_FLOAT, my_offsetof2(AirRaid, rad_)); - meta_class->SetSimpleField(6, "bombling_time", a8::reflect::ET_STRING, my_offsetof2(AirRaid, bombling_time_)); + meta_class->SetSimpleField(6, "bombing_time", a8::reflect::ET_STRING, my_offsetof2(AirRaid, bombing_time_)); meta_class->SetSimpleField(7, "damage", a8::reflect::ET_FLOAT, my_offsetof2(AirRaid, damage_)); } return meta_class; From f755be2241fe77162f834f1a3f89da4a6a1724d8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 May 2023 11:48:39 +0800 Subject: [PATCH 11/13] 1 --- server/gameserver/airraid.cc | 14 +++++++++++++- server/gameserver/airraid.h | 6 ++++++ server/gameserver/commands.cc | 6 ++++++ server/gameserver/room.h | 1 + 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index 978799e4..2dac5770 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -25,7 +25,7 @@ void AirRaid::Init() ( [this] (const mt::AirRaid* air_raid, bool& stop) { - room_->xtimer.SetTimeoutEx + auto timer_wp = room_->xtimer.SetTimeoutWpEx (SERVER_FRAME_RATE * air_raid->time(), [this, air_raid] (int event, const a8::Args* args) { @@ -36,6 +36,9 @@ void AirRaid::Init() } }, &room_->xtimer_attacher_); + #ifdef DEBUG + timers_.push_back(timer_wp); + #endif }); } @@ -207,3 +210,12 @@ void AirRaid::ExecOneRoundAirRaid(const mt::AirRaid* raid_meta, const glm::vec3& } #endif } + +#ifdef DEBUG + +void AirRaid::NextRaid() +{ + +} + +#endif diff --git a/server/gameserver/airraid.h b/server/gameserver/airraid.h index df9211e3..5bfe5ae0 100644 --- a/server/gameserver/airraid.h +++ b/server/gameserver/airraid.h @@ -8,6 +8,9 @@ class AirRaid AirRaid(Room* room); void Init(); +#ifdef DEBUG + void NextRaid(); +#endif private: @@ -17,4 +20,7 @@ class AirRaid private: Room* room_ = nullptr; +#ifdef DEBUG + std::vector timers_; +#endif }; diff --git a/server/gameserver/commands.cc b/server/gameserver/commands.cc index d531c260..334fbe5c 100644 --- a/server/gameserver/commands.cc +++ b/server/gameserver/commands.cc @@ -8,6 +8,7 @@ #include "ability.h" #include "movement.h" #include "android.h" +#include "airraid.h" #include "cs_proto.pb.h" @@ -170,6 +171,11 @@ void Player::_CMExecCommand(f8::MsgHdr& hdr, const cs::CMExecCommand& msg) #if DEBUG room->debug_params[121] = 1; #endif + } else if (cmd == "next_raid") { + #if DEBUG + room->debug_params[121] = 1; + room->GetAirRaid()->NextRaid(); + #endif } else if (cmd == "autodie") { #if DEBUG if (cmds.size() >= 2) { diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 05155e48..b557f9b2 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -238,6 +238,7 @@ public: int GetReportRoomMode(); int GetPvpMatchMode(); void ForceOver(); + std::shared_ptr GetAirRaid() { return air_raid_; } private: void ShuaAndroid(); From 0720e7e8d1bf980265f8eb5a7cde06b628288349 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 May 2023 13:26:43 +0800 Subject: [PATCH 12/13] 1 --- server/gameserver/airraid.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/gameserver/airraid.cc b/server/gameserver/airraid.cc index 2dac5770..dbc25be1 100644 --- a/server/gameserver/airraid.cc +++ b/server/gameserver/airraid.cc @@ -215,7 +215,13 @@ void AirRaid::ExecOneRoundAirRaid(const mt::AirRaid* raid_meta, const glm::vec3& void AirRaid::NextRaid() { - + for (size_t i = 0; i < timers_.size(); ++i) { + auto& timer_wp = timers_.at(i); + if (!timer_wp.expired()) { + room_->xtimer.ModifyTime(timer_wp, 0); + break; + } + } } #endif From f5b8fc80713ea18b2df2eca0f504c3277bfc333a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 10 May 2023 15:43:58 +0800 Subject: [PATCH 13/13] 1 --- server/gameserver/commands.cc | 3 +++ server/gameserver/roomobstacle.cc | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/server/gameserver/commands.cc b/server/gameserver/commands.cc index 334fbe5c..75ef0507 100644 --- a/server/gameserver/commands.cc +++ b/server/gameserver/commands.cc @@ -293,4 +293,7 @@ void Player::_CMExecCommand(f8::MsgHdr& hdr, const cs::CMExecCommand& msg) skill->Accelerate(-10000000); } } +#ifdef DEBUG + a8::XPrintf("exec_cmd:%s\n", {cmd}); +#endif } diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 43665f53..313ebbd4 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -392,16 +392,16 @@ void RoomObstacle::DetachFromMaster() { if (!detached_) { detached_ = true; + xtimer_attacher.ClearTimerList(); if (master.Get()) { - xtimer_attacher.ClearTimerList(); master.Get()->SlaveOnRemove(this); - room->grid_service->DelRoomEntity(room, this); - if (!IsDead(room)) { - Die(room); - BroadcastFullState(room); - } - room->RemoveObjectLater(this); } + room->grid_service->DelRoomEntity(room, this); + if (!IsDead(room)) { + Die(room); + BroadcastFullState(room); + } + room->RemoveObjectLater(this); } if (!list_empty(&entry)) { list_del_init(&entry);