diff --git a/src/world/Action/ActionTeleport.cpp b/src/world/Action/ActionTeleport.cpp index ce431dd8..6023a1a7 100644 --- a/src/world/Action/ActionTeleport.cpp +++ b/src/world/Action/ActionTeleport.cpp @@ -19,16 +19,14 @@ using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::ActorControl; -extern Sapphire::Framework g_fw; - Sapphire::Action::ActionTeleport::ActionTeleport() { m_handleActionType = HandleActionType::Event; } -Sapphire::Action::ActionTeleport::ActionTeleport( Entity::CharaPtr pActor, uint16_t targetZone, uint16_t cost ) +Sapphire::Action::ActionTeleport::ActionTeleport( Entity::CharaPtr pActor, uint16_t targetZone, uint16_t cost, FrameworkPtr pFw ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = pFw->get< Data::ExdDataGenerated >(); m_startTime = 0; m_id = 5; m_handleActionType = HandleActionType::Teleport; diff --git a/src/world/Action/ActionTeleport.h b/src/world/Action/ActionTeleport.h index 33595b87..088fa8b0 100644 --- a/src/world/Action/ActionTeleport.h +++ b/src/world/Action/ActionTeleport.h @@ -18,7 +18,7 @@ namespace Sapphire::Action ~ActionTeleport(); - ActionTeleport( Entity::CharaPtr pActor, uint16_t action, uint16_t cost ); + ActionTeleport( Entity::CharaPtr pActor, uint16_t action, uint16_t cost, FrameworkPtr pFw ); void onStart() override; diff --git a/src/world/Actor/Actor.cpp b/src/world/Actor/Actor.cpp index b1684a0f..37dfa204 100644 --- a/src/world/Actor/Actor.cpp +++ b/src/world/Actor/Actor.cpp @@ -27,10 +27,6 @@ #include "Math/CalcBattle.h" -#include "Framework.h" - -extern Sapphire::Framework g_fw; - using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; //using namespace Sapphire::Network::Packets::Server; @@ -297,16 +293,10 @@ Send a packet to all players in range, potentially to self if set and is player */ void Sapphire::Entity::Actor::sendToInRangeSet( Network::Packets::FFXIVPacketBasePtr pPacket, bool bToSelf ) { - auto pServerZone = g_fw.get< World::ServerMgr >(); if( bToSelf && isPlayer() ) { auto pPlayer = getAsPlayer(); - - auto pSession = pServerZone->getSession( pPlayer->getId() ); - - // it might be that the player DC'd in which case the session would be invalid - if( pSession ) - pSession->getZoneConnection()->queueOutPacket( pPacket ); + pPlayer->queuePacket( pPacket ); } if( m_inRangePlayers.empty() ) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 233d0947..ae755269 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -43,8 +43,6 @@ #include "ServerMgr.h" #include "Framework.h" -extern Sapphire::Framework g_fw; - using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; @@ -56,7 +54,7 @@ using InvSlotPair = std::pair< uint16_t, int8_t >; using InvSlotPairVec = std::vector< InvSlotPair >; // player constructor -Sapphire::Entity::Player::Player() : +Sapphire::Entity::Player::Player( FrameworkPtr pFw ) : Chara( ObjKind::Player ), m_lastWrite( 0 ), m_lastPing( 0 ), @@ -77,7 +75,8 @@ Sapphire::Entity::Player::Player() : m_mount( 0 ), m_emoteMode( 0 ), m_directorInitialized( false ), - m_onEnterEventDone( false ) + m_onEnterEventDone( false ), + m_pFw( pFw ) { m_id = 0; m_currentStance = Stance::Passive; @@ -109,7 +108,7 @@ Sapphire::Entity::Player::~Player() void Sapphire::Entity::Player::injectPacket( const std::string& path ) { - auto pServerZone = g_fw.get< World::ServerMgr >(); + auto pServerZone = m_pFw->get< World::ServerMgr >(); auto session = pServerZone->getSession( getId() ); if( session ) session->getZoneConnection()->injectPacket( path, *this ); @@ -195,7 +194,7 @@ bool Sapphire::Entity::Player::isMarkedForRemoval() const Sapphire::Common::OnlineStatus Sapphire::Entity::Player::getOnlineStatus() const { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); if( !pExdData ) return OnlineStatus::Online; @@ -250,7 +249,7 @@ void Sapphire::Entity::Player::calculateStats() uint8_t level = getLevel(); uint8_t job = static_cast< uint8_t >( getClass() ); - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); auto classInfo = pExdData->get< Sapphire::Data::ClassJob >( job ); auto tribeInfo = pExdData->get< Sapphire::Data::Tribe >( tribe ); @@ -339,8 +338,8 @@ void Sapphire::Entity::Player::sendStats() void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); - auto pTeriMgr = g_fw.get< TerritoryMgr >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); + auto pTeriMgr = m_pFw->get< TerritoryMgr >(); auto data = pExdData->get< Sapphire::Data::Aetheryte >( aetheryteId ); @@ -407,7 +406,7 @@ void Sapphire::Entity::Player::returnToHomepoint() void Sapphire::Entity::Player::setZone( uint32_t zoneId ) { - auto pTeriMgr = g_fw.get< TerritoryMgr >(); + auto pTeriMgr = m_pFw->get< TerritoryMgr >(); m_onEnterEventDone = false; if( !pTeriMgr->movePlayer( zoneId, getAsPlayer() ) ) { @@ -425,7 +424,7 @@ void Sapphire::Entity::Player::setZone( uint32_t zoneId ) bool Sapphire::Entity::Player::setInstance( uint32_t instanceContentId ) { - auto pTeriMgr = g_fw.get< TerritoryMgr >(); + auto pTeriMgr = m_pFw->get< TerritoryMgr >(); m_onEnterEventDone = false; auto instance = pTeriMgr->getInstanceZonePtr( instanceContentId ); if( !instance ) @@ -440,7 +439,7 @@ bool Sapphire::Entity::Player::setInstance( ZonePtr instance ) if( !instance ) return false; - auto pTeriMgr = g_fw.get< TerritoryMgr >(); + auto pTeriMgr = m_pFw->get< TerritoryMgr >(); auto currentZone = getCurrentZone(); @@ -463,7 +462,7 @@ bool Sapphire::Entity::Player::setInstance( ZonePtr instance ) bool Sapphire::Entity::Player::exitInstance() { - auto pTeriMgr = g_fw.get< TerritoryMgr >(); + auto pTeriMgr = m_pFw->get< TerritoryMgr >(); // check if housing zone if( pTeriMgr->isHousingTerritory( m_prevTerritoryTypeId ) ) @@ -548,7 +547,7 @@ void Sapphire::Entity::Player::discover( int16_t map_id, int16_t sub_id ) // section to starts at 320 - 4 bytes long - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); int32_t offset = 4; @@ -640,7 +639,7 @@ bool Sapphire::Entity::Player::isActionLearned( uint8_t actionId ) const void Sapphire::Entity::Player::gainExp( uint32_t amount ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint32_t currentExp = getExp(); @@ -721,14 +720,14 @@ void Sapphire::Entity::Player::sendStatusUpdate( bool toSelf ) uint8_t Sapphire::Entity::Player::getLevel() const { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex; return static_cast< uint8_t >( m_classArray[ classJobIndex ] ); } uint8_t Sapphire::Entity::Player::getLevelForClass( Common::ClassJob pClass ) const { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( pClass ) )->expArrayIndex; return static_cast< uint8_t >( m_classArray[ classJobIndex ] ); } @@ -741,14 +740,14 @@ bool Sapphire::Entity::Player::isClassJobUnlocked( Common::ClassJob classJob ) c uint32_t Sapphire::Entity::Player::getExp() const { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex; return m_expArray[ classJobIndex ]; } void Sapphire::Entity::Player::setExp( uint32_t amount ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex; m_expArray[ classJobIndex ] = amount; } @@ -790,14 +789,14 @@ void Sapphire::Entity::Player::setClassJob( Common::ClassJob classJob ) void Sapphire::Entity::Player::setLevel( uint8_t level ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( getClass() ) )->expArrayIndex; m_classArray[ classJobIndex ] = level; } void Sapphire::Entity::Player::setLevelForClass( uint8_t level, Common::ClassJob classjob ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( classjob ) )->expArrayIndex; if( m_classArray[ classJobIndex ] == 0 ) @@ -942,7 +941,7 @@ const uint8_t* Sapphire::Entity::Player::getStateFlags() const bool Sapphire::Entity::Player::actionHasCastTime( uint32_t actionId ) //TODO: Add logic for special cases { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); auto actionInfoPtr = pExdData->get< Sapphire::Data::Action >( actionId ); if( actionInfoPtr->preservesCombo ) return false; @@ -1103,7 +1102,7 @@ void Sapphire::Entity::Player::update( int64_t currTime ) void Sapphire::Entity::Player::onMobKill( uint16_t nameId ) { - auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); + auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >(); pScriptMgr->onMobKill( *getAsPlayer(), nameId ); } @@ -1204,7 +1203,7 @@ const uint8_t* Sapphire::Entity::Player::getGcRankArray() const void Sapphire::Entity::Player::queuePacket( Network::Packets::FFXIVPacketBasePtr pPacket ) { - auto pServerZone = g_fw.get< World::ServerMgr >(); + auto pServerZone = m_pFw->get< World::ServerMgr >(); auto pSession = pServerZone->getSession( m_id ); if( !pSession ) @@ -1219,7 +1218,7 @@ void Sapphire::Entity::Player::queuePacket( Network::Packets::FFXIVPacketBasePtr void Sapphire::Entity::Player::queueChatPacket( Network::Packets::FFXIVPacketBasePtr pPacket ) { - auto pServerZone = g_fw.get< World::ServerMgr >(); + auto pServerZone = m_pFw->get< World::ServerMgr >(); auto pSession = pServerZone->getSession( m_id ); if( !pSession ) @@ -1555,7 +1554,7 @@ void Sapphire::Entity::Player::sendZonePackets() if( isLogin() ) { //Update player map in servermgr - in case player name has been changed - auto pServerMgr = g_fw.get< World::ServerMgr >(); + auto pServerMgr = m_pFw->get< World::ServerMgr >(); pServerMgr->updatePlayerName( getId(), getName() ); } @@ -1603,7 +1602,7 @@ void Sapphire::Entity::Player::sendZonePackets() sendItemLevel(); } - auto pHousingMgr = g_fw.get< HousingMgr >(); + auto pHousingMgr = m_pFw->get< HousingMgr >(); if( Sapphire::LandPtr pLand = pHousingMgr->getLandByOwnerId( getId() ) ) { uint32_t state = 0; @@ -1731,9 +1730,9 @@ void Sapphire::Entity::Player::emoteInterrupt() sendToInRangeSet( makeActorControl142( getId(), ActorControlType::EmoteInterrupt ) ); } -void Sapphire::Entity::Player::teleportQuery( uint16_t aetheryteId ) +void Sapphire::Entity::Player::teleportQuery( uint16_t aetheryteId, FrameworkPtr pFw ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = pFw->get< Data::ExdDataGenerated >(); // TODO: only register this action if enough gil is in possession auto targetAetheryte = pExdData->get< Sapphire::Data::Aetheryte >( aetheryteId ); @@ -1757,7 +1756,7 @@ void Sapphire::Entity::Player::teleportQuery( uint16_t aetheryteId ) if( !insufficientGil ) { Action::ActionPtr pActionTeleport; - pActionTeleport = Action::make_ActionTeleport( getAsPlayer(), aetheryteId, cost ); + pActionTeleport = Action::make_ActionTeleport( getAsPlayer(), aetheryteId, cost, pFw ); setCurrentAction( pActionTeleport ); } } diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index e5b0f050..9f3a80b2 100644 --- a/src/world/Actor/Player.h +++ b/src/world/Actor/Player.h @@ -39,7 +39,7 @@ namespace Sapphire::Entity { public: /*! Contructor */ - Player(); + Player( FrameworkPtr pFw ); /*! Destructor */ ~Player(); @@ -523,7 +523,7 @@ namespace Sapphire::Entity void teleport( uint16_t aetheryteId, uint8_t type = 1 ); /*! query teleport of a specified type */ - void teleportQuery( uint16_t aetheryteId ); + void teleportQuery( uint16_t aetheryteId, FrameworkPtr pFw ); /*! prepares zoning / fades out the screen */ void prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadoutTime = 0, uint16_t animation = 0 ); @@ -1047,6 +1047,9 @@ namespace Sapphire::Entity Util::SpawnIndexAllocator< uint8_t > m_objSpawnIndexAllocator; Util::SpawnIndexAllocator< uint8_t > m_actorSpawnIndexAllocator; + + // todo: temporary store ptr to framework + FrameworkPtr m_pFw; }; } diff --git a/src/world/Actor/PlayerEvent.cpp b/src/world/Actor/PlayerEvent.cpp index 7603fde0..7db09501 100644 --- a/src/world/Actor/PlayerEvent.cpp +++ b/src/world/Actor/PlayerEvent.cpp @@ -19,8 +19,6 @@ #include "ServerMgr.h" #include "Framework.h" -extern Sapphire::Framework g_fw; - using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; @@ -328,7 +326,7 @@ void Sapphire::Entity::Player::eventItemActionStart( uint32_t eventId, void Sapphire::Entity::Player::onLogin() { - auto pConfig = g_fw.get< ConfigMgr >(); + auto pConfig = m_pFw->get< ConfigMgr >(); auto motd = pConfig->getValue< std::string >( "General", "MotD", "" ); std::istringstream ss( motd ); diff --git a/src/world/Actor/PlayerInventory.cpp b/src/world/Actor/PlayerInventory.cpp index 9cd96492..31dc615c 100644 --- a/src/world/Actor/PlayerInventory.cpp +++ b/src/world/Actor/PlayerInventory.cpp @@ -33,8 +33,6 @@ #include "Framework.h" #include -extern Sapphire::Framework g_fw; - using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; @@ -116,7 +114,7 @@ void Sapphire::Entity::Player::sendItemLevel() void Sapphire::Entity::Player::equipWeapon( ItemPtr pItem, bool updateClass ) { - auto exdData = g_fw.get< Sapphire::Data::ExdDataGenerated >(); + auto exdData = m_pFw->get< Sapphire::Data::ExdDataGenerated >(); if( !exdData ) return; @@ -137,7 +135,7 @@ void Sapphire::Entity::Player::equipWeapon( ItemPtr pItem, bool updateClass ) void Sapphire::Entity::Player::equipSoulCrystal( ItemPtr pItem, bool updateJob ) { - auto exdData = g_fw.get< Sapphire::Data::ExdDataGenerated >(); + auto exdData = m_pFw->get< Sapphire::Data::ExdDataGenerated >(); if ( !exdData ) return; @@ -248,7 +246,7 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite void Sapphire::Entity::Player::unequipSoulCrystal( ItemPtr pItem ) { - auto exdData = g_fw.get< Sapphire::Data::ExdDataGenerated >(); + auto exdData = m_pFw->get< Sapphire::Data::ExdDataGenerated >(); if ( !exdData ) return; @@ -358,7 +356,7 @@ void Sapphire::Entity::Player::removeCrystal( Common::CrystalType type, uint32_t void Sapphire::Entity::Player::sendInventory() { - auto pInvMgr = g_fw.get< World::Manager::InventoryMgr >(); + auto pInvMgr = m_pFw->get< World::Manager::InventoryMgr >(); for( auto it = m_storageMap.begin(); it != m_storageMap.end(); ++it ) { @@ -426,7 +424,7 @@ uint32_t Sapphire::Entity::Player::getCrystal( CrystalType type ) void Sapphire::Entity::Player::writeInventory( InventoryType type ) { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto storage = m_storageMap[ type ]; @@ -455,7 +453,7 @@ void Sapphire::Entity::Player::writeInventory( InventoryType type ) void Sapphire::Entity::Player::writeItem( Sapphire::ItemPtr pItem ) const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmt = pDb->getPreparedStatement( Db::CHARA_ITEMGLOBAL_UP ); // todo: add more fields @@ -470,7 +468,7 @@ void Sapphire::Entity::Player::writeItem( Sapphire::ItemPtr pItem ) const void Sapphire::Entity::Player::deleteItemDb( Sapphire::ItemPtr item ) const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmt = pDb->getPreparedStatement( Db::CHARA_ITEMGLOBAL_DELETE ); stmt->setInt64( 1, item->getUId() ); @@ -488,8 +486,8 @@ bool Sapphire::Entity::Player::isObtainable( uint32_t catalogId, uint8_t quantit Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_t quantity, bool isHq, bool silent ) { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); auto itemInfo = pExdData->get< Sapphire::Data::Item >( catalogId ); // if item data doesn't exist or it's a blank field diff --git a/src/world/Actor/PlayerQuest.cpp b/src/world/Actor/PlayerQuest.cpp index b3466e27..e79a0677 100644 --- a/src/world/Actor/PlayerQuest.cpp +++ b/src/world/Actor/PlayerQuest.cpp @@ -9,8 +9,6 @@ #include "Session.h" #include "Framework.h" -extern Sapphire::Framework g_fw; - using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; @@ -1030,7 +1028,7 @@ void Sapphire::Entity::Player::removeQuestsCompleted( uint32_t questId ) bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t optionalChoice ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint32_t playerLevel = getLevel(); auto questInfo = pExdData->get< Sapphire::Data::Quest >( questId ); diff --git a/src/world/Actor/PlayerSql.cpp b/src/world/Actor/PlayerSql.cpp index 37666dcb..f2507c7a 100644 --- a/src/world/Actor/PlayerSql.cpp +++ b/src/world/Actor/PlayerSql.cpp @@ -21,8 +21,6 @@ #include "ServerMgr.h" #include "Framework.h" -extern Sapphire::Framework g_fw; - using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets::Server; @@ -31,8 +29,8 @@ using namespace Sapphire::World::Manager; // load player from the db bool Sapphire::Entity::Player::load( uint32_t charId, World::SessionPtr pSession ) { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); - auto pTeriMgr = g_fw.get< TerritoryMgr >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pTeriMgr = m_pFw->get< TerritoryMgr >(); const std::string char_id_str = std::to_string( charId ); @@ -248,7 +246,7 @@ bool Sapphire::Entity::Player::load( uint32_t charId, World::SessionPtr pSession bool Sapphire::Entity::Player::loadActiveQuests() { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_QUEST ); stmt->setUInt( 1, m_id ); @@ -284,7 +282,7 @@ bool Sapphire::Entity::Player::loadActiveQuests() bool Sapphire::Entity::Player::loadClassData() { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); // ClassIdx, Exp, Lvl auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_CLASS_SEL ); stmt->setUInt( 1, m_id ); @@ -305,7 +303,7 @@ bool Sapphire::Entity::Player::loadClassData() bool Sapphire::Entity::Player::loadSearchInfo() { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmt = pDb->getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_SEARCHINFO ); stmt->setUInt( 1, m_id ); auto res = pDb->query( stmt ); @@ -327,7 +325,7 @@ bool Sapphire::Entity::Player::loadSearchInfo() void Sapphire::Entity::Player::updateSql() { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); /*"Hp 1, Mp 2, Tp 3, Gp 4, Mode 5, Mount 6, InvincibleGM 7, Voice 8, " "Customize 9, ModelMainWeapon 10, ModelSubWeapon 11, ModelSystemWeapon 12, " "ModelEquip 13, EmoteModeType 14, Language 15, IsNewGame 16, IsNewAdventurer 17, " @@ -469,8 +467,8 @@ void Sapphire::Entity::Player::updateSql() void Sapphire::Entity::Player::updateDbClass() const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); uint8_t classJobIndex = pExdData->get< Sapphire::Data::ClassJob >( static_cast( getClass() ) )->expArrayIndex; //Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ? @@ -484,7 +482,7 @@ void Sapphire::Entity::Player::updateDbClass() const void Sapphire::Entity::Player::insertDbClass( const uint8_t classJobIndex ) const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmtClass = pDb->getPreparedStatement( Db::CHARA_CLASS_INS ); stmtClass->setInt( 1, getId() ); stmtClass->setInt( 2, classJobIndex ); @@ -495,7 +493,7 @@ void Sapphire::Entity::Player::insertDbClass( const uint8_t classJobIndex ) cons void Sapphire::Entity::Player::updateDbSearchInfo() const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmtS = pDb->getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS ); stmtS->setInt( 1, m_searchSelectClass ); stmtS->setInt( 2, m_id ); @@ -514,7 +512,7 @@ void Sapphire::Entity::Player::updateDbSearchInfo() const void Sapphire::Entity::Player::updateDbAllQuests() const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); for( int32_t i = 0; i < 30; i++ ) { if( !m_activeQuests[ i ] ) @@ -539,7 +537,7 @@ void Sapphire::Entity::Player::updateDbAllQuests() const void Sapphire::Entity::Player::deleteQuest( uint16_t questId ) const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmt = pDb->getPreparedStatement( Db::CHARA_QUEST_DEL ); stmt->setInt( 1, m_id ); stmt->setInt( 2, questId ); @@ -548,7 +546,7 @@ void Sapphire::Entity::Player::deleteQuest( uint16_t questId ) const void Sapphire::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uint8_t seq ) const { - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto stmt = pDb->getPreparedStatement( Db::CHARA_QUEST_INS ); stmt->setInt( 1, m_id ); stmt->setInt( 2, index ); @@ -567,10 +565,10 @@ void Sapphire::Entity::Player::insertQuest( uint16_t questId, uint8_t index, uin Sapphire::ItemPtr Sapphire::Entity::Player::createItem( uint32_t catalogId, uint32_t quantity ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto itemInfo = pExdData->get< Sapphire::Data::Item >( catalogId ); - auto itemMgr = g_fw.get< World::Manager::ItemMgr >(); + auto itemMgr = m_pFw->get< World::Manager::ItemMgr >(); if( !itemInfo ) return nullptr; @@ -599,8 +597,8 @@ Sapphire::ItemPtr Sapphire::Entity::Player::createItem( uint32_t catalogId, uint bool Sapphire::Entity::Player::loadInventory() { - auto itemMgr = g_fw.get< World::Manager::ItemMgr >(); - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto itemMgr = m_pFw->get< World::Manager::ItemMgr >(); + auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); ////////////////////////////////////////////////////////////////////////////////////////////////////// // load active gearset auto res = pDb->query( "SELECT storageId, container_0, container_1, container_2, container_3, " diff --git a/src/world/Manager/ItemMgr.cpp b/src/world/Manager/ItemMgr.cpp index dca5cd2e..f5ee9d90 100644 --- a/src/world/Manager/ItemMgr.cpp +++ b/src/world/Manager/ItemMgr.cpp @@ -9,9 +9,6 @@ #include #include - -extern Sapphire::Framework g_fw; - Sapphire::World::Manager::ItemMgr::ItemMgr( Sapphire::FrameworkPtr pFw ) : BaseManager( pFw ) { @@ -125,8 +122,8 @@ bool Sapphire::World::Manager::ItemMgr::isOneHandedWeapon( Common::ItemUICategor Sapphire::ItemPtr Sapphire::World::Manager::ItemMgr::loadItem( uint64_t uId ) { - auto pExdData = g_fw.get< Data::ExdDataGenerated >(); - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pExdData = framework()->get< Data::ExdDataGenerated >(); + auto pDb = framework()->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); // load actual item auto itemRes = pDb->query( "SELECT catalogId, stack, flags FROM charaglobalitem WHERE itemId = " + std::to_string( uId ) + ";" ); @@ -182,7 +179,7 @@ Sapphire::Common::ContainerType Sapphire::World::Manager::ItemMgr::getContainerT uint32_t Sapphire::World::Manager::ItemMgr::getNextUId() { uint32_t charId = 0; - auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); + auto pDb = framework()->get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pQR = pDb->query( "SELECT MAX(ItemId) FROM charaglobalitem" ); if( !pQR->next() ) diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index cf0efb13..5e9b0276 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -84,7 +84,6 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, "\nparam3: " + Util::intToHexString( static_cast< uint64_t >( param3 & 0xFFFFFFFFFFFFFFF ), 16 ) ); - //g_log.Log(LoggingSeverity::debug, "[" + std::to_string(m_pSession->getId()) + "] " + pInPacket->toString()); switch( commandId ) @@ -273,7 +272,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, case ClientTriggerType::Teleport: // Teleport { - player.teleportQuery( param11 ); + player.teleportQuery( param11, pFw ); break; } case ClientTriggerType::DyeItem: // Dye item diff --git a/src/world/ServerMgr.cpp b/src/world/ServerMgr.cpp index be5d006b..166fa41e 100644 --- a/src/world/ServerMgr.cpp +++ b/src/world/ServerMgr.cpp @@ -301,7 +301,7 @@ bool Sapphire::World::ServerMgr::createSession( uint32_t sessionId ) Logger::info( "[" + session_id_str + "] Creating new session" ); - std::shared_ptr< Session > newSession( new Session( sessionId ) ); + std::shared_ptr< Session > newSession( new Session( sessionId, framework() ) ); m_sessionMapById[ sessionId ] = newSession; if( !newSession->loadPlayer() ) diff --git a/src/world/Session.cpp b/src/world/Session.cpp index 3830b1d3..ee5ef5f7 100644 --- a/src/world/Session.cpp +++ b/src/world/Session.cpp @@ -12,11 +12,12 @@ namespace fs = std::experimental::filesystem; -Sapphire::World::Session::Session( uint32_t sessionId ) : +Sapphire::World::Session::Session( uint32_t sessionId, FrameworkPtr pFw ) : m_sessionId( sessionId ), m_lastDataTime( Util::getTimeSeconds() ), m_lastSqlTime( Util::getTimeSeconds() ), - m_isValid( false ) + m_isValid( false ), + m_pFw( pFw ) { } @@ -50,7 +51,7 @@ Sapphire::Network::GameConnectionPtr Sapphire::World::Session::getChatConnection bool Sapphire::World::Session::loadPlayer() { - m_pPlayer = Entity::make_Player(); + m_pPlayer = Entity::make_Player( m_pFw ); if( !m_pPlayer->load( m_sessionId, shared_from_this() ) ) { diff --git a/src/world/Session.h b/src/world/Session.h index 910ee59e..d51122be 100644 --- a/src/world/Session.h +++ b/src/world/Session.h @@ -11,7 +11,7 @@ namespace Sapphire::World class Session : public std::enable_shared_from_this< Session > { public: - Session( uint32_t sessionId ); + Session( uint32_t sessionId, FrameworkPtr pFw ); ~Session(); @@ -67,6 +67,8 @@ namespace Sapphire::World Network::GameConnectionPtr m_pZoneConnection; Network::GameConnectionPtr m_pChatConnection; + FrameworkPtr m_pFw; + }; }