Core/Quests: Automatically add quests with AUTO_PUSH flag to player

Port From (https://github.com/TrinityCore/TrinityCore/commit/db6eb694656c58a817a965e2f5c85874e9c92d12)
This commit is contained in:
hondacrx
2021-02-02 10:14:16 -05:00
parent f18a9c1ec9
commit c96fc90f5b
7 changed files with 33 additions and 6 deletions
+1 -1
View File
@@ -498,7 +498,7 @@ namespace Game.Chat
bool found = false; bool found = false;
uint count = 0; uint count = 0;
var qTemplates = Global.ObjectMgr.GetQuestStorage(); var qTemplates = Global.ObjectMgr.GetQuestTemplates();
foreach (var qInfo in qTemplates.Values) foreach (var qInfo in qTemplates.Values)
{ {
int localeIndex = handler.GetSessionDbLocaleIndex(); int localeIndex = handler.GetSessionDbLocaleIndex();
+2
View File
@@ -3222,6 +3222,8 @@ namespace Game.Entities
m_achievementSys.CheckAllAchievementCriteria(this); m_achievementSys.CheckAllAchievementCriteria(this);
m_questObjectiveCriteriaMgr.CheckAllQuestObjectiveCriteria(this); m_questObjectiveCriteriaMgr.CheckAllQuestObjectiveCriteria(this);
PushQuests();
return true; return true;
} }
@@ -145,6 +145,8 @@ namespace Game.Entities
else else
_restMgr.RemoveRestFlag(RestFlag.FactionArea); _restMgr.RemoveRestFlag(RestFlag.FactionArea);
PushQuests();
UpdateCriteria(CriteriaTypes.TravelledToArea, newArea); UpdateCriteria(CriteriaTypes.TravelledToArea, newArea);
} }
+13 -2
View File
@@ -768,8 +768,7 @@ namespace Game.Entities
GetReputationMgr().SetVisible(factionEntry); GetReputationMgr().SetVisible(factionEntry);
break; break;
case QuestObjectiveType.CriteriaTree: case QuestObjectiveType.CriteriaTree:
if (quest.HasFlagEx(QuestFlagsEx.IsWorldQuest)) m_questObjectiveCriteriaMgr.ResetCriteriaTree((uint)obj.ObjectID);
m_questObjectiveCriteriaMgr.ResetCriteriaTree((uint)obj.ObjectID);
break; break;
default: default:
break; break;
@@ -3122,5 +3121,17 @@ namespace Game.Entities
m_monthlyquests.Add(quest_id); m_monthlyquests.Add(quest_id);
m_MonthlyQuestChanged = true; m_MonthlyQuestChanged = true;
} }
void PushQuests()
{
foreach (Quest quest in Global.ObjectMgr.GetQuestTemplatesAutoPush())
{
if (quest.GetQuestTag() != 0 && quest.GetQuestTag() != QuestTagType.Tag)
continue;
if (!quest.IsUnavailable() && CanTakeQuest(quest, false))
AddQuestAndCheckCompletion(quest, null);
}
}
} }
} }
+2
View File
@@ -5236,6 +5236,8 @@ namespace Game.Entities
UpdateCriteria(CriteriaTypes.ReachLevel); UpdateCriteria(CriteriaTypes.ReachLevel);
PushQuests();
Global.ScriptMgr.OnPlayerLevelChanged(this, (byte)oldLevel); Global.ScriptMgr.OnPlayerLevelChanged(this, (byte)oldLevel);
} }
+6 -2
View File
@@ -6592,6 +6592,7 @@ namespace Game
// For reload case // For reload case
_questTemplates.Clear(); _questTemplates.Clear();
_questTemplatesAutoPush.Clear();
_questObjectives.Clear(); _questObjectives.Clear();
_exclusiveQuestGroups.Clear(); _exclusiveQuestGroups.Clear();
@@ -6641,6 +6642,8 @@ namespace Game
{ {
Quest newQuest = new Quest(result.GetFields()); Quest newQuest = new Quest(result.GetFields());
_questTemplates[newQuest.Id] = newQuest; _questTemplates[newQuest.Id] = newQuest;
if (newQuest.IsAutoPush())
_questTemplatesAutoPush.Add(newQuest);
} }
while (result.NextRow()); while (result.NextRow());
@@ -7805,9 +7808,9 @@ namespace Game
{ {
return _questTemplates; return _questTemplates;
} }
public Dictionary<uint, Quest> GetQuestStorage() public List<Quest> GetQuestTemplatesAutoPush()
{ {
return _questTemplates; return _questTemplatesAutoPush;
} }
public MultiMap<uint, uint> GetGOQuestRelationMap() public MultiMap<uint, uint> GetGOQuestRelationMap()
{ {
@@ -10246,6 +10249,7 @@ namespace Game
//Quest //Quest
Dictionary<uint, Quest> _questTemplates = new Dictionary<uint, Quest>(); Dictionary<uint, Quest> _questTemplates = new Dictionary<uint, Quest>();
List<Quest> _questTemplatesAutoPush = new List<Quest>();
MultiMap<uint, uint> _goQuestRelations = new MultiMap<uint, uint>(); MultiMap<uint, uint> _goQuestRelations = new MultiMap<uint, uint>();
MultiMap<uint, uint> _goQuestInvolvedRelations = new MultiMap<uint, uint>(); MultiMap<uint, uint> _goQuestInvolvedRelations = new MultiMap<uint, uint>();
MultiMap<uint, uint> _goQuestInvolvedRelationsReverse = new MultiMap<uint, uint>(); MultiMap<uint, uint> _goQuestInvolvedRelationsReverse = new MultiMap<uint, uint>();
+6
View File
@@ -565,6 +565,12 @@ namespace Game
public bool HasSpecialFlag(QuestSpecialFlags flag) { return (SpecialFlags & flag) != 0; } public bool HasSpecialFlag(QuestSpecialFlags flag) { return (SpecialFlags & flag) != 0; }
public void SetSpecialFlag(QuestSpecialFlags flag) { SpecialFlags |= flag; } public void SetSpecialFlag(QuestSpecialFlags flag) { SpecialFlags |= flag; }
public bool IsAutoPush() { return HasFlagEx(QuestFlagsEx.AutoPush); }
public bool IsWorldQuest() { return HasFlagEx(QuestFlagsEx.IsWorldQuest);}
// Possibly deprecated flag
public bool IsUnavailable() { return HasFlag(QuestFlags.Unavailable); }
// table data accessors: // table data accessors:
public bool IsRepeatable() { return SpecialFlags.HasAnyFlag(QuestSpecialFlags.Repeatable); } public bool IsRepeatable() { return SpecialFlags.HasAnyFlag(QuestSpecialFlags.Repeatable); }
public bool IsDaily() { return Flags.HasAnyFlag(QuestFlags.Daily); } public bool IsDaily() { return Flags.HasAnyFlag(QuestFlags.Daily); }