protected override void OnTick() { if (!FactionPersistance.Enabled) { return; } if (FactionPersistance.Active && CurrentCaptureEvent != null) { TimeElapsed = TimeElapsed + TickDuration; if (DateTime.UtcNow >= CurrentCaptureEvent.EventStart + CaptureEventDuration) { EndCaptureEvent(); return; } TimerTick(); } else { if (DateTime.UtcNow >= FactionPersistance.NextScheduledCaptureEventStartTime) { //Somehow a Previous Event Was Currently Active if (CurrentCaptureEvent != null) { EndCaptureEvent(); } FactionPersistance.AnnouncementMade = false; StartCaptureEvent(); return; } if (!FactionPersistance.AnnouncementMade && DateTime.UtcNow >= FactionPersistance.NextScheduledCaptureEventStartTime - FactionPersistance.ScheduledCaptureEventAnnouncementLeadtime) { FactionPersistance.AnnouncementMade = true; foreach (NetState state in NetState.Instances) { PlayerMobile player = state.Mobile as PlayerMobile; if (player == null) { continue; } string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + FactionPersistance.ScheduledCaptureEventAnnouncementLeadtime, false, false, true, true, true); player.SendMessage(Faction.purpleTextHue, "Faction Capture Event will begin in " + timeRemaining + "."); } } } }
public static void DoEmote(PlayerMobile player, CustomizationType emote) { if (player == null) { return; } if (player.Squelched || player.StealthSquelchedExpiration > DateTime.UtcNow) { player.SendMessage("You cannot speak at the moment."); return; } if (!player.Alive && player.AccessLevel == AccessLevel.Player) { player.SendMessage("You must be alive in order to use an Emote."); return; } bool active = PlayerEnhancementPersistance.IsCustomizationEntryActive(player, emote); if (!active && player.AccessLevel == AccessLevel.Player) { player.SendMessage("You have not unlocked and activated this Emote."); return; } if (DateTime.UtcNow < player.NextEmoteAllowed && player.AccessLevel == AccessLevel.Player) { string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, player.NextEmoteAllowed, false, true, true, true, true); player.SendMessage("You may not use another emote for " + timeRemaining + "."); return; } bool shortCooldown = PlayerEnhancementPersistance.IsCustomizationEntryActive(player, CustomizationType.EmoteFrequency); TimeSpan cooldown = PlayerMobile.EmoteCooldownLong; if (shortCooldown) { cooldown = PlayerMobile.EmoteCooldownShort; } player.NextEmoteAllowed = DateTime.UtcNow + cooldown; string text = ""; int sound = 0; switch (emote) { case CustomizationType.EmoteYes: text = "*nods*"; if (player.Female) { sound = Utility.RandomList(0x337); } else { sound = Utility.RandomList(0x449); } break; case CustomizationType.EmoteNo: text = "*shakes head*"; if (player.Female) { sound = Utility.RandomList(0x322); } else { sound = Utility.RandomList(0x432); } break; case CustomizationType.EmoteHiccup: text = "*hiccup*"; if (player.Female) { sound = Utility.RandomList(0x31E); } else { sound = Utility.RandomList(0x42E); } break; case CustomizationType.EmoteConfused: text = "*huh*"; if (player.Female) { sound = Utility.RandomList(0x31F); } else { sound = Utility.RandomList(0x42F); } break; case CustomizationType.EmoteGroan: text = "*groans*"; if (player.Female) { sound = Utility.RandomList(0x31B); } else { sound = Utility.RandomList(0x42B); } break; case CustomizationType.EmoteBurp: text = "*burp*"; if (player.Female) { sound = Utility.RandomList(0x30E); } else { sound = Utility.RandomList(0x41D); } break; case CustomizationType.EmoteGreet: text = "*waves*"; if (player.Female) { sound = Utility.RandomList(0x31D); } else { sound = Utility.RandomList(0x42D); } break; case CustomizationType.EmoteLaugh: text = "*laughs*"; if (player.Female) { sound = Utility.RandomList(0x31A, 0x321); } else { sound = Utility.RandomList(0x42A, 0x431); } break; case CustomizationType.EmoteClap: text = "*claps*"; if (player.Female) { sound = Utility.RandomList(0x30C); } else { sound = Utility.RandomList(0x41B); } break; case CustomizationType.EmoteCough: text = "*coughs*"; if (player.Female) { sound = Utility.RandomList(0x311, 0x312); } else { sound = Utility.RandomList(0x420, 0x421); } break; case CustomizationType.EmoteCry: text = "*cries*"; if (player.Female) { sound = Utility.RandomList(0x313); } else { sound = Utility.RandomList(0x422); } break; case CustomizationType.EmoteFart: text = "*farts*"; if (player.Female) { sound = Utility.RandomList(0x318); } else { sound = Utility.RandomList(0x428); } break; case CustomizationType.EmoteSurprised: text = "*looks surprised*"; if (player.Female) { sound = Utility.RandomList(0x319, 0x323, 0x32B); } else { sound = Utility.RandomList(0x429, 0x433, 0x43D); } break; case CustomizationType.EmoteAnger: text = "*looks angry*"; if (player.Female) { sound = Utility.RandomList(0x31C); } else { sound = Utility.RandomList(0x42C); } break; case CustomizationType.EmoteKiss: text = "*kisses*"; if (player.Female) { sound = Utility.RandomList(0x320); } else { sound = Utility.RandomList(0x430); } break; case CustomizationType.EmoteHurt: text = "*looks hurt*"; if (player.Female) { sound = Utility.RandomList(0x14B, 0x14C, 0x14D, 0x14E, 0x14F, 0x57E, 0x57B); } else { sound = Utility.RandomList(0x154, 0x155, 0x156, 0x159, 0x589, 0x5F6, 0x436, 0x437, 0x43B, 0x43C); } break; case CustomizationType.EmoteOops: text = "*oops*"; if (player.Female) { sound = Utility.RandomList(0x32C); } else { sound = Utility.RandomList(0x43E); } break; case CustomizationType.EmotePuke: text = "*pukes*"; if (player.Female) { sound = Utility.RandomList(0x32D); } else { sound = Utility.RandomList(0x43F); } break; case CustomizationType.EmoteYell: text = "*yells*"; if (player.Female) { sound = Utility.RandomList(0x32E, 0x338); } else { sound = Utility.RandomList(0x440, 0x44A); } break; case CustomizationType.EmoteShush: text = "*shh*"; if (player.Female) { sound = Utility.RandomList(0x32F); } else { sound = Utility.RandomList(0x441); } break; case CustomizationType.EmoteSick: text = "*looks sick*"; if (player.Female) { sound = Utility.RandomList(0x30D, 0x331, 0x332); } else { sound = Utility.RandomList(0x41F, 0x443, 0x444); } break; case CustomizationType.EmoteSleep: text = "*looks tired*"; if (player.Female) { sound = Utility.RandomList(0x333, 0x336); } else { sound = Utility.RandomList(0x445, 0x448); } break; case CustomizationType.EmoteWhistle: text = "*whistles*"; if (player.Female) { sound = Utility.RandomList(0x335); } else { sound = Utility.RandomList(0x447); } break; case CustomizationType.EmoteSpit: text = "*spits*"; if (player.Female) { sound = Utility.RandomList(0x334); } else { sound = Utility.RandomList(0x446); } break; } player.PublicOverheadMessage(MessageType.Emote, 0, false, text); player.PlaySound(sound); }
public override void OnDoubleClick(Mobile from) { base.OnDoubleClick(from); PlayerMobile player = from as PlayerMobile; if (player == null) { return; } if (!Visible) { return; } if (player.AccessLevel > AccessLevel.Player) { return; } if (Utility.GetDistance(from.Location, Location) > 1) { from.SendMessage("You are too far way from that to use it."); return; } if (player.LastPlayerCombatTime + UOACZSystem.TunnelDigPvPThreshold > DateTime.UtcNow) { string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, player.LastPlayerCombatTime + UOACZSystem.TunnelDigPvPThreshold, false, true, true, true, true); player.SendMessage("You have been in combat with another player too recently and must wait " + timeRemaining + " before you may use this a tunnel."); return; } List <UOACZTunnel> m_Destinations = new List <UOACZTunnel>(); foreach (UOACZTunnel tunnel in m_Instances) { if (tunnel == null) { continue; } if (tunnel.Deleted) { continue; } if (!UOACZRegion.ContainsItem(tunnel)) { continue; } if (TunnelType == TunnelLocation.Town && tunnel.TunnelType == TunnelLocation.Town) { continue; } if (TunnelType == TunnelLocation.Wilderness && tunnel.TunnelType == TunnelLocation.Wilderness) { continue; } m_Destinations.Add(tunnel); } if (m_Destinations.Count == 0) { return; } Effects.PlaySound(Location, Map, 0x247); Effects.SendLocationEffect(Location, Map, 0x3728, 10, 10, 0, 0); TimedStatic dirt = new TimedStatic(Utility.RandomList(7681, 7682), 5); dirt.Name = "dirt"; dirt.MoveToWorld(Location, Map); dirt.PublicOverheadMessage(MessageType.Regular, 0, false, "*goes into tunnel*"); UOACZPersistance.CheckAndCreateUOACZAccountEntry(player); player.m_UOACZAccountEntry.TunnelsUsed++; for (int b = 0; b < 8; b++) { dirt = new TimedStatic(Utility.RandomList(7681, 7682), 5); dirt.Name = "dirt"; Point3D dirtLocation = new Point3D(Location.X + Utility.RandomList(-2, -1, 1, 2), Location.Y + Utility.RandomList(-2, -1, 1, 2), Location.Z); SpellHelper.AdjustField(ref dirtLocation, from.Map, 12, false); dirt.MoveToWorld(dirtLocation, Map); } UOACZTunnel targetTunnel = m_Destinations[Utility.RandomMinMax(0, m_Destinations.Count - 1)]; Visible = false; player.Location = targetTunnel.Location; foreach (Mobile follower in player.AllFollowers) { if (UOACZSystem.IsUOACZValidMobile(follower)) { follower.Location = targetTunnel.Location; } } if (targetTunnel.TunnelType == TunnelLocation.Wilderness) { from.SendMessage("The tunnel collapses behind you and you find yourself in the wilderness."); } else { from.SendMessage("The tunnel collapses behind you and you find yourself in town."); } Effects.SendLocationEffect(targetTunnel.Location, targetTunnel.Map, 0x3728, 10, 10, 0, 0); Effects.PlaySound(targetTunnel.Location, targetTunnel.Map, 0x247); dirt = new TimedStatic(Utility.RandomList(7681, 7682), 5); dirt.Name = "dirt"; dirt.MoveToWorld(targetTunnel.Location, Map); dirt.PublicOverheadMessage(MessageType.Regular, 0, false, "*appears from tunnel*"); for (int b = 0; b < 8; b++) { dirt = new TimedStatic(Utility.RandomList(7681, 7682), 5); dirt.Name = "dirt"; Point3D dirtLocation = new Point3D(targetTunnel.Location.X + Utility.RandomList(-2, -1, 1, 2), targetTunnel.Location.Y + Utility.RandomList(-2, -1, 1, 2), targetTunnel.Location.Z); SpellHelper.AdjustField(ref dirtLocation, Map, 12, false); dirt.MoveToWorld(dirtLocation, Map); } }
public override void OnDeath(Mobile mobile) { base.OnDeath(mobile); PlayerMobile player = mobile as PlayerMobile; if (player == null) { return; } if (player.AccessLevel > AccessLevel.Player) { return; } if (!UOACZPersistance.Active) { return; } UOACZPersistance.CheckAndCreateUOACZAccountEntry(player); player.Frozen = true; Queue m_Queue = new Queue(); foreach (BaseCreature creature in player.AllFollowers) { if (UOACZRegion.ContainsMobile(creature)) { m_Queue.Enqueue(creature); } } while (m_Queue.Count > 0) { BaseCreature creature = (BaseCreature)m_Queue.Dequeue(); int damage = (int)(Math.Round((double)creature.HitsMax * UOACZSystem.SwarmControllerDeathDamageScalar)); new Blood().MoveToWorld(creature.Location, creature.Map); AOS.Damage(creature, damage, 0, 100, 0, 0, 0); if (UOACZSystem.IsUOACZValidMobile(creature)) { if (creature.AIObject != null && creature.Controlled) { creature.AIObject.DoOrderRelease(); if (creature is UOACZBaseUndead) { UOACZBaseUndead undeadCreature = creature as UOACZBaseUndead; undeadCreature.m_LastActivity = DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(3)); undeadCreature.m_NeedWaypoint = true; undeadCreature.CanTeleportToBaseNode = true; undeadCreature.InWilderness = true; } } } } Timer.DelayCall(TimeSpan.FromSeconds(.5), delegate { if (player == null) { return; } if (player.Deleted) { return; } if (!UOACZRegion.ContainsMobile(player)) { return; } if (!UOACZPersistance.Active) { return; } UOACZPersistance.CheckAndCreateUOACZAccountEntry(player); player.m_UOACZAccountEntry.UndeadProfile.Deaths++; }); Timer.DelayCall(TimeSpan.FromSeconds(2), delegate { if (player == null) { return; } if (player.Deleted) { return; } if (!UOACZRegion.ContainsMobile(player)) { return; } if (!UOACZPersistance.Active) { return; } UOACZPersistance.CheckAndCreateUOACZAccountEntry(player); UOACZDestination destination; bool lostFoodWater = false; bool lostBrains = false; player.m_UOACZAccountEntry.FatigueExpiration = DateTime.UtcNow + UOACZSystem.FatigueDuration; switch (player.m_UOACZAccountEntry.ActiveProfile) { case UOACZAccountEntry.ActiveProfileType.Human: if (player.m_UOACZAccountEntry.HumanProfile.HonorPoints <= UOACZSystem.HonorAggressionThreshold) { destination = UOACZDestination.GetRandomEntrance(false); if (destination != null) { player.MoveToWorld(destination.Location, destination.Map); } else { player.MoveToWorld(UOACZPersistance.DefaultUndeadLocation, UOACZPersistance.DefaultMap); } } else { destination = UOACZDestination.GetRandomEntrance(true); if (destination != null) { player.MoveToWorld(destination.Location, destination.Map); } else { player.MoveToWorld(UOACZPersistance.DefaultHumanLocation, UOACZPersistance.DefaultMap); } } player.Resurrect(); player.RevealingAction(); player.Frozen = false; #region Auto-Reequip Blessed Gear if (player.Backpack != null) { if (!player.Backpack.Deleted) { Item deathRobe = player.FindItemOnLayer(Layer.OuterTorso); if (!(deathRobe is DeathRobe)) { deathRobe = null; } UOACZSurvivalMachete survivalMachete = null; UOACZSurvivalLantern survivalLantern = null; List <Item> m_LayerShirt = new List <Item>(); List <Item> m_MiddleTorso = new List <Item>(); List <Item> m_OuterLegs = new List <Item>(); List <Item> m_Pants = new List <Item>(); List <Item> m_Shoes = new List <Item>(); List <Item> m_BackpackItems = player.Backpack.Items; bool foundPants = false; foreach (Item item in m_BackpackItems) { if (item is UOACZSurvivalMachete) { survivalMachete = item as UOACZSurvivalMachete; } //if (item is UOACZSurvivalLantern) //survivalLantern = item as UOACZSurvivalLantern; if (item.Layer == Layer.Shirt) { m_LayerShirt.Add(item); } if (item.Layer == Layer.MiddleTorso) { m_MiddleTorso.Add(item); } if (item.Layer == Layer.OuterLegs) { m_OuterLegs.Add(item); foundPants = true; } if (item.Layer == Layer.Pants) { m_Pants.Add(item); foundPants = true; } if (item.Layer == Layer.Shoes) { m_Shoes.Add(item); } } if (survivalMachete != null) { player.AddItem(survivalMachete); } //if (survivalLantern != null) //player.AddItem(survivalLantern); if (foundPants && deathRobe != null) { deathRobe.Delete(); } if (m_LayerShirt.Count > 0) { player.AddItem(m_LayerShirt[0]); } if (m_MiddleTorso.Count > 0) { player.AddItem(m_MiddleTorso[0]); } if (m_OuterLegs.Count > 0) { player.AddItem(m_OuterLegs[0]); } if (m_Pants.Count > 0) { player.AddItem(m_Pants[0]); } if (m_Shoes.Count > 0) { player.AddItem(m_Shoes[0]); } } } #endregion UOACZSystem.ApplyActiveProfile(player); player.Hits = (int)Math.Ceiling(UOACZSystem.HumanRessStatsPercent * (double)player.HitsMax); player.Stam = (int)Math.Ceiling(UOACZSystem.HumanRessStatsPercent * (double)player.StamMax); player.Mana = (int)Math.Ceiling(UOACZSystem.HumanRessStatsPercent * (double)player.ManaMax); if (player.Backpack != null) { Item[] consumptionItem = player.Backpack.FindItemsByType(typeof(UOACZConsumptionItem)); m_Queue = new Queue(); for (int a = 0; a < consumptionItem.Length; a++) { UOACZConsumptionItem foodItem = consumptionItem[a] as UOACZConsumptionItem; if (foodItem == null) { continue; } if (Utility.RandomDouble() <= UOACZSystem.HumanDeathFoodWaterLossChance) { lostFoodWater = true; if (foodItem.Charges > 1) { foodItem.Charges = (int)Math.Floor((double)foodItem.Charges / 2); } else { m_Queue.Enqueue(foodItem); } } } while (m_Queue.Count > 0) { Item item = (Item)m_Queue.Dequeue(); item.Delete(); } } Timer.DelayCall(TimeSpan.FromSeconds(.5), delegate { if (!UOACZSystem.IsUOACZValidMobile(player)) { return; } player.m_UOACZAccountEntry.HumanProfile.CauseOfDeath = UOACZAccountEntry.HumanProfileEntry.CauseOfDeathType.Misc; player.m_UOACZAccountEntry.HumanDeaths++; if (player.IsUOACZHuman) { if (player.m_UOACZAccountEntry.HumanAbilitiesHotbarDisplayed) { player.CloseGump(typeof(HumanProfileAbilitiesHotbarGump)); player.SendGump(new HumanProfileAbilitiesHotbarGump(player)); } if (player.m_UOACZAccountEntry.HumanStatsHotbarDisplayed) { player.CloseGump(typeof(HumanProfileStatsHotbarGump)); player.SendGump(new HumanProfileStatsHotbarGump(player)); } if (player.m_UOACZAccountEntry.ObjectivesDisplayed) { player.CloseGump(typeof(ObjectivesHotbarGump)); player.SendGump(new ObjectivesHotbarGump(player)); } } }); break; case UOACZAccountEntry.ActiveProfileType.Undead: destination = UOACZDestination.GetRandomEntrance(false); player.m_UOACZAccountEntry.UndeadDeaths++; if (destination != null) { player.MoveToWorld(destination.Location, destination.Map); } else { player.MoveToWorld(UOACZPersistance.DefaultUndeadLocation, UOACZPersistance.DefaultMap); } player.Resurrect(); player.RevealingAction(); player.Frozen = false; if (player.Backpack != null) { Item[] brainItems = player.Backpack.FindItemsByType(typeof(UOACZBrains)); m_Queue = new Queue(); for (int a = 0; a < brainItems.Length; a++) { UOACZBrains brainItem = brainItems[a] as UOACZBrains; if (brainItem == null) { continue; } if (Utility.RandomDouble() <= UOACZSystem.UndeadDeathBrainLossChance) { lostBrains = true; m_Queue.Enqueue(brainItem); } } while (m_Queue.Count > 0) { Item item = (Item)m_Queue.Dequeue(); item.Delete(); } } UOACZSystem.ApplyActiveProfile(player); player.Hits = (int)Math.Ceiling(UOACZSystem.UndeadRessStatsPercent * (double)player.HitsMax); player.Stam = (int)Math.Ceiling(UOACZSystem.UndeadRessStatsPercent * (double)player.StamMax); player.Mana = (int)Math.Ceiling(UOACZSystem.UndeadRessStatsPercent * (double)player.ManaMax); if (player.m_UOACZAccountEntry.UndeadAbilitiesHotbarDisplayed) { player.CloseGump(typeof(UndeadProfileAbilitiesHotbarGump)); player.SendGump(new UndeadProfileAbilitiesHotbarGump(player)); } if (player.m_UOACZAccountEntry.UndeadStatsHotbarDisplayed) { player.CloseGump(typeof(UndeadProfileStatsHotbarGump)); player.SendGump(new UndeadProfileStatsHotbarGump(player)); } if (player.m_UOACZAccountEntry.ObjectivesDisplayed) { player.CloseGump(typeof(ObjectivesHotbarGump)); player.SendGump(new ObjectivesHotbarGump(player)); } break; } string fatigueDuration = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + UOACZSystem.FatigueDuration, false, true, true, true, true); string fatiguePercentText = ((1.0 - UOACZSystem.FatigueActiveScalar) * 100).ToString() + "%"; player.SendMessage(UOACZSystem.orangeTextHue, "You have died and will be subject to a -" + fatiguePercentText + " PvP penalty for " + fatigueDuration + "."); Timer.DelayCall(TimeSpan.FromSeconds(2), delegate { if (player == null) { return; } if (player.IsUOACZHuman && lostFoodWater) { player.SendMessage(UOACZSystem.orangeTextHue, "As a result of your death, some of your food and water has been been lost."); } if (player.IsUOACZUndead && lostBrains) { player.SendMessage(UOACZSystem.orangeTextHue, "As a result of your death, some of your brains have been been lost."); } }); }); }
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 override void OnResponse(NetState sender, RelayInfo info) { if (m_Player == null) { return; } Account account = m_Player.Account as Account; if (account == null) { return; } bool closeGump = true; if (m_SelectionIndex > 2) { m_SelectionIndex = 0; } int resurrectionTotalCost = 0; int goldAvailableInBank = 0; int goldAvailableInAccount = 0; int punishableMurderCounts = m_Player.MurderCounts - Mobile.MurderCountsRequiredForMurderer; if (punishableMurderCounts < 0) { punishableMurderCounts = 0; } if (m_SelectionIndex == 0) { resurrectionTotalCost = punishableMurderCounts * PlayerMobile.RessPenaltyAccountWideAggressionRestrictionFeePerCount; } if (m_SelectionIndex == 1) { resurrectionTotalCost = punishableMurderCounts * PlayerMobile.RessPenaltyEffectivenessReductionFeePerCount; } if (m_SelectionIndex == 2) { resurrectionTotalCost = punishableMurderCounts * PlayerMobile.RessPenaltyNoPenaltyFeePerCount; } foreach (Mobile mobile in account.accountMobiles) { if (mobile == null) { continue; } if (mobile.Deleted) { continue; } if (mobile == m_Player) { goldAvailableInBank += Banker.GetBalance(m_Player); } goldAvailableInAccount += Banker.GetBalance(mobile); } switch (info.ButtonID) { //Guide case 1: closeGump = false; break; //Account-Wide Aggression Restriction case 2: m_SelectionIndex = 0; m_Confirmed = false; m_Player.SendSound(SelectionSound); closeGump = false; break; //Player Effectiveness Penalty case 3: m_SelectionIndex = 1; m_Confirmed = false; m_Player.SendSound(SelectionSound); closeGump = false; break; //Full Cost case 4: m_SelectionIndex = 2; m_Confirmed = false; m_Player.SendSound(SelectionSound); closeGump = false; break; //Apply case 5: if (resurrectionTotalCost > goldAvailableInAccount) { m_Player.SendMessage(1256, "That resurrection option costs more gold than you have available across your character's bank accounts."); closeGump = false; } else if (m_Confirmed) { int goldRemaining = resurrectionTotalCost; if (goldAvailableInBank >= goldRemaining) { Banker.Withdraw(m_Player, goldRemaining); goldRemaining = 0; if (m_Player.NetState != null) { m_Player.PrivateOverheadMessage(MessageType.Regular, 0, false, "Withdrew " + resurrectionTotalCost.ToString() + " gold from your bank.", m_Player.NetState); } } if (goldRemaining > 0) { foreach (Mobile mobile in account.accountMobiles) { if (goldRemaining <= 0) { continue; } if (mobile == null) { continue; } if (mobile.Deleted) { continue; } if (mobile == m_Player) { continue; } int goldAvailableOnCharacter = Banker.GetBalance(mobile); if (goldAvailableOnCharacter >= goldRemaining) { int goldWithdrawn = goldRemaining; goldRemaining = 0; Banker.Withdraw(mobile, goldRemaining); if (m_Player.NetState != null) { m_Player.PrivateOverheadMessage(MessageType.Regular, 0, false, "Withdrew " + goldWithdrawn.ToString() + " gold from " + mobile.RawName + "'s bank.", m_Player.NetState); } } else { goldRemaining -= goldAvailableOnCharacter; Banker.Withdraw(mobile, goldAvailableOnCharacter); if (m_Player.NetState != null) { m_Player.PrivateOverheadMessage(MessageType.Regular, 0, false, "Withdrew " + goldAvailableOnCharacter.ToString() + " gold from " + mobile.RawName + "'s bank.", m_Player.NetState); } } } } //Aggressive Action Restriction if (m_SelectionIndex == 0) { m_Player.RessPenaltyExpiration = DateTime.UtcNow + PlayerMobile.RessPenaltyDuration; m_Player.m_RessPenaltyAccountWideAggressionRestriction = true; string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, m_Player.RessPenaltyExpiration, false, true, true, true, false); m_Player.SendMessage(2550, "Your murder counts have been reset to " + Mobile.MurderCountsRequiredForMurderer.ToString() + ". All characters on your account will be restricted from making aggressive actions for the next " + timeRemaining + "."); } //Damage, Healing, Fizzle Penalty else if (m_SelectionIndex == 1) { if (m_Player.RessPenaltyExpiration > DateTime.UtcNow) { m_Player.m_RessPenaltyEffectivenessReductionCount++; } else { m_Player.m_RessPenaltyEffectivenessReductionCount = 1; } m_Player.RessPenaltyExpiration = DateTime.UtcNow + PlayerMobile.RessPenaltyDuration; string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, m_Player.RessPenaltyExpiration, false, true, true, true, false); m_Player.SendMessage(2550, "Your murder counts have been reset to " + Mobile.MurderCountsRequiredForMurderer.ToString() + ". Your character's combat penalty will be active for the next " + timeRemaining + "."); } //No Penalty else if (m_SelectionIndex == 2) { m_Player.SendMessage(2550, "Your murder counts have been reset to " + Mobile.MurderCountsRequiredForMurderer.ToString() + " and you resurrect with no additional penalties."); } m_Player.MurderCounts = Mobile.MurderCountsRequiredForMurderer; Timer.DelayCall(TimeSpan.FromSeconds(5), delegate { if (m_Player == null) { return; } m_Player.SendMessage(2550, "You may use [ConsiderSins or say 'I must consider my sins' at any time to view any current resurrection penalties you may have in place."); }); m_Player.Resurrect(); } else { m_Confirmed = true; m_Player.SendSound(LargeSelectionSound); m_Player.SendMessage(63, "Click 'Apply' again to confirm your selection."); closeGump = false; } break; } if (closeGump) { m_Player.SendSound(closeGumpSound); } else { m_Player.CloseGump(typeof(MurderPenaltyGump)); m_Player.SendGump(new MurderPenaltyGump(m_Player, m_PreviewMode, m_SelectionIndex, m_Confirmed)); } }
public override void OnResponse(NetState sender, RelayInfo info) { if (m_Player == null) { return; } if (m_Player.m_DamageTracker == null) { return; } bool closeGump = true; if (m_Player.m_DamageTracker.m_Collapsed) { switch (info.ButtonID) { //Expand case 1: m_Player.m_DamageTracker.m_Collapsed = false; closeGump = false; break; //Clear Results case 2: m_Player.m_DamageTracker.ClearResults(); closeGump = false; break; //Start and Stop case 3: if (m_Player.m_DamageTracker.m_Running) { m_Player.m_DamageTracker.StopTimer(); } else { m_Player.m_DamageTracker.StartTimer(); } closeGump = false; break; } } else { switch (info.ButtonID) { //Collapse case 1: m_Player.m_DamageTracker.m_Collapsed = true; closeGump = false; break; //Clear Results case 2: m_Player.m_DamageTracker.ClearResults(); m_Player.SendMessage("Damage Tracker results and time elapsed reset."); closeGump = false; break; //Start and Stop case 3: if (m_Player.m_DamageTracker.m_Running) { m_Player.m_DamageTracker.StopTimer(); m_Player.SendMessage("Damage Tracker paused."); } else { m_Player.m_DamageTracker.StartTimer(); m_Player.SendMessage("Damage Tracker started."); } closeGump = false; break; //Auto-Stop case 4: m_Player.m_DamageTracker.AutoStopEnabled = !m_Player.m_DamageTracker.AutoStopEnabled; string autoStopTime = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + m_Player.m_DamageTracker.AutoStopDuration, false, false, true, true, true); if (m_Player.m_DamageTracker.AutoStopEnabled) { m_Player.SendMessage("Damage Tracker will now automatically stop after " + autoStopTime + " has elapsed."); } else { m_Player.SendMessage("Damage Tracker will now run freely."); } closeGump = false; break; //Auto-Stop: Add 1 Hour case 5: m_Player.m_DamageTracker.AutoStopDuration = m_Player.m_DamageTracker.AutoStopDuration + TimeSpan.FromMinutes(60); closeGump = false; break; //Auto-Stop: Remove 1 Hour case 6: if (m_Player.m_DamageTracker.AutoStopDuration.Hours > 0) { m_Player.m_DamageTracker.AutoStopDuration = m_Player.m_DamageTracker.AutoStopDuration - TimeSpan.FromMinutes(60); if (m_Player.m_DamageTracker.AutoStopDuration < DamageTracker.AutoStopMinimumDuration) { m_Player.m_DamageTracker.AutoStopDuration = DamageTracker.AutoStopMinimumDuration; } } closeGump = false; break; //Auto-Stop: Add 1 Minute case 7: m_Player.m_DamageTracker.AutoStopDuration = m_Player.m_DamageTracker.AutoStopDuration + TimeSpan.FromMinutes(1); closeGump = false; break; //Auto-Stop: Remove 1 Minute case 8: if (m_Player.m_DamageTracker.AutoStopDuration.Minutes > 0 || m_Player.m_DamageTracker.AutoStopDuration.Hours > 0) { m_Player.m_DamageTracker.AutoStopDuration = m_Player.m_DamageTracker.AutoStopDuration - TimeSpan.FromMinutes(1); if (m_Player.m_DamageTracker.AutoStopDuration < DamageTracker.AutoStopMinimumDuration) { m_Player.m_DamageTracker.AutoStopDuration = DamageTracker.AutoStopMinimumDuration; } } closeGump = false; break; //Auto-Stop: Add 5 Seconds case 9: m_Player.m_DamageTracker.AutoStopDuration = m_Player.m_DamageTracker.AutoStopDuration + TimeSpan.FromSeconds(5); closeGump = false; break; //Auto-Stop: Remove 5 Seconds case 10: if (m_Player.m_DamageTracker.AutoStopDuration.Seconds > 5 || m_Player.m_DamageTracker.AutoStopDuration.Minutes > 0 || m_Player.m_DamageTracker.AutoStopDuration.Hours > 0) { m_Player.m_DamageTracker.AutoStopDuration = m_Player.m_DamageTracker.AutoStopDuration - TimeSpan.FromSeconds(5); if (m_Player.m_DamageTracker.AutoStopDuration < DamageTracker.AutoStopMinimumDuration) { m_Player.m_DamageTracker.AutoStopDuration = DamageTracker.AutoStopMinimumDuration; } } closeGump = false; break; //Add to Total: Melee case 20: m_Player.m_DamageTracker.AddMeleeDamageToTotal = !m_Player.m_DamageTracker.AddMeleeDamageToTotal; if (m_Player.m_DamageTracker.AddMeleeDamageToTotal) { m_Player.SendMessage("Your melee damage inflicted will now be added to Total damage."); } else { m_Player.SendMessage("Your melee damage inflicted will no longer be added to Total damage."); } closeGump = false; break; //Add to Total: Spell case 21: m_Player.m_DamageTracker.AddSpellDamageToTotal = !m_Player.m_DamageTracker.AddSpellDamageToTotal; if (m_Player.m_DamageTracker.AddSpellDamageToTotal) { m_Player.SendMessage("Your spell damage inflicted will now be added to Total damage."); } else { m_Player.SendMessage("Your spell damage inflicted will no longer be added to Total damage."); } closeGump = false; break; //Add to Total: Poison case 22: m_Player.m_DamageTracker.AddPoisonDamageToTotal = !m_Player.m_DamageTracker.AddPoisonDamageToTotal; if (m_Player.m_DamageTracker.AddPoisonDamageToTotal) { m_Player.SendMessage("Your poison damage inflicted will now be added to Total damage."); } else { m_Player.SendMessage("Your poison damage inflicted will no longer be added to Total damage."); } closeGump = false; break; //Add to Total: Provocation case 23: m_Player.m_DamageTracker.AddProvocationDamageToTotal = !m_Player.m_DamageTracker.AddProvocationDamageToTotal; if (m_Player.m_DamageTracker.AddPoisonDamageToTotal) { m_Player.SendMessage("Damage caused by your provoked creatures will now be added to Total damage."); } else { m_Player.SendMessage("Damaged caused by your provoked creatures will no longer be added to Total damage."); } closeGump = false; break; //Add to Total: Follower case 24: m_Player.m_DamageTracker.AddFollowerDamageToTotal = !m_Player.m_DamageTracker.AddFollowerDamageToTotal; if (m_Player.m_DamageTracker.AddPoisonDamageToTotal) { m_Player.SendMessage("Damage caused by your followers will now be added to Total damage."); } else { m_Player.SendMessage("Damage caused by your followers will no longer be added to Total damage."); } closeGump = false; break; } } if (!closeGump) { m_Player.CloseGump(typeof(DamageTrackerGump)); m_Player.SendGump(new DamageTrackerGump(m_Player)); } }
public DamageTrackerGump(PlayerMobile player) : base(10, 10) { if (player == null) { return; } if (player.Deleted) { return; } if (player.m_DamageTracker == null) { return; } m_Player = player; Closable = true; Disposable = true; Dragable = true; Resizable = false; int textHue = 2036; int totalDamage = 0; if (player.m_DamageTracker.AddMeleeDamageToTotal) { totalDamage += player.m_DamageTracker.MeleeDamage; } if (player.m_DamageTracker.AddSpellDamageToTotal) { totalDamage += player.m_DamageTracker.SpellDamage; } if (player.m_DamageTracker.AddFollowerDamageToTotal) { totalDamage += player.m_DamageTracker.FollowerDamage; } if (player.m_DamageTracker.AddProvocationDamageToTotal) { totalDamage += player.m_DamageTracker.ProvocationDamage; } if (player.m_DamageTracker.AddPoisonDamageToTotal) { totalDamage += player.m_DamageTracker.PoisonDamage; } string timeElapsed = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + m_Player.m_DamageTracker.RunningTime, true, false, true, true, true); if (m_Player.m_DamageTracker.RunningTime == TimeSpan.FromSeconds(0)) { timeElapsed = "0s"; } string autostopHours = m_Player.m_DamageTracker.AutoStopDuration.Hours.ToString() + "h"; string autostopMinutes = m_Player.m_DamageTracker.AutoStopDuration.Minutes.ToString() + "m"; string autostopSeconds = m_Player.m_DamageTracker.AutoStopDuration.Seconds.ToString() + "s"; if (player.m_DamageTracker.m_Collapsed) { AddAlphaRegion(9, 7, 150, 90); AddButton(16, 18, 9900, 9900, 1, GumpButtonType.Reply, 0); //Expand Gump AddLabel(42, 17, 2577, "Total Damage"); AddLabel(130, 17, textHue, Utility.CreateCurrencyString(totalDamage)); AddItem(39, 38, 6160); //Hour Glass AddButton(46, 69, 4017, 4019, 2, GumpButtonType.Reply, 0); //Reset //Running if (m_Player.m_DamageTracker.m_Running) { AddLabel(72, 43, 63, timeElapsed); AddButton(88, 69, 4020, 4022, 3, GumpButtonType.Reply, 0); //Pause } //Paused else { AddLabel(72, 43, 2213, timeElapsed); AddButton(88, 69, 4005, 4007, 3, GumpButtonType.Reply, 0); //Start } } else { AddAlphaRegion(3, 9, 169, 376); //Collapse AddButton(16, 20, 9906, 9906, 1, GumpButtonType.Reply, 0); //Collapse Gump //Damage Dealt AddImage(40, 17, 2445, 2425); AddLabel(52, 18, textHue, "Damage Dealt"); AddLabel(49, 45, 34, "Melee"); if (player.m_DamageTracker.AddMeleeDamageToTotal) { AddButton(91, 45, 211, 210, 20, GumpButtonType.Reply, 0); } else { AddButton(91, 45, 210, 211, 20, GumpButtonType.Reply, 0); } AddLabel(117, 45, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.MeleeDamage)); AddLabel(52, 65, 117, "Spell"); if (player.m_DamageTracker.AddSpellDamageToTotal) { AddButton(91, 65, 211, 210, 21, GumpButtonType.Reply, 0); } else { AddButton(91, 65, 210, 211, 21, GumpButtonType.Reply, 0); } AddLabel(117, 65, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.SpellDamage)); AddLabel(42, 85, 63, "Poison"); if (player.m_DamageTracker.AddPoisonDamageToTotal) { AddButton(91, 85, 211, 210, 22, GumpButtonType.Reply, 0); } else { AddButton(91, 85, 210, 211, 22, GumpButtonType.Reply, 0); } AddLabel(117, 85, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.PoisonDamage)); AddLabel(11, 105, 2417, "Provocation"); if (player.m_DamageTracker.AddProvocationDamageToTotal) { AddButton(91, 105, 211, 210, 23, GumpButtonType.Reply, 0); } else { AddButton(91, 105, 210, 211, 23, GumpButtonType.Reply, 0); } AddLabel(117, 105, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.ProvocationDamage)); AddLabel(26, 125, 89, "Followers"); if (player.m_DamageTracker.AddFollowerDamageToTotal) { AddButton(91, 125, 211, 210, 24, GumpButtonType.Reply, 0); } else { AddButton(91, 125, 210, 211, 24, GumpButtonType.Reply, 0); } AddLabel(117, 125, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.FollowerDamage)); AddLabel(48, 144, 2577, "Total"); AddLabel(117, 144, textHue, Utility.CreateCurrencyString(totalDamage)); //Damage Taken AddImage(40, 169, 2445, 2425); AddLabel(50, 171, textHue, "Damage Taken"); AddLabel(82, 198, 2603, "Self"); AddLabel(117, 198, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.DamageTaken)); AddLabel(52, 219, 2562, "Followers"); AddLabel(117, 219, textHue, Utility.CreateCurrencyString(player.m_DamageTracker.FollowerDamageTaken)); //Stop Timer At AddImage(40, 243, 2445, 2425); AddLabel(49, 245, textHue, "Stop Timer At"); if (m_Player.m_DamageTracker.AutoStopEnabled) { AddButton(18, 283, 2154, 2151, 4, GumpButtonType.Reply, 0); } else { AddButton(18, 283, 2151, 2154, 4, GumpButtonType.Reply, 0); } //Hours AddButton(58, 273, 5600, 5600, 5, GumpButtonType.Reply, 0); AddLabel(Utility.CenteredTextOffset(65, autostopHours), 288, textHue, autostopHours); AddButton(58, 308, 5606, 5606, 6, GumpButtonType.Reply, 0); AddButton(91, 273, 5600, 5600, 7, GumpButtonType.Reply, 0); AddLabel(Utility.CenteredTextOffset(98, autostopMinutes), 288, textHue, autostopMinutes); AddButton(91, 308, 5606, 5606, 8, GumpButtonType.Reply, 0); AddButton(122, 273, 5600, 5600, 9, GumpButtonType.Reply, 0); AddLabel(Utility.CenteredTextOffset(130, autostopSeconds), 288, textHue, autostopSeconds); AddButton(122, 308, 5606, 5606, 10, GumpButtonType.Reply, 0); //Reset AddLabel(8, 330, 2116, "Reset"); AddButton(50, 330, 4017, 4019, 2, GumpButtonType.Reply, 0); //Running if (m_Player.m_DamageTracker.m_Running) { AddLabel(77, 361, 63, timeElapsed); //Time Elapsed AddLabel(93, 331, 2599, "Pause"); AddButton(134, 329, 4020, 4022, 3, GumpButtonType.Reply, 0); } //Paused else { AddLabel(77, 361, 2213, timeElapsed); //Time Elapsed AddLabel(93, 331, 2599, "Start"); AddButton(134, 329, 4005, 4007, 3, GumpButtonType.Reply, 0); } AddItem(44, 356, 6160); //Hourglass } }
public DamageTrackerGump(PlayerMobile player) : base(10, 10) { if (player == null) { return; } if (player.Deleted) { return; } if (player.m_DamageTracker == null) { return; } m_Player = player; Closable = true; Disposable = true; Dragable = true; Resizable = false; int textHue = 2036; int totalDamage = 0; if (player.m_DamageTracker.AddMeleeDamageToTotal) { totalDamage += player.m_DamageTracker.MeleeDamage; } if (player.m_DamageTracker.AddSpellDamageToTotal) { totalDamage += player.m_DamageTracker.SpellDamage; } if (player.m_DamageTracker.AddFollowerDamageToTotal) { totalDamage += player.m_DamageTracker.FollowerDamage; } if (player.m_DamageTracker.AddProvocationDamageToTotal) { totalDamage += player.m_DamageTracker.ProvocationDamage; } if (player.m_DamageTracker.AddPoisonDamageToTotal) { totalDamage += player.m_DamageTracker.PoisonDamage; } string timerDuration = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + m_Player.m_DamageTracker.TimerDuration, true, true, true, true, true); string timerAmountElapsed = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + m_Player.m_DamageTracker.TimerAmountElapsed, true, true, true, true, true); if (m_Player.m_DamageTracker.TimerAmountElapsed == TimeSpan.FromSeconds(0)) { timerAmountElapsed = "0s"; } if (player.m_DamageTracker.m_Collapsed) { #region Images AddImage(38, 17, 103, 2499); AddImage(181, 17, 103, 2499); AddImage(48, 25, 2081, 2499); AddImage(48, 37, 2081, 2499); AddItem(43, 46, 6160); #endregion AddButton(9, 16, 9906, 9906, 1, GumpButtonType.Reply, 0); //Expand Gump AddLabel(69, 30, 149, "Time Elapsed"); if (m_Player.m_DamageTracker.TimerAmountElapsed >= m_Player.m_DamageTracker.TimerDuration && !m_Player.m_DamageTracker.m_Running) { AddLabel(77, 50, 2101, timerAmountElapsed); } else { AddLabel(77, 50, 63, timerAmountElapsed); } AddLabel(187, 30, 2577, "Dealt"); AddLabel(229, 30, WhiteTextHue, Utility.CreateCurrencyString(totalDamage)); AddLabel(184, 50, 2603, "Taken"); AddLabel(229, 50, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.DamageTaken)); AddLabel(57, 79, 1256, "Reset Timer"); AddButton(79, 101, 4020, 4022, 2, GumpButtonType.Reply, 0); AddLabel(151, 79, 53, "Clear Damage"); AddButton(176, 98, 9721, 9724, 3, GumpButtonType.Reply, 0); if (player.m_DamageTracker.m_Running) { AddLabel(253, 79, 2599, "Pause"); AddButton(257, 101, 4017, 4019, 4, GumpButtonType.Reply, 0); } else { AddLabel(253, 79, 2599, "Start"); AddButton(257, 101, 4005, 4007, 4, GumpButtonType.Reply, 0); } } else { #region Images AddImage(38, 17, 103, 2499); AddImage(181, 17, 103, 2499); AddImage(181, 110, 103, 2499); AddImage(38, 110, 103, 2499); AddImage(181, 206, 103, 2499); AddImage(39, 206, 103, 2499); AddImage(181, 306, 103, 2499); AddImage(38, 306, 103, 2499); AddImage(48, 25, 2081, 2499); AddImage(48, 94, 2081, 2499); AddImage(47, 160, 2081, 2499); AddImage(47, 225, 2081, 2499); AddImage(47, 293, 2081, 2499); AddImage(48, 326, 2081, 2499); AddImage(51, 165, 3001, 1105); AddImage(65, 165, 3001, 1105); AddImage(51, 238, 3001, 1105); AddImage(65, 238, 3001, 1105); AddImage(51, 333, 3001, 1105); AddImage(65, 333, 3001, 1105); #endregion AddButton(36, 14, 2094, 2095, 5, GumpButtonType.Reply, 0); AddLabel(36, 2, 149, "Guide"); AddButton(9, 16, 9900, 9900, 1, GumpButtonType.Reply, 0); //Collapse Gump //------------ AddLabel(137, 25, 149, "Damage Dealt"); AddLabel(107, 45, 34, "Melee"); if (player.m_DamageTracker.AddMeleeDamageToTotal) { AddButton(149, 45, 211, 210, 6, GumpButtonType.Reply, 0); } else { AddButton(149, 45, 210, 211, 6, GumpButtonType.Reply, 0); } AddLabel(175, 45, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.MeleeDamage)); AddLabel(110, 65, 117, "Spell"); if (player.m_DamageTracker.AddSpellDamageToTotal) { AddButton(149, 65, 211, 210, 7, GumpButtonType.Reply, 0); } else { AddButton(149, 65, 210, 211, 7, GumpButtonType.Reply, 0); } AddLabel(175, 65, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.SpellDamage)); AddLabel(100, 85, 63, "Poison"); if (player.m_DamageTracker.AddPoisonDamageToTotal) { AddButton(149, 85, 211, 210, 8, GumpButtonType.Reply, 0); } else { AddButton(149, 85, 210, 211, 8, GumpButtonType.Reply, 0); } AddLabel(175, 85, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.PoisonDamage)); AddLabel(65, 105, 2417, "Provocation"); if (player.m_DamageTracker.AddProvocationDamageToTotal) { AddButton(149, 105, 211, 210, 9, GumpButtonType.Reply, 0); } else { AddButton(149, 105, 210, 211, 9, GumpButtonType.Reply, 0); } AddLabel(175, 105, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.ProvocationDamage)); AddLabel(81, 125, 89, "Followers"); if (player.m_DamageTracker.AddFollowerDamageToTotal) { AddButton(149, 124, 211, 210, 10, GumpButtonType.Reply, 0); } else { AddButton(149, 124, 210, 211, 10, GumpButtonType.Reply, 0); } AddLabel(175, 125, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.FollowerDamage)); AddLabel(106, 145, 2577, "Total"); AddLabel(175, 145, WhiteTextHue, Utility.CreateCurrencyString(totalDamage)); //---------- AddLabel(136, 170, 149, "Damage Taken"); AddLabel(140, 195, 2603, "Self"); AddLabel(175, 195, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.DamageTaken)); AddLabel(106, 215, 2550, "Followers"); AddLabel(175, 215, WhiteTextHue, Utility.CreateCurrencyString(player.m_DamageTracker.FollowerDamageTaken)); //--------- AddLabel(136, 243, 149, "Damage Timer"); AddLabel(80, 263, 2599, "Force Pause After Duration"); if (player.m_DamageTracker.TimerEnabled) { AddButton(265, 264, 211, 210, 17, GumpButtonType.Reply, 0); } else { AddButton(265, 264, 210, 211, 17, GumpButtonType.Reply, 0); } AddLabel(107, 286, 2599, "Timer Duration"); AddLabel(211, 286, WhiteTextHue, timerDuration); AddButton(70, 314, 2223, 2223, 11, GumpButtonType.Reply, 0); AddLabel(94, 310, WhiteTextHue, "Hour"); AddButton(127, 314, 2224, 2224, 12, GumpButtonType.Reply, 0); AddButton(154, 314, 2223, 2223, 13, GumpButtonType.Reply, 0); AddLabel(177, 310, WhiteTextHue, "Min"); AddButton(202, 314, 2224, 2224, 14, GumpButtonType.Reply, 0); AddButton(228, 314, 2223, 2223, 15, GumpButtonType.Reply, 0); AddLabel(252, 310, WhiteTextHue, "Sec"); AddButton(278, 314, 2224, 2224, 16, GumpButtonType.Reply, 0); //------------- AddLabel(96, 341, 149, "Time Elapsed"); AddItem(165, 338, 6160); if (m_Player.m_DamageTracker.TimerAmountElapsed >= m_Player.m_DamageTracker.TimerDuration && !m_Player.m_DamageTracker.m_Running) { AddLabel(200, 343, 2101, timerAmountElapsed); } else { AddLabel(200, 343, 63, timerAmountElapsed); } //---------- AddLabel(58, 369, 1256, "Reset Timer"); AddButton(81, 391, 4020, 4022, 2, GumpButtonType.Reply, 0); AddLabel(148, 369, 53, "Clear Damage"); AddButton(172, 388, 9721, 9724, 3, GumpButtonType.Reply, 0); if (player.m_DamageTracker.m_Running) { AddLabel(251, 369, 2599, "Pause"); AddButton(256, 391, 4017, 4019, 4, GumpButtonType.Reply, 0); } else { AddLabel(251, 369, 2599, "Start"); AddButton(256, 391, 4005, 4007, 4, GumpButtonType.Reply, 0); } } }
protected override void OnTick() { if (m_ArenaGroupController == null) { Stop(); return; } if (m_ArenaGroupController.Deleted) { Stop(); return; } if (!m_ArenaGroupController.Enabled) { Stop(); return; } if (DateTime.UtcNow >= m_ArenaGroupController.m_NextListingAudit) { m_ArenaGroupController.AuditListings(); } ArenaController emptyArena = m_ArenaGroupController.GetAvailableArena(); if (emptyArena != null) { foreach (ArenaMatch arenaMatch in m_ArenaGroupController.m_MatchListings) { if (!ArenaMatch.IsValidArenaMatch(arenaMatch, null, false)) { continue; } if (DateTime.UtcNow < arenaMatch.m_NextReadyCheck) { continue; } if (!arenaMatch.IsReadyToStart()) { continue; } List <KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType> > m_RulesetViolations = new List <KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType> >(); bool rulesetViolationExists = false; foreach (ArenaTeam arenaTeam in arenaMatch.m_Teams) { if (arenaTeam == null) { continue; } if (arenaTeam.Deleted) { continue; } foreach (ArenaParticipant arenaParticipant in arenaTeam.m_Participants) { if (arenaParticipant == null) { continue; } if (arenaParticipant.Deleted) { continue; } if (arenaParticipant.m_Player == null) { continue; } if (arenaParticipant.Deleted == null) { continue; } if (arenaMatch.m_Ruleset == null) { continue; } ArenaRuleset.ArenaRulesetFailureType rulesetFailure = arenaMatch.m_Ruleset.CheckForRulesetViolations(arenaMatch, arenaParticipant.m_Player); m_RulesetViolations.Add(new KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType>(arenaParticipant.m_Player, rulesetFailure)); if (rulesetFailure != ArenaRuleset.ArenaRulesetFailureType.None) { rulesetViolationExists = true; } } } if (rulesetViolationExists) { arenaMatch.BroadcastMessage("Unable to start match due to the following ruleset violations:", 0); bool arenaError = false; foreach (KeyValuePair <PlayerMobile, ArenaRuleset.ArenaRulesetFailureType> rulesetViolation in m_RulesetViolations) { string message = ""; PlayerMobile player = rulesetViolation.Key; ArenaRuleset.ArenaRulesetFailureType rule = rulesetViolation.Value; if (player == null) { continue; } switch (rulesetViolation.Value) { case ArenaRuleset.ArenaRulesetFailureType.ArenaInvalid: arenaError = true; break; case ArenaRuleset.ArenaRulesetFailureType.Dead: message = player.RawName + ": Not Alive"; break; case ArenaRuleset.ArenaRulesetFailureType.EquipmentAllowed: message = player.RawName + ": Has Restricted Equipment (worn or in backpack)"; break; case ArenaRuleset.ArenaRulesetFailureType.Follower: message = player.RawName + ": Exceeds Follower Control Slots Allowed"; break; case ArenaRuleset.ArenaRulesetFailureType.PackAnimal: message = player.RawName + ": Pack Animals Not Allowed"; break; case ArenaRuleset.ArenaRulesetFailureType.Mount: message = player.RawName + ": Mounts Not Allowed"; break; case ArenaRuleset.ArenaRulesetFailureType.NotInArenaRegion: message = player.RawName + ": Outside of Arena Region"; break; case ArenaRuleset.ArenaRulesetFailureType.NotOnline: message = player.RawName + ": Not Online"; break; case ArenaRuleset.ArenaRulesetFailureType.PoisonedWeapon: message = player.RawName + ": Exceeds Allowed Number of Poisoned Weapons"; break; case ArenaRuleset.ArenaRulesetFailureType.Transformed: message = player.RawName + ": Transformed or Disguised"; break; case ArenaRuleset.ArenaRulesetFailureType.Young: message = player.RawName + ": Young Status"; break; case ArenaRuleset.ArenaRulesetFailureType.NotEnoughArenaCredits: message = player.RawName + ": Insufficient Arena Credits"; break; } if (message != "") { arenaMatch.BroadcastMessage(message, 1256); } } if (arenaError) { arenaMatch.BroadcastMessage("Arena Configuration Error", 1256); } arenaMatch.m_NextReadyCheck = DateTime.UtcNow + ArenaMatch.ReadyCheckInterval; string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, arenaMatch.m_NextReadyCheck, false, true, true, true, true); arenaMatch.BroadcastMessage("Match will re-attempt to start in " + timeRemaining + ".", 0); } else { arenaMatch.m_MatchStatus = ArenaMatch.MatchStatusType.Fighting; ArenaFight arenaFight = new ArenaFight(); arenaFight.m_ArenaController = emptyArena; arenaFight.m_ArenaMatch = arenaMatch; arenaMatch.m_ArenaFight = arenaFight; emptyArena.m_ArenaFight = arenaFight; arenaFight.Initialize(); } } } }
public override void OnDoubleClick(Mobile from) { base.OnDoubleClick(from); if (!Visible) { if (from.AccessLevel == AccessLevel.Player) { return; } } PlayerMobile player = from as PlayerMobile; if (player == null) { return; } UOACZPersistance.CheckAndCreateUOACZAccountEntry(player); if (!player.Alive) { player.SendMessage("You are dead and cannot do that."); return; } //UOACZ Restrictions if (player.AccessLevel == AccessLevel.Player) { if (Utility.GetDistance(from.Location, Location) >= 3) { return; } switch (m_GateDirection) { case GateDirectionType.Entrance: if (player.Criminal) { player.SendMessage("You are currently a criminal and cannot enter."); return; } if (player.Followers > 0) { player.SendMessage("You must stable your followers before entering."); return; } if (player.HasTrade) { player.SendMessage("You must cancel your pending trade before entering."); return; } if (!from.CanBeginAction(typeof(IncognitoSpell))) { from.SendMessage("You may not enter while under the effects of incognito."); return; } if (!from.CanBeginAction(typeof(PolymorphSpell))) { from.SendMessage("You may not enter while under the effects of polymorph."); return; } if (DisguiseTimers.IsDisguised(from)) { from.SendMessage("You may not enter while being disguised."); } if (DateTime.UtcNow < player.LastCombatTime + UOACZSystem.CombatDelayBeforeEnteringMoongate) { DateTime cooldown = player.LastCombatTime + UOACZSystem.CombatDelayBeforeEnteringMoongate; string nextActivationAllowed = Utility.CreateTimeRemainingString(DateTime.UtcNow, cooldown, false, false, false, true, true); player.SendMessage("You have been in combat recently and must wait another " + nextActivationAllowed + " before entering."); return; } if (player.m_UOACZAccountEntry.NextEntryAllowed > DateTime.UtcNow && player.AccessLevel == AccessLevel.Player) { string nextEntranceAllowed = Utility.CreateTimeRemainingString(DateTime.UtcNow, player.m_UOACZAccountEntry.NextEntryAllowed, false, false, false, true, true); from.SendMessage("You may not use this for another " + nextEntranceAllowed + "."); return; } break; case GateDirectionType.Exit: if (player.HasTrade) { player.SendMessage("You must cancel your pending trade before exiting."); return; } if (DateTime.UtcNow < player.LastPlayerCombatTime + UOACZSystem.TunnelDigPvPThreshold) { DateTime cooldown = player.LastPlayerCombatTime + UOACZSystem.TunnelDigPvPThreshold; string nextActivationAllowed = Utility.CreateTimeRemainingString(DateTime.UtcNow, cooldown, false, false, false, true, true); player.SendMessage("You have been in PvP recently and must wait another " + nextActivationAllowed + " before exiting."); return; } if (player.m_UOACZAccountEntry.NextEntryAllowed > DateTime.UtcNow && player.AccessLevel == AccessLevel.Player) { string nextEntranceAllowed = Utility.CreateTimeRemainingString(DateTime.UtcNow, player.m_UOACZAccountEntry.NextEntryAllowed, false, false, false, true, true); from.SendMessage("You may not use this for another " + nextEntranceAllowed + "."); return; } break; } } switch (m_GateDirection) { case GateDirectionType.Entrance: player.SendSound(0x103); if (player.AccessLevel > AccessLevel.Player) { player.MoveToWorld(UOACZPersistance.DefaultHumanLocation, UOACZPersistance.DefaultMap); return; } UOACZSystem.PlayerEnterUOACZRegion(player); break; case GateDirectionType.Exit: player.SendSound(0x0FC); if (player.AccessLevel > AccessLevel.Player) { player.MoveToWorld(UOACZPersistance.DefaultBritainLocation, UOACZPersistance.DefaultBritainMap); return; } UOACZDestination destination = UOACZDestination.GetRandomExit(player.Murderer); if (destination != null) { player.MoveToWorld(destination.Location, destination.Map); } else { player.MoveToWorld(UOACZPersistance.DefaultBritainLocation, UOACZPersistance.DefaultBritainMap); } break; } if (player.AccessLevel == AccessLevel.Player) { player.m_UOACZAccountEntry.NextEntryAllowed = DateTime.UtcNow + UOACZSystem.DelayBetweenMoongateActivation; } }
public ConsiderSinsGump(PlayerMobile player) : base(10, 10) { m_Player = player; if (m_Player == null) { return; } #region Background AddImage(16, 12, 103, 2499); AddImage(151, 12, 103, 2499); AddImage(277, 12, 103, 2499); AddImage(152, 99, 103, 2499); AddImage(18, 99, 103, 2499); AddImage(279, 99, 103, 2499); AddImage(151, 187, 103, 2499); AddImage(16, 187, 103, 2499); AddImage(277, 187, 103, 2499); AddImage(151, 271, 103, 2499); AddImage(16, 271, 103, 2499); AddImage(277, 271, 103, 2499); AddBackground(31, 30, 377, 329, 5120); AddBackground(16, 24, 403, 335, 9380); AddItem(84, 52, 7574); AddImage(83, 25, 1142); #endregion AddLabel(162, 26, WhiteTextHue, "Criminal Summary"); //Guide AddButton(10, 13, 2094, 2095, 1, GumpButtonType.Reply, 0); AddLabel(6, 1, 149, "Guide"); int startY = 65; int rowSpacing = 30; AddLabel(128, startY, 149, "Current Murder Counts:"); if (m_Player.MurderCounts >= Mobile.MurderCountsRequiredForMurderer) { AddLabel(287, startY, 2116, m_Player.MurderCounts.ToString()); } else { AddLabel(287, startY, WhiteTextHue, m_Player.MurderCounts.ToString()); } startY += rowSpacing; if (m_Player.MurderCounts > 0) { string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, DateTime.UtcNow + (m_Player.m_MurderCountDecayTimeRemaining - m_Player.GameTime), true, true, true, true, false); AddItem(57, startY - 2, 6169); AddLabel(96, startY, 149, "Next Murder Count Decays in:"); AddLabel(288, startY, WhiteTextHue, timeRemaining); startY += rowSpacing; } AddLabel(125, startY, 149, "Lifetime Murder Counts:"); AddLabel(287, startY, WhiteTextHue, m_Player.m_LifetimeMurderCounts.ToString()); AddItem(82, startY + 2, 6884); AddItem(89, startY + 2, 6884); AddItem(84, startY + 7, 6884); startY += rowSpacing; startY += rowSpacing; rowSpacing = 25; //Ress Penalties if (m_Player.RessPenaltyExpiration > DateTime.UtcNow) { AddLabel(117, startY, 2599, "Current Resurrection Penalties"); startY += rowSpacing; if (m_Player.m_RessPenaltyEffectivenessReductionCount > 0) { double damagePenalty = PlayerMobile.RessPenaltyDamageScalar * m_Player.m_RessPenaltyEffectivenessReductionCount; double healingPenalty = PlayerMobile.RessPenaltyHealingScalar * m_Player.m_RessPenaltyEffectivenessReductionCount; double fizzlePenalty = PlayerMobile.RessPenaltyFizzleScalar * m_Player.m_RessPenaltyEffectivenessReductionCount; AddLabel(145, startY, WhiteTextHue, "-" + Utility.CreatePercentageString(damagePenalty) + " Damage Dealt"); startY += rowSpacing; AddLabel(140, startY, WhiteTextHue, "-" + Utility.CreatePercentageString(healingPenalty) + " Healing Amounts"); startY += rowSpacing; AddLabel(67, startY, WhiteTextHue, Utility.CreatePercentageString(fizzlePenalty) + " Chance to Fizzle Field and Paralyze Spells"); startY += rowSpacing; } if (m_Player.m_RessPenaltyAccountWideAggressionRestriction) { AddLabel(80, startY, 2550, "Cannot Attack Other Players (Account Wide)"); startY += rowSpacing; } string timeRemaining = Utility.CreateTimeRemainingString(DateTime.UtcNow, m_Player.RessPenaltyExpiration, true, true, true, true, false); AddItem(122, startY - 6, 6227); AddLabel(160, startY, 63, "Expires in " + timeRemaining + ")"); } else { AddLabel(154, startY, 2599, "Current Penalties"); startY += rowSpacing; AddLabel(194, startY, WhiteTextHue, "None"); } AddButton(76, 332, 2151, 2154, 2, GumpButtonType.Reply, 0); AddLabel(109, 336, 2603, "Preview Murderer Penalty Options"); }