From b1ecbb74468be042941de218165070bd6884b758 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 21 Jan 2023 23:46:03 +0100 Subject: [PATCH] WIP fixing contentfinder --- src/common/Network/PacketDef/ClientIpcs.h | 3 ++- src/world/ContentFinder/ContentFinder.cpp | 26 +++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/common/Network/PacketDef/ClientIpcs.h b/src/common/Network/PacketDef/ClientIpcs.h index a65035ff..3149119a 100644 --- a/src/common/Network/PacketDef/ClientIpcs.h +++ b/src/common/Network/PacketDef/ClientIpcs.h @@ -216,7 +216,8 @@ namespace Sapphire::Network::Packets CancelLogoutCountdown = 0x264, FateDebugCommand = 0x265, ContentAction = 0x266, - RequestPenalties = 0x267, + //RequestPenalties = 0x267, + RequestPenalties = 0x2CB, Logout = 0x269, HousingHouseName = 0x026A, diff --git a/src/world/ContentFinder/ContentFinder.cpp b/src/world/ContentFinder/ContentFinder.cpp index b34c9493..af8f97d4 100644 --- a/src/world/ContentFinder/ContentFinder.cpp +++ b/src/world/ContentFinder/ContentFinder.cpp @@ -153,7 +153,11 @@ void Sapphire::World::ContentFinder::completeRegistration( const Sapphire::Entit auto queuedContent = m_queuedContent[ m_queuedPlayer[ player.getId() ]->getActiveRegisterId() ]; auto& exdData = Service< Data::ExdData >::ref(); - auto content = exdData.getRow< Excel::InstanceContent >( queuedContent->getContentFinderId() ); + auto contentFinderCondition = exdData.getRow< Excel::ContentFinderCondition >( queuedContent->getContentFinderId() ); + if( !contentFinderCondition ) + return; + + auto content = exdData.getRow< Excel::InstanceContent >( contentFinderCondition->data().InstanceContentId ); // Undersized if( flags & 0x01 ) @@ -368,7 +372,11 @@ void Sapphire::World::ContentFinder::accept( Entity::Player& player ) auto queuedPlayer = m_queuedPlayer[ player.getId() ]; auto queuedContent = m_queuedContent[ queuedPlayer->getActiveRegisterId() ]; - auto content = exdData.getRow< Excel::InstanceContent >( queuedContent->getContentFinderId() ); + auto contentFinderCondition = exdData.getRow< Excel::ContentFinderCondition >( queuedContent->getContentFinderId() ); + if( !contentFinderCondition ) + return; + + auto content = exdData.getRow< Excel::InstanceContent >( contentFinderCondition->data().InstanceContentId ); // Something has gone quite wrong.. if( queuedContent->getState() != WaitingForAccept ) @@ -413,7 +421,12 @@ void Sapphire::World::ContentFinder::withdraw( Entity::Player& player ) auto& exdData = Service< Data::ExdData >::ref(); auto queuedPlayer = m_queuedPlayer[ player.getId() ]; - auto contentInfo = exdData.getRow< Excel::InstanceContent >( m_queuedContent[ queuedPlayer->getActiveRegisterId() ]->getContentFinderId() ); + + auto contentFinderCondition = exdData.getRow< Excel::ContentFinderCondition >( m_queuedContent[ queuedPlayer->getActiveRegisterId() ]->getContentFinderId() ); + if( !contentFinderCondition ) + return; + + auto contentInfo = exdData.getRow< Excel::InstanceContent >( contentFinderCondition->data().InstanceContentId ); // remove the player from the global CF list m_queuedPlayer.erase( player.getId() ); @@ -442,7 +455,12 @@ void Sapphire::World::ContentFinder::withdraw( Entity::Player& player ) if( updateRegisterIdSet.count( regId ) == 0 ) continue; - auto queuedContentInfo = exdData.getRow< Excel::InstanceContent >( content.second->getContentFinderId() ); + auto contentFinderCondition = exdData.getRow< Excel::ContentFinderCondition >( content.second->getContentFinderId() ); + if( !contentFinderCondition ) + return; + + auto queuedContentInfo = exdData.getRow< Excel::InstanceContent >( contentFinderCondition->data().InstanceContentId ); + auto& playerList = content.second->m_players; for( const auto& pPlayer : playerList ) {