mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-28 07:07:45 +00:00
commit
5ea6e820f4
5 changed files with 91 additions and 8 deletions
50
src/servers/Scripts/common/WarpTaxi.cpp
Normal file
50
src/servers/Scripts/common/WarpTaxi.cpp
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
#include <ScriptObject.h>
|
||||||
|
#include <Actor/Player.h>
|
||||||
|
|
||||||
|
#include <Exd/ExdDataGenerated.h>
|
||||||
|
#include <Framework.h>
|
||||||
|
|
||||||
|
using namespace Core;
|
||||||
|
|
||||||
|
class WarpTaxi : public Sapphire::ScriptAPI::EventScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WarpTaxi() :
|
||||||
|
Sapphire::ScriptAPI::EventScript( 0x0002005a )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void inner( Entity::Player& player, const Event::SceneResult& result )
|
||||||
|
{
|
||||||
|
if( result.param1 != 256 )
|
||||||
|
{
|
||||||
|
std::function< void( Entity::Player&, const Event::SceneResult& ) > fn = std::bind( &WarpTaxi::inner, this, std::placeholders::_1, std::placeholders::_2 );
|
||||||
|
|
||||||
|
player.playScene( 1310721, 0, HIDE_HOTBAR, 0, 1, 341, fn );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void inner2( Entity::Player& player, uint64_t actorId )
|
||||||
|
{
|
||||||
|
player.eventStart( actorId, 1310721, Event::EventHandler::Nest, 0, 0 );
|
||||||
|
std::function< void( Entity::Player&, const Event::SceneResult& ) > fn = std::bind( &WarpTaxi::inner, this, std::placeholders::_1, std::placeholders::_2 );
|
||||||
|
player.playScene( 1310721, 0, HIDE_HOTBAR, 0, 1, 341, fn );
|
||||||
|
}
|
||||||
|
|
||||||
|
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
|
||||||
|
{
|
||||||
|
auto exddata = getFramework()->get< Core::Data::ExdDataGenerated >();
|
||||||
|
if( !exddata )
|
||||||
|
return;
|
||||||
|
|
||||||
|
auto warp = exddata->get< Core::Data::Warp >( eventId );
|
||||||
|
if( !warp )
|
||||||
|
return;
|
||||||
|
|
||||||
|
player.eventStart( actorId, warp->defaultTalk1, Event::EventHandler::Nest, 0, 0, std::bind( &WarpTaxi::inner2, this, std::placeholders::_1, std::placeholders::_2 ) );
|
||||||
|
player.playScene( warp->defaultTalk1, 0, HIDE_HOTBAR, [warp, this]( Entity::Player& player, const Event::SceneResult& result )
|
||||||
|
{
|
||||||
|
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
};
|
|
@ -61,7 +61,7 @@ namespace Core::Entity
|
||||||
/*! start/register a normal event */
|
/*! start/register a normal event */
|
||||||
void
|
void
|
||||||
eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventParam, uint8_t eventParam1,
|
eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventParam, uint8_t eventParam1,
|
||||||
uint32_t eventParam2 );
|
uint32_t eventParam2, Event::EventHandler::EventFinishCallback callback = nullptr );
|
||||||
|
|
||||||
/*! play a subevent */
|
/*! play a subevent */
|
||||||
void playScene( 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 );
|
||||||
|
|
|
@ -92,11 +92,13 @@ void Core::Entity::Player::directorPlayScene( uint32_t eventId, uint32_t scene,
|
||||||
|
|
||||||
void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId,
|
void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId,
|
||||||
Event::EventHandler::EventType eventType, uint8_t eventParam1,
|
Event::EventHandler::EventType eventType, uint8_t eventParam1,
|
||||||
uint32_t eventParam2 )
|
uint32_t eventParam2, Event::EventHandler::EventFinishCallback callback )
|
||||||
{
|
{
|
||||||
|
|
||||||
auto newEvent = Event::make_EventHandler( this, actorId, eventId, eventType, eventParam2 );
|
auto newEvent = Event::make_EventHandler( this, actorId, eventId, eventType, eventParam2 );
|
||||||
|
|
||||||
|
newEvent->setEventFinishCallback( callback );
|
||||||
|
|
||||||
addEvent( newEvent );
|
addEvent( newEvent );
|
||||||
|
|
||||||
setStateFlag( PlayerStateFlag::InNpcEvent );
|
setStateFlag( PlayerStateFlag::InNpcEvent );
|
||||||
|
@ -163,8 +165,8 @@ Core::Event::EventHandlerPtr Core::Entity::Player::bootstrapSceneEvent( uint32_t
|
||||||
if( !pEvent && getEventCount() )
|
if( !pEvent && getEventCount() )
|
||||||
{
|
{
|
||||||
// We're trying to play a nested event, need to start it first.
|
// We're trying to play a nested event, need to start it first.
|
||||||
eventStart( getId(), eventId, Event::EventHandler::Nest, 0, 0 );
|
//eventStart( getId(), eventId, Event::EventHandler::Nest, 0, 0 );
|
||||||
pEvent = getEvent( eventId );
|
//pEvent = getEvent( eventId );
|
||||||
}
|
}
|
||||||
else if( !pEvent )
|
else if( !pEvent )
|
||||||
{
|
{
|
||||||
|
@ -185,6 +187,16 @@ void Core::Entity::Player::playScene( uint32_t eventId, uint32_t scene,
|
||||||
if( !pEvent )
|
if( !pEvent )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if( pEvent->getEventType() == Event::EventHandler::Nest )
|
||||||
|
{
|
||||||
|
auto events = eventList();
|
||||||
|
|
||||||
|
for( auto it : events )
|
||||||
|
{
|
||||||
|
it.second->setPlayedScene( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pEvent->setPlayedScene( true );
|
pEvent->setPlayedScene( true );
|
||||||
pEvent->setEventReturnCallback( eventCallback );
|
pEvent->setEventReturnCallback( eventCallback );
|
||||||
pEvent->setSceneChainCallback( nullptr );
|
pEvent->setSceneChainCallback( nullptr );
|
||||||
|
@ -249,9 +261,14 @@ void Core::Entity::Player::eventFinish( uint32_t eventId, uint32_t freePlayer )
|
||||||
pEvent->getEventType(), pEvent->getEventParam() ) );
|
pEvent->getEventType(), pEvent->getEventParam() ) );
|
||||||
removeEvent( pEvent->getId() );
|
removeEvent( pEvent->getId() );
|
||||||
|
|
||||||
|
auto callback = pEvent->getEventFinishCallback();
|
||||||
|
|
||||||
|
if( callback )
|
||||||
|
callback( *this, pEvent->getActorId() );
|
||||||
|
|
||||||
auto events = eventList();
|
auto events = eventList();
|
||||||
|
|
||||||
for( auto it : events )
|
/*for( auto it : events )
|
||||||
{
|
{
|
||||||
|
|
||||||
if( it.second->hasPlayedScene() == false )
|
if( it.second->hasPlayedScene() == false )
|
||||||
|
@ -262,7 +279,7 @@ void Core::Entity::Player::eventFinish( uint32_t eventId, uint32_t freePlayer )
|
||||||
it.second->getEventParam() ) );
|
it.second->getEventParam() ) );
|
||||||
removeEvent( it.second->getId() );
|
removeEvent( it.second->getId() );
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,16 @@ void Core::Event::EventHandler::setSceneChainCallback( Core::Event::EventHandler
|
||||||
m_chainCallback = callback;
|
m_chainCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Core::Event::EventHandler::EventFinishCallback Core::Event::EventHandler::getEventFinishCallback() const
|
||||||
|
{
|
||||||
|
return m_finishCallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Core::Event::EventHandler::setEventFinishCallback( EventFinishCallback callback )
|
||||||
|
{
|
||||||
|
m_finishCallback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
bool Core::Event::EventHandler::hasPlayedScene() const
|
bool Core::Event::EventHandler::hasPlayedScene() const
|
||||||
{
|
{
|
||||||
return m_playedScene;
|
return m_playedScene;
|
||||||
|
|
|
@ -75,6 +75,7 @@ namespace Core::Event
|
||||||
|
|
||||||
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& ) >;
|
using SceneChainCallback = std::function< void( Entity::Player& ) >;
|
||||||
|
using EventFinishCallback = std::function< void( Entity::Player&, uint64_t ) >;
|
||||||
|
|
||||||
EventHandler( Entity::Player* pOwner, uint64_t actorId, uint32_t eventId, EventType eventType,
|
EventHandler( Entity::Player* pOwner, uint64_t actorId, uint32_t eventId, EventType eventType,
|
||||||
uint32_t eventParam );
|
uint32_t eventParam );
|
||||||
|
@ -107,6 +108,10 @@ namespace Core::Event
|
||||||
|
|
||||||
void setSceneChainCallback( SceneChainCallback callback );
|
void setSceneChainCallback( SceneChainCallback callback );
|
||||||
|
|
||||||
|
EventFinishCallback getEventFinishCallback() const;
|
||||||
|
|
||||||
|
void setEventFinishCallback( EventFinishCallback callback );
|
||||||
|
|
||||||
bool hasNestedEvent() const;
|
bool hasNestedEvent() const;
|
||||||
|
|
||||||
void removeNestedEvent();
|
void removeNestedEvent();
|
||||||
|
@ -125,6 +130,7 @@ namespace Core::Event
|
||||||
bool m_playedScene;
|
bool m_playedScene;
|
||||||
SceneReturnCallback m_returnCallback;
|
SceneReturnCallback m_returnCallback;
|
||||||
SceneChainCallback m_chainCallback;
|
SceneChainCallback m_chainCallback;
|
||||||
|
EventFinishCallback m_finishCallback;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue