From 28631f2fef779d1d4f89a7eb50c220007452204a Mon Sep 17 00:00:00 2001 From: collett Date: Thu, 13 Jun 2024 03:25:10 +0900 Subject: [PATCH] update more opcodes, fix Quest exd --- src/common/Exd/ExdDataGenerated.cpp | 2 +- src/common/Exd/ExdDataGenerated.h | 1 + src/common/Network/PacketDef/Ipcs.h | 92 ++++++++++++++--------------- src/world/Manager/MapMgr.cpp | 20 +++++-- 4 files changed, 62 insertions(+), 53 deletions(-) diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index c17bf56f..304e7988 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -8704,7 +8704,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* classJobLevel1 = exdData->getField< uint16_t >( row, 7 ); previousQuestJoin = exdData->getField< uint8_t >( row, 8 ); previousQuest.push_back( exdData->getField< uint32_t >( row, 9 ) ); - previousQuest.push_back( exdData->getField< uint32_t >( row, 10 ) ); + previousQuest0Sequence = exdData->getField< uint8_t >( row, 10 ); previousQuest.push_back( exdData->getField< uint32_t >( row, 11 ) ); previousQuest.push_back( exdData->getField< uint32_t >( row, 12 ) ); questLockJoin = exdData->getField< uint8_t >( row, 13 ); diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index d114bccc..c5eb2062 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -7513,6 +7513,7 @@ struct Quest uint16_t classJobLevel1; uint8_t previousQuestJoin; std::vector< uint32_t > previousQuest; + uint8_t previousQuest0Sequence; uint8_t questLockJoin; std::vector< uint32_t > questLock; uint16_t header; diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 63aa3b5e..daae8d9e 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -74,7 +74,7 @@ enum ServerZoneIpcType : Logout = 0x0378, // updated 6.58 hotfix 2 CFNotify = 0x0279, // updated 6.58 hotfix 2 CFMemberStatus = 0x0079, - CFDutyInfo = 0x1be, // updated 6.48 + CFDutyInfo = 0x2E8, // updated 6.58 hotfix 2? CFPlayerInNeed = 0xF07F, CFPreferredRole = 0x282, // updated 6.58 hotfix 2 CFCancel = 0x384, // updated 6.58 hotfix 2 @@ -87,7 +87,7 @@ enum ServerZoneIpcType : SocialInviteResult = 0x01D7, // updated 5.58h CancelAllianceForming = 0xF0C6, // updated 4.2 - LogMessage = 0x316, // updated 6.48 + LogMessage = 0x19C, // updated 6.58 hotfix 2? Chat = 0x0325, // updated 6.58 hotfix 2 @@ -98,9 +98,9 @@ enum ServerZoneIpcType : ExamineSearchInfo = 0x014A, // updated 6.58 hotfix 2 UpdateSearchInfo = 0x00CF, // updated 6.58 hotfix 2 InitSearchInfo = 0x329, // updated 6.58 hotfix 2 - ExamineSearchComment = 0x199, // updated 6.48 + ExamineSearchComment = 0x244, // updated 6.58 hotfix 2? - ServerNoticeShort = 0x0333, // updated 5.58h + ServerNoticeShort = 0xF333, // updated 5.58h ServerNotice = 0x33B, // updated 6.58 hotfix 2 SetOnlineStatus = 0x285, // updated 6.58 hotfix 2 @@ -108,14 +108,14 @@ enum ServerZoneIpcType : CountdownCancel = 0x2B7, // updated 6.58 hotfix 2 PlayerAddedToBlacklist = 0xe2, // updated 6.48 - PlayerRemovedFromBlacklist = 0xd0, // updated 6.48 + PlayerRemovedFromBlacklist = 0x201, // updated 6.58 hotfix 2? BlackList = 0x38A, // updated 6.58 hotfix 2 LinkshellList = 0x2B2, // updated 6.58 hotfix 2 - CrossWorldLinkshellList = 0x3cc, // updated 6.48 - FellowshipList = 0x1c5, // updated 6.48 + CrossWorldLinkshellList = 0x2EA, // updated 6.58 hotfix 2? + FellowshipList = 0x0BD, // updated 6.58 hotfix 2? - MailDeleteRequest = 0xF1b6, // updated 6.48 + MailDeleteRequest = 0x168, // updated 6.58 hotfix 2? // 12D - 137 - constant gap between 4.5x -> 5.0 ReqMoogleMailList = 0xF138, // updated 5.0 @@ -162,8 +162,8 @@ enum ServerZoneIpcType : SomeCustomiseChangePacketProbably = 0x00CD, // added 5.18 - PartyList = 0x16f, // updated 6.48 - PartyUpdate = 0x336, // updated 6.48 + PartyList = 0x164, // updated 6.58 hotfix 2? + PartyUpdate = 0x2D8, // updated 6.58 hotfix 2? HateRank = 0x2A7, // updated 6.58 hotfix 2 HateList = 0x26B, // updated 6.58 hotfix 2 ObjectSpawn = 0x03B8, // updated 6.58 hotfix 2 @@ -179,7 +179,7 @@ enum ServerZoneIpcType : ModelEquip = 0x27D, // updated 6.58 hotfix 2 Examine = 0x02C0, // updated 6.58 hotfix 2 - CharaNameReq = 0x267, // updated 6.48 + CharaNameReq = 0x33C, // updated 6.58 hotfix 2? // nb: see #565 on github UpdateRetainerItemSalePrice = 0xF19F, // updated 5.0 @@ -210,15 +210,15 @@ enum ServerZoneIpcType : EventStart = 0x0146, // updated 6.58 hotfix 2 EventFinish = 0x0339, // updated 6.58 hotfix 2 - EventReturn = 0xd9, // updated 6.48 + EventReturn = 0x1F3, // updated 6.58 hotfix 2? EventLinkshell = 0x1169, QuestActiveList = 0x247, // updated 6.58 hotfix 2 - QuestUpdate = 0x2f0, // updated 6.48 + QuestUpdate = 0x1A4, // updated 6.58 hotfix 2 QuestCompleteList = 0x352, // updated 6.58 hotfix 2 - QuestFinish = 0xf4, // updated 6.48 + QuestFinish = 0x2BB, // updated 6.58 hotfix 2 MSQTrackerComplete = 0x1A9, // updated 6.58 hotfix 2 MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474 @@ -241,52 +241,52 @@ enum ServerZoneIpcType : CFAvailableContents = 0xF1FD, // updated 4.2 WeatherChange = 0x021D, // updated 6.58 hotfix 2 - PlayerTitleList = 0x17c, // updated 6.48 - Discovery = 0x14f, // updated 6.48 + PlayerTitleList = 0x1FF, // updated 6.58 hotfix 2? + Discovery = 0x11E, // updated 6.58 hotfix 2? - EorzeaTimeOffset = 0x1a2, // updated 6.48 + EorzeaTimeOffset = 0x398, // updated 6.58 hotfix 2? EquipDisplayFlags = 0x33A, // updated 6.58 hotfix 2 MiniCactpotInit = 0x0286, // added 5.31 ShopMessage = 0x016F, // updated 6.58 hotfix 2 - LootMessage = 0x219, // updated 6.48 + LootMessage = 0x265, // updated 6.58 hotfix 2 ResultDialog = 0x0362, // updated 6.58 hotfix 2 DesynthResult = 0x007F, // updated 6.58 hotfix 2 /// Housing ////////////////////////////////////// LandSetInitialize = 0x1C9, // updated 6.58 hotfix 2 - LandUpdate = 0x26c, // updated 6.48 - LandAvailability = 0x258, // updated 6.48 - YardObjectSpawn = 0x2c0, // updated 6.48 - HousingIndoorInitialize = 0x24f, // updated 6.48 - LandPriceUpdate = 0x94, // updated 6.48 - LandInfoSign = 0x330, // updated 6.48 - LandRename = 0x255, // updated 6.48 - HousingEstateGreeting = 0x253, // updated 6.48 - HousingUpdateLandFlagsSlot = 0x3a1, // updated 6.48 + LandUpdate = 0x1AB, // updated 6.58 hotfix 2? + LandAvailability = 0xF258, // updated 6.48 + YardObjectSpawn = 0x0D1, // updated 6.58 hotfix 2? + HousingIndoorInitialize = 0x084, // updated 6.58 hotfix 2? + LandPriceUpdate = 0x0F1, // updated 6.58 hotfix 2? + LandInfoSign = 0x15F, // updated 6.58 hotfix 2? + LandRename = 0x09B, // updated 6.58 hotfix 2? + HousingEstateGreeting = 0x298, // updated 6.58 hotfix 2? + HousingUpdateLandFlagsSlot = 0x151, // updated 6.58 hotfix 2? HousingLandFlags = 0x330, // updated 6.58 hotfix 2 - HousingShowEstateGuestAccess = 0x2f2, // updated 6.48 + HousingShowEstateGuestAccess = 0x0E6, // updated 6.58 hotfix 2? HousingObjectInitialize = 0x1AA, // updated 6.58 hotfix 2 - HousingInternalObjectSpawn = 0x31c, // updated 6.48 + HousingInternalObjectSpawn = 0x2D7, // updated 6.58 hotfix 2? HousingWardInfo = 0x327, // updated 6.58 hotfix 2? HousingObjectMove = 0x21b, // updated 6.48 - HousingObjectDye = 0x2a6, // updated 6.48 + HousingObjectDye = 0x333, // updated 6.58 hotfix 2? - SharedEstateSettingsResponse = 0x2d1, // updated 6.48 + SharedEstateSettingsResponse = 0x25B, // updated 6.58 hotfix 2? - LandUpdateHouseName = 0x98, // updated 6.48 - LandSetMap = 0x366, // updated 6.48 + LandUpdateHouseName = 0x0B5, // updated 6.58 hotfix 2? + LandSetMap = 0x0A6, // updated 6.58 hotfix 2? - CeremonySetActorAppearance = 0x3be, // updated 6.48 + CeremonySetActorAppearance = 0x140, // updated 6.58 hotfix 2? ////////////////////////////////////////////////// DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui - PerformNote = 0x12a, // updated 6.48 + PerformNote = 0x266, // updated 6.58 hotfix 2? DutyGauge = 0x02E5, // updated 5.58h @@ -295,11 +295,11 @@ enum ServerZoneIpcType : DailyQuestRepeatFlags = 0x134, // updated 6.58 hotfix 2 MapUpdate = 0xF0A3, // updated 6.48 - MapUpdate4 = 0xF345, // updated 6.48 - MapUpdate8 = 0xF10c, // updated 6.48 - MapUpdate16 = 0xF360, // updated 6.48 - MapUpdate32 = 0xF1b1, // updated 6.48 - MapUpdate64 = 0xF325, // updated 6.48 + MapUpdate4 = 0x345, // updated 6.58 hotfix 2 + MapUpdate8 = 0x114, // updated 6.58 hotfix 2 + MapUpdate16 = 0x2CE, // updated 6.58 hotfix 2 + MapUpdate32 = 0x205, // updated 6.58 hotfix 2 + MapUpdate64 = 0x1FC, // updated 6.58 hotfix 2 MapUpdate128 = 0xF09c, // updated 6.48 /// Doman Mahjong ////////////////////////////////////// @@ -326,7 +326,7 @@ enum ServerZoneIpcType : SubmarineExplorationResult = 0x02AA, // updated 6.58 hotfix 2 EnvironmentControl = 0x02FC, // updated 6.58 hotfix 2 - RSVData = 0x212, // updated 6.48 + RSVData = 0x065, // updated 6.58 hotfix 2? IslandWorkshopSupplyDemand = 0x013C, // updated 6.58 hotfix 2 }; @@ -388,7 +388,7 @@ enum ClientZoneIpcType : ReqJoinNoviceNetwork = 0x0129, // updated 4.2 ReqCountdownInitiate = 0x03E3, // updated 6.58 hotfix 2 - ReqCountdownCancel = 0x023a, // updated 6.31h + ReqCountdownCancel = 0xF23a, // updated 6.31h ZoneLineHandler = 0x326, // updated 6.58 hotfix 2 ClientTrigger = 0x035C, // updated 6.58 hotfix 2 @@ -410,13 +410,13 @@ enum ClientZoneIpcType : TalkEventHandler = 0x23A, // updated 6.58 hotfix 2 EmoteEventHandler = 0x00B0, // updated 5.58h - WithinRangeEventHandler = 0x1b9, // updated 6.48 - OutOfRangeEventHandler = 0x263, // updated 6.48 + WithinRangeEventHandler = 0x38E, // updated 6.58 hotfix 2 + OutOfRangeEventHandler = 0x1B5, // updated 6.58 hotfix 2 EnterTeriEventHandler = 0x105, // updated 6.58 hotfix 2 ShopEventHandler = 0xF384, // updated 5.58h ReturnEventHandler = 0x07D, // updated 6.58 hotfix 2 - TradeReturnEventHandler = 0x37D, // updated 6.58 hotfix 2 - TradeReturnEventHandler2 = 0x354, // updated 6.48 + TradeReturnEventHandler = 0x166, // updated 6.58 hotfix 2 + TradeReturnEventHandler2 = 0x37D, // updated 6.58 hotfix 2 EventYield2Handler = 0x021D, // updated 5.58h EventYield16Handler = 0x0207, // updated 5.58h diff --git a/src/world/Manager/MapMgr.cpp b/src/world/Manager/MapMgr.cpp index 5d0a5bcf..34c3fd58 100644 --- a/src/world/Manager/MapMgr.cpp +++ b/src/world/Manager/MapMgr.cpp @@ -67,7 +67,7 @@ void Sapphire::World::Manager::MapMgr::updateAll( Entity::Player& player ) { auto quest = m_quests[ npcData ]; - if( quest && quest->issuerLocation == eventNpc.first ) + if( quest->issuerLocation == eventNpc.first ) { insertQuest( player, npcData, mapData ); } @@ -176,7 +176,7 @@ void Sapphire::World::Manager::MapMgr::updateAll( Entity::Player& player ) { auto quest = m_quests[ eObjData ]; - if( quest && quest->issuerLocation == eventObj.first ) + if( quest->issuerLocation == eventObj.first ) { insertQuest( player, eObjData, mapData ); } @@ -219,7 +219,7 @@ void Sapphire::World::Manager::MapMgr::updateQuests( Entity::Player& player ) { auto quest = m_quests[ npcData ]; - if( quest && quest->issuerLocation == eventNpc.first ) + if( quest->issuerLocation == eventNpc.first ) { insertQuest( player, npcData, mapData ); } @@ -249,7 +249,7 @@ void Sapphire::World::Manager::MapMgr::updateQuests( Entity::Player& player ) { auto quest = m_quests[ eObjData ]; - if( quest && quest->issuerLocation == eventObj.first ) + if( quest->issuerLocation == eventObj.first ) { insertQuest( player, eObjData, mapData ); } @@ -269,7 +269,7 @@ void Sapphire::World::Manager::MapMgr::insertQuest( Entity::Player& player, uint auto quest = m_quests[ questId ]; - if( quest && isQuestVisible( player, questId, quest ) ) + if( isQuestVisible( player, questId, quest ) ) { auto script = scriptMgr.getNativeScriptHandler().getScript< Sapphire::ScriptAPI::EventScript >( questId ); @@ -423,7 +423,15 @@ bool Sapphire::World::Manager::MapMgr::isQuestVisible( Entity::Player& player, u if( !player.isQuestCompleted( questPtr->previousQuest[ i ] ) ) { - return false; + if( i == 0 && questPtr->previousQuest0Sequence != 0 ) + { + if( player.getQuestSeq( questPtr->previousQuest[ i ] ) < questPtr->previousQuest0Sequence ) + return false; + } + else + { + return false; + } } } }