1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 07:07:45 +00:00

refactoring, make ranged targeted aoe actions work somewhat properly

This commit is contained in:
NotAdam 2019-04-07 16:31:09 +10:00
parent a09616e0e1
commit 03856a339c
9 changed files with 45 additions and 12 deletions

View file

@ -0,0 +1,24 @@
#include <Script/NativeScriptApi.h>
#include <ScriptObject.h>
#include <Actor/Player.h>
#include <Action/Action.h>
class ActionAbyssalDrain3641 :
public Sapphire::ScriptAPI::ActionScript
{
public:
ActionAbyssalDrain3641() :
Sapphire::ScriptAPI::ActionScript( 3641 )
{
}
void onExecute( Sapphire::Action::Action& action ) override
{
for( auto& chara : action.getHitCharas() )
{
chara->takeDamage( chara->getMaxHp() * 0.5f );
}
}
};
EXPOSE_SCRIPT( ActionAbyssalDrain3641 );

View file

@ -14,10 +14,8 @@ public:
void onExecute( Sapphire::Action::Action& action ) override
{
for( auto& chara : action.getHitActors() )
{
chara->takeDamage( chara->getMaxHp() * 0.34f );
}
auto chara = action.getHitChara();
chara->takeDamage( chara->getMaxHp() * 0.34f );
}
};

View file

@ -14,7 +14,7 @@ public:
void onExecute( Sapphire::Action::Action& action ) override
{
for( auto& chara : action.getHitActors() )
for( auto& chara : action.getHitCharas() )
{
chara->takeDamage( chara->getMaxHp() * 0.34f );
}

View file

@ -100,6 +100,20 @@ bool Sapphire::Action::Action::init()
m_primaryCostType = static_cast< Common::ActionPrimaryCostType >( m_actionData->costType );
m_primaryCost = m_actionData->cost;
if( !m_actionData->targetArea )
{
// override pos to target position
// todo: this is kinda dirty
for( auto& actor : m_pSource->getInRangeActors() )
{
if( actor->getId() == m_targetId )
{
m_pos = actor->getPos();
break;
}
}
}
// todo: add missing rows for secondaryCostType/secondaryCostType and rename the current rows to primaryCostX
addDefaultActorFilters();
@ -558,12 +572,12 @@ bool Sapphire::Action::Action::preFilterActor( Sapphire::Entity::Actor& actor )
return true;
}
std::vector< Sapphire::Entity::CharaPtr >& Sapphire::Action::Action::getHitActors()
std::vector< Sapphire::Entity::CharaPtr >& Sapphire::Action::Action::getHitCharas()
{
return m_hitActors;
}
Sapphire::Entity::CharaPtr Sapphire::Action::Action::getHitActor()
Sapphire::Entity::CharaPtr Sapphire::Action::Action::getHitChara()
{
if( !m_hitActors.empty() )
{

View file

@ -97,13 +97,13 @@ namespace Sapphire::Action
void addDefaultActorFilters();
std::vector< Entity::CharaPtr >& getHitActors();
std::vector< Entity::CharaPtr >& getHitCharas();
/*!
* @brief Returns the first hit actor inside the m_hitActors vector.
* @return The CharaPtr otherwise nullptr
*/
Entity::CharaPtr getHitActor();
Entity::CharaPtr getHitChara();
/*!
* @brief Starts the cast. Finishes it immediately if there is no cast time (weaponskills).

View file

@ -47,9 +47,6 @@ void World::Manager::ActionMgr::handleTargetedPlayerAction( Entity::Player& play
action->setTargetId( targetId );
if( player.getId() == targetId )
action->setPos( player.getPos() );
if( !action->init() )
return;