Пример #1
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (targeted is Mobile)
                {
                    from.SendLocalizedMessage(502816);                       // You feel that such an action would be inappropriate
                }
                else if (targeted is TrapableContainer)
                {
                    TrapableContainer targ = (TrapableContainer)targeted;

                    from.Direction = from.GetDirectionTo(targ);

                    if (targ.TrapType == TrapType.None)
                    {
                        from.SendLocalizedMessage(502373);                           // That doesn't appear to be trapped
                        return;
                    }

                    from.PlaySound(0x241);

                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, targ.TrapPower, targ.TrapPower + 30))
                    {
                        switch (targ.TrapType)
                        {
                        case TrapType.ExplosionTrap:
                            from.LocalOverheadMessage(Network.MessageType.Regular, 0x78, 502374);                                       // You carefully remove the trigger for the purple potion.
                            break;

                        case TrapType.DartTrap:
                            from.LocalOverheadMessage(Network.MessageType.Regular, 0x62, 502375);                                       // You carefully remove the dart from the firing mechanism.
                            break;

                        case TrapType.PoisonTrap:
                            from.LocalOverheadMessage(Network.MessageType.Regular, 0x44, 502376);                                       // The poison leaks harmlessly away due to your deft touch.
                            break;

                        default:
                            from.LocalOverheadMessage(Network.MessageType.Regular, 0x53, 502377);                                       // You successfully render the trap harmless
                            break;
                        }

                        targ.TrapEnabled = false;
                        targ.TrapPower   = 0;
                        targ.TrapLevel   = 0;
                        targ.TrapType    = TrapType.None;
                    }
                    else
                    {
                        if (Utility.RandomDouble() <= 0.2)
                        {
                            from.SendLocalizedMessage(502370);                               // Oops.

                            targ.ExecuteTrap(from);
                        }
                        else
                        {
                            from.SendLocalizedMessage(502371);                               // You breathe a sigh of relief, as you fail to disarm the trap, but don't set it off.
                        }
                    }
                }
                else if (targeted is BaseFactionTrap)
                {
                    BaseFactionTrap trap    = (BaseFactionTrap)targeted;
                    Faction         faction = Faction.Find(from);

                    FactionTrapRemovalKit kit = (from.Backpack == null ? null : from.Backpack.FindItemByType(typeof(FactionTrapRemovalKit)) as FactionTrapRemovalKit);

                    bool isOwner = (trap.Placer == from || (trap.Faction != null && trap.Faction.IsCommander(from)));

                    if (faction == null)
                    {
                        from.SendLocalizedMessage(1010538);                           // You may not disarm faction traps unless you are in an opposing faction
                    }
                    else if (faction == trap.Faction && trap.Faction != null && !isOwner)
                    {
                        from.SendLocalizedMessage(1010537);                           // You may not disarm traps set by your own faction!
                    }
                    else if (!isOwner && kit == null)
                    {
                        from.SendLocalizedMessage(1042530);                           // You must have a trap removal kit at the base level of your pack to disarm a faction trap.
                    }
                    else
                    {
                        if (isOwner || (from.CheckTargetSkill(SkillName.RemoveTrap, trap, 80.0, 100.0) && from.CheckTargetSkill(SkillName.Tinkering, trap, 80.0, 100.0)))
                        {
                            from.PrivateOverheadMessage(MessageType.Regular, trap.MessageHue, trap.DisarmMessage, from.Client);

                            if (!isOwner)
                            {
                                int silver = faction.AwardSilver(from, trap.SilverFromDisarm);

                                if (silver > 0)
                                {
                                    from.SendLocalizedMessage(1008113, true, silver.ToString("N0"));                                         // You have been granted faction silver for removing the enemy trap :
                                }
                            }

                            trap.Delete();
                        }
                        else
                        {
                            from.SendLocalizedMessage(502372);                               // You fail to disarm the trap... but you don't set it off
                        }

                        if (!isOwner && kit != null)
                        {
                            kit.ConsumeCharge(from);
                        }
                    }
                }
                else if (targeted is GoblinTrap)
                {
                    GoblinTrap targ = (GoblinTrap)targeted;

                    from.Direction = from.GetDirectionTo(targ);
                    from.PlaySound(0x241);

                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, 0.0, 100.0))
                    {
                        from.LocalOverheadMessage(Network.MessageType.Regular, 0x53, 502377);                           // You successfully render the trap harmless
                        GoblinTrapGenerator.DisableTrap(from, targ);
                    }
                    else
                    {
                        if (Utility.RandomDouble() <= 0.2)
                        {
                            from.SendLocalizedMessage(502370);                               // Oops.
                            targ.ExecuteTrap(from);
                        }
                        else
                        {
                            from.SendLocalizedMessage(502371);                               // You breathe a sigh of relief, as you fail to disarm the trap, but don't set it off.
                        }
                    }
                }
                else if (targeted is FloorTrap)
                {
                    FloorTrap targ = (FloorTrap)targeted;

                    from.Direction = from.GetDirectionTo(targ);
                    from.PlaySound(0x241);

                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, targ.TinkerLevel, 110.0))
                    {
                        new FloorTrapKit().MoveToWorld(targ.Location, targ.Map);

                        from.LocalOverheadMessage(Network.MessageType.Regular, 0x53, 502377);                           // You successfully render the trap harmless
                        targ.Expire();
                    }
                    else
                    {
                        if (Utility.RandomDouble() <= 0.2)
                        {
                            from.SendLocalizedMessage(502370);                               // Oops.
                            targ.ExecuteTrap(from);
                        }
                        else
                        {
                            targ.FailedRemoveTrapAttempt();
                            from.SendLocalizedMessage(502371);                               // You breathe a sigh of relief, as you fail to disarm the trap, but don't set it off.
                        }
                    }
                }
                else
                {
                    from.SendLocalizedMessage(502373);                       // That does'nt appear to be trapped
                }
            }
Пример #2
0
            protected override void OnTarget(Mobile src, object targ)
            {
                bool foundAnyone = false;

                if (targ is TrapableContainer)
                {
                    TrapableContainer cont = targ as TrapableContainer;

                    if (cont.TrapEnabled && cont.TrapType != TrapType.None && cont.TrapPower > 0 && src.CheckSkill(SkillName.DetectHidden, 0.0, 100.0))
                    {
                        int hue = 0;

                        switch (cont.TrapType)
                        {
                        case TrapType.ExplosionTrap:
                            hue = 0x78;
                            break;

                        case TrapType.DartTrap:
                            hue = 0x5A;
                            break;

                        case TrapType.PoisonTrap:
                            hue = 0x44;
                            break;
                        }

                        cont.SendLocalizedMessageTo(src, 500813, hue);                           // [trapped]
                    }
                }

                Point3D p;

                if (targ is Mobile)
                {
                    p = ((Mobile)targ).Location;
                }
                else if (targ is Item)
                {
                    p = ((Item)targ).Location;
                }
                else if (targ is IPoint3D)
                {
                    p = new Point3D((IPoint3D)targ);
                }
                else
                {
                    p = src.Location;
                }

                double srcSkill = src.Skills[SkillName.DetectHidden].Value;

                int range = (int)(srcSkill / 10.0);

                if (!src.CheckSkill(SkillName.DetectHidden, 0.0, 100.0))
                {
                    range /= 2;
                }

                var house = HousingHelper.FindHouseAt(p, src.Map, 16);

                bool inHouse = (house != null && house.IsFriend(src));

                if (inHouse)
                {
                    range = 22;
                }

                if (range > 0)
                {
                    foreach (Mobile trg in src.Map.GetMobilesInRange(p, range))
                    {
                        if (trg.Hidden && src != trg)
                        {
                            double ss = srcSkill + Utility.Random(21) - 10;
                            double ts = trg.Skills[SkillName.Hiding].Value + Utility.Random(21) - 10;

                            if (src.AccessLevel >= trg.AccessLevel && (ss >= ts || (inHouse && house.IsInside(trg))))
                            {
                                if (trg is Mobiles.ShadowKnight && (trg.X != p.X || trg.Y != p.Y))
                                {
                                    continue;
                                }

                                // Detect Hidden does not work on players in secure facets.
                                if (trg is Mobiles.PlayerMobile && src is Mobiles.PlayerMobile && !inHouse && src.Map.Rules == MapRules.TrammelRules)
                                {
                                    continue;
                                }

                                trg.RevealingAction();
                                trg.SendLocalizedMessage(500814);                                   // You have been revealed!
                                foundAnyone = true;
                            }
                        }
                    }

                    if (Faction.Find(src) != null)
                    {
                        foreach (Item item in src.Map.GetItemsInRange(p, range))
                        {
                            if (item is BaseFactionTrap)
                            {
                                BaseFactionTrap trap = (BaseFactionTrap)item;

                                if (src.CheckTargetSkill(SkillName.DetectHidden, trap, 80.0, 100.0))
                                {
                                    src.SendLocalizedMessage(1042712, true, " " + (trap.Faction == null ? "" : trap.Faction.Definition.FriendlyName));                                         // You reveal a trap placed by a faction:

                                    trap.Visible = true;
                                    trap.BeginConceal();

                                    foundAnyone = true;
                                }
                            }
                        }
                    }

                    foreach (Item item in src.Map.GetItemsInRange(p, range))
                    {
                        if (item is GoblinTrap)
                        {
                            GoblinTrap trap = (GoblinTrap)item;

                            if (src.CheckTargetSkill(SkillName.DetectHidden, trap, 0.0, 100.0))
                            {
                                trap.Visible = true;
                                trap.BeginConceal();

                                trap.SendLocalizedMessageTo(src, 500813, 0);                                   // [trapped]

                                foundAnyone = true;
                            }
                        }

                        if (item is FloorTrap)
                        {
                            FloorTrap trap = (FloorTrap)item;

                            if (src.CheckTargetSkill(SkillName.DetectHidden, trap, (trap.HidingLevel + trap.TinkerLevel) / 2.0, 110.0))
                            {
                                trap.Visible = true;
                                trap.BeginConceal();

                                trap.SendLocalizedMessageTo(src, 500813, 0);                                   // [trapped]

                                foundAnyone = true;
                            }
                        }
                    }
                }

                if (!foundAnyone)
                {
                    src.SendLocalizedMessage(500817);                       // You can see nothing hidden there.
                }
            }