public void DepleteNuclearModule(Equipment modules, string slotName)
        {
            InventoryItem inventoryItem = modules.RemoveItem(slotName, true, false);

            GameObject.Destroy(inventoryItem.item.gameObject);
            modules.AddItem(slotName, CyclopsUpgrade.SpawnCyclopsModule(this.TechType), true);
            ErrorMessage.AddMessage(DepletedEventMsg);
        }
        private void DepleteNuclearModule(Equipment modules, string slotName)
        {
            MCUServices.Logger.Debug("Nuclear module depleting");

            InventoryItem inventoryItem = modules.RemoveItem(slotName, true, false);

            if (inventoryItem != null)
            {
                GameObject.Destroy(inventoryItem.item.gameObject);
            }

            if (modules.AddItem(slotName, CyclopsUpgrade.SpawnCyclopsModule(TechType.DepletedReactorRod), true))
            {
                ErrorMessage.AddMessage(CyclopsNuclearModule.DepletedEventMsg);
            }
        }
Exemplo n.º 3
0
        public void OnProtoDeserializeObjectTree(ProtobufSerializer serializer)
        {
            if (SaveData.Load())
            {
                // Because the items here aren't being serialized with everything else normally,
                // I've used custom save data to handle whatever gets left in these slots.

                QuickLogger.Debug("Loading save data");
                // The following is a recreation of the essential parts of the Equipment.ResponseEquipment method.
                for (int s = 0; s < SlotHelper.SlotNames.Length; s++)
                {
                    string slot = SlotHelper.SlotNames[s];
                    // These slots need to be added before we can add items to them
                    this.Modules.AddSlot(slot);

                    EmModuleSaveData savedModule = SaveData.GetModuleInSlot(slot);

                    if (savedModule.ItemID == 0) // (int)TechType.None
                    {
                        continue;                // Nothing here
                    }
                    var           techtype    = (TechType)savedModule.ItemID;
                    InventoryItem spanwedItem = CyclopsUpgrade.SpawnCyclopsModule(techtype);

                    if (spanwedItem == null)
                    {
                        QuickLogger.Warning($"Unknown upgrade module '{techtype.AsString()}' could not be spamned in from save data");
                        continue;
                    }

                    QuickLogger.Debug($"Spawned in {techtype.AsString()} from save data");

                    if (savedModule.RemainingCharge > 0f) // Modules without batteries are stored with a -1 value for charge
                    {
                        spanwedItem.item.GetComponent <Battery>().charge = savedModule.RemainingCharge;
                    }

                    this.Modules.AddItem(slot, spanwedItem, true);
                }
            }
            else
            {
                UnlockDefaultModuleSlots();
            }
        }
        /// <summary>
        /// Called when loading the game from a save file.
        /// </summary>
        /// <param name="serializer">The serializer.</param>
        /// <see cref="IProtoEventListener"/>
        void IProtoEventListener.OnProtoDeserialize(ProtobufSerializer serializer)
        {
            if (saveData == null)
            {
                PrepareSaveData();
            }

            if (this.Modules == null)
            {
                InitializeModules();
            }

            this.Modules.Clear();

            QuickLogger.Debug("Checking save data");

            if (saveData != null && saveData.Load())
            {
                // Because the items here aren't being serialized with everything else normally,
                // I've used custom save data to handle whatever gets left in these slots.

                QuickLogger.Debug("Loading save data");
                // The following is a recreation of the essential parts of the Equipment.ResponseEquipment method.
                for (int s = 0; s < TotalSlots; s++)
                {
                    string slot = UpgradeSlotArray[s].slotName;
                    // These slots need to be added before we can add items to them
                    this.Modules.AddSlot(slot);

                    EmModuleSaveData savedModule = saveData.GetModuleInSlot(slot);

                    if (savedModule.ItemID == 0) // (int)TechType.None
                    {
                        continue;                // Nothing here
                    }
                    var    techtype = (TechType)savedModule.ItemID;
                    string itemName = techtype.AsString();

                    QuickLogger.Debug($"Spawning '{itemName}' from save data");
                    InventoryItem spanwedItem = CyclopsUpgrade.SpawnCyclopsModule(techtype);

                    if (spanwedItem == null)
                    {
                        QuickLogger.Warning($"Unknown upgrade module '{itemName}' could not be spamned in from save data");
                        continue;
                    }

                    QuickLogger.Debug($"Spawned in {itemName} from save data");

                    if (savedModule.RemainingCharge > 0f) // Modules without batteries are stored with a -1 value for charge
                    {
                        spanwedItem.item.GetComponent <Battery>().charge = savedModule.RemainingCharge;
                    }

                    this.Modules.AddItem(slot, spanwedItem, true);
                    OnSlotEquipped(slot, spanwedItem);
                }
            }
            else
            {
                QuickLogger.Debug("No save data found.");
                this.Modules.AddSlots(SlotNames);
            }
        }