Core/Quests: Fixed quests not working after relogging

Port From (https://github.com/TrinityCore/TrinityCore/commit/c0261468c58a994f2d87a70b1d08a9db507cf2b4)
This commit is contained in:
hondacrx
2021-08-17 09:51:52 -04:00
parent c3367b7508
commit ea364025fb
+21 -14
View File
@@ -674,9 +674,9 @@ namespace Game.Entities
{ {
do do
{ {
uint quest_id = result.Read<uint>(0); uint questId = result.Read<uint>(0);
// used to be new, no delete? // used to be new, no delete?
Quest quest = Global.ObjectMgr.GetQuestTemplate(quest_id); Quest quest = Global.ObjectMgr.GetQuestTemplate(questId);
if (quest != null) if (quest != null)
{ {
// find or create // find or create
@@ -689,7 +689,7 @@ namespace Game.Entities
{ {
questStatusData.Status = QuestStatus.Incomplete; questStatusData.Status = QuestStatus.Incomplete;
Log.outError(LogFilter.Player, "Player {0} (GUID: {1}) has invalid quest {2} status ({3}), replaced by QUEST_STATUS_INCOMPLETE(3).", Log.outError(LogFilter.Player, "Player {0} (GUID: {1}) has invalid quest {2} status ({3}), replaced by QUEST_STATUS_INCOMPLETE(3).",
GetName(), GetGUID().ToString(), quest_id, qstatus); GetName(), GetGUID().ToString(), questId, qstatus);
} }
questStatusData.Explored = result.Read<byte>(2) > 0; questStatusData.Explored = result.Read<byte>(2) > 0;
@@ -697,9 +697,9 @@ namespace Game.Entities
long acceptTime = result.Read<long>(3); long acceptTime = result.Read<long>(3);
long endTime = result.Read<long>(4); long endTime = result.Read<long>(4);
if (quest.LimitTime != 0 && !GetQuestRewardStatus(quest_id)) if (quest.LimitTime != 0 && !GetQuestRewardStatus(questId))
{ {
AddTimedQuest(quest_id); AddTimedQuest(questId);
if (endTime <= GameTime.GetGameTime()) if (endTime <= GameTime.GetGameTime())
questStatusData.Timer = 1; questStatusData.Timer = 1;
@@ -713,7 +713,11 @@ namespace Game.Entities
if (slot < SharedConst.MaxQuestLogSize && questStatusData.Status != QuestStatus.None) if (slot < SharedConst.MaxQuestLogSize && questStatusData.Status != QuestStatus.None)
{ {
questStatusData.Slot = slot; questStatusData.Slot = slot;
SetQuestSlot(slot, quest_id);
foreach (QuestObjective obj in quest.Objectives)
m_questObjectiveStatus.Add((obj.Type, obj.ObjectID), new QuestObjectiveStatusData() { QuestStatusPair = (questId, questStatusData), Objective = obj });
SetQuestSlot(slot, questId);
SetQuestSlotEndTime(slot, endTime); SetQuestSlotEndTime(slot, endTime);
SetQuestSlotAcceptTime(slot, acceptTime); SetQuestSlotAcceptTime(slot, acceptTime);
@@ -725,8 +729,8 @@ namespace Game.Entities
++slot; ++slot;
} }
m_QuestStatus[quest_id] = questStatusData; m_QuestStatus[questId] = questStatusData;
Log.outDebug(LogFilter.ServerLoading, "Quest status is {0} for quest {1} for player (GUID: {2})", questStatusData.Status, quest_id, GetGUID().ToString()); Log.outDebug(LogFilter.ServerLoading, "Quest status is {0} for quest {1} for player (GUID: {2})", questStatusData.Status, questId, GetGUID().ToString());
} }
} }
while (result.NextRow()); while (result.NextRow());
@@ -755,7 +759,6 @@ namespace Game.Entities
if (objective != null) if (objective != null)
{ {
int data = result.Read<int>(2); int data = result.Read<int>(2);
m_questObjectiveStatus.Add((objective.Type, objective.ObjectID), new QuestObjectiveStatusData() { QuestStatusPair = (questID, questStatusData), Objective = objective });
if (!objective.IsStoringFlag()) if (!objective.IsStoringFlag())
SetQuestSlotCounter(questStatusData.Slot, storageIndex, (ushort)data); SetQuestSlotCounter(questStatusData.Slot, storageIndex, (ushort)data);
else if (data != 0) else if (data != 0)
@@ -2543,7 +2546,7 @@ namespace Game.Entities
float orientation = result.Read<float>(fieldIndex++); float orientation = result.Read<float>(fieldIndex++);
string taximask = result.Read<string>(fieldIndex++); string taximask = result.Read<string>(fieldIndex++);
byte cinematic = result.Read<byte>(fieldIndex++); byte cinematic = result.Read<byte>(fieldIndex++);
uint totaltime = result.Read<uint> (fieldIndex++); uint totaltime = result.Read<uint>(fieldIndex++);
uint leveltime = result.Read<uint>(fieldIndex++); uint leveltime = result.Read<uint>(fieldIndex++);
float rest_bonus = result.Read<float>(fieldIndex++); float rest_bonus = result.Read<float>(fieldIndex++);
long logout_time = result.Read<long>(fieldIndex++); long logout_time = result.Read<long>(fieldIndex++);
@@ -3207,7 +3210,8 @@ namespace Game.Entities
default: default:
case 0: case 0:
break; // disable break; // disable
case 1: SetGameMaster(true); case 1:
SetGameMaster(true);
break; // enable break; // enable
case 2: // save state case 2: // save state
if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMOn)) if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMOn))
@@ -3218,7 +3222,8 @@ namespace Game.Entities
switch (WorldConfig.GetIntValue(WorldCfg.GmVisibleState)) switch (WorldConfig.GetIntValue(WorldCfg.GmVisibleState))
{ {
default: default:
case 0: SetGMVisible(false); case 0:
SetGMVisible(false);
break; // invisible break; // invisible
case 1: case 1:
break; // visible break; // visible
@@ -3233,7 +3238,8 @@ namespace Game.Entities
default: default:
case 0: case 0:
break; // disable break; // disable
case 1: SetGMChat(true); case 1:
SetGMChat(true);
break; // enable break; // enable
case 2: // save state case 2: // save state
if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMChat)) if (extra_flags.HasAnyFlag(PlayerExtraFlags.GMChat))
@@ -3246,7 +3252,8 @@ namespace Game.Entities
default: default:
case 0: case 0:
break; // disable break; // disable
case 1: SetAcceptWhispers(true); case 1:
SetAcceptWhispers(true);
break; // enable break; // enable
case 2: // save state case 2: // save state
if (extra_flags.HasAnyFlag(PlayerExtraFlags.AcceptWhispers)) if (extra_flags.HasAnyFlag(PlayerExtraFlags.AcceptWhispers))