Beispiel #1
0
        private async Task <UseItemResult> UseItem(string itemId, string target = null)
        {
            var url = "/items/use/" + itemId;

            if (target != null)
            {
                url += "?target=" + target;
            }

            var response = await Post(url);

            var result = response.StartsWith("No", StringComparison.Ordinal) || response.Contains("Invalid item GUID") ? null : JsonConvert.DeserializeObject <UseItemResult>(response);

            if (result == null)
            {
                result = UseItemResult.NullObject;
            }
            result.Messages = CthulhuStateProcessor.ProcessMessages(result.Messages).ToList();

            if (result.BonusItems.Any())
            {
                _state.Items.AddRange(result.BonusItems);
            }

            result.LogMessages();

            return(result);
        }
Beispiel #2
0
        public async Task <PollResponse> PostForPoints()
        {
            for (int i = 0; i < 3; i++)
            {
                var result = await Post("/points");

                var response = JsonConvert.DeserializeObject <PollResponse>(result);
                if (response == null)
                {
                    Log.Write("Got empty reponse from /points. Trying again (1/3)");
                    await Task.Delay(100);

                    continue;
                }

                response.Messages = CthulhuStateProcessor.ProcessMessages(response.Messages).ToList();

                response.LogMessages();

                if (response.Item != null)
                {
                    _state.Items.AddRange(response.ExtractItems());
                }

                return(response);
            }

            Log.Write("Could not load points");
            throw new Exception("Could not load points");
        }
Beispiel #3
0
        public async Task Tick()
        {
            _state.LastMessages.Clear();
            // DONT TOUCH ANY FORM CONTROLS IN HERE
            try
            {
                if (_strategy.CanPollPoints(_state))
                {
                    if (!ReadOnlyMode && _state.PollingEnabled)
                    {
                        var response = await PostForPoints();

                        _state.Points       = response.Points;
                        _state.LastMessages = response.Messages;
                        CthulhuStateProcessor.ProcessState(_state);
                    }


                    _state.Effects = await GetEffects();

                    _state.Leaderboard = await GetLeaderboard();
                }
                else
                {
                    _state.LastMessages = new List <string>()
                    {
                        "Don't want to poll right now."
                    };
                }

                _state.LastTick = DateTime.UtcNow;
            }
            catch (Exception e)
            {
                e.Log("Global Catch");
            }

            if (_state.NextMove == null || _state.NextMove.Mode == ItemMode.Automatic)
            {
                _state.NextAutomaticMove = _strategy.GetMove(_state);
            }

            if (_rules.CanUseItem() && _state.NextMove != null && !ReadOnlyMode)
            {
                try
                {
                    var nextMove = _state.NextMove;

                    var useResult = await UseItem(nextMove.Item, nextMove.Target);

                    _state.LastMessages.Insert(0, $"{nextMove.Mode}ly used {nextMove.Item.Name} on '{nextMove.Target}'");
                    _state.LastMessages.InsertRange(0, useResult.Messages);

                    if (nextMove.Mode == ItemMode.Manual)
                    {
                        _state.MoveQueue.Pop();
                    }
                    else
                    {
                        _state.NextAutomaticMove = null;
                    }
                }
                catch (AggregateException e)
                {
                    e.Log("Using Item");
                    _state.NextAutomaticMove = null;
                }
            }

            TooManyVotesStateProcessor.ProcessState(_state);
            //ExpiredItemRemover.ProcessState(_state);
        }