1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 06:27:45 +00:00

Seems like everything works again... here is hoping

This commit is contained in:
Mordred 2018-12-29 00:53:52 +01:00
parent 199d7a6ec6
commit c345033aa5
43 changed files with 177 additions and 162 deletions

View file

@ -62,6 +62,8 @@ namespace Sapphire::Action
bool m_bInterrupt; bool m_bInterrupt;
FrameworkPtr m_pFw;
}; };
} }

View file

@ -22,16 +22,16 @@ using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
extern Sapphire::Framework g_fw;
Sapphire::Action::ActionCast::ActionCast() Sapphire::Action::ActionCast::ActionCast()
{ {
m_handleActionType = Common::HandleActionType::Event; m_handleActionType = Common::HandleActionType::Event;
} }
Sapphire::Action::ActionCast::ActionCast( Entity::CharaPtr pActor, Entity::CharaPtr pTarget, uint16_t actionId ) Sapphire::Action::ActionCast::ActionCast( Entity::CharaPtr pActor, Entity::CharaPtr pTarget,
uint16_t actionId, FrameworkPtr pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); m_pFw = pFw;
auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
m_startTime = 0; m_startTime = 0;
m_id = actionId; m_id = actionId;
m_handleActionType = HandleActionType::Spell; m_handleActionType = HandleActionType::Spell;
@ -70,7 +70,7 @@ void Sapphire::Action::ActionCast::onFinish()
if( !m_pSource ) if( !m_pSource )
return; return;
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
auto pPlayer = m_pSource->getAsPlayer(); auto pPlayer = m_pSource->getAsPlayer();
pPlayer->sendDebug( "onFinish()" ); pPlayer->sendDebug( "onFinish()" );

View file

@ -16,7 +16,7 @@ namespace Sapphire::Action
~ActionCast(); ~ActionCast();
ActionCast( Entity::CharaPtr pActor, Entity::CharaPtr pTarget, uint16_t actionId ); ActionCast( Entity::CharaPtr pActor, Entity::CharaPtr pTarget, uint16_t actionId, FrameworkPtr pFw );
void onStart() override; void onStart() override;

View file

@ -11,8 +11,6 @@
#include "EventAction.h" #include "EventAction.h"
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network; using namespace Sapphire::Network;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
@ -25,14 +23,15 @@ Sapphire::Action::EventAction::EventAction()
} }
Sapphire::Action::EventAction::EventAction( Entity::CharaPtr pActor, uint32_t eventId, uint16_t action, Sapphire::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,
FrameworkPtr pFw )
{ {
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_pFw = pFw;
auto pExdData = pFw->get< Data::ExdDataGenerated >();
m_castTime = pExdData->get< Sapphire::Data::EventAction >( action )->castTime * 1000; // TODO: Add security checks. m_castTime = pExdData->get< Sapphire::Data::EventAction >( action )->castTime * 1000; // TODO: Add security checks.
m_onActionFinishClb = finishRef; m_onActionFinishClb = finishRef;
m_onActionInterruptClb = interruptRef; m_onActionInterruptClb = interruptRef;

View file

@ -18,7 +18,7 @@ namespace Sapphire::Action
~EventAction(); ~EventAction();
EventAction( Entity::CharaPtr pActor, uint32_t eventId, uint16_t action, EventAction( Entity::CharaPtr pActor, uint32_t eventId, uint16_t action,
ActionCallback finishRef, ActionCallback interruptRef, uint64_t additional ); ActionCallback finishRef, ActionCallback interruptRef, uint64_t additional, FrameworkPtr pFw );
void onStart() override; void onStart() override;

View file

@ -35,11 +35,14 @@ using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
Sapphire::Entity::BNpc::BNpc() : Npc( ObjKind::BattleNpc ) Sapphire::Entity::BNpc::BNpc( FrameworkPtr pFw ) :
Npc( ObjKind::BattleNpc, pFw )
{ {
} }
Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, uint8_t level ) : Npc( ObjKind::BattleNpc ) Sapphire::Entity::BNpc::BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ,
uint8_t level, FrameworkPtr pFw ) :
Npc( ObjKind::BattleNpc, pFw )
{ {
m_modelChara = pTemplate->getModelChara(); m_modelChara = pTemplate->getModelChara();
m_displayFlags = pTemplate->getDisplayFlags(); m_displayFlags = pTemplate->getDisplayFlags();

View file

@ -22,8 +22,8 @@ namespace Sapphire::Entity
{ {
public: public:
BNpc(); BNpc( FrameworkPtr pFw );
BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, uint8_t level ); BNpc( BNpcTemplatePtr pTemplate, float posX, float posY, float posZ, uint8_t level, FrameworkPtr pFw );
virtual ~BNpc() override; virtual ~BNpc() override;

View file

@ -29,17 +29,16 @@
#include "Framework.h" #include "Framework.h"
#include "Common.h" #include "Common.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
Sapphire::Entity::Chara::Chara( ObjKind type ) : Sapphire::Entity::Chara::Chara( ObjKind type, FrameworkPtr pFw ) :
Actor( type ), Actor( type ),
m_pose( 0 ), m_pose( 0 ),
m_targetId( INVALID_GAME_OBJECT_ID ) m_targetId( INVALID_GAME_OBJECT_ID ),
m_pFw( pFw )
{ {
// initialize the free slot queue // initialize the free slot queue
for( uint8_t i = 0; i < MAX_STATUS_EFFECTS; i++ ) for( uint8_t i = 0; i < MAX_STATUS_EFFECTS; i++ )
@ -430,7 +429,7 @@ ChaiScript Skill Handler.
void Sapphire::Entity::Chara::handleScriptSkill( uint32_t type, uint16_t actionId, uint64_t param1, void Sapphire::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 >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
if( isPlayer() ) if( isPlayer() )
{ {
getAsPlayer()->sendDebug( std::to_string( target.getId() ) ); getAsPlayer()->sendDebug( std::to_string( target.getId() ) );
@ -510,7 +509,8 @@ void Sapphire::Entity::Chara::handleScriptSkill( uint32_t type, uint16_t actionI
case ActionEffectType::Heal: case ActionEffectType::Heal:
{ {
uint32_t calculatedHeal = Math::CalcBattle::calculateHealValue( getAsPlayer(), uint32_t calculatedHeal = Math::CalcBattle::calculateHealValue( getAsPlayer(),
static_cast< uint32_t >( param1 ) ); static_cast< uint32_t >( param1 ),
m_pFw );
Server::EffectEntry effectEntry{}; Server::EffectEntry effectEntry{};
effectEntry.value = calculatedHeal; effectEntry.value = calculatedHeal;
@ -594,7 +594,7 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf
/*! \param StatusEffectPtr to be applied to the actor */ /*! \param StatusEffectPtr to be applied to the actor */
void Sapphire::Entity::Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param ) void Sapphire::Entity::Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param )
{ {
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 ); auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000, m_pFw );
effect->setParam( param ); effect->setParam( param );
addStatusEffect( effect ); addStatusEffect( effect );
} }
@ -606,7 +606,7 @@ void Sapphire::Entity::Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_
if( hasStatusEffect( id ) ) if( hasStatusEffect( id ) )
return; return;
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 ); auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000, m_pFw );
effect->setParam( param ); effect->setParam( param );
addStatusEffect( effect ); addStatusEffect( effect );

View file

@ -109,9 +109,10 @@ namespace Sapphire::Entity
std::queue< uint8_t > m_statusEffectFreeSlotQueue; std::queue< uint8_t > m_statusEffectFreeSlotQueue;
std::vector< std::pair< uint8_t, uint32_t > > m_statusEffectList; std::vector< std::pair< uint8_t, uint32_t > > m_statusEffectList;
std::map< uint8_t, StatusEffect::StatusEffectPtr > m_statusEffectMap; std::map< uint8_t, StatusEffect::StatusEffectPtr > m_statusEffectMap;
FrameworkPtr m_pFw;
public: public:
Chara( Common::ObjKind type ); Chara( Common::ObjKind type, FrameworkPtr pFw );
virtual ~Chara() override; virtual ~Chara() override;

View file

@ -35,8 +35,8 @@ using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
Sapphire::Entity::Npc::Npc( ObjKind type ) : Sapphire::Entity::Npc::Npc( ObjKind type, FrameworkPtr pFw ) :
Chara( type ) Chara( type, pFw )
{ {
} }

View file

@ -21,7 +21,7 @@ namespace Sapphire::Entity
{ {
public: public:
Npc( Common::ObjKind type ); Npc( Common::ObjKind type, FrameworkPtr pFw );
virtual ~Npc() override; virtual ~Npc() override;

View file

@ -55,7 +55,7 @@ using InvSlotPairVec = std::vector< InvSlotPair >;
// player constructor // player constructor
Sapphire::Entity::Player::Player( FrameworkPtr pFw ) : Sapphire::Entity::Player::Player( FrameworkPtr pFw ) :
Chara( ObjKind::Player ), Chara( ObjKind::Player, pFw ),
m_lastWrite( 0 ), m_lastWrite( 0 ),
m_lastPing( 0 ), m_lastPing( 0 ),
m_bIsLogin( false ), m_bIsLogin( false ),
@ -75,8 +75,7 @@ Sapphire::Entity::Player::Player( FrameworkPtr pFw ) :
m_mount( 0 ), m_mount( 0 ),
m_emoteMode( 0 ), m_emoteMode( 0 ),
m_directorInitialized( false ), m_directorInitialized( false ),
m_onEnterEventDone( false ), m_onEnterEventDone( false )
m_pFw( pFw )
{ {
m_id = 0; m_id = 0;
m_currentStance = Stance::Passive; m_currentStance = Stance::Passive;
@ -279,9 +278,9 @@ void Sapphire::Entity::Player::calculateStats()
m_baseStats.healingPotMagic = paramGrowthInfo->baseSpeed; m_baseStats.healingPotMagic = paramGrowthInfo->baseSpeed;
m_baseStats.tenacity = paramGrowthInfo->baseSpeed; m_baseStats.tenacity = paramGrowthInfo->baseSpeed;
m_baseStats.max_mp = Math::CalcStats::calculateMaxMp( getAsPlayer() ); m_baseStats.max_mp = Math::CalcStats::calculateMaxMp( getAsPlayer(), m_pFw );
m_baseStats.max_hp = Math::CalcStats::calculateMaxHp( getAsPlayer() ); m_baseStats.max_hp = Math::CalcStats::calculateMaxHp( getAsPlayer(), m_pFw );
if( m_mp > m_baseStats.max_mp ) if( m_mp > m_baseStats.max_mp )
m_mp = m_baseStats.max_mp; m_mp = m_baseStats.max_mp;

View file

@ -1047,9 +1047,6 @@ namespace Sapphire::Entity
Util::SpawnIndexAllocator< uint8_t > m_objSpawnIndexAllocator; Util::SpawnIndexAllocator< uint8_t > m_objSpawnIndexAllocator;
Util::SpawnIndexAllocator< uint8_t > m_actorSpawnIndexAllocator; Util::SpawnIndexAllocator< uint8_t > m_actorSpawnIndexAllocator;
// todo: temporary store ptr to framework
FrameworkPtr m_pFw;
}; };
} }

View file

@ -285,7 +285,7 @@ void Sapphire::Entity::Player::eventActionStart( uint32_t eventId,
uint64_t additional ) uint64_t additional )
{ {
auto pEventAction = Action::make_EventAction( getAsChara(), eventId, action, auto pEventAction = Action::make_EventAction( getAsChara(), eventId, action,
finishCallback, interruptCallback, additional ); finishCallback, interruptCallback, additional, m_pFw );
setCurrentAction( pEventAction ); setCurrentAction( pEventAction );
auto pEvent = getEvent( eventId ); auto pEvent = getEvent( eventId );

View file

@ -43,7 +43,7 @@ void Sapphire::Entity::Player::initInventory()
{ {
auto setupContainer = [ this ]( InventoryType type, uint8_t maxSize, const std::string& tableName, auto setupContainer = [ this ]( InventoryType type, uint8_t maxSize, const std::string& tableName,
bool isMultiStorage, bool isPersistentStorage = true ) bool isMultiStorage, bool isPersistentStorage = true )
{ m_storageMap[ type ] = make_ItemContainer( type, maxSize, tableName, isMultiStorage, isPersistentStorage ); }; { m_storageMap[ type ] = make_ItemContainer( type, maxSize, tableName, isMultiStorage, m_pFw, isPersistentStorage ); };
// main bags // main bags
setupContainer( Bag0, 34, "charaiteminventory", true ); setupContainer( Bag0, 34, "charaiteminventory", true );

View file

@ -581,7 +581,8 @@ Sapphire::ItemPtr Sapphire::Entity::Player::createItem( uint32_t catalogId, uint
ItemPtr pItem = make_Item( itemMgr->getNextUId(), ItemPtr pItem = make_Item( itemMgr->getNextUId(),
catalogId, catalogId,
itemInfo->modelMain, itemInfo->modelMain,
itemInfo->modelSub ); itemInfo->modelSub,
m_pFw );
pItem->setStackSize( quantity ); pItem->setStackSize( quantity );

View file

@ -5,18 +5,17 @@
#include "Framework.h" #include "Framework.h"
#include "Item.h" #include "Item.h"
extern Sapphire::Framework g_fw; Sapphire::Item::Item( uint64_t uId, uint32_t catalogId, uint64_t model1, uint64_t model2, FrameworkPtr pFw, bool isHq ) :
Sapphire::Item::Item( uint64_t uId, uint32_t catalogId, uint64_t model1, uint64_t model2, bool isHq ) :
m_id( catalogId ), m_id( catalogId ),
m_uId( uId ), m_uId( uId ),
m_model1( model1 ), m_model1( model1 ),
m_model2( model2 ), m_model2( model2 ),
m_isHq( isHq ), m_isHq( isHq ),
m_stain( 0 ), m_stain( 0 ),
m_durability( 30000 ) m_durability( 30000 ),
m_pFw( pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
auto itemInfo = pExdData->get< Sapphire::Data::Item >( catalogId ); auto itemInfo = pExdData->get< Sapphire::Data::Item >( catalogId );
m_delayMs = itemInfo->delayms; m_delayMs = itemInfo->delayms;

View file

@ -2,6 +2,7 @@
#define _ITEM_H_ #define _ITEM_H_
#include <Common.h> #include <Common.h>
#include "ForwardsZone.h"
namespace Sapphire namespace Sapphire
{ {
@ -10,7 +11,7 @@ namespace Sapphire
{ {
public: public:
Item( uint64_t uId, uint32_t catalogId, uint64_t model1, uint64_t model2, bool isHq = false ); Item( uint64_t uId, uint32_t catalogId, uint64_t model1, uint64_t model2, FrameworkPtr pFw, bool isHq = false );
~Item() = default; ~Item() = default;
@ -88,6 +89,8 @@ namespace Sapphire
uint16_t m_durability; uint16_t m_durability;
uint16_t m_stain; uint16_t m_stain;
FrameworkPtr m_pFw;
}; };
} }

View file

@ -9,14 +9,13 @@
#include "Forwards.h" #include "Forwards.h"
#include "ItemContainer.h" #include "ItemContainer.h"
extern Sapphire::Framework g_fw;
Sapphire::ItemContainer::ItemContainer( uint16_t storageId, uint16_t maxSize, const std::string& tableName, Sapphire::ItemContainer::ItemContainer( uint16_t storageId, uint16_t maxSize, const std::string& tableName,
bool isMultiStorage, bool isPersistentStorage ) : bool isMultiStorage, FrameworkPtr pFw, bool isPersistentStorage ) :
m_id( storageId ), m_id( storageId ),
m_size( maxSize ), m_size( maxSize ),
m_tableName( tableName ), m_tableName( tableName ),
m_bMultiStorage( isMultiStorage ), m_bMultiStorage( isMultiStorage ),
m_pFw( pFw ),
m_isPersistentStorage( isPersistentStorage ) m_isPersistentStorage( isPersistentStorage )
{ {
@ -39,7 +38,7 @@ uint16_t Sapphire::ItemContainer::getEntryCount() const
void Sapphire::ItemContainer::removeItem( uint16_t slotId ) void Sapphire::ItemContainer::removeItem( uint16_t slotId )
{ {
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
ItemMap::iterator it = m_itemMap.find( slotId ); ItemMap::iterator it = m_itemMap.find( slotId );
if( it != m_itemMap.end() ) if( it != m_itemMap.end() )

View file

@ -15,7 +15,7 @@ namespace Sapphire
public: public:
ItemContainer( uint16_t storageId, uint16_t maxSize, const std::string& tableName, bool isMultiStorage, ItemContainer( uint16_t storageId, uint16_t maxSize, const std::string& tableName, bool isMultiStorage,
bool isPersistentStorage = true ); FrameworkPtr pFw, bool isPersistentStorage = true );
~ItemContainer(); ~ItemContainer();
@ -48,6 +48,7 @@ namespace Sapphire
uint16_t m_size; uint16_t m_size;
std::string m_tableName; std::string m_tableName;
bool m_bMultiStorage; bool m_bMultiStorage;
FrameworkPtr m_pFw;
bool m_isPersistentStorage; bool m_isPersistentStorage;
ItemMap m_itemMap; ItemMap m_itemMap;
Entity::PlayerPtr m_pOwner; Entity::PlayerPtr m_pOwner;

View file

@ -408,7 +408,8 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player&
sscanf( params.c_str(), "%d %d %hu", &id, &duration, &param ); sscanf( params.c_str(), "%d %d %hu", &id, &duration, &param );
auto effect = StatusEffect::make_StatusEffect( id, player.getAsPlayer(), player.getAsPlayer(), duration, 3000 ); auto effect = StatusEffect::make_StatusEffect( id, player.getAsPlayer(), player.getAsPlayer(),
duration, 3000, framework() );
effect->setParam( param ); effect->setParam( param );
player.addStatusEffect( effect ); player.addStatusEffect( effect );
@ -431,9 +432,10 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player&
player.sendNotice( "Template " + params + " not found in cache!" ); player.sendNotice( "Template " + params + " not found in cache!" );
auto pBNpc = std::make_shared< Entity::BNpc >( bNpcTemplate, auto pBNpc = std::make_shared< Entity::BNpc >( bNpcTemplate,
player.getPos().x, player.getPos().x,
player.getPos().y, player.getPos().y,
player.getPos().z, 1 ); player.getPos().z,
1, framework() );
auto playerZone = player.getCurrentZone(); auto playerZone = player.getCurrentZone();

View file

@ -139,6 +139,7 @@ Sapphire::ItemPtr Sapphire::World::Manager::ItemMgr::loadItem( uint64_t uId )
itemRes->getUInt( 1 ), itemRes->getUInt( 1 ),
itemInfo->modelMain, itemInfo->modelMain,
itemInfo->modelSub, itemInfo->modelSub,
framework(),
isHq ); isHq );
pItem->setStackSize( itemRes->getUInt( 2 ) ); pItem->setStackSize( itemRes->getUInt( 2 ) );

View file

@ -160,7 +160,7 @@ bool Sapphire::World::Manager::TerritoryMgr::createDefaultTerritories()
"\t" + ( isPrivateTerritory( territoryTypeId ) ? "PRIVATE" : "PUBLIC" ) + "\t" + ( isPrivateTerritory( territoryTypeId ) ? "PRIVATE" : "PUBLIC" ) +
"\t" + pPlaceName->name ); "\t" + pPlaceName->name );
auto pZone = make_Zone( territoryTypeId, guid, territoryInfo->name, pPlaceName->name ); auto pZone = make_Zone( territoryTypeId, guid, territoryInfo->name, pPlaceName->name, framework() );
pZone->init(); pZone->init();
InstanceIdToZonePtrMap instanceMap; InstanceIdToZonePtrMap instanceMap;
@ -204,7 +204,8 @@ bool Sapphire::World::Manager::TerritoryMgr::createHousingTerritories()
"\t" + pPlaceName->name + "\t" + pPlaceName->name +
"#" + std::to_string( wardNum ) ); "#" + std::to_string( wardNum ) );
auto pHousingZone = make_HousingZone( wardNum, territoryTypeId, guid, territoryInfo->name, pPlaceName->name ); auto pHousingZone = make_HousingZone( wardNum, territoryTypeId, guid, territoryInfo->name,
pPlaceName->name, framework() );
pHousingZone->init(); pHousingZone->init();
wardMaxNum = 18; wardMaxNum = 18;
@ -239,7 +240,7 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::createTerritoryInstanc
Logger::debug( Logger::debug(
"Starting instance for territory: " + std::to_string( territoryTypeId ) + " (" + pPlaceName->name + ")" ); "Starting instance for territory: " + std::to_string( territoryTypeId ) + " (" + pPlaceName->name + ")" );
auto pZone = make_Zone( territoryTypeId, getNextInstanceId(), pTeri->name, pPlaceName->name ); auto pZone = make_Zone( territoryTypeId, getNextInstanceId(), pTeri->name, pPlaceName->name, framework() );
pZone->init(); pZone->init();
m_instanceIdToZonePtrMap[ pZone->getGuId() ] = pZone; m_instanceIdToZonePtrMap[ pZone->getGuId() ] = pZone;
@ -274,7 +275,7 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::createInstanceContent(
" (" + pInstanceContent->name + ")" ); " (" + pInstanceContent->name + ")" );
auto pZone = make_InstanceContent( pInstanceContent, pContentFinderCondition->territoryType, getNextInstanceId(), auto pZone = make_InstanceContent( pInstanceContent, pContentFinderCondition->territoryType, getNextInstanceId(),
pTeri->name, pInstanceContent->name, instanceContentId ); pTeri->name, pInstanceContent->name, instanceContentId, framework() );
pZone->init(); pZone->init();
m_instanceContentToInstanceMap[ instanceContentId ][ pZone->getGuId() ] = pZone; m_instanceContentToInstanceMap[ instanceContentId ][ pZone->getGuId() ] = pZone;
@ -344,8 +345,9 @@ Sapphire::ZonePtr Sapphire::World::Manager::TerritoryMgr::findOrCreateHousingInt
if( !terriInfo ) if( !terriInfo )
return nullptr; return nullptr;
auto zone = World::Territory::Housing::make_HousingInteriorTerritory( landIdent, territoryTypeId, getNextInstanceId(), auto zone = World::Territory::Housing::make_HousingInteriorTerritory( landIdent, territoryTypeId,
terriInfo->name, house->getHouseName() ); getNextInstanceId(), terriInfo->name,
house->getHouseName(), framework() );
zone->init(); zone->init();

View file

@ -10,8 +10,6 @@
#include "CalcBattle.h" #include "CalcBattle.h"
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Math; using namespace Sapphire::Math;
using namespace Sapphire::Entity; using namespace Sapphire::Entity;
@ -31,9 +29,9 @@ using namespace Sapphire::Entity;
*/ */
uint32_t CalcBattle::calculateHealValue( PlayerPtr pPlayer, uint32_t potency ) uint32_t CalcBattle::calculateHealValue( PlayerPtr pPlayer, uint32_t potency, Sapphire::FrameworkPtr pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = pFw->get< Data::ExdDataGenerated >();
auto classInfo = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) ); auto classInfo = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( pPlayer->getLevel() ); auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( pPlayer->getLevel() );

View file

@ -10,7 +10,7 @@ namespace Sapphire::Math
class CalcBattle class CalcBattle
{ {
public: public:
static uint32_t calculateHealValue( Sapphire::Entity::PlayerPtr pPlayer, uint32_t potency ); static uint32_t calculateHealValue( Sapphire::Entity::PlayerPtr pPlayer, uint32_t potency, FrameworkPtr pFw );
}; };

View file

@ -13,8 +13,6 @@
using namespace Sapphire::Math; using namespace Sapphire::Math;
using namespace Sapphire::Entity; using namespace Sapphire::Entity;
extern Sapphire::Framework g_fw;
/* /*
Class used for battle-related formulas and calculations. Class used for battle-related formulas and calculations.
Big thanks to the Theoryjerks group! Big thanks to the Theoryjerks group!
@ -57,9 +55,9 @@ float CalcStats::calculateBaseStat( PlayerPtr pPlayer )
// Leggerless' HP Formula // Leggerless' HP Formula
// ROUNDDOWN(JobModHP * (BaseHP / 100)) + ROUNDDOWN(VitHPMod / 100 * (VIT - BaseDET)) // ROUNDDOWN(JobModHP * (BaseHP / 100)) + ROUNDDOWN(VitHPMod / 100 * (VIT - BaseDET))
uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer ) uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = pFw->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
@ -96,9 +94,9 @@ uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer )
// Leggerless' MP Formula // Leggerless' MP Formula
// ROUNDDOWN(((ROUNDDOWN(((PIE - BaseDET) * PieMPMod/100),0) + BaseMP) * JobModMP / 100),0) // ROUNDDOWN(((ROUNDDOWN(((PIE - BaseDET) * PieMPMod/100),0) + BaseMP) * JobModMP / 100),0)
uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer ) uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = pFw->get< Data::ExdDataGenerated >();
auto classInfo = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) ); auto classInfo = pExdData->get< Sapphire::Data::ClassJob >( static_cast< uint8_t >( pPlayer->getClass() ) );
auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( pPlayer->getLevel() ); auto paramGrowthInfo = pExdData->get< Sapphire::Data::ParamGrow >( pPlayer->getLevel() );

View file

@ -12,9 +12,9 @@ namespace Sapphire::Math
public: public:
static float calculateBaseStat( Sapphire::Entity::PlayerPtr pPlayer ); static float calculateBaseStat( Sapphire::Entity::PlayerPtr pPlayer );
static uint32_t calculateMaxMp( Sapphire::Entity::PlayerPtr pPlayer ); static uint32_t calculateMaxMp( Sapphire::Entity::PlayerPtr pPlayer, FrameworkPtr pFw );
static uint32_t calculateMaxHp( Sapphire::Entity::PlayerPtr pPlayer ); static uint32_t calculateMaxHp( Sapphire::Entity::PlayerPtr pPlayer, FrameworkPtr pFw );
private: private:

View file

@ -94,7 +94,7 @@ void Sapphire::Network::GameConnection::actionHandler( FrameworkPtr pFw,
} }
else else
{ {
auto pActionCast = Action::make_ActionCast( player.getAsPlayer(), targetActor->getAsChara(), action ); auto pActionCast = Action::make_ActionCast( player.getAsPlayer(), targetActor->getAsChara(), action, m_pFw );
player.setCurrentAction( pActionCast ); player.setCurrentAction( pActionCast );
player.sendDebug( "setCurrentAction()" ); player.sendDebug( "setCurrentAction()" );
player.getCurrentAction()->onStart(); player.getCurrentAction()->onStart();

View file

@ -173,6 +173,7 @@ void Sapphire::World::ServerMgr::run( int32_t argc, char* argv[] )
framework()->set< Manager::PlayerMgr >( pPlayerMgr ); framework()->set< Manager::PlayerMgr >( pPlayerMgr );
framework()->set< Manager::ShopMgr >( pShopMgr ); framework()->set< Manager::ShopMgr >( pShopMgr );
framework()->set< Manager::InventoryMgr >( pInventoryMgr ); framework()->set< Manager::InventoryMgr >( pInventoryMgr );
framework()->set< Manager::EventMgr >( pEventMgr );
framework()->set< Manager::ItemMgr >( pItemMgr ); framework()->set< Manager::ItemMgr >( pItemMgr );
Logger::info( "World server running on " + m_ip + ":" + std::to_string( m_port ) ); Logger::info( "World server running on " + m_ip + ":" + std::to_string( m_port ) );

View file

@ -13,19 +13,22 @@
#include "StatusEffect.h" #include "StatusEffect.h"
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor, Sapphire::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
uint32_t duration, uint32_t tickRate ) uint32_t duration, uint32_t tickRate, FrameworkPtr pFw ) :
: m_id( id ),
m_id( id ), m_sourceActor( sourceActor ), m_targetActor( targetActor ), m_duration( duration ), m_startTime( 0 ), m_sourceActor( sourceActor ),
m_tickRate( tickRate ), m_lastTick( 0 ) m_targetActor( targetActor ),
m_duration( duration ),
m_startTime( 0 ),
m_tickRate( tickRate ),
m_lastTick( 0 ),
m_pFw( pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
auto entry = pExdData->get< Sapphire::Data::Status >( id ); auto entry = pExdData->get< Sapphire::Data::Status >( id );
m_name = entry->name; m_name = entry->name;
@ -59,7 +62,7 @@ std::pair< uint8_t, uint32_t > Sapphire::StatusEffect::StatusEffect::getTickEffe
void Sapphire::StatusEffect::StatusEffect::onTick() void Sapphire::StatusEffect::StatusEffect::onTick()
{ {
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
m_lastTick = Util::getTimeMs(); m_lastTick = Util::getTimeMs();
pScriptMgr->onStatusTick( m_targetActor, *this ); pScriptMgr->onStatusTick( m_targetActor, *this );
} }
@ -82,7 +85,7 @@ uint16_t Sapphire::StatusEffect::StatusEffect::getParam() const
void Sapphire::StatusEffect::StatusEffect::applyStatus() void Sapphire::StatusEffect::StatusEffect::applyStatus()
{ {
m_startTime = Util::getTimeMs(); m_startTime = Util::getTimeMs();
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
// this is only right when an action is being used by the player // this is only right when an action is being used by the player
// else you probably need to use an actorcontrol // else you probably need to use an actorcontrol
@ -107,7 +110,7 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus()
void Sapphire::StatusEffect::StatusEffect::removeStatus() void Sapphire::StatusEffect::StatusEffect::removeStatus()
{ {
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
pScriptMgr->onStatusTimeOut( m_targetActor, m_id ); pScriptMgr->onStatusTimeOut( m_targetActor, m_id );
} }

View file

@ -11,7 +11,7 @@ class StatusEffect
{ {
public: public:
StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor, StatusEffect( uint32_t id, Entity::CharaPtr sourceActor, Entity::CharaPtr targetActor,
uint32_t duration, uint32_t tickRate ); uint32_t duration, uint32_t tickRate, FrameworkPtr pFw );
~StatusEffect(); ~StatusEffect();
@ -58,6 +58,7 @@ private:
uint16_t m_param; uint16_t m_param;
std::string m_name; std::string m_name;
std::pair< uint8_t, uint32_t > m_currTickEffect; std::pair< uint8_t, uint32_t > m_currTickEffect;
FrameworkPtr m_pFw;
}; };

View file

@ -11,14 +11,13 @@
#include <unordered_map> #include <unordered_map>
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw; Sapphire::House::House( uint32_t houseId, uint32_t landSetId, Common::LandIdent ident, FrameworkPtr pFw ) :
Sapphire::House::House( uint32_t houseId, uint32_t landSetId, Common::LandIdent ident ) :
m_houseId( houseId ), m_houseId( houseId ),
m_landSetId( landSetId ), m_landSetId( landSetId ),
m_landIdent( ident ) m_landIdent( ident ),
m_pFw( pFw )
{ {
auto pDB = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDB = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
// todo: convert to prepared statement // todo: convert to prepared statement
auto res = pDB->query( "SELECT * FROM house WHERE HouseId = " + std::to_string( houseId ) ); auto res = pDB->query( "SELECT * FROM house WHERE HouseId = " + std::to_string( houseId ) );
@ -67,7 +66,7 @@ Sapphire::House::~House()
void Sapphire::House::updateHouseDb() void Sapphire::House::updateHouseDb()
{ {
auto pDB = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDB = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
// BuildTime = 1, Aetheryte = 2, Comment = 3, HouseName = 4, Endorsements = 5, // BuildTime = 1, Aetheryte = 2, Comment = 3, HouseName = 4, Endorsements = 5,
// HousePartModels = 6, HousePartColours = 7, HouseId = 8 // HousePartModels = 6, HousePartColours = 7, HouseId = 8

View file

@ -12,7 +12,7 @@ namespace Sapphire
class House class House
{ {
public: public:
House( uint32_t houseId, uint32_t landSetId, Common::LandIdent ident ); House( uint32_t houseId, uint32_t landSetId, Common::LandIdent ident, FrameworkPtr pFw );
virtual ~House(); virtual ~House();
using HousePart = std::pair< uint32_t, uint8_t >; using HousePart = std::pair< uint32_t, uint8_t >;
@ -53,6 +53,7 @@ namespace Sapphire
std::string m_estateMessage; std::string m_estateMessage;
std::string m_houseName; std::string m_houseName;
FrameworkPtr m_pFw;
}; };
} }

View file

@ -18,8 +18,6 @@
#include "HousingInteriorTerritory.h" #include "HousingInteriorTerritory.h"
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
@ -31,8 +29,9 @@ using namespace Sapphire::World::Territory;
Housing::HousingInteriorTerritory::HousingInteriorTerritory( Common::LandIdent ident, uint16_t territoryTypeId, Housing::HousingInteriorTerritory::HousingInteriorTerritory( Common::LandIdent ident, uint16_t territoryTypeId,
uint32_t guId, uint32_t guId,
const std::string& internalName, const std::string& internalName,
const std::string& contentName ) : const std::string& contentName,
Zone( territoryTypeId, guId, internalName, contentName ), FrameworkPtr pFw ) :
Zone( territoryTypeId, guId, internalName, contentName, pFw ),
m_landIdent( ident ) m_landIdent( ident )
{ {
m_lastActivityTime = static_cast< uint32_t >( Util::getTimeSeconds() ); m_lastActivityTime = static_cast< uint32_t >( Util::getTimeSeconds() );
@ -50,7 +49,7 @@ bool Housing::HousingInteriorTerritory::init()
void Housing::HousingInteriorTerritory::onPlayerZoneIn( Entity::Player& player ) void Housing::HousingInteriorTerritory::onPlayerZoneIn( Entity::Player& player )
{ {
auto pHousingMgr = g_fw.get< HousingMgr >(); auto pHousingMgr = m_pFw->get< HousingMgr >();
Logger::debug( Logger::debug(
"HousingInteriorTerritory::onPlayerZoneIn: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryTypeId() ) + "HousingInteriorTerritory::onPlayerZoneIn: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryTypeId() ) +
", Entity#" + std::to_string( player.getId() ) ); ", Entity#" + std::to_string( player.getId() ) );

View file

@ -9,7 +9,8 @@ namespace Sapphire::World::Territory::Housing
HousingInteriorTerritory( Common::LandIdent ident, uint16_t territoryTypeId, HousingInteriorTerritory( Common::LandIdent ident, uint16_t territoryTypeId,
uint32_t guId, uint32_t guId,
const std::string& internalName, const std::string& internalName,
const std::string& contentName ); const std::string& contentName,
FrameworkPtr pFw );
virtual ~HousingInteriorTerritory(); virtual ~HousingInteriorTerritory();

View file

@ -18,22 +18,22 @@
#include "Manager/HousingMgr.h" #include "Manager/HousingMgr.h"
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
Sapphire::HousingZone::HousingZone( uint8_t wardNum, Sapphire::HousingZone::HousingZone( uint8_t wardNum,
uint16_t territoryTypeId, uint16_t territoryTypeId,
uint32_t guId, uint32_t guId,
const std::string& internalName, const std::string& internalName,
const std::string& contentName ) : const std::string& contentName,
Zone( territoryTypeId, guId, internalName, contentName ), FrameworkPtr pFw ) :
Zone( territoryTypeId, guId, internalName, contentName, pFw ),
m_wardNum( wardNum ), m_wardNum( wardNum ),
m_territoryTypeId( territoryTypeId ), m_territoryTypeId( territoryTypeId ),
m_landSetId( ( static_cast< uint32_t >( territoryTypeId ) << 16 ) | wardNum ) m_landSetId( ( static_cast< uint32_t >( territoryTypeId ) << 16 ) | wardNum ),
m_pFw( pFw )
{ {
} }
@ -41,7 +41,7 @@ Sapphire::HousingZone::HousingZone( uint8_t wardNum,
bool Sapphire::HousingZone::init() bool Sapphire::HousingZone::init()
{ {
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
{ {
auto res = pDb->query( "SELECT * FROM landset WHERE landsetid = " + std::to_string( m_landSetId ) ); auto res = pDb->query( "SELECT * FROM landset WHERE landsetid = " + std::to_string( m_landSetId ) );
if( !res->next() ) if( !res->next() )
@ -50,7 +50,6 @@ bool Sapphire::HousingZone::init()
} }
} }
int housingIndex; int housingIndex;
if( m_territoryTypeId == 339 ) if( m_territoryTypeId == 339 )
housingIndex = 0; housingIndex = 0;
@ -61,7 +60,7 @@ bool Sapphire::HousingZone::init()
else if( m_territoryTypeId == 641 ) else if( m_territoryTypeId == 641 )
housingIndex = 3; housingIndex = 3;
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
auto info = pExdData->get< Sapphire::Data::HousingLandSet >( housingIndex ); auto info = pExdData->get< Sapphire::Data::HousingLandSet >( housingIndex );
auto stmt = pDb->getPreparedStatement( Db::LANDSET_SEL ); auto stmt = pDb->getPreparedStatement( Db::LANDSET_SEL );
@ -91,7 +90,7 @@ bool Sapphire::HousingZone::init()
// spawn land // spawn land
for( auto& init : landInit ) for( auto& init : landInit )
{ {
auto land = make_Land( m_territoryTypeId, getWardNum(), init.m_landId, m_landSetId, info ); auto land = make_Land( m_territoryTypeId, getWardNum(), init.m_landId, m_landSetId, info, m_pFw );
land->init( init.m_type, init.m_size, init.m_status, init.m_currentPrice, init.m_ownerId, init.m_houseId ); land->init( init.m_type, init.m_size, init.m_status, init.m_currentPrice, init.m_ownerId, init.m_houseId );
m_landPtrMap[ init.m_landId ] = land; m_landPtrMap[ init.m_landId ] = land;

View file

@ -29,7 +29,8 @@ namespace Sapphire
uint16_t territoryTypeId, uint16_t territoryTypeId,
uint32_t guId, uint32_t guId,
const std::string& internalName, const std::string& internalName,
const std::string& contentName ); const std::string& contentName,
FrameworkPtr pFw );
virtual ~HousingZone(); virtual ~HousingZone();
@ -70,6 +71,7 @@ namespace Sapphire
uint8_t m_wardNum; uint8_t m_wardNum;
uint32_t m_landSetId; uint32_t m_landSetId;
uint32_t m_territoryTypeId; uint32_t m_territoryTypeId;
FrameworkPtr m_pFw;
}; };
} }

View file

@ -22,21 +22,19 @@
#include "InstanceContent.h" #include "InstanceContent.h"
#include "Framework.h" #include "Framework.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::Server; using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
Sapphire::InstanceContent::InstanceContent( std::shared_ptr< Sapphire::Data::InstanceContent > pInstanceConfiguration, Sapphire::InstanceContent::InstanceContent( std::shared_ptr< Sapphire::Data::InstanceContent > pInstanceConfiguration,
uint16_t territoryType, uint16_t territoryType,
uint32_t guId, uint32_t guId,
const std::string& internalName, const std::string& internalName,
const std::string& contentName, const std::string& contentName,
uint32_t instanceContentId ) uint32_t instanceContentId,
: FrameworkPtr pFw ) :
Zone( static_cast< uint16_t >( territoryType ), guId, internalName, contentName ), Zone( static_cast< uint16_t >( territoryType ), guId, internalName, contentName, pFw ),
Director( Event::Director::InstanceContent, instanceContentId ), Director( Event::Director::InstanceContent, instanceContentId ),
m_instanceConfiguration( pInstanceConfiguration ), m_instanceConfiguration( pInstanceConfiguration ),
m_instanceContentId( instanceContentId ), m_instanceContentId( instanceContentId ),
@ -50,7 +48,7 @@ Sapphire::InstanceContent::InstanceContent( std::shared_ptr< Sapphire::Data::Ins
bool Sapphire::InstanceContent::init() bool Sapphire::InstanceContent::init()
{ {
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
pScriptMgr->onInstanceInit( getAsInstanceContent() ); pScriptMgr->onInstanceInit( getAsInstanceContent() );
return true; return true;
@ -160,7 +158,7 @@ void Sapphire::InstanceContent::onUpdate( uint32_t currTime )
break; break;
} }
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
pScriptMgr->onInstanceUpdate( getAsInstanceContent(), currTime ); pScriptMgr->onInstanceUpdate( getAsInstanceContent(), currTime );
} }
@ -313,7 +311,7 @@ void Sapphire::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object )
if( object->getObjectId() == 2000182 ) // start if( object->getObjectId() == 2000182 ) // start
m_pEntranceEObj = object; m_pEntranceEObj = object;
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
auto objData = pExdData->get< Sapphire::Data::EObj >( object->getObjectId() ); auto objData = pExdData->get< Sapphire::Data::EObj >( object->getObjectId() );
if( objData ) if( objData )
// todo: data should be renamed to eventId // todo: data should be renamed to eventId
@ -386,7 +384,7 @@ void Sapphire::InstanceContent::onTalk( Sapphire::Entity::Player& player, uint32
void void
Sapphire::InstanceContent::onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) Sapphire::InstanceContent::onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 )
{ {
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
pScriptMgr->onInstanceEnterTerritory( getAsInstanceContent(), player, eventId, param1, param2 ); pScriptMgr->onInstanceEnterTerritory( getAsInstanceContent(), player, eventId, param1, param2 );
if( !hasPlayerPreviouslySpawned( player ) ) if( !hasPlayerPreviouslySpawned( player ) )

View file

@ -25,7 +25,8 @@ public:
uint32_t guId, uint32_t guId,
const std::string& internalName, const std::string& internalName,
const std::string& contentName, const std::string& contentName,
uint32_t instanceContentId ); uint32_t instanceContentId,
FrameworkPtr pFw );
virtual ~InstanceContent(); virtual ~InstanceContent();

View file

@ -24,12 +24,10 @@
#include "Framework.h" #include "Framework.h"
#include "House.h" #include "House.h"
extern Sapphire::Framework g_fw;
using namespace Sapphire::Common; using namespace Sapphire::Common;
Sapphire::Land::Land( uint16_t territoryTypeId, uint8_t wardNum, uint8_t landId, uint32_t landSetId, Sapphire::Land::Land( uint16_t territoryTypeId, uint8_t wardNum, uint8_t landId, uint32_t landSetId,
Sapphire::Data::HousingLandSetPtr info ) : Sapphire::Data::HousingLandSetPtr info, FrameworkPtr pFw ) :
m_currentPrice( 0 ), m_currentPrice( 0 ),
m_minPrice( 0 ), m_minPrice( 0 ),
m_nextDrop( static_cast< uint32_t >( Util::getTimeSeconds() ) + 21600 ), m_nextDrop( static_cast< uint32_t >( Util::getTimeSeconds() ) + 21600 ),
@ -40,7 +38,8 @@ Sapphire::Land::Land( uint16_t territoryTypeId, uint8_t wardNum, uint8_t landId,
m_fcIcon( 0 ), m_fcIcon( 0 ),
m_fcIconColor( 0 ), m_fcIconColor( 0 ),
m_fcId( 0 ), m_fcId( 0 ),
m_iconAddIcon( 0 ) m_iconAddIcon( 0 ),
m_pFw( pFw )
{ {
memset( &m_tag, 0x00, 3 ); memset( &m_tag, 0x00, 3 );
@ -55,7 +54,8 @@ Sapphire::Land::Land( uint16_t territoryTypeId, uint8_t wardNum, uint8_t landId,
Sapphire::Land::~Land() = default; Sapphire::Land::~Land() = default;
void Sapphire::Land::init( Common::LandType type, uint8_t size, uint8_t state, uint32_t currentPrice, uint64_t ownerId, uint64_t houseId ) void Sapphire::Land::init( Common::LandType type, uint8_t size, uint8_t state, uint32_t currentPrice,
uint64_t ownerId, uint64_t houseId )
{ {
m_type = type; m_type = type;
m_size = size; m_size = size;
@ -65,9 +65,9 @@ void Sapphire::Land::init( Common::LandType type, uint8_t size, uint8_t state, u
// fetch the house if we have one for this land // fetch the house if we have one for this land
if( houseId > 0 ) if( houseId > 0 )
m_pHouse = make_House( houseId, m_landSetId, getLandIdent() ); m_pHouse = make_House( houseId, m_landSetId, getLandIdent(), m_pFw );
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
auto info = pExdData->get< Sapphire::Data::HousingMapMarkerInfo >( m_landIdent.territoryTypeId, m_landIdent.landId ); auto info = pExdData->get< Sapphire::Data::HousingMapMarkerInfo >( m_landIdent.territoryTypeId, m_landIdent.landId );
if( info ) if( info )
{ {
@ -97,7 +97,7 @@ void Sapphire::Land::init( Common::LandType type, uint8_t size, uint8_t state, u
// init item containers // init item containers
auto setupContainer = [ this ]( InventoryType type, uint16_t maxSize ) auto setupContainer = [ this ]( InventoryType type, uint16_t maxSize )
{ {
m_landInventoryMap[ type ] = make_ItemContainer( type, maxSize, "houseiteminventory", true, true ); m_landInventoryMap[ type ] = make_ItemContainer( type, maxSize, "houseiteminventory", true, m_pFw, true );
}; };
setupContainer( InventoryType::HousingOutdoorAppearance, 8 ); setupContainer( InventoryType::HousingOutdoorAppearance, 8 );
@ -122,8 +122,8 @@ void Sapphire::Land::loadItemContainerContents()
auto ident = *reinterpret_cast< uint64_t* >( &m_landIdent ); auto ident = *reinterpret_cast< uint64_t* >( &m_landIdent );
Logger::debug( "Loading housing inventory for ident: " + std::to_string( ident ) ); Logger::debug( "Loading housing inventory for ident: " + std::to_string( ident ) );
auto pDB = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDB = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pItemMgr = g_fw.get< World::Manager::ItemMgr >(); auto pItemMgr = m_pFw->get< World::Manager::ItemMgr >();
auto stmt = pDB->getPreparedStatement( Db::LAND_INV_SEL_HOUSE ); auto stmt = pDB->getPreparedStatement( Db::LAND_INV_SEL_HOUSE );
stmt->setUInt64( 1, ident ); stmt->setUInt64( 1, ident );
@ -159,7 +159,7 @@ void Sapphire::Land::loadItemContainerContents()
uint32_t Sapphire::Land::convertItemIdToHousingItemId( uint32_t itemId ) uint32_t Sapphire::Land::convertItemIdToHousingItemId( uint32_t itemId )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
auto info = pExdData->get< Sapphire::Data::Item >( itemId ); auto info = pExdData->get< Sapphire::Data::Item >( itemId );
return info->additionalData; return info->additionalData;
} }
@ -297,15 +297,15 @@ void Sapphire::Land::updateLandDb()
houseId = getHouse()->getHouseId(); houseId = getHouse()->getHouseId();
// todo: change to prepared statement // todo: change to prepared statement
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
pDb->directExecute( "UPDATE land SET status = " + std::to_string( m_state ) pDb->directExecute( "UPDATE land SET status = " + std::to_string( m_state )
+ ", LandPrice = " + std::to_string( getCurrentPrice() ) + ", LandPrice = " + std::to_string( getCurrentPrice() )
+ ", UpdateTime = " + std::to_string( getDevaluationTime() ) + ", UpdateTime = " + std::to_string( getDevaluationTime() )
+ ", OwnerId = " + std::to_string( getOwnerId() ) + ", OwnerId = " + std::to_string( getOwnerId() )
+ ", HouseId = " + std::to_string( houseId ) + ", HouseId = " + std::to_string( houseId )
+ ", Type = " + std::to_string( static_cast< uint32_t >( m_type ) ) //TODO: add house id + ", Type = " + std::to_string( static_cast< uint32_t >( m_type ) ) //TODO: add house id
+ " WHERE LandSetId = " + std::to_string( m_landSetId ) + " WHERE LandSetId = " + std::to_string( m_landSetId )
+ " AND LandId = " + std::to_string( m_landIdent.landId ) + ";" ); + " AND LandId = " + std::to_string( m_landIdent.landId ) + ";" );
if( auto house = getHouse() ) if( auto house = getHouse() )
house->updateHouseDb(); house->updateHouseDb();
@ -326,7 +326,7 @@ void Sapphire::Land::update( uint32_t currTime )
uint32_t Sapphire::Land::getNextHouseId() uint32_t Sapphire::Land::getNextHouseId()
{ {
auto pDb = g_fw.get< Db::DbWorkerPool< Db::ZoneDbConnection > >(); auto pDb = m_pFw->get< Db::DbWorkerPool< Db::ZoneDbConnection > >();
auto pQR = pDb->query( "SELECT MAX( HouseId ) FROM house" ); auto pQR = pDb->query( "SELECT MAX( HouseId ) FROM house" );
if( !pQR->next() ) if( !pQR->next() )
@ -339,7 +339,7 @@ bool Sapphire::Land::setPreset( uint32_t itemId )
{ {
auto housingItemId = convertItemIdToHousingItemId( itemId ); auto housingItemId = convertItemIdToHousingItemId( itemId );
auto exdData = g_fw.get< Sapphire::Data::ExdDataGenerated >(); auto exdData = m_pFw->get< Sapphire::Data::ExdDataGenerated >();
if( !exdData ) if( !exdData )
return false; return false;
@ -351,7 +351,7 @@ bool Sapphire::Land::setPreset( uint32_t itemId )
{ {
// todo: i guess we'd create a house here? // todo: i guess we'd create a house here?
auto newId = getNextHouseId(); auto newId = getNextHouseId();
m_pHouse = make_House( newId, getLandSetId(), getLandIdent() ); m_pHouse = make_House( newId, getLandSetId(), getLandIdent(), m_pFw );
} }

View file

@ -15,7 +15,8 @@ namespace Sapphire
{ {
public: public:
Land( uint16_t zoneId, uint8_t wardNum, uint8_t landId, uint32_t landSetId, Sapphire::Data::HousingLandSetPtr info ); Land( uint16_t zoneId, uint8_t wardNum, uint8_t landId, uint32_t landSetId,
Sapphire::Data::HousingLandSetPtr info, FrameworkPtr pFw );
virtual ~Land(); virtual ~Land();
void init( Common::LandType type, uint8_t size, uint8_t state, uint32_t currentPrice, uint64_t ownerId, uint64_t houseId ); void init( Common::LandType type, uint8_t size, uint8_t state, uint32_t currentPrice, uint64_t ownerId, uint64_t houseId );
@ -100,6 +101,8 @@ namespace Sapphire
//information //information
char fcTag[7]; char fcTag[7];
uint8_t m_tag[3]; uint8_t m_tag[3];
FrameworkPtr m_pFw;
}; };
} }

View file

@ -42,8 +42,6 @@ using namespace Sapphire::Network::Packets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
extern Sapphire::Framework g_fw;
/** /**
* \brief * \brief
*/ */
@ -58,11 +56,13 @@ Sapphire::Zone::Zone() :
} }
Sapphire::Zone::Zone( uint16_t territoryTypeId, uint32_t guId, Sapphire::Zone::Zone( uint16_t territoryTypeId, uint32_t guId,
const std::string& internalName, const std::string& placeName ) : const std::string& internalName, const std::string& placeName,
FrameworkPtr pFw ) :
m_currentWeather( Weather::FairSkies ), m_currentWeather( Weather::FairSkies ),
m_nextEObjId( 0x400D0000 ) m_nextEObjId( 0x400D0000 ),
m_pFw( pFw )
{ {
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
m_guId = guId; m_guId = guId;
m_territoryTypeId = territoryTypeId; m_territoryTypeId = territoryTypeId;
@ -83,7 +83,7 @@ void Sapphire::Zone::loadWeatherRates()
if( !m_territoryTypeInfo ) if( !m_territoryTypeInfo )
return; return;
auto pExdData = g_fw.get< Data::ExdDataGenerated >(); auto pExdData = m_pFw->get< Data::ExdDataGenerated >();
uint8_t weatherRateId = m_territoryTypeInfo->weatherRate > pExdData->getWeatherRateIdList().size() ? uint8_t weatherRateId = m_territoryTypeInfo->weatherRate > pExdData->getWeatherRateIdList().size() ?
uint8_t{ 0 } : m_territoryTypeInfo->weatherRate; uint8_t{ 0 } : m_territoryTypeInfo->weatherRate;
@ -109,7 +109,7 @@ Sapphire::Zone::~Zone()
bool Sapphire::Zone::init() bool Sapphire::Zone::init()
{ {
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >();
if( pScriptMgr->onZoneInit( shared_from_this() ) ) if( pScriptMgr->onZoneInit( shared_from_this() ) )
{ {
@ -223,7 +223,7 @@ void Sapphire::Zone::pushActor( Entity::ActorPtr pActor )
{ {
auto pPlayer = pActor->getAsPlayer(); auto pPlayer = pActor->getAsPlayer();
auto pServerZone = g_fw.get< World::ServerMgr >(); auto pServerZone = m_pFw->get< World::ServerMgr >();
auto pSession = pServerZone->getSession( pPlayer->getId() ); auto pSession = pServerZone->getSession( pPlayer->getId() );
if( pSession ) if( pSession )
m_sessionSet.insert( pSession ); m_sessionSet.insert( pSession );
@ -281,11 +281,11 @@ void Sapphire::Zone::removeActor( Entity::ActorPtr pActor )
void Sapphire::Zone::queuePacketForRange( Entity::Player& sourcePlayer, uint32_t range, void Sapphire::Zone::queuePacketForRange( Entity::Player& sourcePlayer, uint32_t range,
Network::Packets::FFXIVPacketBasePtr pPacketEntry ) Network::Packets::FFXIVPacketBasePtr pPacketEntry )
{ {
auto pTeriMgr = g_fw.get< TerritoryMgr >(); auto pTeriMgr = m_pFw->get< TerritoryMgr >();
if( pTeriMgr->isPrivateTerritory( getTerritoryTypeId() ) ) if( pTeriMgr->isPrivateTerritory( getTerritoryTypeId() ) )
return; return;
auto pServerZone = g_fw.get< World::ServerMgr >(); auto pServerZone = m_pFw->get< World::ServerMgr >();
for( auto entry : m_playerMap ) for( auto entry : m_playerMap )
{ {
auto player = entry.second; auto player = entry.second;
@ -307,11 +307,11 @@ void Sapphire::Zone::queuePacketForZone( Entity::Player& sourcePlayer,
Network::Packets::FFXIVPacketBasePtr pPacketEntry, Network::Packets::FFXIVPacketBasePtr pPacketEntry,
bool forSelf ) bool forSelf )
{ {
auto pTeriMgr = g_fw.get< TerritoryMgr >(); auto pTeriMgr = m_pFw->get< TerritoryMgr >();
if( pTeriMgr->isPrivateTerritory( getTerritoryTypeId() ) ) if( pTeriMgr->isPrivateTerritory( getTerritoryTypeId() ) )
return; return;
auto pServerZone = g_fw.get< World::ServerMgr >(); auto pServerZone = m_pFw->get< World::ServerMgr >();
for( auto entry : m_playerMap ) for( auto entry : m_playerMap )
{ {
auto player = entry.second; auto player = entry.second;
@ -627,7 +627,7 @@ void Sapphire::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
if( pCell == nullptr ) if( pCell == nullptr )
return; return;
auto pTeriMgr = g_fw.get< TerritoryMgr >(); auto pTeriMgr = m_pFw->get< TerritoryMgr >();
// TODO: make sure gms can overwrite this. Potentially temporary solution // TODO: make sure gms can overwrite this. Potentially temporary solution
if( pTeriMgr->isPrivateTerritory( getTerritoryTypeId() ) ) if( pTeriMgr->isPrivateTerritory( getTerritoryTypeId() ) )
return; return;

View file

@ -57,11 +57,13 @@ namespace Sapphire
std::map< uint8_t, int32_t > m_weatherRateMap; std::map< uint8_t, int32_t > m_weatherRateMap;
uint32_t m_nextEObjId; uint32_t m_nextEObjId;
FrameworkPtr m_pFw;
public: public:
Zone(); Zone();
Zone( uint16_t territoryTypeId, uint32_t guId, const std::string& internalName, const std::string& placeName ); Zone( uint16_t territoryTypeId, uint32_t guId, const std::string& internalName,
const std::string& placeName, FrameworkPtr pFw );
virtual ~Zone(); virtual ~Zone();