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); } }
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); } } }
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); } } }
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; } } } } }
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()); } } } }
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(); } } }
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; } } } }
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()); } } } }
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)); } } }
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; } } } } }
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); } } }
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; } } } } }
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++; } } } } }