fix: Fixes lightning arrow (#1583)

### Summary
- [X] Lightning arrow no longer allows SDI
- [X] Lightning arrow now proc's even without arrows
- [X] Fixed NPE with lightning arrow when a monster is already killed.
This commit is contained in:
Kamron Batman 2023-11-05 17:36:09 -08:00 • committed by GitHub
parent ca3df9cfa7
commit c8463e2eaf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 104 additions and 79 deletions

View file

@ -1066,21 +1066,19 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
{
var m = from;
var serial = Serial;
if (strBonus != 0)
{
m.AddStatMod(new StatMod(StatType.Str, $"{serial}Str", strBonus, TimeSpan.Zero));
m.AddStatMod(new StatMod(StatType.Str, $"{Serial}Str", strBonus, TimeSpan.Zero));
}
if (dexBonus != 0)
{
m.AddStatMod(new StatMod(StatType.Dex, $"{serial}Dex", dexBonus, TimeSpan.Zero));
m.AddStatMod(new StatMod(StatType.Dex, $"{Serial}Dex", dexBonus, TimeSpan.Zero));
}
if (intBonus != 0)
{
m.AddStatMod(new StatMod(StatType.Int, $"{serial}Int", intBonus, TimeSpan.Zero));
m.AddStatMod(new StatMod(StatType.Int, $"{Serial}Int", intBonus, TimeSpan.Zero));
}
}
@ -1871,6 +1869,7 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
damage = AOS.Scale(damage, 100 + percentageBonus);
var defLoc = new WorldLocation(defender);
var bcAtt = attacker as BaseCreature;
var bcDef = defender as BaseCreature;
@ -2210,7 +2209,7 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
bcAtt?.OnGaveMeleeAttack(defender, damage);
bcDef?.OnGotMeleeAttack(attacker, damage);
a?.OnHit(attacker, defender, damage);
a?.OnHit(attacker, defender, damage, defLoc);
move?.OnHit(attacker, defender, damage);
ForceOfNature.OnHit(attacker, defender);
@ -2276,23 +2275,26 @@ public abstract partial class BaseWeapon : Item, IWeapon, IFactionItem, ICraftab
public virtual CheckSlayerResult CheckSlayers(Mobile attacker, Mobile defender)
{
var atkWeapon = attacker.Weapon as BaseWeapon;
var atkSlayer = SlayerGroup.GetEntryByName(atkWeapon?.Slayer ?? SlayerName.None);
var atkSlayer2 = SlayerGroup.GetEntryByName(atkWeapon?.Slayer2 ?? SlayerName.None);
if (atkWeapon is ButchersWarCleaver && TalismanSlayer.Slays(TalismanSlayerName.Bovine, defender))
if (WeaponAbility.GetCurrentAbility(attacker) is not LightningArrow)
{
return CheckSlayerResult.Slayer;
}
var atkWeapon = attacker.Weapon as BaseWeapon;
var atkSlayer = SlayerGroup.GetEntryByName(atkWeapon?.Slayer ?? SlayerName.None);
var atkSlayer2 = SlayerGroup.GetEntryByName(atkWeapon?.Slayer2 ?? SlayerName.None);
if (atkSlayer?.Slays(defender) == true || atkSlayer2?.Slays(defender) == true)
{
return CheckSlayerResult.Slayer;
}
if (atkWeapon is ButchersWarCleaver && TalismanSlayer.Slays(TalismanSlayerName.Bovine, defender))
{
return CheckSlayerResult.Slayer;
}
if (attacker.Talisman is BaseTalisman talisman && TalismanSlayer.Slays(talisman.Slayer, defender))
{
return CheckSlayerResult.Slayer;
if (atkSlayer?.Slays(defender) == true || atkSlayer2?.Slays(defender) == true)
{
return CheckSlayerResult.Slayer;
}
if (attacker.Talisman is BaseTalisman talisman && TalismanSlayer.Slays(talisman.Slayer, defender))
{
return CheckSlayerResult.Slayer;
}
}
if (!Core.SE)