suriyun-production / mmorpg-kit-docs

This is document for MMORPG KIT project (https://www.assetstore.unity3d.com/#!/content/110188?aid=1100lGeN)
https://suriyun-production.github.io/mmorpg-kit-docs
49 stars 11 forks source link

Refine item bug #2368

Closed CLAXES closed 7 months ago

CLAXES commented 7 months ago

If I upgrade an equipped item and it is deleted, I cannot equip another item to that location until I exit and re-enter the game.

NullReferenceException: Object reference not set to an instance of an object
MultiplayerARPG.ClientInventoryHandlersExtensions.RequestEquipItem(MultiplayerARPG.IClientInventoryHandlers handlers, MultiplayerARPG.IPlayerCharacterData playerCharacter, System.Int32 nonEquipIndex, System.Byte equipWeaponSet, LiteNetLibManager.ResponseDelegate`1[TResponse] responseEquipArmor, LiteNetLibManager.ResponseDelegate`1[TResponse] responseEquipWeapon) (at Assets/MyAssets/UnityMultiplayerARPG/Core/Scripts/Networking/Extensions/ClientInventoryHandlersExtensions.cs:86)
MultiplayerARPG.UICharacterItem.OnClickEquip() (at Assets/MyAssets/UnityMultiplayerARPG/Core/Scripts/UI/Item/UICharacterItem.cs:1781)
UnityEngine.Events.InvokableCall.Invoke() (at<cd14705e8f094afcb566740ab5e8c02d>:0)
UnityEngine.Events.UnityEvent.Invoke() (at<cd14705e8f094afcb566740ab5e8c02d>:0)
UnityEngine.UI.Button.Press() (at./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:70)
UnityEngine.UI.Button.OnPointerClick(UnityEngine.EventSystems.PointerEventData eventData) (at./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/UI/Core/Button.cs:114)
UnityEngine.EventSystems.ExecuteEvents.Execute(UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:57)
UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/ExecuteEvents.cs:272)
UnityEngine.EventSystems.EventSystem:Update() (at./Library/PackageCache/com.unity.ugui@1.0.0/Runtime/EventSystem/EventSystem.cs:530)
CLAXES commented 7 months ago

In this code in BaseItem_Refine.cs, there is no problem when you delete it with remove, but this problem occurs when you make it empty.

    private static bool RefineItemByList(IPlayerCharacterData character, IList<CharacterItem> list, int itemIndex, int[] enhancerDataIds, out UITextKeys gameMessageType)
    {
        return RefineItem(character, list[itemIndex], enhancerDataIds, (refinedItem) =>
        {
            list[itemIndex] = refinedItem;
        }, () =>
        {
            if (GameInstance.Singleton.IsLimitInventorySlot)
            {
                Debug.Log("empty");
                list[itemIndex] = CharacterItem.Empty;
            }
            else
            {
                Debug.Log("remove");
                list.RemoveAt(itemIndex);
            }
        }, out gameMessageType);
    }
insthync commented 7 months ago

Fixed