From 384d134f1da96a32d6e1b7112909677072c67169 Mon Sep 17 00:00:00 2001 From: Joseph Mikel Keller Date: Thu, 25 Oct 2018 04:35:12 +0000 Subject: [PATCH 1/3] Database.cs - Add GetAchievementProgress --- FFXIVClassic Map Server/Database.cs | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 22201313..57ad58e5 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -1684,6 +1684,43 @@ namespace FFXIVClassic_Map_Server return cheevosPacket.BuildPacket(player.actorId); } + public static SubPacket GetAchievementProgress(Player player, uint AchievementID) + { + uint progress = 0, progressFlags = 0; + 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))) + { + try + { + conn.Open(); + + string query = @" + SELECT progress, progressFlags + FROM characters_achievements + WHERE characterId = @charId AND achievementId = @cheevoId"; + + MySqlCommand cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@charId", player.actorId); + cmd.Parameters.AddWithValue("@cheevoId", AchievementID); + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + progress = reader.GetUInt32(0); + progressFlags = reader.GetUInt32(1); + } + } + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + return SendAchievementRatePacket.BuildPacket(player.actorId, AchievementID, progress, progressFlags); + } public static bool CreateLinkshell(Player player, string lsName, ushort lsCrest) { bool success = false; From e4956edf509061a4a492d36821211cefb29ad190 Mon Sep 17 00:00:00 2001 From: Joseph Mikel Keller Date: Thu, 25 Oct 2018 04:37:41 +0000 Subject: [PATCH 2/3] AchievementProgressRequestPacket.cs- Create this --- .../AchievementProgressRequestPacket.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 FFXIVClassic Map Server/packets/receive/AchievementProgressRequestPacket.cs diff --git a/FFXIVClassic Map Server/packets/receive/AchievementProgressRequestPacket.cs b/FFXIVClassic Map Server/packets/receive/AchievementProgressRequestPacket.cs new file mode 100644 index 00000000..2f04e928 --- /dev/null +++ b/FFXIVClassic Map Server/packets/receive/AchievementProgressRequestPacket.cs @@ -0,0 +1,33 @@ +using System; +using System.IO; + +namespace FFXIVClassic_Map_Server.packets.receive +{ + class AchievementProgressRequestPacket + { + public bool invalidPacket = false; + + public uint achievementID; + public uint responseType; + + public AchievementProgressRequestPacket(byte[] data) + { + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryReader binReader = new BinaryReader(mem)) + { + try + { + achievementID = binReader.ReadUInt32(); + responseType = binReader.ReadUInt32(); + + } + catch (Exception) + { + invalidPacket = true; + } + } + } + } + } +} From 1b69f5fc87f6fa3745a89ae04cd2c2fa13222a97 Mon Sep 17 00:00:00 2001 From: Joseph Mikel Keller Date: Thu, 25 Oct 2018 04:39:00 +0000 Subject: [PATCH 3/3] PacketProcessor.cs - Add in 0x0135 (Achievement Progress Request) --- FFXIVClassic Map Server/PacketProcessor.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index ded25460..761a0d51 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -250,6 +250,11 @@ namespace FFXIVClassic_Map_Server GroupCreatedPacket groupCreated = new GroupCreatedPacket(subpacket.data); Server.GetWorldManager().SendGroupInit(session, groupCreated.groupId); break; + //Achievement Progress Request + case 0x0135: + AchievementProgressRequestPacket progressRequest = new AchievementProgressRequestPacket(subpacket.data); + session.QueuePacket(Database.GetAchievementProgress(session.GetActor(), progressRequest.achievementID)); + break; /* RECRUITMENT */ //Start Recruiting case 0x01C3: