Core/Spells: Implemented SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE

This commit is contained in:
Shauren
2024-06-23 12:36:35 +02:00
parent 97cad9c598
commit 5cb4536bd0
3 changed files with 27 additions and 7 deletions

View File

@@ -771,7 +771,7 @@ enum SpellAttr9 : uint32
SPELL_ATTR9_NOT_IN_ARENA = 0x00000200, // TITLE Not In Arena
SPELL_ATTR9_TARGET_MUST_BE_GROUNDED = 0x00000400, // TITLE Target Must Be Grounded
SPELL_ATTR9_ALLOW_WHILE_BANISHED_AURA_STATE = 0x00000800, // TITLE Allow While Banished Aura State DESCRIPTION Doesn't seem to be doing anything, banish behaves like a regular stun now - tested on patch 10.2.7 with spell 17767 (doesn't have this attribute, only SPELL_ATTR5_ALLOW_WHILE_STUNNED and was castable while banished)
SPELL_ATTR9_UNK12 = 0x00001000, // TITLE Unknown attribute 12@Attr9
SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE = 0x00001000, // TITLE Face unit target upon completion of jump charge
SPELL_ATTR9_SLAM = 0x00002000, // TITLE Haste Affects Melee Ability Casttime
SPELL_ATTR9_USABLE_IN_RATED_BATTLEGROUNDS = 0x00004000, // TITLE Ignore Default Rated Battleground Restrictions
SPELL_ATTR9_UNK15 = 0x00008000, // TITLE Unknown attribute 15@Attr9

View File

@@ -1447,7 +1447,7 @@ TC_API_EXPORT EnumText EnumUtils<SpellAttr9>::ToString(SpellAttr9 value)
case SPELL_ATTR9_NOT_IN_ARENA: return { "SPELL_ATTR9_NOT_IN_ARENA", "Not In Arena", "" };
case SPELL_ATTR9_TARGET_MUST_BE_GROUNDED: return { "SPELL_ATTR9_TARGET_MUST_BE_GROUNDED", "Target Must Be Grounded", "" };
case SPELL_ATTR9_ALLOW_WHILE_BANISHED_AURA_STATE: return { "SPELL_ATTR9_ALLOW_WHILE_BANISHED_AURA_STATE", "Allow While Banished Aura State", "Doesn't seem to be doing anything, banish behaves like a regular stun now - tested on patch 10.2.7 with spell 17767 (doesn't have this attribute, only SPELL_ATTR5_ALLOW_WHILE_STUNNED and was castable while banished)" };
case SPELL_ATTR9_UNK12: return { "SPELL_ATTR9_UNK12", "Unknown attribute 12@Attr9", "" };
case SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE: return { "SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE", "Face unit target upon completion of jump charge", "" };
case SPELL_ATTR9_SLAM: return { "SPELL_ATTR9_SLAM", "Haste Affects Melee Ability Casttime", "" };
case SPELL_ATTR9_USABLE_IN_RATED_BATTLEGROUNDS: return { "SPELL_ATTR9_USABLE_IN_RATED_BATTLEGROUNDS", "Ignore Default Rated Battleground Restrictions", "" };
case SPELL_ATTR9_UNK15: return { "SPELL_ATTR9_UNK15", "Unknown attribute 15@Attr9", "" };
@@ -1491,7 +1491,7 @@ TC_API_EXPORT SpellAttr9 EnumUtils<SpellAttr9>::FromIndex(size_t index)
case 9: return SPELL_ATTR9_NOT_IN_ARENA;
case 10: return SPELL_ATTR9_TARGET_MUST_BE_GROUNDED;
case 11: return SPELL_ATTR9_ALLOW_WHILE_BANISHED_AURA_STATE;
case 12: return SPELL_ATTR9_UNK12;
case 12: return SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE;
case 13: return SPELL_ATTR9_SLAM;
case 14: return SPELL_ATTR9_USABLE_IN_RATED_BATTLEGROUNDS;
case 15: return SPELL_ATTR9_UNK15;
@@ -1532,7 +1532,7 @@ TC_API_EXPORT size_t EnumUtils<SpellAttr9>::ToIndex(SpellAttr9 value)
case SPELL_ATTR9_NOT_IN_ARENA: return 9;
case SPELL_ATTR9_TARGET_MUST_BE_GROUNDED: return 10;
case SPELL_ATTR9_ALLOW_WHILE_BANISHED_AURA_STATE: return 11;
case SPELL_ATTR9_UNK12: return 12;
case SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE: return 12;
case SPELL_ATTR9_SLAM: return 13;
case SPELL_ATTR9_USABLE_IN_RATED_BATTLEGROUNDS: return 14;
case SPELL_ATTR9_UNK15: return 15;

View File

@@ -893,10 +893,17 @@ void Spell::EffectJump()
float speedXY, speedZ;
CalculateJumpSpeeds(effectInfo, unitCaster->GetExactDist2d(unitTarget), speedXY, speedZ);
MovementFacingTarget facing;
if (Unit const* target = m_targets.GetUnitTarget())
{
if (m_spellInfo->HasAttribute(SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE))
facing = target;
}
JumpArrivalCastArgs arrivalCast;
arrivalCast.SpellId = effectInfo->TriggerSpell;
arrivalCast.Target = unitTarget->GetGUID();
unitCaster->GetMotionMaster()->MoveJump(*unitTarget, speedXY, speedZ, EVENT_JUMP, {}, &arrivalCast);
unitCaster->GetMotionMaster()->MoveJump(*unitTarget, speedXY, speedZ, EVENT_JUMP, facing, &arrivalCast);
}
void Spell::EffectJumpDest()
@@ -917,8 +924,14 @@ void Spell::EffectJumpDest()
float speedXY, speedZ;
CalculateJumpSpeeds(effectInfo, unitCaster->GetExactDist2d(destTarget), speedXY, speedZ);
MovementFacingTarget facing;
if (!m_targets.GetUnitTargetGUID().IsEmpty())
if (Unit const* target = m_targets.GetUnitTarget())
{
if (m_spellInfo->HasAttribute(SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE))
facing = target;
}
else
facing = destTarget->GetOrientation();
JumpArrivalCastArgs arrivalCast;
arrivalCast.SpellId = effectInfo->TriggerSpell;
unitCaster->GetMotionMaster()->MoveJump(*destTarget, speedXY, speedZ, EVENT_JUMP, facing, &arrivalCast);
@@ -5764,6 +5777,13 @@ void Spell::EffectJumpCharge()
if (params->TreatSpeedAsMoveTimeSeconds)
speed = unitCaster->GetExactDist(destTarget) / params->MoveTimeInSec;
MovementFacingTarget facing;
if (Unit const* target = m_targets.GetUnitTarget())
{
if (m_spellInfo->HasAttribute(SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE))
facing = target;
}
Optional<JumpArrivalCastArgs> arrivalCast;
if (effectInfo->TriggerSpell)
{
@@ -5785,7 +5805,7 @@ void Spell::EffectJumpCharge()
effectExtra->ParabolicCurveId = *params->ParabolicCurveId;
}
unitCaster->GetMotionMaster()->MoveJumpWithGravity(*destTarget, speed, params->JumpGravity, EVENT_JUMP, {},
unitCaster->GetMotionMaster()->MoveJumpWithGravity(*destTarget, speed, params->JumpGravity, EVENT_JUMP, facing,
arrivalCast ? &*arrivalCast : nullptr,
effectExtra ? &*effectExtra : nullptr);
}