Core/Criteria: Add all values of CriteriaStartEvent

Port From (https://github.com/TrinityCore/TrinityCore/commit/0b2087ae4185fa53cd3b5d7206f7fd3726fd642f)
This commit is contained in:
hondacrx
2021-06-04 14:08:02 -04:00
parent 93f8c09364
commit 103d78dccc
13 changed files with 54 additions and 48 deletions
+21 -15
View File
@@ -420,6 +420,27 @@ namespace Framework.Constants
Max Max
} }
public enum CriteriaStartEvent : byte
{
None = 0, // - NONE -
ReachLevel = 1, // Reach level {#Level}
CompleteDailyQuest = 2, // Complete daily quest "{QuestV2}"
StartBattleground = 3, // Start battleground "{Map}"
WinRankedArenaMatchWithTeamSize = 4, // Win a ranked arena match with team size {#Team Size}
GainAura = 5, // Gain aura "{Spell}"
GainAuraEffect = 6, // Gain aura effect "{SpellAuraNames.EnumID}"
CastSpell = 7, // Cast spell "{Spell}"
BeSpellTarget = 8, // Have spell "{Spell}" cast on you
AcceptQuest = 9, // Accept quest "{QuestV2}"
KillNPC = 10, // Kill NPC "{Creature}"
KillPlayer = 11, // Kill player
UseItem = 12, // Use item "{Item}"
SendEvent = 13, // Send event "{GameEvents}" (player-sent/instance only)
BeginScenarioStep = 14, // Begin scenario step "{#Step}" (for use with "Player on Scenario" modifier only)
Max
}
public enum CriteriaFlags public enum CriteriaFlags
{ {
ShowProgressBar = 0x01, ShowProgressBar = 0x01,
@@ -430,21 +451,6 @@ namespace Framework.Constants
MoneyCounter = 0x20 MoneyCounter = 0x20
} }
public enum CriteriaTimedTypes : byte
{
Event = 1, // Timer Is Started By Internal Event With Id In Timerstartevent
Quest = 2, // Timer Is Started By Accepting Quest With Entry In Timerstartevent
SpellCaster = 5, // Timer Is Started By Casting A Spell With Entry In Timerstartevent
SpellTarget = 6, // Timer Is Started By Being Target Of Spell With Entry In Timerstartevent
Creature = 7, // Timer Is Started By Killing Creature With Entry In Timerstartevent
Item = 9, // Timer Is Started By Using Item With Entry In Timerstartevent
Unk = 10, // Unknown
Unk2 = 13, // Unknown
ScenarioStage = 14, // Timer is started by changing stages in a scenario
Max
}
public enum CriteriaTypes : byte public enum CriteriaTypes : byte
{ {
KillCreature = 0, KillCreature = 0,
+9 -9
View File
@@ -484,9 +484,9 @@ namespace Game.Achievements
} }
} }
public void StartCriteriaTimer(CriteriaTimedTypes type, uint entry, uint timeLost = 0) public void StartCriteriaTimer(CriteriaStartEvent startEvent, uint entry, uint timeLost = 0)
{ {
List<Criteria> criteriaList = Global.CriteriaMgr.GetTimedCriteriaByType(type); List<Criteria> criteriaList = Global.CriteriaMgr.GetTimedCriteriaByType(startEvent);
foreach (Criteria criteria in criteriaList) foreach (Criteria criteria in criteriaList)
{ {
if (criteria.Entry.StartAsset != entry) if (criteria.Entry.StartAsset != entry)
@@ -515,9 +515,9 @@ namespace Game.Achievements
} }
} }
public void RemoveCriteriaTimer(CriteriaTimedTypes type, uint entry) public void RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
List<Criteria> criteriaList = Global.CriteriaMgr.GetTimedCriteriaByType(type); List<Criteria> criteriaList = Global.CriteriaMgr.GetTimedCriteriaByType(startEvent);
foreach (Criteria criteria in criteriaList) foreach (Criteria criteria in criteriaList)
{ {
if (criteria.Entry.StartAsset != entry) if (criteria.Entry.StartAsset != entry)
@@ -2626,7 +2626,7 @@ namespace Game.Achievements
MultiMap<CriteriaTypes, Criteria> _scenarioCriteriasByType = new(); MultiMap<CriteriaTypes, Criteria> _scenarioCriteriasByType = new();
MultiMap<CriteriaTypes, Criteria> _questObjectiveCriteriasByType = new(); MultiMap<CriteriaTypes, Criteria> _questObjectiveCriteriasByType = new();
MultiMap<CriteriaTimedTypes, Criteria> _criteriasByTimedType = new(); MultiMap<CriteriaStartEvent, Criteria> _criteriasByTimedType = new();
MultiMap<int, Criteria>[] _criteriasByFailEvent = new MultiMap<int, Criteria>[(int)CriteriaFailEvent.Max]; MultiMap<int, Criteria>[] _criteriasByFailEvent = new MultiMap<int, Criteria>[(int)CriteriaFailEvent.Max];
CriteriaManager() CriteriaManager()
@@ -2758,7 +2758,7 @@ namespace Game.Achievements
{ {
Cypher.Assert(criteriaEntry.Type < CriteriaTypes.TotalTypes, Cypher.Assert(criteriaEntry.Type < CriteriaTypes.TotalTypes,
$"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaTypes.TotalTypes}"); $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaTypes.TotalTypes}");
Cypher.Assert(criteriaEntry.StartEvent < CriteriaTimedTypes.Max, $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaTimedTypes.Max}"); Cypher.Assert(criteriaEntry.StartEvent < (byte)CriteriaStartEvent.Max, $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaStartEvent.Max}");
Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Max, $"CRITERIA_CONDITION_MAX must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Max}"); Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Max, $"CRITERIA_CONDITION_MAX must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Max}");
var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id); var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id);
@@ -2841,7 +2841,7 @@ namespace Game.Achievements
} }
if (criteriaEntry.StartTimer != 0) if (criteriaEntry.StartTimer != 0)
_criteriasByTimedType.Add(criteriaEntry.StartEvent, criteria); _criteriasByTimedType.Add((CriteriaStartEvent)criteriaEntry.StartEvent, criteria);
if (criteriaEntry.FailEvent != 0) if (criteriaEntry.FailEvent != 0)
_criteriasByFailEvent[criteriaEntry.FailEvent].Add((int)criteriaEntry.FailAsset, criteria); _criteriasByFailEvent[criteriaEntry.FailEvent].Add((int)criteriaEntry.FailAsset, criteria);
@@ -2995,9 +2995,9 @@ namespace Game.Achievements
return _criteriaTreeByCriteria.LookupByKey(criteriaId); return _criteriaTreeByCriteria.LookupByKey(criteriaId);
} }
public List<Criteria> GetTimedCriteriaByType(CriteriaTimedTypes type) public List<Criteria> GetTimedCriteriaByType(CriteriaStartEvent startEvent)
{ {
return _criteriasByTimedType.LookupByKey(type); return _criteriasByTimedType.LookupByKey(startEvent);
} }
public List<Criteria> GetCriteriaByFailEvent(CriteriaFailEvent failEvent, int asset) public List<Criteria> GetCriteriaByFailEvent(CriteriaFailEvent failEvent, int asset)
+2 -2
View File
@@ -1772,13 +1772,13 @@ namespace Game.BattleGrounds
return Global.ObjectMgr.GetClosestGraveYard(player, player.GetTeam(), player); return Global.ObjectMgr.GetClosestGraveYard(player, player.GetTeam(), player);
} }
public void StartCriteriaTimer(CriteriaTimedTypes type, uint entry) public void StartCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
foreach (var guid in GetPlayers().Keys) foreach (var guid in GetPlayers().Keys)
{ {
Player player = Global.ObjAccessor.FindPlayer(guid); Player player = Global.ObjAccessor.FindPlayer(guid);
if (player) if (player)
player.StartCriteriaTimer(type, entry); player.StartCriteriaTimer(startEvent, entry);
} }
} }
@@ -212,7 +212,7 @@ namespace Game.BattleGrounds.Zones
DoorOpen(ABObjectTypes.GateH); DoorOpen(ABObjectTypes.GateH);
// Achievement: Let's Get This Done // Achievement: Let's Get This Done
StartCriteriaTimer(CriteriaTimedTypes.Event, EventStartBattle); StartCriteriaTimer(CriteriaStartEvent.SendEvent, EventStartBattle);
} }
public override void AddPlayer(Player player) public override void AddPlayer(Player player)
@@ -132,7 +132,7 @@ namespace Game.BattleGrounds.Zones
} }
// Achievement: Flurry // Achievement: Flurry
StartCriteriaTimer(CriteriaTimedTypes.Event, EotSMisc.EventStartBattle); StartCriteriaTimer(CriteriaStartEvent.SendEvent, EotSMisc.EventStartBattle);
} }
void AddPoints(Team Team, uint Points) void AddPoints(Team Team, uint Points)
@@ -344,7 +344,7 @@ namespace Game.BattleGrounds.Zones
ToggleTimer(); ToggleTimer();
DemolisherStartState(false); DemolisherStartState(false);
Status = SAStatus.RoundOne; Status = SAStatus.RoundOne;
StartCriteriaTimer(CriteriaTimedTypes.Event, (Attackers == TeamId.Alliance) ? 23748 : 21702u); StartCriteriaTimer(CriteriaStartEvent.SendEvent, (Attackers == TeamId.Alliance) ? 23748 : 21702u);
} }
if (TotalTime >= SATimers.BoatStart) if (TotalTime >= SATimers.BoatStart)
StartShips(); StartShips();
@@ -367,7 +367,7 @@ namespace Game.BattleGrounds.Zones
ToggleTimer(); ToggleTimer();
DemolisherStartState(false); DemolisherStartState(false);
Status = SAStatus.RoundTwo; Status = SAStatus.RoundTwo;
StartCriteriaTimer(CriteriaTimedTypes.Event, (Attackers == TeamId.Alliance) ? 23748 : 21702u); StartCriteriaTimer(CriteriaStartEvent.SendEvent, (Attackers == TeamId.Alliance) ? 23748 : 21702u);
// status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now // status was set to STATUS_WAIT_JOIN manually for Preparation, set it back now
SetStatus(BattlegroundStatus.InProgress); SetStatus(BattlegroundStatus.InProgress);
foreach (var pair in GetPlayers()) foreach (var pair in GetPlayers())
@@ -195,7 +195,7 @@ namespace Game.BattleGrounds.Zones
SpawnBGObject(WSGObjectTypes.DoorH4, BattlegroundConst.RespawnOneDay); SpawnBGObject(WSGObjectTypes.DoorH4, BattlegroundConst.RespawnOneDay);
// players joining later are not eligibles // players joining later are not eligibles
StartCriteriaTimer(CriteriaTimedTypes.Event, 8563); StartCriteriaTimer(CriteriaStartEvent.SendEvent, 8563);
} }
public override void AddPlayer(Player player) public override void AddPlayer(Player player)
@@ -446,7 +446,7 @@ namespace Game.BattleGrounds.Zones
UpdateFlagState(Team.Horde, WSGFlagState.OnPlayer); UpdateFlagState(Team.Horde, WSGFlagState.OnPlayer);
UpdateWorldState(WSGWorldStates.FlagUnkAlliance, 1); UpdateWorldState(WSGWorldStates.FlagUnkAlliance, 1);
player.CastSpell(player, WSGSpellId.SilverwingFlag, true); player.CastSpell(player, WSGSpellId.SilverwingFlag, true);
player.StartCriteriaTimer(CriteriaTimedTypes.SpellTarget, WSGSpellId.SilverwingFlagPicked); player.StartCriteriaTimer(CriteriaStartEvent.BeSpellTarget, WSGSpellId.SilverwingFlagPicked);
if (_flagState[1] == WSGFlagState.OnPlayer) if (_flagState[1] == WSGFlagState.OnPlayer)
_bothFlagsKept = true; _bothFlagsKept = true;
} }
@@ -464,7 +464,7 @@ namespace Game.BattleGrounds.Zones
UpdateFlagState(Team.Alliance, WSGFlagState.OnPlayer); UpdateFlagState(Team.Alliance, WSGFlagState.OnPlayer);
UpdateWorldState(WSGWorldStates.FlagUnkHorde, 1); UpdateWorldState(WSGWorldStates.FlagUnkHorde, 1);
player.CastSpell(player, WSGSpellId.WarsongFlag, true); player.CastSpell(player, WSGSpellId.WarsongFlag, true);
player.StartCriteriaTimer(CriteriaTimedTypes.SpellTarget, WSGSpellId.WarsongFlagPicked); player.StartCriteriaTimer(CriteriaStartEvent.BeSpellTarget, WSGSpellId.WarsongFlagPicked);
if (_flagState[0] == WSGFlagState.OnPlayer) if (_flagState[0] == WSGFlagState.OnPlayer)
_bothFlagsKept = true; _bothFlagsKept = true;
} }
+1 -1
View File
@@ -479,7 +479,7 @@ namespace Game.DataStorage
public CriteriaTypes Type; public CriteriaTypes Type;
public uint Asset; public uint Asset;
public uint ModifierTreeId; public uint ModifierTreeId;
public CriteriaTimedTypes StartEvent; public byte StartEvent;
public uint StartAsset; public uint StartAsset;
public ushort StartTimer; public ushort StartTimer;
public byte FailEvent; public byte FailEvent;
@@ -43,14 +43,14 @@ namespace Game.Entities
{ {
return m_achievementSys.HasAchieved(achievementId); return m_achievementSys.HasAchieved(achievementId);
} }
public void StartCriteriaTimer(CriteriaTimedTypes type, uint entry, uint timeLost = 0) public void StartCriteriaTimer(CriteriaStartEvent startEvent, uint entry, uint timeLost = 0)
{ {
m_achievementSys.StartCriteriaTimer(type, entry, timeLost); m_achievementSys.StartCriteriaTimer(startEvent, entry, timeLost);
} }
public void RemoveCriteriaTimer(CriteriaTimedTypes type, uint entry) public void RemoveCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
m_achievementSys.RemoveCriteriaTimer(type, entry); m_achievementSys.RemoveCriteriaTimer(startEvent, entry);
} }
public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool evenIfCriteriaComplete = false) public void ResetCriteria(CriteriaFailEvent failEvent, uint failAsset, bool evenIfCriteriaComplete = false)
+2 -2
View File
@@ -810,7 +810,7 @@ namespace Game.Entities
m_QuestStatusSave[questId] = QuestSaveType.Default; m_QuestStatusSave[questId] = QuestSaveType.Default;
StartCriteriaTimer(CriteriaTimedTypes.Quest, questId); StartCriteriaTimer(CriteriaStartEvent.AcceptQuest, questId);
SendQuestUpdate(questId); SendQuestUpdate(questId);
@@ -2234,7 +2234,7 @@ namespace Game.Entities
real_entry = killed.GetEntry(); real_entry = killed.GetEntry();
} }
StartCriteriaTimer(CriteriaTimedTypes.Creature, real_entry); // MUST BE CALLED FIRST StartCriteriaTimer(CriteriaStartEvent.KillNPC, real_entry); // MUST BE CALLED FIRST
UpdateCriteria(CriteriaTypes.KillCreature, real_entry, addKillCount, 0, killed); UpdateCriteria(CriteriaTypes.KillCreature, real_entry, addKillCount, 0, killed);
UpdateQuestObjectiveProgress(QuestObjectiveType.Monster, (int)entry, 1, guid); UpdateQuestObjectiveProgress(QuestObjectiveType.Monster, (int)entry, 1, guid);
+1 -1
View File
@@ -460,7 +460,7 @@ namespace Game
GetPlayer().TakeQuestSourceItem(questId, true); // remove quest src item from player GetPlayer().TakeQuestSourceItem(questId, true); // remove quest src item from player
GetPlayer().AbandonQuest(questId); // remove all quest items player received before abandoning quest. Note, this does not remove normal drop items that happen to be quest requirements. GetPlayer().AbandonQuest(questId); // remove all quest items player received before abandoning quest. Note, this does not remove normal drop items that happen to be quest requirements.
GetPlayer().RemoveActiveQuest(questId); GetPlayer().RemoveActiveQuest(questId);
GetPlayer().RemoveCriteriaTimer(CriteriaTimedTypes.Quest, questId); GetPlayer().RemoveCriteriaTimer(CriteriaStartEvent.AcceptQuest, questId);
Log.outInfo(LogFilter.Network, "Player {0} abandoned quest {1}", GetPlayer().GetGUID().ToString(), questId); Log.outInfo(LogFilter.Network, "Player {0} abandoned quest {1}", GetPlayer().GetGUID().ToString(), questId);
+4 -4
View File
@@ -615,23 +615,23 @@ namespace Game.Maps
} }
// Start timed achievement for all players in instance // Start timed achievement for all players in instance
public void DoStartCriteriaTimer(CriteriaTimedTypes type, uint entry) public void DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
var PlayerList = instance.GetPlayers(); var PlayerList = instance.GetPlayers();
if (!PlayerList.Empty()) if (!PlayerList.Empty())
foreach (var player in PlayerList) foreach (var player in PlayerList)
player.StartCriteriaTimer(type, entry); player.StartCriteriaTimer(startEvent, entry);
} }
// Stop timed achievement for all players in instance // Stop timed achievement for all players in instance
public void DoStopCriteriaTimer(CriteriaTimedTypes type, uint entry) public void DoStopCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{ {
var PlayerList = instance.GetPlayers(); var PlayerList = instance.GetPlayers();
if (!PlayerList.Empty()) if (!PlayerList.Empty())
foreach (var player in PlayerList) foreach (var player in PlayerList)
player.RemoveCriteriaTimer(type, entry); player.RemoveCriteriaTimer(startEvent, entry);
} }
// Remove Auras due to Spell on all players in instance // Remove Auras due to Spell on all players in instance
+3 -3
View File
@@ -2092,7 +2092,7 @@ namespace Game.Spells
Player player = unit.ToPlayer(); Player player = unit.ToPlayer();
if (player != null) if (player != null)
{ {
player.StartCriteriaTimer(CriteriaTimedTypes.SpellTarget, m_spellInfo.Id); player.StartCriteriaTimer(CriteriaStartEvent.BeSpellTarget, m_spellInfo.Id);
player.UpdateCriteria(CriteriaTypes.BeSpellTarget, m_spellInfo.Id, 0, 0, m_caster); player.UpdateCriteria(CriteriaTypes.BeSpellTarget, m_spellInfo.Id, 0, 0, m_caster);
player.UpdateCriteria(CriteriaTypes.BeSpellTarget2, m_spellInfo.Id); player.UpdateCriteria(CriteriaTypes.BeSpellTarget2, m_spellInfo.Id);
} }
@@ -2100,7 +2100,7 @@ namespace Game.Spells
player = m_caster.ToPlayer(); player = m_caster.ToPlayer();
if (player != null) if (player != null)
{ {
player.StartCriteriaTimer(CriteriaTimedTypes.SpellCaster, m_spellInfo.Id); player.StartCriteriaTimer(CriteriaStartEvent.CastSpell, m_spellInfo.Id);
player.UpdateCriteria(CriteriaTypes.CastSpell2, m_spellInfo.Id, 0, 0, unit); player.UpdateCriteria(CriteriaTypes.CastSpell2, m_spellInfo.Id, 0, 0, unit);
} }
@@ -2848,7 +2848,7 @@ namespace Game.Spells
{ {
if (!Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnoreCastItem) && m_CastItem != null) if (!Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnoreCastItem) && m_CastItem != null)
{ {
player.StartCriteriaTimer(CriteriaTimedTypes.Item, m_CastItem.GetEntry()); player.StartCriteriaTimer(CriteriaStartEvent.UseItem, m_CastItem.GetEntry());
player.UpdateCriteria(CriteriaTypes.UseItem, m_CastItem.GetEntry()); player.UpdateCriteria(CriteriaTypes.UseItem, m_CastItem.GetEntry());
} }