diff --git a/Scripts/Items/Traps/BaseTrap.cs b/Scripts/Items/Traps/BaseTrap.cs index 98a599d..2429ba2 100644 --- a/Scripts/Items/Traps/BaseTrap.cs +++ b/Scripts/Items/Traps/BaseTrap.cs @@ -15,7 +15,7 @@ namespace Server.Items { } - public override bool HandlesOnMovement{ get{ return true; } } // Tell the core that we implement OnMovement + public override bool HandlesOnMovement{ get{ return true; } } public virtual int GetEffectHue() { @@ -38,24 +38,39 @@ namespace Server.Items && Utility.InRange( GetWorldLocation(), loc, range ); } - public override void OnMovement( Mobile m, Point3D oldLocation ) + public override void OnMovement( Mobile m, Point3D oldLocation ) { base.OnMovement( m, oldLocation ); if ( m.Location == oldLocation ) return; - if ( CheckRange( m.Location, oldLocation, 0 ) && DateTime.UtcNow >= m_NextActiveTrigger ) - { - m_NextActiveTrigger = m_NextPassiveTrigger = DateTime.UtcNow + ResetDelay; + bool activeTrigger = CheckRange( m.Location, oldLocation, 0 ) && DateTime.UtcNow >= m_NextActiveTrigger; + bool passiveTrigger = !activeTrigger && PassivelyTriggered && CheckRange( m.Location, oldLocation, PassiveTriggerRange ) && DateTime.UtcNow >= m_NextPassiveTrigger; - OnTrigger( m ); - } - else if ( PassivelyTriggered && CheckRange( m.Location, oldLocation, PassiveTriggerRange ) && DateTime.UtcNow >= m_NextPassiveTrigger ) + if ( activeTrigger || passiveTrigger ) { - m_NextPassiveTrigger = DateTime.UtcNow + PassiveTriggerDelay; + if ( m.Alive && m.AccessLevel == AccessLevel.Player ) + { + // m.CheckSkill parameters: (SkillName, Minimum Skill to attempt, Maximum Skill to gain) + // This single line calculates their dodge chance AND tells the server to roll for a skill gain! + if ( m.CheckSkill( SkillName.RemoveTrap, 0.0, 120.0 ) ) + { + m.SendMessage( 63, "You notice a hidden trap and carefully step around it." ); + return; + } + } - OnTrigger( m ); + if ( activeTrigger ) + { + m_NextActiveTrigger = m_NextPassiveTrigger = DateTime.UtcNow + ResetDelay; + OnTrigger( m ); + } + else if ( passiveTrigger ) + { + m_NextPassiveTrigger = DateTime.UtcNow + PassiveTriggerDelay; + OnTrigger( m ); + } } } @@ -82,4 +97,4 @@ namespace Server.Items int version = reader.ReadInt(); } } -} \ No newline at end of file +}