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 + ".");
                        }
                    }
                }
            }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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.");
                    }
                });
            });
        }
Exemple #5
0
        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));
            }
        }
Exemple #7
0
        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));
            }
        }
Exemple #8
0
        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
            }
        }
Exemple #9
0
        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);
                }
            }
        }
Exemple #10
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();
                        }
                    }
                }
            }
Exemple #11
0
        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;
            }
        }
Exemple #12
0
        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");
        }