From 41b6b6024f7e5f53dcea982f1ab1ba140a15aed4 Mon Sep 17 00:00:00 2001 From: Rey Date: Wed, 16 Mar 2022 10:54:29 -0500 Subject: [PATCH] Updated PlayerSetup to perch's more updated one. It did fix the aetheryte list in game. Removed a bunch of stuff for wedding when playing the cutscene crashed the game due to lack of opcodes. Playing a cutscene in the wedding instance is done via this command: !script debug 2147745793 (Cutscene) For example the enter wedding cutscene is 664 !script debug 2147745793 664 --- src/common/Network/PacketDef/Ipcs.h | 2 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 8 +- .../instances/wedding/SanctumOfTheTwelve.cpp | 124 +----------------- src/world/Manager/DebugCommandMgr.cpp | 39 +++++- 4 files changed, 43 insertions(+), 130 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 043a424d..623aeac1 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -334,7 +334,7 @@ namespace Sapphire::Network::Packets CancelLogout = 0x01AC, // updated 5.58 hotfix CFDutyInfoHandler = 0xF078, // updated 4.2 - SocialReqSendHandler = 0x00D7, // updated 5.58 hotfix + SocialReqSendHandler = 0x021C, // updated 6.08 SocialResponseHandler = 0x0193, // updated 6.08 CreateCrossWorldLS = 0x035D, // updated 5.58 hotfix diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index c9f24fc0..11f96c9d 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1039,13 +1039,13 @@ namespace Sapphire::Network::Packets::Server uint8_t unknown293[16]; uint8_t unknown2A3; uint8_t unlockBitmask[64]; - uint8_t aetheryte[21]; + uint8_t aetheryte[26]; uint8_t favoriteAetheryteIds[4]; uint8_t freeAetheryteId; uint8_t discovery[464]; - uint8_t howto[35]; + uint8_t howto[36]; uint8_t minions[56]; - uint8_t chocoboTaxiMask[10]; + uint8_t chocoboTaxiMask[12]; uint8_t watchedCutscenes[144]; uint8_t companionBardingMask[11]; uint8_t companionEquippedHead; @@ -1072,7 +1072,7 @@ namespace Sapphire::Network::Packets::Server uint8_t tripleTriadCards[43]; uint8_t unknown7D7; uint8_t unknown7D8[14]; - uint8_t unknown7E6[36]; + uint8_t unknown7E6[47]; uint8_t unknown80A[6]; uint8_t orchestrionMask[64]; uint8_t hallOfNoviceCompletion[3]; diff --git a/src/scripts/instances/wedding/SanctumOfTheTwelve.cpp b/src/scripts/instances/wedding/SanctumOfTheTwelve.cpp index 3beedffe..ce83ecce 100644 --- a/src/scripts/instances/wedding/SanctumOfTheTwelve.cpp +++ b/src/scripts/instances/wedding/SanctumOfTheTwelve.cpp @@ -694,129 +694,15 @@ public: player.playScene( instance.getDirectorId(), 1, HIDE_HOTBAR, 0, 2, 4, callback ); } - void onDebug( Entity::Player& player, uint32_t param ) override + void onDebug(Entity::Player& player, uint32_t param) override { auto instance = player.getCurrentPublicContent(); - - auto p1 = instance->getPlayer(instance->getCustomVar(1)); - auto p2 = instance->getPlayer(instance->getCustomVar(2)); - if (!p1 || !p2) - { - instance->setSequence(1); - instance->foreachPlayer([](auto p) - { - p->sendUrgent("Failed to start the scene, missing main actors."); - }); + if (!instance || instance->getDirectorId() != getId()) return; - } - FFXIVCeremonySetActorAppearance packetData = {}; - auto qBL = instance->getCustomVar(101); - packetData.questBL = qBL; - packetData.u1 = 1; - if (!(p1->getEquipDisplayFlags() & Sapphire::Common::EquipDisplayFlags::HideWeapon)) - { - packetData.actors[0].mainWeaponModel = p1->getModelMainWeapon(); - packetData.actors[0].secWeaponModel = p1->getModelSubWeapon(); - } - packetData.actors[0].charId = p1->getId(); - packetData.actors[0].guardianDeity = p1->getGuardianDeity(); - packetData.actors[0].models[Common::GearModelSlot::ModelHead] = p1->getModelForSlot(Common::GearModelSlot::ModelHead); - if ((p1->getModelForSlot(Common::GearModelSlot::ModelHead) & 0xFF) == 208) - { - instance->foreachPlayer([](auto p) - { - p->sendUrgent("Replacing p1 viel Model"); - }); - uint32_t gear = p1->getModelForSlot(Common::GearModelSlot::ModelHead) & 0xFFFFFF00; - packetData.actors[0].models[Common::GearModelSlot::ModelHead] = gear | 0xC7; - } - packetData.actors[0].models[Common::GearModelSlot::ModelBody] = p1->getModelForSlot(Common::GearModelSlot::ModelBody); - packetData.actors[0].models[Common::GearModelSlot::ModelHands] = p1->getModelForSlot(Common::GearModelSlot::ModelHands); - packetData.actors[0].models[Common::GearModelSlot::ModelLegs] = p1->getModelForSlot(Common::GearModelSlot::ModelLegs); - packetData.actors[0].models[Common::GearModelSlot::ModelFeet] = p1->getModelForSlot(Common::GearModelSlot::ModelFeet); - packetData.actors[0].models[Common::GearModelSlot::ModelNeck] = p1->getModelForSlot(Common::GearModelSlot::ModelNeck); - packetData.actors[0].models[Common::GearModelSlot::ModelEar] = p1->getModelForSlot(Common::GearModelSlot::ModelEar); - packetData.actors[0].models[Common::GearModelSlot::ModelRing1] = p1->getModelForSlot(Common::GearModelSlot::ModelRing1); - packetData.actors[0].models[Common::GearModelSlot::ModelRing2] = p1->getModelForSlot(Common::GearModelSlot::ModelRing2); - packetData.actors[0].models[Common::GearModelSlot::ModelWrist] = p1->getModelForSlot(Common::GearModelSlot::ModelWrist); - memcpy(packetData.actors[0].look, p1->getLookArray(), sizeof(packetData.actors[0].look)); - if (!(p2->getEquipDisplayFlags() & Sapphire::Common::EquipDisplayFlags::HideWeapon)) - { - packetData.actors[1].mainWeaponModel = p2->getModelMainWeapon(); - packetData.actors[1].secWeaponModel = p2->getModelSubWeapon(); - } - packetData.actors[1].charId = p2->getId(); - packetData.actors[1].guardianDeity = p2->getGuardianDeity(); - packetData.actors[1].models[Common::GearModelSlot::ModelHead] = p2->getModelForSlot(Common::GearModelSlot::ModelHead); - if ((p2->getModelForSlot(Common::GearModelSlot::ModelHead) & 0xFF) == 208) - { - instance->foreachPlayer([](auto p) - { - p->sendUrgent("Replacing p2 veil Model"); - }); - uint32_t gear = p2->getModelForSlot(Common::GearModelSlot::ModelHead) & 0xFFFFFF00; - packetData.actors[1].models[Common::GearModelSlot::ModelHead] = gear | 0xC7; - } - packetData.actors[1].models[Common::GearModelSlot::ModelBody] = p2->getModelForSlot(Common::GearModelSlot::ModelBody); - packetData.actors[1].models[Common::GearModelSlot::ModelHands] = p2->getModelForSlot(Common::GearModelSlot::ModelHands); - packetData.actors[1].models[Common::GearModelSlot::ModelLegs] = p2->getModelForSlot(Common::GearModelSlot::ModelLegs); - packetData.actors[1].models[Common::GearModelSlot::ModelFeet] = p2->getModelForSlot(Common::GearModelSlot::ModelFeet); - packetData.actors[1].models[Common::GearModelSlot::ModelNeck] = p2->getModelForSlot(Common::GearModelSlot::ModelNeck); - packetData.actors[1].models[Common::GearModelSlot::ModelEar] = p2->getModelForSlot(Common::GearModelSlot::ModelEar); - packetData.actors[1].models[Common::GearModelSlot::ModelRing1] = p2->getModelForSlot(Common::GearModelSlot::ModelRing1); - packetData.actors[1].models[Common::GearModelSlot::ModelRing2] = p2->getModelForSlot(Common::GearModelSlot::ModelRing2); - packetData.actors[1].models[Common::GearModelSlot::ModelWrist] = p2->getModelForSlot(Common::GearModelSlot::ModelWrist); - memcpy(packetData.actors[1].look, p2->getLookArray(), sizeof(packetData.actors[1].look)); + player.sendUrgent("SanctumOfTheTwelve: debug {}", param); - instance->foreachPlayer([&instance, &packetData, qBL, param](auto p) - { - auto packet = makeZonePacket< FFXIVCeremonySetActorAppearance >(p->getId()); - memcpy(&packet->data(), &packetData, sizeof(packetData)); - p->queuePacket(packet); - p->eventStart(p->getId(), instance->getDirectorId(), Event::EventHandler::GameProgress, 1, 1); - std::vector< uint32_t > paramList; - paramList.push_back(param); - - auto seq3Callback = [&](Entity::Player& player, const Event::SceneResult& result) - { - //keep everyone in their room for now - /* - if( player.getId() == instance.getCustomVar( 1 ) ) - { - player.setPosAndNotifyClient( 1.454, 3.12581, -132.7992, -3.14 ); - } - else if( player.getId() == instance.getCustomVar( 2 ) ) - { - player.setPosAndNotifyClient( -1.454, 3.12581, -132.7992, -3.14 ); - } - else - { - player.setPosAndNotifyClient( 0, 2.64, -119, -3.14 ); - } - */ - auto v5 = instance->getCustomVar(5); - v5--; - instance->setCustomVar(5, v5); - if (v5 == 0) - { - instance->setCustomVar(3, 0); - instance->setCustomVar(4, 1); - } - }; - - p->playScene16(instance->getDirectorId(), 3, 139469827, 0, paramList, seq3Callback); - }); - instance->setCustomVar(3, 0); - instance->setCustomVar(4, 0); - instance->setCustomVar(5, instance->getPopCount()); - instance->setSequence(4); - - if( !instance || instance->getDirectorId() != getId() ) - return; - player.sendUrgent( "SanctumOfTheTwelve: onDebug() Playing cutscene: {}", param ); - - //player.eventStart( player.getId(), instance->getDirectorId(), Event::EventHandler::EnterTerritory, 1, player.getZoneId() ); - //player.directorPlayScene( instance->getDirectorId(), 3, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 1, param ); + player.eventStart(player.getId(), instance->getDirectorId(), Event::EventHandler::EnterTerritory, 1, player.getZoneId()); + player.directorPlayScene(instance->getDirectorId(), 3, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 1, param); } }; diff --git a/src/world/Manager/DebugCommandMgr.cpp b/src/world/Manager/DebugCommandMgr.cpp index ad3bff4c..3eacd434 100644 --- a/src/world/Manager/DebugCommandMgr.cpp +++ b/src/world/Manager/DebugCommandMgr.cpp @@ -304,19 +304,45 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& { terriMgr.disableCurrentFestival(); } - else if(subCommand == "finishallquests") + else if (subCommand == "finishallquests") { - for (int i = 65536; i < 69637; i++) + player.sendNotice("Finishing All Quests"); + for (int i = 65536; i <= 70056; i++) { player.finishQuest(static_cast(i)); } - } + player.sendNotice("Done"); + } else if (subCommand == "unfinishallquests") { - for (int i = 65536; i < 69637; i++) - { - player.unfinishQuest(static_cast(i)); + player.sendNotice("Unfinishing All Quests"); + for (int i = 70056; i >= 65536; i--) + { + player.unfinishQuest(static_cast(i)); + } + player.sendNotice("Done"); } + else if (subCommand == "finishuntil") + { + int32_t id; + sscanf(params.c_str(), "%d", &id); + player.sendNotice("Finishing Quests Until {0}", id); + for (int i = 65536; i <= id; i++) + { + player.unfinishQuest(static_cast(i)); + } + player.sendNotice("Done"); + } + else if (subCommand == "unfinishuntil") + { + int32_t id; + sscanf(params.c_str(), "%d", &id); + player.sendNotice("Unfinishing Quests Until {0}", id); + for (int i = 65536; i <= id; i++) + { + player.unfinishQuest(static_cast(i)); + } + player.sendNotice("Done"); } else if( subCommand == "QuestVar" ) { @@ -489,6 +515,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& player.eventStart(player.getId(), eventId, Event::EventHandler::Talk, 0, 0); player.playScene(eventId, sceneId, inputFlags, param2, param3, nullptr); } + else { player.sendUrgent( "{0} is not a valid SET command.", subCommand );