diff --git a/server/gameserver/android_new.ai.cc b/server/gameserver/android_new.ai.cc index 2a780ab..56180d7 100644 --- a/server/gameserver/android_new.ai.cc +++ b/server/gameserver/android_new.ai.cc @@ -132,17 +132,76 @@ void AndroidNewAI::DefaultAi() void AndroidNewAI::ChangeToStateOldAI(AndroidState_e to_state) { - + old_ai_data_.state = to_state; + old_ai_data_.state_elapsed_time = 0; + switch (old_ai_data_.state) { + case AS_moving: + { + Human* hum = (Human*)owner; + hum->move_dir = a8::Vec2(1.0f, 0); + hum->move_dir.Rotate(a8::RandAngle()); + hum->move_dir.Normalize(); + hum->attack_dir = hum->move_dir; + } + break; + default: + break; + } } void AndroidNewAI::DoMoveOldAI() { - + Human* hum = (Human*)owner; + if (hum->room->IsWaitingStart()) { + return; + } + if (owner->UpdatedTimes() % 2 == 0) { + Human* hum = (Human*)owner; + int speed = std::max(1, (int)hum->GetSpeed()); + if (a8::HasBitFlag(hum->status, HS_NewBieGuideAndroid) && + hum->room->GetFrameNo() - hum->enable_frameno < SERVER_FRAME_RATE * 8) { + hum->move_dir = hum->room->GetFirstNewBie()->GetPos() - hum->GetPos(); + hum->move_dir.Normalize(); + } + 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); + } + } } void AndroidNewAI::DoAttackOldAI() { - + Human* hum = (Human*)owner; + if (hum->room->IsWaitingStart()) { + return; + } + if (hum->room->GetGasData().gas_mode == GasInactive) { + return; + } + if (owner->UpdatedTimes() % 10 == 0) { + Human* enemy = owner->room->FindEnemy((Human*)owner); + if (enemy) { + Human* sender = (Human*)owner; + 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); + } + } + old_ai_data_.last_target = enemy; + } } void AndroidNewAI::UpdateAiLevel1()