1
Fork 0
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:
Mordred 2018-01-16 02:16:48 +01:00
parent 147ff80f86
commit 52f341c906
4 changed files with 125 additions and 150 deletions

View file

@ -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 );

View file

@ -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 );

View file

@ -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 );
}

View file

@ -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;
}