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

◆ MoveCoins()

static long Terraria.UI.ChestUI.MoveCoins ( Item[] pInv,
Item[] cInv,
ContainerTransferContext context )
inlinestatic

Definition at line 1066 of file ChestUI.cs.

1067 {
1068 bool flag = false;
1069 int[] array = new int[4];
1070 List<int> list = new List<int>();
1071 List<int> list2 = new List<int>();
1072 bool flag2 = false;
1073 int[] array2 = new int[40];
1074 bool overFlowing;
1075 long num = Utils.CoinsCount(out overFlowing, pInv);
1076 for (int i = 0; i < cInv.Length; i++)
1077 {
1078 array2[i] = -1;
1079 if (cInv[i].stack < 1 || cInv[i].type < 1)
1080 {
1081 list2.Add(i);
1082 cInv[i] = new Item();
1083 }
1084 if (cInv[i] != null && cInv[i].stack > 0)
1085 {
1086 int num2 = 0;
1087 if (cInv[i].type == 71)
1088 {
1089 num2 = 1;
1090 }
1091 if (cInv[i].type == 72)
1092 {
1093 num2 = 2;
1094 }
1095 if (cInv[i].type == 73)
1096 {
1097 num2 = 3;
1098 }
1099 if (cInv[i].type == 74)
1100 {
1101 num2 = 4;
1102 }
1103 array2[i] = num2 - 1;
1104 if (num2 > 0)
1105 {
1106 array[num2 - 1] += cInv[i].stack;
1107 list2.Add(i);
1108 cInv[i] = new Item();
1109 flag2 = true;
1110 }
1111 }
1112 }
1113 if (!flag2)
1114 {
1115 return 0L;
1116 }
1117 for (int j = 0; j < pInv.Length; j++)
1118 {
1119 if (j != 58 && pInv[j] != null && pInv[j].stack > 0 && !pInv[j].favorited)
1120 {
1121 int num3 = 0;
1122 if (pInv[j].type == 71)
1123 {
1124 num3 = 1;
1125 }
1126 if (pInv[j].type == 72)
1127 {
1128 num3 = 2;
1129 }
1130 if (pInv[j].type == 73)
1131 {
1132 num3 = 3;
1133 }
1134 if (pInv[j].type == 74)
1135 {
1136 num3 = 4;
1137 }
1138 if (num3 > 0)
1139 {
1140 flag = true;
1141 array[num3 - 1] += pInv[j].stack;
1142 list.Add(j);
1143 pInv[j] = new Item();
1144 }
1145 }
1146 }
1147 for (int k = 0; k < 3; k++)
1148 {
1149 while (array[k] >= 100)
1150 {
1151 array[k] -= 100;
1152 array[k + 1]++;
1153 }
1154 }
1155 for (int l = 0; l < 40; l++)
1156 {
1157 if (array2[l] < 0 || cInv[l].type != 0)
1158 {
1159 continue;
1160 }
1161 int num4 = l;
1162 int num5 = array2[l];
1163 if (array[num5] > 0)
1164 {
1165 cInv[num4].SetDefaults(71 + num5);
1166 cInv[num4].stack = array[num5];
1167 if (cInv[num4].stack > cInv[num4].maxStack)
1168 {
1169 cInv[num4].stack = cInv[num4].maxStack;
1170 }
1171 array[num5] -= cInv[num4].stack;
1172 array2[l] = -1;
1173 }
1174 if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1)
1175 {
1176 NetMessage.SendData(32, -1, -1, null, Main.player[Main.myPlayer].chest, num4);
1177 }
1178 list2.Remove(num4);
1179 }
1180 for (int m = 0; m < 40; m++)
1181 {
1182 if (array2[m] < 0 || cInv[m].type != 0)
1183 {
1184 continue;
1185 }
1186 int num6 = m;
1187 int num7 = 3;
1188 while (num7 >= 0)
1189 {
1190 if (array[num7] > 0)
1191 {
1192 cInv[num6].SetDefaults(71 + num7);
1193 cInv[num6].stack = array[num7];
1194 if (cInv[num6].stack > cInv[num6].maxStack)
1195 {
1196 cInv[num6].stack = cInv[num6].maxStack;
1197 }
1198 array[num7] -= cInv[num6].stack;
1199 array2[m] = -1;
1200 break;
1201 }
1202 if (array[num7] == 0)
1203 {
1204 num7--;
1205 }
1206 }
1207 if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1)
1208 {
1209 NetMessage.SendData(32, -1, -1, null, Main.player[Main.myPlayer].chest, num6);
1210 }
1211 list2.Remove(num6);
1212 }
1213 while (list2.Count > 0)
1214 {
1215 int num8 = list2[0];
1216 int num9 = 3;
1217 while (num9 >= 0)
1218 {
1219 if (array[num9] > 0)
1220 {
1221 cInv[num8].SetDefaults(71 + num9);
1222 cInv[num8].stack = array[num9];
1223 if (cInv[num8].stack > cInv[num8].maxStack)
1224 {
1225 cInv[num8].stack = cInv[num8].maxStack;
1226 }
1227 array[num9] -= cInv[num8].stack;
1228 break;
1229 }
1230 if (array[num9] == 0)
1231 {
1232 num9--;
1233 }
1234 }
1235 if (Main.netMode == 1 && Main.player[Main.myPlayer].chest > -1)
1236 {
1237 NetMessage.SendData(32, -1, -1, null, Main.player[Main.myPlayer].chest, list2[0]);
1238 }
1239 list2.RemoveAt(0);
1240 }
1241 int num10 = 3;
1242 while (num10 >= 0 && list.Count > 0)
1243 {
1244 int num11 = list[0];
1245 if (array[num10] > 0)
1246 {
1247 pInv[num11].SetDefaults(71 + num10);
1248 pInv[num11].stack = array[num10];
1249 if (pInv[num11].stack > pInv[num11].maxStack)
1250 {
1251 pInv[num11].stack = pInv[num11].maxStack;
1252 }
1253 array[num10] -= pInv[num11].stack;
1254 flag = false;
1255 list.RemoveAt(0);
1256 }
1257 if (array[num10] == 0)
1258 {
1259 num10--;
1260 }
1261 }
1262 if (flag)
1263 {
1265 }
1266 bool overFlowing2;
1267 long num12 = Utils.CoinsCount(out overFlowing2, pInv);
1269 {
1270 return 0L;
1271 }
1272 return num - num12;
1273 }
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
static void PlaySound(int type, Vector2 position, int style=1)

References System.Collections.Generic.Dictionary< TKey, TValue >.Add(), Terraria.Utils.CoinsCount(), System.Collections.Generic.Dictionary< TKey, TValue >.Count, Terraria.Item.maxStack, Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), System.Collections.Generic.Dictionary< TKey, TValue >.Remove(), Terraria.NetMessage.SendData(), Terraria.Item.SetDefaults(), and Terraria.Item.stack.

Referenced by Terraria.UI.ChestUI.DepositAll(), and Terraria.UI.ChestUI.QuickStack().