-1

これは私の現在のコードです:

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;
    }
}

Trade.OtherOfferedItems (リスト) に多くのものが含まれているため、totalScrap の量が間違っています。Trade.OtherOfferedItems にあるアイテムの数を乗算するため、アイテムの価値であるスクラップの数を掛けても機能しません (したがって、誰かが Defindex 5000 のアイテムとアイテム Defindex 5002 の 1 つのアイテムを含む 3 つのアイテムを追加した場合、 totalScrap を 28 にしたい)

4

1 に答える 1

0

最初の問題は、アイテムを 1 回だけ実行する必要があるのに 3 回ループしていることです。これにより、混乱が生じ、論理エラーが発生する可能性が高くなります。各アイテムタイプのスクラップを計算するために必要な/必要なロジックは明確ではありませんが、把握しやすくするための単純化されたバージョンを次に示します。

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;
于 2014-05-06T12:30:15.333 に答える