public static void SlamItOut(Dictionary <string, TagHelper> tagsToChange, Dictionary <int, CountryMergeHelper> statesToChangeOwnership, ProvincesToChange provincesToChange, List <Ideology> ideologies, string directory, int level) { DirectoryInfo directoryInfo = new DirectoryInfo(directory); if (IgnoredDirectories.Contains(directoryInfo.Name)) { return; } else { DirectoryInfo[] directories = directoryInfo.GetDirectories(); List <DirectoryInfo> bestFuckinList = new List <DirectoryInfo>(); if (directories != null && directories.Length > 0) { for (int i = 0; i < directories.Length; i++) { bestFuckinList.Add(directories[i]); } //LEVEL ONE if (bestFuckinList.Count > 0) { foreach (DirectoryInfo di in bestFuckinList) { SlamItOut(tagsToChange, statesToChangeOwnership, provincesToChange, ideologies, di.FullName, level + 1); } } } FileInfo[] filesRaw = directoryInfo.GetFiles(); List <FileInfo> files = new List <FileInfo>(); for (int i = 0; i < filesRaw.Length; i++) { files.Add(filesRaw[i]); } foreach (FileInfo fi in files) { ProcessFile(fi, level, directoryInfo, tagsToChange, statesToChangeOwnership, provincesToChange, ideologies); } } }
public static void ProcessFile(FileInfo fi, int level, DirectoryInfo directoryInfo, Dictionary <string, TagHelper> tagsToChange, Dictionary <int, CountryMergeHelper> statesToChangeOwner, ProvincesToChange provincesToChange, List <Ideology> ideologies) { if (File.Exists(fi.FullName)) { switch (level.ToString()) { case "0": break; case "1": if (directoryInfo.Name == "localisation") { if (fi.Name == "countries_mod_I_english.yml") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", "_")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); //have to change some ideologies in here } } if (directoryInfo.Name == "interface") { if (fi.Name == "converter_ideas.gfx") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("_", "_")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); } } if (directoryInfo.Name == "history") { break; } if (directoryInfo.Name == "common") { break; } if (directoryInfo.Name == "events") { if (fi.Name == "ElectionEvents.txt") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>(" ", "")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); //change ideology names in here as well } else if (fi.Name == "converterPoliticalEvents.txt") { //change ideology names in here } else if (fi.Name == "StabilityEvents.txt") { //change ideology names in here as well } else if (fi.Name == "WarJustification.txt") { //change ideology names in here. way at the end. } } break; //case "2": // break; case "2": bool filenameEdited = false; if (directoryInfo.Name == "names") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", " = {")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); } if (directoryInfo.Name == "countries" && directoryInfo.Parent.Name == "history") { //open a text file for the tag to be replaced //if one is found //scrub this file for every tag we're changing List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>(" ", "")); prefixSuffixes.Add(new Tuple <string, string>("", "_OOB")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); string fileName = fi.Name; string newFileName = ""; //direct lookup this file in our list of tags to change TagHelper th; if (tagsToChange.TryGetValue(fileName.Substring(0, 3), out th)) { if (fileName.Length > 3) { newFileName = directoryInfo.FullName + "\\" + th.NewTag + fileName.Substring(3); File.Delete(newFileName); File.Move(fi.FullName, newFileName); filenameEdited = true; } } if (filenameEdited) { fileName = newFileName; } } if (directoryInfo.Name == "country_tags") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", " =")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); } if (directoryInfo.Name == "ideas") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", "")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); string fileName = fi.Name; string newFileName = ""; //direct lookup this file in our list of tags to change TagHelper th; if (tagsToChange.TryGetValue(fileName.Substring(0, 3), out th)) { if (fileName.Length > 3) { newFileName = directoryInfo.FullName + "\\" + th.NewTag + fileName.Substring(3); File.Delete(newFileName); File.Move(fi.FullName, newFileName); filenameEdited = true; } } } if (directoryInfo.Name == "states") { List <Tuple <string, string> > countryPrefixSuffixes = new List <Tuple <string, string> >(); countryPrefixSuffixes.Add(new Tuple <string, string>("", "")); ProcessCountryTags(fi, tagsToChange, countryPrefixSuffixes); int stateId = 0; if (int.TryParse(fi.Name.Replace(fi.Extension, ""), out stateId)) { CountryMergeHelper cmh; List <string> provinces = new List <string>(); if (statesToChangeOwner.TryGetValue(stateId, out cmh)) { List <Tuple <string, string> > statesPrefixSuffixes = new List <Tuple <string, string> >(); statesPrefixSuffixes.Add(new Tuple <string, string>("owner = ", " ")); statesPrefixSuffixes.Add(new Tuple <string, string>("add core of = ", " ")); ChangeStateOwners(fi, cmh, statesPrefixSuffixes); } if (provincesToChange.provincesFrom.TryGetValue(stateId.ToString(), out provinces)) { //remove province from state RemoveProvincesFromState(fi, provinces); } provinces = new List <string>(); if (provincesToChange.provincesTo.TryGetValue(stateId.ToString(), out provinces)) { //add province to state AddProvincesToState(fi, provinces); } } } if (directoryInfo.Name == "units") { string fileName = fi.Name; TagHelper th; if (tagsToChange.TryGetValue(fileName.Substring(0, 3), out th)) { if (fileName.Length > 3) { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", "")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); string newFileName = directoryInfo.FullName + "\\" + th.NewTag + fileName.Substring(3); File.Delete(newFileName); File.Move(fi.FullName, newFileName); } } } if (directoryInfo.Name == "flags") { string fileName = fi.Name; TagHelper th; if (tagsToChange.TryGetValue(fileName.Substring(0, 3), out th)) { if (fileName.Length > 3) { string newFileName = directoryInfo.FullName + "\\" + th.NewTag + fileName.Substring(3); File.Delete(newFileName); File.Move(fi.FullName, newFileName); } } } if (directoryInfo.Name == "Ideologies") { //process ideologies file GenerateIdeologiesFile(fi, ideologies); } break; case "3": if (directoryInfo.Name == "names") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", " = {")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); } if (directoryInfo.Name == "colors") { List <Tuple <string, string> > prefixSuffixes = new List <Tuple <string, string> >(); prefixSuffixes.Add(new Tuple <string, string>("", " = {")); ProcessCountryTags(fi, tagsToChange, prefixSuffixes); } if (directoryInfo.Name == "small") { string fileName = fi.Name; TagHelper th; if (tagsToChange.TryGetValue(fileName.Substring(0, 3), out th)) { if (fileName.Length > 3) { string newFileName = directoryInfo.FullName + "\\" + th.NewTag + fileName.Substring(3); File.Delete(newFileName); File.Move(fi.FullName, newFileName); } } } if (directoryInfo.Name == "medium") { string fileName = fi.Name; TagHelper th; if (tagsToChange.TryGetValue(fileName.Substring(0, 3), out th)) { if (fileName.Length > 3) { string newFileName = directoryInfo.FullName + "\\" + th.NewTag + fileName.Substring(3); File.Delete(newFileName); File.Move(fi.FullName, newFileName); } } } break; } } else { Console.WriteLine("CAN't FIND THA F****N " + fi.FullName + "FILE"); //NEW COUNTRY; } }
static void Main(string[] args) { ////COMMON/NATIONAL_FOCUS. it's generating focus files for countries i'm making tags for. why. int level; //home string baseDirectory = "C:\\myprojects\\hoi4mod\\test"; string outputDirectory = @"C:\Users\Jobber 2k17\Documents\Paradox Interactive\Hearts of Iron IV\mod\test"; string dataDirectory = "C:\\myprojects\\hoi4mod\\data\\"; //work //string baseDirectory = "C:\\coreymods\\hoi4mod\\test"; //string outputDirectory = "C:\\coreymods\\hoi4mod\\testoutput"; //string dataDirectory = "C:\\coreymods\\hoi4mod\\data\\"; string mergeDataFilename = "TerritoryMergingData.csv"; string countriesFilename = "Countries.csv"; string provincesFilename = "Provinces.csv"; string ideologyPropertiesFilename = "IdeologyProperties.csv"; string ideologyTypesFilename = "IdeologyTypes.csv"; string ideologyFactionsFilename = "IdeologyFactions.csv"; string ideologyRulesFilename = "IdeologyRules.csv"; string ideologyModifiersFilename = "IdeologyModifiers.csv"; Dictionary <string, TagHelper> tagsToChange = new Dictionary <string, TagHelper>(); TextReader reader = new StreamReader(dataDirectory + countriesFilename); var csvReader = new CsvReader(reader); csvReader.Read(); csvReader.ReadHeader(); var records = csvReader.GetRecords <TagHelper>(); foreach (TagHelper th in records) { if (String.IsNullOrWhiteSpace(th.NewTag)) { continue; } else { tagsToChange.Add(th.Tag, th); } } reader.Dispose(); csvReader.Dispose(); Dictionary <int, CountryMergeHelper> stateChanges = new Dictionary <int, CountryMergeHelper>(); TextReader stateReader = new StreamReader(dataDirectory + mergeDataFilename); var stateCsvReader = new CsvReader(stateReader); stateCsvReader.Read(); stateCsvReader.ReadHeader(); var stateRecords = stateCsvReader.GetRecords <CountryMergeHelper>(); foreach (CountryMergeHelper cmh in stateRecords) { if (cmh.stateId == null || String.IsNullOrWhiteSpace(cmh.stateId)) { continue; } stateChanges.Add(int.Parse(cmh.stateId), cmh); } stateReader.Dispose(); stateCsvReader.Dispose(); Dictionary <int, ProvinceHelper> provinceChanges = new Dictionary <int, ProvinceHelper>(); TextReader provinceReader = new StreamReader(dataDirectory + provincesFilename); var provinceCsvReader = new CsvReader(provinceReader); provinceCsvReader.Read(); provinceCsvReader.ReadHeader(); var provinceRecords = provinceCsvReader.GetRecords <ProvinceHelper>(); ProvincesToChange provincesToChange = new ProvincesToChange(); provincesToChange.provincesFrom = new Dictionary <string, List <string> >(); provincesToChange.provincesTo = new Dictionary <string, List <string> >(); foreach (ProvinceHelper cmh in provinceRecords) { if (cmh.provinceId == null || String.IsNullOrWhiteSpace(cmh.provinceId)) { continue; } List <string> provincesFrom; if (provincesToChange.provincesFrom.TryGetValue(cmh.stateFrom, out provincesFrom)) { provincesFrom.Add(cmh.provinceId); provincesToChange.provincesFrom[cmh.stateFrom] = provincesFrom; } else { provincesFrom = new List <string>(); provincesFrom.Add(cmh.provinceId); provincesToChange.provincesFrom.Add(cmh.stateFrom, provincesFrom); } List <string> provincesTo; if (provincesToChange.provincesTo.TryGetValue(cmh.stateTo, out provincesTo)) { provincesTo.Add(cmh.provinceId); provincesToChange.provincesTo[cmh.stateTo] = provincesTo; } else { provincesTo = new List <string>(); provincesTo.Add(cmh.provinceId); provincesToChange.provincesTo.Add(cmh.stateTo, provincesTo); } } provinceReader.Dispose(); provinceCsvReader.Dispose(); //ideology readers setup List <Ideology> ideologies = new List <Ideology>(); TextReader ideologyPropertiesReader = new StreamReader(dataDirectory + ideologyPropertiesFilename); var ideologyPropertiesCsvReader = new CsvReader(ideologyPropertiesReader); ideologyPropertiesCsvReader.Read(); ideologyPropertiesCsvReader.ReadHeader(); var ideologyPropertiesList = ideologyPropertiesCsvReader.GetRecords <IdeologyProperties>(); ideologyPropertiesReader.Dispose(); ideologyPropertiesCsvReader.Dispose(); TextReader ideologyTypesReader = new StreamReader(dataDirectory + ideologyTypesFilename); var ideologyTypesCsvReader = new CsvReader(ideologyTypesReader); ideologyTypesCsvReader.Read(); ideologyTypesCsvReader.ReadHeader(); var ideologyTypesList = ideologyTypesCsvReader.GetRecords <IdeologyType>(); ideologyTypesReader.Dispose(); ideologyTypesCsvReader.Dispose(); TextReader ideologyFactionsReader = new StreamReader(dataDirectory + ideologyFactionsFilename); var ideologyFactionsCsvReader = new CsvReader(ideologyFactionsReader); ideologyFactionsCsvReader.Read(); ideologyFactionsCsvReader.ReadHeader(); var ideologyFactionsList = ideologyFactionsCsvReader.GetRecords <IdeologyFaction>(); ideologyFactionsReader.Dispose(); ideologyFactionsCsvReader.Dispose(); TextReader ideologyRulesReader = new StreamReader(dataDirectory + ideologyRulesFilename); var ideologyRulesCsvReader = new CsvReader(ideologyRulesReader); ideologyRulesCsvReader.Read(); ideologyRulesCsvReader.ReadHeader(); var ideologyRulesList = ideologyRulesCsvReader.GetRecords <IdeologyRules>(); ideologyRulesReader.Dispose(); ideologyRulesCsvReader.Dispose(); TextReader ideologyModifiersReader = new StreamReader(dataDirectory + ideologyModifiersFilename); var ideologyModifiersCsvReader = new CsvReader(ideologyModifiersReader); ideologyModifiersCsvReader.Read(); ideologyModifiersCsvReader.ReadHeader(); var ideologyModifiersList = ideologyModifiersCsvReader.GetRecords <IdeologyModifiers>(); ideologyModifiersReader.Dispose(); ideologyModifiersCsvReader.Dispose(); foreach (IdeologyProperties ip in ideologyPropertiesList) { Ideology ideology = new Ideology(); ideology.properties = ip; List <IdeologyType> ideologyTypes = new List <IdeologyType>(); foreach (IdeologyType ideologyType in ideologyTypesList) { if (ideologyType.name == ip.name) { ideologyTypes.Add(ideologyType); } } ideology.types = ideologyTypes; List <IdeologyFaction> ideologyFactions = new List <IdeologyFaction>(); foreach (IdeologyFaction idFa in ideologyFactionsList) { if (idFa.name == ip.name) { ideologyFactions.Add(idFa); } } ideology.factions = ideologyFactions; foreach (IdeologyRules ir in ideologyRulesList) { if (ir.name == ip.name) { ideology.rules = ir; } } foreach (IdeologyModifiers im in ideologyModifiersList) { if (im.name == ip.name) { ideology.modifiers = im; } } ideologies.Add(ideology); } ClearDirectory(outputDirectory); Directory.CreateDirectory(outputDirectory); Copy(baseDirectory, outputDirectory); level = 0; SlamItOut(tagsToChange, stateChanges, provincesToChange, ideologies, outputDirectory, level); //Console.WriteLine("finished tag " + th.oldTag + " to " + th.newTag); Console.WriteLine("TAll done."); Console.ReadLine(); }