diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-01-03 19:22:12 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-01-03 19:22:12 +0100 |
commit | 59e4f6eb0553d7821a20b1bcc9a8b33a9f904c71 (patch) | |
tree | 8a9b29a1d095d302bd35717986b72fd3599c1a72 /src | |
parent | 6a29a957dddb41692f80b536cd3801fd5eed7910 (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.cpp | 36 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 4 |
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; |