protected override void OnTarget(Mobile src, object targ) { bool foundAnyone = false; 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; } BaseHouse house = BaseHouse.FindHouseAt(p, src.Map, 16); bool inHouse = (house != null && house.IsFriend(src)); if (inHouse) { range = 22; } if (range > 0) { IPooledEnumerable inRange = src.Map.GetMobilesInRange(p, range); foreach (Mobile trg in inRange) { 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 ShadowKnight && (trg.X != p.X || trg.Y != p.Y)) { continue; } trg.RevealingAction(); trg.SendLocalizedMessage(500814); // You have been revealed! foundAnyone = true; } } } inRange.Free(); bool faction = Faction.Find(src) != null; bool vvv = ViceVsVirtueSystem.IsVvV(src); if (faction || vvv) { IPooledEnumerable itemsInRange = src.Map.GetItemsInRange(p, range); foreach (Item item in itemsInRange) { if (faction && 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; } } else if (vvv && (item is VvVSigil || item is VvVTrap) && Utility.Random(100) <= srcSkill) { if (item is VvVTrap && item.ItemID == VvVTrap.HiddenID) { ((VvVTrap)item).OnRevealed(src); } else if (!item.Visible) { item.Visible = true; } } } itemsInRange.Free(); } } if (!foundAnyone) { src.SendLocalizedMessage(500817); // You can see nothing hidden there. } }
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 } }
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); 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) { 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 } }
protected override void OnTick() { List <Mobile> mobilesFound = new List <Mobile>(); Point3D p = m_From.Location; double srcSkill = m_From.Skills[SkillName.DetectHidden].Base; int range = (int)(srcSkill / 3.3); if (!m_From.CheckSkill(SkillName.DetectHidden, 0.0, 100.0)) { range /= 2; } if (range > 0) { IPooledEnumerable inRange = m_From.Map.GetMobilesInRange(p, range); foreach (Mobile trg in inRange) { if (trg.Hidden) { if (m_From.AccessLevel >= trg.AccessLevel) { if (trg is ShadowKnight && (trg.X != p.X || trg.Y != p.Y)) { continue; } trg.RevealingAction(); if (trg is PlayerMobile && (trg as PlayerMobile).HiddenWithSpell) { (trg as PlayerMobile).HiddenWithSpell = false; trg.RevealingAction(); } trg.SendAsciiMessage("You have been revealed!"); mobilesFound.Add(trg); } } } inRange.Free(); if (Faction.Find(m_From) != null) { IPooledEnumerable itemsInRange = m_From.Map.GetItemsInRange(p, range); foreach (Item item in itemsInRange) { if (item is BaseFactionTrap) { BaseFactionTrap trap = (BaseFactionTrap)item; if (m_From.CheckTargetSkill(SkillName.DetectHidden, trap, 80.0, 100.0)) { m_From.SendLocalizedMessage(1042712, true, " " + (trap.Faction == null ? "" : trap.Faction.Definition.FriendlyName)); // You reveal a trap placed by a faction: trap.Visible = true; trap.BeginConceal(); } } } itemsInRange.Free(); } if (mobilesFound.Count <= 0) { m_From.SendAsciiMessage("You can see nothing hidden there."); } else { foreach (Mobile s in mobilesFound) { m_From.SendAsciiMessage(string.Format("You find {0}.", s.Name)); } } } else { m_From.SendAsciiMessage("You can see nothing hidden there."); } if (m_From is PlayerMobile) { ((PlayerMobile)m_From).EndPlayerAction(); } }
protected override void OnTarget(Mobile src, object targ) { bool foundAnyone = false; if (targ is TrapableContainer) { TrapableContainer cont = targ as TrapableContainer; if (cont.Enabled && 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; } BaseHouse house = BaseHouse.FindHouseAt(p, src.Map, 16); bool inHouse = (house != null && house.IsFriend(src)); if (inHouse) { range = 22; } if (range > 0) { IPooledEnumerable inRange = src.Map.GetMobilesInRange(p, range); foreach (Mobile trg in inRange) { 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; } trg.RevealingAction(); trg.SendLocalizedMessage(500814); // You have been revealed! foundAnyone = true; } } } inRange.Free(); if (Faction.Find(src) != null) { IPooledEnumerable itemsInRange = src.Map.GetItemsInRange(p, range); foreach (Item item in itemsInRange) { 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; } } } itemsInRange.Free(); } } if (!foundAnyone) { src.SendLocalizedMessage(500817); // You can see nothing hidden there. } }
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 } }
protected override void OnTarget(Mobile src, object targ) { IEntity entity = targ as IEntity; if (XmlScript.HasTrigger(entity, TriggerName.onTargeted) && UberScriptTriggers.Trigger(entity, src, TriggerName.onTargeted, null, null, null, 0, null, SkillName.DetectHidden, src.Skills[SkillName.DetectHidden].Value)) { return; } bool foundAnyone = false; 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; } if (targ is TrapableContainer) { TrapableContainer targeted = (TrapableContainer)targ; src.Direction = src.GetDirectionTo(targeted); if (targeted.TrapType == TrapType.None) { src.SendLocalizedMessage(502373); // That doesn't appear to be trapped return; } src.PlaySound(0x241); if (src.CheckTargetSkill(SkillName.DetectHidden, targeted, targeted.TrapPower, targeted.TrapPower + 30)) { int traphue = 0; if (targeted.TrapType == TrapType.DartTrap) { traphue = 0x5A; } if (targeted.TrapType == TrapType.ExplosionTrap) { traphue = 0x78; } if (targeted.TrapType == TrapType.MagicTrap) { traphue = 0x5A; } if (targeted.TrapType == TrapType.PoisonTrap) { traphue = 0x44; } src.SendMessage(traphue, "This container is trapped."); return; } } BaseHouse house = BaseHouse.FindHouseAt(p, src.Map, 16); bool inHouse = (house != null && house.IsFriend(src)); if (inHouse) { range = 22; } if (range > 0) { IPooledEnumerable inRange = src.Map.GetMobilesInRange(p, range); foreach (Mobile trg in inRange) { 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 ShadowKnight && (trg.X != p.X || trg.Y != p.Y)) { continue; } if (trg is LockeCole) { continue; } if (trg is ZombieAvatar && trg.NetState == null) { continue; } trg.RevealingAction(); trg.SendLocalizedMessage(500814); // You have been revealed! foundAnyone = true; } } } inRange.Free(); if (Faction.Find(src) != null) { IPooledEnumerable itemsInRange = src.Map.GetItemsInRange(p, range); foreach (Item item in itemsInRange) { 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; } } } itemsInRange.Free(); } } if (!foundAnyone) { src.SendLocalizedMessage(500817); // You can see nothing hidden there. } }
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 } }
protected override void OnTarget(Mobile src, object targ) { bool foundAnyone = false; 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 = 1 + (int)(srcSkill / 20.0); // *** Teiravon Light Level & Feat Checks srcSkill *= 0.5; if (src.LightLevel < 10) { srcSkill += (Math.Abs(src.LightLevel - 10)) * 2.5; } else if (src.LightLevel > 10) { srcSkill -= (src.LightLevel - 10) * 2.5; } //if ( targ is TeiravonMobile && ((TeiravonMobile)targ).HasFeat( TeiravonMobile.Feats.AdvancedStealth ) ) // skill *= 0.3; if (srcSkill < 0.0) { srcSkill = 0.0; } // *** if (!src.CheckSkill(SkillName.DetectHidden, 0.0, 100.0)) { range /= 2; } BaseHouse house = BaseHouse.FindHouseAt(p, src.Map, 16); bool inHouse = (house != null && house.IsFriend(src)); if (inHouse) { range = 22; } if (range > 0) { IPooledEnumerable inRange = src.Map.GetMobilesInRange(p, range); foreach (Mobile trg in inRange) { if (trg.Hidden && src != trg) { double distance = trg.GetDistanceToSqrt(p); double ss = srcSkill + (80 - (20 * distance)); double ts = trg.Skills[SkillName.Stealth].Value + Utility.Random(21) - 10; if (p == trg.Location) { trg.RevealingAction(); trg.SendLocalizedMessage(500814); // You have been revealed! foundAnyone = true; } if (src.AccessLevel >= trg.AccessLevel && (ss >= ts || (inHouse && house.IsInside(trg)))) { if (!src.CanSee(trg)) { continue; } if (trg is Mobiles.ShadowKnight && (trg.X != p.X || trg.Y != p.Y)) { continue; } trg.RevealingAction(); trg.SendLocalizedMessage(500814); // You have been revealed! foundAnyone = true; } } } inRange.Free(); if (Faction.Find(src) != null) { IPooledEnumerable itemsInRange = src.Map.GetItemsInRange(p, range); foreach (Item item in itemsInRange) { 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; } } } itemsInRange.Free(); } } if (!foundAnyone) { src.SendLocalizedMessage(500817); // You can see nothing hidden there. } }