mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
Merged in issue-21 (pull request #69)
Fix to Character Name Reservation * Ported over changes from resharc/ffxiv-classic-server and merged into new branch. Approved-by: Filip Maj
This commit is contained in:
parent
0521b167fb
commit
61069e6d49
@ -70,21 +70,47 @@ namespace Meteor.Lobby
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
conn.Open();
|
conn.Open();
|
||||||
|
pid = 0;
|
||||||
//Check if exists
|
cid = 0;
|
||||||
MySqlCommand cmd = new MySqlCommand("SELECT * FROM characters WHERE name=@name AND serverId=@serverId AND state != 2 AND state != 1", conn);
|
//Check if there exists a character not reserved by the user with the same name and in the same server
|
||||||
|
MySqlCommand cmd = new MySqlCommand("SELECT * FROM characters WHERE (name=@name AND serverId=@serverId AND (userId!=@userId OR state!=0))", conn);
|
||||||
cmd.Parameters.AddWithValue("@serverId", serverId);
|
cmd.Parameters.AddWithValue("@serverId", serverId);
|
||||||
cmd.Parameters.AddWithValue("@name", name);
|
cmd.Parameters.AddWithValue("@name", name);
|
||||||
|
cmd.Parameters.AddWithValue("@userId", userId);
|
||||||
using (MySqlDataReader Reader = cmd.ExecuteReader())
|
using (MySqlDataReader Reader = cmd.ExecuteReader())
|
||||||
{
|
{
|
||||||
if (Reader.HasRows)
|
if (Reader.HasRows)
|
||||||
{
|
{
|
||||||
alreadyExists = true;
|
Program.Log.Debug("[SQL] Found character with same name. Exiting...");
|
||||||
|
return true; //Early exit as we don't need to bother with anything else in this.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Reserve
|
//Now check for a reserved character
|
||||||
if (!alreadyExists)
|
MySqlCommand cmd3 = new MySqlCommand("SELECT * FROM characters WHERE userId=@userId AND state=0", conn);
|
||||||
|
cmd3.Parameters.AddWithValue("@userId", userId);
|
||||||
|
|
||||||
|
using (MySqlDataReader Reader = cmd3.ExecuteReader())
|
||||||
|
{
|
||||||
|
if (Reader.HasRows) //We can reasonably assume that there's only one reserved character per used id
|
||||||
|
{
|
||||||
|
Reader.Read();
|
||||||
|
cid = Reader.GetUInt16(0);
|
||||||
|
pid = 0xBABE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cid != 0) //Update our reservation
|
||||||
|
{
|
||||||
|
MySqlCommand cmd2 = new MySqlCommand();
|
||||||
|
cmd2.Connection = conn;
|
||||||
|
cmd2.CommandText = "UPDATE characters SET serverId = @serverId, name = @name WHERE id = @cid";
|
||||||
|
cmd2.Prepare();
|
||||||
|
cmd2.Parameters.AddWithValue("@serverId", serverId);
|
||||||
|
cmd2.Parameters.AddWithValue("@name", name);
|
||||||
|
cmd2.Parameters.AddWithValue("@cid", cid);
|
||||||
|
cmd2.ExecuteNonQuery();
|
||||||
|
} else //Reserve
|
||||||
{
|
{
|
||||||
MySqlCommand cmd2 = new MySqlCommand();
|
MySqlCommand cmd2 = new MySqlCommand();
|
||||||
cmd2.Connection = conn;
|
cmd2.Connection = conn;
|
||||||
@ -98,29 +124,21 @@ namespace Meteor.Lobby
|
|||||||
cid = (ushort)cmd2.LastInsertedId;
|
cid = (ushort)cmd2.LastInsertedId;
|
||||||
pid = 0xBABE;
|
pid = 0xBABE;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
pid = 0;
|
|
||||||
cid = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
catch (MySqlException e)
|
catch (MySqlException e)
|
||||||
{
|
{
|
||||||
Program.Log.Error(e.ToString());
|
Program.Log.Error(e.ToString());
|
||||||
|
|
||||||
Program.Log.Error(e.ToString());
|
Program.Log.Error(e.ToString());
|
||||||
|
|
||||||
pid = 0;
|
|
||||||
cid = 0;
|
cid = 0;
|
||||||
|
pid = 0;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
conn.Dispose();
|
conn.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
Program.Log.Debug("[SQL] CID={0} Created on 'characters' table.", cid);
|
Program.Log.Debug("[SQL] CID={0} Created on 'characters' table.", cid);
|
||||||
}
|
}
|
||||||
|
|
||||||
return alreadyExists;
|
return alreadyExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user