/// <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())); }
/// <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); }
/// <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)); }