diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index a077d3a3..534acc20 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -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 ); diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index 8d38896f..5b75c77c 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -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 ); diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index 44ad1319..3d9d12a0 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -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 ); +} diff --git a/src/servers/sapphire_zone/Script/ScriptManager.cpp b/src/servers/sapphire_zone/Script/ScriptManager.cpp index 4e8bea37..c073e9b8 100644 --- a/src/servers/sapphire_zone/Script/ScriptManager.cpp +++ b/src/servers/sapphire_zone/Script/ScriptManager.cpp @@ -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; }