/// <summary> /// Checks if <see cref="Player"/> meets supplied prerequisite. /// </summary> public bool Meets(Player player, uint prerequisiteId) { PrerequisiteEntry entry = GameTableManager.Instance.Prerequisite.GetEntry(prerequisiteId); if (entry == null) { throw new ArgumentException(); } for (int i = 0; i < entry.PrerequisiteTypeId.Length; i++) { var type = (PrerequisiteType)entry.PrerequisiteTypeId[i]; if (type == PrerequisiteType.None) { continue; } PrerequisiteComparison comparison = (PrerequisiteComparison)entry.PrerequisiteComparisonId[i]; if (!Meets(player, type, comparison, entry.Value[i], entry.ObjectId[i])) { return(false); } } return(true); }
private static bool PrerequisiteCheckLevel(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Level}!"); return(true); } }
private bool Meets(Player player, PrerequisiteType type, PrerequisiteComparison comparison, uint value, uint objectId) { if (!prerequisiteCheckHandlers.TryGetValue(type, out PrerequisiteCheckDelegate handler)) { log.Warn($"Unhandled PrerequisiteType {type}!"); return(false); } return(handler.Invoke(player, comparison, value, objectId)); }
private static bool PrerequisiteCheckQuest(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.Equal: // Active or Completed return(player.QuestManager.GetQuestState((ushort)objectId) == null); default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Quest}!"); return(false); } }
private static bool PrerequisiteCheckPath(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.Equal: return(player.PathManager.IsPathActive((Path)value)); default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Path}!"); return(false); } }
private static bool PrerequisiteCheckBaseFaction(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.Equal: return(player.Faction1 == (Faction)value); case PrerequisiteComparison.NotEqual: return(player.Faction1 != (Faction)value); default: return(false); } }
private static bool PrerequisiteCheckRace(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.Equal: return(player.Race == (Race)value); case PrerequisiteComparison.NotEqual: return(player.Race != (Race)value); default: return(false); } }
private static bool PrerequisiteCheckAchievement(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.NotEqual: return(!player.AchievementManager.HasCompletedAchievement((ushort)objectId)); case PrerequisiteComparison.Equal: return(player.AchievementManager.HasCompletedAchievement((ushort)objectId)); default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Achievement}!"); return(false); } }
private static bool PrerequisiteCheckClass(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.Equal: return(player.Class == (Class)value); case PrerequisiteComparison.NotEqual: return(player.Class != (Class)value); default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Class}!"); return(true); } }
private static bool PrerequisiteCheckRace(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.Equal: return(player.Race == (Race)value); case PrerequisiteComparison.NotEqual: return(player.Race != (Race)value); default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Race}!"); return(false); } }
private static bool PrerequisiteCheckSpellBaseId(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { case PrerequisiteComparison.NotEqual: return(player.SpellManager.GetSpell(objectId) == null); case PrerequisiteComparison.Equal: return(player.SpellManager.GetSpell(objectId) != null); default: log.Warn($"Unhandled PrerequisiteComparison {comparison} for {PrerequisiteType.Achievement}!"); return(false); } }
private bool MeetsEvaluateOr(Player player, uint prerequisiteId, PrerequisiteEntry entry) { for (int i = 0; i < entry.PrerequisiteTypeId.Length; i++) { var type = (PrerequisiteType)entry.PrerequisiteTypeId[i]; if (type == PrerequisiteType.None) { continue; } PrerequisiteComparison comparison = (PrerequisiteComparison)entry.PrerequisiteComparisonId[i]; if (Meets(player, type, comparison, entry.Value[i], entry.ObjectId[i])) { return(true); } } log.Trace($"Player {player.Name} failed prerequisite OR check ({prerequisiteId})"); return(false); }
private static bool PrerequisiteCheckVital(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { switch (comparison) { // TODO: Uncomment when Vitals are added ;) // case PrerequisiteComparison.Equal: // return player.GetVitalValue((Vital)objectId) == value; // case PrerequisiteComparison.NotEqual: // return player.GetVitalValue((Vital)objectId) != value; // case PrerequisiteComparison.GreaterThanOrEqual: // return player.GetVitalValue((Vital)objectId) >= value; // case PrerequisiteComparison.GreaterThan: // return player.GetVitalValue((Vital)objectId) > value; // case PrerequisiteComparison.LessThanOrEqual: // return player.GetVitalValue((Vital)objectId) <= value; // case PrerequisiteComparison.LessThan: // return player.GetVitalValue((Vital)objectId) < value; default: log.Warn($"Unhandled {comparison} for {PrerequisiteType.Vital}!"); return(false); } }
private static bool PrerequisiteCheckLevel(Player player, PrerequisiteComparison comparison, uint value, uint objectId) { // 24 return(true); }