//Version 1.1 using System; using System.Collections; using Server; using Server.Prompts; using Server.Mobiles; using Server.Network; using Server.Gumps; using Server.Items; namespace Server.Items { public class StatBall : Item { [Constructable] public StatBall() : base(0xE73) { Weight = 1.0; Hue = 39; Name = "a stat ball"; LootType = LootType.Blessed; Movable = false; } public override void OnDoubleClick(Mobile from) { if (!IsChildOf(from.Backpack)) { from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it. return; } else if (from is PlayerMobile) { if (from.Str < 75) { from.Str = 75; from.SendMessage("Your STR has been set to 75/{0}.", from.StrCap); } if (from.Int < 75) { from.Int = 75; from.SendMessage("Your INT has been set to 75/{0}.", from.IntCap); } if (from.Dex < 75) { from.Dex = 75; from.SendMessage("Your DEX has been set to 75/{0}.", from.DexCap); } if (from.StrMaxCap != 500) { from.StrMaxCap = 500; from.SendMessage("Your STR Max Cap has been reset."); } if (from.DexMaxCap != 500) { from.DexMaxCap = 500; from.SendMessage("Your DEX Max Cap has been reset."); } if (from.IntMaxCap != 500) { from.IntMaxCap = 500; from.SendMessage("Your INT Max Cap has been reset."); } //from.SendMessage("You have been given a Starter Stat Boost of 75 in each Stat."); this.Delete(); //from.SendGump(new StatBallGump((PlayerMobile)from, this)); } } public override bool DisplayLootType { get { return false; } } public StatBall(Serial serial) : base(serial) { } public override void Serialize(GenericWriter writer) { base.Serialize(writer); writer.Write((int)0); // version } public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); } } } namespace Server.Items { public class StatBallGump : Gump { //----------------- // Edit to your liking or leave blank for default values //------------------------ private int statcap; private int defaultStr; private int defaultDex; private int defaultInt; private int maxStr; private int maxDex; private int maxInt; //----------------------- private PlayerMobile m_From; private StatBall m_Ball; private int str; private int dex; private int intel; public StatBallGump(PlayerMobile from, StatBall ball) : base(50, 50) { m_From = from; m_Ball = ball; if (statcap <= 0) { statcap = m_From.StatCap; } if (defaultStr <= 0) { defaultStr = 50; } if (defaultDex <= 0) { defaultDex = 50; } if (defaultInt <= 0) { defaultInt = 50; } if (maxStr <= 0) { maxStr = 105; } if (maxDex <= 0) { maxDex = 105; } if (maxInt <= 0) { maxInt = 105; } this.Closable = true; this.Disposable = true; this.Dragable = true; this.Resizable = false; this.AddPage(0); this.AddBackground(50, 50, 437, 215, 9200); this.AddLabel(200, 67, 1160, "Stat Ball Selection"); this.AddLabel(114, 96, 1160, "Choose your Strength, Dexterity, and Intelligence"); this.AddLabel(69, 156, 1152, "STR"); this.AddLabel(213, 156, 1152, "DEX"); this.AddLabel(353, 156, 1152, "INT"); this.AddTextEntry(109, 156, 32, 20, 1359, 0, defaultStr.ToString()); this.AddTextEntry(253, 156, 32, 20, 1359, 1, defaultDex.ToString()); this.AddTextEntry(393, 156, 32, 20, 1359, 2, defaultInt.ToString()); this.AddLabel(139, 156, 1152, " / " + maxStr.ToString()); this.AddLabel(283, 156, 1152, " / " + maxDex.ToString()); this.AddLabel(423, 156, 1152, " / " + maxInt.ToString()); this.AddButton(405, 221, 238, 240, 4, GumpButtonType.Reply, 0); this.AddLabel(140, 200, 1152, "* Stat totals should equal " + statcap + " *"); } public override void OnResponse(NetState sender, RelayInfo info) { if (m_Ball.Deleted) return; TextRelay s = info.GetTextEntry(0); try { str = Convert.ToInt32(s.Text); } catch { m_From.SendMessage("Bad strength entry. A number was expected."); } TextRelay d = info.GetTextEntry(1); try { dex = Convert.ToInt32(d.Text); } catch { m_From.SendMessage("Bad dexterity entry. A number was expected."); } TextRelay i = info.GetTextEntry(2); try { intel = Convert.ToInt32(i.Text); } catch { m_From.SendMessage("Bad intelligence entry. A number was expected."); } if (str > 0 && dex > 0 && intel > 0) { // Uncomment the line line below, and add a comment to the line under it to use a defined number instead of the standard Stat Cap // if ( ( ( str + dex + intel ) > Cap ) || ( ( str + dex + intel ) < Cap ) || ( str < 10 ) || ( dex < 10 ) || ( intel < 10 ) ) if (((str + dex + intel) > statcap) || ((str + dex + intel) < statcap) || (str < 10) || (dex < 10) || (intel < 10) || (str > maxStr) || (dex > maxDex) || (intel > maxInt)) m_From.SendMessage("Your choice totals are invalid. Please try again!"); else { m_From.RawStr = str; m_From.RawDex = dex; m_From.RawInt = intel; m_Ball.Delete(); } } } } }