1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 06:27:45 +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
{
switch( npcId )

View file

@ -7,6 +7,7 @@
#include <Network/PacketWrappers/EffectPacket.h>
#include "Manager/PlayerMgr.h"
#include "Script/ScriptMgr.h"
#include <Service.h>
#include <Network/CommonActorControl.h>
#include <WorldServer.h>
@ -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()

View file

@ -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 )

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 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 );

View file

@ -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;

View file

@ -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 );