diff --git a/server/gameserver/android_new.ai.cc b/server/gameserver/android_new.ai.cc index e4ad90c..0252b4f 100644 --- a/server/gameserver/android_new.ai.cc +++ b/server/gameserver/android_new.ai.cc @@ -387,6 +387,9 @@ void AndroidNewAI::UpdateNewBieRoomLogic() void AndroidNewAI::UpdateNewAI() { Human* hum = (Human*)owner; + if (a8::HasBitFlag(hum->status, HS_Disable)) { + return; + } ++node_.exec_frame_num; hum->shot_hold = false; switch (node_.main_state) { @@ -410,6 +413,11 @@ void AndroidNewAI::UpdateNewAI() UpdateRandomWalk(); } break; + default: + { + abort(); + } + break; } if (moving_) { DoMoveNewAI(); @@ -535,5 +543,36 @@ void AndroidNewAI::ChangeToStateNewAI(AndroidStateEx_e to_state) Human* AndroidNewAI::GetTarget() { - return nullptr; + if (GetAiLevel() <= 1) { + return nullptr; + } + Human* myself = (Human*)owner; + if (myself->room->GetGasData().gas_mode == GasInactive) { + return nullptr; + } + + Human* target = nullptr; + myself->TouchAllLayerHumanList + ( + [myself, &target] (Human* hum, bool& stop) + { + if (hum->dead) { + return; + } + if (a8::HasBitFlag(hum->status, HS_Disable)) { + return; + } + if (myself->team_id == hum->team_id) { + return; + } + if (target) { + if (myself->GetPos().ManhattanDistance(target->GetPos()) > + myself->GetPos().ManhattanDistance(hum->GetPos())) { + target = hum; + } + } else { + target = hum; + } + }); + return target; }