mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-24 21:57:44 +00:00
PoC Skill Scripting
This commit is contained in:
parent
e6c9c959f2
commit
337c45d000
6 changed files with 37 additions and 5 deletions
|
@ -9,6 +9,7 @@
|
|||
#include "ActorControlPacket142.h"
|
||||
#include "ActorControlPacket143.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptManager.h"
|
||||
|
||||
using namespace Core::Common;
|
||||
using namespace Core::Network;
|
||||
|
@ -17,6 +18,7 @@ using namespace Core::Network::Packets::Server;
|
|||
|
||||
extern Core::Data::ExdData g_exdData;
|
||||
extern Core::Logger g_log;
|
||||
extern Core::Scripting::ScriptManager g_scriptMgr;
|
||||
|
||||
Core::Action::ActionCast::ActionCast()
|
||||
{
|
||||
|
@ -89,6 +91,8 @@ void Core::Action::ActionCast::onFinish()
|
|||
|
||||
pPlayer->sendToInRangeSet( effectPacket, true );
|
||||
m_pTarget->takeDamage( 30 );
|
||||
|
||||
g_scriptMgr.onCastFinish( pPlayer, m_pTarget, m_id );
|
||||
}
|
||||
|
||||
void Core::Action::ActionCast::onInterrupt()
|
||||
|
|
|
@ -62,9 +62,14 @@ bool Core::Entity::Actor::isMob() const
|
|||
}
|
||||
|
||||
/*! \return list of actors currently in range */
|
||||
std::set< Core::Entity::ActorPtr > Core::Entity::Actor::getInRangeActors() const
|
||||
std::set< Core::Entity::ActorPtr > Core::Entity::Actor::getInRangeActors( bool includeSelf )
|
||||
{
|
||||
return m_inRangeActors;
|
||||
auto tempInRange = m_inRangeActors;
|
||||
|
||||
if( includeSelf )
|
||||
tempInRange.insert( shared_from_this() );
|
||||
|
||||
return tempInRange;
|
||||
}
|
||||
|
||||
/*! \return current stance of the actors */
|
||||
|
|
|
@ -181,7 +181,7 @@ public:
|
|||
|
||||
bool isMob() const;
|
||||
|
||||
std::set< ActorPtr > getInRangeActors() const;
|
||||
std::set< ActorPtr > getInRangeActors( bool includeSelf = false );
|
||||
|
||||
bool face( const Common::FFXIVARR_POSITION3& p );
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ void Core::Network::GameConnection::skillHandler( Core::Network::Packets::GamePa
|
|||
{
|
||||
std::string actionIdStr = boost::str( boost::format( "%|04X|" ) % action );
|
||||
pPlayer->sendDebug( "---------------------------------------" );
|
||||
pPlayer->sendDebug( "ActionHandler ( " + actionIdStr + " | " + g_exdData.m_actionInfoMap[action].name + " )" );
|
||||
pPlayer->sendDebug( "ActionHandler ( " + actionIdStr + " | " + g_exdData.m_actionInfoMap[action].name + " | " + std::to_string( targetId ) + " )" );
|
||||
|
||||
if( action == 5 )
|
||||
{
|
||||
|
@ -76,7 +76,7 @@ void Core::Network::GameConnection::skillHandler( Core::Network::Packets::GamePa
|
|||
{
|
||||
Core::Entity::ActorPtr targetActor;
|
||||
|
||||
auto inRange = pPlayer->getInRangeActors();
|
||||
auto inRange = pPlayer->getInRangeActors( true );
|
||||
for( auto actor : inRange )
|
||||
{
|
||||
if( actor->getId() == targetId )
|
||||
|
|
|
@ -375,6 +375,27 @@ bool Core::Scripting::ScriptManager::onMobKill( Entity::PlayerPtr pPlayer, uint1
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onCastFinish( Entity::PlayerPtr pPlayer, Entity::ActorPtr pTarget, uint32_t actionId )
|
||||
{
|
||||
std::string eventName = "onFinish";
|
||||
|
||||
try
|
||||
{
|
||||
auto obj = m_pChaiHandler->eval( "skillDef_" + std::to_string( actionId ) );
|
||||
std::string objName = "skillDef_" + std::to_string( actionId );
|
||||
|
||||
pPlayer->sendDebug( "Calling: " + objName + "." + eventName );
|
||||
auto fn = m_pChaiHandler->eval< std::function< void( chaiscript::Boxed_Value &, Entity::Player& ) > >( eventName );
|
||||
fn( obj, *pPlayer );
|
||||
}
|
||||
catch( std::exception& e )
|
||||
{
|
||||
pPlayer->sendUrgent( e.what() );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onZoneInit( ZonePtr pZone )
|
||||
{
|
||||
std::string eventName = "onZoneInit_" + pZone->getInternalName();
|
||||
|
|
|
@ -50,6 +50,8 @@ namespace Core
|
|||
|
||||
bool onMobKill( Entity::PlayerPtr pPlayer, uint16_t nameId );
|
||||
|
||||
bool onCastFinish( Entity::PlayerPtr pPlayer, Entity::ActorPtr pTarget, uint32_t actionId );
|
||||
|
||||
bool onZoneInit( ZonePtr pZone );
|
||||
|
||||
bool onEventHandlerReturn( Entity::PlayerPtr pPlayer, uint32_t eventId, uint16_t subEvent, uint16_t param1, uint16_t param2, uint16_t param3 );
|
||||
|
|
Loading…
Add table
Reference in a new issue