mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-03 09:17:47 +00:00
More cleanup of event / script handlers
This commit is contained in:
parent
147ff80f86
commit
52f341c906
4 changed files with 125 additions and 150 deletions
|
@ -76,9 +76,9 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive,
|
|||
setZoneHandler( ClientZoneIpcType::InventoryModifyHandler,"InventoryModifyHandler", &GameConnection::inventoryModifyHandler );
|
||||
|
||||
setZoneHandler( ClientZoneIpcType::TalkEventHandler, "EventHandlerTalk", &GameConnection::eventHandlerTalk );
|
||||
setZoneHandler( ClientZoneIpcType::EmoteEventHandler, "EventHandler", &GameConnection::eventHandler );
|
||||
setZoneHandler( ClientZoneIpcType::WithinRangeEventHandler, "EventHandler", &GameConnection::eventHandler );
|
||||
setZoneHandler( ClientZoneIpcType::OutOfRangeEventHandler, "EventHandler", &GameConnection::eventHandler );
|
||||
setZoneHandler( ClientZoneIpcType::EmoteEventHandler, "EventHandlerEmote", &GameConnection::eventHandlerEmote );
|
||||
setZoneHandler( ClientZoneIpcType::WithinRangeEventHandler, "EventHandlerWithinRange", &GameConnection::eventHandlerWithinRange );
|
||||
setZoneHandler( ClientZoneIpcType::OutOfRangeEventHandler, "EventHandlerOutsideRange", &GameConnection::eventHandlerOutsideRange );
|
||||
setZoneHandler( ClientZoneIpcType::EnterTeriEventHandler, "EventHandler", &GameConnection::eventHandler );
|
||||
|
||||
setZoneHandler( ClientZoneIpcType::ReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandler );
|
||||
|
|
|
@ -101,6 +101,10 @@ public:
|
|||
DECLARE_HANDLER( discoveryHandler );
|
||||
DECLARE_HANDLER( eventHandler );
|
||||
DECLARE_HANDLER( eventHandlerTalk );
|
||||
DECLARE_HANDLER( eventHandlerEmote );
|
||||
DECLARE_HANDLER( eventHandlerWithinRange );
|
||||
DECLARE_HANDLER( eventHandlerOutsideRange );
|
||||
DECLARE_HANDLER( eventHandlerEnterTerritory );
|
||||
|
||||
DECLARE_HANDLER( logoutHandler );
|
||||
|
||||
|
|
|
@ -50,66 +50,11 @@ void Core::Network::GameConnection::eventHandler( const Packets::GamePacket& inP
|
|||
{
|
||||
|
||||
case ClientZoneIpcType::TalkEventHandler: // Talk event
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
case ClientZoneIpcType::EmoteEventHandler: // Emote event
|
||||
{
|
||||
uint64_t actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
||||
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
uint16_t emoteId = inPacket.getValAt< uint16_t >( 0x2C );
|
||||
|
||||
std::string eventName = Event::getEventName( eventId );
|
||||
|
||||
if( !g_scriptMgr.onEmote( player, actorId, eventId, static_cast< uint8_t >( emoteId ) ) )
|
||||
abortEventFunc( player, actorId, eventId );
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case ClientZoneIpcType::WithinRangeEventHandler:
|
||||
{
|
||||
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint32_t eventParam1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
float x = inPacket.getValAt< float >( 0x28 );
|
||||
float y = inPacket.getValAt< float >( 0x2C );
|
||||
float z = inPacket.getValAt< float >( 0x30 );
|
||||
|
||||
std::string eventName = Event::getEventName( eventId );
|
||||
|
||||
if( !g_scriptMgr.onWithinRange( player, eventId, eventParam1, x, y, z ) )
|
||||
abortEventFunc( player, 0, eventId );
|
||||
break;
|
||||
}
|
||||
|
||||
case ClientZoneIpcType::OutOfRangeEventHandler:
|
||||
{
|
||||
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint32_t eventParam1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
float x = inPacket.getValAt< float >( 0x28 );
|
||||
float y = inPacket.getValAt< float >( 0x2C );
|
||||
float z = inPacket.getValAt< float >( 0x30 );
|
||||
|
||||
std::string eventName = Event::getEventName( eventId );
|
||||
|
||||
if( !g_scriptMgr.onOutsideRange( player, eventId, eventParam1, x, y, z ) )
|
||||
abortEventFunc( player, 0, eventId );
|
||||
break;
|
||||
}
|
||||
|
||||
case ClientZoneIpcType::EnterTeriEventHandler:
|
||||
{
|
||||
uint32_t eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
uint16_t eventParam1 = inPacket.getValAt< uint16_t >( 0x24 );
|
||||
uint16_t eventParam2 = inPacket.getValAt< uint16_t >( 0x26 );
|
||||
|
||||
std::string eventName = Event::getEventName( eventId );
|
||||
|
||||
if( !g_scriptMgr.onEnterTerritory( player, eventId, eventParam1, eventParam2 ) )
|
||||
abortEventFunc( player, 0, eventId );
|
||||
break;
|
||||
}
|
||||
|
||||
case ClientZoneIpcType::ReturnEventHandler:
|
||||
case ClientZoneIpcType::TradeReturnEventHandler:
|
||||
|
@ -171,22 +116,114 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
|||
player.sendDebug( "Calling: " + objName + "." + eventName );
|
||||
player.eventStart( actorId, eventId, Event::EventHandler::Talk, 0, 0 );
|
||||
|
||||
if( !g_scriptMgr.onTalk( player, actorId, eventId ) )
|
||||
if( !g_scriptMgr.onTalk( player, actorId, eventId ) &&
|
||||
eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||
{
|
||||
if ( eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||
{
|
||||
auto questInfo = g_exdData.getQuestInfo( eventId );
|
||||
if ( questInfo )
|
||||
{
|
||||
player.sendUrgent( "Quest not implemented: " + questInfo->name + " (" + questInfo->name_intern + ")" );
|
||||
}
|
||||
}
|
||||
auto questInfo = g_exdData.getQuestInfo( eventId );
|
||||
if ( questInfo )
|
||||
player.sendUrgent( "Quest not implemented: " + questInfo->name + " (" + questInfo->name_intern + ")" );
|
||||
}
|
||||
|
||||
player.checkEvent( eventId );
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||
{
|
||||
|
||||
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
auto emoteId = inPacket.getValAt< uint16_t >( 0x2C );
|
||||
auto eventType = static_cast< uint16_t >( eventId >> 16 );
|
||||
|
||||
std::string eventName = "onEmote";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
|
||||
player.sendDebug( "Actor: " +
|
||||
std::to_string( actorId ) + " -> " +
|
||||
std::to_string( Event::mapEventActorToRealActor( static_cast< uint32_t >( actorId ) ) ) +
|
||||
" \neventId: " +
|
||||
std::to_string( eventId ) +
|
||||
" (0x" + boost::str( boost::format( "%|08X|" )
|
||||
% static_cast< uint64_t >( eventId & 0xFFFFFFF ) ) + ")" );
|
||||
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName );
|
||||
|
||||
player.eventStart( actorId, eventId, Event::EventHandler::Emote, 0, emoteId );
|
||||
|
||||
if( !g_scriptMgr.onEmote( player, actorId, eventId, static_cast< uint8_t >( emoteId ) ) &&
|
||||
eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||
{
|
||||
auto questInfo = g_exdData.getQuestInfo( eventId );
|
||||
if( questInfo )
|
||||
player.sendUrgent( "Quest not implemented: " + questInfo->name );
|
||||
}
|
||||
|
||||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::GamePacket& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto x = inPacket.getValAt< float >( 0x28 );
|
||||
auto y = inPacket.getValAt< float >( 0x2C );
|
||||
auto z = inPacket.getValAt< float >( 0x30 );
|
||||
|
||||
std::string eventName = "onWithinRange";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) +
|
||||
" p1: " + std::to_string( param1 ) );
|
||||
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
||||
|
||||
g_scriptMgr.onWithinRange( player, eventId, param1, x, y, z );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::GamePacket& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto x = inPacket.getValAt< float >( 0x28 );
|
||||
auto y = inPacket.getValAt< float >( 0x2C );
|
||||
auto z = inPacket.getValAt< float >( 0x30 );
|
||||
|
||||
std::string eventName = "onOutsideRange";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) +
|
||||
" p1: " + std::to_string( param1 ) );
|
||||
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
||||
|
||||
g_scriptMgr.onOutsideRange( player, eventId, param1, x, y, z );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::GamePacket &inPacket,
|
||||
Entity::Player &player )
|
||||
{
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto param1 = inPacket.getValAt< uint16_t >( 0x24 );
|
||||
auto param2 = inPacket.getValAt< uint16_t >( 0x26 );
|
||||
|
||||
std::string eventName = Event::getEventName( eventId );
|
||||
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) );
|
||||
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() );
|
||||
|
||||
g_scriptMgr.onEnterTerritory( player, eventId, param1, param2 );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -157,115 +157,49 @@ bool Core::Scripting::ScriptManager::onTalk( Entity::Player& player, uint64_t ac
|
|||
}
|
||||
|
||||
auto script = m_nativeScriptManager->getScript< EventScript >( ScriptType::ScriptedEvent, scriptId );
|
||||
if( script )
|
||||
script->onTalk( eventId, player, actorId );
|
||||
else
|
||||
if( !script )
|
||||
return false;
|
||||
|
||||
script->onTalk( eventId, player, actorId );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onEnterTerritory( Entity::Player& player, uint32_t eventId,
|
||||
uint16_t param1, uint16_t param2 )
|
||||
{
|
||||
std::string eventName = "onEnterTerritory";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) );
|
||||
|
||||
auto script = m_nativeScriptManager->getScript< EventScript >( ScriptType::ScriptedEvent, eventId );
|
||||
if( script )
|
||||
{
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() );
|
||||
|
||||
script->onEnterZone( player, eventId, param1, param2 );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
if( !script )
|
||||
return false;
|
||||
script->onEnterZone( player, eventId, param1, param2 );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onWithinRange( Entity::Player& player, uint32_t eventId, uint32_t param1,
|
||||
float x, float y, float z )
|
||||
{
|
||||
|
||||
std::string eventName = "onWithinRange";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) + " p1: " + std::to_string( param1 ) );
|
||||
|
||||
auto script = m_nativeScriptManager->getScript< EventScript >( ScriptType::ScriptedEvent, eventId );
|
||||
if( script )
|
||||
{
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
||||
|
||||
script->onWithinRange( player, eventId, param1, x, y, z );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
if( !script )
|
||||
return false;
|
||||
script->onWithinRange( player, eventId, param1, x, y, z );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onOutsideRange( Entity::Player& player, uint32_t eventId, uint32_t param1,
|
||||
float x, float y, float z )
|
||||
{
|
||||
std::string eventName = "onOutsideRange";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) );
|
||||
|
||||
auto script = m_nativeScriptManager->getScript< EventScript >( ScriptType::ScriptedEvent, eventId );
|
||||
if( script )
|
||||
{
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::WithinRange, 1, param1 );
|
||||
|
||||
script->onOutsideRange( player, eventId, param1, x, y, z );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
if( !script )
|
||||
return false;
|
||||
script->onOutsideRange( player, eventId, param1, x, y, z );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onEmote( Entity::Player& player, uint64_t actorId,
|
||||
uint32_t eventId, uint8_t emoteId )
|
||||
{
|
||||
std::string eventName = "onEmote";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
|
||||
auto script = m_nativeScriptManager->getScript< EventScript >( ScriptType::ScriptedEvent, eventId );
|
||||
if( script )
|
||||
{
|
||||
player.sendDebug( "Calling: " + objName + "." + eventName );
|
||||
|
||||
player.eventStart( actorId, eventId, Event::EventHandler::Emote, 0, emoteId );
|
||||
|
||||
script->onEmote( actorId, eventId, emoteId, player );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
}
|
||||
else
|
||||
{
|
||||
uint16_t eventType = eventId >> 16;
|
||||
|
||||
if( eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||
{
|
||||
auto questInfo = g_exdData.getQuestInfo( eventId );
|
||||
if( questInfo )
|
||||
{
|
||||
player.sendUrgent( "Quest not implemented: " + questInfo->name );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if( !script )
|
||||
return false;
|
||||
}
|
||||
|
||||
script->onEmote( actorId, eventId, emoteId, player );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue