From 9c7bcc4db0b856efc19a47f804e502dbac7b8d34 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 14 Jul 2020 15:24:53 +0800 Subject: [PATCH] 1 --- server/gameserver/android_new.ai.cc | 66 ++++++++++++++++++++++--- server/gameserver/android_new.ai.h | 4 +- server/tools/protobuild/metatable.proto | 2 +- 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/server/gameserver/android_new.ai.cc b/server/gameserver/android_new.ai.cc index cb39173..c3a2b4a 100644 --- a/server/gameserver/android_new.ai.cc +++ b/server/gameserver/android_new.ai.cc @@ -10,18 +10,25 @@ const int SHUA_RANGE = 580; +enum ShotType_e +{ + kShotNone = 0, + kShotClick = 1, + kShotHold = 2, +}; + /* 目标:ai可切换,降级/升级(根据系统当前负载) ai级别 1: 木桩(不射击) -2: 站桩间隔开枪 param1: 攻击距离 param2:攻击间隔 -3: 站桩描边射击 param1: 攻击距离 -4: 站桩扫射(连续射击) param1: 攻击距离 -5: 跑动间隔开枪 param1: 追击距离 param2:攻击间隔 -6: 跑动描边射击 param1: 追击距离 -7: 跑动扫射 param1: 追击距离 -8: 跑动射击 param1: 追击距离 +2: 站桩间隔开枪 +3: 站桩描边射击 +4: 站桩扫射(连续射击) +5: 跑动间隔开枪 +6: 跑动描边射击 +7: 跑动扫射 +8: 跑动射击 */ AndroidNewAI::~AndroidNewAI() @@ -459,10 +466,44 @@ void AndroidNewAI::UpdateThinking() void AndroidNewAI::UpdateAttack() { + Human* myself = (Human*)owner; if (node_.target->dead) { ChangeToStateNewAI(ASE_Thinking); return; } + float distance = myself->GetPos().Distance(node_.target->GetPos()); + if (distance > GetAttackRange()) { + if (ai_meta->i->pursuit_radius() <= 0) { + //站桩 + ChangeToStateNewAI(ASE_Idle); + } else { + if (distance < ai_meta->i->pursuit_radius()) { + //追击 + ChangeToStateNewAI(ASE_Pursuit); + } else { + ChangeToStateNewAI(ASE_Thinking); + } + } + return; + } + //攻击逻辑 + switch (ai_meta->i->attack_type()) { + case kShotClick: + { + + } + break; + case kShotHold: + { + + } + break; + default: + { + ChangeToStateNewAI(ASE_Idle); + } + break; + } } void AndroidNewAI::UpdateRandomWalk() @@ -576,3 +617,14 @@ Human* AndroidNewAI::GetTarget() }); return target; } + +float AndroidNewAI::GetAttackRange() +{ + float attack_range = 0; + Human* myself = (Human*)owner; + if (myself->curr_weapon && myself->curr_weapon->meta) { + attack_range = myself->curr_weapon->meta->i->range(); + } + attack_range = std::min(500.0f, attack_range); + return attack_range; +} diff --git a/server/gameserver/android_new.ai.h b/server/gameserver/android_new.ai.h index b2242e0..1df8a88 100644 --- a/server/gameserver/android_new.ai.h +++ b/server/gameserver/android_new.ai.h @@ -8,7 +8,8 @@ enum AndroidStateEx_e ASE_Idle = 0, ASE_Thinking = 1, ASE_Attack = 2, - ASE_RandomWalk = 3 + ASE_RandomWalk = 3, + ASE_Pursuit = 4 }; class AINode @@ -65,6 +66,7 @@ private: void ChangeToStateNewAI(AndroidStateEx_e to_state); Human* GetTarget(); + float GetAttackRange(); private: OldAiData old_ai_data_; diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index a64f81b..107f3d4 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -238,7 +238,7 @@ message KillPoint message AI { optional int32 ai_level = 1; - optional int32 pursuit_distance = 2; + optional int32 pursuit_radius = 2; optional int32 attack_interval = 3; optional int32 attack_times = 4; optional int32 attack_type = 5;