1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-01 16:37:45 +00:00

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Minho Kang 2017-08-18 23:51:33 +09:00
commit cae5b09744
19 changed files with 181 additions and 239 deletions

View file

@ -2,16 +2,14 @@ cmake_minimum_required(VERSION 2.6)
project (Sapphire)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)
# boost stuff
if("x${CMAKE_CXX_COMPILER_ID}" STREQUAL "xMSVC")
set(Boost_COMPILER "-vc140")
endif()
# set(Boost_DEBUG 1)
if(NOT SAPPHIRE_BOOST_VER)
set(SAPPHIRE_BOOST_VER 1.60.0)
@ -20,6 +18,6 @@ set(SAPPHIRE_BOOST_FOLDER_NAME boost_1_60_0)
include_directories("${PROJECT_INCLUDE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}")
add_subdirectory("src/servers")
add_subdirectory("src/libraries/sapphire/datReader")

View file

@ -8,7 +8,7 @@ if(UNIX)
include_directories("/usr/include/mysql/")
message(STATUS "Setting GCC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
find_package(Boost ${SAPPHIRE_BOOST_VER} COMPONENTS log log_setup thread date_time filesystem system)
if(Boost_FOUND)
set(BOOST_LIBRARY_DIR ${Boost_LIBRARY_DIR})
@ -26,6 +26,7 @@ else()
message(STATUS "Setting MSVC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/external/${SAPPHIRE_BOOST_FOLDER_NAME})
message(STATUS "Using boost in /libraries/external")

View file

@ -94,7 +94,7 @@ void Core::Network::Packets::GamePacket::savePacket()
}
std::string Core::Network::Packets::GamePacket::toString()
std::string Core::Network::Packets::GamePacket::toString() const
{
std::string str = "\n";

View file

@ -20,17 +20,17 @@ public:
GamePacket( void );
~GamePacket( void );
uint16_t getSize()
uint16_t getSize() const
{
return m_segHdr.size;
}
uint16_t getType()
uint16_t getType() const
{
return m_segHdr.type;
}
uint16_t getSubType()
uint16_t getSubType() const
{
return m_subType;
}
@ -42,9 +42,9 @@ public:
}
template<class T>
T getValAt( uint16_t pos )
T getValAt( uint16_t pos ) const
{
return *reinterpret_cast< T* >( &m_dataBuf[0] + pos );
return *reinterpret_cast< const T* >( &m_dataBuf[0] + pos );
}
void setBytesAt( uint16_t offset, uint8_t * bytes, uint16_t length )
@ -52,9 +52,9 @@ public:
memcpy( reinterpret_cast< uint8_t* >( &m_dataBuf[0] + offset ), bytes, length );
}
char * getStringAt( uint16_t pos )
const char * getStringAt( uint16_t pos ) const
{
return reinterpret_cast< char* >( &m_dataBuf[0] + pos );
return reinterpret_cast< const char* >( &m_dataBuf[0] + pos );
}
void setStringAt( uint16_t pos, const std::string& str )
@ -69,7 +69,7 @@ public:
void setHeader( uint16_t size, uint16_t type, uint32_t id1, uint32_t id2, uint16_t subType, uint32_t unknown = 0xFED2E000 );
std::string toString();
std::string toString() const;
void savePacket();

View file

@ -16,7 +16,7 @@ if(UNIX)
include_directories("/usr/include/mysql/")
message(STATUS "Setting GCC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
find_package(Boost ${SAPPHIRE_BOOST_VER} COMPONENTS log log_setup thread date_time filesystem system)
if(Boost_FOUND)
set(BOOST_LIBRARY_DIR ${Boost_LIBRARY_DIR})
@ -36,6 +36,7 @@ else()
message(STATUS "Setting MSVC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/external/${SAPPHIRE_BOOST_FOLDER_NAME})
message(STATUS "Using boost in /libraries/external")

View file

@ -104,7 +104,7 @@ void BlowFish::initialize (BYTE key[], int32_t keybytes)
int32_t v10 = keybytes;
int32_t v9 = (uintptr_t)key;
uintptr_t v9 = (uintptr_t)key;
int32_t v8 = 0;
int32_t v11 = 0;
do {

View file

@ -16,7 +16,7 @@ if(UNIX)
include_directories("/usr/include/mysql/")
message(STATUS "Setting GCC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
find_package(Boost ${SAPPHIRE_BOOST_VER} COMPONENTS log log_setup thread date_time filesystem system)
if(Boost_FOUND)
set(BOOST_LIBRARY_DIR ${Boost_LIBRARY_DIR})
@ -36,6 +36,7 @@ else()
message(STATUS "Setting MSVC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/external/${SAPPHIRE_BOOST_FOLDER_NAME})
message(STATUS "Using boost in /src/lib")

View file

@ -54,15 +54,15 @@ using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
void Core::Network::GameConnection::actionHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint16_t commandId = pInPacket->getValAt< uint16_t >( 0x20 );
uint64_t param1 = pInPacket->getValAt< uint64_t >( 0x24 );
uint32_t param11 = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t param12 = pInPacket->getValAt< uint32_t >( 0x28 );
uint32_t param2 = pInPacket->getValAt< uint32_t >( 0x2c );
uint64_t param3 = pInPacket->getValAt< uint64_t >( 0x38 );
uint16_t commandId = inPacket.getValAt< uint16_t >( 0x20 );
uint64_t param1 = inPacket.getValAt< uint64_t >( 0x24 );
uint32_t param11 = inPacket.getValAt< uint32_t >( 0x24 );
uint32_t param12 = inPacket.getValAt< uint32_t >( 0x28 );
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x2c );
uint64_t param3 = inPacket.getValAt< uint64_t >( 0x38 );
g_log.debug( "[" + std::to_string( m_pSession->getId() ) + "] Incoming action: " +
boost::str( boost::format( "%|04X|" ) % ( uint32_t ) ( commandId & 0xFFFF ) ) +
@ -107,7 +107,7 @@ void Core::Network::GameConnection::actionHandler( Core::Network::Packets::GameP
case 0x03: // Change target
{
uint64_t targetId = pInPacket->getValAt< uint64_t >( 0x24 );
uint64_t targetId = inPacket.getValAt< uint64_t >( 0x24 );
pPlayer->changeTarget( targetId );
break;
}
@ -121,7 +121,7 @@ void Core::Network::GameConnection::actionHandler( Core::Network::Packets::GameP
case 0x1F4: // emote
{
uint64_t targetId = pPlayer->getTargetId();
uint32_t emoteId = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t emoteId = inPacket.getValAt< uint32_t >( 0x24 );
pPlayer->sendToInRangeSet( ActorControlPacket144( pPlayer->getId(), Emote, emoteId, 0, 0, 0, targetId ) );
break;

View file

@ -1,61 +1,38 @@
#include <Server_Common/Common.h>
#include <Server_Common/CommonNetwork.h>
#include <Server_Common/Database.h>
#include <Server_Common/GamePacketNew.h>
#include <Server_Common/Logger.h>
#include <Server_Common/ExdData.h>
#include <Server_Common/PacketContainer.h>
#include <boost/format.hpp>
#include "GameConnection.h"
#include "Session.h"
#include "Zone.h"
#include "ZonePosition.h"
#include "ServerZone.h"
#include "ZoneMgr.h"
#include "InitUIPacket.h"
#include "PingPacket.h"
#include "MoveActorPacket.h"
#include "ChatPacket.h"
#include "ServerNoticePacket.h"
#include "ActorControlPacket142.h"
#include "ActorControlPacket143.h"
#include "ActorControlPacket144.h"
#include "EventStartPacket.h"
#include "EventFinishPacket.h"
#include "PlayerStateFlagsPacket.h"
#include "GameCommandHandler.h"
#include "Player.h"
#include "Inventory.h"
#include "Forwards.h"
#include "EventHelper.h"
#include "Action.h"
#include "ActionTeleport.h"
extern Core::Logger g_log;
extern Core::Db::Database g_database;
extern Core::ServerZone g_serverZone;
extern Core::ZoneMgr g_zoneMgr;
extern Core::Data::ExdData g_exdData;
extern Core::GameCommandHandler g_gameCommandMgr;
using namespace Core::Common;
using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
void Core::Network::GameConnection::cfDutyInfoRequest(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
void Core::Network::GameConnection::cfDutyInfoRequest( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
GamePacketNew< FFXIVIpcCFDutyInfo > dutyInfoPacket( pPlayer->getId() );
queueOutPacket( dutyInfoPacket );
@ -65,15 +42,15 @@ void Core::Network::GameConnection::cfDutyInfoRequest(Core::Network::Packets::Ga
}
void Core::Network::GameConnection::cfRegisterDuty(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer)
{
// TODO use for loop for this
auto contentId1 = pInPacket->getValAt< uint16_t >( 46 );
auto contentId2 = pInPacket->getValAt< uint16_t >( 48 );
auto contentId3 = pInPacket->getValAt< uint16_t >( 50 );
auto contentId4 = pInPacket->getValAt< uint16_t >( 52 );
auto contentId5 = pInPacket->getValAt< uint16_t >( 54 );
auto contentId1 = inPacket.getValAt< uint16_t >( 46 );
auto contentId2 = inPacket.getValAt< uint16_t >( 48 );
auto contentId3 = inPacket.getValAt< uint16_t >( 50 );
auto contentId4 = inPacket.getValAt< uint16_t >( 52 );
auto contentId5 = inPacket.getValAt< uint16_t >( 54 );
pPlayer->sendDebug("Duty register request");
pPlayer->sendDebug("ContentId1" + std::to_string(contentId1));
@ -89,14 +66,14 @@ void Core::Network::GameConnection::cfRegisterDuty(Core::Network::Packets::GameP
queueOutPacket( cfCancelPacket );
}
void Core::Network::GameConnection::cfRegisterRoulette(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
void Core::Network::GameConnection::cfRegisterRoulette( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer)
{
pPlayer->sendDebug("Roulette register");
}
void Core::Network::GameConnection::cfDutyAccepted(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
void Core::Network::GameConnection::cfDutyAccepted( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer)
{
pPlayer->sendDebug("TODO: Duty accept");
}

View file

@ -16,7 +16,7 @@ if(UNIX)
include_directories("/usr/include/mysql/")
message(STATUS "Setting GCC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
find_package(Boost ${SAPPHIRE_BOOST_VER} COMPONENTS log log_setup thread date_time filesystem system)
if(Boost_FOUND)
set(BOOST_LIBRARY_DIR ${Boost_LIBRARY_DIR})
@ -36,6 +36,7 @@ else()
message(STATUS "Setting MSVC flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/external/${SAPPHIRE_BOOST_FOLDER_NAME})
message(STATUS "Using boost in /libraries/external")

View file

@ -1,22 +1,13 @@
#include <Server_Common/Common.h>
#include <Server_Common/CommonNetwork.h>
#include <Server_Common/Database.h>
#include <Server_Common/GamePacketNew.h>
#include <Server_Common/PacketContainer.h>
#include <boost/format.hpp>
#include "GameConnection.h"
#include "Session.h"
#include "Zone.h"
#include "ZonePosition.h"
#include "InitUIPacket.h"
#include "PingPacket.h"
#include "MoveActorPacket.h"
#include "ChatPacket.h"
#include "ServerNoticePacket.h"
#include "ActorControlPacket142.h"
#include "ActorControlPacket143.h"
@ -24,34 +15,24 @@
#include "EventStartPacket.h"
#include "EventFinishPacket.h"
#include "PlayerStateFlagsPacket.h"
#include "GameCommandHandler.h"
#include "ScriptManager.h"
#include "Player.h"
#include "Inventory.h"
#include "Globals.h"
#include "Forwards.h"
#include "EventHelper.h"
#include "Action.h"
#include "ActionTeleport.h"
#include "ActionCast.h"
extern Core::GameCommandHandler g_gameCommandMgr;
extern Core::Scripting::ScriptManager g_scriptMgr;
using namespace Core::Common;
using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::eventHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint16_t eventHandlerId = pInPacket->getValAt< uint16_t >( 0x12 );
uint16_t eventHandlerId = inPacket.getValAt< uint16_t >( 0x12 );
// we need to abort the event in case it has not been scripted so the player wont be locked up
auto abortEventFunc = []( Core::Entity::PlayerPtr pPlayer, uint64_t actorId, uint32_t eventId )
@ -71,8 +52,8 @@ void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePa
case ClientIpcType::TalkEventHandler: // Talk event
{
uint64_t actorId = pInPacket->getValAt< uint64_t >( 0x20 );
uint32_t eventId = pInPacket->getValAt< uint32_t >( 0x28 );
uint64_t actorId = inPacket.getValAt< uint64_t >( 0x20 );
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x28 );
if( !g_scriptMgr.onTalk( pPlayer, actorId, eventId ) )
abortEventFunc( pPlayer, actorId, eventId );
@ -81,13 +62,13 @@ void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePa
case ClientIpcType::EmoteEventHandler: // Emote event
{
uint64_t actorId = pInPacket->getValAt< uint64_t >( 0x20 );
uint32_t eventId = pInPacket->getValAt< uint32_t >( 0x28 );
uint16_t emoteId = pInPacket->getValAt< uint16_t >( 0x2C );
uint64_t actorId = inPacket.getValAt< uint64_t >( 0x20 );
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x28 );
uint16_t emoteId = inPacket.getValAt< uint16_t >( 0x2C );
std::string eventName = Event::getEventName( eventId );
if( !g_scriptMgr.onEmote( pPlayer, actorId, eventId, emoteId ) )
if( !g_scriptMgr.onEmote( pPlayer, actorId, eventId, static_cast< uint8_t >( emoteId ) ) )
abortEventFunc( pPlayer, actorId, eventId );
break;
}
@ -95,11 +76,11 @@ void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePa
case ClientIpcType::WithinRangeEventHandler:
{
uint32_t eventId = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t eventParam1 = pInPacket->getValAt< uint32_t >( 0x20 );
float x = pInPacket->getValAt< float >( 0x28 );
float y = pInPacket->getValAt< float >( 0x2C );
float z = pInPacket->getValAt< float >( 0x30 );
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x24 );
uint32_t eventParam1 = inPacket.getValAt< uint32_t >( 0x20 );
float x = inPacket.getValAt< float >( 0x28 );
float y = inPacket.getValAt< float >( 0x2C );
float z = inPacket.getValAt< float >( 0x30 );
std::string eventName = Event::getEventName( eventId );
@ -110,11 +91,11 @@ void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePa
case ClientIpcType::OutOfRangeEventHandler:
{
uint32_t eventId = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t eventParam1 = pInPacket->getValAt< uint32_t >( 0x20 );
float x = pInPacket->getValAt< float >( 0x28 );
float y = pInPacket->getValAt< float >( 0x2C );
float z = pInPacket->getValAt< float >( 0x30 );
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x24 );
uint32_t eventParam1 = inPacket.getValAt< uint32_t >( 0x20 );
float x = inPacket.getValAt< float >( 0x28 );
float y = inPacket.getValAt< float >( 0x2C );
float z = inPacket.getValAt< float >( 0x30 );
std::string eventName = Event::getEventName( eventId );
@ -125,9 +106,9 @@ void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePa
case ClientIpcType::EnterTeriEventHandler:
{
uint32_t eventId = pInPacket->getValAt< uint32_t >( 0x20 );
uint16_t eventParam1 = pInPacket->getValAt< uint16_t >( 0x24 );
uint16_t eventParam2 = pInPacket->getValAt< uint16_t >( 0x26 );
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x20 );
uint16_t eventParam1 = inPacket.getValAt< uint16_t >( 0x24 );
uint16_t eventParam2 = inPacket.getValAt< uint16_t >( 0x26 );
std::string eventName = Event::getEventName( eventId );
@ -139,11 +120,11 @@ void Core::Network::GameConnection::eventHandler( Core::Network::Packets::GamePa
case ClientIpcType::ReturnEventHandler:
case ClientIpcType::TradeReturnEventHandler:
{
uint32_t eventId = pInPacket->getValAt< uint32_t >( 0x20 );
uint16_t subEvent = pInPacket->getValAt< uint16_t >( 0x24 );
uint16_t param1 = pInPacket->getValAt< uint16_t >( 0x26 );
uint16_t param2 = pInPacket->getValAt< uint16_t >( 0x28 );
uint16_t param3 = pInPacket->getValAt< uint16_t >( 0x2C );
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x20 );
uint16_t subEvent = inPacket.getValAt< uint16_t >( 0x24 );
uint16_t param1 = inPacket.getValAt< uint16_t >( 0x26 );
uint16_t param2 = inPacket.getValAt< uint16_t >( 0x28 );
uint16_t param3 = inPacket.getValAt< uint16_t >( 0x2C );
std::string eventName = Event::getEventName( eventId );

View file

@ -92,15 +92,17 @@ enum GmCommand
Jump = 0x025E,
JumpNpc = 0x025F,
};
void Core::Network::GameConnection::gm1Handler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t commandId = pInPacket->getValAt< uint32_t >( 0x20 );
uint32_t param1 = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t param2 = pInPacket->getValAt< uint32_t >( 0x28 );
uint32_t param3 = pInPacket->getValAt< uint32_t >( 0x38 );
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
uint32_t param1 = inPacket.getValAt< uint32_t >( 0x24 );
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 );
uint32_t param3 = inPacket.getValAt< uint32_t >( 0x38 );
g_log.debug( pPlayer->getName() + " used GM1 commandId: " + std::to_string( commandId ) + ", params: " + std::to_string( param1 ) + ", " + std::to_string( param2 ) + ", " + std::to_string( param3 ) );
g_log.debug( pPlayer->getName() + " used GM1 commandId: " + std::to_string( commandId ) +
", params: " + std::to_string( param1 ) + ", " +
std::to_string( param2 ) + ", " + std::to_string( param3 ) );
Core::Entity::ActorPtr targetActor;
@ -336,11 +338,11 @@ void Core::Network::GameConnection::gm1Handler( Core::Network::Packets::GamePack
}
void Core::Network::GameConnection::gm2Handler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t commandId = pInPacket->getValAt< uint32_t >( 0x20 );
std::string param1 = pInPacket->getStringAt( 0x34 );
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
std::string param1 = inPacket.getStringAt( 0x34 );
g_log.debug( pPlayer->getName() + " used GM2 commandId: " + std::to_string( commandId ) + ", params: " + param1 );

View file

@ -6,6 +6,8 @@
#include <Server_Common/CommonNetwork.h>
#include <Server_Common/UtilMath.h>
#include <Server_Common/PacketContainer.h>
#include <Server_Common/Logger.h>
#include <Server_Common/ExdData.h>
#include "GameCommand.h"
#include "GameCommandHandler.h"
@ -15,20 +17,24 @@
#include "ActorControlPacket143.h"
#include "InitUIPacket.h"
#include "GameConnection.h"
#include "ScriptManager.h"
#include "Player.h"
#include "BattleNpc.h"
#include "Zone.h"
#include "Globals.h"
#include "ServerZone.h"
#include "StatusEffect.h"
#include "Session.h"
#include <boost/make_shared.hpp>
extern Core::Db::Database g_database;
extern Core::Scripting::ScriptManager g_scriptMgr;
extern Core::Data::ExdData g_exdData;
extern Core::Logger g_log;
extern Core::ServerZone g_serverZone;
// instanciate and initialize commands
Core::GameCommandHandler::GameCommandHandler()

View file

@ -155,7 +155,7 @@ void Core::Network::GameConnection::handleGamePacket( Core::Network::Packets::Ga
g_log.debug( "[" + std::to_string( m_pSession->getId() ) + "] Handling packet : " + name + "( " +
boost::str( boost::format( "%|04X|" ) % static_cast< uint32_t >( pPacket->getSubType() & 0xFFFF ) ) + " )" );
( this->*( it->second ) )( pPacket, m_pSession->getPlayer() );
( this->*( it->second ) )( *pPacket, m_pSession->getPlayer() );
}
else
{

View file

@ -12,7 +12,7 @@
#include "Forwards.h"
#define DECLARE_HANDLER( x ) void x( Packets::GamePacketPtr pInPacket, Entity::PlayerPtr pPlayer )
#define DECLARE_HANDLER( x ) void x( const Packets::GamePacket& inPacket, Entity::PlayerPtr pPlayer )
namespace Core {
namespace Network {
@ -28,7 +28,7 @@ class GameConnection : public Connection
{
private:
typedef void ( GameConnection::* Handler )( Packets::GamePacketPtr pInPacket, Entity::PlayerPtr pPlayer );
typedef void ( GameConnection::* Handler )( const Packets::GamePacket& inPacket, Entity::PlayerPtr pPlayer );
typedef std::map< uint16_t, Handler > HandlerMap;
typedef std::map< uint16_t, std::string > HandlerStrMap;

View file

@ -1,18 +0,0 @@
#ifndef _GLOBALS_H
#define _GLOBALS_H
#include "ZoneMgr.h"
#include <Server_Common/Logger.h>
#include <Server_Common/Database.h>
#include "ServerZone.h"
#include "ScriptManager.h"
#include <Server_Common/ExdData.h>
extern Core::Logger g_log;
extern Core::Db::Database g_database;
extern Core::ServerZone g_serverZone;
extern Core::ZoneMgr g_zoneMgr;
extern Core::Scripting::ScriptManager g_scriptMgr;
extern Core::Data::ExdData g_exdData;
#endif

View file

@ -54,15 +54,15 @@ using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
void Core::Network::GameConnection::inventoryModifyHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::inventoryModifyHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t seq = pInPacket->getValAt< uint32_t >( 0x20 );
uint8_t action = pInPacket->getValAt< uint8_t >( 0x24 );
uint8_t fromSlot = pInPacket->getValAt< uint8_t >( 0x30 );
uint8_t toSlot = pInPacket->getValAt< uint8_t >( 0x44 );
uint16_t fromContainer = pInPacket->getValAt< uint16_t >( 0x2C );
uint16_t toContainer = pInPacket->getValAt< uint16_t >( 0x40 );
uint32_t seq = inPacket.getValAt< uint32_t >( 0x20 );
uint8_t action = inPacket.getValAt< uint8_t >( 0x24 );
uint8_t fromSlot = inPacket.getValAt< uint8_t >( 0x30 );
uint8_t toSlot = inPacket.getValAt< uint8_t >( 0x44 );
uint16_t fromContainer = inPacket.getValAt< uint16_t >( 0x2C );
uint16_t toContainer = inPacket.getValAt< uint16_t >( 0x40 );
GamePacketNew< FFXIVIpcInventoryActionAck > ackPacket( pPlayer->getId() );
ackPacket.data().sequence = seq;
@ -70,7 +70,7 @@ void Core::Network::GameConnection::inventoryModifyHandler( Core::Network::Packe
pPlayer->queuePacket( ackPacket );
g_log.debug( pInPacket->toString() );
g_log.debug( inPacket.toString() );
g_log.debug( "InventoryAction: " + std::to_string( action ) );
// TODO: other inventory operations need to be implemented

View file

@ -53,24 +53,24 @@ using namespace Core::Common;
using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
void Core::Network::GameConnection::fcInfoReqHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::fcInfoReqHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
GamePacketPtr pPe( new GamePacket( 0xDD, 0x78, pPlayer->getId(), pPlayer->getId() ) );
pPe->setValAt< uint8_t >( 0x48, 0x01 );
queueOutPacket( pPe );
}
void Core::Network::GameConnection::setSearchInfoHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t inval = pInPacket->getValAt< uint32_t >( 0x20 );
uint32_t inval1 = pInPacket->getValAt< uint32_t >( 0x24 );
uint64_t status = pInPacket->getValAt< uint64_t >( 0x20 );
uint32_t inval = inPacket.getValAt< uint32_t >( 0x20 );
uint32_t inval1 = inPacket.getValAt< uint32_t >( 0x24 );
uint64_t status = inPacket.getValAt< uint64_t >( 0x20 );
uint8_t selectRegion = pInPacket->getValAt< uint8_t >( 0x31 );
uint8_t selectRegion = inPacket.getValAt< uint8_t >( 0x31 );
pPlayer->setSearchInfo( selectRegion, 0, pInPacket->getStringAt( 0x32 ) );
pPlayer->setSearchInfo( selectRegion, 0, inPacket.getStringAt( 0x32 ) );
pPlayer->setOnlineStatusMask( status );
@ -96,8 +96,8 @@ void Core::Network::GameConnection::setSearchInfoHandler( Core::Network::Packets
true );
}
void Core::Network::GameConnection::reqSearchInfoHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::reqSearchInfoHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
GamePacketNew< FFXIVIpcInitSearchInfo > searchInfoPacket( pPlayer->getId() );
searchInfoPacket.data().onlineStatusFlags = pPlayer->getOnlineStatusMask();
@ -106,15 +106,15 @@ void Core::Network::GameConnection::reqSearchInfoHandler( Core::Network::Packets
queueOutPacket( searchInfoPacket );
}
void Core::Network::GameConnection::linkshellListHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::linkshellListHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
GamePacketNew< FFXIVIpcLinkshellList > linkshellListPacket( pPlayer->getId() );
queueOutPacket( linkshellListPacket );
}
void Core::Network::GameConnection::updatePositionHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
// if the player is marked for zoning we no longer want to update his pos
if( pPlayer->isMarkedForZoning() )
@ -148,10 +148,10 @@ void Core::Network::GameConnection::updatePositionHandler( Core::Network::Packet
uint16_t bit16 : 1;
} IPC_OP_019AB;
uint16_t flags = pInPacket->getValAt<uint16_t>( 0x28 );
uint16_t flags = inPacket.getValAt<uint16_t>( 0x28 );
memcpy( &IPC_OP_019AB, &flags, 2 );
uint32_t flags1 = pInPacket->getValAt<uint32_t>( 0x24 );
uint32_t flags1 = inPacket.getValAt<uint32_t>( 0x24 );
memcpy( &IPC_OP_019A, &flags1, 4 );
//g_log.Log(LoggingSeverity::debug, "" + boost::lexical_cast<std::string>((int)IPC_OP_019AB.bit1)
@ -182,17 +182,17 @@ void Core::Network::GameConnection::updatePositionHandler( Core::Network::Packet
//pInPacket->debugPrint();
bool bPosChanged = false;
if( ( pPlayer->getPos().x != pInPacket->getValAt< float >( 0x2c ) ) ||
( pPlayer->getPos().y != pInPacket->getValAt< float >( 0x30 ) ) ||
( pPlayer->getPos().z != pInPacket->getValAt< float >( 0x34 ) ) )
if( ( pPlayer->getPos().x != inPacket.getValAt< float >( 0x2c ) ) ||
( pPlayer->getPos().y != inPacket.getValAt< float >( 0x30 ) ) ||
( pPlayer->getPos().z != inPacket.getValAt< float >( 0x34 ) ) )
bPosChanged = true;
if( !bPosChanged && pPlayer->getRotation() == pInPacket->getValAt< float >( 0x20 ) )
if( !bPosChanged && pPlayer->getRotation() == inPacket.getValAt< float >( 0x20 ) )
return;
pPlayer->setRotation( pInPacket->getValAt< float >( 0x20 ) );
pPlayer->setPosition( pInPacket->getValAt< float >( 0x2c ),
pInPacket->getValAt< float >( 0x30 ),
pInPacket->getValAt< float >( 0x34 ) );
pPlayer->setRotation( inPacket.getValAt< float >( 0x20 ) );
pPlayer->setPosition( inPacket.getValAt< float >( 0x2c ),
inPacket.getValAt< float >( 0x30 ),
inPacket.getValAt< float >( 0x34 ) );
pPlayer->setSyncFlag( PlayerSyncFlags::Position );
@ -203,9 +203,9 @@ void Core::Network::GameConnection::updatePositionHandler( Core::Network::Packet
if( !pPlayer->hasInRangeActor() )
return;
uint8_t unk = pInPacket->getValAt< uint8_t >( 0x29 );
uint8_t unk = inPacket.getValAt< uint8_t >( 0x29 );
uint16_t moveType = pInPacket->getValAt< uint16_t >( 0x28 );
uint16_t moveType = inPacket.getValAt< uint16_t >( 0x28 );
uint8_t unk1 = 0;
uint8_t unk2 = 0;
@ -291,10 +291,10 @@ void Core::Network::GameConnection::updatePositionHandler( Core::Network::Packet
void Core::Network::GameConnection::zoneLineHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t zoneLineId = pInPacket->getValAt< uint32_t >( 0x20 );
uint32_t zoneLineId = inPacket.getValAt< uint32_t >( 0x20 );
pPlayer->sendDebug( "Walking ZoneLine " + std::to_string( zoneLineId ) );
@ -336,10 +336,10 @@ void Core::Network::GameConnection::zoneLineHandler( Core::Network::Packets::Gam
}
void Core::Network::GameConnection::discoveryHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::discoveryHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t ref_position_id = pInPacket->getValAt< uint32_t >( 0x20 );
uint32_t ref_position_id = inPacket.getValAt< uint32_t >( 0x20 );
auto pQR = g_database.query( "SELECT id, map_id, discover_id "
"FROM discoveryinfo "
@ -365,8 +365,8 @@ void Core::Network::GameConnection::discoveryHandler( Core::Network::Packets::Ga
}
void Core::Network::GameConnection::playTimeHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::playTimeHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
GamePacketNew< FFXIVIpcPlayTime > playTimePacket( pPlayer->getId() );
playTimePacket.data().playTimeInMinutes = pPlayer->getPlayTime() / 60;
@ -374,8 +374,8 @@ void Core::Network::GameConnection::playTimeHandler( Core::Network::Packets::Gam
}
void Core::Network::GameConnection::initHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::initHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
// init handler means this is a login procedure
pPlayer->setIsLogin( true );
@ -384,10 +384,10 @@ void Core::Network::GameConnection::initHandler( Core::Network::Packets::GamePac
}
void Core::Network::GameConnection::blackListHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::blackListHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint8_t count = pInPacket->getValAt< uint8_t >( 0x21 );
uint8_t count = inPacket.getValAt< uint8_t >( 0x21 );
GamePacketNew< FFXIVIpcBlackList > blackListPacket( pPlayer->getId() );
blackListPacket.data().sequence = count;
@ -399,10 +399,10 @@ void Core::Network::GameConnection::blackListHandler( Core::Network::Packets::Ga
}
void Core::Network::GameConnection::pingHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::pingHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
int32_t inVal = pInPacket->getValAt< int32_t >( 0x20 );
int32_t inVal = inPacket.getValAt< int32_t >( 0x20 );
PingPacket pingPacket( pPlayer, inVal );
queueOutPacket( pingPacket );
@ -410,8 +410,8 @@ void Core::Network::GameConnection::pingHandler( Core::Network::Packets::GamePac
}
void Core::Network::GameConnection::finishLoadingHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::finishLoadingHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
// player is done zoning
pPlayer->setLoadingComplete( true );
@ -431,12 +431,12 @@ void Core::Network::GameConnection::finishLoadingHandler( Core::Network::Packets
pPlayer->getCurrentZone()->changeActorPosition( pPlayer );
}
void Core::Network::GameConnection::socialListHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint8_t type = pInPacket->getValAt< uint8_t >( 0x2A );
uint8_t count = pInPacket->getValAt< uint8_t >( 0x2B );
uint8_t type = inPacket.getValAt< uint8_t >( 0x2A );
uint8_t count = inPacket.getValAt< uint8_t >( 0x2B );
if( type == 0x02 )
{ // party list
@ -489,13 +489,13 @@ void Core::Network::GameConnection::socialListHandler( Core::Network::Packets::G
}
void Core::Network::GameConnection::chatHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
std::string chatString( pInPacket->getStringAt( 0x3a ) );
std::string chatString( inPacket.getStringAt( 0x3a ) );
uint32_t sourceId = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t sourceId = inPacket.getValAt< uint32_t >( 0x24 );
if( chatString.at( 0 ) == '@' )
{
@ -504,7 +504,7 @@ void Core::Network::GameConnection::chatHandler( Core::Network::Packets::GamePac
return;
}
ChatType chatType = static_cast<ChatType>( pInPacket->getValAt< uint8_t >( 0x38 ) );
ChatType chatType = static_cast<ChatType>( inPacket.getValAt< uint8_t >( 0x38 ) );
//ToDo, need to implement sending GM chat types.
ChatPacket chatPacket( pPlayer, chatType, chatString );
@ -539,8 +539,8 @@ void Core::Network::GameConnection::chatHandler( Core::Network::Packets::GamePac
// currently we wait for the session to just time out after logout, this can be a problem is the user tries to
// log right back in.
// Also the packet needs to be converted to an ipc structure
void Core::Network::GameConnection::logoutHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::logoutHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
GamePacketNew< FFXIVIpcLogout > logoutPacket( pPlayer->getId() );
logoutPacket.data().flags1 = 0x02;

View file

@ -1,67 +1,59 @@
#include <Server_Common/Common.h>
#include <Server_Common/CommonNetwork.h>
#include <Server_Common/Database.h>
#include <Server_Common/ExdData.h>
#include <Server_Common/GamePacketNew.h>
#include <Server_Common/PacketContainer.h>
#include <Server_Common/Logger.h>
#include <boost/format.hpp>
#include "GameConnection.h"
#include "Session.h"
#include "Zone.h"
#include "ZonePosition.h"
#include "InitUIPacket.h"
#include "PingPacket.h"
#include "MoveActorPacket.h"
#include "ChatPacket.h"
#include "ServerNoticePacket.h"
#include "ActorControlPacket142.h"
#include "ActorControlPacket143.h"
#include "ActorControlPacket144.h"
#include "EventStartPacket.h"
#include "EventFinishPacket.h"
#include "PlayerStateFlagsPacket.h"
#include "PlayerStateFlagsPacket.h"
#include "GameCommandHandler.h"
#include "Player.h"
#include "Inventory.h"
#include "Globals.h"
#include "Forwards.h"
#include "EventHelper.h"
#include "Action.h"
#include "ActionTeleport.h"
#include "ActionCast.h"
#include "ScriptManager.h"
extern Core::GameCommandHandler g_gameCommandMgr;
extern Core::Scripting::ScriptManager g_scriptMgr;
extern Core::Data::ExdData g_exdData;
extern Core::Logger g_log;
using namespace Core::Common;
using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
void Core::Network::GameConnection::skillHandler( Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer )
void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inPacket,
Entity::PlayerPtr pPlayer )
{
uint32_t action = pInPacket->getValAt< uint32_t >( 0x24 );
uint32_t useCount = pInPacket->getValAt< uint32_t >( 0x28 );
uint32_t action = inPacket.getValAt< uint32_t >( 0x24 );
uint32_t useCount = inPacket.getValAt< uint32_t >( 0x28 );
uint64_t targetId = pInPacket->getValAt< uint64_t >( 0x30 );
uint64_t targetId = inPacket.getValAt< uint64_t >( 0x30 );
if( action < 1000000 ) // normal action
{
std::string actionIdStr = boost::str( boost::format( "%|04X|" ) % action );
pPlayer->sendDebug( "---------------------------------------" );
pPlayer->sendDebug( "ActionHandler ( " + actionIdStr + " | " + g_exdData.m_actionInfoMap[action].name + " | " + std::to_string( targetId ) + " )" );
pPlayer->sendDebug( "ActionHandler ( " + actionIdStr + " | " +
g_exdData.m_actionInfoMap[action].name +
" | " + std::to_string( targetId ) + " )" );
pPlayer->queuePacket( ActorControlPacket142( pPlayer->getId(), ActorControlType::ActionStart, 0x01, action ) );