mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 06:27:45 +00:00
WiP - implementing new framework
This commit is contained in:
parent
7771b7c8e6
commit
24399e31e4
38 changed files with 1051 additions and 960 deletions
|
@ -1,13 +1,13 @@
|
||||||
#include "DbConnection.h"
|
#include "DbConnection.h"
|
||||||
#include "DbWorker.h"
|
#include "DbWorker.h"
|
||||||
#include <MySqlConnector.h>
|
#include <MySqlConnector.h>
|
||||||
|
|
||||||
#include "Logging/Logger.h"
|
#include "Logging/Logger.h"
|
||||||
|
|
||||||
#include "PreparedStatement.h"
|
#include "PreparedStatement.h"
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
|
#include "Framework.h"
|
||||||
|
|
||||||
|
extern Core::Framework g_fw;
|
||||||
extern Core::Logger g_log;
|
|
||||||
|
|
||||||
Core::Db::DbConnection::DbConnection( ConnectionInfo &connInfo ) :
|
Core::Db::DbConnection::DbConnection( ConnectionInfo &connInfo ) :
|
||||||
m_reconnecting( false ),
|
m_reconnecting( false ),
|
||||||
|
@ -67,7 +67,7 @@ uint32_t Core::Db::DbConnection::open()
|
||||||
}
|
}
|
||||||
catch( std::runtime_error& e )
|
catch( std::runtime_error& e )
|
||||||
{
|
{
|
||||||
g_log.error( e.what() );
|
g_fw.get< Logger >()->error( e.what() );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ bool Core::Db::DbConnection::execute( const std::string& sql )
|
||||||
}
|
}
|
||||||
catch( std::runtime_error& e )
|
catch( std::runtime_error& e )
|
||||||
{
|
{
|
||||||
g_log.error( e.what() );
|
g_fw.get< Logger >()->error( e.what() );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ boost::shared_ptr< Mysql::ResultSet > Core::Db::DbConnection::query( const std::
|
||||||
}
|
}
|
||||||
catch( std::runtime_error& e )
|
catch( std::runtime_error& e )
|
||||||
{
|
{
|
||||||
g_log.error( e.what() );
|
g_fw.get< Logger >()->error( e.what() );
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,13 +148,11 @@ boost::shared_ptr< Mysql::ResultSet > Core::Db::DbConnection::query( boost::shar
|
||||||
|
|
||||||
if( !ping() )
|
if( !ping() )
|
||||||
{
|
{
|
||||||
g_log.error( "MysqlConnection went down" );
|
|
||||||
// naivly reconnect and hope for the best
|
// naivly reconnect and hope for the best
|
||||||
open();
|
open();
|
||||||
lockIfReady();
|
lockIfReady();
|
||||||
if( !prepareStatements() )
|
if( !prepareStatements() )
|
||||||
g_log.error( "Mysql Statements failed to prepare..." );
|
return nullptr;
|
||||||
g_log.info( "MysqlConnection reestablished" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t index = stmt->getIndex();
|
uint32_t index = stmt->getIndex();
|
||||||
|
@ -172,7 +170,7 @@ boost::shared_ptr< Mysql::ResultSet > Core::Db::DbConnection::query( boost::shar
|
||||||
}
|
}
|
||||||
catch( std::runtime_error& e )
|
catch( std::runtime_error& e )
|
||||||
{
|
{
|
||||||
g_log.error( e.what() );
|
g_fw.get< Logger >()->error( e.what() );
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +196,7 @@ bool Core::Db::DbConnection::execute( boost::shared_ptr< Core::Db::PreparedState
|
||||||
}
|
}
|
||||||
catch( std::runtime_error& e )
|
catch( std::runtime_error& e )
|
||||||
{
|
{
|
||||||
g_log.error( e.what() );
|
g_fw.get< Logger >()->error( e.what() );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,7 +232,7 @@ void Core::Db::DbConnection::prepareStatement( uint32_t index, const std::string
|
||||||
}
|
}
|
||||||
catch( std::runtime_error& e )
|
catch( std::runtime_error& e )
|
||||||
{
|
{
|
||||||
g_log.error( e.what() );
|
g_fw.get< Logger >()->error( e.what() );
|
||||||
m_prepareError = true;
|
m_prepareError = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
src/common/Framework.cpp
Normal file
5
src/common/Framework.cpp
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#include "Framework.h"
|
||||||
|
|
||||||
|
#include <Logging/Logger.h>
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#include <boost/make_shared.hpp>
|
36
src/common/Framework.h
Normal file
36
src/common/Framework.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#ifndef _CORE_FRAMEWORK_H
|
||||||
|
#define _CORE_FRAMEWORK_H
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <typeindex>
|
||||||
|
#include <typeinfo>
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace Core
|
||||||
|
{
|
||||||
|
|
||||||
|
class Framework
|
||||||
|
{
|
||||||
|
using TypenameToObject = std::map< std::type_index, boost::shared_ptr< void > >;
|
||||||
|
TypenameToObject ObjectMap;
|
||||||
|
|
||||||
|
public:
|
||||||
|
template< typename T >
|
||||||
|
boost::shared_ptr< T > get()
|
||||||
|
{
|
||||||
|
auto iType = ObjectMap.find( typeid( T ) );
|
||||||
|
assert( !( iType == ObjectMap.end() ) );
|
||||||
|
return boost::static_pointer_cast< T >( iType->second );
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
void set( boost::shared_ptr< T > value )
|
||||||
|
{
|
||||||
|
ObjectMap[typeid( T )] = value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // _CORE_FRAMEWORK_H
|
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
#include "Aethernet.cpp"
|
#include "Aethernet.cpp"
|
||||||
#include "Aetheryte.cpp"
|
#include "Aetheryte.cpp"
|
||||||
#include "HouFurOrchestrion.cpp"
|
|
||||||
#include "CmnDefInnBed.cpp"
|
|
||||||
#include "CmnDefCutSceneReplay.cpp"
|
#include "CmnDefCutSceneReplay.cpp"
|
||||||
|
#include "CmnDefInnBed.cpp"
|
||||||
#include "CmnDefLinkShell.cpp"
|
#include "CmnDefLinkShell.cpp"
|
||||||
|
#include "HouFurOrchestrion.cpp"
|
||||||
|
|
||||||
const ScriptObject* ptrs[] =
|
const ScriptObject* ptrs[] =
|
||||||
{
|
{
|
||||||
static_cast< ScriptObject* >( new Aethernet ),
|
static_cast< ScriptObject* >( new Aethernet ),
|
||||||
static_cast< ScriptObject* >( new Aetheryte ),
|
static_cast< ScriptObject* >( new Aetheryte ),
|
||||||
static_cast< ScriptObject* >( new HouFurOrchestrion ),
|
|
||||||
static_cast< ScriptObject* >( new CmnDefInnBed ),
|
|
||||||
static_cast< ScriptObject* >( new CmnDefCutSceneReplay ),
|
static_cast< ScriptObject* >( new CmnDefCutSceneReplay ),
|
||||||
|
static_cast< ScriptObject* >( new CmnDefInnBed ),
|
||||||
static_cast< ScriptObject* >( new CmnDefLinkShell ),
|
static_cast< ScriptObject* >( new CmnDefLinkShell ),
|
||||||
|
static_cast< ScriptObject* >( new HouFurOrchestrion ),
|
||||||
|
|
||||||
nullptr
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,13 +1,13 @@
|
||||||
#include <Script/NativeScriptApi.h>
|
#include <Script/NativeScriptApi.h>
|
||||||
|
|
||||||
#include "OpeningLimsa.cpp"
|
|
||||||
#include "OpeningGridania.cpp"
|
#include "OpeningGridania.cpp"
|
||||||
|
#include "OpeningLimsa.cpp"
|
||||||
#include "OpeningUldah.cpp"
|
#include "OpeningUldah.cpp"
|
||||||
|
|
||||||
const ScriptObject* ptrs[] =
|
const ScriptObject* ptrs[] =
|
||||||
{
|
{
|
||||||
static_cast< ScriptObject* >( new OpeningLimsa ),
|
|
||||||
static_cast< ScriptObject* >( new OpeningGridania ),
|
static_cast< ScriptObject* >( new OpeningGridania ),
|
||||||
|
static_cast< ScriptObject* >( new OpeningLimsa ),
|
||||||
static_cast< ScriptObject* >( new OpeningUldah ),
|
static_cast< ScriptObject* >( new OpeningUldah ),
|
||||||
|
|
||||||
nullptr
|
nullptr
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
#include <Script/NativeScriptApi.h>
|
#include <Script/NativeScriptApi.h>
|
||||||
|
|
||||||
#include "ManFst004.cpp"
|
#include "ManFst001.cpp"
|
||||||
#include "ManSea002.cpp"
|
|
||||||
#include "ManFst002.cpp"
|
#include "ManFst002.cpp"
|
||||||
#include "ManFst003.cpp"
|
#include "ManFst003.cpp"
|
||||||
|
#include "ManFst004.cpp"
|
||||||
|
#include "ManSea001.cpp"
|
||||||
|
#include "ManSea002.cpp"
|
||||||
#include "ManWil001.cpp"
|
#include "ManWil001.cpp"
|
||||||
#include "ManWil002.cpp"
|
#include "ManWil002.cpp"
|
||||||
#include "ManFst001.cpp"
|
|
||||||
#include "subquest/gridania/SubFst002.cpp"
|
|
||||||
#include "subquest/gridania/SubFst013.cpp"
|
|
||||||
#include "subquest/gridania/SubFst001.cpp"
|
#include "subquest/gridania/SubFst001.cpp"
|
||||||
|
#include "subquest/gridania/SubFst002.cpp"
|
||||||
#include "subquest/gridania/SubFst010.cpp"
|
#include "subquest/gridania/SubFst010.cpp"
|
||||||
#include "ManSea001.cpp"
|
#include "subquest/gridania/SubFst013.cpp"
|
||||||
|
|
||||||
const ScriptObject* ptrs[] =
|
const ScriptObject* ptrs[] =
|
||||||
{
|
{
|
||||||
static_cast< ScriptObject* >( new ManFst004 ),
|
static_cast< ScriptObject* >( new ManFst001 ),
|
||||||
static_cast< ScriptObject* >( new ManSea002 ),
|
|
||||||
static_cast< ScriptObject* >( new ManFst002 ),
|
static_cast< ScriptObject* >( new ManFst002 ),
|
||||||
static_cast< ScriptObject* >( new ManFst003 ),
|
static_cast< ScriptObject* >( new ManFst003 ),
|
||||||
|
static_cast< ScriptObject* >( new ManFst004 ),
|
||||||
|
static_cast< ScriptObject* >( new ManSea001 ),
|
||||||
|
static_cast< ScriptObject* >( new ManSea002 ),
|
||||||
static_cast< ScriptObject* >( new ManWil001 ),
|
static_cast< ScriptObject* >( new ManWil001 ),
|
||||||
static_cast< ScriptObject* >( new ManWil002 ),
|
static_cast< ScriptObject* >( new ManWil002 ),
|
||||||
static_cast< ScriptObject* >( new ManFst001 ),
|
|
||||||
static_cast< ScriptObject* >( new SubFst002 ),
|
|
||||||
static_cast< ScriptObject* >( new SubFst013 ),
|
|
||||||
static_cast< ScriptObject* >( new SubFst001 ),
|
static_cast< ScriptObject* >( new SubFst001 ),
|
||||||
|
static_cast< ScriptObject* >( new SubFst002 ),
|
||||||
static_cast< ScriptObject* >( new SubFst010 ),
|
static_cast< ScriptObject* >( new SubFst010 ),
|
||||||
static_cast< ScriptObject* >( new ManSea001 ),
|
static_cast< ScriptObject* >( new SubFst013 ),
|
||||||
|
|
||||||
nullptr
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,10 +29,13 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <Framework.h>
|
||||||
|
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "SapphireAPI.h"
|
#include "SapphireAPI.h"
|
||||||
|
|
||||||
|
|
||||||
|
Core::Framework g_fw;
|
||||||
Core::Logger g_log;
|
Core::Logger g_log;
|
||||||
Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb;
|
Core::Db::DbWorkerPool< Core::Db::CharaDbConnection > g_charaDb;
|
||||||
Core::Data::ExdDataGenerated g_exdDataGen;
|
Core::Data::ExdDataGenerated g_exdDataGen;
|
||||||
|
@ -739,6 +742,8 @@ void defaultGet( shared_ptr<HttpServer::Response> response, shared_ptr<HttpServe
|
||||||
|
|
||||||
int main( int argc, char* argv[] )
|
int main( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
|
auto pLog = boost::shared_ptr< Core::Logger >( new Core::Logger() );
|
||||||
|
g_fw.set< Core::Logger >( pLog );
|
||||||
g_log.setLogPath( "log/SapphireAPI" );
|
g_log.setLogPath( "log/SapphireAPI" );
|
||||||
g_log.init();
|
g_log.init();
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ using namespace Core::Network;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
using namespace Core::Network::Packets::Server;
|
using namespace Core::Network::Packets::Server;
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::Action::ActionCast::ActionCast()
|
Core::Action::ActionCast::ActionCast()
|
||||||
{
|
{
|
||||||
|
@ -29,10 +29,11 @@ Core::Action::ActionCast::ActionCast()
|
||||||
|
|
||||||
Core::Action::ActionCast::ActionCast( Entity::CharaPtr pActor, Entity::CharaPtr pTarget, uint16_t actionId )
|
Core::Action::ActionCast::ActionCast( Entity::CharaPtr pActor, Entity::CharaPtr pTarget, uint16_t actionId )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
m_startTime = 0;
|
m_startTime = 0;
|
||||||
m_id = actionId;
|
m_id = actionId;
|
||||||
m_handleActionType = HandleActionType::Spell;
|
m_handleActionType = HandleActionType::Spell;
|
||||||
m_castTime = g_framework.getExdDataGen().get< Core::Data::Action >( actionId )->cast100ms * 100; // TODO: Add security checks.
|
m_castTime = pExdData->get< Core::Data::Action >( actionId )->cast100ms * 100; // TODO: Add security checks.
|
||||||
m_pSource = pActor;
|
m_pSource = pActor;
|
||||||
m_pTarget = pTarget;
|
m_pTarget = pTarget;
|
||||||
m_bInterrupt = false;
|
m_bInterrupt = false;
|
||||||
|
@ -67,6 +68,8 @@ void Core::Action::ActionCast::onFinish()
|
||||||
if( !m_pSource )
|
if( !m_pSource )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
|
||||||
auto pPlayer = m_pSource->getAsPlayer();
|
auto pPlayer = m_pSource->getAsPlayer();
|
||||||
pPlayer->sendDebug( "onFinish()" );
|
pPlayer->sendDebug( "onFinish()" );
|
||||||
|
|
||||||
|
@ -76,7 +79,7 @@ void Core::Action::ActionCast::onFinish()
|
||||||
0x219, m_id, m_id, m_id, m_id );
|
0x219, m_id, m_id, m_id, m_id );
|
||||||
m_pSource->sendToInRangeSet( control, true );*/
|
m_pSource->sendToInRangeSet( control, true );*/
|
||||||
|
|
||||||
g_framework.getScriptMgr().onCastFinish( *pPlayer, m_pTarget, m_id );
|
pScriptMgr->onCastFinish( *pPlayer, m_pTarget, m_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Action::ActionCast::onInterrupt()
|
void Core::Action::ActionCast::onInterrupt()
|
||||||
|
|
|
@ -15,7 +15,7 @@ using namespace Core::Network;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
using namespace Core::Network::Packets::Server;
|
using namespace Core::Network::Packets::Server;
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::Action::ActionTeleport::ActionTeleport()
|
Core::Action::ActionTeleport::ActionTeleport()
|
||||||
{
|
{
|
||||||
|
@ -24,10 +24,11 @@ Core::Action::ActionTeleport::ActionTeleport()
|
||||||
|
|
||||||
Core::Action::ActionTeleport::ActionTeleport( Entity::CharaPtr pActor, uint16_t targetZone, uint16_t cost )
|
Core::Action::ActionTeleport::ActionTeleport( Entity::CharaPtr pActor, uint16_t targetZone, uint16_t cost )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
m_startTime = 0;
|
m_startTime = 0;
|
||||||
m_id = 5;
|
m_id = 5;
|
||||||
m_handleActionType = HandleActionType::Teleport;
|
m_handleActionType = HandleActionType::Teleport;
|
||||||
m_castTime = g_framework.getExdDataGen().get< Core::Data::Action >( 5 )->cast100ms * 100; // TODO: Add security checks.
|
m_castTime = pExdData->get< Core::Data::Action >( 5 )->cast100ms * 100; // TODO: Add security checks.
|
||||||
m_pSource = pActor;
|
m_pSource = pActor;
|
||||||
m_bInterrupt = false;
|
m_bInterrupt = false;
|
||||||
m_targetAetheryte = targetZone;
|
m_targetAetheryte = targetZone;
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "EventAction.h"
|
#include "EventAction.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network;
|
using namespace Core::Network;
|
||||||
|
@ -26,11 +26,13 @@ Core::Action::EventAction::EventAction()
|
||||||
Core::Action::EventAction::EventAction( Entity::CharaPtr pActor, uint32_t eventId, uint16_t action,
|
Core::Action::EventAction::EventAction( Entity::CharaPtr pActor, uint32_t eventId, uint16_t action,
|
||||||
ActionCallback finishRef, ActionCallback interruptRef, uint64_t additional )
|
ActionCallback finishRef, ActionCallback interruptRef, uint64_t additional )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
|
||||||
m_additional = additional;
|
m_additional = additional;
|
||||||
m_handleActionType = HandleActionType::Event;
|
m_handleActionType = HandleActionType::Event;
|
||||||
m_eventId = eventId;
|
m_eventId = eventId;
|
||||||
m_id = action;
|
m_id = action;
|
||||||
m_castTime = g_framework.getExdDataGen().get< Core::Data::EventAction >( action )->castTime * 1000; // TODO: Add security checks.
|
m_castTime = pExdData->get< Core::Data::EventAction >( action )->castTime * 1000; // TODO: Add security checks.
|
||||||
m_onActionFinishClb = finishRef;
|
m_onActionFinishClb = finishRef;
|
||||||
m_onActionInterruptClb = interruptRef;
|
m_onActionInterruptClb = interruptRef;
|
||||||
m_pSource = pActor;
|
m_pSource = pActor;
|
||||||
|
@ -93,7 +95,8 @@ void Core::Action::EventAction::onFinish()
|
||||||
}
|
}
|
||||||
catch( std::exception& e )
|
catch( std::exception& e )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( e.what() );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( e.what() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -132,7 +135,8 @@ void Core::Action::EventAction::onInterrupt()
|
||||||
}
|
}
|
||||||
catch( std::exception& e )
|
catch( std::exception& e )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( e.what() );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( e.what() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "EventItemAction.h"
|
#include "EventItemAction.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network;
|
using namespace Core::Network;
|
||||||
|
@ -86,7 +86,8 @@ void Core::Action::EventItemAction::onFinish()
|
||||||
}
|
}
|
||||||
catch( std::exception& e )
|
catch( std::exception& e )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( e.what() );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( e.what() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -115,7 +116,8 @@ void Core::Action::EventItemAction::onInterrupt()
|
||||||
}
|
}
|
||||||
catch( std::exception& e )
|
catch( std::exception& e )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( e.what() );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( e.what() );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -288,12 +288,12 @@ Send a packet to all players in range, potentially to self if set and is player
|
||||||
*/
|
*/
|
||||||
void Core::Entity::Actor::sendToInRangeSet( Network::Packets::GamePacketPtr pPacket, bool bToSelf )
|
void Core::Entity::Actor::sendToInRangeSet( Network::Packets::GamePacketPtr pPacket, bool bToSelf )
|
||||||
{
|
{
|
||||||
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
if( bToSelf && isPlayer() )
|
if( bToSelf && isPlayer() )
|
||||||
{
|
{
|
||||||
auto pPlayer = getAsPlayer();
|
auto pPlayer = getAsPlayer();
|
||||||
|
|
||||||
auto pSession = g_framework.getServerZone().getSession( pPlayer->getId() );
|
auto pSession = pServerZone->getSession( pPlayer->getId() );
|
||||||
|
|
||||||
// it might be that the player DC'd in which case the session would be invalid
|
// it might be that the player DC'd in which case the session would be invalid
|
||||||
if( pSession )
|
if( pSession )
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include "Zone/TerritoryMgr.h"
|
#include "Zone/TerritoryMgr.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -421,14 +421,14 @@ ChaiScript Skill Handler.
|
||||||
void Core::Entity::Chara::handleScriptSkill( uint32_t type, uint16_t actionId, uint64_t param1,
|
void Core::Entity::Chara::handleScriptSkill( uint32_t type, uint16_t actionId, uint64_t param1,
|
||||||
uint64_t param2, Entity::Chara& target )
|
uint64_t param2, Entity::Chara& target )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
if( isPlayer() )
|
if( isPlayer() )
|
||||||
{
|
{
|
||||||
getAsPlayer()->sendDebug( std::to_string( target.getId() ) );
|
getAsPlayer()->sendDebug( std::to_string( target.getId() ) );
|
||||||
getAsPlayer()->sendDebug( "Handle script skill type: " + std::to_string( type ) );
|
getAsPlayer()->sendDebug( "Handle script skill type: " + std::to_string( type ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
auto actionInfoPtr = g_framework.getExdDataGen().get< Core::Data::Action >( actionId );
|
auto actionInfoPtr = pExdData->get< Core::Data::Action >( actionId );
|
||||||
|
|
||||||
// Todo: Effect packet generator. 90% of this is basically setting params and it's basically unreadable.
|
// Todo: Effect packet generator. 90% of this is basically setting params and it's basically unreadable.
|
||||||
// Prepare packet. This is seemingly common for all packets in the action handler.
|
// Prepare packet. This is seemingly common for all packets in the action handler.
|
||||||
|
|
|
@ -15,8 +15,8 @@ using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
using namespace Core::Network::Packets::Server;
|
using namespace Core::Network::Packets::Server;
|
||||||
|
|
||||||
extern Core::Logger g_log;
|
#include "Framework.h"
|
||||||
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId,
|
Core::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId,
|
||||||
uint8_t initialState, Common::FFXIVARR_POSITION3 pos,
|
uint8_t initialState, Common::FFXIVARR_POSITION3 pos,
|
||||||
|
@ -104,7 +104,9 @@ void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget )
|
||||||
if( !pTarget->isObjSpawnIndexValid( spawnIndex ) )
|
if( !pTarget->isObjSpawnIndexValid( spawnIndex ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_log.debug( "Spawning EObj: id:" + std::to_string( getId() ) + " name:" + getName() );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
|
||||||
|
pLog->debug( "Spawning EObj: id:" + std::to_string( getId() ) + " name:" + getName() );
|
||||||
ZoneChannelPacket< FFXIVIpcObjectSpawn > eobjStatePacket( getId(), pTarget->getId() );
|
ZoneChannelPacket< FFXIVIpcObjectSpawn > eobjStatePacket( getId(), pTarget->getId() );
|
||||||
eobjStatePacket.data().spawnIndex = spawnIndex;
|
eobjStatePacket.data().spawnIndex = spawnIndex;
|
||||||
eobjStatePacket.data().objKind = getObjKind();
|
eobjStatePacket.data().objKind = getObjKind();
|
||||||
|
@ -121,7 +123,8 @@ void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget )
|
||||||
|
|
||||||
void Core::Entity::EventObject::despawn( Core::Entity::PlayerPtr pTarget )
|
void Core::Entity::EventObject::despawn( Core::Entity::PlayerPtr pTarget )
|
||||||
{
|
{
|
||||||
g_log.debug( "despawn eobj: " + std::to_string( getId() ) );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->debug( "despawn eobj: " + std::to_string( getId() ) );
|
||||||
|
|
||||||
pTarget->freeObjSpawnIndexForActorId( getId( ) );
|
pTarget->freeObjSpawnIndexForActorId( getId( ) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include "ServerZone.h"
|
#include "ServerZone.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -100,7 +100,8 @@ Core::Entity::Player::~Player()
|
||||||
|
|
||||||
void Core::Entity::Player::injectPacket( std::string path )
|
void Core::Entity::Player::injectPacket( std::string path )
|
||||||
{
|
{
|
||||||
auto session = g_framework.getServerZone().getSession( getId() );
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
|
auto session = pServerZone->getSession( getId() );
|
||||||
if( session )
|
if( session )
|
||||||
session->getZoneConnection()->injectPacket( path, *this );
|
session->getZoneConnection()->injectPacket( path, *this );
|
||||||
}
|
}
|
||||||
|
@ -223,9 +224,11 @@ void Core::Entity::Player::calculateStats()
|
||||||
uint8_t level = getLevel();
|
uint8_t level = getLevel();
|
||||||
uint8_t job = static_cast< uint8_t >( getClass() );
|
uint8_t job = static_cast< uint8_t >( getClass() );
|
||||||
|
|
||||||
auto classInfo = g_framework.getExdDataGen().get< Core::Data::ClassJob >( job );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
auto tribeInfo = g_framework.getExdDataGen().get< Core::Data::Tribe >( tribe );
|
|
||||||
auto paramGrowthInfo = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( level );
|
auto classInfo = pExdData->get< Core::Data::ClassJob >( job );
|
||||||
|
auto tribeInfo = pExdData->get< Core::Data::Tribe >( tribe );
|
||||||
|
auto paramGrowthInfo = pExdData->get< Core::Data::ParamGrow >( level );
|
||||||
|
|
||||||
// TODO: put formula somewhere else...
|
// TODO: put formula somewhere else...
|
||||||
float base = Math::CalcStats::calculateBaseStat( getAsPlayer() );
|
float base = Math::CalcStats::calculateBaseStat( getAsPlayer() );
|
||||||
|
@ -303,7 +306,10 @@ void Core::Entity::Player::sendStats()
|
||||||
|
|
||||||
void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
|
void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
|
||||||
{
|
{
|
||||||
auto data = g_framework.getExdDataGen().get< Core::Data::Aetheryte >( aetheryteId );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
|
||||||
|
auto data = pExdData->get< Core::Data::Aetheryte >( aetheryteId );
|
||||||
|
|
||||||
if( data == nullptr )
|
if( data == nullptr )
|
||||||
{
|
{
|
||||||
|
@ -311,7 +317,7 @@ void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
|
||||||
}
|
}
|
||||||
|
|
||||||
setStateFlag( PlayerStateFlag::BetweenAreas );
|
setStateFlag( PlayerStateFlag::BetweenAreas );
|
||||||
auto targetPos = g_framework.getTerritoryMgr().getTerritoryPosition( data->levelId );
|
auto targetPos = pTeriMgr->getTerritoryPosition( data->levelId );
|
||||||
|
|
||||||
Common::FFXIVARR_POSITION3 pos;
|
Common::FFXIVARR_POSITION3 pos;
|
||||||
pos.x = 0;
|
pos.x = 0;
|
||||||
|
@ -325,8 +331,8 @@ void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
|
||||||
rot = targetPos->getTargetRotation();
|
rot = targetPos->getTargetRotation();
|
||||||
}
|
}
|
||||||
|
|
||||||
sendDebug( "Teleport: " + g_framework.getExdDataGen().get< Core::Data::PlaceName >( data->placeName )->name + " " +
|
sendDebug( "Teleport: " + pExdData->get< Core::Data::PlaceName >( data->placeName )->name + " " +
|
||||||
g_framework.getExdDataGen().get< Core::Data::PlaceName >( data->aethernetName )->name +
|
pExdData->get< Core::Data::PlaceName >( data->aethernetName )->name +
|
||||||
"(" + std::to_string( data->territory ) + ")" );
|
"(" + std::to_string( data->territory ) + ")" );
|
||||||
|
|
||||||
// TODO: this should be simplified and a type created in server_common/common.h.
|
// TODO: this should be simplified and a type created in server_common/common.h.
|
||||||
|
@ -368,15 +374,16 @@ void Core::Entity::Player::returnToHomepoint()
|
||||||
|
|
||||||
void Core::Entity::Player::setZone( uint32_t zoneId )
|
void Core::Entity::Player::setZone( uint32_t zoneId )
|
||||||
{
|
{
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
m_onEnterEventDone = false;
|
m_onEnterEventDone = false;
|
||||||
if( !g_framework.getTerritoryMgr().movePlayer( zoneId, getAsPlayer() ) )
|
if( !pTeriMgr->movePlayer( zoneId, getAsPlayer() ) )
|
||||||
{
|
{
|
||||||
// todo: this will require proper handling, for now just return the player to their previous area
|
// todo: this will require proper handling, for now just return the player to their previous area
|
||||||
m_pos = m_prevPos;
|
m_pos = m_prevPos;
|
||||||
m_rot = m_prevRot;
|
m_rot = m_prevRot;
|
||||||
m_zoneId = m_prevZoneId;
|
m_zoneId = m_prevZoneId;
|
||||||
|
|
||||||
if( !g_framework.getTerritoryMgr().movePlayer( m_zoneId, getAsPlayer() ) )
|
if( !pTeriMgr->movePlayer( m_zoneId, getAsPlayer() ) )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,8 +392,9 @@ void Core::Entity::Player::setZone( uint32_t zoneId )
|
||||||
|
|
||||||
bool Core::Entity::Player::setInstance( uint32_t instanceContentId )
|
bool Core::Entity::Player::setInstance( uint32_t instanceContentId )
|
||||||
{
|
{
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
m_onEnterEventDone = false;
|
m_onEnterEventDone = false;
|
||||||
auto instance = g_framework.getTerritoryMgr().getInstanceZonePtr( instanceContentId );
|
auto instance = pTeriMgr->getInstanceZonePtr( instanceContentId );
|
||||||
if( !instance )
|
if( !instance )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -399,6 +407,8 @@ bool Core::Entity::Player::setInstance( ZonePtr instance )
|
||||||
if( !instance )
|
if( !instance )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
|
||||||
// zoning within the same zone won't cause the prev data to be overwritten
|
// zoning within the same zone won't cause the prev data to be overwritten
|
||||||
if( instance->getTerritoryId() != m_zoneId )
|
if( instance->getTerritoryId() != m_zoneId )
|
||||||
{
|
{
|
||||||
|
@ -407,7 +417,7 @@ bool Core::Entity::Player::setInstance( ZonePtr instance )
|
||||||
m_prevZoneId = m_zoneId;
|
m_prevZoneId = m_zoneId;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !g_framework.getTerritoryMgr().movePlayer( instance, getAsPlayer() ) )
|
if( !pTeriMgr->movePlayer( instance, getAsPlayer() ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
sendZonePackets();
|
sendZonePackets();
|
||||||
|
@ -417,7 +427,8 @@ bool Core::Entity::Player::setInstance( ZonePtr instance )
|
||||||
|
|
||||||
bool Core::Entity::Player::exitInstance()
|
bool Core::Entity::Player::exitInstance()
|
||||||
{
|
{
|
||||||
if( !g_framework.getTerritoryMgr().movePlayer( m_prevZoneId, getAsPlayer() ) )
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
if( !pTeriMgr->movePlayer( m_prevZoneId, getAsPlayer() ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_pos = m_prevPos;
|
m_pos = m_prevPos;
|
||||||
|
@ -490,9 +501,11 @@ void Core::Entity::Player::discover( int16_t map_id, int16_t sub_id )
|
||||||
|
|
||||||
// section to starts at 320 - 4 bytes long
|
// section to starts at 320 - 4 bytes long
|
||||||
|
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
|
||||||
int32_t offset = 4;
|
int32_t offset = 4;
|
||||||
|
|
||||||
auto info = g_framework.getExdDataGen().get< Core::Data::Map >( g_framework.getExdDataGen().get< Core::Data::TerritoryType >( getCurrentZone()->getTerritoryId() )->map );
|
auto info = pExdData->get< Core::Data::Map >( pExdData->get< Core::Data::TerritoryType >( getCurrentZone()->getTerritoryId() )->map );
|
||||||
if( info->discoveryArrayByte )
|
if( info->discoveryArrayByte )
|
||||||
offset = 4 + 2 * info->discoveryIndex;
|
offset = 4 + 2 * info->discoveryIndex;
|
||||||
else
|
else
|
||||||
|
@ -507,7 +520,7 @@ void Core::Entity::Player::discover( int16_t map_id, int16_t sub_id )
|
||||||
|
|
||||||
uint16_t level = getLevel();
|
uint16_t level = getLevel();
|
||||||
|
|
||||||
uint32_t exp = ( g_framework.getExdDataGen().get< Core::Data::ParamGrow >( level )->expToNext * 5 / 100 );
|
uint32_t exp = ( pExdData->get< Core::Data::ParamGrow >( level )->expToNext * 5 / 100 );
|
||||||
|
|
||||||
gainExp( exp );
|
gainExp( exp );
|
||||||
|
|
||||||
|
@ -580,13 +593,15 @@ bool Core::Entity::Player::isActionLearned( uint8_t actionId ) const
|
||||||
|
|
||||||
void Core::Entity::Player::gainExp( uint32_t amount )
|
void Core::Entity::Player::gainExp( uint32_t amount )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
|
||||||
uint32_t currentExp = getExp();
|
uint32_t currentExp = getExp();
|
||||||
|
|
||||||
uint16_t level = getLevel();
|
uint16_t level = getLevel();
|
||||||
|
|
||||||
uint32_t neededExpToLevel = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( level )->expToNext;
|
uint32_t neededExpToLevel = pExdData->get< Core::Data::ParamGrow >( level )->expToNext;
|
||||||
|
|
||||||
uint32_t neededExpToLevelplus1 = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( level + 1 )->expToNext;
|
uint32_t neededExpToLevelplus1 = pExdData->get< Core::Data::ParamGrow >( level + 1 )->expToNext;
|
||||||
|
|
||||||
queuePacket( ActorControlPacket143( getId(), GainExpMsg, static_cast< uint8_t >( getClass() ), amount ) );
|
queuePacket( ActorControlPacket143( getId(), GainExpMsg, static_cast< uint8_t >( getClass() ), amount ) );
|
||||||
|
|
||||||
|
@ -659,25 +674,28 @@ void Core::Entity::Player::sendStatusUpdate( bool toSelf )
|
||||||
|
|
||||||
uint8_t Core::Entity::Player::getLevel() const
|
uint8_t Core::Entity::Player::getLevel() const
|
||||||
{
|
{
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
||||||
return static_cast< uint8_t >( m_classArray[classJobIndex] );
|
return static_cast< uint8_t >( m_classArray[classJobIndex] );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Core::Entity::Player::getLevelForClass( Common::ClassJob pClass ) const
|
uint8_t Core::Entity::Player::getLevelForClass( Common::ClassJob pClass ) const
|
||||||
{
|
{
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( pClass ) )->expArrayIndex;
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( pClass ) )->expArrayIndex;
|
||||||
return static_cast< uint8_t >( m_classArray[classJobIndex] );
|
return static_cast< uint8_t >( m_classArray[classJobIndex] );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Core::Entity::Player::getExp() const
|
uint32_t Core::Entity::Player::getExp() const
|
||||||
{
|
{
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
||||||
return m_expArray[classJobIndex];
|
return m_expArray[classJobIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::setExp( uint32_t amount )
|
void Core::Entity::Player::setExp( uint32_t amount )
|
||||||
{
|
{ auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
||||||
m_expArray[classJobIndex] = amount;
|
m_expArray[classJobIndex] = amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -717,13 +735,15 @@ void Core::Entity::Player::setClassJob( Common::ClassJob classJob )
|
||||||
|
|
||||||
void Core::Entity::Player::setLevel( uint8_t level )
|
void Core::Entity::Player::setLevel( uint8_t level )
|
||||||
{
|
{
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex;
|
||||||
m_classArray[classJobIndex] = level;
|
m_classArray[classJobIndex] = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::setLevelForClass( uint8_t level, Common::ClassJob classjob )
|
void Core::Entity::Player::setLevelForClass( uint8_t level, Common::ClassJob classjob )
|
||||||
{
|
{
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( classjob ) )->expArrayIndex;
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( classjob ) )->expArrayIndex;
|
||||||
|
|
||||||
if( m_classArray[classJobIndex] == 0 )
|
if( m_classArray[classJobIndex] == 0 )
|
||||||
insertDbClass( classJobIndex );
|
insertDbClass( classJobIndex );
|
||||||
|
@ -797,7 +817,8 @@ void Core::Entity::Player::setLookAt( uint8_t index, uint8_t value )
|
||||||
// spawn this player for pTarget
|
// spawn this player for pTarget
|
||||||
void Core::Entity::Player::spawn( Entity::PlayerPtr pTarget )
|
void Core::Entity::Player::spawn( Entity::PlayerPtr pTarget )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( pTarget->getId() ) + "] Spawning " +
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->debug( "[" + std::to_string( pTarget->getId() ) + "] Spawning " +
|
||||||
getName() + " for " +
|
getName() + " for " +
|
||||||
pTarget->getName() );
|
pTarget->getName() );
|
||||||
|
|
||||||
|
@ -809,8 +830,8 @@ void Core::Entity::Player::spawn( Entity::PlayerPtr pTarget )
|
||||||
void Core::Entity::Player::despawn( Entity::PlayerPtr pTarget )
|
void Core::Entity::Player::despawn( Entity::PlayerPtr pTarget )
|
||||||
{
|
{
|
||||||
auto pPlayer = pTarget;
|
auto pPlayer = pTarget;
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
g_framework.getLogger().debug( "despawning " + getName() + " for " + pTarget->getName() );
|
pLog->debug( "despawning " + getName() + " for " + pTarget->getName() );
|
||||||
|
|
||||||
pPlayer->freePlayerSpawnId( getId() );
|
pPlayer->freePlayerSpawnId( getId() );
|
||||||
|
|
||||||
|
@ -875,7 +896,8 @@ const uint8_t* Core::Entity::Player::getStateFlags() const
|
||||||
|
|
||||||
bool Core::Entity::Player::actionHasCastTime( uint32_t actionId ) //TODO: Add logic for special cases
|
bool Core::Entity::Player::actionHasCastTime( uint32_t actionId ) //TODO: Add logic for special cases
|
||||||
{
|
{
|
||||||
auto actionInfoPtr = g_framework.getExdDataGen().get< Core::Data::Action >( actionId );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto actionInfoPtr = pExdData->get< Core::Data::Action >( actionId );
|
||||||
if( actionInfoPtr->preservesCombo )
|
if( actionInfoPtr->preservesCombo )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1035,7 +1057,8 @@ void Core::Entity::Player::update( int64_t currTime )
|
||||||
|
|
||||||
void Core::Entity::Player::onMobKill( uint16_t nameId )
|
void Core::Entity::Player::onMobKill( uint16_t nameId )
|
||||||
{
|
{
|
||||||
g_framework.getScriptMgr().onMobKill( *getAsPlayer(), nameId );
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
pScriptMgr->onMobKill( *getAsPlayer(), nameId );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::freePlayerSpawnId( uint32_t actorId )
|
void Core::Entity::Player::freePlayerSpawnId( uint32_t actorId )
|
||||||
|
@ -1145,7 +1168,8 @@ const uint8_t* Core::Entity::Player::getGcRankArray() const
|
||||||
|
|
||||||
void Core::Entity::Player::queuePacket( Network::Packets::GamePacketPtr pPacket )
|
void Core::Entity::Player::queuePacket( Network::Packets::GamePacketPtr pPacket )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( m_id );
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
|
auto pSession = pServerZone->getSession( m_id );
|
||||||
|
|
||||||
if( !pSession )
|
if( !pSession )
|
||||||
return;
|
return;
|
||||||
|
@ -1159,7 +1183,8 @@ void Core::Entity::Player::queuePacket( Network::Packets::GamePacketPtr pPacket
|
||||||
|
|
||||||
void Core::Entity::Player::queueChatPacket( Network::Packets::GamePacketPtr pPacket )
|
void Core::Entity::Player::queueChatPacket( Network::Packets::GamePacketPtr pPacket )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( m_id );
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
|
auto pSession = pServerZone->getSession( m_id );
|
||||||
|
|
||||||
if( !pSession )
|
if( !pSession )
|
||||||
return;
|
return;
|
||||||
|
@ -1621,14 +1646,14 @@ void Core::Entity::Player::emote( uint32_t emoteId, uint64_t targetId )
|
||||||
|
|
||||||
void Core::Entity::Player::teleportQuery( uint16_t aetheryteId )
|
void Core::Entity::Player::teleportQuery( uint16_t aetheryteId )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
// TODO: only register this action if enough gil is in possession
|
// TODO: only register this action if enough gil is in possession
|
||||||
auto& exdDataGen = g_framework.getExdDataGen();
|
auto targetAetheryte = pExdData->get< Core::Data::Aetheryte >( aetheryteId );
|
||||||
auto targetAetheryte = exdDataGen.get< Core::Data::Aetheryte >( aetheryteId );
|
|
||||||
|
|
||||||
if( targetAetheryte )
|
if( targetAetheryte )
|
||||||
{
|
{
|
||||||
auto fromAetheryte = exdDataGen.get< Core::Data::Aetheryte >(
|
auto fromAetheryte = pExdData->get< Core::Data::Aetheryte >(
|
||||||
exdDataGen.get< Core::Data::TerritoryType >( getZoneId() )->aetheryte );
|
pExdData->get< Core::Data::TerritoryType >( getZoneId() )->aetheryte );
|
||||||
|
|
||||||
// calculate cost - does not apply for favorite points or homepoints neither checks for aether tickets
|
// calculate cost - does not apply for favorite points or homepoints neither checks for aether tickets
|
||||||
auto cost = static_cast< uint16_t > ( ( sqrt( pow( fromAetheryte->aetherstreamX - targetAetheryte->aetherstreamX, 2 ) +
|
auto cost = static_cast< uint16_t > ( ( sqrt( pow( fromAetheryte->aetherstreamX - targetAetheryte->aetherstreamX, 2 ) +
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "ServerZone.h"
|
#include "ServerZone.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -84,7 +84,8 @@ void Core::Entity::Player::directorPlayScene( uint32_t eventId, uint32_t scene,
|
||||||
auto pEvent = getEvent( eventId );
|
auto pEvent = getEvent( eventId );
|
||||||
if( !pEvent )
|
if( !pEvent )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +148,8 @@ void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene,
|
||||||
}
|
}
|
||||||
else if( !pEvent )
|
else if( !pEvent )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,7 +177,8 @@ void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene,
|
||||||
}
|
}
|
||||||
else if( !pEvent )
|
else if( !pEvent )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +196,8 @@ void Core::Entity::Player::eventFinish( uint32_t eventId, uint32_t freePlayer )
|
||||||
|
|
||||||
if( !pEvent )
|
if( !pEvent )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -262,7 +266,8 @@ void Core::Entity::Player::eventActionStart( uint32_t eventId,
|
||||||
}
|
}
|
||||||
else if( !pEvent )
|
else if( !pEvent )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +295,8 @@ void Core::Entity::Player::eventItemActionStart( uint32_t eventId,
|
||||||
|
|
||||||
void Core::Entity::Player::onLogin()
|
void Core::Entity::Player::onLogin()
|
||||||
{
|
{
|
||||||
for( auto& child : g_framework.getServerZone().getConfig()->getChild( "Settings.Parameters.MotDArray" ) )
|
auto pConfig = g_fw.get< XMLConfig >();
|
||||||
|
for( auto& child : pConfig->getChild( "Settings.Parameters.MotDArray" ) )
|
||||||
{
|
{
|
||||||
sendNotice( child.second.data() );
|
sendNotice( child.second.data() );
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "Player.h"
|
#include "Player.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -1014,14 +1014,15 @@ void Core::Entity::Player::removeQuestsCompleted( uint32_t questId )
|
||||||
|
|
||||||
bool Core::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t optionalChoice )
|
bool Core::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t optionalChoice )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
uint32_t playerLevel = getLevel();
|
uint32_t playerLevel = getLevel();
|
||||||
auto questInfo = g_framework.getExdDataGen().get< Core::Data::Quest >( questId );
|
auto questInfo = pExdData->get< Core::Data::Quest >( questId );
|
||||||
|
|
||||||
|
|
||||||
if( !questInfo )
|
if( !questInfo )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
auto paramGrowth = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( questInfo->classJobLevel0 );
|
auto paramGrowth = pExdData->get< Core::Data::ParamGrow >( questInfo->classJobLevel0 );
|
||||||
|
|
||||||
// TODO: use the correct formula, this one is wrong
|
// TODO: use the correct formula, this one is wrong
|
||||||
uint32_t exp = ( questInfo->expFactor * paramGrowth->questExpModifier * ( 45 + 5 * questInfo->classJobLevel0 ) ) / 100;
|
uint32_t exp = ( questInfo->expFactor * paramGrowth->questExpModifier * ( 45 + 5 * questInfo->classJobLevel0 ) ) / 100;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -35,12 +35,16 @@ using namespace Core::Network::Packets::Server;
|
||||||
// load player from the db
|
// load player from the db
|
||||||
bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
|
||||||
const std::string char_id_str = std::to_string( charId );
|
const std::string char_id_str = std::to_string( charId );
|
||||||
|
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CharaDbStatements::CHARA_SEL );
|
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_SEL );
|
||||||
|
|
||||||
stmt->setUInt( 1, charId );
|
stmt->setUInt( 1, charId );
|
||||||
auto res = g_framework.getCharaDb().query( stmt );
|
auto res = pDb->query( stmt );
|
||||||
|
|
||||||
if( !res->next() )
|
if( !res->next() )
|
||||||
return false;
|
return false;
|
||||||
|
@ -68,10 +72,10 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
ZonePtr pCurrZone = nullptr;
|
ZonePtr pCurrZone = nullptr;
|
||||||
|
|
||||||
// if the zone is an instanceContent zone, we need to actually find the instance
|
// if the zone is an instanceContent zone, we need to actually find the instance
|
||||||
if( g_framework.getTerritoryMgr().isInstanceContentTerritory( zoneId ) )
|
if( pTeriMgr->isInstanceContentTerritory( zoneId ) )
|
||||||
{
|
{
|
||||||
// try to find an instance actually linked to this player
|
// try to find an instance actually linked to this player
|
||||||
pCurrZone = g_framework.getTerritoryMgr().getLinkedInstance( m_id );
|
pCurrZone = pTeriMgr->getLinkedInstance( m_id );
|
||||||
// if none found, revert to previous zone and position
|
// if none found, revert to previous zone and position
|
||||||
if( !pCurrZone )
|
if( !pCurrZone )
|
||||||
{
|
{
|
||||||
|
@ -80,12 +84,12 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
m_pos.y = m_prevPos.y;
|
m_pos.y = m_prevPos.y;
|
||||||
m_pos.z = m_prevPos.z;
|
m_pos.z = m_prevPos.z;
|
||||||
setRot( m_prevRot );
|
setRot( m_prevRot );
|
||||||
pCurrZone = g_framework.getTerritoryMgr().getZoneByTerriId( zoneId );
|
pCurrZone = pTeriMgr->getZoneByTerriId( zoneId );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pCurrZone = g_framework.getTerritoryMgr().getZoneByTerriId( zoneId );
|
pCurrZone =pTeriMgr->getZoneByTerriId( zoneId );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_zoneId = zoneId;
|
m_zoneId = zoneId;
|
||||||
|
@ -94,12 +98,12 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
// see if a valid zone could be found for the character
|
// see if a valid zone could be found for the character
|
||||||
if( !pCurrZone )
|
if( !pCurrZone )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "[" + char_id_str + "] Zone " + std::to_string( zoneId ) + " not found!" );
|
pLog->error( "[" + char_id_str + "] Zone " + std::to_string( zoneId ) + " not found!" );
|
||||||
g_framework.getLogger().error( "[" + char_id_str + "] Setting default zone instead" );
|
pLog->error( "[" + char_id_str + "] Setting default zone instead" );
|
||||||
|
|
||||||
// default to new gridania
|
// default to new gridania
|
||||||
// TODO: should probably just abort and mark character as corrupt
|
// TODO: should probably just abort and mark character as corrupt
|
||||||
pCurrZone = g_framework.getTerritoryMgr().getZoneByTerriId( 132 );
|
pCurrZone = pTeriMgr->getZoneByTerriId( 132 );
|
||||||
|
|
||||||
m_pos.x = 0.0f;
|
m_pos.x = 0.0f;
|
||||||
m_pos.y = 0.0f;
|
m_pos.y = 0.0f;
|
||||||
|
@ -186,7 +190,7 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
m_pCell = nullptr;
|
m_pCell = nullptr;
|
||||||
|
|
||||||
if( !loadActiveQuests() || !loadClassData() || !loadSearchInfo() )
|
if( !loadActiveQuests() || !loadClassData() || !loadSearchInfo() )
|
||||||
g_framework.getLogger().error( "Player id " + char_id_str + " data corrupt!" );
|
pLog->error( "Player id " + char_id_str + " data corrupt!" );
|
||||||
|
|
||||||
m_maxHp = getMaxHp();
|
m_maxHp = getMaxHp();
|
||||||
m_maxMp = getMaxMp();
|
m_maxMp = getMaxMp();
|
||||||
|
@ -230,7 +234,7 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
|
|
||||||
initSpawnIdQueue();
|
initSpawnIdQueue();
|
||||||
|
|
||||||
if( !g_framework.getTerritoryMgr().movePlayer( pCurrZone, getAsPlayer() ) )
|
if( !pTeriMgr->movePlayer( pCurrZone, getAsPlayer() ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -238,11 +242,11 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession )
|
||||||
|
|
||||||
bool Core::Entity::Player::loadActiveQuests()
|
bool Core::Entity::Player::loadActiveQuests()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CharaDbStatements::CHARA_QUEST_SEL );
|
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_QUEST_SEL );
|
||||||
|
|
||||||
stmt->setUInt( 1, m_id );
|
stmt->setUInt( 1, m_id );
|
||||||
auto res = g_framework.getCharaDb().query( stmt );
|
auto res = pDb->query( stmt );
|
||||||
|
|
||||||
while( res->next() )
|
while( res->next() )
|
||||||
{
|
{
|
||||||
|
@ -274,11 +278,11 @@ bool Core::Entity::Player::loadActiveQuests()
|
||||||
|
|
||||||
bool Core::Entity::Player::loadClassData()
|
bool Core::Entity::Player::loadClassData()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
// ClassIdx, Exp, Lvl
|
// ClassIdx, Exp, Lvl
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CharaDbStatements::CHARA_CLASS_SEL );
|
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_CLASS_SEL );
|
||||||
stmt->setUInt( 1, m_id );
|
stmt->setUInt( 1, m_id );
|
||||||
auto res = g_framework.getCharaDb().query( stmt );
|
auto res = pDb->query( stmt );
|
||||||
|
|
||||||
while( res->next() )
|
while( res->next() )
|
||||||
{
|
{
|
||||||
|
@ -295,9 +299,10 @@ bool Core::Entity::Player::loadClassData()
|
||||||
|
|
||||||
bool Core::Entity::Player::loadSearchInfo()
|
bool Core::Entity::Player::loadSearchInfo()
|
||||||
{
|
{
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_SEL );
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_SEARCHINFO_SEL );
|
||||||
stmt->setUInt( 1, m_id );
|
stmt->setUInt( 1, m_id );
|
||||||
auto res = g_framework.getCharaDb().query( stmt );
|
auto res = pDb->query( stmt );
|
||||||
|
|
||||||
if( !res->next() )
|
if( !res->next() )
|
||||||
return false;
|
return false;
|
||||||
|
@ -315,7 +320,7 @@ bool Core::Entity::Player::loadSearchInfo()
|
||||||
|
|
||||||
void Core::Entity::Player::updateSql()
|
void Core::Entity::Player::updateSql()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
/*"Hp 1, Mp 2, Tp 3, Gp 4, Mode 5, Mount 6, InvincibleGM 7, Voice 8, "
|
/*"Hp 1, Mp 2, Tp 3, Gp 4, Mode 5, Mount 6, InvincibleGM 7, Voice 8, "
|
||||||
"Customize 9, ModelMainWeapon 10, ModelSubWeapon 11, ModelSystemWeapon 12, "
|
"Customize 9, ModelMainWeapon 10, ModelSubWeapon 11, ModelSystemWeapon 12, "
|
||||||
"ModelEquip 13, EmoteModeType 14, Language 15, IsNewGame 16, IsNewAdventurer 17, "
|
"ModelEquip 13, EmoteModeType 14, Language 15, IsNewGame 16, IsNewAdventurer 17, "
|
||||||
|
@ -326,7 +331,7 @@ void Core::Entity::Player::updateSql()
|
||||||
"EquippedMannequin 44, ConfigFlags 45, QuestCompleteFlags 46, OpeningSequence 47, "
|
"EquippedMannequin 44, ConfigFlags 45, QuestCompleteFlags 46, OpeningSequence 47, "
|
||||||
"QuestTracking 48, GrandCompany 49, GrandCompanyRank 50, Discovery 51, GMRank 52, Unlocks 53, "
|
"QuestTracking 48, GrandCompany 49, GrandCompanyRank 50, Discovery 51, GMRank 52, Unlocks 53, "
|
||||||
"CFPenaltyUntil 54"*/
|
"CFPenaltyUntil 54"*/
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CharaDbStatements::CHARA_UP );
|
auto stmt = pDb->getPreparedStatement( Db::CharaDbStatements::CHARA_UP );
|
||||||
|
|
||||||
stmt->setInt( 1, getHp() );
|
stmt->setInt( 1, getHp() );
|
||||||
stmt->setInt( 2, getMp() );
|
stmt->setInt( 2, getMp() );
|
||||||
|
@ -435,7 +440,7 @@ void Core::Entity::Player::updateSql()
|
||||||
|
|
||||||
stmt->setInt( 55, m_id );
|
stmt->setInt( 55, m_id );
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( stmt );
|
pDb->execute( stmt );
|
||||||
|
|
||||||
////// Searchinfo
|
////// Searchinfo
|
||||||
updateDbSearchInfo();
|
updateDbSearchInfo();
|
||||||
|
@ -450,54 +455,58 @@ void Core::Entity::Player::updateSql()
|
||||||
|
|
||||||
void Core::Entity::Player::updateDbClass() const
|
void Core::Entity::Player::updateDbClass() const
|
||||||
{
|
{
|
||||||
uint8_t classJobIndex = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast<uint8_t>( getClass() ) )->expArrayIndex;
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
uint8_t classJobIndex = pExdData->get< Core::Data::ClassJob >( static_cast<uint8_t>( getClass() ) )->expArrayIndex;
|
||||||
|
|
||||||
//Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ?
|
//Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ?
|
||||||
auto stmtS = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_CLASS_UP );
|
auto stmtS = pDb->getPreparedStatement( Db::CHARA_CLASS_UP );
|
||||||
stmtS->setInt( 1, getExp() );
|
stmtS->setInt( 1, getExp() );
|
||||||
stmtS->setInt( 2, getLevel() );
|
stmtS->setInt( 2, getLevel() );
|
||||||
stmtS->setInt( 3, m_id );
|
stmtS->setInt( 3, m_id );
|
||||||
stmtS->setInt( 4, classJobIndex );
|
stmtS->setInt( 4, classJobIndex );
|
||||||
g_framework.getCharaDb().execute( stmtS );
|
pDb->execute( stmtS );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::insertDbClass( const uint8_t classJobIndex ) const
|
void Core::Entity::Player::insertDbClass( const uint8_t classJobIndex ) const
|
||||||
{
|
{
|
||||||
auto stmtClass = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_CLASS_INS );
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto stmtClass = pDb->getPreparedStatement( Db::CHARA_CLASS_INS );
|
||||||
stmtClass->setInt( 1, getId() );
|
stmtClass->setInt( 1, getId() );
|
||||||
stmtClass->setInt( 2, classJobIndex );
|
stmtClass->setInt( 2, classJobIndex );
|
||||||
stmtClass->setInt( 3, 0 );
|
stmtClass->setInt( 3, 0 );
|
||||||
stmtClass->setInt( 4, 1 );
|
stmtClass->setInt( 4, 1 );
|
||||||
g_framework.getCharaDb().directExecute( stmtClass );
|
pDb->directExecute( stmtClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::updateDbSearchInfo() const
|
void Core::Entity::Player::updateDbSearchInfo() const
|
||||||
{
|
{
|
||||||
auto stmtS = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS );
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto stmtS = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS );
|
||||||
stmtS->setInt( 1, m_searchSelectClass );
|
stmtS->setInt( 1, m_searchSelectClass );
|
||||||
stmtS->setInt( 2, m_id );
|
stmtS->setInt( 2, m_id );
|
||||||
g_framework.getCharaDb().execute( stmtS );
|
pDb->execute( stmtS );
|
||||||
|
|
||||||
auto stmtS1 = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTREGION );
|
auto stmtS1 = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTREGION );
|
||||||
stmtS1->setInt( 1, m_searchSelectRegion );
|
stmtS1->setInt( 1, m_searchSelectRegion );
|
||||||
stmtS1->setInt( 2, m_id );
|
stmtS1->setInt( 2, m_id );
|
||||||
g_framework.getCharaDb().execute( stmtS1 );
|
pDb->execute( stmtS1 );
|
||||||
|
|
||||||
auto stmtS2 = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTREGION );
|
auto stmtS2 = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTREGION );
|
||||||
stmtS2->setString( 1, string( m_searchMessage != nullptr ? m_searchMessage : "" ) );
|
stmtS2->setString( 1, string( m_searchMessage != nullptr ? m_searchMessage : "" ) );
|
||||||
stmtS2->setInt( 2, m_id );
|
stmtS2->setInt( 2, m_id );
|
||||||
g_framework.getCharaDb().execute( stmtS2 );
|
pDb->execute( stmtS2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::updateDbAllQuests() const
|
void Core::Entity::Player::updateDbAllQuests() const
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
for( int32_t i = 0; i < 30; i++ )
|
for( int32_t i = 0; i < 30; i++ )
|
||||||
{
|
{
|
||||||
if( !m_activeQuests[i] )
|
if( !m_activeQuests[i] )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto stmtS3 = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_QUEST_UP );
|
auto stmtS3 = pDb->getPreparedStatement( Db::CHARA_QUEST_UP );
|
||||||
stmtS3->setInt( 1, m_activeQuests[i]->c.sequence );
|
stmtS3->setInt( 1, m_activeQuests[i]->c.sequence );
|
||||||
stmtS3->setInt( 2, m_activeQuests[i]->c.flags );
|
stmtS3->setInt( 2, m_activeQuests[i]->c.flags );
|
||||||
stmtS3->setInt( 3, m_activeQuests[i]->c.UI8A );
|
stmtS3->setInt( 3, m_activeQuests[i]->c.UI8A );
|
||||||
|
@ -509,22 +518,24 @@ void Core::Entity::Player::updateDbAllQuests() const
|
||||||
stmtS3->setInt( 9, m_activeQuests[i]->c.padding1 );
|
stmtS3->setInt( 9, m_activeQuests[i]->c.padding1 );
|
||||||
stmtS3->setInt( 10, m_id);
|
stmtS3->setInt( 10, m_id);
|
||||||
stmtS3->setInt( 11, m_activeQuests[i]->c.questId );
|
stmtS3->setInt( 11, m_activeQuests[i]->c.questId );
|
||||||
g_framework.getCharaDb().execute( stmtS3 );
|
pDb->execute( stmtS3 );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::deleteQuest( uint16_t questId ) const
|
void Core::Entity::Player::deleteQuest( uint16_t questId ) const
|
||||||
{
|
{
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_QUEST_DEL );
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto stmt = pDb->getPreparedStatement( Db::CHARA_QUEST_DEL );
|
||||||
stmt->setInt( 1, m_id );
|
stmt->setInt( 1, m_id );
|
||||||
stmt->setInt( 2, questId );
|
stmt->setInt( 2, questId );
|
||||||
g_framework.getCharaDb().execute( stmt );
|
pDb->execute( stmt );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uint8_t seq ) const
|
void Core::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uint8_t seq ) const
|
||||||
{
|
{
|
||||||
auto stmt = g_framework.getCharaDb().getPreparedStatement( Db::CHARA_QUEST_INS );
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto stmt = pDb->getPreparedStatement( Db::CHARA_QUEST_INS );
|
||||||
stmt->setInt( 1, m_id );
|
stmt->setInt( 1, m_id );
|
||||||
stmt->setInt( 2, index );
|
stmt->setInt( 2, index );
|
||||||
stmt->setInt( 3, questId );
|
stmt->setInt( 3, questId );
|
||||||
|
@ -537,5 +548,5 @@ void Core::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uint8_t
|
||||||
stmt->setInt( 10, 0 );
|
stmt->setInt( 10, 0 );
|
||||||
stmt->setInt( 11, 0 );
|
stmt->setInt( 11, 0 );
|
||||||
stmt->setInt( 12, 0 );
|
stmt->setInt( 12, 0 );
|
||||||
g_framework.getCharaDb().execute( stmt );
|
pDb->execute( stmt );
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
#include "Session.h"
|
#include "Session.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
// instanciate and initialize commands
|
// instanciate and initialize commands
|
||||||
Core::DebugCommandHandler::DebugCommandHandler()
|
Core::DebugCommandHandler::DebugCommandHandler()
|
||||||
|
@ -133,6 +133,8 @@ void Core::DebugCommandHandler::help( char* data, Entity::Player& player, boost:
|
||||||
|
|
||||||
void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
std::string subCommand = "";
|
std::string subCommand = "";
|
||||||
std::string params = "";
|
std::string params = "";
|
||||||
|
|
||||||
|
@ -151,7 +153,7 @@ void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost:
|
||||||
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
||||||
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( player.getId() ) + "] " +
|
pLog->debug( "[" + std::to_string( player.getId() ) + "] " +
|
||||||
"subCommand " + subCommand + " params: " + params );
|
"subCommand " + subCommand + " params: " + params );
|
||||||
|
|
||||||
|
|
||||||
|
@ -219,8 +221,8 @@ void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost:
|
||||||
"', '" + std::to_string( map_id ) +
|
"', '" + std::to_string( map_id ) +
|
||||||
"', '" + std::to_string( discover_id ) + "')";
|
"', '" + std::to_string( discover_id ) + "')";
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( query1 );
|
pDb->execute( query1 );
|
||||||
g_framework.getCharaDb().execute( query2 );
|
pDb->execute( query2 );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,6 +318,7 @@ void Core::DebugCommandHandler::set( char * data, Entity::Player& player, boost:
|
||||||
|
|
||||||
void Core::DebugCommandHandler::add( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::add( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
std::string subCommand;
|
std::string subCommand;
|
||||||
std::string params = "";
|
std::string params = "";
|
||||||
|
|
||||||
|
@ -334,7 +337,7 @@ void Core::DebugCommandHandler::add( char * data, Entity::Player& player, boost:
|
||||||
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
||||||
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( player.getId() ) + "] " +
|
pLog->debug( "[" + std::to_string( player.getId() ) + "] " +
|
||||||
"subCommand " + subCommand + " params: " + params );
|
"subCommand " + subCommand + " params: " + params );
|
||||||
|
|
||||||
|
|
||||||
|
@ -417,6 +420,8 @@ void Core::DebugCommandHandler::add( char * data, Entity::Player& player, boost:
|
||||||
|
|
||||||
void Core::DebugCommandHandler::get( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::get( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
std::string subCommand;
|
std::string subCommand;
|
||||||
std::string params = "";
|
std::string params = "";
|
||||||
|
|
||||||
|
@ -435,14 +440,14 @@ void Core::DebugCommandHandler::get( char * data, Entity::Player& player, boost:
|
||||||
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
||||||
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( player.getId() ) + "] " +
|
pLog->debug( "[" + std::to_string( player.getId() ) + "] " +
|
||||||
"subCommand " + subCommand + " params: " + params );
|
"subCommand " + subCommand + " params: " + params );
|
||||||
|
|
||||||
|
|
||||||
if( ( subCommand == "pos" ) )
|
if( ( subCommand == "pos" ) )
|
||||||
{
|
{
|
||||||
|
|
||||||
int16_t map_id = g_framework.getExdDataGen().get< Core::Data::TerritoryType >( player.getCurrentZone()->getTerritoryId() )->map;
|
int16_t map_id = pExdData->get< Core::Data::TerritoryType >( player.getCurrentZone()->getTerritoryId() )->map;
|
||||||
|
|
||||||
player.sendNotice( "Pos:\n" +
|
player.sendNotice( "Pos:\n" +
|
||||||
std::to_string( player.getPos().x ) + "\n" +
|
std::to_string( player.getPos().x ) + "\n" +
|
||||||
|
@ -461,20 +466,24 @@ void Core::DebugCommandHandler::get( char * data, Entity::Player& player, boost:
|
||||||
|
|
||||||
void Core::DebugCommandHandler::injectPacket( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::injectPacket( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( player.getId() );
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
|
auto pSession = pServerZone->getSession( player.getId() );
|
||||||
if( pSession )
|
if( pSession )
|
||||||
pSession->getZoneConnection()->injectPacket( data + 7, player );
|
pSession->getZoneConnection()->injectPacket( data + 7, player );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::DebugCommandHandler::injectChatPacket( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::injectChatPacket( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( player.getId() );
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
|
auto pSession = pServerZone->getSession( player.getId() );
|
||||||
if( pSession )
|
if( pSession )
|
||||||
pSession->getChatConnection()->injectPacket( data + 8, player );
|
pSession->getChatConnection()->injectPacket( data + 8, player );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::DebugCommandHandler::replay( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::replay( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
std::string subCommand;
|
std::string subCommand;
|
||||||
std::string params = "";
|
std::string params = "";
|
||||||
|
|
||||||
|
@ -493,25 +502,25 @@ void Core::DebugCommandHandler::replay( char * data, Entity::Player& player, boo
|
||||||
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
||||||
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( player.getId() ) + "] " +
|
pLog->debug( "[" + std::to_string( player.getId() ) + "] " +
|
||||||
"subCommand " + subCommand + " params: " + params );
|
"subCommand " + subCommand + " params: " + params );
|
||||||
|
|
||||||
|
|
||||||
if( subCommand == "start" )
|
if( subCommand == "start" )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( player.getId() );
|
auto pSession = pServerZone->getSession( player.getId() );
|
||||||
if( pSession )
|
if( pSession )
|
||||||
pSession->startReplay( params );
|
pSession->startReplay( params );
|
||||||
}
|
}
|
||||||
else if( subCommand == "stop" )
|
else if( subCommand == "stop" )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( player.getId() );
|
auto pSession = pServerZone->getSession( player.getId() );
|
||||||
if( pSession )
|
if( pSession )
|
||||||
pSession->stopReplay();
|
pSession->stopReplay();
|
||||||
}
|
}
|
||||||
else if( subCommand == "info" )
|
else if( subCommand == "info" )
|
||||||
{
|
{
|
||||||
auto pSession = g_framework.getServerZone().getSession( player.getId() );
|
auto pSession = pServerZone->getSession( player.getId() );
|
||||||
if( pSession )
|
if( pSession )
|
||||||
pSession->sendReplayInfo();
|
pSession->sendReplayInfo();
|
||||||
}
|
}
|
||||||
|
@ -572,13 +581,16 @@ void Core::DebugCommandHandler::nudge( char * data, Entity::Player& player, boos
|
||||||
|
|
||||||
void Core::DebugCommandHandler::serverInfo( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::serverInfo( char * data, Entity::Player& player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
player.sendDebug( "SapphireZone " + Version::VERSION + "\nRev: " + Version::GIT_HASH );
|
player.sendDebug( "SapphireZone " + Version::VERSION + "\nRev: " + Version::GIT_HASH );
|
||||||
player.sendDebug( "Compiled: " __DATE__ " " __TIME__ );
|
player.sendDebug( "Compiled: " __DATE__ " " __TIME__ );
|
||||||
player.sendDebug( "Sessions: " + std::to_string( g_framework.getServerZone().getSessionCount() ) );
|
player.sendDebug( "Sessions: " + std::to_string( pServerZone->getSessionCount() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
std::string subCommand;
|
std::string subCommand;
|
||||||
std::string params = "";
|
std::string params = "";
|
||||||
|
|
||||||
|
@ -598,7 +610,7 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
|
||||||
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
if( command->getName().length() + 1 + pos + 1 < strlen( data ) )
|
||||||
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
params = std::string( data + command->getName().length() + 1 + pos + 1 );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( player.getId() ) + "] " +
|
pLog->debug( "[" + std::to_string( player.getId() ) + "] " +
|
||||||
"subCommand " + subCommand + " params: " + params );
|
"subCommand " + subCommand + " params: " + params );
|
||||||
|
|
||||||
if( subCommand == "unload" )
|
if( subCommand == "unload" )
|
||||||
|
@ -606,7 +618,7 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
|
||||||
if ( subCommand == params )
|
if ( subCommand == params )
|
||||||
player.sendDebug( "Command failed: requires name of script" );
|
player.sendDebug( "Command failed: requires name of script" );
|
||||||
else
|
else
|
||||||
if( g_framework.getScriptMgr().getNativeScriptHandler().unloadScript( params ) )
|
if( pScriptMgr->getNativeScriptHandler().unloadScript( params ) )
|
||||||
player.sendDebug( "Unloaded script successfully." );
|
player.sendDebug( "Unloaded script successfully." );
|
||||||
else
|
else
|
||||||
player.sendDebug( "Failed to unload script: " + params );
|
player.sendDebug( "Failed to unload script: " + params );
|
||||||
|
@ -618,7 +630,7 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::set< Core::Scripting::ScriptInfo* > scripts;
|
std::set< Core::Scripting::ScriptInfo* > scripts;
|
||||||
g_framework.getScriptMgr().getNativeScriptHandler().findScripts( scripts, params );
|
pScriptMgr->getNativeScriptHandler().findScripts( scripts, params );
|
||||||
|
|
||||||
if( !scripts.empty() )
|
if( !scripts.empty() )
|
||||||
{
|
{
|
||||||
|
@ -642,7 +654,7 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
|
||||||
player.sendDebug( "Command failed: requires relative path to script" );
|
player.sendDebug( "Command failed: requires relative path to script" );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( g_framework.getScriptMgr().getNativeScriptHandler().loadScript( params ) )
|
if ( pScriptMgr->getNativeScriptHandler().loadScript( params ) )
|
||||||
player.sendDebug( "Loaded '" + params + "' successfully" );
|
player.sendDebug( "Loaded '" + params + "' successfully" );
|
||||||
else
|
else
|
||||||
player.sendDebug( "Failed to load '" + params + "'" );
|
player.sendDebug( "Failed to load '" + params + "'" );
|
||||||
|
@ -655,7 +667,7 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
|
||||||
player.sendDebug( "Command failed: requires name of script to reload" );
|
player.sendDebug( "Command failed: requires name of script to reload" );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_framework.getScriptMgr().getNativeScriptHandler().queueScriptReload( params );
|
pScriptMgr->getNativeScriptHandler().queueScriptReload( params );
|
||||||
player.sendDebug( "Queued script reload for script: " + params );
|
player.sendDebug( "Queued script reload for script: " + params );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -667,6 +679,7 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
|
||||||
|
|
||||||
void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, boost::shared_ptr< DebugCommand > command )
|
void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, boost::shared_ptr< DebugCommand > command )
|
||||||
{
|
{
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
std::string cmd( data ), params, subCommand;
|
std::string cmd( data ), params, subCommand;
|
||||||
auto cmdPos = cmd.find_first_of( ' ' );
|
auto cmdPos = cmd.find_first_of( ' ' );
|
||||||
|
|
||||||
|
@ -690,7 +703,7 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo
|
||||||
uint32_t instanceContentId;
|
uint32_t instanceContentId;
|
||||||
sscanf( params.c_str(), "%d", &instanceContentId );
|
sscanf( params.c_str(), "%d", &instanceContentId );
|
||||||
|
|
||||||
auto instance = g_framework.getTerritoryMgr().createInstanceContent( instanceContentId );
|
auto instance = pTeriMgr->createInstanceContent( instanceContentId );
|
||||||
if( instance )
|
if( instance )
|
||||||
player.sendDebug( "Created instance with id: " + std::to_string( instance->getGuId() ) + " -> " + instance->getName() );
|
player.sendDebug( "Created instance with id: " + std::to_string( instance->getGuId() ) + " -> " + instance->getName() );
|
||||||
else
|
else
|
||||||
|
@ -701,7 +714,7 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo
|
||||||
uint32_t terriId;
|
uint32_t terriId;
|
||||||
sscanf( params.c_str(), "%d", &terriId );
|
sscanf( params.c_str(), "%d", &terriId );
|
||||||
|
|
||||||
if( g_framework.getTerritoryMgr().removeTerritoryInstance( terriId ) )
|
if( pTeriMgr->removeTerritoryInstance( terriId ) )
|
||||||
player.sendDebug( "Removed instance with id: " + std::to_string( terriId ) );
|
player.sendDebug( "Removed instance with id: " + std::to_string( terriId ) );
|
||||||
else
|
else
|
||||||
player.sendDebug( "Failed to remove instance with id: " + std::to_string( terriId ) );
|
player.sendDebug( "Failed to remove instance with id: " + std::to_string( terriId ) );
|
||||||
|
|
|
@ -6,13 +6,14 @@
|
||||||
#include <boost/range/algorithm/remove_if.hpp>
|
#include <boost/range/algorithm/remove_if.hpp>
|
||||||
#include <boost/algorithm/string/classification.hpp>
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
|
|
||||||
std::string Core::Event::getEventName( uint32_t eventId )
|
std::string Core::Event::getEventName( uint32_t eventId )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
uint16_t eventType = eventId >> 16;
|
uint16_t eventType = eventId >> 16;
|
||||||
|
|
||||||
auto unknown = std::string{ "unknown" };
|
auto unknown = std::string{ "unknown" };
|
||||||
|
@ -21,7 +22,7 @@ std::string Core::Event::getEventName( uint32_t eventId )
|
||||||
{
|
{
|
||||||
case Event::EventHandler::EventHandlerType::Quest:
|
case Event::EventHandler::EventHandlerType::Quest:
|
||||||
{
|
{
|
||||||
auto questInfo = g_framework.getExdDataGen().get< Core::Data::Quest >( eventId );
|
auto questInfo = pExdData->get< Core::Data::Quest >( eventId );
|
||||||
if( !questInfo )
|
if( !questInfo )
|
||||||
return unknown + "Quest";
|
return unknown + "Quest";
|
||||||
|
|
||||||
|
@ -32,7 +33,7 @@ std::string Core::Event::getEventName( uint32_t eventId )
|
||||||
}
|
}
|
||||||
case Event::EventHandler::EventHandlerType::CustomTalk:
|
case Event::EventHandler::EventHandlerType::CustomTalk:
|
||||||
{
|
{
|
||||||
auto customTalkInfo = g_framework.getExdDataGen().get< Core::Data::CustomTalk >( eventId );
|
auto customTalkInfo = pExdData->get< Core::Data::CustomTalk >( eventId );
|
||||||
if( !customTalkInfo )
|
if( !customTalkInfo )
|
||||||
return unknown + "CustomTalk";
|
return unknown + "CustomTalk";
|
||||||
|
|
||||||
|
@ -43,21 +44,21 @@ std::string Core::Event::getEventName( uint32_t eventId )
|
||||||
}
|
}
|
||||||
case Event::EventHandler::EventHandlerType::Opening:
|
case Event::EventHandler::EventHandlerType::Opening:
|
||||||
{
|
{
|
||||||
auto openingInfo = g_framework.getExdDataGen().get< Core::Data::Opening >( eventId );
|
auto openingInfo = pExdData->get< Core::Data::Opening >( eventId );
|
||||||
if( openingInfo )
|
if( openingInfo )
|
||||||
return openingInfo->name;
|
return openingInfo->name;
|
||||||
return unknown + "Opening";
|
return unknown + "Opening";
|
||||||
}
|
}
|
||||||
case Event::EventHandler::EventHandlerType::Aetheryte:
|
case Event::EventHandler::EventHandlerType::Aetheryte:
|
||||||
{
|
{
|
||||||
auto aetherInfo = g_framework.getExdDataGen().get< Core::Data::Aetheryte >( eventId & 0xFFFF );
|
auto aetherInfo = pExdData->get< Core::Data::Aetheryte >( eventId & 0xFFFF );
|
||||||
if( aetherInfo->isAetheryte )
|
if( aetherInfo->isAetheryte )
|
||||||
return "Aetheryte";
|
return "Aetheryte";
|
||||||
return "Aethernet";
|
return "Aethernet";
|
||||||
}
|
}
|
||||||
case Event::EventHandler::EventHandlerType::ICDirector:
|
case Event::EventHandler::EventHandlerType::ICDirector:
|
||||||
{
|
{
|
||||||
auto contentInfo = g_framework.getExdDataGen().get< Core::Data::InstanceContent >( eventId & 0xFFFF );
|
auto contentInfo = pExdData->get< Core::Data::InstanceContent >( eventId & 0xFFFF );
|
||||||
std::string name = contentInfo->name;
|
std::string name = contentInfo->name;
|
||||||
|
|
||||||
name.erase( boost::remove_if( name, boost::is_any_of( "★_ '()[]-\x1a\x1\x2\x1f\x1\x3.:" ) ), name.end() );
|
name.erase( boost::remove_if( name, boost::is_any_of( "★_ '()[]-\x1a\x1\x2\x1f\x1\x3.:" ) ), name.end() );
|
||||||
|
@ -78,7 +79,8 @@ std::string Core::Event::getEventName( uint32_t eventId )
|
||||||
|
|
||||||
uint32_t Core::Event::mapEventActorToRealActor( uint32_t eventActorId )
|
uint32_t Core::Event::mapEventActorToRealActor( uint32_t eventActorId )
|
||||||
{
|
{
|
||||||
auto levelInfo = g_framework.getExdDataGen().get< Core::Data::Level >( eventActorId );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto levelInfo = pExdData->get< Core::Data::Level >( eventActorId );
|
||||||
if( levelInfo )
|
if( levelInfo )
|
||||||
return levelInfo->objectKey;
|
return levelInfo->objectKey;
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
#include <boost/make_shared.hpp>
|
|
||||||
|
|
||||||
#include "Framework.h"
|
|
||||||
|
|
||||||
Core::ServerZone g_serverZone( "config/settings_zone.xml" );
|
|
||||||
|
|
||||||
Core::Logger& Core::Framework::getLogger()
|
|
||||||
{
|
|
||||||
return g_log;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::DebugCommandHandler& Core::Framework::getDebugCommandHandler()
|
|
||||||
{
|
|
||||||
return g_debugCmdHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::Scripting::ScriptMgr& Core::Framework::getScriptMgr()
|
|
||||||
{
|
|
||||||
return g_scriptMgr;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::Data::ExdDataGenerated& Core::Framework::getExdDataGen()
|
|
||||||
{
|
|
||||||
return g_exdDataGen;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::TerritoryMgr& Core::Framework::getTerritoryMgr()
|
|
||||||
{
|
|
||||||
return g_territoryMgr;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::LinkshellMgr& Core::Framework::getLinkshellMgr()
|
|
||||||
{
|
|
||||||
return g_linkshellMgr;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >& Core::Framework::getCharaDb()
|
|
||||||
{
|
|
||||||
return g_charaDb;
|
|
||||||
}
|
|
||||||
|
|
||||||
Core::ServerZone& Core::Framework::getServerZone()
|
|
||||||
{
|
|
||||||
return g_serverZone;
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
#ifndef CORE_FRAMEWORK_H
|
|
||||||
#define CORE_FRAMEWORK_H
|
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include "Forwards.h"
|
|
||||||
|
|
||||||
#include "ServerZone.h"
|
|
||||||
|
|
||||||
#include <Logging/Logger.h>
|
|
||||||
#include <Exd/ExdDataGenerated.h>
|
|
||||||
#include <Database/CharaDbConnection.h>
|
|
||||||
#include <Database/DbWorkerPool.h>
|
|
||||||
|
|
||||||
#include "Script/ScriptMgr.h"
|
|
||||||
|
|
||||||
#include "Linkshell/LinkshellMgr.h"
|
|
||||||
|
|
||||||
#include "Zone/TerritoryMgr.h"
|
|
||||||
|
|
||||||
#include "DebugCommand/DebugCommandHandler.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace Core
|
|
||||||
{
|
|
||||||
|
|
||||||
class Framework
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
Logger g_log;
|
|
||||||
DebugCommandHandler g_debugCmdHandler;
|
|
||||||
Scripting::ScriptMgr g_scriptMgr;
|
|
||||||
Data::ExdDataGenerated g_exdDataGen;
|
|
||||||
TerritoryMgr g_territoryMgr;
|
|
||||||
LinkshellMgr g_linkshellMgr;
|
|
||||||
Db::DbWorkerPool< Db::CharaDbConnection > g_charaDb;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
Logger& getLogger();
|
|
||||||
DebugCommandHandler& getDebugCommandHandler();
|
|
||||||
Scripting::ScriptMgr& getScriptMgr();
|
|
||||||
Data::ExdDataGenerated& getExdDataGen();
|
|
||||||
TerritoryMgr& getTerritoryMgr();
|
|
||||||
LinkshellMgr& getLinkshellMgr();
|
|
||||||
Db::DbWorkerPool< Db::CharaDbConnection >& getCharaDb();
|
|
||||||
ServerZone& getServerZone();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif // CORE_FRAMEWORK_H
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "Item.h"
|
#include "Item.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network;
|
using namespace Core::Network;
|
||||||
|
@ -132,7 +132,9 @@ Core::ItemPtr Core::Inventory::getItemAt( uint16_t containerId, uint8_t slotId )
|
||||||
|
|
||||||
Core::ItemPtr Core::Inventory::createItem( uint32_t catalogId, uint8_t quantity )
|
Core::ItemPtr Core::Inventory::createItem( uint32_t catalogId, uint8_t quantity )
|
||||||
{
|
{
|
||||||
auto itemInfo = g_framework.getExdDataGen().get< Core::Data::Item >( catalogId );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto itemInfo = pExdData->get< Core::Data::Item >( catalogId );
|
||||||
|
|
||||||
uint8_t itemAmount = quantity;
|
uint8_t itemAmount = quantity;
|
||||||
|
|
||||||
|
@ -153,7 +155,7 @@ Core::ItemPtr Core::Inventory::createItem( uint32_t catalogId, uint8_t quantity
|
||||||
pItem->setModelIds( itemInfo->modelMain, itemInfo->modelSub );
|
pItem->setModelIds( itemInfo->modelMain, itemInfo->modelSub );
|
||||||
pItem->setCategory( static_cast< ItemUICategory >( itemInfo->itemUICategory ) );
|
pItem->setCategory( static_cast< ItemUICategory >( itemInfo->itemUICategory ) );
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( "INSERT INTO charaglobalitem ( CharacterId, itemId, catalogId, stack, flags ) VALUES ( " +
|
pDb->execute( "INSERT INTO charaglobalitem ( CharacterId, itemId, catalogId, stack, flags ) VALUES ( " +
|
||||||
std::to_string( m_pOwner->getId() ) + ", " +
|
std::to_string( m_pOwner->getId() ) + ", " +
|
||||||
std::to_string( pItem->getUId() ) + ", " +
|
std::to_string( pItem->getUId() ) + ", " +
|
||||||
std::to_string( pItem->getId() ) + ", " +
|
std::to_string( pItem->getId() ) + ", " +
|
||||||
|
@ -235,6 +237,7 @@ bool Core::Inventory::addCurrency( CurrencyType type, uint32_t amount )
|
||||||
|
|
||||||
void Core::Inventory::updateCurrencyDb()
|
void Core::Inventory::updateCurrencyDb()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
int32_t firstItemPos = -1;
|
int32_t firstItemPos = -1;
|
||||||
std::string query = "UPDATE charaitemcurrency SET ";
|
std::string query = "UPDATE charaitemcurrency SET ";
|
||||||
|
|
||||||
|
@ -256,12 +259,13 @@ void Core::Inventory::updateCurrencyDb()
|
||||||
|
|
||||||
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() );
|
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() );
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( query );
|
pDb->execute( query );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Core::Inventory::updateCrystalDb()
|
void Core::Inventory::updateCrystalDb()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
int32_t firstItemPos = -1;
|
int32_t firstItemPos = -1;
|
||||||
std::string query = "UPDATE charaitemcrystal SET ";
|
std::string query = "UPDATE charaitemcrystal SET ";
|
||||||
|
|
||||||
|
@ -283,11 +287,12 @@ void Core::Inventory::updateCrystalDb()
|
||||||
|
|
||||||
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() );
|
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() );
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( query );
|
pDb->execute( query );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Inventory::updateBagDb( InventoryType type )
|
void Core::Inventory::updateBagDb( InventoryType type )
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
std::string query = "UPDATE charaiteminventory SET ";
|
std::string query = "UPDATE charaiteminventory SET ";
|
||||||
|
|
||||||
for( int32_t i = 0; i <= 34; i++ )
|
for( int32_t i = 0; i <= 34; i++ )
|
||||||
|
@ -303,7 +308,7 @@ void Core::Inventory::updateBagDb( InventoryType type )
|
||||||
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() ) +
|
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() ) +
|
||||||
" AND storageId = " + std::to_string( static_cast< uint16_t >( type ) );
|
" AND storageId = " + std::to_string( static_cast< uint16_t >( type ) );
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( query );
|
pDb->execute( query );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Core::Inventory::isArmory( uint16_t containerId )
|
bool Core::Inventory::isArmory( uint16_t containerId )
|
||||||
|
@ -371,6 +376,8 @@ bool Core::Inventory::isEquipment( uint16_t containerId )
|
||||||
|
|
||||||
void Core::Inventory::updateMannequinDb( InventoryType type )
|
void Core::Inventory::updateMannequinDb( InventoryType type )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
std::string query = "UPDATE charaitemgearset SET ";
|
std::string query = "UPDATE charaitemgearset SET ";
|
||||||
|
|
||||||
for( int32_t i = 0; i <= 13; i++ )
|
for( int32_t i = 0; i <= 13; i++ )
|
||||||
|
@ -386,14 +393,15 @@ void Core::Inventory::updateMannequinDb( InventoryType type )
|
||||||
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() ) +
|
query += " WHERE CharacterId = " + std::to_string( m_pOwner->getId() ) +
|
||||||
" AND storageId = " + std::to_string( static_cast< uint16_t >( type ) );
|
" AND storageId = " + std::to_string( static_cast< uint16_t >( type ) );
|
||||||
|
|
||||||
g_framework.getLogger().debug( query );
|
pLog->debug( query );
|
||||||
g_framework.getCharaDb().execute( query );
|
pDb->execute( query );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Core::Inventory::updateItemDb( Core::ItemPtr pItem ) const
|
void Core::Inventory::updateItemDb( Core::ItemPtr pItem ) const
|
||||||
{
|
{
|
||||||
g_framework.getCharaDb().execute( "UPDATE charaglobalitem SET stack = " + std::to_string( pItem->getStackSize() ) + " " +
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
pDb->execute( "UPDATE charaglobalitem SET stack = " + std::to_string( pItem->getStackSize() ) + " " +
|
||||||
// TODO: add other attributes
|
// TODO: add other attributes
|
||||||
" WHERE itemId = " + std::to_string( pItem->getUId() ) );
|
" WHERE itemId = " + std::to_string( pItem->getUId() ) );
|
||||||
}
|
}
|
||||||
|
@ -469,8 +477,9 @@ bool Core::Inventory::isObtainable( uint32_t catalogId, uint8_t quantity )
|
||||||
|
|
||||||
int16_t Core::Inventory::addItem( uint16_t inventoryId, int8_t slotId, uint32_t catalogId, uint8_t quantity )
|
int16_t Core::Inventory::addItem( uint16_t inventoryId, int8_t slotId, uint32_t catalogId, uint8_t quantity )
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
auto itemInfo = g_framework.getExdDataGen().get< Core::Data::Item >( catalogId );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto itemInfo = pExdData->get< Core::Data::Item >( catalogId );
|
||||||
|
|
||||||
// if item data doesn't exist or it's a blank field
|
// if item data doesn't exist or it's a blank field
|
||||||
if( !itemInfo || itemInfo->levelItem == 0 )
|
if( !itemInfo || itemInfo->levelItem == 0 )
|
||||||
|
@ -503,7 +512,7 @@ int16_t Core::Inventory::addItem( uint16_t inventoryId, int8_t slotId, uint32_t
|
||||||
|
|
||||||
m_inventoryMap[inventoryId]->setItem( rSlotId, item );
|
m_inventoryMap[inventoryId]->setItem( rSlotId, item );
|
||||||
|
|
||||||
g_framework.getCharaDb().execute( "UPDATE charaiteminventory SET container_" + std::to_string( rSlotId ) + " = " + std::to_string( item->getUId() ) +
|
pDb->execute( "UPDATE charaiteminventory SET container_" + std::to_string( rSlotId ) + " = " + std::to_string( item->getUId() ) +
|
||||||
" WHERE storageId = " + std::to_string( inventoryId ) +
|
" WHERE storageId = " + std::to_string( inventoryId ) +
|
||||||
" AND CharacterId = " + std::to_string( m_pOwner->getId() ) );
|
" AND CharacterId = " + std::to_string( m_pOwner->getId() ) );
|
||||||
|
|
||||||
|
@ -646,14 +655,16 @@ void Core::Inventory::discardItem( uint16_t fromInventoryId, uint8_t fromSlotId
|
||||||
|
|
||||||
Core::ItemPtr Core::Inventory::loadItem( uint64_t uId )
|
Core::ItemPtr Core::Inventory::loadItem( uint64_t uId )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
// load actual item
|
// load actual item
|
||||||
auto itemRes = g_framework.getCharaDb().query( "SELECT catalogId, stack, flags FROM charaglobalitem WHERE itemId = " + std::to_string( uId ) + ";" );
|
auto itemRes = pDb->query( "SELECT catalogId, stack, flags FROM charaglobalitem WHERE itemId = " + std::to_string( uId ) + ";" );
|
||||||
if( !itemRes->next() )
|
if( !itemRes->next() )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
auto itemInfo = g_framework.getExdDataGen().get< Core::Data::Item >( itemRes->getUInt( 1 ) );
|
auto itemInfo = pExdData->get< Core::Data::Item >( itemRes->getUInt( 1 ) );
|
||||||
bool isHq = itemRes->getUInt( 3 ) == 1 ? true : false;
|
bool isHq = itemRes->getUInt( 3 ) == 1 ? true : false;
|
||||||
ItemPtr pItem( new Item( uId,
|
ItemPtr pItem( new Item( uId,
|
||||||
itemRes->getUInt( 1 ),
|
itemRes->getUInt( 1 ),
|
||||||
|
@ -673,9 +684,10 @@ Core::ItemPtr Core::Inventory::loadItem( uint64_t uId )
|
||||||
|
|
||||||
bool Core::Inventory::load()
|
bool Core::Inventory::load()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// load active gearset
|
// load active gearset
|
||||||
auto res = g_framework.getCharaDb().query( "SELECT storageId, container_0, container_1, container_2, container_3, "
|
auto res = pDb->query( "SELECT storageId, container_0, container_1, container_2, container_3, "
|
||||||
"container_4, container_5, container_6, container_7, "
|
"container_4, container_5, container_6, container_7, "
|
||||||
"container_8, container_9, container_10, container_11, "
|
"container_8, container_9, container_10, container_11, "
|
||||||
"container_12, container_13 "
|
"container_12, container_13 "
|
||||||
|
@ -705,7 +717,7 @@ bool Core::Inventory::load()
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Load Bags
|
// Load Bags
|
||||||
auto bagRes = g_framework.getCharaDb().query( "SELECT storageId, "
|
auto bagRes = pDb->query( "SELECT storageId, "
|
||||||
"container_0, container_1, container_2, container_3, container_4, "
|
"container_0, container_1, container_2, container_3, container_4, "
|
||||||
"container_5, container_6, container_7, container_8, container_9, "
|
"container_5, container_6, container_7, container_8, container_9, "
|
||||||
"container_10, container_11, container_12, container_13, container_14, "
|
"container_10, container_11, container_12, container_13, container_14, "
|
||||||
|
@ -738,7 +750,7 @@ bool Core::Inventory::load()
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Load Currency
|
// Load Currency
|
||||||
auto curRes = g_framework.getCharaDb().query( "SELECT storageId, "
|
auto curRes = pDb->query( "SELECT storageId, "
|
||||||
"container_0, container_1, container_2, container_3, container_4, "
|
"container_0, container_1, container_2, container_3, container_4, "
|
||||||
"container_5, container_6, container_7, container_8, container_9, "
|
"container_5, container_6, container_7, container_8, container_9, "
|
||||||
"container_10, container_11 "
|
"container_10, container_11 "
|
||||||
|
@ -767,7 +779,7 @@ bool Core::Inventory::load()
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Load Crystals
|
// Load Crystals
|
||||||
auto crystalRes = g_framework.getCharaDb().query( "SELECT storageId, "
|
auto crystalRes = pDb->query( "SELECT storageId, "
|
||||||
"container_0, container_1, container_2, container_3, container_4, "
|
"container_0, container_1, container_2, container_3, container_4, "
|
||||||
"container_5, container_6, container_7, container_8, container_9, "
|
"container_5, container_6, container_7, container_8, container_9, "
|
||||||
"container_10, container_11, container_12, container_13, container_14, "
|
"container_10, container_11, container_12, container_13, container_14, "
|
||||||
|
@ -874,7 +886,8 @@ uint16_t Core::Inventory::calculateEquippedGearItemLevel()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "Is one handed" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->debug( "Is one handed" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,8 +936,8 @@ Core::Inventory::ContainerType Core::Inventory::getContainerType( uint32_t conta
|
||||||
uint32_t Core::Inventory::getNextUId()
|
uint32_t Core::Inventory::getNextUId()
|
||||||
{
|
{
|
||||||
uint32_t charId = 0;
|
uint32_t charId = 0;
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
auto pQR = g_framework.getCharaDb().query( "SELECT MAX(ItemId) FROM charaglobalitem" );
|
auto pQR = pDb->query( "SELECT MAX(ItemId) FROM charaglobalitem" );
|
||||||
|
|
||||||
if( !pQR->next() )
|
if( !pQR->next() )
|
||||||
return 0x00500001;
|
return 0x00500001;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
#include "Item.h"
|
#include "Item.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::Item::Item()
|
Core::Item::Item()
|
||||||
{
|
{
|
||||||
|
@ -26,7 +26,8 @@ Core::Item::Item( uint64_t uId, uint32_t catalogId, uint64_t model1, uint64_t mo
|
||||||
m_model2( model2 ),
|
m_model2( model2 ),
|
||||||
m_isHq( isHq )
|
m_isHq( isHq )
|
||||||
{
|
{
|
||||||
auto itemInfo = g_framework.getExdDataGen().get< Core::Data::Item >( catalogId );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto itemInfo = pExdData->get< Core::Data::Item >( catalogId );
|
||||||
m_delayMs = itemInfo->delayms;
|
m_delayMs = itemInfo->delayms;
|
||||||
m_physicalDmg = itemInfo->damagePhys;
|
m_physicalDmg = itemInfo->damagePhys;
|
||||||
m_magicalDmg = itemInfo->damageMag;
|
m_magicalDmg = itemInfo->damageMag;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "ItemContainer.h"
|
#include "ItemContainer.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::ItemContainer::ItemContainer( uint16_t locationId ) :
|
Core::ItemContainer::ItemContainer( uint16_t locationId ) :
|
||||||
m_id( locationId ),
|
m_id( locationId ),
|
||||||
|
@ -35,19 +35,21 @@ uint8_t Core::ItemContainer::getEntryCount() const
|
||||||
|
|
||||||
void Core::ItemContainer::removeItem( uint8_t slotId )
|
void Core::ItemContainer::removeItem( uint8_t slotId )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
ItemMap::iterator it = m_itemMap.find( slotId );
|
ItemMap::iterator it = m_itemMap.find( slotId );
|
||||||
|
|
||||||
if( it != m_itemMap.end() )
|
if( it != m_itemMap.end() )
|
||||||
{
|
{
|
||||||
g_framework.getCharaDb().execute( "DELETE FROM charaglobalitem WHERE itemId = " + std::to_string( it->second->getUId() ) );
|
pDb->execute( "DELETE FROM charaglobalitem WHERE itemId = " + std::to_string( it->second->getUId() ) );
|
||||||
|
|
||||||
m_itemMap.erase( it );
|
m_itemMap.erase( it );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "Dropped item from slot " + std::to_string( slotId ) );
|
pLog->debug( "Dropped item from slot " + std::to_string( slotId ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "Item could not be dropped from slot " + std::to_string( slotId ) );
|
pLog->debug( "Item could not be dropped from slot " + std::to_string( slotId ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +80,8 @@ Core::ItemPtr Core::ItemContainer::getItem( uint8_t slotId )
|
||||||
|
|
||||||
if( ( slotId > m_size ) || ( slotId == -1 ) )
|
if( ( slotId > m_size ) || ( slotId == -1 ) )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Slot out of range " + std::to_string( slotId ) );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->error( "Slot out of range " + std::to_string( slotId ) );
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
#include "LinkshellMgr.h"
|
#include "LinkshellMgr.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::LinkshellMgr::LinkshellMgr()
|
Core::LinkshellMgr::LinkshellMgr()
|
||||||
{
|
{
|
||||||
|
@ -16,8 +16,8 @@ Core::LinkshellMgr::LinkshellMgr()
|
||||||
|
|
||||||
bool Core::LinkshellMgr::loadLinkshells()
|
bool Core::LinkshellMgr::loadLinkshells()
|
||||||
{
|
{
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
auto res = g_framework.getCharaDb().query( "SELECT LinkshellId, MasterCharacterId, CharacterIdList, "
|
auto res = pDb->query( "SELECT LinkshellId, MasterCharacterId, CharacterIdList, "
|
||||||
"LinkshellName, LeaderIdList, InviteIdList "
|
"LinkshellName, LeaderIdList, InviteIdList "
|
||||||
"FROM infolinkshell "
|
"FROM infolinkshell "
|
||||||
"ORDER BY LinkshellId ASC;" );
|
"ORDER BY LinkshellId ASC;" );
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "CalcBattle.h"
|
#include "CalcBattle.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Math;
|
using namespace Core::Math;
|
||||||
using namespace Core::Entity;
|
using namespace Core::Entity;
|
||||||
|
@ -33,8 +33,9 @@ using namespace Core::Entity;
|
||||||
|
|
||||||
uint32_t CalcBattle::calculateHealValue( PlayerPtr pPlayer, uint32_t potency )
|
uint32_t CalcBattle::calculateHealValue( PlayerPtr pPlayer, uint32_t potency )
|
||||||
{
|
{
|
||||||
auto classInfo = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
auto paramGrowthInfo = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( pPlayer->getLevel() );
|
auto classInfo = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
|
||||||
|
auto paramGrowthInfo = pExdData->get< Core::Data::ParamGrow >( pPlayer->getLevel() );
|
||||||
|
|
||||||
if( !classInfo || !paramGrowthInfo )
|
if( !classInfo || !paramGrowthInfo )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
using namespace Core::Math;
|
using namespace Core::Math;
|
||||||
using namespace Core::Entity;
|
using namespace Core::Entity;
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class used for battle-related formulas and calculations.
|
Class used for battle-related formulas and calculations.
|
||||||
|
@ -59,12 +59,13 @@ float CalcStats::calculateBaseStat( PlayerPtr pPlayer )
|
||||||
|
|
||||||
uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer )
|
uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
// TODO: Replace ApproxBaseHP with something that can get us an accurate BaseHP.
|
// TODO: Replace ApproxBaseHP with something that can get us an accurate BaseHP.
|
||||||
// Is there any way to pull reliable BaseHP without having to manually use a pet for every level, and using the values from a table?
|
// Is there any way to pull reliable BaseHP without having to manually use a pet for every level, and using the values from a table?
|
||||||
// More info here: https://docs.google.com/spreadsheets/d/1de06KGT0cNRUvyiXNmjNgcNvzBCCQku7jte5QxEQRbs/edit?usp=sharing
|
// More info here: https://docs.google.com/spreadsheets/d/1de06KGT0cNRUvyiXNmjNgcNvzBCCQku7jte5QxEQRbs/edit?usp=sharing
|
||||||
|
|
||||||
auto classInfo = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
|
auto classInfo = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
|
||||||
auto paramGrowthInfo = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( pPlayer->getLevel() );
|
auto paramGrowthInfo = pExdData->get< Core::Data::ParamGrow >( pPlayer->getLevel() );
|
||||||
|
|
||||||
if( !classInfo || !paramGrowthInfo )
|
if( !classInfo || !paramGrowthInfo )
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -96,8 +97,9 @@ uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer )
|
||||||
|
|
||||||
uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer )
|
uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer )
|
||||||
{
|
{
|
||||||
auto classInfo = g_framework.getExdDataGen().get< Core::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
auto paramGrowthInfo = g_framework.getExdDataGen().get< Core::Data::ParamGrow >( pPlayer->getLevel() );
|
auto classInfo = pExdData->get< Core::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
|
||||||
|
auto paramGrowthInfo = pExdData->get< Core::Data::ParamGrow >( pPlayer->getLevel() );
|
||||||
|
|
||||||
if( !classInfo || !paramGrowthInfo )
|
if( !classInfo || !paramGrowthInfo )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -111,34 +111,35 @@ void Core::Network::GameConnection::OnAccept( const std::string & host, uint16_t
|
||||||
{
|
{
|
||||||
GameConnectionPtr connection( new GameConnection( m_hive, m_pAcceptor ) );
|
GameConnectionPtr connection( new GameConnection( m_hive, m_pAcceptor ) );
|
||||||
m_pAcceptor->Accept( connection );
|
m_pAcceptor->Accept( connection );
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
g_framework.getLogger().info( "Connect from " + m_socket.remote_endpoint().address().to_string() );
|
pLog->info( "Connect from " + m_socket.remote_endpoint().address().to_string() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Core::Network::GameConnection::OnDisconnect()
|
void Core::Network::GameConnection::OnDisconnect()
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "GameConnection DISCONNECT" );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->debug( "GameConnection DISCONNECT" );
|
||||||
m_pSession = nullptr;
|
m_pSession = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Network::GameConnection::OnRecv( std::vector< uint8_t > & buffer )
|
void Core::Network::GameConnection::OnRecv( std::vector< uint8_t > & buffer )
|
||||||
{
|
{
|
||||||
// This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now.
|
// This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now.
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
Packets::FFXIVARR_PACKET_HEADER packetHeader{};
|
Packets::FFXIVARR_PACKET_HEADER packetHeader{};
|
||||||
const auto headerResult = Packets::getHeader( buffer, 0, packetHeader );
|
const auto headerResult = Packets::getHeader( buffer, 0, packetHeader );
|
||||||
|
|
||||||
if( headerResult == Incomplete )
|
if( headerResult == Incomplete )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info( "Dropping connection due to incomplete packet header." );
|
pLog->info( "Dropping connection due to incomplete packet header." );
|
||||||
g_framework.getLogger().info( "FIXME: Packet message bounary is not implemented." );
|
pLog->info( "FIXME: Packet message bounary is not implemented." );
|
||||||
Disconnect();
|
Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if( headerResult == Malformed )
|
else if( headerResult == Malformed )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info( "Dropping connection due to malformed packet header." );
|
pLog->info( "Dropping connection due to malformed packet header." );
|
||||||
Disconnect();
|
Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -150,14 +151,14 @@ void Core::Network::GameConnection::OnRecv( std::vector< uint8_t > & buffer )
|
||||||
|
|
||||||
if( packetResult == Incomplete )
|
if( packetResult == Incomplete )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info( "Dropping connection due to incomplete packets." );
|
pLog->info( "Dropping connection due to incomplete packets." );
|
||||||
g_framework.getLogger().info( "FIXME: Packet message bounary is not implemented." );
|
pLog->info( "FIXME: Packet message bounary is not implemented." );
|
||||||
Disconnect();
|
Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if( packetResult == Malformed )
|
else if( packetResult == Malformed )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info( "Dropping connection due to malformed packets." );
|
pLog->info( "Dropping connection due to malformed packets." );
|
||||||
Disconnect();
|
Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -168,7 +169,8 @@ void Core::Network::GameConnection::OnRecv( std::vector< uint8_t > & buffer )
|
||||||
|
|
||||||
void Core::Network::GameConnection::OnError( const boost::system::error_code & error )
|
void Core::Network::GameConnection::OnError( const boost::system::error_code & error )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "GameConnection ERROR: " + error.message() );
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->debug( "GameConnection ERROR: " + error.message() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Network::GameConnection::queueInPacket( Core::Network::Packets::GamePacketPtr inPacket )
|
void Core::Network::GameConnection::queueInPacket( Core::Network::Packets::GamePacketPtr inPacket )
|
||||||
|
@ -183,6 +185,7 @@ void Core::Network::GameConnection::queueOutPacket( Core::Network::Packets::Game
|
||||||
|
|
||||||
void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket& pPacket )
|
void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket& pPacket )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
auto it = m_zoneHandlerMap.find( pPacket.getSubType() );
|
auto it = m_zoneHandlerMap.find( pPacket.getSubType() );
|
||||||
|
|
||||||
std::string sessionStr = "[" + std::to_string( m_pSession->getId() ) + "]";
|
std::string sessionStr = "[" + std::to_string( m_pSession->getId() ) + "]";
|
||||||
|
@ -195,7 +198,7 @@ void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket&
|
||||||
if( pPacket.getSubType() != PingHandler &&
|
if( pPacket.getSubType() != PingHandler &&
|
||||||
pPacket.getSubType() != UpdatePositionHandler )
|
pPacket.getSubType() != UpdatePositionHandler )
|
||||||
|
|
||||||
g_framework.getLogger().debug( sessionStr + " Handling Zone IPC : " + name + "( " +
|
pLog->debug( sessionStr + " Handling Zone IPC : " + name + "( " +
|
||||||
boost::str( boost::format( "%|04X|" ) %
|
boost::str( boost::format( "%|04X|" ) %
|
||||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||||
|
|
||||||
|
@ -203,16 +206,17 @@ void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket&
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( sessionStr + " Undefined Zone IPC : Unknown ( " +
|
pLog->debug( sessionStr + " Undefined Zone IPC : Unknown ( " +
|
||||||
boost::str( boost::format( "%|04X|" ) %
|
boost::str( boost::format( "%|04X|" ) %
|
||||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||||
g_framework.getLogger().debug( "\n" + pPacket.toString() );
|
pLog->debug( "\n" + pPacket.toString() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Core::Network::GameConnection::handleChatPacket( const Packets::GamePacket& pPacket )
|
void Core::Network::GameConnection::handleChatPacket( const Packets::GamePacket& pPacket )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
auto it = m_chatHandlerMap.find( pPacket.getSubType() );
|
auto it = m_chatHandlerMap.find( pPacket.getSubType() );
|
||||||
|
|
||||||
std::string sessionStr = "[" + std::to_string( m_pSession->getId() ) + "]";
|
std::string sessionStr = "[" + std::to_string( m_pSession->getId() ) + "]";
|
||||||
|
@ -223,7 +227,7 @@ void Core::Network::GameConnection::handleChatPacket( const Packets::GamePacket&
|
||||||
std::string name = itStr != m_chatHandlerStrMap.end() ? itStr->second : "unknown";
|
std::string name = itStr != m_chatHandlerStrMap.end() ? itStr->second : "unknown";
|
||||||
// dont display packet notification if it is a ping or pos update, don't want the spam
|
// dont display packet notification if it is a ping or pos update, don't want the spam
|
||||||
|
|
||||||
g_framework.getLogger().debug( sessionStr + " Handling Chat IPC : " + name + "( " +
|
pLog->debug( sessionStr + " Handling Chat IPC : " + name + "( " +
|
||||||
boost::str( boost::format( "%|04X|" ) %
|
boost::str( boost::format( "%|04X|" ) %
|
||||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||||
|
|
||||||
|
@ -231,10 +235,10 @@ void Core::Network::GameConnection::handleChatPacket( const Packets::GamePacket&
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( sessionStr + " Undefined Chat IPC : Unknown ( " +
|
pLog->debug( sessionStr + " Undefined Chat IPC : Unknown ( " +
|
||||||
boost::str( boost::format( "%|04X|" ) %
|
boost::str( boost::format( "%|04X|" ) %
|
||||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||||
g_framework.getLogger().debug( pPacket.toString() );
|
pLog->debug( pPacket.toString() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +280,7 @@ void Core::Network::GameConnection::processInQueue()
|
||||||
|
|
||||||
void Core::Network::GameConnection::processOutQueue()
|
void Core::Network::GameConnection::processOutQueue()
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
if( m_outQueue.size() < 1 )
|
if( m_outQueue.size() < 1 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -290,7 +294,7 @@ void Core::Network::GameConnection::processOutQueue()
|
||||||
{
|
{
|
||||||
if( pPacket->getSize() == 0 )
|
if( pPacket->getSize() == 0 )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "end of packet set" );
|
pLog->debug( "end of packet set" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,6 +366,8 @@ void Core::Network::GameConnection::injectPacket( const std::string& packetpath,
|
||||||
void Core::Network::GameConnection::handlePackets( const Core::Network::Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
void Core::Network::GameConnection::handlePackets( const Core::Network::Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
||||||
const std::vector< Core::Network::Packets::FFXIVARR_PACKET_RAW >& packetData )
|
const std::vector< Core::Network::Packets::FFXIVARR_PACKET_RAW >& packetData )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
// if a session is set, update the last time it recieved a game packet
|
// if a session is set, update the last time it recieved a game packet
|
||||||
if( m_pSession )
|
if( m_pSession )
|
||||||
m_pSession->updateLastDataTime();
|
m_pSession->updateLastDataTime();
|
||||||
|
@ -377,23 +383,23 @@ void Core::Network::GameConnection::handlePackets( const Core::Network::Packets:
|
||||||
auto pCon = boost::static_pointer_cast< GameConnection, Connection >( shared_from_this() );
|
auto pCon = boost::static_pointer_cast< GameConnection, Connection >( shared_from_this() );
|
||||||
|
|
||||||
// try to retrieve the session for this id
|
// try to retrieve the session for this id
|
||||||
auto session = g_framework.getServerZone().getSession( playerId );
|
auto session = pServerZone->getSession( playerId );
|
||||||
|
|
||||||
if( !session )
|
if( !session )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info( "[" + std::string( id ) + "] Session not registered, creating" );
|
pLog->info( "[" + std::string( id ) + "] Session not registered, creating" );
|
||||||
// return;
|
// return;
|
||||||
if( !g_framework.getServerZone().createSession( playerId ) )
|
if( !pServerZone->createSession( playerId ) )
|
||||||
{
|
{
|
||||||
Disconnect();
|
Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
session = g_framework.getServerZone().getSession( playerId );
|
session = pServerZone->getSession( playerId );
|
||||||
}
|
}
|
||||||
//TODO: Catch more things in lobby and send real errors
|
//TODO: Catch more things in lobby and send real errors
|
||||||
else if( !session->isValid() || ( session->getPlayer() && session->getPlayer()->getLastPing() != 0 ) )
|
else if( !session->isValid() || ( session->getPlayer() && session->getPlayer()->getLastPing() != 0 ) )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "[" + std::string(id) + "] Session INVALID, disconnecting" );
|
pLog->error( "[" + std::string(id) + "] Session INVALID, disconnecting" );
|
||||||
Disconnect();
|
Disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -414,7 +420,7 @@ void Core::Network::GameConnection::handlePackets( const Core::Network::Packets:
|
||||||
pPe = GamePacket( 0x00, 0x38, 0, 0, 0x02 );
|
pPe = GamePacket( 0x00, 0x38, 0, 0, 0x02 );
|
||||||
pPe.setValAt< uint32_t >( 0x10, playerId );
|
pPe.setValAt< uint32_t >( 0x10, playerId );
|
||||||
sendSinglePacket( &pPe );
|
sendSinglePacket( &pPe );
|
||||||
g_framework.getLogger().info( "[" + std::string( id ) + "] Setting session for zone connection" );
|
pLog->info( "[" + std::string( id ) + "] Setting session for zone connection" );
|
||||||
session->setZoneConnection( pCon );
|
session->setZoneConnection( pCon );
|
||||||
}
|
}
|
||||||
// chat connection, assinging it to the session
|
// chat connection, assinging it to the session
|
||||||
|
@ -424,7 +430,7 @@ void Core::Network::GameConnection::handlePackets( const Core::Network::Packets:
|
||||||
pPe.setValAt< uint32_t >( 0x10, playerId );
|
pPe.setValAt< uint32_t >( 0x10, playerId );
|
||||||
sendSinglePacket( &pPe );
|
sendSinglePacket( &pPe );
|
||||||
|
|
||||||
g_framework.getLogger().info( "[" + std::string( id ) + "] Setting session for chat connection" );
|
pLog->info( "[" + std::string( id ) + "] Setting session for chat connection" );
|
||||||
session->setChatConnection( pCon );
|
session->setChatConnection( pCon );
|
||||||
pPe = GamePacket( 0x02, 0x28, playerId, playerId, 0x03 );
|
pPe = GamePacket( 0x02, 0x28, playerId, playerId, 0x03 );
|
||||||
sendSinglePacket( &pPe );
|
sendSinglePacket( &pPe );
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -107,6 +107,7 @@ enum ClientTrigger
|
||||||
void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player )
|
Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
uint16_t commandId = inPacket.getValAt< uint16_t >( 0x20 );
|
uint16_t commandId = inPacket.getValAt< uint16_t >( 0x20 );
|
||||||
uint64_t param1 = inPacket.getValAt< uint64_t >( 0x24 );
|
uint64_t param1 = inPacket.getValAt< uint64_t >( 0x24 );
|
||||||
uint32_t param11 = inPacket.getValAt< uint32_t >( 0x24 );
|
uint32_t param11 = inPacket.getValAt< uint32_t >( 0x24 );
|
||||||
|
@ -114,7 +115,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
||||||
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x2C );
|
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x2C );
|
||||||
uint64_t param3 = inPacket.getValAt< uint64_t >( 0x38 );
|
uint64_t param3 = inPacket.getValAt< uint64_t >( 0x38 );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( m_pSession->getId() ) + "] Incoming action: " +
|
pLog->debug( "[" + std::to_string( m_pSession->getId() ) + "] Incoming action: " +
|
||||||
boost::str( boost::format( "%|04X|" ) % ( uint32_t ) ( commandId & 0xFFFF ) ) +
|
boost::str( boost::format( "%|04X|" ) % ( uint32_t ) ( commandId & 0xFFFF ) ) +
|
||||||
"\nparam1: " + boost::str( boost::format( "%|016X|" ) % ( uint64_t ) ( param1 & 0xFFFFFFFFFFFFFFF ) ) +
|
"\nparam1: " + boost::str( boost::format( "%|016X|" ) % ( uint64_t ) ( param1 & 0xFFFFFFFFFFFFFFF ) ) +
|
||||||
"\nparam2: " + boost::str( boost::format( "%|08X|" ) % ( uint32_t ) ( param2 & 0xFFFFFFFF ) ) +
|
"\nparam2: " + boost::str( boost::format( "%|08X|" ) % ( uint32_t ) ( param2 & 0xFFFFFFFF ) ) +
|
||||||
|
@ -271,7 +272,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "[" + std::to_string( m_pSession->getId() ) + "] Unhandled action: " +
|
pLog->debug( "[" + std::to_string( m_pSession->getId() ) + "] Unhandled action: " +
|
||||||
boost::str( boost::format( "%|04X|" ) % (uint32_t) ( commandId & 0xFFFF ) ) );
|
boost::str( boost::format( "%|04X|" ) % (uint32_t) ( commandId & 0xFFFF ) ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include "Session.h"
|
#include "Session.h"
|
||||||
|
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -35,7 +35,7 @@ void Core::Network::GameConnection::cfDutyInfoRequest( const Packets::GamePacket
|
||||||
ZoneChannelPacket< FFXIVIpcCFDutyInfo > dutyInfoPacket( player.getId() );
|
ZoneChannelPacket< FFXIVIpcCFDutyInfo > dutyInfoPacket( player.getId() );
|
||||||
|
|
||||||
auto penaltyMinutes = player.getCFPenaltyMinutes();
|
auto penaltyMinutes = player.getCFPenaltyMinutes();
|
||||||
if (penaltyMinutes > 255)
|
if( penaltyMinutes > 255 )
|
||||||
{
|
{
|
||||||
// cap it since it's uint8_t in packets
|
// cap it since it's uint8_t in packets
|
||||||
penaltyMinutes = 255;
|
penaltyMinutes = 255;
|
||||||
|
@ -52,6 +52,8 @@ void Core::Network::GameConnection::cfDutyInfoRequest( const Packets::GamePacket
|
||||||
void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player)
|
Entity::Player& player)
|
||||||
{
|
{
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
// TODO use for loop for this
|
// TODO use for loop for this
|
||||||
auto contentId1 = inPacket.getValAt< uint16_t >( 0x2E );
|
auto contentId1 = inPacket.getValAt< uint16_t >( 0x2E );
|
||||||
auto contentId2 = inPacket.getValAt< uint16_t >( 0x30 );
|
auto contentId2 = inPacket.getValAt< uint16_t >( 0x30 );
|
||||||
|
@ -59,12 +61,12 @@ void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& i
|
||||||
auto contentId4 = inPacket.getValAt< uint16_t >( 0x34 );
|
auto contentId4 = inPacket.getValAt< uint16_t >( 0x34 );
|
||||||
auto contentId5 = inPacket.getValAt< uint16_t >( 0x36 );
|
auto contentId5 = inPacket.getValAt< uint16_t >( 0x36 );
|
||||||
|
|
||||||
player.sendDebug("Duty register request");
|
player.sendDebug( "Duty register request");
|
||||||
player.sendDebug("ContentId1: " + std::to_string(contentId1));
|
player.sendDebug( "ContentId1: " + std::to_string( contentId1 ) );
|
||||||
player.sendDebug("ContentId2: " + std::to_string(contentId2));
|
player.sendDebug( "ContentId2: " + std::to_string( contentId2 ) );
|
||||||
player.sendDebug("ContentId3: " + std::to_string(contentId3));
|
player.sendDebug( "ContentId3: " + std::to_string( contentId3 ) );
|
||||||
player.sendDebug("ContentId4: " + std::to_string(contentId4));
|
player.sendDebug( "ContentId4: " + std::to_string( contentId4 ) );
|
||||||
player.sendDebug("ContentId5: " + std::to_string(contentId5));
|
player.sendDebug( "ContentId5: " + std::to_string( contentId5 ) );
|
||||||
|
|
||||||
// let's cancel it because otherwise you can't register it again
|
// let's cancel it because otherwise you can't register it again
|
||||||
ZoneChannelPacket< FFXIVIpcCFNotify > cfCancelPacket( player.getId() );
|
ZoneChannelPacket< FFXIVIpcCFNotify > cfCancelPacket( player.getId() );
|
||||||
|
@ -72,11 +74,11 @@ void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& i
|
||||||
cfCancelPacket.data().state2 = 1; // Your registration is withdrawn.
|
cfCancelPacket.data().state2 = 1; // Your registration is withdrawn.
|
||||||
queueOutPacket( cfCancelPacket );
|
queueOutPacket( cfCancelPacket );
|
||||||
|
|
||||||
auto cfCondition = g_framework.getExdDataGen().get< Core::Data::ContentFinderCondition >( contentId1 );
|
auto cfCondition = pExdData->get< Core::Data::ContentFinderCondition >( contentId1 );
|
||||||
if( !cfCondition )
|
if( !cfCondition )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto instance = g_framework.getTerritoryMgr().createInstanceContent( cfCondition->instanceContent );
|
auto instance = pTeriMgr->createInstanceContent( cfCondition->instanceContent );
|
||||||
if( !instance )
|
if( !instance )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -88,11 +90,11 @@ void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& i
|
||||||
void Core::Network::GameConnection::cfRegisterRoulette( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::cfRegisterRoulette( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player)
|
Entity::Player& player)
|
||||||
{
|
{
|
||||||
player.sendDebug("Roulette register");
|
player.sendDebug( "Roulette register" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Network::GameConnection::cfDutyAccepted( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::cfDutyAccepted( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player)
|
Entity::Player& player)
|
||||||
{
|
{
|
||||||
player.sendDebug("TODO: Duty accept");
|
player.sendDebug( "TODO: Duty accept" );
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -36,6 +36,8 @@ using namespace Core::Network::Packets::Server;
|
||||||
|
|
||||||
void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket& inPacket, Entity::Player& player )
|
void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
||||||
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
||||||
auto eventType = static_cast< uint16_t >( eventId >> 16 );
|
auto eventType = static_cast< uint16_t >( eventId >> 16 );
|
||||||
|
@ -60,10 +62,10 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
||||||
{
|
{
|
||||||
instance->onTalk( player, eventId, actorId );
|
instance->onTalk( player, eventId, actorId );
|
||||||
}
|
}
|
||||||
else if( !g_framework.getScriptMgr().onTalk( player, actorId, eventId ) &&
|
else if( !pScriptMgr->onTalk( player, actorId, eventId ) &&
|
||||||
eventType == Event::EventHandler::EventHandlerType::Quest )
|
eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||||
{
|
{
|
||||||
auto questInfo = g_framework.getExdDataGen().get< Core::Data::Quest >( eventId );
|
auto questInfo = pExdData->get< Core::Data::Quest >( eventId );
|
||||||
if( questInfo )
|
if( questInfo )
|
||||||
player.sendUrgent( "Quest not implemented: " + questInfo->name + " (" + questInfo->id + ")" );
|
player.sendUrgent( "Quest not implemented: " + questInfo->name + " (" + questInfo->id + ")" );
|
||||||
}
|
}
|
||||||
|
@ -75,6 +77,8 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
||||||
void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket& inPacket, Entity::Player& player )
|
void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
||||||
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
||||||
auto emoteId = inPacket.getValAt< uint16_t >( 0x2C );
|
auto emoteId = inPacket.getValAt< uint16_t >( 0x2C );
|
||||||
|
@ -95,10 +99,10 @@ void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket
|
||||||
|
|
||||||
player.eventStart( actorId, eventId, Event::EventHandler::Emote, 0, emoteId );
|
player.eventStart( actorId, eventId, Event::EventHandler::Emote, 0, emoteId );
|
||||||
|
|
||||||
if( !g_framework.getScriptMgr().onEmote( player, actorId, eventId, static_cast< uint8_t >( emoteId ) ) &&
|
if( !pScriptMgr->onEmote( player, actorId, eventId, static_cast< uint8_t >( emoteId ) ) &&
|
||||||
eventType == Event::EventHandler::EventHandlerType::Quest )
|
eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||||
{
|
{
|
||||||
auto questInfo = g_framework.getExdDataGen().get< Core::Data::Quest >( eventId );
|
auto questInfo = pExdData->get< Core::Data::Quest >( eventId );
|
||||||
if( questInfo )
|
if( questInfo )
|
||||||
player.sendUrgent( "Quest not implemented: " + questInfo->name );
|
player.sendUrgent( "Quest not implemented: " + questInfo->name );
|
||||||
}
|
}
|
||||||
|
@ -109,7 +113,7 @@ void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket
|
||||||
void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player )
|
Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||||
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||||
auto x = inPacket.getValAt< float >( 0x28 );
|
auto x = inPacket.getValAt< float >( 0x28 );
|
||||||
|
@ -123,7 +127,7 @@ void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::Game
|
||||||
|
|
||||||
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
||||||
|
|
||||||
g_framework.getScriptMgr().onWithinRange( player, eventId, param1, x, y, z );
|
pScriptMgr->onWithinRange( player, eventId, param1, x, y, z );
|
||||||
|
|
||||||
player.checkEvent( eventId );
|
player.checkEvent( eventId );
|
||||||
}
|
}
|
||||||
|
@ -131,7 +135,7 @@ void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::Game
|
||||||
void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player )
|
Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||||
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||||
auto x = inPacket.getValAt< float >( 0x28 );
|
auto x = inPacket.getValAt< float >( 0x28 );
|
||||||
|
@ -145,7 +149,7 @@ void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::Gam
|
||||||
|
|
||||||
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
||||||
|
|
||||||
g_framework.getScriptMgr().onOutsideRange( player, eventId, param1, x, y, z );
|
pScriptMgr->onOutsideRange( player, eventId, param1, x, y, z );
|
||||||
|
|
||||||
player.checkEvent( eventId );
|
player.checkEvent( eventId );
|
||||||
}
|
}
|
||||||
|
@ -153,6 +157,7 @@ void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::Gam
|
||||||
void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::GamePacket &inPacket,
|
void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::GamePacket &inPacket,
|
||||||
Entity::Player &player )
|
Entity::Player &player )
|
||||||
{
|
{
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
auto eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
auto eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||||
auto param1 = inPacket.getValAt< uint16_t >( 0x24 );
|
auto param1 = inPacket.getValAt< uint16_t >( 0x24 );
|
||||||
auto param2 = inPacket.getValAt< uint16_t >( 0x26 );
|
auto param2 = inPacket.getValAt< uint16_t >( 0x26 );
|
||||||
|
@ -171,7 +176,7 @@ void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::G
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() );
|
player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() );
|
||||||
g_framework.getScriptMgr().onEnterTerritory( player, eventId, param1, param2 );
|
pScriptMgr->onEnterTerritory( player, eventId, param1, param2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
player.checkEvent( eventId );
|
player.checkEvent( eventId );
|
||||||
|
|
|
@ -2,12 +2,14 @@
|
||||||
|
|
||||||
#include <Logging/Logger.h>
|
#include <Logging/Logger.h>
|
||||||
#include <Config/XMLConfig.h>
|
#include <Config/XMLConfig.h>
|
||||||
#include "Framework.h"
|
|
||||||
|
#include "ServerZone.h"
|
||||||
|
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
#include <boost/algorithm/string/predicate.hpp>
|
#include <boost/algorithm/string/predicate.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
|
#include "Framework.h"
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_framework;
|
||||||
|
|
||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
|
|
|
@ -39,26 +39,19 @@
|
||||||
|
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
Core::Logger g_log;
|
|
||||||
|
|
||||||
Core::ServerZone::ServerZone( const std::string& configPath )
|
Core::ServerZone::ServerZone( const std::string& configPath ) :
|
||||||
: m_configPath( configPath ),
|
m_configPath( configPath ),
|
||||||
m_bRunning( true ),
|
m_bRunning( true ),
|
||||||
m_lastDBPingTime( 0 )
|
m_lastDBPingTime( 0 )
|
||||||
{
|
{
|
||||||
m_pConfig = XMLConfigPtr( new XMLConfig );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::ServerZone::~ServerZone()
|
Core::ServerZone::~ServerZone()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::XMLConfigPtr Core::ServerZone::getConfig() const
|
|
||||||
{
|
|
||||||
return m_pConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t Core::ServerZone::getSessionCount() const
|
size_t Core::ServerZone::getSessionCount() const
|
||||||
{
|
{
|
||||||
return m_sessionMapById.size();
|
return m_sessionMapById.size();
|
||||||
|
@ -66,15 +59,20 @@ size_t Core::ServerZone::getSessionCount() const
|
||||||
|
|
||||||
bool Core::ServerZone::loadSettings( int32_t argc, char* argv[] )
|
bool Core::ServerZone::loadSettings( int32_t argc, char* argv[] )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info( "Loading config " + m_configPath );
|
auto pLog = g_fw.get< Core::Logger >();
|
||||||
|
auto pConfig = g_fw.get< Core::XMLConfig >();
|
||||||
|
auto pExd = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
|
||||||
if( !m_pConfig->loadConfig( m_configPath ) )
|
pLog->info( "Loading config " + m_configPath );
|
||||||
|
|
||||||
|
if( !pConfig->loadConfig( m_configPath ) )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().fatal( "Error loading config " + m_configPath );
|
pLog->fatal( "Error loading config " + m_configPath );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> args( argv + 1, argv + argc );
|
std::vector< std::string > args( argv + 1, argv + argc );
|
||||||
for( uint32_t i = 0; i + 1 < args.size(); i += 2 )
|
for( uint32_t i = 0; i + 1 < args.size(); i += 2 )
|
||||||
{
|
{
|
||||||
std::string arg( "" );
|
std::string arg( "" );
|
||||||
|
@ -91,116 +89,111 @@ bool Core::ServerZone::loadSettings( int32_t argc, char* argv[] )
|
||||||
if( arg == "ip" )
|
if( arg == "ip" )
|
||||||
{
|
{
|
||||||
// todo: ip addr in config
|
// todo: ip addr in config
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.ListenIP", val );
|
pConfig->setValue< std::string >( "Settings.General.ListenIP", val );
|
||||||
}
|
}
|
||||||
else if( arg == "p" || arg == "port" )
|
else if( arg == "p" || arg == "port" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.ListenPort", val );
|
pConfig->setValue< std::string >( "Settings.General.ListenPort", val );
|
||||||
}
|
}
|
||||||
else if( arg == "exdpath" || arg == "datapath" )
|
else if( arg == "exdpath" || arg == "datapath" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.DataPath", val );
|
pConfig->setValue< std::string >( "Settings.General.DataPath", val );
|
||||||
}
|
}
|
||||||
else if( arg == "s" || arg == "scriptpath" )
|
else if( arg == "s" || arg == "scriptpath" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.ScriptPath", val );
|
pConfig->setValue< std::string >( "Settings.General.ScriptPath", val );
|
||||||
}
|
}
|
||||||
else if( arg == "h" || arg == "dbhost" )
|
else if( arg == "h" || arg == "dbhost" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.Mysql.Host", val );
|
pConfig->setValue< std::string >( "Settings.General.Mysql.Host", val );
|
||||||
}
|
}
|
||||||
else if( arg == "dbport" )
|
else if( arg == "dbport" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.Mysql.Port", val );
|
pConfig->setValue< std::string >( "Settings.General.Mysql.Port", val );
|
||||||
}
|
}
|
||||||
else if( arg == "u" || arg == "user" || arg == "dbuser" )
|
else if( arg == "u" || arg == "user" || arg == "dbuser" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.Mysql.Username", val );
|
pConfig->setValue< std::string >( "Settings.General.Mysql.Username", val );
|
||||||
}
|
}
|
||||||
else if( arg == "pass" || arg == "dbpass" )
|
else if( arg == "pass" || arg == "dbpass" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.Mysql.Pass", val );
|
pConfig->setValue< std::string >( "Settings.General.Mysql.Pass", val );
|
||||||
}
|
}
|
||||||
else if( arg == "d" || arg == "db" || arg == "database" )
|
else if( arg == "d" || arg == "db" || arg == "database" )
|
||||||
{
|
{
|
||||||
m_pConfig->setValue< std::string >( "Settings.General.Mysql.Database", val );
|
pConfig->setValue< std::string >( "Settings.General.Mysql.Database", val );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch( ... )
|
catch( ... )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Error parsing argument: " + arg + " " + "value: " + val + "\n" );
|
pLog->error( "Error parsing argument: " + arg + " " + "value: " + val + "\n" );
|
||||||
g_framework.getLogger().error( "Usage: <arg> <val> \n" );
|
pLog->error( "Usage: <arg> <val> \n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_framework.getLogger().info( "Setting up generated EXD data" );
|
pLog->info( "Setting up generated EXD data" );
|
||||||
if( !g_framework.getExdDataGen().init( m_pConfig->getValue< std::string >( "Settings.General.DataPath", "" ) ) )
|
if( !pExd->init( pConfig->getValue< std::string >( "Settings.General.DataPath", "" ) ) )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().fatal( "Error setting up generated EXD data " );
|
pLog->fatal( "Error setting up generated EXD data " );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::Db::DbLoader loader;
|
Core::Db::DbLoader loader;
|
||||||
|
|
||||||
Core::Db::ConnectionInfo info;
|
Core::Db::ConnectionInfo info;
|
||||||
info.password = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Pass", "" );
|
info.password = pConfig->getValue< std::string >( "Settings.General.Mysql.Pass", "" );
|
||||||
info.host = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Host", "127.0.0.1" );
|
info.host = pConfig->getValue< std::string >( "Settings.General.Mysql.Host", "127.0.0.1" );
|
||||||
info.database = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Database", "sapphire" );
|
info.database = pConfig->getValue< std::string >( "Settings.General.Mysql.Database", "sapphire" );
|
||||||
info.port = m_pConfig->getValue< uint16_t >( "Settings.General.Mysql.Port", 3306 );
|
info.port = pConfig->getValue< uint16_t >( "Settings.General.Mysql.Port", 3306 );
|
||||||
info.user = m_pConfig->getValue< std::string >( "Settings.General.Mysql.Username", "root" );
|
info.user = pConfig->getValue< std::string >( "Settings.General.Mysql.Username", "root" );
|
||||||
info.syncThreads = m_pConfig->getValue< uint8_t >( "Settings.General.Mysql.SyncThreads", 2 );
|
info.syncThreads = pConfig->getValue< uint8_t >( "Settings.General.Mysql.SyncThreads", 2 );
|
||||||
info.asyncThreads = m_pConfig->getValue< uint8_t >( "Settings.General.Mysql.AsyncThreads", 2 );
|
info.asyncThreads = pConfig->getValue< uint8_t >( "Settings.General.Mysql.AsyncThreads", 2 );
|
||||||
|
|
||||||
loader.addDb( g_framework.getCharaDb(), info );
|
loader.addDb( *pDb, info );
|
||||||
if( !loader.initDbs() )
|
if( !loader.initDbs() )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_port = m_pConfig->getValue< uint16_t >( "Settings.General.ListenPort", 54992 );
|
m_port = pConfig->getValue< uint16_t >( "Settings.General.ListenPort", 54992 );
|
||||||
m_ip = m_pConfig->getValue< std::string >( "Settings.General.ListenIp", "0.0.0.0" );
|
m_ip = pConfig->getValue< std::string >( "Settings.General.ListenIp", "0.0.0.0" );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::ServerZone::run( int32_t argc, char* argv[] )
|
void Core::ServerZone::run( int32_t argc, char* argv[] )
|
||||||
{
|
{
|
||||||
// TODO: add more error checks for the entire initialisation
|
auto pLog = g_fw.get< Core::Logger>();
|
||||||
/*g_log.setLogPath( "log/SapphireZone_" );
|
auto pScript = g_fw.get< Scripting::ScriptMgr >();
|
||||||
g_log.init();*/
|
auto pLsMgr = g_fw.get< LinkshellMgr >();
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
|
||||||
printBanner();
|
printBanner();
|
||||||
|
|
||||||
g_framework.getLogger().setLogPath( "log/SapphireZone_" );
|
|
||||||
g_framework.getLogger().init();
|
|
||||||
|
|
||||||
g_log = g_framework.getLogger();
|
|
||||||
|
|
||||||
|
|
||||||
if( !loadSettings( argc, argv ) )
|
if( !loadSettings( argc, argv ) )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().fatal( "Unable to load settings!" );
|
pLog->fatal( "Unable to load settings!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_framework.getLogger().info( "LinkshellMgr: Caching linkshells" );
|
pLog->info( "LinkshellMgr: Caching linkshells" );
|
||||||
if( !g_framework.getLinkshellMgr().loadLinkshells() )
|
if( !pLsMgr->loadLinkshells() )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().fatal( "Unable to load linkshells!" );
|
pLog->fatal( "Unable to load linkshells!" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Network::HivePtr hive( new Network::Hive() );
|
Network::HivePtr hive( new Network::Hive() );
|
||||||
Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive );
|
Network::addServerToHive< Network::GameConnection >( m_ip, m_port, hive );
|
||||||
|
|
||||||
g_framework.getScriptMgr().init();
|
pScript->init();
|
||||||
|
|
||||||
g_framework.getLogger().info( "TerritoryMgr: Setting up zones" );
|
pLog->info( "TerritoryMgr: Setting up zones" );
|
||||||
g_framework.getTerritoryMgr().init();
|
pTeriMgr->init();
|
||||||
|
|
||||||
std::vector< std::thread > thread_list;
|
std::vector< std::thread > thread_list;
|
||||||
thread_list.emplace_back( std::thread( std::bind( &Network::Hive::Run, hive.get() ) ) );
|
thread_list.emplace_back( std::thread( std::bind( &Network::Hive::Run, hive.get() ) ) );
|
||||||
|
|
||||||
g_framework.getLogger().info( "Server listening on port: " + std::to_string( m_port ) );
|
pLog->info( "Server listening on port: " + std::to_string( m_port ) );
|
||||||
g_framework.getLogger().info( "Ready for connections..." );
|
pLog->info( "Ready for connections..." );
|
||||||
|
|
||||||
mainLoop();
|
mainLoop();
|
||||||
|
|
||||||
|
@ -213,25 +206,32 @@ void Core::ServerZone::run( int32_t argc, char* argv[] )
|
||||||
|
|
||||||
void Core::ServerZone::printBanner() const
|
void Core::ServerZone::printBanner() const
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info("===========================================================" );
|
auto pLog = g_fw.get< Core::Logger>();
|
||||||
g_framework.getLogger().info( "Sapphire Server Project " );
|
|
||||||
g_framework.getLogger().info( "Version: " + Version::VERSION );
|
pLog->info("===========================================================" );
|
||||||
g_framework.getLogger().info( "Git Hash: " + Version::GIT_HASH );
|
pLog->info( "Sapphire Server Project " );
|
||||||
g_framework.getLogger().info( "Compiled: " __DATE__ " " __TIME__ );
|
pLog->info( "Version: " + Version::VERSION );
|
||||||
g_framework.getLogger().info( "===========================================================" );
|
pLog->info( "Git Hash: " + Version::GIT_HASH );
|
||||||
|
pLog->info( "Compiled: " __DATE__ " " __TIME__ );
|
||||||
|
pLog->info( "===========================================================" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::ServerZone::mainLoop()
|
void Core::ServerZone::mainLoop()
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
|
||||||
while( isRunning() )
|
while( isRunning() )
|
||||||
{
|
{
|
||||||
this_thread::sleep_for( chrono::milliseconds( 50 ) );
|
this_thread::sleep_for( chrono::milliseconds( 50 ) );
|
||||||
|
|
||||||
auto currTime = Util::getTimeSeconds();
|
auto currTime = Util::getTimeSeconds();
|
||||||
|
|
||||||
g_framework.getTerritoryMgr().updateTerritoryInstances( currTime );
|
pTeriMgr->updateTerritoryInstances( currTime );
|
||||||
|
|
||||||
g_framework.getScriptMgr().update();
|
pScriptMgr->update();
|
||||||
|
|
||||||
lock_guard< std::mutex > lock( this->m_sessionMutex );
|
lock_guard< std::mutex > lock( this->m_sessionMutex );
|
||||||
for( auto sessionIt : this->m_sessionMapById )
|
for( auto sessionIt : this->m_sessionMapById )
|
||||||
|
@ -250,7 +250,7 @@ void Core::ServerZone::mainLoop()
|
||||||
|
|
||||||
if( currTime - m_lastDBPingTime > 3 )
|
if( currTime - m_lastDBPingTime > 3 )
|
||||||
{
|
{
|
||||||
g_framework.getCharaDb().keepAlive();
|
pDb->keepAlive();
|
||||||
m_lastDBPingTime = currTime;
|
m_lastDBPingTime = currTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ void Core::ServerZone::mainLoop()
|
||||||
it->second->close();
|
it->second->close();
|
||||||
// if( it->second.unique() )
|
// if( it->second.unique() )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info("[" + std::to_string(it->second->getId() ) + "] Session removal" );
|
pLog->info("[" + std::to_string(it->second->getId() ) + "] Session removal" );
|
||||||
it = this->m_sessionMapById.erase( it );
|
it = this->m_sessionMapById.erase( it );
|
||||||
removeSession( pPlayer->getName() );
|
removeSession( pPlayer->getName() );
|
||||||
continue;
|
continue;
|
||||||
|
@ -278,7 +278,7 @@ void Core::ServerZone::mainLoop()
|
||||||
// remove sessions that simply timed out
|
// remove sessions that simply timed out
|
||||||
if( diff > 20 )
|
if( diff > 20 )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().info("[" + std::to_string( it->second->getId() ) + "] Session time out" );
|
pLog->info("[" + std::to_string( it->second->getId() ) + "] Session time out" );
|
||||||
|
|
||||||
it->second->close();
|
it->second->close();
|
||||||
// if( it->second.unique() )
|
// if( it->second.unique() )
|
||||||
|
@ -299,6 +299,8 @@ void Core::ServerZone::mainLoop()
|
||||||
|
|
||||||
bool Core::ServerZone::createSession( uint32_t sessionId )
|
bool Core::ServerZone::createSession( uint32_t sessionId )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Core::Logger>();
|
||||||
|
|
||||||
std::lock_guard< std::mutex > lock( m_sessionMutex );
|
std::lock_guard< std::mutex > lock( m_sessionMutex );
|
||||||
|
|
||||||
const std::string session_id_str = std::to_string( sessionId );
|
const std::string session_id_str = std::to_string( sessionId );
|
||||||
|
@ -307,18 +309,18 @@ bool Core::ServerZone::createSession( uint32_t sessionId )
|
||||||
|
|
||||||
if( it != m_sessionMapById.end() )
|
if( it != m_sessionMapById.end() )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "[" + session_id_str + "] Error creating session" );
|
pLog->error( "[" + session_id_str + "] Error creating session" );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_framework.getLogger().info( "[" + session_id_str + "] Creating new session" );
|
pLog->info( "[" + session_id_str + "] Creating new session" );
|
||||||
|
|
||||||
boost::shared_ptr<Session> newSession( new Session( sessionId ) );
|
boost::shared_ptr<Session> newSession( new Session( sessionId ) );
|
||||||
m_sessionMapById[sessionId] = newSession;
|
m_sessionMapById[sessionId] = newSession;
|
||||||
|
|
||||||
if( !newSession->loadPlayer() )
|
if( !newSession->loadPlayer() )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "[" + session_id_str + "] Error loading player " + session_id_str );
|
pLog->error( "[" + session_id_str + "] Error loading player " + session_id_str );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,6 @@ namespace Core {
|
||||||
void updateSession( uint32_t id );
|
void updateSession( uint32_t id );
|
||||||
void updateSession( std::string playerName );
|
void updateSession( std::string playerName );
|
||||||
|
|
||||||
XMLConfigPtr getConfig() const;
|
|
||||||
|
|
||||||
size_t getSessionCount() const;
|
size_t getSessionCount() const;
|
||||||
|
|
||||||
void mainLoop();
|
void mainLoop();
|
||||||
|
@ -51,8 +49,6 @@ namespace Core {
|
||||||
|
|
||||||
std::string m_configPath;
|
std::string m_configPath;
|
||||||
|
|
||||||
XMLConfigPtr m_pConfig;
|
|
||||||
|
|
||||||
std::mutex m_sessionMutex;
|
std::mutex m_sessionMutex;
|
||||||
|
|
||||||
std::map< uint32_t, SessionPtr > m_sessionMapById;
|
std::map< uint32_t, SessionPtr > m_sessionMapById;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::Session::Session( uint32_t sessionId ) :
|
Core::Session::Session( uint32_t sessionId ) :
|
||||||
m_sessionId( sessionId ),
|
m_sessionId( sessionId ),
|
||||||
|
@ -112,6 +112,7 @@ void Core::Session::updateLastSqlTime()
|
||||||
|
|
||||||
void Core::Session::startReplay( const std::string& path )
|
void Core::Session::startReplay( const std::string& path )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
if( !boost::filesystem::exists( path ) )
|
if( !boost::filesystem::exists( path ) )
|
||||||
{
|
{
|
||||||
getPlayer()->sendDebug( "Couldn't find folder." );
|
getPlayer()->sendDebug( "Couldn't find folder." );
|
||||||
|
@ -148,7 +149,7 @@ void Core::Session::startReplay( const std::string& path )
|
||||||
m_replayCache.push_back( std::tuple< uint64_t, std::string >(
|
m_replayCache.push_back( std::tuple< uint64_t, std::string >(
|
||||||
Util::getTimeMs() + ( std::get< 0 >( set ) - startTime ), std::get< 1 >( set ) ) );
|
Util::getTimeMs() + ( std::get< 0 >( set ) - startTime ), std::get< 1 >( set ) ) );
|
||||||
|
|
||||||
g_framework.getLogger().info( "Registering " + std::get< 1 >( set ) + " for " + std::to_string( std::get< 0 >( set ) - startTime ) );
|
pLog->info( "Registering " + std::get< 1 >( set ) + " for " + std::to_string( std::get< 0 >( set ) - startTime ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
getPlayer()->sendDebug( "Registered " + std::to_string( m_replayCache.size() ) + " sets for replay" );
|
getPlayer()->sendDebug( "Registered " + std::to_string( m_replayCache.size() ) + " sets for replay" );
|
||||||
|
|
|
@ -2,13 +2,53 @@
|
||||||
|
|
||||||
#include "ServerZone.h"
|
#include "ServerZone.h"
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <Framework.h>
|
||||||
|
#include <Logging/Logger.h>
|
||||||
|
#include <Config/XMLConfig.h>
|
||||||
|
#include <Exd/ExdDataGenerated.h>
|
||||||
|
#include "Script/ScriptMgr.h"
|
||||||
|
#include <Database/CharaDbConnection.h>
|
||||||
|
#include <Database/DbWorkerPool.h>
|
||||||
|
#include "Linkshell/LinkshellMgr.h"
|
||||||
|
#include "Zone/TerritoryMgr.h"
|
||||||
|
|
||||||
#include "Framework.h"
|
Core::Framework g_fw;
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
using namespace Core;
|
||||||
|
|
||||||
|
bool setupFramework()
|
||||||
|
{
|
||||||
|
auto pServer = boost::make_shared< ServerZone >( "config/settings_zone.xml" );
|
||||||
|
auto pLogger = boost::make_shared< Logger >();
|
||||||
|
auto pConfig = boost::make_shared< XMLConfig >();
|
||||||
|
auto pExdData = boost::make_shared< Data::ExdDataGenerated >();
|
||||||
|
auto pScript = boost::make_shared< Scripting::ScriptMgr >();
|
||||||
|
auto pDb = boost::make_shared< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
|
auto pLsMgr = boost::make_shared< LinkshellMgr >();
|
||||||
|
auto pTeriMgr = boost::make_shared< TerritoryMgr >();
|
||||||
|
|
||||||
|
pLogger->setLogPath( "log/SapphireZone_" );
|
||||||
|
pLogger->init();
|
||||||
|
|
||||||
|
g_fw.set< ServerZone >( pServer );
|
||||||
|
g_fw.set< Logger >( pLogger );
|
||||||
|
g_fw.set< XMLConfig >( pConfig );
|
||||||
|
g_fw.set< Data::ExdDataGenerated >( pExdData );
|
||||||
|
g_fw.set< Scripting::ScriptMgr >( pScript );
|
||||||
|
g_fw.set< Db::DbWorkerPool< Db::CharaDbConnection > >( pDb );
|
||||||
|
g_fw.set< LinkshellMgr >( pLsMgr );
|
||||||
|
g_fw.set< TerritoryMgr >( pTeriMgr );
|
||||||
|
|
||||||
|
// actuall catch errors here...
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int main( int32_t argc, char* argv[] )
|
int main( int32_t argc, char* argv[] )
|
||||||
{
|
{
|
||||||
g_framework.getServerZone().run( argc, argv );
|
|
||||||
|
if( !setupFramework() )
|
||||||
|
return 0; // too fucking bad...
|
||||||
|
|
||||||
|
g_fw.get< ServerZone >()->run( argc, argv );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue