From 8ba9544bfabf773a6941f57690b55ab9e5c61d4a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 13:58:32 +0800 Subject: [PATCH 01/11] 1 --- server/gameserver/android.ai.cc | 2 +- server/gameserver/metamgr.cc | 11 +++-------- server/gameserver/metamgr.h | 2 +- server/gameserver/zombie.ai.cc | 2 +- server/tools/protobuild/metatable.proto | 1 + 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 65b4a7f..6657f5f 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -410,7 +410,7 @@ void AndroidNewAI::UpdateNewAI() return; } if (!ai_meta && GetAiLevel() != 0) { - ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel()); + ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 0); if (!ai_meta) { abort(); } diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 73f57b4..3508847 100755 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -602,12 +602,7 @@ private: MetaData::AI& item = a8::FastAppend(ai_list); item.i = &meta; item.Init(); - ai_hash[meta.ai_level()] = &item; - } - for (int i = 1; i <= MAX_AI_LEVEL; ++i) { - if (ai_hash.find(i) == ai_hash.end()) { - abort(); - } + ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; } } @@ -836,8 +831,8 @@ MetaData::Robot* MetaMgr::RandRobot(std::set& refreshed_robot_set) } } -MetaData::AI* MetaMgr::GetAI(int ai_level) +MetaData::AI* MetaMgr::GetAI(int ai_level, int ai_mode) { - auto itr = loader_->ai_hash.find(ai_level); + auto itr = loader_->ai_hash.find(a8::MakeInt64(ai_level, ai_mode)); return itr != loader_->ai_hash.end() ? itr->second : nullptr; } diff --git a/server/gameserver/metamgr.h b/server/gameserver/metamgr.h index de59096..0accc4e 100755 --- a/server/gameserver/metamgr.h +++ b/server/gameserver/metamgr.h @@ -47,7 +47,7 @@ class MetaMgr : public a8::Singleton int GetKillPointParam1(int kill_num); int GetKillPointParam2(int kill_num); MetaData::Robot* RandRobot(std::set& refreshed_robot_set); - MetaData::AI* GetAI(int ai_level); + MetaData::AI* GetAI(int ai_level, int ai_mode); int gas_inactive_time = 10; int newbie_gas_inactive_time = 5; diff --git a/server/gameserver/zombie.ai.cc b/server/gameserver/zombie.ai.cc index 17ec0f2..47f8c15 100644 --- a/server/gameserver/zombie.ai.cc +++ b/server/gameserver/zombie.ai.cc @@ -97,7 +97,7 @@ void ZombieAI::UpdateAI() return; } if (!node_->ai_meta && GetAiLevel() != 0) { - node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel()); + node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 1); if (!node_->ai_meta) { abort(); } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index 848789f..c479199 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -263,6 +263,7 @@ message AI optional string random_move_time = 9; optional int32 attack_range = 10; optional float attack_rate = 11; + optional int32 ai_mode = 12; } //end From e360400b6b93161029c3edbc3ac257198b9be664 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 14:36:47 +0800 Subject: [PATCH 02/11] rename zombieai -> zombiemodeai --- server/gameserver/android.cc | 4 +-- .../{zombie.ai.cc => zombiemode.ai.cc} | 34 +++++++++---------- .../{zombie.ai.h => zombiemode.ai.h} | 6 ++-- 3 files changed, 22 insertions(+), 22 deletions(-) rename server/gameserver/{zombie.ai.cc => zombiemode.ai.cc} (95%) rename server/gameserver/{zombie.ai.h => zombiemode.ai.h} (87%) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 24269b1..fdb14dc 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -3,13 +3,13 @@ #include "android.h" #include "metamgr.h" #include "android.ai.h" -#include "zombie.ai.h" +#include "zombiemode.ai.h" #include "room.h" #include "app.h" Android::Android():Human() { - ai = new ZombieAI; + ai = new ZombieModeAI; ai->owner = this; #if 0 ++PerfMonitor::Instance()->entity_num[ET_Android]; diff --git a/server/gameserver/zombie.ai.cc b/server/gameserver/zombiemode.ai.cc similarity index 95% rename from server/gameserver/zombie.ai.cc rename to server/gameserver/zombiemode.ai.cc index 47f8c15..4ecb8de 100644 --- a/server/gameserver/zombie.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -2,7 +2,7 @@ #include -#include "zombie.ai.h" +#include "zombiemode.ai.h" #include "android.h" #include "room.h" #include "metamgr.h" @@ -53,17 +53,17 @@ ai级别 8: 跑动射击 */ -ZombieAI::ZombieAI() +ZombieModeAI::ZombieModeAI() { node_ = new ZombieAINode(); } -ZombieAI::~ZombieAI() +ZombieModeAI::~ZombieModeAI() { A8_SAFE_DELETE(node_); } -void ZombieAI::Update(int delta_time) +void ZombieModeAI::Update(int delta_time) { Human* hum = (Human*)owner; if (hum->poisoning) { @@ -81,7 +81,7 @@ void ZombieAI::Update(int delta_time) UpdateAI(); } -float ZombieAI::GetAttackRate() +float ZombieModeAI::GetAttackRate() { if (!node_->ai_meta) { return 1; @@ -90,7 +90,7 @@ float ZombieAI::GetAttackRate() } } -void ZombieAI::UpdateAI() +void ZombieModeAI::UpdateAI() { Human* hum = (Human*)owner; if (a8::HasBitFlag(hum->status, HS_Disable)) { @@ -145,7 +145,7 @@ void ZombieAI::UpdateAI() } } -void ZombieAI::UpdateIdle() +void ZombieModeAI::UpdateIdle() { Human* hum = (Human*)owner; if (hum->room->GetFrameNo() > node_->frameno + node_->param1) { @@ -153,7 +153,7 @@ void ZombieAI::UpdateIdle() } } -void ZombieAI::UpdateThinking() +void ZombieModeAI::UpdateThinking() { Human* hum = (Human*)owner; if (hum->room->GetGasData().gas_mode == GasInactive || @@ -183,7 +183,7 @@ void ZombieAI::UpdateThinking() } } -void ZombieAI::UpdateAttack() +void ZombieModeAI::UpdateAttack() { Human* myself = (Human*)owner; if (!node_->target || node_->target->dead) { @@ -245,7 +245,7 @@ void ZombieAI::UpdateAttack() } } -void ZombieAI::UpdateRandomWalk() +void ZombieModeAI::UpdateRandomWalk() { Human* hum = (Human*)owner; if (hum->room->GetFrameNo() > node_->frameno + node_->param1) { @@ -253,7 +253,7 @@ void ZombieAI::UpdateRandomWalk() } } -void ZombieAI::UpdatePursuit() +void ZombieModeAI::UpdatePursuit() { Human* myself = (Human*)owner; float distance = myself->GetPos().Distance(node_->target->GetPos()); @@ -266,7 +266,7 @@ void ZombieAI::UpdatePursuit() } } -void ZombieAI::DoMove() +void ZombieModeAI::DoMove() { Human* hum = (Human*)owner; if (std::abs(hum->move_dir.x) > FLT_EPSILON || @@ -290,7 +290,7 @@ void ZombieAI::DoMove() } } -void ZombieAI::ChangeToState(ZombieState_e to_state) +void ZombieModeAI::ChangeToState(ZombieState_e to_state) { Human* hum = (Human*)owner; switch (to_state) { @@ -361,7 +361,7 @@ void ZombieAI::ChangeToState(ZombieState_e to_state) node_->exec_frame_num = 0; } -Human* ZombieAI::GetTarget() +Human* ZombieModeAI::GetTarget() { if (GetAiLevel() <= 1) { return nullptr; @@ -411,7 +411,7 @@ Human* ZombieAI::GetTarget() return target; } -float ZombieAI::GetAttackRange() +float ZombieModeAI::GetAttackRange() { float attack_range = 0; Human* myself = (Human*)owner; @@ -424,7 +424,7 @@ float ZombieAI::GetAttackRange() return attack_range; } -void ZombieAI::DoShot() +void ZombieModeAI::DoShot() { Human* myself = (Human*)owner; if (!node_->target) { @@ -464,7 +464,7 @@ void ZombieAI::DoShot() } } -int ZombieAI::GetAttackTimes() +int ZombieModeAI::GetAttackTimes() { Human* myself = (Human*)owner; if (myself->curr_weapon) { diff --git a/server/gameserver/zombie.ai.h b/server/gameserver/zombiemode.ai.h similarity index 87% rename from server/gameserver/zombie.ai.h rename to server/gameserver/zombiemode.ai.h index 59abe5f..66cccb8 100644 --- a/server/gameserver/zombie.ai.h +++ b/server/gameserver/zombiemode.ai.h @@ -13,12 +13,12 @@ enum ZombieState_e class Human; class ZombieAINode; -class ZombieAI : public AIComponent +class ZombieModeAI : public AIComponent { public: - ZombieAI(); - virtual ~ZombieAI() override; + ZombieModeAI(); + virtual ~ZombieModeAI() override; virtual void Update(int delta_time) override; float GetAttackRate(); From ee6108b63254cb911a2e207b7fdb5ec53ede3675 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 14:51:27 +0800 Subject: [PATCH 03/11] 1 --- server/gameserver/aicomponent.cc | 9 +++++++++ server/gameserver/aicomponent.h | 3 +++ server/gameserver/zombiemode.ai.cc | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/server/gameserver/aicomponent.cc b/server/gameserver/aicomponent.cc index a8f6c68..4c1d816 100644 --- a/server/gameserver/aicomponent.cc +++ b/server/gameserver/aicomponent.cc @@ -17,8 +17,17 @@ void AIComponent::SetAiLevel(int ai_level) ai_level_ = ai_level; } +void AIComponent::SetAiMode(int ai_mode) +{ + ai_mode_ = ai_mode; +} + int AIComponent::GetAiLevel() { return ai_level_; } +int AIComponent::GetAiMode() +{ + return ai_mode_; +} diff --git a/server/gameserver/aicomponent.h b/server/gameserver/aicomponent.h index fba3938..526be0d 100644 --- a/server/gameserver/aicomponent.h +++ b/server/gameserver/aicomponent.h @@ -10,9 +10,12 @@ class AIComponent virtual void Update(int delta_time); virtual float GetAttackRate() { return 0;}; void SetAiLevel(int ai_level); + void SetAiMode(int ai_mode); int GetAiLevel(); + int GetAiMode(); private: int ai_level_ = 0; + int ai_mode_ = 0; }; diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 4ecb8de..db8afb6 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -97,7 +97,7 @@ void ZombieModeAI::UpdateAI() return; } if (!node_->ai_meta && GetAiLevel() != 0) { - node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), 1); + node_->ai_meta = MetaMgr::Instance()->GetAI(GetAiLevel(), GetAiMode()); if (!node_->ai_meta) { abort(); } From 96f317ea1a41732cca4c09c8069997bdb4abb736 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 15:18:20 +0800 Subject: [PATCH 04/11] 1 --- server/gameserver/aicomponent.h | 1 + server/gameserver/constant.h | 7 +++++++ server/gameserver/human.cc | 10 ++++++++++ server/gameserver/zombiemode.ai.cc | 7 +++++++ server/gameserver/zombiemode.ai.h | 1 + 5 files changed, 26 insertions(+) diff --git a/server/gameserver/aicomponent.h b/server/gameserver/aicomponent.h index 526be0d..31ab08c 100644 --- a/server/gameserver/aicomponent.h +++ b/server/gameserver/aicomponent.h @@ -9,6 +9,7 @@ class AIComponent virtual ~AIComponent(); virtual void Update(int delta_time); virtual float GetAttackRate() { return 0;}; + virtual void Reset() {}; void SetAiLevel(int ai_level); void SetAiMode(int ai_mode); int GetAiLevel(); diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 4d9d5c7..ddf9259 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -303,6 +303,13 @@ enum RaceType_e kZombieRace = 2 }; +enum AIMode_e +{ + kChiJiAiMode = 0, + kHumanAiMode = 1, + kZombieAiMode = 2 +}; + const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_ROOT_FMT = "/data/logs/%s"; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 759018e..0364914 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -22,6 +22,7 @@ #include "player.h" #include "buff.h" #include "roomobstacle.h" +#include "aicomponent.h" #include "framework/cpp/utils.h" #include "framework/cpp/httpclientpool.h" @@ -1923,6 +1924,15 @@ void Human::ChangeToRace(RaceType_e race, int level) race != kZombieRace) { abort(); } + if (race_ != race && IsAndroid()) { + Android* android = (Android*)this; + android->ai->Reset(); + if (race == kHumanRace) { + android->ai->SetAiMode(kHumanAiMode); + } else if (race == kZombieRace) { + android->ai->SetAiMode(kZombieAiMode); + } + } race_ = race; level_ = level; if (race_ == kHumanRace) { diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index db8afb6..1fe1fc5 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -81,6 +81,13 @@ void ZombieModeAI::Update(int delta_time) UpdateAI(); } +void ZombieModeAI::Reset() +{ + ChangeToState(ZSE_Idle); + node_->param1 = 2; + node_->ai_meta = nullptr; +} + float ZombieModeAI::GetAttackRate() { if (!node_->ai_meta) { diff --git a/server/gameserver/zombiemode.ai.h b/server/gameserver/zombiemode.ai.h index 66cccb8..c209e35 100644 --- a/server/gameserver/zombiemode.ai.h +++ b/server/gameserver/zombiemode.ai.h @@ -20,6 +20,7 @@ public: ZombieModeAI(); virtual ~ZombieModeAI() override; virtual void Update(int delta_time) override; + virtual void Reset() override; float GetAttackRate(); private: From 034c9cfc9e02f3fd990832975bdd988f79b00e3c Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 15:31:25 +0800 Subject: [PATCH 05/11] 1 --- server/gameserver/room.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index 5b72482..be6605c 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -26,6 +26,8 @@ #include "entityfactory.h" #include "perfmonitor.h" +#include "framework/cpp/utils.h" + const size_t NORMAL_ROOM_MAX_PLAYER_NUM = 40; const size_t MINI_ROOM_MAX_PLAYER_NUM = 20; @@ -1983,7 +1985,11 @@ long long Room::GetGasInactiveTime() { if (room_mode_ == kZombieMode) { #if DEBUG - return 5; + if (f8::IsTestEnv()) { + return MetaMgr::Instance()->zbmode_gas_inactive_time; + } else { + return 5; + } #else return MetaMgr::Instance()->zbmode_gas_inactive_time; #endif From 8ab361c92a6ac7ff6c7b62328c5597d3c83adcfd Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 15:35:32 +0800 Subject: [PATCH 06/11] 1 --- server/gameserver/android.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index fdb14dc..3419c6c 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -9,8 +9,6 @@ Android::Android():Human() { - ai = new ZombieModeAI; - ai->owner = this; #if 0 ++PerfMonitor::Instance()->entity_num[ET_Android]; #endif @@ -18,8 +16,9 @@ Android::Android():Human() Android::~Android() { - delete ai; - ai = nullptr; + if (ai) { + A8_SAFE_DELETE(ai); + } #if 0 --PerfMonitor::Instance()->entity_num[ET_Android]; #endif @@ -27,6 +26,13 @@ Android::~Android() void Android::Initialize() { + if (room->GetRoomMode() == kZombieMode) { + ai = new ZombieModeAI; + ai->owner = this; + } else { + ai = new AndroidNewAI; + ai->owner = this; + } Human::Initialize(); RandSkin(); GiveEquip(); From 5c60fb5676cca741ba48a1e1fe04368b5f44175b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 15:38:20 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E9=AA=91=E4=B9=98=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8B=E5=89=AA=E5=88=80=E6=8A=A2=E4=B8=8D=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=8D=A2=E5=AD=90=E5=BC=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/player.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 6bda5d7..9310826 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -552,7 +552,10 @@ void Player::LootInteraction(Loot* entity) weapon->ammo = 0; weapon->meta = item_meta; weapon->Recalc(); - AutoLoadingBullet(); + if (room->GetRoomMode() == kZombieMode && HasBuffEffect(kBET_Car)) { + } else { + AutoLoadingBullet(); + } need_sync_active_player = true; SyncAroundPlayers(__FILE__, __LINE__, __func__); } From 591d11f662c19d15945ce7d0014732d5ca57fb8b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 15:54:40 +0800 Subject: [PATCH 08/11] 1 --- server/gameserver/android.cc | 2 ++ server/gameserver/zombiemode.ai.cc | 17 ----------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 3419c6c..1ac4f77 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -29,6 +29,8 @@ void Android::Initialize() if (room->GetRoomMode() == kZombieMode) { ai = new ZombieModeAI; ai->owner = this; + ai->SetAiLevel(8); + ai->SetAiMode(kHumanAiMode); } else { ai = new AndroidNewAI; ai->owner = this; diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 1fe1fc5..bfea633 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -39,20 +39,6 @@ public: MetaData::AI* ai_meta = nullptr; }; -/* -nn目标:ai可切换,降级/升级(根据系统当前负载) - -ai级别 -1: 木桩(不射击) -2: 站桩间隔开枪 -3: 站桩描边射击 -4: 站桩扫射(连续射击) -5: 跑动间隔开枪 -6: 跑动描边射击 -7: 跑动扫射 -8: 跑动射击 -*/ - ZombieModeAI::ZombieModeAI() { node_ = new ZombieAINode(); @@ -75,9 +61,6 @@ void ZombieModeAI::Update(int delta_time) if (hum->dead) { return; } - if (hum->room->GetGasData().gas_mode == GasInactive) { - return; - } UpdateAI(); } From ac15c568950029537fe3a982b29b00256cf5d870 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 16:33:45 +0800 Subject: [PATCH 09/11] 1 --- server/gameserver/constant.h | 2 ++ server/gameserver/zombiemode.ai.cc | 17 ++++++++++++++--- server/gameserver/zombiemode.ai.h | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index ddf9259..8fe7002 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -364,3 +364,5 @@ const int HUMAN_RACE_META_START_ID = 5001; const int ZOMBIE_RACE_META_START_ID = 6001; const int TERMINATOR_BUFF_ID = 1033; + +const int TURN_OVER_SKILL_ID = 41001; diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index bfea633..7d13880 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -186,7 +186,11 @@ void ZombieModeAI::UpdateAttack() } float distance = myself->GetPos().Distance(node_->target->GetPos()); if (distance > GetAttackRange()) { - if (node_->ai_meta->i->pursuit_radius() <= 0) { + if (myself->CanUseSkill() && + myself->CurrentSkillMeta()->i->skill_id() != TURN_OVER_SKILL_ID && + distance < myself->CurrentSkillMeta()->i->skill_distance()) { + DoSkill(); + } else if (node_->ai_meta->i->pursuit_radius() <= 0) { //站桩 ChangeToState(ZSE_Thinking); } else { @@ -391,8 +395,7 @@ Human* ZombieModeAI::GetTarget() node_->nearest_human = target; node_->last_check_nearest_human_frameno = myself->room->GetFrameNo(); float distance = myself->GetPos().Distance(target->GetPos()); - #if 1 - #else + #if 0 if (distance > GetAttackRange()) { target = nullptr; } @@ -454,6 +457,14 @@ void ZombieModeAI::DoShot() } } +void ZombieModeAI::DoSkill() +{ + Human* myself = (Human*)owner; + myself->skill_target_id = node_->target->GetEntityUniId(); + myself->skill_target_pos = node_->target->GetPos(); + myself->DoSkill(); +} + int ZombieModeAI::GetAttackTimes() { Human* myself = (Human*)owner; diff --git a/server/gameserver/zombiemode.ai.h b/server/gameserver/zombiemode.ai.h index c209e35..c05e2eb 100644 --- a/server/gameserver/zombiemode.ai.h +++ b/server/gameserver/zombiemode.ai.h @@ -33,6 +33,7 @@ private: void DoMove(); void ChangeToState(ZombieState_e to_state); void DoShot(); + void DoSkill(); Human* GetTarget(); float GetAttackRange(); From adfbf7e7c3869c933e14b8a9c187d314fa564e38 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 17:32:53 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9C=A9=E6=99=95?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/constant.h | 1 + server/gameserver/player.cc | 9 +++++++++ server/gameserver/room.cc | 6 +++--- server/gameserver/zombiemode.ai.cc | 6 ++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index 8fe7002..ef3faa9 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -131,6 +131,7 @@ enum BuffEffectType_e kBET_Pull = 12, //拉人(主动方) kBET_Terminator = 13, //终结者模式 kBET_PlayShotAni = 14, //播放射击动画 + kBET_Vertigo = 15, //眩晕 kBET_End }; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 9310826..2ddf0f9 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -127,6 +127,9 @@ void Player::UpdateMove() SetLastCollisionDoor(nullptr); return; } + if (HasBuffEffect(kBET_Vertigo)) { + return; + } if (HasBuffEffect(kBET_Camouflage)) { RemoveBuffByEffectId(kBET_Camouflage); } @@ -163,6 +166,9 @@ void Player::UpdateShot() series_shot_frames = 0; return; } + if (HasBuffEffect(kBET_Vertigo)) { + return; + } if (shot_start) { shot_start = false; Shot(); @@ -317,6 +323,9 @@ void Player::UpdateGetDown() void Player::UpdateUseSkill() { + if (HasBuffEffect(kBET_Vertigo)) { + return; + } DoSkill(); } diff --git a/server/gameserver/room.cc b/server/gameserver/room.cc index be6605c..5d27156 100644 --- a/server/gameserver/room.cc +++ b/server/gameserver/room.cc @@ -1986,7 +1986,7 @@ long long Room::GetGasInactiveTime() if (room_mode_ == kZombieMode) { #if DEBUG if (f8::IsTestEnv()) { - return MetaMgr::Instance()->zbmode_gas_inactive_time; + return MetaMgr::Instance()->zbmode_gas_inactive_time + 10000; } else { return 5; } @@ -2661,8 +2661,8 @@ void Room::AddPlayerPostProc(Player* hum) RandRemoveAndroid(); } if (GetRoomMode() == kZombieMode) { - #if 0 - hum->ChangeToRace(kZombieRace, 1); + #if 1 + hum->ChangeToRace(kZombieRace, 2); #else hum->ChangeToRace(kHumanRace, 1); #endif diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 7d13880..c6f8128 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -176,6 +176,9 @@ void ZombieModeAI::UpdateThinking() void ZombieModeAI::UpdateAttack() { Human* myself = (Human*)owner; + if (hum->HasBuffEffect(kBET_Vertigo)) { + return; + } if (!node_->target || node_->target->dead) { ChangeToState(ZSE_Thinking); return; @@ -263,6 +266,9 @@ void ZombieModeAI::UpdatePursuit() void ZombieModeAI::DoMove() { Human* hum = (Human*)owner; + if (hum->HasBuffEffect(kBET_Vertigo)) { + return; + } if (std::abs(hum->move_dir.x) > FLT_EPSILON || std::abs(hum->move_dir.y) > FLT_EPSILON) { hum->on_move_collision = From 51b0eeb0a63ba2bbf3d576f2c3558b58ac2b5053 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 29 Jul 2020 17:33:34 +0800 Subject: [PATCH 11/11] 1 --- server/gameserver/zombiemode.ai.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index c6f8128..ca30ff8 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -176,7 +176,7 @@ void ZombieModeAI::UpdateThinking() void ZombieModeAI::UpdateAttack() { Human* myself = (Human*)owner; - if (hum->HasBuffEffect(kBET_Vertigo)) { + if (myself->HasBuffEffect(kBET_Vertigo)) { return; } if (!node_->target || node_->target->dead) {