From a4a44b56ce718f0400d41728d2c2e749b72c1f3d Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 18 Jul 2023 11:18:42 +0800 Subject: [PATCH 01/11] 1 --- server/gameserver/creature.cc | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 998a13fe..4cf4eb14 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -6,6 +6,8 @@ #include #include +#include + #include "creature.h" #include "room.h" #include "skill.h" @@ -3007,10 +3009,20 @@ void Creature::NetInitOk() bool Creature::IsNearGas(float distance) { - Position p; - p.FromGlmVec3(glm::vec3(room->GetGasData().pos_new.x, 0, room->GetGasData().pos_new.y)); - float gas_distance = GetPos().Distance2D2(p); - return gas_distance + GetRadius() * 2 + distance > room->GetGasData().rad_new; + float radius = GetRadius() + distance; + bool b1 = a8::CircleContainCircle + (room->GetGasData().pos_old, + room->GetGasData().gas_progress, + glm::vec2(GetPos().GetX(), GetPos().GetZ()), + radius + ); + bool b2 = a8::CircleContainCircle + (room->GetGasData().pos_new, + room->GetGasData().rad_new, + glm::vec2(GetPos().GetX(), GetPos().GetZ()), + radius + ); + return !b1 && !b2; } float Creature::GetSafeAreaRaidus() From 1011b921f6c377f6490e04d0274c16aa51ccc4dd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 19 Jul 2023 12:48:45 +0800 Subject: [PATCH 02/11] 1 --- server/bin/exported/android_craze_mode.xml | 50 +++++++++------------- server/bin/exported/android_run_gas.xml | 4 +- server/bin/exported/boss_40101.xml | 2 +- server/bin/exported/boss_40101_run_gas.xml | 2 +- server/gameserver/base_agent.cc | 48 ++++++++++++++++----- server/gameserver/room.cc | 4 +- 6 files changed, 64 insertions(+), 46 deletions(-) diff --git a/server/bin/exported/android_craze_mode.xml b/server/bin/exported/android_craze_mode.xml index 216bd842..f6146a48 100644 --- a/server/bin/exported/android_craze_mode.xml +++ b/server/bin/exported/android_craze_mode.xml @@ -20,6 +20,12 @@ + + + + + + @@ -55,43 +61,27 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - + + + - - + + - - - + + + + + + - diff --git a/server/bin/exported/android_run_gas.xml b/server/bin/exported/android_run_gas.xml index cc25921a..df154643 100644 --- a/server/bin/exported/android_run_gas.xml +++ b/server/bin/exported/android_run_gas.xml @@ -4,9 +4,9 @@ - + - + diff --git a/server/bin/exported/boss_40101.xml b/server/bin/exported/boss_40101.xml index 87c83f84..e20c67d4 100644 --- a/server/bin/exported/boss_40101.xml +++ b/server/bin/exported/boss_40101.xml @@ -4,7 +4,7 @@ - + diff --git a/server/bin/exported/boss_40101_run_gas.xml b/server/bin/exported/boss_40101_run_gas.xml index a1d65820..8b3491c4 100644 --- a/server/bin/exported/boss_40101_run_gas.xml +++ b/server/bin/exported/boss_40101_run_gas.xml @@ -6,7 +6,7 @@ - + diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index f8098996..01a8351f 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -61,9 +61,6 @@ void BaseAgent::Exec() { behaviac::EBTStatus status = f8::BtMgr::Instance()->BtExec(this); if (status == behaviac::BT_RUNNING && coroutine_ && coroutine_->GetContext()->HasEvent()) { -#ifdef DEBUG1 - DumpBt(this); -#endif status_= behaviac::BT_INVALID; auto old_coroutine = coroutine_; coroutine_ = nullptr; @@ -267,11 +264,19 @@ void BaseAgent::Sleep(int time) bool BaseAgent::CurrentTargetMoveCanReach() { + bool ret = false; if (!current_target_.Get()) { - return false; + ret = false; + } else { + ret = GetOwner()->room->MoveCanReach(GetOwner()->GetPos().ToGlmVec3(), + current_target_.Get()->GetPos().ToGlmVec3()); } - return GetOwner()->room->MoveCanReach(GetOwner()->GetPos().ToGlmVec3(), - current_target_.Get()->GetPos().ToGlmVec3()); + #ifdef DEBUG + if (GetOwner()->GetHeroMeta()->id() == 60100) { + a8::XPrintf("CurrentTargetMoveCanReach %f\n", {ret}); + } + #endif + return ret; } behaviac::EBTStatus BaseAgent::DoSkill(int skill_id) @@ -397,22 +402,39 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) bool BaseAgent::CurrentTargetIsValid() { - return current_target_.Get() && !current_target_.Get()->dead; + bool ret = current_target_.Get() && !current_target_.Get()->dead; + #ifdef DEBUG + if (GetOwner()->GetHeroMeta()->id() == 60100) { + a8::XPrintf("CurrentTargetIsValid %d\n", {ret}); + } + #endif + return ret; } behaviac::EBTStatus BaseAgent::FindEnemy(float range) { Creature* enemy = GetOwner()->room->FindEnemy(GetOwner(), range); find_enemy_target_uniid = enemy ? enemy->GetUniId() : 0; + #ifdef DEBUG + if (GetOwner()->GetHeroMeta()->id() == 60100) { + a8::XPrintf("FindEnemy %f\n", {find_enemy_target_uniid}); + } + #endif return enemy ? behaviac::BT_SUCCESS : behaviac::BT_FAILURE; } float BaseAgent::GetCurrentTargetDistance() { + float distance = 0; if (current_target_.Get()) { - return current_target_.Get()->GetPos().Distance2D2(GetOwner()->GetPos()); + distance = current_target_.Get()->GetPos().Distance2D2(GetOwner()->GetPos()); } - return 0; + #ifdef DEBUG + if (GetOwner()->GetHeroMeta()->id() == 60100) { + a8::XPrintf("GetCurrentTargetDistance %f\n", {distance}); + } + #endif + return distance; } float BaseAgent::GetFindEnemyResultTargetDistance() @@ -429,6 +451,11 @@ glm::vec3 BaseAgent::GetFindEnemyResultTargetPos() void BaseAgent::SetCurrentTarget(int target_uniid) { + #ifdef DEBUG + if (GetOwner()->GetHeroMeta()->id() == 60100) { + a8::XPrintf("SetCurrentTarget %f\n", {target_uniid}); + } + #endif current_target_.Reset(); Creature* c = GetOwner()->room->GetCreatureByUniId(target_uniid); if (c) { @@ -528,6 +555,7 @@ behaviac::EBTStatus BaseAgent::CoRunGas() } gas_center.y = GetOwner()->GetPos().ToGlmVec3().y; glm::vec3 dir = gas_center - GetOwner()->GetPos().ToGlmVec3(); + GlmHelper::Normalize(dir); glm::vec3 center = GetOwner()->GetPos().ToGlmVec3() + dir * (30.0f + (float)context->try_count * 50.0f); @@ -535,7 +563,7 @@ behaviac::EBTStatus BaseAgent::CoRunGas() glm::vec3 point; bool ok = GetOwner()->room->map_instance->FindConnectableNearestPoint(center, 50, point); if (ok) { - GetOwner()->room->map_instance->Scale(point); + GetOwner()->room->map_instance->UnScale(point); bool ret = GetOwner()->GetMovement()->FindPath(point, 0); if (ret) { context->find_ok = true; diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 66fd67c4..26005f59 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -3461,7 +3461,7 @@ void Room::CloseRoomSwitch(int tag) void Room::GMFastForward() { - while (GetGasData().new_area_meta->GetSmallRingCount() >= 4) { + while (GetGasData().new_area_meta->GetSmallRingCount() >= 3) { ForwardGasRing(1); } TraversePlayerList @@ -3489,7 +3489,7 @@ void Room::GMFastForward() } } }); - GetIncubator()->Clear(1); + GetIncubator()->Clear(5); for (auto& pair : human_hash_) { if (pair.second->IsAndroid() && !a8::HasBitFlag(pair.second->status, CS_Disable)) { From 737f7eb07b0206fd277759658bb2ddeb03af0222 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 21 Jul 2023 15:04:44 +0800 Subject: [PATCH 03/11] 1 --- server/bin/exported/boss_40101_chase_to_kill.xml | 5 +++++ server/gameserver/base_agent.cc | 4 ++-- server/gameserver/netdata.cc | 8 ++++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/server/bin/exported/boss_40101_chase_to_kill.xml b/server/bin/exported/boss_40101_chase_to_kill.xml index c67106f1..6dd2ccef 100644 --- a/server/bin/exported/boss_40101_chase_to_kill.xml +++ b/server/bin/exported/boss_40101_chase_to_kill.xml @@ -9,6 +9,11 @@ + + + + + diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 01a8351f..8349dea0 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -404,7 +404,7 @@ bool BaseAgent::CurrentTargetIsValid() { bool ret = current_target_.Get() && !current_target_.Get()->dead; #ifdef DEBUG - if (GetOwner()->GetHeroMeta()->id() == 60100) { + if (GetOwner()->GetHeroMeta()->id() == 60100 && !ret) { a8::XPrintf("CurrentTargetIsValid %d\n", {ret}); } #endif @@ -429,7 +429,7 @@ float BaseAgent::GetCurrentTargetDistance() if (current_target_.Get()) { distance = current_target_.Get()->GetPos().Distance2D2(GetOwner()->GetPos()); } - #ifdef DEBUG + #ifdef DEBUG1 if (GetOwner()->GetHeroMeta()->id() == 60100) { a8::XPrintf("GetCurrentTargetDistance %f\n", {distance}); } diff --git a/server/gameserver/netdata.cc b/server/gameserver/netdata.cc index 857d46d6..db2dd4e3 100644 --- a/server/gameserver/netdata.cc +++ b/server/gameserver/netdata.cc @@ -904,10 +904,6 @@ void BattleDataContext::ForceInit(long long hero_uniid, weapon2_ability_->weapon_uniid = weapon2_uniid; weapon2_ability_->weapon_meta = weapon2_meta; } - auto match_conf = owner_.Get()->room->GetRankMatchConf(); - if (owner_.Get()->IsAndroid() && match_conf) { - - } } void BattleDataContext::Init(Creature* c) @@ -942,6 +938,10 @@ void BattleDataContext::Init(Creature* c) spec_weapon.ammo = spec_weapon.GetClipVolume(c); } } + } + auto match_conf = owner_.Get()->room->GetRankMatchConf(); + if (owner_.Get()->IsAndroid() && match_conf) { + } c->NetInitOk(); } From 08994498ffb034dc483ecaa39f8d64b397330c1e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 16 Aug 2023 15:31:05 +0800 Subject: [PATCH 04/11] 1 --- server/bin/exported/android_chase_to_kill.xml | 5 +++++ server/bin/exported/boss_40101_chase_to_kill.xml | 2 +- server/gameserver/android_agent.cc | 5 +++++ server/gameserver/base_agent.cc | 10 +++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/server/bin/exported/android_chase_to_kill.xml b/server/bin/exported/android_chase_to_kill.xml index 9dfd7653..57c8718f 100644 --- a/server/bin/exported/android_chase_to_kill.xml +++ b/server/bin/exported/android_chase_to_kill.xml @@ -9,6 +9,11 @@ + + + + + diff --git a/server/bin/exported/boss_40101_chase_to_kill.xml b/server/bin/exported/boss_40101_chase_to_kill.xml index 6dd2ccef..291ee1d7 100644 --- a/server/bin/exported/boss_40101_chase_to_kill.xml +++ b/server/bin/exported/boss_40101_chase_to_kill.xml @@ -46,7 +46,7 @@ - + diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index 66ffee10..e1f3701a 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -45,8 +45,13 @@ bool AndroidAgent::IsCrazeModePrepareMode() if (!IsCrazeMode()) { return false; } +#ifdef DEBUG + if (GetOwner()->room->GetFrameNo() - GetOwner()->AsHuman()->enable_frameno > SERVER_FRAME_RATE * 5) { + return false; +#else if (GetOwner()->room->GetFrameNo() - GetOwner()->AsHuman()->enable_frameno > SERVER_FRAME_RATE * 20) { return false; +#endif } else { if (GetSafeAreaRadius() < 200) { return false; diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 8349dea0..fc191697 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -308,6 +308,9 @@ behaviac::EBTStatus BaseAgent::SelectUseableSkill(const behaviac::vector sk if (!current_target_.Get()) { return behaviac::BT_FAILURE; } + if (GlmHelper::IsEqual2D(GetOwner()->GetPos().ToGlmVec3(), + current_target_.Get()->GetPos().ToGlmVec3())) { + } for (int skill_id : skill_ids) { Skill* skill = GetOwner()->GetSkill(skill_id); if (skill && GetOwner()->CanUseSkill(skill->GetSkillId())) { @@ -366,10 +369,15 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) if (!current_target_.Get()) { return behaviac::BT_FAILURE; } + float target_distance = GetOwner()->GetPos().Distance2D2(current_target_.Get()->GetPos()); + if (target_distance > 2) { + return behaviac::BT_SUCCESS; + } + /* if (GlmHelper::IsEqual2D(GetOwner()->GetPos().ToGlmVec3(), current_target_.Get()->GetPos().ToGlmVec3())) { return behaviac::BT_SUCCESS; - } + }*/ auto context = MAKE_BTCONTEXT ( CreatureWeakPtr target; From 60fb2798305aed44a68553b7afa78f59567770b8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 16 Aug 2023 16:12:48 +0800 Subject: [PATCH 05/11] 1 --- server/gameserver/base_agent.cc | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index fc191697..f9811b33 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -384,12 +384,15 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) ); context->target = current_target_; - glm::vec3 dir = GetOwner()->GetPos().CalcDir(context->target.Get()->GetPos()); - GlmHelper::Normalize(dir); - GetOwner()->SetMoveDir(dir); - GetOwner()->SetAttackDir(dir); - GetOwner()->GetMovement()->CalcTargetPos(60); - + if (target_distance < 2) { + GetOwner()->GetMovement()->CalcTargetPos(60); + } else { + glm::vec3 dir = GetOwner()->GetPos().CalcDir(context->target.Get()->GetPos()); + GlmHelper::Normalize(dir); + GetOwner()->SetMoveDir(dir); + GetOwner()->SetAttackDir(dir); + GetOwner()->GetMovement()->CalcTargetPos(60); + } #ifdef DEBUG a8::XPrintf("CoMoveToCurrentTarget %d\n", {current_target_.Get()->GetUniId()}); #endif @@ -401,6 +404,16 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) return behaviac::BT_FAILURE; } if (GetOwner()->GetMovement()->GetPathSize() <= 0) { + if (context->target.Get()) { + if (GlmHelper::IsEqual2D(GetOwner()->GetPos().ToGlmVec3(), + current_target_.Get()->GetPos().ToGlmVec3())) { + } else { + glm::vec3 dir = GetOwner()->GetPos().CalcDir(context->target.Get()->GetPos()); + GlmHelper::Normalize(dir); + GetOwner()->SetMoveDir(dir); + GetOwner()->SetAttackDir(dir); + } + } return behaviac::BT_SUCCESS; } return behaviac::BT_RUNNING; From 06ff506672d626c709f1b9e2d74422532d3b31d0 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 16 Aug 2023 17:24:22 +0800 Subject: [PATCH 06/11] 1 --- server/bin/exported/android_attack_new.xml | 21 ++++++++++++++------- server/gameserver/base_agent.cc | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/server/bin/exported/android_attack_new.xml b/server/bin/exported/android_attack_new.xml index 5be87b48..ef0c768b 100644 --- a/server/bin/exported/android_attack_new.xml +++ b/server/bin/exported/android_attack_new.xml @@ -13,13 +13,20 @@ - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index f9811b33..83ec15df 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -511,7 +511,7 @@ behaviac::EBTStatus BaseAgent::CoShot() return behaviac::BT_FAILURE; } glm::vec3 dir = GetOwner()->GetPos().CalcDir(current_target_.Get()->GetPos()); - if (GlmHelper::Norm(dir) > 150) { + if (GlmHelper::Norm(dir) > GetAttackRange()) { return behaviac::BT_FAILURE; } bool shot_ok = false; From 35d3ae5343339bcbe6ca5effba10c231c4e2ff99 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 16 Aug 2023 18:57:55 +0800 Subject: [PATCH 07/11] 1 --- server/gameserver/android_agent.cc | 5 ----- server/gameserver/base_agent.cc | 7 +++++-- server/gameserver/creature.cc | 23 +++++++++++++++++++++-- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/server/gameserver/android_agent.cc b/server/gameserver/android_agent.cc index e1f3701a..66ffee10 100644 --- a/server/gameserver/android_agent.cc +++ b/server/gameserver/android_agent.cc @@ -45,13 +45,8 @@ bool AndroidAgent::IsCrazeModePrepareMode() if (!IsCrazeMode()) { return false; } -#ifdef DEBUG - if (GetOwner()->room->GetFrameNo() - GetOwner()->AsHuman()->enable_frameno > SERVER_FRAME_RATE * 5) { - return false; -#else if (GetOwner()->room->GetFrameNo() - GetOwner()->AsHuman()->enable_frameno > SERVER_FRAME_RATE * 20) { return false; -#endif } else { if (GetSafeAreaRadius() < 200) { return false; diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 83ec15df..0efa6714 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -370,7 +370,7 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) return behaviac::BT_FAILURE; } float target_distance = GetOwner()->GetPos().Distance2D2(current_target_.Get()->GetPos()); - if (target_distance > 2) { + if (target_distance > 1 && target_distance < 2) { return behaviac::BT_SUCCESS; } /* @@ -384,7 +384,7 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) ); context->target = current_target_; - if (target_distance < 2) { + if (target_distance < 1) { GetOwner()->GetMovement()->CalcTargetPos(60); } else { glm::vec3 dir = GetOwner()->GetPos().CalcDir(context->target.Get()->GetPos()); @@ -512,6 +512,9 @@ behaviac::EBTStatus BaseAgent::CoShot() } glm::vec3 dir = GetOwner()->GetPos().CalcDir(current_target_.Get()->GetPos()); if (GlmHelper::Norm(dir) > GetAttackRange()) { +#ifdef DEBUG + a8::XPrintf("CoShot Failed %f\n", {GlmHelper::Norm(dir)}); +#endif return behaviac::BT_FAILURE; } bool shot_ok = false; diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 4cf4eb14..7d99f39d 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -824,8 +824,27 @@ void Creature::TriggerOneObjectBuff(Skill* skill, Creature* target, BuffTriggerT Skill* Creature::GetSkill(int skill_id) { - auto itr = skill_hash_.find(skill_id); - return itr != skill_hash_.end() ? itr->second.get() : nullptr; + if (skill_id < 10) { + switch (skill_id) { + case 0: + { + return GetMainSkill(); + } + break; + case 1: + { + return GetMainSkill(); + } + break; + default: + { + return nullptr; + } + } + } else { + auto itr = skill_hash_.find(skill_id); + return itr != skill_hash_.end() ? itr->second.get() : nullptr; + } } bool Creature::CanUseSkill(int skill_id) From a4f826ec22cb26da53ddf15b102ca0215b6ddbb5 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Aug 2023 14:03:57 +0800 Subject: [PATCH 08/11] 1 --- server/gameserver/incubator.cc | 52 ++++++++++++++++++++++++++++++---- server/gameserver/incubator.h | 1 + 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 02a06db6..bb7b361b 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -206,6 +206,7 @@ void Incubator::RecycleAndroid(Human* hum) hum->RemoveBuffByEffectId(kBET_BeRecycle); hold_humans_.push_back(hum); room->DisableHuman(hum); + Rearrangement(); #ifdef DEBUG room->BroadcastDebugMsg(a8::Format("回收机器人 %d:%s:%d 添加到回收列表", {hum->GetUniId(), @@ -516,14 +517,11 @@ void Incubator::ShowHand() room->EnableHuman(hum); hum->MustBeAddBuff(hum, kTraceBuffId); a8::SetBitFlag(hum->status, CS_CrazeMode); - #if 0 a8::SetBitFlag(hum->status, CS_DisableAttackAndroid); - #endif } - #if 0 room->xtimer.SetIntervalEx ( - SERVER_FRAME_RATE, + SERVER_FRAME_RATE * 40, [room = room] (int event, const a8::Args* args) mutable { if (a8::TIMER_EXEC_EVENT == event) { @@ -540,7 +538,6 @@ void Incubator::ShowHand() } }, &room->xtimer_attacher_); - #endif hold_humans_.clear(); } @@ -556,3 +553,48 @@ void Incubator::Clear(int save_num) hold_humans_.erase(hold_humans_.begin()); } } + +void Incubator::Rearrangement() +{ + if (hold_humans_.size() < 6) { + return; + } + std::vector teams2; + std::vector teams3; + std::vector teams4; + { + std::map team_num_hash; + for (auto hum : hold_humans_) { + if (team_num_hash.find(hum->team_id) != team_num_hash.end()) { + ++team_num_hash[hum->team_id]; + } else { + team_num_hash[hum->team_id]; + } + } + for (auto& pair : team_num_hash) { + if (pair.second > 1) { + teams2.push_back(pair.first); + } + if (pair.second > 2) { + teams3.push_back(pair.first); + } + if (pair.second > 3) { + teams4.push_back(pair.first); + } + } + } + int team_id = 0; + if (!teams3.empty() || !teams4.empty()) { + if (a8::RandEx(1, 99) < 10 && !teams4.empty()) { + team_id = teams4.at(rand() % teams4.size()); + } else { + if (!teams3.empty()) { + team_id = teams3.at(rand() % teams3.size()); + } else if (!teams4.empty()) { + team_id = teams4.at(rand() % teams4.size()); + } + } + } else if (!teams2.empty()) { + team_id = teams2.at(rand() % teams2.size()); + } +} diff --git a/server/gameserver/incubator.h b/server/gameserver/incubator.h index dce12013..76faa197 100644 --- a/server/gameserver/incubator.h +++ b/server/gameserver/incubator.h @@ -26,6 +26,7 @@ private: void AutoAllocAndroid(); void OnEnterNewWave(int wave); void SpawnWaveMon(int wave); + void Rearrangement(); private: int wait_alloc_time_ = 0; From 0f3c154067bbb83146c7faecd6b57ccf056b5c3b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Aug 2023 14:18:02 +0800 Subject: [PATCH 09/11] 1 --- server/gameserver/human.h | 1 + server/gameserver/incubator.cc | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 4c610c42..a23905a5 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -99,6 +99,7 @@ class Human : public Creature a8::XTimerWp revive_timer; long long dead_frameno = 0; long long real_dead_frameno = 0; + int sort_id = 0; Weapon default_weapon; diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index bb7b361b..1c7c119c 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -564,12 +564,15 @@ void Incubator::Rearrangement() std::vector teams4; { std::map team_num_hash; + int i = 0; for (auto hum : hold_humans_) { if (team_num_hash.find(hum->team_id) != team_num_hash.end()) { ++team_num_hash[hum->team_id]; } else { team_num_hash[hum->team_id]; } + hum->sort_id = i; + ++i; } for (auto& pair : team_num_hash) { if (pair.second > 1) { @@ -597,4 +600,25 @@ void Incubator::Rearrangement() } else if (!teams2.empty()) { team_id = teams2.at(rand() % teams2.size()); } + if (team_id) { + for (auto hum : hold_humans_) { + if (hum->team_id == team_id) { + hum->sort_id = 999999; + } + } + std::sort(hold_humans_.begin(), hold_humans_.end(), + [] (Human* a, Human* b) -> bool + { + return a->sort_id < b->sort_id; + }); + } +#ifdef DEBUG + { + std::string data = "Rearrangement "; + for (auto hum : hold_humans_) { + data += a8::XValue(hum->team_id) + ","; + } + a8::XPrintf("%s\n", {data}); + } +#endif } From 2f1114fc1eb357954b0cfdf9ae0d8d223b095daf Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Aug 2023 14:48:03 +0800 Subject: [PATCH 10/11] 1 --- server/gameserver/incubator.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/gameserver/incubator.cc b/server/gameserver/incubator.cc index 1c7c119c..89d26d93 100644 --- a/server/gameserver/incubator.cc +++ b/server/gameserver/incubator.cc @@ -569,7 +569,7 @@ void Incubator::Rearrangement() if (team_num_hash.find(hum->team_id) != team_num_hash.end()) { ++team_num_hash[hum->team_id]; } else { - team_num_hash[hum->team_id]; + team_num_hash[hum->team_id] = 1; } hum->sort_id = i; ++i; @@ -614,11 +614,11 @@ void Incubator::Rearrangement() } #ifdef DEBUG { - std::string data = "Rearrangement "; + std::string data = "Rearrangement team_id:" + a8::XValue(team_id).GetString() + " "; for (auto hum : hold_humans_) { - data += a8::XValue(hum->team_id) + ","; + data += a8::XValue(hum->team_id).GetString() + ","; } - a8::XPrintf("%s\n", {data}); + a8::XPrintf("%s !%d %d %d\n", {data, teams2.size(), teams3.size(), teams4.size()}); } #endif } From 46ebaa8decc8bb4e1753226d062b5a68b8510b34 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 17 Aug 2023 17:14:58 +0800 Subject: [PATCH 11/11] 1 --- server/gameserver/base_agent.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/base_agent.cc b/server/gameserver/base_agent.cc index 0efa6714..bd9aa5a4 100644 --- a/server/gameserver/base_agent.cc +++ b/server/gameserver/base_agent.cc @@ -406,7 +406,7 @@ behaviac::EBTStatus BaseAgent::CoMoveToCurrentTarget(float distance) if (GetOwner()->GetMovement()->GetPathSize() <= 0) { if (context->target.Get()) { if (GlmHelper::IsEqual2D(GetOwner()->GetPos().ToGlmVec3(), - current_target_.Get()->GetPos().ToGlmVec3())) { + context->target.Get()->GetPos().ToGlmVec3())) { } else { glm::vec3 dir = GetOwner()->GetPos().CalcDir(context->target.Get()->GetPos()); GlmHelper::Normalize(dir);