如何查找特定项目并计算List <string> </string>中的项目数量

时间:2014-05-06 12:10:51

标签: c# api steam steam-web-api steambot

这是我目前的代码:

public override void OnTradeRemoveItem(Schema.Item schemaItem, Inventory.Item inventoryItem)
{
    foreach (ulong id in Trade.OtherOfferedItems)
    {
        var item = Trade.OtherInventory.GetItem(id);
            Trade.RemoveItemByDefindex(item.Defindex);
    }
}

public override void OnTradeMessage(string message)
{
    switch (message.ToLower())
    {
        case "errors":
            if (OtherSteamInventory.errors.Count > 0)
            {
                Trade.SendMessage("User Errors:");
                foreach (string error in OtherSteamInventory.errors)
                {
                    Trade.SendMessage(" * " + error);
                }
            }

            if (mySteamInventory.errors.Count > 0)
            {
                Trade.SendMessage("Bot Errors:");
                foreach (string error in mySteamInventory.errors)
                {
                    Trade.SendMessage(" * " + error);
                }
            }
            break;

        case "ticket":
            int totalScrap = 0;
            int scrapPart1 = 0;
            int scrapPart2 = 0;
            int scrapPart3 = 0;

            foreach (ulong id in Trade.OtherOfferedItems)
            {
                var items = Trade.OtherOfferedItems;
                var itemType = Trade.OtherInventory.GetItem(id);

                if (itemType.Defindex == 5000)
                {
                    scrapPart1 = items.Count;
                }
                else
                {
                    scrapPart1 = 0;
                }
            }

            foreach (ulong id2 in Trade.OtherOfferedItems)
            {
                var items2 = Trade.OtherOfferedItems;
                var itemType2 = Trade.OtherInventory.GetItem(id2);

                if (itemType2.Defindex == 5001)
                {
                    int Count = 0;
                    Count = items2.Count * 3;
                    scrapPart2 = Count / items2.Count;
                }
                else
                {
                    scrapPart2 = 0;
                }
            }

            foreach (ulong id3 in Trade.OtherOfferedItems)
            {
                Trade.SendMessage("Please pay 3.44 ref");
                var items3 = Trade.OtherOfferedItems;
                var itemType3 = Trade.OtherInventory.GetItem(id3);

                if (itemType3.Defindex == 5002)
                {
                    int Count1 = 0;
                    Count1 = items3.Count * 9;
                    System.Console.WriteLine(Count1);
                    scrapPart3 = Count1 / items3.Count;
                }
                else
                {
                    scrapPart3 = 0;
                }

                totalScrap = scrapPart1 + scrapPart2 + scrapPart3;

                System.Console.WriteLine(scrapPart1);
                System.Console.WriteLine(scrapPart2);
                System.Console.WriteLine(scrapPart3);
                System.Console.WriteLine(totalScrap);
            }

            Trade.RemoveAllItems();
            if (totalScrap == 31)
            {
                int Change = 0;
                Trade.AddItemByDefindex(725);
                Change = 31 - totalScrap;
                while (Change > 0)
                {
                    Trade.AddItemByDefindex(5000);
                }
            }
            else
            {
                Trade.SendMessage("You have only added a total of " + totalScrap + " Scrap, please put up the correct amount and type ticket again");
            }
            break;
    }
}

totalScrap的数量是错误的,因为Trade.OtherOfferedItems(这是一个列表)中有很多东西。并将它乘以物品的价值多少废料不起作用,因为它增加了Trade.OtherOfferedItems中的物品数量(所以如果有人添加了3件物品的Defindex 5000物品和1件物品Defindex 5002 I想要totalScrap是28)

1 个答案:

答案 0 :(得分:0)

您遇到的第一个问题是,当您只需要执行一次时,您将循环浏览项目三次,这会导致更多的混淆和更多引入逻辑错误的机会。您想要/需要计算每种商品类型的废品的逻辑还不清楚,但这里有一个简化版本,可以让您更容易理解:

case "ticket":
    int totalScrap = 0, scrapPart1 = 0, scrapPart2 = 0, scrapPart3 = 0;
    var totalItemCount = Trade.OtherOfferedItems.Count;

    foreach (ulong id in items)
    {
        var itemType = Trade.OtherInventory.GetItem(id);

        //i assume you want each scrap part to be a cumulative total,
        //so we'll add it to what we already have (+=)
        switch(itemType.Defindex)
        {
            case 5000:
                scrapPart1 += totalItemCount;
                break;
            case 5001:
                int Count = 0;
                Count = totalItemCount * 3;
                scrapPart2 += Count / totalItemCount;
                break;
            case 5002:
                int Count1 = 0;
                Count1 = totalItemCount * 9;
                System.Console.WriteLine(Count1);
                scrapPart3 += Count1 / totalItemCount;
                break;
        }
    }

    //now that we are done calculating all the parts,
    //now let's calculate the total
    totalScrap = scrapPart1 + scrapPart2 + scrapPart3;
    System.Console.WriteLine(scrapPart1);
    System.Console.WriteLine(scrapPart2);
    System.Console.WriteLine(scrapPart3);
    System.Console.WriteLine(totalScrap);
    break;