From cfd890628fba774ade5750f74fbd8035cfb74f52 Mon Sep 17 00:00:00 2001 From: megamage Date: Thu, 25 Dec 2008 10:36:00 -0600 Subject: *Update spell target selection about area auras. --HG-- branch : trunk --- src/game/SpellMgr.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/game/SpellMgr.cpp') diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 78175708cba..2e285ea7176 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -64,6 +64,11 @@ SpellMgr::SpellMgr() //case SPELL_EFFECT_LEARN_SPELL: // 0 may be 5 pet case SPELL_EFFECT_TRADE_SKILL: // 0 or 1 case SPELL_EFFECT_PROFICIENCY: // 0 + case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: + case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: + case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: + case SPELL_EFFECT_APPLY_AREA_AURA_PET: + case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: EffectTargetType[i] = SPELL_REQUIRE_NONE; break; case SPELL_EFFECT_ENCHANT_ITEM: -- cgit v1.2.3 From 032de9a49108b2df6ee01c92c7de2557e4eb6136 Mon Sep 17 00:00:00 2001 From: megamage Date: Fri, 26 Dec 2008 15:55:12 -0600 Subject: *Update IsAOE function. --HG-- branch : trunk --- src/game/SharedDefines.h | 4 ++-- src/game/SpellEffects.cpp | 2 +- src/game/SpellMgr.cpp | 32 +++++++++++++++++++++++++++++++- src/game/SpellMgr.h | 32 ++++---------------------------- src/game/Unit.cpp | 2 +- 5 files changed, 39 insertions(+), 33 deletions(-) (limited to 'src/game/SpellMgr.cpp') diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 51fba0b48ed..07840998cf2 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -821,7 +821,7 @@ enum Targets TARGET_GAMEOBJECT = 23, //TARGET_OBJECT_OPEN TARGET_IN_FRONT_OF_CASTER = 24, - //TARGET_UNIT_CONE_ENEMY + TARGET_UNIT_CONE_ENEMY = 24, TARGET_DUELVSPLAYER = 25, TARGET_UNIT_TARGET_ANY = 25, TARGET_GAMEOBJECT_ITEM = 26, @@ -874,7 +874,7 @@ enum Targets TARGET_UNIT_CONE_ALLY = 59, TARGET_UNIT_AREA_SCRIPT = 60, TARGET_AREAEFFECT_PARTY_AND_CLASS = 61, - //TARGET_UNIT_CLASS_TARGET + TARGET_UNIT_CLASS_TARGET = 61, TARGET_TEST = 62, // for a test spell TARGET_DUELVSPLAYER_COORDINATES = 63, TARGET_DEST_TARGET_ENEMY_UNKNOWN = 63, diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index e8fdbf5adce..85984eeaa3d 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -568,7 +568,7 @@ void Spell::SpellDamageSchoolDmg(uint32 effect_idx) //TODO: should this be put on taken but not done? if(found) - m_damage += m_spellInfo->EffectBasePoints[1]; + damage += m_spellInfo->EffectBasePoints[1]; } //Explosive Trap Effect else if(m_spellInfo->SpellFamilyFlags & 0x00000004) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 2e285ea7176..6f6cb7e8d65 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -118,7 +118,8 @@ SpellMgr::SpellMgr() case TARGET_UNIT_AREA_ENTRY: case TARGET_UNIT_AREA_PARTY_GROUND: case TARGET_UNIT_AREA_PARTY: - case TARGET_UNIT_AREA_ENEMY_CHANNEL: + //case TARGET_UNIT_AREA_ENEMY_CHANNEL: + //case TARGET_UNIT_AREA_ALLY_CHANNEL: SpellTargetType[i] = TARGET_TYPE_AREA_DEST; break; case TARGET_DEST_TARGET_ENEMY: @@ -156,6 +157,35 @@ SpellMgr::SpellMgr() SpellTargetType[i] = TARGET_TYPE_DEFAULT; } } + + for(int i = 0; i < TOTAL_SPELL_TARGETS; ++i) + { + switch(i) + { + case TARGET_UNIT_AREA_ENEMY_GROUND: + case TARGET_UNIT_AREA_ENEMY: + case TARGET_UNIT_AREA_ALLY_GROUND: + case TARGET_UNIT_AREA_ALLY: + case TARGET_UNIT_AREA_ENTRY_GROUND: + case TARGET_UNIT_AREA_ENTRY: + case TARGET_UNIT_AREA_PARTY_GROUND: + case TARGET_UNIT_AREA_PARTY: + //Check persistant aura seperately + //case TARGET_UNIT_AREA_ENEMY_CHANNEL: + //case TARGET_UNIT_AREA_ALLY_CHANNEL: + case TARGET_UNIT_PARTY_TARGET: + case TARGET_UNIT_PARTY_CASTER: + case TARGET_UNIT_CONE_ENEMY: + case TARGET_UNIT_CONE_ALLY: + case TARGET_UNIT_CONE_ENEMY_UNKNOWN: + case TARGET_UNIT_RAID: + IsAreaEffectTarget[i] = true; + break; + default: + IsAreaEffectTarget[i] = false; + break; + } + } } SpellMgr::~SpellMgr() diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index d8b4b866655..716760a70c6 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -359,38 +359,14 @@ bool IsAuraAddedBySpell(uint32 auraType, uint32 spellId); bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id); -inline bool IsAreaEffectTarget( Targets target ) -{ - switch (target ) - { - case TARGET_AREAEFFECT_CUSTOM: - case TARGET_ALL_ENEMY_IN_AREA: - case TARGET_ALL_ENEMY_IN_AREA_INSTANT: - case TARGET_ALL_PARTY_AROUND_CASTER: - case TARGET_ALL_AROUND_CASTER: - case TARGET_ALL_ENEMY_IN_AREA_CHANNELED: - case TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER: - case TARGET_ALL_PARTY: - case TARGET_ALL_PARTY_AROUND_CASTER_2: - case TARGET_AREAEFFECT_PARTY: - case TARGET_AREAEFFECT_CUSTOM_2: - case TARGET_AREAEFFECT_PARTY_AND_CLASS: - case TARGET_IN_FRONT_OF_CASTER: - case TARGET_ALL_FRIENDLY_UNITS_IN_AREA: - return true; - default: - break; - } - return false; -} - +static bool IsAreaEffectTarget[TOTAL_SPELL_TARGETS]; inline bool IsAreaOfEffectSpell(SpellEntry const *spellInfo) { - if(IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetA[0])) || IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetB[0]))) + if(IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[0]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[0]]) return true; - if(IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetA[1])) || IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetB[1]))) + if(IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[1]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[1]]) return true; - if(IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetA[2])) || IsAreaEffectTarget(Targets(spellInfo->EffectImplicitTargetB[2]))) + if(IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[2]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[2]]) return true; return false; } diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a079964ce3e..010c5a4d8c4 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -12243,7 +12243,7 @@ uint32 Unit::GetCastingTimeForBonus( SpellEntry const *spellProto, DamageEffectT break; } - if(IsAreaEffectTarget(Targets(spellProto->EffectImplicitTargetA[i])) || IsAreaEffectTarget(Targets(spellProto->EffectImplicitTargetB[i]))) + if(IsAreaEffectTarget[spellProto->EffectImplicitTargetA[i]] || IsAreaEffectTarget[spellProto->EffectImplicitTargetB[i]]) AreaEffect = true; } -- cgit v1.2.3 From 07e2410ed830a620a0749e4039e0e544278267d7 Mon Sep 17 00:00:00 2001 From: megamage Date: Fri, 26 Dec 2008 16:15:44 -0600 Subject: *Fix the bug that areaaura do not have sound. --HG-- branch : trunk --- src/game/Spell.cpp | 2 ++ src/game/SpellMgr.cpp | 13 ++++++++----- src/game/SpellMgr.h | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src/game/SpellMgr.cpp') diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 33467e75ad6..7aeb0159e9d 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -420,6 +420,8 @@ void Spell::FillTargetMap() if(effectTargetType != SPELL_REQUIRE_UNIT) { + if(effectTargetType == SPELL_REQUIRE_CASTER) + AddUnitTarget(m_caster, i); if(effectTargetType == SPELL_REQUIRE_DEST) { if(m_targets.HasDest() && m_spellInfo->speed > 0.0f) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 6f6cb7e8d65..e67030b77f2 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -64,11 +64,6 @@ SpellMgr::SpellMgr() //case SPELL_EFFECT_LEARN_SPELL: // 0 may be 5 pet case SPELL_EFFECT_TRADE_SKILL: // 0 or 1 case SPELL_EFFECT_PROFICIENCY: // 0 - case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: - case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: - case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: - case SPELL_EFFECT_APPLY_AREA_AURA_PET: - case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: EffectTargetType[i] = SPELL_REQUIRE_NONE; break; case SPELL_EFFECT_ENCHANT_ITEM: @@ -78,6 +73,14 @@ SpellMgr::SpellMgr() case SPELL_EFFECT_PROSPECTING: EffectTargetType[i] = SPELL_REQUIRE_ITEM; break; + //caster must be pushed otherwise no sound + case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: + case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: + case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: + case SPELL_EFFECT_APPLY_AREA_AURA_PET: + case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: + EffectTargetType[i] = SPELL_REQUIRE_CASTER; + break; default: EffectTargetType[i] = SPELL_REQUIRE_UNIT; break; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 716760a70c6..ef5e8379341 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -239,6 +239,7 @@ enum SpellEffectTargetTypes SPELL_REQUIRE_UNIT, SPELL_REQUIRE_DEST, SPELL_REQUIRE_ITEM, + SPELL_REQUIRE_CASTER, }; enum SpellSelectTargetTypes -- cgit v1.2.3