From 5145e2f5e211f955be3e3768d9799810ef3a39f2 Mon Sep 17 00:00:00 2001 From: Greg Edwards Date: Sun, 3 Aug 2014 19:15:36 -0400 Subject: [PATCH] Fixes to Battle Subway data schema --- gts/pokemondpds.ashx.cs | 2 +- library/Data/DataMysql.cs | 23 ++++++++++++++--------- library/Structures/BattleSubwayRecord5.cs | 3 ++- library/Structures/BattleTowerRecord4.cs | 2 +- library/database.sql | 7 ++++--- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/gts/pokemondpds.ashx.cs b/gts/pokemondpds.ashx.cs index 82366b6e..64e7cef1 100644 --- a/gts/pokemondpds.ashx.cs +++ b/gts/pokemondpds.ashx.cs @@ -596,7 +596,7 @@ namespace PkmnFoundations.GTS record.Rank = data[0xe8]; record.RoomNum = data[0xe9]; record.BattlesWon = data[0xea]; - record.Unknown4 = BitConverter.ToUInt64(data, 0xeb); + record.Unknown5 = BitConverter.ToUInt64(data, 0xeb); // todo: Do we want to store their record anyway if they lost the first round? if (record.BattlesWon > 0) diff --git a/library/Data/DataMysql.cs b/library/Data/DataMysql.cs index 2962225f..491431b6 100644 --- a/library/Data/DataMysql.cs +++ b/library/Data/DataMysql.cs @@ -482,7 +482,7 @@ namespace PkmnFoundations.Data "Version = @version, Language = @language, Country = @country, " + "Region = @region, TrainerID = @trainer_id, Unknown1 = @unknown1, " + "TrendyPhrase = @trendy_phrase, Unknown2 = @unknown2, Unknown3 = @unknown3, " + - "Unknown4 = @unknown4, ParseVersion = 1, Rank = @rank, " + + "Unknown5 = @unknown5, ParseVersion = 1, Rank = @rank, " + "BattlesWon = @battles_won, Position = @position, " + "TimeUpdated = UTC_TIMESTAMP() WHERE id = @id", _params.ToArray()); @@ -498,10 +498,10 @@ namespace PkmnFoundations.Data pkey = Convert.ToUInt64(tran.ExecuteScalar("INSERT INTO GtsBattleTower4 " + "(pid, Name, Version, Language, Country, Region, TrainerID, " + - "Unknown1, TrendyPhrase, Unknown2, Unknown3, Unknown4, ParseVersion, " + + "Unknown1, TrendyPhrase, Unknown2, Unknown3, Unknown5, ParseVersion, " + "Rank, RoomNum, BattlesWon, Position, TimeAdded, TimeUpdated) VALUES " + "(@pid, @name, @version, @language, @country, @region, @trainer_id, " + - "@unknown1, @trendy_phrase, @unknown2, @unknown3, @unknown4, 1, " + + "@unknown1, @trendy_phrase, @unknown2, @unknown3, @unknown5, 1, " + "@rank, @room, @battles_won, @position, UTC_TIMESTAMP(), UTC_TIMESTAMP()); " + "SELECT LAST_INSERT_ID()", _params.ToArray())); @@ -565,7 +565,7 @@ namespace PkmnFoundations.Data if (!leader) { result.Add(new MySqlParameter("@unknown3", record.Unknown3)); - result.Add(new MySqlParameter("@unknown4", record.Unknown4)); + result.Add(new MySqlParameter("@unknown5", record.Unknown5)); result.Add(new MySqlParameter("@battles_won", record.BattlesWon)); } return result; @@ -703,7 +703,7 @@ namespace PkmnFoundations.Data MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader( "SELECT id, pid, Name, " + "Version, Language, Country, Region, TrainerID, Unknown1, " + - "TrendyPhrase, Unknown2, Unknown3 FROM GtsBattleTower4 " + + "TrendyPhrase, Unknown2, Unknown3, Unknown4 FROM GtsBattleTower4 " + "WHERE Rank = @rank AND RoomNum = @room AND pid != @pid " + "ORDER BY Position LIMIT 7", new MySqlParameter("@rank", rank), @@ -745,6 +745,7 @@ namespace PkmnFoundations.Data BattleTowerRecord4 result = new BattleTowerRecord4(); result.PID = reader.GetInt32(1); if (reader.FieldCount > 11) result.Unknown3 = reader.GetByteArray(11, 26); + if (reader.FieldCount > 12) result.Unknown5 = reader.GetUInt64(12); BattleTowerProfile4 profile = new BattleTowerProfile4(); profile.Name = new EncodedString4(reader.GetByteArray(2, 16)); @@ -1333,7 +1334,7 @@ namespace PkmnFoundations.Data "Version = @version, Language = @language, Country = @country, " + "Region = @region, TrainerID = @trainer_id, Unknown1 = @unknown1, " + "TrendyPhrase = @trendy_phrase, Unknown2 = @unknown2, Unknown3 = @unknown3, " + - "Unknown4 = @unknown4, ParseVersion = 1, Rank = @rank, " + + "Unknown4 = @unknown4, Unknown5 = @unknown5, ParseVersion = 1, Rank = @rank, " + "BattlesWon = @battles_won, Position = @position, " + "TimeUpdated = UTC_TIMESTAMP() WHERE id = @id", _params.ToArray()); @@ -1349,10 +1350,10 @@ namespace PkmnFoundations.Data pkey = Convert.ToUInt64(tran.ExecuteScalar("INSERT INTO GtsBattleSubway5 " + "(pid, Name, Version, Language, Country, Region, TrainerID, " + - "Unknown1, TrendyPhrase, Unknown2, Unknown3, Unknown4, ParseVersion, " + + "Unknown1, TrendyPhrase, Unknown2, Unknown3, Unknown4, Unknown5, ParseVersion, " + "Rank, RoomNum, BattlesWon, Position, TimeAdded, TimeUpdated) VALUES " + "(@pid, @name, @version, @language, @country, @region, @trainer_id, " + - "@unknown1, @trendy_phrase, @unknown2, @unknown3, @unknown4, 1, " + + "@unknown1, @trendy_phrase, @unknown2, @unknown3, @unknown4, @unknown5, 1, " + "@rank, @room, @battles_won, @position, UTC_TIMESTAMP(), UTC_TIMESTAMP()); " + "SELECT LAST_INSERT_ID()", _params.ToArray())); @@ -1420,6 +1421,7 @@ namespace PkmnFoundations.Data { result.Add(new MySqlParameter("@unknown3", record.Unknown3)); result.Add(new MySqlParameter("@unknown4", record.Unknown4)); + result.Add(new MySqlParameter("@unknown5", record.Unknown5)); result.Add(new MySqlParameter("@battles_won", record.BattlesWon)); } return result; @@ -1558,7 +1560,7 @@ namespace PkmnFoundations.Data MySqlDataReader reader = (MySqlDataReader)tran.ExecuteReader( "SELECT id, pid, Name, " + "Version, Language, Country, Region, TrainerID, Unknown1, " + - "TrendyPhrase, Unknown2, Unknown3 FROM GtsBattleSubway5 " + + "TrendyPhrase, Unknown2, Unknown3, Unknown4, Unknown5 FROM GtsBattleSubway5 " + "WHERE Rank = @rank AND RoomNum = @room AND pid != @pid " + "ORDER BY Position LIMIT 7", new MySqlParameter("@rank", rank), @@ -1599,7 +1601,10 @@ namespace PkmnFoundations.Data // todo: Stop using ordinals everywhere. BattleSubwayRecord5 result = new BattleSubwayRecord5(); result.PID = reader.GetInt32(1); + // this is unsustainable. What happens if I add columns to Leaders? if (reader.FieldCount > 11) result.Unknown3 = reader.GetByteArray(11, 26); + if (reader.FieldCount > 12) result.Unknown4 = reader.GetByteArray(12, 5); + if (reader.FieldCount > 13) result.Unknown5 = reader.GetUInt64(13); BattleSubwayProfile5 profile = new BattleSubwayProfile5(); profile.Name = new EncodedString5(reader.GetByteArray(2, 16)); diff --git a/library/Structures/BattleSubwayRecord5.cs b/library/Structures/BattleSubwayRecord5.cs index 0cc99f57..df774d38 100644 --- a/library/Structures/BattleSubwayRecord5.cs +++ b/library/Structures/BattleSubwayRecord5.cs @@ -30,7 +30,8 @@ namespace PkmnFoundations.Structures public byte Rank; public byte RoomNum; public byte BattlesWon; - public ulong Unknown4; + public byte[] Unknown4; + public ulong Unknown5; public int PID; public byte[] Save() diff --git a/library/Structures/BattleTowerRecord4.cs b/library/Structures/BattleTowerRecord4.cs index 8e4d4bb4..9d7555a8 100644 --- a/library/Structures/BattleTowerRecord4.cs +++ b/library/Structures/BattleTowerRecord4.cs @@ -30,7 +30,7 @@ namespace PkmnFoundations.Structures public byte Rank; public byte RoomNum; public byte BattlesWon; - public ulong Unknown4; + public ulong Unknown5; public int PID; public byte[] Save() diff --git a/library/database.sql b/library/database.sql index 836558f0..881e15d7 100644 --- a/library/database.sql +++ b/library/database.sql @@ -7,7 +7,7 @@ # # Host: 127.0.0.1 (MySQL 5.5.27) # Database: gts -# Generation Time: 2014-08-02 05:49:14 +0000 +# Generation Time: 2014-08-03 23:14:23 +0000 # ************************************************************ @@ -227,7 +227,8 @@ CREATE TABLE `GtsBattleSubway5` ( `TrendyPhrase` binary(6) DEFAULT NULL, `Unknown2` smallint(5) unsigned DEFAULT NULL, `Unknown3` blob, - `Unknown4` bigint(20) DEFAULT NULL, + `Unknown4` binary(5) DEFAULT NULL, + `Unknown5` bigint(20) DEFAULT NULL, `ParseVersion` int(10) unsigned DEFAULT NULL, `Rank` tinyint(3) unsigned DEFAULT NULL, `RoomNum` tinyint(3) unsigned NOT NULL DEFAULT '0', @@ -318,7 +319,7 @@ CREATE TABLE `GtsBattleTower4` ( `TrendyPhrase` binary(6) DEFAULT NULL, `Unknown2` smallint(5) unsigned DEFAULT NULL, `Unknown3` blob, - `Unknown4` bigint(20) DEFAULT NULL, + `Unknown5` bigint(20) DEFAULT NULL, `ParseVersion` int(10) unsigned DEFAULT NULL, `Rank` tinyint(3) unsigned DEFAULT NULL, `RoomNum` tinyint(3) unsigned NOT NULL DEFAULT '0',