public bool ShareStashRemoveItemPatch(On.ItemContainer.orig_RemoveItem original, ItemContainer container, Item item) { FieldInfo m_interactionTrigger = typeof(InteractionOpenContainer).GetField("m_interactionTrigger", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); InteractionOpenContainer interactionTrigger = (InteractionOpenContainer)m_interactionTrigger.GetValue(instance); if (container.SpecialType == ItemContainer.SpecialContainerTypes.Stash && !NetworkLevelLoader.Instance.IsSceneLoading and !interactionTrigger.IsBusy) { Debug.Log("remove item used"); if (itemData.itemList.Contains(item.ItemID + ":" + item.UID)) { itemData.itemList.Remove(item.ItemID + ":" + item.UID); initializer.SaveItems(itemData); Debug.Log("item removed" + item.UID); } } return(original.Invoke(container, item)); }
public void ShareStashOnActivationDonePatch(On.InteractionOpenContainer.orig_OnActivationDone original, InteractionOpenContainer instance) { FieldInfo m_container = typeof(InteractionOpenContainer).GetField("m_container", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); ItemContainer container = (ItemContainer)m_container.GetValue(instance); if (container.SpecialType == ItemContainer.SpecialContainerTypes.Stash) { container.ClearPouch(); for (int i = 0; i < itemData.itemList.Count; i++) { string localitemID = itemData.itemList[i].Substring(0, itemData.itemList[i].IndexOf(":")); string localitemUID = itemData.itemList[i].Substring(itemData.itemList[i].IndexOf(":") + 1); Debug.Log("Item in container? " + container.Contains(localitemUID)); if (!container.Contains(localitemUID)) { Debug.Log("item add start " + localitemUID); Item localItem = ItemManager.Instance.GetItem(localitemUID); if (localItem == null) { localItem = ItemManager.Instance.GenerateItemNetwork(Int32.Parse(localitemID)); } itemData.itemList.RemoveAt(i); localItem.Store(container); localItem.ChangeParent(container.transform); Debug.Log("item add finish " + localitemUID); } } m_container.SetValue(instance, container); } original.Invoke(instance); }