From cf1365a5d0c6d239b9f0fd523778554fbf46f2d0 Mon Sep 17 00:00:00 2001 From: Adam <893184+NotAdam@users.noreply.github.com> Date: Tue, 19 Sep 2017 23:33:49 +0900 Subject: [PATCH 1/3] Fix indent --- src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index 2d9c3d2a..e98e19ef 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -40,7 +40,6 @@ extern Core::ServerZone g_serverZone; // instanciate and initialize commands Core::DebugCommandHandler::DebugCommandHandler() { - // Push all commands onto the register map ( command name - function - description - required GM level ) registerCommand( "set", &DebugCommandHandler::set, "Loads and injects a premade Packet.", 1 ); registerCommand( "get", &DebugCommandHandler::get, "Loads and injects a premade Packet.", 1 ); @@ -213,8 +212,8 @@ void Core::DebugCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlaye else if( ( subCommand == "unlockaetheryte" ) && ( params != "" ) ) { - for( uint8_t i = 0; i < 255; i++ ) - pPlayer->registerAetheryte( i ); + for( uint8_t i = 0; i < 255; i++ ) + pPlayer->registerAetheryte( i ); } else if( ( subCommand == "discovery" ) && ( params != "" ) ) From 2324dc813cd211b317919a8898f6f755c7e34619 Mon Sep 17 00:00:00 2001 From: Adam <893184+NotAdam@users.noreply.github.com> Date: Fri, 22 Sep 2017 22:03:57 +0900 Subject: [PATCH 2/3] Implement offseting eorzean time Usage: @set eorzeatime time --- src/servers/Server_Common/Network/PacketDef/Ipcs.h | 1 + .../Network/PacketDef/Zone/ServerZoneDef.h | 5 +++++ src/servers/Server_Zone/Actor/Player.cpp | 13 ++++++++++++- src/servers/Server_Zone/Actor/Player.h | 4 ++++ .../DebugCommand/DebugCommandHandler.cpp | 11 +++++++++-- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/servers/Server_Common/Network/PacketDef/Ipcs.h b/src/servers/Server_Common/Network/PacketDef/Ipcs.h index d18c36f6..b4ade11c 100644 --- a/src/servers/Server_Common/Network/PacketDef/Ipcs.h +++ b/src/servers/Server_Common/Network/PacketDef/Ipcs.h @@ -116,6 +116,7 @@ namespace Packets { WeatherChange = 0x01AF, // updated for sb Discovery = 0x01B2, // updated for sb + EorzeaTimeOffset = 0x01B4, CFAvailableContents = 0x01CF, diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index c1c2388f..10a34cd0 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1281,6 +1281,11 @@ struct FFXIVIpcCFMemberStatus : FFXIVIpcBasePacket uint32_t unknown3; }; +struct FFXIVIpcEorzeaTimeOffset : FFXIVIpcBasePacket +{ + uint64_t timestamp; +}; + } /* Server */ diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index ed6af547..49bc2ad3 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -1667,4 +1667,15 @@ void Core::Entity::Player::setOpeningSequence( uint8_t seq ) { setSyncFlag( OpeningSeq ); m_openingSequence = seq; -} \ No newline at end of file +} + +/// Tells client to offset their eorzean time by given timestamp. +void Core::Entity::Player::setEorzeaTimeOffset( uint64_t timestamp ) +{ + // TODO: maybe change to persistent? + GamePacketNew< FFXIVIpcEorzeaTimeOffset, ServerZoneIpcType > packet ( getId() ); + packet.data().timestamp = timestamp; + + // Send to single player + queuePacket( packet ); +} diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index a34d8a46..907a5916 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -499,6 +499,10 @@ public: uint32_t getCFPenaltyMinutes() const; void setCFPenaltyMinutes( uint32_t minutes ); + + void setEorzeaTimeOffset( uint64_t timestamp ); + + private: uint32_t m_lastWrite; uint32_t m_lastPing; diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index e9eb2aa7..f8a66d7a 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -254,18 +254,25 @@ void Core::DebugCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlaye else if( subCommand == "aaah" ) { int32_t id; - sscanf( params.c_str(), "%d", &id ); + pPlayer->sendDebug( std::to_string( pPlayer->actionHasCastTime( id ) ) ); } else if ( subCommand == "cfpenalty" ) { int32_t minutes; - sscanf( params.c_str(), "%d", &minutes ); pPlayer->setCFPenaltyMinutes( minutes ); } + else if ( subCommand == "eorzeatime" ) + { + uint64_t timestamp; + sscanf(params.c_str(), "%llu", ×tamp); + + pPlayer->setEorzeaTimeOffset( timestamp ); + pPlayer->sendNotice( "Eorzea time offset: " + std::to_string( timestamp ) ); + } } From 5ee34117cee18a0b6384382d0294131232d53c10 Mon Sep 17 00:00:00 2001 From: Mordred <30826167+SapphireMordred@users.noreply.github.com> Date: Fri, 22 Sep 2017 15:38:32 +0200 Subject: [PATCH 3/3] Update DebugCommandHandler.cpp --- src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index f8a66d7a..6a4f6e84 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -268,7 +268,7 @@ void Core::DebugCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlaye else if ( subCommand == "eorzeatime" ) { uint64_t timestamp; - sscanf(params.c_str(), "%llu", ×tamp); + sscanf( params.c_str(), "%llu", ×tamp ); pPlayer->setEorzeaTimeOffset( timestamp ); pPlayer->sendNotice( "Eorzea time offset: " + std::to_string( timestamp ) );