Core/Misc: Fix various crashes, also related to multithreading
Port From (https://github.com/TrinityCore/TrinityCore/commit/ad008c43b75080ec59aa973f1e2e4424332c34a4)
This commit is contained in:
@@ -271,14 +271,14 @@ namespace Game.AI
|
||||
{
|
||||
for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.next())
|
||||
{
|
||||
Player Target = refe.GetSource();
|
||||
if (!Target || !group.SameSubGroup(owner.ToPlayer(), Target))
|
||||
Player target = refe.GetSource();
|
||||
if (!target || !target.IsInMap(owner) || !group.SameSubGroup(owner.ToPlayer(), target))
|
||||
continue;
|
||||
|
||||
if (Target.GetGUID() == owner.GetGUID())
|
||||
if (target.GetGUID() == owner.GetGUID())
|
||||
continue;
|
||||
|
||||
m_AllySet.Add(Target.GetGUID());
|
||||
m_AllySet.Add(target.GetGUID());
|
||||
}
|
||||
}
|
||||
else //remove group
|
||||
|
||||
@@ -115,7 +115,8 @@ namespace Game.AI
|
||||
{
|
||||
Player member = groupRef.GetSource();
|
||||
if (member)
|
||||
member.FailQuest(m_pQuestForEscort.Id);
|
||||
if (member.IsInMap(player))
|
||||
member.FailQuest(m_pQuestForEscort.Id);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -153,7 +153,8 @@ namespace Game.AI
|
||||
{
|
||||
Player member = groupRef.GetSource();
|
||||
if (member)
|
||||
member.FailQuest(m_pQuestForFollow.Id);
|
||||
if (member.IsInMap(player))
|
||||
member.FailQuest(m_pQuestForFollow.Id);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -343,8 +344,7 @@ namespace Game.AI
|
||||
for (GroupReference groupRef = group.GetFirstMember(); groupRef != null; groupRef = groupRef.next())
|
||||
{
|
||||
Player member = groupRef.GetSource();
|
||||
|
||||
if (member && member.IsAlive() && me.IsWithinDistInMap(member, 100.0f))
|
||||
if (member && me.IsWithinDistInMap(member, 100.0f) && member.IsAlive())
|
||||
{
|
||||
Log.outDebug(LogFilter.Scripts, "FollowerAI GetLeader changed and returned new leader.");
|
||||
m_uiLeaderGUID = member.GetGUID();
|
||||
|
||||
@@ -249,6 +249,8 @@ namespace Game.AI
|
||||
for (GroupReference groupRef = group.GetFirstMember(); groupRef != null; groupRef = groupRef.next())
|
||||
{
|
||||
Player groupGuy = groupRef.GetSource();
|
||||
if (!groupGuy.IsInMap(player))
|
||||
continue;
|
||||
|
||||
if (!fail && groupGuy.IsAtGroupRewardDistance(me) && !groupGuy.GetCorpse())
|
||||
groupGuy.AreaExploredOrEventHappens(mEscortQuestID);
|
||||
@@ -402,8 +404,7 @@ namespace Game.AI
|
||||
for (GroupReference groupRef = group.GetFirstMember(); groupRef != null; groupRef = groupRef.next())
|
||||
{
|
||||
Player groupGuy = groupRef.GetSource();
|
||||
|
||||
if (me.GetDistance(groupGuy) <= SMART_ESCORT_MAX_PLAYER_DIST)
|
||||
if (groupGuy.IsInMap(player) && me.GetDistance(groupGuy) <= SMART_ESCORT_MAX_PLAYER_DIST)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2614,7 +2614,8 @@ namespace Game.AI
|
||||
{
|
||||
Player member = groupRef.GetSource();
|
||||
if (member)
|
||||
l.Add(member);
|
||||
if (member.IsInMap(player))
|
||||
l.Add(member);
|
||||
}
|
||||
}
|
||||
// We still add the player to the list if there is no group. If we do
|
||||
@@ -2838,7 +2839,8 @@ namespace Game.AI
|
||||
{
|
||||
Player recipient = refe.GetSource();
|
||||
if (recipient)
|
||||
l.Add(recipient);
|
||||
if (recipient.IsInMap(me))
|
||||
l.Add(recipient);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user