예제 #1
0
        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);
                    });
                }
            }
        }