From f429320ae0e16bf889bd28e5a92b2ad2b48e37e4 Mon Sep 17 00:00:00 2001 From: amibu Date: Tue, 15 Aug 2017 16:19:55 +0200 Subject: [PATCH] Forgot something --- bin/scripts/chai/skill/skillDef_121.chai | 1 + src/servers/Server_Common/ExdData.cpp | 8 ++++---- src/servers/Server_Zone/ActionCast.cpp | 4 ---- .../Server_Zone/GameCommandHandler.cpp | 20 +++++++++++++++++++ src/servers/Server_Zone/PacketHandlers2.cpp | 2 +- src/servers/Server_Zone/Player.cpp | 9 ++++++++- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/bin/scripts/chai/skill/skillDef_121.chai b/bin/scripts/chai/skill/skillDef_121.chai index 56286409..8fb8dd3d 100644 --- a/bin/scripts/chai/skill/skillDef_121.chai +++ b/bin/scripts/chai/skill/skillDef_121.chai @@ -10,6 +10,7 @@ class skillDef_121Def def onFinish( player, target ) { + player.handleScriptSkill( STD_DAMAGE, 121, 5, 0, target ); target.addStatusEffectByIdIfNotExist(143, 20000, 0); } diff --git a/src/servers/Server_Common/ExdData.cpp b/src/servers/Server_Common/ExdData.cpp index 97795eff..965f1cc8 100644 --- a/src/servers/Server_Common/ExdData.cpp +++ b/src/servers/Server_Common/ExdData.cpp @@ -345,13 +345,13 @@ bool Core::Data::ExdData::loadActionInfo() uint8_t points_type = getField< uint8_t >( fields, 30 );//28 uint16_t points_cost = getField< uint16_t >( fields, 31 );//29 - bool is_instant = getField< bool >( fields, 35 ); + uint32_t instantval = 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; + instantval &= mask; + bool final = ( instantval & mask ) == mask; + bool is_instant = final; uint16_t cast_time = getField< uint16_t >( fields, 36 ); uint16_t recast_time = getField< uint16_t >( fields, 37 ); diff --git a/src/servers/Server_Zone/ActionCast.cpp b/src/servers/Server_Zone/ActionCast.cpp index 410697cd..98a78290 100644 --- a/src/servers/Server_Zone/ActionCast.cpp +++ b/src/servers/Server_Zone/ActionCast.cpp @@ -70,13 +70,9 @@ void Core::Action::ActionCast::onFinish() auto pPlayer = m_pSource->getAsPlayer(); pPlayer->sendDebug( "onFinish()" ); - m_pTarget->onActionHostile( pPlayer->shared_from_this() ); - pPlayer->unsetStateFlag( PlayerStateFlag::Casting ); pPlayer->sendStateFlags(); - - g_scriptMgr.onCastFinish( pPlayer, m_pTarget, m_id ); } diff --git a/src/servers/Server_Zone/GameCommandHandler.cpp b/src/servers/Server_Zone/GameCommandHandler.cpp index 37aa0224..a82848fa 100644 --- a/src/servers/Server_Zone/GameCommandHandler.cpp +++ b/src/servers/Server_Zone/GameCommandHandler.cpp @@ -257,7 +257,27 @@ void Core::GameCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlayer else pPlayer->setClassJob( static_cast ( id ) ); } + else if( subCommand == "no" ) + { + int32_t id; + sscanf( params.c_str(), "%d", &id ); + + + + uint8_t typeshift = 0x6; + uint8_t mask = 1 << typeshift; + id &= mask; + bool final = ( id & mask ) == mask; + pPlayer->sendDebug( std::to_string(final) ); + } + else if( subCommand == "aaah" ) + { + int32_t id; + + sscanf( params.c_str(), "%d", &id ); + pPlayer->sendDebug( std::to_string( pPlayer->actionHasCastTime( id ) ) ); + } } diff --git a/src/servers/Server_Zone/PacketHandlers2.cpp b/src/servers/Server_Zone/PacketHandlers2.cpp index ad337325..609638d8 100644 --- a/src/servers/Server_Zone/PacketHandlers2.cpp +++ b/src/servers/Server_Zone/PacketHandlers2.cpp @@ -80,7 +80,7 @@ void Core::Network::GameConnection::skillHandler( Core::Network::Packets::GamePa targetActor = pPlayer->lookupTargetById( targetId ); } - if( pPlayer->actionHasCastTime( action ) ) + if( !pPlayer->actionHasCastTime( action ) ) { g_scriptMgr.onCastFinish( pPlayer, targetActor, action ); } diff --git a/src/servers/Server_Zone/Player.cpp b/src/servers/Server_Zone/Player.cpp index e7088eea..a71a5ddb 100644 --- a/src/servers/Server_Zone/Player.cpp +++ b/src/servers/Server_Zone/Player.cpp @@ -988,7 +988,13 @@ const uint8_t * Core::Entity::Player::getStateFlags() const bool Core::Entity::Player::actionHasCastTime( uint32_t actionId ) //TODO: Add logic for special cases { - return g_exdData.m_actionInfoMap[actionId].is_instant; + if( g_exdData.m_actionInfoMap[actionId].is_instant ) + return false; + + if( g_exdData.m_actionInfoMap[actionId].cast_time == 0 ) + return false; + + return true; } bool Core::Entity::Player::hasStateFlag( Core::Common::PlayerStateFlag flag ) const @@ -1528,6 +1534,7 @@ void Core::Entity::Player::handleScriptSkill( uint32_t type, uint32_t actionId, sendToInRangeSet( effectPacket, true ); pTarget.takeDamage( param1 ); + pTarget.onActionHostile( shared_from_this() ); break; }