mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-28 23:27:45 +00:00
commit
3634ccdb4e
4 changed files with 41 additions and 10 deletions
|
@ -346,6 +346,13 @@ bool Core::Data::ExdData::loadActionInfo()
|
|||
uint16_t points_cost = getField< uint16_t >( fields, 31 );//29
|
||||
|
||||
bool is_instant = getField< bool >( fields, 35 );
|
||||
|
||||
uint8_t typeshift = 0x6;
|
||||
uint8_t mask = 1 << typeshift;
|
||||
is_instant &= mask;
|
||||
bool final = ( is_instant & mask ) == mask;
|
||||
is_instant = final;
|
||||
|
||||
uint16_t cast_time = getField< uint16_t >( fields, 36 );
|
||||
uint16_t recast_time = getField< uint16_t >( fields, 37 );
|
||||
|
||||
|
|
|
@ -74,21 +74,20 @@ void Core::Network::GameConnection::skillHandler( Core::Network::Packets::GamePa
|
|||
}
|
||||
else
|
||||
{
|
||||
Core::Entity::ActorPtr targetActor;
|
||||
|
||||
auto inRange = pPlayer->getInRangeActors( true );
|
||||
for( auto actor : inRange )
|
||||
Core::Entity::ActorPtr targetActor = pPlayer;
|
||||
if( targetId != pPlayer->getId() )
|
||||
{
|
||||
if( actor->getId() == targetId )
|
||||
{
|
||||
targetActor = actor;
|
||||
}
|
||||
targetActor = pPlayer->lookupTargetById( targetId );
|
||||
}
|
||||
|
||||
if( targetActor )
|
||||
if( pPlayer->actionHasCastTime( action ) )
|
||||
{
|
||||
g_scriptMgr.onCastFinish( pPlayer, targetActor, action );
|
||||
}
|
||||
else
|
||||
{
|
||||
Action::ActionCastPtr pActionCast( new Action::ActionCast( pPlayer, targetActor, action ) );
|
||||
pPlayer->setCurrentAction(pActionCast);
|
||||
pPlayer->setCurrentAction( pActionCast );
|
||||
pPlayer->sendDebug( "setCurrentAction()" );
|
||||
pPlayer->getCurrentAction()->onStart();
|
||||
}
|
||||
|
|
|
@ -923,6 +923,20 @@ void Core::Entity::Player::despawn( Core::Entity::ActorPtr pTarget )
|
|||
pPlayer->queuePacket( ActorControlPacket143( getId(), DespawnZoneScreenMsg, 0x04, getId(), 0x01 ) );
|
||||
}
|
||||
|
||||
Core::Entity::ActorPtr Core::Entity::Player::lookupTargetById( uint64_t targetId )
|
||||
{
|
||||
Core::Entity::ActorPtr targetActor;
|
||||
auto inRange = getInRangeActors( true );
|
||||
for( auto actor : inRange )
|
||||
{
|
||||
if( actor->getId() == targetId )
|
||||
{
|
||||
targetActor = actor;
|
||||
}
|
||||
}
|
||||
return targetActor;
|
||||
}
|
||||
|
||||
void Core::Entity::Player::setLastPing( uint32_t ping )
|
||||
{
|
||||
m_lastPing = ping;
|
||||
|
@ -972,6 +986,11 @@ const uint8_t * Core::Entity::Player::getStateFlags() const
|
|||
return m_stateFlags;
|
||||
}
|
||||
|
||||
bool Core::Entity::Player::actionHasCastTime( uint32_t actionId ) //TODO: Add logic for special cases
|
||||
{
|
||||
return g_exdData.m_actionInfoMap[actionId].is_instant;
|
||||
}
|
||||
|
||||
bool Core::Entity::Player::hasStateFlag( Core::Common::PlayerStateFlag flag ) const
|
||||
{
|
||||
int iFlag = static_cast< uint32_t >( flag );
|
||||
|
|
|
@ -452,6 +452,8 @@ public:
|
|||
void sendUrgent( const std::string& message );
|
||||
void sendDebug( const std::string& message );
|
||||
|
||||
// Player Battle Handling
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void onMobAggro( BattleNpcPtr pBNpc );
|
||||
void onMobDeaggro( BattleNpcPtr pBNpc );
|
||||
|
||||
|
@ -463,6 +465,10 @@ public:
|
|||
|
||||
void sendHateList();
|
||||
|
||||
bool actionHasCastTime( uint32_t actionId );
|
||||
|
||||
Core::Entity::ActorPtr lookupTargetById( uint64_t targetId );
|
||||
|
||||
bool isLogin() const;
|
||||
void setIsLogin( bool bIsLogin );
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue