From 48c994270f2d7596d9db53ceacd0c06f2452eed3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Aug 2024 17:28:24 +0800 Subject: [PATCH 01/32] 1 --- server/gameserver/custom_battle.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/gameserver/custom_battle.h b/server/gameserver/custom_battle.h index 8e6355a4..1c4fb09c 100644 --- a/server/gameserver/custom_battle.h +++ b/server/gameserver/custom_battle.h @@ -49,6 +49,7 @@ class CustomBattle : public std::enable_shared_from_this bool IsCustomMode() { return custom_room_type_ == CUSTOM_ROOM_CUSTOM; } bool IsPvp() { return !is_moba_; } bool IsMoba() { return is_moba_; } + bool IsNewBieBattle() { return is_newbie_battle_; } void OnEnter(std::shared_ptr join_msg, long ip_saddr, int socket_handle, std::weak_ptr sd_handler); void OnMemberReady(CustomMember* member); @@ -75,6 +76,7 @@ private: int map_id_ = 0; int start_time_ = 0; int team1_average_hero_lv_ = 0; + int is_newbie_battle_ = 0; const mt::MapMode* map_mode_meta_ = nullptr; std::string sign_; std::shared_ptr raw_data_; From 04506acb20debaec252dfd4fdaae134f0ee8e29f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Aug 2024 17:32:43 +0800 Subject: [PATCH 02/32] 1 --- server/gameserver/custom_battle.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/server/gameserver/custom_battle.cc b/server/gameserver/custom_battle.cc index 470d2297..ad0ce297 100644 --- a/server/gameserver/custom_battle.cc +++ b/server/gameserver/custom_battle.cc @@ -51,6 +51,7 @@ void CustomBattle::ParseResult(a8::XObject& obj) map_id_ = obj.Get("map_id"); match_mode_ = obj.Get("match_mode"); start_time_ = obj.Get("start_time"); + is_newbie_battle_ = obj.Get("is_newbie_battle"); sign_ = obj.Get("sign").GetString(); const mt::Map* map_meta = mt::Map::GetById(map_id_); if (!map_meta || !map_meta->IsOpen()) { From 48de22c61113716abb64c08c520b4a40a0fe32da Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Aug 2024 17:42:43 +0800 Subject: [PATCH 03/32] 1 --- server/gameserver/roommgr.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/gameserver/roommgr.cc b/server/gameserver/roommgr.cc index 8c73b3e4..736fd82b 100644 --- a/server/gameserver/roommgr.cc +++ b/server/gameserver/roommgr.cc @@ -181,6 +181,9 @@ int RoomMgr::OverRoomNum() std::shared_ptr RoomMgr::GetJoinableRoom(std::shared_ptr p) { + if (p->IsNewBieBattle()) { + return nullptr; + } if (p->IsMoba()) { return nullptr; } From 0a039944b26d10d5f1c2282028f19862d98f85dd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 28 Aug 2024 19:29:12 +0800 Subject: [PATCH 04/32] 1 --- server/gameserver/custom_battle.h | 2 +- server/gameserver/netdata.cc | 1 + server/gameserver/room.cc | 5 +++++ server/gameserver/room.h | 4 +++- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/server/gameserver/custom_battle.h b/server/gameserver/custom_battle.h index 1c4fb09c..fc9e22e2 100644 --- a/server/gameserver/custom_battle.h +++ b/server/gameserver/custom_battle.h @@ -49,7 +49,7 @@ class CustomBattle : public std::enable_shared_from_this bool IsCustomMode() { return custom_room_type_ == CUSTOM_ROOM_CUSTOM; } bool IsPvp() { return !is_moba_; } bool IsMoba() { return is_moba_; } - bool IsNewBieBattle() { return is_newbie_battle_; } + int IsNewBieBattle() { return is_newbie_battle_; } void OnEnter(std::shared_ptr join_msg, long ip_saddr, int socket_handle, std::weak_ptr sd_handler); void OnMemberReady(CustomMember* member); diff --git a/server/gameserver/netdata.cc b/server/gameserver/netdata.cc index 961993a8..a8e553a2 100644 --- a/server/gameserver/netdata.cc +++ b/server/gameserver/netdata.cc @@ -1367,6 +1367,7 @@ void BattleDataContext::RecalcCrit() bool BattleDataContext::HasWing() { + return true; if (hero_dto) { long long token_id = hero_dto->Get("token_id", ""); if (token_id > 6240603010001668 && token_id <= 6240603010002168) { diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index dca4ef34..5e1a1d3e 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -4325,3 +4325,8 @@ void Room::MobaOver() OnGameOver(); } } + +void Room::SetNewBieBattle(int is_newbie_battle) +{ + is_newbie_battle_ = is_newbie_battle; +} diff --git a/server/gameserver/room.h b/server/gameserver/room.h index 2b250a60..7c2b407f 100644 --- a/server/gameserver/room.h +++ b/server/gameserver/room.h @@ -308,7 +308,8 @@ public: long long GetMobaOvertimeRaceFrameNo () { return moba_overtime_race_frameno_; } void MobaOver(); std::shared_ptr GetBoxDrop() { return box_drop_; } - + int IsNewBieBattle() { return is_newbie_battle_; } + void SetNewBieBattle(int is_newbie_battle); std::shared_ptr GetInGameVoice() { return ingame_voice_; } private: @@ -476,6 +477,7 @@ private: std::shared_ptr ingame_voice_; std::shared_ptr box_drop_; + int is_newbie_battle_ = 0; friend class Incubator; friend class Team; From 2ff4981c39f24476295bc4956d6e597e6be7a55d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 10:26:51 +0800 Subject: [PATCH 05/32] 1 --- server/gameserver/custom_battle.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/gameserver/custom_battle.cc b/server/gameserver/custom_battle.cc index ad0ce297..54ca48aa 100644 --- a/server/gameserver/custom_battle.cc +++ b/server/gameserver/custom_battle.cc @@ -403,6 +403,9 @@ void CustomBattle::GameStart() nullptr); } } + if (IsNewBieBattle()) { + room->SetNewBieBattle(1); + } SetRoom(room.get()); room->JoinWithCustomBattle(shared_from_this()); } else { From 2b9e89a002385f28f34661a2b2edb18688a2d010 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 11:31:09 +0800 Subject: [PATCH 06/32] 1 --- server/gameserver/room.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 5e1a1d3e..e1da0aa2 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -625,7 +625,7 @@ void Room::FillSMJoinedNotify(Human* self_hum, cs::SMJoinedNotify& msg) { msg.set_team_mode(msg.team_mode()); msg.set_adjust_bullet(1); - msg.set_is_newbie_room(0); + msg.set_is_newbie_room(IsNewBieBattle()); } void Room::ScatterDrop(const glm::vec3& center, int drop_id, bool no_adjust, std::vector* items) From f4f0120da6b2c230ed0adaaa8c20a79eae66262a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 13:15:27 +0800 Subject: [PATCH 07/32] 1 --- server/gameserver/custom_battle.cc | 3 +++ server/gameserver/room.cc | 3 +++ 2 files changed, 6 insertions(+) diff --git a/server/gameserver/custom_battle.cc b/server/gameserver/custom_battle.cc index 54ca48aa..24376576 100644 --- a/server/gameserver/custom_battle.cc +++ b/server/gameserver/custom_battle.cc @@ -53,6 +53,9 @@ void CustomBattle::ParseResult(a8::XObject& obj) start_time_ = obj.Get("start_time"); is_newbie_battle_ = obj.Get("is_newbie_battle"); sign_ = obj.Get("sign").GetString(); +#ifdef MYDEBUG + is_newbie_battle_ = 1; +#endif const mt::Map* map_meta = mt::Map::GetById(map_id_); if (!map_meta || !map_meta->IsOpen()) { parse_ok_ = false; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index e1da0aa2..bc52dae1 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -2641,6 +2641,9 @@ long long Room::GetGasInactiveTime() if (IsNewerMap()) { inactive_time = 10; } + if (IsNewBieBattle()) { + inactive_time = 10; + } return inactive_time; } From c66d5db1585daa469ed5a4c55969a113c5ff3a09 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 14:19:04 +0800 Subject: [PATCH 08/32] 1 --- server/gameserver/netdata.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/gameserver/netdata.cc b/server/gameserver/netdata.cc index a8e553a2..26e48278 100644 --- a/server/gameserver/netdata.cc +++ b/server/gameserver/netdata.cc @@ -1367,7 +1367,9 @@ void BattleDataContext::RecalcCrit() bool BattleDataContext::HasWing() { +#ifdef MYDEBUG return true; +#endif if (hero_dto) { long long token_id = hero_dto->Get("token_id", ""); if (token_id > 6240603010001668 && token_id <= 6240603010002168) { From 23e78c98ee3c5d3ace9f7fd010206d8a455aecb8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 14:20:32 +0800 Subject: [PATCH 09/32] 1 --- server/gameserver/incubator.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 6650b181..4749c7ee 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -248,6 +248,11 @@ bool Incubator::CanSee(Human* hum, Human* exclude_hum) void Incubator::AutoAllocAndroid() { +#ifdef MYDEBUG + { + a8::XPrintf("AutoAllocAndroid hold_humans.size:%d\n", {hold_humans_.size()}); + } +#endif switch (room->GetGasData().GetGasMode()) { case GasWaiting: case GasMoving: From e6a0186c3e63235a777ecf0e8703525eb52d2903 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 14:23:01 +0800 Subject: [PATCH 10/32] 1 --- server/gameserver/incubator.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 4749c7ee..03f522d1 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -257,11 +257,7 @@ void Incubator::AutoAllocAndroid() case GasWaiting: case GasMoving: { -#if 1 if (!hold_humans_.empty() && hold_humans_.size() > 0) { -#else - if (!hold_humans_.empty() && hold_humans_.size() > 6) { -#endif Human* hum = hold_humans_[0]; if (room->GetGasData().GetGasMode() == GasWaiting && hold_humans_.size() > 1 && From 8e8eda2591d00ff058a14f1a6bd141e6166d9d61 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 14:28:31 +0800 Subject: [PATCH 11/32] 1 --- server/gameserver/incubator.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 03f522d1..75245349 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -22,6 +22,8 @@ #include "mt/SafeArea.h" #include "mt/SafeAreaSafePoint.h" +static const int CHIJI_HIDE_HUMANS = 6; + void Incubator::Init() { #if 1 @@ -98,7 +100,7 @@ void Incubator::AllocAndroid(Human* target, int num, std::vector* androi if (hold_humans_.size() < 1) { return; } - if (hold_humans_.size() <= 6) { + if (hold_humans_.size() <= CHIJI_HIDE_HUMANS) { if (room->GetGasData().new_area_meta->GetSmallRingCount() < 4) { ShowHand(); } @@ -564,7 +566,7 @@ void Incubator::Clear(int save_num) void Incubator::Rearrangement() { - if (hold_humans_.size() < 6) { + if (hold_humans_.size() < CHIJI_HIDE_HUMANS) { return; } std::vector teams2; From 1341bc0c31a1de46158ed4ef9f92db4e1cd09837 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 16:15:15 +0800 Subject: [PATCH 12/32] 1 --- server/gameserver/hero_agent.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/gameserver/hero_agent.cc b/server/gameserver/hero_agent.cc index 65370312..7b5b1859 100644 --- a/server/gameserver/hero_agent.cc +++ b/server/gameserver/hero_agent.cc @@ -418,6 +418,12 @@ behaviac::EBTStatus HeroAgent::SearchEnemy(float range) c->team_id != myself->team_id && !c->IsCar() && !myself->IsIgnoreTarget(c->GetUniId())) { + if (myself->room->IsNewBieBattle() && + myself->GetTeam() && + !myself->GetTeam()->HasPlayer() && + !c->IsPlayer()) { + return true; + } if (a8::HasBitFlag(myself->status, CS_DisableAttackAndroid) && c->IsAndroid()) { } else { @@ -1401,6 +1407,9 @@ int HeroAgent::SearchPickupObj() }); if (nearest_obj && nearest_obj->GetPos().ManhattanDistance2D(owner_->GetPos()) < 200) { + if (GetRoom()->IsNewBieBattle() && nearest_obj->IsCar()) { + return 0; + } int obj_type = 0; if (nearest_obj->IsCar()) { obj_type = 1; From 4f3795648e7e9be433e20429313a45286c1b85fc Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 16:23:18 +0800 Subject: [PATCH 13/32] 1 --- server/gameserver/incubator.cc | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 75245349..589a78e4 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -87,6 +87,9 @@ void Incubator::UnInit() void Incubator::AllocAndroid(Human* target, int num, std::vector* androids) { + if (room->IsNewBieBattle() && target->IsAndroid()) { + return; + } if (!room->xtimer.IsRunning()) { A8_ABORT(); } @@ -100,11 +103,13 @@ void Incubator::AllocAndroid(Human* target, int num, std::vector* androi if (hold_humans_.size() < 1) { return; } - if (hold_humans_.size() <= CHIJI_HIDE_HUMANS) { - if (room->GetGasData().new_area_meta->GetSmallRingCount() < 4) { - ShowHand(); + if (!room->IsNewBieBattle()) { + if (hold_humans_.size() <= CHIJI_HIDE_HUMANS) { + if (room->GetGasData().new_area_meta->GetSmallRingCount() < 4) { + ShowHand(); + } + return; } - return; } #ifdef MYDEBUG a8::XPrintf("SmallRingCount:%d \n", {room->GetGasData().new_area_meta->GetSmallRingCount()}); @@ -260,10 +265,14 @@ void Incubator::AutoAllocAndroid() case GasMoving: { if (!hold_humans_.empty() && hold_humans_.size() > 0) { + int rnd_space = 70; + if (room->IsNewBieBattle()) { + rnd_space = 0; + } Human* hum = hold_humans_[0]; if (room->GetGasData().GetGasMode() == GasWaiting && hold_humans_.size() > 1 && - ((rand() % 100) > 70)) { + ((rand() % 100) > rnd_space)) { Human* killer = nullptr; if (hold_humans_.size() == 2) { killer = hold_humans_[1]; @@ -285,7 +294,9 @@ void Incubator::AutoAllocAndroid() return; } hold_humans_.erase(hold_humans_.begin()); - room->xtimer.ModifyTime(alloc_timer_, SERVER_FRAME_RATE * (30 + rand() % 5)); + if (!room->IsNewBieBattle()) { + room->xtimer.ModifyTime(alloc_timer_, SERVER_FRAME_RATE * (30 + rand() % 5)); + } } } break; From c003a4839d81b8f78dd9364b58edf20dfea2a472 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 16:56:09 +0800 Subject: [PATCH 14/32] 1 --- server/gameserver/incubator.cc | 5 +++++ server/gameserver/incubator.h | 1 + server/gameserver/room.cc | 3 +++ 3 files changed, 9 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 589a78e4..96624f9c 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -643,3 +643,8 @@ void Incubator::Rearrangement() } #endif } + +void Incubator::StartNewBattleMode() +{ + +} diff --git a/server/gameserver/incubator.h b/server/gameserver/incubator.h index 76faa197..ddd2b6b8 100644 --- a/server/gameserver/incubator.h +++ b/server/gameserver/incubator.h @@ -20,6 +20,7 @@ class Incubator void NextWave(); void ShowHand(); void Clear(int save_num); + void StartNewBattleMode(); private: bool CanSee(Human* hum, Human* exclude_hum); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index bc52dae1..d26f7f80 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -4332,4 +4332,7 @@ void Room::MobaOver() void Room::SetNewBieBattle(int is_newbie_battle) { is_newbie_battle_ = is_newbie_battle; + if (is_newbie_battle_) { + GetIncubator()->StartNewBattleMode(); + } } From 028c03ac5a20f258103654635c78215ef1182a43 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 17:05:58 +0800 Subject: [PATCH 15/32] 1 --- server/gameserver/incubator.cc | 13 ++++++++++++- server/gameserver/room.cc | 3 --- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 96624f9c..b872468c 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -49,6 +49,9 @@ void Incubator::Init() } }, &xtimer_attacher_); + if (room->IsNewBieBattle()) { + StartNewBattleMode(); + } } }, &xtimer_attacher_); @@ -646,5 +649,13 @@ void Incubator::Rearrangement() void Incubator::StartNewBattleMode() { - + room->xtimer.SetIntervalWpEx + ( + SERVER_FRAME_RATE * (4 + rand() % 3), + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + } + }, + &xtimer_attacher_); } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index d26f7f80..bc52dae1 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -4332,7 +4332,4 @@ void Room::MobaOver() void Room::SetNewBieBattle(int is_newbie_battle) { is_newbie_battle_ = is_newbie_battle; - if (is_newbie_battle_) { - GetIncubator()->StartNewBattleMode(); - } } From 1d02970da128d82a7d09f9478c533c1808805b96 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 17:58:51 +0800 Subject: [PATCH 16/32] 1 --- server/gameserver/incubator.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index b872468c..10de443b 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -50,7 +50,16 @@ void Incubator::Init() }, &xtimer_attacher_); if (room->IsNewBieBattle()) { - StartNewBattleMode(); + room->xtimer.SetTimeoutEx + ( + SERVER_FRAME_RATE * (50), + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + StartNewBattleMode(); + } + }, + &xtimer_attacher_); } } }, @@ -651,7 +660,7 @@ void Incubator::StartNewBattleMode() { room->xtimer.SetIntervalWpEx ( - SERVER_FRAME_RATE * (4 + rand() % 3), + SERVER_FRAME_RATE * (3 + rand() % 2), [this] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { From 5e186ae2acbda09f48b5ea229bb31387c61c664c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 18:53:46 +0800 Subject: [PATCH 17/32] 1 --- server/gameserver/custom_battle.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/gameserver/custom_battle.cc b/server/gameserver/custom_battle.cc index 24376576..54ca48aa 100644 --- a/server/gameserver/custom_battle.cc +++ b/server/gameserver/custom_battle.cc @@ -53,9 +53,6 @@ void CustomBattle::ParseResult(a8::XObject& obj) start_time_ = obj.Get("start_time"); is_newbie_battle_ = obj.Get("is_newbie_battle"); sign_ = obj.Get("sign").GetString(); -#ifdef MYDEBUG - is_newbie_battle_ = 1; -#endif const mt::Map* map_meta = mt::Map::GetById(map_id_); if (!map_meta || !map_meta->IsOpen()) { parse_ok_ = false; From 959b922454668c9c3751b985f12cda8162c06564 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:01:36 +0800 Subject: [PATCH 18/32] 1 --- server/gameserver/incubator.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 10de443b..c0ba5299 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -658,12 +658,26 @@ void Incubator::Rearrangement() void Incubator::StartNewBattleMode() { + Player* selected_player = nullptr; + room->TraversePlayerList + ( + [&selected_player] (Player* hum) -> bool + { + selected_player = hum; + return false; + }); + if (!selected_player) { + return; + } room->xtimer.SetIntervalWpEx ( SERVER_FRAME_RATE * (3 + rand() % 2), - [this] (int event, const a8::Args* args) + [this, selected_player] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { + if (room->IsGameOver()) { + return; + } } }, &xtimer_attacher_); From d0442a0d30a4282c1a3a0f32b846205a6ad872a6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:11:57 +0800 Subject: [PATCH 19/32] 1 --- server/gameserver/incubator.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index c0ba5299..a6f04e29 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -678,6 +678,13 @@ void Incubator::StartNewBattleMode() if (room->IsGameOver()) { return; } + room->TraverseAliveHumanList + ( + [selected_player] (Human* hum) -> bool + { + //selected_player = hum; + return true; + }); } }, &xtimer_attacher_); From ed49e8c193a88ee5bac09f245ee6dbf75345ee42 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:23:18 +0800 Subject: [PATCH 20/32] 1 --- server/gameserver/incubator.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index a6f04e29..47954bcd 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -669,20 +669,30 @@ void Incubator::StartNewBattleMode() if (!selected_player) { return; } + std::vector invisable_humans; + std::vector invisable_teammates; room->xtimer.SetIntervalWpEx ( SERVER_FRAME_RATE * (3 + rand() % 2), - [this, selected_player] (int event, const a8::Args* args) + [this, selected_player, &invisable_humans, &invisable_teammates] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { if (room->IsGameOver()) { return; } + invisable_humans.clear(); + invisable_teammates.clear(); room->TraverseAliveHumanList ( - [selected_player] (Human* hum) -> bool + [this, selected_player, &invisable_humans, &invisable_teammates] (Human* hum) -> bool { - //selected_player = hum; + if (!CanSee(hum, selected_player)) { + if (hum->GetTeam() == selected_player->GetTeam()) { + invisable_teammates.push_back(hum); + } else { + invisable_humans.push_back(hum); + } + } return true; }); } From e1c92ba5a9d4619864a3b2f231bee88aaf772757 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:24:51 +0800 Subject: [PATCH 21/32] 1 --- server/gameserver/incubator.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 47954bcd..dcb89ccd 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -695,6 +695,9 @@ void Incubator::StartNewBattleMode() } return true; }); + if (invisable_humans.size() > 0) { + + } } }, &xtimer_attacher_); From b5d13dcb6cffcaf3b0cdd49fc1af2cc51ef777e3 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:29:42 +0800 Subject: [PATCH 22/32] 1 --- server/gameserver/incubator.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index dcb89ccd..75cb6385 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include "incubator.h" #include "room.h" #include "human.h" @@ -686,6 +688,9 @@ void Incubator::StartNewBattleMode() ( [this, selected_player, &invisable_humans, &invisable_teammates] (Human* hum) -> bool { + if (hum == selected_player) { + return true; + } if (!CanSee(hum, selected_player)) { if (hum->GetTeam() == selected_player->GetTeam()) { invisable_teammates.push_back(hum); @@ -696,7 +701,10 @@ void Incubator::StartNewBattleMode() return true; }); if (invisable_humans.size() > 0) { - + std::shuffle(invisable_humans.begin(), + invisable_humans.end(), + std::default_random_engine(a8::XGetTickCount())); + Human *target = invisable_humans.at(0); } } }, From c8cf48e45c23ecf8c63710f49649a39aab4ff112 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:32:28 +0800 Subject: [PATCH 23/32] 1 --- server/gameserver/incubator.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 75cb6385..63c6c284 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -704,7 +704,14 @@ void Incubator::StartNewBattleMode() std::shuffle(invisable_humans.begin(), invisable_humans.end(), std::default_random_engine(a8::XGetTickCount())); + Human *killer = nullptr; Human *target = invisable_humans.at(0); + for (size_t i = 0; i < invisable_humans.size(); ++i) { + if (invisable_humans.at(i)->GetTeam() != target->GetTeam()) { + killer = invisable_humans.at(i); + break; + } + } } } }, From f0f3e82cfae54585f89f5bcb94e0613fec8703c0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:35:36 +0800 Subject: [PATCH 24/32] 1 --- server/gameserver/incubator.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 63c6c284..40110a47 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -712,6 +712,12 @@ void Incubator::StartNewBattleMode() break; } } + if (!killer && !invisable_teammates.empty()) { + std::shuffle(invisable_teammates.begin(), + invisable_teammates.end(), + std::default_random_engine(a8::XGetTickCount())); + killer = invisable_teammates.at(0); + } } } }, From aa4ff187855134abaa48b664c2a2fa470df32051 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:37:27 +0800 Subject: [PATCH 25/32] 1 --- server/gameserver/incubator.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 40110a47..84d93a7c 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -718,6 +718,13 @@ void Incubator::StartNewBattleMode() std::default_random_engine(a8::XGetTickCount())); killer = invisable_teammates.at(0); } + if (killer) { + target->BeKill(killer->GetUniId(), + killer->name, + killer->GetCurrWeapon()->weapon_id, + killer->GetUniId(), + killer->name); + } } } }, From 782022e6d66d2b72c43f2ad6cb5d973fcf0b9524 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 29 Aug 2024 19:44:37 +0800 Subject: [PATCH 26/32] 1 --- server/gameserver/incubator.cc | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 84d93a7c..c6509aab 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -671,52 +671,52 @@ void Incubator::StartNewBattleMode() if (!selected_player) { return; } - std::vector invisable_humans; - std::vector invisable_teammates; + auto invisable_humans = std::make_shared>(); + auto invisable_teammates = std::make_shared>(); room->xtimer.SetIntervalWpEx ( SERVER_FRAME_RATE * (3 + rand() % 2), - [this, selected_player, &invisable_humans, &invisable_teammates] (int event, const a8::Args* args) + [this, selected_player, invisable_humans, invisable_teammates] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { if (room->IsGameOver()) { return; } - invisable_humans.clear(); - invisable_teammates.clear(); + invisable_humans->clear(); + invisable_teammates->clear(); room->TraverseAliveHumanList ( - [this, selected_player, &invisable_humans, &invisable_teammates] (Human* hum) -> bool + [this, selected_player, invisable_humans, invisable_teammates] (Human* hum) -> bool { if (hum == selected_player) { return true; } if (!CanSee(hum, selected_player)) { if (hum->GetTeam() == selected_player->GetTeam()) { - invisable_teammates.push_back(hum); + invisable_teammates->push_back(hum); } else { - invisable_humans.push_back(hum); + invisable_humans->push_back(hum); } } return true; }); - if (invisable_humans.size() > 0) { - std::shuffle(invisable_humans.begin(), - invisable_humans.end(), + if (invisable_humans->size() > 0) { + std::shuffle(invisable_humans->begin(), + invisable_humans->end(), std::default_random_engine(a8::XGetTickCount())); Human *killer = nullptr; - Human *target = invisable_humans.at(0); - for (size_t i = 0; i < invisable_humans.size(); ++i) { - if (invisable_humans.at(i)->GetTeam() != target->GetTeam()) { - killer = invisable_humans.at(i); + Human *target = invisable_humans->at(0); + for (size_t i = 0; i < invisable_humans->size(); ++i) { + if (invisable_humans->at(i)->GetTeam() != target->GetTeam()) { + killer = invisable_humans->at(i); break; } } - if (!killer && !invisable_teammates.empty()) { - std::shuffle(invisable_teammates.begin(), - invisable_teammates.end(), + if (!killer && !invisable_teammates->empty()) { + std::shuffle(invisable_teammates->begin(), + invisable_teammates->end(), std::default_random_engine(a8::XGetTickCount())); - killer = invisable_teammates.at(0); + killer = invisable_teammates->at(0); } if (killer) { target->BeKill(killer->GetUniId(), From 4a7ac10d236a2a6f84746ca1d9afa2310ce360da Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Aug 2024 10:38:17 +0800 Subject: [PATCH 27/32] 1 --- server/gameserver/incubator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index c6509aab..5e947822 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -675,7 +675,7 @@ void Incubator::StartNewBattleMode() auto invisable_teammates = std::make_shared>(); room->xtimer.SetIntervalWpEx ( - SERVER_FRAME_RATE * (3 + rand() % 2), + SERVER_FRAME_RATE * (4 + rand() % 3), [this, selected_player, invisable_humans, invisable_teammates] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { From ebf168a525e66ea6accff8b0234388bfb4295265 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Aug 2024 10:42:13 +0800 Subject: [PATCH 28/32] 1 --- server/gameserver/player.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 56d660da..19befc1f 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -169,6 +169,9 @@ void Player::Initialize() }, &xtimer_attacher); } + if (room->IsNewBieBattle()) { + + } } void Player::Update(int delta_time) From c0570832a615840d9864ac615ef0b2457590a5bd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Aug 2024 11:05:54 +0800 Subject: [PATCH 29/32] 1 --- server/gameserver/player.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 19befc1f..a1aefaaf 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -170,7 +170,9 @@ void Player::Initialize() &xtimer_attacher); } if (room->IsNewBieBattle()) { - + GetAbility()->AddAttr(kHAT_vAttackRateSe, 5.0f); + GetAbility()->AddAttr(kHAT_pDefendRateSe, 2.0f); + GetAbility()->AddAttr(kHAT_vHealthRateSe, 2.0f); } } From f64cda608d28208f5a81ea042e86efb24e10f06b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Aug 2024 11:50:51 +0800 Subject: [PATCH 30/32] 1 --- server/gameserver/incubator.cc | 51 ++++++++++++++++++++++++++++++---- server/gameserver/player.cc | 2 +- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 5e947822..e6ae6811 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -54,7 +54,7 @@ void Incubator::Init() if (room->IsNewBieBattle()) { room->xtimer.SetTimeoutEx ( - SERVER_FRAME_RATE * (50), + SERVER_FRAME_RATE * (60), [this] (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { @@ -152,6 +152,7 @@ void Incubator::AllocAndroid(Human* target, int num, std::vector* androi App::Instance()->verify_set_pos = 0; if (!CanSee(hum, target)) { room->EnableHuman(hum); + room->grid_service->MoveCreature(hum); #ifdef MYDEBUG #if 0 if (!target->InNewObjects(hum)) { @@ -281,7 +282,7 @@ void Incubator::AutoAllocAndroid() if (!hold_humans_.empty() && hold_humans_.size() > 0) { int rnd_space = 70; if (room->IsNewBieBattle()) { - rnd_space = 0; + rnd_space = 20; } Human* hum = hold_humans_[0]; if (room->GetGasData().GetGasMode() == GasWaiting && @@ -308,7 +309,9 @@ void Incubator::AutoAllocAndroid() return; } hold_humans_.erase(hold_humans_.begin()); - if (!room->IsNewBieBattle()) { + if (room->IsNewBieBattle()) { + room->xtimer.ModifyTime(alloc_timer_, SERVER_FRAME_RATE * (6 + rand() % 4)); + } else { room->xtimer.ModifyTime(alloc_timer_, SERVER_FRAME_RATE * (30 + rand() % 5)); } } @@ -671,12 +674,15 @@ void Incubator::StartNewBattleMode() if (!selected_player) { return; } + auto startno = std::make_shared(); + *startno = room->GetFrameNo(); auto invisable_humans = std::make_shared>(); auto invisable_teammates = std::make_shared>(); room->xtimer.SetIntervalWpEx ( - SERVER_FRAME_RATE * (4 + rand() % 3), - [this, selected_player, invisable_humans, invisable_teammates] (int event, const a8::Args* args) + SERVER_FRAME_RATE * (5 + rand() % 3), + [this, selected_player, invisable_humans, invisable_teammates, startno] + (int event, const a8::Args* args) { if (a8::TIMER_EXEC_EVENT == event) { if (room->IsGameOver()) { @@ -686,7 +692,8 @@ void Incubator::StartNewBattleMode() invisable_teammates->clear(); room->TraverseAliveHumanList ( - [this, selected_player, invisable_humans, invisable_teammates] (Human* hum) -> bool + [this, selected_player, invisable_humans, invisable_teammates, startno] + (Human* hum) -> bool { if (hum == selected_player) { return true; @@ -700,6 +707,38 @@ void Incubator::StartNewBattleMode() } return true; }); + if (invisable_humans->size() == 1) { + if (room->GetFrameNo() - *startno < SERVER_FRAME_RATE * 30) { + Human *target = invisable_humans->at(0); + glm::vec3 dir = GlmHelper::UP; + GlmHelper::RotateY(dir, a8::RandAngle()); + int rand_len = rand() % mt::Param::s().incubator_rand_length; + glm::vec3 center = selected_player->GetPos().ToGlmVec3() + dir * (float)(mt::Param::s().incubator_base_length + rand_len); + room->map_instance->Scale(center); + glm::vec3 point; + if (room->map_instance->FindRandomPointAroundCircle + ( + center, + 10 * room->GetMapMeta()->scale(), + point + )) { + room->map_instance->UnScale(point); + + glm::vec3 old_pos = target->GetPos().ToGlmVec3(); + App::Instance()->verify_set_pos = 1; + target->GetMutablePos().FromGlmVec3(point); + App::Instance()->verify_set_pos = 0; + if (CanSee(target, selected_player)) { + App::Instance()->verify_set_pos = 1; + target->GetMutablePos().FromGlmVec3(old_pos); + App::Instance()->verify_set_pos = 0; + } else { + room->grid_service->MoveCreature(target); + } + } + return; + } + } if (invisable_humans->size() > 0) { std::shuffle(invisable_humans->begin(), invisable_humans->end(), diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index a1aefaaf..c2a417a0 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -172,7 +172,7 @@ void Player::Initialize() if (room->IsNewBieBattle()) { GetAbility()->AddAttr(kHAT_vAttackRateSe, 5.0f); GetAbility()->AddAttr(kHAT_pDefendRateSe, 2.0f); - GetAbility()->AddAttr(kHAT_vHealthRateSe, 2.0f); + GetAbility()->AddAttr(kHAT_vHealthRateSe, 3.0f); } } From 73e7669ab5683cb89b185fd1689715e04d7b1487 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Aug 2024 13:29:39 +0800 Subject: [PATCH 31/32] 1 --- server/gameserver/human.cc | 1 + server/gameserver/room.cc | 2 ++ server/gameserver/team.cc | 1 + 3 files changed, 4 insertions(+) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index d6c1d079..f390d3eb 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3646,6 +3646,7 @@ void Human::SendPersonalBattleReport() params->SetVal("session_id", session_id); params->SetVal("version", 2023030201); + params->SetVal("is_newbie_battle", a8::XValue(room->IsNewBieBattle())); params->SetVal("battle_uuid", a8::XValue(GetTeam()->GetBattleUuid())); params->SetVal("room_uuid", a8::XValue(room->GetRoomUuid())); params->SetVal("room_mode", room->GetReportRoomMode()); diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index bc52dae1..fa4a0af1 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -4021,6 +4021,7 @@ int Room::GetReportMapMode() void Room::GenBattleRoomReportData(a8::MutableXObject* params) { params->SetVal("version", 2023030201); + params->SetVal("is_newbie_battle", a8::XValue(IsNewBieBattle())); params->SetVal("room_uuid", a8::XValue(GetRoomUuid())); params->SetVal("room_mode", GetReportRoomMode()); params->SetVal("map_mode", GetReportMapMode()); @@ -4042,6 +4043,7 @@ void Room::GenBattleRoomReportData(a8::MutableXObject* params) void Room::GenBattleMobaReportData(a8::MutableXObject* params) { params->SetVal("version", 2023030201); + params->SetVal("is_newbie_battle", a8::XValue(IsNewBieBattle())); params->SetVal("room_uuid", a8::XValue(GetRoomUuid())); params->SetVal("room_mode", GetReportRoomMode()); params->SetVal("map_mode", GetReportMapMode()); diff --git a/server/gameserver/team.cc b/server/gameserver/team.cc index 993e5ee0..ddd25aa0 100644 --- a/server/gameserver/team.cc +++ b/server/gameserver/team.cc @@ -274,6 +274,7 @@ void Team::SendTeamBattleReport(Human* sender) void Team::GenBattleReportData(a8::MutableXObject* params) { params->SetVal("version", 2023030201); + params->SetVal("is_newbie_battle", a8::XValue(room->IsNewBieBattle())); params->SetVal("battle_uuid", a8::XValue(battle_uuid_)); params->SetVal("room_uuid", a8::XValue(room->GetRoomUuid())); params->SetVal("room_mode", room->GetReportRoomMode()); From 3f5d6baad98508d218d36d387cba485fcc841c8e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Aug 2024 14:01:15 +0800 Subject: [PATCH 32/32] 1 --- server/gameserver/human.cc | 5 +++++ server/gameserver/netdata.cc | 3 +++ server/gameserver/player.cc | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index f390d3eb..106b157d 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -217,6 +217,11 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string killer_name, in int dmg_type, int dmg_bp) { + if (IsPlayer() && room->IsNewBieBattle()) { + if (dec_hp > 10) { + dec_hp = 10; + } + } real_dmg_out = 0.0f; if (!room->BattleStarted()) { return; diff --git a/server/gameserver/netdata.cc b/server/gameserver/netdata.cc index 26e48278..48d54161 100644 --- a/server/gameserver/netdata.cc +++ b/server/gameserver/netdata.cc @@ -162,6 +162,9 @@ public: hp_ = (hero_meta->GetBasicMeta()->vOrigHealth() * (1 + pHealth / hero_meta->GetBasicMeta()->pBaseHealth()) + vHealthAm) * (1 + vHealthRateSe) * (1 + vHealthRateIn); + if (owner_.Get()->room->IsNewBieBattle() && !owner_.Get()->IsPlayer()) { + hp_ = 50; + } } void RecalcAttack() diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index c2a417a0..2d5de392 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -170,9 +170,11 @@ void Player::Initialize() &xtimer_attacher); } if (room->IsNewBieBattle()) { + #if 0 GetAbility()->AddAttr(kHAT_vAttackRateSe, 5.0f); GetAbility()->AddAttr(kHAT_pDefendRateSe, 2.0f); - GetAbility()->AddAttr(kHAT_vHealthRateSe, 3.0f); + GetAbility()->AddAttr(kHAT_vHealthRateSe, 1.0f); + #endif } }