Exemplo n.º 1
0
        private void affect(L2Character target)
        {
            Random rn = new Random();

            if (Template._skills != null)
            {
                foreach (TSkill sk in Template._skills)
                {
                    if (rn.Next(0, 100) > Template._skill_prob)
                    {
                        continue;
                    }

                    target.addAbnormal(sk, null, true, false);
                }
            }

            if (Template._skill != null)
            {
                if (rn.Next(0, 100) > Template._skill_prob)
                {
                    return;
                }

                target.addAbnormal(Template._skill, null, true, false);
            }
        }
Exemplo n.º 2
0
        private void calcEffect(L2Character character)
        {
            if (EffectID != -1)
            {
                TSkill skill = TSkillTable.getInstance().get(EffectID, EffectLv);

                if (skill == null)
                {
                    CLogger.error("ItemHandler: item " + id + " with null effect " + EffectID + "/" + EffectLv);
                    return;
                }

                character.addAbnormal(skill, character, true, false);
                character.broadcastPacket(new MagicSkillUse(character, character, skill, 100));
            }
        }
Exemplo n.º 3
0
        private void affect(L2Character target)
        {
            Random rn = new Random();

            if (Template._skills != null)
            {
                foreach (TSkill sk in Template._skills)
                {
                    if (rn.Next(0, 100) > Template._skill_prob)
                    {
                        continue;
                    }

                    target.addAbnormal(sk, target, true, false);
                }
            }

            if (Template._skill != null)
            {
                if (rn.Next(0, 100) > Template._skill_prob)
                {
                    return;
                }

                target.addAbnormal(Template._skill, target, true, false);
            }

            //надо бы как то найти и вынести эту фичу. она недокументирована
            if (Template.Name.StartsWith("[spa_") && Template.Name.EndsWith("1]"))
            {
                if (rn.Next(0, 100) > Template._skill_prob)
                {
                    return;
                }

                int a = 4551, b = 4552, c = 4553, d = 4554, x1 = 0, x2 = 0;
                int id = int.Parse(Template.Name.Substring(5).Replace("]", ""));

                switch (id)
                {
                case 11: x1 = a; x2 = c; break;     //bd

                case 21: x1 = c; x2 = b; break;     //ad

                case 31: x1 = a; x2 = b; break;     //cd

                case 41: x1 = c; x2 = b; break;     //ad

                case 51: x1 = a; x2 = b; break;     //cd

                case 61: x1 = a; x2 = c; break;     //bd

                case 71: x1 = b; x2 = c; break;     //ad

                case 81: x1 = a; x2 = b; break;     //cd

                case 91: x1 = a; x2 = c; break;     //bd
                }

                if (rn.Next(0, 100) <= Template._skill_prob)
                {
                    target.addAbnormalSPA(x1, false);
                }

                if (rn.Next(0, 100) <= Template._skill_prob)
                {
                    target.addAbnormalSPA(x2, false);
                }

                if (rn.Next(0, 100) <= Template._skill_prob)
                {
                    target.addAbnormalSPA(d, false);
                }
            }
        }
Exemplo n.º 4
0
        private void SkillCastTask(object sender, System.Timers.ElapsedEventArgs e)
        {
            SkillCast.Enabled = false;
            if (target == null || caster == null)
            {
                return;
            }

            if (caster.InstanceID != target.InstanceID)
            {
                return;
            }

            if (!cast.ConditionOk(caster))
            {
                return;
            }

            if (cast.reuse_delay > 0)
            {
                if (caster._reuse.ContainsKey(cast.skill_id))
                {
                    TimeSpan ts = caster._reuse[cast.skill_id].stopTime - DateTime.Now;

                    if (ts.TotalMilliseconds > 0)
                    {
                        if (ts.TotalHours > 0)
                        {
                            //There are $s2 hour(s), $s3 minute(s), and $s4 second(s) remaining in $s1's re-use time.
                            SystemMessage sm = new SystemMessage(2305);
                            sm.addSkillName(cast.skill_id, cast.level);
                            sm.addNumber((int)ts.Hours);
                            sm.addNumber((int)ts.Minutes);
                            sm.addNumber((int)ts.Seconds);
                            caster.sendPacket(sm);
                        }
                        else if (ts.TotalMinutes > 0)
                        {
                            //There are $s2 minute(s), $s3 second(s) remaining in $s1's re-use time.
                            SystemMessage sm = new SystemMessage(2304);
                            sm.addSkillName(cast.skill_id, cast.level);
                            sm.addNumber((int)ts.Minutes);
                            sm.addNumber((int)ts.Seconds);
                            caster.sendPacket(sm);
                        }
                        else
                        {
                            //There are $s2 second(s) remaining in $s1's re-use time.
                            SystemMessage sm = new SystemMessage(2303);
                            sm.addSkillName(cast.skill_id, cast.level);
                            sm.addNumber((int)ts.Seconds);
                            caster.sendPacket(sm);
                        }

                        return;
                    }
                }
            }



            //do

            if (cast.reuse_delay > 0)
            {
                L2SkillCoolTime reuse = new L2SkillCoolTime();
                reuse.id     = cast.skill_id;
                reuse.lvl    = cast.level;
                reuse.total  = (int)cast.reuse_delay;
                reuse.delay  = reuse.total;
                reuse._owner = caster;
                reuse.timer();
                caster._reuse.Add(reuse.id, reuse);
            }

            target.addAbnormal(cast, caster, false, false);
        }