private static void ProcessDiscordance(object state) { Discordance.DiscordanceInfo info = (Discordance.DiscordanceInfo)state; Mobile from = info.m_From; Mobile targ = info.m_Creature; if (DateTime.Now >= info.m_EndTime || targ.Deleted || from.Map != targ.Map || targ.GetDistanceToSqrt(from) > 16) { if (info.m_Timer != null) { info.m_Timer.Stop(); } info.Clear(); Discordance.m_Table.Remove(targ); } else { targ.FixedEffect(0x376A, 1, 32); } }
public void DoDiscordance() { DebugSay("I Discord!"); TimeSpan len = TimeSpan.FromSeconds(this.Skills[SkillName.Discordance].Value * 2); double diff = BaseInstrument.GetBaseDifficulty(Combatant) - 10.0; double music = this.Skills[SkillName.Musicianship].Value; if (music > 100.0) { diff -= (music - 100.0) * 0.5; } if (this.CheckTargetSkill(SkillName.Discordance, Combatant, diff - 25.0, diff + 25.0)) { DebugSay("Discord success!"); ArrayList mods = new ArrayList(); int effect; double scalar; double discord = this.Skills[SkillName.Discordance].Value; if (discord > 100.0) { effect = -20 + (int)((discord - 100.0) / -2.5); } else { effect = (int)(discord / -5.0); } if (BaseInstrument.GetBaseDifficulty(Combatant) >= 160.0) { effect /= 2; } scalar = effect * 0.01; mods.Add(new ResistanceMod(ResistanceType.Physical, effect)); mods.Add(new ResistanceMod(ResistanceType.Fire, effect)); mods.Add(new ResistanceMod(ResistanceType.Cold, effect)); mods.Add(new ResistanceMod(ResistanceType.Poison, effect)); mods.Add(new ResistanceMod(ResistanceType.Energy, effect)); for (int i = 0; i < Combatant.Skills.Length; ++i) { if (Combatant.Skills[i].Value > 0) { mods.Add(new DefaultSkillMod((SkillName)i, true, Combatant.Skills[i].Value * scalar)); } } Discordance.DiscordanceInfo info = new Discordance.DiscordanceInfo(this, Combatant, len, Math.Abs(effect), mods); info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), new TimerStateCallback(ProcessDiscordance), info); Discordance.m_Table[Combatant] = info; this.PlaySound(SuccessSound); } else { DebugSay("Discord failure :("); this.PlaySound(FailureSound); } }