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:
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -768,7 +768,6 @@ 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:
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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>();
|
||||||
|
|||||||
@@ -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); }
|
||||||
|
|||||||
Reference in New Issue
Block a user