mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-25 11:07:45 +00:00
new event yield handler
This commit is contained in:
parent
d0e2de1abf
commit
8416e5d5e2
12 changed files with 62 additions and 53 deletions
|
@ -1312,18 +1312,6 @@ namespace Sapphire::Common
|
||||||
GetGil = 9, // p1: gil
|
GetGil = 9, // p1: gil
|
||||||
EmptyCoffer = 11, // seems like no param
|
EmptyCoffer = 11, // seems like no param
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EventSaveData
|
|
||||||
{
|
|
||||||
uint32_t eventId;
|
|
||||||
uint16_t scene;
|
|
||||||
uint16_t unknown1;
|
|
||||||
uint32_t params[11];
|
|
||||||
uint64_t unknown2;
|
|
||||||
uint8_t unknown3[4];
|
|
||||||
uint64_t unknown4;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -194,14 +194,7 @@ namespace Sapphire::Network::Packets
|
||||||
EventPlay128 = 0x026E, // updated 5.58
|
EventPlay128 = 0x026E, // updated 5.58
|
||||||
EventPlay255 = 0x039E, // updated 5.58
|
EventPlay255 = 0x039E, // updated 5.58
|
||||||
|
|
||||||
EventYield = 0x0123, // updated 5.58
|
EventContinue = 0x0123, // updated 5.58
|
||||||
//EventYield4 = 0x0000,
|
|
||||||
//EventYield8 = 0x0000,
|
|
||||||
//EventYield16 = 0x0000,
|
|
||||||
//EventYield32 = 0x0000,
|
|
||||||
//EventYield64 = 0x0000,
|
|
||||||
//EventYield128 = 0x0000,
|
|
||||||
//EventYield255 = 0x0000,
|
|
||||||
|
|
||||||
EventStart = 0x01CC, // updated 5.58
|
EventStart = 0x01CC, // updated 5.58
|
||||||
EventFinish = 0x0180, // updated 5.58
|
EventFinish = 0x0180, // updated 5.58
|
||||||
|
@ -401,7 +394,7 @@ namespace Sapphire::Network::Packets
|
||||||
ReturnEventHandler = 0x0333, // updated 5.58
|
ReturnEventHandler = 0x0333, // updated 5.58
|
||||||
TradeReturnEventHandler = 0x0179, // updated 5.58
|
TradeReturnEventHandler = 0x0179, // updated 5.58
|
||||||
TradeReturnEventHandler2 = 0x02E1, // updated 5.58
|
TradeReturnEventHandler2 = 0x02E1, // updated 5.58
|
||||||
SaveDataEventHandler = 0x03D7, // updated 5.58
|
EventYield16Handler = 0x03D7, // updated 5.58
|
||||||
|
|
||||||
LinkshellEventHandler = 0x016B, // updated 4.5
|
LinkshellEventHandler = 0x016B, // updated 4.5
|
||||||
LinkshellEventHandler1 = 0x016C, // updated 4.5
|
LinkshellEventHandler1 = 0x016C, // updated 4.5
|
||||||
|
|
|
@ -446,10 +446,22 @@ struct FFXIVIpcHousingEditInterior :
|
||||||
uint16_t slot[10];
|
uint16_t slot[10];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FFXIVIpcSaveDataEventHandler :
|
struct FFXIVIpcEventYieldHandler :
|
||||||
FFXIVIpcBasePacket< SaveDataEventHandler >
|
FFXIVIpcBasePacket< EventYieldHandler >
|
||||||
{
|
{
|
||||||
Common::EventSaveData data;
|
uint32_t eventId;
|
||||||
|
uint16_t scene;
|
||||||
|
uint16_t padding;
|
||||||
|
uint64_t unknown;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FFXIVIpcEventYield16Handler :
|
||||||
|
FFXIVIpcBasePacket< EventYield16Handler >
|
||||||
|
{
|
||||||
|
uint32_t eventId;
|
||||||
|
uint16_t scene;
|
||||||
|
uint16_t padding;
|
||||||
|
uint32_t params[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FFXIVIpcCFCommenceHandler :
|
struct FFXIVIpcCFCommenceHandler :
|
||||||
|
|
|
@ -2253,7 +2253,7 @@ namespace Sapphire::Network::Packets::Server
|
||||||
uint8_t padding[3];
|
uint8_t padding[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FFXIVIpcEventYield : FFXIVIpcBasePacket< EventYield >
|
struct FFXIVIpcEventContinue : FFXIVIpcBasePacket< EventContinue >
|
||||||
{
|
{
|
||||||
uint32_t eventId;
|
uint32_t eventId;
|
||||||
uint16_t scene;
|
uint16_t scene;
|
||||||
|
|
|
@ -508,22 +508,22 @@ public:
|
||||||
onProgress( player, param1, param2, 4, 0 );
|
onProgress( player, param1, param2, 4, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSaveData( Sapphire::Entity::Player& player, const Common::EventSaveData& data ) override
|
void onEventYield( Sapphire::Entity::Player& player, uint16_t scene, std::vector< uint32_t > param ) override
|
||||||
{
|
{
|
||||||
if( data.scene == 69 )
|
if( scene == 69 )
|
||||||
{
|
{
|
||||||
player.setQuestUI8AH( getId(), data.params[0] );
|
player.setQuestUI8AH( getId(), param[0] );
|
||||||
player.setQuestUI8AL( getId(), data.params[1] );
|
player.setQuestUI8AL( getId(), param[1] );
|
||||||
player.setQuestUI8BH( getId(), data.params[2] );
|
player.setQuestUI8BH( getId(), param[2] );
|
||||||
player.setQuestUI8BL( getId(), data.params[3] );
|
player.setQuestUI8BL( getId(), param[3] );
|
||||||
player.setQuestUI8CH( getId(), data.params[4] );
|
player.setQuestUI8CH( getId(), param[4] );
|
||||||
player.setQuestUI8CL( getId(), data.params[5] );
|
player.setQuestUI8CL( getId(), param[5] );
|
||||||
player.setQuestUI8DH( getId(), data.params[6] );
|
player.setQuestUI8DH( getId(), param[6] );
|
||||||
player.setQuestUI8DL( getId(), data.params[7] );
|
player.setQuestUI8DL( getId(), param[7] );
|
||||||
|
|
||||||
// retail does not save these two values here, we borrow them since they are unused.
|
// retail does not save these two values here, we borrow them since they are unused.
|
||||||
player.setQuestUI8FH( getId(), data.params[8] );
|
player.setQuestUI8FH( getId(), param[8] );
|
||||||
player.setQuestUI8FL( getId(), data.params[9] );
|
player.setQuestUI8FL( getId(), param[9] );
|
||||||
player.sendDebug( "Ceremony settings saved." );
|
player.sendDebug( "Ceremony settings saved." );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,8 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH
|
||||||
setZoneHandler( ClientZoneIpcType::TradeReturnEventHandler, "TradeReturnEventHandler",
|
setZoneHandler( ClientZoneIpcType::TradeReturnEventHandler, "TradeReturnEventHandler",
|
||||||
&GameConnection::eventHandlerReturn );
|
&GameConnection::eventHandlerReturn );
|
||||||
setZoneHandler( ClientZoneIpcType::TradeReturnEventHandler2, "TradeReturnEventHandler2", &GameConnection::eventHandlerReturn );
|
setZoneHandler( ClientZoneIpcType::TradeReturnEventHandler2, "TradeReturnEventHandler2", &GameConnection::eventHandlerReturn );
|
||||||
setZoneHandler( ClientZoneIpcType::SaveDataEventHandler, "SaveDataEventHandler", &GameConnection::saveDataEventHandler );
|
setZoneHandler( ClientZoneIpcType::EventYieldHandler, "EventYieldHandler", &GameConnection::eventYieldHandler );
|
||||||
|
setZoneHandler( ClientZoneIpcType::EventYield16Handler, "EventYield16Handler", &GameConnection::eventYieldHandler );
|
||||||
|
|
||||||
setZoneHandler( ClientZoneIpcType::ShopEventHandler, "ShopEventHandler",
|
setZoneHandler( ClientZoneIpcType::ShopEventHandler, "ShopEventHandler",
|
||||||
&GameConnection::eventHandlerShop );
|
&GameConnection::eventHandlerShop );
|
||||||
|
|
|
@ -209,7 +209,7 @@ namespace Sapphire::Network
|
||||||
|
|
||||||
DECLARE_HANDLER( disbandPartyHandler );
|
DECLARE_HANDLER( disbandPartyHandler );
|
||||||
|
|
||||||
DECLARE_HANDLER( saveDataEventHandler );
|
DECLARE_HANDLER( eventYieldHandler );
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,24 +303,39 @@ void Sapphire::Network::GameConnection::eventHandlerShop( const Packets::FFXIVAR
|
||||||
scriptMgr.onTalk( player, player.getId(), eventId );
|
scriptMgr.onTalk( player, player.getId(), eventId );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Network::GameConnection::saveDataEventHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
void Sapphire::Network::GameConnection::eventYieldHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||||
{
|
{
|
||||||
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref();
|
||||||
auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref();
|
auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref();
|
||||||
|
|
||||||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcSaveDataEventHandler >( inPacket );
|
auto opcode = *reinterpret_cast< const uint16_t* >( &inPacket.data[ 2 ] );
|
||||||
|
auto eventId = *reinterpret_cast< const uint32_t* >( &inPacket.data[ 0x10 + 0 ] );
|
||||||
|
auto scene = *reinterpret_cast< const uint16_t* >( &inPacket.data[ 0x10 + 4 ] );
|
||||||
|
auto pParam = reinterpret_cast< const uint32_t* >( &inPacket.data[ 0x10 + 8 ] );
|
||||||
|
|
||||||
const auto eventId = packet.data().data.eventId;
|
std::vector< uint32_t > param;
|
||||||
|
|
||||||
std::string eventName = "onSaveData";
|
switch( opcode )
|
||||||
|
{
|
||||||
|
case EventYield16Handler:
|
||||||
|
{
|
||||||
|
for( int i = 0; i < 16; i++ )
|
||||||
|
{
|
||||||
|
param.push_back( pParam[ i ] );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string eventName = "onEventYield";
|
||||||
std::string objName = eventMgr.getEventName( eventId );
|
std::string objName = eventMgr.getEventName( eventId );
|
||||||
player.sendDebug( "Calling: {0}.{1} - {2} scene: {3}", objName, eventName, eventId, packet.data().data.scene );
|
player.sendDebug( "Calling: {0}.{1} - {2} scene: {3}", objName, eventName, eventId, scene );
|
||||||
|
|
||||||
scriptMgr.onSaveData( player, packet.data().data );
|
scriptMgr.onEventYield( player, eventId, scene, param );
|
||||||
|
|
||||||
auto response = makeZonePacket< FFXIVIpcEventYield >( player.getId() );
|
auto response = makeZonePacket< FFXIVIpcEventContinue >( player.getId() );
|
||||||
response->data().eventId = eventId;
|
response->data().eventId = eventId;
|
||||||
response->data().scene = packet.data().data.scene;
|
response->data().scene = scene;
|
||||||
player.queuePacket( response );
|
player.queuePacket( response );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ namespace Sapphire::ScriptAPI
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventScript::onSaveData( Sapphire::Entity::Player& player, const Common::EventSaveData& data )
|
void EventScript::onEventYield( Sapphire::Entity::Player& player, uint16_t scene, std::vector< uint32_t > param )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,7 @@ namespace Sapphire::ScriptAPI
|
||||||
|
|
||||||
virtual void onEObjHit( Sapphire::Entity::Player& player, uint64_t actorId, uint32_t actionId );
|
virtual void onEObjHit( Sapphire::Entity::Player& player, uint64_t actorId, uint32_t actionId );
|
||||||
|
|
||||||
virtual void onSaveData( Sapphire::Entity::Player& player, const Common::EventSaveData& data );
|
virtual void onEventYield( Sapphire::Entity::Player& player, uint16_t scene, std::vector< uint32_t > param );
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -588,12 +588,12 @@ bool Sapphire::Scripting::ScriptMgr::onDutyComplete( Sapphire::QuestBattlePtr in
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Sapphire::Scripting::ScriptMgr::onSaveData( Sapphire::Entity::Player& player, const Sapphire::Common::EventSaveData& data )
|
bool Sapphire::Scripting::ScriptMgr::onEventYield( Sapphire::Entity::Player& player, uint32_t eventId, uint16_t scene, std::vector< uint32_t > param )
|
||||||
{
|
{
|
||||||
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( data.eventId );
|
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId );
|
||||||
if( script )
|
if( script )
|
||||||
{
|
{
|
||||||
script->onSaveData( player, data );
|
script->onEventYield( player, scene, param );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ namespace Sapphire::Scripting
|
||||||
|
|
||||||
bool onDutyComplete( QuestBattlePtr instance, Entity::Player& player );
|
bool onDutyComplete( QuestBattlePtr instance, Entity::Player& player );
|
||||||
|
|
||||||
bool onSaveData( Entity::Player& player, const Common::EventSaveData& data );
|
bool onEventYield( Entity::Player& player, uint32_t eventId, uint16_t scene, std::vector< uint32_t > param );
|
||||||
|
|
||||||
bool onPublicContentInit( PublicContentPtr instance );
|
bool onPublicContentInit( PublicContentPtr instance );
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue