|
7 | 7 |
|
8 | 8 | namespace Oxide.Plugins |
9 | 9 | { |
10 | | - [Info("Stack Size Controller", "AnExiledGod", "3.3.1")] |
| 10 | + [Info("Stack Size Controller", "AnExiledGod", "3.4.0")] |
11 | 11 | [Description("Allows configuration of most items max stack size.")] |
12 | 12 | class StackSizeController : CovalencePlugin |
13 | 13 | { |
@@ -638,112 +638,83 @@ private void ListCategoryItemsCommand(IPlayer player, string command, string[] a |
638 | 638 |
|
639 | 639 | #region Hooks |
640 | 640 |
|
641 | | - // TODO: Investigate merging CanStackItem into CanMoveItem and potential performance issues |
642 | 641 | object CanMoveItem(Item item, PlayerInventory playerLoot, uint targetContainer, int targetSlot, int amount) |
643 | 642 | { |
644 | 643 | if (_config.DisableDupeFixAndLeaveWeaponMagsAlone) |
645 | 644 | { |
646 | 645 | return null; |
647 | 646 | } |
648 | 647 |
|
| 648 | + Item targetItem = playerLoot.FindContainer(targetContainer).GetSlot(targetSlot); |
| 649 | + ItemContainer container = playerLoot.FindContainer(targetContainer); |
| 650 | + |
| 651 | + if (targetItem.IsNull<Item>()) |
| 652 | + { |
| 653 | + return null; |
| 654 | + } |
| 655 | + |
649 | 656 | if (item.contents?.itemList.Count > 0) |
650 | 657 | { |
651 | 658 | foreach (Item containedItem in item.contents.itemList) |
652 | 659 | { |
653 | | - item.parent.AddItem(containedItem.info, containedItem.amount, containedItem.skin); |
654 | | - } |
| 660 | + if (containedItem.info.itemType == ItemContainer.ContentsType.Liquid) { continue; } |
655 | 661 |
|
656 | | - item.contents.Clear(); |
| 662 | + container.AddItem(containedItem.info, containedItem.amount, containedItem.skin); |
| 663 | + containedItem.Remove(); |
| 664 | + } |
657 | 665 | } |
658 | 666 |
|
659 | | - Item targetItem = item.parent.GetSlot(targetSlot); |
660 | | - |
661 | 667 | // Return contents |
662 | | - if (targetItem?.contents?.itemList.Count > 0) |
| 668 | + if (targetItem.info.itemid == item.info.itemid && targetItem.contents?.itemList.Count > 0) |
663 | 669 | { |
664 | 670 | foreach (Item containedItem in targetItem.contents.itemList) |
665 | 671 | { |
666 | | - targetItem.parent.AddItem(containedItem.info, containedItem.amount, containedItem.skin); |
667 | | - } |
668 | | - |
669 | | - targetItem.contents.Clear(); |
670 | | - } |
| 672 | + if (containedItem.info.itemType == ItemContainer.ContentsType.Liquid) { continue; } |
671 | 673 |
|
672 | | - return null; |
673 | | - } |
674 | | - |
675 | | - private object CanStackItem(Item item, Item targetItem) |
676 | | - { |
677 | | - if (_config.DisableDupeFixAndLeaveWeaponMagsAlone || |
678 | | - (item.GetOwnerPlayer().IsUnityNull() && targetItem.GetOwnerPlayer().IsUnityNull()) |
679 | | - ) |
680 | | - { |
681 | | - return null; |
682 | | - } |
683 | | - |
684 | | - // Duplicating all game checks since we're overriding them by returning true |
685 | | - if ( |
686 | | - item == targetItem || |
687 | | - item.info.stackable <= 1 || |
688 | | - targetItem.info.stackable <= 1 || |
689 | | - item.info.itemid != targetItem.info.itemid || |
690 | | - !item.IsValid() || |
691 | | - item.IsBlueprint() && item.blueprintTarget != targetItem.blueprintTarget || |
692 | | - targetItem.hasCondition && (targetItem.condition < targetItem.info.condition.max - 5) || |
693 | | - (_config.PreventStackingDifferentSkins && item.skin != targetItem.skin) |
694 | | - ) |
695 | | - { |
696 | | - return false; |
697 | | - } |
698 | | - |
699 | | - if (item.info.amountType == ItemDefinition.AmountType.Genetics || |
700 | | - targetItem.info.amountType == ItemDefinition.AmountType.Genetics) |
701 | | - { |
702 | | - if ((item.instanceData?.dataInt ?? -1) != (targetItem.instanceData?.dataInt ?? -1)) |
703 | | - { |
704 | | - return false; |
| 674 | + container.AddItem(containedItem.info, containedItem.amount, containedItem.skin); |
| 675 | + containedItem.Remove(); |
705 | 676 | } |
706 | 677 | } |
707 | 678 |
|
708 | | - BaseProjectile.Magazine itemMag = |
709 | | - targetItem.GetHeldEntity()?.GetComponent<BaseProjectile>()?.primaryMagazine; |
710 | | - |
| 679 | + BaseProjectile.Magazine itemMag = |
| 680 | + item.GetHeldEntity()?.GetComponent<BaseProjectile>()?.primaryMagazine; |
| 681 | + |
711 | 682 | // Return ammo |
712 | 683 | if (itemMag != null) |
713 | 684 | { |
714 | 685 | if (itemMag.contents > 0) |
715 | 686 | { |
716 | | - item.parent.AddItem(itemMag.ammoType, itemMag.contents); |
| 687 | + container.AddItem(itemMag.ammoType, itemMag.contents); |
717 | 688 |
|
718 | 689 | itemMag.contents = 0; |
719 | 690 | } |
720 | 691 | } |
721 | | - |
| 692 | + |
722 | 693 | if (targetItem.GetHeldEntity() is FlameThrower) |
723 | 694 | { |
724 | | - FlameThrower flameThrower = targetItem.GetHeldEntity().GetComponent<FlameThrower>(); |
| 695 | + FlameThrower flameThrower = item.GetHeldEntity().GetComponent<FlameThrower>(); |
725 | 696 |
|
726 | 697 | if (flameThrower.ammo > 0) |
727 | 698 | { |
728 | | - item.parent.AddItem(flameThrower.fuelType, flameThrower.ammo); |
| 699 | + container.AddItem(flameThrower.fuelType, flameThrower.ammo); |
729 | 700 |
|
730 | 701 | flameThrower.ammo = 0; |
731 | 702 | } |
732 | 703 | } |
733 | | - |
| 704 | + |
734 | 705 | if (targetItem.GetHeldEntity() is Chainsaw) |
735 | 706 | { |
736 | | - Chainsaw chainsaw = targetItem.GetHeldEntity().GetComponent<Chainsaw>(); |
| 707 | + Chainsaw chainsaw = item.GetHeldEntity().GetComponent<Chainsaw>(); |
737 | 708 |
|
738 | 709 | if (chainsaw.ammo > 0) |
739 | 710 | { |
740 | | - item.parent.AddItem(chainsaw.fuelType, chainsaw.ammo); |
| 711 | + container.AddItem(chainsaw.fuelType, chainsaw.ammo); |
741 | 712 |
|
742 | 713 | chainsaw.ammo = 0; |
743 | 714 | } |
744 | 715 | } |
745 | | - |
746 | | - return true; |
| 716 | + |
| 717 | + return null; |
747 | 718 | } |
748 | 719 |
|
749 | 720 | private Item OnItemSplit(Item item, int amount) |
@@ -787,6 +758,8 @@ private Item OnItemSplit(Item item, int amount) |
787 | 758 | { |
788 | 759 | foreach (Item containedItem in item.contents.itemList) |
789 | 760 | { |
| 761 | + if (containedItem.info.itemType == ItemContainer.ContentsType.Liquid) { continue; } |
| 762 | + |
790 | 763 | containedItem.Remove(); |
791 | 764 | } |
792 | 765 | } |
|
0 commit comments