Beispiel #1
0
        private CharacterPropertiesQuestRegistry GetOrCreateQuest(string questName, out bool questRegistryWasCreated)
        {
            if (Creature is Player player)
            {
                return(player.Character.GetOrCreateQuest(questName, player.CharacterDatabaseLock, out questRegistryWasCreated));
            }

            // Not a player
            var existing = runtimeQuests.FirstOrDefault(q => q.QuestName.Equals(questName, StringComparison.OrdinalIgnoreCase));

            if (existing == null)
            {
                existing = new CharacterPropertiesQuestRegistry
                {
                    QuestName = questName,
                };

                runtimeQuests.Add(existing);

                questRegistryWasCreated = true;
            }
            else
            {
                questRegistryWasCreated = false;
            }

            return(existing);
        }
Beispiel #2
0
        /// <summary>
        /// Initialize a quest completion with the provided number to the player's registry
        /// </summary>
        public void SetQuestCompletions(string questFormat, int questCompletions = 0)
        {
            var questName = GetQuestName(questFormat);

            var maxSolves = GetMaxSolves(questName);

            var numTimesCompleted = maxSolves > -1 ? Math.Min(questCompletions, maxSolves) : Math.Abs(questCompletions);

            var existing = Quests.FirstOrDefault(q => q.QuestName.Equals(questName, StringComparison.OrdinalIgnoreCase));

            if (existing == null)
            {
                // add new quest entry
                var info = new CharacterPropertiesQuestRegistry
                {
                    QuestName = questName,
                    //CharacterId = Player.Guid.Full,
                    LastTimeCompleted = (uint)Time.GetUnixTime(),
                    NumTimesCompleted = numTimesCompleted   // initialize the quest to the given completions
                };

                info.CharacterId = IDtoUseForQuestRegistry;

                if (Debug)
                {
                    Console.WriteLine($"{Name}.QuestManager.SetQuestCompletions({questFormat}): initialized quest to {info.NumTimesCompleted}");
                }

                Quests.Add(info);

                if (Creature is Player player)
                {
                    player.CharacterChangesDetected = true;

                    player.ContractManager.NotifyOfQuestUpdate(info.QuestName);
                }
            }
            else
            {
                // update existing quest
                existing.LastTimeCompleted = (uint)Time.GetUnixTime();
                existing.NumTimesCompleted = numTimesCompleted;

                if (Debug)
                {
                    Console.WriteLine($"{Name}.QuestManager.SetQuestCompletions({questFormat}): initialized quest to {existing.NumTimesCompleted}");
                }

                if (Creature is Player player)
                {
                    player.CharacterChangesDetected = true;

                    player.ContractManager.NotifyOfQuestUpdate(existing.QuestName);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Adds or updates a quest completion to the player's registry
        /// </summary>
        public void Update(string quest)
        {
            var questName = GetQuestName(quest);

            var existing = Quests.FirstOrDefault(q => q.QuestName.Equals(questName, StringComparison.OrdinalIgnoreCase));

            if (existing == null)
            {
                // add new quest entry
                var info = new CharacterPropertiesQuestRegistry
                {
                    QuestName = questName,
                    //CharacterId = Player.Guid.Full,
                    LastTimeCompleted = (uint)Time.GetUnixTime(),
                    NumTimesCompleted = 1   // initial add / first solve
                };

                info.CharacterId = IDtoUseForQuestRegistry;

                if (Debug)
                {
                    Console.WriteLine($"{Name}.QuestManager.Update({quest}): added quest");
                }

                Quests.Add(info);

                if (Creature is Player player)
                {
                    player.CharacterChangesDetected = true;

                    player.ContractManager.NotifyOfQuestUpdate(info.QuestName);
                }
            }
            else
            {
                if (IsMaxSolves(questName))
                {
                    if (Debug)
                    {
                        Console.WriteLine($"{Name}.QuestManager.Update({quest}): can not update existing quest. IsMaxSolves({questName}) is true.");
                    }
                    return;
                }

                // update existing quest
                existing.LastTimeCompleted = (uint)Time.GetUnixTime();
                existing.NumTimesCompleted++;

                if (Debug)
                {
                    Console.WriteLine($"{Name}.QuestManager.Update({quest}): updated quest ({existing.NumTimesCompleted})");
                }

                if (Creature is Player player)
                {
                    player.CharacterChangesDetected = true;

                    player.ContractManager.NotifyOfQuestUpdate(existing.QuestName);
                }
            }
        }