mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-06 02:37:47 +00:00
Merge branch '6.31_Hotfix_Windows' (from unofficial forks) into Sapphire6.31
You can login to current retail (6.31 Hotfix) but also requires some new fanagling with oodle.
This commit is contained in:
commit
6ff45f7c5d
27 changed files with 5570 additions and 1920 deletions
|
@ -15,6 +15,7 @@ add_custom_target( copy_runtime_files ALL
|
|||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/web ${CMAKE_BINARY_DIR}/bin/web
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/sql_import.sh ${CMAKE_BINARY_DIR}/bin/sql_import.sh
|
||||
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/bin/data/actions
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/deps/oo2net_9_win64.dll ${CMAKE_BINARY_DIR}/bin/oo2net_9_win64.dll
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/deps/ffxiv-actions/actions ${CMAKE_BINARY_DIR}/bin/data/actions )
|
||||
|
||||
######################################
|
||||
|
@ -43,6 +44,7 @@ find_package( MySQL )
|
|||
##############################
|
||||
add_subdirectory( "deps/zlib" )
|
||||
add_subdirectory( "deps/MySQL" )
|
||||
add_subdirectory( "deps/Oodle" )
|
||||
add_subdirectory( "deps/datReader" )
|
||||
add_subdirectory( "deps/mysqlConnector" )
|
||||
add_subdirectory( "deps/recastnavigation" )
|
||||
|
|
9
deps/Oodle/CMakeLists.txt
vendored
Normal file
9
deps/Oodle/CMakeLists.txt
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
add_library(OodleNet STATIC IMPORTED GLOBAL)
|
||||
|
||||
set_target_properties(
|
||||
OodleNet
|
||||
PROPERTIES
|
||||
IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/deps/Oodle/oo2net_9_win64.lib"
|
||||
IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/deps/Oodle/oo2net_9_win64.lib"
|
||||
LINKER_LANGUAGE C
|
||||
)
|
32
deps/Oodle/oodle2net.h
vendored
Normal file
32
deps/Oodle/oodle2net.h
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
#ifndef __OODLE2NET_H__
|
||||
#define __OODLE2NET_H__
|
||||
|
||||
extern "C" intptr_t __stdcall OodleNetwork1_Shared_Size( int32_t htbits );
|
||||
|
||||
extern "C" intptr_t __stdcall OodleNetwork1UDP_State_Size();
|
||||
|
||||
extern "C" void __stdcall OodleNetwork1_Shared_SetWindow(
|
||||
void* shared,
|
||||
int32_t htbits,
|
||||
const void* window,
|
||||
int32_t windowSize
|
||||
);
|
||||
|
||||
extern "C" void __stdcall OodleNetwork1UDP_Train(
|
||||
void* state,
|
||||
const void* shared,
|
||||
const void** trainingPacketPointers,
|
||||
const int32_t* trainingPacketSizes,
|
||||
int32_t numTrainingPackets
|
||||
);
|
||||
|
||||
extern "C" bool __stdcall OodleNetwork1UDP_Decode(
|
||||
void* state,
|
||||
const void* shared,
|
||||
const void* enc,
|
||||
intptr_t encSize,
|
||||
void* dec,
|
||||
intptr_t decSize
|
||||
);
|
||||
|
||||
#endif
|
5
deps/mysqlConnector/Connection.cpp
vendored
5
deps/mysqlConnector/Connection.cpp
vendored
|
@ -3,11 +3,8 @@
|
|||
#include "Statement.h"
|
||||
#include "PreparedStatement.h"
|
||||
#include <mysql.h>
|
||||
#include <stdexcept>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
// fixes compile error when compiling with vs2019
|
||||
#include <stdexcept>
|
||||
#endif
|
||||
#include <vector>
|
||||
|
||||
Mysql::Connection::Connection( std::shared_ptr< MySqlBase > pBase,
|
||||
|
|
|
@ -87,6 +87,9 @@ std::string PlayerMinimal::getInfoJson()
|
|||
// DisplayName
|
||||
c.push_back( getName() );
|
||||
|
||||
// Unknown
|
||||
c.push_back( "36" );
|
||||
|
||||
// class levels
|
||||
auto levelsArray = nlohmann::json();
|
||||
for( int i = 0; i < Common::CLASSJOB_SLOTS; ++i )
|
||||
|
|
|
@ -20,7 +20,8 @@ target_link_libraries( common
|
|||
PUBLIC
|
||||
xivdat
|
||||
mysqlConnector
|
||||
mysql )
|
||||
mysql
|
||||
OodleNet )
|
||||
if( UNIX )
|
||||
target_link_libraries( common
|
||||
PUBLIC
|
||||
|
@ -32,6 +33,7 @@ target_include_directories( common
|
|||
PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../../deps/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../../deps/Oodle/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../../deps/asio/asio/include/"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../../deps/spdlog/include/" )
|
||||
|
||||
|
|
|
@ -22,20 +22,21 @@ namespace Sapphire::Common
|
|||
const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000;
|
||||
const uint64_t INVALID_GAME_OBJECT_ID64 = 0xE0000000;
|
||||
|
||||
const uint16_t MAX_PLAYER_LEVEL = 80;
|
||||
const uint8_t CURRENT_EXPANSION_ID = 3;
|
||||
const uint16_t MAX_PLAYER_LEVEL = 90;
|
||||
const uint8_t CURRENT_EXPANSION_ID = 4;
|
||||
|
||||
const uint8_t CLASSJOB_TOTAL = 38;
|
||||
const uint8_t CLASSJOB_TOTAL = 40;
|
||||
const uint8_t CLASSJOB_SLOTS = 30;
|
||||
|
||||
const uint8_t TOWN_COUNT = 6;
|
||||
const uint8_t TOWN_COUNT = 7;
|
||||
|
||||
/*!
|
||||
* @brief The maximum length (in ms) of a combo before it is canceled/voided.
|
||||
*
|
||||
* The client has a combo timer of about 12 seconds, with a 0.5 second grace on top for latency considerations.
|
||||
* Changed to 15 seconds in Shadowbringers, then 30 seconds in Endwalker.
|
||||
*/
|
||||
const uint16_t MAX_COMBO_LENGTH = 12500;
|
||||
const uint16_t MAX_COMBO_LENGTH = 30000;
|
||||
|
||||
struct FFXIVARR_POSITION3_U16
|
||||
{
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -44,7 +44,7 @@ namespace Sapphire::Network::Packets
|
|||
* +-------------------------------+---------------+-------+-------+
|
||||
* | timestamp | size | cType | count |
|
||||
* +---+---+-------+---------------+---------------+-------+-------+
|
||||
* | ? |CMP| ? | ? |
|
||||
* | ? |CMP| ? | oodleDcmpSize |
|
||||
* +---+---+-------+---------------+
|
||||
* (followed by /count/ FFXIVARR_PACKET_SEGMENTs)
|
||||
*/
|
||||
|
@ -62,9 +62,13 @@ namespace Sapphire::Network::Packets
|
|||
/** The number of packet segments that follow. */
|
||||
uint16_t count;
|
||||
uint8_t unknown_20;
|
||||
/** Indicates if the data segments of this packet are compressed. */
|
||||
uint8_t isCompressed;
|
||||
uint32_t unknown_24;
|
||||
/** Indicates compression method of the data segments of this packet.
|
||||
* 0: none, 1: Zlib, 2: Oodle
|
||||
*/
|
||||
uint8_t compressionType;
|
||||
uint16_t unknown_22;
|
||||
/** The size of the packet payload when decompressed, only used if compressionType = Oodle */
|
||||
uint32_t oodleDecompressedSize;
|
||||
};
|
||||
|
||||
inline std::ostream& operator<<( std::ostream& os, const FFXIVARR_PACKET_HEADER& hdr )
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
#include "CommonNetwork.h"
|
||||
#include "GamePacketParser.h"
|
||||
#include "Oodle.h"
|
||||
|
||||
#include <string.h> // memcpy
|
||||
#include <Logging/Logger.h>
|
||||
|
||||
using namespace Sapphire;
|
||||
using namespace Sapphire::Network::Packets;
|
||||
|
@ -49,10 +51,51 @@ PacketParseResult Network::Packets::getPackets( const std::vector< uint8_t >& bu
|
|||
std::vector< FFXIVARR_PACKET_RAW >& packets )
|
||||
{
|
||||
// sanity check: check there's enough bytes in the buffer
|
||||
const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER );
|
||||
auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER );
|
||||
if( buffer.size() - offset < bytesExpected )
|
||||
return Incomplete;
|
||||
|
||||
std::vector< uint8_t > decompBuf;
|
||||
|
||||
// check compression, do decompress if Oodle/Zlib
|
||||
if( packetHeader.compressionType == Oodle )
|
||||
{
|
||||
std::vector< uint8_t > inBuf;
|
||||
inBuf.assign( buffer.begin() + sizeof( struct FFXIVARR_PACKET_HEADER ), buffer.end() );
|
||||
|
||||
std::vector< uint8_t > outBuf;
|
||||
outBuf.resize( packetHeader.oodleDecompressedSize );
|
||||
|
||||
auto _oodle = Network::Oodle();
|
||||
bool oodleSuccess = _oodle.oodleDecode( inBuf, bytesExpected, outBuf, packetHeader.oodleDecompressedSize );
|
||||
|
||||
if( !oodleSuccess )
|
||||
{
|
||||
Logger::warn( "Oodle decompression failed." );
|
||||
return Malformed;
|
||||
}
|
||||
|
||||
bytesExpected = packetHeader.oodleDecompressedSize;
|
||||
|
||||
decompBuf.assign( buffer.begin(), buffer.begin() + sizeof( struct FFXIVARR_PACKET_HEADER ) );
|
||||
decompBuf.insert( decompBuf.end(), outBuf.begin(), outBuf.end() );
|
||||
}
|
||||
|
||||
else if( packetHeader.compressionType == Zlib )
|
||||
{
|
||||
// to do(?): Zlib decompression should go here,
|
||||
// but I don't think the client ever sends Zlib packets? So it may not be needed
|
||||
}
|
||||
|
||||
else if( packetHeader.compressionType == NoCompression )
|
||||
decompBuf.assign( buffer.begin(), buffer.end() );
|
||||
|
||||
else
|
||||
{
|
||||
Logger::warn( "Unknown packet compression type: {}", packetHeader.compressionType );
|
||||
return Malformed;
|
||||
}
|
||||
|
||||
// Loop each message
|
||||
uint32_t count = 0;
|
||||
uint32_t bytesProcessed = 0;
|
||||
|
@ -61,7 +104,7 @@ PacketParseResult Network::Packets::getPackets( const std::vector< uint8_t >& bu
|
|||
FFXIVARR_PACKET_RAW rawPacket;
|
||||
|
||||
// Copy ipc packet message
|
||||
const auto packetResult = getPacket( buffer, offset + bytesProcessed, rawPacket );
|
||||
const auto packetResult = getPacket( decompBuf, offset + bytesProcessed, rawPacket );
|
||||
if( packetResult != Success )
|
||||
return packetResult;
|
||||
|
||||
|
|
|
@ -18,6 +18,13 @@ namespace Sapphire::Network::Packets
|
|||
Malformed
|
||||
};
|
||||
|
||||
enum CompressionType
|
||||
{
|
||||
NoCompression,
|
||||
Zlib,
|
||||
Oodle,
|
||||
};
|
||||
|
||||
/// Read packet header from buffer with given offset.
|
||||
/// Buffer with given offset must be pointing to start of the new FFXIV packet.
|
||||
PacketParseResult getHeader( const std::vector< uint8_t >& buffer, const uint32_t offset,
|
||||
|
|
27
src/common/Network/Oodle.cpp
Normal file
27
src/common/Network/Oodle.cpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#include "Oodle.h"
|
||||
|
||||
using namespace Sapphire;
|
||||
|
||||
Network::Oodle::Oodle() :
|
||||
m_htbits(19)
|
||||
{
|
||||
auto stateSize = OodleNetwork1UDP_State_Size();
|
||||
auto sharedSize = OodleNetwork1_Shared_Size( m_htbits );
|
||||
|
||||
m_state = std::vector< uint8_t >( stateSize, 0 );
|
||||
m_shared = std::vector< uint8_t >( sharedSize, 0 );
|
||||
m_window = std::vector< uint8_t >( 0x8000, 0 );
|
||||
|
||||
oodleInit();
|
||||
}
|
||||
|
||||
void Network::Oodle::oodleInit()
|
||||
{
|
||||
OodleNetwork1_Shared_SetWindow( &m_shared[0], m_htbits, &m_window[0], (int) m_window.size() );
|
||||
OodleNetwork1UDP_Train( &m_state[0], &m_shared[0], nullptr, nullptr, 0 );
|
||||
}
|
||||
|
||||
bool Network::Oodle::oodleDecode( const std::vector< uint8_t > &enc, uint32_t encSize, std::vector< uint8_t > &dec, uint32_t decSize )
|
||||
{
|
||||
return OodleNetwork1UDP_Decode( &m_state[0], &m_shared[0], &enc[0], encSize, &dec[0], decSize );
|
||||
}
|
28
src/common/Network/Oodle.h
Normal file
28
src/common/Network/Oodle.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
#ifndef _OODLE_H
|
||||
#define _OODLE_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <oodle2net.h>
|
||||
|
||||
namespace Sapphire::Network
|
||||
{
|
||||
class Oodle
|
||||
{
|
||||
private:
|
||||
std::vector< uint8_t > m_state;
|
||||
std::vector< uint8_t > m_shared;
|
||||
std::vector< uint8_t > m_window;
|
||||
|
||||
int m_htbits;
|
||||
|
||||
public:
|
||||
Oodle();
|
||||
virtual ~Oodle() = default;
|
||||
|
||||
void oodleInit();
|
||||
bool oodleDecode( const std::vector< uint8_t > &enc, uint32_t encSize, std::vector< uint8_t > &dec, uint32_t decSize );
|
||||
};
|
||||
}
|
||||
|
||||
#endif // _OODLE_H
|
|
@ -9,8 +9,8 @@ namespace Sapphire::Network::Packets
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Lobby Connection IPC Codes
|
||||
/**
|
||||
* Server IPC Lobby Type Codes.
|
||||
*/
|
||||
* Server IPC Lobby Type Codes.
|
||||
*/
|
||||
enum ServerLobbyIpcType : uint16_t
|
||||
{
|
||||
LobbyError = 0x0002,
|
||||
|
@ -24,8 +24,8 @@ namespace Sapphire::Network::Packets
|
|||
};
|
||||
|
||||
/**
|
||||
* Client IPC Lobby Type Codes.
|
||||
*/
|
||||
* Client IPC Lobby Type Codes.
|
||||
*/
|
||||
enum ClientLobbyIpcType : uint16_t
|
||||
{
|
||||
ReqCharList = 0x0003,
|
||||
|
@ -39,400 +39,415 @@ namespace Sapphire::Network::Packets
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Zone Connection IPC Codes
|
||||
/**
|
||||
* Server IPC Zone Type Codes.
|
||||
*/
|
||||
* Server IPC Zone Type Codes.
|
||||
*/
|
||||
enum ServerZoneIpcType : uint16_t
|
||||
{
|
||||
Ping = 0x02A8, // updated 5.58 hotfix
|
||||
Init = 0x013C, // updated 5.58 hotfix
|
||||
Ping = 0x020a, // updated 6.31h
|
||||
Init = 0x032d, // updated 6.31h
|
||||
|
||||
ActorFreeSpawn = 0x00B5, // updated 5.58 hotfix
|
||||
InitZone = 0x0320, // updated 5.58 hotfix
|
||||
ActorFreeSpawn = 0x282, // updated 6.31h
|
||||
|
||||
EffectResult = 0x0387, // updated 5.58 hotfix
|
||||
ActorControl = 0x00B0, // updated 5.58 hotfix
|
||||
ActorControlSelf = 0x02B6, // updated 5.58 hotfix
|
||||
ActorControlTarget = 0x03C5, // updated 5.58 hotfix
|
||||
InitZone = 0x118, // updated 6.31h
|
||||
PrepareZoning = 0x27c, // updated 6.31h
|
||||
|
||||
EffectResult = 0x214, // updated 6.31h
|
||||
EffectResultBasic = 0x205, // updated 6.31h
|
||||
|
||||
ActorControl = 0x1a4, // updated 6.31h
|
||||
ActorControlTarget = 0x7e, // updated 6.31h
|
||||
ActorControlSelf = 0x203, // updated 6.31h
|
||||
ActorCast = 0x185, // updated 6.31h
|
||||
ActorSetPos = 0x99, // updated 6.31h
|
||||
ActorMove = 0x155, // updated 6.31h
|
||||
ActorGauge = 0x238, // updated 6.31h
|
||||
|
||||
/*!
|
||||
* @brief Used when resting
|
||||
*/
|
||||
UpdateHpMpTp = 0x01A7, // updated 5.58 hotfix
|
||||
UpdateHpMpTp = 0x119, // updated 6.31h
|
||||
UpdateClassInfo = 0x2c5, // updated 6.31h
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
ChatBanned = 0xF06B,
|
||||
Playtime = 0x0179, // updated 5.58 hotfix
|
||||
Logout = 0x0214, // updated 5.58 hotfix
|
||||
CFNotify = 0x0327, // updated 5.58 hotfix
|
||||
Playtime = 0x26c, // updated 6.31h
|
||||
Logout = 0x072, // updated 6.31h
|
||||
CFNotify = 0x2a1, // updated 6.31h
|
||||
CFMemberStatus = 0x0079,
|
||||
CFDutyInfo = 0x03AA, // updated 5.58 hotfix
|
||||
CFDutyInfo = 0x21a, // updated 6.31h
|
||||
CFPlayerInNeed = 0xF07F,
|
||||
CFPreferredRole = 0x024B, // updated 5.58 hotfix
|
||||
CFCancel = 0x01AC, // updated 5.58 hotfix
|
||||
CFPreferredRole = 0x26b, // updated 6.31h
|
||||
CFCancel = 0x1e3, // updated 6.31h
|
||||
SocialRequestError = 0xF0AD,
|
||||
|
||||
CFRegistered = 0x029F, // updated 5.58 hotfix
|
||||
SocialRequestResponse = 0x0082, // updated 5.58 hotfix
|
||||
SocialMessage = 0x03CB, // updated 5.58 hotfix
|
||||
SocialMessage2 = 0x01D7, // updated 5.58 hotfix
|
||||
CFRegistered = 0x029F, // updated 5.58h
|
||||
SocialRequestResponse = 0x2c3, // updated 6.31h
|
||||
SocialMessage = 0x03CB, // updated 5.58h
|
||||
SocialMessage2 = 0x01D7, // updated 5.58h
|
||||
CancelAllianceForming = 0xF0C6, // updated 4.2
|
||||
|
||||
LogMessage = 0x0118, // updated 5.58 hotfix
|
||||
LogMessage = 0x1a7, // updated 6.31h
|
||||
|
||||
Chat = 0x00FE, // updated 5.58 hotfix
|
||||
Chat = 0x00c5, // updated 6.31h
|
||||
PartyChat = 0x0065,
|
||||
|
||||
WorldVisitList = 0xF0FE, // added 4.5
|
||||
|
||||
SocialList = 0x015F, // updated 5.58 hotfix
|
||||
SocialList = 0x1f4, // updated 6.31h
|
||||
|
||||
ExamineSearchInfo = 0x0133, // updated 5.58 hotfix
|
||||
UpdateSearchInfo = 0x03E5, // updated 5.58 hotfix
|
||||
InitSearchInfo = 0x0321, // updated 5.58 hotfix
|
||||
ExamineSearchComment = 0x03AD, // updated 5.58 hotfix
|
||||
ExamineSearchInfo = 0x156, // updated 6.31h
|
||||
UpdateSearchInfo = 0xc8, // updated 6.31h
|
||||
InitSearchInfo = 0x00b7, // updated 6.31h
|
||||
ExamineSearchComment = 0x102, // updated 6.31h
|
||||
|
||||
ServerNoticeShort = 0x0333, // updated 5.58 hotfix
|
||||
ServerNotice = 0x0171, // updated 5.58 hotfix
|
||||
SetOnlineStatus = 0x037B, // updated 5.58 hotfix
|
||||
ServerNoticeShort = 0x0333, // updated 5.58h
|
||||
ServerNotice = 0x03b0, // updated 6.31h
|
||||
SystemLogMessage = 0x1a6, // updated 6.31h
|
||||
SetOnlineStatus = 0x2b7, // updated 6.31h
|
||||
|
||||
CountdownInitiate = 0x0111, // updated 5.58 hotfix
|
||||
CountdownCancel = 0x0231, // updated 5.58 hotfix
|
||||
CountdownInitiate = 0x3e1, // updated 6.31h
|
||||
CountdownCancel = 0x23a, // updated 6.31h
|
||||
|
||||
PlayerAddedToBlacklist = 0x024E, // updated 5.58 hotfix
|
||||
PlayerRemovedFromBlacklist = 0x011D, // updated 5.58 hotfix
|
||||
BlackList = 0x03C0, // updated 5.58 hotfix
|
||||
PlayerAddedToBlacklist = 0x1cb, // updated 6.31h
|
||||
PlayerRemovedFromBlacklist = 0x37c, // updated 6.31h
|
||||
BlackList = 0x033d, // updated 6.31h
|
||||
|
||||
LinkshellList = 0x02E2, // updated 5.58 hotfix
|
||||
LinkshellList = 0x3be, // updated 6.31h
|
||||
CrossWorldLinkshellList = 0xb8, // updated 6.31h
|
||||
FellowshipList = 0x2a3, // updated 6.31h
|
||||
|
||||
MailDeleteRequest = 0xF12B, // updated 5.0
|
||||
MailDeleteRequest = 0x0117, // updated 6.31h
|
||||
|
||||
// 12D - 137 - constant gap between 4.5x -> 5.0
|
||||
ReqMoogleMailList = 0xF138, // updated 5.0
|
||||
ReqMoogleMailLetter = 0xF139, // updated 5.0
|
||||
ReqMoogleMailList = 0xF138, // updated 5.0
|
||||
ReqMoogleMailLetter = 0xF139, // updated 5.0
|
||||
MailLetterNotification = 0x013A, // updated 5.0
|
||||
|
||||
MarketTaxRates = 0x01F8, // updated 5.35 hotfix
|
||||
MarketTaxRates = 0x01F8, // updated 5.35h
|
||||
|
||||
MarketBoardSearchResult = 0x01F1, // updated 5.58 hotfix
|
||||
MarketBoardItemListingCount = 0x0068, // updated 5.58 hotfix
|
||||
MarketBoardItemListingHistory = 0x01BA, // updated 5.58 hotfix
|
||||
MarketBoardItemListing = 0x0076, // updated 5.58 hotfix
|
||||
MarketBoardSearchResult = 0x115, // updated 6.31h
|
||||
MarketBoardItemListingCount = 0x31a, // updated 6.31h
|
||||
MarketBoardItemListingHistory = 0x176, // updated 6.31h
|
||||
MarketBoardItemListing = 0x1ed, // updated 6.31h
|
||||
MarketBoardPurchase = 0x30b, // updated 6.31h
|
||||
ItemMarketBoardInfo = 0x23f, // updated 6.31h
|
||||
|
||||
CharaFreeCompanyTag = 0x013B, // updated 4.5
|
||||
FreeCompanyBoardMsg = 0x03DB, // updated 5.58 hotfix
|
||||
FreeCompanyInfo = 0x01F7, // updated 5.58 hotfix
|
||||
ExamineFreeCompanyInfo = 0x0324, // updated 5.58 hotfix
|
||||
CharaFreeCompanyTag = 0x013B, // updated 4.5
|
||||
FreeCompanyBoardMsg = 0x03DB, // updated 5.58h
|
||||
FreeCompanyInfo = 0x29c, // updated 6.31h
|
||||
FreeCompanyDialog = 0x285, // updated 6.31h
|
||||
ExamineFreeCompanyInfo = 0x171, // updated 6.31h
|
||||
|
||||
FreeCompanyUpdateShortMessage = 0xF157, // added 5.0
|
||||
|
||||
StatusEffectList = 0x0074, // updated 5.58 hotfix
|
||||
EurekaStatusEffectList = 0x0167, // updated 5.18
|
||||
BossStatusEffectList = 0x0312, // added 5.1
|
||||
Effect = 0x03CA, // updated 5.58 hotfix
|
||||
AoeEffect8 = 0x03C4, // updated 5.58 hotfix
|
||||
AoeEffect16 = 0x00FA, // updated 5.58 hotfix
|
||||
AoeEffect24 = 0x0339, // updated 5.58 hotfix
|
||||
AoeEffect32 = 0x023C, // updated 5.58 hotfix
|
||||
PersistantEffect = 0x025D, // updated 5.58 hotfix
|
||||
StatusEffectList = 0x305, // updated 6.31h
|
||||
EurekaStatusEffectList = 0x3a6, // updated 6.31h
|
||||
BossStatusEffectList = 0x1e4, // updated 6.31h
|
||||
StatusEffectList2 = 0x197, // updated 6.31h
|
||||
StatusEffectList3 = 0x2a7, // updated 6.31h
|
||||
Effect = 0x100, // updated 6.31h
|
||||
AoeEffect8 = 0x2b9, // updated 6.31h
|
||||
AoeEffect16 = 0x390, // updated 6.31h
|
||||
AoeEffect24 = 0x22a, // updated 6.31h
|
||||
AoeEffect32 = 0x120, // updated 6.31h
|
||||
PersistantEffect = 0x2a7, // updated 6.31h
|
||||
|
||||
GCAffiliation = 0x0094, // updated 5.58 hotfix
|
||||
GCAffiliation = 0x184, // updated 6.31h
|
||||
|
||||
PlayerSpawn = 0x01D8, // updated 5.58 hotfix
|
||||
NpcSpawn = 0x00D2, // updated 5.58 hotfix
|
||||
NpcSpawn2 = 0x01CB, // ( Bigger statuseffectlist? ) updated 5.3
|
||||
ActorMove = 0x00F8, // updated 5.58 hotfix
|
||||
PlayerSpawn = 0xf9, // updated 6.31h
|
||||
NpcSpawn = 0x3d5, // updated 6.31h
|
||||
NpcSpawn2 = 0x3b6, // updated 6.31h
|
||||
|
||||
ActorSetPos = 0x0299, // updated 5.58 hotfix
|
||||
|
||||
ActorCast = 0x015D, // updated 5.58 hotfix
|
||||
SomeCustomiseChangePacketProbably = 0x00CD, // added 5.18
|
||||
|
||||
PartyList = 0x0349, // updated 5.58 hotfix
|
||||
PartyMessage = 0x00A4, // updated 5.58 hotfix
|
||||
HateRank = 0x0150, // updated 5.58 hotfix
|
||||
HateList = 0x0243, // updated 5.58 hotfix
|
||||
ObjectSpawn = 0x0125, // updated 5.58 hotfix
|
||||
ObjectDespawn = 0x0148, // updated 5.58 hotfix
|
||||
UpdateClassInfo = 0x0084, // updated 5.58 hotfix
|
||||
PartyList = 0x24e, // updated 6.31h
|
||||
PartyMessage = 0x297, // updated 6.31h
|
||||
HateRank = 0x1dd, // updated 6.31h
|
||||
HateList = 0x3a5, // updated 6.31h
|
||||
ObjectSpawn = 0x277, // updated 6.31h
|
||||
ObjectDespawn = 0x2de, // updated 6.31h
|
||||
SilentSetClassJob = 0xF18E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything
|
||||
PlayerSetup = 0x01D5, // updated 5.58 hotfix
|
||||
PlayerStats = 0x0295, // updated 5.58 hotfix
|
||||
ActorOwner = 0x0260, // updated 5.58 hotfix
|
||||
PlayerStateFlags = 0x03BF, // updated 5.58 hotfix
|
||||
PlayerClassInfo = 0x0131, // updated 5.58 hotfix
|
||||
CharaVisualEffect = 0x0292, // updated 5.58 hotfix
|
||||
PlayerSetup = 0x287, // updated 6.31h
|
||||
PlayerStats = 0x2b6, // updated 6.31h
|
||||
ActorOwner = 0x287, // updated 6.31h
|
||||
PlayerStateFlags = 0x395, // updated 6.31h
|
||||
PlayerClassInfo = 0x17c, // updated 6.31h
|
||||
PlayerUpdateLook = 0x1cc, // updated 6.31h
|
||||
CharaVisualEffect = 0x355, // updated 6.31h
|
||||
|
||||
ModelEquip = 0x03A2, // updated 5.58 hotfix
|
||||
Examine = 0x0365, // updated 5.58 hotfix
|
||||
CharaNameReq = 0x01F0, // updated 5.58 hotfix
|
||||
ModelEquip = 0xe1, // updated 6.31h
|
||||
Examine = 0x246, // updated 6.31h
|
||||
CharaNameReq = 0x1c4, // updated 6.31h
|
||||
|
||||
// nb: see #565 on github
|
||||
UpdateRetainerItemSalePrice = 0xF19F, // updated 5.0
|
||||
RetainerSaleHistory = 0x03CE, // updated 5.58 hotfix
|
||||
RetainerInformation = 0x022F, // updated 5.58 hotfix
|
||||
RetainerSaleHistory = 0x1ae, // updated 6.31h
|
||||
RetainerInformation = 0x139, // updated 6.31h
|
||||
|
||||
SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore
|
||||
|
||||
ItemInfo = 0x01CC, // updated 5.58 hotfix
|
||||
ContainerInfo = 0x025C, // updated 5.58 hotfix
|
||||
InventoryTransactionFinish = 0x0176, // updated 5.58 hotfix
|
||||
InventoryTransaction = 0x027F, // updated 5.58 hotfix
|
||||
CurrencyCrystalInfo = 0x0345, // updated 5.58 hotfix
|
||||
ItemInfo = 0x1c2, // updated 6.31h
|
||||
ContainerInfo = 0x93, // updated 6.31h
|
||||
InventoryTransactionFinish = 0x290, // updated 6.31h
|
||||
InventoryTransaction = 0x6e, // updated 6.31h
|
||||
CurrencyCrystalInfo = 0x385, // updated 6.31h
|
||||
|
||||
InventoryActionAck = 0x03B8, // updated 5.58 hotfix
|
||||
UpdateInventorySlot = 0x02F7, // updated 5.58 hotfix
|
||||
InventoryActionAck = 0xd0, // updated 6.31h
|
||||
UpdateInventorySlot = 0xc2, // updated 6.31h
|
||||
|
||||
HuntingLogEntry = 0x01D9, // updated 5.58 hotfix
|
||||
HuntingLogEntry = 0xb0, // updated 6.31h
|
||||
|
||||
EventPlay = 0x016B, // updated 5.58 hotfix
|
||||
EventPlay4 = 0x010A, // updated 5.58 hotfix
|
||||
EventPlay8 = 0x0337, // updated 5.58 hotfix
|
||||
EventPlay16 = 0x0269, // updated 5.58 hotfix
|
||||
EventPlay32 = 0x023E, // updated 5.58 hotfix
|
||||
EventPlay64 = 0x00DE, // updated 5.58 hotfix
|
||||
EventPlay128 = 0x02D0, // updated 5.58 hotfix
|
||||
EventPlay255 = 0x0362, // updated 5.58 hotfix
|
||||
EventPlay = 0x3b8, // updated 6.31h
|
||||
EventPlay4 = 0x1ec, // updated 6.31h
|
||||
EventPlay8 = 0x333, // updated 6.31h
|
||||
EventPlay16 = 0x3ae, // updated 6.31h
|
||||
EventPlay32 = 0x160, // updated 6.31h
|
||||
EventPlay64 = 0x2f2, // updated 6.31h
|
||||
EventPlay128 = 0x8b, // updated 6.31h
|
||||
EventPlay255 = 0x10b, // updated 6.31h
|
||||
EventStart = 0x92, // updated 6.31h
|
||||
EventFinish = 0x8c, // updated 6.31h
|
||||
|
||||
EventContinue = 0x00B6, // updated 5.58 hotfix
|
||||
|
||||
EventStart = 0x02DA, // updated 5.58 hotfix
|
||||
EventFinish = 0x0235, // updated 5.58 hotfix
|
||||
EventContinue = 0x200, // updated 6.31h
|
||||
|
||||
EventLinkshell = 0x1169,
|
||||
|
||||
QuestActiveList = 0x0097, // updated 5.58 hotfix
|
||||
QuestUpdate = 0x01B2, // updated 5.58 hotfix
|
||||
QuestCompleteList = 0x006D, // updated 5.58 hotfix
|
||||
QuestActiveList = 0x82, // updated 6.31h
|
||||
QuestUpdate = 0xa7, // updated 6.31h
|
||||
QuestCompleteList = 0x227, // updated 6.31h
|
||||
|
||||
QuestFinish = 0x021B, // updated 5.58 hotfix
|
||||
MSQTrackerComplete = 0x0348, // updated 5.58 hotfix
|
||||
QuestFinish = 0x30a, // updated 6.31h
|
||||
MSQTrackerComplete = 0xba, // updated 6.31h
|
||||
MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474
|
||||
|
||||
QuestMessage = 0x0220, // updated 5.58 hotfix
|
||||
QuestMessage = 0x0220, // updated 5.58h
|
||||
|
||||
QuestTracker = 0x00D8, // updated 5.58 hotfix
|
||||
QuestTracker = 0x1c1, // updated 6.31h
|
||||
|
||||
Mount = 0x01E1, // updated 5.58 hotfix
|
||||
Mount = 0x116, // updated 6.31h
|
||||
|
||||
DirectorVars = 0x0154, // updated 5.58 hotfix
|
||||
SomeDirectorUnk1 = 0x0084, // updated 5.18
|
||||
SomeDirectorUnk2 = 0xF0C1, // updated 5.18
|
||||
SomeDirectorUnk4 = 0x03DD, // updated 5.58 hotfix
|
||||
SomeDirectorUnk8 = 0x028A, // updated 5.18
|
||||
DirectorVars = 0x105, // updated 6.31h
|
||||
SomeDirectorUnk1 = 0x0084, // updated 5.18
|
||||
SomeDirectorUnk2 = 0xF0C1, // updated 5.18
|
||||
SomeDirectorUnk4 = 0x03DD, // updated 5.58h
|
||||
SomeDirectorUnk8 = 0x028A, // updated 5.18
|
||||
SomeDirectorUnk16 = 0x028C, // updated 5.18
|
||||
DirectorPopUp = 0x03DF, // updated 5.58 hotfix
|
||||
DirectorPopUp4 = 0x019B, // updated 5.58 hotfix
|
||||
DirectorPopUp8 = 0x0271, // updated 5.58 hotfix
|
||||
DirectorPopUp = 0x03DF, // updated 5.58h
|
||||
DirectorPopUp4 = 0x019B, // updated 5.58h
|
||||
DirectorPopUp8 = 0x0271, // updated 5.58h
|
||||
|
||||
CFAvailableContents = 0xF1FD, // updated 4.2
|
||||
|
||||
WeatherChange = 0x0323, // updated 5.58 hotfix
|
||||
PlayerTitleList = 0x014E, // updated 5.58 hotfix
|
||||
Discovery = 0x01C2, // updated 5.58 hotfix
|
||||
WeatherChange = 0x148, // updated 6.31h
|
||||
PlayerTitleList = 0x365, // updated 6.31h
|
||||
Discovery = 0x14b, // updated 6.31h
|
||||
|
||||
EorzeaTimeOffset = 0x0070, // updated 5.58 hotfix
|
||||
EorzeaTimeOffset = 0x3d2, // updated 6.31h
|
||||
|
||||
EquipDisplayFlags = 0x02C6, // updated 5.58 hotfix
|
||||
EquipDisplayFlags = 0x35e, // updated 6.31h
|
||||
|
||||
MiniCactpotInit = 0x0286, // added 5.31
|
||||
ShopMessage = 0x0287, // updated 5.58 hotfix
|
||||
LootMessage = 0x0383, // updated 5.58 hotfix
|
||||
ResultDialog = 0x0273, // updated 5.58 hotfix
|
||||
DesynthResult = 0x0238, // updated 5.58 hotfix
|
||||
ShopMessage = 0x0287, // updated 5.58h
|
||||
LootMessage = 0x191, // updated 6.31h
|
||||
ResultDialog = 0x394, // updated 6.31h
|
||||
DesynthResult = 0x16a, // updated 6.31h
|
||||
|
||||
/// Housing //////////////////////////////////////
|
||||
|
||||
LandSetInitialize = 0x0159, // updated 5.58 hotfix
|
||||
LandUpdate = 0x0228, // updated 5.58 hotfix
|
||||
YardObjectSpawn = 0x023D, // updated 5.58 hotfix
|
||||
HousingIndoorInitialize = 0x0210, // updated 5.58 hotfix
|
||||
LandPriceUpdate = 0x0300, // updated 5.58 hotfix
|
||||
LandInfoSign = 0x03E7, // updated 5.58 hotfix
|
||||
LandRename = 0x01BF, // updated 5.58 hotfix
|
||||
HousingEstateGreeting = 0x0126, // updated 5.58 hotfix
|
||||
HousingUpdateLandFlagsSlot = 0x0157, // updated 5.58 hotfix
|
||||
HousingLandFlags = 0x03B1, // updated 5.58 hotfix
|
||||
HousingShowEstateGuestAccess = 0x00CC, // updated 5.58 hotfix
|
||||
LandSetInitialize = 0x69, // updated 6.31h
|
||||
LandUpdate = 0x32a, // updated 6.31h
|
||||
YardObjectSpawn = 0x183, // updated 6.31h
|
||||
HousingIndoorInitialize = 0x206, // updated 6.31h
|
||||
LandPriceUpdate = 0x330, // updated 6.31h
|
||||
LandInfoSign = 0x220, // updated 6.31h
|
||||
LandRename = 0x304, // updated 6.31h
|
||||
HousingEstateGreeting = 0x1b6, // updated 6.31h
|
||||
HousingUpdateLandFlagsSlot = 0x2a2, // updated 6.31h
|
||||
HousingLandFlags = 0x1a0, // updated 6.31h
|
||||
HousingShowEstateGuestAccess = 0x369, // updated 6.31h
|
||||
|
||||
HousingObjectInitialize = 0x0112, // updated 5.58 hotfix
|
||||
HousingInternalObjectSpawn = 0x02C8, // updated 5.58 hotfix
|
||||
HousingObjectInitialize = 0x3a7, // updated 6.31h
|
||||
HousingInternalObjectSpawn = 0x251, // updated 6.31h
|
||||
|
||||
HousingWardInfo = 0x012A, // updated 5.58 hotfix
|
||||
HousingObjectMove = 0x0265, // updated 5.58 hotfix
|
||||
HousingWardInfo = 0x2bb, // updated 6.31h
|
||||
HousingObjectMove = 0xcb, // updated 6.31h
|
||||
HousingObjectDye = 0x328, // updated 6.31h
|
||||
|
||||
SharedEstateSettingsResponse = 0x030E, // updated 5.58 hotfix
|
||||
SharedEstateSettingsResponse = 0x3a1, // updated 6.31h
|
||||
|
||||
LandUpdateHouseName = 0x017C, // updated 5.58 hotfix
|
||||
LandUpdateHouseName = 0x24d, // updated 6.31h
|
||||
LandSetMap = 0x2ce, // updated 6.31h
|
||||
|
||||
LandSetMap = 0x02E5, // updated 5.58 hotfix
|
||||
|
||||
CeremonySetActorAppearance = 0x02ED, // updated 5.58 hotfix
|
||||
CeremonySetActorAppearance = 0x2cb, // updated 6.31h
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui
|
||||
PerformNote = 0x0127, // updated 5.58 hotfix
|
||||
PerformNote = 0x1e1, // updated 6.31h
|
||||
|
||||
PrepareZoning = 0x02AB, // updated 5.58 hotfix
|
||||
ActorGauge = 0x01C1, // updated 5.58 hotfix
|
||||
DutyGauge = 0x02E5, // updated 5.58 hotfix
|
||||
DutyGauge = 0x02E5, // updated 5.58h
|
||||
|
||||
// daily quest info -> without them sent, login will take longer...
|
||||
DailyQuests = 0x02D6, // updated 5.58 hotfix
|
||||
DailyQuestRepeatFlags = 0x01AB, // updated 5.58 hotfix
|
||||
DailyQuests = 0xd4, // updated 6.31h
|
||||
DailyQuestRepeatFlags = 0x21c, // updated 6.31h
|
||||
|
||||
MapUpdate = 0x0394, // updated 5.58 hotfix
|
||||
MapUpdate4 = 0x036F, // updated 5.58 hotfix
|
||||
MapUpdate8 = 0x0311, // updated 5.58 hotfix
|
||||
MapUpdate16 = 0x0108, // updated 5.58 hotfix
|
||||
MapUpdate32 = 0x007A, // updated 5.58 hotfix
|
||||
MapUpdate64 = 0x02A0, // updated 5.58 hotfix
|
||||
MapUpdate128 = 0x0303, // updated 5.58 hotfix
|
||||
MapUpdate = 0x31f, // updated 6.31h
|
||||
MapUpdate4 = 0x2ff, // updated 6.31h
|
||||
MapUpdate8 = 0xff, // updated 6.31h
|
||||
MapUpdate16 = 0x1d0, // updated 6.31h
|
||||
MapUpdate32 = 0x151, // updated 6.31h
|
||||
MapUpdate64 = 0x392, // updated 6.31h
|
||||
MapUpdate128 = 0x222, // updated 6.31h
|
||||
|
||||
/// Doman Mahjong //////////////////////////////////////
|
||||
MahjongOpenGui = 0x02A4, // only available in mahjong instance
|
||||
MahjongNextRound = 0x02BD, // initial hands(baipai), # of riichi(wat), winds, honba, score and stuff
|
||||
MahjongPlayerAction = 0x02BE, // tsumo(as in drawing a tile) called chi/pon/kan/riichi
|
||||
MahjongOpenGui = 0x02A4, // only available in mahjong instance
|
||||
MahjongNextRound = 0x02BD, // initial hands(baipai), # of riichi(wat), winds, honba, score and stuff
|
||||
MahjongPlayerAction = 0x02BE, // tsumo(as in drawing a tile) called chi/pon/kan/riichi
|
||||
MahjongEndRoundTsumo = 0x02BF, // called tsumo
|
||||
MahjongEndRoundRon = 0x2C0, // called ron or double ron (waiting for action must be flagged from discard packet to call)
|
||||
MahjongTileDiscard = 0x02C1, // giri (discarding a tile.) chi(1)/pon(2)/kan(4)/ron(8) flags etc..
|
||||
MahjongPlayersInfo = 0xF2C2, // actor id, name, rating and stuff..
|
||||
MahjongEndRoundRon = 0x2C0, // called ron or double ron (waiting for action must be flagged from discard packet to call)
|
||||
MahjongTileDiscard = 0x02C1, // giri (discarding a tile.) chi(1)/pon(2)/kan(4)/ron(8) flags etc..
|
||||
MahjongPlayersInfo = 0xF2C2, // actor id, name, rating and stuff..
|
||||
// 2C3 and 2C4 are currently unknown
|
||||
MahjongEndRoundDraw = 0x02C5, // self explanatory
|
||||
MahjongEndGame = 0x02C6, // finished oorasu(all-last) round; shows a result screen.
|
||||
MahjongEndGame = 0x02C6, // finished oorasu(all-last) round; shows a result screen.
|
||||
|
||||
/// Airship & Submarine //////////////////////////////////////
|
||||
AirshipExplorationResult = 0x0203, // updated 5.58 hotfix
|
||||
AirshipStatus = 0x030C, // updated 5.58 hotfix
|
||||
AirshipStatusList = 0x02FE, // updated 5.58 hotfix
|
||||
AirshipTimers = 0x0166, // updated 5.58 hotfix
|
||||
SubmarineExplorationResult = 0x00AA, // updated 5.58 hotfix
|
||||
SubmarineProgressionStatus = 0x0357, // updated 5.58 hotfix
|
||||
SubmarineStatusList = 0x01EF, // updated 5.58 hotfix
|
||||
SubmarineTimers = 0x0247, // updated 5.58 hotfix
|
||||
AirshipTimers = 0xda, // updated 6.31h
|
||||
AirshipStatus = 0x2f1, // updated 6.31h
|
||||
AirshipStatusList = 0x39d, // updated 6.31h
|
||||
AirshipExplorationResult = 0x3c4, // updated 6.31h
|
||||
|
||||
SubmarineTimers = 0x263, // updated 6.31h
|
||||
SubmarineProgressionStatus = 0x25a, // updated 6.31h
|
||||
SubmarineStatusList = 0xac, // updated 6.31h
|
||||
SubmarineExplorationResult = 0x194, // updated 6.31h
|
||||
|
||||
EnvironmentControl = 0xef, // updated 6.31h
|
||||
IslandWorkshopSupplyDemand = 0x190, // updated 6.31h
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Client IPC Zone Type Codes.
|
||||
*/
|
||||
* Client IPC Zone Type Codes.
|
||||
*/
|
||||
enum ClientZoneIpcType : uint16_t
|
||||
{
|
||||
PingHandler = 0x0288, // updated 5.58 hotfix
|
||||
InitHandler = 0x02EB, // updated 5.58 hotfix
|
||||
PingHandler = 0x0273, // updated 6.31h
|
||||
InitHandler = 0x03a8, // updated 6.31h
|
||||
|
||||
FinishLoadingHandler = 0x013C, // updated 5.58 hotfix
|
||||
FinishLoadingHandler = 0x032d, // updated 6.31h
|
||||
|
||||
CFCommenceHandler = 0x0381, // updated 5.58 hotfix
|
||||
CFCommenceHandler = 0x0381, // updated 5.58h
|
||||
|
||||
CFCancelHandler = 0x02B2, // updated 5.58 hotfix
|
||||
CFRegisterDuty = 0x01BD, // updated 5.58 hotfix
|
||||
CFRegisterRoulette = 0x037A, // updated 5.58 hotfix
|
||||
PlayTimeHandler = 0x02B7, // updated 5.58 hotfix
|
||||
LogoutHandler = 0x00A0, // updated 5.58 hotfix
|
||||
CancelLogout = 0x01AC, // updated 5.58 hotfix
|
||||
CFDutyInfoHandler = 0xF078, // updated 4.2
|
||||
CFCancelHandler = 0x02B2, // updated 5.58h
|
||||
CFRegisterDuty = 0x01BD, // updated 5.58h
|
||||
CFRegisterRoulette = 0x037A, // updated 5.58h
|
||||
PlayTimeHandler = 0x02B7, // updated 5.58h
|
||||
LogoutHandler = 0x0387, // updated 6.31h
|
||||
CancelLogout = 0x01e3, // updated 6.31h
|
||||
CFDutyInfoHandler = 0xF078, // updated 4.2
|
||||
|
||||
SocialReqSendHandler = 0x00D7, // updated 5.58 hotfix
|
||||
SocialResponseHandler = 0x023B, // updated 5.58 hotfix
|
||||
CreateCrossWorldLS = 0x035D, // updated 5.58 hotfix
|
||||
SocialReqSendHandler = 0x00D7, // updated 5.58h
|
||||
SocialResponseHandler = 0x023B, // updated 5.58h
|
||||
CreateCrossWorldLS = 0x035D, // updated 5.58h
|
||||
|
||||
ChatHandler = 0x03B0, // updated 5.58 hotfix
|
||||
ChatHandler = 0x00f1, // Updated 6.31h
|
||||
PartyChatHandler = 0x0065,
|
||||
PartySetLeaderHandler = 0x036C, // updated 5.58 hotfix
|
||||
LeavePartyHandler = 0x019D, // updated 5.58 hotfix
|
||||
KickPartyMemberHandler = 0x0262, // updated 5.58 hotfix
|
||||
DisbandPartyHandler = 0x0276, // updated 5.58 hotfix
|
||||
PartySetLeaderHandler = 0x036C, // updated 5.58h
|
||||
LeavePartyHandler = 0x019D, // updated 5.58h
|
||||
KickPartyMemberHandler = 0x0262, // updated 5.58h
|
||||
DisbandPartyHandler = 0x0276, // updated 5.58h
|
||||
|
||||
SocialListHandler = 0x01CA, // updated 5.58 hotfix
|
||||
SetSearchInfoHandler = 0x01D4, // updated 5.58 hotfix
|
||||
ReqSearchInfoHandler = 0x014F, // updated 5.58 hotfix
|
||||
SocialListHandler = 0x0200, // updated 6.31
|
||||
SetSearchInfoHandler = 0x0368, // updated 6.31h
|
||||
ReqSearchInfoHandler = 0x03b0, // updated 6.31h
|
||||
ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0
|
||||
|
||||
ReqRemovePlayerFromBlacklist = 0x00B4, // updated 5.58 hotfix
|
||||
BlackListHandler = 0x00F2, // updated 5.58 hotfix
|
||||
PlayerSearchHandler = 0x037D, // updated 5.58 hotfix
|
||||
ReqRemovePlayerFromBlacklist = 0x00B4, // updated 5.58h
|
||||
BlackListHandler = 0x010c, // updated 6.31h
|
||||
PlayerSearchHandler = 0x037D, // updated 5.58h
|
||||
|
||||
LinkshellListHandler = 0x03B6, // updated 5.58 hotfix
|
||||
LinkshellListHandler = 0x03B6, // updated 5.58h
|
||||
|
||||
MarketBoardRequestItemListingInfo = 0x00F4, // updated 5.58 hotfix
|
||||
MarketBoardRequestItemListings = 0x0122, // updated 5.58 hotfix
|
||||
MarketBoardSearch = 0x0082, // updated 5.58 hotfix
|
||||
MarketBoardRequestItemListingInfo = 0x00F4, // updated 5.58h
|
||||
MarketBoardRequestItemListings = 0x0122, // updated 5.58h
|
||||
MarketBoardSearch = 0x0082, // updated 5.58h
|
||||
|
||||
ReqExamineFcInfo = 0x037B, // updated 5.58 hotfix
|
||||
ReqExamineFcInfo = 0x037B, // updated 5.58h
|
||||
|
||||
FcInfoReqHandler = 0x03D4, // updated 5.58 hotfix
|
||||
FcInfoReqHandler = 0x9999, // unknown
|
||||
|
||||
FreeCompanyUpdateShortMessageHandler = 0x0123, // added 5.0
|
||||
|
||||
ReqMarketWishList = 0x00C3, // updated 5.58 hotfix
|
||||
ReqMarketWishList = 0x00C3, // updated 5.58h
|
||||
|
||||
ReqJoinNoviceNetwork = 0x0129, // updated 4.2
|
||||
|
||||
ReqCountdownInitiate = 0x02EC, // updated 5.58 hotfix
|
||||
ReqCountdownCancel = 0x0068, // updated 5.58 hotfix
|
||||
ReqCountdownInitiate = 0x03e1, // updated 6.31h
|
||||
ReqCountdownCancel = 0x023a, // updated 6.31h
|
||||
|
||||
ZoneLineHandler = 0x008D, // updated 5.58 hotfix
|
||||
ClientTrigger = 0x03DB, // updated 5.58 hotfix
|
||||
DiscoveryHandler = 0x038B, // updated 5.58 hotfix
|
||||
ZoneLineHandler = 0x00ce, // updated 6.31h
|
||||
ClientTrigger = 0x0244, // updated 6.31h
|
||||
DiscoveryHandler = 0x038B, // updated 5.58h
|
||||
|
||||
PlaceFieldMarkerPreset = 0x026D, // updated 5.58 hotfix
|
||||
PlaceFieldMarker = 0x0371, // updated 5.58 hotfix
|
||||
SkillHandler = 0x02DC, // updated 5.58 hotfix
|
||||
GMCommand1 = 0x0272, // updated 5.58 hotfix
|
||||
GMCommand2 = 0x00E9, // updated 5.58 hotfix
|
||||
AoESkillHandler = 0x0152, // updated 5.58 hotfix
|
||||
PlaceFieldMarkerPreset = 0x204, // updated 6.30h
|
||||
PlaceFieldMarker = 0x38e, // updated 6.30h
|
||||
SkillHandler = 0x0133, // updated 6.31h
|
||||
GMCommand1 = 0x0278, // updated 6.31h
|
||||
GMCommand2 = 0x03d8, // updated 6.31h
|
||||
AoESkillHandler = 0x0152, // updated 5.58h
|
||||
|
||||
UpdatePositionHandler = 0x01AF, // updated 5.58 hotfix
|
||||
UpdatePositionHandler = 0x01f7, // updated 6.31h
|
||||
|
||||
InventoryModifyHandler = 0x029E, // updated 5.58 hotfix
|
||||
InventoryModifyHandler = 0x01a2, // updated 6.31h
|
||||
|
||||
InventoryEquipRecommendedItems = 0x01C9, // updated 5.58 hotfix
|
||||
InventoryEquipRecommendedItems = 0x01C9, // updated 5.58h
|
||||
|
||||
ReqPlaceHousingItem = 0x02D4, // updated 5.58 hotfix
|
||||
BuildPresetHandler = 0x0223, // updated 5.58 hotfix
|
||||
ReqPlaceHousingItem = 0x02D4, // updated 5.58h
|
||||
BuildPresetHandler = 0x0223, // updated 5.58h
|
||||
|
||||
TalkEventHandler = 0x0387, // updated 5.58 hotfix
|
||||
EmoteEventHandler = 0x00B0, // updated 5.58 hotfix
|
||||
WithinRangeEventHandler = 0x02B6, // updated 5.58 hotfix
|
||||
OutOfRangeEventHandler = 0x03C5, // updated 5.58 hotfix
|
||||
EnterTeriEventHandler = 0x01A7, // updated 5.58 hotfix
|
||||
ShopEventHandler = 0x0384, // updated 5.58 hotfix
|
||||
ReturnEventHandler = 0x00FA, // updated 5.58 hotfix
|
||||
TradeReturnEventHandler = 0x0339, // updated 5.58 hotfix
|
||||
TradeReturnEventHandler2 = 0x023C, // updated 5.58 hotfix
|
||||
EventYield2Handler = 0x021D, // updated 5.58 hotfix
|
||||
EventYield16Handler = 0x0207, // updated 5.58 hotfix
|
||||
TalkEventHandler = 0x0205, // updated 6.31h
|
||||
EmoteEventHandler = 0x00B0, // updated 5.58h
|
||||
WithinRangeEventHandler = 0x02B6, // updated 5.58h
|
||||
OutOfRangeEventHandler = 0x00b4, // updated 6.31h
|
||||
EnterTeriEventHandler = 0x014e, // updated 6.31h
|
||||
ShopEventHandler = 0x0384, // updated 5.58h
|
||||
ReturnEventHandler = 0x0119, // updated 6.31h
|
||||
TradeReturnEventHandler = 0x0100, // updated 6.31h
|
||||
TradeReturnEventHandler2 = 0x023C, // updated 5.58h
|
||||
EventYield2Handler = 0x021D, // updated 5.58h
|
||||
EventYield16Handler = 0x0207, // updated 5.58h
|
||||
|
||||
LinkshellEventHandler = 0x016B, // updated 4.5
|
||||
LinkshellEventHandler1 = 0x016C, // updated 4.5
|
||||
LinkshellEventHandler = 0x9999, // unknown
|
||||
LinkshellEventHandler1 = 0x9999, // unknown
|
||||
|
||||
ReqEquipDisplayFlagsChange = 0x02A5, // updated 5.58 hotfix
|
||||
ReqEquipDisplayFlagsChange = 0x03BC, // updated 6.30h
|
||||
|
||||
LandRenameHandler = 0x028E, // updated 5.58 hotfix
|
||||
HousingUpdateHouseGreeting = 0x0343, // updated 5.58 hotfix
|
||||
HousingUpdateObjectPosition = 0x012C, // updated 5.58 hotfix
|
||||
HousingEditExterior = 0x027B, // updated 5.58 hotfix
|
||||
HousingEditInterior = 0x02E3, // updated 5.58 hotfix
|
||||
LandRenameHandler = 0x028E, // updated 5.58h
|
||||
HousingUpdateHouseGreeting = 0x0343, // updated 5.58h
|
||||
HousingUpdateObjectPosition = 0x9999, // unknown
|
||||
HousingEditExterior = 0x027B, // updated 5.58h
|
||||
HousingEditInterior = 0x02E3, // updated 5.58h
|
||||
|
||||
SetSharedEstateSettings = 0x00D2, // updated 5.58 hotfix
|
||||
SetSharedEstateSettings = 0x00D2, // updated 5.58h
|
||||
|
||||
UpdatePositionInstance = 0x00F8, // updated 5.58 hotfix
|
||||
UpdatePositionInstance = 0x03bd, // Updated 6.31h
|
||||
|
||||
PerformNoteHandler = 0x0243, // updated 5.58 hotfix
|
||||
PerformNoteHandler = 0x0243, // updated 5.58h
|
||||
|
||||
WorldInteractionHandler = 0x0274, // updated 5.58 hotfix
|
||||
Dive = 0x0320, // updated 5.58 hotfix
|
||||
WorldInteractionHandler = 0x0274, // updated 5.58h
|
||||
Dive = 0x018C, // updated 6.30h
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Chat Connection IPC Codes
|
||||
/**
|
||||
* Server IPC Chat Type Codes.
|
||||
*/
|
||||
* Server IPC Chat Type Codes.
|
||||
*/
|
||||
enum ServerChatIpcType : uint16_t
|
||||
{
|
||||
Tell = 0x0064, // updated for sb
|
||||
Tell = 0x0064, // updated for sb
|
||||
PublicContentTell = 0x00FB, // added 4.5, this is used when receiving a /tell in PublicContent instances such as Eureka or Bozja
|
||||
TellErrNotFound = 0x0066,
|
||||
|
||||
|
@ -440,15 +455,14 @@ namespace Sapphire::Network::Packets
|
|||
};
|
||||
|
||||
/**
|
||||
* Client IPC Chat Type Codes.
|
||||
*/
|
||||
* Client IPC Chat Type Codes.
|
||||
*/
|
||||
enum ClientChatIpcType : uint16_t
|
||||
{
|
||||
TellReq = 0x0064,
|
||||
PublicContentTellReq = 0x0326, // updated 5.35 hotfix, this is used when sending a /tell in PublicContent instances such as Eureka or Bozja
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif /*_CORE_NETWORK_PACKETS_IPCS_H*/
|
||||
|
|
|
@ -90,11 +90,12 @@ struct FFXIVIpcCharList : FFXIVIpcBasePacket< LobbyCharList >
|
|||
uint32_t padding2;
|
||||
uint16_t serverId;
|
||||
uint16_t serverId1;
|
||||
uint8_t unknown[9];
|
||||
uint8_t unknown1[16];
|
||||
char nameChara[32];
|
||||
char nameServer[32];
|
||||
char nameServer1[32];
|
||||
char charDetailJson[1051];
|
||||
char charDetailJson[1024];
|
||||
uint8_t unknown2[20];
|
||||
} charaDetails[2];
|
||||
|
||||
};
|
||||
|
|
|
@ -456,23 +456,24 @@ namespace Sapphire::Network::Packets::Server
|
|||
struct FFXIVIpcEffectResult : FFXIVIpcBasePacket< EffectResult >
|
||||
{
|
||||
uint32_t globalSequence;
|
||||
uint32_t unknown1;
|
||||
uint32_t actor_id;
|
||||
uint32_t current_hp;
|
||||
uint32_t max_hp;
|
||||
uint16_t current_mp;
|
||||
uint8_t unknown1;
|
||||
uint8_t unknown2;
|
||||
uint8_t classId;
|
||||
uint8_t shieldPercentage;
|
||||
uint8_t entryCount;
|
||||
uint16_t unknown2;
|
||||
uint16_t unknown3;
|
||||
|
||||
struct StatusEntry
|
||||
{
|
||||
uint8_t index; // which position do i display this
|
||||
uint8_t unknown3;
|
||||
uint8_t unknown4;
|
||||
uint16_t id;
|
||||
uint16_t param;
|
||||
uint16_t unknown4; // Sort this out (old right half of power/param property)
|
||||
uint16_t unknown5; // Sort this out (old right half of power/param property)
|
||||
float duration;
|
||||
uint32_t sourceActorId;
|
||||
} statusEntries[4];
|
||||
|
@ -572,7 +573,7 @@ namespace Sapphire::Network::Packets::Server
|
|||
|
||||
uint16_t padding_22[3];
|
||||
|
||||
uint8_t effects[8*8];
|
||||
uint8_t effects[65];
|
||||
|
||||
uint16_t padding_6A[3];
|
||||
|
||||
|
@ -682,6 +683,8 @@ namespace Sapphire::Network::Packets::Server
|
|||
uint16_t rotation;
|
||||
uint16_t currentMount;
|
||||
uint16_t activeMinion;
|
||||
uint8_t u23;
|
||||
uint8_t u24;
|
||||
uint8_t spawnIndex;
|
||||
uint8_t state;
|
||||
uint8_t persistentEmote;
|
||||
|
@ -700,7 +703,7 @@ namespace Sapphire::Network::Packets::Server
|
|||
uint8_t mountColor;
|
||||
uint8_t scale;
|
||||
uint8_t elementData[6];
|
||||
uint8_t unknown5_5[3];
|
||||
uint8_t unknown5_5;
|
||||
Common::StatusEffect effect[30];
|
||||
Common::FFXIVARR_POSITION3 pos;
|
||||
uint32_t models[10];
|
||||
|
@ -756,6 +759,8 @@ namespace Sapphire::Network::Packets::Server
|
|||
uint16_t rotation;
|
||||
uint16_t currentMount;
|
||||
uint16_t activeMinion;
|
||||
uint8_t u23;
|
||||
uint8_t u24;
|
||||
uint8_t spawnIndex;
|
||||
uint8_t state;
|
||||
uint8_t persistantEmote;
|
||||
|
@ -774,7 +779,7 @@ namespace Sapphire::Network::Packets::Server
|
|||
uint8_t mountColor;
|
||||
uint8_t scale;
|
||||
uint8_t elemental[6];
|
||||
uint8_t unknown5_5[3];
|
||||
uint8_t unknown5_5;
|
||||
Common::StatusEffect effect[30];
|
||||
Common::FFXIVARR_POSITION3 pos;
|
||||
uint32_t models[10];
|
||||
|
@ -927,13 +932,13 @@ namespace Sapphire::Network::Packets::Server
|
|||
//Current instance can be confirmed at any time using the /instance text command." ( 7B F8 69 )
|
||||
|
||||
uint8_t unknown5;
|
||||
uint32_t unknown7;
|
||||
uint32_t unknown8;
|
||||
uint16_t festivalId;
|
||||
uint16_t additionalFestivalId;
|
||||
uint32_t unknown9;
|
||||
uint32_t unknown10;
|
||||
uint32_t festivalId;
|
||||
uint32_t unknown12[3];
|
||||
uint32_t additionalFestivalId;
|
||||
uint32_t unknown11;
|
||||
uint32_t unknown12[4];
|
||||
uint32_t unknown13[3];
|
||||
Common::FFXIVARR_POSITION3 pos;
|
||||
uint32_t unknown14[3];
|
||||
|
@ -950,171 +955,154 @@ namespace Sapphire::Network::Packets::Server
|
|||
// plain C types for a bit until the packet is actually fixed.
|
||||
// makes conversion between different editors easier.
|
||||
uint64_t contentId;
|
||||
unsigned int unknown8;
|
||||
unsigned int unknownC;
|
||||
unsigned int charId;
|
||||
unsigned int restedExp;
|
||||
unsigned int companionCurrentExp;
|
||||
unsigned int unknown1C;
|
||||
unsigned int fishCaught;
|
||||
unsigned int useBaitCatalogId;
|
||||
unsigned int unknown28;
|
||||
unsigned short unknownPvp2C;
|
||||
unsigned short unknown3;
|
||||
unsigned int pvpFrontlineOverallCampaigns;
|
||||
unsigned int unknownTimestamp34;
|
||||
unsigned int unknownTimestamp38;
|
||||
unsigned int unknown3C;
|
||||
unsigned int unknown40;
|
||||
unsigned int unknown44;
|
||||
uint64_t crest;
|
||||
uint32_t charId;
|
||||
uint32_t restedExp;
|
||||
uint32_t companionCurrentExp;
|
||||
uint32_t unknown1C;
|
||||
uint32_t fishCaught;
|
||||
uint32_t useBaitCatalogId;
|
||||
uint32_t unknown28;
|
||||
uint16_t unknownPvp2C;
|
||||
uint16_t unknown2E;
|
||||
uint32_t pvpFrontlineOverallCampaigns;
|
||||
uint32_t unknownTimestamp34;
|
||||
uint32_t unknownTimestamp38;
|
||||
uint32_t unknown3C;
|
||||
uint32_t unknown40;
|
||||
uint32_t unknown44;
|
||||
float companionTimePassed;
|
||||
unsigned int unknown4C;
|
||||
unsigned short unknown50;
|
||||
unsigned short unknownPvp52[4];
|
||||
unsigned short playerCommendations;
|
||||
unsigned short unknown5C;
|
||||
unsigned short unknown5E;
|
||||
unsigned short pvpFrontlineWeeklyCampaigns;
|
||||
unsigned short enhancedAnimaGlassProgress;
|
||||
unsigned short unknown64[4];
|
||||
unsigned short pvpRivalWingsTotalMatches;
|
||||
unsigned short pvpRivalWingsTotalVictories;
|
||||
unsigned short pvpRivalWingsWeeklyMatches;
|
||||
unsigned short pvpRivalWingsWeeklyVictories;
|
||||
unsigned char maxLevel;
|
||||
unsigned char expansion;
|
||||
unsigned char unknown76;
|
||||
unsigned char unknown77;
|
||||
unsigned char very_unknown;
|
||||
unsigned char race;
|
||||
unsigned char tribe;
|
||||
unsigned char gender;
|
||||
unsigned char currentJob;
|
||||
unsigned char currentClass;
|
||||
unsigned char deity;
|
||||
unsigned char namedayMonth;
|
||||
unsigned char namedayDay;
|
||||
unsigned char cityState;
|
||||
unsigned char homepoint;
|
||||
unsigned char unknown82;
|
||||
unsigned char petHotBar;
|
||||
unsigned char companionRank;
|
||||
unsigned char companionStars;
|
||||
unsigned char companionSp;
|
||||
unsigned char companionUnk86;
|
||||
unsigned char companionColor;
|
||||
unsigned char companionFavoFeed;
|
||||
unsigned char unknown89;
|
||||
unsigned char unknown8A[4];
|
||||
unsigned char hasRelicBook;
|
||||
unsigned char relicBookId;
|
||||
unsigned char unknown90[4];
|
||||
unsigned char craftingMasterMask;
|
||||
unsigned char unknown95[9];
|
||||
unsigned char unknown9F[2];
|
||||
unsigned char unknownA1[6];
|
||||
unsigned int exp[Common::CLASSJOB_SLOTS];
|
||||
unsigned int unknown108;
|
||||
unsigned int pvpTotalExp;
|
||||
unsigned int unknownPvp110;
|
||||
unsigned int pvpExp;
|
||||
unsigned int pvpFrontlineOverallRanks[3];
|
||||
unsigned short levels[Common::CLASSJOB_SLOTS];
|
||||
/*
|
||||
unsigned short unknown15C[9];
|
||||
unsigned short u1;
|
||||
unsigned short u2;
|
||||
unsigned short unknown112[23];
|
||||
unsigned short fishingRecordsFish[26];
|
||||
unsigned short beastExp[11];
|
||||
unsigned short unknown1EA[5];
|
||||
unsigned short pvpFrontlineWeeklyRanks[3];
|
||||
unsigned short unknownMask1FA[4];
|
||||
unsigned char companionName[21];
|
||||
unsigned char companionDefRank;
|
||||
unsigned char companionAttRank;
|
||||
unsigned char companionHealRank;
|
||||
unsigned char u19[8];
|
||||
unsigned char mountGuideMask[22];
|
||||
unsigned char u19_2;
|
||||
*/
|
||||
unsigned char unknown5_55a[178];
|
||||
unsigned char companionName[21];
|
||||
unsigned char companionDefRank;
|
||||
unsigned char companionAttRank;
|
||||
unsigned char companionHealRank;
|
||||
unsigned char mountGuideMask[29];
|
||||
//==
|
||||
uint32_t unknown4C;
|
||||
uint16_t unknown50;
|
||||
uint16_t unknownPvp52[4];
|
||||
uint16_t pvpSeriesExp;
|
||||
uint16_t playerCommendations;
|
||||
uint16_t unknown5C;
|
||||
uint16_t unknown5E;
|
||||
uint16_t pvpFrontlineWeeklyCampaigns;
|
||||
uint16_t enhancedAnimaGlassProgress;
|
||||
uint16_t unknown64[4];
|
||||
uint16_t pvpRivalWingsTotalMatches;
|
||||
uint16_t pvpRivalWingsTotalVictories;
|
||||
uint16_t pvpRivalWingsWeeklyMatches;
|
||||
uint16_t pvpRivalWingsWeeklyVictories;
|
||||
uint8_t maxLevel;
|
||||
uint8_t expansion;
|
||||
uint8_t unknown76;
|
||||
uint8_t unknown77;
|
||||
uint8_t unknown78;
|
||||
uint8_t race;
|
||||
uint8_t tribe;
|
||||
uint8_t gender;
|
||||
uint8_t currentJob;
|
||||
uint8_t currentClass;
|
||||
uint8_t deity;
|
||||
uint8_t namedayMonth;
|
||||
uint8_t namedayDay;
|
||||
uint8_t cityState;
|
||||
uint8_t homepoint;
|
||||
uint8_t unknown83;
|
||||
uint8_t petHotBar;
|
||||
uint8_t companionRank;
|
||||
uint8_t companionStars;
|
||||
uint8_t companionSp;
|
||||
uint8_t companionUnk86;
|
||||
uint8_t companionColor;
|
||||
uint8_t companionFavFeed;
|
||||
uint8_t favAetheryteCount;
|
||||
uint8_t unknown8C[4];
|
||||
uint8_t hasRelicBook;
|
||||
uint8_t relicBookId;
|
||||
uint8_t sightseeing21To80Unlock;
|
||||
uint8_t sightseeingHeavenswardUnlock;
|
||||
uint8_t unknown94[2];
|
||||
uint8_t craftingMasterMask;
|
||||
uint8_t unknown97[9];
|
||||
uint8_t unknownA0[3];
|
||||
uint8_t pvpSeriesLevel;
|
||||
uint8_t pvpMalmstonesClaimed;
|
||||
uint8_t lastSeasonMalmstonesEarned;
|
||||
uint8_t lastSeasonMalmstonesClaimed;
|
||||
uint8_t unknownA7[7];
|
||||
uint32_t exp[30];
|
||||
uint32_t pvpTotalExp;
|
||||
uint32_t unknownPvp124;
|
||||
uint32_t pvpExp;
|
||||
uint32_t pvpFrontlineOverallRanks[3];
|
||||
uint32_t unknown138;
|
||||
uint16_t levels[30];
|
||||
uint16_t unknown178[8];
|
||||
uint16_t fishingRecordsFishId[33];
|
||||
uint16_t fishingRecordsFishLength[33];
|
||||
uint16_t beastExp[17];
|
||||
uint16_t unknown21C[6];
|
||||
uint16_t pvpFrontlineWeeklyRanks[3];
|
||||
uint16_t unknownMask22C[8];
|
||||
uint8_t companionName[21];
|
||||
uint8_t companionDefRank;
|
||||
uint8_t companionAttRank;
|
||||
uint8_t companionHealRank;
|
||||
uint8_t mountGuideMask[33];
|
||||
uint8_t ornamentMask[4];
|
||||
uint8_t unknown281[13];
|
||||
char name[32];
|
||||
unsigned char unknownOword[16];
|
||||
unsigned char unknownOw;
|
||||
unsigned char unlockBitmask[64];
|
||||
unsigned char aetheryte[21];
|
||||
unsigned char discovery[445];
|
||||
unsigned char howto[34];
|
||||
unsigned char minions[55];
|
||||
unsigned char chocoboTaxiMask[10];
|
||||
unsigned char watchedCutscenes[137];
|
||||
unsigned char companionBardingMask[11];
|
||||
unsigned char companionEquippedHead;
|
||||
unsigned char companionEquippedBody;
|
||||
unsigned char companionEquippedLegs;
|
||||
/*
|
||||
unsigned char unknown52A[4];
|
||||
unsigned char unknownMask52E[11];
|
||||
unsigned char fishingGuideMask[105];
|
||||
unsigned char fishingSpotVisited[31];
|
||||
unsigned char unknown59A[27];
|
||||
unsigned char unknown5A9[7];
|
||||
unsigned char beastRank[11];
|
||||
unsigned char unknownPvp5AB[11];
|
||||
unsigned char unknown5B9[5];
|
||||
*/
|
||||
unsigned char unknown5_45b[236];
|
||||
//==
|
||||
unsigned char pose;
|
||||
/*
|
||||
unsigned char unknown5B91;
|
||||
unsigned char challengeLogComplete[9];
|
||||
unsigned char weaponPose;
|
||||
unsigned char unknownMask673[10];
|
||||
unsigned char unknownMask5DD[28];
|
||||
unsigned char relicCompletion[12];
|
||||
unsigned char sightseeingMask[26];
|
||||
unsigned char huntingMarkMask[55];
|
||||
unsigned char tripleTriadCards[32];
|
||||
unsigned char u12[11];
|
||||
unsigned char u13;
|
||||
unsigned char aetherCurrentMask[22];
|
||||
unsigned char u10[3];
|
||||
*/
|
||||
unsigned char unknown5_55b[295];
|
||||
//==
|
||||
unsigned char orchestrionMask[40]; // this field may already be extended, if it is, the beginning bytes are at the end of unknown5_55b
|
||||
unsigned char hallOfNoviceCompletion[3];
|
||||
unsigned char animaCompletion[11];
|
||||
unsigned char unknown5_55c[35];
|
||||
unsigned char unlockedRaids[28];
|
||||
unsigned char unlockedDungeons[18];
|
||||
unsigned char unlockedGuildhests[10];
|
||||
/*
|
||||
at least 8 bytes at most 10 bytes in unlockedTrials not confirmed, adjust unlockedPvp so they share a total of 15 bytes and sync with clearedTrials/clearedPvp.
|
||||
*/
|
||||
unsigned char unlockedTrials[9];
|
||||
unsigned char unlockedPvp[6];
|
||||
//==
|
||||
unsigned char clearedRaids[28];
|
||||
unsigned char clearedDungeons[18];
|
||||
unsigned char clearedGuildhests[10];
|
||||
unsigned char clearedTrials[9];
|
||||
unsigned char clearedPvp[6];
|
||||
/*
|
||||
unsigned short fishingRecordsFishWeight[26];
|
||||
unsigned int exploratoryMissionNextTimestamp;
|
||||
unsigned char pvpLevel;
|
||||
*/
|
||||
unsigned char unknown5_55d[9];
|
||||
//==
|
||||
uint8_t unknown293[16];
|
||||
uint8_t unknown2A3;
|
||||
uint8_t unlockBitmask[64];
|
||||
uint8_t aetheryte[26];
|
||||
uint8_t favoriteAetheryteIds[4];
|
||||
uint8_t freeAetheryteId;
|
||||
uint8_t discovery[472];
|
||||
uint8_t howto[36];
|
||||
uint8_t minions[60];
|
||||
uint8_t chocoboTaxiMask[12];
|
||||
uint8_t watchedCutscenes[152];
|
||||
uint8_t companionBardingMask[12];
|
||||
uint8_t companionEquippedHead;
|
||||
uint8_t companionEquippedBody;
|
||||
uint8_t companionEquippedLegs;
|
||||
uint8_t unknown5D1[4];
|
||||
uint8_t unknownMask5D5[11];
|
||||
uint8_t fishingGuideMask[161];
|
||||
uint8_t fishingSpotVisited[38];
|
||||
uint8_t unknown694[34];
|
||||
uint8_t unknown6B6[7];
|
||||
uint8_t unknownPvp6BD[3];
|
||||
uint8_t beastRank[17];
|
||||
uint8_t unknownPvp6CE[12];
|
||||
uint8_t pose[7];
|
||||
uint8_t unknown6DF[3];
|
||||
uint8_t challengeLogComplete[13];
|
||||
uint8_t secretRecipeBookMask[10];
|
||||
uint8_t unknownMask6F7[29];
|
||||
uint8_t relicCompletion[12];
|
||||
uint8_t sightseeingMask[37];
|
||||
uint8_t huntingMarkMask[102];
|
||||
uint8_t tripleTriadCards[45];
|
||||
uint8_t unknown7D7[14];
|
||||
uint8_t unknown7D8;
|
||||
uint8_t unknown7E6[49];
|
||||
uint8_t regionalFolkloreMask[6];
|
||||
uint8_t orchestrionMask[75];
|
||||
uint8_t hallOfNoviceCompletion[3];
|
||||
uint8_t animaCompletion[11];
|
||||
uint8_t unknown85E[16];
|
||||
uint8_t unknown86E[4];
|
||||
uint8_t unknown872[18];
|
||||
uint8_t unknown880;
|
||||
uint8_t unlockedRaids[28];
|
||||
uint8_t unlockedDungeons[18];
|
||||
uint8_t unlockedGuildhests[10];
|
||||
uint8_t unlockedTrials[11];
|
||||
uint8_t unlockedPvp[5];
|
||||
uint8_t clearedRaids[28];
|
||||
uint8_t clearedDungeons[18];
|
||||
uint8_t clearedGuildhests[10];
|
||||
uint8_t clearedTrials[11];
|
||||
uint8_t clearedPvp[5];
|
||||
uint8_t unknown948[4];
|
||||
uint8_t unknown94C[2];
|
||||
uint8_t unknown94E[2];
|
||||
};
|
||||
|
||||
|
||||
|
@ -1877,15 +1865,15 @@ namespace Sapphire::Network::Packets::Server
|
|||
struct FFXIVIpcHousingLandFlags : FFXIVIpcBasePacket< HousingLandFlags >
|
||||
{
|
||||
Common::LandFlagSet freeCompanyHouse; // 00
|
||||
uint64_t unkown1;
|
||||
uint64_t unknown1;
|
||||
Common::LandFlagSet privateHouse; // 24
|
||||
uint64_t unkown2;
|
||||
uint64_t unknown2;
|
||||
Common::LandFlagSet apartment; // 48
|
||||
uint64_t unkown3;
|
||||
uint64_t unknown3;
|
||||
Common::LandFlagSet sharedHouse[2]; //72
|
||||
uint64_t unkown4;
|
||||
Common::LandFlagSet unkownHouse;
|
||||
uint64_t unkown5;
|
||||
uint64_t unknown4;
|
||||
Common::LandFlagSet unknownHouse;
|
||||
uint64_t unknown5;
|
||||
};
|
||||
|
||||
//Structs
|
||||
|
|
|
@ -452,8 +452,8 @@ void Lobby::GameConnection::generateEncryptionKey( uint32_t key, const std::stri
|
|||
m_baseKey[ 2 ] = 0x34;
|
||||
m_baseKey[ 3 ] = 0x12;
|
||||
memcpy( m_baseKey + 0x04, &key, 4 );
|
||||
m_baseKey[ 8 ] = 0x18;
|
||||
m_baseKey[ 9 ] = 0x15;
|
||||
m_baseKey[ 8 ] = 0xD4;
|
||||
m_baseKey[ 9 ] = 0x17;
|
||||
memcpy( ( char* ) m_baseKey + 0x0C, keyPhrase.c_str(), keyPhrase.size() );
|
||||
Common::Util::md5( m_baseKey, m_encKey, 0x2C );
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ int main( int argc, char** argv )
|
|||
result += generateEnum( "ActionCategory", 0, "uint8_t" );
|
||||
result += generateEnum( "BaseParam", 1, "uint8_t" );
|
||||
result += generateEnum( "BeastReputationRank", 1, "uint8_t" );
|
||||
result += generateEnum( "BeastTribe", 11, "uint8_t" );
|
||||
result += generateEnum( "BeastTribe", 9, "uint8_t" );
|
||||
result += generateEnum( "ClassJob", 0, "uint8_t" );
|
||||
result += generateEnum( "ContentType", 0, "uint8_t" );
|
||||
result += generateEnum( "EmoteCategory", 0, "uint8_t" );
|
||||
|
@ -127,7 +127,7 @@ int main( int argc, char** argv )
|
|||
result += generateEnum( "GuardianDeity", 0, "uint8_t" );
|
||||
result += generateEnum( "ItemUICategory", 0, "uint8_t" );
|
||||
result += generateEnum( "ItemSearchCategory", 0, "uint8_t" );
|
||||
result += generateEnum( "OnlineStatus", 2, "uint8_t" );
|
||||
result += generateEnum( "OnlineStatus", 3, "uint8_t" );
|
||||
result += generateEnum( "Race", 1, "uint8_t" );
|
||||
result += generateEnum( "Tribe", 0, "uint8_t" );
|
||||
result += generateEnum( "Town", 0, "uint8_t" );
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
|
||||
struct PCB_HEADER
|
||||
{
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
|
||||
struct PCB_HEADER
|
||||
{
|
||||
|
|
|
@ -176,7 +176,7 @@ bool Sapphire::Entity::Player::isActingAsGm() const
|
|||
{
|
||||
auto status = getOnlineStatus();
|
||||
return status == OnlineStatus::GameMaster || status == OnlineStatus::GameMaster1 ||
|
||||
status == OnlineStatus::GameMaster2;
|
||||
status == OnlineStatus::GameQA;
|
||||
}
|
||||
|
||||
uint8_t Sapphire::Entity::Player::getMode() const
|
||||
|
|
|
@ -1097,21 +1097,21 @@ namespace Sapphire::Entity
|
|||
|
||||
uint16_t m_activeTitle;
|
||||
uint8_t m_titleList[48];
|
||||
uint8_t m_howTo[34];
|
||||
uint8_t m_minions[55];
|
||||
uint8_t m_howTo[35];
|
||||
uint8_t m_minions[56];
|
||||
uint8_t m_mountGuide[29];
|
||||
uint8_t m_homePoint;
|
||||
uint8_t m_startTown;
|
||||
uint16_t m_townWarpFstFlags;
|
||||
uint8_t m_questCompleteFlags[487];
|
||||
uint8_t m_discovery[445];
|
||||
uint8_t m_discovery[464];
|
||||
uint32_t m_playTime;
|
||||
|
||||
uint16_t m_classArray[ Common::CLASSJOB_SLOTS ];
|
||||
uint32_t m_expArray[ Common::CLASSJOB_SLOTS ];
|
||||
uint8_t m_aetheryte[21];
|
||||
uint8_t m_unlocks[64];
|
||||
uint8_t m_orchestrion[40];
|
||||
uint8_t m_orchestrion[64];
|
||||
|
||||
uint8_t m_openingSequence;
|
||||
|
||||
|
|
|
@ -1070,8 +1070,8 @@ bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t opti
|
|||
|
||||
exp = questInfo->expFactor;
|
||||
|
||||
auto rewardItemCount = questInfo->itemReward0.size();
|
||||
uint16_t optionalItemCount = static_cast< uint16_t >( questInfo->itemReward1.size() );
|
||||
auto rewardItemCount = questInfo->itemReward.size();
|
||||
uint16_t optionalItemCount = static_cast< uint16_t >( questInfo->optionalItemReward.size() );
|
||||
|
||||
uint32_t gilReward = questInfo->gilReward;
|
||||
|
||||
|
@ -1083,29 +1083,22 @@ bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t opti
|
|||
{
|
||||
for( uint32_t i = 0; i < rewardItemCount; i++ )
|
||||
{
|
||||
auto itemId = questInfo->itemReward0.at( i );
|
||||
auto itemId = questInfo->itemReward.at( i );
|
||||
if( itemId > 0 )
|
||||
{
|
||||
addItem( itemId, questInfo->itemCountReward0.at( i ), false, false, true, true );
|
||||
addItem( itemId, questInfo->itemCountReward.at( i ), false, false, true, true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto isHq = false;
|
||||
if( optionalChoice > 1000000 )
|
||||
{
|
||||
optionalChoice -= 1000000;
|
||||
isHq = true;
|
||||
}
|
||||
|
||||
if( optionalItemCount > 0 )
|
||||
{
|
||||
for( uint32_t i = 0; i < optionalItemCount; i++ )
|
||||
{
|
||||
auto itemId = questInfo->itemReward1.at( i );
|
||||
auto itemId = questInfo->optionalItemReward.at( i );
|
||||
if( itemId > 0 && itemId == optionalChoice )
|
||||
{
|
||||
addItem( itemId, questInfo->itemCountReward1.at( i ), isHq, false, true, true );
|
||||
addItem( itemId, questInfo->optionalItemCountReward.at( i ), false, false, true, true );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace Sapphire::Network::Packets::Server
|
|||
//m_data.gcRank = GCRank::None;
|
||||
|
||||
m_data.homepoint = player.getHomepoint();
|
||||
m_data.pose = player.getPose();
|
||||
m_data.pose[0] = player.getPose();
|
||||
|
||||
memset( &m_data.name[ 0 ], 0, sizeof( m_data.name ) );
|
||||
strcpy( &m_data.name[ 0 ], player.getName().c_str() );
|
||||
|
|
|
@ -62,6 +62,8 @@ bool Sapphire::HousingZone::init()
|
|||
housingIndex = 2;
|
||||
else if( m_territoryTypeId == 641 )
|
||||
housingIndex = 3;
|
||||
else if (m_territoryTypeId == 979 )
|
||||
housingIndex = 4;
|
||||
|
||||
auto& exdData = Common::Service< Data::ExdDataGenerated >::ref();
|
||||
auto info = exdData.get< Sapphire::Data::HousingLandSet >( housingIndex );
|
||||
|
|
Loading…
Add table
Reference in a new issue