All pastes #1246627 Raw Copy code Copy link Edit

TARGET_SCRIPT_GAMEOBJECT

public unlisted text v1 · immutable
#1246627 ·published 2008-11-06 08:02 UTC
rendered paste body
From 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