mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
Core/Misc: Fix various crashes, also related to multithreading (#19012)
* When iterating groups we have to either do it not in multithreaded context (map updates) or start with checking maps (they are guaranteed to change in single thread update). * Properly clear ComboPoint references on player remove * remove some possible references item may have when it is deleted during save. * Also clear all hostile references when unit is removed from map.
This commit is contained in:
@@ -61,7 +61,7 @@ public:
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
Player* pGroupie = itr->GetSource();
|
||||
if (!pGroupie)
|
||||
if (!pGroupie || !pGroupie->IsInMap(player))
|
||||
continue;
|
||||
|
||||
if (pGroupie->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE &&
|
||||
|
||||
@@ -367,7 +367,8 @@ class boss_lady_deathwhisper : public CreatureScript
|
||||
{
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
|
||||
if (Player* member = itr->GetSource())
|
||||
member->KilledMonsterCredit(NPC_DARNAVAN_CREDIT);
|
||||
if (member->IsInMap(owner))
|
||||
member->KilledMonsterCredit(NPC_DARNAVAN_CREDIT);
|
||||
}
|
||||
else
|
||||
owner->KilledMonsterCredit(NPC_DARNAVAN_CREDIT);
|
||||
@@ -881,7 +882,8 @@ class npc_darnavan : public CreatureScript
|
||||
{
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
|
||||
if (Player* member = itr->GetSource())
|
||||
member->FailQuest(QUEST_DEPROGRAMMING);
|
||||
if (member->IsInMap(owner))
|
||||
member->FailQuest(QUEST_DEPROGRAMMING);
|
||||
}
|
||||
else
|
||||
owner->FailQuest(QUEST_DEPROGRAMMING);
|
||||
|
||||
@@ -114,7 +114,7 @@ public:
|
||||
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
|
||||
{
|
||||
Player* groupie = itr->GetSource();
|
||||
if (groupie &&
|
||||
if (groupie && groupie->IsInMap(player) &&
|
||||
groupie->GetQuestStatus(QUEST_DONTKILLTHEFATONE) == QUEST_STATUS_INCOMPLETE &&
|
||||
groupie->GetReqKillOrCastCurrentCount(QUEST_DONTKILLTHEFATONE, NPC_BOULDERFIST_INVADER) == REQUIRED_KILL_COUNT)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user