Ejemplo n.º 1
0
        internal async Task OnNewItemsNotification()
        {
            if (NowFarming)
            {
                await FarmingInitializationSemaphore.WaitAsync().ConfigureAwait(false);

                try {
                    if (NowFarming)
                    {
                        if (FarmingResetSemaphore.CurrentCount == 0)
                        {
                            FarmingResetSemaphore.Release();
                        }

                        return;
                    }
                } finally {
                    FarmingInitializationSemaphore.Release();
                }
            }

            // If we're not farming, and we got new items, it's likely to be a booster pack or likewise
            // In this case, perform a loot if user wants to do so
            await Bot.LootIfNeeded().ConfigureAwait(false);
        }
Ejemplo n.º 2
0
        internal async Task OnNewItemsNotification()
        {
            if (NowFarming)
            {
                FarmResetEvent.Set();
                return;
            }

            // If we're not farming, and we got new items, it's likely to be a booster pack or likewise
            // In this case, perform a loot if user wants to do so
            await Bot.LootIfNeeded().ConfigureAwait(false);
        }
Ejemplo n.º 3
0
        private async Task ParseActiveTrades()
        {
            if (string.IsNullOrEmpty(Bot.BotConfig.SteamApiKey))
            {
                return;
            }

            HashSet <Steam.TradeOffer> tradeOffers = Bot.ArchiWebHandler.GetActiveTradeOffers();

            if ((tradeOffers == null) || (tradeOffers.Count == 0))
            {
                return;
            }

            if (tradeOffers.RemoveWhere(tradeoffer => IgnoredTrades.Contains(tradeoffer.TradeOfferID)) > 0)
            {
                if (tradeOffers.Count == 0)
                {
                    return;
                }
            }

            ParseTradeResult[] results = await Task.WhenAll(tradeOffers.Select(ParseTrade)).ConfigureAwait(false);

            if (Bot.HasMobileAuthenticator)
            {
                HashSet <ulong> acceptedWithItemLoseTradeIDs = new HashSet <ulong>(results.Where(result => (result != null) && (result.Result == ParseTradeResult.EResult.AcceptedWithItemLose)).Select(result => result.TradeID));
                if (acceptedWithItemLoseTradeIDs.Count > 0)
                {
                    await Task.Delay(1000).ConfigureAwait(false);                     // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment

                    await Bot.AcceptConfirmations(true, Steam.ConfirmationDetails.EType.Trade, 0, acceptedWithItemLoseTradeIDs).ConfigureAwait(false);
                }
            }

            if (results.Any(result => (result != null) && ((result.Result == ParseTradeResult.EResult.AcceptedWithItemLose) || (result.Result == ParseTradeResult.EResult.AcceptedWithoutItemLose))))
            {
                // If we finished a trade, perform a loot if user wants to do so
                await Bot.LootIfNeeded().ConfigureAwait(false);
            }
        }