Fixed all errors with player loader from db. DBAppearance is redundent and was removed.

This commit is contained in:
Filip Maj 2016-01-10 01:19:46 -05:00
parent 16f6fe98b3
commit 9fc4101812
6 changed files with 181 additions and 172 deletions

View File

@ -12,6 +12,8 @@ using FFXIVClassic_Map_Server.dataobjects.database;
using FFXIVClassic_Map_Server.dataobjects.chara.npc; using FFXIVClassic_Map_Server.dataobjects.chara.npc;
using FFXIVClassic_Map_Server.dataobjects.chara; using FFXIVClassic_Map_Server.dataobjects.chara;
using FFXIVClassic_Map_Server.utils; using FFXIVClassic_Map_Server.utils;
using FFXIVClassic_Lobby_Server.packets;
using FFXIVClassic_Map_Server.packets.send.player;
namespace FFXIVClassic_Lobby_Server namespace FFXIVClassic_Lobby_Server
{ {
@ -160,9 +162,8 @@ namespace FFXIVClassic_Lobby_Server
} }
} }
public static void loadPlayerCharacter(Player player, bool isMe) public static void loadPlayerCharacter(Player player)
{ {
//Load basic info
string query; string query;
MySqlCommand cmd; MySqlCommand cmd;
@ -172,8 +173,7 @@ namespace FFXIVClassic_Lobby_Server
{ {
conn.Open(); conn.Open();
if (isMe) //Load basic info
{
query = @" query = @"
SELECT SELECT
name, name,
@ -192,35 +192,18 @@ namespace FFXIVClassic_Lobby_Server
guardian, guardian,
birthDay, birthDay,
birthMonth, birthMonth,
initialNation, initialTown,
tribe,
currentParty, currentParty,
restBonus, restBonus,
achievementPoints achievementPoints
FROM characters WHERE id = @charId"; FROM characters WHERE id = @charId";
}
else
{
query = @"
SELECT
name,
positionX,
positionY,
positionZ,
rotation,
actorState,
currentZoneId,
currentClassJob,
gcCurrent,
gcLimsaRank,
gcGridaniaRank,
gcUldahRank,
currentTitle
FROM characters WHERE id = @charId";
}
cmd = new MySqlCommand(query, conn); cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{ {
player.displayNameId = 0xFFFFFFFF; player.displayNameId = 0xFFFFFFFF;
player.customDisplayName = reader.GetString(0); player.customDisplayName = reader.GetString(0);
@ -236,15 +219,13 @@ namespace FFXIVClassic_Lobby_Server
player.gcRankGridania = reader.GetByte(10); player.gcRankGridania = reader.GetByte(10);
player.gcRankUldah = reader.GetByte(11); player.gcRankUldah = reader.GetByte(11);
player.currentTitle = reader.GetUInt32(12); player.currentTitle = reader.GetUInt32(12);
if (isMe)
{
player.playerWork.guardian = reader.GetByte(13); player.playerWork.guardian = reader.GetByte(13);
player.playerWork.birthdayDay = reader.GetByte(14); player.playerWork.birthdayDay = reader.GetByte(14);
player.playerWork.birthdayMonth = reader.GetByte(15); player.playerWork.birthdayMonth = reader.GetByte(15);
player.playerWork.initialTown = reader.GetByte(16); player.playerWork.initialTown = reader.GetByte(16);
player.playerWork.restBonusExpRate = reader.GetInt32(17); player.playerWork.tribe = reader.GetByte(17);
player.achievementPoints = reader.GetUInt32(18); player.playerWork.restBonusExpRate = reader.GetInt32(19);
player.achievementPoints = reader.GetUInt32(20);
} }
} }
@ -252,7 +233,6 @@ namespace FFXIVClassic_Lobby_Server
query = @" query = @"
SELECT SELECT
baseId, baseId,
tribe,
size, size,
voice, voice,
skinColor, skinColor,
@ -288,24 +268,31 @@ namespace FFXIVClassic_Lobby_Server
cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{ {
player.modelID = DBAppearance.getTribeModel(reader.GetByte(1)); if (reader.Read())
player.appearanceIDs[Character.SIZE] = reader.GetByte(2); {
player.appearanceIDs[Character.COLORINFO] = (uint)(reader.GetUInt16(4) | (reader.GetUInt16(6) << 10) | (reader.GetUInt16(8) << 20)); if (reader.GetUInt32(0) == 0xFFFFFFFF)
player.appearanceIDs[Character.FACEINFO] = PrimitiveConversion.ToUInt32(CharacterUtils.getFaceInfo(reader.GetByte(9), reader.GetByte(10), reader.GetByte(11), reader.GetByte(12), reader.GetByte(13), reader.GetByte(14), reader.GetByte(15), reader.GetByte(16), reader.GetByte(17), reader.GetByte(18))); player.modelID = CharacterUtils.getTribeModel(player.playerWork.tribe);
player.appearanceIDs[Character.HIGHLIGHT_HAIR] = (uint)(reader.GetUInt16(7) | reader.GetUInt16(5) << 10); else
player.appearanceIDs[Character.VOICE] = reader.GetByte(3); player.modelID = reader.GetUInt32(0);
player.appearanceIDs[Character.WEAPON1] = reader.GetUInt32(19); player.appearanceIDs[Character.SIZE] = reader.GetByte(1);
player.appearanceIDs[Character.WEAPON2] = reader.GetUInt32(20); player.appearanceIDs[Character.COLORINFO] = (uint)(reader.GetUInt16(3) | (reader.GetUInt16(5) << 10) | (reader.GetUInt16(7) << 20));
player.appearanceIDs[Character.HEADGEAR] = reader.GetUInt32(21); player.appearanceIDs[Character.FACEINFO] = PrimitiveConversion.ToUInt32(CharacterUtils.getFaceInfo(reader.GetByte(8), reader.GetByte(9), reader.GetByte(10), reader.GetByte(11), reader.GetByte(12), reader.GetByte(13), reader.GetByte(14), reader.GetByte(15), reader.GetByte(16), reader.GetByte(17)));
player.appearanceIDs[Character.BODYGEAR] = reader.GetUInt32(22); player.appearanceIDs[Character.HIGHLIGHT_HAIR] = (uint)(reader.GetUInt16(6) | reader.GetUInt16(4) << 10);
player.appearanceIDs[Character.LEGSGEAR] = reader.GetUInt32(23); player.appearanceIDs[Character.VOICE] = reader.GetByte(2);
player.appearanceIDs[Character.HANDSGEAR] = reader.GetUInt32(24); player.appearanceIDs[Character.WEAPON1] = reader.GetUInt32(18);
player.appearanceIDs[Character.FEETGEAR] = reader.GetUInt32(25); player.appearanceIDs[Character.WEAPON2] = reader.GetUInt32(19);
player.appearanceIDs[Character.WAISTGEAR] = reader.GetUInt32(26); player.appearanceIDs[Character.HEADGEAR] = reader.GetUInt32(20);
player.appearanceIDs[Character.R_EAR] = reader.GetUInt32(27); player.appearanceIDs[Character.BODYGEAR] = reader.GetUInt32(21);
player.appearanceIDs[Character.L_EAR] = reader.GetUInt32(28); player.appearanceIDs[Character.LEGSGEAR] = reader.GetUInt32(22);
player.appearanceIDs[Character.R_FINGER] = reader.GetUInt32(29); player.appearanceIDs[Character.HANDSGEAR] = reader.GetUInt32(23);
player.appearanceIDs[Character.L_FINGER] = reader.GetUInt32(30); player.appearanceIDs[Character.FEETGEAR] = reader.GetUInt32(24);
player.appearanceIDs[Character.WAISTGEAR] = reader.GetUInt32(25);
player.appearanceIDs[Character.R_EAR] = reader.GetUInt32(26);
player.appearanceIDs[Character.L_EAR] = reader.GetUInt32(27);
player.appearanceIDs[Character.R_FINGER] = reader.GetUInt32(28);
player.appearanceIDs[Character.L_FINGER] = reader.GetUInt32(29);
}
} }
//Load Status Effects //Load Status Effects
@ -339,24 +326,15 @@ namespace FFXIVClassic_Lobby_Server
cmd = new MySqlCommand(query, conn); cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{ {
player.hasChocobo = reader.GetBoolean(0); player.hasChocobo = reader.GetBoolean(0);
player.hasGoobbue = reader.GetBoolean(1); player.hasGoobbue = reader.GetBoolean(1);
player.chocoboAppearance = reader.GetByte(2); player.chocoboAppearance = reader.GetByte(2);
player.chocoboName = reader.GetString(3); player.chocoboName = reader.GetString(3);
} }
}
//Load Achievements
query = @"
SELECT
achievementId
FROM characters_achievements WHERE characterId = @charId AND timeDone NOT NULL";
//Load Last 5 Completed
query = @"
SELECT
achievementId
FROM characters_achievements WHERE characterId = @charId ORDER BY timeDone DESC LIMIT 5";
//Load Timers //Load Timers
query = @" query = @"
@ -380,28 +358,31 @@ namespace FFXIVClassic_Lobby_Server
behests, behests,
companybehests, companybehests,
returntimer, returntimer,
skirmish, skirmish
FROM characters_timers WHERE characterId = @charId"; FROM characters_timers WHERE characterId = @charId";
cmd = new MySqlCommand(query, conn); cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{ {
for (int i = 0; i < player.timers.Length; i++) for (int i = 0; i < player.timers.Length; i++)
player.timers[i] = reader.GetUInt32(i); player.timers[i] = reader.GetUInt32(i);
} }
}
//Load Hotbar //Load Hotbar
query = @" query = @"
SELECT SELECT
hotbarIndex, hotbarSlot,
commandId, commandId,
recastTime recastTime
FROM characters_hotbar WHERE characterId = @charId AND classId = @classId"; FROM characters_hotbar WHERE characterId = @charId AND classId = @classId";
cmd = new MySqlCommand(query, conn); cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@charId", player);
//cmd.Parameters.AddWithValue("@classId", player.currentClassId); cmd.Parameters.AddWithValue("@classId", player.charaWork.parameterSave.state_mainSkill[0]);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
@ -415,10 +396,12 @@ namespace FFXIVClassic_Lobby_Server
//Load Scenario Quests //Load Scenario Quests
query = @" query = @"
SELECT SELECT
index, slot,
questId questId
FROM characters_quest_scenario WHERE characterId = @charId"; FROM characters_quest_scenario WHERE characterId = @charId";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
@ -431,12 +414,14 @@ namespace FFXIVClassic_Lobby_Server
//Load Guildleve Quests //Load Guildleve Quests
query = @" query = @"
SELECT SELECT
index, slot,
questId, questId,
abandoned, abandoned,
completed completed
FROM characters_quest_scenario WHERE characterId = @charId"; FROM characters_quest_scenario WHERE characterId = @charId";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
@ -454,8 +439,10 @@ namespace FFXIVClassic_Lobby_Server
npcLinkshellId, npcLinkshellId,
isCalling, isCalling,
isExtra isExtra
FROM characters_quest_scenario WHERE characterId = @charId"; FROM characters_npclinkshell WHERE characterId = @charId";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player);
using (MySqlDataReader reader = cmd.ExecuteReader()) using (MySqlDataReader reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
@ -476,5 +463,76 @@ namespace FFXIVClassic_Lobby_Server
} }
} }
public static SubPacket getLatestAchievements(Player player)
{
uint[] latestAchievements = new uint[5];
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();
//Load Last 5 Completed
string query = @"
SELECT
achievementId
FROM characters_achievements WHERE characterId = @charId ORDER BY timeDone DESC LIMIT 5";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int count = 0;
while (reader.Read())
latestAchievements[count] = reader.GetUInt32(0);
}
}
catch (MySqlException e)
{ Console.WriteLine(e); }
finally
{
conn.Dispose();
}
}
return SetLatestAchievementsPacket.buildPacket(player.actorId, latestAchievements);
}
public static SubPacket getAchievements(Player player)
{
uint[] latestAchievements = new uint[5];
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();
//Load Last 5 Completed
string query = @"
SELECT
achievementId
FROM characters_achievements WHERE characterId = @charId AND timeDone NOT NULL";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
int count = 0;
while (reader.Read())
latestAchievements[count] = reader.GetUInt32(0);
}
}
catch (MySqlException e)
{ Console.WriteLine(e); }
finally
{
conn.Dispose();
}
}
return SetLatestAchievementsPacket.buildPacket(player.actorId, latestAchievements);
}
} }
} }

View File

@ -64,6 +64,7 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="actors\chara\Work.cs" />
<Compile Include="actors\judge\Judge.cs" /> <Compile Include="actors\judge\Judge.cs" />
<Compile Include="actors\StaticActors.cs" /> <Compile Include="actors\StaticActors.cs" />
<Compile Include="ClientConnection.cs" /> <Compile Include="ClientConnection.cs" />
@ -209,6 +210,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="lua\LuaUtils.cs" /> <Compile Include="lua\LuaUtils.cs" />
<Compile Include="Server.cs" /> <Compile Include="Server.cs" />
<Compile Include="utils\CharacterUtils.cs" />
<Compile Include="Zone.cs" /> <Compile Include="Zone.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -49,7 +49,7 @@ namespace FFXIVClassic_Lobby_Server
{ {
mPlayers = playerList; mPlayers = playerList;
mConnections = connectionList; mConnections = connectionList;
initNpcs(); // initNpcs();
} }
public void processPacket(ClientConnection client, BasePacket packet) public void processPacket(ClientConnection client, BasePacket packet)

View File

@ -49,7 +49,6 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
public Work work = new Work(); public Work work = new Work();
public CharaWork charaWork = new CharaWork(); public CharaWork charaWork = new CharaWork();
public PlayerWork playerWork = new PlayerWork();
public Character(uint actorID) : base(actorID) public Character(uint actorID) : base(actorID)
{ {

View File

@ -53,8 +53,9 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
public string chocoboName; public string chocoboName;
public uint achievementPoints; public uint achievementPoints;
public ushort[] latestAchievements = new ushort[5];
PlayerWork playerWork = new PlayerWork(); public PlayerWork playerWork = new PlayerWork();
public Player(uint actorID) : base(actorID) public Player(uint actorID) : base(actorID)
{ {
@ -62,56 +63,15 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara
className = "Player"; className = "Player";
currentSubState = SetActorStatePacket.SUB_STATE_PLAYER; currentSubState = SetActorStatePacket.SUB_STATE_PLAYER;
DBStats stats = Database.getCharacterStats(actorID);
charaWork.property[0] = 1; charaWork.property[0] = 1;
charaWork.property[1] = 1; charaWork.property[1] = 1;
charaWork.property[2] = 1; charaWork.property[2] = 1;
charaWork.property[4] = 1; charaWork.property[4] = 1;
charaWork.parameterSave.hp[0] = stats.hp;
charaWork.parameterSave.hpMax[0] = stats.hpMax;
charaWork.parameterSave.mp = stats.mp;
charaWork.parameterSave.mpMax = stats.mpMax;
charaWork.parameterSave.state_mainSkill[0] = 3; charaWork.parameterSave.state_mainSkill[0] = 3;
charaWork.parameterSave.state_mainSkillLevel = 1; charaWork.parameterSave.state_mainSkillLevel = 1;
charaWork.battleSave.skillLevel = 1; Database.loadPlayerCharacter(this);
charaWork.battleSave.skillLevelCap = 2;
charaWork.battleSave.potencial = 0.5f;
charaWork.battleSave.physicalExp = 1;
charaWork.battleSave.negotiationFlag[0] = false;
charaWork.battleSave.negotiationFlag[1] = false;
for (int i = 0; i < 20; i++)
charaWork.statusShownTime[i] = 0xFFFFFFFF;
setPlayerAppearance();
}
public void setPlayerAppearance()
{
DBAppearance appearance = Database.getAppearance(true, actorId);
modelID = DBAppearance.getTribeModel(appearance.tribe);
appearanceIDs[SIZE] = appearance.size;
appearanceIDs[COLORINFO] = (uint)(appearance.skinColor | (appearance.hairColor << 10) | (appearance.eyeColor << 20));
appearanceIDs[FACEINFO] = PrimitiveConversion.ToUInt32(appearance.getFaceInfo());
appearanceIDs[HIGHLIGHT_HAIR] = (uint)(appearance.hairHighlightColor | appearance.hairStyle << 10);
appearanceIDs[VOICE] = appearance.voice;
appearanceIDs[WEAPON1] = appearance.mainHand;
appearanceIDs[WEAPON2] = appearance.offHand;
appearanceIDs[HEADGEAR] = appearance.head;
appearanceIDs[BODYGEAR] = appearance.body;
appearanceIDs[LEGSGEAR] = appearance.legs;
appearanceIDs[HANDSGEAR] = appearance.hands;
appearanceIDs[FEETGEAR] = appearance.feet;
appearanceIDs[WAISTGEAR] = appearance.waist;
appearanceIDs[R_EAR] = appearance.rightEar;
appearanceIDs[L_EAR] = appearance.leftEar;
appearanceIDs[R_FINGER] = appearance.rightFinger;
appearanceIDs[L_FINGER] = appearance.leftFinger;
} }
public List<SubPacket> create0x132Packets(uint playerActorId) public List<SubPacket> create0x132Packets(uint playerActorId)

View File

@ -28,8 +28,8 @@ namespace FFXIVClassic_Map_Server.dataobjects
public ConnectedPlayer(uint actorId) public ConnectedPlayer(uint actorId)
{ {
this.actorID = actorId; this.actorID = actorId;
DBCharacter chara = Database.getCharacter(actorId); playerActor = new Player(actorId);
createPlayerActor(actorId, chara); actorInstanceList.Add(playerActor);
} }
public void addConnection(ClientConnection conn) public void addConnection(ClientConnection conn)
@ -89,16 +89,6 @@ namespace FFXIVClassic_Map_Server.dataobjects
return playerActor; return playerActor;
} }
public void createPlayerActor(uint actorId, DBCharacter chara)
{
playerActor = new Player(actorId);
playerActor.displayNameId = 0xFFFFFFFF;
playerActor.customDisplayName = chara.name;
playerActor.setPlayerAppearance();
actorInstanceList.Add(playerActor);
}
public void updatePlayerActorPosition(float x, float y, float z, float rot, ushort moveState) public void updatePlayerActorPosition(float x, float y, float z, float rot, ushort moveState)
{ {
/* /*