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;
|
||||
uint count = 0;
|
||||
|
||||
var qTemplates = Global.ObjectMgr.GetQuestStorage();
|
||||
var qTemplates = Global.ObjectMgr.GetQuestTemplates();
|
||||
foreach (var qInfo in qTemplates.Values)
|
||||
{
|
||||
int localeIndex = handler.GetSessionDbLocaleIndex();
|
||||
|
||||
@@ -3222,6 +3222,8 @@ namespace Game.Entities
|
||||
|
||||
m_achievementSys.CheckAllAchievementCriteria(this);
|
||||
m_questObjectiveCriteriaMgr.CheckAllQuestObjectiveCriteria(this);
|
||||
|
||||
PushQuests();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -145,6 +145,8 @@ namespace Game.Entities
|
||||
else
|
||||
_restMgr.RemoveRestFlag(RestFlag.FactionArea);
|
||||
|
||||
PushQuests();
|
||||
|
||||
UpdateCriteria(CriteriaTypes.TravelledToArea, newArea);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace Game.Entities
|
||||
public ObjectGuid GetPlayerSharingQuest() { return m_playerSharingQuest; }
|
||||
public void SetQuestSharingInfo(ObjectGuid guid, uint id) { m_playerSharingQuest = guid; m_sharedQuestId = id; }
|
||||
public void ClearQuestSharingInfo() { m_playerSharingQuest = ObjectGuid.Empty; m_sharedQuestId = 0; }
|
||||
|
||||
|
||||
uint GetInGameTime() { return m_ingametime; }
|
||||
public void SetInGameTime(uint time) { m_ingametime = time; }
|
||||
|
||||
@@ -768,8 +768,7 @@ namespace Game.Entities
|
||||
GetReputationMgr().SetVisible(factionEntry);
|
||||
break;
|
||||
case QuestObjectiveType.CriteriaTree:
|
||||
if (quest.HasFlagEx(QuestFlagsEx.IsWorldQuest))
|
||||
m_questObjectiveCriteriaMgr.ResetCriteriaTree((uint)obj.ObjectID);
|
||||
m_questObjectiveCriteriaMgr.ResetCriteriaTree((uint)obj.ObjectID);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -3122,5 +3121,17 @@ namespace Game.Entities
|
||||
m_monthlyquests.Add(quest_id);
|
||||
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);
|
||||
|
||||
PushQuests();
|
||||
|
||||
Global.ScriptMgr.OnPlayerLevelChanged(this, (byte)oldLevel);
|
||||
}
|
||||
|
||||
|
||||
@@ -6592,6 +6592,7 @@ namespace Game
|
||||
|
||||
// For reload case
|
||||
_questTemplates.Clear();
|
||||
_questTemplatesAutoPush.Clear();
|
||||
_questObjectives.Clear();
|
||||
_exclusiveQuestGroups.Clear();
|
||||
|
||||
@@ -6641,6 +6642,8 @@ namespace Game
|
||||
{
|
||||
Quest newQuest = new Quest(result.GetFields());
|
||||
_questTemplates[newQuest.Id] = newQuest;
|
||||
if (newQuest.IsAutoPush())
|
||||
_questTemplatesAutoPush.Add(newQuest);
|
||||
}
|
||||
while (result.NextRow());
|
||||
|
||||
@@ -7805,9 +7808,9 @@ namespace Game
|
||||
{
|
||||
return _questTemplates;
|
||||
}
|
||||
public Dictionary<uint, Quest> GetQuestStorage()
|
||||
public List<Quest> GetQuestTemplatesAutoPush()
|
||||
{
|
||||
return _questTemplates;
|
||||
return _questTemplatesAutoPush;
|
||||
}
|
||||
public MultiMap<uint, uint> GetGOQuestRelationMap()
|
||||
{
|
||||
@@ -10246,6 +10249,7 @@ namespace Game
|
||||
|
||||
//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> _goQuestInvolvedRelations = new MultiMap<uint, uint>();
|
||||
MultiMap<uint, uint> _goQuestInvolvedRelationsReverse = new MultiMap<uint, uint>();
|
||||
|
||||
@@ -564,6 +564,12 @@ namespace Game
|
||||
|
||||
public bool HasSpecialFlag(QuestSpecialFlags flag) { return (SpecialFlags & flag) != 0; }
|
||||
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:
|
||||
public bool IsRepeatable() { return SpecialFlags.HasAnyFlag(QuestSpecialFlags.Repeatable); }
|
||||
|
||||
Reference in New Issue
Block a user