private void HandleAttributes(ref Attributes attributes, string[] data) { Attributes attri = Attributes.no_custom; LookUpTables lookUp = new LookUpTables(); bool set_noCustom = false; attributes = attri; foreach (string str in data) { if (str != " ") { Attributes obj; if (Enum.TryParse <Attributes>(str.Trim(), out obj)) { if ((Attributes)obj == Attributes.no_custom) { set_noCustom = true; } else { attributes |= obj; } } } } if (set_noCustom) { attributes |= Attributes.no_custom; } else { attributes &= ~Attributes.no_custom; } }
override public void Parse(string[] path, out int lineNumber, out string currentLine) { LookUpTables lt = new LookUpTables(); StreamReader sr = new StreamReader(path[0]); string line = ""; string faction = ""; lineNumber = 0; currentLine = ""; while ((line = sr.ReadLine()) != null) { lineNumber++; currentLine = line; if (line.StartsWith("faction")) { string[] split = line.Split(' '); faction = split[1].Trim(); names.Add(faction, new List <string>()); } if (line.GetFirstWord() == "characters" && !line.StartsWith(";")) { line = sr.ReadLine(); while (!line.Contains("women") && !line.Contains("faction") && !line.Contains("surnames")) { if (line.Trim() != "" && !line.Trim().Contains(";;") && !line.Trim().Contains(";") && CheckForNonASCII(line.Trim())) { names[faction].Add(line.Trim()); } line = sr.ReadLine(); } } } }
private void M2TWHandleStatPri(ref M2StatWeapons stat_pri, string[] data) { if (data.Count() == 11) { LookUpTables lu = new LookUpTables(); stat_pri.atk[0] = Convert.ToInt32(data[0].Trim()); stat_pri.atk[1] = Convert.ToInt32(data[1].Trim()); stat_pri.missAttr[0] = Convert.ToInt32(data[3].Trim()); stat_pri.missAttr[1] = Convert.ToInt32(data[4].Trim()); stat_pri.missType = data[2].Trim(); stat_pri.WepFlags = lu.LookUpKey <WeaponType>(data[5].Trim()); stat_pri.TechFlags = (TechType)Enum.Parse(typeof(TechType), data[6].Trim()); stat_pri.DmgFlags = lu.LookUpKey <DamageType>(data[7].Trim()); stat_pri.SoundFlags = data[8].Trim(); stat_pri.atkDly[0] = Convert.ToInt32(data[9].Trim()); stat_pri.atkDly[1] = (float)Convert.ToDouble(data[10].Trim()); } else if (data.Count() == 12) { LookUpTables lu = new LookUpTables(); stat_pri.atk[0] = Convert.ToInt32(data[0].Trim()); stat_pri.atk[1] = Convert.ToInt32(data[1].Trim()); stat_pri.missAttr[0] = Convert.ToInt32(data[3].Trim()); stat_pri.missAttr[1] = Convert.ToInt32(data[4].Trim()); stat_pri.missType = data[2].Trim(); stat_pri.WepFlags = lu.LookUpKey <WeaponType>(data[5].Trim()); stat_pri.TechFlags = (TechType)Enum.Parse(typeof(TechType), data[6].Trim()); stat_pri.DmgFlags = lu.LookUpKey <DamageType>(data[7].Trim()); stat_pri.SoundFlags = data[8].Trim(); stat_pri.musket_shot_set = data[9].Trim(); stat_pri.atkDly[0] = Convert.ToInt32(data[10].Trim()); stat_pri.atkDly[1] = (float)Convert.ToDouble(data[11].Trim()); } }
private void HandleMental(ref Mentality mental, string[] data) { LookUpTables lookUp = new LookUpTables(); mental.morale = Convert.ToInt32(data[0].Trim()); mental.discipline = lookUp.LookUpKey <Statmental_discipline>(data[1].Trim()); mental.training = lookUp.LookUpKey <Statmental_training>(data[2].Trim()); }
public async Task TestGetCompanyLookUp() { ILookUpTables test = new LookUpTables(); var result = await test.GetCompanyLookUp(); result.Should().HaveCount(28, "This is awesome"); }
private void HandleOwnership(ref List <string> ownership, string[] data) { LookUpTables lookUp = new LookUpTables(); foreach (string str in data) { //TODO add optional verification against smf file here ownership.Add(str.Trim()); } }
override public void Parse(string[] paths, out int lineNumber, out string currentLine) { lineNumber = 0; currentLine = ""; if (!FileCheck(paths[0])) { DisplayLog(); return; } LookUpTables lookUp = new LookUpTables(); units.Clear(); string txt_Output = ""; string line = ""; int counter = -1; StreamReader edu = new StreamReader(paths[0]); while ((line = edu.ReadLine()) != null) { KeyValuePair <EDULineEnums, object> comment; currentLine = line; lineNumber++; ParseLine(line, ref counter, lineNumber, out comment); if (counter > -1 && comment.Value != null) { if (units[counter].comments.ContainsKey(comment.Key)) { if (units[counter].comments[comment.Key] is List <string> ) { ((List <string>)units[counter].comments[comment.Key]).Add((string)comment.Value); } else { string temp = (string)units[counter].comments[comment.Key]; units[counter].comments[comment.Key] = new List <string>() { temp, (string)comment.Value }; } } else { units[counter].comments.Add(comment.Key, comment.Value); } } } txt_Output += ("\n" + units.Count + "Units loaded from EDU"); edu.Close(); }
public bool CheckUnitBelongsToFactionAndCulture(string faction, Unit unit) { LookUpTables lut = new LookUpTables(); //TODO Add check against culture if (unit.ownership.Contains(faction)) { return(true); } else { return(false); } }
private void HandleStatPriArmour <T>(ref T statPriArmour, string[] data) { LookUpTables lookUp = new LookUpTables(); if (statPriArmour is StatPriArmour) { ((StatPriArmour)(object)statPriArmour).priArm[0] = Convert.ToInt32(data[0].Trim()); ((StatPriArmour)(object)statPriArmour).priArm[1] = Convert.ToInt32(data[1].Trim()); ((StatPriArmour)(object)statPriArmour).priArm[2] = Convert.ToInt32(data[2].Trim()); ((StatPriArmour)(object)statPriArmour).armSound = lookUp.LookUpKey <ArmourSound>(data[3].Trim()); } else if (statPriArmour is StatSecArmour) { ((StatSecArmour)(object)statPriArmour).secArmour[0] = Convert.ToInt32(data[0].Trim()); ((StatSecArmour)(object)statPriArmour).secArmour[1] = Convert.ToInt32(data[1].Trim()); ((StatSecArmour)(object)statPriArmour).secArmSound = lookUp.LookUpKey <ArmourSound>(data[2].Trim()); } }
private void HandleStatPriAttr(ref Stat_pri_attr stat_Pri_, string[] data) { LookUpTables lu = new LookUpTables(); Stat_pri_attr temp = Stat_pri_attr.no; stat_Pri_ = temp; if (data[0] == lu.LookUpString <Stat_pri_attr>(Stat_pri_attr.no)) { return; } foreach (string str in data) { stat_Pri_ |= lu.LookUpKey <Stat_pri_attr>(str.Trim()); } stat_Pri_ &= ~Stat_pri_attr.no; }
public List <Unit> FindUnitsByFaction(string faction) { LookUpTables lut = new LookUpTables(); try { string[] removaltags = new string[] { "non_combatant", "ship", }; //TODO add culture check List <Unit> unit = units.FindAll(x => x.ownership.Contains(faction)); List <Unit> removeUnit = new List <Unit>(); foreach (Unit u in unit) { foreach (string rem in removaltags) { if (u.category == rem) { removeUnit.Add(u); break; } } } foreach (Unit u in removeUnit) { unit.Remove(u); } return(unit); } catch (Exception ex) { Output(ex.ToString()); Output("\r\nFaction is likely wrong"); } return(new List <Unit>()); }
private void HandleFormation(ref Formation formation, string[] data) { LookUpTables lookUp = new LookUpTables(); int i = 0; int a = 0; int b = 0; foreach (string STRING in data) { if (i < 2) { formation.FormationTight[i] = STRING.Trim().UniversalParse(); } else if (a < 2) { formation.FormationSparse[a] = STRING.Trim().UniversalParse(); a++; } else if (b < 1) { formation.FormationRanks = Convert.ToInt32(STRING.Trim()); b++; } dynamic ft = lookUp.LookUpKey <FormationTypes>(STRING.Trim()); if (ft != null) { formation.FormationFlags |= ft; } i++; } }
override public void Parse(string[] filepath, out int lineNumber, out string currentLine) { lineNumber = 0; currentLine = ""; if (!FileCheck(filepath[0])) { DisplayLog(); return; } LookUpTables tb = new LookUpTables(); string PATH = filepath[0]; string line; StreamReader strat = new StreamReader(PATH); string faction = ""; M2Faction newFaction = new M2Faction(); M2DSCharacter newCharacter = new M2DSCharacter(); bool newfactionReady = false; bool newcharacterReady = false; //get factions while ((line = strat.ReadLine()) != null) { lineNumber++; currentLine = line; if (line.StartsWith("campaign") && !line.Contains("script")) { string[] split = line.Split('\t'); campaign = split[2]; } if (line.StartsWith("playable")) { while ((line = this.ContinueParseAndCountLine(ref strat, ref lineNumber)).TrimEnd() != "end") { playableFactions.Add(line.Trim()); } } if (line.StartsWith("unlockable")) { while ((line = this.ContinueParseAndCountLine(ref strat, ref lineNumber)).TrimEnd() != "end") { unlockableFactions.Add(line.Trim()); } } if (line.StartsWith("nonplayable")) { while ((line = this.ContinueParseAndCountLine(ref strat, ref lineNumber)).TrimEnd() != "end") { campaignNonPlayable.Add(line.Trim()); } } if (line.StartsWith("start_date")) { string temp = line.RemoveFirstWord('\t'); startDate = temp.Trim(); } if (line.StartsWith("end_date")) { string temp = line.RemoveFirstWord('\t'); endDate = temp.Trim(); } if (line.StartsWith("timescale")) { string temp = line.RemoveFirstWord('\t'); timescale = (float)Convert.ToDouble(temp.Trim()); } if (line.StartsWith("brigand_spawn_value")) { string temp = line.RemoveFirstWord(); brigand_spawn_value = Convert.ToInt32(temp.Trim()); } if (line.StartsWith("pirate_spawn_value")) { string temp = line.RemoveFirstWord(); pirate_spawn_value = Convert.ToInt32(temp.Trim()); } if (line.StartsWith("landmark")) { string[] split = line.Split('\t'); string name = split[1].Trim(); string x = split[2].Replace(",", "").Trim(); int[] coords = new int[] { Convert.ToInt32(x), Convert.ToInt32(split[3].Trim()) }; Landmark res = new Landmark(name, coords); landmarks.Add(res); } if (line.StartsWith("resource")) { string[] split = line.Split('\t'); string name = split[1].Trim(); name = name.Replace(",", ""); string x = split[2].Replace(",", "").Trim(); int[] coords = new int[] { Convert.ToInt32(x), Convert.ToInt32(split[3].Trim()) }; Resource res = new Resource(name, coords); resources.Add(res); } if (line.StartsWith("faction") && !line.StartsWith("faction_relationships") && !line.StartsWith("faction_standings")) { if (newfactionReady) { //catch final character if (newCharacter.gender != null) { newFaction.characters.Add(new M2DSCharacter(newCharacter)); } factions.Add(new M2Faction(newFaction)); newFaction = new M2Faction(); newfactionReady = false; newCharacter = new M2DSCharacter(); newcharacterReady = false; } newfactionReady = true; newFaction.Clear(); string[] split = line.Split(',', ' ', '\t'); faction = split[1]; newFaction.name = faction; newFaction.ai[0] = split[3].Trim(); newFaction.ai[1] = split[4].Trim(); //FactionRosters.AddFactionKey(tb.LookUpKey<FactionOwnership>(split[1])); } if (line.StartsWith("superfaction")) { string superfac = line.RemoveFirstWord(); newFaction.superFaction = superfac.Trim(); } if (line.StartsWith("denari")) { string[] den = line.Split('\t', ' '); newFaction.denari = Convert.ToInt32(den[1].Trim()); } if (line.StartsWith("denari_kings_purse")) { string[] den = line.Split('\t', ' ').CleanStringArray(); newFaction.kings_purse = Convert.ToInt32(den[1].Trim()); } if (line.StartsWith("dead_until_resurrected")) { newFaction.isDeadUntilResurrected = true; } if (line.StartsWith("ai_label")) { string[] den = line.Split('\t', ' ').CleanStringArray(); newFaction.ai_label = den[1].Trim(); } if (line.StartsWith("settlement")) { string[] typeCheck = line.Split(' '); //check for castle M2Settlement tempSettlement; List <DSBuilding> b_types = new List <DSBuilding>(); string s_level = "", region = "", faction_creator = "", type = ""; if (typeCheck.Count() > 1) { type = typeCheck[1]; } int yearFounded = 0, population = 100; while ((line = this.ContinueParseAndCountLine(ref strat, ref lineNumber).TrimEnd()) != "}") { if (line.Trim().StartsWith("level")) { string trimmed = line.RemoveFirstWord(); trimmed = trimmed.Trim(); s_level = trimmed; } else if (line.Trim().StartsWith("region")) { string trimmed = line.RemoveFirstWord(); trimmed = trimmed.Trim(); region = trimmed; } else if (line.Trim().StartsWith("year_founded")) { string trimmed = line.RemoveFirstWord(); trimmed = trimmed.Trim(); yearFounded = Convert.ToInt32(trimmed); } else if (line.Trim().StartsWith("population")) { string trimmed = line.RemoveFirstWord(); trimmed = trimmed.Trim(); population = Convert.ToInt32(trimmed); } else if (line.Trim().StartsWith("faction_creator")) { string trimmed = line.RemoveFirstWord(); trimmed = trimmed.Trim(); faction_creator = trimmed; } else if (line.Trim().StartsWith("type")) { string trimmed = line.RemoveFirstWord(); trimmed = trimmed.Trim(); DSBuilding dsb = new DSBuilding(); string[] split = line.Split(' '); dsb.type = split[1].Trim(); dsb.name = split[2].Trim(); b_types.Add(dsb); } } //Output("\n" + "Added: " + region + "\n"); tempSettlement = new M2Settlement(s_level, region, faction_creator, b_types, yearFounded, population, type); newFaction.settlements.Add(tempSettlement); } if (line.StartsWith("character") && !line.StartsWith("character_record")) { if (newcharacterReady) { newFaction.characters.Add(newCharacter); newcharacterReady = false; } newcharacterReady = true; newCharacter = new M2DSCharacter(); string[] split = line.Split('\t', ','); if (split.Count() == 7) { newCharacter.name = split[1].Trim(); newCharacter.type = split[2].Trim(); newCharacter.gender = split[3].Trim(); string[] ageSplit = split[4].Split(' '); newCharacter.age = Convert.ToInt32(ageSplit[2].Trim()); string[] xsplit = split[5].Split(' '); string[] ysplit = split[6].Split(' '); newCharacter.coords[0] = Convert.ToInt32(xsplit[2].Trim()); newCharacter.coords[1] = Convert.ToInt32(ysplit[2].Trim()); line = this.ContinueParseAndCountLine(ref strat, ref lineNumber); //move to traits string traits = line.RemoveFirstWord(); newCharacter.traits = traits.Trim(); } else if (split.Count() == 8) { newCharacter.name = split[1].Trim(); newCharacter.gender = split[3].Trim(); newCharacter.type = split[2].Trim(); newCharacter.rank = split[4].Trim(); string[] ageSplit = split[5].Split(' '); newCharacter.age = Convert.ToInt32(ageSplit[2].Trim()); string[] xsplit = split[6].Split(' '); string[] ysplit = split[7].Split(' '); newCharacter.coords[0] = Convert.ToInt32(xsplit[2].Trim()); newCharacter.coords[1] = Convert.ToInt32(ysplit[2].Trim()); } } if (line.StartsWith("traits")) { string traits = line.RemoveFirstWord(); newCharacter.traits = traits.Trim(); } if (line.StartsWith("ancillaries")) { string ancillaries = line.RemoveFirstWord(); newCharacter.ancillaries = ancillaries; } if (line.StartsWith("unit")) { string[] army = line.Split('\t', ' '); bool nameFetched = false; string name = ""; int exp = 0; int weapon = 0; int armour = 0; for (int i = 0; i < army.Length; i++) { if (army[i] == "armour") { nameFetched = true; armour = Convert.ToInt32(army[i + 1]); } if (army[i] == "weapon") { nameFetched = true; weapon = Convert.ToInt32(army[i + 1]); } if (army[i] == "exp") { nameFetched = true; exp = Convert.ToInt32(army[i + 1]); } if (army[i] != "unit" && !nameFetched) { name += army[i] + " "; } } newCharacter.army.Add(new DSUnit(name.Trim(), exp, armour, weapon)); } if (line.StartsWith("character_record")) { string record = line.RemoveFirstWord('\t');// M2CharacterRecord cr = new M2CharacterRecord(); string[] recordSplit = record.Split(','); cr.name = recordSplit[0].Trim(); cr.gender = recordSplit[1].Trim(); string[] age = recordSplit[2].Split(' '); cr.age = Convert.ToInt32(age[2].Trim()); cr.status = recordSplit[3].Trim(); cr.leader = recordSplit[4].Trim(); newFaction.characterRecords.Add(new M2CharacterRecord(cr)); } if (line.StartsWith("relative")) { string relative = line.RemoveFirstWord('\t'); newFaction.relatives.Add(relative); } if (line.StartsWith("faction_standings")) { string[] split = line.Split('\t', ','); split = split.CleanStringArray(); int count = split.Count(); count -= 3; //amount of faction entries required string fo = split[1]; Dictionary <object, List <string> > f_a = new Dictionary <object, List <string> >(); for (int i = 0; i < count; i++) { float temp = (float)Convert.ToDouble(split[2]); string f = split[i + 3]; if (!f_a.ContainsKey(temp)) { f_a.Add(temp, new List <string> { f }); } else { f_a[temp].Add(f); } } if (!m2twAttitudes.attitudes.ContainsKey(fo)) { m2twAttitudes.attitudes.Add(fo, new Dictionary <object, List <string> >(f_a)); } else { foreach (var cf in f_a) { foreach (var toAdd in cf.Value) { if (!m2twAttitudes.attitudes[fo].ContainsKey(cf.Key)) { m2twAttitudes.attitudes[fo].Add(cf.Key, new List <string> { toAdd }); } else { m2twAttitudes.attitudes[fo][cf.Key].Add(toAdd); } } } } } /* if (line.StartsWith("faction_relationships")) * { * string[] split = line.Split('\t', ','); * * split = Misc_Data.CleanStringArray(split); * * int count = split.Count(); * count -= 3; //amount of faction entries required * * string fo = split[1]; * * Dictionary<int, List<string>> f_a = new Dictionary<int, List<string>>(); * for (int i = 0; i < count; i++) * { * int temp = Convert.ToInt32(split[2]); * string f = split[i + 3]; * if (!f_a.ContainsKey(temp)) * f_a.Add(temp, new List<string> { f }); * else f_a[temp].Add(f); * } * * if (!factionRelationships.attitudes.ContainsKey(fo)) * { * factionRelationships.attitudes.Add(fo, new Dictionary<int, List<string>>(f_a)); * } * * else * { * foreach (var cf in f_a) * { * foreach (var toAdd in cf.Value) * { * if (!factionRelationships.attitudes[fo].ContainsKey(cf.Key)) * { * factionRelationships.attitudes[fo].Add(cf.Key, new List<string> { toAdd }); * } * * else factionRelationships.attitudes[fo][cf.Key].Add(toAdd); * * } * } * } * };*/ } if (newfactionReady) //catches final faction { //catch final character newFaction.characters.Add(newCharacter); factions.Add(new M2Faction(newFaction)); newfactionReady = false; newCharacter = new M2DSCharacter(); newcharacterReady = false; } strat.Close(); //Descr_Strat ds = new Descr_Strat(settlementOwnership, settlements, ds_data); }
public virtual string unitOutput() { LookUpTables lookTables = new LookUpTables(); string unitString = ""; bool firstAttr = false; Action <Action> setAndTagChanged = (action) => { if (firstAttr == false) { firstAttr = true; } else { unitString += ", "; } action(); }; unitString += LineOutput(type, "type"); unitString += LineOutput(dic, "dictionary"); unitString += LineOutput(category, "category"); unitString += LineOutput(uClass, "class"); unitString += LineOutput(voice, "voice_type"); unitString += SpecialOutput(new object[] { soldier.name, soldier.number, soldier.extras, soldier.collMass.UniversalOutput() }, "soldier"); if (officer.Count > 0) { unitString += LineOutput(officer[0], "officer"); } if (officer.Count > 1) { unitString += LineOutput(officer[1], "officer"); } if (officer.Count > 2) { unitString += LineOutput(officer[2], "officer"); } unitString += LineOutput(engine, "engine"); unitString += LineOutput(animal, "animal"); unitString += LineOutput(mount, "mount"); if (mountEffect.mountType.Count() > 0) { unitString += "\r\nmount_effect" + identSpacing(identifierLength("mount_effect")); for (int i = 0; i < mountEffect.mountType.Count(); i++) { if (mountEffect.modifier[i] < 0) { setAndTagChanged(() => unitString += (mountEffect.mountType[i]) + " " + mountEffect.modifier[i].ToString()); } else { setAndTagChanged(() => unitString += (mountEffect.mountType[i]) + " +" + mountEffect.modifier[i].ToString()); } } unitString += "\r\n"; } unitString += LineOutput(naval, "ship"); unitString += LineOutput(EnumFlagsToString(attributes), "attributes"); unitString += SpecialOutput(new object[] { formation.FormationTight[0].UniversalOutput(), formation.FormationTight[1].UniversalOutput(), formation.FormationSparse[0].UniversalOutput(), formation.FormationSparse[1].UniversalOutput(), formation.FormationRanks, EnumFlagsToString(formation.FormationFlags) }, "formation"); unitString += ListOutput(health, "stat_health"); unitString += SpecialOutput(new object[] { priWep.atk[0], priWep.atk[1], priWep.missType, priWep.missAttr[0], priWep.missAttr[1], priWep.WepFlags, priWep.TechFlags, priWep.DmgFlags, priWep.SoundFlags, priWep.atkDly[0], priWep.atkDly[1] }, "stat_pri"); unitString += LineOutput(EnumFlagsToString(priAttri, false, new Dictionary <Enum, string>() { { Stat_pri_attr.thrown_ap, "thrown ap" } }), "stat_pri_attr"); unitString += SpecialOutput(new object[] { secWep.atk[0], secWep.atk[1], secWep.missType, secWep.missAttr[0], secWep.missAttr[1], secWep.WepFlags, secWep.TechFlags, secWep.DmgFlags, secWep.SoundFlags, secWep.atkDly[0], secWep.atkDly[1] }, "stat_sec"); unitString += LineOutput(EnumFlagsToString(secAttri, false, new Dictionary <Enum, string>() { { Stat_pri_attr.thrown_ap, "thrown ap" } }), "stat_sec_attr"); unitString += SpecialOutput(new object[] { priArm.priArm[0], priArm.priArm[1], priArm.priArm[2], priArm.armSound }, "stat_pri_armour"); unitString += SpecialOutput(new object[] { secArmr.secArmour[0], secArmr.secArmour[1], secArmr.secArmSound }, "stat_sec_armour"); unitString += LineOutput(heat, "stat_heat"); unitString += ListOutput(ground, "stat_ground"); unitString += SpecialOutput(new object[] { mental.morale, mental.discipline, mental.training }, "stat_mental"); unitString += LineOutput(chargeDist, "stat_charge_dist"); unitString += LineOutput(fireDelay, "stat_fire_delay"); unitString += ListOutput(food, "stat_food"); unitString += ListOutput(cost, "stat_cost"); unitString += ListOutput(ownership.ToArray(), "ownership"); string[] lines = unitString.Split('\r', '\n').CleanStringArray(); Dictionary <EDULineEnums, int> multiple = new Dictionary <EDULineEnums, int>(); for (int i = 0; i < lines.Count(); i++) { EDULineEnums identifier; bool isIdentifier = Enum.TryParse <EDULineEnums>(lines[i].GetFirstWord().Capitalise(), out identifier); if (isIdentifier) { if (comments[identifier] is string) { lines[i] += "\t\t" + comments[identifier]; } else if (comments[identifier] is List <string> ) { if (!multiple.ContainsKey(identifier)) { multiple.Add(identifier, 0); } else { multiple[identifier] += 1; } lines[i] += "\t\t" + ((List <string>)comments[identifier])[multiple[identifier]]; } } } return(lines.ArrayToString(false, true) + "\r\n"); }