1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 14:37:44 +00:00

onEventItem in scripts can now be implemented

This commit is contained in:
Mordred 2021-12-17 23:13:27 +01:00
parent cf2f1d0d58
commit 4baf4314d3
6 changed files with 34 additions and 16 deletions

View file

@ -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 void onBNpcKill( uint32_t npcId, Entity::Player& player ) override
{ {
switch( npcId ) switch( npcId )

View file

@ -7,6 +7,7 @@
#include <Network/PacketWrappers/EffectPacket.h> #include <Network/PacketWrappers/EffectPacket.h>
#include "Manager/PlayerMgr.h" #include "Manager/PlayerMgr.h"
#include "Script/ScriptMgr.h"
#include <Service.h> #include <Service.h>
#include <Network/CommonActorControl.h> #include <Network/CommonActorControl.h>
#include <WorldServer.h> #include <WorldServer.h>
@ -54,6 +55,9 @@ bool EventItemAction::init()
void EventItemAction::execute() void EventItemAction::execute()
{ {
Manager::PlayerMgr::sendDebug( *getSourceChara()->getAsPlayer(), "EventItemAction type {0} execute called.", m_eventItemAction->data().Action ); 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() void EventItemAction::onStart()

View file

@ -119,10 +119,9 @@ namespace Sapphire::ScriptAPI
{ {
} }
void EventScript::onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, //void EventScript::onEventItem( Entity::Player& player, Entity::Player& player, uint64_t actorId )
uint64_t targetId ) //{
{ //}
}
void EventScript::onEventHandlerTradeReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param, void EventScript::onEventHandlerTradeReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param,
uint32_t catalogId ) uint32_t catalogId )

View file

@ -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 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, //virtual void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId );
uint64_t targetId );
virtual void onEventHandlerTradeReturn( Sapphire::Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param, virtual void onEventHandlerTradeReturn( Sapphire::Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param,
uint32_t catalogId ); uint32_t catalogId );

View file

@ -320,22 +320,34 @@ bool Sapphire::Scripting::ScriptMgr::onEventHandlerTradeReturn( Entity::Player&
return false; 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(); auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref();
std::string eventName = "onEventItem"; std::string eventName = "onEventItem";
std::string objName = eventMgr.getEventName( eventId ); std::string objName = eventMgr.getEventName( eventId );
PlayerMgr::sendDebug( player, "Calling: {0}.{1} - {2}", objName, eventName, eventId ); PlayerMgr::sendDebug( player, "Calling: {0}.{1} - {2}", objName, eventName, eventId );
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId ); auto eventType = static_cast< uint16_t >( eventId >> 16 );
auto& exdData = Common::Service< Data::ExdData >::ref();
if( eventType == Event::EventHandler::EventHandlerType::Quest )
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::QuestScript >( eventId );
if( script ) if( script )
{ {
eventMgr.eventStart( player, targetId, eventId, Event::EventHandler::Item, 0, 0 ); auto questId = static_cast< uint16_t >( eventId );
if( player.hasQuest( eventId ) )
script->onEventItem( player, eventItemId, eventId, castTime, targetId ); {
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 true;
} }
}
}
return false; return false;
} }

View file

@ -64,8 +64,7 @@ namespace Sapphire::Scripting
bool onEmote( Entity::Player& player, uint64_t actorId, uint32_t eventId, uint8_t emoteId ); 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, bool onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint64_t targetId );
uint64_t targetId );
bool onBNpcKill( Entity::Player& player, uint16_t nameId ); bool onBNpcKill( Entity::Player& player, uint16_t nameId );