public bool AddObjective(Objective objective, int order, bool alertPlayer, out string result)
        {
            if (!this.AddObjectiveData(objective, ref order, out result))
            {
                return(false);
            }

            //

            var myplayer = CustomPlayerData.GetPlayerData <ObjectivesCustomPlayer>(Main.myPlayer);

            // Load data
            bool isPrevComplete = myplayer?.IsObjectiveByNameComplete(objective.Title) ?? false;

            objective.Initialize(isPrevComplete);

            ObjectivesMod.Instance
            .ObjectivesTabUI
            .AddObjective(objective, order);                            // Initializes objective

            if (!objective.IsComplete.Value && alertPlayer)
            {
                UtilityPanelsTabs.AddTabAlert(ObjectivesMod.UtilityPanelsName, true);

                Main.NewText("New objective added: " + objective.Title, Color.Yellow);

                Main.PlaySound(SoundID.Chat, Main.LocalPlayer.MountedCenter);
            }

            this.NotifySubscribers(objective, true);

            return(true);
        }
示例#2
0
        ////////////////

        /// <summary>
        /// Indicates if an objective is complete. Objective does not need to be currently declared for player to remember
        /// having finished it previously.
        /// </summary>
        /// <param name="title"></param>
        /// <returns></returns>
        public static bool HasRecordedObjectiveByNameAsFinished(string title)
        {
            if (Main.netMode == NetmodeID.Server)
            {
                throw new ModLibsException("Server objectives not allowed.");
            }

            var myplayer = CustomPlayerData.GetPlayerData <ObjectivesCustomPlayer>(Main.myPlayer);

            return(myplayer.IsObjectiveByNameComplete(title));
        }
        public void ClearObjectives(bool forceIncomplete)
        {
            this.ClearObjectivesData();

            if (forceIncomplete)
            {
                var myplayer = CustomPlayerData.GetPlayerData <ObjectivesCustomPlayer>(Main.myPlayer);
                myplayer?.ClearCompletedObjectives();
            }

            ObjectivesMod.Instance
            .ObjectivesTabUI
            .ClearObjectives();
        }
        public bool RemoveObjectiveIf(string title, bool forceIncomplete)
        {
            this.RemoveObjectiveData(title);

            if (forceIncomplete)
            {
                var myplayer = CustomPlayerData.GetPlayerData <ObjectivesCustomPlayer>(Main.myPlayer);
                myplayer.ForgetCompletedObjective(title);
            }

            return(ObjectivesMod.Instance
                   .ObjectivesTabUI
                   .RemoveObjective(title));
        }
示例#5
0
        /// <summary>
        /// Indicates if the current, local player has their objectives loaded.
        /// </summary>
        /// <returns></returns>
        public static bool AreObjectivesLoadedForCurrentPlayer()
        {
            if (Main.netMode == NetmodeID.Server)
            {
                throw new ModLibsException("Server has no player.");
            }

            if (Main.gameMenu)
            {
                return(false);
            }

            var myplayer = CustomPlayerData.GetPlayerData <ObjectivesCustomPlayer>(Main.myPlayer);

            return(myplayer != null);
        }
示例#6
0
        ////////////////

        internal bool Update_Internal()
        {
            bool isNewlyCompleted = false;

            if (!this.IsComplete.HasValue || !this.IsComplete.Value)
            {
                this.PercentComplete = this.ComputeCompletionPercent();
            }

            if (this.IsComplete.Value)
            {
                var myplayer = CustomPlayerData.GetPlayerData <ObjectivesCustomPlayer>(Main.myPlayer);
                isNewlyCompleted = myplayer.RecordCompletedObjective(this.Title);

                if (!this.HasAlerted)
                {
                    Main.NewText("Completed objective: " + this.Title, Color.Lime);
                    this.HasAlerted = true;
                }
            }

            return(isNewlyCompleted);
        }