Fixed "getServer" bug in DB class. Cleaned up chara creator function. Fixed bug in error packet.

This commit is contained in:
Filip Maj 2015-09-08 00:42:02 -04:00
parent 754f14862a
commit f566c14ea0
4 changed files with 59 additions and 52 deletions

View File

@ -41,7 +41,7 @@ namespace FFXIVClassic_Lobby_Server
return id; return id;
} }
public static bool reserveCharacter(uint userId, uint slot, uint serverId, String name) public static bool reserveCharacter(uint userId, uint slot, uint serverId, String name, out uint pid, out uint cid)
{ {
bool alreadyExists = false; bool alreadyExists = false;
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))) 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)))
@ -57,8 +57,10 @@ namespace FFXIVClassic_Lobby_Server
using (MySqlDataReader Reader = cmd.ExecuteReader()) using (MySqlDataReader Reader = cmd.ExecuteReader())
{ {
if (Reader.HasRows) if (Reader.HasRows)
{
alreadyExists = true; alreadyExists = true;
} }
}
//Reserve //Reserve
if (!alreadyExists) if (!alreadyExists)
@ -72,12 +74,20 @@ namespace FFXIVClassic_Lobby_Server
cmd2.Parameters.AddWithValue("@serverId", serverId); cmd2.Parameters.AddWithValue("@serverId", serverId);
cmd2.Parameters.AddWithValue("@name", name); cmd2.Parameters.AddWithValue("@name", name);
cmd2.ExecuteNonQuery(); cmd2.ExecuteNonQuery();
}
pid = 1;
cid = 1;
}
else
{
pid = 0;
cid = 0;
}
} }
catch (MySqlException e) catch (MySqlException e)
{ {
pid = 0;
cid = 0;
} }
finally finally
{ {
@ -181,7 +191,7 @@ namespace FFXIVClassic_Lobby_Server
conn.Open(); conn.Open();
MySqlCommand cmd = new MySqlCommand(); MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn; cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM ffxiv_servers WHERE isActive=true"; cmd.CommandText = "SELECT * FROM servers WHERE isActive=true";
cmd.Prepare(); cmd.Prepare();
MySqlDataReader Reader = cmd.ExecuteReader(); MySqlDataReader Reader = cmd.ExecuteReader();
@ -236,7 +246,7 @@ namespace FFXIVClassic_Lobby_Server
conn.Open(); conn.Open();
MySqlCommand cmd = new MySqlCommand(); MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn; cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM ffxiv_servers WHERE id=%serverId"; cmd.CommandText = "SELECT * FROM servers WHERE id='%serverId'";
cmd.Prepare(); cmd.Prepare();
cmd.Parameters.AddWithValue("@serverId", serverId); cmd.Parameters.AddWithValue("@serverId", serverId);
@ -271,11 +281,10 @@ namespace FFXIVClassic_Lobby_Server
} }
catch (MySqlException e) catch (MySqlException e)
{ {
} }
finally finally
{ {
conn.Close(); conn.Dispose();
} }
return world; return world;

View File

@ -63,8 +63,7 @@
<Compile Include="dataobjects\World.cs" /> <Compile Include="dataobjects\World.cs" />
<Compile Include="PacketProcessor.cs" /> <Compile Include="PacketProcessor.cs" />
<Compile Include="packets\BasePacket.cs" /> <Compile Include="packets\BasePacket.cs" />
<Compile Include="packets\MakeCharaPacket.cs" /> <Compile Include="packets\CharaCreatorPacket.cs" />
<Compile Include="packets\ReserveCharaPacket.cs" />
<Compile Include="packets\RetainerListPacket.cs" /> <Compile Include="packets\RetainerListPacket.cs" />
<Compile Include="packets\ErrorPacket.cs" /> <Compile Include="packets\ErrorPacket.cs" />
<Compile Include="packets\HardCoded_Packets.cs" /> <Compile Include="packets\HardCoded_Packets.cs" />

View File

@ -198,17 +198,37 @@ namespace FFXIVClassic_Lobby_Server
var name = charaReq.characterName; var name = charaReq.characterName;
var worldId = charaReq.worldId; var worldId = charaReq.worldId;
uint pid = 0, cid = 0;
World world = Database.getServer(worldId);
string worldName = null;
if (world != null)
worldName = world.name;
if (worldName == null)
{
ErrorPacket errorPacket = new ErrorPacket(charaReq.sequence, 0, 0, 13001, "World does not exist or is inactive.");
SubPacket subpacket = errorPacket.buildPacket();
BasePacket basePacket = BasePacket.createPacket(subpacket, true, false);
BasePacket.encryptPacket(client.blowfish, basePacket);
client.queuePacket(basePacket);
Console.WriteLine("User {0} => Error; invalid server id: \"{1}\"", client.currentUserId, worldId);
return;
}
switch (code) switch (code)
{ {
case 0x01://Reserve case 0x01://Reserve
var alreadyTaken = Database.reserveCharacter(client.currentUserId, slot, worldId, name);
var alreadyTaken = Database.reserveCharacter(client.currentUserId, slot, worldId, name, out pid, out cid);
if (alreadyTaken) if (alreadyTaken)
{ {
ErrorPacket errorPacket = new ErrorPacket(charaReq.sequence, 13005, 0, 0, ""); ErrorPacket errorPacket = new ErrorPacket(charaReq.sequence, 0, 0, 13005, "");
SubPacket subpacket = errorPacket.buildPacket(); SubPacket subpacket = errorPacket.buildPacket();
BasePacket basePacket = BasePacket.createPacket(subpacket, true, false); BasePacket basePacket = BasePacket.createPacket(subpacket, true, false);
basePacket.debugPrintPacket();
BasePacket.encryptPacket(client.blowfish, basePacket); BasePacket.encryptPacket(client.blowfish, basePacket);
client.queuePacket(basePacket); client.queuePacket(basePacket);
@ -216,57 +236,36 @@ namespace FFXIVClassic_Lobby_Server
return; return;
} }
//Confirm Reserve Console.WriteLine("User {0} => Character reserved \"{1}\"", client.currentUserId, charaReq.characterName);
CharaCreatorPacket confirmReserve = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.RESERVE, 1, 1, 1, name, "World Name");
BasePacket confirmReservePacket = BasePacket.createPacket(confirmReserve.buildPacket(), true, false);
BasePacket.encryptPacket(client.blowfish, confirmReservePacket);
client.queuePacket(confirmReservePacket);
Console.WriteLine("User {0} => Reserving character \"{1}\"", client.currentUserId, charaReq.characterName);
break; break;
case 0x02://Make case 0x02://Make
Character character = Character.EncodedToCharacter(charaReq.characterInfoEncoded); Character character = Character.EncodedToCharacter(charaReq.characterInfoEncoded);
Database.makeCharacter(client.currentUserId, name, character); Database.makeCharacter(client.currentUserId, name, character);
//Confirm Console.WriteLine("User {0} => Character created \"{1}\"", client.currentUserId, charaReq.characterName);
CharaCreatorPacket makeChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.MAKE, 1, 1, 1, name, "World Name");
BasePacket confirmMakePacket = BasePacket.createPacket(makeChara.buildPacket(), true, false);
BasePacket.encryptPacket(client.blowfish, confirmMakePacket);
client.queuePacket(confirmMakePacket);
Console.WriteLine("User {0} => Character created!", client.currentUserId);
break; break;
case 0x03://Rename case 0x03://Rename
//Confirm Console.WriteLine("User {0} => Character renamed \"{1}\"", client.currentUserId, charaReq.characterName);
CharaCreatorPacket renameChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.RENAME, 1, 1, 1, name, "World Name");
BasePacket confirmRenamePacket = BasePacket.createPacket(renameChara.buildPacket(), true, false);
BasePacket.encryptPacket(client.blowfish, confirmRenamePacket);
client.queuePacket(confirmRenamePacket);
Console.WriteLine("User {0} => Character renamed to \"{1}\"", client.currentUserId, charaReq.characterName);
break; break;
case 0x04://Delete case 0x04://Delete
Database.deleteCharacter(charaReq.characterId, charaReq.characterName); Database.deleteCharacter(charaReq.characterId, charaReq.characterName);
//Confirm
CharaCreatorPacket deleteChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.MAKE, 1, 1, 1, name, "World Name");
BasePacket confirmDeletePacket = BasePacket.createPacket(deleteChara.buildPacket(), true, false);
BasePacket.encryptPacket(client.blowfish, confirmDeletePacket);
client.queuePacket(confirmDeletePacket);
Console.WriteLine("User {0} => Character deleted \"{1}\"", client.currentUserId, charaReq.characterName); Console.WriteLine("User {0} => Character deleted \"{1}\"", client.currentUserId, charaReq.characterName);
break; break;
case 0x06://Rename Retainer case 0x06://Rename Retainer
//Confirm Console.WriteLine("User {0} => Retainer renamed \"{1}\"", client.currentUserId, charaReq.characterName);
CharaCreatorPacket renameRetainerChara = new CharaCreatorPacket(charaReq.sequence, CharaCreatorPacket.RENAME_RETAINER, 1, 1, 1, name, "World Name");
BasePacket confirmRenameRetainerPacket = BasePacket.createPacket(renameRetainerChara.buildPacket(), true, false);
BasePacket.encryptPacket(client.blowfish, confirmRenameRetainerPacket);
client.queuePacket(confirmRenameRetainerPacket);
break; break;
} }
CharaCreatorPacket charaCreator = new CharaCreatorPacket(charaReq.sequence, code, pid, cid, 1, name, worldName);
BasePacket charaCreatorPacket = BasePacket.createPacket(charaCreator.buildPacket(), true, false);
charaCreatorPacket.debugPrintPacket();
BasePacket.encryptPacket(client.blowfish, charaCreatorPacket);
client.queuePacket(charaCreatorPacket);
} }
private void sendWorldList(ClientConnection client, SubPacket packet) private void sendWorldList(ClientConnection client, SubPacket packet)
@ -281,7 +280,7 @@ namespace FFXIVClassic_Lobby_Server
} }
private void sendUnknownList(ClientConnection client, SubPacket packet) private void sendImportList(ClientConnection client, SubPacket packet)
{ {
} }

View File

@ -35,7 +35,7 @@ namespace FFXIVClassic_Lobby_Server.packets
binWriter.Write(errorCode); binWriter.Write(errorCode);
binWriter.Write(statusCode); binWriter.Write(statusCode);
binWriter.Write(textId); binWriter.Write(textId);
binWriter.Write(message); binWriter.Write(Encoding.ASCII.GetBytes(message));
byte[] data = memStream.GetBuffer(); byte[] data = memStream.GetBuffer();
binWriter.Dispose(); binWriter.Dispose();