Пример #1
0
        public void Load(Player fromPlayer)
        {
            if (fromPlayer == null)
            {
                EquipmentAndQuickSlots.LogError("Tried to load an ExtendedPlayerData with a null player!");
                return;
            }

            _player = fromPlayer;
            LoadValue(fromPlayer, "ExtendedPlayerData", out var init);
            EquipmentAndQuickSlots.LogWarning("Loaded ExtendedPlayerData");

            if (LoadValue(fromPlayer, nameof(QuickSlotInventory), out var quickSlotData))
            {
                var pkg = new ZPackage(quickSlotData);
                _isLoading = true;
                QuickSlotInventory.Load(pkg);
                _isLoading = false;
            }

            if (LoadValue(fromPlayer, nameof(EquipmentSlotInventory), out var equipSlotData))
            {
                var pkg = new ZPackage(equipSlotData);
                _isLoading = true;
                EquipmentSlotInventory.Load(pkg);
                _isLoading = false;
            }
        }
Пример #2
0
        public static void Postfix()
        {
            var player = Player.m_localPlayer;

            if (player == null)
            {
                return;
            }

            EquipmentAndQuickSlots.LogWarning("Recovered Tombstone Items, verifying inventory...");
            var droppedItems = new List <ItemDrop.ItemData>();

            foreach (var inventory in player.GetAllInventories())
            {
                foreach (var itemData in inventory.m_inventory)
                {
                    var isOutsideInventoryGrid = itemData.m_gridPos.x < 0 ||
                                                 itemData.m_gridPos.x >= inventory.m_width ||
                                                 itemData.m_gridPos.y < 0 ||
                                                 itemData.m_gridPos.y >= inventory.m_height;
                    if (isOutsideInventoryGrid)
                    {
                        var itemText = Localization.instance.Localize(itemData.m_shared.m_name) + (itemData.m_stack > 1 ? $" x{itemData.m_stack}" : "");
                        EquipmentAndQuickSlots.LogWarning($"> Item Outside Inventory Grid! ({itemText}, <{itemData.m_gridPos.x},{itemData.m_gridPos.y}>)");
                        inventory.RemoveItem(itemData);
                        var addSuccess = inventory.AddItem(itemData);
                        if (!addSuccess)
                        {
                            EquipmentAndQuickSlots.LogError($"> Could not add item to inventory, item dropped! ({itemText})");
                            droppedItems.Add(itemData);
                            ItemDrop.DropItem(itemData, itemData.m_stack, player.transform.position + player.transform.forward * 2 + Vector3.up, Quaternion.identity);
                        }
                    }
                }
            }

            if (droppedItems.Count > 0)
            {
                var droppedItemTexts    = droppedItems.Select(x => Localization.instance.Localize(x.m_shared.m_name) + (x.m_stack > 1 ? $" x{x.m_stack}" : ""));
                var droppedItemsMessage = ">>>> ERROR IN TOMBSTONE RECOVERY - ITEMS DROPPED: " + string.Join(", ", droppedItemTexts);
                player.Message(MessageHud.MessageType.Center, droppedItemsMessage);
                Debug.LogError(droppedItemsMessage);
                EquipmentAndQuickSlots.LogError(droppedItemsMessage);
            }
            else
            {
                EquipmentAndQuickSlots.LogWarning("> No issues!");
            }
        }
Пример #3
0
        public void Load(Player fromPlayer)
        {
            if (fromPlayer == null)
            {
                EquipmentAndQuickSlots.LogError("Tried to load an ExtendedPlayerData with a null player!");
                return;
            }

            _player = fromPlayer;
            LoadValue(fromPlayer, "ExtendedPlayerData", out var init);
            EquipmentAndQuickSlots.LogWarning("Loaded ExtendedPlayerData");

            if (LoadValue(fromPlayer, nameof(QuickSlotInventory), out var quickSlotData))
            {
                var pkg = new ZPackage(quickSlotData);
                _isLoading = true;
                QuickSlotInventory.Load(pkg);

                if (!EquipmentAndQuickSlots.QuickSlotsEnabled.Value)
                {
                    _player.m_inventory.MoveAll(QuickSlotInventory);

                    pkg = new ZPackage(quickSlotData);
                    QuickSlotInventory.Save(pkg);
                    SaveValue(_player, nameof(QuickSlotInventory), pkg.GetBase64());
                }

                _isLoading = false;
            }

            if (LoadValue(fromPlayer, nameof(EquipmentSlotInventory), out var equipSlotData))
            {
                var pkg = new ZPackage(equipSlotData);
                _isLoading = true;
                EquipmentSlotInventory.Load(pkg);

                if (!EquipmentAndQuickSlots.EquipmentSlotsEnabled.Value)
                {
                    _player.m_inventory.MoveAll(EquipmentSlotInventory);

                    pkg = new ZPackage(quickSlotData);
                    EquipmentSlotInventory.Save(pkg);
                    SaveValue(_player, nameof(EquipmentSlotInventory), pkg.GetBase64());
                }

                _isLoading = false;
            }
        }
Пример #4
0
        private static bool Prefix(InventoryGrid __instance, ref InventoryGrid.Element __result, int x, int y, int width)
        {
            var index = y * width + x;

            if (index < 0 || index >= __instance.m_elements.Count)
            {
                EquipmentAndQuickSlots.LogError($"Tried to get element for item ({x}, {y}) in inventory ({__instance.m_inventory.m_name}) but that element is outside the bounds!");
                __result = null;
            }
            else
            {
                __result = __instance.m_elements[index];
            }

            return(false);
        }
Пример #5
0
        public void Save()
        {
            if (_player == null)
            {
                EquipmentAndQuickSlots.LogError("Tried to save an ExtendedPlayerData without a player!");
                return;
            }

            EquipmentAndQuickSlots.LogWarning("Saving ExtendedPlayerData");
            SaveValue(_player, "ExtendedPlayerData", "This player is using ExtendedPlayerData!");

            var pkg = new ZPackage();

            QuickSlotInventory.Save(pkg);
            SaveValue(_player, nameof(QuickSlotInventory), pkg.GetBase64());

            pkg = new ZPackage();
            EquipmentSlotInventory.Save(pkg);
            SaveValue(_player, nameof(EquipmentSlotInventory), pkg.GetBase64());
        }