Example #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 == Server.Items.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))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        targ.TrapType  = Server.Items.TrapType.None;
                        from.SendLocalizedMessage(502377); // You successfully render the trap harmless
                    }
                    else
                    {
                        from.SendLocalizedMessage(502372); // You fail to disarm the trap... but you 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 ((Core.ML && 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.NetState);

                            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 VvVTrap)
                {
                    VvVTrap trap = targeted as VvVTrap;

                    if (!ViceVsVirtueSystem.IsVvV(from))
                    {
                        from.SendLocalizedMessage(1155496); // This item can only be used by VvV participants!
                    }
                    else
                    {
                        if (from == trap.Owner || ((from.Skills[SkillName.RemoveTrap].Value - 80.0) / 20.0) > Utility.RandomDouble())
                        {
                            VvVTrapKit kit = new VvVTrapKit(trap.TrapType);
                            trap.Delete();

                            if (!from.AddToBackpack(kit))
                            {
                                kit.MoveToWorld(from.Location, from.Map);
                            }

                            if (trap.Owner != null && from != trap.Owner)
                            {
                                Guild fromG  = from.Guild as Guild;
                                Guild ownerG = trap.Owner.Guild as Guild;

                                if (fromG != null && fromG != ownerG && !fromG.IsAlly(ownerG) && ViceVsVirtueSystem.Instance != null &&
                                    ViceVsVirtueSystem.Instance.Battle != null && ViceVsVirtueSystem.Instance.Battle.OnGoing)
                                {
                                    ViceVsVirtueSystem.Instance.Battle.Update(from, UpdateType.Disarm);
                                }
                            }

                            from.PrivateOverheadMessage(Server.Network.MessageType.Regular, 1154, 1155413, from.NetState);
                        }
                        else if (.1 > Utility.RandomDouble())
                        {
                            trap.Detonate(from);
                        }
                    }
                }
                else if (targeted is GoblinFloorTrap)
                {
                    GoblinFloorTrap targ = (GoblinFloorTrap)targeted;

                    if (from.InRange(targ.Location, 3))
                    {
                        from.Direction = from.GetDirectionTo(targ);

                        if (targ.Owner == null)
                        {
                            Item item = new FloorTrapComponent();

                            if (from.Backpack == null || !from.Backpack.TryDropItem(from, item, false))
                            {
                                item.MoveToWorld(from.Location, from.Map);
                            }
                        }

                        targ.Delete();
                        from.SendLocalizedMessage(502377); // You successfully render the trap harmless
                    }
                }
                else
                {
                    from.SendLocalizedMessage(502373); // That does'nt appear to be trapped
                }
            }
            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);

                    double minskill = targ.TrapPower;
                    //modify minskill with detect hidden skill
                    if (from.Skills[SkillName.DetectHidden].Base > 50.0)
                    {
                        minskill -= (from.Skills[SkillName.DetectHidden].Base - 50.0);
                    }
                    double maxskill = minskill + 50;

                    //What this means is that with a trappower of 125 (level 5 tmap) and
                    //GM DH, min RT skill to unlock is 75 and max is 100, OR, rather,
                    //DH and RT need to be above a combined 175 to have a chance at disarming
                    //the trap.
                    //Level 4 power (100), they need to have above 150 total to have a chance.

                    if (from.AccessLevel >= AccessLevel.GameMaster)                        //This line added by Old Salty
                    {
                        from.SendMessage(string.Format("minskill is {0}, maxskill is {1}", minskill, maxskill));
                    }

                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, minskill, maxskill))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        targ.TrapType  = TrapType.None;
                        from.SendLocalizedMessage(502377);                         // You successfully render the trap harmless
                    }
                    else
                    {
                        //chance to set off trap...
                        if (targ.OnFailDisarm(from))
                        {
                        }
                        else
                        {
                            from.SendLocalizedMessage(502372);                             // You fail to disarm the trap... but you don't set it off
                        }
                    }

                    //pla: set 10 second delay before next skill use
                    from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds(10.0);
                }
                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 (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.NetState);

                            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
                {
                    from.SendLocalizedMessage(502373);                     // That does'nt appear to be trapped
                }
            }
Example #3
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
                }
            }
Example #4
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);

                    int nTrapLevel = targ.TrapLevel * 10;

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

                    if ((int)(from.Skills[SkillName.RemoveTrap].Value) < nTrapLevel)
                    {
                        from.SendMessage("This trap looks too complicated for you.");
                        return;
                    }

                    from.PlaySound(0x241);

                    // if ( from.CheckTargetSkill( SkillName.RemoveTrap, targ, targ.TrapPower, targ.TrapPower + 30 ) )
                    nTrapLevel = nTrapLevel + 20;
                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, 0, nTrapLevel))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        targ.TrapType  = TrapType.None;
                        from.SendLocalizedMessage(502377);                           // You successfully render the trap harmless
                    }
                    else
                    {
                        from.SendLocalizedMessage(502372);                           // You fail to disarm the trap... but you 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 ((Core.ML && isOwner) || (from.CheckTargetSkill(SkillName.RemoveTrap, trap, 80.0, 125.0) && from.CheckTargetSkill(SkillName.Tinkering, trap, 80.0, 100.0)))
                        {
                            from.PrivateOverheadMessage(MessageType.Regular, trap.MessageHue, trap.DisarmMessage, from.NetState);

                            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 Item)
                {
                    if ((Item)targeted is HiddenTrap)
                    {
                        from.PlaySound(0x241);

                        if (from.CheckSkill(SkillName.RemoveTrap, 0, 125))
                        {
                            Item HideTrap = (Item)targeted;
                            HideTrap.Delete();
                            from.SendLocalizedMessage(502377);                               // You successfully render the trap harmless
                        }
                        else
                        {
                            from.SendLocalizedMessage(502372);                               // You fail to disarm the trap... but you don't set it off
                        }
                    }
                    else
                    {
                        from.SendLocalizedMessage(502373);
                    }
                }
                else
                {
                    from.SendLocalizedMessage(502373);                       // That does'nt appear to be trapped
                }
            }
            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)
                {
                    if (from.Skills[SkillName.Lockpicking].Value < 50)
                    {
                        from.SendLocalizedMessage(502366);                           // You do not know enough about locks.  Become better at picking locks.
                        return;
                    }
                    else if (from.Skills[SkillName.DetectHidden].Value < 50)
                    {
                        from.SendLocalizedMessage(502367);                           // You are not perceptive enough.  Become better at detect hidden.
                        return;
                    }

                    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);

                    int minskill;
                    int maxskill;
                    LockableContainer lc = targ as LockableContainer;
                    if (lc != null && (targ.TrapType == TrapType.ExplosionTrap || targ.TrapType == TrapType.PoisonTrap))
                    {
                        // values used for tinkertraps
                        maxskill = targ.TrapPower;
                        minskill = (int)(targ.TrapPower * 0.8);
                    }
                    else                     // original values
                    {
                        maxskill = targ.TrapPower + 30;
                        minskill = targ.TrapPower;
                    }

                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, minskill, maxskill))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        targ.TrapType  = TrapType.None;
                        from.SendLocalizedMessage(502377);                           // You successfully render the trap harmless
                    }
                    else
                    {
                        from.SendLocalizedMessage(502372);                           // You fail to disarm the trap... but you 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 commander = trap.Faction != null && trap.Faction.IsCommander(from);

                    bool isOwner = (trap.Placer == from || commander);


                    if (!commander && from.Skills[SkillName.Lockpicking].Value < 50)
                    {
                        from.SendLocalizedMessage(502366);                           // You do not know enough about locks.  Become better at picking locks.
                    }
                    else if (!commander && from.Skills[SkillName.DetectHidden].Value < 50)
                    {
                        from.SendLocalizedMessage(502367);                           // You are not perceptive enough.  Become better at detect hidden.
                    }
                    else 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 (trap.Faction != null && 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 (from.CheckTargetSkill(SkillName.RemoveTrap, trap, 80.0, 100.0) || commander)
                        {
                            from.PrivateOverheadMessage(MessageType.Regular, trap.MessageHue, trap.DisarmMessage, from.NetState);

                            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
                {
                    from.SendLocalizedMessage(502373);                       // That doesn't appear to be trapped
                }
            }
Example #6
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 TrappableContainer targ)
                {
                    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))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        targ.TrapType  = TrapType.None;
                        from.SendLocalizedMessage(502377); // You successfully render the trap harmless
                    }
                    else
                    {
                        from.SendLocalizedMessage(502372); // You fail to disarm the trap... but you don't set it off
                    }
                }
                else if (targeted is BaseFactionTrap trap)
                {
                    Faction faction           = Faction.Find(from);
                    FactionTrapRemovalKit kit = from.Backpack?.FindItemByType <FactionTrapRemovalKit>();

                    bool isOwner = trap.Placer == from || trap.Faction?.IsCommander(from) == true;

                    if (faction == null)
                    {
                        from.SendLocalizedMessage(
                            1010538); // You may not disarm faction traps unless you are in an opposing faction
                    }
                    else if (trap.Faction != null && faction == trap.Faction && !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 (Core.ML && 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.NetState);

                            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.ConsumeCharge(from);
                        }
                    }
                }
                else
                {
                    from.SendLocalizedMessage(502373); // That doesn't appear to be trapped
                }
            }
Example #7
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                IEntity entity = targeted as IEntity; if (XmlScript.HasTrigger(entity, TriggerName.onTargeted) && UberScriptTriggers.Trigger(entity, from, TriggerName.onTargeted, null, null, null, 0, null, SkillName.RemoveTrap, from.Skills[SkillName.RemoveTrap].Value))

                {
                    return;
                }

                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);
                    // treasurechestlevel6 TrapPower is 6 x (20 to 54) = min 120, max 324
                    // treasurechestlevel5 TrapPower is 5 x (20 to 54) = min 100, max 270
                    // treasurechestlevel4 TrapPower is 4 x (10 to 34) = min 40, max 136
                    // treasurechestLevel3 TrapPower is 3 x (1 to 24) = min 3, max 72
                    // treasurechestLevel2 TrapPower is 2 x (1 to 24) = min 2, max 48
                    //... I don't think trap power is the way to go here, I think we have to handle
                    // each type of trap separately
                    double minSkill = targ.TrapPower;
                    double maxSkill = targ.TrapPower + 30.0;
                    if (targ is TreasureChestLevel6)
                    {
                        minSkill = 95; maxSkill = 110;
                    }                                                                   // 1/3 chance at GM
                    else if (targ is TreasureChestLevel5)
                    {
                        minSkill = 95; maxSkill = 102;
                    }                                                                        // 2/3 chance at GM
                    else if (targ is TreasureChestLevel4)
                    {
                        minSkill = 80; maxSkill = 105;
                    }                                                                        // 4/5 chance at GM
                    else if (targ is TreasureMapChest && ((TreasureMapChest)targ).Level >= 4)
                    {
                        int level = ((TreasureMapChest)targ).Level;
                        if (level >= 6)
                        {
                            minSkill = 95; maxSkill = 110;
                        }                                                  // 1/3 chance at GM
                        else if (level == 5)
                        {
                            minSkill = 95; maxSkill = 102;
                        }                                                       // 2/3 chance at GM
                        else if (level == 4)
                        {
                            minSkill = 80; maxSkill = 105;
                        }                                                       // 4/5 chance at GM
                    }
                    else // any other trapable thing, GM remove traps will always get it
                    {
                        if (minSkill > 95.0)
                        {
                            minSkill = 95.0;
                        }
                        if (maxSkill > 100.0)
                        {
                            maxSkill = 100.0;
                        }
                    }

                    //if ( from.CheckTargetSkill( SkillName.RemoveTrap, targ, targ.TrapPower, targ.TrapPower + 30 ) ) // lol, with this formula, many level 4's and all level 5 and 6: removetrap = useless
                    if (from.CheckTargetSkill(SkillName.RemoveTrap, targ, minSkill, maxSkill))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        if (targ.TrapType == TrapType.ExplosionTrap)
                        {
                            from.SendLocalizedMessage(502374); // You carefully remove the trigger for the purple potion.
                        }
                        else if (targ.TrapType == TrapType.DartTrap)
                        {
                            from.SendLocalizedMessage(502375); // You carefully remove the dart from the firing mechanism.
                        }
                        else if (targ.TrapType == TrapType.PoisonTrap)
                        {
                            from.SendLocalizedMessage(502376); // The poison leaks harmlessly away due to your deft touch.
                        }
                        else
                        {
                            from.SendLocalizedMessage(502377); // You successfully render the trap harmless.
                        }
                        targ.TrapType = TrapType.None;
                    }
                    else
                    {
                        from.SendLocalizedMessage(502372);                           // You fail to disarm the trap... but you 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 ( (Core.ML && isOwner) || (from.CheckTargetSkill( SkillName.RemoveTrap, trap, 0.0, 100.0 ))) // && from.CheckTargetSkill( SkillName.Tinkering, trap, 80.0, 100.0 )) )
                        if (Utility.RandomDouble() < 0.25 || from.CheckTargetSkill(SkillName.RemoveTrap, trap, 1.0, 100.0)) // 25% chance or if they have remove trap skill, use that
                        {
                            from.PrivateOverheadMessage(MessageType.Regular, trap.MessageHue, trap.DisarmMessage, from.NetState);

                            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
                {
                    from.SendLocalizedMessage(502373);                       // That doesn't appear to be trapped
                }
            }
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (targeted is BaseCreature)
                {
                    BaseCreature creature = (BaseCreature)targeted;

                    if (from.CheckTargetSkill(SkillName.RemoveTrap, creature, 30, 100))
                    {
                        if (creature is Turret)
                        {
                            creature.Kill();
                            from.SendMessage("You have disarmed the trap.");
                        }
                        else
                        {
                            from.SendLocalizedMessage(502816);                               // You feel that such an action would be inappropriate
                        }
                    }
                }
                else if (targeted is BoulderTrap)
                {
                    BoulderTrap bouldertrap = (BoulderTrap)targeted;

                    if (from.Skills.RemoveTrap.Base >= 75.0)
                    {
                        bouldertrap.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                    }
                    else if (from.CheckTargetSkill(SkillName.RemoveTrap, bouldertrap, 50, 85))
                    {
                        bouldertrap.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                        from.Skills.RemoveTrap.Base += 1;
                    }
                    else
                    {
                        from.SendMessage("You fail to disarm the trap.");
                    }
                }
                else if (targeted is BoulderTrap2)
                {
                    BoulderTrap2 bouldertrap2 = (BoulderTrap2)targeted;

                    if (from.Skills.RemoveTrap.Base >= 75.0)
                    {
                        bouldertrap2.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                    }
                    else if (from.CheckTargetSkill(SkillName.RemoveTrap, bouldertrap2, 50, 85))
                    {
                        bouldertrap2.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                        from.Skills.RemoveTrap.Base += 1;
                    }
                    else
                    {
                        from.SendMessage("You fail to disarm the trap.");
                    }
                }
                else if (targeted is MovingTrap)
                {
                    MovingTrap movingtrap = (MovingTrap)targeted;

                    if (from.Skills.RemoveTrap.Base >= 30.0)
                    {
                        movingtrap.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                    }
                    else if (from.CheckTargetSkill(SkillName.RemoveTrap, movingtrap, 0, 30))
                    {
                        movingtrap.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                        from.Skills.RemoveTrap.Base += 1;
                    }
                    else
                    {
                        from.SendMessage("You fail to disarm the trap.");
                    }
                }
                else if (targeted is MovingTrap2)
                {
                    MovingTrap2 movingtrap2 = (MovingTrap2)targeted;

                    if (from.Skills.RemoveTrap.Base >= 30.0)
                    {
                        movingtrap2.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                    }

                    else if (from.CheckTargetSkill(SkillName.RemoveTrap, movingtrap2, 0, 30))
                    {
                        movingtrap2.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                        from.Skills.RemoveTrap.Base += 1;
                    }
                    else
                    {
                        from.SendMessage("You fail to disarm the trap.");
                    }
                }
                else if (targeted is MovingTreeTrap)
                {
                    MovingTreeTrap movingtreetrap = (MovingTreeTrap)targeted;

                    if (from.Skills.RemoveTrap.Base >= 30.0)
                    {
                        movingtreetrap.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                    }
                    else if (from.CheckTargetSkill(SkillName.RemoveTrap, movingtreetrap, 15, 50))
                    {
                        movingtreetrap.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                        from.Skills.RemoveTrap.Base += 1;
                    }
                    else
                    {
                        from.SendMessage("You fail to disarm the trap.");
                    }
                }
                else if (targeted is MovingTreeTrap2)
                {
                    MovingTreeTrap2 movingtreetrap2 = (MovingTreeTrap2)targeted;

                    if (from.Skills.RemoveTrap.Base >= 30.0)
                    {
                        movingtreetrap2.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                    }

                    else if (from.CheckTargetSkill(SkillName.RemoveTrap, movingtreetrap2, 15, 50))
                    {
                        movingtreetrap2.Delete();
                        from.PlaySound(0x5CE);
                        from.SendMessage("You have disarmed the trap.");
                        from.Skills.RemoveTrap.Base += 1;
                    }
                    else
                    {
                        from.SendMessage("You fail to disarm the trap.");
                    }
                }

                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))
                    {
                        targ.TrapPower = 0;
                        targ.TrapLevel = 0;
                        targ.TrapType  = TrapType.None;
                        from.SendLocalizedMessage(502377);                           // You successfully render the trap harmless
                    }
                    else
                    {
                        from.SendLocalizedMessage(502372);                           // You fail to disarm the trap... but you 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 ((Core.ML && 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.NetState);

                            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
                {
                    from.SendLocalizedMessage(502373);                       // That does'nt appear to be trapped
                }
            }