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

            if (Template.Skills != null)
            {
                foreach (Skill sk in Template.Skills.Where(sk => rn.Next(0, 100) <= Template.SkillProb))
                {
                    target.AddAbnormal(sk, null, true, false);
                }
            }

            if (Template.Skill == null)
            {
                return;
            }

            if (rn.Next(0, 100) > Template.SkillProb)
            {
                return;
            }

            target.AddAbnormal(Template.Skill, null, true, false);
        }
Ejemplo n.º 2
0
        private void CalcEffect(L2Character character)
        {
            if (EffectId == -1)
            {
                return;
            }

            Skill skill = SkillTable.Instance.Get(EffectId, EffectLv);

            if (skill == null)
            {
                Log.Error($"ItemHandler: item {_id} with null effect {EffectId}/{EffectLv}");
                return;
            }

            character.AddAbnormal(skill, character, true, false);
            character.BroadcastPacket(new MagicSkillUse(character, character, skill, 100));
        }
Ejemplo n.º 3
0
        private void SkillCastTask(object sender, System.Timers.ElapsedEventArgs e)
        {
            _skillCast.Enabled = false;
            if ((_target == null) || (_caster == null))
            {
                return;
            }

            if (!_cast.ConditionOk(_caster))
            {
                return;
            }

            if (_cast.ReuseDelay > 0)
            {
                if (_caster.Reuse.ContainsKey(_cast.SkillId))
                {
                    TimeSpan ts = _caster.Reuse[_cast.SkillId].StopTime - DateTime.Now;

                    if (ts.TotalMilliseconds > 0)
                    {
                        if (ts.TotalHours > 0)
                        {
                            SystemMessage sm = new SystemMessage(SystemMessage.SystemMessageId.S2HoursS3MinutesS4SecondsRemainingInS1ReuseTime);
                            sm.AddSkillName(_cast.SkillId, _cast.Level);
                            sm.AddNumber(ts.Hours);
                            sm.AddNumber(ts.Minutes);
                            sm.AddNumber(ts.Seconds);
                            _caster.SendPacket(sm);
                        }
                        else
                        {
                            if (ts.TotalMinutes > 0)
                            {
                                SystemMessage sm = new SystemMessage(SystemMessage.SystemMessageId.S2MinutesS3SecondsRemainingInS1ReuseTime);
                                sm.AddSkillName(_cast.SkillId, _cast.Level);
                                sm.AddNumber(ts.Minutes);
                                sm.AddNumber(ts.Seconds);
                                _caster.SendPacket(sm);
                            }
                            else
                            {
                                SystemMessage sm = new SystemMessage(SystemMessage.SystemMessageId.S2SecondsRemainingInS1ReuseTime);
                                sm.AddSkillName(_cast.SkillId, _cast.Level);
                                sm.AddNumber(ts.Seconds);
                                _caster.SendPacket(sm);
                            }
                        }

                        return;
                    }
                }
            }

            //do

            if (_cast.ReuseDelay > 0)
            {
                L2SkillCoolTime reuse = new L2SkillCoolTime
                {
                    Id    = _cast.SkillId,
                    Lvl   = _cast.Level,
                    Total = (int)_cast.ReuseDelay,
                    Owner = _caster
                };
                reuse.Delay = reuse.Total;
                reuse.Timer();
                _caster.Reuse.Add(reuse.Id, reuse);
            }

            _target.AddAbnormal(_cast, _caster, false, false);
        }
Ejemplo n.º 4
0
        private void affect(L2Character target)
        {
            Random rn = new Random();

            if (Template.Skills != null)
            {
                foreach (Skill sk in Template.Skills.Where(sk => rn.Next(0, 100) <= Template.SkillProb))
                {
                    target.AddAbnormal(sk, target, true, false);
                }
            }

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

                target.AddAbnormal(Template.Skill, target, true, false);
            }

            //надо бы как то найти и вынести эту фичу. она недокументирована
            if (!Template.Name.StartsWithIgnoreCase("[spa_") || !Template.Name.EndsWithIgnoreCase("1]"))
            {
                return;
            }

            if (rn.Next(0, 100) > Template.SkillProb)
            {
                return;
            }

            const int a = 4551,
                      b = 4552,
                      c = 4553,
                      d = 4554;

            int x1 = 0,
                x2 = 0;
            int id = int.Parse(Template.Name.Substring(5).Replace("]", string.Empty));

            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.SkillProb)
            {
                target.AddAbnormalSpa(x1, false);
            }

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

            if (rn.Next(0, 100) <= Template.SkillProb)
            {
                target.AddAbnormalSpa(d, false);
            }
        }