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 aaac033dbd
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,79 +173,59 @@ namespace FFXIVClassic_Lobby_Server
{ {
conn.Open(); conn.Open();
if (isMe) //Load basic info
{ query = @"
query = @" SELECT
SELECT name,
name, positionX,
positionX, positionY,
positionY, positionZ,
positionZ, rotation,
rotation, actorState,
actorState, currentZoneId,
currentZoneId, currentClassJob,
currentClassJob, gcCurrent,
gcCurrent, gcLimsaRank,
gcLimsaRank, gcGridaniaRank,
gcGridaniaRank, gcUldahRank,
gcUldahRank, currentTitle,
currentTitle, guardian,
guardian, birthDay,
birthDay, birthMonth,
birthMonth, initialTown,
initialNation, 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())
{ {
player.displayNameId = 0xFFFFFFFF; if (reader.Read())
player.customDisplayName = reader.GetString(0);
player.oldPositionX = player.positionX = reader.GetFloat(1);
player.oldPositionY = player.positionY = reader.GetFloat(2);
player.oldPositionZ = player.positionZ = reader.GetFloat(3);
player.oldRotation = player.rotation = reader.GetFloat(4);
player.currentMainState = reader.GetUInt16(5);
player.currentZoneId = reader.GetUInt32(6);
player.charaWork.parameterSave.state_mainSkill[0] = reader.GetByte(7);
player.gcCurrent = reader.GetByte(8);
player.gcRankLimsa = reader.GetByte(9);
player.gcRankGridania = reader.GetByte(10);
player.gcRankUldah = reader.GetByte(11);
player.currentTitle = reader.GetUInt32(12);
if (isMe)
{ {
player.displayNameId = 0xFFFFFFFF;
player.customDisplayName = reader.GetString(0);
player.oldPositionX = player.positionX = reader.GetFloat(1);
player.oldPositionY = player.positionY = reader.GetFloat(2);
player.oldPositionZ = player.positionZ = reader.GetFloat(3);
player.oldRotation = player.rotation = reader.GetFloat(4);
player.currentMainState = reader.GetUInt16(5);
player.currentZoneId = reader.GetUInt32(6);
player.charaWork.parameterSave.state_mainSkill[0] = reader.GetByte(7);
player.gcCurrent = reader.GetByte(8);
player.gcRankLimsa = reader.GetByte(9);
player.gcRankGridania = reader.GetByte(10);
player.gcRankUldah = reader.GetByte(11);
player.currentTitle = reader.GetUInt32(12);
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
@ -340,24 +327,15 @@ 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.hasChocobo = reader.GetBoolean(0); if (reader.Read())
player.hasGoobbue = reader.GetBoolean(1); {
player.chocoboAppearance = reader.GetByte(2); player.hasChocobo = reader.GetBoolean(0);
player.chocoboName = reader.GetString(3); player.hasGoobbue = reader.GetBoolean(1);
player.chocoboAppearance = reader.GetByte(2);
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 = @"
SELECT SELECT
@ -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())
{ {
for (int i = 0; i < player.timers.Length; i++) if (reader.Read())
player.timers[i] = reader.GetUInt32(i); {
for (int i = 0; i < player.timers.Length; 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)
{ {
/* /*