mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-25 14:07:46 +00:00
Adjustments to new definitions of action effect packet;
This commit is contained in:
parent
c5669558ae
commit
f2b486dbde
4 changed files with 34 additions and 32 deletions
|
@ -590,12 +590,14 @@ namespace Core {
|
||||||
GpGain = 14
|
GpGain = 14
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ActionEffectSeverityType : uint8_t
|
enum ActionHitSeverityType : uint8_t
|
||||||
{
|
{
|
||||||
Normal = 0,
|
NormalDamage = 0,
|
||||||
Crit = 1,
|
CritHeal = 0,
|
||||||
DirectHit = 2,
|
CritDamage = 1,
|
||||||
CritDirectHit = 3
|
NormalHeal = 1,
|
||||||
|
DirectHitDamage = 2,
|
||||||
|
CritDirectHitDamage = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
enum HandleActionType : uint8_t
|
enum HandleActionType : uint8_t
|
||||||
|
|
|
@ -301,12 +301,12 @@ struct FFXIVIpcUpdateHpMpTp : FFXIVIpcBasePacket<UpdateHpMpTp>
|
||||||
*/
|
*/
|
||||||
struct effectEntry
|
struct effectEntry
|
||||||
{
|
{
|
||||||
uint8_t unknown_1;
|
Common::ActionEffectType effectType;
|
||||||
uint8_t unknown_2;
|
Common::ActionHitSeverityType hitSeverity;
|
||||||
uint8_t unknown_3;
|
uint8_t unknown_3;
|
||||||
int8_t bonusPercent;
|
int8_t bonusPercent;
|
||||||
int16_t param1;
|
int16_t value;
|
||||||
uint8_t unknown_5;
|
uint8_t valueMultiplier; // This multiplies whatever value is in the 'value' param by 10. Possibly a workaround for big numbers
|
||||||
uint8_t unknown_6;
|
uint8_t unknown_6;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -595,7 +595,7 @@ void Core::Entity::Actor::autoAttack( ActorPtr pTarget )
|
||||||
srand( static_cast< uint32_t >( tick ) );
|
srand( static_cast< uint32_t >( tick ) );
|
||||||
|
|
||||||
uint32_t damage = 10 + rand() % 12;
|
uint32_t damage = 10 + rand() % 12;
|
||||||
uint32_t variation = 0 + rand() % 3;
|
uint32_t variation = 0 + rand() % 4;
|
||||||
|
|
||||||
GamePacketNew< FFXIVIpcEffect, ServerZoneIpcType > effectPacket( getId() );
|
GamePacketNew< FFXIVIpcEffect, ServerZoneIpcType > effectPacket( getId() );
|
||||||
effectPacket.data().targetId = pTarget->getId();
|
effectPacket.data().targetId = pTarget->getId();
|
||||||
|
@ -606,9 +606,9 @@ void Core::Entity::Actor::autoAttack( ActorPtr pTarget )
|
||||||
effectPacket.data().numEffects = 1;
|
effectPacket.data().numEffects = 1;
|
||||||
effectPacket.data().rotation = Math::Util::floatToUInt16Rot( getRotation() );
|
effectPacket.data().rotation = Math::Util::floatToUInt16Rot( getRotation() );
|
||||||
effectPacket.data().effectTarget = pTarget->getId();
|
effectPacket.data().effectTarget = pTarget->getId();
|
||||||
effectPacket.data().effects[0].param1 = damage;
|
effectPacket.data().effects[0].value = damage;
|
||||||
effectPacket.data().effects[0].unknown_1 = 3;
|
effectPacket.data().effects[0].effectType = ActionEffectType::Damage;
|
||||||
effectPacket.data().effects[0].unknown_2 = 1;
|
effectPacket.data().effects[0].hitSeverity = static_cast< ActionHitSeverityType >( variation );
|
||||||
effectPacket.data().effects[0].unknown_3 = 7;
|
effectPacket.data().effects[0].unknown_3 = 7;
|
||||||
|
|
||||||
sendToInRangeSet( effectPacket );
|
sendToInRangeSet( effectPacket );
|
||||||
|
|
|
@ -1482,9 +1482,9 @@ void Core::Entity::Player::autoAttack( ActorPtr pTarget )
|
||||||
effectPacket.data().rotation = Math::Util::floatToUInt16Rot(getRotation());
|
effectPacket.data().rotation = Math::Util::floatToUInt16Rot(getRotation());
|
||||||
effectPacket.data().effectTargetId = pTarget->getId();
|
effectPacket.data().effectTargetId = pTarget->getId();
|
||||||
effectPacket.data().effectTarget = pTarget->getId();
|
effectPacket.data().effectTarget = pTarget->getId();
|
||||||
effectPacket.data().effects[0].param1 = damage;
|
effectPacket.data().effects[0].value = damage;
|
||||||
effectPacket.data().effects[0].unknown_1 = 3;
|
effectPacket.data().effects[0].effectType = Common::ActionEffectType::Damage;
|
||||||
effectPacket.data().effects[0].unknown_2 = 1;
|
effectPacket.data().effects[0].hitSeverity = Common::ActionHitSeverityType::NormalDamage;
|
||||||
effectPacket.data().effects[0].unknown_3 = 7;
|
effectPacket.data().effects[0].unknown_3 = 7;
|
||||||
|
|
||||||
sendToInRangeSet(effectPacket, true);
|
sendToInRangeSet(effectPacket, true);
|
||||||
|
@ -1502,9 +1502,9 @@ void Core::Entity::Player::autoAttack( ActorPtr pTarget )
|
||||||
effectPacket.data().actionTextId = 7;
|
effectPacket.data().actionTextId = 7;
|
||||||
effectPacket.data().rotation = Math::Util::floatToUInt16Rot(getRotation());
|
effectPacket.data().rotation = Math::Util::floatToUInt16Rot(getRotation());
|
||||||
effectPacket.data().effectTarget = pTarget->getId();
|
effectPacket.data().effectTarget = pTarget->getId();
|
||||||
effectPacket.data().effects[0].param1 = damage;
|
effectPacket.data().effects[0].value = damage;
|
||||||
effectPacket.data().effects[0].unknown_1 = 3;
|
effectPacket.data().effects[0].effectType = Common::ActionEffectType::Damage;
|
||||||
effectPacket.data().effects[0].unknown_2 = 2;
|
effectPacket.data().effects[0].hitSeverity = Common::ActionHitSeverityType::NormalDamage;
|
||||||
effectPacket.data().effects[0].unknown_3 = 71;
|
effectPacket.data().effects[0].unknown_3 = 71;
|
||||||
|
|
||||||
sendToInRangeSet(effectPacket, true);
|
sendToInRangeSet(effectPacket, true);
|
||||||
|
@ -1538,9 +1538,9 @@ void Core::Entity::Player::handleScriptSkill( uint32_t type, uint32_t actionId,
|
||||||
effectPacket.data().numEffects = 1;
|
effectPacket.data().numEffects = 1;
|
||||||
effectPacket.data().rotation = Math::Util::floatToUInt16Rot( getRotation() );
|
effectPacket.data().rotation = Math::Util::floatToUInt16Rot( getRotation() );
|
||||||
effectPacket.data().effectTarget = pTarget.getId();
|
effectPacket.data().effectTarget = pTarget.getId();
|
||||||
effectPacket.data().effects[0].param1 = static_cast< int16_t >( param1 );
|
effectPacket.data().effects[0].value = static_cast< int16_t >( param1 );
|
||||||
effectPacket.data().effects[0].unknown_1 = 3;
|
effectPacket.data().effects[0].effectType = ActionEffectType::Damage;
|
||||||
effectPacket.data().effects[0].unknown_2 = 1;
|
effectPacket.data().effects[0].hitSeverity = ActionHitSeverityType::NormalDamage;
|
||||||
effectPacket.data().effects[0].unknown_3 = 7;
|
effectPacket.data().effects[0].unknown_3 = 7;
|
||||||
|
|
||||||
sendToInRangeSet( effectPacket, true );
|
sendToInRangeSet( effectPacket, true );
|
||||||
|
@ -1568,9 +1568,9 @@ void Core::Entity::Player::handleScriptSkill( uint32_t type, uint32_t actionId,
|
||||||
effectPacket.data().numEffects = 1;
|
effectPacket.data().numEffects = 1;
|
||||||
effectPacket.data().rotation = Math::Util::floatToUInt16Rot( getRotation() );
|
effectPacket.data().rotation = Math::Util::floatToUInt16Rot( getRotation() );
|
||||||
effectPacket.data().effectTarget = pTarget.getId();
|
effectPacket.data().effectTarget = pTarget.getId();
|
||||||
effectPacket.data().effects[0].param1 = calculatedHeal;
|
effectPacket.data().effects[0].value = calculatedHeal;
|
||||||
effectPacket.data().effects[0].unknown_1 = 4;
|
effectPacket.data().effects[0].effectType = ActionEffectType::Heal;
|
||||||
effectPacket.data().effects[0].unknown_2 = 1;
|
effectPacket.data().effects[0].hitSeverity = ActionHitSeverityType::NormalHeal;
|
||||||
effectPacket.data().effects[0].unknown_3 = 7;
|
effectPacket.data().effects[0].unknown_3 = 7;
|
||||||
|
|
||||||
sendToInRangeSet( effectPacket, true );
|
sendToInRangeSet( effectPacket, true );
|
||||||
|
@ -1578,8 +1578,8 @@ void Core::Entity::Player::handleScriptSkill( uint32_t type, uint32_t actionId,
|
||||||
if ( !pTarget.isAlive() )
|
if ( !pTarget.isAlive() )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// todo: on AoE, send effect to heal all affected actors instead of just the caster
|
// todo: get proper packets: the following was just kind of thrown together from what we know
|
||||||
// this includes: calculating heal for every single actor. meaning we'd need to two-step the base heal from actor, and the value received
|
// also toss AoE to another spot and make it generic
|
||||||
|
|
||||||
if ( actionInfoPtr->is_aoe )
|
if ( actionInfoPtr->is_aoe )
|
||||||
{
|
{
|
||||||
|
@ -1591,19 +1591,19 @@ void Core::Entity::Player::handleScriptSkill( uint32_t type, uint32_t actionId,
|
||||||
|
|
||||||
if ( Math::Util::distance( pTarget.getPos().x, pTarget.getPos().y, pTarget.getPos().z, pCurAct->getPos().x, pCurAct->getPos().y, pCurAct->getPos().z ) <= actionInfoPtr->radius )
|
if ( Math::Util::distance( pTarget.getPos().x, pTarget.getPos().y, pTarget.getPos().z, pCurAct->getPos().x, pCurAct->getPos().y, pCurAct->getPos().z ) <= actionInfoPtr->radius )
|
||||||
{
|
{
|
||||||
GamePacketNew< FFXIVIpcEffect, ServerZoneIpcType > effectPacket( getId() );
|
GamePacketNew< FFXIVIpcEffect, ServerZoneIpcType > effectPacket( pCurAct->getId() );
|
||||||
effectPacket.data().targetId = pCurAct->getId();
|
effectPacket.data().targetId = pCurAct->getId();
|
||||||
|
|
||||||
effectPacket.data().unknown_1 = 1; // the magic trick for getting it to work
|
effectPacket.data().unknown_1 = 1; // the magic trick for getting it to work
|
||||||
effectPacket.data().unknown_2 = 1;
|
effectPacket.data().unknown_2 = 1;
|
||||||
effectPacket.data().unknown_8 = 1;
|
effectPacket.data().unknown_8 = 1;
|
||||||
effectPacket.data().unknown_5 = 1;
|
effectPacket.data().unknown_5 = 1;
|
||||||
|
effectPacket.data().actionAnimationId = actionId;
|
||||||
effectPacket.data().actionTextId = 0;
|
effectPacket.data().actionTextId = 0;
|
||||||
effectPacket.data().numEffects = 1;
|
effectPacket.data().numEffects = 1;
|
||||||
effectPacket.data().effectTarget = pCurAct->getId();
|
effectPacket.data().effectTarget = pCurAct->getId();
|
||||||
effectPacket.data().effects[0].param1 = calculatedHeal;
|
effectPacket.data().effects[0].value = calculatedHeal;
|
||||||
effectPacket.data().effects[0].unknown_1 = 4; // 0: nothing, 1: miss, 2: full resist, 3: dmg, 4: heal, 5: blocked, 6: parry, 7: invuln, 8: noeffect (text), 9: unknown, 10: mp loss, 11: mp gain, 12: tp loss, 13: tp gain, 14: gp win, floating text type (heal, dmg, blocked etc),
|
effectPacket.data().effects[0].effectType = ActionEffectType::Heal;
|
||||||
effectPacket.data().effects[0].unknown_2 = 3; // crit? 0 normal, 1 crit, 2 direct hit, 3 crit+dh
|
effectPacket.data().effects[0].hitSeverity = ActionHitSeverityType::NormalHeal;
|
||||||
effectPacket.data().effects[0].unknown_3 = 7;
|
effectPacket.data().effects[0].unknown_3 = 7;
|
||||||
|
|
||||||
pCurAct->sendToInRangeSet( effectPacket, true );
|
pCurAct->sendToInRangeSet( effectPacket, true );
|
||||||
|
|
Loading…
Add table
Reference in a new issue