public static void SaveMapDump(MySql database, string mapID, MapDump mapDump) { mapID = database.VerifyValueString(mapID); bool localTransaction = false; if (database.IsTransactionActive == false) { database.BeginTransaction(); localTransaction = true; } SaveRawMap(database, mapID, mapDump); // Save map state data database.UpdateOrInsert("mapstate_data", new IDataColumn[] { database.CreateColumn(false, "MapID", mapID), database.CreateColumn(false, "ActivationTime", mapDump.ActivationTime.ToString()), database.CreateColumn(false, "ProcessingPaused", mapDump.ProcessingPaused.ToIntString()), database.CreateColumn(false, "SpawnMarker", mapDump.SpawnMarker.ToString()), database.CreateColumn(false, "NpcSpawnWait", mapDump.NpcSpawnWait.ToString()), database.CreateColumn(false, "TempChange", mapDump.TempChange.ToIntString()), database.CreateColumn(false, "CurrentWeather", mapDump.CurrentWeather.ToString()) }); // Save active item data MultiRowInsert multiRowInsert = new MultiRowInsert(database, "mapstate_activeitem", "MapID", "Slot", "Number", "Value", "Sticky", "Tag", "Hidden", "X", "Y", "TimeRemaining", "ItemOwner"); for (int i = 0; i < mapDump.ActiveItem.Length; i++) { if (mapDump.ActiveItem[i].Num > 0) { MapItem item = mapDump.ActiveItem[i]; multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i, item.Num, item.Value); multiRowInsert.AddColumnData(item.Sticky.ToIntString(), item.Tag, item.Hidden.ToIntString()); multiRowInsert.AddColumnData(item.X, item.Y, item.TimeRemaining); multiRowInsert.AddColumnData(item.PlayerFor); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npcs multiRowInsert.UpdateParameters("mapstate_activenpc_data", new string[] { "MapID", "MapNpcSlot", "Name", "Shiny", "Form", "Level", "NpcNumber", "Sex", "AttackTimer", "PauseTimer", "StatusAilment", "StatusAilmentCounter", "HPStepCounter", "Target" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(npc.Name, npc.Shiny.ToString()); multiRowInsert.AddColumnData(npc.Form, npc.Level, npc.Num, (int)npc.Sex); multiRowInsert.AddColumnData(npc.AttackTimer, npc.PauseTimer, (int)npc.StatusAilment, npc.StatusAilmentCounter, npc.HPStepCounter); multiRowInsert.AddColumnData(npc.Target); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc held items multiRowInsert.UpdateParameters("mapstate_activenpc_helditem", new string[] { "MapID", "MapNpcSlot", "ItemNumber", "Amount", "Sticky", "Tag" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0 && mapDump.ActiveNpc[i].HeldItem.Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); //multiRowInsert.AddColumnData(npc.ItemActive.ToIntString()); //if (npc.HeldItem != null) { // The npc is holding an item - save the held item information multiRowInsert.AddColumnData(npc.HeldItem.Num, npc.HeldItem.Amount); multiRowInsert.AddColumnData(npc.HeldItem.Sticky.ToIntString(), npc.HeldItem.Tag); //} else { // The npc is not holding an item! Save default information // multiRowInsert.AddColumnData(-1, 0, 0); // multiRowInsert.AddColumnData(""); //} multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc locations multiRowInsert.UpdateParameters("mapstate_activenpc_location", new string[] { "MapID", "MapNpcSlot", "X", "Y", "Direction" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(npc.X, npc.Y, (int)npc.Direction); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc stats multiRowInsert.UpdateParameters("mapstate_activenpc_stats", new string[] { "MapID", "MapNpcSlot", "IQ", "HP", "HPRemainder", "MaxHPBonus", "AtkBonus", "DefBonus", "SpdBonus", "SpclAtkBonus", "SpclDefBonus", "AttackBuff", "DefenseBuff", "SpAtkBuff", "SpDefBuff", "SpeedBuff", "AccuracyBuff", "EvasionBuff" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(npc.IQ, npc.HP, npc.HPRemainder, npc.MaxHPBonus, npc.AtkBonus, npc.DefBonus, npc.SpdBonus, npc.SpclAtkBonus, npc.SpclDefBonus, npc.AttackBuff, npc.DefenseBuff, npc.SpAtkBuff, npc.SpDefBuff, npc.SpeedBuff, npc.AccuracyBuff, npc.EvasionBuff); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc moves multiRowInsert.UpdateParameters("mapstate_activenpc_moves", new string[] { "MapID", "MapNpcSlot", "MoveSlot", "CurrentPP", "MaxPP", "MoveNum" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { for (int n = 0; n < npc.Moves.Length; n++) { if (npc.Moves[n].MoveNum > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i, n); multiRowInsert.AddColumnData(npc.Moves[n].CurrentPP, npc.Moves[n].MaxPP, npc.Moves[n].MoveNum); //multiRowInsert.AddColumnData(npc.Moves[n].Sealed.ToIntString()); multiRowInsert.AddRowClosing(); } } } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc mobility //multiRowInsert.UpdateParameters("mapstate_activenpc_mobility", new string[] { "MapID", "MapNpcSlot", "MobilitySlot", "Mobile" }); //for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { // MapNpc npc = mapDump.ActiveNpc[i]; // for (int n = 0; n < npc.Mobility.Length; n++) { // multiRowInsert.AddRowOpening(); // multiRowInsert.AddColumnData(mapID); // multiRowInsert.AddColumnData(i, n); // multiRowInsert.AddColumnData(npc.Mobility[n].ToIntString()); // multiRowInsert.AddRowClosing(); // } //} //database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc volatile status multiRowInsert.UpdateParameters("mapstate_activenpc_volatilestatus", new string[] { "MapID", "MapNpcSlot", "StatusIndex", "Name", "Emoticon", "Counter", "Tag" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { for (int n = 0; n < npc.VolatileStatus.Count; n++) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i, n); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Name); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Emoticon); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Counter); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Tag); multiRowInsert.AddRowClosing(); } } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save map status multiRowInsert.UpdateParameters("mapstate_mapstatus", new string[] { "MapID", "StatusIndex", "Name", "Tag", "GraphicEffect", "Counter" }); for (int i = 0; i < mapDump.TempStatus.Count; i++) { MapStatus status = mapDump.TempStatus[i]; multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(status.Name); multiRowInsert.AddColumnData(status.Tag); multiRowInsert.AddColumnData(status.GraphicEffect); multiRowInsert.AddColumnData(status.Counter); multiRowInsert.AddRowClosing(); } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); if (localTransaction) { database.EndTransaction(); } }
public static void SaveMapDump(MySql database, string mapID, MapDump mapDump) { mapID = database.VerifyValueString(mapID); bool localTransaction = false; if (database.IsTransactionActive == false) { database.BeginTransaction(); localTransaction = true; } SaveRawMap(database, mapID, mapDump); // Save map state data database.UpdateOrInsert("mapstate_data", new IDataColumn[] { database.CreateColumn(false, "MapID", mapID), database.CreateColumn(false, "ActivationTime", mapDump.ActivationTime.ToString()), database.CreateColumn(false, "ProcessingPaused", mapDump.ProcessingPaused.ToIntString()), database.CreateColumn(false, "SpawnMarker", mapDump.SpawnMarker.ToString()), database.CreateColumn(false, "NpcSpawnWait", mapDump.NpcSpawnWait.ToString()), database.CreateColumn(false, "TempChange", mapDump.TempChange.ToIntString()), database.CreateColumn(false, "CurrentWeather", mapDump.CurrentWeather.ToString()) }); // Save active item data MultiRowInsert multiRowInsert = new MultiRowInsert(database, "mapstate_activeitem", "MapID", "Slot", "Number", "Value", "Sticky", "Tag", "Hidden", "X", "Y", "TimeRemaining", "ItemOwner"); for (int i = 0; i < mapDump.ActiveItem.Length; i++) { if (mapDump.ActiveItem[i].Num > 0) { MapItem item = mapDump.ActiveItem[i]; multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i, item.Num, item.Value); multiRowInsert.AddColumnData(item.Sticky.ToIntString(), item.Tag, item.Hidden.ToIntString()); multiRowInsert.AddColumnData(item.X, item.Y, item.TimeRemaining); multiRowInsert.AddColumnData(item.PlayerFor); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npcs multiRowInsert.UpdateParameters("mapstate_activenpc_data", new string[] {"MapID", "MapNpcSlot", "Name", "Shiny", "Form", "Level", "NpcNumber", "Sex", "AttackTimer", "PauseTimer", "StatusAilment", "StatusAilmentCounter", "HPStepCounter", "Target" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(npc.Name, npc.Shiny.ToString()); multiRowInsert.AddColumnData(npc.Form, npc.Level, npc.Num, (int)npc.Sex); multiRowInsert.AddColumnData(npc.AttackTimer, npc.PauseTimer, (int)npc.StatusAilment, npc.StatusAilmentCounter, npc.HPStepCounter); multiRowInsert.AddColumnData(npc.Target); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc held items multiRowInsert.UpdateParameters("mapstate_activenpc_helditem", new string[] {"MapID", "MapNpcSlot", "ItemNumber", "Amount", "Sticky", "Tag" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0 && mapDump.ActiveNpc[i].HeldItem.Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); //multiRowInsert.AddColumnData(npc.ItemActive.ToIntString()); //if (npc.HeldItem != null) { // The npc is holding an item - save the held item information multiRowInsert.AddColumnData(npc.HeldItem.Num, npc.HeldItem.Amount); multiRowInsert.AddColumnData(npc.HeldItem.Sticky.ToIntString(), npc.HeldItem.Tag); //} else { // The npc is not holding an item! Save default information // multiRowInsert.AddColumnData(-1, 0, 0); // multiRowInsert.AddColumnData(""); //} multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc locations multiRowInsert.UpdateParameters("mapstate_activenpc_location", new string[] { "MapID", "MapNpcSlot", "X", "Y", "Direction" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(npc.X, npc.Y, (int)npc.Direction); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc stats multiRowInsert.UpdateParameters("mapstate_activenpc_stats", new string[] { "MapID", "MapNpcSlot", "IQ", "HP", "HPRemainder", "MaxHPBonus", "AtkBonus", "DefBonus", "SpdBonus", "SpclAtkBonus", "SpclDefBonus", "AttackBuff", "DefenseBuff", "SpAtkBuff", "SpDefBuff", "SpeedBuff", "AccuracyBuff", "EvasionBuff" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(npc.IQ, npc.HP, npc.HPRemainder, npc.MaxHPBonus, npc.AtkBonus, npc.DefBonus, npc.SpdBonus, npc.SpclAtkBonus, npc.SpclDefBonus, npc.AttackBuff, npc.DefenseBuff, npc.SpAtkBuff, npc.SpDefBuff, npc.SpeedBuff, npc.AccuracyBuff, npc.EvasionBuff); multiRowInsert.AddRowClosing(); } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc moves multiRowInsert.UpdateParameters("mapstate_activenpc_moves", new string[] { "MapID", "MapNpcSlot", "MoveSlot", "CurrentPP", "MaxPP", "MoveNum" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { for (int n = 0; n < npc.Moves.Length; n++) { if (npc.Moves[n].MoveNum > 0) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i, n); multiRowInsert.AddColumnData(npc.Moves[n].CurrentPP, npc.Moves[n].MaxPP, npc.Moves[n].MoveNum); //multiRowInsert.AddColumnData(npc.Moves[n].Sealed.ToIntString()); multiRowInsert.AddRowClosing(); } } } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc mobility //multiRowInsert.UpdateParameters("mapstate_activenpc_mobility", new string[] { "MapID", "MapNpcSlot", "MobilitySlot", "Mobile" }); //for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { // MapNpc npc = mapDump.ActiveNpc[i]; // for (int n = 0; n < npc.Mobility.Length; n++) { // multiRowInsert.AddRowOpening(); // multiRowInsert.AddColumnData(mapID); // multiRowInsert.AddColumnData(i, n); // multiRowInsert.AddColumnData(npc.Mobility[n].ToIntString()); // multiRowInsert.AddRowClosing(); // } //} //database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save active npc volatile status multiRowInsert.UpdateParameters("mapstate_activenpc_volatilestatus", new string[] { "MapID", "MapNpcSlot", "StatusIndex", "Name", "Emoticon", "Counter", "Tag" }); for (int i = 0; i < mapDump.ActiveNpc.Length; i++) { MapNpc npc = mapDump.ActiveNpc[i]; if (mapDump.ActiveNpc[i].Num > 0) { for (int n = 0; n < npc.VolatileStatus.Count; n++) { multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i, n); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Name); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Emoticon); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Counter); multiRowInsert.AddColumnData(npc.VolatileStatus[n].Tag); multiRowInsert.AddRowClosing(); } } } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); // Save map status multiRowInsert.UpdateParameters("mapstate_mapstatus", new string[] { "MapID", "StatusIndex", "Name", "Tag", "GraphicEffect", "Counter" }); for (int i = 0; i < mapDump.TempStatus.Count; i++) { MapStatus status = mapDump.TempStatus[i]; multiRowInsert.AddRowOpening(); multiRowInsert.AddColumnData(mapID); multiRowInsert.AddColumnData(i); multiRowInsert.AddColumnData(status.Name); multiRowInsert.AddColumnData(status.Tag); multiRowInsert.AddColumnData(status.GraphicEffect); multiRowInsert.AddColumnData(status.Counter); multiRowInsert.AddRowClosing(); } database.ExecuteNonQuery(multiRowInsert.GetSqlQuery()); if (localTransaction) { database.EndTransaction(); } }
public static void LoadMapDump(MySql database, string mapID, MapDump mapDump) { // First, load the raw map data LoadRawMap(database, mapID, mapDump); mapID = database.VerifyValueString(mapID); // Load map state data string query = "SELECT mapstate_data.ActivationTime, mapstate_data.ProcessingPaused, mapstate_data.SpawnMarker, " + "mapstate_data.NpcSpawnWait, mapstate_data.TempChange, mapstate_data.CurrentWeather " + "FROM mapstate_data WHERE mapstate_data.MapID = \'" + mapID + "\'";; { DataColumnCollection row = database.RetrieveRow(query); if (row != null) { int counter = 0; mapDump.ActivationTime = Convert.ToInt32(row[counter++].Value); mapDump.ProcessingPaused = row[counter++].ValueString.ToBool(); mapDump.SpawnMarker = Convert.ToInt32(row[counter++].Value); mapDump.NpcSpawnWait = Convert.ToInt32(row[counter++].Value); mapDump.TempChange = row[counter++].ValueString.ToBool(); mapDump.CurrentWeather = Convert.ToByte(row[counter++].Value); } else { throw new Exception("Map state data not found"); } } { // Load map active items query = "SELECT mapstate_activeitem.Slot, mapstate_activeitem.Number, mapstate_activeitem.Value, mapstate_activeitem.Sticky, " + "mapstate_activeitem.Tag, mapstate_activeitem.Hidden, mapstate_activeitem.X, mapstate_activeitem.Y, " + "mapstate_activeitem.TimeRemaining, mapstate_activeitem.ItemOwner " + "FROM mapstate_activeitem WHERE mapstate_activeitem.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { MapItem mapItem = new MapItem(); int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); mapItem.Num = Convert.ToInt32(row[counter++].Value); mapItem.Value = Convert.ToInt32(row[counter++].Value); mapItem.Sticky = row[counter++].ValueString.ToBool(); mapItem.Tag = row[counter++].ValueString; mapItem.Hidden = row[counter++].ValueString.ToBool(); mapItem.X = Convert.ToInt32(row[counter++].Value); mapItem.Y = Convert.ToInt32(row[counter++].Value); mapItem.TimeRemaining = Convert.ToInt32(row[counter++].Value); mapItem.PlayerFor = row[counter++].ValueString; mapDump.ActiveItem[slot] = mapItem; } } { // Load map active npcs query = "SELECT mapstate_activenpc_data.MapNpcSlot, mapstate_activenpc_data.Name, mapstate_activenpc_data.Shiny, mapstate_activenpc_data.Form, " + "mapstate_activenpc_data.Level, mapstate_activenpc_data.NpcNumber, mapstate_activenpc_data.Sex, " + "mapstate_activenpc_data.AttackTimer, mapstate_activenpc_data.PauseTimer, mapstate_activenpc_data.StatusAilment, " + "mapstate_activenpc_data.StatusAilmentCounter, mapstate_activenpc_data.HPStepCounter, " + "mapstate_activenpc_data.Target, " + "mapstate_activenpc_location.X, mapstate_activenpc_location.Y, mapstate_activenpc_location.Direction, " + "mapstate_activenpc_stats.IQ, mapstate_activenpc_stats.HP, mapstate_activenpc_stats.HPRemainder, " + "mapstate_activenpc_stats.MaxHPBonus, mapstate_activenpc_stats.AtkBonus, mapstate_activenpc_stats.DefBonus, " + "mapstate_activenpc_stats.SpdBonus, mapstate_activenpc_stats.SpclAtkBonus, mapstate_activenpc_stats.SpclDefBonus, " + "mapstate_activenpc_stats.AttackBuff, " + "mapstate_activenpc_stats.DefenseBuff, mapstate_activenpc_stats.SpAtkBuff, mapstate_activenpc_stats.SpDefBuff, mapstate_activenpc_stats.SpeedBuff, " + "mapstate_activenpc_stats.AccuracyBuff, mapstate_activenpc_stats.EvasionBuff " + "FROM mapstate_activenpc_data " + "LEFT OUTER JOIN mapstate_activenpc_location ON mapstate_activenpc_data.MapID = mapstate_activenpc_location.MapID AND mapstate_activenpc_data.MapNpcSlot = mapstate_activenpc_location.MapNpcSlot " + "JOIN mapstate_activenpc_stats ON mapstate_activenpc_data.MapID = mapstate_activenpc_stats.MapID AND mapstate_activenpc_data.MapNpcSlot = mapstate_activenpc_stats.MapNpcSlot " + "WHERE mapstate_activenpc_data.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); MapNpc npc = new MapNpc(slot); npc.Name = row[counter++].ValueString; npc.Shiny = Convert.ToByte(row[counter++].Value); npc.Form = Convert.ToInt32(row[counter++].Value); npc.Level = Convert.ToInt32(row[counter++].Value); npc.Num = Convert.ToInt32(row[counter++].Value); //npc.Sprite = Convert.ToInt32(row[counter++].Value); npc.Sex = Convert.ToByte(row[counter++].Value); //npc.Type1 = Convert.ToByte(row[counter++].Value); //npc.Type2 = Convert.ToByte(row[counter++].Value); //npc.Ability1 = row[counter++].ValueString; //npc.Ability2 = row[counter++].ValueString; //npc.Ability3 = row[counter++].ValueString; //npc.TimeMultiplier = Convert.ToInt32(row[counter++].Value); npc.AttackTimer = Convert.ToInt32(row[counter++].Value); npc.PauseTimer = Convert.ToInt32(row[counter++].Value); npc.StatusAilment = Convert.ToByte(row[counter++].Value); npc.StatusAilmentCounter = Convert.ToInt32(row[counter++].Value); npc.HPStepCounter = Convert.ToInt32(row[counter++].Value); //npc.ConfusionStepCounter = Convert.ToInt32(row[counter++].Value); //npc.SpeedLimit = Convert.ToByte(row[counter++].Value); npc.Target = row[counter++].ValueString; //npc.ItemActive = row[counter++].ValueString.ToBool(); // Load location data npc.X = Convert.ToInt32(row[counter++].Value); npc.Y = Convert.ToInt32(row[counter++].Value); npc.Direction = Convert.ToByte(row[counter++].Value); // Load stat data npc.IQ = Convert.ToInt32(row[counter++].Value); npc.HP = Convert.ToInt32(row[counter++].Value); npc.HPRemainder = Convert.ToInt32(row[counter++].Value); //npc.BaseMaxHP = Convert.ToInt32(row[counter++].Value); //npc.BaseAtk = Convert.ToInt32(row[counter++].Value); //npc.BaseDef = Convert.ToInt32(row[counter++].Value); //npc.BaseSpd = Convert.ToInt32(row[counter++].Value); //npc.BaseSpclAtk = Convert.ToInt32(row[counter++].Value); //npc.BaseSpclDef = Convert.ToInt32(row[counter++].Value); //npc.MaxHPBonus = Convert.ToInt32(row[counter++].Value); npc.AtkBonus = Convert.ToInt32(row[counter++].Value); npc.DefBonus = Convert.ToInt32(row[counter++].Value); npc.SpdBonus = Convert.ToInt32(row[counter++].Value); npc.SpclAtkBonus = Convert.ToInt32(row[counter++].Value); npc.SpclDefBonus = Convert.ToInt32(row[counter++].Value); //npc.MaxHPBoost = Convert.ToInt32(row[counter++].Value); //npc.AtkBoost = Convert.ToInt32(row[counter++].Value); //npc.DefBoost = Convert.ToInt32(row[counter++].Value); //npc.SpdBoost = Convert.ToInt32(row[counter++].Value); //npc.SpclAtkBoost = Convert.ToInt32(row[counter++].Value); //npc.SpclDefBoost = Convert.ToInt32(row[counter++].Value); npc.AttackBuff = Convert.ToInt32(row[counter++].Value); npc.DefenseBuff = Convert.ToInt32(row[counter++].Value); npc.SpAtkBuff = Convert.ToInt32(row[counter++].Value); npc.SpDefBuff = Convert.ToInt32(row[counter++].Value); npc.SpeedBuff = Convert.ToInt32(row[counter++].Value); npc.AccuracyBuff = Convert.ToInt32(row[counter++].Value); npc.EvasionBuff = Convert.ToInt32(row[counter++].Value); mapDump.ActiveNpc[slot] = npc; } query = "SELECT mapstate_activenpc_helditem.MapNpcSlot, mapstate_activenpc_helditem.ItemNumber, mapstate_activenpc_helditem.Amount, " + "mapstate_activenpc_helditem.Sticky, mapstate_activenpc_helditem.Tag " + "FROM mapstate_activenpc_helditem " + "WHERE mapstate_activenpc_helditem.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); MapNpc npc = new MapNpc(slot); // Load held item { int heldItemNum = Convert.ToInt32(row[counter++].Value); if (heldItemNum > 0) { // The npc has a held item! Continue loading it npc.HeldItem = new Characters.InventoryItem(); npc.HeldItem.Num = heldItemNum; npc.HeldItem.Amount = Convert.ToInt32(row[counter++].Value); npc.HeldItem.Sticky = row[counter++].ValueString.ToBool(); npc.HeldItem.Tag = row[counter++].ValueString; } else { // No held item - skip loading the other values npc.HeldItem = new Characters.InventoryItem(); counter += 3; } } mapDump.ActiveNpc[slot] = npc; } query = "SELECT mapstate_activenpc_moves.MapNpcSlot, mapstate_activenpc_moves.MoveSlot, mapstate_activenpc_moves.CurrentPP, " + "mapstate_activenpc_moves.MaxPP, mapstate_activenpc_moves.MoveNum " + "FROM mapstate_activenpc_moves WHERE mapstate_activenpc_moves.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); int moveSlot = Convert.ToInt32(row[counter++].Value); Characters.Move move = new Characters.Move(); move.CurrentPP = Convert.ToInt32(row[counter++].Value); move.MaxPP = Convert.ToInt32(row[counter++].Value); move.MoveNum = Convert.ToInt32(row[counter++].Value); //move.Sealed = row[counter++].ValueString.ToBool(); mapDump.ActiveNpc[slot].Moves[moveSlot] = move; } //query = "SELECT mapstate_activenpc_mobility.MapNpcSlot, mapstate_activenpc_mobility.MobilitySlot, mapstate_activenpc_mobility.Mobile " + // "FROM mapstate_activenpc_mobility WHERE mapstate_activenpc_mobility.MapID = \'" + mapID + "\'"; //foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { // int counter = 0; // int slot = Convert.ToInt32(row[counter++].Value); // int mobilitySlot = Convert.ToInt32(row[counter++].Value); // mapDump.ActiveNpc[slot].Mobility[mobilitySlot] = row[counter++].ValueString.ToBool(); //} query = "SELECT mapstate_activenpc_volatilestatus.MapNpcSlot, mapstate_activenpc_volatilestatus.Name, " + "mapstate_activenpc_volatilestatus.Emoticon, mapstate_activenpc_volatilestatus.Counter, mapstate_activenpc_volatilestatus.Tag " + "FROM mapstate_activenpc_volatilestatus WHERE mapstate_activenpc_volatilestatus.MapID = \'" + mapID + "\' ORDER BY mapstate_activenpc_volatilestatus.StatusIndex"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); Characters.VolatileStatus status = new Characters.VolatileStatus(); status.Name = row[counter++].ValueString; status.Emoticon = Convert.ToInt32(row[counter++].Value); status.Counter = Convert.ToInt32(row[counter++].ValueString); status.Tag = row[counter++].ValueString; mapDump.ActiveNpc[slot].VolatileStatus.Add(status); } } // Load map status query = "SELECT mapstate_mapstatus.StatusIndex, mapstate_mapstatus.Name, mapstate_mapstatus.Tag, mapstate_mapstatus.GraphicEffect, mapstate_mapstatus.Tag, mapstate_mapstatus.Counter " + "FROM mapstate_mapstatus WHERE mapstate_mapstatus.MapID = \'" + mapID + "\' ORDER BY mapstate_mapstatus.StatusIndex"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { MapStatus status = new MapStatus(); int counter = 1; status.Name = row[counter++].ValueString; status.Tag = row[counter++].ValueString; status.GraphicEffect = Convert.ToInt32(row[counter++].ValueString); status.Counter = Convert.ToInt32(row.FindByName("Counter").Value); mapDump.TempStatus.Add(status); } }
public static void LoadMapDump(MySql database, string mapID, MapDump mapDump) { // First, load the raw map data LoadRawMap(database, mapID, mapDump); mapID = database.VerifyValueString(mapID); // Load map state data string query = "SELECT mapstate_data.ActivationTime, mapstate_data.ProcessingPaused, mapstate_data.SpawnMarker, " + "mapstate_data.NpcSpawnWait, mapstate_data.TempChange, mapstate_data.CurrentWeather " + "FROM mapstate_data WHERE mapstate_data.MapID = \'" + mapID + "\'"; ; { DataColumnCollection row = database.RetrieveRow(query); if (row != null) { int counter = 0; mapDump.ActivationTime = Convert.ToInt32(row[counter++].Value); mapDump.ProcessingPaused = row[counter++].ValueString.ToBool(); mapDump.SpawnMarker = Convert.ToInt32(row[counter++].Value); mapDump.NpcSpawnWait = Convert.ToInt32(row[counter++].Value); mapDump.TempChange = row[counter++].ValueString.ToBool(); mapDump.CurrentWeather = Convert.ToByte(row[counter++].Value); } else { throw new Exception("Map state data not found"); } } { // Load map active items query = "SELECT mapstate_activeitem.Slot, mapstate_activeitem.Number, mapstate_activeitem.Value, mapstate_activeitem.Sticky, " + "mapstate_activeitem.Tag, mapstate_activeitem.Hidden, mapstate_activeitem.X, mapstate_activeitem.Y, " + "mapstate_activeitem.TimeRemaining, mapstate_activeitem.ItemOwner " + "FROM mapstate_activeitem WHERE mapstate_activeitem.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { MapItem mapItem = new MapItem(); int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); mapItem.Num = Convert.ToInt32(row[counter++].Value); mapItem.Value = Convert.ToInt32(row[counter++].Value); mapItem.Sticky = row[counter++].ValueString.ToBool(); mapItem.Tag = row[counter++].ValueString; mapItem.Hidden = row[counter++].ValueString.ToBool(); mapItem.X = Convert.ToInt32(row[counter++].Value); mapItem.Y = Convert.ToInt32(row[counter++].Value); mapItem.TimeRemaining = Convert.ToInt32(row[counter++].Value); mapItem.PlayerFor = row[counter++].ValueString; mapDump.ActiveItem[slot] = mapItem; } } { // Load map active npcs query = "SELECT mapstate_activenpc_data.MapNpcSlot, mapstate_activenpc_data.Name, mapstate_activenpc_data.Shiny, mapstate_activenpc_data.Form, " + "mapstate_activenpc_data.Level, mapstate_activenpc_data.NpcNumber, mapstate_activenpc_data.Sex, " + "mapstate_activenpc_data.AttackTimer, mapstate_activenpc_data.PauseTimer, mapstate_activenpc_data.StatusAilment, " + "mapstate_activenpc_data.StatusAilmentCounter, mapstate_activenpc_data.HPStepCounter, " + "mapstate_activenpc_data.Target, " + "mapstate_activenpc_location.X, mapstate_activenpc_location.Y, mapstate_activenpc_location.Direction, " + "mapstate_activenpc_stats.IQ, mapstate_activenpc_stats.HP, mapstate_activenpc_stats.HPRemainder, " + "mapstate_activenpc_stats.MaxHPBonus, mapstate_activenpc_stats.AtkBonus, mapstate_activenpc_stats.DefBonus, " + "mapstate_activenpc_stats.SpdBonus, mapstate_activenpc_stats.SpclAtkBonus, mapstate_activenpc_stats.SpclDefBonus, " + "mapstate_activenpc_stats.AttackBuff, " + "mapstate_activenpc_stats.DefenseBuff, mapstate_activenpc_stats.SpAtkBuff, mapstate_activenpc_stats.SpDefBuff, mapstate_activenpc_stats.SpeedBuff, " + "mapstate_activenpc_stats.AccuracyBuff, mapstate_activenpc_stats.EvasionBuff " + "FROM mapstate_activenpc_data " + "LEFT OUTER JOIN mapstate_activenpc_location ON mapstate_activenpc_data.MapID = mapstate_activenpc_location.MapID AND mapstate_activenpc_data.MapNpcSlot = mapstate_activenpc_location.MapNpcSlot " + "JOIN mapstate_activenpc_stats ON mapstate_activenpc_data.MapID = mapstate_activenpc_stats.MapID AND mapstate_activenpc_data.MapNpcSlot = mapstate_activenpc_stats.MapNpcSlot " + "WHERE mapstate_activenpc_data.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); MapNpc npc = new MapNpc(slot); npc.Name = row[counter++].ValueString; npc.Shiny = Convert.ToByte(row[counter++].Value); npc.Form = Convert.ToInt32(row[counter++].Value); npc.Level = Convert.ToInt32(row[counter++].Value); npc.Num = Convert.ToInt32(row[counter++].Value); //npc.Sprite = Convert.ToInt32(row[counter++].Value); npc.Sex = Convert.ToByte(row[counter++].Value); //npc.Type1 = Convert.ToByte(row[counter++].Value); //npc.Type2 = Convert.ToByte(row[counter++].Value); //npc.Ability1 = row[counter++].ValueString; //npc.Ability2 = row[counter++].ValueString; //npc.Ability3 = row[counter++].ValueString; //npc.TimeMultiplier = Convert.ToInt32(row[counter++].Value); npc.AttackTimer = Convert.ToInt32(row[counter++].Value); npc.PauseTimer = Convert.ToInt32(row[counter++].Value); npc.StatusAilment = Convert.ToByte(row[counter++].Value); npc.StatusAilmentCounter = Convert.ToInt32(row[counter++].Value); npc.HPStepCounter = Convert.ToInt32(row[counter++].Value); //npc.ConfusionStepCounter = Convert.ToInt32(row[counter++].Value); //npc.SpeedLimit = Convert.ToByte(row[counter++].Value); npc.Target = row[counter++].ValueString; //npc.ItemActive = row[counter++].ValueString.ToBool(); // Load location data npc.X = Convert.ToInt32(row[counter++].Value); npc.Y = Convert.ToInt32(row[counter++].Value); npc.Direction = Convert.ToByte(row[counter++].Value); // Load stat data npc.IQ = Convert.ToInt32(row[counter++].Value); npc.HP = Convert.ToInt32(row[counter++].Value); npc.HPRemainder = Convert.ToInt32(row[counter++].Value); //npc.BaseMaxHP = Convert.ToInt32(row[counter++].Value); //npc.BaseAtk = Convert.ToInt32(row[counter++].Value); //npc.BaseDef = Convert.ToInt32(row[counter++].Value); //npc.BaseSpd = Convert.ToInt32(row[counter++].Value); //npc.BaseSpclAtk = Convert.ToInt32(row[counter++].Value); //npc.BaseSpclDef = Convert.ToInt32(row[counter++].Value); //npc.MaxHPBonus = Convert.ToInt32(row[counter++].Value); npc.AtkBonus = Convert.ToInt32(row[counter++].Value); npc.DefBonus = Convert.ToInt32(row[counter++].Value); npc.SpdBonus = Convert.ToInt32(row[counter++].Value); npc.SpclAtkBonus = Convert.ToInt32(row[counter++].Value); npc.SpclDefBonus = Convert.ToInt32(row[counter++].Value); //npc.MaxHPBoost = Convert.ToInt32(row[counter++].Value); //npc.AtkBoost = Convert.ToInt32(row[counter++].Value); //npc.DefBoost = Convert.ToInt32(row[counter++].Value); //npc.SpdBoost = Convert.ToInt32(row[counter++].Value); //npc.SpclAtkBoost = Convert.ToInt32(row[counter++].Value); //npc.SpclDefBoost = Convert.ToInt32(row[counter++].Value); npc.AttackBuff = Convert.ToInt32(row[counter++].Value); npc.DefenseBuff = Convert.ToInt32(row[counter++].Value); npc.SpAtkBuff = Convert.ToInt32(row[counter++].Value); npc.SpDefBuff = Convert.ToInt32(row[counter++].Value); npc.SpeedBuff = Convert.ToInt32(row[counter++].Value); npc.AccuracyBuff = Convert.ToInt32(row[counter++].Value); npc.EvasionBuff = Convert.ToInt32(row[counter++].Value); mapDump.ActiveNpc[slot] = npc; } query = "SELECT mapstate_activenpc_helditem.MapNpcSlot, mapstate_activenpc_helditem.ItemNumber, mapstate_activenpc_helditem.Amount, " + "mapstate_activenpc_helditem.Sticky, mapstate_activenpc_helditem.Tag " + "FROM mapstate_activenpc_helditem " + "WHERE mapstate_activenpc_helditem.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); MapNpc npc = new MapNpc(slot); // Load held item { int heldItemNum = Convert.ToInt32(row[counter++].Value); if (heldItemNum > 0) { // The npc has a held item! Continue loading it npc.HeldItem = new Characters.InventoryItem(); npc.HeldItem.Num = heldItemNum; npc.HeldItem.Amount = Convert.ToInt32(row[counter++].Value); npc.HeldItem.Sticky = row[counter++].ValueString.ToBool(); npc.HeldItem.Tag = row[counter++].ValueString; } else { // No held item - skip loading the other values npc.HeldItem = new Characters.InventoryItem(); counter += 3; } } mapDump.ActiveNpc[slot] = npc; } query = "SELECT mapstate_activenpc_moves.MapNpcSlot, mapstate_activenpc_moves.MoveSlot, mapstate_activenpc_moves.CurrentPP, " + "mapstate_activenpc_moves.MaxPP, mapstate_activenpc_moves.MoveNum " + "FROM mapstate_activenpc_moves WHERE mapstate_activenpc_moves.MapID = \'" + mapID + "\'"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); int moveSlot = Convert.ToInt32(row[counter++].Value); Characters.Move move = new Characters.Move(); move.CurrentPP = Convert.ToInt32(row[counter++].Value); move.MaxPP = Convert.ToInt32(row[counter++].Value); move.MoveNum = Convert.ToInt32(row[counter++].Value); //move.Sealed = row[counter++].ValueString.ToBool(); mapDump.ActiveNpc[slot].Moves[moveSlot] = move; } //query = "SELECT mapstate_activenpc_mobility.MapNpcSlot, mapstate_activenpc_mobility.MobilitySlot, mapstate_activenpc_mobility.Mobile " + // "FROM mapstate_activenpc_mobility WHERE mapstate_activenpc_mobility.MapID = \'" + mapID + "\'"; //foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { // int counter = 0; // int slot = Convert.ToInt32(row[counter++].Value); // int mobilitySlot = Convert.ToInt32(row[counter++].Value); // mapDump.ActiveNpc[slot].Mobility[mobilitySlot] = row[counter++].ValueString.ToBool(); //} query = "SELECT mapstate_activenpc_volatilestatus.MapNpcSlot, mapstate_activenpc_volatilestatus.Name, " + "mapstate_activenpc_volatilestatus.Emoticon, mapstate_activenpc_volatilestatus.Counter, mapstate_activenpc_volatilestatus.Tag " + "FROM mapstate_activenpc_volatilestatus WHERE mapstate_activenpc_volatilestatus.MapID = \'" + mapID + "\' ORDER BY mapstate_activenpc_volatilestatus.StatusIndex"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { int counter = 0; int slot = Convert.ToInt32(row[counter++].Value); Characters.VolatileStatus status = new Characters.VolatileStatus(); status.Name = row[counter++].ValueString; status.Emoticon = Convert.ToInt32(row[counter++].Value); status.Counter = Convert.ToInt32(row[counter++].ValueString); status.Tag = row[counter++].ValueString; mapDump.ActiveNpc[slot].VolatileStatus.Add(status); } } // Load map status query = "SELECT mapstate_mapstatus.StatusIndex, mapstate_mapstatus.Name, mapstate_mapstatus.Tag, mapstate_mapstatus.GraphicEffect, mapstate_mapstatus.Tag, mapstate_mapstatus.Counter " + "FROM mapstate_mapstatus WHERE mapstate_mapstatus.MapID = \'" + mapID + "\' ORDER BY mapstate_mapstatus.StatusIndex"; foreach (DataColumnCollection row in database.RetrieveRowsEnumerable(query)) { MapStatus status = new MapStatus(); int counter = 1; status.Name = row[counter++].ValueString; status.Tag = row[counter++].ValueString; status.GraphicEffect = Convert.ToInt32(row[counter++].ValueString); status.Counter = Convert.ToInt32(row.FindByName("Counter").Value); mapDump.TempStatus.Add(status); } }