Ejemplo n.º 1
0
        public void Start()
        {
            var methodName = "Start";

            LogTrace(methodName);

            if (_missionProcessorState == MissionProcessorStates.Idle ||
                _missionProcessorState == MissionProcessorStates.Finished)
            {
                _missionProcessorState = MissionProcessorStates.GetMissionRecord;
            }
        }
Ejemplo n.º 2
0
        public void Reset()
        {
            var methodName = "Reset";

            LogTrace(methodName);

            //Reset all variables
            _missionProcessorState = MissionProcessorStates.Idle;
            _timeoutExpired        = DateTime.MinValue;
            _timesClear            = 3;
            _currentRoom           = 0;
            _nextRoomGateQueued    = false;
            _actions.Clear();
            _lootCanBlacklist.Clear();
        }
Ejemplo n.º 3
0
        private bool GetMissionRecord()
        {
            var methodName = "GetMissionRecord";

            LogTrace(methodName);

            var actions = GetActionsForMission();

            if (actions == null)
            {
                return(false);
            }

            _actions = actions;

            LogMessage(methodName, LogSeverityTypes.Standard, "Got action set for mission \"{0}\", waiting for arrival at mission.",
                       StealthBot.MissionRunner.ActiveMission.Name);
            _missionProcessorState = MissionProcessorStates.WaitForArrival;
            return(true);
        }
Ejemplo n.º 4
0
        private bool ReloadMissionRecord()
        {
            var methodName = "ReloadMissionRecord";

            LogTrace(methodName);

            var actions = GetActionsForMission();

            if (actions == null)
            {
                return(false);
            }

            //Clear the old action list
            _actions.Clear();

            foreach (var action in actions)
            {
                if (_currentRoom > 0)
                {
                    if (action.Name == "NextRoom")
                    {
                        _currentRoom--;
                        _actions.Add(action);
                    }
                }
                else
                {
                    _actions.Add(action);
                }
            }

            LogMessage(methodName, LogSeverityTypes.Standard, "Re-loaded action set for mission \"{0}\" after fleeing.",
                       StealthBot.MissionRunner.ActiveMission.Name);
            _missionProcessorState = MissionProcessorStates.WaitForArrival;
            return(true);
        }
Ejemplo n.º 5
0
        public override void Pulse()
        {
            if (!ShouldPulse())
            {
                return;
            }

            StartPulseProfiling();

            switch (_missionProcessorState)
            {
            case MissionProcessorStates.Idle:
                //Do nothing
                break;

            case MissionProcessorStates.GetMissionRecord:
                //If we finished getting mission record..
                if (GetMissionRecord())
                {
                    //And the current state is waitForArrival
                    if (_missionProcessorState == MissionProcessorStates.WaitForArrival)
                    {
                        //goto the case
                        goto case MissionProcessorStates.WaitForArrival;
                    }
                }
                break;

            case MissionProcessorStates.WaitForArrival:
                //If I'm at the mission bookmark, go ahead and start
                //if (StealthBot.MissionRunner.ActiveMission.IsAtMissionStartBookmark())
                var isAtMissionStartbookmark = StealthBot.MissionCache.IsAtMissionStartBookmark(StealthBot.MissionRunner.ActiveMission);
                if (isAtMissionStartbookmark)
                {
                    _missionProcessorState = MissionProcessorStates.ProcessMission;
                    goto case MissionProcessorStates.ProcessMission;
                }
                break;

            case MissionProcessorStates.Fleeing:
                if (!StealthBot.Defense.IsFleeing)
                {
                    //If we finished reloading mission record..
                    if (ReloadMissionRecord())
                    {
                        //And the current state is waitForArrival
                        if (_missionProcessorState == MissionProcessorStates.WaitForArrival)
                        {
                            //goto the case
                            goto case MissionProcessorStates.WaitForArrival;
                        }
                    }
                }
                break;

            case MissionProcessorStates.ProcessMission:
                if (StealthBot.Defense.IsFleeing)
                {
                    _missionProcessorState = MissionProcessorStates.Fleeing;
                    goto case MissionProcessorStates.Fleeing;
                }

                ProcessMission();
                break;

            case MissionProcessorStates.Finished:
                //Also do nothing
                break;
            }

            EndPulseProfiling();
        }
Ejemplo n.º 6
0
        private void ProcessMission()
        {
            var methodName = "ProcessMission";

            LogTrace(methodName);

            if (_actions.Count > 0)
            {
                if (_lastNpcCount == 0)
                {
                    _lastNpcCount = GetCurrentNpcCount();
                }

                var action       = _actions[0];
                var removeAction = ProcessAction(action);

                if (!removeAction)
                {
                    /* Uncomment this later when I want to experiment with it
                     * if (_actions.Count > 1)
                     * {
                     *      Action firstAction = _actions[0], secondAction = _actions[1];
                     *
                     *      //If I can "look ahead"
                     *      if ((firstAction.Name == "ClearRoom" || firstAction.Name == "Kill") &&
                     *              !Core.StealthBot.Movement.IsMoving)
                     *      {
                     *
                     *      }
                     * }
                     */
                }
                else
                {
                    //If this is the last clear room before a gate, or the last clear room, create a salvage bookmark
                    if (_shouldSalvageRoom && !action.PreventSalvageBookmark)
                    {
                        var shouldCreateBookmark = false;

                        //If this is the last action period, create a salvage bookmark
                        if (_actions.Count == 1)
                        {
                            LogMessage(methodName, LogSeverityTypes.Debug, "This action is the last action. We should create a salvage bookmark.");
                            shouldCreateBookmark = true;
                        }
                        else
                        {
                            //If the next action is 'next room', create a salvage bookmark
                            var nextAction = _actions[1];

                            if (nextAction.Name == "NextRoom")
                            {
                                LogMessage(methodName, LogSeverityTypes.Debug, "The action after this action is a NextRoom. We should create a salvage bookmark.");
                                shouldCreateBookmark = true;
                            }
                        }

                        if (shouldCreateBookmark)
                        {
                            _shouldSalvageRoom = false;
                            StealthBot.Bookmarks.CreateSalvagingBookmark();
                        }
                    }

                    LogMessage(methodName, LogSeverityTypes.Standard, "Action \"{0}\" completed; removing.",
                               action.Name);
                    _actions.RemoveAt(0);
                }

                return;
            }

            _lastNpcCount = 0;

            LogMessage(methodName, LogSeverityTypes.Standard, "No more actions for this mission; finished.");
            _missionProcessorState = MissionProcessorStates.Finished;
        }