diff --git a/bin/config/settings_rest.xml b/bin/config/settings_rest.xml
index e3059921..ddadaf67 100644
--- a/bin/config/settings_rest.xml
+++ b/bin/config/settings_rest.xml
@@ -6,7 +6,7 @@
127.0.0.1
- H:\\SteamLibrary\\steamapps\\common\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
+ C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
127.0.0.1
diff --git a/bin/config/settings_zone.xml b/bin/config/settings_zone.xml
index a16b685d..f50c18ce 100644
--- a/bin/config/settings_zone.xml
+++ b/bin/config/settings_zone.xml
@@ -5,7 +5,7 @@
127.0.0.1
- H:\\SteamLibrary\\steamapps\\common\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
+ C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv
diff --git a/sql/update.sql b/sql/update.sql
index a2a9c38e..dee39387 100644
--- a/sql/update.sql
+++ b/sql/update.sql
@@ -42,3 +42,7 @@ MODIFY COLUMN UPDATE_DATE DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURR
ALTER TABLE charainfo
ADD `Orchestrion` binary(38) DEFAULT NULL AFTER `Mounts`;
+
+ALTER TABLE `charainfo` CHANGE `Mounts` `Mounts` BINARY(14) NULL DEFAULT NULL;
+ALTER TABLE `charainfo` CHANGE `Orchestrion` `Orchestrion` BINARY(40) NULL DEFAULT NULL;
+ALTER TABLE `charainfo` CHANGE `Minions` `Minions` BINARY(35) NULL DEFAULT NULL;
diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h
index 6df1e762..d70120b7 100644
--- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h
+++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h
@@ -678,12 +678,12 @@ struct FFXIVIpcInitZone : FFXIVIpcBasePacket
struct FFXIVIpcInitUI : FFXIVIpcBasePacket
{
uint64_t contentId;
- uint32_t unknown_8;
- uint32_t unknown_9;
+ uint32_t unknown8;
+ uint32_t unknownC;
uint32_t charId;
uint32_t restedExp;
- uint16_t unknown_12;
- uint8_t unknown_13;
+ uint16_t unknown18;
+ uint8_t maxLevel;
uint8_t expansion;
uint8_t race;
uint8_t tribe;
@@ -693,9 +693,9 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket
uint8_t deity;
uint8_t namedayMonth;
uint8_t namedayDay;
- Common::GrandCompany grandCompany;
+ uint8_t cityState;
uint8_t homepoint;
- uint8_t unknown_19;
+ uint8_t unknown26;
uint8_t petHotBar;
uint8_t companionRank;
uint8_t companionStars;
@@ -703,36 +703,36 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket
uint8_t companionUnk1;
uint8_t companionColor;
uint8_t companionFavoFeed;
- uint8_t companionUnk2[2];
+ uint16_t companionUnk2;
float companionTimePassed;
uint32_t companionCurrentExp;
- uint32_t unknown_1b;
+ uint32_t unknown38;
+ uint32_t unknown3C;
uint32_t fishCaught;
uint32_t useBaitCatalogId;
- uint32_t unknown_1c;
uint16_t pvpWolfFoldMatches;
uint16_t pvpWolfFoldVictories;
uint16_t pvpWolfFoldWeeklyMatches;
uint16_t pvpWolfFoldWeeklyVictories;
+ uint16_t pvpStats[6];
uint16_t playerCommendations;
- uint8_t pvpStats[14];
+ uint16_t pvpStats1;
uint32_t frontlineCampaigns;
uint16_t frontlineCampaignsWeekly;
- uint8_t unknown_112;
+ uint8_t currentRelic;
+ uint8_t currentBook;
uint8_t masterCrafterMask;
- uint8_t unknown_001;
- uint8_t unknown_002;
- uint8_t unknown_003;
- uint8_t unknown_004;
- uint16_t unknown_005;
- uint8_t unknown_114;
- uint8_t padding_114;
- uint8_t unknown_1141[61];
+ uint8_t unknown69;
+ uint8_t unknown6A;
+ uint8_t unknown6B;
+ uint32_t unknown6C;
+ uint8_t unknown70[61];
uint8_t preNamePadding;
char name[32];
- uint8_t unknown_54[16];
- uint8_t unknown55[4];
+ uint8_t unknownOword[16];
+ uint8_t unknownDE[2];
uint16_t levels[25];
+ uint16_t levelsPadding;
uint32_t exp[25];
uint8_t unlockBitmask[64];
uint8_t aetheryte[16];
@@ -741,6 +741,8 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket
uint8_t minions[35];
uint8_t chocoboTaxiMask[8];
uint8_t contentClearMask[105];
+ uint8_t contentClearPadding;
+ uint16_t unknown422[8];
uint8_t companionBardingMask[8];
uint8_t companionEquippedHead;
uint8_t companionEquippedBody;
@@ -750,13 +752,14 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket
uint8_t companionDefRank;
uint8_t companionAttRank;
uint8_t companionHealRank;
- uint8_t mountGuideMask[13];
- uint8_t fishingGuideMask[77];
+ uint8_t mountGuideMask[14];
+ uint8_t fishingGuideMask[89];
uint8_t fishingSpotVisited[25];
- uint8_t unknown_41;
uint16_t fishingRecordsFish[26];
uint16_t fishingRecordsFishWeight[26];
- uint8_t unknown_590[62];
+ uint8_t unknownMask4[15];
+ uint8_t unknownMask4Padding;
+ uint8_t unknown55C[19];
uint8_t rankAmalJaa;
uint8_t rankSylph;
uint8_t rankKobold;
@@ -765,6 +768,7 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket
uint8_t rankVanu;
uint8_t rankVath;
uint8_t rankMoogle;
+ uint8_t rankKojin;
uint16_t expAmalJaa;
uint16_t expSylph;
uint16_t expKobold;
@@ -773,28 +777,43 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket
uint16_t expVanu;
uint16_t expVath;
uint16_t expMoogle;
- uint8_t unknown_0341[20];
- uint8_t unknownMask0[5];
- uint8_t unknown_0342[15];
- uint8_t unknownMask1[28];
- uint32_t unknownDword0;
- uint8_t unknown_0343[12];
- uint8_t sightseeingMask[19];
- uint8_t unknown_421;
+ uint16_t expKojin;
+ uint8_t unknown58A[10];
+ uint16_t unknown594[5];
+ uint8_t unknownMask59E[5];
+ uint8_t unknown5A3[16];
+ uint8_t unknownMask5B3[28];
+ uint8_t unknown_03411;
+ uint32_t unknownDword5D0;
+ uint8_t relicBookCompletion[12];
+ uint8_t sightseeingMask[26];
+ uint16_t unknown_XXX;
uint32_t pvpFrontlineOverall1st;
uint32_t pvpFrontlineOverall2nd;
uint32_t pvpFrontlineOverall3rd;
uint16_t pvpFrontlineWeekly1st;
uint16_t pvpFrontlineWeekly2nd;
uint16_t pvpFrontlineWeekly3rd;
- uint8_t unknownRest[32];
- uint8_t tripleTriadCards[26];
- uint8_t unknownRest1[21];
- uint8_t orchestrionMask[38];
+ uint8_t unknown60E;
+ uint8_t unknown60F[32];
+ uint8_t unknown62F[22];
+ uint8_t tripleTriadCards[27];
+ uint8_t unknown660[11];
+ uint8_t unknownMask66B[22];
+ uint8_t unknown681[3];
+ uint8_t orchestrionMask[40];
uint8_t hallOfNoviceCompleteMask[3];
- uint8_t unknownMask2[11];
- uint8_t unknownMask3[16];
- uint8_t unknown_500[9];
+ uint8_t unknownMask6AF[11];
+ uint8_t unknownMask6BA[16];
+ uint8_t unknown6CA[13];
+ uint8_t unlockedRaids[28];
+ uint8_t unlockedDungeons[18];
+ uint8_t unlockedGuildhests[10];
+ uint8_t unlockedTrails[7];
+ uint8_t unlockedPvp[5];
+ uint8_t unknownMask71B[28];
+ uint8_t unknownMask737[18];
+ uint8_t unknown749[23];
};
/**
diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h
index a7b7400b..c00cc37f 100644
--- a/src/servers/Server_Zone/Actor/Player.h
+++ b/src/servers/Server_Zone/Actor/Player.h
@@ -579,8 +579,8 @@ private:
uint16_t m_activeTitle;
uint8_t m_titleList[48];
uint8_t m_howTo[33];
- uint8_t m_minions[33];
- uint8_t m_mountGuide[13];
+ uint8_t m_minions[35];
+ uint8_t m_mountGuide[14];
uint8_t m_homePoint;
uint8_t m_startTown;
uint16_t m_townWarpFstFlags;
@@ -592,7 +592,7 @@ private:
uint32_t m_expArray[25];
uint8_t m_aetheryte[16];
uint8_t m_unlocks[64];
- uint8_t m_orchestrion[38];
+ uint8_t m_orchestrion[40];
uint8_t m_openingSequence;
diff --git a/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h
index 37244eb2..bac40501 100644
--- a/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h
+++ b/src/servers/Server_Zone/Network/PacketWrappers/InitUIPacket.h
@@ -42,11 +42,9 @@ private:
m_data.namedayMonth = player.getBirthMonth();
m_data.namedayDay = player.getBirthDay();
// TODO: Support grand company status.
- m_data.grandCompany = static_cast< Common::GrandCompany >( player.getGc() );
+ m_data.cityState = player.getStartTown();
//m_data.gcRank = GCRank::None;
- // TODO: Support starting city.
- //m_data.startCity = Town::Gridania;
m_data.homepoint = player.getHomepoint();
memset( &m_data.name[0], 0, sizeof( m_data.name ) );
@@ -72,16 +70,10 @@ private:
memcpy( m_data.howto, player.getHowToArray(), sizeof( m_data.howto ) );
- m_data.unknown_13 = 0x46;
+ // possibly max level or current level
+ m_data.unknown1A = 0x46;
m_data.expansion = 2;
- //memset( m_data.unlockBitmask, 0xFF, sizeof( m_data.unlockBitmask ) );
- //memset( m_data.unknown_0344, 0xFF, sizeof( m_data.unknown_0344 ) );
- //memset( m_data.unknown_F4, 0xFF, sizeof( m_data.unknown_F4 ) );
- //m_data.pos.x = player->getPos().getX();
- //m_data.pos.y = player->getPos().getY();
- //m_data.pos.z = player->getPos().getZ();
-
};
};