Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ItemSorting.cs
Go to the documentation of this file.
1using System;
3using System.Linq;
4using Terraria.ID;
5
6namespace Terraria.UI;
7
8public class ItemSorting
9{
10 private class ItemSortingLayer
11 {
12 public readonly string Name;
13
15
17 {
18 Name = name;
20 }
21
23 {
24 if (_layerWhiteLists.TryGetValue(Name, out var list))
25 {
26 indexesSortable = indexesSortable.Where((int i) => list.Contains(inv[i].netID)).ToList();
27 }
28 }
29
30 public override string ToString()
31 {
32 return Name;
33 }
34 }
35
36 private class ItemSortingLayers
37 {
39 {
40 List<int> indexesSortable38 = itemsToSort.Where((int i) => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].melee && inv[i].pick < 1 && inv[i].hammer < 1 && inv[i].axe < 1).ToList();
41 layer.Validate(ref indexesSortable38, inv);
42 foreach (int item in indexesSortable38)
43 {
45 }
46 indexesSortable38.Sort(delegate(int x, int y)
47 {
48 int num33 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
49 if (num33 == 0)
50 {
51 num33 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
52 }
53 if (num33 == 0)
54 {
55 num33 = x.CompareTo(y);
56 }
57 return num33;
58 });
59 return indexesSortable38;
60 });
61
63 {
64 List<int> indexesSortable37 = itemsToSort.Where((int i) => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].ranged).ToList();
65 layer.Validate(ref indexesSortable37, inv);
66 foreach (int item2 in indexesSortable37)
67 {
69 }
70 indexesSortable37.Sort(delegate(int x, int y)
71 {
72 int num32 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
73 if (num32 == 0)
74 {
75 num32 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
76 }
77 if (num32 == 0)
78 {
79 num32 = x.CompareTo(y);
80 }
81 return num32;
82 });
83 return indexesSortable37;
84 });
85
87 {
88 List<int> indexesSortable36 = itemsToSort.Where((int i) => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].magic).ToList();
89 layer.Validate(ref indexesSortable36, inv);
90 foreach (int item3 in indexesSortable36)
91 {
93 }
94 indexesSortable36.Sort(delegate(int x, int y)
95 {
96 int num31 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
97 if (num31 == 0)
98 {
99 num31 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
100 }
101 if (num31 == 0)
102 {
103 num31 = x.CompareTo(y);
104 }
105 return num31;
106 });
107 return indexesSortable36;
108 });
109
111 {
112 List<int> indexesSortable35 = itemsToSort.Where((int i) => inv[i].maxStack == 1 && inv[i].damage > 0 && inv[i].summon).ToList();
113 layer.Validate(ref indexesSortable35, inv);
114 foreach (int item4 in indexesSortable35)
115 {
117 }
118 indexesSortable35.Sort(delegate(int x, int y)
119 {
120 int num30 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
121 if (num30 == 0)
122 {
123 num30 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
124 }
125 if (num30 == 0)
126 {
127 num30 = x.CompareTo(y);
128 }
129 return num30;
130 });
131 return indexesSortable35;
132 });
133
135 {
136 List<int> indexesSortable34 = itemsToSort.Where((int i) => inv[i].damage > 0 && inv[i].ammo == 0 && inv[i].pick == 0 && inv[i].axe == 0 && inv[i].hammer == 0).ToList();
137 layer.Validate(ref indexesSortable34, inv);
138 foreach (int item5 in indexesSortable34)
139 {
141 }
142 indexesSortable34.Sort(delegate(int x, int y)
143 {
144 int num29 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
145 if (num29 == 0)
146 {
147 num29 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
148 }
149 if (num29 == 0)
150 {
151 num29 = x.CompareTo(y);
152 }
153 return num29;
154 });
155 return indexesSortable34;
156 });
157
159 {
160 List<int> indexesSortable33 = itemsToSort.Where((int i) => inv[i].ammo > 0 && inv[i].damage > 0).ToList();
161 layer.Validate(ref indexesSortable33, inv);
162 foreach (int item6 in indexesSortable33)
163 {
165 }
166 indexesSortable33.Sort(delegate(int x, int y)
167 {
168 int num28 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
169 if (num28 == 0)
170 {
171 num28 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
172 }
173 if (num28 == 0)
174 {
175 num28 = x.CompareTo(y);
176 }
177 return num28;
178 });
179 return indexesSortable33;
180 });
181
183 {
184 List<int> indexesSortable32 = itemsToSort.Where((int i) => inv[i].pick > 0 && inv[i].axe > 0).ToList();
185 layer.Validate(ref indexesSortable32, inv);
186 foreach (int item7 in indexesSortable32)
187 {
189 }
190 indexesSortable32.Sort((int x, int y) => inv[x].pick.CompareTo(inv[y].pick));
191 return indexesSortable32;
192 });
193
195 {
196 List<int> indexesSortable31 = itemsToSort.Where((int i) => inv[i].hammer > 0 && inv[i].axe > 0).ToList();
197 layer.Validate(ref indexesSortable31, inv);
198 foreach (int item8 in indexesSortable31)
199 {
201 }
202 indexesSortable31.Sort((int x, int y) => inv[x].axe.CompareTo(inv[y].axe));
203 return indexesSortable31;
204 });
205
207 {
208 List<int> indexesSortable30 = itemsToSort.Where((int i) => inv[i].pick > 0).ToList();
209 layer.Validate(ref indexesSortable30, inv);
210 foreach (int item9 in indexesSortable30)
211 {
213 }
214 indexesSortable30.Sort((int x, int y) => inv[x].pick.CompareTo(inv[y].pick));
215 return indexesSortable30;
216 });
217
219 {
220 List<int> indexesSortable29 = itemsToSort.Where((int i) => inv[i].pick > 0).ToList();
221 layer.Validate(ref indexesSortable29, inv);
222 foreach (int item10 in indexesSortable29)
223 {
225 }
226 indexesSortable29.Sort((int x, int y) => inv[x].axe.CompareTo(inv[y].axe));
227 return indexesSortable29;
228 });
229
231 {
232 List<int> indexesSortable28 = itemsToSort.Where((int i) => inv[i].hammer > 0).ToList();
233 layer.Validate(ref indexesSortable28, inv);
234 foreach (int item11 in indexesSortable28)
235 {
237 }
238 indexesSortable28.Sort((int x, int y) => inv[x].hammer.CompareTo(inv[y].hammer));
239 return indexesSortable28;
240 });
241
243 {
244 List<int> indexesSortable27 = itemsToSort.Where((int i) => inv[i].netID > 0 && ItemID.Sets.SortingPriorityTerraforming[inv[i].netID] > -1).ToList();
245 layer.Validate(ref indexesSortable27, inv);
246 foreach (int item12 in indexesSortable27)
247 {
249 }
250 indexesSortable27.Sort(delegate(int x, int y)
251 {
253 if (num27 == 0)
254 {
255 num27 = inv[y].stack.CompareTo(inv[x].stack);
256 }
257 if (num27 == 0)
258 {
259 num27 = x.CompareTo(y);
260 }
261 return num27;
262 });
263 return indexesSortable27;
264 });
265
267 {
268 List<int> indexesSortable26 = itemsToSort.Where((int i) => inv[i].ammo > 0).ToList();
269 layer.Validate(ref indexesSortable26, inv);
270 foreach (int item13 in indexesSortable26)
271 {
273 }
274 indexesSortable26.Sort(delegate(int x, int y)
275 {
276 int num26 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
277 if (num26 == 0)
278 {
279 num26 = inv[y].OriginalDamage.CompareTo(inv[x].OriginalDamage);
280 }
281 if (num26 == 0)
282 {
283 num26 = x.CompareTo(y);
284 }
285 return num26;
286 });
287 return indexesSortable26;
288 });
289
291 {
292 List<int> indexesSortable25 = itemsToSort.Where((int i) => (inv[i].bodySlot >= 0 || inv[i].headSlot >= 0 || inv[i].legSlot >= 0) && !inv[i].vanity).ToList();
293 layer.Validate(ref indexesSortable25, inv);
294 foreach (int item14 in indexesSortable25)
295 {
297 }
298 indexesSortable25.Sort(delegate(int x, int y)
299 {
300 int num25 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
301 if (num25 == 0)
302 {
303 num25 = inv[y].OriginalDefense.CompareTo(inv[x].OriginalDefense);
304 }
305 if (num25 == 0)
306 {
307 num25 = inv[x].netID.CompareTo(inv[y].netID);
308 }
309 return num25;
310 });
311 return indexesSortable25;
312 });
313
315 {
316 List<int> indexesSortable24 = itemsToSort.Where((int i) => (inv[i].bodySlot >= 0 || inv[i].headSlot >= 0 || inv[i].legSlot >= 0) && inv[i].vanity).ToList();
317 layer.Validate(ref indexesSortable24, inv);
318 foreach (int item15 in indexesSortable24)
319 {
321 }
322 indexesSortable24.Sort(delegate(int x, int y)
323 {
324 int num24 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
325 if (num24 == 0)
326 {
327 num24 = inv[x].netID.CompareTo(inv[y].netID);
328 }
329 return num24;
330 });
331 return indexesSortable24;
332 });
333
335 {
336 List<int> indexesSortable23 = itemsToSort.Where((int i) => inv[i].accessory).ToList();
337 layer.Validate(ref indexesSortable23, inv);
338 foreach (int item16 in indexesSortable23)
339 {
341 }
342 indexesSortable23.Sort(delegate(int x, int y)
343 {
344 int num23 = inv[x].vanity.CompareTo(inv[y].vanity);
345 if (num23 == 0)
346 {
347 num23 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
348 }
349 if (num23 == 0)
350 {
351 num23 = inv[y].OriginalDefense.CompareTo(inv[x].OriginalDefense);
352 }
353 if (num23 == 0)
354 {
355 num23 = inv[x].netID.CompareTo(inv[y].netID);
356 }
357 return num23;
358 });
359 return indexesSortable23;
360 });
361
363 {
364 List<int> indexesSortable22 = itemsToSort.Where((int i) => Main.projHook[inv[i].shoot]).ToList();
365 layer.Validate(ref indexesSortable22, inv);
366 foreach (int item17 in indexesSortable22)
367 {
369 }
370 indexesSortable22.Sort(delegate(int x, int y)
371 {
372 int num22 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
373 if (num22 == 0)
374 {
375 num22 = inv[x].netID.CompareTo(inv[y].netID);
376 }
377 if (num22 == 0)
378 {
379 num22 = x.CompareTo(y);
380 }
381 return num22;
382 });
383 return indexesSortable22;
384 });
385
387 {
388 List<int> indexesSortable21 = itemsToSort.Where((int i) => inv[i].mountType != -1 && !MountID.Sets.Cart[inv[i].mountType]).ToList();
389 layer.Validate(ref indexesSortable21, inv);
390 foreach (int item18 in indexesSortable21)
391 {
393 }
394 indexesSortable21.Sort(delegate(int x, int y)
395 {
396 int num21 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
397 if (num21 == 0)
398 {
399 num21 = inv[x].netID.CompareTo(inv[y].netID);
400 }
401 if (num21 == 0)
402 {
403 num21 = x.CompareTo(y);
404 }
405 return num21;
406 });
407 return indexesSortable21;
408 });
409
411 {
412 List<int> indexesSortable20 = itemsToSort.Where((int i) => inv[i].mountType != -1 && MountID.Sets.Cart[inv[i].mountType]).ToList();
413 layer.Validate(ref indexesSortable20, inv);
414 foreach (int item19 in indexesSortable20)
415 {
417 }
418 indexesSortable20.Sort(delegate(int x, int y)
419 {
420 int num20 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
421 if (num20 == 0)
422 {
423 num20 = inv[x].netID.CompareTo(inv[y].netID);
424 }
425 if (num20 == 0)
426 {
427 num20 = x.CompareTo(y);
428 }
429 return num20;
430 });
431 return indexesSortable20;
432 });
433
435 {
436 List<int> indexesSortable19 = itemsToSort.Where((int i) => inv[i].buffType > 0 && Main.lightPet[inv[i].buffType]).ToList();
437 layer.Validate(ref indexesSortable19, inv);
438 foreach (int item20 in indexesSortable19)
439 {
441 }
442 indexesSortable19.Sort(delegate(int x, int y)
443 {
444 int num19 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
445 if (num19 == 0)
446 {
447 num19 = inv[x].netID.CompareTo(inv[y].netID);
448 }
449 if (num19 == 0)
450 {
451 num19 = x.CompareTo(y);
452 }
453 return num19;
454 });
455 return indexesSortable19;
456 });
457
459 {
460 List<int> indexesSortable18 = itemsToSort.Where((int i) => inv[i].buffType > 0 && Main.vanityPet[inv[i].buffType]).ToList();
461 layer.Validate(ref indexesSortable18, inv);
462 foreach (int item21 in indexesSortable18)
463 {
465 }
466 indexesSortable18.Sort(delegate(int x, int y)
467 {
468 int num18 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
469 if (num18 == 0)
470 {
471 num18 = inv[x].netID.CompareTo(inv[y].netID);
472 }
473 if (num18 == 0)
474 {
475 num18 = x.CompareTo(y);
476 }
477 return num18;
478 });
479 return indexesSortable18;
480 });
481
483 {
484 List<int> indexesSortable17 = itemsToSort.Where((int i) => inv[i].consumable && inv[i].healLife > 0 && inv[i].healMana < 1).ToList();
485 layer.Validate(ref indexesSortable17, inv);
486 foreach (int item22 in indexesSortable17)
487 {
489 }
490 indexesSortable17.Sort(delegate(int x, int y)
491 {
492 int num17 = inv[y].healLife.CompareTo(inv[x].healLife);
493 if (num17 == 0)
494 {
495 num17 = inv[y].stack.CompareTo(inv[x].stack);
496 }
497 if (num17 == 0)
498 {
499 num17 = x.CompareTo(y);
500 }
501 return num17;
502 });
503 return indexesSortable17;
504 });
505
507 {
508 List<int> indexesSortable16 = itemsToSort.Where((int i) => inv[i].consumable && inv[i].healLife < 1 && inv[i].healMana > 0).ToList();
509 layer.Validate(ref indexesSortable16, inv);
510 foreach (int item23 in indexesSortable16)
511 {
513 }
514 indexesSortable16.Sort(delegate(int x, int y)
515 {
516 int num16 = inv[y].healMana.CompareTo(inv[x].healMana);
517 if (num16 == 0)
518 {
519 num16 = inv[y].stack.CompareTo(inv[x].stack);
520 }
521 if (num16 == 0)
522 {
523 num16 = x.CompareTo(y);
524 }
525 return num16;
526 });
527 return indexesSortable16;
528 });
529
531 {
532 List<int> indexesSortable15 = itemsToSort.Where((int i) => inv[i].consumable && inv[i].healLife > 0 && inv[i].healMana > 0).ToList();
533 layer.Validate(ref indexesSortable15, inv);
534 foreach (int item24 in indexesSortable15)
535 {
537 }
538 indexesSortable15.Sort(delegate(int x, int y)
539 {
540 int num15 = inv[y].healLife.CompareTo(inv[x].healLife);
541 if (num15 == 0)
542 {
543 num15 = inv[y].stack.CompareTo(inv[x].stack);
544 }
545 if (num15 == 0)
546 {
547 num15 = x.CompareTo(y);
548 }
549 return num15;
550 });
551 return indexesSortable15;
552 });
553
555 {
556 List<int> indexesSortable14 = itemsToSort.Where((int i) => inv[i].consumable && inv[i].buffType > 0).ToList();
557 layer.Validate(ref indexesSortable14, inv);
558 foreach (int item25 in indexesSortable14)
559 {
561 }
562 indexesSortable14.Sort(delegate(int x, int y)
563 {
564 int num14 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
565 if (num14 == 0)
566 {
567 num14 = inv[x].netID.CompareTo(inv[y].netID);
568 }
569 if (num14 == 0)
570 {
571 num14 = inv[y].stack.CompareTo(inv[x].stack);
572 }
573 if (num14 == 0)
574 {
575 num14 = x.CompareTo(y);
576 }
577 return num14;
578 });
579 return indexesSortable14;
580 });
581
583 {
584 List<int> indexesSortable13 = itemsToSort.Where((int i) => inv[i].dye > 0).ToList();
585 layer.Validate(ref indexesSortable13, inv);
586 foreach (int item26 in indexesSortable13)
587 {
589 }
590 indexesSortable13.Sort(delegate(int x, int y)
591 {
592 int num13 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
593 if (num13 == 0)
594 {
595 num13 = inv[y].dye.CompareTo(inv[x].dye);
596 }
597 if (num13 == 0)
598 {
599 num13 = inv[y].stack.CompareTo(inv[x].stack);
600 }
601 if (num13 == 0)
602 {
603 num13 = x.CompareTo(y);
604 }
605 return num13;
606 });
607 return indexesSortable13;
608 });
609
611 {
612 List<int> indexesSortable12 = itemsToSort.Where((int i) => inv[i].hairDye >= 0).ToList();
613 layer.Validate(ref indexesSortable12, inv);
614 foreach (int item27 in indexesSortable12)
615 {
617 }
618 indexesSortable12.Sort(delegate(int x, int y)
619 {
620 int num12 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
621 if (num12 == 0)
622 {
623 num12 = inv[y].hairDye.CompareTo(inv[x].hairDye);
624 }
625 if (num12 == 0)
626 {
627 num12 = inv[y].stack.CompareTo(inv[x].stack);
628 }
629 if (num12 == 0)
630 {
631 num12 = x.CompareTo(y);
632 }
633 return num12;
634 });
635 return indexesSortable12;
636 });
637
639 {
640 List<int> indexesSortable11 = itemsToSort.Where((int i) => inv[i].netID > 0 && ItemID.Sets.SortingPriorityBossSpawns[inv[i].netID] > -1).ToList();
641 layer.Validate(ref indexesSortable11, inv);
642 foreach (int item28 in indexesSortable11)
643 {
645 }
646 indexesSortable11.Sort(delegate(int x, int y)
647 {
649 if (num11 == 0)
650 {
651 num11 = inv[y].stack.CompareTo(inv[x].stack);
652 }
653 if (num11 == 0)
654 {
655 num11 = x.CompareTo(y);
656 }
657 return num11;
658 });
659 return indexesSortable11;
660 });
661
663 {
664 List<int> indexesSortable10 = itemsToSort.Where((int i) => (inv[i].netID > 0 && ItemID.Sets.SortingPriorityWiring[inv[i].netID] > -1) || inv[i].mech).ToList();
665 layer.Validate(ref indexesSortable10, inv);
666 foreach (int item29 in indexesSortable10)
667 {
669 }
670 indexesSortable10.Sort(delegate(int x, int y)
671 {
672 int num10 = ItemID.Sets.SortingPriorityWiring[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityWiring[inv[x].netID]);
673 if (num10 == 0)
674 {
675 num10 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
676 }
677 if (num10 == 0)
678 {
679 num10 = inv[y].netID.CompareTo(inv[x].netID);
680 }
681 if (num10 == 0)
682 {
683 num10 = inv[y].stack.CompareTo(inv[x].stack);
684 }
685 if (num10 == 0)
686 {
687 num10 = x.CompareTo(y);
688 }
689 return num10;
690 });
691 return indexesSortable10;
692 });
693
695 {
696 List<int> indexesSortable9 = itemsToSort.Where((int i) => inv[i].netID > 0 && ItemID.Sets.SortingPriorityMaterials[inv[i].netID] > -1).ToList();
697 layer.Validate(ref indexesSortable9, inv);
698 foreach (int item30 in indexesSortable9)
699 {
701 }
702 indexesSortable9.Sort(delegate(int x, int y)
703 {
705 if (num9 == 0)
706 {
707 num9 = inv[y].stack.CompareTo(inv[x].stack);
708 }
709 if (num9 == 0)
710 {
711 num9 = x.CompareTo(y);
712 }
713 return num9;
714 });
715 return indexesSortable9;
716 });
717
719 {
720 List<int> indexesSortable8 = itemsToSort.Where((int i) => inv[i].netID > 0 && ItemID.Sets.SortingPriorityExtractibles[inv[i].netID] > -1).ToList();
721 layer.Validate(ref indexesSortable8, inv);
722 foreach (int item31 in indexesSortable8)
723 {
725 }
726 indexesSortable8.Sort(delegate(int x, int y)
727 {
729 if (num8 == 0)
730 {
731 num8 = inv[y].stack.CompareTo(inv[x].stack);
732 }
733 if (num8 == 0)
734 {
735 num8 = x.CompareTo(y);
736 }
737 return num8;
738 });
739 return indexesSortable8;
740 });
741
743 {
744 List<int> indexesSortable7 = itemsToSort.Where((int i) => (inv[i].netID > 0 && ItemID.Sets.SortingPriorityPainting[inv[i].netID] > -1) || inv[i].paint > 0).ToList();
745 layer.Validate(ref indexesSortable7, inv);
746 foreach (int item32 in indexesSortable7)
747 {
749 }
750 indexesSortable7.Sort(delegate(int x, int y)
751 {
752 int num7 = ItemID.Sets.SortingPriorityPainting[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityPainting[inv[x].netID]);
753 if (num7 == 0)
754 {
755 num7 = inv[x].paint.CompareTo(inv[y].paint);
756 }
757 if (num7 == 0)
758 {
759 num7 = inv[x].paintCoating.CompareTo(inv[y].paintCoating);
760 }
761 if (num7 == 0)
762 {
763 num7 = inv[y].stack.CompareTo(inv[x].stack);
764 }
765 if (num7 == 0)
766 {
767 num7 = x.CompareTo(y);
768 }
769 return num7;
770 });
771 return indexesSortable7;
772 });
773
775 {
776 List<int> indexesSortable6 = itemsToSort.Where((int i) => inv[i].netID > 0 && ItemID.Sets.SortingPriorityRopes[inv[i].netID] > -1).ToList();
777 layer.Validate(ref indexesSortable6, inv);
778 foreach (int item33 in indexesSortable6)
779 {
781 }
782 indexesSortable6.Sort(delegate(int x, int y)
783 {
784 int num6 = ItemID.Sets.SortingPriorityRopes[inv[y].netID].CompareTo(ItemID.Sets.SortingPriorityRopes[inv[x].netID]);
785 if (num6 == 0)
786 {
787 num6 = inv[y].stack.CompareTo(inv[x].stack);
788 }
789 if (num6 == 0)
790 {
791 num6 = x.CompareTo(y);
792 }
793 return num6;
794 });
795 return indexesSortable6;
796 });
797
799 {
800 List<int> indexesSortable5 = itemsToSort.Where((int i) => inv[i].createTile < 0 && inv[i].createWall < 1).ToList();
801 layer.Validate(ref indexesSortable5, inv);
802 foreach (int item34 in indexesSortable5)
803 {
805 }
806 indexesSortable5.Sort(delegate(int x, int y)
807 {
808 int num5 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
809 if (num5 == 0)
810 {
811 num5 = inv[y].value.CompareTo(inv[x].value);
812 }
813 if (num5 == 0)
814 {
815 num5 = inv[y].stack.CompareTo(inv[x].stack);
816 }
817 if (num5 == 0)
818 {
819 num5 = x.CompareTo(y);
820 }
821 return num5;
822 });
823 return indexesSortable5;
824 });
825
827 {
828 List<int> indexesSortable4 = itemsToSort.Where((int i) => inv[i].createTile >= 0 && Main.tileFrameImportant[inv[i].createTile]).ToList();
829 layer.Validate(ref indexesSortable4, inv);
830 foreach (int item35 in indexesSortable4)
831 {
833 }
834 indexesSortable4.Sort(delegate(int x, int y)
835 {
836 int num4 = string.Compare(inv[x].Name, inv[y].Name, StringComparison.OrdinalIgnoreCase);
837 if (num4 == 0)
838 {
839 num4 = inv[y].stack.CompareTo(inv[x].stack);
840 }
841 if (num4 == 0)
842 {
843 num4 = x.CompareTo(y);
844 }
845 return num4;
846 });
847 return indexesSortable4;
848 });
849
851 {
852 List<int> indexesSortable3 = itemsToSort.Where((int i) => inv[i].createWall > 0 || inv[i].createTile >= 0).ToList();
853 layer.Validate(ref indexesSortable3, inv);
854 foreach (int item36 in indexesSortable3)
855 {
857 }
858 indexesSortable3.Sort(delegate(int x, int y)
859 {
860 int num3 = string.Compare(inv[x].Name, inv[y].Name, StringComparison.OrdinalIgnoreCase);
861 if (num3 == 0)
862 {
863 num3 = inv[y].stack.CompareTo(inv[x].stack);
864 }
865 if (num3 == 0)
866 {
867 num3 = x.CompareTo(y);
868 }
869 return num3;
870 });
871 return indexesSortable3;
872 });
873
875 {
876 List<int> indexesSortable2 = itemsToSort.Where((int i) => inv[i].OriginalRarity >= 0).ToList();
877 layer.Validate(ref indexesSortable2, inv);
878 foreach (int item37 in indexesSortable2)
879 {
881 }
882 indexesSortable2.Sort(delegate(int x, int y)
883 {
884 int num2 = inv[y].OriginalRarity.CompareTo(inv[x].OriginalRarity);
885 if (num2 == 0)
886 {
887 num2 = string.Compare(inv[x].Name, inv[y].Name, StringComparison.OrdinalIgnoreCase);
888 }
889 if (num2 == 0)
890 {
891 num2 = inv[y].stack.CompareTo(inv[x].stack);
892 }
893 if (num2 == 0)
894 {
895 num2 = x.CompareTo(y);
896 }
897 return num2;
898 });
899 return indexesSortable2;
900 });
901
903 {
905 layer.Validate(ref indexesSortable, inv);
906 foreach (int item38 in indexesSortable)
907 {
909 }
910 indexesSortable.Sort(delegate(int x, int y)
911 {
912 int num = inv[y].value.CompareTo(inv[x].value);
913 if (num == 0)
914 {
915 num = inv[y].stack.CompareTo(inv[x].stack);
916 }
917 if (num == 0)
918 {
919 num = x.CompareTo(y);
920 }
921 return num;
922 });
923 return indexesSortable;
924 });
925 }
926
928
930
931 public static void SetupWhiteLists()
932 {
933 _layerWhiteLists.Clear();
936 List<int> list3 = new List<int>();
975 for (int i = -48; i < ItemID.Count; i++)
976 {
977 Item item = new Item();
978 item.netDefaults(i);
979 list2.Add(item);
980 list3.Add(i + 48);
981 }
982 Item[] array = list2.ToArray();
983 foreach (ItemSortingLayer item2 in list)
984 {
985 List<int> list4 = item2.SortingMethod(item2, array, list3);
986 List<int> list5 = new List<int>();
987 for (int j = 0; j < list4.Count; j++)
988 {
989 list5.Add(array[list4[j]].netID);
990 }
991 _layerWhiteLists.Add(item2.Name, list5);
992 }
993 }
994
995 private static void SetupSortingPriorities()
996 {
997 Player player = Main.player[Main.myPlayer];
998 _layerList.Clear();
999 List<float> list = new List<float> { player.meleeDamage, player.rangedDamage, player.magicDamage, player.minionDamage };
1000 list.Sort((float x, float y) => y.CompareTo(x));
1001 for (int i = 0; i < 5; i++)
1002 {
1003 if (!_layerList.Contains(ItemSortingLayers.WeaponsMelee) && player.meleeDamage == list[0])
1004 {
1005 list.RemoveAt(0);
1007 }
1008 if (!_layerList.Contains(ItemSortingLayers.WeaponsRanged) && player.rangedDamage == list[0])
1009 {
1010 list.RemoveAt(0);
1012 }
1013 if (!_layerList.Contains(ItemSortingLayers.WeaponsMagic) && player.magicDamage == list[0])
1014 {
1015 list.RemoveAt(0);
1017 }
1018 if (!_layerList.Contains(ItemSortingLayers.WeaponsMinions) && player.minionDamage == list[0])
1019 {
1020 list.RemoveAt(0);
1022 }
1023 }
1058 }
1059
1060 private static void Sort(Item[] inv, params int[] ignoreSlots)
1061 {
1063 List<int> list = new List<int>();
1064 for (int i = 0; i < inv.Length; i++)
1065 {
1066 if (!ignoreSlots.Contains(i))
1067 {
1068 Item item = inv[i];
1069 if (item != null && item.stack != 0 && item.type != 0 && !item.favorited)
1070 {
1071 list.Add(i);
1072 }
1073 }
1074 }
1075 for (int j = 0; j < list.Count; j++)
1076 {
1077 Item item2 = inv[list[j]];
1078 if (item2.stack >= item2.maxStack)
1079 {
1080 continue;
1081 }
1082 int num = item2.maxStack - item2.stack;
1083 for (int k = j; k < list.Count; k++)
1084 {
1085 if (j == k)
1086 {
1087 continue;
1088 }
1089 Item item3 = inv[list[k]];
1090 if (item2.type == item3.type && item3.stack != item3.maxStack)
1091 {
1092 int num2 = item3.stack;
1093 if (num < num2)
1094 {
1095 num2 = num;
1096 }
1097 item2.stack += num2;
1098 item3.stack -= num2;
1099 num -= num2;
1100 if (item3.stack == 0)
1101 {
1102 inv[list[k]] = new Item();
1103 list.Remove(list[k]);
1104 j--;
1105 k--;
1106 break;
1107 }
1108 if (num == 0)
1109 {
1110 break;
1111 }
1112 }
1113 }
1114 }
1116 for (int l = 0; l < inv.Length; l++)
1117 {
1118 if (!ignoreSlots.Contains(l) && !list2.Contains(l))
1119 {
1120 Item item4 = inv[l];
1121 if (item4 == null || item4.stack == 0 || item4.type == 0)
1122 {
1123 list2.Add(l);
1124 }
1125 }
1126 }
1127 list2.Sort();
1128 List<int> list3 = new List<int>();
1129 List<int> list4 = new List<int>();
1130 foreach (ItemSortingLayer layer in _layerList)
1131 {
1132 List<int> list5 = layer.SortingMethod(layer, inv, list);
1133 if (list5.Count > 0)
1134 {
1136 }
1138 }
1140 List<Item> list6 = new List<Item>();
1141 foreach (int item5 in list3)
1142 {
1143 list6.Add(inv[item5]);
1144 inv[item5] = new Item();
1145 }
1146 float num3 = 1f / (float)list4.Count;
1147 float num4 = num3 / 2f;
1148 for (int m = 0; m < list6.Count; m++)
1149 {
1150 int num5 = list2[0];
1151 ItemSlot.SetGlow(num5, num4, Main.player[Main.myPlayer].chest != -1);
1152 list4[0]--;
1153 if (list4[0] == 0)
1154 {
1155 list4.RemoveAt(0);
1156 num4 += num3;
1157 }
1158 inv[num5] = list6[m];
1159 list2.Remove(num5);
1160 }
1161 }
1162
1163 public static void SortInventory()
1164 {
1165 if (!Main.LocalPlayer.HasItem(905))
1166 {
1167 SortCoins();
1168 }
1169 SortAmmo();
1170 Sort(Main.player[Main.myPlayer].inventory, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 50, 51, 52, 53, 54, 55, 56, 57, 58);
1171 }
1172
1173 public static void SortChest()
1174 {
1175 int chest = Main.player[Main.myPlayer].chest;
1176 if (chest == -1)
1177 {
1178 return;
1179 }
1180 Item[] item = Main.player[Main.myPlayer].bank.item;
1181 if (chest == -3)
1182 {
1183 item = Main.player[Main.myPlayer].bank2.item;
1184 }
1185 if (chest == -4)
1186 {
1187 item = Main.player[Main.myPlayer].bank3.item;
1188 }
1189 if (chest == -5)
1190 {
1191 item = Main.player[Main.myPlayer].bank4.item;
1192 }
1193 if (chest > -1)
1194 {
1195 item = Main.chest[chest].item;
1196 }
1198 for (int i = 0; i < 40; i++)
1199 {
1200 array[i] = Tuple.Create(item[i].netID, item[i].stack, (int)item[i].prefix);
1201 }
1202 Sort(item);
1204 for (int j = 0; j < 40; j++)
1205 {
1206 array2[j] = Tuple.Create(item[j].netID, item[j].stack, (int)item[j].prefix);
1207 }
1208 if (Main.netMode != 1 || Main.player[Main.myPlayer].chest <= -1)
1209 {
1210 return;
1211 }
1212 for (int k = 0; k < 40; k++)
1213 {
1214 if (array2[k] != array[k])
1215 {
1216 NetMessage.SendData(32, -1, -1, null, Main.player[Main.myPlayer].chest, k);
1217 }
1218 }
1219 }
1220
1221 public static void SortAmmo()
1222 {
1225 }
1226
1227 public static void FillAmmoFromInventory()
1228 {
1229 List<int> list = new List<int>();
1230 List<int> list2 = new List<int>();
1231 Item[] inventory = Main.player[Main.myPlayer].inventory;
1232 for (int i = 54; i < 58; i++)
1233 {
1234 ItemSlot.SetGlow(i, 0.31f, chest: false);
1235 Item item = inventory[i];
1236 if (item.IsAir)
1237 {
1238 list2.Add(i);
1239 }
1240 else if (item.ammo != AmmoID.None)
1241 {
1242 if (!list.Contains(item.type))
1243 {
1244 list.Add(item.type);
1245 }
1246 RefillItemStack(inventory, inventory[i], 0, 50);
1247 }
1248 }
1249 if (list2.Count < 1)
1250 {
1251 return;
1252 }
1253 for (int j = 0; j < 50; j++)
1254 {
1255 Item item2 = inventory[j];
1256 if (item2.stack >= 1 && item2.CanFillEmptyAmmoSlot() && list.Contains(item2.type))
1257 {
1258 int num = list2[0];
1259 list2.Remove(num);
1260 Utils.Swap(ref inventory[j], ref inventory[num]);
1261 RefillItemStack(inventory, inventory[num], 0, 50);
1262 if (list2.Count == 0)
1263 {
1264 break;
1265 }
1266 }
1267 }
1268 if (list2.Count < 1)
1269 {
1270 return;
1271 }
1272 for (int k = 0; k < 50; k++)
1273 {
1274 Item item3 = inventory[k];
1275 if (item3.stack >= 1 && item3.CanFillEmptyAmmoSlot() && item3.FitsAmmoSlot())
1276 {
1277 int num2 = list2[0];
1278 list2.Remove(num2);
1279 Utils.Swap(ref inventory[k], ref inventory[num2]);
1280 RefillItemStack(inventory, inventory[num2], 0, 50);
1281 if (list2.Count == 0)
1282 {
1283 break;
1284 }
1285 }
1286 }
1287 }
1288
1289 public static void ClearAmmoSlotSpaces()
1290 {
1291 Item[] inventory = Main.player[Main.myPlayer].inventory;
1292 for (int i = 54; i < 58; i++)
1293 {
1294 Item item = inventory[i];
1295 if (!item.IsAir && item.ammo != AmmoID.None && item.stack < item.maxStack)
1296 {
1297 RefillItemStack(inventory, item, i + 1, 58);
1298 }
1299 }
1300 for (int j = 54; j < 58; j++)
1301 {
1302 if (inventory[j].type > 0)
1303 {
1304 TrySlidingUp(inventory, j, 54);
1305 }
1306 }
1307 }
1308
1309 private static void SortCoins()
1310 {
1311 Item[] inventory = Main.LocalPlayer.inventory;
1312 bool overFlowing;
1313 long count = Utils.CoinsCount(out overFlowing, inventory, 58);
1315 if (overFlowing)
1316 {
1317 return;
1318 }
1319 int[] array = Utils.CoinsSplit(count);
1320 int num = 0;
1321 for (int i = 0; i < 3; i++)
1322 {
1323 int num2 = array[i];
1324 while (num2 > 0)
1325 {
1326 num2 -= 99;
1327 num++;
1328 }
1329 }
1330 int num3 = array[3];
1331 while (num3 > commonMaxStack)
1332 {
1334 num++;
1335 }
1336 int num4 = 0;
1337 for (int j = 0; j < 58; j++)
1338 {
1339 if (inventory[j].type >= 71 && inventory[j].type <= 74 && inventory[j].stack > 0)
1340 {
1341 num4++;
1342 }
1343 }
1344 if (num4 < num)
1345 {
1346 return;
1347 }
1348 for (int k = 0; k < 58; k++)
1349 {
1350 if (inventory[k].type >= 71 && inventory[k].type <= 74 && inventory[k].stack > 0)
1351 {
1352 inventory[k].TurnToAir();
1353 }
1354 }
1355 int num5 = 100;
1356 while (true)
1357 {
1358 int num6 = -1;
1359 for (int num7 = 3; num7 >= 0; num7--)
1360 {
1361 if (array[num7] > 0)
1362 {
1363 num6 = num7;
1364 break;
1365 }
1366 }
1367 if (num6 == -1)
1368 {
1369 break;
1370 }
1371 int num8 = array[num6];
1372 if (num6 == 3 && num8 > commonMaxStack)
1373 {
1375 }
1376 bool flag = false;
1377 if (!flag)
1378 {
1379 for (int l = 50; l < 54; l++)
1380 {
1381 if (inventory[l].IsAir)
1382 {
1383 inventory[l].SetDefaults(71 + num6);
1384 inventory[l].stack = num8;
1385 array[num6] -= num8;
1386 flag = true;
1387 break;
1388 }
1389 }
1390 }
1391 if (!flag)
1392 {
1393 for (int m = 0; m < 50; m++)
1394 {
1395 if (inventory[m].IsAir)
1396 {
1397 inventory[m].SetDefaults(71 + num6);
1398 inventory[m].stack = num8;
1399 array[num6] -= num8;
1400 flag = true;
1401 break;
1402 }
1403 }
1404 }
1405 num5--;
1406 if (num5 > 0)
1407 {
1408 continue;
1409 }
1410 for (int num9 = 3; num9 >= 0; num9--)
1411 {
1412 if (array[num9] > 0)
1413 {
1414 Main.LocalPlayer.QuickSpawnItem(Main.LocalPlayer.GetItemSource_Misc(7), 71 + num9, array[num9]);
1415 }
1416 }
1417 break;
1418 }
1419 }
1420
1422 {
1423 int num = itemToRefill.maxStack - itemToRefill.stack;
1424 if (num <= 0)
1425 {
1426 return;
1427 }
1428 for (int i = loopStartIndex; i < loopEndIndex; i++)
1429 {
1430 Item item = inv[i];
1431 if (item.stack >= 1 && item.type == itemToRefill.type)
1432 {
1433 int num2 = item.stack;
1434 if (num2 > num)
1435 {
1436 num2 = num;
1437 }
1438 num -= num2;
1439 itemToRefill.stack += num2;
1440 item.stack -= num2;
1441 if (item.stack <= 0)
1442 {
1443 item.TurnToAir();
1444 }
1445 if (num <= 0)
1446 {
1447 break;
1448 }
1449 }
1450 }
1451 }
1452
1453 private static void TrySlidingUp(Item[] inv, int slot, int minimumIndex)
1454 {
1455 for (int num = slot; num > minimumIndex; num--)
1456 {
1457 if (inv[num - 1].IsAir)
1458 {
1459 Utils.Swap(ref inv[num], ref inv[num - 1]);
1460 }
1461 }
1462 }
1463}
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
void AddRange(IEnumerable< KeyValuePair< TKey, TValue > > collection)
void Add(TKey key, TValue value)
static int None
Definition AmmoID.cs:104
static int[] SortingPriorityExtractibles
Definition ItemID.cs:1070
static int[] SortingPriorityPainting
Definition ItemID.cs:1074
static int[] SortingPriorityTerraforming
Definition ItemID.cs:1076
static int[] SortingPriorityWiring
Definition ItemID.cs:1066
static int[] SortingPriorityMaterials
Definition ItemID.cs:1068
static int[] SortingPriorityBossSpawns
Definition ItemID.cs:1064
static int[] SortingPriorityRopes
Definition ItemID.cs:1072
static readonly short Count
Definition ItemID.cs:12138
static bool[] Cart
Definition MountID.cs:9
int stack
Definition Item.cs:149
static int CommonMaxStack
Definition Item.cs:57
void TurnToAir(bool fullReset=false)
Definition Item.cs:49954
void SetDefaults(int Type=0)
Definition Item.cs:47332
static bool[] vanityPet
Definition Main.cs:778
static Chest[] chest
Definition Main.cs:1699
static int myPlayer
Definition Main.cs:1801
static int netMode
Definition Main.cs:2095
static bool[] lightPet
Definition Main.cs:780
static bool[] tileFrameImportant
Definition Main.cs:1495
static Player LocalPlayer
Definition Main.cs:2829
static Player[] player
Definition Main.cs:1803
static bool[] projHook
Definition Main.cs:772
static void SendData(int msgType, int remoteClient=-1, int ignoreClient=-1, NetworkText text=null, int number=0, float number2=0f, float number3=0f, float number4=0f, int number5=0, int number6=0, int number7=0)
Definition NetMessage.cs:88
float rangedDamage
Definition Player.cs:2027
float meleeDamage
Definition Player.cs:2023
float minionDamage
Definition Player.cs:2039
float magicDamage
Definition Player.cs:2025
static void SetGlow(int index, float hue, bool chest)
Definition ItemSlot.cs:249
readonly Func< ItemSortingLayer, Item[], List< int >, List< int > > SortingMethod
ItemSortingLayer(string name, Func< ItemSortingLayer, Item[], List< int >, List< int > > method)
void Validate(ref List< int > indexesSortable, Item[] inv)
static ItemSortingLayer LastTilesCommon
static ItemSortingLayer LastTilesImportant
static ItemSortingLayer ToolsTerraforming
static ItemSortingLayer MiscExtractinator
static ItemSortingLayer ToolsAmmoLeftovers
static ItemSortingLayer PotionsHairDyes
static ItemSortingLayer WeaponsAssorted
static ItemSortingLayer WeaponsRanged
static ItemSortingLayer ArmorAccessories
static List< ItemSortingLayer > _layerList
static void FillAmmoFromInventory()
static void Sort(Item[] inv, params int[] ignoreSlots)
static Dictionary< string, List< int > > _layerWhiteLists
static void SetupSortingPriorities()
static void SortInventory()
static void TrySlidingUp(Item[] inv, int slot, int minimumIndex)
static void SetupWhiteLists()
static void ClearAmmoSlotSpaces()
static void RefillItemStack(Item[] inv, Item itemToRefill, int loopStartIndex, int loopEndIndex)
static int[] CoinsSplit(long count)
Definition Utils.cs:665
static long CoinsCount(out bool overFlowing, Item[] inv, params int[] ignoreSlots)
Definition Utils.cs:636