private void on_seek_quest_move_done(BotClient.QuestData.SeekInfo seek_info) { if (runner.CurrentMoveAgent != null) { runner.CurrentMoveAgent.Stop(); } log.Log("on_seek_quest_move_done : " + seek_info.quest); if (seek_info.areaId == bot.CurrentZoneLayer.SceneID) { switch (seek_info.quest.State) { case BotClient.QuestData.QuestStatus.NEW: bot.CurrentZoneActor.SendUnitGuard(false); runner.do_accept_quest(seek_info.quest, (err) => { do_clear_current_seeking(); }); break; case BotClient.QuestData.QuestStatus.IN_PROGRESS: log.Error(seek_info.quest.SubType + " : " + seek_info.quest + " : " + seek_info.quest.State + " T=" + InProgressQuestTicking); switch (seek_info.quest.SubType) { case BotClient.QuestData.EventType.InterActiveItem: bot.CurrentZoneActor.SendUnitGuard(false); Vector2 move_to; var item = runner.do_try_pick_nearest_item(out move_to); if (item == null && move_to != null) { CurrentQuestSeeking.MoveTo = move_to; } break; case BotClient.QuestData.EventType.KillCollect: bot.CurrentZoneActor.SendUnitGuard(true); runner.do_start_pick_any_item(); break; case BotClient.QuestData.EventType.FuckFB: case BotClient.QuestData.EventType.KillMonster: bot.CurrentZoneActor.SendUnitGuard(true); break; case BotClient.QuestData.EventType.InterActiveNpc: runner.do_update_quest_status(seek_info.quest); break; } break; case BotClient.QuestData.QuestStatus.CAN_FINISH: runner.do_submit_task(seek_info.quest, (err) => { do_clear_current_seeking(); runner.do_gm_finish_task(seek_info.quest.TemplateID); runner.do_seek_random_task(on_seek_action, true); }); break; case BotClient.QuestData.QuestStatus.DONE: log.Log("DONE : " + seek_info.quest + " : " + seek_info.quest.State); CurrentQuestSeeking = null; bot.CurrentZoneActor.SendUnitGuard(false); runner.do_seek_random_task(on_seek_action); break; } } else { if (bot.CurrentRegionManager.CheckTrans(1, false) == false) { bot.CurrentZoneActor.SendUnitGuard(true); } log.Log("continue do_seek_task : " + seek_info.quest); runner.do_seek_task(seek_info.quest.TemplateID, on_seek_action); } if (seek_info.quest.State == BotClient.QuestData.QuestStatus.IN_PROGRESS) { InProgressQuestTicking++; if (InProgressQuestTicking >= Config.QuestTickingMaxTime) { InProgressQuestTicking = 0; runner.do_gm_finish_task(CurrentQuestSeeking.quest.TemplateID); bot.CurrentZoneLayer.AddTimeDelayMS(bot.Random.Next(Config.CheckIntervalMS, Config.CheckIntervalMS * 2), (t) => { runner.do_seek_random_task(on_seek_action, true); }); } } }