From 79eb19a10d20e943d6248d9e684b64a7242dd2cf Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 26 May 2020 10:30:29 +0800 Subject: [PATCH] 1 --- server/gameserver/android.ai.cc | 44 +++++++++++++++++++++++++++++++++ server/gameserver/android.ai.h | 1 + 2 files changed, 45 insertions(+) diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 3cd52d7..4b2d9c5 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -33,6 +33,10 @@ void AndroidAI::Update(int delta_time) if (hum->dead) { return; } + if (a8::HasBitFlag(hum->status, HS_NewBieNpc)) { + UpdateNewBieNpc(); + return; + } switch (state) { case AS_thinking: { @@ -149,3 +153,43 @@ void AndroidAI::DoAttack() } } } + +void AndroidAI::UpdateNewBieNpc() +{ + Human* hum = (Human*)owner; + if (hum->room->frame_no - hum->enable_frameno < 2) { + hum->move_dir = hum->room->first_newbie->GetPos() - hum->GetPos(); + hum->move_dir.Normalize(); + hum->attack_dir = hum->move_dir; + if (hum->curr_weapon->weapon_idx != 0) { + hum->curr_weapon->ammo = 10; + } + } else if (hum->room->frame_no - hum->enable_frameno < SERVER_FRAME_RATE * 1.5) { + int speed = std::max(1, (int)hum->GetSpeed()); + for (int i = 0; i < speed; ++i) { + a8::Vec2 old_pos = hum->GetPos(); + hum->SetPos(hum->GetPos() + hum->move_dir); + if (hum->IsCollisionInMapService()) { + hum->SetPos(old_pos); + if (i == 0) { + hum->FindPathInMapService(); + } + break; + } + hum->room->grid_service->MoveHuman(hum); + } + } else if (hum->room->frame_no - hum->enable_frameno < SERVER_FRAME_RATE * 3) { + Human* enemy = hum->room->first_newbie; + Human* sender = hum; + a8::Vec2 shot_dir = enemy->GetPos() - sender->GetPos(); + if (std::abs(shot_dir.x) > FLT_EPSILON || + std::abs(shot_dir.y) > FLT_EPSILON) { + shot_dir.Normalize(); + shot_dir.Rotate((rand() % 10) / 180.0f); + sender->attack_dir = shot_dir; + sender->Shot(shot_dir); + } + } else { + a8::UnSetBitFlag(hum->status, HS_NewBieNpc); + } +} diff --git a/server/gameserver/android.ai.h b/server/gameserver/android.ai.h index 6c121bc..febec09 100644 --- a/server/gameserver/android.ai.h +++ b/server/gameserver/android.ai.h @@ -21,6 +21,7 @@ class AndroidAI : public AIComponent virtual void Update(int delta_time) override; private: + void UpdateNewBieNpc(); void ChangeToState(AndroidState_e to_state);