Example #1
0
 protected override void DumpMembers(LuaTextWriter output)
 {
     output.WriteProperty("NameShort", NameShort);
     output.WriteProperty("NameLong", NameLong);
     output.WriteProperty("Url", Url);
     base.DumpMembers(output);
 }
 protected override void DumpMembers(LuaTextWriter output)
 {
     output.WriteProperty("Category", Category);
     output.WriteProperty("Key", Key);
     output.WriteProperty("DataFormat", DataFormat);
     if (DisplayName != null)
     {
         output.WriteProperty("DisplayName", DisplayName);
     }
     if (Explanation != null)
     {
         output.WriteProperty("Explanation", Explanation);
     }
     if (Required)
     {
         output.WriteProperty("Required", true);
     }
     if (Selectable)
     {
         output.WriteProperty("Selectable", true);
     }
     if (Visible)
     {
         output.WriteProperty("Visible", true);
     }
     base.DumpMembers(output);
 }
Example #3
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);
        }
        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);
        }
Example #5
0
        public void Convert(string lstFile, string luaFile)
        {
            var dir = Path.GetDirectoryName(luaFile);

            Directory.CreateDirectory(dir);
            using var outputStream = new FileStream(luaFile, FileMode.Create, FileAccess.Write);
            using var output       = new StreamWriter(outputStream);
            var repoDir = Repository.Discover(lstFile);

            if (string.IsNullOrEmpty(repoDir))
            {
                throw new ArgumentException("LST file must be in a git repo.");
            }

            var repo         = new Repository(repoDir);
            var repoUrl      = repo.Network.Remotes["upstream"]?.Url ?? repo.Network.Remotes["origin"]?.Url;
            var sha          = repo.Head.Tip.Sha;
            var relativePath = Path.GetRelativePath(repo.Info.WorkingDirectory, lstFile);

            output.WriteLine($"-- Converted From LST file {relativePath}");
            output.WriteLine($"-- From repository {repoUrl} at commit {sha}");
            var luaWriter = new LuaTextWriter(output);
            var lines     = Program.ReadTsv(lstFile).ToList();

            foreach (var line in lines)
            {
                ConvertLine(luaWriter, line);
            }

            FinalizeConversion(luaWriter);
        }
 public void Dump(LuaTextWriter output)
 {
     output.WriteStartObject();
     output.WriteKeyValue("Name", Name);
     output.WriteKeyValue("InitialValue", InitialValue);
     output.WriteEndObject();
 }
        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);
        }
Example #8
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)
        {
            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 #10
0
 protected virtual void DumpMembers(LuaTextWriter output)
 {
     if (!string.IsNullOrEmpty(SourcePage))
     {
         output.WriteKeyValue("SourcePage", SourcePage);
     }
 }
 protected override void FinalizeConversion(LuaTextWriter luaWriter)
 {
     if (_classDefinition != null)
     {
         _classDefinition.Dump(luaWriter);
         luaWriter.Write("\n");
     }
 }
 protected override void FinalizeConversion(LuaTextWriter luaWriter)
 {
     if (_startingKit != null)
     {
         _startingKit.Dump(luaWriter);
         luaWriter.Write("\n");
     }
 }
Example #13
0
 public void Dump(LuaTextWriter output)
 {
     output.WriteStartObject();
     output.WriteKeyValue("Name", Name);
     output.WriteKeyValue("Replace", Replace);
     output.WriteKeyValue("Stack", Stack);
     output.WriteEndObject();
 }
Example #14
0
 public virtual void Dump(LuaTextWriter output)
 {
     output.WriteStartFunction("character");
     output.Write("return ");
     DumpCondition(output);
     output.WriteLine();
     output.WriteEndFunction();
 }
        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 #16
0
        public override void DumpCondition(LuaTextWriter output)
        {
            var condition = $"character.TotalAttackBonus >= {RequiredBonus}";

            if (Inverted)
            {
                condition = $"not ({condition})";
            }
            output.Write(condition);
        }
Example #17
0
        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)
        {
            var condition = $"character.Facts[\"{Type}\"][\"{Identifier}\"] == \"{Value}\"";

            if (Inverted)
            {
                condition = $"not ({condition})";
            }
            output.Write(condition);
        }
Example #19
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);
 }
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);
        }
 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 #22
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");
 }
 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(")");
 }
Example #24
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}");
        }
 protected override void DumpMembers(LuaTextWriter output)
 {
     base.DumpMembers(output);
     output.WriteProperty("Type", Type);
     if (LocalTo != null)
     {
         output.WriteProperty("Local", LocalTo);
     }
     if (Channel != null)
     {
         output.WriteProperty("Channel", Channel);
     }
     output.WriteProperty("Explanation", Explanation);
 }
Example #26
0
 public void Dump(LuaTextWriter output)
 {
     output.WriteStartObject();
     output.WriteProperty("Name", Name);
     if (Replace)
     {
         output.WriteProperty("Replace", Replace);
     }
     if (Stack)
     {
         output.WriteProperty("Stack", Stack);
     }
     output.WriteEndObject();
 }
Example #27
0
 protected override void DumpMembers(LuaTextWriter output)
 {
     if (Level != null)
     {
         output.WriteProperty("Level", Level.Value);
     }
     if (Name != null)
     {
         output.WriteProperty("Name", Name);
     }
     if (Type != null)
     {
         output.WriteProperty("Type", Type);
     }
     base.DumpMembers(output);
 }
 protected override void DumpMembers(LuaTextWriter output)
 {
     base.DumpMembers(output);
     if (All)
     {
         output.WriteProperty("All", true);
     }
     else if (string.IsNullOrEmpty(Type))
     {
         output.WriteProperty("Name", Name);
     }
     else
     {
         output.WriteProperty("Type", Type);
     }
 }
Example #29
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);
        }