mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-05 10:17:46 +00:00
More framework changes, linker still unhappy
This commit is contained in:
parent
83cb17610c
commit
250b1aef79
15 changed files with 661 additions and 614 deletions
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
#include "Aethernet.cpp"
|
#include "Aethernet.cpp"
|
||||||
#include "Aetheryte.cpp"
|
#include "Aetheryte.cpp"
|
||||||
#include "CmnDefCutSceneReplay.cpp"
|
|
||||||
#include "CmnDefInnBed.cpp"
|
|
||||||
#include "CmnDefLinkShell.cpp"
|
|
||||||
#include "HouFurOrchestrion.cpp"
|
#include "HouFurOrchestrion.cpp"
|
||||||
|
#include "CmnDefInnBed.cpp"
|
||||||
|
#include "CmnDefCutSceneReplay.cpp"
|
||||||
|
#include "CmnDefLinkShell.cpp"
|
||||||
|
|
||||||
const ScriptObject* ptrs[] =
|
const ScriptObject* ptrs[] =
|
||||||
{
|
{
|
||||||
static_cast< ScriptObject* >( new Aethernet ),
|
static_cast< ScriptObject* >( new Aethernet ),
|
||||||
static_cast< ScriptObject* >( new Aetheryte ),
|
static_cast< ScriptObject* >( new Aetheryte ),
|
||||||
static_cast< ScriptObject* >( new CmnDefCutSceneReplay ),
|
|
||||||
static_cast< ScriptObject* >( new CmnDefInnBed ),
|
|
||||||
static_cast< ScriptObject* >( new CmnDefLinkShell ),
|
|
||||||
static_cast< ScriptObject* >( new HouFurOrchestrion ),
|
static_cast< ScriptObject* >( new HouFurOrchestrion ),
|
||||||
|
static_cast< ScriptObject* >( new CmnDefInnBed ),
|
||||||
|
static_cast< ScriptObject* >( new CmnDefCutSceneReplay ),
|
||||||
|
static_cast< ScriptObject* >( new CmnDefLinkShell ),
|
||||||
|
|
||||||
nullptr
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,13 +1,13 @@
|
||||||
#include <Script/NativeScriptApi.h>
|
#include <Script/NativeScriptApi.h>
|
||||||
|
|
||||||
#include "OpeningGridania.cpp"
|
|
||||||
#include "OpeningLimsa.cpp"
|
#include "OpeningLimsa.cpp"
|
||||||
|
#include "OpeningGridania.cpp"
|
||||||
#include "OpeningUldah.cpp"
|
#include "OpeningUldah.cpp"
|
||||||
|
|
||||||
const ScriptObject* ptrs[] =
|
const ScriptObject* ptrs[] =
|
||||||
{
|
{
|
||||||
static_cast< ScriptObject* >( new OpeningGridania ),
|
|
||||||
static_cast< ScriptObject* >( new OpeningLimsa ),
|
static_cast< ScriptObject* >( new OpeningLimsa ),
|
||||||
|
static_cast< ScriptObject* >( new OpeningGridania ),
|
||||||
static_cast< ScriptObject* >( new OpeningUldah ),
|
static_cast< ScriptObject* >( new OpeningUldah ),
|
||||||
|
|
||||||
nullptr
|
nullptr
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
#include <Script/NativeScriptApi.h>
|
#include <Script/NativeScriptApi.h>
|
||||||
|
|
||||||
#include "ManFst001.cpp"
|
#include "ManFst004.cpp"
|
||||||
|
#include "ManSea002.cpp"
|
||||||
#include "ManFst002.cpp"
|
#include "ManFst002.cpp"
|
||||||
#include "ManFst003.cpp"
|
#include "ManFst003.cpp"
|
||||||
#include "ManFst004.cpp"
|
|
||||||
#include "ManSea001.cpp"
|
|
||||||
#include "ManSea002.cpp"
|
|
||||||
#include "ManWil001.cpp"
|
#include "ManWil001.cpp"
|
||||||
#include "ManWil002.cpp"
|
#include "ManWil002.cpp"
|
||||||
#include "subquest/gridania/SubFst001.cpp"
|
#include "ManFst001.cpp"
|
||||||
#include "subquest/gridania/SubFst002.cpp"
|
#include "subquest/gridania/SubFst002.cpp"
|
||||||
#include "subquest/gridania/SubFst010.cpp"
|
|
||||||
#include "subquest/gridania/SubFst013.cpp"
|
#include "subquest/gridania/SubFst013.cpp"
|
||||||
|
#include "subquest/gridania/SubFst001.cpp"
|
||||||
|
#include "subquest/gridania/SubFst010.cpp"
|
||||||
|
#include "ManSea001.cpp"
|
||||||
|
|
||||||
const ScriptObject* ptrs[] =
|
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 ManFst002 ),
|
||||||
static_cast< ScriptObject* >( new ManFst003 ),
|
static_cast< ScriptObject* >( new ManFst003 ),
|
||||||
static_cast< ScriptObject* >( new ManFst004 ),
|
|
||||||
static_cast< ScriptObject* >( new ManSea001 ),
|
|
||||||
static_cast< ScriptObject* >( new ManSea002 ),
|
|
||||||
static_cast< ScriptObject* >( new ManWil001 ),
|
static_cast< ScriptObject* >( new ManWil001 ),
|
||||||
static_cast< ScriptObject* >( new ManWil002 ),
|
static_cast< ScriptObject* >( new ManWil002 ),
|
||||||
static_cast< ScriptObject* >( new SubFst001 ),
|
static_cast< ScriptObject* >( new ManFst001 ),
|
||||||
static_cast< ScriptObject* >( new SubFst002 ),
|
static_cast< ScriptObject* >( new SubFst002 ),
|
||||||
static_cast< ScriptObject* >( new SubFst010 ),
|
|
||||||
static_cast< ScriptObject* >( new SubFst013 ),
|
static_cast< ScriptObject* >( new SubFst013 ),
|
||||||
|
static_cast< ScriptObject* >( new SubFst001 ),
|
||||||
|
static_cast< ScriptObject* >( new SubFst010 ),
|
||||||
|
static_cast< ScriptObject* >( new ManSea001 ),
|
||||||
|
|
||||||
nullptr
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -109,7 +109,8 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
|
||||||
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 );
|
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 );
|
||||||
uint32_t param3 = inPacket.getValAt< uint32_t >( 0x38 );
|
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 ) + ", " +
|
", params: " + std::to_string( param1 ) + ", " +
|
||||||
std::to_string( param2 ) + ", " + std::to_string( param3 ) );
|
std::to_string( param2 ) + ", " + std::to_string( param3 ) );
|
||||||
|
|
||||||
|
@ -409,19 +410,20 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
|
||||||
}
|
}
|
||||||
case GmCommand::Teri:
|
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.sendDebug( "Found instance: " + instance->getName() + ", id: " + std::to_string( param1 ) );
|
||||||
|
|
||||||
player.setInstance( instance );
|
player.setInstance( instance );
|
||||||
}
|
}
|
||||||
else if( !g_framework.getTerritoryMgr().isValidTerritory( param1 ) )
|
else if( !pTeriMgr->isValidTerritory( param1 ) )
|
||||||
{
|
{
|
||||||
player.sendUrgent( "Invalid zone " + std::to_string( param1 ) );
|
player.sendUrgent( "Invalid zone " + std::to_string( param1 ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto pZone = g_framework.getTerritoryMgr().getZoneByTerriId( param1 );
|
auto pZone = pTeriMgr->getZoneByTerriId( param1 );
|
||||||
if( !pZone )
|
if( !pZone )
|
||||||
{
|
{
|
||||||
player.sendUrgent( "No zone instance found for " + std::to_string( param1 ) );
|
player.sendUrgent( "No zone instance found for " + std::to_string( param1 ) );
|
||||||
|
@ -468,12 +470,15 @@ void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPac
|
||||||
if( player.getGmRank() <= 0 )
|
if( player.getGmRank() <= 0 )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
|
|
||||||
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
|
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||||
std::string param1 = inPacket.getStringAt( 0x34 );
|
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;
|
Core::Entity::CharaPtr targetActor;
|
||||||
|
|
||||||
if( targetSession != nullptr )
|
if( targetSession != nullptr )
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -54,9 +54,11 @@ void Core::Network::GameConnection::inventoryModifyHandler( const Packets::GameP
|
||||||
ackPacket.data().type = 7;
|
ackPacket.data().type = 7;
|
||||||
player.queuePacket( ackPacket );
|
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
|
// TODO: other inventory operations need to be implemented
|
||||||
switch( action )
|
switch( action )
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
#include <Network/PacketContainer.h>
|
#include <Network/PacketContainer.h>
|
||||||
#include <Network/PacketDef/Chat/ServerChatDef.h>
|
#include <Network/PacketDef/Chat/ServerChatDef.h>
|
||||||
#include <Database/DatabaseDef.h>
|
#include <Database/DatabaseDef.h>
|
||||||
|
#include <Database/DbWorkerPool.h>
|
||||||
|
#include <Database/CharaDbConnection.h>
|
||||||
|
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include "Network/GameConnection.h"
|
#include "Network/GameConnection.h"
|
||||||
|
@ -43,7 +46,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -285,20 +288,20 @@ void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePa
|
||||||
void Core::Network::GameConnection::reqEquipDisplayFlagsHandler( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::reqEquipDisplayFlagsHandler( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player )
|
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 ) );
|
player.setEquipDisplayFlags( inPacket.getValAt< uint8_t >( 0x20 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket& inPacket,
|
void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket& inPacket,
|
||||||
Entity::Player& player )
|
Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
uint32_t zoneLineId = inPacket.getValAt< uint32_t >( 0x20 );
|
uint32_t zoneLineId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||||
|
|
||||||
player.sendDebug( "Walking ZoneLine " + std::to_string( zoneLineId ) );
|
player.sendDebug( "Walking ZoneLine " + std::to_string( zoneLineId ) );
|
||||||
|
|
||||||
auto pZone = player.getCurrentZone();
|
auto pZone = player.getCurrentZone();
|
||||||
|
|
||||||
auto pLine = g_framework.getTerritoryMgr().getTerritoryPosition( zoneLineId );
|
auto pLine = pTeriMgr->getTerritoryPosition( zoneLineId );
|
||||||
|
|
||||||
Common::FFXIVARR_POSITION3 targetPos{};
|
Common::FFXIVARR_POSITION3 targetPos{};
|
||||||
uint32_t targetZone;
|
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 );
|
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 "
|
"FROM discoveryinfo "
|
||||||
"WHERE id = " + std::to_string( ref_position_id ) + ";" );
|
"WHERE id = " + std::to_string( ref_position_id ) + ";" );
|
||||||
|
|
||||||
|
@ -489,6 +494,7 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa
|
||||||
Entity::Player& player )
|
Entity::Player& player )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
auto pDebugCom = g_fw.get< DebugCommandHandler >();
|
||||||
std::string chatString( inPacket.getStringAt( 0x3a ) );
|
std::string chatString( inPacket.getStringAt( 0x3a ) );
|
||||||
|
|
||||||
uint32_t sourceId = inPacket.getValAt< uint32_t >( 0x24 );
|
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 ) == '!' )
|
if( chatString.at( 0 ) == '!' )
|
||||||
{
|
{
|
||||||
// execute game console command
|
// 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,15 +559,15 @@ void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPa
|
||||||
std::string targetPcName = inPacket.getStringAt( 0x21 );
|
std::string targetPcName = inPacket.getStringAt( 0x21 );
|
||||||
std::string msg = inPacket.getStringAt( 0x41 );
|
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 )
|
if( !pSession )
|
||||||
{
|
{
|
||||||
ChatChannelPacket< FFXIVIpcTellErrNotFound > tellErrPacket( player.getId() );
|
ChatChannelPacket< FFXIVIpcTellErrNotFound > tellErrPacket( player.getId() );
|
||||||
strcpy( tellErrPacket.data().receipientName, targetPcName.c_str() );
|
strcpy( tellErrPacket.data().receipientName, targetPcName.c_str() );
|
||||||
sendSinglePacket( tellErrPacket );
|
sendSinglePacket( tellErrPacket );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "TargetPc not found" );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -48,6 +48,9 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
|
||||||
|
|
||||||
player.sendDebug( "Skill type:" + std::to_string( type ) );
|
player.sendDebug( "Skill type:" + std::to_string( type ) );
|
||||||
|
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
|
||||||
switch( type )
|
switch( type )
|
||||||
{
|
{
|
||||||
case Common::SkillType::Normal:
|
case Common::SkillType::Normal:
|
||||||
|
@ -57,7 +60,7 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
|
||||||
std::string actionIdStr = boost::str( boost::format( "%|04X|" ) % action );
|
std::string actionIdStr = boost::str( boost::format( "%|04X|" ) % action );
|
||||||
player.sendDebug( "---------------------------------------" );
|
player.sendDebug( "---------------------------------------" );
|
||||||
player.sendDebug( "ActionHandler ( " + actionIdStr + " | " +
|
player.sendDebug( "ActionHandler ( " + actionIdStr + " | " +
|
||||||
g_framework.getExdDataGen().get< Core::Data::Action >( action )->name +
|
pExdData->get< Core::Data::Action >( action )->name +
|
||||||
" | " + std::to_string( targetId ) + " )" );
|
" | " + std::to_string( targetId ) + " )" );
|
||||||
|
|
||||||
player.queuePacket( ActorControlPacket142( player.getId(), ActorControlType::ActionStart, 0x01, action ) );
|
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 ) )
|
if( !player.actionHasCastTime( action ) )
|
||||||
{
|
{
|
||||||
g_framework.getScriptMgr().onCastFinish( player, targetActor->getAsChara(), action );
|
pScriptMgr->onCastFinish( player, targetActor->getAsChara(), action );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -97,11 +100,10 @@ void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inP
|
||||||
}
|
}
|
||||||
else if( action < 3000000 ) // item action
|
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 )
|
if( info )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( info->name );
|
pScriptMgr->onEventItem( player, action, info->quest, info->castTime, targetId );
|
||||||
g_framework.getScriptMgr().onEventItem( player, action, info->quest, info->castTime, targetId );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( action > 3000000 ) // unknown
|
else if( action > 3000000 ) // unknown
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
|
|
||||||
|
@ -36,30 +36,34 @@ bool Core::Scripting::ScriptLoader::unloadModule( ModuleHandle handle )
|
||||||
bool success = dlclose( handle ) == 0;
|
bool success = dlclose( handle ) == 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
|
||||||
if( !success )
|
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;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const std::string& path )
|
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 );
|
fs::path f( path );
|
||||||
|
|
||||||
if( isModuleLoaded( f.stem().string() ) )
|
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;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy to temp dir
|
// 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::create_directories( cacheDir );
|
||||||
fs::path dest( cacheDir /= f.filename().string() );
|
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 )
|
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;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -83,12 +87,12 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const st
|
||||||
|
|
||||||
if( !handle )
|
if( !handle )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Failed to load module from: " + path );
|
pLog->error( "Failed to load module from: " + path );
|
||||||
|
|
||||||
return nullptr;
|
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;
|
auto info = new ScriptInfo;
|
||||||
info->handle = handle;
|
info->handle = handle;
|
||||||
|
@ -104,6 +108,7 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const st
|
||||||
ScriptObject** Core::Scripting::ScriptLoader::getScripts( ModuleHandle handle )
|
ScriptObject** Core::Scripting::ScriptLoader::getScripts( ModuleHandle handle )
|
||||||
{
|
{
|
||||||
using getScripts = ScriptObject**( *)( );
|
using getScripts = ScriptObject**( *)( );
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
getScripts func = reinterpret_cast< getScripts >( GetProcAddress( handle, "getScripts" ) );
|
getScripts func = reinterpret_cast< getScripts >( GetProcAddress( handle, "getScripts" ) );
|
||||||
|
@ -115,7 +120,7 @@ ScriptObject** Core::Scripting::ScriptLoader::getScripts( ModuleHandle handle )
|
||||||
{
|
{
|
||||||
auto ptr = func();
|
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;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
@ -130,6 +135,7 @@ bool Core::Scripting::ScriptLoader::unloadScript( Core::Scripting::ScriptInfo* i
|
||||||
|
|
||||||
bool Core::Scripting::ScriptLoader::unloadScript( ModuleHandle handle )
|
bool Core::Scripting::ScriptLoader::unloadScript( ModuleHandle handle )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it )
|
for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it )
|
||||||
{
|
{
|
||||||
if( it->second->handle == handle )
|
if( it->second->handle == handle )
|
||||||
|
@ -148,7 +154,7 @@ bool Core::Scripting::ScriptLoader::unloadScript( ModuleHandle handle )
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_framework.getLogger().error( "failed to unload module: " + info->library_name );
|
pLog->error( "failed to unload module: " + info->library_name );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
// enable the ambiguity fix for every platform to avoid #define nonsense
|
// enable the ambiguity fix for every platform to avoid #define nonsense
|
||||||
#define WIN_AMBIGUITY_FIX
|
#define WIN_AMBIGUITY_FIX
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::Scripting::ScriptMgr::ScriptMgr() :
|
Core::Scripting::ScriptMgr::ScriptMgr() :
|
||||||
m_firstScriptChangeNotificiation( false )
|
m_firstScriptChangeNotificiation( false )
|
||||||
|
@ -51,8 +51,10 @@ void Core::Scripting::ScriptMgr::update()
|
||||||
bool Core::Scripting::ScriptMgr::init()
|
bool Core::Scripting::ScriptMgr::init()
|
||||||
{
|
{
|
||||||
std::set< std::string > files;
|
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() );
|
files, m_nativeScriptMgr->getModuleExtension() );
|
||||||
|
|
||||||
uint32_t scriptsFound = 0;
|
uint32_t scriptsFound = 0;
|
||||||
|
@ -68,7 +70,7 @@ bool Core::Scripting::ScriptMgr::init()
|
||||||
scriptsLoaded++;
|
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();
|
watchDirectories();
|
||||||
|
|
||||||
|
@ -77,11 +79,12 @@ bool Core::Scripting::ScriptMgr::init()
|
||||||
|
|
||||||
void Core::Scripting::ScriptMgr::watchDirectories()
|
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 )
|
if( !shouldWatch )
|
||||||
return;
|
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 )
|
[ this ]( const std::vector< ci::fs::path >& paths )
|
||||||
{
|
{
|
||||||
if( !m_firstScriptChangeNotificiation )
|
if( !m_firstScriptChangeNotificiation )
|
||||||
|
@ -91,18 +94,19 @@ void Core::Scripting::ScriptMgr::watchDirectories()
|
||||||
m_firstScriptChangeNotificiation = true;
|
m_firstScriptChangeNotificiation = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
|
||||||
for( auto path : paths )
|
for( auto path : paths )
|
||||||
{
|
{
|
||||||
if( m_nativeScriptMgr->isModuleLoaded( path.stem().string() ) )
|
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( ));
|
m_nativeScriptMgr->queueScriptReload( path.stem( ).string( ));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "Loading new script: " + path.stem().string() );
|
pLog->debug( "Loading new script: " + path.stem().string() );
|
||||||
|
|
||||||
m_nativeScriptMgr->loadScript( path.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 )
|
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 );
|
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 )
|
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;
|
uint16_t eventType = eventId >> 16;
|
||||||
uint32_t scriptId = eventId;
|
uint32_t scriptId = eventId;
|
||||||
|
|
||||||
// aethernet/aetherytes need to be handled separately
|
// aethernet/aetherytes need to be handled separately
|
||||||
if( eventType == Event::EventHandler::EventHandlerType::Aetheryte )
|
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;
|
scriptId = EVENTSCRIPT_AETHERYTE_ID;
|
||||||
if( !aetherInfo->isAetheryte )
|
if( !aetherInfo->isAetheryte )
|
||||||
scriptId = EVENTSCRIPT_AETHERNET_ID;
|
scriptId = EVENTSCRIPT_AETHERNET_ID;
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include "StatusEffect.h"
|
#include "StatusEffect.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -33,7 +33,8 @@ Core::StatusEffect::StatusEffect::StatusEffect( uint32_t id, Entity::CharaPtr so
|
||||||
, m_tickRate( tickRate )
|
, m_tickRate( tickRate )
|
||||||
, m_lastTick( 0 )
|
, 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;
|
m_name = entry->name;
|
||||||
|
|
||||||
std::replace( m_name.begin(), m_name.end(), ' ', '_' );
|
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()
|
void Core::StatusEffect::StatusEffect::onTick()
|
||||||
{
|
{
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
m_lastTick = Util::getTimeMs();
|
m_lastTick = Util::getTimeMs();
|
||||||
g_framework.getScriptMgr().onStatusTick( m_targetActor, *this );
|
pScriptMgr->onStatusTick( m_targetActor, *this );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Core::StatusEffect::StatusEffect::getSrcActorId() const
|
uint32_t Core::StatusEffect::StatusEffect::getSrcActorId() const
|
||||||
|
@ -88,6 +90,7 @@ uint16_t Core::StatusEffect::StatusEffect::getParam() const
|
||||||
void Core::StatusEffect::StatusEffect::applyStatus()
|
void Core::StatusEffect::StatusEffect::applyStatus()
|
||||||
{
|
{
|
||||||
m_startTime = Util::getTimeMs();
|
m_startTime = Util::getTimeMs();
|
||||||
|
auto pScriptMgr = g_fw.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,14 +110,13 @@ void Core::StatusEffect::StatusEffect::applyStatus()
|
||||||
//effectPacket.data().effects[4].unknown_5 = 0x80;
|
//effectPacket.data().effects[4].unknown_5 = 0x80;
|
||||||
//m_sourceActor->sendToInRangeSet( effectPacket, true );
|
//m_sourceActor->sendToInRangeSet( effectPacket, true );
|
||||||
|
|
||||||
g_framework.getLogger().debug( "StatusEffect applied: " + m_name );
|
pScriptMgr->onStatusReceive( m_targetActor, m_id );
|
||||||
g_framework.getScriptMgr().onStatusReceive( m_targetActor, m_id );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::StatusEffect::StatusEffect::removeStatus()
|
void Core::StatusEffect::StatusEffect::removeStatus()
|
||||||
{
|
{
|
||||||
g_framework.getLogger().debug( "StatusEffect removed: " + m_name );
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
g_framework.getScriptMgr().onStatusTimeOut( m_targetActor, m_id );
|
pScriptMgr->onStatusTimeOut( m_targetActor, m_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Core::StatusEffect::StatusEffect::getId() const
|
uint32_t Core::StatusEffect::StatusEffect::getId() const
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "InstanceContent.h"
|
#include "InstanceContent.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
using namespace Core::Common;
|
using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
|
@ -44,7 +44,8 @@ Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceC
|
||||||
|
|
||||||
bool Core::InstanceContent::init()
|
bool Core::InstanceContent::init()
|
||||||
{
|
{
|
||||||
g_framework.getScriptMgr().onInstanceInit( getAsInstanceContent() );
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
|
pScriptMgr->onInstanceInit( getAsInstanceContent() );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -67,7 +68,8 @@ Core::Data::ExdDataGenerated::InstanceContentPtr Core::InstanceContent::getInsta
|
||||||
|
|
||||||
void Core::InstanceContent::onPlayerZoneIn( Entity::Player& player )
|
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() ) +
|
+ std::to_string( getInstanceContentId() ) +
|
||||||
+ ", Entity#" + std::to_string( player.getId() ) );
|
+ ", Entity#" + std::to_string( player.getId() ) );
|
||||||
|
|
||||||
|
@ -83,7 +85,8 @@ void Core::InstanceContent::onPlayerZoneIn( Entity::Player& player )
|
||||||
|
|
||||||
void Core::InstanceContent::onLeaveTerritory( 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() ) +
|
+ std::to_string( getInstanceContentId() ) +
|
||||||
+ ", Entity#" + std::to_string( player.getId() ) );
|
+ ", Entity#" + std::to_string( player.getId() ) );
|
||||||
sendDirectorClear( player );
|
sendDirectorClear( player );
|
||||||
|
@ -149,8 +152,8 @@ void Core::InstanceContent::onUpdate( uint32_t currTime )
|
||||||
case DutyFinished:
|
case DutyFinished:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||||
g_framework.getScriptMgr().onInstanceUpdate( getAsInstanceContent(), currTime );
|
pScriptMgr->onInstanceUpdate( getAsInstanceContent(), currTime );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,12 +278,14 @@ void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object )
|
||||||
if( object->getObjectId() == 2000182 ) // start
|
if( object->getObjectId() == 2000182 ) // start
|
||||||
m_pEntranceEObj = object;
|
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 )
|
if( objData )
|
||||||
// todo: data should be renamed to eventId
|
// todo: data should be renamed to eventId
|
||||||
m_eventIdToObjectMap[objData->data] = object;
|
m_eventIdToObjectMap[objData->data] = object;
|
||||||
else
|
else
|
||||||
g_framework.getLogger().error( "InstanceContent::onRegisterEObj Zone " +
|
pLog->error( "InstanceContent::onRegisterEObj Zone " +
|
||||||
m_internalName + ": No EObj data found for EObj with ID: " +
|
m_internalName + ": No EObj data found for EObj with ID: " +
|
||||||
std::to_string( object->getObjectId() ) );
|
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 )
|
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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "TerritoryMgr.h"
|
#include "TerritoryMgr.h"
|
||||||
#include "Framework.h"
|
#include "Framework.h"
|
||||||
|
|
||||||
extern Core::Framework g_framework;
|
extern Core::Framework g_fw;
|
||||||
|
|
||||||
Core::TerritoryMgr::TerritoryMgr() :
|
Core::TerritoryMgr::TerritoryMgr() :
|
||||||
m_lastInstanceId( 10000 )
|
m_lastInstanceId( 10000 )
|
||||||
|
@ -22,11 +22,12 @@ Core::TerritoryMgr::TerritoryMgr() :
|
||||||
|
|
||||||
void Core::TerritoryMgr::loadTerritoryTypeDetailCache()
|
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 )
|
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() )
|
if( !teri1->name.empty() )
|
||||||
m_territoryTypeDetailCacheMap[id] = teri1;
|
m_territoryTypeDetailCacheMap[id] = teri1;
|
||||||
|
@ -97,6 +98,8 @@ bool Core::TerritoryMgr::isPrivateTerritory( uint32_t territoryTypeId ) const
|
||||||
|
|
||||||
bool Core::TerritoryMgr::createDefaultTerritories()
|
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 each entry in territoryTypeExd, check if it is a normal and if so, add the zone object
|
||||||
for( const auto& territory : m_territoryTypeDetailCacheMap )
|
for( const auto& territory : m_territoryTypeDetailCacheMap )
|
||||||
{
|
{
|
||||||
|
@ -107,13 +110,13 @@ bool Core::TerritoryMgr::createDefaultTerritories()
|
||||||
if( territoryInfo->name.empty() )
|
if( territoryInfo->name.empty() )
|
||||||
continue;
|
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 ) )
|
if( !pPlaceName || pPlaceName->name.empty() || !isDefaultTerritory( territoryId ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
uint32_t guid = getNextInstanceId();
|
uint32_t guid = getNextInstanceId();
|
||||||
g_framework.getLogger().info( std::to_string( territoryId ) +
|
pLog->info( std::to_string( territoryId ) +
|
||||||
"\t" + std::to_string( guid ) +
|
"\t" + std::to_string( guid ) +
|
||||||
"\t" + std::to_string( territoryInfo->territoryIntendedUse ) +
|
"\t" + std::to_string( territoryInfo->territoryIntendedUse ) +
|
||||||
"\t" + ( territoryInfo->name.length() <= 4 ? territoryInfo->name + "\t" : territoryInfo->name ) +
|
"\t" + ( territoryInfo->name.length() <= 4 ? territoryInfo->name + "\t" : territoryInfo->name ) +
|
||||||
|
@ -142,13 +145,15 @@ Core::ZonePtr Core::TerritoryMgr::createTerritoryInstance( uint32_t territoryTyp
|
||||||
if( isInstanceContentTerritory( territoryTypeId ) )
|
if( isInstanceContentTerritory( territoryTypeId ) )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
auto pTeri = getTerritoryDetail( territoryTypeId );
|
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 )
|
if( !pTeri || !pPlaceName )
|
||||||
return nullptr;
|
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 );
|
auto pZone = make_Zone( territoryTypeId, getNextInstanceId(), pTeri->name, pPlaceName->name );
|
||||||
pZone->init();
|
pZone->init();
|
||||||
|
@ -161,7 +166,8 @@ Core::ZonePtr Core::TerritoryMgr::createTerritoryInstance( uint32_t territoryTyp
|
||||||
|
|
||||||
Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceContentId )
|
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 )
|
if( !pInstanceContent )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
@ -173,7 +179,8 @@ Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceConten
|
||||||
if( !pTeri || pInstanceContent->name.empty() )
|
if( !pTeri || pInstanceContent->name.empty() )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
g_framework.getLogger().debug( "Starting instance for InstanceContent id: " + std::to_string( instanceContentId ) +
|
auto pLog = g_fw.get< Logger >();
|
||||||
|
pLog->debug( "Starting instance for InstanceContent id: " + std::to_string( instanceContentId ) +
|
||||||
" (" + pInstanceContent->name + ")" );
|
" (" + pInstanceContent->name + ")" );
|
||||||
|
|
||||||
auto pZone = make_InstanceContent( pInstanceContent, getNextInstanceId(),
|
auto pZone = make_InstanceContent( pInstanceContent, getNextInstanceId(),
|
||||||
|
@ -221,7 +228,8 @@ Core::ZonePtr Core::TerritoryMgr::getInstanceZonePtr( uint32_t instanceId ) cons
|
||||||
|
|
||||||
void Core::TerritoryMgr::loadTerritoryPositionMap()
|
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() )
|
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 )
|
bool Core::TerritoryMgr::movePlayer( ZonePtr pZone, Core::Entity::PlayerPtr pPlayer )
|
||||||
{
|
{
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
if( !pZone )
|
if( !pZone )
|
||||||
{
|
{
|
||||||
g_framework.getLogger().error( "Zone not found on this server." );
|
pLog->error( "Zone not found on this server." );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ using namespace Core::Common;
|
||||||
using namespace Core::Network::Packets;
|
using namespace Core::Network::Packets;
|
||||||
using namespace Core::Network::Packets::Server;
|
using namespace Core::Network::Packets::Server;
|
||||||
|
|
||||||
extern Core::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_currentWeather( Weather::FairSkies ),
|
||||||
m_nextEObjId( 0x400D0000 )
|
m_nextEObjId( 0x400D0000 )
|
||||||
{
|
{
|
||||||
|
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||||
m_guId = guId;
|
m_guId = guId;
|
||||||
|
|
||||||
m_territoryId = territoryId;
|
m_territoryId = territoryId;
|
||||||
|
@ -68,7 +69,7 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
|
||||||
m_lastMobUpdate = 0;
|
m_lastMobUpdate = 0;
|
||||||
|
|
||||||
m_weatherOverride = Weather::None;
|
m_weatherOverride = Weather::None;
|
||||||
m_territoryTypeInfo = g_framework.getExdDataGen().get< Core::Data::TerritoryType >( territoryId );
|
m_territoryTypeInfo = pExdData->get< Core::Data::TerritoryType >( territoryId );
|
||||||
|
|
||||||
loadWeatherRates();
|
loadWeatherRates();
|
||||||
|
|
||||||
|
@ -78,17 +79,15 @@ Core::Zone::Zone( uint16_t territoryId, uint32_t guId, const std::string& intern
|
||||||
void Core::Zone::loadWeatherRates()
|
void Core::Zone::loadWeatherRates()
|
||||||
{
|
{
|
||||||
if( !m_territoryTypeInfo )
|
if( !m_territoryTypeInfo )
|
||||||
{
|
|
||||||
g_framework.getLogger().error( std::string( __FUNCTION__ ) + " TerritoryTypeInfo not loaded!" );
|
|
||||||
return;
|
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{ 0 } : m_territoryTypeInfo->weatherRate;
|
||||||
|
|
||||||
uint8_t sumPc = 0;
|
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; )
|
for( size_t i = 0; i < 16; )
|
||||||
{
|
{
|
||||||
int32_t weatherId = boost::get< int32_t >( weatherRateFields[i] );
|
int32_t weatherId = boost::get< int32_t >( weatherRateFields[i] );
|
||||||
|
@ -108,8 +107,9 @@ Core::Zone::~Zone()
|
||||||
|
|
||||||
bool Core::Zone::init()
|
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
|
// all good
|
||||||
}
|
}
|
||||||
|
@ -214,7 +214,8 @@ void Core::Zone::pushActor( Entity::ActorPtr pActor )
|
||||||
{
|
{
|
||||||
auto pPlayer = pActor->getAsPlayer();
|
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 )
|
if( pSession )
|
||||||
m_sessionSet.insert( pSession );
|
m_sessionSet.insert( pSession );
|
||||||
m_playerMap[pPlayer->getId()] = pPlayer;
|
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 )
|
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;
|
return;
|
||||||
|
|
||||||
|
auto pServerZone = g_fw.get< ServerZone >();
|
||||||
for( auto entry : m_playerMap )
|
for( auto entry : m_playerMap )
|
||||||
{
|
{
|
||||||
auto player = entry.second;
|
auto player = entry.second;
|
||||||
|
@ -273,7 +276,7 @@ void Core::Zone::queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t
|
||||||
if( ( distance < range ) && sourcePlayer.getId() != player->getId() )
|
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() );
|
pPacketEntry->setValAt< uint32_t >( 0x08, player->getId() );
|
||||||
if( pSession )
|
if( pSession )
|
||||||
pSession->getZoneConnection()->queueOutPacket( pPacketEntry );
|
pSession->getZoneConnection()->queueOutPacket( pPacketEntry );
|
||||||
|
@ -313,9 +316,6 @@ bool Core::Zone::checkWeather()
|
||||||
if( m_weatherOverride != m_currentWeather )
|
if( m_weatherOverride != m_currentWeather )
|
||||||
{
|
{
|
||||||
m_currentWeather = m_weatherOverride;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -325,9 +325,6 @@ bool Core::Zone::checkWeather()
|
||||||
if( nextWeather != m_currentWeather )
|
if( nextWeather != m_currentWeather )
|
||||||
{
|
{
|
||||||
m_currentWeather = nextWeather;
|
m_currentWeather = nextWeather;
|
||||||
|
|
||||||
g_framework.getLogger().debug( "[Zone:" + m_internalName + "] changing weather to : " +
|
|
||||||
std::to_string( static_cast< uint8_t >( nextWeather ) ) );
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,8 +585,9 @@ void Core::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
|
||||||
if( pCell == nullptr )
|
if( pCell == nullptr )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||||
// TODO: make sure gms can overwrite this. Potentially temporary solution
|
// TODO: make sure gms can overwrite this. Potentially temporary solution
|
||||||
if( g_framework.getTerritoryMgr().isPrivateTerritory( getTerritoryId() ) )
|
if( pTeriMgr->isPrivateTerritory( getTerritoryId() ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto iter = pCell->m_actors.begin();
|
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 )
|
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() ) );
|
+ ", Entity#" + std::to_string( player.getId() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::Zone::onLeaveTerritory( Entity::Player& player )
|
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() ) );
|
+ ", Entity#" + std::to_string( player.getId() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -671,7 +671,7 @@ void Core::Zone::registerEObj( Entity::EventObjectPtr object )
|
||||||
{
|
{
|
||||||
if( !object )
|
if( !object )
|
||||||
return;
|
return;
|
||||||
|
auto pLog = g_fw.get< Logger >();
|
||||||
object->setId( getNextEObjId() );
|
object->setId( getNextEObjId() );
|
||||||
pushActor( object );
|
pushActor( object );
|
||||||
|
|
||||||
|
@ -679,7 +679,7 @@ void Core::Zone::registerEObj( Entity::EventObjectPtr object )
|
||||||
|
|
||||||
onRegisterEObj( 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 )
|
Core::Entity::EventObjectPtr Core::Zone::getEObj( uint32_t objId )
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <Database/DbWorkerPool.h>
|
#include <Database/DbWorkerPool.h>
|
||||||
#include "Linkshell/LinkshellMgr.h"
|
#include "Linkshell/LinkshellMgr.h"
|
||||||
#include "Zone/TerritoryMgr.h"
|
#include "Zone/TerritoryMgr.h"
|
||||||
|
#include "DebugCommand/DebugCommandHandler.h"
|
||||||
|
|
||||||
Core::Framework g_fw;
|
Core::Framework g_fw;
|
||||||
|
|
||||||
|
@ -26,6 +27,7 @@ bool setupFramework()
|
||||||
auto pDb = boost::make_shared< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
auto pDb = boost::make_shared< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||||
auto pLsMgr = boost::make_shared< LinkshellMgr >();
|
auto pLsMgr = boost::make_shared< LinkshellMgr >();
|
||||||
auto pTeriMgr = boost::make_shared< TerritoryMgr >();
|
auto pTeriMgr = boost::make_shared< TerritoryMgr >();
|
||||||
|
auto pDebugCom = boost::make_shared< DebugCommandHandler >();
|
||||||
|
|
||||||
pLogger->setLogPath( "log/SapphireZone_" );
|
pLogger->setLogPath( "log/SapphireZone_" );
|
||||||
pLogger->init();
|
pLogger->init();
|
||||||
|
@ -38,6 +40,7 @@ bool setupFramework()
|
||||||
g_fw.set< Db::DbWorkerPool< Db::CharaDbConnection > >( pDb );
|
g_fw.set< Db::DbWorkerPool< Db::CharaDbConnection > >( pDb );
|
||||||
g_fw.set< LinkshellMgr >( pLsMgr );
|
g_fw.set< LinkshellMgr >( pLsMgr );
|
||||||
g_fw.set< TerritoryMgr >( pTeriMgr );
|
g_fw.set< TerritoryMgr >( pTeriMgr );
|
||||||
|
g_fw.set< DebugCommandHandler >( pDebugCom );
|
||||||
|
|
||||||
// actuall catch errors here...
|
// actuall catch errors here...
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue