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;
uint count = 0;
var qTemplates = Global.ObjectMgr.GetQuestStorage();
var qTemplates = Global.ObjectMgr.GetQuestTemplates();
foreach (var qInfo in qTemplates.Values)
{
int localeIndex = handler.GetSessionDbLocaleIndex();
+2
View File
@@ -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);
}
+14 -3
View File
@@ -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);
}
}
}
}
+2
View File
@@ -5236,6 +5236,8 @@ namespace Game.Entities
UpdateCriteria(CriteriaTypes.ReachLevel);
PushQuests();
Global.ScriptMgr.OnPlayerLevelChanged(this, (byte)oldLevel);
}
+6 -2
View File
@@ -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>();
+6
View File
@@ -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); }