From 2f06ee35c5ce12fda03e41d4548b7000114e847b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 22 Jul 2021 11:54:06 +0000 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90ai=E5=9F=BA=E7=A1=80=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/aicomponent.cc | 20 -------------------- server/gameserver/aicomponent.h | 8 -------- server/gameserver/android.ai.cc | 20 ++++++++++++++++++++ server/gameserver/android.ai.h | 7 +++++++ server/gameserver/android.cc | 8 +++++--- server/gameserver/hero.ai.cc | 8 ++------ server/gameserver/hero.cc | 5 ++--- server/gameserver/human.cc | 5 +++++ server/gameserver/metamgr.cc | 4 +++- server/gameserver/zombiemode.ai.cc | 20 ++++++++++++++++++++ server/gameserver/zombiemode.ai.h | 7 +++++++ 11 files changed, 71 insertions(+), 41 deletions(-) diff --git a/server/gameserver/aicomponent.cc b/server/gameserver/aicomponent.cc index 4c1d816f..6903c2e9 100644 --- a/server/gameserver/aicomponent.cc +++ b/server/gameserver/aicomponent.cc @@ -11,23 +11,3 @@ void AIComponent::Update(int delta_time) { } - -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 cb71a978..a924cd74 100644 --- a/server/gameserver/aicomponent.h +++ b/server/gameserver/aicomponent.h @@ -22,13 +22,5 @@ class 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(); - int GetAiMode(); - -private: - int ai_level_ = 0; - int ai_mode_ = 0; }; diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index d06ed426..59b60595 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -631,3 +631,23 @@ int AndroidAI::GetAttackTimes() return ai_meta->i->attack_times(); } } + +void AndroidAI::SetAiLevel(int ai_level) +{ + ai_level_ = ai_level; +} + +void AndroidAI::SetAiMode(int ai_mode) +{ + ai_mode_ = ai_mode; +} + +int AndroidAI::GetAiLevel() +{ + return ai_level_; +} + +int AndroidAI::GetAiMode() +{ + return ai_mode_; +} diff --git a/server/gameserver/android.ai.h b/server/gameserver/android.ai.h index cd3c9c06..fb892685 100644 --- a/server/gameserver/android.ai.h +++ b/server/gameserver/android.ai.h @@ -16,6 +16,10 @@ public: virtual ~AndroidAI() override; virtual void Update(int delta_time) override; float GetAttackRate(); + void SetAiLevel(int ai_level); + void SetAiMode(int ai_mode); + int GetAiLevel(); + int GetAiMode(); private: void DefaultAi(); @@ -38,6 +42,9 @@ private: int GetAttackTimes(); private: + int ai_level_ = 0; + int ai_mode_ = 0; + OldAiData* old_ai_data_ = nullptr; MetaData::AI* ai_meta = nullptr; diff --git a/server/gameserver/android.cc b/server/gameserver/android.cc index 566c3fbb..d68b7deb 100644 --- a/server/gameserver/android.cc +++ b/server/gameserver/android.cc @@ -29,8 +29,8 @@ void Android::Initialize() if (room->GetRoomMode() == kZombieMode) { ai = new ZombieModeAI; ai->owner = this; - ai->SetAiLevel(8); - ai->SetAiMode(kHumanAiMode); + ((ZombieModeAI*)ai)->SetAiLevel(8); + ((ZombieModeAI*)ai)->SetAiMode(kHumanAiMode); } else { ai = new AndroidAI; ai->owner = this; @@ -93,7 +93,9 @@ void Android::GiveEquip() void Android::SetAiLevel(int ai_level) { if (ai) { - ai->SetAiLevel(ai_level); + if (room->GetRoomMode() == kChiJiMode) { + ((Android*)ai)->SetAiLevel(ai_level); + } } } diff --git a/server/gameserver/hero.ai.cc b/server/gameserver/hero.ai.cc index 054b487a..e99aa42f 100644 --- a/server/gameserver/hero.ai.cc +++ b/server/gameserver/hero.ai.cc @@ -75,12 +75,6 @@ float HeroAI::GetAttackRate() void HeroAI::UpdateAI() { Hero* hero = (Hero*)owner; - if (!ai_meta && GetAiLevel() != 0) { - ai_meta = MetaMgr::Instance()->GetAndroidAI(GetAiLevel(), 0); - if (!ai_meta) { - abort(); - } - } ++node_->exec_frame_num; hero->shot_hold = false; switch (node_->main_state) { @@ -385,9 +379,11 @@ void HeroAI::ChangeToStateAI(HeroState_e to_state) Creature* HeroAI::GetTarget() { + #if 0 if (GetAiLevel() <= 1) { return nullptr; } + #endif Hero* myself = (Hero*)owner; if (myself->room->GetGasData().gas_mode == GasInactive) { return nullptr; diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 418b2c1f..2e66879c 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -32,7 +32,9 @@ void Hero::Initialize() RecalcSelfCollider(); ai = new HeroAI; ai->owner = this; + #if 0 ai->SetAiLevel(8); + #endif MetaData::Equip* weapon_meta = MetaMgr::Instance()->GetEquip(meta->i->default_weapon()); if (weapon_meta) { weapons[GUN_SLOT1].weapon_idx = GUN_SLOT1; @@ -180,9 +182,6 @@ void Hero::GetHitAabbBox(AabbCollider& aabb_box) void Hero::SetAiLevel(int ai_level) { - if (ai) { - ai->SetAiLevel(ai_level); - } } void Hero::DetachFromMaster() diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index f1b11761..c9e9408e 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1690,6 +1690,9 @@ void Human::_UpdateMove(int speed) void Human::ChangeToRace(RaceType_e race, int level) { + #if 1 + abort(); + #endif if (race != kHumanRace && race != kZombieRace) { abort(); @@ -1697,11 +1700,13 @@ void Human::ChangeToRace(RaceType_e race, int level) if (race_ != race && IsAndroid()) { Android* android = (Android*)this; android->ai->Reset(); + #if 0 if (race == kHumanRace) { android->ai->SetAiMode(kHumanAiMode); } else if (race == kZombieRace) { android->ai->SetAiMode(kZombieAiMode); } + #endif } race_ = race; level_ = level; diff --git a/server/gameserver/metamgr.cc b/server/gameserver/metamgr.cc index 9e4a9658..1d7e90d3 100644 --- a/server/gameserver/metamgr.cc +++ b/server/gameserver/metamgr.cc @@ -693,7 +693,9 @@ private: item.i = &meta; item.Init(); ai_hash[item.i->id()] = &item; - android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; + if (item.i->ai_kind() == kAI_Android) { + android_ai_hash[a8::MakeInt64(meta.ai_level(), meta.ai_mode())] = &item; + } } for (auto& meta : text_meta_list) { diff --git a/server/gameserver/zombiemode.ai.cc b/server/gameserver/zombiemode.ai.cc index 3238c64f..f1d04176 100644 --- a/server/gameserver/zombiemode.ai.cc +++ b/server/gameserver/zombiemode.ai.cc @@ -503,3 +503,23 @@ int ZombieModeAI::GetAttackTimes() return 0; } } + +void ZombieModeAI::SetAiLevel(int ai_level) +{ + ai_level_ = ai_level; +} + +void ZombieModeAI::SetAiMode(int ai_mode) +{ + ai_mode_ = ai_mode; +} + +int ZombieModeAI::GetAiLevel() +{ + return ai_level_; +} + +int ZombieModeAI::GetAiMode() +{ + return ai_mode_; +} diff --git a/server/gameserver/zombiemode.ai.h b/server/gameserver/zombiemode.ai.h index ec8e3593..8866ba83 100644 --- a/server/gameserver/zombiemode.ai.h +++ b/server/gameserver/zombiemode.ai.h @@ -14,6 +14,10 @@ public: virtual void Update(int delta_time) override; virtual void Reset() override; float GetAttackRate(); + void SetAiLevel(int ai_level); + void SetAiMode(int ai_mode); + int GetAiLevel(); + int GetAiMode(); private: void UpdateAI(); @@ -32,5 +36,8 @@ private: int GetAttackTimes(); private: + int ai_level_ = 0; + int ai_mode_ = 0; + ZombieAINode* node_ = nullptr; };