From 2f7c124e1c6665c9a4ae361d8e8ca0ebc6841b00 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 15 Jul 2020 17:04:04 +0800 Subject: [PATCH] 1 --- server/gameserver/android_new.ai.cc | 18 +++++++++++++++--- server/gameserver/android_new.ai.h | 1 + server/gameserver/types.cc | 1 + server/tools/protobuild/metatable.proto | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/server/gameserver/android_new.ai.cc b/server/gameserver/android_new.ai.cc index 13fa3f2..74d997c 100644 --- a/server/gameserver/android_new.ai.cc +++ b/server/gameserver/android_new.ai.cc @@ -515,7 +515,7 @@ void AndroidNewAI::UpdateAttack() case kShotClick: { if (ai_meta->i->attack_interval() > 0) { - if (node_.shot_times < ai_meta->i->attack_times()) { + if (node_.shot_times < GetAttackTimes()) { DoShotNewAI(); } else { ChangeToStateNewAI(ASE_Idle); @@ -724,10 +724,12 @@ void AndroidNewAI::DoShotNewAI() std::abs(shot_dir.y) > FLT_EPSILON) { shot_dir.Normalize(); if (ai_meta->i->shot_offset_angle() > 0) { + int shot_offset_angle = a8::RandEx(ai_meta->i->shot_offset_angle(), + 1); if (rand() % 10 < 3) { - shot_dir.Rotate(ai_meta->i->shot_offset_angle() / 180.0f); + shot_dir.Rotate(shot_offset_angle / 180.0f); } else { - shot_dir.Rotate(ai_meta->i->shot_offset_angle() / -180.0f); + shot_dir.Rotate(shot_offset_angle / -180.0f); } } a8::Vec2 old_attack_dir = myself->attack_dir; @@ -743,3 +745,13 @@ void AndroidNewAI::DoShotNewAI() } } } + +int AndroidNewAI::GetAttackTimes() +{ + Human* myself = (Human*)owner; + if (myself->curr_weapon) { + return std::min(ai_meta->i->attack_times(), myself->curr_weapon->GetClipVolume()); + } else { + return ai_meta->i->attack_times(); + } +} diff --git a/server/gameserver/android_new.ai.h b/server/gameserver/android_new.ai.h index 01a979a..ced131d 100644 --- a/server/gameserver/android_new.ai.h +++ b/server/gameserver/android_new.ai.h @@ -73,6 +73,7 @@ private: Human* GetTarget(); float GetAttackRange(); + int GetAttackTimes(); private: OldAiData old_ai_data_; diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index b1c2599..96ccafa 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -87,3 +87,4 @@ a8::Vec2 BornPoint::RandPoint() const } return born_point; } + diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index f20645f..17f949a 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -242,7 +242,7 @@ message AI optional int32 attack_interval = 3; optional int32 attack_times = 4; optional int32 attack_type = 5; - optional float shot_offset_angle = 6; + optional int32 shot_offset_angle = 6; optional string random_move_idle_time = 8; optional string random_move_time = 9; optional int32 attack_range = 10;