private static void EndSurprise(SurpriseAttackInfo info) { info.m_Timer?.Stop(); info.m_Target.SendLocalizedMessage(1063131); // Your defenses have returned to normal. m_Table.Remove(info.m_Target); }
public override void OnHit(Mobile attacker, Mobile defender, int damage) { // Validates before swing ClearCurrentMove(attacker); attacker.SendLocalizedMessage(1063129); // You catch your opponent off guard with your Surprise Attack! defender.SendLocalizedMessage(1063130); // Your defenses are lowered as your opponent surprises you! defender.FixedParticles(0x37B9, 1, 5, 0x26DA, 0, 3, EffectLayer.Head); attacker.RevealingAction(); if (m_Table.TryGetValue(defender, out SurpriseAttackInfo info)) { info.m_Timer?.Stop(); m_Table.Remove(defender); } int ninjitsu = attacker.Skills.Ninjitsu.Fixed; int malus = ninjitsu / 60 + (int)Tracking.GetStalkingBonus(attacker, defender); info = new SurpriseAttackInfo(defender, malus); info.m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(8.0), EndSurprise, info); m_Table[defender] = info; CheckGain(attacker); }
public static bool GetMalus( Mobile target, ref int malus ) { SurpriseAttackInfo info = m_Table[target] as SurpriseAttackInfo; if ( info == null ) return false; malus = info.m_Malus; return true; }
private static void EndSurprise( object state ) { SurpriseAttackInfo info = (SurpriseAttackInfo)state; if ( info.m_Timer != null ) info.m_Timer.Stop(); info.m_Target.SendLocalizedMessage( 1063131 ); // Your defenses have returned to normal. m_Table.Remove( info.m_Target ); }
public override void OnHit( Mobile attacker, Mobile defender, int damage ) { //Validates before swing ClearCurrentMove( attacker ); attacker.SendLocalizedMessage( 1063129 ); // You catch your opponent off guard with your Surprise Attack! defender.SendLocalizedMessage( 1063130 ); // Your defenses are lowered as your opponent surprises you! defender.FixedParticles( 0x37B9, 1, 5, 0x26DA, 0, 3, EffectLayer.Head ); attacker.RevealingAction(); SurpriseAttackInfo info; if ( m_Table.Contains( defender ) ) { info = (SurpriseAttackInfo)m_Table[defender]; if ( info.m_Timer != null ) info.m_Timer.Stop(); m_Table.Remove( defender ); } int ninjitsu = attacker.Skills[SkillName.Ninjitsu].Fixed; int malus = ninjitsu / 60 + (int)Tracking.GetStalkingBonus( attacker, defender ); info = new SurpriseAttackInfo( defender, malus ); info.m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 8.0 ), new TimerStateCallback( EndSurprise ), info ); m_Table[defender] = info; CheckGain( attacker ); }