1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-05 02:07:46 +00:00

More framework changes, linker still unhappy

This commit is contained in:
Mordred Admin 2018-03-09 10:19:38 +01:00
parent 83cb17610c
commit 250b1aef79
15 changed files with 661 additions and 614 deletions

View file

@ -2,19 +2,19 @@
#include "Aethernet.cpp"
#include "Aetheryte.cpp"
#include "CmnDefCutSceneReplay.cpp"
#include "CmnDefInnBed.cpp"
#include "CmnDefLinkShell.cpp"
#include "HouFurOrchestrion.cpp"
#include "CmnDefInnBed.cpp"
#include "CmnDefCutSceneReplay.cpp"
#include "CmnDefLinkShell.cpp"
const ScriptObject* ptrs[] =
{
static_cast< ScriptObject* >( new Aethernet ),
static_cast< ScriptObject* >( new Aetheryte ),
static_cast< ScriptObject* >( new CmnDefCutSceneReplay ),
static_cast< ScriptObject* >( new CmnDefInnBed ),
static_cast< ScriptObject* >( new CmnDefLinkShell ),
static_cast< ScriptObject* >( new HouFurOrchestrion ),
static_cast< ScriptObject* >( new CmnDefInnBed ),
static_cast< ScriptObject* >( new CmnDefCutSceneReplay ),
static_cast< ScriptObject* >( new CmnDefLinkShell ),
nullptr
};

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,13 @@
#include <Script/NativeScriptApi.h>
#include "OpeningGridania.cpp"
#include "OpeningLimsa.cpp"
#include "OpeningGridania.cpp"
#include "OpeningUldah.cpp"
const ScriptObject* ptrs[] =
{
static_cast< ScriptObject* >( new OpeningGridania ),
static_cast< ScriptObject* >( new OpeningLimsa ),
static_cast< ScriptObject* >( new OpeningGridania ),
static_cast< ScriptObject* >( new OpeningUldah ),
nullptr

View file

@ -1,32 +1,32 @@
#include <Script/NativeScriptApi.h>
#include "ManFst001.cpp"
#include "ManFst004.cpp"
#include "ManSea002.cpp"
#include "ManFst002.cpp"
#include "ManFst003.cpp"
#include "ManFst004.cpp"
#include "ManSea001.cpp"
#include "ManSea002.cpp"
#include "ManWil001.cpp"
#include "ManWil002.cpp"
#include "subquest/gridania/SubFst001.cpp"
#include "ManFst001.cpp"
#include "subquest/gridania/SubFst002.cpp"
#include "subquest/gridania/SubFst010.cpp"
#include "subquest/gridania/SubFst013.cpp"
#include "subquest/gridania/SubFst001.cpp"
#include "subquest/gridania/SubFst010.cpp"
#include "ManSea001.cpp"
const ScriptObject* ptrs[] =
{
static_cast< ScriptObject* >( new ManFst001 ),
static_cast< ScriptObject* >( new ManFst004 ),
static_cast< ScriptObject* >( new ManSea002 ),
static_cast< ScriptObject* >( new ManFst002 ),
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 ManWil002 ),
static_cast< ScriptObject* >( new SubFst001 ),
static_cast< ScriptObject* >( new ManFst001 ),
static_cast< ScriptObject* >( new SubFst002 ),
static_cast< ScriptObject* >( new SubFst010 ),
static_cast< ScriptObject* >( new SubFst013 ),
static_cast< ScriptObject* >( new SubFst001 ),
static_cast< ScriptObject* >( new SubFst010 ),
static_cast< ScriptObject* >( new ManSea001 ),
nullptr
};

View file

@ -46,7 +46,7 @@
#include "Forwards.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
using namespace Core::Common;
using namespace Core::Network::Packets;
@ -109,7 +109,8 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 );
uint32_t param3 = inPacket.getValAt< uint32_t >( 0x38 );
g_framework.getLogger().debug( player.getName() + " used GM1 commandId: " + std::to_string( commandId ) +
auto pLog = g_fw.get< Logger >();
pLog->debug( player.getName() + " used GM1 commandId: " + std::to_string( commandId ) +
", params: " + std::to_string( param1 ) + ", " +
std::to_string( param2 ) + ", " + std::to_string( param3 ) );
@ -409,19 +410,20 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
}
case GmCommand::Teri:
{
if( auto instance = g_framework.getTerritoryMgr().getInstanceZonePtr( param1 ) )
auto pTeriMgr = g_fw.get< TerritoryMgr >();
if( auto instance = pTeriMgr->getInstanceZonePtr( param1 ) )
{
player.sendDebug( "Found instance: " + instance->getName() + ", id: " + std::to_string( param1 ) );
player.setInstance( instance );
}
else if( !g_framework.getTerritoryMgr().isValidTerritory( param1 ) )
else if( !pTeriMgr->isValidTerritory( param1 ) )
{
player.sendUrgent( "Invalid zone " + std::to_string( param1 ) );
}
else
{
auto pZone = g_framework.getTerritoryMgr().getZoneByTerriId( param1 );
auto pZone = pTeriMgr->getZoneByTerriId( param1 );
if( !pZone )
{
player.sendUrgent( "No zone instance found for " + std::to_string( param1 ) );
@ -467,13 +469,16 @@ void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPac
{
if( player.getGmRank() <= 0 )
return;
auto pLog = g_fw.get< Logger >();
auto pServerZone = g_fw.get< ServerZone >();
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
std::string param1 = inPacket.getStringAt( 0x34 );
g_framework.getLogger().debug( player.getName() + " used GM2 commandId: " + std::to_string( commandId ) + ", params: " + param1 );
pLog->debug( player.getName() + " used GM2 commandId: " + std::to_string( commandId ) + ", params: " + param1 );
auto targetSession = g_framework.getServerZone().getSession( param1 );
auto targetSession = pServerZone->getSession( param1 );
Core::Entity::CharaPtr targetActor;
if( targetSession != nullptr )

View file

@ -24,7 +24,7 @@
#include "Forwards.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
using namespace Core::Common;
using namespace Core::Network::Packets;
@ -53,10 +53,12 @@ void Core::Network::GameConnection::inventoryModifyHandler( const Packets::GameP
ackPacket.data().sequence = seq;
ackPacket.data().type = 7;
player.queuePacket( ackPacket );
auto pLog = g_fw.get< Logger >();
g_framework.getLogger().debug( inPacket.toString() );
g_framework.getLogger().debug( "InventoryAction: " + std::to_string( action ) );
pLog->debug( inPacket.toString() );
pLog->debug( "InventoryAction: " + std::to_string( action ) );
// TODO: other inventory operations need to be implemented
switch( action )

View file

@ -7,6 +7,9 @@
#include <Network/PacketContainer.h>
#include <Network/PacketDef/Chat/ServerChatDef.h>
#include <Database/DatabaseDef.h>
#include <Database/DbWorkerPool.h>
#include <Database/CharaDbConnection.h>
#include <boost/format.hpp>
#include <unordered_map>
#include "Network/GameConnection.h"
@ -43,7 +46,7 @@
#include "Forwards.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
using namespace Core::Common;
using namespace Core::Network::Packets;
@ -285,20 +288,20 @@ void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePa
void Core::Network::GameConnection::reqEquipDisplayFlagsHandler( const Packets::GamePacket& inPacket,
Entity::Player& player )
{
g_framework.getLogger().info( "[" + std::to_string( player.getId() ) + "] Setting EquipDisplayFlags to " + std::to_string( inPacket.getValAt< uint8_t >( 0x20 ) ) );
player.setEquipDisplayFlags( inPacket.getValAt< uint8_t >( 0x20 ) );
}
void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket& inPacket,
Entity::Player& player )
{
auto pTeriMgr = g_fw.get< TerritoryMgr >();
uint32_t zoneLineId = inPacket.getValAt< uint32_t >( 0x20 );
player.sendDebug( "Walking ZoneLine " + std::to_string( zoneLineId ) );
auto pZone = player.getCurrentZone();
auto pLine = g_framework.getTerritoryMgr().getTerritoryPosition( zoneLineId );
auto pLine = pTeriMgr->getTerritoryPosition( zoneLineId );
Common::FFXIVARR_POSITION3 targetPos{};
uint32_t targetZone;
@ -337,7 +340,9 @@ void Core::Network::GameConnection::discoveryHandler( const Packets::GamePacket&
{
uint32_t ref_position_id = inPacket.getValAt< uint32_t >( 0x20 );
auto pQR = g_framework.getCharaDb().query( "SELECT id, map_id, discover_id "
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pQR = pDb->query( "SELECT id, map_id, discover_id "
"FROM discoveryinfo "
"WHERE id = " + std::to_string( ref_position_id ) + ";" );
@ -489,6 +494,7 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa
Entity::Player& player )
{
auto pDebugCom = g_fw.get< DebugCommandHandler >();
std::string chatString( inPacket.getStringAt( 0x3a ) );
uint32_t sourceId = inPacket.getValAt< uint32_t >( 0x24 );
@ -496,7 +502,7 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa
if( chatString.at( 0 ) == '!' )
{
// execute game console command
g_framework.getDebugCommandHandler().execCommand( const_cast< char * >( chatString.c_str() ) + 1, player );
pDebugCom->execCommand( const_cast< char * >( chatString.c_str() ) + 1, player );
return;
}
@ -553,15 +559,15 @@ void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPa
std::string targetPcName = inPacket.getStringAt( 0x21 );
std::string msg = inPacket.getStringAt( 0x41 );
auto pSession = g_framework.getServerZone().getSession( targetPcName );
auto pZoneServer = g_fw.get< ServerZone >();
auto pSession = pZoneServer->getSession( targetPcName );
if( !pSession )
{
ChatChannelPacket< FFXIVIpcTellErrNotFound > tellErrPacket( player.getId() );
strcpy( tellErrPacket.data().receipientName, targetPcName.c_str() );
sendSinglePacket( tellErrPacket );
g_framework.getLogger().debug( "TargetPc not found" );
return;
}

View file

@ -30,7 +30,7 @@
#include "Forwards.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
using namespace Core::Common;
using namespace Core::Network::Packets;
@ -47,6 +47,9 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
uint64_t targetId = inPacket.getValAt< uint64_t >( 0x30 );
player.sendDebug( "Skill type:" + std::to_string( type ) );
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
switch( type )
{
@ -57,7 +60,7 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
std::string actionIdStr = boost::str( boost::format( "%|04X|" ) % action );
player.sendDebug( "---------------------------------------" );
player.sendDebug( "ActionHandler ( " + actionIdStr + " | " +
g_framework.getExdDataGen().get< Core::Data::Action >( action )->name +
pExdData->get< Core::Data::Action >( action )->name +
" | " + std::to_string( targetId ) + " )" );
player.queuePacket( ActorControlPacket142( player.getId(), ActorControlType::ActionStart, 0x01, action ) );
@ -80,7 +83,7 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
if( !player.actionHasCastTime( action ) )
{
g_framework.getScriptMgr().onCastFinish( player, targetActor->getAsChara(), action );
pScriptMgr->onCastFinish( player, targetActor->getAsChara(), action );
}
else
{
@ -97,11 +100,10 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
}
else if( action < 3000000 ) // item action
{
auto info = g_framework.getExdDataGen().get< Core::Data::EventItem >( action );
auto info = pExdData->get< Core::Data::EventItem >( action );
if( info )
{
g_framework.getLogger().debug( info->name );
g_framework.getScriptMgr().onEventItem( player, action, info->quest, info->castTime, targetId );
pScriptMgr->onEventItem( player, action, info->quest, info->castTime, targetId );
}
}
else if( action > 3000000 ) // unknown

View file

@ -10,7 +10,7 @@
#include <boost/filesystem.hpp>
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
namespace fs = boost::filesystem;
@ -35,31 +35,35 @@ bool Core::Scripting::ScriptLoader::unloadModule( ModuleHandle handle )
#else
bool success = dlclose( handle ) == 0;
#endif
auto pLog = g_fw.get< Logger >();
if( !success )
{
g_framework.getLogger().error( "Failed to unload module @ 0x" + boost::str( boost::format( "%|08X|" ) % handle ) );
pLog->error( "Failed to unload module @ 0x" + boost::str( boost::format( "%|08X|" ) % handle ) );
return false;
}
g_framework.getLogger().debug( "Unloaded module @ 0x" + boost::str( boost::format( "%|08X|" ) % handle ) );
pLog->debug( "Unloaded module @ 0x" + boost::str( boost::format( "%|08X|" ) % handle ) );
return true;
}
Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const std::string& path )
{
auto pLog = g_fw.get< Logger >();
auto pConfig = g_fw.get< XMLConfig >();
fs::path f( path );
if( isModuleLoaded( f.stem().string() ) )
{
g_framework.getLogger().error( "Unable to load module '" + f.stem().string() + "' as it is already loaded" );
pLog->error( "Unable to load module '" + f.stem().string() + "' as it is already loaded" );
return nullptr;
}
// copy to temp dir
fs::path cacheDir( f.parent_path() /= g_framework.getServerZone().getConfig()->getValue< std::string >( "Settings.General.Scripts.CachePath", "./cache/" ) );
fs::path cacheDir( f.parent_path() /= pConfig->getValue< std::string >( "Settings.General.Scripts.CachePath", "./cache/" ) );
fs::create_directories( cacheDir );
fs::path dest( cacheDir /= f.filename().string() );
@ -69,7 +73,7 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const st
}
catch( const boost::filesystem::filesystem_error& err )
{
g_framework.getLogger().error( "Error copying file to cache: " + err.code().message() );
pLog->error( "Error copying file to cache: " + err.code().message() );
return nullptr;
}
@ -83,12 +87,12 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const st
if( !handle )
{
g_framework.getLogger().error( "Failed to load module from: " + path );
pLog->error( "Failed to load module from: " + path );
return nullptr;
}
g_framework.getLogger().debug( "Loaded module '" + f.filename().string() + "' @ 0x" + boost::str( boost::format( "%|08X|" ) % handle ) );
pLog->debug( "Loaded module '" + f.filename().string() + "' @ 0x" + boost::str( boost::format( "%|08X|" ) % handle ) );
auto info = new ScriptInfo;
info->handle = handle;
@ -104,6 +108,7 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const st
ScriptObject** Core::Scripting::ScriptLoader::getScripts( ModuleHandle handle )
{
using getScripts = ScriptObject**( *)( );
auto pLog = g_fw.get< Logger >();
#ifdef _WIN32
getScripts func = reinterpret_cast< getScripts >( GetProcAddress( handle, "getScripts" ) );
@ -115,7 +120,7 @@ ScriptObject** Core::Scripting::ScriptLoader::getScripts( ModuleHandle handle )
{
auto ptr = func();
g_framework.getLogger().debug( "got ScriptObject array @ 0x" + boost::str( boost::format( "%|08X|" ) % ptr ) );
pLog->debug( "got ScriptObject array @ 0x" + boost::str( boost::format( "%|08X|" ) % ptr ) );
return ptr;
}
@ -130,6 +135,7 @@ bool Core::Scripting::ScriptLoader::unloadScript( Core::Scripting::ScriptInfo* i
bool Core::Scripting::ScriptLoader::unloadScript( ModuleHandle handle )
{
auto pLog = g_fw.get< Logger >();
for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it )
{
if( it->second->handle == handle )
@ -148,7 +154,7 @@ bool Core::Scripting::ScriptLoader::unloadScript( ModuleHandle handle )
return true;
}
g_framework.getLogger().error( "failed to unload module: " + info->library_name );
pLog->error( "failed to unload module: " + info->library_name );
return false;
}

View file

@ -30,7 +30,7 @@
// enable the ambiguity fix for every platform to avoid #define nonsense
#define WIN_AMBIGUITY_FIX
extern Core::Framework g_framework;
extern Core::Framework g_fw;
Core::Scripting::ScriptMgr::ScriptMgr() :
m_firstScriptChangeNotificiation( false )
@ -51,8 +51,10 @@ void Core::Scripting::ScriptMgr::update()
bool Core::Scripting::ScriptMgr::init()
{
std::set< std::string > files;
auto pConfig = g_fw.get< XMLConfig >();
auto pLog = g_fw.get< Logger >();
loadDir( g_framework.getServerZone().getConfig()->getValue< std::string >( "Settings.General.Scripts.Path", "./compiledscripts/" ),
loadDir( pConfig->getValue< std::string >( "Settings.General.Scripts.Path", "./compiledscripts/" ),
files, m_nativeScriptMgr->getModuleExtension() );
uint32_t scriptsFound = 0;
@ -68,7 +70,7 @@ bool Core::Scripting::ScriptMgr::init()
scriptsLoaded++;
}
g_framework.getLogger().info( "ScriptMgr: Loaded " + std::to_string( scriptsLoaded ) + "/" + std::to_string( scriptsFound ) + " scripts successfully" );
pLog->info( "ScriptMgr: Loaded " + std::to_string( scriptsLoaded ) + "/" + std::to_string( scriptsFound ) + " scripts successfully" );
watchDirectories();
@ -77,11 +79,12 @@ bool Core::Scripting::ScriptMgr::init()
void Core::Scripting::ScriptMgr::watchDirectories()
{
auto shouldWatch = g_framework.getServerZone().getConfig()->getValue< bool >( "Settings.General.Scripts.HotSwap.Enabled", true );
auto pConfig = g_fw.get< XMLConfig >();
auto shouldWatch = pConfig->getValue< bool >( "Settings.General.Scripts.HotSwap.Enabled", true );
if( !shouldWatch )
return;
Watchdog::watchMany( g_framework.getServerZone().getConfig()->getValue< std::string >( "Settings.General.Scripts.Path", "./compiledscripts/" ) + "*" + m_nativeScriptMgr->getModuleExtension(),
Watchdog::watchMany( pConfig->getValue< std::string >( "Settings.General.Scripts.Path", "./compiledscripts/" ) + "*" + m_nativeScriptMgr->getModuleExtension(),
[ this ]( const std::vector< ci::fs::path >& paths )
{
if( !m_firstScriptChangeNotificiation )
@ -91,18 +94,19 @@ void Core::Scripting::ScriptMgr::watchDirectories()
m_firstScriptChangeNotificiation = true;
return;
}
auto pLog = g_fw.get< Logger >();
for( auto path : paths )
{
if( m_nativeScriptMgr->isModuleLoaded( path.stem().string() ) )
{
g_framework.getLogger().debug( "Reloading changed script: " + path.stem().string() );
pLog->debug( "Reloading changed script: " + path.stem().string() );
m_nativeScriptMgr->queueScriptReload( path.stem( ).string( ));
}
else
{
g_framework.getLogger().debug( "Loading new script: " + path.stem().string() );
pLog->debug( "Loading new script: " + path.stem().string() );
m_nativeScriptMgr->loadScript( path.string() );
}
@ -113,7 +117,8 @@ void Core::Scripting::ScriptMgr::watchDirectories()
void Core::Scripting::ScriptMgr::loadDir( const std::string& dirname, std::set<std::string> &files, const std::string& ext )
{
g_framework.getLogger().info( "ScriptEngine: loading scripts from " + dirname );
auto pLog = g_fw.get< Logger >();
pLog->info( "ScriptEngine: loading scripts from " + dirname );
boost::filesystem::path targetDir( dirname );
@ -145,13 +150,14 @@ void Core::Scripting::ScriptMgr::onPlayerFirstEnterWorld( Entity::Player& player
bool Core::Scripting::ScriptMgr::onTalk( Entity::Player& player, uint64_t actorId, uint32_t eventId )
{
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
uint16_t eventType = eventId >> 16;
uint32_t scriptId = eventId;
// aethernet/aetherytes need to be handled separately
if( eventType == Event::EventHandler::EventHandlerType::Aetheryte )
{
auto aetherInfo = g_framework.getExdDataGen().get< Core::Data::Aetheryte >( eventId & 0xFFFF );
auto aetherInfo = pExdData->get< Core::Data::Aetheryte >( eventId & 0xFFFF );
scriptId = EVENTSCRIPT_AETHERYTE_ID;
if( !aetherInfo->isAetheryte )
scriptId = EVENTSCRIPT_AETHERNET_ID;

View file

@ -17,7 +17,7 @@
#include "StatusEffect.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
using namespace Core::Common;
using namespace Core::Network::Packets;
@ -33,7 +33,8 @@ Core::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr so
, m_tickRate( tickRate )
, m_lastTick( 0 )
{
auto entry = g_framework.getExdDataGen().get< Core::Data::Status >( id );
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto entry = pExdData->get< Core::Data::Status >( id );
m_name = entry->name;
std::replace( m_name.begin(), m_name.end(), ' ', '_' );
@ -66,8 +67,9 @@ std::pair< uint8_t, uint32_t> Core::StatusEffect::StatusEffect::getTickEffect()
void Core::StatusEffect::StatusEffect::onTick()
{
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
m_lastTick = Util::getTimeMs();
g_framework.getScriptMgr().onStatusTick( m_targetActor, *this );
pScriptMgr->onStatusTick( m_targetActor, *this );
}
uint32_t Core::StatusEffect::StatusEffect::getSrcActorId() const
@ -88,6 +90,7 @@ uint16_t Core::StatusEffect::StatusEffect::getParam() const
void Core::StatusEffect::StatusEffect::applyStatus()
{
m_startTime = Util::getTimeMs();
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
// this is only right when an action is being used by the player
// else you probably need to use an actorcontrol
@ -107,14 +110,13 @@ void Core::StatusEffect::StatusEffect::applyStatus()
//effectPacket.data().effects[4].unknown_5 = 0x80;
//m_sourceActor->sendToInRangeSet( effectPacket, true );
g_framework.getLogger().debug( "StatusEffect applied: " + m_name );
g_framework.getScriptMgr().onStatusReceive( m_targetActor, m_id );
pScriptMgr->onStatusReceive( m_targetActor, m_id );
}
void Core::StatusEffect::StatusEffect::removeStatus()
{
g_framework.getLogger().debug( "StatusEffect removed: " + m_name );
g_framework.getScriptMgr().onStatusTimeOut( m_targetActor, m_id );
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
pScriptMgr->onStatusTimeOut( m_targetActor, m_id );
}
uint32_t Core::StatusEffect::StatusEffect::getId() const

View file

@ -20,7 +20,7 @@
#include "InstanceContent.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
using namespace Core::Common;
using namespace Core::Network::Packets;
@ -44,7 +44,8 @@ Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceC
bool Core::InstanceContent::init()
{
g_framework.getScriptMgr().onInstanceInit( getAsInstanceContent() );
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
pScriptMgr->onInstanceInit( getAsInstanceContent() );
return true;
}
@ -67,7 +68,8 @@ Core::Data::ExdDataGenerated::InstanceContentPtr Core::InstanceContent::getInsta
void Core::InstanceContent::onPlayerZoneIn( Entity::Player& player )
{
g_framework.getLogger().debug( "InstanceContent::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|"
auto pLog = g_fw.get< Logger >();
pLog->debug( "InstanceContent::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|"
+ std::to_string( getInstanceContentId() ) +
+ ", Entity#" + std::to_string( player.getId() ) );
@ -83,7 +85,8 @@ void Core::InstanceContent::onPlayerZoneIn( Entity::Player& player )
void Core::InstanceContent::onLeaveTerritory( Entity::Player& player )
{
g_framework.getLogger().debug( "InstanceContent::onLeaveTerritory: Zone#" + std::to_string( getGuId() ) + "|"
auto pLog = g_fw.get< Logger >();
pLog->debug( "InstanceContent::onLeaveTerritory: Zone#" + std::to_string( getGuId() ) + "|"
+ std::to_string( getInstanceContentId() ) +
+ ", Entity#" + std::to_string( player.getId() ) );
sendDirectorClear( player );
@ -149,8 +152,8 @@ void Core::InstanceContent::onUpdate( uint32_t currTime )
case DutyFinished:
break;
}
g_framework.getScriptMgr().onInstanceUpdate( getAsInstanceContent(), currTime );
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
pScriptMgr->onInstanceUpdate( getAsInstanceContent(), currTime );
}
@ -274,13 +277,15 @@ void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object )
m_eventObjectMap[object->getName()] = object;
if( object->getObjectId() == 2000182 ) // start
m_pEntranceEObj = object;
auto objData = g_framework.getExdDataGen().get< Core::Data::EObj >( object->getObjectId() );
auto pLog = g_fw.get< Logger >();
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto objData = pExdData->get< Core::Data::EObj >( object->getObjectId() );
if( objData )
// todo: data should be renamed to eventId
m_eventIdToObjectMap[objData->data] = object;
else
g_framework.getLogger().error( "InstanceContent::onRegisterEObj Zone " +
pLog->error( "InstanceContent::onRegisterEObj Zone " +
m_internalName + ": No EObj data found for EObj with ID: " +
std::to_string( object->getObjectId() ) );
}
@ -334,5 +339,6 @@ void Core::InstanceContent::onTalk( Core::Entity::Player& player, uint32_t event
void Core::InstanceContent::onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 )
{
g_framework.getScriptMgr().onInstanceEnterTerritory( getAsInstanceContent(), player, eventId, param1, param2 );
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
pScriptMgr->onInstanceEnterTerritory( getAsInstanceContent(), player, eventId, param1, param2 );
}

View file

@ -12,7 +12,7 @@
#include "TerritoryMgr.h"
#include "Framework.h"
extern Core::Framework g_framework;
extern Core::Framework g_fw;
Core::TerritoryMgr::TerritoryMgr() :
m_lastInstanceId( 10000 )
@ -22,11 +22,12 @@ Core::TerritoryMgr::TerritoryMgr() :
void Core::TerritoryMgr::loadTerritoryTypeDetailCache()
{
auto idList = g_framework.getExdDataGen().getTerritoryTypeIdList();
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto idList = pExdData->getTerritoryTypeIdList();
for( auto id : idList )
{
auto teri1 = g_framework.getExdDataGen().get< Core::Data::TerritoryType >( id );
auto teri1 = pExdData->get< Core::Data::TerritoryType >( id );
if( !teri1->name.empty() )
m_territoryTypeDetailCacheMap[id] = teri1;
@ -97,6 +98,8 @@ bool Core::TerritoryMgr::isPrivateTerritory( uint32_t territoryTypeId ) const
bool Core::TerritoryMgr::createDefaultTerritories()
{
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto pLog = g_fw.get< Logger >();
// for each entry in territoryTypeExd, check if it is a normal and if so, add the zone object
for( const auto& territory : m_territoryTypeDetailCacheMap )
{
@ -107,18 +110,18 @@ bool Core::TerritoryMgr::createDefaultTerritories()
if( territoryInfo->name.empty() )
continue;
auto pPlaceName = g_framework.getExdDataGen().get< Core::Data::PlaceName >( territoryInfo->placeName );
auto pPlaceName = pExdData->get< Core::Data::PlaceName >( territoryInfo->placeName );
if( !pPlaceName || pPlaceName->name.empty() || !isDefaultTerritory( territoryId ) )
continue;
uint32_t guid = getNextInstanceId();
g_framework.getLogger().info( std::to_string( territoryId ) +
"\t" + std::to_string( guid ) +
"\t" + std::to_string( territoryInfo->territoryIntendedUse ) +
"\t" + ( territoryInfo->name.length() <= 4 ? territoryInfo->name + "\t" : territoryInfo->name ) +
"\t" + ( isPrivateTerritory( territoryId ) ? "PRIVATE" : "PUBLIC" ) +
"\t" + pPlaceName->name );
pLog->info( std::to_string( territoryId ) +
"\t" + std::to_string( guid ) +
"\t" + std::to_string( territoryInfo->territoryIntendedUse ) +
"\t" + ( territoryInfo->name.length() <= 4 ? territoryInfo->name + "\t" : territoryInfo->name ) +
"\t" + ( isPrivateTerritory( territoryId ) ? "PRIVATE" : "PUBLIC" ) +
"\t" + pPlaceName->name );
auto pZone = make_Zone( territoryId, guid, territoryInfo->name, pPlaceName->name );
pZone->init();
@ -142,13 +145,15 @@ Core::ZonePtr Core::TerritoryMgr::createTerritoryInstance( uint32_t territoryTyp
if( isInstanceContentTerritory( territoryTypeId ) )
return nullptr;
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto pLog = g_fw.get< Logger >();
auto pTeri = getTerritoryDetail( territoryTypeId );
auto pPlaceName = g_framework.getExdDataGen().get< Core::Data::PlaceName >( pTeri->placeName );
auto pPlaceName = pExdData->get< Core::Data::PlaceName >( pTeri->placeName );
if( !pTeri || !pPlaceName )
return nullptr;
g_framework.getLogger().debug( "Starting instance for territory: " + std::to_string( territoryTypeId ) + " (" + pPlaceName->name + ")" );
pLog->debug( "Starting instance for territory: " + std::to_string( territoryTypeId ) + " (" + pPlaceName->name + ")" );
auto pZone = make_Zone( territoryTypeId, getNextInstanceId(), pTeri->name, pPlaceName->name );
pZone->init();
@ -161,7 +166,8 @@ Core::ZonePtr Core::TerritoryMgr::createTerritoryInstance( uint32_t territoryTyp
Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceContentId )
{
auto pInstanceContent = g_framework.getExdDataGen().get< Core::Data::InstanceContent >( instanceContentId );
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
auto pInstanceContent = pExdData->get< Core::Data::InstanceContent >( instanceContentId );
if( !pInstanceContent )
return nullptr;
@ -173,8 +179,9 @@ Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceConten
if( !pTeri || pInstanceContent->name.empty() )
return nullptr;
g_framework.getLogger().debug( "Starting instance for InstanceContent id: " + std::to_string( instanceContentId ) +
" (" + pInstanceContent->name + ")" );
auto pLog = g_fw.get< Logger >();
pLog->debug( "Starting instance for InstanceContent id: " + std::to_string( instanceContentId ) +
" (" + pInstanceContent->name + ")" );
auto pZone = make_InstanceContent( pInstanceContent, getNextInstanceId(),
pTeri->name, pInstanceContent->name, instanceContentId );
@ -221,7 +228,8 @@ Core::ZonePtr Core::TerritoryMgr::getInstanceZonePtr( uint32_t instanceId ) cons
void Core::TerritoryMgr::loadTerritoryPositionMap()
{
auto pQR = g_framework.getCharaDb().query( "SELECT id, target_zone_id, pos_x, pos_y, pos_z, pos_o, radius FROM zonepositions;" );
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pQR = pDb->query( "SELECT id, target_zone_id, pos_x, pos_y, pos_z, pos_o, radius FROM zonepositions;" );
while( pQR->next() )
{
@ -308,9 +316,10 @@ bool Core::TerritoryMgr::movePlayer( uint32_t territoryId, Core::Entity::PlayerP
bool Core::TerritoryMgr::movePlayer( ZonePtr pZone, Core::Entity::PlayerPtr pPlayer )
{
auto pLog = g_fw.get< Logger >();
if( !pZone )
{
g_framework.getLogger().error( "Zone not found on this server." );
pLog->error( "Zone not found on this server." );
return false;
}

View file

@ -39,7 +39,7 @@ using namespace Core::Common;
using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server;
extern Core::Framework g_framework;
extern Core::Framework g_fw;
/**
@ -60,6 +60,7 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
m_currentWeather( Weather::FairSkies ),
m_nextEObjId( 0x400D0000 )
{
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
m_guId = guId;
m_territoryId = territoryId;
@ -68,7 +69,7 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
m_lastMobUpdate = 0;
m_weatherOverride = Weather::None;
m_territoryTypeInfo = g_framework.getExdDataGen().get< Core::Data::TerritoryType >( territoryId );
m_territoryTypeInfo = pExdData->get< Core::Data::TerritoryType >( territoryId );
loadWeatherRates();
@ -78,17 +79,15 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
void Core::Zone::loadWeatherRates()
{
if( !m_territoryTypeInfo )
{
g_framework.getLogger().error( std::string( __FUNCTION__ ) + " TerritoryTypeInfo not loaded!" );
return;
}
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
uint8_t weatherRateId = m_territoryTypeInfo->weatherRate > g_framework.getExdDataGen().getWeatherRateIdList().size() ?
uint8_t weatherRateId = m_territoryTypeInfo->weatherRate > pExdData->getWeatherRateIdList().size() ?
uint8_t{ 0 } : m_territoryTypeInfo->weatherRate;
uint8_t sumPc = 0;
auto weatherRateFields = g_framework.getExdDataGen().m_WeatherRateDat.get_row( weatherRateId );
auto weatherRateFields = pExdData->m_WeatherRateDat.get_row( weatherRateId );
for( size_t i = 0; i < 16; )
{
int32_t weatherId = boost::get< int32_t >( weatherRateFields[i] );
@ -108,8 +107,9 @@ Core::Zone::~Zone()
bool Core::Zone::init()
{
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
if( g_framework.getScriptMgr().onZoneInit( shared_from_this() ) )
if( pScriptMgr->onZoneInit( shared_from_this() ) )
{
// all good
}
@ -214,7 +214,8 @@ void Core::Zone::pushActor( Entity::ActorPtr pActor )
{
auto pPlayer = pActor->getAsPlayer();
auto pSession = g_framework.getServerZone().getSession( pPlayer->getId() );
auto pServerZone = g_fw.get< ServerZone >();
auto pSession = pServerZone->getSession( pPlayer->getId() );
if( pSession )
m_sessionSet.insert( pSession );
m_playerMap[pPlayer->getId()] = pPlayer;
@ -257,9 +258,11 @@ void Core::Zone::removeActor( Entity::ActorPtr pActor )
void Core::Zone::queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range, GamePacketPtr pPacketEntry )
{
if( g_framework.getTerritoryMgr().isPrivateTerritory( getTerritoryId() ) )
auto pTeriMgr = g_fw.get< TerritoryMgr >();
if( pTeriMgr->isPrivateTerritory( getTerritoryId() ) )
return;
auto pServerZone = g_fw.get< ServerZone >();
for( auto entry : m_playerMap )
{
auto player = entry.second;
@ -273,7 +276,7 @@ void Core::Zone::queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t
if( ( distance < range ) && sourcePlayer.getId() != player->getId() )
{
auto pSession = g_framework.getServerZone().getSession( player->getId() );
auto pSession = pServerZone->getSession( player->getId() );
pPacketEntry->setValAt< uint32_t >( 0x08, player->getId() );
if( pSession )
pSession->getZoneConnection()->queueOutPacket( pPacketEntry );
@ -313,9 +316,6 @@ bool Core::Zone::checkWeather()
if( m_weatherOverride != m_currentWeather )
{
m_currentWeather = m_weatherOverride;
g_framework.getLogger().debug( "[Zone:" + m_internalName + "] overriding weather to : " +
std::to_string( static_cast< uint8_t >( m_weatherOverride ) ) );
return true;
}
}
@ -325,9 +325,6 @@ bool Core::Zone::checkWeather()
if( nextWeather != m_currentWeather )
{
m_currentWeather = nextWeather;
g_framework.getLogger().debug( "[Zone:" + m_internalName + "] changing weather to : " +
std::to_string( static_cast< uint8_t >( nextWeather ) ) );
return true;
}
}
@ -588,8 +585,9 @@ void Core::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
if( pCell == nullptr )
return;
auto pTeriMgr = g_fw.get< TerritoryMgr >();
// TODO: make sure gms can overwrite this. Potentially temporary solution
if( g_framework.getTerritoryMgr().isPrivateTerritory( getTerritoryId() ) )
if( pTeriMgr->isPrivateTerritory( getTerritoryId() ) )
return;
auto iter = pCell->m_actors.begin();
@ -637,13 +635,15 @@ void Core::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
void Core::Zone::onPlayerZoneIn( Entity::Player &player )
{
g_framework.getLogger().debug( "Zone::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryId() ) +
auto pLog = g_fw.get< Logger >();
pLog->debug( "Zone::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryId() ) +
+ ", Entity#" + std::to_string( player.getId() ) );
}
void Core::Zone::onLeaveTerritory( Entity::Player& player )
{
g_framework.getLogger().debug( "Zone::onLeaveTerritory: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryId() ) +
auto pLog = g_fw.get< Logger >();
pLog->debug( "Zone::onLeaveTerritory: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryId() ) +
+ ", Entity#" + std::to_string( player.getId() ) );
}
@ -671,7 +671,7 @@ void Core::Zone::registerEObj( Entity::EventObjectPtr object )
{
if( !object )
return;
auto pLog = g_fw.get< Logger >();
object->setId( getNextEObjId() );
pushActor( object );
@ -679,7 +679,7 @@ void Core::Zone::registerEObj( Entity::EventObjectPtr object )
onRegisterEObj( object );
g_framework.getLogger().debug( "Registered instance eobj: " + std::to_string( object->getId() ) );
pLog->debug( "Registered instance eobj: " + std::to_string( object->getId() ) );
}
Core::Entity::EventObjectPtr Core::Zone::getEObj( uint32_t objId )

View file

@ -11,6 +11,7 @@
#include <Database/DbWorkerPool.h>
#include "Linkshell/LinkshellMgr.h"
#include "Zone/TerritoryMgr.h"
#include "DebugCommand/DebugCommandHandler.h"
Core::Framework g_fw;
@ -26,6 +27,7 @@ bool setupFramework()
auto pDb = boost::make_shared< Db::DbWorkerPool< Db::CharaDbConnection > >();
auto pLsMgr = boost::make_shared< LinkshellMgr >();
auto pTeriMgr = boost::make_shared< TerritoryMgr >();
auto pDebugCom = boost::make_shared< DebugCommandHandler >();
pLogger->setLogPath( "log/SapphireZone_" );
pLogger->init();
@ -38,6 +40,7 @@ bool setupFramework()
g_fw.set< Db::DbWorkerPool< Db::CharaDbConnection > >( pDb );
g_fw.set< LinkshellMgr >( pLsMgr );
g_fw.set< TerritoryMgr >( pTeriMgr );
g_fw.set< DebugCommandHandler >( pDebugCom );
// actuall catch errors here...
return true;
@ -51,4 +54,4 @@ int main( int32_t argc, char* argv[] )
g_fw.get< ServerZone >()->run( argc, argv );
return 0;
}
}