Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ QuickStack()

static void Terraria.UI.ChestUI.QuickStack ( ContainerTransferContext context,
bool voidStack = false )
inlinestatic

Definition at line 686 of file ChestUI.cs.

687 {
688 Player player = Main.player[Main.myPlayer];
689 Item[] array = player.inventory;
690 if (voidStack)
691 {
692 array = player.bank4.item;
693 }
694 Vector2 center = player.Center;
697 if (!voidStack && player.chest == -5)
698 {
699 long coinsMoved = MoveCoins(array, player.bank4.item, context);
701 {
702 Chest.VisualizeChestTransfer_CoinsBatch(center, containerWorldPosition, coinsMoved);
703 }
704 }
705 else if (player.chest == -4)
706 {
707 long coinsMoved2 = MoveCoins(array, player.bank3.item, context);
709 {
710 Chest.VisualizeChestTransfer_CoinsBatch(center, containerWorldPosition, coinsMoved2);
711 }
712 }
713 else if (player.chest == -3)
714 {
715 long coinsMoved3 = MoveCoins(array, player.bank2.item, context);
717 {
718 Chest.VisualizeChestTransfer_CoinsBatch(center, containerWorldPosition, coinsMoved3);
719 }
720 }
721 else if (player.chest == -2)
722 {
723 long coinsMoved4 = MoveCoins(array, player.bank.item, context);
725 {
726 Chest.VisualizeChestTransfer_CoinsBatch(center, containerWorldPosition, coinsMoved4);
727 }
728 }
729 Item[] item = player.bank.item;
730 if (player.chest > -1)
731 {
732 item = Main.chest[player.chest].item;
733 }
734 else if (player.chest == -2)
735 {
736 item = player.bank.item;
737 }
738 else if (player.chest == -3)
739 {
740 item = player.bank2.item;
741 }
742 else if (player.chest == -4)
743 {
744 item = player.bank3.item;
745 }
746 else if (!voidStack && player.chest == -5)
747 {
748 item = player.bank4.item;
749 }
750 List<int> list = new List<int>();
751 List<int> list2 = new List<int>();
752 List<int> list3 = new List<int>();
754 List<int> list4 = new List<int>();
755 bool[] array2 = new bool[item.Length];
756 for (int i = 0; i < 40; i++)
757 {
758 if (item[i].type > 0 && item[i].stack > 0 && (item[i].type < 71 || item[i].type > 74))
759 {
760 list2.Add(i);
761 list.Add(item[i].netID);
762 }
763 if (item[i].type == 0 || item[i].stack <= 0)
764 {
765 list3.Add(i);
766 }
767 }
768 int num = 50;
769 int num2 = 10;
770 if (player.chest <= -2)
771 {
772 num += 4;
773 }
774 if (voidStack)
775 {
776 num2 = 0;
777 num = 40;
778 }
779 for (int j = num2; j < num; j++)
780 {
781 if (list.Contains(array[j].netID) && !array[j].favorited)
782 {
783 dictionary.Add(j, array[j].netID);
784 }
785 }
786 for (int k = 0; k < list2.Count; k++)
787 {
788 int num3 = list2[k];
789 int netID = item[num3].netID;
790 foreach (KeyValuePair<int, int> item2 in dictionary)
791 {
792 if (item2.Value == netID && array[item2.Key].netID == netID)
793 {
794 int num4 = array[item2.Key].stack;
795 int num5 = item[num3].maxStack - item[num3].stack;
796 if (num5 == 0)
797 {
798 break;
799 }
800 if (num4 > num5)
801 {
802 num4 = num5;
803 }
806 {
807 Chest.VisualizeChestTransfer(center, containerWorldPosition, item[num3], num4);
808 }
809 item[num3].stack += num4;
810 array[item2.Key].stack -= num4;
811 if (array[item2.Key].stack == 0)
812 {
813 array[item2.Key].SetDefaults();
814 }
815 array2[num3] = true;
816 }
817 }
818 }
819 foreach (KeyValuePair<int, int> item3 in dictionary)
820 {
821 if (array[item3.Key].stack == 0)
822 {
823 list4.Add(item3.Key);
824 }
825 }
826 foreach (int item4 in list4)
827 {
828 dictionary.Remove(item4);
829 }
830 for (int l = 0; l < list3.Count; l++)
831 {
832 int num6 = list3[l];
833 bool flag = true;
834 int num7 = item[num6].netID;
835 if (num7 >= 71 && num7 <= 74)
836 {
837 continue;
838 }
839 foreach (KeyValuePair<int, int> item5 in dictionary)
840 {
841 if ((item5.Value != num7 || array[item5.Key].netID != num7) && (!flag || array[item5.Key].stack <= 0))
842 {
843 continue;
844 }
846 if (flag)
847 {
848 num7 = item5.Value;
849 item[num6] = array[item5.Key];
850 array[item5.Key] = new Item();
852 {
853 Chest.VisualizeChestTransfer(center, containerWorldPosition, item[num6], item[num6].stack);
854 }
855 }
856 else
857 {
858 int num8 = array[item5.Key].stack;
859 int num9 = item[num6].maxStack - item[num6].stack;
860 if (num9 == 0)
861 {
862 break;
863 }
864 if (num8 > num9)
865 {
866 num8 = num9;
867 }
869 {
870 Chest.VisualizeChestTransfer(center, containerWorldPosition, item[num6], num8);
871 }
872 item[num6].stack += num8;
873 array[item5.Key].stack -= num8;
874 if (array[item5.Key].stack == 0)
875 {
876 array[item5.Key] = new Item();
877 }
878 }
879 array2[num6] = true;
880 flag = false;
881 }
882 }
883 if (Main.netMode == 1 && player.chest >= 0)
884 {
885 for (int m = 0; m < array2.Length; m++)
886 {
887 NetMessage.SendData(32, -1, -1, null, player.chest, m);
888 }
889 }
890 list.Clear();
891 list2.Clear();
892 list3.Clear();
893 dictionary.Clear();
894 list4.Clear();
895 }
void Add(TKey key, TValue value)
static void PlaySound(int type, Vector2 position, int style=1)
static long MoveCoins(Item[] pInv, Item[] cInv, ContainerTransferContext context)
Definition ChestUI.cs:1066

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), Terraria.Player.bank, Terraria.Player.bank2, Terraria.Player.bank3, Terraria.Player.bank4, Terraria.DataStructures.ContainerTransferContext.CanVisualizeTransfers, Terraria.Entity.Center, Terraria.Main.chest, Terraria.Player.chest, System.Collections.Generic.Dictionary< TKey, TValue >.Clear(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, Terraria.DataStructures.ContainerTransferContext.GetContainerWorldPosition(), Terraria.Player.inventory, Terraria.Chest.item, Terraria.UI.ChestUI.MoveCoins(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.NetMessage.SendData(), Terraria.Chest.VisualizeChestTransfer(), and Terraria.Chest.VisualizeChestTransfer_CoinsBatch().

Referenced by Terraria.UI.ChestUI.DrawButton(), and Terraria.Player.QuickStackAllChests().