diff options
| author | treeston <treeston.mmoc@gmail.com> | 2016-08-19 14:25:23 +0200 |
|---|---|---|
| committer | treeston <treeston.mmoc@gmail.com> | 2016-08-19 14:25:23 +0200 |
| commit | e2c915fb43ae27d695c0ab410fb1b14222745e27 (patch) | |
| tree | d123fc17c04af1731ad605e20eb40907c6f2a06c /src | |
| parent | 3f9cf3fdb6ab4d8c696c67df8289df016f9447ae (diff) | |
Core/SmartScripts: Add SMART_TARGET_LOOT_RECIPIENTS. Does what it says on the tin.
Use this new target type to fix The Rider of Blood, The Rider of Frost, The Rider of the Unholy. Closes #17817.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 17 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 3 |
3 files changed, 20 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index c8b640d3683..9a3e864051a 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2751,6 +2751,23 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /* l->push_back(target); break; } + case SMART_TARGET_LOOT_RECIPIENTS: + { + if (me) + { + if (Group* lootGroup = me->GetLootRecipientGroup()) + { + for (GroupReference* it = lootGroup->GetFirstMember(); it != nullptr; it = it->next()) + if (Player* recipient = it->GetSource()) + l->push_back(recipient); + } + else + { + if (Player* recipient = me->GetLootRecipient()) + l->push_back(recipient); + } + } + } case SMART_TARGET_POSITION: case SMART_TARGET_NONE: default: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index f0709eb9216..acb5022bb3f 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -374,6 +374,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) case SMART_TARGET_CLOSEST_ENEMY: case SMART_TARGET_CLOSEST_FRIENDLY: case SMART_TARGET_STORED: + case SMART_TARGET_LOOT_RECIPIENTS: break; default: TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled target_type(%u), Entry %d SourceType %u Event %u Action %u, skipped.", e.GetTargetType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 8b55c3e138c..ebebc761e0c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1096,8 +1096,9 @@ enum SMARTAI_TARGETS SMART_TARGET_THREAT_LIST = 24, // All units on creature's threat list SMART_TARGET_CLOSEST_ENEMY = 25, // maxDist, playerOnly SMART_TARGET_CLOSEST_FRIENDLY = 26, // maxDist, playerOnly + SMART_TARGET_LOOT_RECIPIENTS = 27, // all players that have tagged this creature (for kill credit) - SMART_TARGET_END = 27 + SMART_TARGET_END = 28 }; struct SmartTarget |
