예제 #1
0
        public void DrawSkill()
        {
            for (int i = 0; i < m_CraftItem.Skills.Count; i++)
            {
                CraftSkill skill    = m_CraftItem.Skills.GetAt(i);
                double     minSkill = skill.MinSkill;
                _ = skill.MaxSkill;

                if (minSkill < 0)
                {
                    minSkill = 0;
                }

                AddHtmlLocalized(170, 132 + (i * 20), 200, 18, AosSkillBonuses.GetLabel(skill.SkillToMake), LabelColor, false, false);
                AddLabel(430, 132 + (i * 20), LabelHue, string.Format("{0:F1}", minSkill));
            }

            CraftSubResCol res      = (m_CraftItem.UseSubRes2 ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes);
            int            resIndex = -1;

            CraftContext context = m_CraftSystem.GetContext(m_From);

            if (context != null)
            {
                resIndex = (m_CraftItem.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex);
            }

            bool   allRequiredSkills = true;
            double chance            = m_CraftItem.GetSuccessChance(m_From, resIndex > -1 ? res.GetAt(resIndex).ItemType : null, m_CraftSystem, false, ref allRequiredSkills);
            double excepChance       = m_CraftItem.GetExceptionalChance(m_CraftSystem, chance, m_From);

            if (chance < 0.0)
            {
                chance = 0.0;
            }
            else if (chance > 1.0)
            {
                chance = 1.0;
            }

            AddHtmlLocalized(170, 80, 250, 18, 1044057, LabelColor, false, false); // Success Chance:
            AddLabel(430, 80, LabelHue, $"{chance * 100:F1}%");

            if (m_ShowExceptionalChance)
            {
                if (excepChance < 0.0)
                {
                    excepChance = 0.0;
                }
                else if (excepChance > 1.0)
                {
                    excepChance = 1.0;
                }

                AddHtmlLocalized(170, 100, 250, 18, 1044058, 32767, false, false); // Exceptional Chance:
                AddLabel(430, 100, LabelHue, $"{excepChance * 100:F1}%");
            }
        }
예제 #2
0
            public SelectSkillGump(SoulStone stone, Mobile from)
                : base(50, 50)
            {
                m_Stone = stone;

                AddPage(0);

                AddBackground(0, 0, 520, 440, 0x13BE);

                AddImageTiled(10, 10, 500, 20, 0xA40);
                AddImageTiled(10, 40, 500, 360, 0xA40);
                AddImageTiled(10, 410, 500, 20, 0xA40);

                AddAlphaRegion(10, 10, 500, 420);

                AddHtmlLocalized(10, 12, 500, 20, 1061087, 0x7FFF, false, false); // Which skill do you wish to transfer to the Soulstone?

                AddButton(10, 410, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0);
                AddHtmlLocalized(45, 412, 450, 20, 1060051, 0x7FFF, false, false); // CANCEL

                for (int i = 0, n = 0; i < from.Skills.Length; i++)
                {
                    Skill skill = from.Skills[i];

                    if (skill.Base > 0.0)
                    {
                        int p = n % 30;

                        if (p == 0)
                        {
                            int page = n / 30;

                            if (page > 0)
                            {
                                AddButton(260, 380, 0xFA5, 0xFA6, 0, GumpButtonType.Page, page + 1);
                                AddHtmlLocalized(305, 382, 200, 20, 1011066, 0x7FFF, false, false); // Next page
                            }

                            AddPage(page + 1);

                            if (page > 0)
                            {
                                AddButton(10, 380, 0xFAE, 0xFAF, 0, GumpButtonType.Page, page);
                                AddHtmlLocalized(55, 382, 200, 20, 1011067, 0x7FFF, false, false); // Previous page
                            }
                        }

                        int x = (p % 2 == 0) ? 10 : 260;
                        int y = (p / 2) * 20 + 40;

                        AddButton(x, y, 0xFA5, 0xFA6, i + 1, GumpButtonType.Reply, 0);
                        AddHtmlLocalized(x + 45, y + 2, 200, 20, AosSkillBonuses.GetLabel(skill.SkillName), 0x7FFF, false, false);

                        n++;
                    }
                }
            }
예제 #3
0
            public ConfirmTransferGump(SoulStone stone, Mobile from)
                : base(50, 50)
            {
                m_Stone = stone;

                AddBackground(0, 0, 520, 440, 0x13BE);

                AddImageTiled(10, 10, 500, 20, 0xA40);
                AddImageTiled(10, 40, 500, 360, 0xA40);
                AddImageTiled(10, 410, 500, 20, 0xA40);

                AddAlphaRegion(10, 10, 500, 420);

                AddHtmlLocalized(10, 12, 500, 20, 1070709, 0x7FFF, false, false); // <CENTER>Confirm Soulstone Transfer</CENTER>

                /* <CENTER>Soulstone</CENTER><BR>
                 * You are using a Soulstone.  This powerful artifact allows you to remove skill points
                 * from your character and store them in the stone for later retrieval.  In order to use
                 * the stone, you must make sure your Skill Lock for the indicated skill is pointed downward.
                 * Click the "Skills" button on your Paperdoll to access the Skill List, and double-check
                 * your skill lock.<BR><BR>
                 *
                 * Once you activate the stone, all skill points in the indicated skill will be removed from
                 * your character.  These skill points can later be retrieved.  IMPORTANT: When retrieving
                 * skill points from a Soulstone, the Soulstone WILL REPLACE any existing skill points
                 * already on your character!<BR><BR>
                 *
                 * This is an Account Bound Soulstone.  Skill pointsstored inside can be retrieved by any
                 * character on the same account as the character who placed them into the stone.
                 */
                AddHtmlLocalized(10, 42, 500, 110, 1061067, 0x7FFF, false, true);

                AddHtmlLocalized(10, 200, 390, 20, 1070718, 0x7FFF, false, false); // Skill Stored:
                AddHtmlLocalized(210, 200, 390, 20, AosSkillBonuses.GetLabel(stone.Skill), 0x7FFF, false, false);

                Skill fromSkill = from.Skills[stone.Skill];

                AddHtmlLocalized(10, 220, 390, 20, 1062298, 0x7FFF, false, false); // Current Value:
                AddLabel(210, 220, 0x481, fromSkill.Base.ToString("0.0"));

                AddHtmlLocalized(10, 240, 390, 20, 1062299, 0x7FFF, false, false); // Current Cap:
                AddLabel(210, 240, 0x481, fromSkill.Cap.ToString("0.0"));

                AddHtmlLocalized(10, 260, 390, 20, 1062300, 0x7FFF, false, false); // New Value:
                AddLabel(210, 260, 0x481, stone.SkillValue.ToString("0.0"));

                AddButton(10, 360, 0xFA5, 0xFA6, 2, GumpButtonType.Reply, 0);
                AddHtmlLocalized(45, 362, 450, 20, 1070719, 0x7FFF, false, false); // Activate the stone.  I am ready to retrieve the skill points from it.

                AddButton(10, 380, 0xFA5, 0xFA6, 1, GumpButtonType.Reply, 0);
                AddHtmlLocalized(45, 382, 450, 20, 1070723, 0x7FFF, false, false); // Remove all skill points from this stone and DO NOT absorb them.

                AddButton(10, 410, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0);
                AddHtmlLocalized(45, 412, 450, 20, 1060051, 0x7FFF, false, false); // CANCEL
            }
        public override void WriteToGump(Gump g, ref int y)
        {
            int    skillLabel = AosSkillBonuses.GetLabel(m_Skill);
            string args;

            if (m_ThresholdFixed % 10 == 0)
            {
                args = String.Format("#{0}\t{1}", skillLabel, m_ThresholdFixed / 10); // as seen on OSI
            }
            else
            {
                args = String.Format("#{0}\t{1:0.0}", skillLabel, (double)m_ThresholdFixed / 10); // for non-integer skill levels
            }
            g.AddHtmlLocalized(98, y, 312, 16, 1077485, args, 0x15F90, false, false);             // Increase ~1_SKILL~ to ~2_VALUE~
            y += 16;
        }
예제 #5
0
        public override void GetProperties(ObjectPropertyList list)
        {
            base.GetProperties(list);

            if (!IsEmpty)
            {
                list.Add(1070721, "#{0}\t{1:0.0}", AosSkillBonuses.GetLabel(Skill), SkillValue); // Skill stored: ~1_skillname~ ~2_skillamount~
            }
            string name = LastUserName;

            if (name == null)
            {
                name = string.Format("#{0}", 1074235); // Unknown
            }
            list.Add(1041602, "{0}", name);            // Owner: ~1_val~
        }
예제 #6
0
            public InternalGump(Mobile mobile, SpecialScroll scroll)
                : base(25, 50)
            {
                m_Mobile = mobile;
                m_Scroll = scroll;

                AddPage(0);

                AddBackground(25, 10, 420, 200, 5054);

                AddImageTiled(33, 20, 401, 181, 2624);
                AddAlphaRegion(33, 20, 401, 181);

                AddHtmlLocalized(40, 48, 387, 100, m_Scroll.Message, true, true);

                AddHtmlLocalized(125, 148, 200, 20, 1049478, 0xFFFFFF, false, false); // Do you wish to use this scroll?

                AddButton(100, 172, 4005, 4007, 1, GumpButtonType.Reply, 0);
                AddHtmlLocalized(135, 172, 120, 20, 1046362, 0xFFFFFF, false, false); // Yes

                AddButton(275, 172, 4005, 4007, 0, GumpButtonType.Reply, 0);
                AddHtmlLocalized(310, 172, 120, 20, 1046363, 0xFFFFFF, false, false); // No

                if (m_Scroll.Title != 0)
                {
                    AddHtmlLocalized(40, 20, 260, 20, m_Scroll.Title, 0xFFFFFF, false, false);
                }
                else
                {
                    AddHtml(40, 20, 260, 20, m_Scroll.DefaultTitle, false, false);
                }

                if (m_Scroll is StatCapScroll)
                {
                    AddHtmlLocalized(310, 20, 120, 20, 1038019, 0xFFFFFF, false, false); // Power
                }
                else
                {
                    AddHtmlLocalized(310, 20, 120, 20, AosSkillBonuses.GetLabel(m_Scroll.Skill), 0xFFFFFF, false, false);
                }
            }
예제 #7
0
 public virtual string GetNameLocalized() => $"#{AosSkillBonuses.GetLabel(Skill)}";
예제 #8
0
 public virtual string GetNameLocalized()
 {
     return(String.Concat("#", AosSkillBonuses.GetLabel(m_Skill).ToString()));
 }
예제 #9
0
        public override void GetProperties(ObjectPropertyList list)
        {
            base.GetProperties(list);

            if (Blessed)
            {
                if (BlessedFor != null)
                {
                    list.Add(1072304, !String.IsNullOrEmpty(BlessedFor.Name) ? BlessedFor.Name : "Unnamed Warrior");                     // Owned by ~1_name~
                }
                else
                {
                    list.Add(1072304, "Nobody");                     // Owned by ~1_name~
                }
            }

            if (Parent is Mobile && m_MaxChargeTime > 0)
            {
                if (m_ChargeTime > 0)
                {
                    list.Add(1074884, m_ChargeTime.ToString());                     // Charge time left: ~1_val~
                }
                else
                {
                    list.Add(1074883);                     // Fully Charged
                }
            }

            list.Add(1075085);             // Requirement: Mondain's Legacy

            if (m_Killer != null && !m_Killer.IsEmpty && m_Killer.Amount > 0)
            {
                list.Add(1072388, "{0}\t{1}", m_Killer.Name != null ? m_Killer.Name.ToString() : "Unknown", m_Killer.Amount);                 // ~1_NAME~ Killer: +~2_val~%
            }
            if (m_Protection != null && !m_Protection.IsEmpty && m_Protection.Amount > 0)
            {
                list.Add(1072387, "{0}\t{1}", m_Protection.Name != null ? m_Protection.Name.ToString() : "Unknown", m_Protection.Amount);                 // ~1_NAME~ Protection: +~2_val~%
            }
            if (m_ExceptionalBonus != 0)
            {
                list.Add(1072395, "#{0}\t{1}", AosSkillBonuses.GetLabel(m_Skill), m_ExceptionalBonus);                   // ~1_NAME~ Exceptional Bonus: ~2_val~%
            }
            if (m_SuccessBonus != 0)
            {
                list.Add(1072394, "#{0}\t{1}", AosSkillBonuses.GetLabel(m_Skill), m_SuccessBonus);                   // ~1_NAME~ Bonus: ~2_val~%
            }
            m_AosSkillBonuses.GetProperties(list);

            int prop;

            if ((prop = m_AosAttributes.WeaponDamage) != 0)
            {
                list.Add(1060401, prop.ToString());                 // damage increase ~1_val~%
            }
            if ((prop = m_AosAttributes.DefendChance) != 0)
            {
                list.Add(1060408, prop.ToString());                 // defense chance increase ~1_val~%
            }
            if ((prop = m_AosAttributes.BonusDex) != 0)
            {
                list.Add(1060409, prop.ToString());                 // dexterity bonus ~1_val~
            }
            if ((prop = m_AosAttributes.EnhancePotions) != 0)
            {
                list.Add(1060411, prop.ToString());                 // enhance potions ~1_val~%
            }
            if ((prop = m_AosAttributes.CastRecovery) != 0)
            {
                list.Add(1060412, prop.ToString());                 // faster cast recovery ~1_val~
            }
            if ((prop = m_AosAttributes.CastSpeed) != 0)
            {
                list.Add(1060413, prop.ToString());                 // faster casting ~1_val~
            }
            if ((prop = m_AosAttributes.AttackChance) != 0)
            {
                list.Add(1060415, prop.ToString());                 // hit chance increase ~1_val~%
            }
            if ((prop = m_AosAttributes.BonusHits) != 0)
            {
                list.Add(1060431, prop.ToString());                 // hit point increase ~1_val~
            }
            if ((prop = m_AosAttributes.BonusInt) != 0)
            {
                list.Add(1060432, prop.ToString());                 // intelligence bonus ~1_val~
            }
            if ((prop = m_AosAttributes.LowerManaCost) != 0)
            {
                list.Add(1060433, prop.ToString());                 // lower mana cost ~1_val~%
            }
            if ((prop = m_AosAttributes.LowerRegCost) != 0)
            {
                list.Add(1060434, prop.ToString());                 // lower reagent cost ~1_val~%
            }
            if ((prop = m_AosAttributes.Luck) != 0)
            {
                list.Add(1060436, prop.ToString());                 // luck ~1_val~
            }
            if ((prop = m_AosAttributes.BonusMana) != 0)
            {
                list.Add(1060439, prop.ToString());                 // mana increase ~1_val~
            }
            if ((prop = m_AosAttributes.RegenMana) != 0)
            {
                list.Add(1060440, prop.ToString());                 // mana regeneration ~1_val~
            }
            if ((prop = m_AosAttributes.NightSight) != 0)
            {
                list.Add(1060441);                 // night sight
            }
            if ((prop = m_AosAttributes.ReflectPhysical) != 0)
            {
                list.Add(1060442, prop.ToString());                 // reflect physical damage ~1_val~%
            }
            if ((prop = m_AosAttributes.RegenStam) != 0)
            {
                list.Add(1060443, prop.ToString());                 // stamina regeneration ~1_val~
            }
            if ((prop = m_AosAttributes.RegenHits) != 0)
            {
                list.Add(1060444, prop.ToString());                 // hit point regeneration ~1_val~
            }
            if ((prop = m_AosAttributes.SpellChanneling) != 0)
            {
                list.Add(1060482);                 // spell channeling
            }
            if ((prop = m_AosAttributes.SpellDamage) != 0)
            {
                list.Add(1060483, prop.ToString());                 // spell damage increase ~1_val~%
            }
            if ((prop = m_AosAttributes.BonusStam) != 0)
            {
                list.Add(1060484, prop.ToString());                 // stamina increase ~1_val~
            }
            if ((prop = m_AosAttributes.BonusStr) != 0)
            {
                list.Add(1060485, prop.ToString());                 // strength bonus ~1_val~
            }
            if ((prop = m_AosAttributes.WeaponSpeed) != 0)
            {
                list.Add(1060486, prop.ToString());                 // swing speed increase ~1_val~%
            }
            if (Core.ML && (prop = m_AosAttributes.IncreasedKarmaLoss) != 0)
            {
                list.Add(1075210, prop.ToString());                 // Increased Karma Loss ~1val~%
            }
            if (m_MaxCharges > 0)
            {
                list.Add(1060741, m_Charges.ToString());                 // charges: ~1_val~
            }
            if (m_Slayer != TalismanSlayerName.None)
            {
                list.Add(1072503 + (int)m_Slayer);
            }
        }
예제 #10
0
        public override void GetProperties(ObjectPropertyList list)
        {
            base.GetProperties(list);

            list.Add(1072395, "#{0}\t{1}", AosSkillBonuses.GetLabel(SkillName.Cooking), _Bonus); // ~1_NAME~ Exceptional Bonus: ~2_val~%
        }
예제 #11
0
        public void DrawSkill()
        {
            for (int i = 0; i < m_CraftItem.Skills.Count; i++)
            {
                CraftSkill skill = m_CraftItem.Skills.GetAt(i);
                double     minSkill = skill.MinSkill, maxSkill = skill.MaxSkill;

                if (minSkill < 0)
                {
                    minSkill = 0;
                }

                AddHtmlLocalized(170, 155 + (i * 20), 200, 18, AosSkillBonuses.GetLabel(skill.SkillToMake), LabelColor, false, false);
                AddLabel(430, 155 + (i * 20), LabelHue, String.Format("{0:F1}", minSkill));
            }

            CraftSubResCol res      = (m_CraftItem.UseSubRes2 ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes);
            int            resIndex = -1;

            CraftContext context = m_CraftSystem.GetContext(m_From);

            if (context != null)
            {
                resIndex = (m_CraftItem.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex);
            }

            bool allRequiredSkills = true;

            double successChance     = m_CraftItem.GetSuccessChance(m_From, resIndex > -1 ? res.GetAt(resIndex).ItemType : null, m_CraftSystem, false, ref allRequiredSkills);
            double exceptionalChance = m_CraftItem.GetExceptionalChance(m_CraftSystem, successChance, m_From);

            bool skillGainPossible = false;

            if (successChance < 0.0)
            {
                successChance = 0.0;
            }

            else if (successChance > 1.0)
            {
                successChance = 1.0;
            }

            if (exceptionalChance < 0.0)
            {
                exceptionalChance = 0.0;
            }

            else if (exceptionalChance > 1.0)
            {
                exceptionalChance = 1.0;
            }

            if (successChance > 0 && successChance < 1.0)
            {
                skillGainPossible = true;
            }

            int startY = 80;

            AddHtmlLocalized(170, startY, 250, 18, 1044057, LabelColor, false, false); // Success Chance:
            AddLabel(430, startY, LabelHue, String.Format("{0:F1}%", successChance * 100));

            startY += 20;

            if (m_ShowExceptionalChance)
            {
                if (exceptionalChance < 0.0)
                {
                    exceptionalChance = 0.0;
                }

                else if (exceptionalChance > 1.0)
                {
                    exceptionalChance = 1.0;
                }

                AddHtmlLocalized(170, startY, 250, 18, 1044058, 32767, false, false); // Exceptional Chance:
                AddLabel(430, startY, LabelHue, String.Format("{0:F1}%", exceptionalChance * 100));

                startY += 20;
            }

            if (skillGainPossible)
            {
                AddLabel(169, startY, 2599, "Skill Gain Possible");
            }
        }
예제 #12
0
        public void DrawSkill()
        {
            for (int i = 0; i < m_CraftItem.Skills.Count; i++)
            {
                CraftSkill skill = m_CraftItem.Skills.GetAt(i);
                double     minSkill = skill.MinSkill, maxSkill = skill.MaxSkill;

                if (minSkill < 0)
                {
                    minSkill = 0;
                }

                string textminSkills = "Débutant";

                if (minSkill >= 30 && minSkill < 40)
                {
                    textminSkills = "Néophite";
                }
                else if (minSkill >= 40 && minSkill < 50)
                {
                    textminSkills = "Novice";
                }
                else if (minSkill >= 50 && minSkill < 60)
                {
                    textminSkills = "Apprenti";
                }
                else if (minSkill >= 60 && minSkill < 70)
                {
                    textminSkills = "Compagnon";
                }
                else if (minSkill >= 70 && minSkill < 80)
                {
                    textminSkills = "Expert";
                }
                else if (minSkill >= 80 && minSkill < 90)
                {
                    textminSkills = "Adepte";
                }
                else if (minSkill >= 90 && minSkill < 100)
                {
                    textminSkills = "Maître";
                }
                else if (minSkill >= 100 && minSkill < 110)
                {
                    textminSkills = "Grand Maître";
                }

                AddHtmlLocalized(170, 132 + (i * 20), 200, 18, AosSkillBonuses.GetLabel(skill.SkillToMake), LabelColor, false, false);

                if (m_From.AccessLevel >= AccessLevel.GameMaster)
                {
                    AddLabel(430, 132 + (i * 20), LabelHue, String.Format("{0:F1}", minSkill));
                }
                else
                {
                    AddLabel(430, 132 + (i * 20), LabelHue, String.Format("{0}", textminSkills));
                }
            }

            CraftSubResCol res      = (m_CraftItem.UseSubRes2 ? m_CraftSystem.CraftSubRes2 : m_CraftSystem.CraftSubRes);
            int            resIndex = -1;

            CraftContext context = m_CraftSystem.GetContext(m_From);

            if (context != null)
            {
                resIndex = (m_CraftItem.UseSubRes2 ? context.LastResourceIndex2 : context.LastResourceIndex);
            }

            bool   allRequiredSkills = true;
            double chance            = m_CraftItem.GetSuccessChance(m_From, resIndex > -1 ? res.GetAt(resIndex).ItemType : null, m_CraftSystem, false, ref allRequiredSkills);
            double excepChance       = m_CraftItem.GetExceptionalChance(m_CraftSystem, chance, m_From);

            m_Chance = chance;  // Scriptiz : on stocke la chance

            if (chance < 0.0)
            {
                chance = 0.0;
            }
            else if (chance > 1.0)
            {
                chance = 1.0;
            }

            string textchance = "Nulle";

            if (chance > 0 && chance <= 0.2)
            {
                textchance = "Faible";
            }
            else if (chance > 0.2 && chance <= 0.4)
            {
                textchance = "Possible";
            }
            else if (chance > 0.4 && chance <= 0.6)
            {
                textchance = "Moyenne";
            }
            else if (chance > 0.6 && chance <= 0.8)
            {
                textchance = "Favorable";
            }
            else if (chance > 0.8 && chance < 1)
            {
                textchance = "Grande";
            }
            else if (chance == 1)
            {
                textchance = "Aisée";
            }

            AddHtmlLocalized(170, 80, 250, 18, 1044057, LabelColor, false, false);

            if (m_From.AccessLevel >= AccessLevel.GameMaster)
            {
                AddLabel(430, 80, LabelHue, String.Format("{0:F1}%", chance * 100));
            }
            else
            {
                AddLabel(430, 80, LabelHue, String.Format("{0}", textchance));
            }

            if (m_ShowExceptionalChance)
            {
                if (excepChance < 0.0)
                {
                    excepChance = 0.0;
                }
                else if (excepChance > 1.0)
                {
                    excepChance = 1.0;
                }
                if (m_From.AccessLevel >= AccessLevel.GameMaster)
                {
                    AddHtmlLocalized(170, 100, 250, 18, 1044058, 32767, false, false);   // Exceptional Chance:
                    AddLabel(430, 100, LabelHue, String.Format("{0:F1}%", excepChance * 100));
                }
            }
        }
예제 #13
0
            public SelectSkillGump(SoulStone stone, Mobile from)
                : base(50, 50)
            {
                this.m_Stone = stone;

                this.AddPage(0);

                this.AddBackground(0, 0, 520, 440, 0x13BE);

                this.AddImageTiled(10, 10, 500, 20, 0xA40);
                this.AddImageTiled(10, 40, 500, 360, 0xA40);
                this.AddImageTiled(10, 410, 500, 20, 0xA40);

                this.AddAlphaRegion(10, 10, 500, 420);

                this.AddHtmlLocalized(10, 12, 500, 20, 1061087, 0x7FFF, false, false); // Which skill do you wish to transfer to the Soulstone?

                this.AddButton(10, 410, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0);
                this.AddHtmlLocalized(45, 412, 450, 20, 1060051, 0x7FFF, false, false); // CANCEL

                for (int i = 0, n = 0; i < from.Skills.Length; i++)
                {
                    Skill skill = from.Skills[i];

                    if (!Core.AOS)
                    {
                        if (skill.SkillName == SkillName.Chivalry || skill.SkillName == SkillName.Necromancy)
                        {
                            continue;
                        }
                    }

                    if (!Core.SE)
                    {
                        if (skill.SkillName == SkillName.Bushido || skill.SkillName == SkillName.Ninjitsu)
                        {
                            continue;
                        }
                    }

                    if (!Core.ML)
                    {
                        if (skill.SkillName == SkillName.Spellweaving)
                        {
                            continue;
                        }
                    }

                    if (!Core.SA)
                    {
                        if (skill.SkillName == SkillName.Imbuing || skill.SkillName == SkillName.Mysticism ||
                            skill.SkillName == SkillName.Throwing)
                        {
                            continue;
                        }
                    }


                    if (skill.Base > 0.0)
                    {
                        int p = n % 30;

                        if (p == 0)
                        {
                            int page = n / 30;

                            if (page > 0)
                            {
                                this.AddButton(260, 380, 0xFA5, 0xFA6, 0, GumpButtonType.Page, page + 1);
                                this.AddHtmlLocalized(305, 382, 200, 20, 1011066, 0x7FFF, false, false); // Next page
                            }

                            this.AddPage(page + 1);

                            if (page > 0)
                            {
                                this.AddButton(10, 380, 0xFAE, 0xFAF, 0, GumpButtonType.Page, page);
                                this.AddHtmlLocalized(55, 382, 200, 20, 1011067, 0x7FFF, false, false); // Previous page
                            }
                        }

                        int x = (p % 2 == 0) ? 10 : 260;
                        int y = (p / 2) * 20 + 40;

                        this.AddButton(x, y, 0xFA5, 0xFA6, i + 1, GumpButtonType.Reply, 0);
                        this.AddHtmlLocalized(x + 45, y + 2, 200, 20, AosSkillBonuses.GetLabel(skill.SkillName), 0x7FFF, false, false);

                        n++;
                    }
                }
            }