public BookingCustomerPage() { InitializeComponent(); NameEntry.Completed += (s, e) => EmailEntry.Focus(); EmailEntry.Completed += (s, e) => MobileEntry.Focus(); }
public DataTable GetMobile() { MobileEntry mobileEntry = new MobileEntry(); DataTable dtSelectMobile = mobileEntry.SelectAllMobiles(); return(dtSelectMobile); }
protected void btnUpdate_Click(object sender, EventArgs e) { MobileEntry mobileEntry = new MobileEntry(); //DataTable dtSelectMobile = mobileEntry.SelectMobileById(Convert.ToInt32(txtmobileid.Text)); DataTable dtResult = mobileEntry.UpdateMobile(Convert.ToInt32(txtId.Text), txtMobile.Text, txtModel.Text, Convert.ToInt32(txtPrice.Text), txtDescription.Text); gvMobileDetails.DataSource = GetMobile(); gvMobileDetails.DataBind(); }
protected void btnEdit_Click(object sender, EventArgs e) { MobileEntry mobileEntry = new MobileEntry(); DataTable dtSelectMobile = mobileEntry.SelectMobileById(Convert.ToInt32(txtId.Text)); txtMobile.Text = dtSelectMobile.Rows[0][1].ToString(); txtModel.Text = dtSelectMobile.Rows[0][2].ToString(); txtPrice.Text = dtSelectMobile.Rows[0][3].ToString(); txtDescription.Text = dtSelectMobile.Rows[0][4].ToString(); }
private static MobileEntry[] LoadMobileIndex(BinaryReader idxReader, EntityType[] types) { int count = idxReader.ReadInt32(), skipped = 0; object[] ctorArgs = new object[1]; m_Mobiles = new Hashtable((count * 11) / 10); MobileEntry[] entries = new MobileEntry[count]; for (int i = 0; i < count; ++i) { int typeID = idxReader.ReadInt32(); Serial serial = (Serial)idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); if (serial == Serial.MinusOne || typeID < 0 || typeID >= types.Length) { ++skipped; continue; } EntityType type = types[typeID]; if (type.Constructor == null) { ++skipped; continue; } Mobile m = null; try { ctorArgs[0] = serial; m = (Mobile)type.Constructor.Invoke(ctorArgs); } catch (Exception e) { log.Error(String.Format("Error while creating mobile {0} of type {1}", serial, type.Name), e); } entries[i] = new MobileEntry(m, typeID, type.Name, pos, length); AddMobile(m); } if (skipped > 0) { log.WarnFormat("{0} mobiles were skipped", skipped); m_LoadErrors += skipped; } return(entries); }
protected void btnDelete_Click(object sender, EventArgs e) { MobileEntry mobileEntry = new MobileEntry(); DataTable dtResult = mobileEntry.DeleteMobileById(Convert.ToInt32(txtId.Text)); lblResut.Text = "Deleted"; DataTable dtSelectMobiles = mobileEntry.SelectAllMobiles(); gvMobileDetails.DataSource = dtSelectMobiles; gvMobileDetails.DataBind(); }
public Login_Page2() { InitializeComponent(); _webApiRestClient = new WebApiRestClient(); MobileEntryTitle.Text = AppResources.MobileEntryTitle; MobileEntry.Placeholder = AppResources.LoginEntryPlaceHolder; NextButton.Text = ""; NextButton.IsEnabled = false; //getCountryCode(); countryCodeList.ItemSelected += CountryCodeList_ItemSelected; MessagingCenter.Subscribe <string>(this, "EntryFocus", (sender) => { MobileEntry.Focus(); }); }
private static MobileEntry[] LoadMobileIndex(BinaryReader idxReader, EntityType[] types) { int count = idxReader.ReadInt32(); object[] ctorArgs = new object[1]; m_Mobiles = new Hashtable(count); MobileEntry[] entries = new MobileEntry[count]; for (int i = 0; i < count; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); EntityType type = types[typeID]; if (type.Constructor == null) { continue; } Mobile m = null; try { ctorArgs[0] = (Serial)serial; m = (Mobile)type.Constructor.Invoke(ctorArgs); } catch { } if (m != null) { entries[i] = new MobileEntry(m, typeID, type.Name, pos, length); AddMobile(m); } } return(entries); }
protected void btnSave_Click(object sender, EventArgs e) { MobileEntry mobileEntry = new MobileEntry(); //string mobile = txtMobile.Text; //string model = txtModel.Text; //string price = txtPrice.Text; //string Description = txtDescription.Text; //Session["mobile"] = mobile; //Session["model"] = model; //Session["price"] = price; //Session["Description"] = Description; DataTable dtResult = mobileEntry.InsertMobile(Convert.ToInt32(txtId.Text), txtMobile.Text, txtModel.Text, Convert.ToInt32(txtPrice.Text), txtDescription.Text); lblResut.Text = "Inserted"; //Response.Redirect("MobileUserHome.aspx"); DataTable dtSelectMobiles = mobileEntry.SelectAllMobiles(); gvMobileDetails.DataSource = dtSelectMobiles; gvMobileDetails.DataBind(); }
private static void LoadMobiles(BinaryFileReader reader, MobileEntry[] entries) { for (int i = 0; i < entries.Length; ++i) { MobileEntry entry = entries[i]; Mobile m = (Mobile)entry.Object; if (m == null) { continue; } reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; m.Deserialize(reader); } catch (Exception e) { log.Error(String.Format("failed to load mobile {0}", m), e); m.Delete(); entries[i].Clear(); ++m_LoadErrors; continue; } if (reader.Position != entry.Position + entry.Length) { log.ErrorFormat("Bad deserialize on mobile {0}, type {1}: position={2}, should be {3}", entry.Serial, entry.TypeName, reader.Position, entry.Position + entry.Length); m.Delete(); entries[i].Clear(); ++m_LoadErrors; } } }
private static void LoadMobiles(string path, MobileEntry[] entries) { using (FileStream bin = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { using (BinaryReader binReader = new BinaryReader(bin)) { BinaryFileReader reader = new BinaryFileReader(binReader); try { LoadMobiles(reader, entries); } finally { reader.Close(); } } } }
private static void LoadMobiles(BinaryFileReader reader, MobileEntry[] entries) { for (int i = 0; i < entries.Length; ++i) { MobileEntry entry = entries[i]; Mobile m = (Mobile)entry.Object; if (m == null) continue; reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; m.Deserialize(reader); } catch (Exception e) { log.Error(String.Format("failed to load mobile {0}", m), e); m.Delete(); entries[i].Clear(); ++m_LoadErrors; continue; } if (reader.Position != entry.Position + entry.Length) { log.ErrorFormat("Bad deserialize on mobile {0}, type {1}: position={2}, should be {3}", entry.Serial, entry.TypeName, reader.Position, entry.Position + entry.Length); m.Delete(); entries[i].Clear(); ++m_LoadErrors; } } }
private static MobileEntry[] LoadMobileIndex(BinaryReader idxReader, EntityType[] types) { int count = idxReader.ReadInt32(), skipped = 0; object[] ctorArgs = new object[1]; m_Mobiles = new Hashtable((count * 11) / 10); MobileEntry[] entries = new MobileEntry[count]; for (int i = 0; i < count; ++i) { int typeID = idxReader.ReadInt32(); Serial serial = (Serial)idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); if (serial == Serial.MinusOne || typeID < 0 || typeID >= types.Length) { ++skipped; continue; } EntityType type = types[typeID]; if (type.Constructor == null) { ++skipped; continue; } Mobile m = null; try { ctorArgs[0] = serial; m = (Mobile)type.Constructor.Invoke(ctorArgs); } catch (Exception e) { log.Error(String.Format("Error while creating mobile {0} of type {1}", serial, type.Name), e); } entries[i] = new MobileEntry(m, typeID, type.Name, pos, length); AddMobile(m); } if (skipped > 0) { log.WarnFormat("{0} mobiles were skipped", skipped); m_LoadErrors += skipped; } return entries; }
public static void Load() { if (m_Loaded) { return; } m_Loaded = true; m_LoadingType = null; Console.Write("World: Loading..."); Stopwatch watch = Stopwatch.StartNew(); m_Loading = true; _addQueue = new Queue <IEntity>(); _deleteQueue = new Queue <IEntity>(); int mobileCount = 0, itemCount = 0, guildCount = 0; object[] ctorArgs = new object[1]; List <ItemEntry> items = new List <ItemEntry>(); List <MobileEntry> mobiles = new List <MobileEntry>(); List <GuildEntry> guilds = new List <GuildEntry>(); if (File.Exists(MobileIndexPath) && File.Exists(MobileTypesPath)) { using (FileStream idx = new FileStream(MobileIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); using (FileStream tdb = new FileStream(MobileTypesPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader tdbReader = new BinaryReader(tdb); List <object[]> types = ReadTypes(tdbReader); mobileCount = idxReader.ReadInt32(); m_Mobiles = new Dictionary <Serial, Mobile>(mobileCount); for (int i = 0; i < mobileCount; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); object[] objs = types[typeID]; if (objs == null) { continue; } Mobile m = null; ConstructorInfo ctor = ( ConstructorInfo )objs[0]; string typeName = ( string )objs[1]; try { ctorArgs[0] = ( Serial )serial; m = ( Mobile )(ctor.Invoke(ctorArgs)); } catch { } if (m != null) { mobiles.Add(new MobileEntry(m, typeID, typeName, pos, length)); AddMobile(m); } } tdbReader.Close(); } idxReader.Close(); } } else { m_Mobiles = new Dictionary <Serial, Mobile>(); } if (File.Exists(ItemIndexPath) && File.Exists(ItemTypesPath)) { using (FileStream idx = new FileStream(ItemIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); using (FileStream tdb = new FileStream(ItemTypesPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader tdbReader = new BinaryReader(tdb); List <object[]> types = ReadTypes(tdbReader); itemCount = idxReader.ReadInt32(); m_Items = new Dictionary <Serial, Item>(itemCount); for (int i = 0; i < itemCount; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); object[] objs = types[typeID]; if (objs == null) { continue; } Item item = null; ConstructorInfo ctor = ( ConstructorInfo )objs[0]; string typeName = ( string )objs[1]; try { ctorArgs[0] = ( Serial )serial; item = ( Item )(ctor.Invoke(ctorArgs)); } catch { } if (item != null) { items.Add(new ItemEntry(item, typeID, typeName, pos, length)); AddItem(item); } } tdbReader.Close(); } idxReader.Close(); } } else { m_Items = new Dictionary <Serial, Item>(); } if (File.Exists(GuildIndexPath)) { using (FileStream idx = new FileStream(GuildIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); guildCount = idxReader.ReadInt32(); CreateGuildEventArgs createEventArgs = new CreateGuildEventArgs(-1); for (int i = 0; i < guildCount; ++i) { idxReader.ReadInt32(); //no typeid for guilds int id = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); createEventArgs.Id = id; EventSink.InvokeCreateGuild(createEventArgs); BaseGuild guild = createEventArgs.Guild; if (guild != null) { guilds.Add(new GuildEntry(guild, pos, length)); } } idxReader.Close(); } } bool failedMobiles = false, failedItems = false, failedGuilds = false; Type failedType = null; Serial failedSerial = Serial.Zero; Exception failed = null; int failedTypeID = 0; if (File.Exists(MobileDataPath)) { using (FileStream bin = new FileStream(MobileDataPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < mobiles.Count; ++i) { MobileEntry entry = mobiles[i]; Mobile m = entry.Mobile; if (m != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; m.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", m.GetType())); } } catch (Exception e) { mobiles.RemoveAt(i); failed = e; failedMobiles = true; failedType = m.GetType(); failedTypeID = entry.TypeID; failedSerial = m.Serial; break; } } } reader.Close(); } } if (!failedMobiles && File.Exists(ItemDataPath)) { using (FileStream bin = new FileStream(ItemDataPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < items.Count; ++i) { ItemEntry entry = items[i]; Item item = entry.Item; if (item != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; item.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", item.GetType())); } } catch (Exception e) { items.RemoveAt(i); failed = e; failedItems = true; failedType = item.GetType(); failedTypeID = entry.TypeID; failedSerial = item.Serial; break; } } } reader.Close(); } } m_LoadingType = null; if (!failedMobiles && !failedItems && File.Exists(GuildDataPath)) { using (FileStream bin = new FileStream(GuildDataPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < guilds.Count; ++i) { GuildEntry entry = guilds[i]; BaseGuild g = entry.Guild; if (g != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { g.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on Guild {0} *****", g.Id)); } } catch (Exception e) { guilds.RemoveAt(i); failed = e; failedGuilds = true; failedType = typeof(BaseGuild); failedTypeID = g.Id; failedSerial = g.Id; break; } } } reader.Close(); } } if (failedItems || failedMobiles || failedGuilds) { Console.WriteLine("An error was encountered while loading a saved object"); Console.WriteLine(" - Type: {0}", failedType); Console.WriteLine(" - Serial: {0}", failedSerial); if (!Core.Service) { Console.WriteLine("Delete the object? (y/n)"); if (Console.ReadKey(true).Key == ConsoleKey.Y) { if (failedType != typeof(BaseGuild)) { Console.WriteLine("Delete all objects of that type? (y/n)"); if (Console.ReadKey(true).Key == ConsoleKey.Y) { if (failedMobiles) { for (int i = 0; i < mobiles.Count;) { if (mobiles[i].TypeID == failedTypeID) { mobiles.RemoveAt(i); } else { ++i; } } } else if (failedItems) { for (int i = 0; i < items.Count;) { if (items[i].TypeID == failedTypeID) { items.RemoveAt(i); } else { ++i; } } } } } SaveIndex <MobileEntry>(mobiles, MobileIndexPath); SaveIndex <ItemEntry>(items, ItemIndexPath); SaveIndex <GuildEntry>(guilds, GuildIndexPath); } Console.WriteLine("After pressing return an exception will be thrown and the server will terminate."); Console.ReadLine(); } else { Console.WriteLine("An exception will be thrown and the server will terminate."); } throw new Exception(String.Format("Load failed (items={0}, mobiles={1}, guilds={2}, type={3}, serial={4})", failedItems, failedMobiles, failedGuilds, failedType, failedSerial), failed); } EventSink.InvokeWorldLoad(); m_Loading = false; ProcessSafetyQueues(); foreach (Item item in m_Items.Values) { if (item.Parent == null) { item.UpdateTotals(); } item.ClearProperties(); } foreach (Mobile m in m_Mobiles.Values) { m.UpdateRegion(); // Is this really needed? m.UpdateTotals(); m.ClearProperties(); } watch.Stop(); Console.WriteLine("done ({1} items, {2} mobiles) ({0:F2} seconds)", watch.Elapsed.TotalSeconds, m_Items.Count, m_Mobiles.Count); }
/// <summary> /// Heart and soul of the system, first it analyzes all mobiles and then generates a webpage /// from the result. /// </summary> public static void Generate() { Alphabetctionary<List<MobileEntry>> entries = new Alphabetctionary<List<MobileEntry>>(); List<MobileEntry> all = new List<MobileEntry>(); entries.Initialize(); foreach( Type type in TypeRegistry.Keys ) { MobileEntry entry = new MobileEntry( type ); if( !entry.GuessEmpty ) // TODO: log empty types so they can be excluded from the config file. { entries[TypeRegistry[type].Name].Add( entry ); } } // this can't be done in the loop up there 'cause we need :all: to be sorted foreach( List<MobileEntry> var in entries ) { all.AddRange( var ); } using( StreamWriter writer = new StreamWriter( Path.Combine( "./Bestiary/", "index.html" ) ) ) { int index = 0; char letter = 'a'; foreach( List<MobileEntry> var in entries ) { if (var.Count != 0) { writer.WriteLine( "<font size=\"4\">{0}</font> ({1} {2})", letter++, var.Count, (var.Count == 1 ? "mobile" : "mobiles") ); writer.WriteLine( " <div style=\"padding-left: 15px\">" ); foreach( MobileEntry entry in var ) { writer.WriteLine( " <a href=\"./content/mobile.{0}.html\">{1}</a><br />", entry.MasterType.Name, entry.Name ); if ( index != 0 && all.Count != 1 ) { entry.PrevLink = string.Format( " <a href=\"mobile.{0}.html\" style=\"font-weight: bold; font-size: 11px; color: #ccc\">< {1}</a>", all[ index - 1 ].MasterType.Name, all[ index - 1 ].Name ); } if ( ( index + 1) != all.Count ) { entry.NextLink = string.Format( " <a href=\"mobile.{0}.html\" style=\"font-weight: bold; font-size: 11px; color: #ccc\">{1} ></a>", all[ index + 1 ].MasterType.Name, all[ index + 1 ].Name ); } using( StreamWriter entryWriter = new StreamWriter( Path.Combine( "./Bestiary/content/", string.Format( "mobile.{0}.html", entry.MasterType.Name ) ) ) ) { entryWriter.Write( entry.Html ); } ++index; } writer.WriteLine( " </div>" ); writer.WriteLine( " <hr noshade />" ); } } } // all mobiles, unless they're empty, have been indexed. Our job's done! }
public static void Load() { if (m_Loaded) { return; } m_Loaded = true; m_LoadingType = null; Console.Write("World: Loading..."); DateTime start = DateTime.Now; m_Loading = true; m_DeleteList = new ArrayList(); int mobileCount = 0, itemCount = 0, guildCount = 0, regionCount = 0; object[] ctorArgs = new object[1]; Type[] ctorTypes = new Type[1] { typeof(Serial) }; ArrayList items = new ArrayList(); ArrayList mobiles = new ArrayList(); ArrayList guilds = new ArrayList(); ArrayList regions = new ArrayList(); if (File.Exists(mobIdxPath) && File.Exists(mobTdbPath)) { using (FileStream idx = new FileStream(mobIdxPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); using (FileStream tdb = new FileStream(mobTdbPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader tdbReader = new BinaryReader(tdb); int count = tdbReader.ReadInt32(); ArrayList types = new ArrayList(count); for (int i = 0; i < count; ++i) { string typeName = tdbReader.ReadString(); Type t = ScriptCompiler.FindTypeByFullName(typeName); if (t == null) { Console.WriteLine("failed"); Console.WriteLine("Error: Type '{0}' was not found. Delete all of those types? (y/n)", typeName); if (Console.ReadLine() == "y") { types.Add(null); Console.Write("World: Loading..."); continue; } Console.WriteLine("Types will not be deleted. An exception will be thrown when you press return"); throw new Exception(String.Format("Bad type '{0}'", typeName)); } ConstructorInfo ctor = t.GetConstructor(ctorTypes); if (ctor != null) { types.Add(new object[] { ctor, null }); } else { throw new Exception(String.Format("Type '{0}' does not have a serialization constructor", t)); } } mobileCount = idxReader.ReadInt32(); m_Mobiles = new Hashtable(mobileCount); for (int i = 0; i < mobileCount; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); object[] objs = (object[])types[typeID]; if (objs == null) { continue; } Mobile m = null; ConstructorInfo ctor = (ConstructorInfo)objs[0]; string typeName = (string)objs[1]; try { ctorArgs[0] = (Serial)serial; m = (Mobile)(ctor.Invoke(ctorArgs)); } catch { } if (m != null) { mobiles.Add(new MobileEntry(m, typeID, typeName, pos, length)); AddMobile(m); } } tdbReader.Close(); } idxReader.Close(); } } else { m_Mobiles = new Hashtable(); } if (File.Exists(itemIdxPath) && File.Exists(itemTdbPath)) { using (FileStream idx = new FileStream(itemIdxPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); using (FileStream tdb = new FileStream(itemTdbPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader tdbReader = new BinaryReader(tdb); int count = tdbReader.ReadInt32(); ArrayList types = new ArrayList(count); for (int i = 0; i < count; ++i) { string typeName = tdbReader.ReadString(); Type t = ScriptCompiler.FindTypeByFullName(typeName); if (t == null) { Console.WriteLine("failed"); Console.WriteLine("Error: Type '{0}' was not found. Delete all of those types? (y/n)", typeName); if (Console.ReadLine() == "y") { types.Add(null); Console.Write("World: Loading..."); continue; } Console.WriteLine("Types will not be deleted. An exception will be thrown when you press return"); throw new Exception(String.Format("Bad type '{0}'", typeName)); } ConstructorInfo ctor = t.GetConstructor(ctorTypes); if (ctor != null) { types.Add(new object[] { ctor, typeName }); } else { throw new Exception(String.Format("Type '{0}' does not have a serialization constructor", t)); } } itemCount = idxReader.ReadInt32(); m_Items = new Hashtable(itemCount); for (int i = 0; i < itemCount; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); object[] objs = (object[])types[typeID]; if (objs == null) { continue; } Item item = null; ConstructorInfo ctor = (ConstructorInfo)objs[0]; string typeName = (string)objs[1]; try { ctorArgs[0] = (Serial)serial; item = (Item)(ctor.Invoke(ctorArgs)); } catch { } if (item != null) { items.Add(new ItemEntry(item, typeID, typeName, pos, length)); AddItem(item); } } tdbReader.Close(); } idxReader.Close(); } } else { m_Items = new Hashtable(); } if (File.Exists(guildIdxPath)) { using (FileStream idx = new FileStream(guildIdxPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); guildCount = idxReader.ReadInt32(); CreateGuildEventArgs createEventArgs = new CreateGuildEventArgs(-1); for (int i = 0; i < guildCount; ++i) { idxReader.ReadInt32(); //no typeid for guilds int id = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); createEventArgs.Id = id; BaseGuild guild = EventSink.InvokeCreateGuild(createEventArgs); //new Guild( id ); if (guild != null) { guilds.Add(new GuildEntry(guild, pos, length)); } } idxReader.Close(); } } if (File.Exists(regionIdxPath)) { using (FileStream idx = new FileStream(regionIdxPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); regionCount = idxReader.ReadInt32(); for (int i = 0; i < regionCount; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); Region r = Region.FindByUId(serial); if (r != null) { regions.Add(new RegionEntry(r, pos, length)); Region.AddRegion(r); regionCount++; } } idxReader.Close(); } } bool failedMobiles = false, failedItems = false, failedGuilds = false, failedRegions = false; Type failedType = null; Serial failedSerial = Serial.Zero; Exception failed = null; int failedTypeID = 0; if (File.Exists(mobBinPath)) { using (FileStream bin = new FileStream(mobBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < mobiles.Count; ++i) { MobileEntry entry = (MobileEntry)mobiles[i]; Mobile m = (Mobile)entry.Object; if (m != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; m.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", m.GetType())); } } catch (Exception e) { mobiles.RemoveAt(i); failed = e; failedMobiles = true; failedType = m.GetType(); failedTypeID = entry.TypeID; failedSerial = m.Serial; break; } } } reader.Close(); } } if (!failedMobiles && File.Exists(itemBinPath)) { using (FileStream bin = new FileStream(itemBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < items.Count; ++i) { ItemEntry entry = (ItemEntry)items[i]; Item item = (Item)entry.Object; if (item != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; item.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", item.GetType())); } } catch (Exception e) { items.RemoveAt(i); failed = e; failedItems = true; failedType = item.GetType(); failedTypeID = entry.TypeID; failedSerial = item.Serial; break; } } } reader.Close(); } } m_LoadingType = null; if (!failedMobiles && !failedItems && File.Exists(guildBinPath)) { using (FileStream bin = new FileStream(guildBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < guilds.Count; ++i) { GuildEntry entry = (GuildEntry)guilds[i]; BaseGuild g = (BaseGuild)entry.Object; if (g != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { g.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on Guild {0} *****", g.Id)); } } catch (Exception e) { guilds.RemoveAt(i); failed = e; failedGuilds = true; failedType = typeof(BaseGuild); failedTypeID = g.Id; failedSerial = g.Id; break; } } } reader.Close(); } } if (!failedMobiles && !failedItems && File.Exists(regionBinPath)) { using (FileStream bin = new FileStream(regionBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < regions.Count; ++i) { RegionEntry entry = (RegionEntry)regions[i]; Region r = (Region)entry.Object; if (r != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { r.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", r.GetType())); } } catch (Exception e) { regions.RemoveAt(i); failed = e; failedRegions = true; failedType = r.GetType(); failedTypeID = entry.TypeID; failedSerial = r.UId; break; } } } reader.Close(); } } if (failedItems || failedMobiles || failedGuilds || failedRegions) { Console.WriteLine("An error was encountered while loading a saved object"); Console.WriteLine(" - Type: {0}", failedType); Console.WriteLine(" - Serial: {0}", failedSerial); Console.WriteLine("Delete the object? (y/n)"); if (Console.ReadLine() == "y") { if (failedType != typeof(BaseGuild) && !failedType.IsSubclassOf(typeof(Region))) { Console.WriteLine("Delete all objects of that type? (y/n)"); if (Console.ReadLine() == "y") { if (failedMobiles) { for (int i = 0; i < mobiles.Count;) { if (((MobileEntry)mobiles[i]).TypeID == failedTypeID) { mobiles.RemoveAt(i); } else { ++i; } } } else if (failedItems) { for (int i = 0; i < items.Count;) { if (((ItemEntry)items[i]).TypeID == failedTypeID) { items.RemoveAt(i); } else { ++i; } } } } } SaveIndex(mobiles, mobIdxPath); SaveIndex(items, itemIdxPath); SaveIndex(guilds, guildIdxPath); SaveIndex(regions, regionIdxPath); } Console.WriteLine("After pressing return an exception will be thrown and the server will terminate"); Console.ReadLine(); throw new Exception(String.Format("Load failed (items={0}, mobiles={1}, guilds={2}, regions={3}, type={4}, serial={5})", failedItems, failedMobiles, failedGuilds, failedRegions, failedType, failedSerial), failed); } EventSink.InvokeWorldLoad(); m_Loading = false; for (int i = 0; i < m_DeleteList.Count; ++i) { object o = m_DeleteList[i]; if (o is Item) { ((Item)o).Delete(); } else if (o is Mobile) { ((Mobile)o).Delete(); } } m_DeleteList.Clear(); foreach (Item item in m_Items.Values) { if (item.Parent == null) { item.UpdateTotals(); } item.ClearProperties(); } ArrayList list = new ArrayList(m_Mobiles.Values); foreach (Mobile m in list) { m.ForceRegionReEnter(true); m.UpdateTotals(); m.ClearProperties(); } Console.WriteLine("done ({1} items, {2} mobiles) ({0:F1} seconds)", (DateTime.Now - start).TotalSeconds, m_Items.Count, m_Mobiles.Count); }
private static void LoadEntities() { ItemEntry[] itemEntries = null; MobileEntry[] mobileEntries = null; GuildEntry[] guildEntries = null; RegionEntry[] regionEntries = null; if (File.Exists(mobIdxPath) && File.Exists(mobTdbPath)) { log.Debug("loading mobile index"); EntityType[] types = LoadTypes(mobTdbPath); mobileEntries = LoadMobileIndex(mobIdxPath, types); } else { m_Mobiles = new Hashtable(); } if (File.Exists(itemIdxPath) && File.Exists(itemTdbPath)) { log.Debug("loading item index"); EntityType[] types = LoadTypes(itemTdbPath); itemEntries = LoadItemIndex(itemIdxPath, types); } else { m_Items = new Hashtable(); } if (File.Exists(guildIdxPath)) { log.Debug("loading guild index"); using (FileStream idx = new FileStream(guildIdxPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); int count = idxReader.ReadInt32(); guildEntries = new GuildEntry[count]; CreateGuildEventArgs createEventArgs = new CreateGuildEventArgs(-1); for (int i = 0; i < count; ++i) { idxReader.ReadInt32(); //no typeid for guilds int id = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); createEventArgs.Id = id; BaseGuild guild = EventSink.InvokeCreateGuild(createEventArgs); //new Guild( id ); if (guild != null) { guildEntries[i] = new GuildEntry(guild, pos, length); } } idxReader.Close(); } } if (File.Exists(regionIdxPath)) { log.Debug("loading region index"); using (FileStream idx = new FileStream(regionIdxPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader idxReader = new BinaryReader(idx); int count = idxReader.ReadInt32(); regionEntries = new RegionEntry[count]; for (int i = 0; i < count; ++i) { idxReader.ReadInt32(); /* typeID */ int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); Region r = Region.FindByUId(serial); if (r != null) { regionEntries[i] = new RegionEntry(r, pos, length); Region.AddRegion(r); } } idxReader.Close(); } } bool failedMobiles = false, failedItems = false, failedGuilds = false, failedRegions = false; Type failedType = null; Serial failedSerial = Serial.Zero; Exception failed = null; int failedTypeID = 0; if (File.Exists(mobBinPath)) { log.Debug("loading mobiles"); using (FileStream bin = new FileStream(mobBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < mobileEntries.Length; ++i) { MobileEntry entry = mobileEntries[i]; Mobile m = (Mobile)entry.Object; if (m != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; m.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", m.GetType())); } } catch (Exception e) { log.Error("failed to load mobile", e); mobileEntries[i].Clear(); failed = e; failedMobiles = true; failedType = m.GetType(); failedTypeID = entry.TypeID; failedSerial = m.Serial; break; } } } reader.Close(); } if (!failedMobiles) { mobileEntries = null; } } if (!failedMobiles && File.Exists(itemBinPath)) { log.Debug("loading items"); using (FileStream bin = new FileStream(itemBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < itemEntries.Length; ++i) { ItemEntry entry = itemEntries[i]; Item item = (Item)entry.Object; if (item != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { m_LoadingType = entry.TypeName; item.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", item.GetType())); } } catch (Exception e) { log.Fatal("failed to load item", e); itemEntries[i].Clear(); failed = e; failedItems = true; failedType = item.GetType(); failedTypeID = entry.TypeID; failedSerial = item.Serial; break; } } } reader.Close(); } if (!failedItems) { itemEntries = null; } } if (!failedMobiles && !failedItems && File.Exists(guildBinPath)) { log.Debug("loading guilds"); using (FileStream bin = new FileStream(guildBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < guildEntries.Length; ++i) { GuildEntry entry = guildEntries[i]; BaseGuild g = (BaseGuild)entry.Object; if (g != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { g.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on Guild {0} *****", g.Id)); } } catch (Exception e) { log.Fatal("failed to load guild", e); guildEntries[i].Clear(); failed = e; failedGuilds = true; failedType = typeof(BaseGuild); failedTypeID = g.Id; failedSerial = g.Id; break; } } } reader.Close(); } if (!failedGuilds) { guildEntries = null; } } if (!failedMobiles && !failedItems && File.Exists(regionBinPath)) { log.Debug("loading regions"); using (FileStream bin = new FileStream(regionBinPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < regionEntries.Length; ++i) { RegionEntry entry = regionEntries[i]; Region r = (Region)entry.Object; if (r != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { r.Deserialize(reader); if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", r.GetType())); } } catch (Exception e) { log.Fatal("failed to load region", e); regionEntries[i].Clear(); failed = e; failedRegions = true; failedType = r.GetType(); failedTypeID = entry.TypeID; failedSerial = r.UId; break; } } } reader.Close(); } if (!failedRegions) { regionEntries = null; } } if (failedItems || failedMobiles || failedGuilds || failedRegions) { Console.WriteLine("An error was encountered while loading a saved object"); Console.WriteLine(" - Type: {0}", failedType); Console.WriteLine(" - Serial: {0}", failedSerial); Console.WriteLine("Delete the object? (y/n)"); if (Console.ReadLine() == "y") { if (failedType != typeof(BaseGuild) && !failedType.IsSubclassOf(typeof(Region))) { Console.WriteLine("Delete all objects of that type? (y/n)"); if (Console.ReadLine() == "y") { if (failedMobiles) { for (int i = 0; i < mobileEntries.Length; ++i) { if (mobileEntries[i].TypeID == failedTypeID) { mobileEntries[i].Clear(); } } } else if (failedItems) { for (int i = 0; i < itemEntries.Length; ++i) { if (itemEntries[i].TypeID == failedTypeID) { itemEntries[i].Clear(); } } } } } if (mobileEntries != null) { SaveIndex(mobileEntries, mobIdxPath); } if (itemEntries != null) { SaveIndex(itemEntries, itemIdxPath); } if (guildEntries != null) { SaveIndex(guildEntries, guildIdxPath); } if (regionEntries != null) { SaveIndex(regionEntries, regionIdxPath); } } Console.WriteLine("After pressing return an exception will be thrown and the server will terminate"); Console.ReadLine(); throw new Exception(String.Format("Load failed (items={0}, mobiles={1}, guilds={2}, regions={3}, type={4}, serial={5})", failedItems, failedMobiles, failedGuilds, failedRegions, failedType, failedSerial), failed); } }
public static List <Mobile> ReadMobiles() { var output = new List <Mobile>(); try { var mobiles = new List <MobileEntry>(); if (File.Exists(MobileIndexPath) && File.Exists(MobileTypesPath)) { using ( FileStream idx = new FileStream(MobileIndexPath, FileMode.Open, FileAccess.Read, FileShare.Read) ) { BinaryReader idxReader = new BinaryReader(idx); using ( FileStream tdb = new FileStream(MobileTypesPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader tdbReader = new BinaryReader(tdb); var types = ReadTypes(tdbReader); int mobileCount = idxReader.ReadInt32(); for (int i = 0; i < mobileCount; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); var objs = types[typeID]; if (objs == null) { continue; } ConstructorInfo ctor = objs.Item1; string typeName = objs.Item2; try { Mobile value; Mobile m = null; if (World.Mobiles.TryGetValue(serial, out value)) { Mobile sameSerialMob = value; BaseCreature bc = sameSerialMob as BaseCreature; // Don't use the real serial number, get a new serial number for it serial = Serial.NewMobile; m = (Mobile)(ctor.Invoke(new object[] { (Serial)serial })); // this constructor gets a new, unused serial number if (m.GetType() != sameSerialMob.GetType()) { // the serial has already been reused by a different type of mob // which means the original stabled mob is gone. Therefore add the original mob output.Add(m); World.AddMobile(m); /*LoggingCustom.Log("PetReassignedSerials.txt", * "serial was previously replaced by: " + sameSerialMob.Name + "\t" + * sameSerialMob.Serial + "\tDeleted:" + * sameSerialMob.Deleted + "\t|new serial assigned for pet:" + m.Serial);*/ } else // it's a very safe bet that it's the same mob (though we can't be absolutely sure)... { /*LoggingCustom.Log("PetStillExists.txt", * "Now Existing: " + sameSerialMob.Name + "\t" + sameSerialMob.Serial + * "\tDeleted:" + sameSerialMob.Deleted);*/ // don't add mob to output } } else { // construct mob with it's original serial number... this probably won't happen much m = (Mobile)(ctor.Invoke(new object[] { (Serial)serial })); // this constructor adds this mob into the World.Mobiles dictionary at this serial World.AddMobile(m); output.Add(m); //LoggingCustom.Log("PetSameSerialRestored.txt", m.Serial + ""); } // always add it to this list regardless mobiles.Add(new MobileEntry(m, typeID, typeName, pos, length)); } catch (Exception e) { Console.WriteLine("LostStabledPetRecorder error!: " + e.Message); Console.WriteLine(e.StackTrace); } } tdbReader.Close(); } idxReader.Close(); } } else { Console.WriteLine("Lost stable files not found! Should be at " + Path.GetFullPath(MobileIndexPath)); } Serial failedSerial = Serial.Zero; if (File.Exists(MobileDataPath)) { using ( FileStream bin = new FileStream(MobileDataPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFileReader reader = new BinaryFileReader(new BinaryReader(bin)); for (int i = 0; i < mobiles.Count; ++i) { MobileEntry entry = mobiles[i]; Mobile m = entry.Mobile; if (m != null) { reader.Seek(entry.Position, SeekOrigin.Begin); try { if (!output.Contains(m)) { // same mob already exist in the world, but // m has been assigned a new serial number so it's ok to delete it } else { m_LoadingType = entry.TypeName; m.Deserialize(reader); m.Map = Map.Internal; if (m is Beetle || m is HordeMinion || m is PackHorse || m is PackLlama) { // pack animals: make sure they have their pack Container pack = m.Backpack; if (pack == null) { pack = new StrongBackpack { Movable = false }; m.AddItem(pack); } } if (reader.Position != (entry.Position + entry.Length)) { throw new Exception(String.Format("***** Bad serialize on {0} *****", m.GetType())); } } } catch { mobiles.RemoveAt(i); Type failedType = m.GetType(); int failedTypeID = entry.TypeID; failedSerial = m.Serial; Console.WriteLine(failedType); Console.WriteLine(failedTypeID); Console.WriteLine(failedSerial); break; } } } reader.Close(); } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } return(output); }
private static MobileEntry[] LoadMobileIndex(BinaryReader idxReader, EntityType[] types) { int count = idxReader.ReadInt32(); object[] ctorArgs = new object[1]; m_Mobiles = new Hashtable(count); MobileEntry[] entries = new MobileEntry[count]; for (int i = 0; i < count; ++i) { int typeID = idxReader.ReadInt32(); int serial = idxReader.ReadInt32(); long pos = idxReader.ReadInt64(); int length = idxReader.ReadInt32(); EntityType type = types[typeID]; if (type.Constructor == null) continue; Mobile m = null; try { ctorArgs[0] = (Serial)serial; m = (Mobile)type.Constructor.Invoke(ctorArgs); } catch { } if (m != null) { entries[i] = new MobileEntry(m, typeID, type.Name, pos, length); AddMobile(m); } } return entries; }