Example #1
0
        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);
        }
Example #2
0
 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");
 }
Example #4
0
 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");
 }
Example #5
0
        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}");
        }
Example #6
0
        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);
        }
Example #11
0
 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");
     }
 }
Example #14
0
        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);
        }
Example #15
0
        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);
        }
Example #18
0
        public override void DumpCondition(LuaTextWriter output)
        {
            var condition = $"({string.Join(" + ", Conditions.Select(c => $"({c})"))}) >= {Count}";

            if (Inverted)
            {
                condition = $"not ({condition})";
            }
            output.Write(condition);
        }
Example #19
0
        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}");
            }
        }
Example #20
0
        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);
        }
Example #21
0
        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(")");
            }
        }
Example #22
0
        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);
        }
Example #24
0
        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(")");
            }
        }