From 78452638df7e583dee77e16ebabca9c797c89627 Mon Sep 17 00:00:00 2001 From: amibu Date: Wed, 9 Aug 2017 16:08:43 +0200 Subject: [PATCH 1/2] PoC Skill Scripting --- src/servers/Server_Zone/ActionCast.cpp | 4 ++++ src/servers/Server_Zone/Actor.cpp | 9 +++++++-- src/servers/Server_Zone/Actor.h | 2 +- src/servers/Server_Zone/PacketHandlers2.cpp | 4 ++-- src/servers/Server_Zone/ScriptManager.cpp | 21 +++++++++++++++++++++ src/servers/Server_Zone/ScriptManager.h | 2 ++ 6 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/servers/Server_Zone/ActionCast.cpp b/src/servers/Server_Zone/ActionCast.cpp index 0e1a37e1..c6ddc46e 100644 --- a/src/servers/Server_Zone/ActionCast.cpp +++ b/src/servers/Server_Zone/ActionCast.cpp @@ -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() diff --git a/src/servers/Server_Zone/Actor.cpp b/src/servers/Server_Zone/Actor.cpp index 82b0cb7a..3df54641 100644 --- a/src/servers/Server_Zone/Actor.cpp +++ b/src/servers/Server_Zone/Actor.cpp @@ -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 */ diff --git a/src/servers/Server_Zone/Actor.h b/src/servers/Server_Zone/Actor.h index aa6dc39b..1e2c2374 100644 --- a/src/servers/Server_Zone/Actor.h +++ b/src/servers/Server_Zone/Actor.h @@ -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 ); diff --git a/src/servers/Server_Zone/PacketHandlers2.cpp b/src/servers/Server_Zone/PacketHandlers2.cpp index 08ecf302..ad5e4eff 100644 --- a/src/servers/Server_Zone/PacketHandlers2.cpp +++ b/src/servers/Server_Zone/PacketHandlers2.cpp @@ -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 ) diff --git a/src/servers/Server_Zone/ScriptManager.cpp b/src/servers/Server_Zone/ScriptManager.cpp index 4a05c549..3ca317a2 100644 --- a/src/servers/Server_Zone/ScriptManager.cpp +++ b/src/servers/Server_Zone/ScriptManager.cpp @@ -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(); diff --git a/src/servers/Server_Zone/ScriptManager.h b/src/servers/Server_Zone/ScriptManager.h index 83673fc2..cd6b0e5c 100644 --- a/src/servers/Server_Zone/ScriptManager.h +++ b/src/servers/Server_Zone/ScriptManager.h @@ -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 ); From e49dff4d4df6528a58a8fdbfa1148da9ed5f38c5 Mon Sep 17 00:00:00 2001 From: amibu Date: Wed, 9 Aug 2017 16:36:19 +0200 Subject: [PATCH 2/2] Test .travis.yml --- .travis.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..927ce157 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,28 @@ +language: c++ +sudo: enabled +before_install: + - sudo apt-get update -qq + - sudo apt-get install -qq libboost-all-dev:i368 libmysqlclient-dev:i368 + +compiler: + - gcc + +install: + - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps" + - mkdir ${DEPS_DIR} && cd ${DEPS_DIR} + + - | + if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then + CMAKE_URL="http://www.cmake.org/files/v3.3/cmake-3.3.2-Linux-x86_64.tar.gz" + mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake + export PATH=${DEPS_DIR}/cmake/bin:${PATH} + fi + + # Go to the Root directory + - cd .. + +# Build steps +script: + - mkdir build + - cd build + - ${DEPS_DIR}/cmake/bin/cmake .. && make \ No newline at end of file