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:
parent
ca3df9cfa7
commit
c8463e2eaf
33 changed files with 104 additions and 79 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue