From 0f982a46d12739bb073e73bf666d769a564e321f Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 7 Jan 2025 14:22:42 +0100 Subject: [PATCH] Fixed battleTalk --- data/EncounterTimelines/IfritNormal.json | 12 ++++++------ src/common/Network/PacketDef/Zone/ServerZoneDef.h | 1 + src/world/Encounter/Timepoint.cpp | 13 ++++++++++++- src/world/Manager/PlayerMgr.cpp | 4 ++-- src/world/Manager/PlayerMgr.h | 2 +- src/world/Network/Util/PacketUtil.cpp | 3 ++- src/world/Network/Util/PacketUtil.h | 2 +- 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/data/EncounterTimelines/IfritNormal.json b/data/EncounterTimelines/IfritNormal.json index f78401f8..ff279514 100644 --- a/data/EncounterTimelines/IfritNormal.json +++ b/data/EncounterTimelines/IfritNormal.json @@ -105,10 +105,10 @@ }, { "data": { - "battleTalkId": 2939, + "battleTalkId": 2601, "handlerActorName": "Ifrit", - "kind": 1, - "nameId": 2961, + "kind": 2, + "nameId": 1185, "params": [ 0 ], @@ -219,10 +219,10 @@ "timepoints": [ { "data": { - "battleTalkId": 2939, + "battleTalkId": 2602, "handlerActorName": "Ifrit", - "kind": 1, - "nameId": 2961, + "kind": 2, + "nameId": 1185, "params": [ 0 ], diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 694f9b1c..081e6308 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1273,6 +1273,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server struct FFXIVIpcBattleTalkN { uint32_t handlerId; + uint32_t padding; uint64_t talkerId; uint8_t kind; uint8_t __padding1; diff --git a/src/world/Encounter/Timepoint.cpp b/src/world/Encounter/Timepoint.cpp index ff2308b1..cd238f47 100644 --- a/src/world/Encounter/Timepoint.cpp +++ b/src/world/Encounter/Timepoint.cpp @@ -508,12 +508,23 @@ namespace Sapphire::Encounter // todo: use Actrl EventBattleDialog = 0x39C maybe?, auto& playerMgr = Common::Service< Sapphire::World::Manager::PlayerMgr >::ref(); + + // todo: this does not always need to be a director, and can also be an eventhandler + // needs further investigation + Event::DirectorPtr pDirector = pTeri->getAsInstanceContent(); + if( pDirector == nullptr ) + pDirector = pTeri->getAsQuestBattle(); + + if( pDirector ) + handlerId = pDirector->getDirectorId(); + for( auto& player : pTeri->getPlayers() ) { + auto& pPlayer = player.second; if( pPlayer ) playerMgr.sendBattleTalk( *pPlayer.get(), pBtData->m_battleTalkId, handlerId, - pBtData->m_kind, pBtData->m_nameId, talkerId, + pBtData->m_kind, pBtData->m_nameId, talkerId, m_duration, params[ 0 ], params[ 1 ], params[ 2 ], params[ 3 ], params[ 4 ], params[ 5 ], params[ 6 ], params[ 7 ] ); } diff --git a/src/world/Manager/PlayerMgr.cpp b/src/world/Manager/PlayerMgr.cpp index 44e50de9..8767912a 100644 --- a/src/world/Manager/PlayerMgr.cpp +++ b/src/world/Manager/PlayerMgr.cpp @@ -464,11 +464,11 @@ void PlayerMgr::sendLogMessage( Entity::Player& player, uint32_t messageId, uint } void PlayerMgr::sendBattleTalk( Sapphire::Entity::Player& player, uint32_t battleTalkId, uint32_t handlerId, - uint32_t kind, uint32_t nameId, uint32_t talkerId, + uint32_t kind, uint32_t nameId, uint32_t talkerId, uint32_t time, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, uint32_t param5, uint32_t param6, uint32_t param7, uint32_t param8 ) { - Network::Util::Packet::sendBattleTalk( player, battleTalkId, handlerId, kind, nameId, talkerId, + Network::Util::Packet::sendBattleTalk( player, battleTalkId, handlerId, kind, nameId, talkerId, time, param1, param2, param3, param4, param5, param6, param7, param8 ); } diff --git a/src/world/Manager/PlayerMgr.h b/src/world/Manager/PlayerMgr.h index d88a8960..226fc19b 100644 --- a/src/world/Manager/PlayerMgr.h +++ b/src/world/Manager/PlayerMgr.h @@ -76,7 +76,7 @@ namespace Sapphire::World::Manager uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 ); static void sendBattleTalk( Sapphire::Entity::Player& player, uint32_t battleTalkId, uint32_t handlerId, uint32_t kind, - uint32_t nameId, uint32_t talkerId, + uint32_t nameId, uint32_t talkerId, uint32_t time, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0, uint32_t param7 = 0, uint32_t param8 = 0 ); diff --git a/src/world/Network/Util/PacketUtil.cpp b/src/world/Network/Util/PacketUtil.cpp index 2c03de54..1df5824e 100644 --- a/src/world/Network/Util/PacketUtil.cpp +++ b/src/world/Network/Util/PacketUtil.cpp @@ -168,7 +168,7 @@ void Util::Packet::sendActorControlTarget( const std::set< uint64_t >& character } void Sapphire::Network::Util::Packet::sendBattleTalk( Sapphire::Entity::Player& player, uint32_t battleTalkId, uint32_t handlerId, - uint32_t kind, uint32_t nameId, uint32_t talkerId, + uint32_t kind, uint32_t nameId, uint32_t talkerId, uint32_t time, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, uint32_t param5, uint32_t param6, uint32_t param7, uint32_t param8 ) { @@ -179,6 +179,7 @@ void Sapphire::Network::Util::Packet::sendBattleTalk( Sapphire::Entity::Player& data.nameId = nameId; data.kind = kind; data.talkerId = talkerId; + data.time = time; data.args[ 0 ] = param1; data.args[ 1 ] = param2; diff --git a/src/world/Network/Util/PacketUtil.h b/src/world/Network/Util/PacketUtil.h index 0aa7739b..a3443fda 100644 --- a/src/world/Network/Util/PacketUtil.h +++ b/src/world/Network/Util/PacketUtil.h @@ -70,7 +70,7 @@ namespace Sapphire::Network::Util::Packet uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 ); void sendBattleTalk( Sapphire::Entity::Player& player, uint32_t battleTalkId, uint32_t handlerId, - uint32_t kind, uint32_t nameId, uint32_t talkerId, + uint32_t kind, uint32_t nameId, uint32_t talkerId, uint32_t time, uint32_t param1 = 0, uint32_t param2= 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6= 0, uint32_t param7 = 0, uint32_t param8 = 0 ); } \ No newline at end of file