1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-26 14:47:45 +00:00

Merged in dude22072/ffxiv-classic-server-1 (pull request #57)

Achievement Progress Request (0x0135) implementation
This commit is contained in:
Joseph Mikel Keller 2019-06-04 05:11:51 +00:00 committed by Filip Maj
commit 2195b0b7dc
3 changed files with 75 additions and 0 deletions

View file

@ -2134,6 +2134,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;

View file

@ -259,6 +259,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:

View file

@ -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;
}
}
}
}
}
}