aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-01-03 19:22:12 +0100
committerShauren <shauren.trinity@gmail.com>2013-01-03 19:22:12 +0100
commit59e4f6eb0553d7821a20b1bcc9a8b33a9f904c71 (patch)
tree8a9b29a1d095d302bd35717986b72fd3599c1a72 /src
parent6a29a957dddb41692f80b536cd3801fd5eed7910 (diff)
Core/SmartScripts: Fixed SAI targets 10 & 14 (SMART_TARGET_CREATURE_GUID, SMART_TARGET_GAMEOBJECT_GUID)
Note: If you used these targets to perform actions across maps, it will not work anymore, this functionality is deprecated as it was not safe.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp36
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h4
2 files changed, 12 insertions, 28 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 4b147e080e2..e68c8c27194 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2260,46 +2260,30 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
case SMART_TARGET_CREATURE_GUID:
{
Creature* target = NULL;
- if (e.target.unitGUID.entry)
+ if (!trigger && !GetBaseObject())
{
- uint64 guid = MAKE_NEW_GUID(e.target.unitGUID.guid, e.target.unitGUID.entry, HIGHGUID_UNIT);
- target = HashMapHolder<Creature>::Find(guid);
+ sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker");
+ break;
}
- else
- {
- if (!trigger && !GetBaseObject())
- {
- sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker and without entry");
- break;
- }
- target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.guid);
- }
+ target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.dbGuid);
- if (target)
+ if (target && (!e.target.unitGUID.entry || target->GetEntry() == e.target.unitGUID.entry))
l->push_back(target);
break;
}
case SMART_TARGET_GAMEOBJECT_GUID:
{
GameObject* target = NULL;
- if (e.target.unitGUID.entry)
+ if (!trigger && !GetBaseObject())
{
- uint64 guid = MAKE_NEW_GUID(e.target.goGUID.guid, e.target.goGUID.entry, HIGHGUID_GAMEOBJECT);
- target = HashMapHolder<GameObject>::Find(guid);
+ sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker");
+ break;
}
- else
- {
- if (!trigger && !GetBaseObject())
- {
- sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker and without entry");
- break;
- }
- target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.guid);
- }
+ target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.dbGuid);
- if (target)
+ if (target && (!e.target.goGUID.entry || target->GetEntry() == e.target.goGUID.entry))
l->push_back(target);
break;
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index b6690e35944..c70e78d5395 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -996,7 +996,7 @@ struct SmartTarget
struct
{
- uint32 guid;
+ uint32 dbGuid;
uint32 entry;
} unitGUID;
@@ -1031,7 +1031,7 @@ struct SmartTarget
struct
{
- uint32 guid;
+ uint32 dbGuid;
uint32 entry;
} goGUID;