rendered paste bodyFrom 719e9a0f04c16f0e7c46eef48da9de644446b2ea Mon Sep 17 00:00:00 2001
From: JoLan <spam00fr@yahoo.fr>
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<Unit*> &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