public void OnProtoSerialize(ProtobufSerializer serializer) { for (int s = 0; s < SlotHelper.SlotNames.Length; s++) { string slot = SlotHelper.SlotNames[s]; EmModuleSaveData savedModule = SaveData.GetModuleInSlot(slot); InventoryItem item = this.Modules.GetItemInSlot(slot); if (item == null) { savedModule.ItemID = (int)TechType.None; savedModule.RemainingCharge = -1f; } else { savedModule.ItemID = (int)item.item.GetTechType(); Battery battery = item.item.GetComponent <Battery>(); if (battery == null) { savedModule.RemainingCharge = -1f; } else { savedModule.RemainingCharge = battery._charge; } } } SaveData.Save(); }
public AuxCyUpgradeConsoleSaveData(string preFabID) : base("AuxUpgradeConsoleSaveData", AucUpConsoleDefs) { ID = preFabID; Module1 = (EmModuleSaveData)base.Properties["M1"]; Module2 = (EmModuleSaveData)base.Properties["M2"]; Module3 = (EmModuleSaveData)base.Properties["M3"]; Module4 = (EmModuleSaveData)base.Properties["M4"]; Module5 = (EmModuleSaveData)base.Properties["M5"]; Module6 = (EmModuleSaveData)base.Properties["M6"]; }
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(); } }