public static void PushModdedData(GameV09 game) { foreach (var mod in data.segments) { Debug.Log($"Splicing data from mod {mod.modid} which {mod.identifiableData.Count} pieces of identifiable data"); foreach (var customData in mod.identifiableData) { switch (customData.dataID.Type) { case IdentifierType.ACTOR: game.actors.Add((VanillaActorData)customData.data); break; case IdentifierType.GADGET: game.world.placedGadgets[customData.dataID.stringID] = (VanillaGadgetData)customData.data; break; default: throw new NotImplementedException(); } } mod.playerData.Push(game.player); mod.pediaData.Push(game.pedia); foreach (var ammo in mod.customAmmo) { AmmoDataUtils.SpliceAmmoData(AmmoIdentifier.ResolveToData(ammo.Key, game), ammo.Value); } } ExtendedData.Pull(data); PersistentAmmoManager.Pull(data); }
private static void PushSegmentAmmoData(Game game, ModDataSegment mod) { foreach (var ammo in mod.customAmmo) { if (!ammo.Key.IsValid()) { continue; } AmmoDataUtils.SpliceAmmoData(AmmoIdentifier.ResolveToData(ammo.Key, game), ammo.Value); } }
public static void Prefix(GameV09 __instance, ref RemovalData __state) { __state = new RemovalData(); __state.AddAndRemoveWhereCustom(__instance.actors, __state.actors); __state.AddAndRemoveWhere(__instance.world.placedGadgets, __state.placedGadgets, (x) => SaveRegistry.IsCustom(x.Value)); __state.AddAndRemoveWhereCustom(__instance.ranch.plots, __state.landplots); __state.AddAndRemoveWhereCustom(__instance.player.upgrades, __state.upgrades); __state.AddAndRemoveWhereCustom(__instance.player.availUpgrades, __state.availUpgrades); __state.AddAndRemoveWhere(__instance.player.upgradeLocks, __state.upgradeLocks, (x) => SaveRegistry.IsCustom(x.Key)); __state.AddAndRemoveWhereCustom(__instance.player.blueprints, __state.blueprints); __state.AddAndRemoveWhereCustom(__instance.player.availBlueprints, __state.availBlueprints); __state.AddAndRemoveWhere(__instance.player.blueprintLocks, __state.blueprintLocks, (x) => SaveRegistry.IsCustom(x.Key)); __state.AddAndRemoveWhere(__instance.player.progress, __state.progress, (x) => SaveRegistry.IsCustom(x.Key)); __state.AddAndRemoveWhere(__instance.player.delayedProgress, __state.delayedProgress, (x) => SaveRegistry.IsCustom(x.Key)); __state.AddAndRemoveWhere(__instance.player.gadgets, __state.gadgets, (x) => SaveRegistry.IsCustom(x.Key)); __state.AddAndRemoveWhere(__instance.player.craftMatCounts, __state.craftMatCounts, (x) => SaveRegistry.IsCustom(x.Key)); __state.AddAndRemoveWhere(__instance.pedia.unlockedIds, __state.unlockedIds, (x) => SaveRegistry.IsCustom(Enum.Parse(typeof(PediaDirector.Id), x))); __state.AddAndRemoveWhere(__instance.pedia.completedTuts, __state.completedTuts, (x) => SaveRegistry.IsCustom(Enum.Parse(typeof(TutorialDirector.Id), x))); __state.AddAndRemoveWhere(__instance.pedia.popupQueue, __state.popupQueue, (x) => SaveRegistry.IsCustom(Enum.Parse(typeof(TutorialDirector.Id), x))); foreach (var data in AmmoDataUtils.GetAllAmmoData(__instance)) { var moddedData = AmmoDataUtils.RipOutModdedData(data); __state.addBacks.Add(() => { AmmoDataUtils.SpliceAmmoData(data, moddedData); }); } }
public static void Prefix(GameV12 __instance, ref RemovalData __state) { __state = new RemovalData(); __state.AddAndRemoveWhereCustom(__instance.actors); __state.AddAndRemoveWhere(__instance.world.placedGadgets, (x) => SaveRegistry.IsCustom(x.Value) || ModdedStringRegistry.IsModdedString(x.Key)); __state.AddAndRemoveWhere(__instance.ranch.plots, (x) => SaveRegistry.IsCustom(x) || ModdedStringRegistry.IsModdedString(x.id)); __state.AddAndRemoveWhere(__instance.world.gordos, x => SaveRegistry.IsCustom(x.Value) || ModdedStringRegistry.IsModdedString(x.Key)); __state.AddAndRemoveWhere(__instance.world.treasurePods, x => SaveRegistry.IsCustom(x.Value) || ModdedStringRegistry.IsModdedString(x.Key)); __state.AddAndRemoveWhere(__instance.world.offers, x => SaveRegistry.IsCustom(x.Value) || ModdedIDRegistry.IsModdedID(x.Key) || ExchangeOfferRegistry.IsCustom(x.Value)); __state.AddAndRemoveWhere(__instance.world.econSaturations, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhere(__instance.world.lastOfferRancherIds, ExchangeOfferRegistry.IsCustom); __state.AddAndRemoveWhere(__instance.world.pendingOfferRancherIds, ExchangeOfferRegistry.IsCustom); __state.AddAndRemoveWhereCustom(__instance.player.upgrades); __state.AddAndRemoveWhereCustom(__instance.player.availUpgrades); __state.AddAndRemoveWhere(__instance.player.upgradeLocks, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhereCustom(__instance.player.blueprints); __state.AddAndRemoveWhereCustom(__instance.player.availBlueprints); __state.AddAndRemoveWhere(__instance.player.blueprintLocks, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhere(__instance.player.progress, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhere(__instance.player.delayedProgress, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhere(__instance.player.gadgets, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhere(__instance.player.craftMatCounts, (x) => ModdedIDRegistry.IsModdedID(x.Key)); __state.AddAndRemoveWhereCustom(__instance.player.unlockedZoneMaps); __state.AddAndRemoveWhere(__instance.player.mail, (x) => MailRegistry.GetModForMail(x.messageKey) != null); __state.AddAndRemoveWhere(__instance.pedia.unlockedIds, (x) => ModdedIDRegistry.IsModdedID(Enum.Parse(typeof(PediaDirector.Id), x))); __state.AddAndRemoveWhere(__instance.pedia.completedTuts, (x) => ModdedIDRegistry.IsModdedID(Enum.Parse(typeof(TutorialDirector.Id), x))); __state.AddAndRemoveWhere(__instance.pedia.popupQueue, (x) => ModdedIDRegistry.IsModdedID(Enum.Parse(typeof(TutorialDirector.Id), x))); foreach (var data in AmmoDataUtils.GetAllAmmoData(__instance)) { if (AmmoIdentifier.TryGetIdentifier(data, __instance, out var id) && AmmoIdentifier.IsModdedIdentifier(id)) { __state.addBacks.Add(AmmoDataUtils.RemoveAmmoDataWithAddBack(data, __instance)); } else { var moddedData = AmmoDataUtils.RipOutModdedData(data); __state.addBacks.Add(() => { AmmoDataUtils.SpliceAmmoData(data, moddedData); }); } } void RemovePartial(object actor, RemovalData data) { if (CustomChecker.GetCustomLevel(actor) == CustomChecker.CustomLevel.PARTIAL) { var partial = PartialData.GetPartialData(actor.GetType(), true); partial.Pull(actor); data.addBacks.Add(() => { partial.Push(actor); }); } } foreach (var actor in __instance.actors) { RemovePartial(actor, __state); } foreach (var actor in __instance.ranch.plots) { RemovePartial(actor, __state); } foreach (var actor in __instance.world.placedGadgets) { RemovePartial(actor.Value, __state); } foreach (var actor in __instance.world.gordos) { RemovePartial(actor.Value, __state); } foreach (var actor in __instance.world.treasurePods) { RemovePartial(actor.Value, __state); } foreach (var offer in __instance.world.offers) { RemovePartial(offer.Value, __state); } var partialAppearance = new PartialAppearancesData(); partialAppearance.Pull(__instance.appearances); __state.addBacks.Add(() => partialAppearance.Push(__instance.appearances)); }