diff --git a/src/servers/Scripts/common/Aethernet.cpp b/src/servers/Scripts/common/Aethernet.cpp index 6d4bcc17..8c31b874 100644 --- a/src/servers/Scripts/common/Aethernet.cpp +++ b/src/servers/Scripts/common/Aethernet.cpp @@ -21,10 +21,8 @@ public: { if( player.isAetheryteRegistered( eventId & 0xFFFF ) ) { - player.eventPlay( eventId, 2, 0, []( Entity::Player& player, const Event::SceneResult& result ) - { - if( result.param1 == 256 ) - { + player.playScene( eventId, 2, 0, []( Entity::Player& player, const Event::SceneResult& result ) { + if( result.param1 == 256 ) { player.teleport( result.param2, 2 ); } } ); @@ -34,7 +32,7 @@ public: player.eventActionStart( eventId, ACTION_ATTUNE, []( Entity::Player& player, uint32_t eventId, uint64_t additional ) { player.registerAetheryte( eventId & 0xFFFF ); - player.eventPlay( eventId, 3, 0, 0, 0 ); + player.playScene( eventId, 3, 0, 0, 0 ); }, [] ( Entity::Player& ply, uint32_t evntId, uint64_t additional ) { diff --git a/src/servers/Scripts/common/Aetheryte.cpp b/src/servers/Scripts/common/Aetheryte.cpp index 95ba67db..93fa20af 100644 --- a/src/servers/Scripts/common/Aetheryte.cpp +++ b/src/servers/Scripts/common/Aetheryte.cpp @@ -23,20 +23,16 @@ public: { if( player.isAetheryteRegistered( eventId & 0xFFFF ) ) { - player.eventPlay( eventId, 0, 1, []( Entity::Player& player, const Event::SceneResult& result ) - { + player.playScene( eventId, 0, 1, []( Entity::Player& player, const Event::SceneResult& result ) { if( result.param1 == 256 ) // set homepoint { player.setHomepoint( result.eventId & 0xFFFF ); player.sendQuestMessage( result.eventId, 2, 0xEA, 0, 0 ); - } - else if( result.param1 == 512 ) // aethernet access + } else if( result.param1 == 512 ) // aethernet access { - if( result.param2 == 4 ) - { + if( result.param2 == 4 ) { player.teleport( result.param3, 2 ); - } - else if( result.param2 == 2 ) // register favored destination + } else if( result.param2 == 2 ) // register favored destination { } diff --git a/src/servers/Scripts/common/CmnDefCutSceneReplay.cpp b/src/servers/Scripts/common/CmnDefCutSceneReplay.cpp index ebe216b3..5b853704 100644 --- a/src/servers/Scripts/common/CmnDefCutSceneReplay.cpp +++ b/src/servers/Scripts/common/CmnDefCutSceneReplay.cpp @@ -18,7 +18,7 @@ public: } }; - player.eventPlay( getId(), 0, 0x2000, 0, 1, callback ); + player.playScene( getId( ), 0, 0x2000, 0, 1, callback ); } void Scene00001( Entity::Player& player, uint16_t returnScene ) @@ -28,7 +28,7 @@ public: // todo: this is fucked }; - player.eventPlay( getId(), 1, 0xFB2EC8F8, 0, 1, returnScene, callback ); + player.playScene( getId( ), 1, 0xFB2EC8F8, 0, 1, returnScene, callback ); } void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override diff --git a/src/servers/Scripts/common/CmnDefInnBed.cpp b/src/servers/Scripts/common/CmnDefInnBed.cpp index 8a88d3fd..95ee3492 100644 --- a/src/servers/Scripts/common/CmnDefInnBed.cpp +++ b/src/servers/Scripts/common/CmnDefInnBed.cpp @@ -17,7 +17,7 @@ public: Scene00001( player, result.param2 ); }; - player.eventPlay( getId(), 0, 0x2000, 0, 1, callback ); + player.playScene( getId( ), 0, 0x2000, 0, 1, callback ); } // lay down @@ -28,13 +28,13 @@ public: Scene00002( player, result.param2 ); }; - player.eventPlay( getId(), 1, 0xF32E48F8, 0, 1, param, callback ); + player.playScene( getId( ), 1, 0xF32E48F8, 0, 1, param, callback ); } // logout void Scene00002( Entity::Player& player, uint16_t param ) { - player.eventPlay( getId(), 2, 0xF32E48F8, 0, 1, param, nullptr ); + player.playScene( getId( ), 2, 0xF32E48F8, 0, 1, param, nullptr ); } // wake up @@ -43,7 +43,7 @@ public: auto callback = []( Entity::Player& player, const Event::SceneResult& result ) {}; - player.eventPlay( getId(), 100, 0x800, 0, 0, callback ); + player.playScene( getId( ), 100, 0x800, 0, 0, callback ); } void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override diff --git a/src/servers/Scripts/common/CmnDefLinkShell.cpp b/src/servers/Scripts/common/CmnDefLinkShell.cpp index 45c2a64b..c1b831fb 100644 --- a/src/servers/Scripts/common/CmnDefLinkShell.cpp +++ b/src/servers/Scripts/common/CmnDefLinkShell.cpp @@ -32,25 +32,25 @@ public: } }; - player.eventPlay( getId(), 1, 0, 0, 0, callback ); + player.playScene( getId( ), 1, 0, 0, 0, callback ); } // create linkshell void Scene00002( Entity::Player& player ) { - player.eventPlay( getId(), 2, 0, 0, 0 ); + player.playScene( getId( ), 2, 0, 0, 0 ); } // rename linkshell void Scene00003( Entity::Player& player ) { - player.eventPlay( getId(), 3, 0, 0, 0 ); + player.playScene( getId( ), 3, 0, 0, 0 ); } // remove linkshell void Scene00004( Entity::Player& player ) { - player.eventPlay( getId(), 4, 0, 0, 0 ); + player.playScene( getId( ), 4, 0, 0, 0 ); } void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override diff --git a/src/servers/Scripts/common/HouFurOrchestrion.cpp b/src/servers/Scripts/common/HouFurOrchestrion.cpp index 6340bc9d..b3aabcc8 100644 --- a/src/servers/Scripts/common/HouFurOrchestrion.cpp +++ b/src/servers/Scripts/common/HouFurOrchestrion.cpp @@ -10,7 +10,7 @@ public: void Scene00000( Entity::Player& player ) { - player.eventPlay( getId(), 0, 0x2000, 0, 1 ); + player.playScene( getId( ), 0, 0x2000, 0, 1 ); } void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override diff --git a/src/servers/Scripts/opening/OpeningGridania.cpp b/src/servers/Scripts/opening/OpeningGridania.cpp index 0d13df54..7f123e01 100644 --- a/src/servers/Scripts/opening/OpeningGridania.cpp +++ b/src/servers/Scripts/opening/OpeningGridania.cpp @@ -34,24 +34,24 @@ private: Scene00001( player ); }; - player.eventPlay( getId(), 0, NO_DEFAULT_CAMERA | INVIS_ENPC | - CONDITION_CUTSCENE | HIDE_UI | - HIDE_HOTBAR | SILENT_ENTER_TERRI_ENV, 0, 1, callback ); + player.playScene( getId( ), 0, NO_DEFAULT_CAMERA | INVIS_ENPC | + CONDITION_CUTSCENE | HIDE_UI | + HIDE_HOTBAR | SILENT_ENTER_TERRI_ENV, 0, 1, callback ); } void Scene00001( Entity::Player& player ) { - player.eventPlay( getId(), 1, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 1, 0x32 ); + player.playScene( getId( ), 1, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 1, 0x32 ); } void Scene00020( Entity::Player& player ) { - player.eventPlay( getId(), 20, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 1 ); + player.playScene( getId( ), 20, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 1 ); } void Scene00030( Entity::Player& player ) { - player.eventPlay( getId(), 30, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0 ); + player.playScene( getId( ), 30, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0 ); } void Scene00040( Entity::Player& player ) @@ -65,7 +65,7 @@ private: } }; - player.eventPlay( getId(), 40, 1, 2, 1, callback ); + player.playScene( getId( ), 40, 1, 2, 1, callback ); } public: diff --git a/src/servers/Scripts/opening/OpeningLimsa.cpp b/src/servers/Scripts/opening/OpeningLimsa.cpp index 8011377f..0d57d41f 100644 --- a/src/servers/Scripts/opening/OpeningLimsa.cpp +++ b/src/servers/Scripts/opening/OpeningLimsa.cpp @@ -49,24 +49,24 @@ private: Scene00001( player ); }; - player.eventPlay( getId(), 0, NO_DEFAULT_CAMERA | INVIS_ENPC | - CONDITION_CUTSCENE | HIDE_UI | - HIDE_HOTBAR | SILENT_ENTER_TERRI_ENV, 0, 1, callback ); + player.playScene( getId( ), 0, NO_DEFAULT_CAMERA | INVIS_ENPC | + CONDITION_CUTSCENE | HIDE_UI | + HIDE_HOTBAR | SILENT_ENTER_TERRI_ENV, 0, 1, callback ); } void Scene00001( Entity::Player& player ) { - player.eventPlay( getId(), 1, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 1, 0x32 ); + player.playScene( getId( ), 1, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 1, 0x32 ); } void Scene00020( Entity::Player& player ) { - player.eventPlay( getId(), 20, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 1 ); + player.playScene( getId( ), 20, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 1 ); } void Scene00030( Entity::Player& player ) { - player.eventPlay( getId(), 30, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0 ); + player.playScene( getId( ), 30, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0 ); } void Scene00040( Entity::Player& player ) @@ -80,7 +80,7 @@ private: } }; - player.eventPlay( getId(), 40, NO_DEFAULT_CAMERA, 2, 1, callback ); + player.playScene( getId( ), 40, NO_DEFAULT_CAMERA, 2, 1, callback ); } diff --git a/src/servers/Scripts/opening/OpeningUldah.cpp b/src/servers/Scripts/opening/OpeningUldah.cpp index 437b66c1..22b2bb92 100644 --- a/src/servers/Scripts/opening/OpeningUldah.cpp +++ b/src/servers/Scripts/opening/OpeningUldah.cpp @@ -35,24 +35,24 @@ private: Scene00001( player ); }; - player.eventPlay( getId(), 0, NO_DEFAULT_CAMERA | INVIS_ENPC | - CONDITION_CUTSCENE | HIDE_UI | - HIDE_HOTBAR | SILENT_ENTER_TERRI_ENV, 0, 1, callback ); + player.playScene( getId( ), 0, NO_DEFAULT_CAMERA | INVIS_ENPC | + CONDITION_CUTSCENE | HIDE_UI | + HIDE_HOTBAR | SILENT_ENTER_TERRI_ENV, 0, 1, callback ); } void Scene00001( Entity::Player& player ) { - player.eventPlay( getId(), 1, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 1, 0x32 ); + player.playScene( getId( ), 1, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 1, 0x32 ); } void Scene00020( Entity::Player& player ) { - player.eventPlay( getId(), 20, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 1 ); + player.playScene( getId( ), 20, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 1 ); } void Scene00030( Entity::Player& player ) { - player.eventPlay( getId(), 30, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 0 ); + player.playScene( getId( ), 30, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 0 ); } void Scene00040( Entity::Player& player ) @@ -63,7 +63,7 @@ private: Scene00030( player ); }; - player.eventPlay( getId(), 40, NO_DEFAULT_CAMERA, 2, 1, callback ); + player.playScene( getId( ), 40, NO_DEFAULT_CAMERA, 2, 1, callback ); } diff --git a/src/servers/Scripts/quest/ManFst001.cpp b/src/servers/Scripts/quest/ManFst001.cpp index 41907eaa..33049e36 100644 --- a/src/servers/Scripts/quest/ManFst001.cpp +++ b/src/servers/Scripts/quest/ManFst001.cpp @@ -44,7 +44,7 @@ private: } }; - player.eventPlay( getId(), 0, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), 0, HIDE_HOTBAR, 0, 0, callback ); } void Scene00001( Entity::Player& player ) @@ -54,7 +54,7 @@ private: Scene00002( player ); }; - player.eventPlay( getId(), 1, DISABLE_SKIP | HIDE_HOTBAR | SET_BASE, 0, 0, callback ); + player.playScene( getId( ), 1, DISABLE_SKIP | HIDE_HOTBAR | SET_BASE, 0, 0, callback ); } void Scene00002( Entity::Player& player ) @@ -63,10 +63,10 @@ private: { player.updateQuest( getId(), SEQ_FINISH ); - player.eventPlay( OPENING_EVENT_HANDLER, 0x1E, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 0 ); + player.playScene( OPENING_EVENT_HANDLER, 0x1E, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 0 ); }; - player.eventPlay( getId(), 2, 0, 0, 0, callback ); + player.playScene( getId( ), 2, 0, 0, 0, callback ); } void Scene00004( Entity::Player& player ) @@ -76,7 +76,7 @@ private: Scene00005( player ); }; - player.eventPlay( getId(), 4, FADE_OUT | HIDE_HOTBAR | CONDITION_CUTSCENE | HIDE_UI , 0, 0, callback ); + player.playScene( getId( ), 4, FADE_OUT | HIDE_HOTBAR | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); } void Scene00005( Entity::Player& player ) @@ -90,7 +90,7 @@ private: } }; - player.eventPlay( getId(), 5, INVIS_OTHER_PC, 0, 0, callback ); + player.playScene( getId( ), 5, INVIS_OTHER_PC, 0, 0, callback ); } public: diff --git a/src/servers/Scripts/quest/ManFst002.cpp b/src/servers/Scripts/quest/ManFst002.cpp index ba71c173..04fe588f 100644 --- a/src/servers/Scripts/quest/ManFst002.cpp +++ b/src/servers/Scripts/quest/ManFst002.cpp @@ -88,7 +88,7 @@ private: Scene00050( player ); }; - player.eventPlay( getId(), SEQ_0_ACTOR0, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), SEQ_0_ACTOR0, HIDE_HOTBAR, 0, 0, callback ); } void Scene00001( Entity::Player& player ) @@ -99,7 +99,7 @@ private: checkQuestCompletion( player, 0 ); }; - player.eventPlay( getId(), SEQ_1_ACTOR1, 0x0EFB, 0, 0, callback ); + player.playScene( getId( ), SEQ_1_ACTOR1, 0x0EFB, 0, 0, callback ); } void Scene00002( Entity::Player& player ) @@ -110,7 +110,7 @@ private: checkQuestCompletion( player, 3 ); }; - player.eventPlay( getId(), SEQ_1_ACTOR2, NONE, 0, 0, callback ); + player.playScene( getId( ), SEQ_1_ACTOR2, NONE, 0, 0, callback ); } void Scene00003( Entity::Player& player ) @@ -123,12 +123,12 @@ private: Scene00099( player ); }; - player.eventPlay( getId(), SEQ_1_ACTOR3, NONE, 0, 0, callback ); + player.playScene( getId( ), SEQ_1_ACTOR3, NONE, 0, 0, callback ); } void Scene00004( Entity::Player& player ) { - player.eventPlay( getId(), SEQ_1_ACTOR0, NONE, 0, 0 ); + player.playScene( getId( ), SEQ_1_ACTOR0, NONE, 0, 0 ); } void Scene00005( Entity::Player& player ) @@ -142,7 +142,7 @@ private: } }; - player.eventPlay( getId(), SEQ_2_ACTOR4, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); + player.playScene( getId( ), SEQ_2_ACTOR4, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); } void Scene00050( Entity::Player& player ) @@ -157,27 +157,17 @@ private: player.forceZoneing( TERRITORYTYPE0 ); }; - player.eventPlay( getId(), SEQ_0_ACTOR0_LQ, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); + player.playScene( getId( ), SEQ_0_ACTOR0_LQ, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); } void Scene00051( Entity::Player& player ) { - auto callback = [&]( Entity::Player& player, const Event::SceneResult& result ) - { - Scene00001( player ); - }; - - player.eventPlay( getId(), SEQ_1_ACTOR1_WAIT, NONE, 0, 0, callback ); + player.playSceneChain( getId(), SEQ_1_ACTOR1_WAIT, NONE, Scene00001 ); } void Scene00099( Entity::Player& player ) { - auto callback = [&]( Entity::Player& player, const Event::SceneResult& result ) - { - Scene00004( player ); - }; - - player.eventPlay( getId(), SEQ_1_ACTOR3_NPCTRADENO, NONE, 0, 0, callback ); + player.playSceneChain( getId(), SEQ_1_ACTOR3_NPCTRADENO, NONE, Scene00004 ); } void Scene00100( Entity::Player& player ) @@ -190,7 +180,7 @@ private: checkQuestCompletion( player, 2 ); }; - player.eventPlay( getId(), SEQ_1_ACTOR3_NPCTRADEOK, 0x0EFB, 0, 0, callback ); + player.playScene( getId( ), SEQ_1_ACTOR3_NPCTRADEOK, 0x0EFB, 0, 0, callback ); } public: diff --git a/src/servers/Scripts/quest/ManFst004.cpp b/src/servers/Scripts/quest/ManFst004.cpp index e76c16d8..bb2514bd 100644 --- a/src/servers/Scripts/quest/ManFst004.cpp +++ b/src/servers/Scripts/quest/ManFst004.cpp @@ -143,113 +143,100 @@ class ManFst004 : public EventScript // Available Scenes in this quest, not necessarly all are used void Scene00000( Entity::Player& player ) { - player.eventPlay( m_id, 0, 0x2000, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - if( result.param2 == 1 ) // accept quest - { - Scene00050( player ); - } - }); + player.playScene( m_id, 0, 0x2000, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + if( result.param2 == 1 ) // accept quest + { + Scene00050( player ); + } + } ); } void Scene00001( Entity::Player& player ) { - player.eventPlay( m_id, 1, 0, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - player.setQuestUI8AL( m_id, 1 ); - checkQuestCompletion( player, 0 ); - }); + player.playScene( m_id, 1, 0, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + player.setQuestUI8AL( m_id, 1 ); + checkQuestCompletion( player, 0 ); + } ); } void Scene00002( Entity::Player& player ) { - player.eventPlay( m_id, 2, 0, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - player.setQuestUI8BH( m_id, 1 ); - checkQuestCompletion( player, 3 ); - }); + player.playScene( m_id, 2, 0, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + player.setQuestUI8BH( m_id, 1 ); + checkQuestCompletion( player, 3 ); + } ); } void Scene00003( Entity::Player& player ) { - player.eventPlay( m_id, 3, 0, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - if( result.param2 == 1 ) - { - Scene00100( player ); - } - else - { - Scene00099( player ); - } - }); + player.playScene( m_id, 3, 0, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + if( result.param2 == 1 ) { + Scene00100( player ); + } else { + Scene00099( player ); + } + } ); } void Scene00004( Entity::Player& player ) { - player.eventPlay( m_id, 4, 0, 0, 0 ); + player.playScene( m_id, 4, 0, 0, 0 ); } void Scene00005( Entity::Player& player ) { - player.eventPlay( m_id, 5, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - if( result.param2 == 1 ) // finish quest - { - if( player.giveQuestRewards( m_id, 0 ) ) - { - player.finishQuest( m_id ); - } - } - }); + player.playScene( m_id, 5, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + if( result.param2 == 1 ) // finish quest + { + if( player.giveQuestRewards( m_id, 0 )) { + player.finishQuest( m_id ); + } + } + } ); } void Scene00050( Entity::Player& player ) { - player.eventPlay( m_id, 50, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0/*unk*/, 0/*unk*/, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - // accepting quest "close to home" - player.updateQuest( m_id, 1 ); - player.setQuestUI8CH( m_id, 1 ); // receive key item - // event is done, need to teleport to real zone. - player.setZone( 132 ); - //player.setZone(183); back to starting griania for debug purpose - }); + player.playScene( m_id, 50, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0/*unk*/, 0/*unk*/, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + // accepting quest "close to home" + player.updateQuest( m_id, 1 ); + player.setQuestUI8CH( m_id, 1 ); // receive key item + // event is done, need to teleport to real zone. + player.setZone( 132 ); + //player.setZone(183); back to starting griania for debug purpose + } ); } void Scene00051( Entity::Player& player ) { - player.eventPlay( m_id, 51, NONE, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - Scene00001( player ); - }); + player.playScene( m_id, 51, NONE, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + Scene00001( player ); + } ); } void Scene00099( Entity::Player& player ) { - player.eventPlay( m_id, 99, NONE, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - Scene00004( player ); - }); + player.playScene( m_id, 99, NONE, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + Scene00004( player ); + } ); } void Scene00100( Entity::Player& player ) { - player.eventPlay( m_id, 100, NONE, - [&]( Entity::Player& player, const Event::SceneResult& result ) - { - player.setQuestUI8CH( m_id, 0 ); // remove key item, since we have just traded it - player.setQuestUI8BL( m_id, 1 ); - checkQuestCompletion( player, 2 ); - }); + player.playScene( m_id, 100, NONE, + [&]( Entity::Player& player, const Event::SceneResult& result ) { + player.setQuestUI8CH( m_id, 0 ); // remove key item, since we have just traded it + player.setQuestUI8BL( m_id, 1 ); + checkQuestCompletion( player, 2 ); + } ); } }; \ No newline at end of file diff --git a/src/servers/Scripts/quest/ManSea001.cpp b/src/servers/Scripts/quest/ManSea001.cpp index 19a9a890..aca4e5c3 100644 --- a/src/servers/Scripts/quest/ManSea001.cpp +++ b/src/servers/Scripts/quest/ManSea001.cpp @@ -36,7 +36,7 @@ private: } }; - player.eventPlay( getId(), 0, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), 0, HIDE_HOTBAR, 0, 0, callback ); } void Scene00001( Entity::Player& player ) @@ -46,7 +46,7 @@ private: Scene00002( player ); }; - player.eventPlay( getId(), 1, DISABLE_SKIP | HIDE_HOTBAR | SET_BASE, 0, 0, callback ); + player.playScene( getId( ), 1, DISABLE_SKIP | HIDE_HOTBAR | SET_BASE, 0, 0, callback ); } void Scene00002( Entity::Player& player ) @@ -56,22 +56,22 @@ private: Scene00003( player ); }; - player.eventPlay( getId(), 2, NONE, 0, 0, callback ); + player.playScene( getId( ), 2, NONE, 0, 0, callback ); } void Scene00003( Entity::Player& player ) { auto callback = [ this ]( Entity::Player& player, const Event::SceneResult& result ) { - player.eventPlay( OPENING_EVENT_HANDLER, 0x1E, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 1, 0 ); + player.playScene( OPENING_EVENT_HANDLER, 0x1E, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 1, 0 ); }; - player.eventPlay( getId(), 3, NONE, 0, 0, callback ); + player.playScene( getId( ), 3, NONE, 0, 0, callback ); } void Scene00004( Entity::Player& player ) { - player.eventPlay( getId(), 4, NONE, 0, 0 ); + player.playScene( getId( ), 4, NONE, 0, 0 ); } void Scene00005( Entity::Player& player ) @@ -81,7 +81,7 @@ private: Scene00006( player ); }; - player.eventPlay( getId(), 5, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), 5, HIDE_HOTBAR, 0, 0, callback ); } void Scene00006( Entity::Player& player ) @@ -93,27 +93,27 @@ private: player.changePosition( 9, 40, 14, 2 ); }; - player.eventPlay( getId(), 6, INVIS_OTHER_PC, 0, 0, callback ); + player.playScene( getId( ), 6, INVIS_OTHER_PC, 0, 0, callback ); } void Scene00007( Entity::Player& player ) { - player.eventPlay( getId(), 7, NONE, 0, 0 ); + player.playScene( getId( ), 7, NONE, 0, 0 ); } void Scene00008( Entity::Player& player ) { - player.eventPlay( getId(), 8, NONE, 0, 0 ); + player.playScene( getId( ), 8, NONE, 0, 0 ); } void Scene00009( Entity::Player& player ) { - player.eventPlay( getId(), 9, NONE, 0, 0 ); + player.playScene( getId( ), 9, NONE, 0, 0 ); } void Scene00010( Entity::Player& player ) { - player.eventPlay( getId(), 10, NONE, 0, 0 ); + player.playScene( getId( ), 10, NONE, 0, 0 ); } void Scene00011( Entity::Player& player ) @@ -123,7 +123,7 @@ private: Scene00012( player ); }; - player.eventPlay( getId(), 11, 0x2c02, 0, 0, callback ); + player.playScene( getId( ), 11, 0x2c02, 0, 0, callback ); } void Scene00012( Entity::Player& player ) @@ -137,12 +137,12 @@ private: } }; - player.eventPlay( getId(), 12, INVIS_OTHER_PC, 0, 0, callback ); + player.playScene( getId( ), 12, INVIS_OTHER_PC, 0, 0, callback ); } void Scene00013( Entity::Player& player ) { - player.eventPlay( getId(), 13, NONE, 0, 0 ); + player.playScene( getId( ), 13, NONE, 0, 0 ); } public: diff --git a/src/servers/Scripts/quest/ManSea002.cpp b/src/servers/Scripts/quest/ManSea002.cpp index d97e343e..135bbdfd 100644 --- a/src/servers/Scripts/quest/ManSea002.cpp +++ b/src/servers/Scripts/quest/ManSea002.cpp @@ -41,7 +41,7 @@ private: Scene00050( player ); }; - player.eventPlay( getId(), 0, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), 0, HIDE_HOTBAR, 0, 0, callback ); } void Scene00001( Entity::Player& player ) @@ -51,7 +51,7 @@ private: }; - player.eventPlay( getId(), 1, NONE, callback ); + player.playScene( getId( ), 1, NONE, callback ); } void Scene00002( Entity::Player& player ) @@ -61,7 +61,7 @@ private: }; - player.eventPlay( getId(), 2, NONE, callback ); + player.playScene( getId( ), 2, NONE, callback ); } void Scene00003( Entity::Player& player ) @@ -71,7 +71,7 @@ private: }; - player.eventPlay( getId(), 3, NONE, callback ); + player.playScene( getId( ), 3, NONE, callback ); } void Scene00004( Entity::Player& player ) @@ -81,7 +81,7 @@ private: }; - player.eventPlay( getId(), 4, NONE, callback ); + player.playScene( getId( ), 4, NONE, callback ); } void Scene00005( Entity::Player& player ) @@ -91,7 +91,7 @@ private: }; - player.eventPlay( getId(), 5, NONE, callback ); + player.playScene( getId( ), 5, NONE, callback ); } void Scene00006( Entity::Player& player ) @@ -101,7 +101,7 @@ private: }; - player.eventPlay( getId(), 6, NONE, callback ); + player.playScene( getId( ), 6, NONE, callback ); } void Scene00007( Entity::Player& player ) @@ -111,7 +111,7 @@ private: }; - player.eventPlay( getId(), 7, NONE, callback ); + player.playScene( getId( ), 7, NONE, callback ); } void Scene00008( Entity::Player& player ) @@ -121,7 +121,7 @@ private: }; - player.eventPlay( getId(), 8, NONE, callback ); + player.playScene( getId( ), 8, NONE, callback ); } void Scene00050( Entity::Player& player ) @@ -136,7 +136,7 @@ private: player.forceZoneing( 128 ); }; - player.eventPlay( getId(), 50, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); + player.playScene( getId( ), 50, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); } public: ManSea002() : EventScript( 65644 ) {} diff --git a/src/servers/Scripts/quest/ManWil001.cpp b/src/servers/Scripts/quest/ManWil001.cpp index 247c7255..bc0770f8 100644 --- a/src/servers/Scripts/quest/ManWil001.cpp +++ b/src/servers/Scripts/quest/ManWil001.cpp @@ -37,7 +37,7 @@ private: } }; - player.eventPlay( getId(), 0, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), 0, HIDE_HOTBAR, 0, 0, callback ); } void Scene00001( Entity::Player& player ) @@ -47,22 +47,22 @@ private: Scene00002( player ); }; - player.eventPlay( getId(), 1, DISABLE_SKIP | HIDE_HOTBAR | SET_BASE, 0, 0, callback ); + player.playScene( getId( ), 1, DISABLE_SKIP | HIDE_HOTBAR | SET_BASE, 0, 0, callback ); } void Scene00002( Entity::Player& player ) { auto callback = [ this ]( Entity::Player& player, const Event::SceneResult& result ) { - player.eventPlay( OPENING_EVENT_HANDLER, 0x1E, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 0 ); + player.playScene( OPENING_EVENT_HANDLER, 0x1E, HIDE_HOTBAR | NO_DEFAULT_CAMERA, 0, 0 ); }; - player.eventPlay( getId(), 2, NONE, 0, 0, callback ); + player.playScene( getId( ), 2, NONE, 0, 0, callback ); } void Scene00003( Entity::Player& player ) { - player.eventPlay( getId(), 3, NONE, 0, 0 ); + player.playScene( getId( ), 3, NONE, 0, 0 ); } void Scene00004( Entity::Player& player ) @@ -72,7 +72,7 @@ private: Scene00005( player ); }; - player.eventPlay( getId(), 4, 0x2c02, 0, 0, callback ); + player.playScene( getId( ), 4, 0x2c02, 0, 0, callback ); } void Scene00005( Entity::Player& player ) @@ -86,47 +86,47 @@ private: } }; - player.eventPlay( getId(), 5, INVIS_OTHER_PC, 0, 0, callback ); + player.playScene( getId( ), 5, INVIS_OTHER_PC, 0, 0, callback ); } void Scene00006( Entity::Player& player ) { - player.eventPlay( getId(), 6, 0, 0, 0 ); + player.playScene( getId( ), 6, 0, 0, 0 ); } void Scene00007( Entity::Player& player ) { - player.eventPlay( getId(), 7, 0, 0, 0 ); + player.playScene( getId( ), 7, 0, 0, 0 ); } void Scene00008( Entity::Player& player ) { - player.eventPlay( getId(), 8, 0, 0, 0 ); + player.playScene( getId( ), 8, 0, 0, 0 ); } void Scene00009( Entity::Player& player ) { - player.eventPlay( getId(), 9, 0, 0, 0 ); + player.playScene( getId( ), 9, 0, 0, 0 ); } void Scene00010( Entity::Player& player ) { - player.eventPlay( getId(), 10, 0, 0, 0 ); + player.playScene( getId( ), 10, 0, 0, 0 ); } void Scene00011( Entity::Player& player ) { - player.eventPlay( getId(), 11, 0, 0, 0 ); + player.playScene( getId( ), 11, 0, 0, 0 ); } void Scene00012( Entity::Player& player ) { - player.eventPlay( getId(), 12, 0, 0, 0 ); + player.playScene( getId( ), 12, 0, 0, 0 ); } void Scene00013( Entity::Player& player ) { - player.eventPlay( getId(), 13, 0, 0, 0 ); + player.playScene( getId( ), 13, 0, 0, 0 ); } diff --git a/src/servers/Scripts/quest/ManWil002.cpp b/src/servers/Scripts/quest/ManWil002.cpp index 3fb0e48a..1349ee7f 100644 --- a/src/servers/Scripts/quest/ManWil002.cpp +++ b/src/servers/Scripts/quest/ManWil002.cpp @@ -47,7 +47,7 @@ private: Scene00050( player ); }; - player.eventPlay( getId(), 0, HIDE_HOTBAR, 0, 0, callback ); + player.playScene( getId( ), 0, HIDE_HOTBAR, 0, 0, callback ); } void Scene00001( Entity::Player& player ) @@ -57,7 +57,7 @@ private: }; - player.eventPlay( getId(), 1, NONE, callback ); + player.playScene( getId( ), 1, NONE, callback ); } void Scene00002( Entity::Player& player ) @@ -67,7 +67,7 @@ private: }; - player.eventPlay( getId(), 2, NONE, callback ); + player.playScene( getId( ), 2, NONE, callback ); } void Scene00003( Entity::Player& player ) @@ -77,7 +77,7 @@ private: }; - player.eventPlay( getId(), 3, NONE, callback ); + player.playScene( getId( ), 3, NONE, callback ); } void Scene00004( Entity::Player& player ) @@ -87,7 +87,7 @@ private: }; - player.eventPlay( getId(), 4, NONE, callback ); + player.playScene( getId( ), 4, NONE, callback ); } void Scene00005( Entity::Player& player ) @@ -97,7 +97,7 @@ private: }; - player.eventPlay( getId(), 5, NONE, callback ); + player.playScene( getId( ), 5, NONE, callback ); } void Scene00006( Entity::Player& player ) @@ -107,7 +107,7 @@ private: }; - player.eventPlay( getId(), 6, NONE, callback ); + player.playScene( getId( ), 6, NONE, callback ); } void Scene00007( Entity::Player& player ) @@ -117,7 +117,7 @@ private: }; - player.eventPlay( getId(), 7, NONE, callback ); + player.playScene( getId( ), 7, NONE, callback ); } void Scene00008( Entity::Player& player ) @@ -127,7 +127,7 @@ private: }; - player.eventPlay( getId(), 8, NONE, callback ); + player.playScene( getId( ), 8, NONE, callback ); } void Scene00050( Entity::Player& player ) @@ -142,7 +142,7 @@ private: player.forceZoneing( 130 ); }; - player.eventPlay( getId(), 50, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); + player.playScene( getId( ), 50, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, 0, 0, callback ); } diff --git a/src/servers/Scripts/quest/subquest/gridania/SubFst001.cpp b/src/servers/Scripts/quest/subquest/gridania/SubFst001.cpp index 113d9e6c..1e9b9059 100644 --- a/src/servers/Scripts/quest/subquest/gridania/SubFst001.cpp +++ b/src/servers/Scripts/quest/subquest/gridania/SubFst001.cpp @@ -34,17 +34,17 @@ private: } }; - player.eventPlay( getId(), 0, NONE, callback ); + player.playScene( getId( ), 0, NONE, callback ); } void Scene00001( Entity::Player& player ) { - player.eventPlay( getId(), 1, NONE ); + player.playScene( getId( ), 1, NONE ); } void Scene00099( Entity::Player& player ) { - player.eventPlay( getId(), 99, NONE ); + player.playScene( getId( ), 99, NONE ); } void Scene00100( Entity::Player& player ) @@ -58,7 +58,7 @@ private: } }; - player.eventPlay( getId(), 100, NONE, callback ); + player.playScene( getId( ), 100, NONE, callback ); } diff --git a/src/servers/Scripts/quest/subquest/gridania/SubFst002.cpp b/src/servers/Scripts/quest/subquest/gridania/SubFst002.cpp index 17696ab8..32382e0b 100644 --- a/src/servers/Scripts/quest/subquest/gridania/SubFst002.cpp +++ b/src/servers/Scripts/quest/subquest/gridania/SubFst002.cpp @@ -31,7 +31,7 @@ private: } }; - player.eventPlay( getId (), 0, NONE, callback ); + player.playScene( getId( ), 0, NONE, callback ); } void Scene00001(Entity::Player& player) @@ -45,7 +45,7 @@ private: } }; - player.eventPlay( getId(), 1, NONE, callback ); + player.playScene( getId( ), 1, NONE, callback ); } public: diff --git a/src/servers/Scripts/quest/subquest/gridania/SubFst010.cpp b/src/servers/Scripts/quest/subquest/gridania/SubFst010.cpp index 3b135781..c8ba532d 100644 --- a/src/servers/Scripts/quest/subquest/gridania/SubFst010.cpp +++ b/src/servers/Scripts/quest/subquest/gridania/SubFst010.cpp @@ -27,7 +27,7 @@ private: player.updateQuest( getId(), SEQ_FINISH ); }; - player.eventPlay( getId(), 0, NONE, callback ); + player.playScene( getId( ), 0, NONE, callback ); } void Scene00001( Entity::Player& player ) @@ -41,7 +41,7 @@ private: } }; - player.eventPlay( getId(), 1, NONE, callback ); + player.playScene( getId( ), 1, NONE, callback ); } public: diff --git a/src/servers/Scripts/quest/subquest/gridania/SubFst013.cpp b/src/servers/Scripts/quest/subquest/gridania/SubFst013.cpp index d82a4432..baf08fbf 100644 --- a/src/servers/Scripts/quest/subquest/gridania/SubFst013.cpp +++ b/src/servers/Scripts/quest/subquest/gridania/SubFst013.cpp @@ -49,12 +49,12 @@ private: } }; - player.eventPlay( getId(), 0, NONE, callback ); + player.playScene( getId( ), 0, NONE, callback ); } void Scene00001( Entity::Player& player ) { - player.eventPlay( getId(), 2, NONE ); + player.playScene( getId( ), 2, NONE ); } void Scene00002( Entity::Player& player ) @@ -64,12 +64,12 @@ private: player.updateQuest( getId(), SEQ_3 ); }; - player.eventPlay( getId(), 2, NONE, callback ); + player.playScene( getId( ), 2, NONE, callback ); } void Scene00003( Entity::Player& player ) { - player.eventPlay( getId(), 3, NONE ); + player.playScene( getId( ), 3, NONE ); } void Scene00004( Entity::Player& player ) @@ -79,12 +79,12 @@ private: player.updateQuest( getId(), SEQ_5 ); }; - player.eventPlay( getId(), 4, NONE, callback ); + player.playScene( getId( ), 4, NONE, callback ); } void Scene00005( Entity::Player& player ) { - player.eventPlay( getId(), 5, NONE ); + player.playScene( getId( ), 5, NONE ); } void Scene00006( Entity::Player& player ) @@ -98,12 +98,12 @@ private: } }; - player.eventPlay( getId(), 6, NONE, callback ); + player.playScene( getId( ), 6, NONE, callback ); } void Scene00095( Entity::Player& player ) { - player.eventPlay( getId(), 95, NONE ); + player.playScene( getId( ), 95, NONE ); } void Scene00096( Entity::Player& player ) @@ -114,12 +114,12 @@ private: player.sendQuestMessage( getId(), 4, 2, 0, 0 ); }; - player.eventPlay( getId(), 96, NONE, callback ); + player.playScene( getId( ), 96, NONE, callback ); } void Scene00097( Entity::Player& player ) { - player.eventPlay( getId(), 97, NONE ); + player.playScene( getId( ), 97, NONE ); } void Scene00098( Entity::Player& player ) @@ -130,12 +130,12 @@ private: player.sendQuestMessage( getId(), 2, 2, 0, 0 ); }; - player.eventPlay( getId(), 98, NONE, callback ); + player.playScene( getId( ), 98, NONE, callback ); } void Scene00099( Entity::Player& player ) { - player.eventPlay( getId(), 99, NONE ); + player.playScene( getId( ), 99, NONE ); } void Scene00100( Entity::Player& player ) @@ -146,7 +146,7 @@ private: player.sendQuestMessage( getId(), 0, 2, 0, 0 ); }; - player.eventPlay( getId(), 100, NONE, callback ); + player.playScene( getId( ), 100, NONE, callback ); } diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 1bd8f2e6..8a6da096 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -56,22 +56,35 @@ public: /*! start/register a normal event */ void eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventParam, uint8_t eventParam1, uint32_t eventParam2 ); /*! play a subevent */ - void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ); + void playScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ); void directorPlayScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam3, uint32_t eventParam4, uint32_t eventParam5 = 0 ); /*! play a subevent */ - void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, + void playScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3, Event::EventHandler::SceneReturnCallback eventReturnCallback ); /*! play a subevent */ - void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, + void playScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3, uint32_t eventParam4, Event::EventHandler::SceneReturnCallback eventReturnCallback ); /*! play a subevent */ - void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, + void playScene( uint32_t eventId, uint32_t scene, uint32_t flags, Event::EventHandler::SceneReturnCallback eventReturnCallback ); /*! play a subevent */ - void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags ); + void playScene( uint32_t eventId, uint32_t scene, uint32_t flags ); + /*! play a subevent */ + void playSceneChain( uint32_t eventId, uint32_t scene, uint32_t flags, + uint32_t eventParam2, uint32_t eventParam3, uint32_t eventParam4, + Event::EventHandler::SceneChainCallback sceneChainCallback ); + /*! play a subevent */ + void playSceneChain( uint32_t eventId, uint32_t scene, uint32_t flags, + uint32_t eventParam2, uint32_t eventParam3, + Event::EventHandler::SceneChainCallback sceneChainCallback ); + /*! play a subevent */ + void playSceneChain( uint32_t eventId, uint32_t scene, uint32_t flags, + Event::EventHandler::SceneChainCallback sceneChainCallback ); + /*! setup the event and return a ptr to it */ + Event::EventHandlerPtr bootstrapSceneEvent( uint32_t eventId, uint32_t flags ); /*! finish / unregister an event */ void eventFinish( uint32_t eventId, uint32_t freePlayer ); /*! add an event to the event array */ diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index 60761ef2..b8115329 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -113,56 +113,32 @@ void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId, } -void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, +void Core::Entity::Player::playScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ) { - eventPlay( eventId, scene, flags, eventParam2, eventParam3, nullptr ); + playScene( eventId, scene, flags, eventParam2, eventParam3, nullptr ); } -void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, +void Core::Entity::Player::playScene( uint32_t eventId, uint32_t scene, uint32_t flags, Event::EventHandler::SceneReturnCallback eventCallback ) { - eventPlay( eventId, scene, flags, 0, 0, eventCallback ); + playScene( eventId, scene, flags, 0, 0, eventCallback ); } -void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags ) +void Core::Entity::Player::playScene( uint32_t eventId, uint32_t scene, uint32_t flags ) { - eventPlay( eventId, scene, flags, 0, 0, nullptr ); + playScene( eventId, scene, flags, 0, 0, nullptr ); } -void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, +void Core::Entity::Player::playScene( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3, Event::EventHandler::SceneReturnCallback eventCallback ) { - if( flags & 0x02 ) - setStateFlag( PlayerStateFlag::WatchingCutscene ); - - auto pEvent = getEvent( eventId ); - if( !pEvent && getEventCount() ) - { - // We're trying to play a nested event, need to start it first. - eventStart( getId(), eventId, Event::EventHandler::Nest, 0, 0 ); - pEvent = getEvent( eventId ); - } - else if( !pEvent ) - { - auto pLog = g_fw.get< Logger >(); - pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" ); - return; - } - - pEvent->setPlayedScene( true ); - pEvent->setEventReturnCallback( eventCallback ); - EventPlayPacket eventPlay( getId(), pEvent->getActorId(), pEvent->getId(), - scene, flags, eventParam2, eventParam3 ); - - queuePacket( eventPlay ); + playScene( eventId, scene, flags, eventParam2, eventParam3, 0, eventCallback ); } -void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, - uint32_t flags, uint32_t eventParam2, - uint32_t eventParam3, uint32_t eventParam4, Event::EventHandler::SceneReturnCallback eventCallback ) +Core::Event::EventHandlerPtr Core::Entity::Player::bootstrapSceneEvent( uint32_t eventId, uint32_t flags ) { if( flags & 0x02 ) setStateFlag( PlayerStateFlag::WatchingCutscene ); @@ -178,9 +154,20 @@ void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, { auto pLog = g_fw.get< Logger >(); pLog->error( "Could not find event " + std::to_string( eventId ) + ", event has not been started!" ); - return; + return nullptr; } + return pEvent; +} + +void Core::Entity::Player::playScene( uint32_t eventId, uint32_t scene, + uint32_t flags, uint32_t eventParam2, + uint32_t eventParam3, uint32_t eventParam4, Event::EventHandler::SceneReturnCallback eventCallback ) +{ + auto pEvent = bootstrapSceneEvent( eventId, flags ); + if( !pEvent ) + return; + pEvent->setPlayedScene( true ); pEvent->setEventReturnCallback( eventCallback ); EventPlayPacket eventPlay( getId(), pEvent->getActorId(), pEvent->getId(), @@ -189,6 +176,35 @@ void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, queuePacket( eventPlay ); } +void Core::Entity::Player::playSceneChain( uint32_t eventId, uint32_t scene, uint32_t flags, + uint32_t eventParam2, uint32_t eventParam3, uint32_t eventParam4, + Core::Event::EventHandler::SceneChainCallback sceneChainCallback ) +{ + auto pEvent = bootstrapSceneEvent( eventId, flags ); + if( !pEvent ) + return; + + pEvent->setPlayedScene( true ); + pEvent->setSceneChainCallback( sceneChainCallback ); + EventPlayPacket eventPlay( getId(), pEvent->getActorId(), pEvent->getId(), + scene, flags, eventParam2, eventParam3, eventParam4 ); + + queuePacket( eventPlay ); +} + +void Core::Entity::Player::playSceneChain( uint32_t eventId, uint32_t scene, uint32_t flags, + uint32_t eventParam2, uint32_t eventParam3, + Core::Event::EventHandler::SceneChainCallback sceneChainCallback ) +{ + playSceneChain( eventId, scene, flags, eventParam2, eventParam3, 0, sceneChainCallback ); +} + +void Core::Entity::Player::playSceneChain( uint32_t eventId, uint32_t scene, uint32_t flags, + Core::Event::EventHandler::SceneChainCallback sceneChainCallback ) +{ + playSceneChain( eventId, scene, flags, 0, 0, 0, sceneChainCallback ); +} + void Core::Entity::Player::eventFinish( uint32_t eventId, uint32_t freePlayer ) { auto pEvent = getEvent( eventId ); diff --git a/src/servers/sapphire_zone/Event/EventHandler.cpp b/src/servers/sapphire_zone/Event/EventHandler.cpp index 1968f59b..322e8c3e 100644 --- a/src/servers/sapphire_zone/Event/EventHandler.cpp +++ b/src/servers/sapphire_zone/Event/EventHandler.cpp @@ -10,7 +10,7 @@ Core::Event::EventHandler::EventHandler( Entity::Player* pOwner, uint64_t actorI m_entryId = static_cast< uint16_t >( eventId ); m_type = static_cast< uint16_t >( eventId >> 16 ); m_eventParam = eventParam; - m_callback = nullptr; + m_returnCallback = nullptr; } uint64_t Core::Event::EventHandler::getActorId() const @@ -45,12 +45,22 @@ uint32_t Core::Event::EventHandler::getEventParam() const Core::Event::EventHandler::SceneReturnCallback Core::Event::EventHandler::getEventReturnCallback() const { - return m_callback; + return m_returnCallback; } void Core::Event::EventHandler::setEventReturnCallback( SceneReturnCallback callback ) { - m_callback = callback; + m_returnCallback = callback; +} + +Core::Event::EventHandler::SceneChainCallback Core::Event::EventHandler::getSceneChainCallback() const +{ + return m_chainCallback; +} + +void Core::Event::EventHandler::setSceneChainCallback( Core::Event::EventHandler::SceneChainCallback callback ) +{ + m_chainCallback = callback; } bool Core::Event::EventHandler::hasPlayedScene() const diff --git a/src/servers/sapphire_zone/Event/EventHandler.h b/src/servers/sapphire_zone/Event/EventHandler.h index 1b4f6b22..acdaf592 100644 --- a/src/servers/sapphire_zone/Event/EventHandler.h +++ b/src/servers/sapphire_zone/Event/EventHandler.h @@ -72,7 +72,8 @@ namespace Core { ICDirector = 0x8003, }; - using SceneReturnCallback = std::function< void( Entity::Player&, const SceneResult& ) > ; + using SceneReturnCallback = std::function< void( Entity::Player&, const SceneResult& ) >; + using SceneChainCallback = std::function< void( Entity::Player& ) >; EventHandler( Entity::Player* pOwner, uint64_t actorId, uint32_t eventId, EventType eventType, uint32_t eventParam ); @@ -98,6 +99,10 @@ namespace Core { void setEventReturnCallback( SceneReturnCallback callback ); + SceneChainCallback getSceneChainCallback() const; + + void setSceneChainCallback( SceneChainCallback callback ); + bool hasNestedEvent() const; void removeNestedEvent(); @@ -114,7 +119,8 @@ namespace Core { uint32_t m_eventParam; EventHandlerPtr m_pNestedEvent; bool m_playedScene; - SceneReturnCallback m_callback; + SceneReturnCallback m_returnCallback; + SceneChainCallback m_chainCallback; }; } diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index 120e1935..f8a4763c 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -218,6 +218,9 @@ void Core::Network::GameConnection::eventHandlerReturn( const Packets::GamePacke result.param3 = param3; eventCallback( player, result ); } + // we might have a scene chain callback instead so check for that too + else if( auto chainCallback = pEvent->getSceneChainCallback() ) + chainCallback( player ); }