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); }
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)); }
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); }
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); } }