public static void ApplySkillLoss(Mobile mob) { SkillLossContext context; m_SkillLoss.TryGetValue(mob, out context); if (context == null) { context = new SkillLossContext(); m_SkillLoss[mob] = context; List <SkillMod> mods = context.m_SkillMods = new List <SkillMod>(); for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * SkillLossFactor)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.AddStatMod(new StatMod(StatType.Str, "Ethics Penalty Str", -(int)(mob.RawStr * StatLossFactor), SkillLossPeriod)); mob.AddStatMod(new StatMod(StatType.Dex, "Ethics Penalty Dex", -(int)(mob.RawDex * StatLossFactor), SkillLossPeriod)); mob.AddStatMod(new StatMod(StatType.Int, "Ethics Penalty Int", -(int)(mob.RawInt * StatLossFactor), SkillLossPeriod)); context.m_Timer = Timer.DelayCall <Mobile>(SkillLossPeriod, new TimerStateCallback <Mobile>(ClearSkillLoss_Callback), mob); } }
public static void ApplySkillLoss(Mobile mob) { if (InSkillLoss(mob)) { return; } SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List <SkillMod> mods = context.m_Mods = new List <SkillMod>(); for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * SkillLossFactor)); mods.Add(mod); mob.AddSkillMod(mod); } } context.m_Timer = Timer.DelayCall(SkillLossPeriod, new TimerStateCallback(ClearSkillLoss_Callback), mob); }
public static void ApplySkillLoss(Mobile mob) { var pm = mob as PlayerMobile; if (pm == null || pm.StatEnd < DateTime.UtcNow) { return; } try { TimeSpan lossperiod = pm.StatEnd - DateTime.UtcNow; double loss = 0.40; // 40% loss ClearSkillLoss(pm); var context = new SkillLossContext(); m_SkillLoss[pm] = context; List <SkillMod> mods = context.m_SkillMods = new List <SkillMod>(); foreach (Skill sk in pm.Skills) { double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * loss)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.AddStatMod(new StatMod(StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod)); context.m_Timer = Timer.DelayCall(lossperiod, m => ClearSkillLoss(m), mob); } catch { } }
public static bool ClearSkillLoss( Mobile mob ) { SkillLossContext context = (SkillLossContext)m_SkillLoss[mob]; if ( context == null ) { return false; } m_SkillLoss.Remove( mob ); ArrayList mods = context.m_Mods; for ( int i = 0; i < mods.Count; ++i ) mob.RemoveSkillMod( (SkillMod) mods[i] ); context.m_Timer.Stop(); return true; }
public static void ApplySkillLoss(Mobile mob) { SkillLossContext context = (SkillLossContext)m_SkillLoss[mob]; if (context != null) { return; } context = new SkillLossContext(); m_SkillLoss[mob] = context; ArrayList mods = context.m_Mods = new ArrayList(); int ShortsLost = mob.ShortTermMurders / 2; double SkillLossFactor = Math.Min(ShortsLost * 0.01, 0.5); //1 percent per short. Max 50%. TimeSpan SkillLossPeriod = TimeSpan.FromMinutes(10 + Math.Min(50, ShortsLost)); //10 to 60 minutes. //mob.ShortTermMurders -= ShortsLost; //Lose half your shorts. Disable till title system set up. for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * SkillLossFactor)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.SendMessage(String.Format("You have lost {0}% of your skill for {1} minutes for being a criminal.", (int)(SkillLossFactor * 100), 10 + Math.Min(50, ShortsLost))); context.m_Timer = Timer.DelayCall(SkillLossPeriod, new TimerStateCallback(ClearSkillLoss_Callback), mob); }
public static bool ClearSkillLoss(Mobile mob) { SkillLossContext context = (SkillLossContext)m_SkillLoss[mob]; if (context == null) { return(false); } m_SkillLoss.Remove(mob); ArrayList mods = context.m_Mods; for (int i = 0; i < mods.Count; ++i) { mob.RemoveSkillMod((SkillMod)mods[i]); } context.m_Timer.Stop(); mob.SendLocalizedMessage(500912); // You have recovered from the impure life force absorbtion. return(true); }
public static void ApplySkillLoss(Mobile mob) { var pm = mob as PlayerMobile; if (pm == null || pm.StatEnd < DateTime.UtcNow) { return; } try { TimeSpan lossperiod = pm.StatEnd - DateTime.UtcNow; double loss = 0.40; // 40% loss ClearSkillLoss(pm); var context = new SkillLossContext(); m_SkillLoss[pm] = context; List<SkillMod> mods = context.m_SkillMods = new List<SkillMod>(); foreach (Skill sk in pm.Skills) { double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * loss)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.AddStatMod(new StatMod(StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod)); context.m_Timer = Timer.DelayCall(lossperiod, m => ClearSkillLoss(m), mob); } catch { } }
public static void ApplySkillLoss(Mobile mob) { if (InSkillLoss(mob)) return; SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List<SkillMod> mods = context.m_Mods = new List<SkillMod>(); for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * SkillLossFactor)); mods.Add(mod); mob.AddSkillMod(mod); } } context.m_Timer = Timer.DelayCall(SkillLossPeriod, new TimerStateCallback(ClearSkillLoss_Callback), mob); }
public static void ApplySkillLoss( Mobile mob ) { SkillLossContext context = (SkillLossContext) m_SkillLoss[mob]; if ( context != null ) return; context = new SkillLossContext(); m_SkillLoss[mob] = context; ArrayList mods = context.m_Mods = new ArrayList(); for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -( baseValue * SkillLossFactor ) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } context.m_Timer = Timer.DelayCall( SkillLossPeriod, new TimerStateCallback( ClearSkillLoss_Callback ), mob ); // Stat Loss / All of your skills have been reduced by one third. mob.AddBuff( new BuffInfo( BuffIcon.FactionStatLoss, 1153800, 1153826, SkillLossPeriod, mob, true ) ); }
public static void ApplySkillLoss(Mobile mob) { PlayerMobile Killer = mob as PlayerMobile; if (mob.ShortTermMurders >= 5 && Killer.MurderBounty <= 0) { double loss = (100.0 - (19.0 + (mob.ShortTermMurders / 5.0))) / 100.0; // 20 to 30% loss if (loss < 0.75) { loss = 0.60; // changed to .80 from .95 } else if (loss > 0.95) { loss = 0.60; // changed to .80 from /95 } TimeSpan lossperiod = TimeSpan.FromMinutes(240.0); loss = 1.0 - loss; ClearSkillLoss(mob); SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List <SkillMod> mods = context.m_SkillMods = new List <SkillMod>(); for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * loss)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.AddStatMod(new StatMod(StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod)); context.m_Timer = Timer.DelayCall <Mobile>(lossperiod, new TimerStateCallback <Mobile>(ClearSkillLoss_Callback), mob); } else ///Removed short term statloss. if (mob.ShortTermMurders < 5 && Killer.MurderBounty > 0) { double loss = (100.0 - (19.0 + (Killer.MurderBounty / 10000.0))) / 100.0; // 20 to 30% loss if (loss < 0.75) { loss = 0.60; // changed to .80 from .95 } else if (loss > 0.95) { loss = 0.60; // changed to .80 from /95 } mob.SendMessage("Current MurderBounty: " + Killer.MurderBounty); double timeloss = (double)Killer.MurderBounty / 33.3; TimeSpan lossperiod = TimeSpan.FromMinutes(timeloss); int m = (int)Math.Round(timeloss); mob.SendMessage("You have entered a bounty statloss for: " + m + " minutes."); loss = 1.0 - loss; ClearSkillLoss(mob); SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List <SkillMod> mods = context.m_SkillMods = new List <SkillMod>(); for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * loss)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.AddStatMod(new StatMod(StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod)); context.m_Timer = Timer.DelayCall <Mobile>(lossperiod, new TimerStateCallback <Mobile>(ClearSkillLoss_Callback), mob); } else if (mob.ShortTermMurders >= 5 && Killer.MurderBounty > 0) { double loss = (100.0 - (19.0 + (mob.ShortTermMurders / 5.0))) / 100.0; // 20 to 30% loss if (loss < 0.75) { loss = 0.60; // changed to .80 from .95 } else if (loss > 0.95) { loss = 0.60; // changed to .80 from /95 } mob.SendMessage("Current MurderBounty: " + Killer.MurderBounty); double timeloss = (double)Killer.MurderBounty / 33.3; TimeSpan lossperiod = TimeSpan.FromMinutes(timeloss + 240.0); Killer.MurderBounty = 0; int m = (int)Math.Round(timeloss + 240.0); mob.SendMessage("You have entered statloss for: " + m + " minutes."); loss = 1.0 - loss; ClearSkillLoss(mob); SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List <SkillMod> mods = context.m_SkillMods = new List <SkillMod>(); for (int i = 0; i < mob.Skills.Length; ++i) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if (baseValue > 0) { SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * loss)); mods.Add(mod); mob.AddSkillMod(mod); } } mob.AddStatMod(new StatMod(StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod)); mob.AddStatMod(new StatMod(StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod)); context.m_Timer = Timer.DelayCall <Mobile>(lossperiod, new TimerStateCallback <Mobile>(ClearSkillLoss_Callback), mob); } }
public static void ApplySkillLoss( Mobile mob ) { PlayerMobile Killer = mob as PlayerMobile; if ( mob.ShortTermMurders >= 5 && Killer.MurderBounty <= 0) { double loss = (100.0 - (19.0 + (mob.ShortTermMurders / 5.0))) / 100.0; // 20 to 30% loss if( loss < 0.75 ) loss = 0.60;// changed to .80 from .95 else if( loss > 0.95 ) loss = 0.60; // changed to .80 from /95 TimeSpan lossperiod = TimeSpan.FromMinutes( 240.0 ); loss = 1.0 - loss; ClearSkillLoss( mob ); SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List<SkillMod> mods = context.m_SkillMods = new List<SkillMod>(); for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -(baseValue * loss) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } mob.AddStatMod( new StatMod( StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod ) ); mob.AddStatMod( new StatMod( StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod ) ); mob.AddStatMod( new StatMod( StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod ) ); context.m_Timer = Timer.DelayCall<Mobile>( lossperiod, new TimerStateCallback<Mobile>( ClearSkillLoss_Callback ), mob ); } else ///Removed short term statloss. if ( mob.ShortTermMurders < 5 && Killer.MurderBounty > 0 ) { double loss = (100.0 - (19.0 + (Killer.MurderBounty / 10000.0))) / 100.0; // 20 to 30% loss if( loss < 0.75 ) loss = 0.60;// changed to .80 from .95 else if( loss > 0.95 ) loss = 0.60; // changed to .80 from /95 mob.SendMessage( "Current MurderBounty: " + Killer.MurderBounty); double timeloss = (double)Killer.MurderBounty/33.3; TimeSpan lossperiod = TimeSpan.FromMinutes( timeloss ); int m = (int)Math.Round( timeloss ); mob.SendMessage( "You have entered a bounty statloss for: " + m + " minutes."); loss = 1.0 - loss; ClearSkillLoss( mob ); SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List<SkillMod> mods = context.m_SkillMods = new List<SkillMod>(); for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -(baseValue * loss) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } mob.AddStatMod( new StatMod( StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod ) ); mob.AddStatMod( new StatMod( StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod ) ); mob.AddStatMod( new StatMod( StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod ) ); context.m_Timer = Timer.DelayCall<Mobile>( lossperiod, new TimerStateCallback<Mobile>( ClearSkillLoss_Callback ), mob ); } else if ( mob.ShortTermMurders >= 5 && Killer.MurderBounty > 0 ) { double loss = (100.0 - (19.0 + (mob.ShortTermMurders / 5.0))) / 100.0; // 20 to 30% loss if( loss < 0.75 ) loss = 0.60;// changed to .80 from .95 else if( loss > 0.95 ) loss = 0.60; // changed to .80 from /95 mob.SendMessage( "Current MurderBounty: " + Killer.MurderBounty); double timeloss = (double)Killer.MurderBounty/33.3; TimeSpan lossperiod = TimeSpan.FromMinutes( timeloss + 240.0); Killer.MurderBounty = 0; int m = (int)Math.Round( timeloss + 240.0); mob.SendMessage( "You have entered statloss for: " + m + " minutes."); loss = 1.0 - loss; ClearSkillLoss( mob ); SkillLossContext context = new SkillLossContext(); m_SkillLoss[mob] = context; List<SkillMod> mods = context.m_SkillMods = new List<SkillMod>(); for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -(baseValue * loss) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } mob.AddStatMod( new StatMod( StatType.Str, "Murder Penalty Str", -(int)(mob.RawStr * loss), lossperiod ) ); mob.AddStatMod( new StatMod( StatType.Dex, "Murder Penalty Dex", -(int)(mob.RawDex * loss), lossperiod ) ); mob.AddStatMod( new StatMod( StatType.Int, "Murder Penalty Int", -(int)(mob.RawInt * loss), lossperiod ) ); context.m_Timer = Timer.DelayCall<Mobile>( lossperiod, new TimerStateCallback<Mobile>( ClearSkillLoss_Callback ), mob ); } }
public static void ApplySkillLoss(Mobile mob) { SkillLossContext context; if (!m_SkillLoss.TryGetValue(mob, out context)) { m_SkillLoss.Add(mob, context = new SkillLossContext()); } else if (context == null) { m_SkillLoss[mob] = context = new SkillLossContext(); } else { return; } List<SkillMod> mods = context.m_Mods = new List<SkillMod>(); foreach (Skill sk in mob.Skills) { double baseValue = sk.Base; if (baseValue <= 0) { continue; } SkillMod mod = new DefaultSkillMod(sk.SkillName, true, -(baseValue * SkillLossFactor)); mods.Add(mod); mob.AddSkillMod(mod); } //PlayerState ps = PlayerState.Find( mob ); context.m_Timer = Timer.DelayCall(SkillLossPeriod, ClearSkillLoss_Callback, mob); }
public static void ApplySkillLoss( Mobile mob ) { SkillLossContext context; m_SkillLoss.TryGetValue( mob, out context ); if ( context == null ) { context = new SkillLossContext(); m_SkillLoss[mob] = context; List<SkillMod> mods = context.m_Mods = new List<SkillMod>(); for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -(baseValue * SkillLossFactor) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } // Added by Silver: Skill Loss Reduction Faction faction = Faction.Find( mob ); int towns = faction.OwnedTowns; TimeSpan lossReduction = TimeSpan.FromMinutes( 0.25 - ( 0.025 * towns ) ); //PlayerState ps = PlayerState.Find( mob ); context.m_Timer = Timer.DelayCall( SkillLossPeriod - lossReduction, new TimerStateCallback( ClearSkillLoss_Callback ), mob ); } }
public static void ApplySkillLoss( Mobile mob ) { SkillLossContext context = (SkillLossContext)m_SkillLoss[mob]; if ( context != null ) return; context = new SkillLossContext(); m_SkillLoss[mob] = context; ArrayList mods = context.m_Mods = new ArrayList(); int ShortsLost = mob.ShortTermMurders/2; double SkillLossFactor = Math.Min(ShortsLost*0.01,0.5); //1 percent per short. Max 50%. TimeSpan SkillLossPeriod = TimeSpan.FromMinutes(10 + Math.Min(50, ShortsLost)); //10 to 60 minutes. //mob.ShortTermMurders -= ShortsLost; //Lose half your shorts. Disable till title system set up. for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -(baseValue * SkillLossFactor) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } mob.SendMessage(String.Format("You have lost {0}% of your skill for {1} minutes for being a criminal.", (int)(SkillLossFactor*100), 10 + Math.Min(50, ShortsLost))); context.m_Timer = Timer.DelayCall( SkillLossPeriod, new TimerStateCallback( ClearSkillLoss_Callback ), mob ); }
public static void ApplySkillLoss( Mobile mob ) { SkillLossContext context = (SkillLossContext)m_SkillLoss[mob]; if ( context != null ) return; context = new SkillLossContext(); m_SkillLoss[mob] = context; ArrayList mods = context.m_Mods = new ArrayList(); for ( int i = 0; i < mob.Skills.Length; ++i ) { Skill sk = mob.Skills[i]; double baseValue = sk.Base; if ( baseValue > 0 ) { SkillMod mod = new DefaultSkillMod( sk.SkillName, true, -(baseValue * SkillLossFactor) ); mods.Add( mod ); mob.AddSkillMod( mod ); } } // jakob, added this to shorten skillloss timer by 1 minute per owned town int ownedTowns = 0; PlayerState ps = PlayerState.Find( mob ); if ( ps != null ) foreach ( Town town in Town.Towns ) { if ( town.Owner == ps.Faction ) ownedTowns++; } context.m_Timer = Timer.DelayCall( SkillLossPeriod - TimeSpan.FromMinutes( (double)ownedTowns ), new TimerStateCallback( ClearSkillLoss_Callback ), mob ); // end }