public static void SaveEventModStarted(CustomEventMod customEvent) { if (!HasEventModBeenLoadedBefore(customEvent)) { ModsLoadedBefore.Add(customEvent); } SaveModProgress(); }
public static bool HasEventModBeenLoadedBefore(CustomEventMod customEvent) { foreach (CustomEventMod eMod in ModsLoadedBefore) { if (eMod.Name == customEvent.Name && eMod.Author == customEvent.Author && eMod.Version == customEvent.Version) { return(true); } } return(false); }
public static bool EventModLoaded(CustomEventMod mod) { foreach (CustomEventMod eMod in _customEventMods) { if (eMod.Name == mod.Name && eMod.Author == mod.Author && eMod.Version == mod.Version) { return(true); } } return(false); }
public static void LoadModEndings() { DirectoryInfo[] directories = new DirectoryInfo(ModConstants.MODS_LOCATION).GetDirectories(); List <CSecretEndingConditions> modEndingConditions = new List <CSecretEndingConditions>(); finalScenes.Clear(); modEndings.Clear(); foreach (DirectoryInfo directory in directories) { FileInfo modInfo = directory.GetFiles("*.xml").FirstOrDefault(); if (modInfo == null) { continue; } CustomEventMod mod = CustomEventMod.Load(modInfo.FullName); if (!EventLoader.EventLoader.EventModLoaded(mod)) { continue; } string[] files = Directory.GetFiles(directory.FullName + "/EndingConditions", "*.xml"); foreach (string file in files) { GeneralManager.Instance.LogToFileOrConsole("[PromDate] Loading ending conditions from " + file); EndingContainer endingContainer = EndingContainer.Load(file); foreach (Ending ending in endingContainer.Endings) { GeneralManager.Instance.LogToFileOrConsole("\t[PromDate] Loading ending " + ending.SecretEndingName); EventManager.CSecretEndingConditions endCond = EndingContainer.convertEndingConditions(ending, mod); modEndingConditions.Add(endCond); EndingHelper.modEndings.Add(EventManager.Instance.Events[endCond.cSecretEndingIndex]); FinalSceneInfo sceneInfo = new FinalSceneInfo() { FromPromScene = endCond.cSecretEndingIndex, SceneId = endCond.cSecretEndingIndex + 1 }; if (EventManager.Instance.Events[endCond.cSecretEndingIndex].ArgumentTags.Any(arg => arg.Contains("SFX"))) { sceneInfo.AudioClip = EventManager.Instance.Events[endCond.cSecretEndingIndex].ArgumentTags.First(arg => arg.Contains("SFX")).Split('_')[1]; } EndingHelper.finalScenes.Add(sceneInfo); } } } EventManager.Instance.SecretEndingsConditions = EventManager.Instance.SecretEndingsConditions.Concat(modEndingConditions.ToArray()).ToArray(); }
public static void LoadNewEvents(DirectoryInfo dir, CustomEventMod mod) { int num = 0; FileInfo[] files = new DirectoryInfo(dir.FullName + "/Events").GetFiles("*.xml"); foreach (FileInfo file in files) { EventContainer eventContainer = EventContainer.Load(file.FullName); foreach (ModEvent eve in eventContainer.Events) { GeneralManager.Instance.LogToFileOrConsole("\t[PromDate] Loading event " + eve.Name, false, false); CEventFlow newCustomEvent = EventContainer.eventToFlow(eve); newCustomEvent.EventName = EventHelper.AppendModName(newCustomEvent.EventName, mod); customEvents.Add(newCustomEvent); num++; } } }
private void InitCustomEvents() { DirectoryInfo[] modDirectories = (new DirectoryInfo(ModConstants.MODS_LOCATION)).GetDirectories(); foreach (DirectoryInfo dir in modDirectories) { string modPath = dir.GetFiles("*.xml").FirstOrDefault().FullName; if (String.IsNullOrEmpty(modPath)) { continue; } CustomEventMod customEvent = CustomEventMod.Load(modPath); AudioHelper.Instance.LoadAudio(dir); SpriteHelper.LoadSprites(dir); EventLoader.LoadNewEvents(dir, customEvent); ShopHelper.LoadItemsFromFile(dir, customEvent); ProgressTracker.SaveEventModStarted(customEvent); EventLoader.CustomEvents.Add(customEvent); } }
public static void LoadItemsFromFile(DirectoryInfo dir, CustomEventMod customEvent) { string[] files = Directory.GetFiles(dir.FullName + "/Items", "*.xml"); foreach (string file in files) { GeneralManager.Instance.LogToFileOrConsole("[PromDate] Loading items from " + file); ItemContainer itemContainer = ItemContainer.Load(file); foreach (Item item in itemContainer.Items) { GeneralManager.Instance.LogToFileOrConsole("[PromDate] Loading item: " + item.Name); AddShopItem(item.Name, item.Price, item.DescriptionTitle, item.Description, item.ShopkeeperMood, SpriteHelper.LookupCustomSprite(item.SmallSprite), SpriteHelper.LookupCustomSprite(item.LargeSprite), item.EventItem); if (!string.IsNullOrEmpty(item.UnlockDescription)) { if (ProgressTracker.HasEventModBeenLoadedBefore(customEvent)) { return; } GeneralManager.CUnlockableConditions cond = new GeneralManager.CUnlockableConditions(item.Name, NGameConstants.EUnlockableType.Item, "", new GeneralManager.CUnlockableRequirement[0], SpriteHelper.LookupCustomSprite(item.LargeSprite), item.UnlockDescription); (typeof(GeneralManager).GetField("mUnlockedThisRun", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(GeneralManager.Instance) as List <GeneralManager.CUnlockableConditions>).Add(cond); } } } GeneralManager.Instance.CheckMoreUnlockablesThisRun(); }
public static string AppendModName(string from, CustomEventMod mod) { return(from + "_" + mod.Name.Replace(' ', '_')); }
public static EventManager.CSecretEndingConditions convertEndingConditions(Ending ending, CustomEventMod mod) { List <int> eventsRequired = new List <int>(); foreach (string req in ending.EventsRequired) { string required = EventHelper.AppendModName(req, mod); int evIndex = EventManager.Instance.Events.TakeWhile(ev => !ev.EventName.Contains(required)).Count(); eventsRequired.Add(evIndex); } ending.SecretEndingName = EventHelper.AppendModName(ending.SecretEndingName, mod); int secretEndingIndex = EventManager.Instance.Events.TakeWhile(ev => !ev.EventName.Contains(ending.SecretEndingName)).Count(); EventManager.CSecretEndingConditions endingConditions = new EventManager.CSecretEndingConditions(ending.SecretEndingName, secretEndingIndex, eventsRequired.ToArray(), ending.ChoicesNeeded.Select(a => a.Choices.Select(str => (EEventChoiceSelected)Enum.Parse(typeof(EEventChoiceSelected), str)).ToArray()).ToArray(), ending.NpcsChosenForProm.ToArray(), ending.NpcRestriction, ending.LovePointsNeededWithNpc, ending.ContinuitySuccessNeeded); return(endingConditions); }