From 0fe75c373e56bbfacc1906173f4659b6412c35d0 Mon Sep 17 00:00:00 2001 From: collett Date: Wed, 15 Sep 2021 01:06:45 +0900 Subject: [PATCH 1/2] fix the loading of some quest battles --- src/world/Manager/TerritoryMgr.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index 825af480..2e880256 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -302,7 +302,26 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createQuestBattle if( !pQuestBattleInfo ) return nullptr; - auto pQuestInfo = exdData.get< Sapphire::Data::Quest >( pQuestBattleInfo->quest ); + auto questId = pQuestBattleInfo->quest; + + if( questId > 0x1FFFF ) + { + auto arrayEventHandler = exdData.get< Sapphire::Data::ArrayEventHandler >( questId ); + if( arrayEventHandler ) + { + int i = 0; + while( i < arrayEventHandler->data.size() ) + { + auto nextId = arrayEventHandler->data[ i ]; + if( nextId == 0 ) + break; + questId = nextId; + i++; + } + } + } + + auto pQuestInfo = exdData.get< Sapphire::Data::Quest >( questId ); if( !pQuestInfo ) return nullptr; From 1fa5aadf1c83911f741edfffe7b283f8ff594db8 Mon Sep 17 00:00:00 2001 From: collett Date: Wed, 15 Sep 2021 16:55:45 +0900 Subject: [PATCH 2/2] update proper event type check --- src/world/Manager/TerritoryMgr.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index 2e880256..0b46881b 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -302,26 +302,28 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createQuestBattle if( !pQuestBattleInfo ) return nullptr; - auto questId = pQuestBattleInfo->quest; - - if( questId > 0x1FFFF ) + auto eventId = pQuestBattleInfo->quest; + auto eventType = static_cast< Event::EventHandler::EventHandlerType >( eventId >> 16 ); + switch( eventType ) { - auto arrayEventHandler = exdData.get< Sapphire::Data::ArrayEventHandler >( questId ); - if( arrayEventHandler ) + case Event::EventHandler::EventHandlerType::Array: { - int i = 0; - while( i < arrayEventHandler->data.size() ) + auto eventArray = exdData.get< Sapphire::Data::ArrayEventHandler >( eventId ); + if( eventArray ) { - auto nextId = arrayEventHandler->data[ i ]; - if( nextId == 0 ) - break; - questId = nextId; - i++; + for( int i = 0; i < eventArray->data.size(); i++ ) + { + auto nextId = eventArray->data[ i ]; + if( nextId == 0 ) + break; + eventId = nextId; + } } + break; } } - auto pQuestInfo = exdData.get< Sapphire::Data::Quest >( questId ); + auto pQuestInfo = exdData.get< Sapphire::Data::Quest >( eventId ); if( !pQuestInfo ) return nullptr;