Beispiel #1
0
        /// <summary>
        /// Determines if the player has the specified perk
        /// </summary>
        public static bool HasPerk(Player player, Perk perk)
        {
            if (!PerkTable.ContainsKey(player) || perk == null || perk is Empty)
            {
                return(false);
            }

            return(PerkTable[player].Item1.GetType() == perk.GetType() || (PerkTable[player].Item2.GetType() == perk.GetType()));
        }
Beispiel #2
0
        /// <summary>
        /// Gets a perk of the same type as given for the specified player
        /// </summary>
        /// <param name="player">the player to lookup</param>
        /// <param name="perk">the perk type to match</param>
        /// <returns>instance of the perk or null if the player does not have that perk</returns>
        public static Perk Get(Player player, Perk perk)
        {
            Perk res = null;

            if (!PerkTable.ContainsKey(player) || !HasPerk(player, perk))
            {
                return(res);
            }

            if (PerkTable[player].Item1.GetType() == perk.GetType())
            {
                res = PerkTable[player].Item1;
            }
            else if (PerkTable[player].Item2.GetType() == perk.GetType())
            {
                res = PerkTable[player].Item2;
            }

            return(res);
        }
Beispiel #3
0
        /// <summary>
        /// Handles the first level purchase of a perk
        /// </summary>
        public void OnFirstLevelResponse(Mobile from, bool okay, object state)
        {
            if (!okay)
            {
            }
            else if (Perk.HasPerk(Player, Perk))
            {
                Player.SendMessage("You have already unlocked the {0} perk!", Perk.Label);
            }
            else if (!Perk.HasFreeSlot(Player))
            {
                Player.SendMessage("You cannot unlock this perk because you have already started developing two other perks.");
            }
            else if (Player.EssenceOfCharacter < Perk.FirstLevelCost)
            {
                Player.SendMessage("You need at least {0:N0} Essence of Character to begin developing perks!", Perk.FirstLevelCost);
            }
            else
            {
                Perk newPerk = null;

                try
                {
                    newPerk = Activator.CreateInstance(Perk.GetType(), Player) as Perk;
                }
                catch (Exception e)
                {
                    ExceptionManager.LogException("PerkOverviewGump.OnFirstLevelResponse()", e);
                }

                if (Perk.Set(Player, newPerk, PerkPosition.Primary, false))
                {
                    Player.EssenceOfCharacter -= Perk.FirstLevelCost;

                    PlayUpgradeEffect(Player, newPerk, PerkLevel.First);
                }
                else
                {
                    Player.SendMessage("There was a problem unlocking this perk. The server staff has been notified and will contact you soon.");
                    CommandHandlers.BroadcastMessage(AccessLevel.Administrator, 32, String.Format("Alert: a problem has occurred unlocking a perk for '{0}'", Player.RawName));
                }
            }

            Player.SendGump(new PerkOverviewGump(Player, Page.Detail, Perk, PerkLevel.First));
        }