private static bool ProcessItemUpdate(string itemName, bool toggle, string shopItemDataJson, string roleName, out ShopItemData shopItemData)
        {
            shopItemData = null;

            Type roleType = Utils.GetTypeByLibraryName <Role>(roleName);

            if (roleType == null)
            {
                return(false);
            }

            Role role = Utils.GetObjectByType <Role>(roleType);

            if (role == null)
            {
                return(false);
            }

            if (toggle)
            {
                ShopItemData itemData = JsonSerializer.Deserialize <ShopItemData>(shopItemDataJson);

                if (itemData == null)
                {
                    return(false);
                }

                Type itemType = Utils.GetTypeByLibraryName <IItem>(itemName);

                if (itemType == null)
                {
                    return(false);
                }

                shopItemData = ShopItemData.CreateItemData(itemType);

                if (shopItemData == null)
                {
                    return(false);
                }

                shopItemData.CopyFrom(itemData);
            }

            UpdateShop(role.Shop, toggle, itemName, shopItemData);

            if (Host.IsServer)
            {
                foreach (Client client in Client.All)
                {
                    if (client.Pawn is Player player && player.Role.Equals(roleName))
                    {
                        UpdateShop(player.Shop, toggle, itemName, shopItemData);
                    }
                }
            }
            else if (Local.Client?.Pawn is Player player && player.Role.Name.Equals(roleName))
            {
                UpdateShop(player.Shop, toggle, itemName, shopItemData);

                QuickShop.Instance?.Reload();
            }

            return(true);
        }