Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }