fix crash

This commit is contained in:
luis
2026-10-05 12:27:40 -03:00
parent 3a6ec38c1e
commit d5d5d23f99
2 changed files with 19 additions and 1 deletions
+13 -1
View File
@@ -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;
}