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
}
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
{
ShowProgressBar = 0x01,
@@ -430,21 +451,6 @@ namespace Framework.Constants
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
{
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)
{
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)
{
if (criteria.Entry.StartAsset != entry)
@@ -2626,7 +2626,7 @@ namespace Game.Achievements
MultiMap<CriteriaTypes, Criteria> _scenarioCriteriasByType = 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];
CriteriaManager()
@@ -2758,7 +2758,7 @@ namespace Game.Achievements
{
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}");
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}");
var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id);
@@ -2841,7 +2841,7 @@ namespace Game.Achievements
}
if (criteriaEntry.StartTimer != 0)
_criteriasByTimedType.Add(criteriaEntry.StartEvent, criteria);
_criteriasByTimedType.Add((CriteriaStartEvent)criteriaEntry.StartEvent, criteria);
if (criteriaEntry.FailEvent != 0)
_criteriasByFailEvent[criteriaEntry.FailEvent].Add((int)criteriaEntry.FailAsset, criteria);
@@ -2995,9 +2995,9 @@ namespace Game.Achievements
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)
+2 -2
View File
@@ -1772,13 +1772,13 @@ namespace Game.BattleGrounds
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)
{
Player player = Global.ObjAccessor.FindPlayer(guid);
if (player)
player.StartCriteriaTimer(type, entry);
player.StartCriteriaTimer(startEvent, entry);
}
}
@@ -212,7 +212,7 @@ namespace Game.BattleGrounds.Zones
DoorOpen(ABObjectTypes.GateH);
// Achievement: Let's Get This Done
StartCriteriaTimer(CriteriaTimedTypes.Event, EventStartBattle);
StartCriteriaTimer(CriteriaStartEvent.SendEvent, EventStartBattle);
}
public override void AddPlayer(Player player)
@@ -132,7 +132,7 @@ namespace Game.BattleGrounds.Zones
}
// Achievement: Flurry
StartCriteriaTimer(CriteriaTimedTypes.Event, EotSMisc.EventStartBattle);
StartCriteriaTimer(CriteriaStartEvent.SendEvent, EotSMisc.EventStartBattle);
}
void AddPoints(Team Team, uint Points)
@@ -344,7 +344,7 @@ namespace Game.BattleGrounds.Zones
ToggleTimer();
DemolisherStartState(false);
Status = SAStatus.RoundOne;
StartCriteriaTimer(CriteriaTimedTypes.Event, (Attackers == TeamId.Alliance) ? 23748 : 21702u);
StartCriteriaTimer(CriteriaStartEvent.SendEvent, (Attackers == TeamId.Alliance) ? 23748 : 21702u);
}
if (TotalTime >= SATimers.BoatStart)
StartShips();
@@ -367,7 +367,7 @@ namespace Game.BattleGrounds.Zones
ToggleTimer();
DemolisherStartState(false);
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
SetStatus(BattlegroundStatus.InProgress);
foreach (var pair in GetPlayers())
@@ -195,7 +195,7 @@ namespace Game.BattleGrounds.Zones
SpawnBGObject(WSGObjectTypes.DoorH4, BattlegroundConst.RespawnOneDay);
// players joining later are not eligibles
StartCriteriaTimer(CriteriaTimedTypes.Event, 8563);
StartCriteriaTimer(CriteriaStartEvent.SendEvent, 8563);
}
public override void AddPlayer(Player player)
@@ -446,7 +446,7 @@ namespace Game.BattleGrounds.Zones
UpdateFlagState(Team.Horde, WSGFlagState.OnPlayer);
UpdateWorldState(WSGWorldStates.FlagUnkAlliance, 1);
player.CastSpell(player, WSGSpellId.SilverwingFlag, true);
player.StartCriteriaTimer(CriteriaTimedTypes.SpellTarget, WSGSpellId.SilverwingFlagPicked);
player.StartCriteriaTimer(CriteriaStartEvent.BeSpellTarget, WSGSpellId.SilverwingFlagPicked);
if (_flagState[1] == WSGFlagState.OnPlayer)
_bothFlagsKept = true;
}
@@ -464,7 +464,7 @@ namespace Game.BattleGrounds.Zones
UpdateFlagState(Team.Alliance, WSGFlagState.OnPlayer);
UpdateWorldState(WSGWorldStates.FlagUnkHorde, 1);
player.CastSpell(player, WSGSpellId.WarsongFlag, true);
player.StartCriteriaTimer(CriteriaTimedTypes.SpellTarget, WSGSpellId.WarsongFlagPicked);
player.StartCriteriaTimer(CriteriaStartEvent.BeSpellTarget, WSGSpellId.WarsongFlagPicked);
if (_flagState[0] == WSGFlagState.OnPlayer)
_bothFlagsKept = true;
}
+1 -1
View File
@@ -479,7 +479,7 @@ namespace Game.DataStorage
public CriteriaTypes Type;
public uint Asset;
public uint ModifierTreeId;
public CriteriaTimedTypes StartEvent;
public byte StartEvent;
public uint StartAsset;
public ushort StartTimer;
public byte FailEvent;
@@ -43,14 +43,14 @@ namespace Game.Entities
{
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)
+2 -2
View File
@@ -810,7 +810,7 @@ namespace Game.Entities
m_QuestStatusSave[questId] = QuestSaveType.Default;
StartCriteriaTimer(CriteriaTimedTypes.Quest, questId);
StartCriteriaTimer(CriteriaStartEvent.AcceptQuest, questId);
SendQuestUpdate(questId);
@@ -2234,7 +2234,7 @@ namespace Game.Entities
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);
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().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().RemoveCriteriaTimer(CriteriaTimedTypes.Quest, questId);
GetPlayer().RemoveCriteriaTimer(CriteriaStartEvent.AcceptQuest, 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
public void DoStartCriteriaTimer(CriteriaTimedTypes type, uint entry)
public void DoStartCriteriaTimer(CriteriaStartEvent startEvent, uint entry)
{
var PlayerList = instance.GetPlayers();
if (!PlayerList.Empty())
foreach (var player in PlayerList)
player.StartCriteriaTimer(type, entry);
player.StartCriteriaTimer(startEvent, entry);
}
// 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();
if (!PlayerList.Empty())
foreach (var player in PlayerList)
player.RemoveCriteriaTimer(type, entry);
player.RemoveCriteriaTimer(startEvent, entry);
}
// 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();
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.BeSpellTarget2, m_spellInfo.Id);
}
@@ -2100,7 +2100,7 @@ namespace Game.Spells
player = m_caster.ToPlayer();
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);
}
@@ -2848,7 +2848,7 @@ namespace Game.Spells
{
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());
}