From 147a1b04fe840272aab0d2783bdb7a5037e55469 Mon Sep 17 00:00:00 2001 From: Reamer Date: Mon, 27 Aug 2012 14:42:56 +0200 Subject: [PATCH] [12126] Implement SPELL_EFFECT_KNOCKBACK_FROM_POSITION (144) Also fix a missing break in db-script engine Signed-off-by: Schmoozerd --- src/game/ScriptMgr.cpp | 2 ++ src/game/SharedDefines.h | 2 +- src/game/Spell.h | 1 + src/game/SpellEffects.cpp | 23 ++++++++++++++++++++++- src/shared/revision_nr.h | 2 +- 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/game/ScriptMgr.cpp b/src/game/ScriptMgr.cpp index e3214b1e4..53bafaa78 100644 --- a/src/game/ScriptMgr.cpp +++ b/src/game/ScriptMgr.cpp @@ -1623,6 +1623,8 @@ void ScriptAction::HandleScriptStep() pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NO_INTERACT); else if (m_script->goLockState.lockState & 0x08) pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NO_INTERACT); + + break; } case SCRIPT_COMMAND_STAND_STATE: // 28 { diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 685d586eb..674797a8e 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -860,7 +860,7 @@ enum SpellEffects SPELL_EFFECT_141 = 141, SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE = 142, SPELL_EFFECT_APPLY_AREA_AURA_OWNER = 143, - SPELL_EFFECT_144 = 144, + SPELL_EFFECT_KNOCKBACK_FROM_POSITION = 144, SPELL_EFFECT_145 = 145, SPELL_EFFECT_ACTIVATE_RUNE = 146, SPELL_EFFECT_QUEST_FAIL = 147, diff --git a/src/game/Spell.h b/src/game/Spell.h index f84255618..629181cdc 100644 --- a/src/game/Spell.h +++ b/src/game/Spell.h @@ -367,6 +367,7 @@ class Spell void EffectSpecCount(SpellEffectEntry const* effect); void EffectActivateSpec(SpellEffectEntry const* effect); void EffectCancelAura(SpellEffectEntry const* effect); + void EffectKnockBackFromPosition(SpellEffectEntry const* effect); Spell(Unit* caster, SpellEntry const* info, bool triggered, ObjectGuid originalCasterGUID = ObjectGuid(), SpellEntry const* triggeredBy = NULL); ~Spell(); diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 567058a34..2eee572ac 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -204,7 +204,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS] = &Spell::EffectNULL, //141 SPELL_EFFECT_141 damage and reduce speed? &Spell::EffectTriggerSpellWithValue, //142 SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE &Spell::EffectApplyAreaAura, //143 SPELL_EFFECT_APPLY_AREA_AURA_OWNER - &Spell::EffectNULL, //144 SPELL_EFFECT_144 Spectral Blast + &Spell::EffectKnockBackFromPosition, //144 SPELL_EFFECT_KNOCKBACK_FROM_POSITION &Spell::EffectNULL, //145 SPELL_EFFECT_145 Black Hole Effect &Spell::EffectActivateRune, //146 SPELL_EFFECT_ACTIVATE_RUNE &Spell::EffectQuestFail, //147 SPELL_EFFECT_QUEST_FAIL quest fail @@ -9958,3 +9958,24 @@ void Spell::EffectCancelAura(SpellEffectEntry const* effect) unitTarget->RemoveAurasDueToSpell(spellId); } + +void Spell::EffectKnockBackFromPosition(SpellEffectIndex eff_idx) +{ + if (!unitTarget) + return; + + float x, y, z; + if (m_targets.m_targetMask & TARGET_FLAG_DEST_LOCATION) + { + x = m_targets.m_destX; + y = m_targets.m_destY; + z = m_targets.m_destZ; + } + else + m_caster->GetPosition(x, y, z); + + float angle = unitTarget->GetAngle(x,y) + M_PI_F; + float horizontalSpeed = m_spellInfo->EffectMiscValue[eff_idx] * 0.1f; + float verticalSpeed = damage * 0.1f; + unitTarget->KnockBackWithAngle(angle, horizontalSpeed, verticalSpeed); +} diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b9d3fff2f..d2aeba622 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "12125" + #define REVISION_NR "12126" #endif // __REVISION_NR_H__