Exemple #1
0
        public static void WriteEntryYaml <TKey>(StringBuilder builder, ReadableTuple <TKey> tuple, MetaTable <int> itemDb, MetaTable <int> mobDb)
        {
            if (tuple != null)
            {
                string valueS;
                int    value;

                builder.AppendLine("  - Id: " + tuple.GetKey <int>());

                if ((valueS = tuple.GetValue <string>(ServerQuestsAttributes.QuestTitle)) != "" && valueS != "0")
                {
                    builder.AppendLine("    Title: " + DbIOUtils.QuoteCheck(valueS));
                }

                if ((valueS = tuple.GetValue <string>(ServerQuestsAttributes.TimeLimitNew)) != "" && valueS != "0")
                {
                    builder.AppendLine("    TimeLimit: " + valueS);
                }

                if (tuple.GetValue <int>(ServerQuestsAttributes.TargetId1) > 0 || tuple.GetValue <int>(ServerQuestsAttributes.TargetId2) > 0 || tuple.GetValue <int>(ServerQuestsAttributes.TargetId3) > 0)
                {
                    builder.AppendLine("    Targets:");

                    for (int i = 0; i < 3; i++)
                    {
                        if ((valueS = tuple.GetValue <string>(ServerQuestsAttributes.TargetId1.Index + 2 * i)) != "" && valueS != "0")
                        {
                            builder.AppendLine("      - Mob: " + DbIOUtils.Id2Name(mobDb, ServerMobAttributes.AegisName, valueS));

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.Val1.Index + 2 * i)) != 0)
                            {
                                builder.AppendLine("        Count: " + value);
                            }

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.Id1.Index + i)) != 0)
                            {
                                builder.AppendLine("        Id: " + value);
                            }

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.Race1.Index + i)) != 0)
                            {
                                builder.AppendLine("        Race: " + Constants.ToString <QuestRaceType>(value));
                            }

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.Size1.Index + i)) != 0)
                            {
                                builder.AppendLine("        Size: " + Constants.ToString <QuestSizeType>(value));
                            }

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.Element1.Index + i)) != 0)
                            {
                                builder.AppendLine("        Element: " + Constants.ToString <QuestElementType>(value));
                            }

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.MinLevel1.Index + i)) != 0)
                            {
                                builder.AppendLine("        MinLevel: " + value);
                            }

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.MaxLevel1.Index + i)) != 0)
                            {
                                builder.AppendLine("        MaxLevel: " + value);
                            }
                        }
                    }
                }

                if (tuple.GetValue <int>(ServerQuestsAttributes.NameId1) > 0 || tuple.GetValue <int>(ServerQuestsAttributes.NameId2) > 0 || tuple.GetValue <int>(ServerQuestsAttributes.NameId3) > 0)
                {
                    builder.AppendLine("    Drops:");

                    for (int i = 0; i < 3; i++)
                    {
                        if ((valueS = tuple.GetValue <string>(ServerQuestsAttributes.MobId1.Index + 3 * i)) != "" && valueS != "0")
                        {
                            builder.AppendLine("      - Mob: " + DbIOUtils.Id2Name(mobDb, ServerMobAttributes.AegisName, valueS));

                            builder.AppendLine("        Item: " + DbIOUtils.Id2Name(itemDb, ServerItemAttributes.AegisName, tuple.GetValue <string>(ServerQuestsAttributes.NameId1.Index + 3 * i)));
                            builder.AppendLine("        Rate: " + tuple.GetValue <string>(ServerQuestsAttributes.Rate1.Index + 3 * i));

                            if ((value = tuple.GetValue <int>(ServerQuestsAttributes.Count1.Index + i)) != 1)
                            {
                                builder.AppendLine("        Count: " + value);
                            }
                        }
                    }
                }
            }
        }
Exemple #2
0
        public static void WriteEntryYaml(StringBuilder builder, ReadableTuple <int> tuple, MetaTable <int> itemDb)
        {
            if (tuple != null)
            {
                builder.AppendLine("  - Id: " + tuple.GetKey <int>().ToString(CultureInfo.InvariantCulture));
                builder.AppendLine("    AegisName: " + tuple.GetValue <string>(ServerMobAttributes.AegisName));
                builder.AppendLine("    Name: " + DbIOUtils.QuoteCheck(tuple.GetValue <string>(ServerMobAttributes.IRoName)));

                if (tuple.GetValue <string>(ServerMobAttributes.IRoName) != tuple.GetValue <string>(ServerMobAttributes.KRoName))
                {
                    builder.AppendLine("    JapaneseName: " + DbIOUtils.QuoteCheck(tuple.GetValue <string>(ServerMobAttributes.KRoName)));
                }

                int value;
                //bool valueB;
                string valueS;
                //int type = 0;

                builder.AppendLine("    Level: " + tuple.GetValue <int>(ServerMobAttributes.Lv));

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Hp)) != 1)
                {
                    builder.AppendLine("    Hp: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Sp)) != 1)
                {
                    builder.AppendLine("    Sp: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Exp)) != 0)
                {
                    builder.AppendLine("    BaseExp: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.JExp)) != 0)
                {
                    builder.AppendLine("    JobExp: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.MvpExp)) != 0)
                {
                    builder.AppendLine("    MvpExp: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Atk1)) != 0)
                {
                    builder.AppendLine("    Attack: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Atk2)) != 0)
                {
                    builder.AppendLine("    Attack2: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Def)) != 0)
                {
                    builder.AppendLine("    Defense: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Mdef)) != 0)
                {
                    builder.AppendLine("    MagicDefense: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Str)) != 1)
                {
                    builder.AppendLine("    Str: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Agi)) != 1)
                {
                    builder.AppendLine("    Agi: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Vit)) != 1)
                {
                    builder.AppendLine("    Vit: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Int)) != 1)
                {
                    builder.AppendLine("    Int: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Dex)) != 1)
                {
                    builder.AppendLine("    Dex: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Luk)) != 1)
                {
                    builder.AppendLine("    Luk: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.AttackRange)) != 0)
                {
                    builder.AppendLine("    AttackRange: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.ViewRange)) != 0)
                {
                    builder.AppendLine("    SkillRange: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.ChaseRange)) != 0)
                {
                    builder.AppendLine("    ChaseRange: " + value);
                }

                //if ((value = tuple.GetValue<int>(ServerMobAttributes.Size)) != 0) {
                builder.AppendLine("    Size: " + Constants.ToString <SizeType>(tuple.GetValue <int>(ServerMobAttributes.Size)));
                //}

                builder.AppendLine("    Race: " + Constants.ToString <MobRaceType>(tuple.GetValue <int>(ServerMobAttributes.Race)));

                DbIOUtils.ExpandFlag <MobGroup2Type>(builder, tuple, "RaceGroups", ServerMobAttributes.RaceGroups, YamlParser.Indent4, YamlParser.Indent6);

                int elementLevel = tuple.GetValue <int>(ServerMobAttributes.Element) / 20;
                int element      = tuple.GetValue <int>(ServerMobAttributes.Element) % 20;

                switch (element)
                {
                case 0: builder.AppendLine("    Element: Neutral"); break;

                case 1: builder.AppendLine("    Element: Water"); break;

                case 2: builder.AppendLine("    Element: Earth"); break;

                case 3: builder.AppendLine("    Element: Fire"); break;

                case 4: builder.AppendLine("    Element: Wind"); break;

                case 5: builder.AppendLine("    Element: Poison"); break;

                case 6: builder.AppendLine("    Element: Holy"); break;

                case 7: builder.AppendLine("    Element: Dark"); break;

                case 8: builder.AppendLine("    Element: Ghost"); break;

                case 9: builder.AppendLine("    Element: Undead"); break;
                }

                builder.AppendLine("    ElementLevel: " + elementLevel);

                if ((value = tuple.GetValue <int>(ServerMobAttributes.MoveSpeed)) != 0)
                {
                    builder.AppendLine("    WalkSpeed: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.AttackDelay)) != 0)
                {
                    builder.AppendLine("    AttackDelay: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.AttackMotion)) != 0)
                {
                    builder.AppendLine("    AttackMotion: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.DamageMotion)) != 0)
                {
                    builder.AppendLine("    DamageMotion: " + value);
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.DamageTaken)) != 100)
                {
                    builder.AppendLine("    DamageTaken: " + value);
                }

                long mode = FormatConverters.LongOrHexConverter(tuple.GetValue <string>(ServerMobAttributes.NewMode));

                if ((mode & 0xB695) == 0xB695)
                {
                    builder.AppendLine("    Ai: 26");
                    mode &= ~0xB695;
                }
                else if ((mode & 0x8084) == 0x8084)
                {
                    builder.AppendLine("    Ai: 27");
                    mode &= ~0x8084;
                }
                else if ((mode & 0x7085) == 0x7085)
                {
                    builder.AppendLine("    Ai: 08");
                    mode &= ~0x7085;
                }
                else if ((mode & 0x3885) == 0x3885)
                {
                    builder.AppendLine("    Ai: 04");
                    mode &= ~0x3885;
                }
                else if ((mode & 0x3695) == 0x3695)
                {
                    builder.AppendLine("    Ai: 21");
                    mode &= ~0x3695;
                }
                else if ((mode & 0x3295) == 0x3295)
                {
                    builder.AppendLine("    Ai: 20");
                    mode &= ~0x3295;
                }
                else if ((mode & 0x3095) == 0x3095)
                {
                    builder.AppendLine("    Ai: 09");
                    mode &= ~0x3095;
                }
                else if ((mode & 0x308D) == 0x308D)
                {
                    builder.AppendLine("    Ai: 13");
                    mode &= ~0x308D;
                }
                else if ((mode & 0x2085) == 0x2085)
                {
                    builder.AppendLine("    Ai: 05");
                    mode &= ~0x2085;
                }
                else if ((mode & 0x108B) == 0x108B)
                {
                    builder.AppendLine("    Ai: 07");
                    mode &= ~0x108B;
                }
                else if ((mode & 0x1089) == 0x1089)
                {
                    builder.AppendLine("    Ai: 03");
                    mode &= ~0x1089;
                }
                else if ((mode & 0xA1) == 0xA1)
                {
                    builder.AppendLine("    Ai: 24");
                    mode &= ~0xA1;
                }
                else if ((mode & 0x91) == 0x91)
                {
                    builder.AppendLine("    Ai: 17");
                    mode &= ~0x91;
                }
                else if ((mode & 0x84) == 0x84)
                {
                    builder.AppendLine("    Ai: 10");
                    mode &= ~0x84;
                }
                else if ((mode & 0x83) == 0x83)
                {
                    builder.AppendLine("    Ai: 02");
                    mode &= ~0x83;
                }
                else if ((mode & 0x81) == 0x81)
                {
                    builder.AppendLine("    Ai: 01");
                    mode &= ~0x81;
                }
                else if ((mode & 0x1) == 0x1)
                {
                    builder.AppendLine("    Ai: 25");
                    mode &= ~0x1;
                }

                if ((value = tuple.GetValue <int>(ServerMobAttributes.Class)) != 0)
                {
                    builder.AppendLine("    Class: " + Constants.ToString <ClassType>(value));
                }

                if (mode > 0)
                {
                    builder.AppendLine("    Modes:");
                    if ((mode & 0x1) == 0x1)
                    {
                        builder.AppendLine("      CanMove: true");
                    }
                    if ((mode & 0x80) == 0x80)
                    {
                        builder.AppendLine("      CanAttack: true");
                    }
                    if ((mode & 0x40) == 0x40)
                    {
                        builder.AppendLine("      NoCast: true");
                    }
                    if ((mode & 0x2) == 0x2)
                    {
                        builder.AppendLine("      Looter: true");
                    }
                    if ((mode & 0x4) == 0x4)
                    {
                        builder.AppendLine("      Aggressive: true");
                    }
                    if ((mode & 0x8) == 0x8)
                    {
                        builder.AppendLine("      Assist: true");
                    }
                    if ((mode & 0x20) == 0x20)
                    {
                        builder.AppendLine("      NoRandomWalk: true");
                    }
                    if ((mode & 0x200) == 0x200)
                    {
                        builder.AppendLine("      CastSensorChase: true");
                    }
                    if ((mode & 0x10) == 0x10)
                    {
                        builder.AppendLine("      CastSensorIdle: true");
                    }
                    if ((mode & 0x800) == 0x800)
                    {
                        builder.AppendLine("      Angry: true");
                    }
                    if ((mode & 0x400) == 0x400)
                    {
                        builder.AppendLine("      ChangeChase: true");
                    }
                    if ((mode & 0x1000) == 0x1000)
                    {
                        builder.AppendLine("      ChangeTargetMelee: true");
                    }
                    if ((mode & 0x2000) == 0x2000)
                    {
                        builder.AppendLine("      ChangeTargetChase: true");
                    }
                    if ((mode & 0x4000) == 0x4000)
                    {
                        builder.AppendLine("      TargetWeak: true");
                    }
                    if ((mode & 0x8000) == 0x8000)
                    {
                        builder.AppendLine("      RandomTarget: true");
                    }
                    if ((mode & 0x20000) == 0x20000)
                    {
                        builder.AppendLine("      IgnoreMagic: true");
                    }
                    if ((mode & 0x10000) == 0x10000)
                    {
                        builder.AppendLine("      IgnoreMelee: true");
                    }
                    if ((mode & 0x100000) == 0x100000)
                    {
                        builder.AppendLine("      IgnoreMisc: true");
                    }
                    if ((mode & 0x40000) == 0x40000)
                    {
                        builder.AppendLine("      IgnoreRanged: true");
                    }
                    if ((mode & 0x400000) == 0x400000)
                    {
                        builder.AppendLine("      TeleportBlock: true");
                    }
                    if ((mode & 0x1000000) == 0x1000000)
                    {
                        builder.AppendLine("      FixedItemDrop: true");
                    }
                    if ((mode & 0x2000000) == 0x2000000)
                    {
                        builder.AppendLine("      Detector: true");
                    }
                    if ((mode & 0x200000) == 0x200000)
                    {
                        builder.AppendLine("      KnockBackImmune: true");
                    }
                    if ((mode & 0x4000000) == 0x4000000)
                    {
                        builder.AppendLine("      StatusImmune: true");
                    }
                    if ((mode & 0x8000000) == 0x8000000)
                    {
                        builder.AppendLine("      SkillImmune: true");
                    }
                    if ((mode & 0x80000) == 0x80000)
                    {
                        builder.AppendLine("      Mvp: true");
                    }
                }

                int stat = 0;

                for (int i = 0; i < 6; i += 2)
                {
                    stat += tuple.GetIntNoThrow(ServerMobAttributes.Mvp1ID.Index + i);
                }

                if (stat != 0)
                {
                    builder.AppendLine("    MvpDrops:");

                    for (int i = 0; i < 6; i += 2)
                    {
                        valueS = tuple.GetValue <string>(ServerMobAttributes.Mvp1ID.Index + i);

                        if (stat != 0 && valueS != "0" && valueS != "")
                        {
                            builder.AppendLine("      - Item: " + DbIOUtils.Id2Name(itemDb, ServerItemAttributes.AegisName, valueS));
                            builder.AppendLine("        Rate: " + tuple.GetValue <int>(ServerMobAttributes.Mvp1ID.Index + i + 1));

                            if ((valueS = tuple.GetValue <string>(ServerMobAttributes.Mvp1RandomOptionGroup.Index + (i / 2))) != "")
                            {
                                builder.AppendLine("        RandomOptionGroup: " + valueS);
                            }
                        }
                    }
                }

                stat = 0;

                for (int i = 0; i < 20; i += 2)
                {
                    stat += tuple.GetIntNoThrow(ServerMobAttributes.Drop1ID.Index + i);
                }

                if (stat != 0)
                {
                    builder.AppendLine("    Drops:");

                    for (int i = 0; i < 20; i += 2)
                    {
                        valueS = tuple.GetValue <string>(ServerMobAttributes.Drop1ID.Index + i);

                        if (stat != 0 && valueS != "0" && valueS != "")
                        {
                            builder.AppendLine("      - Item: " + DbIOUtils.Id2Name(itemDb, ServerItemAttributes.AegisName, valueS));
                            builder.AppendLine("        Rate: " + tuple.GetValue <int>(ServerMobAttributes.Drop1ID.Index + i + 1));

                            if ((valueS = tuple.GetValue <string>(ServerMobAttributes.Drop1Flags.Index + (i / 2))) != "" && valueS != null)
                            {
                                if (FormatConverters.BooleanConverter(valueS))
                                {
                                    builder.AppendLine("        StealProtected: true");
                                }
                            }

                            if ((valueS = tuple.GetValue <string>(ServerMobAttributes.Drop1RandomOptionGroup.Index + (i / 2))) != "")
                            {
                                builder.AppendLine("        RandomOptionGroup: " + valueS);
                            }
                        }
                    }
                }
            }
        }
Exemple #3
0
        public static void WriteEntryYaml(StringBuilder builder, ReadableTuple <int> tuple, MetaTable <int> itemDb)
        {
            if (tuple != null)
            {
                int    value;
                bool   valueB;
                string valueS;

                builder.AppendLine("  - Id: " + tuple.GetKey <int>().ToString(CultureInfo.InvariantCulture));

                if ((valueS = tuple.GetValue <string>(ServerSkillAttributes.Name)) != "")
                {
                    builder.AppendLine("    Name: " + DbIOUtils.QuoteCheck(valueS));
                }

                if ((valueS = tuple.GetValue <string>(ServerSkillAttributes.Desc)) != "")
                {
                    builder.AppendLine("    Description: " + DbIOUtils.QuoteCheck(valueS));
                }

                builder.AppendLine("    MaxLevel: " + tuple.GetValue <int>(ServerSkillAttributes.MaxLevel));

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.AttackType)) != 0)
                {
                    builder.AppendLine("    Type: " + Constants.ToString <AttackTypeType>(value));
                }

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.SkillTargetType)) != 0)
                {
                    builder.AppendLine("    TargetType: " + Constants.ToString <SkillTargetType>(value));
                }

                DbIOUtils.ExpandFlag <SkillDamageType>(builder, tuple, "DamageFlags", ServerSkillAttributes.DamageFlags, YamlParser.Indent4, YamlParser.Indent6);
                DbIOUtils.ExpandFlag <SkillType2TypeNew>(builder, tuple, "Flags", ServerSkillAttributes.Inf2New, YamlParser.Indent4, YamlParser.Indent6);

                _expandList(builder, tuple, "Range", "      - Level", "Size", ServerSkillAttributes.Range, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.HitMode)) != 0)
                {
                    builder.AppendLine("    Hit: " + Constants.ToString <HitType>(value));
                }

                _expandList(builder, tuple, "HitCount", "      - Level", "Count", ServerSkillAttributes.HitCount, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "Element", "      - Level", "Element", ServerSkillAttributes.SkillElement, YamlParser.Indent4, YamlParser.Indent8, "Neutral", itemDb);
                _expandList(builder, tuple, "SplashArea", "      - Level", "Area", ServerSkillAttributes.SplashArea, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "ActiveInstance", "      - Level", "Max", ServerSkillAttributes.ActiveInstance, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "Knockback", "      - Level", "Amount", ServerSkillAttributes.Knockback, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);

                if (tuple.GetValue <int>(ServerSkillAttributes.CopyFlags) > 0 || tuple.GetValue <int>(ServerSkillAttributes.CopyFlagsRemovedRequirement) > 0)
                {
                    builder.AppendLine("    CopyFlags:");

                    DbIOUtils.ExpandFlag <SkillCopyType>(builder, tuple, "Skill", ServerSkillAttributes.CopyFlags, YamlParser.Indent6, YamlParser.Indent8);
                    DbIOUtils.ExpandFlag <SkillCopyRemoveRequirementType>(builder, tuple, "RemoveRequirement", ServerSkillAttributes.CopyFlagsRemovedRequirement, YamlParser.Indent6, YamlParser.Indent8);
                }

                if (tuple.GetValue <int>(ServerSkillAttributes.NoNearNPCRange) > 0 || tuple.GetValue <int>(ServerSkillAttributes.NoNearNPCType) > 0)
                {
                    builder.AppendLine("    NoNearNPC:");

                    if ((value = tuple.GetValue <int>(ServerSkillAttributes.NoNearNPCRange)) != 0)
                    {
                        builder.AppendLine("      AdditionalRange: " + value);
                    }

                    DbIOUtils.ExpandFlag <NoNearNpcType>(builder, tuple, "Type", ServerSkillAttributes.NoNearNPCType, YamlParser.Indent6, YamlParser.Indent8);
                }

                if ((valueB = tuple.GetValue <bool>(ServerSkillAttributes.CastInterrupt)) != false)
                {
                    builder.AppendLine("    CastCancel: " + (valueB ? "true" : "false"));
                }

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.CastDefenseReduction)) != 0)
                {
                    builder.AppendLine("    CastDefenseReduction: " + value);
                }

                _expandList(builder, tuple, "CastTime", "      - Level", "Time", ServerSkillAttributes.CastingTime, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "AfterCastActDelay", "      - Level", "Time", ServerSkillAttributes.AfterCastActDelay, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "AfterCastWalkDelay", "      - Level", "Time", ServerSkillAttributes.AfterCastWalkDelay, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "Duration1", "      - Level", "Time", ServerSkillAttributes.Duration1, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "Duration2", "      - Level", "Time", ServerSkillAttributes.Duration2, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "Cooldown", "      - Level", "Time", ServerSkillAttributes.Cooldown, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                _expandList(builder, tuple, "FixedCastTime", "      - Level", "Time", ServerSkillAttributes.FixedCastTime, YamlParser.Indent4, YamlParser.Indent8, "0", itemDb);
                DbIOUtils.ExpandFlag <CastingFlags>(builder, tuple, "CastTimeFlags", ServerSkillAttributes.CastTimeFlags, YamlParser.Indent4, YamlParser.Indent6);
                DbIOUtils.ExpandFlag <CastingFlags>(builder, tuple, "CastDelayFlags", ServerSkillAttributes.CastDelayFlags, YamlParser.Indent4, YamlParser.Indent6);

                StringBuilder require = new StringBuilder();
                _expandList(require, tuple, "HpCost", "        - Level", "Amount", ServerSkillAttributes.RequireHpCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(require, tuple, "SpCost", "        - Level", "Amount", ServerSkillAttributes.RequireSpCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(require, tuple, "HpRateCost", "        - Level", "Amount", ServerSkillAttributes.RequireHpRateCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(require, tuple, "SpRateCost", "        - Level", "Amount", ServerSkillAttributes.RequireSpRateCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(require, tuple, "MaxHpTrigger", "        - Level", "Amount", ServerSkillAttributes.RequireMaxHpTrigger, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(require, tuple, "ZenyCost", "        - Level", "Amount", ServerSkillAttributes.RequireZenyCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);

                value = tuple.GetValue <int>(ServerSkillAttributes.RequireWeapons);

                if (value != 0xFFFFFF)
                {
                    DbIOUtils.ExpandFlag <WeaponType>(require, tuple, "Weapon", ServerSkillAttributes.RequireWeapons, YamlParser.Indent6, YamlParser.Indent8);
                }

                DbIOUtils.ExpandFlag <AmmoType>(require, tuple, "Ammo", ServerSkillAttributes.RequireAmmoTypes, YamlParser.Indent6, YamlParser.Indent8);
                _expandList(require, tuple, "AmmoAmount", "        - Level", "Amount", ServerSkillAttributes.RequireAmmoAmount, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.RequireState)) > 0)
                {
                    valueS = "";

                    switch ((RequiredStateTypeNew)value)
                    {
                    case RequiredStateTypeNew.Hidden:
                        valueS = "Hidden";
                        break;

                    case RequiredStateTypeNew.Riding:
                        valueS = "Riding";
                        break;

                    case RequiredStateTypeNew.Falcon:
                        valueS = "Falcon";
                        break;

                    case RequiredStateTypeNew.Cart:
                        valueS = "Cart";
                        break;

                    case RequiredStateTypeNew.Shield:
                        valueS = "Shield";
                        break;

                    case RequiredStateTypeNew.RecoverWeightRate:
                        valueS = "Recover_Weight_Rate";
                        break;

                    case RequiredStateTypeNew.MoveEnable:
                        valueS = "Move_Enable";
                        break;

                    case RequiredStateTypeNew.Water:
                        valueS = "Water";
                        break;

                    case RequiredStateTypeNew.RidingDragon:
                        valueS = "Ridingdragon";
                        break;

                    case RequiredStateTypeNew.Warg:
                        valueS = "Wug";
                        break;

                    case RequiredStateTypeNew.Ridingwarg:
                        valueS = "Ridingwug";
                        break;

                    case RequiredStateTypeNew.Mado:
                        valueS = "Mado";
                        break;

                    case RequiredStateTypeNew.Elementalspirit:
                        valueS = "Elementalspirit";
                        break;

                    case RequiredStateTypeNew.Elementalspirit2:
                        valueS = "Elementalspirit2";
                        break;

                    case RequiredStateTypeNew.RidingPeco:
                        valueS = "Peco";
                        break;

                    case RequiredStateTypeNew.SunStance:
                        valueS = "Sunstance";
                        break;

                    case RequiredStateTypeNew.MoonStance:
                        valueS = "Moonstance";
                        break;

                    case RequiredStateTypeNew.StarsStance:
                        valueS = "Starstance";
                        break;

                    case RequiredStateTypeNew.UniverseStance:
                        valueS = "Universestance";
                        break;

                    default:
                        valueS = "";
                        break;
                    }

                    require.Append("      State: ");
                    require.AppendLine(valueS);
                }

                if ((valueS = tuple.GetValue <string>(ServerSkillAttributes.RequireStatuses)) != "" && valueS != "0")
                {
                    var data = valueS.Split(':');

                    if (data.Length > 0)
                    {
                        require.AppendLine("      Status:");

                        foreach (var da in data)
                        {
                            require.Append("        ");
                            require.Append(da);
                            require.AppendLine(": true");
                        }
                    }
                }

                //_DbIOUtils.ExpandFlag<AmmoType>(require, tuple, "Status", ServerSkillAttributes.RequireStatuses, YamlParser2.Indent6, YamlParser2.Indent8);
                _expandList(require, tuple, "SpiritSphereCost", "        - Level", "Amount", ServerSkillAttributes.RequireSpiritSphereCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(require, tuple, "ItemCost", "        - Item", "Amount", ServerSkillAttributes.RequireItemCost, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);

                if ((valueS = tuple.GetValue <string>(ServerSkillAttributes.RequiredEquipment)) != "" && valueS != "0")
                {
                    var data = valueS.Split(':');

                    require.AppendLine("      Equipment:");

                    foreach (var item in data)
                    {
                        require.Append("        ");
                        require.Append(DbIOUtils.Id2Name(itemDb, ServerItemAttributes.AegisName, item));
                        require.AppendLine(": true");
                    }
                }
                //_expandList(require, tuple, "Equipment", "", "", ServerSkillAttributes.RequiredEquipment, YamlParser2.Indent6, YamlParser2.Indent8, "", itemDb);

                string requireData = require.ToString();

                if (requireData != "")
                {
                    builder.AppendLine("    Requires:");
                    builder.Append(requireData);
                }

                StringBuilder unit = new StringBuilder();

                if ((valueS = tuple.GetValue <string>(ServerSkillAttributes.UnitId)) != "" && valueS != "0")
                {
                    unit.Append("      Id: ");
                    unit.AppendLine(valueS);
                }

                if ((valueS = tuple.GetValue <string>(ServerSkillAttributes.UnitAlternateId)) != "" && valueS != "0")
                {
                    unit.Append("      AlternateId: ");
                    unit.AppendLine(valueS);
                }

                _expandList(unit, tuple, "Layout", "        - Level", "Size", ServerSkillAttributes.UnitLayout, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);
                _expandList(unit, tuple, "Range", "        - Level", "Size", ServerSkillAttributes.UnitRange, YamlParser.Indent6, YamlParser.Indent10, "0", itemDb);

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.UnitInterval)) != 0)
                {
                    unit.Append("      Interval: ");
                    unit.AppendLine(value.ToString(CultureInfo.InvariantCulture));
                }

                if ((value = tuple.GetValue <int>(ServerSkillAttributes.UnitTarget)) != 0x3F0000)
                {
                    unit.Append("      Target: ");

                    var flag = FlagsManager.GetFlag <UnitTargetType>();
                    valueS = flag.Value2Name[value];
                    unit.AppendLine(valueS);
                }

                DbIOUtils.ExpandFlag <UnitFlagType>(unit, tuple, "Flag", ServerSkillAttributes.UnitFlag, YamlParser.Indent6, YamlParser.Indent8);

                string unitData = unit.ToString();

                if (unitData != "")
                {
                    builder.AppendLine("    Unit:");
                    builder.Append(unit);
                }
            }
        }