aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2016-07-18 20:30:58 +0200
committerShauren <shauren.trinity@gmail.com>2016-07-18 20:30:58 +0200
commitb008b677ad98b1b0246bcf1fcf246ca17930cdc2 (patch)
treece6bbada3eb80cce75915aa2c85b45316aacb7cd /src
parentf8f207d21c5aa9da6c2576d2067c35dae8cec275 (diff)
Core/UnitAI: #17309 follow-up (#17608)
* Core/UnitAI: SelectTarget correction Set CurrentVictim as first element on targetList if necessary, which is then filled with the threatlist elements that satisfy the predicate.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h
index f4ed318dbe2..0dd09bc8051 100644
--- a/src/server/game/AI/CoreAI/UnitAI.h
+++ b/src/server/game/AI/CoreAI/UnitAI.h
@@ -151,15 +151,23 @@ class TC_GAME_API UnitAI
return nullptr;
std::list<Unit*> targetList;
- Unit* currentVictim = me->getThreatManager().getCurrentVictim()->getTarget();
+ Unit* currentVictim = nullptr;
+ if (auto currentVictimReference = me->getThreatManager().getCurrentVictim())
+ {
+ currentVictim = currentVictimReference->getTarget();
- // Current victim always goes first
- if (predicate(currentVictim))
- targetList.push_back(currentVictim);
+ // Current victim always goes first
+ if (currentVictim && predicate(currentVictim))
+ targetList.push_back(currentVictim);
+ }
for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
- if ((*itr)->getTarget() != currentVictim && predicate((*itr)->getTarget()))
+ {
+ if (currentVictim != nullptr && (*itr)->getTarget() != currentVictim && predicate((*itr)->getTarget()))
targetList.push_back((*itr)->getTarget());
+ else if (currentVictim == nullptr && predicate((*itr)->getTarget()))
+ targetList.push_back((*itr)->getTarget());
+ }
if (position >= targetList.size())
return nullptr;