Example #1
0
        public static void DbIOWriterConf <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db, DbIOWriteEntryMethod <TKey> writeEntryMethod)
        {
            try {
                if (debug.FileType == FileType.Conf)
                {
                    try {
                        var lines = new LibconfigParser(debug.OldPath, LibconfigMode.Write);
                        lines.Remove(db);

                        foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                        {
                            string key = tuple.Key.ToString();

                            StringBuilder builder = new StringBuilder();
                            writeEntryMethod(builder, tuple);
                            lines.Write(key, builder.ToString());
                        }

                        lines.WriteFile(debug.FilePath);
                    }
                    catch (Exception err) {
                        debug.ReportException(err);
                    }
                }
            }
            catch (Exception err) {
                debug.ReportException(err);
            }
        }
Example #2
0
        public static void Writer <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Conf)
            {
                try {
                    var lines = new LibconfigParser(debug.OldPath, LibconfigMode.Write);
                    lines.Remove(db);
                    string line;

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                    {
                        int           key     = tuple.GetKey <int>();
                        StringBuilder builder = new StringBuilder();
                        WriteEntry(builder, tuple);
                        line = builder.ToString();
                        lines.Write(key.ToString(CultureInfo.InvariantCulture), line);
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
            else
            {
                int format = db.GetAttacked <int>("rAthenaFormat");

                try {
                    IntLineStream lines = new IntLineStream(debug.OldPath);
                    lines.Remove(db);
                    string line;

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                    {
                        int key = tuple.GetKey <int>();

                        if (format == 18)
                        {
                            line = string.Join(",", tuple.GetRawElements().Select(p => (p ?? "").ToString()).ToArray());
                        }
                        else
                        {
                            line = string.Join(",", tuple.GetRawElements().Take(ServerQuestsAttributes.MobId1.Index).Concat(new object[] { tuple.GetRawValue(ServerQuestsAttributes.QuestTitle.Index) }).Select(p => (p ?? "").ToString()).ToArray());
                        }

                        lines.Write(key, line);
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
        }
Example #3
0
        public static void Writer <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Conf)
            {
                try {
                    var lines = new LibconfigParser(debug.OldPath, LibconfigMode.Write);
                    lines.Remove(db);

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                    {
                        string key = tuple.GetKey <string>();

                        StringBuilder builder = new StringBuilder();
                        WriteEntry(builder, tuple);
                        lines.Write(key, builder.ToString());
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
            else
            {
                try {
                    StringLineStream lines = new StringLineStream(debug.OldPath);
                    lines.Remove(db);
                    string line;

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                    {
                        string key = tuple.GetKey <string>();

                        int item2 = tuple.GetValue <int>(2);

                        if (item2 == 0)
                        {
                            line = string.Join("\t", tuple.GetRawElements().Take(2).Select(p => (p ?? "").ToString()).ToArray());
                        }
                        else
                        {
                            line = string.Join("\t", tuple.GetRawElements().Take(3).Select(p => (p ?? "").ToString()).ToArray());
                        }

                        lines.Write(key, line);
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
        }
Example #4
0
        public static void Loader <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Txt)
            {
                DbIOMethods.DbLoaderAny(debug, db, TextFileHelper.GetElementsByTabs);
            }
            else if (debug.FileType == FileType.Conf)
            {
                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (var constant in ele.Output["copy_paste"] ?? ele.Output["constants_db"])
                {
                    try {
                        var keyValue = constant as LibconfigKeyValue;

                        if (keyValue != null)
                        {
                            if (keyValue.Key == "comment__")
                            {
                                continue;
                            }

                            if (keyValue.Value is LibconfigArrayBase)
                            {
                                var arrayList = (LibconfigArrayBase)keyValue.Value;

                                table.SetRaw((TKey)(object)keyValue.Key, ServerConstantsAttributes.Deprecated, arrayList["Deprecated"] ?? "false");
                                table.SetRaw((TKey)(object)keyValue.Key, ServerConstantsAttributes.Value, arrayList["Value"] ?? "0");

                                if (arrayList["Parameter"] != null)
                                {
                                    table.SetRaw((TKey)(object)keyValue.Key, ServerConstantsAttributes.Type, Boolean.Parse(arrayList["Parameter"]) ? "1" : "0");
                                }
                            }
                            else
                            {
                                table.SetRaw((TKey)(object)keyValue.Key, ServerConstantsAttributes.Value, keyValue.ObjectValue);
                            }
                        }
                    }
                    catch {
                        if (!debug.ReportIdException(constant.ObjectValue, constant.Line))
                        {
                            return;
                        }
                    }
                }
            }
        }
Example #5
0
        public static void Loader(DbDebugItem <int> debug, AbstractDb <int> db)
        {
            if (debug.FileType == FileType.Conf)
            {
                var ele           = new LibconfigParser(debug.FilePath);
                var table         = debug.AbsractDb.Table;
                var attributeList = debug.AbsractDb.AttributeList;

                foreach (var achievement in ele.Output["copy_paste"] ?? ele.Output["achievement_db"])
                {
                    int cheevoId = Int32.Parse(achievement["id"].ObjectValue);

                    table.SetRaw(cheevoId, ServerCheevoAttributes.Name, achievement["name"] ?? "");
                    table.SetRaw(cheevoId, ServerCheevoAttributes.GroupId, achievement["group"] ?? "");
                    table.SetRaw(cheevoId, ServerCheevoAttributes.Score, achievement["score"] ?? "");
                    table.SetRaw(cheevoId, ServerCheevoAttributes.ParamsRequired, achievement["params_required"] ?? "");

                    if (achievement["reward"] != null)
                    {
                        foreach (var reward in achievement["reward"])
                        {
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardId, reward["itemid"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardAmount, reward["amount"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardTitleId, reward["titleid"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardScript, (reward["script"] ?? "").Trim(' ', '\t'));
                            break;
                        }
                    }

                    if (achievement["target"] != null)
                    {
                        int targetId = 0;

                        foreach (var target in achievement["target"])
                        {
                            table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.TargetId1.Index + targetId], target["mobid"] ?? "");
                            table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.TargetCount1.Index + targetId], target["count"] ?? "");
                            targetId += 2;
                        }
                    }

                    if (achievement["parameter"] != null)
                    {
                        int parameterId = 0;

                        foreach (var target in achievement["parameter"])
                        {
                            table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.Parameter1.Index + parameterId], target["param"].ObjectValue + target["operator"].ObjectValue + target["value"].ObjectValue);
                            parameterId++;
                        }
                    }

                    if (achievement["dependent"] != null)
                    {
                        int           id         = 0;
                        StringBuilder dependency = new StringBuilder();

                        foreach (var target in achievement["dependent"])
                        {
                            if (id == 0)
                            {
                                dependency.Append(target.ObjectValue);
                            }
                            else
                            {
                                dependency.Append(":" + target.ObjectValue);
                            }

                            id++;
                        }

                        table.SetRaw(cheevoId, ServerCheevoAttributes.Dependent, dependency.ToString());
                    }
                }
            }
        }
Example #6
0
        public static void Loader <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Txt)
            {
                DbIOMethods.DbLoaderAny(debug, db, TextFileHelper.GetElementsByCommas);
            }
            else if (debug.FileType == FileType.Conf)
            {
                DbIOMethods.GuessAttributes(new string[] { }, db.AttributeList.Attributes.ToList(), -1, db);

                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (var parser in ele.Output["copy_paste"] ?? ele.Output["mob_db"])
                {
                    TKey itemId = (TKey)(object)Int32.Parse(parser["Id"]);

                    table.SetRaw(itemId, ServerMobAttributes.AegisName, parser["SpriteName"].ObjectValue);
                    table.SetRaw(itemId, ServerMobAttributes.IRoName, parser["Name"].ObjectValue);
                    table.SetRaw(itemId, ServerMobAttributes.KRoName, parser["Name"].ObjectValue);
                    table.SetRaw(itemId, ServerMobAttributes.Lv, parser["Lv"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Hp, parser["Hp"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Sp, parser["Sp"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Exp, parser["Exp"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.JExp, parser["JExp"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.AttackRange, parser["AttackRange"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Atk1, Extensions.ParseBracket(parser["Attack"] ?? "[0, 0]", 0));
                    table.SetRaw(itemId, ServerMobAttributes.Atk2, (Int32.Parse(Extensions.ParseBracket(parser["Attack"] ?? "[0, 0]", 0)) + Int32.Parse(Extensions.ParseBracket(parser["Attack"] ?? "[0, 0]", 1))).ToString(CultureInfo.InvariantCulture));
                    table.SetRaw(itemId, ServerMobAttributes.Def, parser["Def"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Mdef, parser["Mdef"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Str, parser["Stats.Str"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Agi, parser["Stats.Agi"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Vit, parser["Stats.Vit"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Int, parser["Stats.Int"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Dex, parser["Stats.Dex"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Luk, parser["Stats.Luk"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.ViewRange, parser["ViewRange"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.ChaseRange, parser["ChaseRange"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Size, SdeEditor.Instance.ProjectDatabase.ConstantToInt(parser["Size"] ?? "1").ToString(CultureInfo.InvariantCulture));
                    table.SetRaw(itemId, ServerMobAttributes.Race, SdeEditor.Instance.ProjectDatabase.ConstantToInt(parser["Race"] ?? "0").ToString(CultureInfo.InvariantCulture));

                    var element = parser["Element"];
                    int elLevel;
                    int elType;

                    if (element != null)
                    {
                        debug.AbsractDb.Attached["MobDb.UseConstants"] = true;
                        elLevel = Int32.Parse(((ParserList)element).Objects[1].ObjectValue);
                        elType  = SdeEditor.Instance.ProjectDatabase.ConstantToInt(((ParserList)element).Objects[0].ObjectValue);
                    }
                    else
                    {
                        elLevel = 0;
                        elType  = 0;
                    }

                    table.SetRaw(itemId, ServerMobAttributes.Element, ((elLevel) * 20 + elType).ToString(CultureInfo.InvariantCulture));

                    table.SetRaw(itemId, ServerMobAttributes.Mode, (
                                     (!Boolean.Parse((parser["Mode.CanMove"] ?? "false")) ? 0 : (1 << 0)) |
                                     (!Boolean.Parse((parser["Mode.Looter"] ?? "false")) ? 0 : (1 << 1)) |
                                     (!Boolean.Parse((parser["Mode.Aggressive"] ?? "false")) ? 0 : (1 << 2)) |
                                     (!Boolean.Parse((parser["Mode.Assist"] ?? "false")) ? 0 : (1 << 3)) |
                                     (!Boolean.Parse((parser["Mode.CastSensorIdle"] ?? "false")) ? 0 : (1 << 4)) |
                                     (!Boolean.Parse((parser["Mode.Boss"] ?? "false")) ? 0 : (1 << 5)) |
                                     (!Boolean.Parse((parser["Mode.Plant"] ?? "false")) ? 0 : (1 << 6)) |
                                     (!Boolean.Parse((parser["Mode.CanAttack"] ?? "false")) ? 0 : (1 << 7)) |
                                     (!Boolean.Parse((parser["Mode.Detector"] ?? "false")) ? 0 : (1 << 8)) |
                                     (!Boolean.Parse((parser["Mode.CastSensorChase"] ?? "false")) ? 0 : (1 << 9)) |
                                     (!Boolean.Parse((parser["Mode.ChangeChase"] ?? "false")) ? 0 : (1 << 10)) |
                                     (!Boolean.Parse((parser["Mode.Angry"] ?? "false")) ? 0 : (1 << 11)) |
                                     (!Boolean.Parse((parser["Mode.ChangeTargetMelee"] ?? "false")) ? 0 : (1 << 12)) |
                                     (!Boolean.Parse((parser["Mode.ChangeTargetChase"] ?? "false")) ? 0 : (1 << 13)) |
                                     (!Boolean.Parse((parser["Mode.TargetWeak"] ?? "false")) ? 0 : (1 << 14))
                                     ).ToString(CultureInfo.InvariantCulture));

                    table.SetRaw(itemId, ServerMobAttributes.MoveSpeed, parser["MoveSpeed"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.AttackDelay, parser["AttackDelay"] ?? "4000");
                    table.SetRaw(itemId, ServerMobAttributes.AttackMotion, parser["AttackMotion"] ?? "2000");
                    table.SetRaw(itemId, ServerMobAttributes.DamageMotion, parser["DamageMotion"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.MvpExp, parser["MvpExp"] ?? "0");

                    int id = 0;

                    var mvpDrops = parser["MvpDrops"];

                    if (mvpDrops != null)
                    {
                        foreach (var drop in mvpDrops)
                        {
                            if (id > 2)
                            {
                                debug.ReportIdException("Too many MVP mob drops.", itemId, ErrorLevel.Critical);
                                break;
                            }

                            int tItemId = SdeDatabase.AegisNameToId(debug, itemId, ((ParserKeyValue)drop).Key);
                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1ID.Index + 2 * id], tItemId.ToString(CultureInfo.InvariantCulture));
                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1ID.Index + 2 * id + 1], drop.ObjectValue);
                            id++;
                        }
                    }

                    id = 0;

                    var regularDrops = parser["Drops"];

                    if (regularDrops != null)
                    {
                        foreach (var drop in regularDrops)
                        {
                            if (id > 8)
                            {
                                debug.ReportIdException("Too regular mob drops.", itemId, ErrorLevel.Critical);
                                break;
                            }

                            int tItemId = SdeDatabase.AegisNameToId(debug, itemId, ((ParserKeyValue)drop).Key);
                            var tuple   = SdeDatabase.GetTuple(debug, tItemId);

                            if (tuple != null && tuple.GetValue <TypeType>(ServerItemAttributes.Type) == TypeType.Card)
                            {
                                table.SetRaw(itemId, ServerMobAttributes.DropCardid, tItemId.ToString(CultureInfo.InvariantCulture));
                                table.SetRaw(itemId, ServerMobAttributes.DropCardper, drop.ObjectValue);
                                id++;
                                continue;
                            }

                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1ID.Index + 2 * id], tItemId.ToString(CultureInfo.InvariantCulture));
                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1ID.Index + 2 * id + 1], drop.ObjectValue);
                            id++;
                        }
                    }
                }
            }
            else if (debug.FileType == FileType.Yaml)
            {
                try {
                    DbIOMethods.GuessAttributes(new string[] { }, db.AttributeList.Attributes.ToList(), -1, db);

                    var ele   = new YamlParser(debug.FilePath);
                    var table = debug.AbsractDb.Table;

                    if (ele.Output == null || ((ParserArray)ele.Output).Objects.Count == 0)
                    {
                        return;
                    }

                    if ((ele.Output["copy_paste"] ?? ele.Output["Body"]) == null)
                    {
                        return;
                    }

                    DbIOUtils.ClearBuffer();
                    var mobDb  = SdeEditor.Instance.ProjectDatabase.GetMetaTable <int>(ServerDbs.Mobs);
                    var itemDb = SdeEditor.Instance.ProjectDatabase.GetMetaTable <int>(ServerDbs.Items);

                    foreach (var parser in ele.Output["copy_paste"] ?? ele.Output["Body"])
                    {
                        TKey itemId = (TKey)(object)Int32.Parse(parser["Id"]);

                        table.SetRaw(itemId, ServerMobAttributes.AegisName, parser["AegisName"].ObjectValue);
                        table.SetRaw(itemId, ServerMobAttributes.IRoName, parser["Name"].ObjectValue);
                        table.SetRaw(itemId, ServerMobAttributes.KRoName, (parser["JapaneseName"] ?? parser["Name"]).ObjectValue);
                        table.SetRaw(itemId, ServerMobAttributes.Lv, parser["Level"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Hp, parser["Hp"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Sp, parser["Sp"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Exp, parser["BaseExp"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.JExp, parser["JobExp"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.MvpExp, parser["MvpExp"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.Atk1, parser["Attack"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.Atk2, parser["Attack2"] ?? "0");

                        table.SetRaw(itemId, ServerMobAttributes.Def, parser["Defense"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.Mdef, parser["MagicDefense"] ?? "0");

                        table.SetRaw(itemId, ServerMobAttributes.Str, parser["Str"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Agi, parser["Agi"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Vit, parser["Vit"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Int, parser["Int"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Dex, parser["Dex"] ?? "1");
                        table.SetRaw(itemId, ServerMobAttributes.Luk, parser["Luk"] ?? "1");

                        table.SetRaw(itemId, ServerMobAttributes.AttackRange, parser["AttackRange"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.ViewRange, parser["SkillRange"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.ChaseRange, parser["ChaseRange"] ?? "0");

                        table.SetRaw(itemId, ServerMobAttributes.Size, DbIOUtils.LoadFlag <SizeType>(parser["Size"], "0"));
                        table.SetRaw(itemId, ServerMobAttributes.Race, DbIOUtils.LoadFlag <MobRaceType>(parser["Race"], "0"));
                        table.SetRaw(itemId, ServerMobAttributes.RaceGroups, DbIOUtils.LoadFlag <MobGroup2Type>(parser["RaceGroups"], "0"));

                        var element = parser["Element"];
                        int elLevel;
                        int elType;

                        if (element != null)
                        {
                            switch (element.ObjectValue)
                            {
                            case "Neutral": elType = 0; break;

                            case "Water": elType = 1; break;

                            case "Earth": elType = 2; break;

                            case "Fire": elType = 3; break;

                            case "Wind": elType = 4; break;

                            case "Poison": elType = 5; break;

                            case "Holy": elType = 6; break;

                            case "Dark": elType = 7; break;

                            case "Ghost": elType = 8; break;

                            case "Undead": elType = 9; break;

                            default: elType = 0; break;
                            }
                        }
                        else
                        {
                            elType = 0;
                        }

                        element = parser["ElementLevel"];

                        if (element != null)
                        {
                            elLevel = Int32.Parse(element.ObjectValue);
                        }
                        else
                        {
                            elLevel = 1;
                        }

                        table.SetRaw(itemId, ServerMobAttributes.Element, ((elLevel) * 20 + elType).ToString(CultureInfo.InvariantCulture));

                        table.SetRaw(itemId, ServerMobAttributes.MoveSpeed, parser["WalkSpeed"] ?? "");
                        table.SetRaw(itemId, ServerMobAttributes.AttackDelay, parser["AttackDelay"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.AttackMotion, parser["AttackMotion"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.DamageMotion, parser["DamageMotion"] ?? "0");
                        table.SetRaw(itemId, ServerMobAttributes.DamageTaken, parser["DamageTaken"] ?? "100");

                        long mode = 0;

                        if (parser["Ai"] != null)
                        {
                            int ai = Int32.Parse(parser["Ai"].ObjectValue);

                            switch (ai)
                            {
                            case 1: mode |= 0x81; break;

                            case 2: mode |= 0x83; break;

                            case 3: mode |= 0x1089; break;

                            case 4: mode |= 0x3885; break;

                            case 5: mode |= 0x2085; break;

                            case 6: mode |= 0; break;

                            case 7: mode |= 0x108B; break;

                            case 8: mode |= 0x7085; break;

                            case 9: mode |= 0x3095; break;

                            case 10: mode |= 0x84; break;

                            case 11: mode |= 0x84; break;

                            case 12: mode |= 0x2085; break;

                            case 13: mode |= 0x308D; break;

                            case 17: mode |= 0x91; break;

                            case 19: mode |= 0x3095; break;

                            case 20: mode |= 0x3295; break;

                            case 21: mode |= 0x3695; break;

                            case 24: mode |= 0xA1; break;

                            case 25: mode |= 0x1; break;

                            case 26: mode |= 0xB695; break;

                            case 27: mode |= 0x8084; break;
                            }
                        }

                        mode |= Int64.Parse(DbIOUtils.LoadFlag <NewMobModeType>(parser["Modes"], "0"));

                        table.SetRaw(itemId, ServerMobAttributes.NewMode, mode.ToString(CultureInfo.InvariantCulture));
                        table.SetRaw(itemId, ServerMobAttributes.Class, DbIOUtils.LoadFlag <ClassType>(parser["Class"], "0"));
                        table.SetRaw(itemId, ServerMobAttributes.Sprite, parser["Sprite"] ?? "");


                        int id = 0;

                        var mvpDrops = parser["MvpDrops"];

                        if (mvpDrops != null)
                        {
                            foreach (var drop in mvpDrops)
                            {
                                if (id > 2)
                                {
                                    debug.ReportIdException("Too many MVP mob drops.", itemId, ErrorLevel.Critical);
                                    break;
                                }

                                int tItemId = (int)DbIOUtils.Name2IdBuffered(itemDb, ServerItemAttributes.AegisName, drop["Item"] ?? "", "item_db", false);
                                table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1ID.Index + 2 * id], tItemId.ToString(CultureInfo.InvariantCulture));
                                table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1ID.Index + 2 * id + 1], drop["Rate"] ?? "0");

                                if (drop["RandomOptionGroup"] != null)
                                {
                                    table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1RandomOptionGroup.Index + id], drop["RandomOptionGroup"].ObjectValue);
                                }

                                id++;
                            }
                        }

                        id = 0;

                        var regularDrops = parser["Drops"];

                        if (regularDrops != null)
                        {
                            foreach (var drop in regularDrops)
                            {
                                if (id > 9)
                                {
                                    debug.ReportIdException("Too many regular mob drops.", itemId, ErrorLevel.Critical);
                                    break;
                                }

                                int tItemId = (int)DbIOUtils.Name2IdBuffered(itemDb, ServerItemAttributes.AegisName, drop["Item"] ?? "", "item_db", false);

                                table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1ID.Index + 2 * id], tItemId.ToString(CultureInfo.InvariantCulture));
                                table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1ID.Index + 2 * id + 1], drop["Rate"] ?? "0");

                                if (drop["StealProtected"] != null)
                                {
                                    if (Boolean.Parse(drop["StealProtected"].ObjectValue))
                                    {
                                        table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1Flags.Index + id], "true");
                                    }
                                }

                                if (drop["RandomOptionGroup"] != null)
                                {
                                    table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1RandomOptionGroup.Index + id], drop["RandomOptionGroup"].ObjectValue);
                                }

                                id++;
                            }
                        }
                    }
                }
                finally {
                    DbIOUtils.ClearBuffer();
                }
            }
        }
Example #7
0
        public static void Loader(DbDebugItem <int> debug, AbstractDb <int> db)
        {
            //foreach (DbAttribute attribute in ServerItemGroupSubAttributes.AttributeList.Attributes) {
            //	db.Attached[attribute.DisplayName] = false;
            //}

            if (debug.FileType == FileType.Txt)
            {
                _loadItemsGroupdDb(db, debug.DbSource, debug.FilePath);
            }
            else if (debug.FileType == FileType.Conf)
            {
                Table <int, ReadableTuple <int> > itemsDb = db.GetMeta <int>(ServerDbs.Items);
                var items = itemsDb.FastItems;
                int index = ServerItemAttributes.AegisName.Index;

                // The reverse table is used for an optimization
                // All the items are stored in a dictionary by their name instead of their ID
                _reverseTable = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase);

                foreach (var item in items)
                {
                    _reverseTable[item.GetStringValue(index)] = item.Key;
                }

                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (ParserKeyValue group in ele.Output.OfType <ParserKeyValue>())
                {
                    string groupAegisName = group.Key;
                    int    groupId        = _aegisNameToId(groupAegisName);

                    if (groupId == -1)
                    {
                        debug.ReportIdException("Item ID '" + groupAegisName + "' couldn't be found.", groupAegisName, ErrorLevel.Critical);
                        continue;
                    }

                    if (!table.ContainsKey(groupId))
                    {
                        ReadableTuple <int> tupleParent = new ReadableTuple <int>(groupId, db.AttributeList);
                        tupleParent.SetRawValue(ServerItemGroupAttributes.Table, new Dictionary <int, ReadableTuple <int> >());
                        table.Add(groupId, tupleParent);
                    }

                    var dico = (Dictionary <int, ReadableTuple <int> >)table.GetRaw(groupId, ServerItemGroupAttributes.Table);

                    foreach (var itemEntry in group.Value)
                    {
                        string itemName;
                        int    quantity;

                        if (itemEntry is ParserList)
                        {
                            ParserList list = (ParserList)itemEntry;
                            itemName = list.Objects[0].ObjectValue;
                            quantity = Int32.Parse(list.Objects[1].ObjectValue);
                        }
                        else if (itemEntry is ParserString)
                        {
                            itemName = itemEntry.ObjectValue;
                            quantity = 1;
                        }
                        else
                        {
                            debug.ReportIdException("Unknown item entry in group '" + groupAegisName + "'.", groupAegisName, ErrorLevel.Critical);
                            continue;
                        }

                        int itemId = _aegisNameToId(itemName);

                        if (itemId == -1)
                        {
                            debug.ReportIdException("Failed to parse the item '" + itemName + "'.", itemName, ErrorLevel.Critical);
                            continue;
                        }

                        ReadableTuple <int> tuple = new ReadableTuple <int>(itemId, ServerItemGroupSubAttributes.AttributeList);
                        tuple.SetRawValue(ServerItemGroupSubAttributes.Rate, quantity);
                        tuple.SetRawValue(ServerItemGroupSubAttributes.ParentGroup, groupId);
                        dico[itemId] = tuple;
                    }
                }
            }
        }
Example #8
0
        public static void Loader(DbDebugItem <int> debug, AbstractDb <int> db)
        {
            if (debug.FileType == FileType.Yaml)
            {
                var ele           = new YamlParser(debug.FilePath);
                var table         = debug.AbsractDb.Table;
                var attributeList = debug.AbsractDb.AttributeList;

                if (ele.Output == null || ((ParserArray)ele.Output).Objects.Count == 0 || (ele.Output["copy_paste"] ?? ele.Output["Body"]) == null)
                {
                    return;
                }

                foreach (var achievement in ele.Output["copy_paste"] ?? ele.Output["Body"])
                {
                    try {
                        int cheevoId = Int32.Parse((achievement["ID"] ?? achievement["Id"]).ObjectValue);

                        table.SetRaw(cheevoId, ServerCheevoAttributes.Name, achievement["Name"] ?? "");
                        table.SetRaw(cheevoId, ServerCheevoAttributes.GroupId, achievement["Group"] ?? "");
                        table.SetRaw(cheevoId, ServerCheevoAttributes.Score, achievement["Score"] ?? "");
                        table.SetRaw(cheevoId, ServerCheevoAttributes.Map, achievement["Map"] ?? "");

                        if (achievement["Reward"] != null)
                        {
                            var reward = achievement["Reward"];
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardId, reward["ItemID"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardAmount, reward["Amount"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardTitleId, reward["TitleID"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardScript, (reward["Script"] ?? "").Trim(' ', '\t'));
                        }

                        if (achievement["Target"] != null)
                        {
                            int targetId;

                            foreach (var target in achievement["Target"])
                            {
                                targetId = Int32.Parse(target["Id"] ?? "0");
                                table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.TargetId1.Index + targetId], target["MobID"] ?? "");
                                table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.TargetCount1.Index + targetId], target["Count"] ?? "");
                            }
                        }

                        if (achievement["Condition"] != null)
                        {
                            table.SetRaw(cheevoId, ServerCheevoAttributes.Condition, achievement["Condition"].ObjectValue.Trim(' ', '\t'));
                        }

                        if (achievement["Dependent"] != null)
                        {
                            int           id;
                            bool          first      = true;
                            StringBuilder dependency = new StringBuilder();

                            foreach (var target in achievement["Dependent"])
                            {
                                id = Int32.Parse(target["Id"] ?? "0");

                                if (first)
                                {
                                    dependency.Append(id);
                                    first = false;
                                }
                                else
                                {
                                    dependency.Append(":" + id);
                                }
                            }

                            table.SetRaw(cheevoId, ServerCheevoAttributes.Dependent, dependency.ToString());
                        }
                    }
                    catch {
                        if ((achievement["ID"] ?? achievement["Id"]) == null)
                        {
                            if (!debug.ReportIdException("#", achievement.Line))
                            {
                                return;
                            }
                        }
                        else if (!debug.ReportIdException((achievement["ID"] ?? achievement["Id"]), achievement.Line))
                        {
                            return;
                        }
                    }
                }
            }
            else if (debug.FileType == FileType.Conf)
            {
                var ele           = new LibconfigParser(debug.FilePath);
                var table         = debug.AbsractDb.Table;
                var attributeList = debug.AbsractDb.AttributeList;

                foreach (var achievement in ele.Output["copy_paste"] ?? ele.Output["achievement_db"])
                {
                    int cheevoId = Int32.Parse(achievement["id"].ObjectValue);

                    table.SetRaw(cheevoId, ServerCheevoAttributes.Name, achievement["name"] ?? "");
                    table.SetRaw(cheevoId, ServerCheevoAttributes.GroupId, achievement["group"] ?? "");
                    table.SetRaw(cheevoId, ServerCheevoAttributes.Score, achievement["score"] ?? "");

                    if (achievement["reward"] != null)
                    {
                        foreach (var reward in achievement["reward"])
                        {
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardId, reward["itemid"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardAmount, reward["amount"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardTitleId, reward["titleid"] ?? "");
                            table.SetRaw(cheevoId, ServerCheevoAttributes.RewardScript, (reward["script"] ?? "").Trim(' ', '\t'));
                            break;
                        }
                    }

                    if (achievement["target"] != null)
                    {
                        int targetId = 0;

                        foreach (var target in achievement["target"])
                        {
                            table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.TargetId1.Index + targetId], target["mobid"] ?? "");
                            table.SetRaw(cheevoId, attributeList[ServerCheevoAttributes.TargetCount1.Index + targetId], target["count"] ?? "");
                            targetId += 2;
                        }
                    }

                    if (achievement["condition"] != null)
                    {
                        table.SetRaw(cheevoId, ServerCheevoAttributes.Condition, achievement["condition"].ObjectValue);
                    }

                    if (achievement["dependent"] != null)
                    {
                        int           id         = 0;
                        StringBuilder dependency = new StringBuilder();

                        foreach (var target in achievement["dependent"])
                        {
                            if (id == 0)
                            {
                                dependency.Append(target.ObjectValue);
                            }
                            else
                            {
                                dependency.Append(":" + target.ObjectValue);
                            }

                            id++;
                        }

                        table.SetRaw(cheevoId, ServerCheevoAttributes.Dependent, dependency.ToString());
                    }
                }
            }
        }
Example #9
0
        public static void Loader <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Txt)
            {
                DbIOMethods.DbLoaderAny(debug, db, TextFileHelper.GetElementsByCommas2);

                if (db.ProjectDatabase.IsRenewal)
                {
                    string val;

                    foreach (var tuple in db.Table.FastItems)
                    {
                        try {
                            val = tuple.GetStringValue(ServerItemAttributes.Attack.Index);

                            if (val != null && val.Contains(":"))
                            {
                                string[] values = val.Split(':');

                                tuple.SetRawValue(ServerItemAttributes.Attack, values[0]);
                                tuple.SetRawValue(ServerItemAttributes.Matk, values[1]);
                            }
                        }
                        catch (Exception) {
                            if (!debug.ReportIdException(tuple.Key))
                            {
                                return;
                            }
                        }
                    }
                }
            }
            else if (debug.FileType == FileType.Conf)
            {
                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (var item in ele.Output["copy_paste"] ?? ele.Output["item_db"])
                {
                    TKey itemId = (TKey)(object)Int32.Parse(item["Id"]);

                    var defaultGender = "2";

                    // The .conf is actually quite confusing
                    // Overriding values are not setup for some reason and the parser
                    // has to guess and fix the issues.
                    int ival;
                    if (Int32.TryParse(item["Id"], out ival))
                    {
                        // Whips overrides the default property to 0
                        if (ival >= 1950 && ival < 2000)
                        {
                            defaultGender = "0";
                        }

                        // Bride_Ring, I'm assuming it's hard coded in the client and
                        // people thought it would be wise to ignore setting its gender
                        if (ival == 2635)
                        {
                            defaultGender = "0";
                        }

                        // Bridegroom_Ring
                        if (ival == 2634)
                        {
                            defaultGender = "1";
                        }
                    }

                    table.SetRaw(itemId, ServerItemAttributes.AegisName, item["AegisName"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Name, item["Name"] ?? "");

                    var type = item["Type"] ?? "3";
                    var defaultRefineable = "false";

                    if (type == "4" || type == "5")
                    {
                        defaultRefineable = "true";

                        if (!SdeAppConfiguration.RevertItemTypes)
                        {
                            if (type == "4")
                            {
                                type = "5";
                            }
                            else if (type == "5")
                            {
                                type = "4";
                            }
                        }
                    }

                    table.SetRaw(itemId, ServerItemAttributes.Type, type);
                    table.SetRaw(itemId, ServerItemAttributes.Buy, item["Buy"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Sell, item["Sell"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Weight, item["Weight"] ?? "0");
                    table.SetRaw(itemId, ServerItemAttributes.Attack, item["Atk"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Defense, item["Def"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Range, item["Range"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.NumberOfSlots, item["Slots"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.ApplicableJob, _jobToId(debug.AbsractDb.To <int>(), item));
                    table.SetRaw(itemId, ServerItemAttributes.Upper, item["Upper"] ?? "0x3f");
                    table.SetRaw(itemId, ServerItemAttributes.Gender, item["Gender"] ?? defaultGender);
                    table.SetRaw(itemId, ServerItemAttributes.Location, item["Loc"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.WeaponLevel, item["WeaponLv"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.EquipLevel, item["EquipLv"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Refineable, item["Refine"] ?? defaultRefineable);
                    table.SetRaw(itemId, ServerItemAttributes.ClassNumber, item["View"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Script, item["Script"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.OnEquipScript, item["OnEquipScript"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.OnUnequipScript, item["OnUnequipScript"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.KeepAfterUse, item["KeepAfterUse"] ?? "false");
                    table.SetRaw(itemId, ServerItemAttributes.ForceSerial, item["ForceSerial"] ?? "false");

                    table.SetRaw(itemId, ServerItemAttributes.Matk, item["Matk"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.BindOnEquip, item["BindOnEquip"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.BuyingStore, item["BuyingStore"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Delay, item["Delay"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Stack, item["Stack"] ?? "");
                    table.SetRaw(itemId, ServerItemAttributes.Sprite, item["Sprite"] ?? "");

                    table.SetRaw(itemId, ServerItemAttributes.TradeOverride, item["Trade.override"] ?? "100");
                    table.SetRaw(itemId, ServerItemAttributes.TradeFlag, (
                                     (!Boolean.Parse((item["Trade.nodrop"] ?? "false")) ? 0 : (1 << 0)) |
                                     (!Boolean.Parse((item["Trade.notrade"] ?? "false")) ? 0 : (1 << 1)) |
                                     (!Boolean.Parse((item["Trade.partneroverride"] ?? "false")) ? 0 : (1 << 2)) |
                                     (!Boolean.Parse((item["Trade.noselltonpc"] ?? "false")) ? 0 : (1 << 3)) |
                                     (!Boolean.Parse((item["Trade.nocart"] ?? "false")) ? 0 : (1 << 4)) |
                                     (!Boolean.Parse((item["Trade.nostorage"] ?? "false")) ? 0 : (1 << 5)) |
                                     (!Boolean.Parse((item["Trade.nogstorage"] ?? "false")) ? 0 : (1 << 6)) |
                                     (!Boolean.Parse((item["Trade.nomail"] ?? "false")) ? 0 : (1 << 7)) |
                                     (!Boolean.Parse((item["Trade.noauction"] ?? "false")) ? 0 : (1 << 8))
                                     ).ToString(CultureInfo.InvariantCulture));

                    table.SetRaw(itemId, ServerItemAttributes.NoUseOverride, item["Nouse.override"] ?? "100");
                    table.SetRaw(itemId, ServerItemAttributes.NoUseFlag, (
                                     (!Boolean.Parse((item["Nouse.sitting"] ?? "false")) ? 0 : (1 << 0))
                                     ).ToString(CultureInfo.InvariantCulture));
                }
            }
        }
Example #10
0
        public static void Loader <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Txt)
            {
                List <DbAttribute> attributes = new List <DbAttribute>(db.AttributeList.Attributes);

                bool  rAthenaNewFormat = false;
                int[] oldColumns       =
                {
                    0, 1, 2, 3, 4, 5, 6, 7, 17
                };

                foreach (string[] elements in TextFileHelper.GetElementsByCommasQuotes(FtpHelper.ReadAllBytes(debug.FilePath)))
                {
                    try {
                        TKey id = (TKey)TypeDescriptor.GetConverter(typeof(TKey)).ConvertFrom(elements[0]);

                        if (elements.Length == 18)
                        {
                            rAthenaNewFormat             = true;
                            db.Attached["rAthenaFormat"] = 18;
                        }

                        if (rAthenaNewFormat)
                        {
                            for (int index = 1; index < elements.Length; index++)
                            {
                                DbAttribute property = attributes[index];
                                db.Table.SetRaw(id, property, elements[index]);
                            }
                        }
                        else
                        {
                            for (int index = 1; index < oldColumns.Length; index++)
                            {
                                DbAttribute property = attributes[oldColumns[index]];
                                db.Table.SetRaw(id, property, elements[index]);
                            }
                        }
                    }
                    catch {
                        if (elements.Length <= 0)
                        {
                            if (!debug.ReportIdException("#"))
                            {
                                return;
                            }
                        }
                        else if (!debug.ReportIdException(elements[0]))
                        {
                            return;
                        }
                    }
                }
            }
            else if (debug.FileType == FileType.Conf)
            {
                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (var quest in ele.Output["copy_paste"] ?? ele.Output["quest_db"])
                {
                    try {
                        int  id      = Int32.Parse(quest["Id"]);
                        TKey questId = (TKey)(object)id;

                        table.SetRaw(questId, ServerQuestsAttributes.QuestTitle, "\"" + (quest["Name"] ?? "") + "\"");
                        table.SetRaw(questId, ServerQuestsAttributes.TimeLimit, (quest["TimeLimit"] ?? "0"));

                        var targets = quest["Targets"] as LibconfigList;

                        if (targets != null)
                        {
                            int count = 0;

                            foreach (var target in targets)
                            {
                                if (count >= 3)
                                {
                                    debug.ReportIdExceptionWithError("The maximum amount of targets has been reached (up to 3).", id, targets.Line);
                                    continue;
                                }

                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.TargetId1.Index + 2 * count], target["MobId"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Val1.Index + 2 * count], target["Count"] ?? "0");
                                count++;
                            }
                        }

                        var drops = quest["Drops"] as LibconfigList;

                        if (drops != null)
                        {
                            int count = 0;

                            foreach (var drop in drops)
                            {
                                if (count >= 3)
                                {
                                    debug.ReportIdExceptionWithError("The maximum amount of drops has been reached (up to 3).", id, drops.Line);
                                    continue;
                                }

                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.NameId1.Index + 3 * count], drop["ItemId"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Rate1.Index + 3 * count], drop["Rate"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.MobId1.Index + 3 * count], drop["MobId"] ?? "0");
                                count++;
                            }
                        }
                    }
                    catch {
                        if (quest["Id"] == null)
                        {
                            if (!debug.ReportIdException("#", quest.Line))
                            {
                                return;
                            }
                        }
                        else if (!debug.ReportIdException(quest["Id"], quest.Line))
                        {
                            return;
                        }
                    }
                }
            }
        }
Example #11
0
        public static void Writer <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Yaml)
            {
                var itemDb = SdeEditor.Instance.ProjectDatabase.GetMetaTable <int>(ServerDbs.Items);
                var mobDb  = SdeEditor.Instance.ProjectDatabase.GetMetaTable <int>(ServerDbs.Mobs);

                try {
                    var lines = new YamlParser(debug.OldPath, ParserMode.Write, "Id");

                    if (lines.Output == null)
                    {
                        return;
                    }

                    lines.Remove(db, v => DbIOUtils.Id2Name(mobDb, ServerMobAttributes.AegisName, v.ToString()));

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <int>()))
                    {
                        string key = tuple.Key.ToString();

                        StringBuilder builder = new StringBuilder();
                        WriteEntryYaml(builder, tuple, itemDb, mobDb);
                        lines.Write(key, builder.ToString().Trim('\r', '\n'));
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
            else if (debug.FileType == FileType.Conf)
            {
                try {
                    var lines = new LibconfigParser(debug.OldPath, ParserMode.Write);
                    lines.Remove(db);
                    string line;

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                    {
                        int           key     = tuple.GetKey <int>();
                        StringBuilder builder = new StringBuilder();
                        WriteEntry(builder, tuple);
                        line = builder.ToString();
                        lines.Write(key.ToString(CultureInfo.InvariantCulture), line);
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
            else
            {
                int format = db.GetAttacked <int>("rAthenaFormat");

                try {
                    IntLineStream lines = new IntLineStream(debug.OldPath);
                    lines.Remove(db);
                    string line;

                    foreach (ReadableTuple <TKey> tuple in db.Table.FastItems.Where(p => !p.Normal).OrderBy(p => p.GetKey <TKey>()))
                    {
                        int key = tuple.GetKey <int>();

                        if (format == 18)
                        {
                            line = string.Join(",", tuple.GetRawElements().Take(18).Select(p => (p ?? "").ToString()).ToArray());
                        }
                        else
                        {
                            line = string.Join(",", tuple.GetRawElements().Take(ServerQuestsAttributes.MobId1.Index).Concat(new object[] { tuple.GetRawValue(ServerQuestsAttributes.QuestTitle.Index) }).Select(p => (p ?? "").ToString()).ToArray());
                        }

                        lines.Write(key, line);
                    }

                    lines.WriteFile(debug.FilePath);
                }
                catch (Exception err) {
                    debug.ReportException(err);
                }
            }
        }
Example #12
0
        public static void Loader <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Yaml)
            {
                var ele   = new YamlParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                if (ele.Output == null || ((ParserArray)ele.Output).Objects.Count == 0 || (ele.Output["copy_paste"] ?? ele.Output["Body"]) == null)
                {
                    return;
                }

                var mobDb  = SdeEditor.Instance.ProjectDatabase.GetMetaTable <int>(ServerDbs.Mobs);
                var itemDb = SdeEditor.Instance.ProjectDatabase.GetMetaTable <int>(ServerDbs.Items);

                foreach (var quest in ele.Output["copy_paste"] ?? ele.Output["Body"])
                {
                    try {
                        int  id      = Int32.Parse(quest["Id"]);
                        TKey questId = (TKey)(object)id;

                        table.SetRaw(questId, ServerQuestsAttributes.QuestTitle, "\"" + (quest["Title"] ?? "").Trim('\"') + "\"");
                        table.SetRaw(questId, ServerQuestsAttributes.TimeLimitNew, (quest["TimeLimit"] ?? ""));

                        var targets = quest["Targets"] as ParserList;

                        if (targets != null)
                        {
                            int count = 0;

                            foreach (var target in targets)
                            {
                                if (count >= 3)
                                {
                                    debug.ReportIdExceptionWithError("The maximum amount of targets has been reached (up to 3).", id, targets.Line);
                                    continue;
                                }

                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.TargetId1.Index + 2 * count], DbIOUtils.Name2Id(mobDb, ServerMobAttributes.AegisName, target["Mob"] ?? "", "mob_db", true));
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Val1.Index + 2 * count], target["Count"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Id1.Index + count], target["Id"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Race1.Index + count], target["Race"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Size1.Index + count], target["Size"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Element1.Index + count], target["Element"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.MinLevel1.Index + count], target["MinLevel"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.MaxLevel1.Index + count], target["MaxLevel"] ?? "0");
                                count++;
                            }
                        }

                        var drops = quest["Drops"] as ParserList;

                        if (drops != null)
                        {
                            int count = 0;

                            foreach (var drop in drops)
                            {
                                if (count >= 3)
                                {
                                    debug.ReportIdExceptionWithError("The maximum amount of drops has been reached (up to 3).", id, drops.Line);
                                    continue;
                                }

                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.NameId1.Index + 3 * count], DbIOUtils.Name2Id(itemDb, ServerItemAttributes.AegisName, drop["Item"] ?? "", "item_db", true));
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Rate1.Index + 3 * count], drop["Rate"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.MobId1.Index + 3 * count], DbIOUtils.Name2Id(mobDb, ServerMobAttributes.AegisName, drop["Mob"] ?? "", "mob_db", true));
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Count1.Index + count], drop["Count"] ?? "1");
                                count++;
                            }
                        }
                    }
                    catch {
                        if (quest["Id"] == null)
                        {
                            if (!debug.ReportIdException("#", quest.Line))
                            {
                                return;
                            }
                        }
                        else if (!debug.ReportIdException(quest["Id"], quest.Line))
                        {
                            return;
                        }
                    }
                }
            }
            else if (debug.FileType == FileType.Txt)
            {
                List <DbAttribute> attributes = new List <DbAttribute>(db.AttributeList.Attributes);

                bool  rAthenaNewFormat = false;
                int[] oldColumns       =
                {
                    0, 1, 2, 3, 4, 5, 6, 7, 17
                };

                foreach (string[] elements in TextFileHelper.GetElementsByCommasQuotes(IOHelper.ReadAllBytes(debug.FilePath)))
                {
                    try {
                        TKey id = (TKey)TypeDescriptor.GetConverter(typeof(TKey)).ConvertFrom(elements[0]);

                        if (elements.Length == 18)
                        {
                            rAthenaNewFormat             = true;
                            db.Attached["rAthenaFormat"] = 18;
                        }

                        if (rAthenaNewFormat)
                        {
                            for (int index = 1; index < elements.Length; index++)
                            {
                                DbAttribute property = attributes[index];
                                db.Table.SetRaw(id, property, elements[index]);
                            }
                        }
                        else
                        {
                            for (int index = 1; index < oldColumns.Length; index++)
                            {
                                DbAttribute property = attributes[oldColumns[index]];
                                db.Table.SetRaw(id, property, elements[index]);
                            }
                        }
                    }
                    catch {
                        if (elements.Length <= 0)
                        {
                            if (!debug.ReportIdException("#"))
                            {
                                return;
                            }
                        }
                        else if (!debug.ReportIdException(elements[0]))
                        {
                            return;
                        }
                    }
                }
            }
            else if (debug.FileType == FileType.Conf)
            {
                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (var quest in ele.Output["copy_paste"] ?? ele.Output["quest_db"])
                {
                    try {
                        int  id      = Int32.Parse(quest["Id"]);
                        TKey questId = (TKey)(object)id;

                        table.SetRaw(questId, ServerQuestsAttributes.QuestTitle, "\"" + (quest["Name"] ?? "") + "\"");
                        table.SetRaw(questId, ServerQuestsAttributes.TimeLimit, (quest["TimeLimit"] ?? "0"));

                        var targets = quest["Targets"] as ParserList;

                        if (targets != null)
                        {
                            int count = 0;

                            foreach (var target in targets)
                            {
                                if (count >= 3)
                                {
                                    debug.ReportIdExceptionWithError("The maximum amount of targets has been reached (up to 3).", id, targets.Line);
                                    continue;
                                }

                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.TargetId1.Index + 2 * count], target["MobId"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Val1.Index + 2 * count], target["Count"] ?? "0");
                                count++;
                            }
                        }

                        var drops = quest["Drops"] as ParserList;

                        if (drops != null)
                        {
                            int count = 0;

                            foreach (var drop in drops)
                            {
                                if (count >= 3)
                                {
                                    debug.ReportIdExceptionWithError("The maximum amount of drops has been reached (up to 3).", id, drops.Line);
                                    continue;
                                }

                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.NameId1.Index + 3 * count], drop["ItemId"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.Rate1.Index + 3 * count], drop["Rate"] ?? "0");
                                table.SetRaw(questId, ServerQuestsAttributes.AttributeList[ServerQuestsAttributes.MobId1.Index + 3 * count], drop["MobId"] ?? "0");
                                count++;
                            }
                        }
                    }
                    catch {
                        if (quest["Id"] == null)
                        {
                            if (!debug.ReportIdException("#", quest.Line))
                            {
                                return;
                            }
                        }
                        else if (!debug.ReportIdException(quest["Id"], quest.Line))
                        {
                            return;
                        }
                    }
                }
            }
        }
Example #13
0
        public static void Loader <TKey>(DbDebugItem <TKey> debug, AbstractDb <TKey> db)
        {
            if (debug.FileType == FileType.Txt)
            {
                DbIOMethods.DbLoaderAny(debug, db, TextFileHelper.GetElementsByCommas);
            }
            else if (debug.FileType == FileType.Conf)
            {
                DbIOMethods.GuessAttributes(new string[] { }, db.AttributeList.Attributes.ToList(), -1, db);

                var ele   = new LibconfigParser(debug.FilePath);
                var table = debug.AbsractDb.Table;

                foreach (var parser in ele.Output["copy_paste"] ?? ele.Output["mob_db"])
                {
                    TKey itemId = (TKey)(object)Int32.Parse(parser["Id"]);

                    table.SetRaw(itemId, ServerMobAttributes.SpriteName, parser["SpriteName"].ObjectValue);
                    table.SetRaw(itemId, ServerMobAttributes.IRoName, parser["Name"].ObjectValue);
                    table.SetRaw(itemId, ServerMobAttributes.KRoName, parser["Name"].ObjectValue);
                    table.SetRaw(itemId, ServerMobAttributes.Lv, parser["Lv"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Hp, parser["Hp"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Sp, parser["Sp"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Exp, parser["Exp"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.JExp, parser["JExp"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.AttackRange, parser["AttackRange"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Atk1, Extensions.ParseBracket(parser["Attack"] ?? "[0, 0]", 0));
                    table.SetRaw(itemId, ServerMobAttributes.Atk2, (Int32.Parse(Extensions.ParseBracket(parser["Attack"] ?? "[0, 0]", 0)) + Int32.Parse(Extensions.ParseBracket(parser["Attack"] ?? "[0, 0]", 1))).ToString(CultureInfo.InvariantCulture));
                    table.SetRaw(itemId, ServerMobAttributes.Def, parser["Def"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Mdef, parser["Mdef"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Str, parser["Stats.Str"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Agi, parser["Stats.Agi"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Vit, parser["Stats.Vit"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Int, parser["Stats.Int"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Dex, parser["Stats.Dex"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.Luk, parser["Stats.Luk"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.ViewRange, parser["ViewRange"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.ChaseRange, parser["ChaseRange"] ?? "1");
                    table.SetRaw(itemId, ServerMobAttributes.Size, SdeEditor.Instance.ProjectDatabase.ConstantToInt(parser["Size"] ?? "1").ToString(CultureInfo.InvariantCulture));
                    table.SetRaw(itemId, ServerMobAttributes.Race, SdeEditor.Instance.ProjectDatabase.ConstantToInt(parser["Race"] ?? "0").ToString(CultureInfo.InvariantCulture));

                    var element = parser["Element"];
                    int elLevel;
                    int elType;

                    if (element != null)
                    {
                        debug.AbsractDb.Attached["MobDb.UseConstants"] = true;
                        elLevel = Int32.Parse(((LibconfigList)element).Objects[1].ObjectValue);
                        elType  = SdeEditor.Instance.ProjectDatabase.ConstantToInt(((LibconfigList)element).Objects[0].ObjectValue);
                    }
                    else
                    {
                        elLevel = 0;
                        elType  = 0;
                    }

                    table.SetRaw(itemId, ServerMobAttributes.Element, ((elLevel) * 20 + elType).ToString(CultureInfo.InvariantCulture));

                    table.SetRaw(itemId, ServerMobAttributes.Mode, (
                                     (!Boolean.Parse((parser["Mode.CanMove"] ?? "false")) ? 0 : (1 << 0)) |
                                     (!Boolean.Parse((parser["Mode.Looter"] ?? "false")) ? 0 : (1 << 1)) |
                                     (!Boolean.Parse((parser["Mode.Aggressive"] ?? "false")) ? 0 : (1 << 2)) |
                                     (!Boolean.Parse((parser["Mode.Assist"] ?? "false")) ? 0 : (1 << 3)) |
                                     (!Boolean.Parse((parser["Mode.CastSensorIdle"] ?? "false")) ? 0 : (1 << 4)) |
                                     (!Boolean.Parse((parser["Mode.Boss"] ?? "false")) ? 0 : (1 << 5)) |
                                     (!Boolean.Parse((parser["Mode.Plant"] ?? "false")) ? 0 : (1 << 6)) |
                                     (!Boolean.Parse((parser["Mode.CanAttack"] ?? "false")) ? 0 : (1 << 7)) |
                                     (!Boolean.Parse((parser["Mode.Detector"] ?? "false")) ? 0 : (1 << 8)) |
                                     (!Boolean.Parse((parser["Mode.CastSensorChase"] ?? "false")) ? 0 : (1 << 9)) |
                                     (!Boolean.Parse((parser["Mode.ChangeChase"] ?? "false")) ? 0 : (1 << 10)) |
                                     (!Boolean.Parse((parser["Mode.Angry"] ?? "false")) ? 0 : (1 << 11)) |
                                     (!Boolean.Parse((parser["Mode.ChangeTargetMelee"] ?? "false")) ? 0 : (1 << 12)) |
                                     (!Boolean.Parse((parser["Mode.ChangeTargetChase"] ?? "false")) ? 0 : (1 << 13)) |
                                     (!Boolean.Parse((parser["Mode.TargetWeak"] ?? "false")) ? 0 : (1 << 14))
                                     ).ToString(CultureInfo.InvariantCulture));

                    table.SetRaw(itemId, ServerMobAttributes.MoveSpeed, parser["MoveSpeed"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.AttackDelay, parser["AttackDelay"] ?? "4000");
                    table.SetRaw(itemId, ServerMobAttributes.AttackMotion, parser["AttackMotion"] ?? "2000");
                    table.SetRaw(itemId, ServerMobAttributes.DamageMotion, parser["DamageMotion"] ?? "0");
                    table.SetRaw(itemId, ServerMobAttributes.MvpExp, parser["MvpExp"] ?? "0");

                    int id = 0;

                    var mvpDrops = parser["MvpDrops"];

                    if (mvpDrops != null)
                    {
                        foreach (var drop in mvpDrops)
                        {
                            if (id > 2)
                            {
                                debug.ReportIdException("Too many MVP mob drops.", itemId, ErrorLevel.Critical);
                                break;
                            }

                            int tItemId = SdeDatabase.AegisNameToId(debug, itemId, ((LibconfigKeyValue)drop).Key);
                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1ID.Index + 2 * id], tItemId.ToString(CultureInfo.InvariantCulture));
                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Mvp1ID.Index + 2 * id + 1], drop.ObjectValue);
                            id++;
                        }
                    }

                    id = 0;

                    var regularDrops = parser["Drops"];

                    if (regularDrops != null)
                    {
                        foreach (var drop in regularDrops)
                        {
                            if (id > 8)
                            {
                                debug.ReportIdException("Too regular mob drops.", itemId, ErrorLevel.Critical);
                                break;
                            }

                            int tItemId = SdeDatabase.AegisNameToId(debug, itemId, ((LibconfigKeyValue)drop).Key);
                            var tuple   = SdeDatabase.GetTuple(debug, tItemId);

                            if (tuple != null && tuple.GetValue <TypeType>(ServerItemAttributes.Type) == TypeType.Card)
                            {
                                table.SetRaw(itemId, ServerMobAttributes.DropCardid, tItemId.ToString(CultureInfo.InvariantCulture));
                                table.SetRaw(itemId, ServerMobAttributes.DropCardper, drop.ObjectValue);
                                id++;
                                continue;
                            }

                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1ID.Index + 2 * id], tItemId.ToString(CultureInfo.InvariantCulture));
                            table.SetRaw(itemId, ServerMobAttributes.AttributeList[ServerMobAttributes.Drop1ID.Index + 2 * id + 1], drop.ObjectValue);
                            id++;
                        }
                    }
                }
            }
        }