From 90783bf25f37217ce37acb2deb8a642c44465a81 Mon Sep 17 00:00:00 2001 From: dude22072 Date: Sun, 6 Feb 2022 00:59:01 -0600 Subject: [PATCH] Implement some Gridania MSQ Quests --- .../questbattles/SpiritholdBroken.cpp | 74 ++- src/scripts/quest/ManFst005.cpp | 40 +- .../quest/subquest/gridania/SubFst027.cpp | 107 ++++ .../quest/subquest/gridania/SubFst031.cpp | 466 +++++++++++++++ .../quest/subquest/gridania/SubFst035.cpp | 544 ++++++++++++++++++ .../quest/subquest/gridania/SubFst038.cpp | 350 +++++++++++ .../quest/subquest/gridania/SubFst047.cpp | 431 ++++++++++++++ .../quest/subquest/gridania/SubFst049.cpp | 150 +++++ .../quest/subquest/gridania/SubFst050.cpp | 155 +++++ .../quest/subquest/gridania/SubFst056.cpp | 324 +++++++++++ .../quest/subquest/gridania/SubFst058.cpp | 313 ++++++++++ .../quest/subquest/gridania/SubFst059.cpp | 240 ++++++++ .../quest/subquest/gridania/SubFst060.cpp | 198 +++++++ 13 files changed, 3366 insertions(+), 26 deletions(-) create mode 100644 src/scripts/quest/subquest/gridania/SubFst027.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst031.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst035.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst038.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst047.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst049.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst050.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst056.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst058.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst059.cpp create mode 100644 src/scripts/quest/subquest/gridania/SubFst060.cpp diff --git a/src/scripts/instances/questbattles/SpiritholdBroken.cpp b/src/scripts/instances/questbattles/SpiritholdBroken.cpp index 2f570478..4a5e05b2 100644 --- a/src/scripts/instances/questbattles/SpiritholdBroken.cpp +++ b/src/scripts/instances/questbattles/SpiritholdBroken.cpp @@ -1,3 +1,5 @@ +#include +#include #include #include @@ -6,7 +8,7 @@ using namespace Sapphire; class SpiritholdBroken : public Sapphire::ScriptAPI::QuestBattleScript { private: - static constexpr auto INIT_POP_01 = 3869528; + static constexpr auto INIT_POP_BOSS = 3869528; static constexpr auto LOC_POS_ACTOR0 = 3884691; static constexpr auto LOC_POS_ACTOR1 = 3884694; static constexpr auto LOC_ACTOR0 = 1003064; @@ -16,27 +18,89 @@ private: static constexpr auto CUT_SCENE_01 = 69; static constexpr auto LOC_TALKSHAPE1 = 8; + enum vars + { + SUCCESS_CALLED, + }; + public: SpiritholdBroken() : Sapphire::ScriptAPI::QuestBattleScript( 15 ) - { } + {} + + void onPlayerSetup( Sapphire::QuestBattle& instance, Entity::Player& player ) override + { + //Manually set, may be off + player.setRot( -1.08634f ); + player.setPos( { 257.876f, 24.f, 194.734f } ); + } void onInit( QuestBattle& instance ) override { - instance.registerEObj( "unknown_0", 2005192, 5760474, 4, { -51.493111f, 0.309087f, 71.436897f }, 1.000000f, -0.000006f ); - + instance.registerEObj( "unknown_0", 2005192, 5760474, 4, { -51.493111f, 0.309087f, 71.436897f }, 1.000000f, -0.000006f ); } void onUpdate( QuestBattle& instance, uint64_t tickCount ) override { + auto successCalled = instance.getDirectorVar( SUCCESS_CALLED ); + + auto boss = instance.getActiveBNpcByInstanceId( INIT_POP_BOSS ); + auto pPlayer = instance.getPlayerPtr(); + + uint32_t bossHpPercent = 0; + if( boss ) + bossHpPercent = boss->getHpPercent(); + + if( pPlayer && !pPlayer->isAlive() ) + { + instance.fail(); + return; + } + + if( bossHpPercent <= 10 ) + { + //TODO: Show "Impossible! Never has the golem been so sorely tested!" text. + } + + if( instance.getCountEnemyBNpc() == 0 && successCalled == 0 ) + { + instance.setDirectorVar( SUCCESS_CALLED, 1 ); + instance.success(); + return; + } } void onEnterTerritory( QuestBattle& instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { - + eventMgr().playScene( player, instance.getDirectorId(), 1, + NO_DEFAULT_CAMERA | CONDITION_CUTSCENE | SILENT_ENTER_TERRI_ENV | + HIDE_HOTBAR | SILENT_ENTER_TERRI_BGM | SILENT_ENTER_TERRI_SE | + DISABLE_STEALTH | 0x00100000 | LOCK_HUD | LOCK_HOTBAR | + // todo: wtf is 0x00100000 + DISABLE_CANCEL_EMOTE, + [ & ]( Entity::Player& player, const Event::SceneResult& result ) { + player.setOnEnterEventDone( true ); + } ); } + void onDutyComplete( QuestBattle& instance, Entity::Player& player ) override + { + //TODO: How to play the post-battle cutscene before returning? + auto idx = player.getQuestIndex( instance.getQuestId() ); + if( idx == -1 ) + return; + auto& quest = player.getQuestByIndex( idx ); + quest.setSeq( 4 ); + } + + void onDutyCommence( QuestBattle& instance, Entity::Player& player ) override + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + auto boss = instance.createBNpcFromInstanceId( INIT_POP_BOSS, 5000 /*TODO: Find right HP*/, Common::BNpcType::Enemy, player.getId() ); + boss->setFlag( Entity::NoDeaggro ); + boss->hateListAdd( player.getAsPlayer(), 1 ); + } }; EXPOSE_SCRIPT( SpiritholdBroken ); \ No newline at end of file diff --git a/src/scripts/quest/ManFst005.cpp b/src/scripts/quest/ManFst005.cpp index 6e0114de..caf33b64 100644 --- a/src/scripts/quest/ManFst005.cpp +++ b/src/scripts/quest/ManFst005.cpp @@ -2,9 +2,9 @@ // Content needs to be added by hand to make it function // In order for this script to be loaded, move it to the correct folder in /scripts/ -#include #include "Manager/EventMgr.h" #include "Manager/TerritoryMgr.h" +#include #include #include @@ -73,12 +73,12 @@ public: Scene00002( quest, player ); if( actorId == Eobject1 ) { - eventMgr().eventActionStart( player, getId(), EventActionProcessShor, - [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) - { - quest.setSeq( SeqFinish ); - }, - nullptr, getId() ); + eventMgr().eventActionStart( + player, getId(), EventActionProcessShor, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + quest.setSeq( SeqFinish ); + }, + nullptr, getId() ); } } @@ -103,7 +103,7 @@ private: void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) { - if( result.getResult( 0 ) == 1 ) // accept quest + if( result.getResult( 0 ) == 1 )// accept quest { Scene00001( quest, player ); } @@ -113,7 +113,7 @@ private: void Scene00001( World::Quest& quest, Entity::Player& player ) { - eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR, bindSceneReturn( &ManFst005::Scene00001Return ) ); + eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR | CONDITION_CUTSCENE, bindSceneReturn( &ManFst005::Scene00001Return ) ); } void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) @@ -130,12 +130,12 @@ private: void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) { - eventMgr().eventActionStart( player, getId(), EventActionProcessShor, - [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) - { - Scene00003( quest, player ); - }, - nullptr, getId() ); + eventMgr().eventActionStart( + player, getId(), EventActionProcessShor, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00003( quest, player ); + }, + nullptr, getId() ); } ////////////////////////////////////////////////////////////////////// @@ -171,11 +171,10 @@ private: void Scene00005( World::Quest& quest, Entity::Player& player ) { - eventMgr().playQuestScene( player, getId(), 5, NO_DEFAULT_CAMERA | CONDITION_CUTSCENE | SILENT_ENTER_TERRI_ENV | - HIDE_HOTBAR | SILENT_ENTER_TERRI_BGM | SILENT_ENTER_TERRI_SE | - DISABLE_STEALTH | 0x00100000 | LOCK_HUD | LOCK_HOTBAR | - // todo: wtf is 0x00100000 - DISABLE_CANCEL_EMOTE, bindSceneReturn( &ManFst005::Scene00005Return ) ); + eventMgr().playQuestScene( player, getId(), 5, NO_DEFAULT_CAMERA | CONDITION_CUTSCENE | SILENT_ENTER_TERRI_ENV | HIDE_HOTBAR | SILENT_ENTER_TERRI_BGM | SILENT_ENTER_TERRI_SE | DISABLE_STEALTH | 0x00100000 | LOCK_HUD | LOCK_HOTBAR | + // todo: wtf is 0x00100000 + DISABLE_CANCEL_EMOTE, + bindSceneReturn( &ManFst005::Scene00005Return ) ); } void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) @@ -251,7 +250,6 @@ private: void Scene00011Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) { } - }; EXPOSE_SCRIPT( ManFst005 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst027.cpp b/src/scripts/quest/subquest/gridania/SubFst027.cpp new file mode 100644 index 00000000..8b3d1705 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst027.cpp @@ -0,0 +1,107 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst027_00176 +// Quest Name: On to Bentbranch +// Quest ID: 65712 +// Start NPC: 1000100 +// End NPC: 1000470 + +using namespace Sapphire; + +class SubFst027 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // UI8AL + + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000470 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000100;//Mother Miounne + static constexpr auto Actor1 = 1000470;//Keitha + static constexpr auto LocFace1 = 605; + static constexpr auto LocFace2 = 604; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq1Actor1 = 1; + +public: + SubFst027() : Sapphire::ScriptAPI::QuestScript( 65712 ){}; + ~SubFst027() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == SeqFinish ) + Scene00001( quest, player ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + +private: + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, HIDE_HOTBAR, bindSceneReturn( &SubFst027::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( SeqFinish ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, bindSceneReturn( &SubFst027::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } +}; + +EXPOSE_SCRIPT( SubFst027 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst031.cpp b/src/scripts/quest/subquest/gridania/SubFst031.cpp new file mode 100644 index 00000000..a8961d6d --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst031.cpp @@ -0,0 +1,466 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst031_00125 +// Quest Name: A Soldier's Breakfast +// Quest ID: 65661 +// Start NPC: 1000685 +// End NPC: 1000408 + +using namespace Sapphire; + +class SubFst031 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + // UI8BH + // UI8BL + + /// Countable Num: 4 Seq: 1 Event: 1 Listener: 2000010 + /// Countable Num: 6 Seq: 1 Event: 1 Listener: 2000011 + /// Countable Num: 1 Seq: 2 Event: 1 Listener: 2000012 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 2000013 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + Seq2 = 2, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000685;//Pauline + static constexpr auto Actor1 = 1000408; + static constexpr auto Enemy0 = 120;//Anole (INCORRECT: 142) + static constexpr auto Eobject0 = 2000010; + static constexpr auto Eobject1 = 2000011; + static constexpr auto Eobject2 = 2000012; + static constexpr auto Eobject3 = 2000013; + static constexpr auto Eobject4 = 2000014; + static constexpr auto Eobject5 = 2000150; + static constexpr auto EventActionSearch = 1; + static constexpr auto Item0 = 2000071; + +public: + SubFst031() : Sapphire::ScriptAPI::QuestScript( 65661 ){}; + ~SubFst031() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + else if( quest.getSeq() == Seq2 ) + Scene00008( quest, player ); + break; + } + case Actor1: + { + break; + } + //TODO: Double check these IDs since it's broken atm + case Eobject0: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00001( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject1: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00002( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject2: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00003( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject3: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00004( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject4: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00005( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject5: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00006( quest, player ); + }, + nullptr, 0 ); + break; + } + //TODO: Temp because IDs broken + case 0: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00001( quest, player ); + }, + nullptr, 0 ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Entity::Player& player ) override + { + if( nameId != Enemy0 ) + return; + else + { + auto currentKC120 = quest.getUI8AL(); + if( currentKC120 <= 6 ) + { + eventMgr().sendEventNotice( player, getId(), 1, 2, currentKC120 + 1, 6 ); + quest.setUI8AL( currentKC120 + 1 ); + checkQuestCompletion( quest, player ); + } + } + } + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + if( quest.getUI8AL() >= 6 && quest.getUI8BH() >= 4 ) + { + quest.setUI8AL( 0 ); + quest.setSeq( Seq2 ); + } + } + + void progressEggCount ( World::Quest& quest, Entity::Player& player, uint8_t eggId ) + { + auto currentEggCount = quest.getUI8BH(); + eventMgr().sendEventNotice( player, getId(), 0, 2, currentEggCount + 1, 4 ); + quest.setUI8BH( currentEggCount + 1 ); + quest.setUI8BL( currentEggCount + 1 ); + quest.setBitFlag8( eggId , true); + checkQuestCompletion( quest, player ); + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &SubFst031::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &SubFst031::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + progressEggCount( quest, player, 1 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst031::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + progressEggCount( quest, player, 2 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst031::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + progressEggCount( quest, player, 3 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00004( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &SubFst031::Scene00004Return ) ); + } + + void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + progressEggCount( quest, player, 4 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00005( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &SubFst031::Scene00005Return ) ); + } + + void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + progressEggCount( quest, player, 5 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00006( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &SubFst031::Scene00006Return ) ); + } + + void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + progressEggCount( quest, player, 6 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00007( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 7, NONE, bindSceneReturn( &SubFst031::Scene00007Return ) ); + } + + void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00008( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 8, NONE, bindSceneReturn( &SubFst031::Scene00008Return ) ); + } + + void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 ) + { + Scene00088( quest, player ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00087( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 87, NONE, bindSceneReturn( &SubFst031::Scene00087Return ) ); + } + + void Scene00087Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00088( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 88, NONE, bindSceneReturn( &SubFst031::Scene00088Return ) ); + } + + void Scene00088Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00089( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 89, NONE, bindSceneReturn( &SubFst031::Scene00089Return ) ); + } + + void Scene00089Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00090( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 90, NONE, bindSceneReturn( &SubFst031::Scene00090Return ) ); + } + + void Scene00090Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00091( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 91, NONE, bindSceneReturn( &SubFst031::Scene00091Return ) ); + } + + void Scene00091Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00092( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 92, NONE, bindSceneReturn( &SubFst031::Scene00092Return ) ); + } + + void Scene00092Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00093( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 93, NONE, bindSceneReturn( &SubFst031::Scene00093Return ) ); + } + + void Scene00093Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00094( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 94, NONE, bindSceneReturn( &SubFst031::Scene00094Return ) ); + } + + void Scene00094Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00095( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &SubFst031::Scene00095Return ) ); + } + + void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00096( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 96, NONE, bindSceneReturn( &SubFst031::Scene00096Return ) ); + } + + void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00097( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &SubFst031::Scene00097Return ) ); + } + + void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00098( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 98, NONE, bindSceneReturn( &SubFst031::Scene00098Return ) ); + } + + void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst031::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &SubFst031::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } +}; + +EXPOSE_SCRIPT( SubFst031 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst035.cpp b/src/scripts/quest/subquest/gridania/SubFst035.cpp new file mode 100644 index 00000000..dfcf1bc4 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst035.cpp @@ -0,0 +1,544 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst035_00129 +// Quest Name: Spirithold Broken +// Quest ID: 65665 +// Start NPC: 1000421 +// End NPC: 1000100 + +using namespace Sapphire; + +class SubFst035 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 1000465 + /// Countable Num: 5 Seq: 2 Event: 1 Listener: 1000512 + /// Countable Num: 1 Seq: 3 Event: 1 Listener: 1000513 + /// Countable Num: 1 Seq: 4 Event: 1 Listener: 1000514 + /// Countable Num: 1 Seq: 5 Event: 1 Listener: 1000515 + /// Countable Num: 0 Seq: 255 Event: 1 Listener: 1000516 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + Seq2 = 2, + Seq3 = 3, + Seq4 = 4, + Seq5 = 5, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000421;//Galfrid + static constexpr auto Actor1 = 1000465;//Alestan + static constexpr auto Actor2 = 1000512;//Worried Wood Wailer + static constexpr auto Actor3 = 1000513;//Witless Wood Wailer + static constexpr auto Actor4 = 1000514;//Overwrought Wood Wailer + static constexpr auto Actor5 = 1000515;//Cool-headed Conjurer + static constexpr auto Actor6 = 1000516;//Confused Conjurer + static constexpr auto Actor7 = 1000740;//Injured Hearer + static constexpr auto Actor8 = 1000100;//Mother Miounne + static constexpr auto Actor9 = 1000102; + static constexpr auto Actor10 = 1000101; + static constexpr auto CutScene02 = 70; + static constexpr auto CutScene03 = 71; + static constexpr auto CutScene04 = 72; + static constexpr auto Eobject0 = 2001232; + static constexpr auto Eobject6 = 2654267; + static constexpr auto Eobject7 = 2654268; + static constexpr auto Eobject8 = 2654272; + static constexpr auto Eobject9 = 1140501; + static constexpr auto Eobject10 = 1140471; + static constexpr auto EventAction = 26; + static constexpr auto EventActionSearch = 1; + static constexpr auto LocActor0 = 1003064; + static constexpr auto LogmessageRecommendListUnlock = 3701; + static constexpr auto Motion3 = 708; + static constexpr auto Questbattle0 = 15; + static constexpr auto Reward0 = 9; + static constexpr auto RewardLeve = 5; + static constexpr auto Seq0Actor0Lq = 50; + static constexpr auto Territorytype0 = 225; + static constexpr auto Territorytype1 = 148; + static constexpr auto UnlockCheckInnReward = 2; + static constexpr auto UnlockImageGearSet = 29; + static constexpr auto UnlockImageInn = 18; + static constexpr auto UnlockImageLeve = 20; + +public: + SubFst035() : Sapphire::ScriptAPI::QuestScript( 65665 ){}; + ~SubFst035() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == Seq1 ) + Scene00002( quest, player ); + else if( quest.getSeq() == Seq5 ) + Scene00024( quest, player ); + break; + } + case Actor2: + { + if( quest.getSeq() == Seq2 ) + { + eventMgr().eventActionStart( + player, getId(), 0x1A, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00004( quest, player ); + }, + nullptr, 0 ); + } + break; + } + case Actor3: + { + if( quest.getSeq() == Seq2 ) + { + eventMgr().eventActionStart( + player, getId(), 0x1A, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00007( quest, player ); + }, + nullptr, 0 ); + } + break; + } + case Actor4: + { + if( quest.getSeq() == Seq2 ) + { + eventMgr().eventActionStart( + player, getId(), 0x1A, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00010( quest, player ); + }, + nullptr, 0 ); + } + break; + } + case Actor5: + { + if( quest.getSeq() == Seq2 ) + { + eventMgr().eventActionStart( + player, getId(), 0x1A, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00013( quest, player ); + }, + nullptr, 0 ); + } + break; + } + case Actor6: + { + if( quest.getSeq() == Seq2 ) + { + eventMgr().eventActionStart( + player, getId(), 0x1A, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00013( quest, player ); + }, + nullptr, 0 ); + } + break; + } + case Actor7: + { + if( quest.getSeq() == Seq2 ) + Scene00018( quest, player ); + else if( quest.getSeq() == Seq3 ) + Scene00019( quest, player ); + break; + } + case Actor8: + { + if( quest.getSeq() == SeqFinish ) + Scene00025( quest, player ); + break; + } + case Actor9: + { + break; + } + case Actor10: + { + break; + } + } + } + + void onEnterTerritory( World::Quest& quest, Entity::Player& player, uint16_t param1, uint16_t param2 ) override + { + if( quest.getSeq() == Seq4 ) + { + Scene00023( quest, player ); + } + } + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + if( quest.getUI8AL() >= 5 ) + { + quest.setUI8AL( 0 ); + quest.setSeq( Seq3 ); + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + Scene00001( quest, player ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &SubFst035::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setSeq( Seq1 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst035::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setSeq( Seq2 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst035::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00004( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 4, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00004Return ) ); + } + + void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setBitFlag8( 1, true ); + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 5 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00005( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &SubFst035::Scene00005Return ) ); + } + + void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00006( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &SubFst035::Scene00006Return ) ); + } + + void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00007( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 7, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00007Return ) ); + } + + void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setBitFlag8( 2, true ); + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 5 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00008( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 8, NONE, bindSceneReturn( &SubFst035::Scene00008Return ) ); + } + + void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00009( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 9, NONE, bindSceneReturn( &SubFst035::Scene00009Return ) ); + } + + void Scene00009Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00010( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 10, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00010Return ) ); + } + + void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setBitFlag8( 3, true ); + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 5 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00011( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 11, NONE, bindSceneReturn( &SubFst035::Scene00011Return ) ); + } + + void Scene00011Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00012( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 12, NONE, bindSceneReturn( &SubFst035::Scene00012Return ) ); + } + + void Scene00012Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00013( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 13, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00013Return ) ); + } + + void Scene00013Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setBitFlag8( 4, true ); + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 5 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00014( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 14, NONE, bindSceneReturn( &SubFst035::Scene00014Return ) ); + } + + void Scene00014Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00015( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 15, NONE, bindSceneReturn( &SubFst035::Scene00015Return ) ); + } + + void Scene00015Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00016( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 16, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00016Return ) ); + } + + void Scene00016Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setBitFlag8( 5, true ); + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 5 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00017( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 17, NONE, bindSceneReturn( &SubFst035::Scene00017Return ) ); + } + + void Scene00017Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00018( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 18, NONE, bindSceneReturn( &SubFst035::Scene00018Return ) ); + } + + void Scene00018Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00019( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 19, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00019Return ) ); + } + + void Scene00019Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 ) + { + auto& pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref(); + + eventMgr().eventFinish( player, result.eventId, 0 ); + pTeriMgr.createAndJoinQuestBattle( player, Questbattle0 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00020( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 20, HIDE_HOTBAR, bindSceneReturn( &SubFst035::Scene00020Return ) ); + } + + void Scene00020Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00021( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 21, NONE, bindSceneReturn( &SubFst035::Scene00021Return ) ); + } + + void Scene00021Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00022( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 22, NONE, bindSceneReturn( &SubFst035::Scene00022Return ) ); + } + + void Scene00022Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00023( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 23, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, bindSceneReturn( &SubFst035::Scene00023Return ) ); + } + + void Scene00023Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setSeq( Seq5 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00024( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 24, NONE, bindSceneReturn( &SubFst035::Scene00024Return ) ); + } + + void Scene00024Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice(player, getId(), 2, 0); + quest.setSeq( SeqFinish ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00025( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 25, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, bindSceneReturn( &SubFst035::Scene00025Return ) ); + } + + void Scene00025Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } +}; + +EXPOSE_SCRIPT( SubFst035 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst038.cpp b/src/scripts/quest/subquest/gridania/SubFst038.cpp new file mode 100644 index 00000000..831f3723 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst038.cpp @@ -0,0 +1,350 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst038_00175 +// Quest Name: Surveying the Damage +// Quest ID: 65711 +// Start NPC: 1000449 +// End NPC: 1000685 + +using namespace Sapphire; + +class SubFst038 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + // UI8BH //Survey Records + // UI8BL //Surveyor's Rope (2?) + // UI8CH + // UI8CL + // UI8DH + + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 2000141 + /// Countable Num: 2 Seq: 1 Event: 1 Listener: 2000147 + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 2000148 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 2000149 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000449; //Monranguin + static constexpr auto Actor1 = 1000685; //Pauline + static constexpr auto Eobject0 = 2000141;//Survey Records + static constexpr auto Eobject1 = 2000147;//Surveyor's Instruments (X24Y23) + static constexpr auto Eobject2 = 2000148;//Surveyor's Instruments (X24Y24) + static constexpr auto Eobject3 = 2000149;//Surveyor's Rope + static constexpr auto EventActionSearch = 1; + static constexpr auto Item0 = 2000141; + static constexpr auto Item1 = 2000146; + static constexpr auto Item2 = 2000147; + +public: + SubFst038() : Sapphire::ScriptAPI::QuestScript( 65711 ){}; + ~SubFst038() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == SeqFinish ) + Scene00005( quest, player ); + break; + } + case Eobject0: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00001( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject1: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00002( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject2: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00003( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject3: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00004( quest, player ); + }, + nullptr, 0 ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + if( quest.getUI8AL() >= 1 && quest.getUI8BH() >= 2 && quest.getUI8BL() >= 1 ) + { + //quest.setUI8CH( 1 ); + //quest.setUI8CL( 1 ); + //quest.setUI8DH( 1 ); + quest.setSeq( SeqFinish ); + /* quest.setBitFlag8( 2, false ); + quest.setBitFlag8( 3, false ); + quest.setUI8AL( 0 ); + quest.setUI8BH( 0 ); + quest.setUI8BL( 0 ); */ + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &SubFst038::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &SubFst038::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setUI8AL( 1 ); + quest.setUI8CH( 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst038::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8BH() + 1, 2 ); + quest.setUI8BH( quest.getUI8BH() + 1 ); + quest.setUI8CL( quest.getUI8CL() + 1 ); + quest.setBitFlag8( 2, true );//Makes the Eobj fade out + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst038::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8BH() + 1, 2 ); + quest.setUI8BH( quest.getUI8BH() + 1 ); + quest.setUI8CL( quest.getUI8CL() + 1 ); + quest.setBitFlag8( 3, true );//Makes the Eobj fade out + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00004( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &SubFst038::Scene00004Return ) ); + } + + void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 2, 0 ); + quest.setUI8BL( 1 ); + quest.setUI8DH( 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00005( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &SubFst038::Scene00005Return ) ); + } + + void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + playerMgr().sendUrgent( player, "Handing in the items is weird. This has been skipped." ); + Scene00092( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00091( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 91, NONE, bindSceneReturn( &SubFst038::Scene00091Return ) ); + } + + void Scene00091Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00092( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 92, NONE, bindSceneReturn( &SubFst038::Scene00092Return ) ); + } + + void Scene00092Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00093( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 93, NONE, bindSceneReturn( &SubFst038::Scene00093Return ) ); + } + + void Scene00093Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00094( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 94, NONE, bindSceneReturn( &SubFst038::Scene00094Return ) ); + } + + void Scene00094Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00095( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &SubFst038::Scene00095Return ) ); + } + + void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00096( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 96, NONE, bindSceneReturn( &SubFst038::Scene00096Return ) ); + } + + void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00097( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &SubFst038::Scene00097Return ) ); + } + + void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00098( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 98, NONE, bindSceneReturn( &SubFst038::Scene00098Return ) ); + } + + void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst038::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &SubFst038::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } +}; + +EXPOSE_SCRIPT( SubFst038 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst047.cpp b/src/scripts/quest/subquest/gridania/SubFst047.cpp new file mode 100644 index 00000000..5ad75a81 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst047.cpp @@ -0,0 +1,431 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst047_00374 +// Quest Name: Feeding Time +// Quest ID: 65910 +// Start NPC: 1000470 +// End NPC: 1000470 + +using namespace Sapphire; + +class SubFst047 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + // UI8BH + + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 2000999 + /// Countable Num: 3 Seq: 2 Event: 1 Listener: 2001000 + /// Countable Num: 1 Seq: 255 Event: 8 Listener: 2001000 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + Seq2 = 2, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000470; //Keitha + static constexpr auto Eobject0 = 2000999;//Gyshal Greens + static constexpr auto Eobject1 = 2001000;//Feeding Trough + static constexpr auto Eobject2 = 2001001;//Feeding Trough + static constexpr auto Eobject3 = 2001002;//Feeding Trough + static constexpr auto EventActionSearch = 1; + static constexpr auto Item0 = 2000242; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq1Eobject0 = 1; + static constexpr auto Seq1Eobject0Eventactionno = 99; + static constexpr auto Seq1Eobject0Eventactionok = 100; + static constexpr auto Seq2Eobject1 = 2; + static constexpr auto Seq2Eobject1Useitemno = 97; + static constexpr auto Seq2Eobject1Useitemok = 98; + static constexpr auto Seq2Eobject2 = 3; + static constexpr auto Seq2Eobject2Useitemno = 95; + static constexpr auto Seq2Eobject2Useitemok = 96; + static constexpr auto Seq2Eobject3 = 4; + static constexpr auto Seq2Eobject3Useitemno = 93; + static constexpr auto Seq2Eobject3Useitemok = 94; + static constexpr auto Seq3Actor0 = 5; + static constexpr auto Seq3Eobject1 = 6; + static constexpr auto Seq3Eobject1Eventactionno = 91; + static constexpr auto Seq3Eobject1Eventactionok = 92; + static constexpr auto Seq3Eobject2 = 7; + static constexpr auto Seq3Eobject2Eventactionno = 89; + static constexpr auto Seq3Eobject2Eventactionok = 90; + static constexpr auto Seq3Eobject3 = 8; + static constexpr auto Seq3Eobject3Eventactionno = 87; + static constexpr auto Seq3Eobject3Eventactionok = 88; + +public: + SubFst047() : Sapphire::ScriptAPI::QuestScript( 65910 ){}; + ~SubFst047() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + else if( quest.getSeq() == SeqFinish ) + Scene00005( quest, player ); + break; + } + case Eobject0: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00001( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject1: + { + Scene00002( quest, player ); + break; + } + case Eobject2: + { + Scene00003( quest, player ); + break; + } + case Eobject3: + { + Scene00004( quest, player ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Eobject1: + { + Scene00098( quest, player ); + break; + } + case Eobject2: + { + Scene00096( quest, player ); + break; + } + case Eobject3: + { + Scene00094( quest, player ); + break; + } + } + } + + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 3 ); + if( quest.getUI8AL() >= 3 ) + { + quest.setUI8AL( 0 ); + quest.setSeq( SeqFinish ); + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &SubFst047::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &SubFst047::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setSeq( Seq2 ); + quest.setUI8BH( 3 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst047::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst047::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00004( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &SubFst047::Scene00004Return ) ); + } + + void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00005( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &SubFst047::Scene00005Return ) ); + } + + void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00006( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &SubFst047::Scene00006Return ) ); + } + + void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00007( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 7, NONE, bindSceneReturn( &SubFst047::Scene00007Return ) ); + } + + void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00008( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 8, NONE, bindSceneReturn( &SubFst047::Scene00008Return ) ); + } + + void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00087( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 87, NONE, bindSceneReturn( &SubFst047::Scene00087Return ) ); + } + + void Scene00087Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00088( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 88, NONE, bindSceneReturn( &SubFst047::Scene00088Return ) ); + } + + void Scene00088Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00089( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 89, NONE, bindSceneReturn( &SubFst047::Scene00089Return ) ); + } + + void Scene00089Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00090( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 90, NONE, bindSceneReturn( &SubFst047::Scene00090Return ) ); + } + + void Scene00090Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00091( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 91, NONE, bindSceneReturn( &SubFst047::Scene00091Return ) ); + } + + void Scene00091Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00092( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 92, NONE, bindSceneReturn( &SubFst047::Scene00092Return ) ); + } + + void Scene00092Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00093( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 93, NONE, bindSceneReturn( &SubFst047::Scene00093Return ) ); + } + + void Scene00093Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00094( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 94, NONE, bindSceneReturn( &SubFst047::Scene00094Return ) ); + } + + void Scene00094Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 3, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setUI8BH( quest.getUI8BH() - 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00095( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &SubFst047::Scene00095Return ) ); + } + + void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00096( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 96, NONE, bindSceneReturn( &SubFst047::Scene00096Return ) ); + } + + void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 2, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setUI8BH( quest.getUI8BH() - 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00097( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &SubFst047::Scene00097Return ) ); + } + + void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00098( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 98, NONE, bindSceneReturn( &SubFst047::Scene00098Return ) ); + } + + void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 1, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setUI8BH( quest.getUI8BH() - 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst047::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &SubFst047::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } +}; + +EXPOSE_SCRIPT( SubFst047 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst049.cpp b/src/scripts/quest/subquest/gridania/SubFst049.cpp new file mode 100644 index 00000000..9f47489b --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst049.cpp @@ -0,0 +1,150 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst049_00376 +// Quest Name: You Shall Not Trespass +// Quest ID: 65912 +// Start NPC: 1000470 +// End NPC: 1000748 + +using namespace Sapphire; + +class SubFst049 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // UI8AL + + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 1000748 + /// Countable Num: 4 Seq: 2 Event: 5 Listener: 771 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000748 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + Seq2 = 2, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000470;//Keitha + static constexpr auto Actor1 = 1000748;//Roseline + static constexpr auto Enemy0 = 218; //Qiqirn Scramber (INCORRECT: 771) + +public: + SubFst049() : Sapphire::ScriptAPI::QuestScript( 65912 ){}; + ~SubFst049() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == Seq1 ) + Scene00001( quest, player ); + else if( quest.getSeq() == SeqFinish ) + Scene00003( quest, player ); + break; + } + } + } + + void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Entity::Player& player ) override + { + if( nameId != Enemy0 ) + return; + else + { + auto currentKC218 = quest.getUI8AL(); + quest.setUI8AL( currentKC218 + 1 ); + checkQuestCompletion( quest, player ); + } + } + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + eventMgr().sendEventNotice( player, getId(), 1, 2, quest.getUI8AL(), 4 ); + if( quest.getUI8AL() >= 4 ) + { + quest.setUI8AL( 0 ); + quest.setSeq( SeqFinish ); + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &SubFst049::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &SubFst049::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setSeq( Seq2 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst049::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst049::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult(1) ); + } + } +}; + +EXPOSE_SCRIPT( SubFst049 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst050.cpp b/src/scripts/quest/subquest/gridania/SubFst050.cpp new file mode 100644 index 00000000..60151bb2 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst050.cpp @@ -0,0 +1,155 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst050_00156 +// Quest Name: Ruffled Feathers +// Quest ID: 65692 +// Start NPC: 1000470 +// End NPC: 1000470 + +using namespace Sapphire; + +class SubFst050 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // UI8AL + // UI8BH + + /// Countable Num: 6 Seq: 1 Event: 9 Listener: 22 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000470 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000470; //Keitha + static constexpr auto Enemy0 = 22; + static constexpr auto Item0 = 2000092; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq2Actor0 = 1; + static constexpr auto Seq2Actor0Npctradeno = 99; + static constexpr auto Seq2Actor0Npctradeok = 100; + +public: + SubFst050() : Sapphire::ScriptAPI::QuestScript( 65692 ){}; + ~SubFst050() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + else if( quest.getSeq() == SeqFinish ) + Scene00001( quest, player ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Entity::Player& player ) override + { + switch( nameId ) + { + case Enemy0: + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + quest.setUI8BH( quest.getUI8BH() + 1 ); + checkQuestCompletion( quest, player ); + break; + } + } + } + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + eventMgr().sendEventNotice( player, getId(), 0, 2, quest.getUI8AL(), 6 ); + if( quest.getUI8AL() >= 6 ) + { + quest.setUI8AL( 0 ); + quest.setSeq( SeqFinish ); + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, HIDE_HOTBAR, bindSceneReturn( &SubFst050::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR, bindSceneReturn( &SubFst050::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 ) + Scene00100( quest, player ); + else + Scene00099( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst050::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, HIDE_HOTBAR, bindSceneReturn( &SubFst050::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult(1) ); + } + } +}; + +EXPOSE_SCRIPT( SubFst050 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst056.cpp b/src/scripts/quest/subquest/gridania/SubFst056.cpp new file mode 100644 index 00000000..78863e92 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst056.cpp @@ -0,0 +1,324 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst056_00377 +// Quest Name: Don't Look Down +// Quest ID: 65913 +// Start NPC: 1000435 +// End NPC: 1000436 + +using namespace Sapphire; + +class SubFst056 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + + /// Countable Num: 4 Seq: 1 Event: 1 Listener: 2000748 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 2000749 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000435;//Osha Jaab + static constexpr auto Actor1 = 1000436;//Theodore + static constexpr auto Eobject0 = 2000748; + static constexpr auto Eobject1 = 2000749;//Blue Trumpet + static constexpr auto Eobject2 = 2000750;//Blue Trumpet + static constexpr auto Eobject3 = 2000751; + static constexpr auto EventActionSearch = 1; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq1Eobject0 = 1; + static constexpr auto Seq1Eobject0Eventactionno = 99; + static constexpr auto Seq1Eobject0Eventactionok = 100; + static constexpr auto Seq1Eobject1 = 2; + static constexpr auto Seq1Eobject1Eventactionno = 97; + static constexpr auto Seq1Eobject1Eventactionok = 98; + static constexpr auto Seq1Eobject2 = 3; + static constexpr auto Seq1Eobject2Eventactionno = 95; + static constexpr auto Seq1Eobject2Eventactionok = 96; + static constexpr auto Seq1Eobject3 = 4; + static constexpr auto Seq1Eobject3Eventactionno = 93; + static constexpr auto Seq1Eobject3Eventactionok = 94; + static constexpr auto Seq2Actor1 = 5; + static constexpr auto Seq2Actor1Npctradeno = 91; + static constexpr auto Seq2Actor1Npctradeok = 92; + +public: + SubFst056() : Sapphire::ScriptAPI::QuestScript( 65913 ){}; + ~SubFst056() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == SeqFinish ) + Scene00005( quest, player ); + break; + } + case Eobject0: + { + if( quest.getSeq() == Seq1 ) + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00001( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject1: + { + if( quest.getSeq() == Seq1 ) + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00002( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject2: + { + if( quest.getSeq() == Seq1 ) + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00003( quest, player ); + }, + nullptr, 0 ); + break; + } + case Eobject3: + { + if( quest.getSeq() == Seq1 ) + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00004( quest, player ); + }, + nullptr, 0 ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + eventMgr().sendEventNotice( player, getId(), 0, 2, quest.getUI8AL(), 4 ); + if( quest.getUI8AL() >= 4 ) + { + quest.setUI8AL( 0 ); + quest.setSeq( SeqFinish ); + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &SubFst056::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &SubFst056::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 1, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst056::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 2, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst056::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 3, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00004( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &SubFst056::Scene00004Return ) ); + } + + void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 4, true ); + quest.setUI8AL( quest.getUI8AL() + 1 ); + checkQuestCompletion( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00005( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &SubFst056::Scene00005Return ) ); + } + + void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId() ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00093( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 93, NONE, bindSceneReturn( &SubFst056::Scene00093Return ) ); + } + + void Scene00093Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00094( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 94, NONE, bindSceneReturn( &SubFst056::Scene00094Return ) ); + } + + void Scene00094Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00095( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &SubFst056::Scene00095Return ) ); + } + + void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00096( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 96, NONE, bindSceneReturn( &SubFst056::Scene00096Return ) ); + } + + void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00097( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &SubFst056::Scene00097Return ) ); + } + + void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00098( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 98, NONE, bindSceneReturn( &SubFst056::Scene00098Return ) ); + } + + void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst056::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &SubFst056::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } +}; + +EXPOSE_SCRIPT( SubFst056 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst058.cpp b/src/scripts/quest/subquest/gridania/SubFst058.cpp new file mode 100644 index 00000000..6c7e282b --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst058.cpp @@ -0,0 +1,313 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst058_00379 +// Quest Name: In the Grim Darkness of the Forest +// Quest ID: 65915 +// Start NPC: 1000436 +// End NPC: 1000748 + +using namespace Sapphire; + +class SubFst058 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + // UI8BH + + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 1000748 + /// Countable Num: 1 Seq: 2 Event: 1 Listener: 2000688 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 2000689 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + Seq2 = 2, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000436;//Theodore + static constexpr auto Actor1 = 1000748;//Roseline + static constexpr auto Eobject0 = 2000688; + static constexpr auto Eobject1 = 2000689; //Worn Leather Bag + static constexpr auto EventActionSearch = 1; + static constexpr auto Item0 = 2000191; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq1Actor1 = 1; + static constexpr auto Seq1Eobject0 = 2; + static constexpr auto Seq1Eobject0Eventactionno = 99; + static constexpr auto Seq1Eobject0Eventactionok = 100; + static constexpr auto Seq2Eobject0 = 4; + static constexpr auto Seq2Eobject0Eventactionno = 95; + static constexpr auto Seq2Eobject0Eventactionok = 96; + static constexpr auto Seq2Eobject1 = 3; + static constexpr auto Seq2Eobject1Eventactionno = 97; + static constexpr auto Seq2Eobject1Eventactionok = 98; + static constexpr auto Seq3Actor1 = 5; + static constexpr auto Seq3Actor1Npctradeno = 93; + static constexpr auto Seq3Actor1Npctradeok = 94; + static constexpr auto Seq3Eobject0 = 6; + static constexpr auto Seq3Eobject0Eventactionno = 91; + static constexpr auto Seq3Eobject0Eventactionok = 92; + +public: + SubFst058() : Sapphire::ScriptAPI::QuestScript( 65915 ){}; + ~SubFst058() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == Seq1 ) + Scene00001( quest, player ); + else if( quest.getSeq() == SeqFinish ) + Scene00094( quest, player ); + break; + } + case Eobject1: + { + if( quest.getSeq() == Seq2 ) + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00002( quest, player ); + }, + nullptr, 0 ); + } + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + +private: + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &SubFst058::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &SubFst058::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setSeq( Seq2 ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &SubFst058::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 1, 0 ); + quest.setSeq( SeqFinish ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &SubFst058::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00004( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &SubFst058::Scene00004Return ) ); + } + + void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00005( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &SubFst058::Scene00005Return ) ); + } + + void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00006( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &SubFst058::Scene00006Return ) ); + } + + void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00091( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 91, NONE, bindSceneReturn( &SubFst058::Scene00091Return ) ); + } + + void Scene00091Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00092( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 92, NONE, bindSceneReturn( &SubFst058::Scene00092Return ) ); + } + + void Scene00092Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00093( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 93, NONE, bindSceneReturn( &SubFst058::Scene00093Return ) ); + } + + void Scene00093Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00094( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 94, NONE, bindSceneReturn( &SubFst058::Scene00094Return ) ); + } + + void Scene00094Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00095( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &SubFst058::Scene00095Return ) ); + } + + void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00096( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 96, NONE, bindSceneReturn( &SubFst058::Scene00096Return ) ); + } + + void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00097( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &SubFst058::Scene00097Return ) ); + } + + void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00098( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 98, NONE, bindSceneReturn( &SubFst058::Scene00098Return ) ); + } + + void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst058::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &SubFst058::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } +}; + +EXPOSE_SCRIPT( SubFst058 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst059.cpp b/src/scripts/quest/subquest/gridania/SubFst059.cpp new file mode 100644 index 00000000..68897111 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst059.cpp @@ -0,0 +1,240 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +// Quest Script: SubFst059_00380 +// Quest Name: Threat Level Elevated +// Quest ID: 65916 +// Start NPC: 1000748 +// End NPC: 1000741 + +using namespace Sapphire; + +class SubFst059 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // UI8AL + // UI8BH + // UI8BL + // UI8CH + + /// Countable Num: 1 Seq: 1 Event: 1 Listener: 1001280 + /// Countable Num: 1 Seq: 2 Event: 1 Listener: 1000483 + /// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000741 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + Seq2 = 2, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000748;//Roseline + static constexpr auto Actor1 = 1001280;//Elmar + static constexpr auto Actor2 = 1000483;//Bernard + static constexpr auto Actor3 = 1000741;//Eylgar + static constexpr auto Item0 = 2000186; + static constexpr auto Item1 = 2000187; + static constexpr auto Item2 = 2000188; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq1Actor1 = 1; + static constexpr auto Seq1Actor1Npctradeno = 99; + static constexpr auto Seq1Actor1Npctradeok = 100; + static constexpr auto Seq2Actor2 = 2; + static constexpr auto Seq2Actor2Npctradeno = 97; + static constexpr auto Seq2Actor2Npctradeok = 98; + static constexpr auto Seq3Actor3 = 3; + static constexpr auto Seq3Actor3Npctradeno = 95; + static constexpr auto Seq3Actor3Npctradeok = 96; + +public: + SubFst059() : Sapphire::ScriptAPI::QuestScript( 65916 ){}; + ~SubFst059() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == Seq1 ) + Scene00001( quest, player ); + break; + } + case Actor2: + { + if( quest.getSeq() == Seq2 ) + Scene00002( quest, player ); + break; + } + case Actor3: + { + if( quest.getSeq() == SeqFinish ) + Scene00003( quest, player ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + +private: + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + quest.setUI8BH( 1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 ) + Scene00100( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 ) + Scene00098( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00003( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 3, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00003Return ) ); + } + + void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 ) + Scene00096( quest, player ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00095( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &SubFst059::Scene00095Return ) ); + } + + void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00096( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 96, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00096Return ) ); + } + + void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00097( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &SubFst059::Scene00097Return ) ); + } + + void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00098( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 98, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00098Return ) ); + } + + void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 1, 0 ); + quest.setUI8BL( 0 ); + quest.setUI8CH( 1 ); + quest.setSeq( SeqFinish ); + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &SubFst059::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, HIDE_HOTBAR, bindSceneReturn( &SubFst059::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setUI8BH( 0 ); + quest.setUI8BL( 1 ); + quest.setSeq( Seq2 ); + } +}; + +EXPOSE_SCRIPT( SubFst059 ); \ No newline at end of file diff --git a/src/scripts/quest/subquest/gridania/SubFst060.cpp b/src/scripts/quest/subquest/gridania/SubFst060.cpp new file mode 100644 index 00000000..ede31c31 --- /dev/null +++ b/src/scripts/quest/subquest/gridania/SubFst060.cpp @@ -0,0 +1,198 @@ +// This is an automatically generated C++ script template +// Content needs to be added by hand to make it function +// In order for this script to be loaded, move it to the correct folder in /scripts/ + +#include "Manager/EventMgr.h" +#include +#include +#include + +#include "Actor/BNpc.h" +#include "Manager/TerritoryMgr.h" +#include "Territory/Territory.h" + +// Quest Script: SubFst060_00381 +// Quest Name: Migrant Marauders +// Quest ID: 65917 +// Start NPC: 1000741 +// End NPC: 1000491 + +using namespace Sapphire; + +class SubFst060 : public Sapphire::ScriptAPI::QuestScript +{ +private: + // Basic quest information + // Quest vars / flags used + // BitFlag8 + // UI8AL + // UI8BH + + /// Countable Num: 2 Seq: 1 Event: 1 Listener: 2001006 + /// Countable Num: 1 Seq: 255 Event: 5 Listener: 12 + // Steps in this quest ( 0 is before accepting, + // 1 is first, 255 means ready for turning it in + enum Sequence : uint8_t + { + Seq0 = 0, + Seq1 = 1, + SeqFinish = 255, + }; + + // Entities found in the script data of the quest + static constexpr auto Actor0 = 1000741;//Elygar + static constexpr auto Actor1 = 1000491;//Lothaire + static constexpr auto Enemy0 = 3838969; + static constexpr auto Enemy1 = 3838970; + static constexpr auto Eobject0 = 2001006; //Vulture Egg + static constexpr auto EventActionSearch = 1; + static constexpr auto Seq0Actor0 = 0; + static constexpr auto Seq1Eobject0 = 1; + static constexpr auto Seq1Eobject0Eventactionno = 99; + static constexpr auto Seq1Eobject0Eventactionok = 100; + static constexpr auto Seq2Actor1 = 2; + +public: + SubFst060() : Sapphire::ScriptAPI::QuestScript( 65917 ){}; + ~SubFst060() = default; + + ////////////////////////////////////////////////////////////////////// + // Event Handlers + void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + switch( actorId ) + { + case Actor0: + { + if( quest.getSeq() == Seq0 ) + Scene00000( quest, player ); + break; + } + case Actor1: + { + if( quest.getSeq() == SeqFinish ) + Scene00002( quest, player ); + break; + } + case Eobject0: + { + eventMgr().eventActionStart( + player, getId(), 0x02, + [ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) { + Scene00100( quest, player ); + }, + nullptr, 0 ); + break; + } + } + } + + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + } + + void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Entity::Player& player ) override + { + switch( entityId ) + { + case Enemy0: + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + checkQuestCompletion( quest, player ); + break; + } + case Enemy1: + { + quest.setUI8AL( quest.getUI8AL() + 1 ); + checkQuestCompletion( quest, player ); + break; + } + } + } + +private: + void checkQuestCompletion( World::Quest& quest, Entity::Player& player ) + { + if( quest.getUI8AL() >= 2 ) + { + eventMgr().sendEventNotice( player, getId(), 0, 0 ); + quest.setUI8AL( 0 ); + quest.setSeq( SeqFinish ); + } + } + ////////////////////////////////////////////////////////////////////// + // Available Scenes in this quest, not necessarly all are used + ////////////////////////////////////////////////////////////////////// + + void Scene00000( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 0, HIDE_HOTBAR, bindSceneReturn( &SubFst060::Scene00000Return ) ); + } + + void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + if( result.getResult( 0 ) == 1 )// accept quest + { + quest.setSeq( Seq1 ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00001( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR, bindSceneReturn( &SubFst060::Scene00001Return ) ); + } + + void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00002( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 2, HIDE_HOTBAR, bindSceneReturn( &SubFst060::Scene00002Return ) ); + } + + void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + + if( result.getResult( 0 ) == 1 ) + { + player.finishQuest( getId(), result.getResult( 1 ) ); + } + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00099( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 99, HIDE_HOTBAR, bindSceneReturn( &SubFst060::Scene00099Return ) ); + } + + void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + } + + ////////////////////////////////////////////////////////////////////// + + void Scene00100( World::Quest& quest, Entity::Player& player ) + { + eventMgr().playQuestScene( player, getId(), 100, HIDE_HOTBAR, bindSceneReturn( &SubFst060::Scene00100Return ) ); + } + + void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result ) + { + quest.setBitFlag8( 1, true ); + auto instance = teriMgr().getTerritoryByGuId( player.getTerritoryId() ); + auto enemy0 = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy ); + auto enemy1 = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy ); + enemy0->setTriggerOwnerId( player.getId() ); + enemy1->setTriggerOwnerId( player.getId() ); + enemy0->hateListAddDelayed( player.getAsPlayer(), 1 ); + enemy1->hateListAddDelayed( player.getAsPlayer(), 1 ); + } +}; + +EXPOSE_SCRIPT( SubFst060 ); \ No newline at end of file