public AnimalLoreGump(PlayerMobile player, AnimalLoreGumpObject animalLoreGumpObject) : base(50, 50) { m_Player = player; m_AnimalLoreGumpObject = animalLoreGumpObject; if (m_Player == null) { return; } if (m_AnimalLoreGumpObject == null) { return; } if (m_AnimalLoreGumpObject.bc_Creature == null) { return; } if (m_AnimalLoreGumpObject.bc_Creature.Deleted) { return; } if (!m_AnimalLoreGumpObject.bc_Creature.Alive && !m_AnimalLoreGumpObject.bc_Creature.IsBonded) { return; } BaseCreature bc_Creature = m_AnimalLoreGumpObject.bc_Creature; int traitsEarned = FollowerTraits.GetFollowerTraitsEarned(bc_Creature); int traitsAvailable = FollowerTraits.GetFollowerTraitsAvailable(bc_Creature); int totalTraits = (int)((double)bc_Creature.TraitsList.Count / 2); //Populate Trait Selection if (m_AnimalLoreGumpObject.m_TraitGumpSelections.Count == 0) { for (int a = 0; a < totalTraits; a++) { m_AnimalLoreGumpObject.m_TraitGumpSelections.Add(TraitSelectionType.None); } } Closable = true; Disposable = true; Dragable = true; Resizable = false; AddPage(0); int HeaderTextHue = 2603; int WhiteTextHue = 2655; int GreyTextHue = 1102; //2036 int MainTextHue = 149; int BlueTextHue = 2603; int GreenTextHue = 0x3F; int RedTextHue = 1256; int ValueTextHue = 2655; int DifficultyTextHue = 2114; int SlayerGroupTextHue = 2606; AddImage(8, 4, 1250, 2499); //Background string creatureDisplayName = bc_Creature.GetTamedDisplayName(); AddLabel(Utility.CenteredTextOffset(170, creatureDisplayName), 15, HeaderTextHue, creatureDisplayName); AddLabel(10, 0, 149, "Guide"); AddButton(14, 15, 2094, 2095, 1, GumpButtonType.Reply, 0); switch (m_AnimalLoreGumpObject.m_AnimalLorePage) { #region Stats case AnimalLoreGumpPage.Stats: if (bc_Creature.Tameable) { AddLabel(78, 370, WhiteTextHue, "Traits"); AddButton(45, 369, 4011, 4013, 2, GumpButtonType.Reply, 0); if (traitsAvailable > 0) { AddLabel(123, 370, GreenTextHue, "(" + traitsAvailable.ToString() + " Available)"); } if (bc_Creature.RessPenaltyCount > 0) { AddItem(172, 363, 6227, 0); AddLabel(206, 370, 2116, bc_Creature.RessPenaltyCount.ToString()); AddButton(221, 369, 4029, 4031, 3, GumpButtonType.Reply, 0); AddLabel(259, 370, 2116, "Info"); } else { AddButton(221, 369, 4029, 4031, 3, GumpButtonType.Reply, 0); AddLabel(259, 370, WhiteTextHue, "Info"); } } int shrinkTableIcon = ShrinkTable.Lookup(bc_Creature); if (shrinkTableIcon == 6256) { shrinkTableIcon = 7960; } if (bc_Creature.IsHenchman) { Custom.BaseHenchman henchman = bc_Creature as Custom.BaseHenchman; int henchmanIcon = 8454; int henchmanHue = 0; if (bc_Creature.Female) { henchmanIcon = 8455; } if (!henchman.HenchmanHumanoid) { henchmanIcon = bc_Creature.TamedItemId; henchmanHue = bc_Creature.TamedItemHue; } AddItem(74 + bc_Creature.TamedItemXOffset, 62 + bc_Creature.TamedItemYOffset, henchmanIcon, henchmanHue); } else { if (bc_Creature.TamedItemId != -1) //Creature Icon { AddItem(74 + bc_Creature.TamedItemXOffset, 62 + bc_Creature.TamedItemYOffset, bc_Creature.TamedItemId, bc_Creature.TamedItemHue); } else { AddItem(74 + bc_Creature.TamedItemXOffset, 62 + bc_Creature.TamedItemYOffset, shrinkTableIcon, 0); } } string creatureDifficulty = Utility.CreateDecimalString(bc_Creature.InitialDifficulty, 2); string slayerGroup = bc_Creature.SlayerGroup.ToString(); int level = bc_Creature.ExperienceLevel; int experience = bc_Creature.Experience; int maxExperience = 0; if (bc_Creature.ExperienceLevel < BaseCreature.MaxExperienceLevel) { maxExperience = BaseCreature.ExperiencePerLevel[bc_Creature.ExperienceLevel]; } double passiveTamingSkillGainRemaining = player.m_PassiveSkillGainRemaining; if (!bc_Creature.InPassiveTamingSkillGainRange(player)) { passiveTamingSkillGainRemaining = 0; } string passiveTamingSkillGainRemainingText = Utility.CreateDecimalString(passiveTamingSkillGainRemaining, 1); if (!(bc_Creature.IsStabled || bc_Creature.ControlMaster == player)) { passiveTamingSkillGainRemainingText = "-"; } int hitsAdjusted = bc_Creature.Hits; int hitsMaxAdjusted = bc_Creature.HitsMax; int stamAdjusted = bc_Creature.Stam; int stamMaxAdjusted = bc_Creature.StamMax; int manaAdjusted = bc_Creature.Mana; int manaMaxAdjusted = bc_Creature.ManaMax; int minDamageAdjusted = bc_Creature.DamageMin; int maxDamageAdjusted = bc_Creature.DamageMax; double wrestlingAdjusted = bc_Creature.Skills.Wrestling.Value; double evalIntAdjusted = bc_Creature.Skills.EvalInt.Value; double mageryAdjusted = bc_Creature.Skills.Magery.Value; double magicResistAdjusted = bc_Creature.Skills.MagicResist.Value; double poisoningAdjusted = bc_Creature.Skills.Poisoning.Value; int virtualArmorAdjusted = bc_Creature.VirtualArmor; //Tamed Scalars string hitsTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseMaxHitsCreationScalar - 1), 1); int hitsTamedColor = RedTextHue; if ((bc_Creature.TamedBaseMaxHitsCreationScalar - 1) >= 0) { hitsTamedScalar = "+" + hitsTamedScalar; hitsTamedColor = GreenTextHue; } if (hitsTamedScalar.Length == 3) { hitsTamedScalar = hitsTamedScalar.Insert(2, ".0"); } string stamTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseDexCreationScalar - 1), 1); int stamTamedColor = RedTextHue; if ((bc_Creature.TamedBaseDexCreationScalar - 1) >= 0) { stamTamedScalar = "+" + stamTamedScalar; stamTamedColor = GreenTextHue; } if (stamTamedScalar.Length == 3) { stamTamedScalar = stamTamedScalar.Insert(2, ".0"); } string manaTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseMaxManaCreationScalar - 1), 1); int manaTamedColor = RedTextHue; if ((bc_Creature.TamedBaseMaxManaCreationScalar - 1) >= 0) { manaTamedScalar = "+" + manaTamedScalar; manaTamedColor = GreenTextHue; } if (manaTamedScalar.Length == 3) { manaTamedScalar = manaTamedScalar.Insert(2, ".0"); } string damageTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseMaxDamageCreationScalar - 1), 1); int damageTamedColor = RedTextHue; if ((bc_Creature.TamedBaseMaxDamageCreationScalar - 1) >= 0) { damageTamedScalar = "+" + damageTamedScalar; damageTamedColor = GreenTextHue; } if (damageTamedScalar.Length == 3) { damageTamedScalar = damageTamedScalar.Insert(2, ".0"); } string virtualArmorTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseVirtualArmorCreationScalar - 1), 1); int virtualArmorTamedColor = RedTextHue; if ((bc_Creature.TamedBaseVirtualArmorCreationScalar - 1) >= 0) { virtualArmorTamedScalar = "+" + virtualArmorTamedScalar; virtualArmorTamedColor = GreenTextHue; } if (virtualArmorTamedScalar.Length == 3) { virtualArmorTamedScalar = virtualArmorTamedScalar.Insert(2, ".0"); } string wrestlingTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseWrestlingCreationScalar - 1), 1); int wrestlingTamedColor = RedTextHue; if ((bc_Creature.TamedBaseWrestlingCreationScalar - 1) >= 0) { wrestlingTamedScalar = "+" + wrestlingTamedScalar; wrestlingTamedColor = GreenTextHue; } if (wrestlingTamedScalar.Length == 3) { wrestlingTamedScalar = wrestlingTamedScalar.Insert(2, ".0"); } string evalIntTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseEvalIntCreationScalar - 1), 1); int evalIntTamedColor = RedTextHue; if ((bc_Creature.TamedBaseEvalIntCreationScalar - 1) >= 0) { evalIntTamedScalar = "+" + evalIntTamedScalar; evalIntTamedColor = GreenTextHue; } if (evalIntTamedScalar.Length == 3) { evalIntTamedScalar = evalIntTamedScalar.Insert(2, ".0"); } string mageryTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseMageryCreationScalar - 1), 1); int mageryTamedColor = RedTextHue; if ((bc_Creature.TamedBaseMageryCreationScalar - 1) >= 0) { mageryTamedScalar = "+" + mageryTamedScalar; mageryTamedColor = GreenTextHue; } if (mageryTamedScalar.Length == 3) { mageryTamedScalar = mageryTamedScalar.Insert(2, ".0"); } string magicResistTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBaseMagicResistCreationScalar - 1), 1); int magicResistTamedColor = RedTextHue; if ((bc_Creature.TamedBaseMagicResistCreationScalar - 1) >= 0) { magicResistTamedScalar = "+" + magicResistTamedScalar; magicResistTamedColor = GreenTextHue; } if (magicResistTamedScalar.Length == 3) { magicResistTamedScalar = magicResistTamedScalar.Insert(2, ".0"); } string poisoningTamedScalar = Utility.CreateDecimalPercentageString((bc_Creature.TamedBasePoisoningCreationScalar - 1), 1); int poisoningTamedColor = RedTextHue; if ((bc_Creature.TamedBasePoisoningCreationScalar - 1) >= 0) { poisoningTamedScalar = "+" + poisoningTamedScalar; poisoningTamedColor = GreenTextHue; } if (poisoningTamedScalar.Length == 3) { poisoningTamedScalar = poisoningTamedScalar.Insert(2, ".0"); } if (bc_Creature.IsStabled || (bc_Creature.Controlled && bc_Creature.ControlMaster is PlayerMobile)) { AddLabel(166, 50, MainTextHue, "Level:"); if (traitsAvailable > 0) { AddLabel(210, 50, GreenTextHue, level.ToString()); } else { AddLabel(210, 50, ValueTextHue, level.ToString()); } if (bc_Creature.ExperienceLevel < BaseCreature.MaxExperienceLevel) { AddLabel(175, 70, MainTextHue, "Exp:"); AddLabel(210, 70, ValueTextHue, experience.ToString() + " / " + maxExperience.ToString()); } else { AddLabel(175, 70, MainTextHue, "Exp:"); AddLabel(210, 70, ValueTextHue, "Maxed"); } AddLabel(160, 90, MainTextHue, "Passive Taming"); AddLabel(130, 105, MainTextHue, "Skill Gain Remaining"); if (passiveTamingSkillGainRemaining > 0) { AddLabel(260, 100, 2603, passiveTamingSkillGainRemainingText); } else { AddLabel(260, 100, 2401, passiveTamingSkillGainRemainingText); } } else { AddLabel(170, 45, MainTextHue, "Creature Difficulty"); AddLabel(Utility.CenteredTextOffset(220, creatureDifficulty), 65, DifficultyTextHue, creatureDifficulty); AddLabel(185, 85, MainTextHue, "Slayer Group"); AddLabel(205, 105, SlayerGroupTextHue, slayerGroup); hitsAdjusted = (int)((double)bc_Creature.TamedBaseMaxHits * bc_Creature.TamedBaseMaxHitsCreationScalar); hitsMaxAdjusted = hitsAdjusted; stamAdjusted = (int)((double)bc_Creature.TamedBaseDex * bc_Creature.TamedBaseDexCreationScalar); stamMaxAdjusted = stamAdjusted; manaAdjusted = (int)((double)bc_Creature.TamedBaseMaxMana * bc_Creature.TamedBaseMaxManaCreationScalar); manaMaxAdjusted = manaAdjusted; minDamageAdjusted = (int)((double)bc_Creature.TamedBaseMinDamage * bc_Creature.TamedBaseMinDamageCreationScalar); maxDamageAdjusted = (int)((double)bc_Creature.TamedBaseMaxDamage * bc_Creature.TamedBaseMaxDamageCreationScalar); virtualArmorAdjusted = (int)((double)bc_Creature.TamedBaseVirtualArmor * bc_Creature.TamedBaseVirtualArmorCreationScalar); wrestlingAdjusted = bc_Creature.TamedBaseWrestling * bc_Creature.TamedBaseWrestlingCreationScalar; evalIntAdjusted = bc_Creature.TamedBaseEvalInt * bc_Creature.TamedBaseEvalIntCreationScalar; mageryAdjusted = bc_Creature.TamedBaseMagery * bc_Creature.TamedBaseMageryCreationScalar; magicResistAdjusted = bc_Creature.TamedBaseMagicResist * bc_Creature.TamedBaseMagicResistCreationScalar; poisoningAdjusted = bc_Creature.TamedBasePoisoning * bc_Creature.TamedBasePoisoningCreationScalar; } int labelX = 45; int valuesX = 140; int tamedScalarsX = 245; int startY = 125; int rowHeight = 18; int rowSpacer = 0; bool showTamedScalars = false; if (bc_Creature.Tameable) { showTamedScalars = true; if (bc_Creature.IsHenchman) { AddLabel(labelX, startY, MainTextHue, "Min Begging:"); } else { AddLabel(labelX, startY, MainTextHue, "Min Taming:"); } AddLabel(valuesX, startY, ValueTextHue, bc_Creature.MinTameSkill.ToString()); startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Control Slots:"); AddLabel(valuesX, startY, ValueTextHue, bc_Creature.ControlSlots.ToString()); AddLabel(242, startY, MainTextHue, "vs Avg."); startY += rowHeight; startY += rowSpacer; } AddLabel(labelX, startY, MainTextHue, "Hits:"); AddLabel(valuesX, startY, ValueTextHue, hitsAdjusted + " / " + hitsMaxAdjusted); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, hitsTamedColor, hitsTamedScalar); } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Dex:"); AddLabel(valuesX, startY, ValueTextHue, stamMaxAdjusted.ToString()); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, stamTamedColor, stamTamedScalar); } startY += rowHeight; /* * AddLabel(labelX, startY, MainTextHue, "Mana:"); * AddLabel(valuesX, startY, ValueTextHue, manaAdjusted + " / " + manaMaxAdjusted); * if (showTamedScalars && manaAdjusted > 0 && manaMaxAdjusted > 0) * AddLabel(tamedScalarsX, startY, manaTamedColor, manaTamedScalar); * * startY += rowHeight; */ startY += rowSpacer; AddLabel(labelX, startY, MainTextHue, "Damage:"); AddLabel(valuesX, startY, ValueTextHue, minDamageAdjusted + " - " + maxDamageAdjusted); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, damageTamedColor, damageTamedScalar); } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Armor:"); AddLabel(valuesX, startY, ValueTextHue, virtualArmorAdjusted.ToString()); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, virtualArmorTamedColor, virtualArmorTamedScalar); } startY += rowHeight; startY += rowSpacer; if (bc_Creature.IsHenchman) { AddLabel(labelX, startY, MainTextHue, "Combat Skill:"); } else { AddLabel(labelX, startY, MainTextHue, "Wrestling:"); } AddLabel(valuesX, startY, ValueTextHue, RoundToTenth(wrestlingAdjusted).ToString()); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, wrestlingTamedColor, wrestlingTamedScalar); } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Magery:"); if (mageryAdjusted == 0) { AddLabel(valuesX, startY, ValueTextHue, "-"); } else { AddLabel(valuesX, startY, ValueTextHue, RoundToTenth(mageryAdjusted).ToString()); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, mageryTamedColor, mageryTamedScalar); } } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Eval Int:"); if (evalIntAdjusted == 0) { AddLabel(valuesX, startY, ValueTextHue, "-"); } else { AddLabel(valuesX, startY, ValueTextHue, RoundToTenth(evalIntAdjusted).ToString()); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, evalIntTamedColor, evalIntTamedScalar); } } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Magic Resist:"); AddLabel(valuesX, startY, ValueTextHue, RoundToTenth(magicResistAdjusted).ToString()); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, magicResistTamedColor, magicResistTamedScalar); } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Poisoning:"); if (bc_Creature.HitPoison != null) { AddLabel(valuesX, startY, ValueTextHue, RoundToTenth(poisoningAdjusted).ToString() + " (" + bc_Creature.HitPoison.Name + ")"); if (showTamedScalars) { AddLabel(tamedScalarsX, startY, poisoningTamedColor, poisoningTamedScalar); } } else { AddLabel(valuesX, startY, ValueTextHue, "-"); } startY += rowHeight; AddLabel(labelX, startY, MainTextHue, "Poison Resist:"); if (bc_Creature.PoisonResistance > 0) { if (bc_Creature.PoisonResistance > 1) { AddLabel(valuesX, startY, ValueTextHue, "Reduced " + bc_Creature.PoisonResistance.ToString() + " Levels"); } else { AddLabel(valuesX, startY, ValueTextHue, "Reduced " + bc_Creature.PoisonResistance.ToString() + " Level"); } } else { AddLabel(valuesX, startY, ValueTextHue, "-"); } startY += rowHeight; break; #endregion #region Traits case AnimalLoreGumpPage.Traits: AddLabel(78, 370, WhiteTextHue, "Stats"); AddButton(45, 369, 4011, 4013, 2, GumpButtonType.Reply, 0); AddButton(221, 369, 4029, 4031, 3, GumpButtonType.Reply, 0); AddLabel(259, 370, WhiteTextHue, "Info"); string traitsText = "Traits"; if ((bc_Creature.IsStabled || (bc_Creature.Controlled && bc_Creature.ControlMaster == m_Player)) && traitsAvailable > 0) { if (traitsAvailable == 1) { traitsText = traitsAvailable.ToString() + " Trait Available"; } else { traitsText = traitsAvailable.ToString() + " Traits Available"; } AddLabel(Utility.CenteredTextOffset(175, traitsText), 45, 2606, traitsText); } else { AddLabel(145, 45, 2606, traitsText); } int traitIndex = 0; int iStartY = 60; int rowSpacing = 57; for (int a = 0; a < bc_Creature.TraitsList.Count; a++) { int traitLevelIndex = (int)(Math.Floor((double)a / 2)); int buttonBaseIndex = 10 + (10 * traitLevelIndex); FollowerTraitType traitOption = bc_Creature.TraitsList[a]; FollowerTraitDetail followerTraitDetail = FollowerTraits.GetFollowerTraitDetail(traitOption); bool controlled = false; bool traitAvailable = false; if (bc_Creature.IsStabled || bc_Creature.Controlled && bc_Creature.ControlMaster == m_Player) { controlled = true; } if ((traitLevelIndex <= (traitsEarned - 1)) && bc_Creature.m_SelectedTraits[traitLevelIndex] == FollowerTraitType.None) { traitAvailable = true; } //Left Side if (a % 2 == 0) { if (traitAvailable && controlled && m_AnimalLoreGumpObject.m_TraitGumpSelections[traitLevelIndex] == TraitSelectionType.Left) { AddItem(40 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(85, followerTraitDetail.Name), iStartY, GreenTextHue, followerTraitDetail.Name); AddButton(85, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(105, iStartY + 30, 2550, "Info"); AddButton(145, iStartY + 30, 9909, 9910, buttonBaseIndex + 1, GumpButtonType.Reply, 0); } else if (traitAvailable && controlled && m_AnimalLoreGumpObject.m_TraitGumpSelections[traitLevelIndex] != TraitSelectionType.Left) { AddItem(40 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(85, followerTraitDetail.Name), iStartY, WhiteTextHue, followerTraitDetail.Name); AddButton(85, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(105, iStartY + 30, 2550, "Info"); AddButton(145, iStartY + 30, 9910, 9909, buttonBaseIndex + 1, GumpButtonType.Reply, 0); } else if (bc_Creature.m_SelectedTraits[traitLevelIndex] == traitOption) { AddItem(40 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(85, followerTraitDetail.Name), iStartY, 149, followerTraitDetail.Name); AddButton(85, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(105, iStartY + 30, 2550, "Info"); } else { AddItem(40 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(85, followerTraitDetail.Name), iStartY, 1102, followerTraitDetail.Name); AddButton(85, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(105, iStartY + 30, 2401, "Info"); } } //Right Side else { if (traitAvailable && controlled && m_AnimalLoreGumpObject.m_TraitGumpSelections[traitLevelIndex] == TraitSelectionType.Right) { AddItem(195 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(240, followerTraitDetail.Name), iStartY, GreenTextHue, followerTraitDetail.Name); AddButton(240, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(260, iStartY + 30, 2550, "Info"); AddButton(172, iStartY + 30, 9903, 9904, buttonBaseIndex + 2, GumpButtonType.Reply, 0); } else if (traitAvailable && controlled && m_AnimalLoreGumpObject.m_TraitGumpSelections[traitLevelIndex] != TraitSelectionType.Right) { AddItem(195 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(240, followerTraitDetail.Name), iStartY, WhiteTextHue, followerTraitDetail.Name); AddButton(240, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(260, iStartY + 30, 2550, "Info"); AddButton(172, iStartY + 30, 9904, 9903, buttonBaseIndex + 2, GumpButtonType.Reply, 0); } else if (bc_Creature.m_SelectedTraits[traitLevelIndex] == traitOption) { AddItem(195 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(240, followerTraitDetail.Name), iStartY, 149, followerTraitDetail.Name); AddButton(240, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(260, iStartY + 30, 2550, "Info"); } else { AddItem(195 + followerTraitDetail.IconOffsetX, iStartY + 20 + followerTraitDetail.IconOffsetY, followerTraitDetail.IconItemId, followerTraitDetail.IconHue); AddLabel(Utility.CenteredTextOffset(240, followerTraitDetail.Name), iStartY, 1102, followerTraitDetail.Name); AddButton(240, iStartY + 33, 2118, 2117, buttonBaseIndex, GumpButtonType.Reply, 0); AddLabel(260, iStartY + 30, 2401, "Info"); } iStartY += rowSpacing; } } bool selectionsMade = false; for (int a = 0; a < m_AnimalLoreGumpObject.m_TraitGumpSelections.Count; a++) { if (m_AnimalLoreGumpObject.m_TraitGumpSelections[a] != TraitSelectionType.None) { selectionsMade = true; } } if (selectionsMade && traitsAvailable > 0 && (bc_Creature.IsStabled || (bc_Creature.Controlled && bc_Creature.ControlMaster == m_Player))) { AddLabel(90, 345, 68, "Confirm Trait Selection"); AddButton(140, 370, 2076, 2075, 9, GumpButtonType.Reply, 0); } break; #endregion #region Info case AnimalLoreGumpPage.Info: AddLabel(78, 370, WhiteTextHue, "Traits"); AddButton(45, 369, 4011, 4013, 2, GumpButtonType.Reply, 0); if (traitsAvailable > 0) { AddLabel(120, 370, GreenTextHue, "(" + traitsAvailable.ToString() + " Available)"); } AddButton(221, 369, 4029, 4031, 3, GumpButtonType.Reply, 0); AddLabel(259, 370, WhiteTextHue, "Stats"); if (bc_Creature.RessPenaltyCount > 0) { AddLabel(73, 47, 149, "Current Ress Penalty"); AddItem(198, 42, 6227, 0); AddLabel(232, 47, 2116, "x" + bc_Creature.RessPenaltyCount.ToString()); string timeRemainingText = "Expires in " + Utility.CreateTimeRemainingString(DateTime.UtcNow, bc_Creature.RessPenaltyExpiration, true, false, true, true, true); string textA = "-" + Utility.CreateDecimalPercentageString(bc_Creature.GetRessPenaltyDamageDealtModifier(), 0) + " Damage Dealt"; string textB = "+" + Utility.CreateDecimalPercentageString(bc_Creature.GetRessPenaltyDamageReceivedModifier(), 0) + " Damage Received"; AddLabel(Utility.CenteredTextOffset(165, timeRemainingText), 67, 2550, timeRemainingText); AddLabel(Utility.CenteredTextOffset(165, textA), 87, 1256, textA); AddLabel(Utility.CenteredTextOffset(165, textB), 107, 1256, textB); } break; #endregion } }
public AspectGearGump(Mobile player, AspectMould aspectMould, Item item, AspectEnum selectedAspect) : base(10, 10) { m_Player = player as PlayerMobile; m_AspectMould = aspectMould; m_Item = item; m_SelectedAspect = selectedAspect; if (m_Player == null) { return; } if (m_Player.Deleted || !m_Player.Alive) { return; } if (m_AspectMould == null) { return; } if (m_AspectMould.Deleted) { return; } if (m_Item == null) { return; } if (m_Item.Deleted) { return; } if (!m_AspectMould.IsChildOf(m_Player.Backpack)) { m_Player.SendMessage("The mould you wish to use must be in your backpack in order to use it."); return; } Item targetItem = m_Item as Item; if (targetItem == null) { m_Player.SendMessage("You cannot improve that."); return; } if (!(targetItem is BaseWeapon || targetItem is BaseArmor)) { m_Player.SendMessage("You may only improve weapons and armor."); return; } if (targetItem is BaseShield) { m_Player.SendMessage("You may only improve weapons and armor."); return; } if (!(targetItem.IsChildOf(m_Player.Backpack) || targetItem.RootParent == m_Player)) { m_Player.SendMessage("The item you wish to improve must be equipped or in your backpack."); return; } Type itemType = targetItem.GetType(); CraftItem craftItem = null; switch (m_AspectMould.MouldType) { case AspectMould.MouldSkillType.Blacksmithy: craftItem = DefBlacksmithy.CraftSystem.CraftItems.SearchFor(itemType); if (craftItem == null) { m_Player.SendMessage("You may only improve items craftable through blacksmithing with this mould."); return; } break; case AspectMould.MouldSkillType.Carpentry: craftItem = DefCarpentry.CraftSystem.CraftItems.SearchFor(itemType); if (craftItem == null) { m_Player.SendMessage("You may only improve items craftable through carpentry with this mould."); return; } break; case AspectMould.MouldSkillType.Tailoring: craftItem = DefTailoring.CraftSystem.CraftItems.SearchFor(itemType); if (craftItem == null) { m_Player.SendMessage("You may only improve items craftable through tailoring with this mould."); return; } break; } if (targetItem.DecorativeEquipment) { m_Player.SendMessage("Decorative equipment may not be improved."); return; } if (targetItem.LootType == LootType.Newbied) { m_Player.SendMessage("Newbied equipment may not be improved."); return; } if (targetItem.LootType == LootType.Blessed && targetItem.Aspect == AspectEnum.None) { m_Player.SendMessage("Blessed equipment may not be improved."); return; } BaseWeapon weapon = targetItem as BaseWeapon; BaseArmor armor = targetItem as BaseArmor; if (weapon != null) { if (weapon.TrainingWeapon) { m_Player.SendMessage("Training weapons may not be improved."); return; } if (weapon.DurabilityLevel != WeaponDurabilityLevel.Regular || weapon.AccuracyLevel != WeaponAccuracyLevel.Regular || weapon.DamageLevel != WeaponDamageLevel.Regular) { m_Player.SendMessage("Magical weapons may not be improved."); return; } } if (armor != null) { if (armor.DurabilityLevel != ArmorDurabilityLevel.Regular || armor.ProtectionLevel != ArmorProtectionLevel.Regular) { m_Player.SendMessage("Magical weapons may not be improved."); return; } } //Aspect Item if (targetItem.Aspect != AspectEnum.None && targetItem.TierLevel >= 1 && targetItem.TierLevel <= 10) { if (targetItem.TierLevel == 10) { m_Player.SendMessage("That item is already at it's maximum tier level."); return; } } else if (targetItem.Aspect == AspectEnum.None) { if (!(targetItem.Quality == Quality.Exceptional && targetItem.DisplayCrafter)) { m_Player.SendMessage("Only mastermarked items may be improved."); return; } } #region Images AddImage(256, 251, 103); AddImage(127, 251, 103); AddImage(4, 251, 103); AddImage(4, 329, 103); AddImage(129, 329, 103); AddImage(69, 97, 103); AddImage(4, 97, 103); AddImage(128, 2, 103); AddImage(4, 2, 103); AddImage(256, 97, 103); AddImage(256, 2, 103); AddImage(127, 183, 103); AddImage(4, 183, 103); AddImage(256, 329, 103); AddImage(256, 183, 103); AddImage(128, 380, 103); AddImage(4, 380, 103); AddImage(256, 380, 103); AddImage(16, 15, 3604, 2052); AddImage(133, 15, 3604, 2052); AddImage(260, 15, 3604, 2052); AddImage(16, 137, 3604, 2052); AddImage(133, 135, 3604, 2052); AddImage(260, 137, 3604, 2052); AddImage(16, 203, 3604, 2052); AddImage(133, 203, 3604, 2052); AddImage(260, 203, 3604, 2052); AddImage(17, 342, 3604, 2052); AddImage(134, 342, 3604, 2052); AddImage(260, 342, 3604, 2052); #endregion int WhiteTextHue = 2499; int DetailTextHue = 2603; //Guide AddButton(18, 16, 2094, 2095, 1, GumpButtonType.Reply, 0); AddLabel(16, 3, 149, "Guide"); if (targetItem.Aspect != AspectEnum.None && targetItem.TierLevel > 0) { m_SelectedAspect = targetItem.Aspect; } int newTier = targetItem.TierLevel + 1; string requiredMouldName = ""; #region Mould Names switch (m_AspectMould.MouldType) { case AspectMould.MouldSkillType.Blacksmithy: switch (newTier) { case 1: requiredMouldName = "Basic Smithing Mould"; break; case 2: requiredMouldName = "Basic Smithing Mould"; break; case 3: requiredMouldName = "Advanced Smithing Mould"; break; case 4: requiredMouldName = "Advanced Smithing Mould"; break; case 5: requiredMouldName = "Expert Smithing Mould"; break; case 6: requiredMouldName = "Expert Smithing Mould"; break; case 7: requiredMouldName = "Master Smithing Mould"; break; case 8: requiredMouldName = "Master Smithing Mould"; break; case 9: requiredMouldName = "Legendary Smithing Mould"; break; case 10: requiredMouldName = "Legendary Smithing Mould"; break; } break; case AspectMould.MouldSkillType.Carpentry: switch (newTier) { case 1: requiredMouldName = "Basic Carpentry Mould"; break; case 2: requiredMouldName = "Basic Carpentry Mould"; break; case 3: requiredMouldName = "Advanced Carpentry Mould"; break; case 4: requiredMouldName = "Advanced Carpentry Mould"; break; case 5: requiredMouldName = "Expert Carpentry Mould"; break; case 6: requiredMouldName = "Expert Carpentry Mould"; break; case 7: requiredMouldName = "Master Carpentry Mould"; break; case 8: requiredMouldName = "Master Carpentry Mould"; break; case 9: requiredMouldName = "Legendary Carpentry Mould"; break; case 10: requiredMouldName = "Legendary Carpentry Mould"; break; } break; case AspectMould.MouldSkillType.Tailoring: switch (newTier) { case 1: requiredMouldName = "Basic Tailoring Mould"; break; case 2: requiredMouldName = "Basic Tailoring Mould"; break; case 3: requiredMouldName = "Advanced Tailoring Mould"; break; case 4: requiredMouldName = "Advanced Tailoring Mould"; break; case 5: requiredMouldName = "Expert Tailoring Mould"; break; case 6: requiredMouldName = "Expert Tailoring Mould"; break; case 7: requiredMouldName = "Master Tailoring Mould"; break; case 8: requiredMouldName = "Master Tailoring Mould"; break; case 9: requiredMouldName = "Legendary Tailoring Mould"; break; case 10: requiredMouldName = "Legendary Tailoring Mould"; break; } break; } #endregion string itemName = ""; string itemAspectName = ""; string aspectName = AspectGear.GetAspectName(m_SelectedAspect); int aspectHue = AspectGear.GetAspectHue(m_SelectedAspect); int aspectTextHue = AspectGear.GetAspectTextHue(m_SelectedAspect); int itemOffsetX = 0; int itemOffsetY = 0; int itemIconItemdId = 0; if (weapon != null) { AspectWeaponDetail aspectWeaponDetail = AspectGear.GetAspectWeaponDetail(m_SelectedAspect); if (weapon.TierLevel == 0) { AddLabel(129, 25, 149, "Create Aspect Weapon"); } else { AddLabel(129, 25, 149, "Upgrade Aspect Tier"); } itemName = weapon.Name; if (itemName == null) { itemName = ""; } itemName = Utility.Capitalize(itemName); itemAspectName = aspectName + " Tier " + newTier.ToString(); itemOffsetX = weapon.IconOffsetX; itemOffsetY = weapon.IconOffsetY; itemIconItemdId = weapon.IconItemId; AddLabel(Utility.CenteredTextOffset(195, itemName), 49, aspectTextHue, itemName); AddLabel(Utility.CenteredTextOffset(195, itemAspectName), 74, aspectTextHue, itemAspectName); AddItem(120 + itemOffsetX, 75 + itemOffsetY, itemIconItemdId, aspectHue); //Image int newDurability = AspectGear.BaselineDurability + (AspectGear.IncreasedDurabilityPerTier * newTier); int adjustedBlessedCharges = AspectGear.ArcaneMaxCharges; double accuracy = 100 * (AspectGear.BaseAccuracy + (AspectGear.AccuracyPerTier * (double)newTier)); double tactics = AspectGear.BaseTactics + (AspectGear.TacticsPerTier * (double)newTier); double effectChance = 11111; // AspectGear.BaseEffectChance + (AspectGear.BaseEffectChancePerTier * (double)newTier); effectChance *= AspectGear.GetEffectWeaponSpeedScalar(weapon); AddLabel(137, 168, WhiteTextHue, "Durability:"); AddLabel(214, 168, aspectTextHue, newDurability.ToString() + "/" + newDurability.ToString()); AddLabel(142, 188, WhiteTextHue, "Accuracy:"); AddLabel(214, 188, aspectTextHue, "+" + accuracy.ToString() + "%"); AddLabel(153, 208, WhiteTextHue, "Tactics:"); AddLabel(214, 208, aspectTextHue, "+" + tactics.ToString()); AddLabel(110, 228, WhiteTextHue, "Effect Chance:"); AddLabel(214, 228, aspectTextHue, Utility.CreateDecimalPercentageString(effectChance, 1)); AddLabel(109, 248, WhiteTextHue, "(scaled for weapon speed)"); AddLabel(149, 273, WhiteTextHue, "Special Effect"); AddLabel(169, 293, aspectTextHue, aspectWeaponDetail.m_EffectDisplayName); AddButton(149, 297, 1209, 1210, 2, GumpButtonType.Reply, 0); } if (armor != null) { if (armor.TierLevel == 0) { AddLabel(135, 25, 149, "Create Aspect Armor"); } else { AddLabel(135, 25, 149, "Upgrade Aspect Tier"); } itemName = armor.Name; if (itemName == null) { itemName = ""; } itemName = Utility.Capitalize(itemName); itemAspectName = aspectName + " Tier " + (targetItem.TierLevel + 1).ToString(); itemOffsetX = armor.IconOffsetX; itemOffsetY = armor.IconOffsetY; itemIconItemdId = armor.IconItemId; AddLabel(Utility.CenteredTextOffset(200, itemName), 49, aspectTextHue, itemName); AddLabel(Utility.CenteredTextOffset(200, itemAspectName), 74, aspectTextHue, itemAspectName); AddItem(120 + itemOffsetX, 75 + itemOffsetY, itemIconItemdId, aspectHue); //Image //TEST: FINISH!!! //Armor Details AddLabel(39, 165, WhiteTextHue, "Total Armor:"); AddLabel(126, 165, DetailTextHue, "20"); AddLabel(60, 185, WhiteTextHue, "Dex Loss:"); AddLabel(126, 185, DetailTextHue, "-5"); AddLabel(47, 205, WhiteTextHue, "Meditation:"); AddLabel(126, 205, DetailTextHue, "0%"); //Effects Loop int startY = 165; int spacingY = 40; for (int a = 0; a < 4; a++) { string effectName = "Effect"; string effectPercent = "25%"; AddLabel(Utility.CenteredTextOffset(260, effectName), startY, WhiteTextHue, effectName); AddLabel(Utility.CenteredTextOffset(260, effectPercent), startY + 20, DetailTextHue, effectPercent); startY += spacingY; } } //Change Aspect AddLabel(73, 347, 149, "Aspect"); AddLabel(Utility.CenteredTextOffset(94, aspectName), 376, aspectTextHue, aspectName); if (m_Item.TierLevel == 0) { AddButton(25, 376, 9909, 9909, 3, GumpButtonType.Reply, 0); //Left AddButton(139, 376, 9903, 9903, 4, GumpButtonType.Reply, 0); //Right } //Create or Upgrade AddButton(38, 432, 2152, 2154, 5, GumpButtonType.Reply, 0); if (targetItem.TierLevel == 0) { AddLabel(76, 436, 63, "Create"); } else { AddLabel(76, 436, 63, "Upgrade"); } //Materials Required int distillationNeeded = 0; int coresNeeded = 0; if (targetItem.TierLevel == 0) { if (weapon != null) { distillationNeeded = AspectGear.DistillationNeededForWeaponCreation; coresNeeded = AspectGear.CoresNeededForWeaponCreation; } if (armor != null) { distillationNeeded = AspectGear.DistillationNeededForArmorCreation; coresNeeded = AspectGear.CoresNeededForArmorCreation; } } else { if (weapon != null) { distillationNeeded = AspectGear.DistillationNeededForWeaponUpgrade; coresNeeded = AspectGear.CoresNeededForWeaponUpgrade; } if (armor != null) { distillationNeeded = AspectGear.DistillationNeededForArmorUpgrade; coresNeeded = AspectGear.CoresNeededForArmorUpgrade; } } AddLabel(228, 347, 149, "Required Materials"); AddItem(174, 368, 4323); AddLabel(226, 373, WhiteTextHue, requiredMouldName); AddItem(181, 403, 17686, aspectHue); AddLabel(225, 406, aspectTextHue, distillationNeeded.ToString() + " " + aspectName + " Distillation"); AddItem(184, 439, 3985, aspectHue); AddLabel(225, 436, aspectTextHue, coresNeeded.ToString() + " " + aspectName + " Cores"); }
public AchievementsGump(Mobile from, PageType selectedPageType, int mainPage, AchievementCategory achievementCategory, int achievementListPage, int achievementSelectedIndex) : base(10, 10) { m_Player = from as PlayerMobile; if (m_Player == null) { return; } AchievementsPersistance.CheckAndCreateAchievementAccountEntry(m_Player); m_SelectedPageType = selectedPageType; m_MainPage = mainPage; m_AchievementCategory = achievementCategory; m_AchievementListPage = achievementListPage; m_AchievementSelectedIndex = achievementSelectedIndex; Closable = true; Disposable = true; Dragable = true; Resizable = false; int WhiteTextHue = 2655; int GreenTextHue = 63; int YellowTextHue = 2550; int GreyTextHue = 1102; int startX = 0; int startY = 0; AddPage(0); int totalPages; #region Background AddImage(409, 8, 103, 2401); AddImage(142, 105, 103); AddImage(143, 148, 103); AddImage(143, 234, 103); AddImage(143, 324, 103); AddImage(145, 410, 103, 2401); AddImage(8, 410, 103, 2401); AddImage(8, 233, 103, 2401); AddImage(142, 8, 103, 2401); AddImage(7, 147, 103, 2401); AddImage(8, 7, 103, 2401); AddImage(8, 104, 103, 2401); AddImage(17, 107, 3604, 2052); AddImage(143, 107, 3604, 2052); AddImage(17, 18, 3604, 2052); AddImage(143, 18, 3604, 2052); AddImage(8, 323, 103, 2401); AddImage(17, 194, 3604, 2052); AddImage(143, 194, 3604, 2052); AddImage(17, 286, 3604, 2052); AddImage(143, 286, 3604, 2052); AddImage(17, 370, 3604, 2052); AddImage(143, 370, 3604, 2052); AddImage(274, 105, 103); AddImage(275, 148, 103); AddImage(275, 234, 103); AddImage(275, 324, 103); AddImage(276, 410, 103, 2401); AddImage(274, 8, 103, 2401); AddImage(409, 91, 103, 2401); AddImage(409, 182, 103, 2401); AddImage(409, 261, 103, 2401); AddImage(409, 354, 103, 2401); AddImage(409, 410, 103, 2401); AddImage(267, 107, 3604, 2052); AddImage(267, 18, 3604, 2052); AddImage(267, 194, 3604, 2052); AddImage(267, 286, 3604, 2052); AddImage(267, 370, 3604, 2052); AddImage(375, 107, 3604, 2052); AddImage(375, 18, 3604, 2052); AddImage(375, 194, 3604, 2052); AddImage(375, 286, 3604, 2052); AddImage(375, 370, 3604, 2052); AddImage(411, 107, 3604, 2052); AddImage(411, 18, 3604, 2052); AddImage(411, 194, 3604, 2052); AddImage(411, 286, 3604, 2052); AddImage(412, 370, 3604, 2052); #endregion //Header AddImage(144, -2, 1143, 2499); AddLabel(235, 0, 2606, "Achievements"); //Guide AddButton(7, 8, 2094, 2095, 1, GumpButtonType.Reply, 0); AddLabel(3, -2, 149, "Guide"); switch (m_SelectedPageType) { #region Main case PageType.Main: int categoriesPerPage = categoryRows * categoryColumns; int totalCategories = Enum.GetNames(typeof(AchievementCategory)).Length; int totalCategoryPages = (int)(Math.Ceiling((double)totalCategories / (double)categoriesPerPage)); if (m_MainPage >= totalCategoryPages) { m_MainPage = 0; } if (m_MainPage < 0) { m_MainPage = 0; } int categoryStartIndex = m_MainPage * categoriesPerPage; int categoryEndIndex = (m_MainPage * categoriesPerPage) + (categoriesPerPage - 1); if (categoryEndIndex >= totalCategories) { categoryEndIndex = totalCategories - 1; } int totalCompletedAchievements = Achievements.GetCompletedAchievementCount(m_Player); int totalAchievementsAvailable = Achievements.GetTotalAchievementsCount(); //Previous if (m_MainPage > 0) { AddLabel(57, 472, WhiteTextHue, "Previous Page"); AddButton(23, 471, 4014, 4016, 2, GumpButtonType.Reply, 0); } //Next if (m_MainPage < totalCategoryPages - 1) { AddButton(502, 471, 4005, 4007, 3, GumpButtonType.Reply, 0); AddLabel(432, 472, WhiteTextHue, "Next Page"); } //Settings AddButton(243, 471, 4029, 4031, 4, GumpButtonType.Reply, 0); AddLabel(277, 472, 63, "Settings"); int textHue = GreyTextHue; if (totalCompletedAchievements > 0) { textHue = YellowTextHue; } if (totalCompletedAchievements == totalAchievementsAvailable) { textHue = GreenTextHue; } AddLabel(175, 447, 149, "Total"); AddLabel(332, 447, textHue, totalCompletedAchievements.ToString() + "/" + totalAchievementsAvailable.ToString()); double totalAchievementProgress = (double)totalCompletedAchievements / (double)totalAchievementsAvailable; AddImage(216, 452, Achievements.GetProgressBarBackground(totalAchievementProgress)); AddImageTiled(216 + Utility.ProgressBarX(totalAchievementProgress), 455, Utility.ProgressBarWidth(totalAchievementProgress), 7, 2488); int iBaseX = 25; int iBaseY = 30; startX = iBaseX; startY = iBaseY; int columnIndex = 0; int rowIndex = 0; int rowSpacing = 140; int columnSpacing = 125; int categoryDisplayCount = categoryEndIndex - categoryStartIndex; for (int a = 0; a < categoryDisplayCount + 1; a++) { int categoryIndex = categoryStartIndex + a; int buttonIndex = 10 + categoryIndex; if (categoryStartIndex >= totalCategories) { continue; } AchievementCategory category = (AchievementCategory)categoryIndex; AchievementCategoryDetail achievementCategoryDetail = Achievements.GetCategoryDetail(category); AddGumpCollection(GumpCollections.GetGumpCollection(achievementCategoryDetail.GumpCollectionGroupId, achievementCategoryDetail.GumpCollectionItemId), startX - 40, startY + 8); AddLabel(Utility.CenteredTextOffset(startX + 65, achievementCategoryDetail.m_CategoryName), startY + 5, achievementCategoryDetail.m_TextHue, achievementCategoryDetail.m_CategoryName); AddImage(startX + 60, startY + 32, 10550, achievementCategoryDetail.m_IconHue); AddImage(startX + 88, startY + 32, 10552, achievementCategoryDetail.m_IconHue); AddButton(startX + 74, startY + 46, 9721, 9721, buttonIndex, GumpButtonType.Reply, 0); //Category Progress int completedAchievementsInCategory = Achievements.GetCompletedCategoryAchievements(m_Player, category); int achievementsInCategory = Achievements.GetCategoryAchievements(category).Count; textHue = GreyTextHue; if (completedAchievementsInCategory > 0) { textHue = YellowTextHue; } if (completedAchievementsInCategory == achievementsInCategory) { textHue = GreenTextHue; } double categoryAchievementProgress = (double)completedAchievementsInCategory / (double)achievementsInCategory; string progressText = completedAchievementsInCategory.ToString() + "/" + achievementsInCategory.ToString(); AddImage(startX + 10, startY + 99, Achievements.GetProgressBarBackground(totalAchievementProgress)); AddImageTiled(startX + 10 + Utility.ProgressBarX(totalAchievementProgress), startY + 102, Utility.ProgressBarWidth(totalAchievementProgress), 7, 2488); AddLabel(Utility.CenteredTextOffset(startX + 60, progressText), startY + 113, textHue, progressText); startX += columnSpacing; columnIndex++; if (columnIndex >= categoryColumns) { columnIndex = 0; rowIndex++; startX = iBaseX; startY += rowSpacing; } } break; #endregion #region Category case PageType.Category: List <Achievement> m_AchievementsInCategory = Achievements.GetCategoryAchievements(m_AchievementCategory); AchievementCategoryDetail categoryDetail = Achievements.GetCategoryDetail(m_AchievementCategory); if (m_AchievementsInCategory.Count == 0) { return; } if (m_AchievementSelectedIndex >= m_AchievementsInCategory.Count) { m_AchievementSelectedIndex = 0; } Achievement achievementSelected = m_AchievementsInCategory[m_AchievementSelectedIndex]; int achievementsPerPage = 12; int totalAchievements = m_AchievementsInCategory.Count; int totalAchievementPages = (int)(Math.Ceiling((double)totalAchievements / (double)achievementsPerPage)); if (m_AchievementListPage >= totalAchievementPages) { m_AchievementListPage = 0; } if (m_AchievementListPage < 0) { m_AchievementListPage = 0; } int achievementStartIndex = m_AchievementListPage * achievementsPerPage; int achievementEndIndex = (m_AchievementListPage * achievementsPerPage) + (achievementsPerPage - 1); if (achievementEndIndex >= totalAchievements) { achievementEndIndex = totalAchievements - 1; } int achievementCount = achievementEndIndex - achievementStartIndex; //Return to Categories AddButton(23, 471, 4014, 4016, 5, GumpButtonType.Reply, 0); AddLabel(57, 472, 149, "Categories"); //Previous List Page if (m_AchievementListPage > 0) { AddButton(172, 471, 9909, 9909, 3, GumpButtonType.Reply, 0); } if (m_AchievementListPage > 0 || m_AchievementListPage < totalAchievementPages - 1) { AddLabel(201, 472, 149, "More"); } //Next List Page if (m_AchievementListPage < totalAchievementPages - 1) { AddButton(239, 471, 9903, 9903, 4, GumpButtonType.Reply, 0); } //Category startX = 25; startY = 30; int playerCompletedAchievementsInCategory = Achievements.GetCompletedCategoryAchievements(m_Player, m_AchievementCategory); int totalAchievementsInCategory = m_AchievementsInCategory.Count; textHue = GreyTextHue; if (playerCompletedAchievementsInCategory > 0) { textHue = YellowTextHue; } if (playerCompletedAchievementsInCategory == m_AchievementsInCategory.Count) { textHue = GreenTextHue; } double playerCategoryAchievementProgress = (double)playerCompletedAchievementsInCategory / (double)totalAchievementsInCategory; string categoryProgressText = playerCompletedAchievementsInCategory.ToString() + "/" + totalAchievementsInCategory.ToString(); startX = 25; startY = 30; //Category Image AddGumpCollection(GumpCollections.GetGumpCollection(categoryDetail.GumpCollectionGroupId, categoryDetail.GumpCollectionItemId), startX - 40, startY + 8); AddLabel(Utility.CenteredTextOffset(startX + 65, categoryDetail.m_CategoryName), startY + 5, categoryDetail.m_TextHue, categoryDetail.m_CategoryName); AddImage(startX + 60, startY + 32, 10550, categoryDetail.m_IconHue); AddImage(startX + 88, startY + 32, 10552, categoryDetail.m_IconHue); //Category Progress AddImage(startX + 10, startY + 99, Achievements.GetProgressBarBackground(playerCategoryAchievementProgress)); AddImageTiled(startX + 10 + Utility.ProgressBarX(playerCategoryAchievementProgress), startY + 102, Utility.ProgressBarWidth(playerCategoryAchievementProgress), 7, 2488); AddLabel(Utility.CenteredTextOffset(startX + 60, categoryProgressText), startY + 113, textHue, categoryProgressText); startX = 3; startY = 165; int achievementSpacing = 25; for (int a = 0; a < achievementCount + 1; a++) { int achievementIndex = achievementStartIndex + a; int buttonIndex = 10 + achievementIndex; if (achievementStartIndex >= totalAchievements) { continue; } Achievement achievement = m_AchievementsInCategory[achievementIndex]; AchievementDetail achievementDetail = Achievements.GetAchievementDetail(achievement); AchievementEntry achievementEntry = Achievements.GetAchievementEntry(m_Player, achievement); if (achievementDetail != null && achievementEntry != null) { textHue = WhiteTextHue; string completionPercentageText = "0%"; if (achievementEntry.m_Completed) { textHue = GreenTextHue; if (!achievementEntry.m_Claimed) { AddItem(startX, startY + 5, 572); //Green Orb } completionPercentageText = "100%"; } else { double completionPercentage = (double)achievementEntry.m_Progress / (double)achievementDetail.m_ProgressNeeded; completionPercentageText = Utility.CreateDecimalPercentageString(completionPercentage, 0); if (completionPercentage > 0 && completionPercentage < .01) { completionPercentageText = "1%"; } if (completionPercentage >= .99 && completionPercentage < 1.0) { completionPercentageText = "99%"; } if (completionPercentage > 0) { textHue = YellowTextHue; } } if (!achievementEntry.m_Unlocked) { textHue = GreyTextHue; //AddItem(startX, startY + 5, 573); //Orange Orb } if (achievementSelected == achievement) { AddButton(startX + 33, startY, 4030, 4030, buttonIndex, GumpButtonType.Reply, 0); } else { AddButton(startX + 33, startY, 4029, 4031, buttonIndex, GumpButtonType.Reply, 0); } AddLabel(startX + 68, startY + 1, textHue, completionPercentageText); AddLabel(startX + 110, startY + 1, textHue, achievementDetail.m_DisplayName); } startY += achievementSpacing; } #region Achievement Window AddImage(408, 233, 103, 2401); AddImage(408, 150, 103, 2401); AddImage(408, 60, 103, 2401); AddImage(306, 150, 103); AddImage(303, 234, 103, 2401); AddImage(303, 150, 103, 2401); AddImage(303, 60, 103, 2401); AddImage(316, 72, 3604, 2052); AddImage(316, 195, 3604, 2052); AddImage(410, 72, 3604, 2052); AddImage(411, 195, 3604, 2052); AddImage(408, 322, 103, 2401); AddImage(303, 323, 103, 2401); AddImage(316, 284, 3604, 2052); AddImage(411, 284, 3604, 2052); AddImage(408, 362, 103, 2401); AddImage(303, 363, 103, 2401); AddImage(316, 324, 3604, 2052); AddImage(411, 324, 3604, 2052); AddImage(516, 49, 10441, 2401); #endregion AchievementDetail selectedAchievementDetail = Achievements.GetAchievementDetail(achievementSelected); AchievementEntry selectedAchievementEntry = Achievements.GetAchievementEntry(m_Player, achievementSelected); int centerTextX = 440; int textY = 80; rowSpacing = 20; AddImage(349, 54, 2440, 1102); AddLabel(Utility.CenteredTextOffset(centerTextX, selectedAchievementDetail.m_DisplayName), 55, categoryDetail.m_TextHue, selectedAchievementDetail.m_DisplayName); if (selectedAchievementDetail != null && selectedAchievementEntry != null) { if (!selectedAchievementEntry.m_Unlocked) { string unlockedText = "Stage " + selectedAchievementDetail.m_Stage.ToString() + " (Not Yet Unlocked)"; AddLabel(Utility.CenteredTextOffset(centerTextX, unlockedText), textY, GreyTextHue, unlockedText); textY += rowSpacing; } for (int a = 0; a < selectedAchievementDetail.m_Description.Length; a++) { AddLabel(Utility.CenteredTextOffset(centerTextX, selectedAchievementDetail.m_Description[a]), textY, WhiteTextHue, selectedAchievementDetail.m_Description[a]); textY += rowSpacing; } AddLabel(409, 184, 2599, "Progress"); double selectedAchievementProgress = (double)selectedAchievementEntry.m_Progress / (double)selectedAchievementDetail.m_ProgressNeeded; textHue = GreyTextHue; if (selectedAchievementEntry.m_Progress > 0) { textHue = YellowTextHue; } if (selectedAchievementEntry.m_Progress == selectedAchievementDetail.m_ProgressNeeded) { textHue = GreenTextHue; } AddImage(382, 205, Achievements.GetProgressBarBackground(selectedAchievementProgress)); AddImageTiled(382 + Utility.ProgressBarX(selectedAchievementProgress), 208, Utility.ProgressBarWidth(selectedAchievementProgress), 7, 2488); string progressText = selectedAchievementEntry.m_Progress.ToString() + "/" + selectedAchievementDetail.m_ProgressNeeded.ToString(); AddLabel(Utility.CenteredTextOffset(centerTextX - 5, progressText), 220, textHue, progressText); AddLabel(415, 250, 63, "Reward"); textY = 270; for (int a = 0; a < selectedAchievementDetail.m_RewardDescription.Length; a++) { AddLabel(Utility.CenteredTextOffset(centerTextX, selectedAchievementDetail.m_RewardDescription[a]), textY, WhiteTextHue, selectedAchievementDetail.m_RewardDescription[a]); textY += rowSpacing; } if (selectedAchievementDetail.m_RewardItemID != 0) { AddItem(360 + selectedAchievementDetail.m_RewardItemOffsetX, textY + 20 + selectedAchievementDetail.m_RewardItemOffsetY, selectedAchievementDetail.m_RewardItemID, selectedAchievementDetail.m_RewardItemHue); } else { AddGumpCollection(GumpCollections.GetGumpCollection(selectedAchievementDetail.GumpCollectionGroupId, selectedAchievementDetail.GumpCollectionItemId), 355, 350); } if (selectedAchievementEntry.m_Completed) { if (selectedAchievementEntry.m_Claimed) { AddLabel(426, 472, 63, "Claim"); AddButton(426, 442, 2151, 2154, 6, GumpButtonType.Reply, 0); } else { AddLabel(393, 462, 149, "Already Claimed"); } } } break; #endregion case PageType.Settings: break; } }