// // Licensed under the MIT License. See LICENSE file in the project root for full license information. // namespace MUnique.OpenMU.GameLogic.PlayerActions.Quests; using MUnique.OpenMU.DataModel.Configuration.Quests; /// /// Quest related extension methods. /// public static class PlayerQuestExtensions { /// /// Gets the state of the quest. /// /// The player. /// The group of the quest. /// The number of the quest. /// The quest state, if found; Otherwise, null. public static CharacterQuestState? GetQuestState(this Player player, short group, short number) { return player.SelectedCharacter?.QuestStates.FirstOrDefault(state => state.Group == group && (state.ActiveQuest?.Number == number || state.ActiveQuest?.StartingNumber == number)); } /// /// Gets the state of the quest of a group. /// /// The player. /// The group of the quest. /// The quest state, if found; Otherwise, null. public static CharacterQuestState? GetQuestState(this Player player, short group) { return player.SelectedCharacter?.QuestStates.FirstOrDefault(state => state.Group == group); } /// /// Gets the quest definition for the specified group and number depending on the players character class. /// /// The player. /// The group. /// The number. /// The quest definition for the specified group and number depending on the players character class. public static QuestDefinition? GetQuest(this Player player, short group, short number) { var possibleQuestsOfGroup = player.OpenedNpc?.Definition.Quests .Where(q => q.Group == group) .Where(q => q.QualifiedCharacter is null || Equals(q.QualifiedCharacter, player.SelectedCharacter?.CharacterClass)) .OrderBy(q => q.Number); return possibleQuestsOfGroup?.FirstOrDefault(q => q.StartingNumber == number || q.Number == number); } /// /// Gets the available quests of the currently opened NPC depending on the players character class. /// /// The player. /// The available quests of the currently opened NPC depending on the players character class. public static IEnumerable GetAvailableQuestsOfOpenedNpc(this Player player) { return player.OpenedNpc?.Definition.Quests .Where(q => q.QualifiedCharacter is null || Equals(q.QualifiedCharacter, player.SelectedCharacter?.CharacterClass)) .Where(q => q.MinimumCharacterLevel <= player.Level && (q.MaximumCharacterLevel == default || q.MaximumCharacterLevel >= player.Level)) ?? Enumerable.Empty(); } }