Core/Criteria: Add all values of CriteriaStartEvent
Port From (https://github.com/TrinityCore/TrinityCore/commit/0b2087ae4185fa53cd3b5d7206f7fd3726fd642f)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user