Core/Quests: Fixed marking quest objectives as complete clientside for objectives using flagging instead of counters
Port From (https://github.com/TrinityCore/TrinityCore/commit/e3a9b18567866ab5b309758168fbe4ce579b30f3)
This commit is contained in:
@@ -2311,7 +2311,7 @@ namespace Game.Entities
|
|||||||
public UpdateField<uint> StateFlags = new UpdateField<uint>(0, 2);
|
public UpdateField<uint> StateFlags = new UpdateField<uint>(0, 2);
|
||||||
public UpdateField<uint> EndTime = new UpdateField<uint>(0, 3);
|
public UpdateField<uint> EndTime = new UpdateField<uint>(0, 3);
|
||||||
public UpdateField<uint> AcceptTime = new UpdateField<uint>(0, 4);
|
public UpdateField<uint> AcceptTime = new UpdateField<uint>(0, 4);
|
||||||
public UpdateField<uint> Field_10 = new UpdateField<uint>(0, 5);
|
public UpdateField<uint> ObjectiveFlags = new UpdateField<uint>(0, 5);
|
||||||
public UpdateFieldArray<ushort> ObjectiveProgress = new UpdateFieldArray<ushort>(24, 6, 7);
|
public UpdateFieldArray<ushort> ObjectiveProgress = new UpdateFieldArray<ushort>(24, 6, 7);
|
||||||
|
|
||||||
public QuestLog() : base(31) { }
|
public QuestLog() : base(31) { }
|
||||||
@@ -2322,7 +2322,7 @@ namespace Game.Entities
|
|||||||
data.WriteUInt32(StateFlags);
|
data.WriteUInt32(StateFlags);
|
||||||
data.WriteUInt32(EndTime);
|
data.WriteUInt32(EndTime);
|
||||||
data.WriteUInt32(AcceptTime);
|
data.WriteUInt32(AcceptTime);
|
||||||
data.WriteUInt32(Field_10);
|
data.WriteUInt32(ObjectiveFlags);
|
||||||
for (int i = 0; i < 24; ++i)
|
for (int i = 0; i < 24; ++i)
|
||||||
{
|
{
|
||||||
data.WriteUInt16(ObjectiveProgress[i]);
|
data.WriteUInt16(ObjectiveProgress[i]);
|
||||||
@@ -2360,7 +2360,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
if (changesMask[5])
|
if (changesMask[5])
|
||||||
{
|
{
|
||||||
data.WriteUInt32(Field_10);
|
data.WriteUInt32(ObjectiveFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (changesMask[6])
|
if (changesMask[6])
|
||||||
@@ -2381,7 +2381,7 @@ namespace Game.Entities
|
|||||||
ClearChangesMask(StateFlags);
|
ClearChangesMask(StateFlags);
|
||||||
ClearChangesMask(EndTime);
|
ClearChangesMask(EndTime);
|
||||||
ClearChangesMask(AcceptTime);
|
ClearChangesMask(AcceptTime);
|
||||||
ClearChangesMask(Field_10);
|
ClearChangesMask(ObjectiveFlags);
|
||||||
ClearChangesMask(ObjectiveProgress);
|
ClearChangesMask(ObjectiveProgress);
|
||||||
_changesMask.ResetAll();
|
_changesMask.ResetAll();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -763,7 +763,7 @@ namespace Game.Entities
|
|||||||
if (!objectiveItr.IsStoringFlag())
|
if (!objectiveItr.IsStoringFlag())
|
||||||
SetQuestSlotCounter(slot, objectiveIndex, (ushort)data);
|
SetQuestSlotCounter(slot, objectiveIndex, (ushort)data);
|
||||||
else if (data != 0)
|
else if (data != 0)
|
||||||
SetQuestSlotState(slot, (QuestSlotStateMask)(256 << objectiveIndex));
|
SetQuestSlotObjectiveFlag(slot, (sbyte)objectiveIndex);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Log.outError(LogFilter.Player, "Player {0} ({1}) has quest {2} out of range objective index {3}.", GetName(), GetGUID().ToString(), questID, objectiveIndex);
|
Log.outError(LogFilter.Player, "Player {0} ({1}) has quest {2} out of range objective index {3}.", GetName(), GetGUID().ToString(), questID, objectiveIndex);
|
||||||
|
|||||||
@@ -2060,6 +2060,18 @@ namespace Game.Entities
|
|||||||
SetUpdateFieldValue(questLog.ModifyValue(questLog.EndTime), timer);
|
SetUpdateFieldValue(questLog.ModifyValue(questLog.EndTime), timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetQuestSlotObjectiveFlag(ushort slot, sbyte objectiveIndex)
|
||||||
|
{
|
||||||
|
QuestLog questLog = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot);
|
||||||
|
SetUpdateFieldFlagValue(questLog.ModifyValue(questLog.ObjectiveFlags), 1u << objectiveIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RemoveQuestSlotObjectiveFlag(ushort slot, sbyte objectiveIndex)
|
||||||
|
{
|
||||||
|
QuestLog questLog = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot);
|
||||||
|
RemoveUpdateFieldFlagValue(questLog.ModifyValue(questLog.ObjectiveFlags), 1u << objectiveIndex);
|
||||||
|
}
|
||||||
|
|
||||||
void SetQuestCompletedBit(uint questBit, bool completed)
|
void SetQuestCompletedBit(uint questBit, bool completed)
|
||||||
{
|
{
|
||||||
if (questBit == 0)
|
if (questBit == 0)
|
||||||
@@ -2756,9 +2768,9 @@ namespace Game.Entities
|
|||||||
if (!objective.IsStoringFlag())
|
if (!objective.IsStoringFlag())
|
||||||
SetQuestSlotCounter(log_slot, (byte)objective.StorageIndex, (ushort)status.ObjectiveData[objective.StorageIndex]);
|
SetQuestSlotCounter(log_slot, (byte)objective.StorageIndex, (ushort)status.ObjectiveData[objective.StorageIndex]);
|
||||||
else if (data != 0)
|
else if (data != 0)
|
||||||
SetQuestSlotState(log_slot, (QuestSlotStateMask)(256 << objective.StorageIndex));
|
SetQuestSlotObjectiveFlag(log_slot, objective.StorageIndex);
|
||||||
else
|
else
|
||||||
RemoveQuestSlotState(log_slot, (QuestSlotStateMask)(256 << objective.StorageIndex));
|
RemoveQuestSlotObjectiveFlag(log_slot, objective.StorageIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user