protected override void ParseAsXmlStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (XmlTextReader reader = new XmlTextReader(stream)) { Info current = null; string value = null; while (reader.Read()) { try { ProgressReport.Invoke(); switch (reader.NodeType) { case XmlNodeType.Element: if (reader.Name.ToUpperInvariant() == "SKILL") current = new Info(); value = null; break; case XmlNodeType.Text: value = reader.Value; break; case XmlNodeType.EndElement: string[] values; switch (reader.Name.ToUpperInvariant()) { case "SKILL": goto Add; case "SKILLID": current.skillid = uint.Parse(value, NumberFormatInfo.InvariantInfo); current.skill = FindSkillHandler(current.skillid, methods); break; case "SKILLTYPE": current.skilltype = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "MAXSKILLEXP": current.maximumexperience = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "GROWLEVEL": current.maximumgrowlevel = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "MINRANGE": current.minimumrange = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "MAXRANGE": current.maximumrange = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "TARGET": current.target = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "CASTTIME": current.casttime = int.Parse(value, NumberFormatInfo.InvariantInfo); break; case "DELAY": current.delay = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "SP": current.SP = int.Parse(value, NumberFormatInfo.InvariantInfo); break; case "SPECIAL": current.special = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "SPECIALLVREQUIREMENT": current.specialJlvl = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "RACE": current.race = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "STANCE": current.stance = ConsoleUtils.ParseToUintArray(value); break; case "ADDITION": current.addition = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "HATEONCAST": current.requiredlp = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "HATE": current.hate = short.Parse(value, NumberFormatInfo.InvariantInfo); break; case "ATTACKTYPE": current.attacktype = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "ELEMENTTYPE": current.elementtype = byte.Parse(value, NumberFormatInfo.InvariantInfo); break; case "WEAPONREQUIREMENT": values = value.Split(','); current.requiredWeapons = new byte[] { byte.Parse(values[0], NumberFormatInfo.InvariantInfo), //HAND byte.Parse(values[1], NumberFormatInfo.InvariantInfo), //SHORTSWORD byte.Parse(values[2], NumberFormatInfo.InvariantInfo), //LONGSWORD byte.Parse(values[3], NumberFormatInfo.InvariantInfo), //SWORDSTICK byte.Parse(values[4], NumberFormatInfo.InvariantInfo), //DAMPTFLINTE byte.Parse(values[5], NumberFormatInfo.InvariantInfo), //BOW byte.Parse(values[6], NumberFormatInfo.InvariantInfo), //DAMPTSCHWERTZ byte.Parse(values[7], NumberFormatInfo.InvariantInfo), //KATANA byte.Parse(values[8], NumberFormatInfo.InvariantInfo), //SPECIALIST }; break; case "JOBREQUIREMENT": values = value.Split(','); current.requiredJobs = new byte[] { byte.Parse(values[0], NumberFormatInfo.InvariantInfo), //NOVICE byte.Parse(values[1], NumberFormatInfo.InvariantInfo), //SWORDSMAN byte.Parse(values[3], NumberFormatInfo.InvariantInfo), //RECRUIT byte.Parse(values[2], NumberFormatInfo.InvariantInfo), //THIEF byte.Parse(values[4], NumberFormatInfo.InvariantInfo), //ENCHANTER byte.Parse(values[5], NumberFormatInfo.InvariantInfo), //CLOWN byte.Parse(values[6], NumberFormatInfo.InvariantInfo), //KNIGHT byte.Parse(values[7], NumberFormatInfo.InvariantInfo), //ASSASIN byte.Parse(values[8], NumberFormatInfo.InvariantInfo), //SPECIALIST byte.Parse(values[9], NumberFormatInfo.InvariantInfo), //SAGE byte.Parse(values[10], NumberFormatInfo.InvariantInfo), //GAMBLER byte.Parse(values[11], NumberFormatInfo.InvariantInfo), //FALCATA byte.Parse(values[12], NumberFormatInfo.InvariantInfo), //FPRSYTHIE byte.Parse(values[13], NumberFormatInfo.InvariantInfo), //NEMOPHILA byte.Parse(values[14], NumberFormatInfo.InvariantInfo) //VEILCHENBLAU }; break; } break; } } catch (Exception e) { throw new SystemException(string.Format("File caused a error at fileline: {0}", reader.LineNumber), e); } continue; Add: try { current.skill = FindSkillHandler(current.skillid, methods); this.spells.Add(current.skillid, current); } catch (Exception) { Console.WriteLine("Duplicate Id detected {0}", current.skillid); } } } }
protected override void ParseAsCsvStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); Zone zone; byte count = byte.Parse(fields[5], System.Globalization.NumberFormatInfo.InvariantInfo); if (Singleton.Zones.TryGetZone(uint.Parse(fields[1], NumberFormatInfo.InvariantInfo), out zone)) { for (int i = 0; i < count; i++) { float x = float.Parse(fields[2], System.Globalization.NumberFormatInfo.InvariantInfo); float y = float.Parse(fields[3], System.Globalization.NumberFormatInfo.InvariantInfo); float z = float.Parse(fields[4], System.Globalization.NumberFormatInfo.InvariantInfo); int spawnrange = int.Parse(fields[6], System.Globalization.NumberFormatInfo.InvariantInfo); uint modelid = uint.Parse(fields[0], System.Globalization.NumberFormatInfo.InvariantInfo); MapObject regionObject; Point location = GeneratePointInRange(new Point(x, y, z), spawnrange); bool isspawned = Singleton.Templates.SpawnNpcInstance(modelid, location, rand.Next(0, ushort.MaxValue), zone, out regionObject); if (!isspawned) { if (mobspawnsaswarnings.Enabled) WriteWarning("WorldObjectsFactory (multi)", "Cannot initialize {1} {0}", fields[0], "npc"); else WriteError("WorldObjectsFactory (multi)", "Cannot initialize {1} {0}", fields[0], "npc"); } } } } } }
/// <summary> /// Default included event that invokes a csv based stream. /// </summary> /// <param name="stream">Stream to read data from</param> /// <param name="ProgressReport">Class to report the state of reading</param> protected override void ParseAsCsvStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); uint weapontype = uint.Parse(fields[0], NumberFormatInfo.InvariantInfo); Dictionary<uint, Info> temp; bool isnew = weapons.TryGetValue(weapontype, out temp); if (isnew == false) temp = new Dictionary<uint, Info>(); uint key = uint.Parse(fields[1], NumberFormatInfo.InvariantInfo); uint maxdura = uint.Parse(fields[2], NumberFormatInfo.InvariantInfo); ushort minshortatk = ushort.Parse(fields[3], NumberFormatInfo.InvariantInfo); ushort maxshortatk = ushort.Parse(fields[4], NumberFormatInfo.InvariantInfo); ushort minrangeatk = ushort.Parse(fields[5], NumberFormatInfo.InvariantInfo); ushort maxrangeatk = ushort.Parse(fields[6], NumberFormatInfo.InvariantInfo); ushort minmagicatk = ushort.Parse(fields[7], NumberFormatInfo.InvariantInfo); ushort maxmagicatk = ushort.Parse(fields[8], NumberFormatInfo.InvariantInfo); uint weaponskill = uint.Parse(fields[10], NumberFormatInfo.InvariantInfo); uint unknown = uint.Parse(fields[9], NumberFormatInfo.InvariantInfo); temp.Add(key, new Info( maxdura, minshortatk, maxshortatk, minrangeatk, maxrangeatk, minmagicatk, maxmagicatk, weaponskill, unknown )); if (isnew == false) weapons.Add(weapontype, temp); } } }
protected override void ParseAsXmlStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (XmlTextReader reader = new XmlTextReader(stream)) { Info info = null; uint AdditionId = 0; uint Interval = 0; uint EffectDuration = 0; string value = null; uint[] Functions = null; int[] Values = null; String[] fields = null; Type additiontype = typeof(AdditionsBonus); while (reader.Read()) { ProgressReport.Invoke(); switch (reader.NodeType) { case XmlNodeType.Element: value = null; if (reader.Name.ToUpperInvariant() == "ROW") { Functions = null; Values = null; fields = null; AdditionId = 0; Interval = 0; EffectDuration = 0; } break; case XmlNodeType.Text: value = reader.Value; break; case XmlNodeType.EndElement: switch (reader.Name.ToUpperInvariant()) { case "ROW": goto Add; case "ID": AdditionId = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "TYPE": break; case "DISPOSITION": break; case "INTERVAL": Interval = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "EFFECTDURATION": EffectDuration = uint.Parse(value, NumberFormatInfo.InvariantInfo); break; case "FUNCTION": fields = value.Split(','); Functions = new uint[] { (uint)Enum.Parse( additiontype, fields[0] ), (uint)Enum.Parse( additiontype, fields[1] ), (uint)Enum.Parse( additiontype, fields[2] ), (uint)Enum.Parse( additiontype, fields[3] ), (uint)Enum.Parse( additiontype, fields[4] ), (uint)Enum.Parse( additiontype, fields[5] ), (uint)Enum.Parse( additiontype, fields[6] ), (uint)Enum.Parse( additiontype, fields[7] ), (uint)Enum.Parse( additiontype, fields[8] ), (uint)Enum.Parse( additiontype, fields[9])}; break; case "VALUE": fields = value.Split(','); Values = new int[] { int.Parse( fields[0], NumberFormatInfo.InvariantInfo ), int.Parse( fields[1], NumberFormatInfo.InvariantInfo), int.Parse( fields[2], NumberFormatInfo.InvariantInfo), int.Parse( fields[3], NumberFormatInfo.InvariantInfo), int.Parse( fields[4], NumberFormatInfo.InvariantInfo), int.Parse( fields[5], NumberFormatInfo.InvariantInfo), int.Parse( fields[6], NumberFormatInfo.InvariantInfo), int.Parse( fields[7], NumberFormatInfo.InvariantInfo), int.Parse( fields[8], NumberFormatInfo.InvariantInfo), int.Parse( fields[9], NumberFormatInfo.InvariantInfo)}; break; } break; } continue; Add: try { info = Info.From(addition_table, Functions, Values); if (info != null) { info.Addition = AdditionId; info.Interval = Interval; info.EffectDuration = EffectDuration; _additions.Add(AdditionId, info); } } catch (ArgumentException) { WriteError("AdditionFactory", "Duplicate id detected: {0}", AdditionId); return; } continue; } } }
protected override void ParseAsCsvStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { //REPORT PROGRESS ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); maps.Add( //ASSOCIATE MAP-ID WITH ZONE INSTANCE byte.Parse(fields[1], NumberFormatInfo.InvariantInfo), //CREATE NEW CHARACTER INFO new Info ( ushort.Parse(fields[2], NumberFormatInfo.InvariantInfo), ushort.Parse(fields[3], NumberFormatInfo.InvariantInfo), ushort.Parse(fields[4], NumberFormatInfo.InvariantInfo) ) ); } } }
protected override void ParseAsCsvStream(System.IO.Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); Type additiontype = typeof(AdditionsBonus); uint AdditionId = uint.Parse(fields[0], NumberFormatInfo.InvariantInfo); uint[] Functions = new uint[] { (uint)Enum.Parse( additiontype, fields[1] ), (uint)Enum.Parse( additiontype, fields[2] ), (uint)Enum.Parse( additiontype, fields[3] ), (uint)Enum.Parse( additiontype, fields[4] ), (uint)Enum.Parse( additiontype, fields[5] ), (uint)Enum.Parse( additiontype, fields[6] ), (uint)Enum.Parse( additiontype, fields[7] ), (uint)Enum.Parse( additiontype, fields[8] ), (uint)Enum.Parse( additiontype, fields[9] ), (uint)Enum.Parse( additiontype, fields[10] )}; int[] Values = new int[] { int.Parse( fields[11], NumberFormatInfo.InvariantInfo ), int.Parse( fields[12], NumberFormatInfo.InvariantInfo ), int.Parse( fields[13], NumberFormatInfo.InvariantInfo ), int.Parse( fields[14], NumberFormatInfo.InvariantInfo), int.Parse( fields[15], NumberFormatInfo.InvariantInfo ), int.Parse( fields[16], NumberFormatInfo.InvariantInfo), int.Parse( fields[17], NumberFormatInfo.InvariantInfo ), int.Parse( fields[18], NumberFormatInfo.InvariantInfo), int.Parse( fields[19], NumberFormatInfo.InvariantInfo), int.Parse( fields[20], NumberFormatInfo.InvariantInfo)}; Info info = Info.From(addition_table, Functions, Values); if (info != null) { _additions.Add(AdditionId, info); } } } }
protected override void ParseAsCsvStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); Info info = new Info(); info.price = uint.Parse(fields[1], NumberFormatInfo.InvariantInfo); info.x = float.Parse(fields[2], NumberFormatInfo.InvariantInfo); info.y = float.Parse(fields[3], NumberFormatInfo.InvariantInfo); info.z = float.Parse(fields[4], NumberFormatInfo.InvariantInfo); info.map = byte.Parse(fields[5], NumberFormatInfo.InvariantInfo); warps.Add(ushort.Parse(fields[0], NumberFormatInfo.InvariantInfo), info); } } }
/// <summary> /// Default included event that invokes a csv based stream. /// </summary> /// <param name="stream">Stream to read data from</param> /// <param name="ProgressReport">Class to report the state of reading</param> protected override void ParseAsCsvStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { //REPORT PROGRESS ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); //LOAD A HEIGHTMAP HeightMap heightmap = new HeightMap(); HeightMap.HeightMapInfo info = new HeightMap.HeightMapInfo(); try { //FILL OUT HEIGHTMAP INFORMATION string filename = Path.Combine(Environment.CurrentDirectory, dirHeightmap); if (fields[10].Length > 0) { info.location[0] = float.Parse(fields[12], NumberFormatInfo.InvariantInfo); info.location[1] = float.Parse(fields[13], NumberFormatInfo.InvariantInfo); info.location[2] = float.Parse(fields[14], NumberFormatInfo.InvariantInfo); info.scale[0] = int.Parse(fields[15], NumberFormatInfo.InvariantInfo); info.scale[1] = int.Parse(fields[16], NumberFormatInfo.InvariantInfo); info.scale[2] = int.Parse(fields[17], NumberFormatInfo.InvariantInfo); info.size = int.Parse(fields[11], NumberFormatInfo.InvariantInfo); filename = Path.Combine(filename, fields[10]); //IF HEIGHTMAP IS NOT LOADED PROCEED HeightMap.LoadFromFile(filename, info, out heightmap); } float catheleyax = float.Parse(fields[2], NumberFormatInfo.InvariantInfo); float catheleyay = float.Parse(fields[3], NumberFormatInfo.InvariantInfo); float catheleyaz = float.Parse(fields[4], NumberFormatInfo.InvariantInfo); float promisex = float.Parse(fields[6], NumberFormatInfo.InvariantInfo); float promisey = float.Parse(fields[7], NumberFormatInfo.InvariantInfo); float promizez = float.Parse(fields[8], NumberFormatInfo.InvariantInfo); byte catheleyamap = byte.Parse(fields[5], NumberFormatInfo.InvariantInfo); byte promisemap = byte.Parse(fields[9], NumberFormatInfo.InvariantInfo); uint regioncode = uint.Parse(fields[19], NumberFormatInfo.InvariantInfo); uint zoneid = uint.Parse(fields[0], NumberFormatInfo.InvariantInfo); ZoneType zonetype = (ZoneType)Enum.Parse(typeof(ZoneType), fields[18], true); Zone zone; if (TryFindZoneString(fields[1], out zone)) { SetMembers(zone, (byte)zoneid, heightmap, zonetype, catheleyamap, new Point(catheleyax, catheleyay, catheleyaz), promisemap, new Point(promisex, promisey, promizez), regioncode); maps.Add(zoneid, zone); } } catch (Exception e) { HostContext.AddUnhandeldException(e); } } } }
protected override void ParseAsCsvStream(System.IO.Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); NumberFormatInfo global = System.Globalization.NumberFormatInfo.InvariantInfo; byte toid = byte.Parse(fields[1], global); byte fromid = byte.Parse(fields[0], global); byte tomapid = byte.Parse(fields[5], global); float x = float.Parse(fields[2], global); float y = float.Parse(fields[3], global); float z = float.Parse(fields[4], global); Portal portal = new Portal(tomapid, x, y, z); Dictionary<byte, Portal> portals_tmp; if (this.portals.TryGetValue(fromid, out portals_tmp) == false) { portals_tmp = new Dictionary<byte, Portal>(); } portals_tmp[toid] = portal; this.portals[fromid] = portals_tmp; } } }
protected override void ParseAsCsvStream(Stream stream, FactoryBase.ReportProgress ProgressReport) { using (StreamReader c = new StreamReader(stream)) { c.ReadLine(); while (c.Peek() > 0) { //REPORT PROGRESS ProgressReport.Invoke(); String row = c.ReadLine(); String[] fields = row.Split(','); try { int Flags = 0; byte eventid = Convert.ToByte(fields[0]); //Unique id of the event byte UseDate = Convert.ToByte(fields[6]); //1 - Use a date to check byte UseTime = Convert.ToByte(fields[7]); //2 - Use a timespan to check byte EnableMonday = Convert.ToByte(fields[8]); //4 - Is active on monday byte EnableThuesday = Convert.ToByte(fields[9]); //8 - Is active on thuesday byte EnableWednesday = Convert.ToByte(fields[10]); //16 - Is active on wednessday byte EnableThursday = Convert.ToByte(fields[11]); //32 - Is active on thursday byte EnableFriday = Convert.ToByte(fields[12]); //64 - Is active on friday byte EnableSaturday = Convert.ToByte(fields[13]); //128 - Is active on saturday byte EnableSunday = Convert.ToByte(fields[14]); //256 - Is active on sunday string EventName = fields[1]; //Name of the event if (UseDate == 1) Flags |= 1; if (UseTime == 1) Flags |= 2; if (EnableMonday == 1) Flags |= 4; if (EnableThuesday == 1) Flags |= 8; if (EnableWednesday == 1) Flags |= 16; if (EnableThursday == 1) Flags |= 32; if (EnableFriday == 1) Flags |= 64; if (EnableSaturday == 1) Flags |= 128; if (EnableSunday == 1) Flags |= 256; DateTime eventstart = DateTime.Parse(fields[2], CultureInfo.InvariantCulture); DateTime eventend = DateTime.Parse(fields[3], CultureInfo.InvariantCulture); TimeSpan timestart = TimeSpan.Parse(fields[4]); TimeSpan timetend = TimeSpan.Parse(fields[5]); EventDateTime date = new EventDateTime(); date.end = eventend.Add(timetend); date.start = eventstart.Add(timestart); date.eventname = EventName; date.Flags = Flags; if (CanCheckTimespan(date)) date.IsActive = IsActiveToday(date) && IsBetweenDateTime(date) && IsBetweenTimeStamp(date); else date.IsActive = true; _eventdates.Add(eventid, date); } catch (Exception e) { HostContext.AddUnhandeldException(e); } } } }