Terraria.UI.ChestUI.MoveCoins C# (CSharp) Method

MoveCoins() public static method

public static MoveCoins ( Item pInv, Item cInv ) : void
pInv Terraria.Item
cInv Terraria.Item
return void
        public static void MoveCoins(Item[] pInv, Item[] cInv)
        {
            int[] numArray1 = new int[4];
            List<int> list1 = new List<int>();
            List<int> list2 = new List<int>();
            bool flag = false;
            int[] numArray2 = new int[40];
            for (int index = 0; index < cInv.Length; ++index)
            {
                numArray2[index] = -1;
                if (cInv[index].stack < 1 || cInv[index].itemId < 1)
                {
                    list2.Add(index);
                    cInv[index] = new Item();
                }
                if (cInv[index] != null && cInv[index].stack > 0)
                {
                    int num = 0;
                    if (cInv[index].itemId == 71)
                        num = 1;
                    if (cInv[index].itemId == 72)
                        num = 2;
                    if (cInv[index].itemId == 73)
                        num = 3;
                    if (cInv[index].itemId == 74)
                        num = 4;
                    numArray2[index] = num - 1;
                    if (num > 0)
                    {
                        numArray1[num - 1] += cInv[index].stack;
                        list2.Add(index);
                        cInv[index] = new Item();
                        flag = true;
                    }
                }
            }
            if (!flag)
                return;
            Main.PlaySound(7, -1, -1, 1);
            for (int index = 0; index < pInv.Length; ++index)
            {
                if (index != 58 && pInv[index] != null && pInv[index].stack > 0)
                {
                    int num = 0;
                    if (pInv[index].itemId == 71)
                        num = 1;
                    if (pInv[index].itemId == 72)
                        num = 2;
                    if (pInv[index].itemId == 73)
                        num = 3;
                    if (pInv[index].itemId == 74)
                        num = 4;
                    if (num > 0)
                    {
                        numArray1[num - 1] += pInv[index].stack;
                        list1.Add(index);
                        pInv[index] = new Item();
                    }
                }
            }
            for (int index = 0; index < 3; ++index)
            {
                while (numArray1[index] >= 100)
                {
                    numArray1[index] -= 100;
                    ++numArray1[index + 1];
                }
            }
            for (int index1 = 0; index1 < 40; ++index1)
            {
                if (numArray2[index1] >= 0 && cInv[index1].itemId == 0)
                {
                    int index2 = index1;
                    int index3 = numArray2[index1];
                    if (numArray1[index3] > 0)
                    {
                        cInv[index2].SetDefaults(71 + index3, false);
                        cInv[index2].stack = numArray1[index3];
                        if (cInv[index2].stack > cInv[index2].maxStack)
                            cInv[index2].stack = cInv[index2].maxStack;
                        numArray1[index3] -= cInv[index2].stack;
                        numArray2[index1] = -1;
                    }
                    if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1)
                        NetMessage.SendData(32, -1, -1, "", Main.player[Main.myPlayer].chest, (float)index2, 0.0f, 0.0f, 0, 0, 0);
                    list2.Remove(index2);
                }
            }
            for (int index1 = 0; index1 < 40; ++index1)
            {
                if (numArray2[index1] >= 0 && cInv[index1].itemId == 0)
                {
                    int index2 = index1;
                    int index3 = 3;
                    while (index3 >= 0)
                    {
                        if (numArray1[index3] > 0)
                        {
                            cInv[index2].SetDefaults(71 + index3, false);
                            cInv[index2].stack = numArray1[index3];
                            if (cInv[index2].stack > cInv[index2].maxStack)
                                cInv[index2].stack = cInv[index2].maxStack;
                            numArray1[index3] -= cInv[index2].stack;
                            numArray2[index1] = -1;
                            break;
                        }
                        if (numArray1[index3] == 0)
                            --index3;
                    }
                    if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1)
                        NetMessage.SendData(32, -1, -1, "", Main.player[Main.myPlayer].chest, (float)index2, 0.0f, 0.0f, 0, 0, 0);
                    list2.Remove(index2);
                }
            }
            while (list2.Count > 0)
            {
                int index1 = list2[0];
                int index2 = 3;
                while (index2 >= 0)
                {
                    if (numArray1[index2] > 0)
                    {
                        cInv[index1].SetDefaults(71 + index2, false);
                        cInv[index1].stack = numArray1[index2];
                        if (cInv[index1].stack > cInv[index1].maxStack)
                            cInv[index1].stack = cInv[index1].maxStack;
                        numArray1[index2] -= cInv[index1].stack;
                        break;
                    }
                    if (numArray1[index2] == 0)
                        --index2;
                }
                if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1)
                    NetMessage.SendData(32, -1, -1, "", Main.player[Main.myPlayer].chest, (float)list2[0], 0.0f, 0.0f, 0, 0, 0);
                list2.RemoveAt(0);
            }
            int index4 = 3;
            while (index4 >= 0 && list1.Count > 0)
            {
                int index1 = list1[0];
                if (numArray1[index4] > 0)
                {
                    pInv[index1].SetDefaults(71 + index4, false);
                    pInv[index1].stack = numArray1[index4];
                    if (pInv[index1].stack > pInv[index1].maxStack)
                        pInv[index1].stack = pInv[index1].maxStack;
                    numArray1[index4] -= pInv[index1].stack;
                }
                if (numArray1[index4] == 0)
                    --index4;
                list1.RemoveAt(0);
            }
        }

Usage Example

Ejemplo n.º 1
0
        public static void QuickStack()
        {
            Player player = Main.player[Main.myPlayer];

            if (player.chest == -3)
            {
                ChestUI.MoveCoins(player.inventory, player.bank2.item);
            }
            else if (player.chest == -2)
            {
                ChestUI.MoveCoins(player.inventory, player.bank.item);
            }
            Item[] objArray1 = player.inventory;
            Item[] objArray2 = player.bank.item;
            if (player.chest > -1)
            {
                objArray2 = Main.chest[player.chest].item;
            }
            else if (player.chest == -2)
            {
                objArray2 = player.bank.item;
            }
            else if (player.chest == -3)
            {
                objArray2 = player.bank2.item;
            }
            List <int>            list1      = new List <int>();
            List <int>            list2      = new List <int>();
            List <int>            list3      = new List <int>();
            Dictionary <int, int> dictionary = new Dictionary <int, int>();
            List <int>            list4      = new List <int>();

            bool[] flagArray = new bool[objArray2.Length];
            for (int index = 0; index < 40; ++index)
            {
                if (objArray2[index].itemId > 0 && objArray2[index].stack > 0 && objArray2[index].maxStack > 1 && (objArray2[index].itemId < 71 || objArray2[index].itemId > 74))
                {
                    list2.Add(index);
                    list1.Add(objArray2[index].netID);
                }
                if (objArray2[index].itemId == 0 || objArray2[index].stack <= 0)
                {
                    list3.Add(index);
                }
            }
            int num1 = 50;

            if (player.chest <= -2)
            {
                num1 += 4;
            }
            for (int key = 0; key < num1; ++key)
            {
                if (list1.Contains(objArray1[key].netID) && !objArray1[key].favorited)
                {
                    dictionary.Add(key, objArray1[key].netID);
                }
            }
            for (int index1 = 0; index1 < list2.Count; ++index1)
            {
                int index2 = list2[index1];
                int num2   = objArray2[index2].netID;
                foreach (KeyValuePair <int, int> keyValuePair in dictionary)
                {
                    if (keyValuePair.Value == num2 && objArray1[keyValuePair.Key].netID == num2)
                    {
                        int num3 = objArray1[keyValuePair.Key].stack;
                        int num4 = objArray2[index2].maxStack - objArray2[index2].stack;
                        if (num4 != 0)
                        {
                            if (num3 > num4)
                            {
                                num3 = num4;
                            }
                            Main.PlaySound(7, -1, -1, 1);
                            objArray2[index2].stack           += num3;
                            objArray1[keyValuePair.Key].stack -= num3;
                            if (objArray1[keyValuePair.Key].stack == 0)
                            {
                                objArray1[keyValuePair.Key].SetDefaults(0, false);
                            }
                            flagArray[index2] = true;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            foreach (KeyValuePair <int, int> keyValuePair in dictionary)
            {
                if (objArray1[keyValuePair.Key].stack == 0)
                {
                    list4.Add(keyValuePair.Key);
                }
            }
            foreach (int key in list4)
            {
                dictionary.Remove(key);
            }
            for (int index1 = 0; index1 < list3.Count; ++index1)
            {
                int  index2 = list3[index1];
                bool flag   = true;
                int  num2   = objArray2[index2].netID;
                foreach (KeyValuePair <int, int> keyValuePair in dictionary)
                {
                    if (keyValuePair.Value == num2 && objArray1[keyValuePair.Key].netID == num2 || flag && objArray1[keyValuePair.Key].stack > 0)
                    {
                        Main.PlaySound(7, -1, -1, 1);
                        if (flag)
                        {
                            num2 = keyValuePair.Value;
                            objArray2[index2]           = objArray1[keyValuePair.Key];
                            objArray1[keyValuePair.Key] = new Item();
                        }
                        else
                        {
                            int num3 = objArray1[keyValuePair.Key].stack;
                            int num4 = objArray2[index2].maxStack - objArray2[index2].stack;
                            if (num4 != 0)
                            {
                                if (num3 > num4)
                                {
                                    num3 = num4;
                                }
                                objArray2[index2].stack           += num3;
                                objArray1[keyValuePair.Key].stack -= num3;
                                if (objArray1[keyValuePair.Key].stack == 0)
                                {
                                    objArray1[keyValuePair.Key] = new Item();
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        flagArray[index2] = true;
                        flag = false;
                    }
                }
            }
            if (Main.netMode == 1 && player.chest >= 0)
            {
                for (int index = 0; index < flagArray.Length; ++index)
                {
                    NetMessage.SendData(32, -1, -1, "", player.chest, (float)index, 0.0f, 0.0f, 0, 0, 0);
                }
            }
            list1.Clear();
            list2.Clear();
            list3.Clear();
            dictionary.Clear();
            list4.Clear();
        }
All Usage Examples Of Terraria.UI.ChestUI::MoveCoins