string TemplateFormatter(GCATrait trait, GCAWriter fw) { return AdvantageFormatter(trait, fw); }
string SkillFormatter(GCATrait trait, GCAWriter fw) { var builder = new StringBuilder(); builder.AppendFormat("{0} {1}:", trait.DisplayName, trait.get_TagItem("type")); var label = builder.ToString(); builder.Clear(); switch ((SkillType)int.Parse(trait.get_TagItem("sd"))) { case SkillType.Skill: string stepOff = trait.get_TagItem("stepoff"); if (!stepOff.Equals(string.Empty)) { builder.Append(stepOff); string step = trait.get_TagItem("step"); if (!step.Equals(string.Empty)) builder.Append(step); else builder.Append("?"); } else { builder.Append("?+?"); } builder.AppendFormat(" - {0}", trait.get_TagItem("level")); break; case SkillType.Technique: builder.AppendFormat(" - {0}", trait.get_TagItem("level")); break; case SkillType.Combo: builder.AppendFormat(" - {0}", trait.get_TagItem("combolevel")); break; default: break; } builder.AppendFormat(" [{0}]", trait.Points); return fw.FormatTrait(label, builder.ToString()); }
string FormatTrait(GCATrait trait, GCAWriter fw, int childDepth = 0) { //fw.WriteLine("DEBUG TRAIT {0} DEPTH {1}", trait.Name, childDepth); TraitFormatter formatter = null; switch (trait.ItemType) { case TraitTypes.Attributes: formatter = AttributeFormatter; break; case TraitTypes.Languages: formatter = AdvantageFormatter; break; case TraitTypes.Cultures: formatter = AdvantageFormatter; break; case TraitTypes.Advantages: formatter = AdvantageFormatter; break; case TraitTypes.Perks: formatter = AdvantageFormatter; break; case TraitTypes.Disadvantages: formatter = AdvantageFormatter; break; case TraitTypes.Quirks: formatter = AdvantageFormatter; break; case TraitTypes.Skills: formatter = SkillFormatter; break; case TraitTypes.Spells: formatter = SkillFormatter; break; case TraitTypes.Equipment: formatter = EquipmentFormatter; break; case TraitTypes.Templates: formatter = TemplateFormatter; break; } var builder = new StringBuilder(); if ( string.IsNullOrEmpty(trait.get_TagItem("parentkey")) || childDepth > 0) { for (int i = 0; i < childDepth; i++) { builder.Append(":"); } builder.Append(formatter != null ? formatter(trait, fw) : string.Empty); builder.Append(Environment.NewLine); if (!string.IsNullOrEmpty(trait.get_ChildKeyList())) { var keys = trait.get_ChildKeyList().Split(','); //fw.WriteLine("DEBUG TRAIT '{0}' CHILDREN '{1}'", trait.Name, string.Join(",", keys)); foreach (var key in keys) { var cleanKey = key.Trim().Substring(1); var child = Traits.FirstOrDefault(x => x.IDKey.Equals(Convert.ToInt32( cleanKey))); //fw.WriteLine("DEBUG TRAIT '{0}' KEY '{1}' CHILD '{2}'", trait.Name, cleanKey, child); if (child != null) { //fw.WriteLine("DEBUG FORMATTING CHILD '{2}'", trait.Name, cleanKey, child); builder.Append(FormatTrait(child, fw, childDepth + 1)); } } } } return builder.ToString(); }
string EquipmentFormatter(GCATrait trait, GCAWriter fw) { var builder = new StringBuilder(); builder.Append(trait.DisplayName); var label = builder.ToString(); builder.Clear(); if (!string.IsNullOrEmpty(trait.NameExt) || trait.Mods.Count() > 0) builder.Append("("); if (!string.IsNullOrEmpty(trait.NameExt)) builder.Append(trait.NameExt); if (!string.IsNullOrEmpty(trait.NameExt) && trait.Mods.Count() > 0) builder.Append("; "); if (trait.Mods.Count() > 0) { var mods = new List<GCAModifier>(); foreach (GCAModifier item in trait.Mods) { mods.Add(item); } builder.Append(String.Join("; ", mods.Select(x => ModifierFormatter(x, fw)))); } if (!string.IsNullOrEmpty(trait.NameExt) || trait.Mods.Count() > 0) builder.Append(")"); if ( Convert.ToInt32( trait.get_TagItem("count")) > 1 ) { builder.AppendFormat(" {0} lbs, ${1} ×{2} = {3} lbs ${4}", trait.get_TagItem("precountweight"), trait.get_TagItem("precountcost"), trait.get_TagItem("count"), trait.get_TagItem("weight"), trait.get_TagItem("cost")); } else { builder.AppendFormat(" {0} lbs ${1}", trait.get_TagItem("weight"), trait.get_TagItem("cost")); } return fw.FormatTrait(label, builder.ToString()); }
string AttributeFormatter(GCATrait trait, GCAWriter fw) { var builder = new StringBuilder(); builder.Append(trait.DisplayName); var label = builder.ToString(); builder.Clear(); builder.Append(trait.DisplayScore); builder.AppendFormat(" [{0}]", trait.Points); return fw.FormatTrait(label, builder.ToString()); }
string AdvantageFormatter(GCATrait trait, GCAWriter fw) { var builder = new StringBuilder(); builder.Append(trait.Name); if (!trait.get_TagItem("level").Equals("1") || !string.IsNullOrEmpty(trait.get_TagItem("upto")) || !string.IsNullOrEmpty(trait.LevelName)) // has more than one level { builder.AppendFormat(" {0}", string.IsNullOrEmpty(trait.LevelName) ? trait.get_TagItem("level") : trait.LevelName); } var label = builder.ToString(); builder.Clear(); if (!string.IsNullOrEmpty(trait.NameExt) || trait.Mods.Count() > 0) builder.Append(" ("); if (!string.IsNullOrEmpty(trait.NameExt)) builder.Append(trait.NameExt); if (!string.IsNullOrEmpty(trait.NameExt) && trait.Mods.Count() > 0) builder.Append("; "); if (trait.Mods.Count() > 0) { var mods = new List<GCAModifier>(); foreach (GCAModifier item in trait.Mods) { mods.Add(item); } builder.Append(String.Join("; ", mods.Select(x => ModifierFormatter(x, fw)))); } if (!string.IsNullOrEmpty(trait.NameExt) || trait.Mods.Count() > 0) builder.Append(")"); builder.AppendFormat(" [{0}]", trait.Points); return fw.FormatTrait(label, builder.ToString()); }