chore(content): Cleans up frenzied whirlwind (#428)

This commit is contained in:
Kamron Batman 2021-01-24 12:34:54 -08:00 committed by GitHub
parent 178f71c6dc
commit 8580139544
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Server.Mobiles;
using Server.Spells;
namespace Server.Items
@ -12,8 +13,7 @@ namespace Server.Items
{
public override int BaseMana => 30;
public static Dictionary<Mobile, FrenziedWirlwindTimer> Registry { get; } =
new();
public static Dictionary<Mobile, FrenziedWirlwindTimer> Registry { get; } = new();
public override bool CheckSkills(Mobile from)
{
@ -43,44 +43,44 @@ namespace Server.Items
return;
}
var targets = attacker.GetMobilesInRange(1)
.Where(
m =>
m?.Deleted == false && m != defender && m != attacker &&
SpellHelper.ValidIndirectTarget(attacker, m) &&
m.Map == attacker.Map && m.Alive && attacker.CanSee(m) && attacker.CanBeHarmful(m) &&
attacker.InRange(m, weapon.MaxRange) && attacker.InLOS(m)
)
.ToList();
if (targets.Count == 0 || !CheckMana(attacker, true))
{
return;
}
attacker.FixedEffect(0x3728, 10, 15);
attacker.PlaySound(0x2A1);
// 5-15 damage
var amount = (int)(10.0 * ((Math.Max(
attacker.Skills.Bushido.Value,
attacker.Skills.Ninjitsu.Value
) - 50.0) / 70.0 + 5));
for (var i = 0; i < targets.Count; ++i)
bool didEffect = false;
var eable = attacker.GetMobilesInRange(1);
foreach (var m in eable)
{
var m = targets[i];
attacker.DoHarmful(m, true);
if (Registry.TryGetValue(m, out var timer))
if (m?.Deleted == false && m != defender && m != attacker &&
SpellHelper.ValidIndirectTarget(attacker, m) &&
m.Map == attacker.Map && m.Alive && attacker.CanSee(m) && attacker.CanBeHarmful(m) &&
attacker.InRange(m, weapon.MaxRange) && attacker.InLOS(m))
{
timer.Stop();
Registry.Remove(m);
}
attacker.DoHarmful(m, true);
timer = new FrenziedWirlwindTimer(attacker, m, amount);
timer.Start();
Registry.Add(m, timer);
if (Registry.TryGetValue(m, out var timer))
{
timer.Stop();
Registry.Remove(m);
}
timer = new FrenziedWirlwindTimer(attacker, m, amount);
timer.Start();
Registry.Add(m, timer);
didEffect = true;
}
}
eable.Free();
if (didEffect)
{
attacker.FixedEffect(0x3728, 10, 15);
attacker.PlaySound(0x2A1);
}
Timer.DelayCall(TimeSpan.FromSeconds(2.0), RepeatEffect, attacker);