diff --git a/bin/scripts/chai/skill/skillDef_3.chai b/bin/scripts/chai/skill/skillDef_3.chai new file mode 100644 index 00000000..a05967ab --- /dev/null +++ b/bin/scripts/chai/skill/skillDef_3.chai @@ -0,0 +1,18 @@ +// Skill Name: Sprint +// Skill ID: 3 + +class skillDef_3Def +{ + def skillDef_3Def() + { + + } + + def onFinish( player, target ) + { + player.addStatusEffectById(50, 20000); + } + +}; + +GLOBAL skillDef_3 = skillDef_3Def(); diff --git a/src/servers/Server_Zone/Actor.cpp b/src/servers/Server_Zone/Actor.cpp index 3df54641..077d8df9 100644 --- a/src/servers/Server_Zone/Actor.cpp +++ b/src/servers/Server_Zone/Actor.cpp @@ -14,6 +14,7 @@ #include "UpdateHpMpTpPacket.h" #include "StatusEffectContainer.h" +#include "StatusEffect.h" #include "ServerZone.h" #include "Session.h" #include "Player.h" @@ -603,3 +604,10 @@ void Core::Entity::Actor::addStatusEffect( StatusEffect::StatusEffectPtr pEffect m_pStatusEffectContainer->addStatusEffect( pEffect ); } +/*! \param StatusEffectPtr to be applied to the actor */ +void Core::Entity::Actor::addStatusEffectById( int32_t id, int32_t duration ) +{ + StatusEffect::StatusEffectPtr effect( new StatusEffect::StatusEffect( id, shared_from_this(), shared_from_this(), duration, 3000 ) ); + addStatusEffect( effect ); +} + diff --git a/src/servers/Server_Zone/Actor.h b/src/servers/Server_Zone/Actor.h index 1e2c2374..de27049d 100644 --- a/src/servers/Server_Zone/Actor.h +++ b/src/servers/Server_Zone/Actor.h @@ -289,6 +289,9 @@ public: // add a status effect void addStatusEffect( StatusEffect::StatusEffectPtr pEffect ); + // add a status effect by id + void addStatusEffectById( int32_t id, int32_t duration ); + // TODO: Why did i even declare them publicly here?! std::set< ActorPtr > m_inRangeActors; std::set< PlayerPtr > m_inRangePlayers; diff --git a/src/servers/Server_Zone/ScriptManager.cpp b/src/servers/Server_Zone/ScriptManager.cpp index 3ca317a2..78e3bf75 100644 --- a/src/servers/Server_Zone/ScriptManager.cpp +++ b/src/servers/Server_Zone/ScriptManager.cpp @@ -385,8 +385,8 @@ bool Core::Scripting::ScriptManager::onCastFinish( Entity::PlayerPtr pPlayer, En 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 ); + auto fn = m_pChaiHandler->eval< std::function< void( chaiscript::Boxed_Value &, Entity::Player&, Entity::Actor& ) > >( eventName ); + fn( obj, *pPlayer, *pTarget ); } catch( std::exception& e ) { diff --git a/src/servers/Server_Zone/ScriptManagerInit.cpp b/src/servers/Server_Zone/ScriptManagerInit.cpp index b3b0fcaa..07d705f5 100644 --- a/src/servers/Server_Zone/ScriptManagerInit.cpp +++ b/src/servers/Server_Zone/ScriptManagerInit.cpp @@ -11,6 +11,7 @@ #include "EventHelper.h" #include "ServerNoticePacket.h" +#include "StatusEffect.h" #include #include @@ -32,6 +33,8 @@ int Core::Scripting::ScriptManager::init() m_pChaiHandler->add( chaiscript::fun( &Entity::Actor::getTp ), "getTp" ); m_pChaiHandler->add( chaiscript::fun( &Entity::Actor::getLevel ), "getLevel" ); m_pChaiHandler->add( chaiscript::fun( &Entity::Actor::getTargetId ), "getTargetId" ); + m_pChaiHandler->add( chaiscript::fun( &Entity::Actor::addStatusEffect ), "addStatusEffect" ); + m_pChaiHandler->add( chaiscript::fun( &Entity::Actor::addStatusEffectById ), "addStatusEffectById" ); m_pChaiHandler->add( chaiscript::fun( &Entity::Player::forceZoneing ), "setZone" ); m_pChaiHandler->add( chaiscript::fun( &Entity::Player::getClassAsInt ), "getClass" ); @@ -152,6 +155,7 @@ int Core::Scripting::ScriptManager::init() m_pChaiHandler->add( chaiscript::user_type< Entity::Actor >(), "Actor" ); m_pChaiHandler->add( chaiscript::user_type< Entity::Player >(), "Player" ); m_pChaiHandler->add( chaiscript::user_type< Entity::BattleNpc >(), "BattleNpc" ); + m_pChaiHandler->add( chaiscript::user_type< StatusEffect::StatusEffect >(), "StatusEffect" ); m_pChaiHandler->add( chaiscript::user_type< Zone >(), "Zone" ); m_pChaiHandler->add( chaiscript::fun( &Zone::getName ), "getName" );