fix crash
This commit is contained in:
@@ -17061,6 +17061,9 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 /*count*/)
|
||||
{
|
||||
for (QuestObjectiveStatusMap::value_type const& objectiveItr : Trinity::Containers::MapEqualRange(m_questObjectiveStatus, { QUEST_OBJECTIVE_ITEM, entry }))
|
||||
{
|
||||
if (objectiveItr.second.QuestStatusItr == m_QuestStatus.end())
|
||||
continue;
|
||||
|
||||
uint32 questId = objectiveItr.second.QuestStatusItr->first;
|
||||
uint16 logSlot = objectiveItr.second.QuestStatusItr->second.Slot;
|
||||
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
|
||||
@@ -17264,6 +17267,9 @@ void Player::UpdateQuestObjectiveProgress(QuestObjectiveType objectiveType, int3
|
||||
|
||||
for (QuestObjectiveStatusMap::value_type const& objectiveItr : Trinity::Containers::MapEqualRange(m_questObjectiveStatus, { objectiveType, objectId }))
|
||||
{
|
||||
if (objectiveItr.second.QuestStatusItr == m_QuestStatus.end())
|
||||
continue;
|
||||
|
||||
uint32 questId = objectiveItr.second.QuestStatusItr->first;
|
||||
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
|
||||
if (!quest)
|
||||
@@ -17501,6 +17507,9 @@ QuestObjective const* Player::GetQuestObjectiveForItem(uint32 itemId, bool onlyI
|
||||
{
|
||||
for (QuestObjectiveStatusMap::value_type const& objectiveItr : Trinity::Containers::MapEqualRange(m_questObjectiveStatus, { QUEST_OBJECTIVE_ITEM, itemId }))
|
||||
{
|
||||
if (objectiveItr.second.QuestStatusItr == m_QuestStatus.end())
|
||||
continue;
|
||||
|
||||
Quest const* qInfo = sObjectMgr->GetQuestTemplate(objectiveItr.second.QuestStatusItr->first);
|
||||
QuestObjective const* objective = sObjectMgr->GetQuestObjective(objectiveItr.second.ObjectiveId);
|
||||
if (!qInfo || !objective || !IsQuestObjectiveCompletable(objectiveItr.second.QuestStatusItr->second.Slot, qInfo, *objective))
|
||||
@@ -27343,7 +27352,10 @@ bool Player::HasQuestForGO(int32 GOId) const
|
||||
{
|
||||
for (QuestObjectiveStatusMap::value_type const& objectiveItr : Trinity::Containers::MapEqualRange(m_questObjectiveStatus, { QUEST_OBJECTIVE_GAMEOBJECT, GOId }))
|
||||
{
|
||||
Quest const* qInfo = ASSERT_NOTNULL(sObjectMgr->GetQuestTemplate(objectiveItr.second.QuestStatusItr->first));
|
||||
if (objectiveItr.second.QuestStatusItr == m_QuestStatus.end())
|
||||
continue;
|
||||
|
||||
Quest const* qInfo = sObjectMgr->GetQuestTemplate(objectiveItr.second.QuestStatusItr->first);
|
||||
QuestObjective const* objective = sObjectMgr->GetQuestObjective(objectiveItr.second.ObjectiveId);
|
||||
if (!qInfo || !objective || !IsQuestObjectiveCompletable(objectiveItr.second.QuestStatusItr->second.Slot, qInfo, *objective))
|
||||
continue;
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "PhasingHandler.h"
|
||||
#include "SceneObject.h"
|
||||
#include <type_traits>
|
||||
//WowCommunity
|
||||
#include "HousingDynamicEntity.h"
|
||||
//WowCommunity
|
||||
@@ -89,6 +90,11 @@ void LoadHelper(GridGuidSet const& guid_set, uint32& count, Map* map, uint32 pha
|
||||
//TC_LOG_INFO("misc", "DEBUG: LoadHelper from table: {} for (guid: {}) Loading", table, guid);
|
||||
if (!obj->LoadFromDB(guid, map, false, phaseOwner.has_value() /*allowDuplicate*/))
|
||||
{
|
||||
// Properly cleanup auras before deletion to prevent assertion failures
|
||||
if constexpr (std::is_same_v<T, Creature>)
|
||||
{
|
||||
obj->RemoveAllAuras();
|
||||
}
|
||||
delete obj;
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user