From 62484e2f8711e7cb0bf16a969c1730b7a2a1e081 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sun, 3 Sep 2017 16:37:05 -0400 Subject: [PATCH] Fixed the retainer database error. Loading code now matches the new retainer db schema. --- FFXIVClassic Lobby Server/Database.cs | 36 ++++++++++++++++--- .../dataobjects/Retainer.cs | 17 ++++++--- .../packets/send/RetainerListPacket.cs | 2 +- 3 files changed, 44 insertions(+), 11 deletions(-) diff --git a/FFXIVClassic Lobby Server/Database.cs b/FFXIVClassic Lobby Server/Database.cs index deb776b4..8af742d1 100644 --- a/FFXIVClassic Lobby Server/Database.cs +++ b/FFXIVClassic Lobby Server/Database.cs @@ -530,24 +530,50 @@ namespace FFXIVClassic_Lobby_Server public static List GetRetainers(uint userId) { - using (var conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) + List retainers = new List(); + + using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) { - List retainerList = null; try { conn.Open(); - retainerList = conn.Query("SELECT * FROM retainers WHERE id=@UserId ORDER BY characterId, slot", new { UserId = userId }).ToList(); + + string query = @" + SELECT characters.id as charaId, server_retainers.id as retainerId, server_retainers.name, characters_retainers.doRename FROM characters + INNER JOIN characters_retainers ON characters.id = characters_retainers.characterId + INNER JOIN server_retainers ON characters_retainers.retainerId = server_retainers.id + WHERE userId = @userId + "; + + MySqlCommand cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@userId", userId); + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + uint characterId = reader.GetUInt32("charaId"); + uint retainerId = reader.GetUInt32("retainerId"); + string name = reader.GetString("name"); + bool doRename = reader.GetBoolean("doRename"); + + retainers.Add(new Retainer(characterId, retainerId, name, doRename)); + } + } + } catch (MySqlException e) { Program.Log.Error(e.ToString()); - retainerList = new List(); } + } finally { conn.Dispose(); } - return retainerList; + + return retainers; } + } } diff --git a/FFXIVClassic Lobby Server/dataobjects/Retainer.cs b/FFXIVClassic Lobby Server/dataobjects/Retainer.cs index 465747e4..2585ef0b 100644 --- a/FFXIVClassic Lobby Server/dataobjects/Retainer.cs +++ b/FFXIVClassic Lobby Server/dataobjects/Retainer.cs @@ -2,10 +2,17 @@ { class Retainer { - public uint id; - public uint characterId; - public string name; - public ushort slot; - public bool doRename; + public readonly uint id; + public readonly uint characterId; + public readonly string name; + public readonly bool doRename; + + public Retainer(uint characterId, uint retainerId, string name, bool doRename) + { + this.id = retainerId; + this.characterId = characterId; + this.name = name; + this.doRename = doRename; + } } } \ No newline at end of file diff --git a/FFXIVClassic Lobby Server/packets/send/RetainerListPacket.cs b/FFXIVClassic Lobby Server/packets/send/RetainerListPacket.cs index fc7e6122..e17e39b2 100644 --- a/FFXIVClassic Lobby Server/packets/send/RetainerListPacket.cs +++ b/FFXIVClassic Lobby Server/packets/send/RetainerListPacket.cs @@ -51,7 +51,7 @@ namespace FFXIVClassic_Lobby_Server.packets //Write Entries binWriter.Write((uint)retainer.id); binWriter.Write((uint)retainer.characterId); - binWriter.Write((ushort)retainer.slot); + binWriter.Write((ushort)totalCount); binWriter.Write((ushort)(retainer.doRename ? 0x04 : 0x00)); binWriter.Write((uint)0); binWriter.Write(Encoding.ASCII.GetBytes(retainer.name.PadRight(0x20, '\0')));