From 5cb4536bd0492b49432b092e7ca4a458010b7d53 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 23 Jun 2024 12:36:35 +0200 Subject: Core/Spells: Implemented SPELL_ATTR9_FACE_UNIT_TARGET_UPON_COMPLETION_OF_JUMP_CHARGE --- src/server/game/Miscellaneous/SharedDefines.h | 2 +- .../game/Miscellaneous/enuminfo_SharedDefines.cpp | 6 ++--- src/server/game/Spells/SpellEffects.cpp | 26 +++++++++++++++++++--- 3 files changed, 27 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 574ee066ff2..f42fcd0bab9 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -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 diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index b945a697185..8c1873fdc17 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -1447,7 +1447,7 @@ TC_API_EXPORT EnumText EnumUtils::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::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::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; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index c35d06f8a62..0c85c15bc51 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -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 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); } -- cgit v1.2.3