From 719e9a0f04c16f0e7c46eef48da9de644446b2ea Mon Sep 17 00:00:00 2001 From: JoLan Date: Thu, 6 Nov 2008 08:59:20 +0100 Subject: [PATCH] Add TARGET_SCRIPT_GAMEOBJECT (40) to Spells ImplicitTarget handled like TARGET_SCRIPT --- src/game/SharedDefines.h | 1 + src/game/Spell.cpp | 19 ++++++++++++------- src/game/SpellMgr.cpp | 4 +++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 817ae81..b677529 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -798,6 +798,7 @@ enum Targets TARGET_AREAEFFECT_PARTY = 37, TARGET_SCRIPT = 38, TARGET_SELF_FISHING = 39, + TARGET_SCRIPT_GAMEOBJECT = 40, TARGET_TOTEM_EARTH = 41, TARGET_TOTEM_WATER = 42, TARGET_TOTEM_AIR = 43, diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 2a7ec31..7d50840 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -390,10 +390,11 @@ void Spell::FillTargetMap() if(m_spellInfo->Effect[i]==0) continue; - // targets for TARGET_SCRIPT_COORDINATES (A) and TARGET_SCRIPT filled in Spell::canCast call + // targets for TARGET_SCRIPT_COORDINATES (A) , TARGET_SCRIPT_GAMEOBJECT and TARGET_SCRIPT filled in Spell::canCast call if( m_spellInfo->EffectImplicitTargetA[i] == TARGET_SCRIPT_COORDINATES || + m_spellInfo->EffectImplicitTargetA[i] == TARGET_SCRIPT_GAMEOBJECT || m_spellInfo->EffectImplicitTargetA[i] == TARGET_SCRIPT || - m_spellInfo->EffectImplicitTargetB[i] == TARGET_SCRIPT && m_spellInfo->EffectImplicitTargetA[i] != TARGET_SELF ) + (m_spellInfo->EffectImplicitTargetB[i] == TARGET_SCRIPT || m_spellInfo->EffectImplicitTargetB[i] == TARGET_SCRIPT_GAMEOBJECT) && m_spellInfo->EffectImplicitTargetA[i] != TARGET_SELF ) continue; // TODO: find a way so this is not needed? @@ -1689,6 +1690,7 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) }break; case TARGET_SCRIPT: + case TARGET_SCRIPT_GAMEOBJECT: { if(m_targets.getUnitTarget()) TagUnitMap.push_back(m_targets.getUnitTarget()); @@ -3343,7 +3345,8 @@ uint8 Spell::CanCast(bool strict) for(uint8 j = 0; j < 3; j++) { if( m_spellInfo->EffectImplicitTargetA[j] == TARGET_SCRIPT || - m_spellInfo->EffectImplicitTargetB[j] == TARGET_SCRIPT && m_spellInfo->EffectImplicitTargetA[j] != TARGET_SELF || + m_spellInfo->EffectImplicitTargetA[j] == TARGET_SCRIPT_GAMEOBJECT || + (m_spellInfo->EffectImplicitTargetB[j] == TARGET_SCRIPT || m_spellInfo->EffectImplicitTargetB[j] == TARGET_SCRIPT_GAMEOBJECT) && m_spellInfo->EffectImplicitTargetA[j] != TARGET_SELF || m_spellInfo->EffectImplicitTargetA[j] == TARGET_SCRIPT_COORDINATES || m_spellInfo->EffectImplicitTargetB[j] == TARGET_SCRIPT_COORDINATES ) { @@ -3352,7 +3355,7 @@ uint8 Spell::CanCast(bool strict) SpellScriptTarget::const_iterator lower = spellmgr.GetBeginSpellScriptTarget(m_spellInfo->Id); SpellScriptTarget::const_iterator upper = spellmgr.GetEndSpellScriptTarget(m_spellInfo->Id); if(lower==upper) - sLog.outErrorDb("Spell (ID: %u) has effect EffectImplicitTargetA/EffectImplicitTargetB = TARGET_SCRIPT or TARGET_SCRIPT_COORDINATES, but does not have record in `spell_script_target`",m_spellInfo->Id); + sLog.outErrorDb("Spell (ID: %u) has effect EffectImplicitTargetA/EffectImplicitTargetB = TARGET_SCRIPT, TARGET_SCRIPT_COORDINATES or TARGET_SCRIPT_GAMEOBJECT, but does not have record in `spell_script_target`",m_spellInfo->Id); SpellRangeEntry const* srange = sSpellRangeStore.LookupEntry(m_spellInfo->rangeIndex); float range = GetSpellMaxRange(srange); @@ -4862,11 +4865,13 @@ bool Spell::CheckTarget( Unit* target, uint32 eff, bool hitPhase ) if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) return false; - // unselectable targets skipped in all cases except TARGET_SCRIPT targeting - // in case TARGET_SCRIPT target selected by server always and can't be cheated + // unselectable targets skipped in all cases except TARGET_SCRIPT or TARGET_SCRIPT_GAMEOBJECT targeting + // in case TARGET_SCRIPT or TARGET_SCRIPT_GAMEOBJECT target selected by server always and can't be cheated if( target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE) && m_spellInfo->EffectImplicitTargetA[eff] != TARGET_SCRIPT && - m_spellInfo->EffectImplicitTargetB[eff] != TARGET_SCRIPT ) + m_spellInfo->EffectImplicitTargetB[eff] != TARGET_SCRIPT && + m_spellInfo->EffectImplicitTargetA[eff] != TARGET_SCRIPT_GAMEOBJECT && + m_spellInfo->EffectImplicitTargetB[eff] != TARGET_SCRIPT_GAMEOBJECT) return false; } diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index c4202ca..8cea07c 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1798,6 +1798,8 @@ void SpellMgr::LoadSpellScriptTarget() { if( spellProto->EffectImplicitTargetA[i]==TARGET_SCRIPT || spellProto->EffectImplicitTargetB[i]==TARGET_SCRIPT || + spellProto->EffectImplicitTargetA[i]==TARGET_SCRIPT_GAMEOBJECT || + spellProto->EffectImplicitTargetB[i]==TARGET_SCRIPT_GAMEOBJECT || spellProto->EffectImplicitTargetA[i]==TARGET_SCRIPT_COORDINATES || spellProto->EffectImplicitTargetB[i]==TARGET_SCRIPT_COORDINATES ) { @@ -1807,7 +1809,7 @@ void SpellMgr::LoadSpellScriptTarget() } if(!targetfound) { - sLog.outErrorDb("Table `spell_script_target`: spellId %u listed for TargetEntry %u does not have any implicit target TARGET_SCRIPT(38) or TARGET_SCRIPT_COORDINATES (46).",spellId,targetEntry); + sLog.outErrorDb("Table `spell_script_target`: spellId %u listed for TargetEntry %u does not have any implicit target TARGET_SCRIPT(38) , TARGET_SCRIPT_COORDINATES (46) or TARGET_SCRIPT_GAMEOBJECT (40).",spellId,targetEntry); continue; } -- 1.5.6.5