protected override void ConvertLine(LuaTextWriter luaWriter, TsvLine line) { if (line.Fields.Any() && !line.Fields.First().Value.StartsWith("SOURCE")) { var firstField = line.Fields.First(); if (firstField.StartsWith("FOLLOWER:")) { var def = new FollowerBonusDefinition(); foreach (var field in line.Fields) { def.AddField(field); } def.Dump(luaWriter); luaWriter.Write("\n"); return; } if (firstField.StartsWith("MASTERBONUSRACE:")) { var def = new FolloweeBonusDefinition(); foreach (var field in line.Fields) { def.AddField(field); } def.Dump(luaWriter); luaWriter.Write("\n"); return; } } base.ConvertLine(luaWriter, line); }
protected override void DumpMembers(LuaTextWriter output) { output.WriteKey("Choose"); output.Write("="); output.Write(Choose); output.Write(",\n"); if (MaxTimes.HasValue) { output.WriteProperty("MaxTimes", MaxTimes.Value); } base.DumpMembers(output); }
protected override void DumpMembers(LuaTextWriter output) { base.DumpMembers(output); output.WriteKey("Condition"); output.Write("="); output.WriteStartFunction("character"); output.Write("return "); output.Write(Condition); output.Write("\n"); output.WriteEndFunction(); output.Write(",\n"); }
protected override void DumpMembers(LuaTextWriter output) { base.DumpMembers(output); output.Write("Apply="); output.WriteStartFunction("kit"); foreach (var line in _lines) { line.Dump(output); } output.WriteEndFunction(); output.Write(",\n"); }
protected virtual void ConvertLine(LuaTextWriter luaWriter, TsvLine line) { var firstValue = line.Fields.First(); if (State == null && firstValue.StartsWith("SOURCE")) { luaWriter.Write("SetSource("); SourceDefinition.Parse(line.Fields).Dump(luaWriter); luaWriter.Write(")\n"); return; } throw new ParseFailedException(firstValue, $"Unknown field {firstValue.Value} seen in state {State}"); }
public override void DumpCondition(LuaTextWriter output) { if (Inverted) { output.Write("not ("); } output.Write(Count.ToString()); output.Write(" <= #filter(ipairs(character.ClassLevels),\n"); output.WriteStartFunction("class, level"); if (Any) { output.Write("return true\n"); } else { output.Write("return "); var conditions = RequiredClassLevels.Select(t => $"class == \"{t.Key}\" and level >= {t.Value}").Concat( RequiredSpellCastingLevels.Select(t => $"GetSpellCastingType(class) == \"{t.Key}\" and level >= {t.Value}")).Concat( RequiredClassTypeLevels.Select(t => $"ClassIsType(class, \"{t.Key}\") and level >= {t.Value}")); output.Write(string.Join(" or ", conditions.Select(c => $"({c})"))); output.WriteLine(); } output.WriteEndFunction(); output.Write(")"); if (Inverted) { output.Write(")"); } }
public override void DumpCondition(LuaTextWriter output) { if (InvertCampaignCondition) { output.Write("not "); } output.Write("any(sources, "); output.WriteStartFunction("source"); output.Write("return "); base.DumpCondition(output); output.Write("\n"); output.WriteEndFunction(); output.Write(")"); }
public override void DumpCondition(LuaTextWriter output) { string cond; if (Min.HasValue && Max.HasValue) { cond = $"character.Level >= {Min} and character.Level <= {Max}"; } else if (Min.HasValue) { cond = $"character.Level >= {Min}"; } else if (Max.HasValue) { cond = $"character.Level <= {Max}"; } else { throw new InvalidOperationException("Invalid PCLevelCondition"); } if (Inverted) { cond = $"not ({cond})"; } output.Write(cond); }
protected override void ConvertLine(LuaTextWriter luaWriter, TsvLine line) { void FinishKit() { _startingKit?.Dump(luaWriter); luaWriter.Write("\n"); _startingKit = null; } var firstField = line.Fields.First(); if (firstField.TryRemovePrefix("REGION:", out var region)) { FinishKit(); _requiredRegion = region.Value; return; } if (firstField.TryRemovePrefix("STARTPACK:", out _)) { FinishKit(); _startingKit = new StartingKitDefinition(_requiredRegion); _startingKit.AddStartLine(line); return; } if (!firstField.StartsWith("SOURCE")) { Debug.Assert(_startingKit != null, nameof(_startingKit) + " != null"); _startingKit.AddLine(line); return; } base.ConvertLine(luaWriter, line); }
public override void DumpCondition(LuaTextWriter output) { string cond; if (Min.HasValue && Max.HasValue) { cond = $"{ValueToCheck} >= {Min} and {ValueToCheck} <= {Max}"; } else if (Min.HasValue) { cond = $"{ValueToCheck} >= {Min}"; } else if (Max.HasValue) { cond = $"{ValueToCheck} <= {Max}"; } else { throw new InvalidOperationException("Invalid MinMaxCondition"); } if (Inverted) { cond = $"not ({cond})"; } output.Write(cond); }
public virtual void Dump(LuaTextWriter output) { output.WriteStartFunction("character"); output.Write("return "); DumpCondition(output); output.WriteLine(); output.WriteEndFunction(); }
protected override void FinalizeConversion(LuaTextWriter luaWriter) { if (_startingKit != null) { _startingKit.Dump(luaWriter); luaWriter.Write("\n"); } }
protected override void FinalizeConversion(LuaTextWriter luaWriter) { if (_classDefinition != null) { _classDefinition.Dump(luaWriter); luaWriter.Write("\n"); } }
protected override void ConvertLine(LuaTextWriter luaWriter, TsvLine line) { var firstField = line.Fields.First(); if (firstField.StartsWith("FACTDEF")) { var def = new FactDefinition(); foreach (var field in line.Fields) { def.AddField(field); } def.Dump(luaWriter); luaWriter.Write("\n"); return; } if (firstField.TryRemovePrefix("DEFAULTVARIABLEVALUE:", out var defVar)) { var(v, value) = defVar.SplitTuple('|'); luaWriter.Write($"SetDefaultVariableValue(\"{v.Value}\", \"{value.Value}\")\n"); return; } if (firstField.StartsWith("FUNCTION:")) { var def = new FunctionDefinition(); foreach (var field in line.Fields) { def.AddField(field); } def.Dump(luaWriter); luaWriter.Write("\n"); return; } if (firstField.StartsWith("FACTSETDEF")) { // Ignoring this one for now return; } base.ConvertLine(luaWriter, line); }
public override void DumpCondition(LuaTextWriter output) { var condition = $"character.TotalAttackBonus >= {RequiredBonus}"; if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { var condition = $"character.Facts[\"{Type}\"][\"{Identifier}\"] == \"{Value}\""; if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { var condition = string.Join(" or ", Alignments.Select(alignment => $"character.Diety.Alignment == \"{alignment}\"")); if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { var condition = $"({string.Join(" + ", Conditions.Select(c => $"({c})"))}) >= {Count}"; if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { string separator; if (Count == 1) { separator = " or "; } else if (Count == Conditions.Count) { separator = " and "; } else { separator = ", "; } if (separator == ", ") { output.Write("countTrue("); } bool first = true; foreach (var condition in Conditions) { if (first) { first = false; } else { output.Write(separator); } condition.DumpCondition(output); } if (separator == ", ") { output.Write($") >= {Count}"); } }
public override void DumpCondition(LuaTextWriter output) { var matchingSpellCount = string.Join(" + ", SpellNames.Select(n => $"character.HasSpell(\"{n}\") and 1 or 0")); var condition = $"({matchingSpellCount}) >= {Count}"; if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { if (Inverted) { output.Write("not ("); } var op = Op switch { "EQ" => "==", "LT" => "<", "LTEQ" => "<=", "GT" => ">", "GTEQ" => ">=", "NEQ" => "!=", _ => throw new InvalidOperationException($"Unknown PRESIZE operation {Op}"), }; output.Write($"character.Size {op} \"{Size}\""); if (Inverted) { output.Write(")"); } }
protected override void ConvertLine(LuaTextWriter luaWriter, TsvLine line) { if (line.Fields.Any() && !line.Fields.First().Value.StartsWith("SOURCE")) { var def = new T(); foreach (var field in line.Fields) { def.AddField(field); } def.Dump(luaWriter); luaWriter.Write("\n"); return; } base.ConvertLine(luaWriter, line); }
protected override void ConvertLine(LuaTextWriter luaWriter, TsvLine line) { var firstField = line.Fields.First(); switch (State) { case "classStart": Debug.Assert(_classDefinition != null); if (!firstField.StartsWith("CLASS:")) { State = "class"; goto case "class"; } _classDefinition.AddLine(line); return; case "class": Debug.Assert(_classDefinition != null); if (firstField.StartsWith("CLASS:")) { _classDefinition.Dump(luaWriter); luaWriter.Write("\n"); _classDefinition = null; State = null; goto default; } _classDefinition.AddLine(line); return; default: if (firstField.StartsWith("CLASS:")) { var name = firstField.SplitTuple(':').right; State = "classStart"; _classDefinition = new ClassDefinition(name.Value); _classDefinition.AddLine(line); return; } break; } base.ConvertLine(luaWriter, line); }
public override void Dump(LuaTextWriter output) { output.WriteStartFunction("character"); output.Write("local count = 0\n"); output.Write("local subCondition\n"); foreach (var condition in Conditions) { output.Write("subCondition = "); condition.Dump(output); output.Write("\n"); output.Write("if subCondition(character) then\n"); output.Write(" count = count + 1\n"); output.Write("end\n"); } output.Write($"return count >= {Count}\n"); output.WriteEndFunction(); }
public override void DumpCondition(LuaTextWriter output) { string condition; if (Memorize.HasValue) { condition = $"any(character.Classes, function (class) return class.Memorize == {Memorize.Value.ToString().ToLowerInvariant()} end)"; } else { condition = string.Join(" and ", Types.Select(t => $"any(character.Classes, function (class) return contains(class.Types, \"{t}\") end)")); } if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { var op = Op switch { "EQ" => "==", "LT" => "<", "LTEQ" => "<=", "GT" => ">", "GTEQ" => ">=", "NEQ" => "~=", _ => throw new InvalidOperationException($"Unknown PREHANDS operation {Op}"), }; string condition = $"character.HandCount {op} {Value}"; if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { string matchingLanguageCount; if (Any) { matchingLanguageCount = "#character.Languages"; } else { matchingLanguageCount = $"#filter(character.Languages, function (lang)\n{string.Join("", LanguageNames.Select(n => $"if lang.Name == \"{n}\" then return true end\n").Concat(LanguageTypes.Select(t => $"if lang.Type == \"{t}\" then return true end\n")))} end)"; } var condition = $"({matchingLanguageCount}) >= {Count}"; if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void DumpCondition(LuaTextWriter output) { string condition; if (Count == 1) { condition = string.Join(" or ", Conditions.Select(c => $"({c})")); } else if (Count == Conditions.Count) { condition = string.Join(" and ", Conditions.Select(c => $"({c})")); } else { condition = $"{Count} <= sum({string.Join(", ", Conditions.Select(c => $"({c} and 1 or 0)"))})"; } if (Inverted) { condition = $"not ({condition})"; } output.Write(condition); }
public override void Dump(LuaTextWriter output) { output.Write("DefineFact("); base.Dump(output); output.Write(")"); }
public override void DumpCondition(LuaTextWriter output) { if (Inverted) { output.Write("not ("); } void WriteFilter() { output.WriteStartFunction("ability"); output.Write("if ability.Category ~= "); output.WriteValue(Category); output.Write(" then return false end\n"); if (NotTypes.Any()) { output.Write("if ability.IsAnyType("); output.WriteValues(NotTypes); output.Write(") then return false end\n"); } foreach (var name in NotNames) { output.Write("if ability.Name == "); output.WriteValue(name); output.Write(" then return false end\n"); } if (Types.Any()) { output.Write("if ability.IsAnyType("); output.WriteValues(Types); output.Write(") then return true end\n"); } foreach (var name in Names) { output.Write("if ability.Name == "); output.WriteValue(name); output.Write(" then return true end\n"); } output.Write("return false\n"); output.WriteEndFunction(); } if (Count == 1) { output.Write("character.HasAnyAbility("); WriteFilter(); output.Write(")"); } else { output.Write(Count.ToString()); output.Write(" <= character.CountAbilities("); WriteFilter(); output.Write(")"); } if (Inverted) { output.Write(")"); } }