From f7d2bb813a9ace03088d30a94de5909490589cec Mon Sep 17 00:00:00 2001 From: Mordred Date: Wed, 19 Sep 2018 23:04:23 +0200 Subject: [PATCH] Fixed !instance cr, it now takes contentfindercondition ids as input though --- src/common/Exd/ExdDataGenerated.cpp | 2 +- src/common/Exd/ExdDataGenerated.h | 2 +- .../sapphire_zone/Network/Handlers/CFHandlers.cpp | 4 ++-- src/servers/sapphire_zone/Zone/InstanceContent.cpp | 3 ++- src/servers/sapphire_zone/Zone/InstanceContent.h | 1 + src/servers/sapphire_zone/Zone/TerritoryMgr.cpp | 14 ++++++++++---- src/servers/sapphire_zone/Zone/TerritoryMgr.h | 2 +- 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index edd86806..dbbd6e37 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -1247,7 +1247,7 @@ Core::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, Cor auto row = exdData->m_ContentFinderConditionDat.get_row( row_id ); territoryType = exdData->getField< uint16_t >( row, 1 ); contentLinkType = exdData->getField< uint8_t >( row, 2 ); - content = exdData->getField< uint16_t >( row, 3 ); + instanceContent = exdData->getField< uint16_t >( row, 3 ); contentMemberType = exdData->getField< uint8_t >( row, 9 ); classJobLevelRequired = exdData->getField< uint8_t >( row, 15 ); classJobLevelSync = exdData->getField< uint8_t >( row, 16 ); diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index db3d2a8e..780e9bf1 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -1551,7 +1551,7 @@ struct ContentFinderCondition { uint16_t territoryType; uint8_t contentLinkType; - uint16_t content; + uint16_t instanceContent; uint8_t contentMemberType; uint8_t classJobLevelRequired; uint8_t classJobLevelSync; diff --git a/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp index df03db4f..a1c76163 100644 --- a/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp @@ -77,12 +77,12 @@ void Core::Network::GameConnection::cfRegisterDuty( const Packets::FFXIVARR_PACK if( !cfCondition ) return; - auto instance = pTeriMgr->createInstanceContent( cfCondition->content ); + auto instance = pTeriMgr->createInstanceContent( cfCondition->instanceContent ); if( !instance ) return; auto pInstance = instance->getAsInstanceContent(); - pInstance->bindPlayer( player.getId() ); +a pInstance->bindPlayer( player.getId() ); player.sendDebug( "Created instance with id: " + std::to_string( instance->getGuId() ) ); diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index 860dbdf6..5e04a430 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -30,12 +30,13 @@ using namespace Core::Network::Packets::Server; using namespace Core::Network::ActorControl; Core::InstanceContent::InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceConfiguration, + uint16_t territoryType, uint32_t guId, const std::string& internalName, const std::string& contentName, uint32_t instanceContentId ) : - Zone( static_cast< uint16_t >( pInstanceConfiguration->territoryType ), guId, internalName, contentName ), + Zone( static_cast< uint16_t >( territoryType ), guId, internalName, contentName ), Director( Event::Director::InstanceContent, instanceContentId ), m_instanceConfiguration( pInstanceConfiguration ), m_instanceContentId( instanceContentId ), diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index f451e0b6..7d4bc945 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -22,6 +22,7 @@ public: }; InstanceContent( boost::shared_ptr< Core::Data::InstanceContent > pInstanceConfiguration, + uint16_t territoryType, uint32_t guId, const std::string& internalName, const std::string& contentName, diff --git a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp index 65e5f964..773a00b9 100644 --- a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp +++ b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp @@ -218,17 +218,23 @@ Core::ZonePtr Core::TerritoryMgr::createTerritoryInstance( uint32_t territoryTyp return pZone; } -Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceContentId ) +Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t contentFinderConditionId ) { + auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + auto pContentFinderCondition = pExdData->get< Core::Data::ContentFinderCondition >( contentFinderConditionId ); + if( !pContentFinderCondition ) + return nullptr; + auto instanceContentId = pContentFinderCondition->instanceContent; + auto pInstanceContent = pExdData->get< Core::Data::InstanceContent >( instanceContentId ); if( !pInstanceContent ) return nullptr; - if( !isInstanceContentTerritory( pInstanceContent->territoryType ) ) + if( !isInstanceContentTerritory( pContentFinderCondition->territoryType ) ) return nullptr; - auto pTeri = getTerritoryDetail( pInstanceContent->territoryType ); + auto pTeri = getTerritoryDetail( pContentFinderCondition->territoryType ); if( !pTeri || pInstanceContent->name.empty() ) return nullptr; @@ -237,7 +243,7 @@ Core::ZonePtr Core::TerritoryMgr::createInstanceContent( uint32_t instanceConten pLog->debug( "Starting instance for InstanceContent id: " + std::to_string( instanceContentId ) + " (" + pInstanceContent->name + ")" ); - auto pZone = make_InstanceContent( pInstanceContent, getNextInstanceId(), + auto pZone = make_InstanceContent( pInstanceContent, pContentFinderCondition->territoryType, getNextInstanceId(), pTeri->name, pInstanceContent->name, instanceContentId ); pZone->init(); diff --git a/src/servers/sapphire_zone/Zone/TerritoryMgr.h b/src/servers/sapphire_zone/Zone/TerritoryMgr.h index 50954a7a..8519ad48 100644 --- a/src/servers/sapphire_zone/Zone/TerritoryMgr.h +++ b/src/servers/sapphire_zone/Zone/TerritoryMgr.h @@ -95,7 +95,7 @@ public: /*! creates a new instance for a given territoryTypeId */ ZonePtr createTerritoryInstance( uint32_t territoryTypeId ); - ZonePtr createInstanceContent( uint32_t instanceContentId ); + ZonePtr createInstanceContent( uint32_t contentFinderConditionId ); /*! removes instance by instanceId, return true if successful */ bool removeTerritoryInstance( uint32_t territoryTypeId );