From 4baf4314d3efa7f6db5dda58d66babc548e4c4ef Mon Sep 17 00:00:00 2001 From: Mordred Date: Fri, 17 Dec 2021 23:13:27 +0100 Subject: [PATCH] onEventItem in scripts can now be implemented --- .../quest/subquest/gridania/SubFst033.cpp | 5 ++++ src/world/Action/EventItemAction.cpp | 4 +++ src/world/Script/NativeScriptApi.cpp | 7 ++--- src/world/Script/NativeScriptApi.h | 3 +- src/world/Script/ScriptMgr.cpp | 28 +++++++++++++------ src/world/Script/ScriptMgr.h | 3 +- 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/scripts/quest/subquest/gridania/SubFst033.cpp b/src/scripts/quest/subquest/gridania/SubFst033.cpp index eee98022..5f733b5e 100644 --- a/src/scripts/quest/subquest/gridania/SubFst033.cpp +++ b/src/scripts/quest/subquest/gridania/SubFst033.cpp @@ -93,6 +93,11 @@ class SubFst033 : public Sapphire::ScriptAPI::QuestScript } } + void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override + { + + } + void onBNpcKill( uint32_t npcId, Entity::Player& player ) override { switch( npcId ) diff --git a/src/world/Action/EventItemAction.cpp b/src/world/Action/EventItemAction.cpp index a236b7cc..1f562d76 100644 --- a/src/world/Action/EventItemAction.cpp +++ b/src/world/Action/EventItemAction.cpp @@ -7,6 +7,7 @@ #include #include "Manager/PlayerMgr.h" +#include "Script/ScriptMgr.h" #include #include #include @@ -54,6 +55,9 @@ bool EventItemAction::init() void EventItemAction::execute() { Manager::PlayerMgr::sendDebug( *getSourceChara()->getAsPlayer(), "EventItemAction type {0} execute called.", m_eventItemAction->data().Action ); + auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref(); + + scriptMgr.onEventItem( *getSourceChara()->getAsPlayer(), m_eventItem, m_eventItemAction->data().EventHandler, m_targetId ); } void EventItemAction::onStart() diff --git a/src/world/Script/NativeScriptApi.cpp b/src/world/Script/NativeScriptApi.cpp index 6847abe5..ee5b6fab 100644 --- a/src/world/Script/NativeScriptApi.cpp +++ b/src/world/Script/NativeScriptApi.cpp @@ -119,10 +119,9 @@ namespace Sapphire::ScriptAPI { } - void EventScript::onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, - uint64_t targetId ) - { - } + //void EventScript::onEventItem( Entity::Player& player, Entity::Player& player, uint64_t actorId ) + //{ + //} void EventScript::onEventHandlerTradeReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param, uint32_t catalogId ) diff --git a/src/world/Script/NativeScriptApi.h b/src/world/Script/NativeScriptApi.h index 2e6389ca..310959b3 100644 --- a/src/world/Script/NativeScriptApi.h +++ b/src/world/Script/NativeScriptApi.h @@ -163,8 +163,7 @@ namespace Sapphire::ScriptAPI virtual void onOutsideRange( Sapphire::Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ); - virtual void onEventItem( Sapphire::Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, - uint64_t targetId ); + //virtual void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ); virtual void onEventHandlerTradeReturn( Sapphire::Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param, uint32_t catalogId ); diff --git a/src/world/Script/ScriptMgr.cpp b/src/world/Script/ScriptMgr.cpp index 44994de3..62052077 100644 --- a/src/world/Script/ScriptMgr.cpp +++ b/src/world/Script/ScriptMgr.cpp @@ -320,21 +320,33 @@ bool Sapphire::Scripting::ScriptMgr::onEventHandlerTradeReturn( Entity::Player& return false; } -bool Sapphire::Scripting::ScriptMgr::onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, uint64_t targetId ) +bool Sapphire::Scripting::ScriptMgr::onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint64_t targetId ) { auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); - std::string eventName = "onEventItem"; std::string objName = eventMgr.getEventName( eventId ); PlayerMgr::sendDebug( player, "Calling: {0}.{1} - {2}", objName, eventName, eventId ); - auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId ); - if( script ) + auto eventType = static_cast< uint16_t >( eventId >> 16 ); + auto& exdData = Common::Service< Data::ExdData >::ref(); + if( eventType == Event::EventHandler::EventHandlerType::Quest ) { - eventMgr.eventStart( player, targetId, eventId, Event::EventHandler::Item, 0, 0 ); - - script->onEventItem( player, eventItemId, eventId, castTime, targetId ); - return true; + auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::QuestScript >( eventId ); + if( script ) + { + auto questId = static_cast< uint16_t >( eventId ); + if( player.hasQuest( eventId ) ) + { + World::Quest preQ; + auto questIdx = player.getQuestIndex( questId ); + auto& quest = player.getQuestByIndex( questIdx ); + preQ = quest; + script->onEventItem( quest, player, targetId ); + if( quest != preQ ) + player.updateQuest( quest ); + return true; + } + } } return false; diff --git a/src/world/Script/ScriptMgr.h b/src/world/Script/ScriptMgr.h index c0aa2d6b..d9a14f27 100644 --- a/src/world/Script/ScriptMgr.h +++ b/src/world/Script/ScriptMgr.h @@ -64,8 +64,7 @@ namespace Sapphire::Scripting bool onEmote( Entity::Player& player, uint64_t actorId, uint32_t eventId, uint8_t emoteId ); - bool onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, - uint64_t targetId ); + bool onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint64_t targetId ); bool onBNpcKill( Entity::Player& player, uint16_t nameId );