fix: Adds FindItemOnLayer generic (#1223)
This commit is contained in:
parent
053dbcbad0
commit
fd6f4239e2
20 changed files with 112 additions and 169 deletions
|
|
@ -717,10 +717,7 @@ namespace Server.Engines.ConPVP
|
|||
{
|
||||
mob.Resurrect();
|
||||
|
||||
if (mob.FindItemOnLayer(Layer.OuterTorso) is DeathRobe robe)
|
||||
{
|
||||
robe.Delete();
|
||||
}
|
||||
mob.FindItemOnLayer<DeathRobe>(Layer.OuterTorso)?.Delete();
|
||||
|
||||
if (cont is Corpse corpse)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1016,20 +1016,22 @@ namespace Server.Engines.Craft
|
|||
return;
|
||||
}
|
||||
|
||||
int checkResHue = 0, checkMaxAmount = 0;
|
||||
var checkResHue = 0;
|
||||
var checkMaxAmount = 0;
|
||||
TextDefinition checkMessage = null;
|
||||
|
||||
var consumeRes = ConsumeRes(
|
||||
from,
|
||||
typeRes,
|
||||
craftSystem,
|
||||
ref checkResHue,
|
||||
ref checkMaxAmount,
|
||||
ConsumeType.None,
|
||||
ref checkMessage
|
||||
);
|
||||
|
||||
// Not enough resource to craft it
|
||||
if (!(ConsumeRes(
|
||||
from,
|
||||
typeRes,
|
||||
craftSystem,
|
||||
ref checkResHue,
|
||||
ref checkMaxAmount,
|
||||
ConsumeType.None,
|
||||
ref checkMessage
|
||||
)
|
||||
&& ConsumeAttributes(from, ref checkMessage, false)))
|
||||
if (!(consumeRes && ConsumeAttributes(from, ref checkMessage, false)))
|
||||
{
|
||||
if (tool?.Deleted == false && tool.UsesRemaining > 0)
|
||||
{
|
||||
|
|
@ -1058,9 +1060,18 @@ namespace Server.Engines.Craft
|
|||
|
||||
if (CheckSkills(from, typeRes, craftSystem, ref ignored, out var allRequiredSkills))
|
||||
{
|
||||
consumeRes = ConsumeRes(
|
||||
from,
|
||||
typeRes,
|
||||
craftSystem,
|
||||
ref resHue,
|
||||
ref maxAmount,
|
||||
ConsumeType.All,
|
||||
ref message
|
||||
);
|
||||
|
||||
// Not enough resource to craft it
|
||||
if (!(ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.All, ref message)
|
||||
&& ConsumeAttributes(from, ref message, true)))
|
||||
if (!(consumeRes && ConsumeAttributes(from, ref message, true)))
|
||||
{
|
||||
if (tool?.Deleted == false && tool.UsesRemaining > 0)
|
||||
{
|
||||
|
|
@ -1083,13 +1094,16 @@ namespace Server.Engines.Craft
|
|||
|
||||
tool.UsesRemaining--;
|
||||
|
||||
if (craftSystem is DefBlacksmithy &&
|
||||
from.FindItemOnLayer(Layer.OneHanded) is AncientSmithyHammer hammer && hammer != tool)
|
||||
if (craftSystem is DefBlacksmithy)
|
||||
{
|
||||
hammer.UsesRemaining--;
|
||||
if (hammer.UsesRemaining < 1)
|
||||
var hammer = from.FindItemOnLayer<AncientSmithyHammer>(Layer.OneHanded);
|
||||
if (hammer != tool)
|
||||
{
|
||||
hammer.Delete();
|
||||
hammer.UsesRemaining--;
|
||||
if (hammer.UsesRemaining < 1)
|
||||
{
|
||||
hammer.Delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,9 +84,10 @@ namespace Server.Engines.Craft
|
|||
return EnhanceResult.BadResource;
|
||||
}
|
||||
|
||||
int resHue = 0, maxAmount = 0;
|
||||
int resHue = 0;
|
||||
int maxAmount = 0;
|
||||
|
||||
if (!craftItem.ConsumeRes(
|
||||
var consumeRes = craftItem.ConsumeRes(
|
||||
from,
|
||||
resType,
|
||||
craftSystem,
|
||||
|
|
@ -94,20 +95,19 @@ namespace Server.Engines.Craft
|
|||
ref maxAmount,
|
||||
ConsumeType.None,
|
||||
ref resMessage
|
||||
))
|
||||
);
|
||||
|
||||
if (!consumeRes)
|
||||
{
|
||||
return EnhanceResult.NoResources;
|
||||
}
|
||||
|
||||
if (craftSystem is DefBlacksmithy)
|
||||
{
|
||||
if (from.FindItemOnLayer(Layer.OneHanded) is AncientSmithyHammer hammer)
|
||||
var hammer = from.FindItemOnLayer<AncientSmithyHammer>(Layer.OneHanded);
|
||||
if (hammer != null && --hammer.UsesRemaining < 1)
|
||||
{
|
||||
hammer.UsesRemaining--;
|
||||
if (hammer.UsesRemaining < 1)
|
||||
{
|
||||
hammer.Delete();
|
||||
}
|
||||
hammer.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ namespace Server.Engines.Quests.Hag
|
|||
{
|
||||
PlaySound(Utility.RandomBool() ? 0x42E : 0x43F);
|
||||
|
||||
var hat = player.FindItemOnLayer(Layer.Helm);
|
||||
var tricorne = hat is TricorneHat;
|
||||
var tricorne = player.FindItemOnLayer<TricorneHat>(Layer.Helm) != null;
|
||||
|
||||
if (tricorne && player.BAC >= 20)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -530,20 +530,13 @@ namespace Server.Items
|
|||
return list;
|
||||
}
|
||||
|
||||
public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer(Layer.OneHanded) as Spellbook;
|
||||
public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer<Spellbook>(Layer.OneHanded);
|
||||
|
||||
public static bool ValidateSpellbook(Spellbook book, int spellID, SpellbookType type) =>
|
||||
book.SpellbookType == type && (spellID == -1 || book.HasSpell(spellID));
|
||||
|
||||
public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted)
|
||||
{
|
||||
if (!Ethic.CheckTrade(from, to, newOwner, this))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.AllowSecureTrade(from, to, newOwner, accepted);
|
||||
}
|
||||
public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted) =>
|
||||
Ethic.CheckTrade(from, to, newOwner, this) && base.AllowSecureTrade(from, to, newOwner, accepted);
|
||||
|
||||
public override bool CanEquip(Mobile from)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1373,7 +1373,7 @@ namespace Server.Items
|
|||
return false;
|
||||
}
|
||||
|
||||
var shield = defender.FindItemOnLayer(Layer.TwoHanded) as BaseShield;
|
||||
var shield = defender.FindItemOnLayer<BaseShield>(Layer.TwoHanded);
|
||||
|
||||
var parry = defender.Skills.Parry.Value;
|
||||
var bushidoNonRacial = defender.Skills.Bushido.NonRacialValue;
|
||||
|
|
@ -1489,7 +1489,7 @@ namespace Server.Items
|
|||
defender.Stam += Utility.RandomMinMax(1, (int)(bushido / 5));
|
||||
}
|
||||
|
||||
var shield = defender.FindItemOnLayer(Layer.TwoHanded) as BaseShield;
|
||||
var shield = defender.FindItemOnLayer<BaseShield>(Layer.TwoHanded);
|
||||
|
||||
shield?.OnHit(this, damage);
|
||||
}
|
||||
|
|
@ -1785,9 +1785,11 @@ namespace Server.Items
|
|||
out var direct
|
||||
);
|
||||
|
||||
if (Core.ML && this is BaseRanged && attacker.FindItemOnLayer(Layer.Cloak) is BaseQuiver quiver)
|
||||
if (Core.ML && this is BaseRanged)
|
||||
{
|
||||
quiver.AlterBowDamage(ref phys, ref fire, ref cold, ref pois, ref nrgy, ref chaos, ref direct);
|
||||
attacker
|
||||
.FindItemOnLayer<BaseQuiver>(Layer.Cloak)
|
||||
?.AlterBowDamage(ref phys, ref fire, ref cold, ref pois, ref nrgy, ref chaos, ref direct);
|
||||
}
|
||||
|
||||
if (Consecrated)
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ namespace Server.Items
|
|||
{
|
||||
if (attacker.Player)
|
||||
{
|
||||
var quiver = attacker.FindItemOnLayer(Layer.Cloak) as BaseQuiver;
|
||||
var quiver = attacker.FindItemOnLayer<BaseQuiver>(Layer.Cloak);
|
||||
var pack = attacker.Backpack;
|
||||
|
||||
if (quiver == null || Utility.Random(100) >= quiver.LowerAmmoCost)
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ namespace Server
|
|||
|
||||
if (archer && from != null)
|
||||
{
|
||||
quiver = from.FindItemOnLayer(Layer.Cloak) as BaseQuiver;
|
||||
quiver = from.FindItemOnLayer<BaseQuiver>(Layer.Cloak);
|
||||
}
|
||||
|
||||
int totalDamage;
|
||||
|
|
|
|||
|
|
@ -67,23 +67,14 @@ namespace Server.Mobiles
|
|||
AddLoot(LootPack.LowScrolls);
|
||||
}
|
||||
|
||||
public override bool IsEnemy(Mobile m)
|
||||
{
|
||||
if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsEnemy(m);
|
||||
}
|
||||
public override bool IsEnemy(Mobile m) =>
|
||||
(!m.Player || m.FindItemOnLayer<OrcishKinMask>(Layer.Helm) == null) && base.IsEnemy(m);
|
||||
|
||||
public override void AggressiveAction(Mobile aggressor, bool criminal)
|
||||
{
|
||||
base.AggressiveAction(aggressor, criminal);
|
||||
|
||||
var item = aggressor.FindItemOnLayer(Layer.Helm);
|
||||
|
||||
if (item is OrcishKinMask)
|
||||
if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item)
|
||||
{
|
||||
AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0);
|
||||
item.Delete();
|
||||
|
|
|
|||
|
|
@ -85,23 +85,14 @@ namespace Server.Mobiles
|
|||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public override bool IsEnemy(Mobile m)
|
||||
{
|
||||
if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsEnemy(m);
|
||||
}
|
||||
public override bool IsEnemy(Mobile m) =>
|
||||
(!m.Player || m.FindItemOnLayer<OrcishKinMask>(Layer.Helm) == null) && base.IsEnemy(m);
|
||||
|
||||
public override void AggressiveAction(Mobile aggressor, bool criminal)
|
||||
{
|
||||
base.AggressiveAction(aggressor, criminal);
|
||||
|
||||
var item = aggressor.FindItemOnLayer(Layer.Helm);
|
||||
|
||||
if (item is OrcishKinMask)
|
||||
if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item)
|
||||
{
|
||||
AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0);
|
||||
item.Delete();
|
||||
|
|
|
|||
|
|
@ -73,23 +73,14 @@ namespace Server.Mobiles
|
|||
AddLoot(LootPack.Meager);
|
||||
}
|
||||
|
||||
public override bool IsEnemy(Mobile m)
|
||||
{
|
||||
if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsEnemy(m);
|
||||
}
|
||||
public override bool IsEnemy(Mobile m) =>
|
||||
(!m.Player || m.FindItemOnLayer<OrcishKinMask>(Layer.Helm) == null) && base.IsEnemy(m);
|
||||
|
||||
public override void AggressiveAction(Mobile aggressor, bool criminal)
|
||||
{
|
||||
base.AggressiveAction(aggressor, criminal);
|
||||
|
||||
var item = aggressor.FindItemOnLayer(Layer.Helm);
|
||||
|
||||
if (item is OrcishKinMask)
|
||||
if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item)
|
||||
{
|
||||
AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0);
|
||||
item.Delete();
|
||||
|
|
|
|||
|
|
@ -74,23 +74,14 @@ namespace Server.Mobiles
|
|||
AddLoot(LootPack.Rich);
|
||||
}
|
||||
|
||||
public override bool IsEnemy(Mobile m)
|
||||
{
|
||||
if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsEnemy(m);
|
||||
}
|
||||
public override bool IsEnemy(Mobile m) =>
|
||||
(!m.Player || m.FindItemOnLayer<OrcishKinMask>(Layer.Helm) == null) && base.IsEnemy(m);
|
||||
|
||||
public override void AggressiveAction(Mobile aggressor, bool criminal)
|
||||
{
|
||||
base.AggressiveAction(aggressor, criminal);
|
||||
|
||||
var item = aggressor.FindItemOnLayer(Layer.Helm);
|
||||
|
||||
if (item is OrcishKinMask)
|
||||
if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item)
|
||||
{
|
||||
AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0);
|
||||
item.Delete();
|
||||
|
|
|
|||
|
|
@ -85,23 +85,14 @@ namespace Server.Mobiles
|
|||
AddLoot(LootPack.Meager, 2);
|
||||
}
|
||||
|
||||
public override bool IsEnemy(Mobile m)
|
||||
{
|
||||
if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsEnemy(m);
|
||||
}
|
||||
public override bool IsEnemy(Mobile m) =>
|
||||
(!m.Player || m.FindItemOnLayer<OrcishKinMask>(Layer.Helm) == null) && base.IsEnemy(m);
|
||||
|
||||
public override void AggressiveAction(Mobile aggressor, bool criminal)
|
||||
{
|
||||
base.AggressiveAction(aggressor, criminal);
|
||||
|
||||
var item = aggressor.FindItemOnLayer(Layer.Helm);
|
||||
|
||||
if (item is OrcishKinMask)
|
||||
if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item)
|
||||
{
|
||||
AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0);
|
||||
item.Delete();
|
||||
|
|
|
|||
|
|
@ -81,23 +81,14 @@ namespace Server.Mobiles
|
|||
// TODO: evil orc helm
|
||||
}
|
||||
|
||||
public override bool IsEnemy(Mobile m)
|
||||
{
|
||||
if (m.Player && m.FindItemOnLayer(Layer.Helm) is OrcishKinMask)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.IsEnemy(m);
|
||||
}
|
||||
public override bool IsEnemy(Mobile m) =>
|
||||
(!m.Player || m.FindItemOnLayer<OrcishKinMask>(Layer.Helm) == null) && base.IsEnemy(m);
|
||||
|
||||
public override void AggressiveAction(Mobile aggressor, bool criminal)
|
||||
{
|
||||
base.AggressiveAction(aggressor, criminal);
|
||||
|
||||
var item = aggressor.FindItemOnLayer(Layer.Helm);
|
||||
|
||||
if (item is OrcishKinMask)
|
||||
if (aggressor.FindItemOnLayer(Layer.Helm) is OrcishKinMask item)
|
||||
{
|
||||
AOS.Damage(aggressor, 50, 0, 100, 0, 0, 0);
|
||||
item.Delete();
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@ namespace Server.Mobiles
|
|||
return;
|
||||
}
|
||||
|
||||
if (m.FindItemOnLayer(Layer.TwoHanded) is Torch { Burning: true })
|
||||
if (m.FindItemOnLayer<Torch>(Layer.TwoHanded)?.Burning == true)
|
||||
{
|
||||
StopEffect(m, true);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -33,12 +33,24 @@ namespace Server.Spells.Bushido
|
|||
return false;
|
||||
}
|
||||
|
||||
if (caster.FindItemOnLayer(Layer.OneHanded) is not BaseWeapon weap)
|
||||
{
|
||||
weap = caster.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon;
|
||||
}
|
||||
var weap =
|
||||
caster.FindItemOnLayer<BaseWeapon>(Layer.OneHanded) ??
|
||||
caster.FindItemOnLayer<BaseWeapon>(Layer.TwoHanded);
|
||||
|
||||
if (weap != null)
|
||||
if (weap == null)
|
||||
{
|
||||
if (caster.FindItemOnLayer(Layer.TwoHanded) is not BaseShield)
|
||||
{
|
||||
if (messages)
|
||||
{
|
||||
// You must have a weapon or a shield equipped to use this ability!
|
||||
caster.SendLocalizedMessage(1062944);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Core.ML && caster.Skills[weap.Skill].Base < 50)
|
||||
{
|
||||
|
|
@ -51,15 +63,6 @@ namespace Server.Spells.Bushido
|
|||
return false;
|
||||
}
|
||||
}
|
||||
else if (caster.FindItemOnLayer(Layer.TwoHanded) is not BaseShield)
|
||||
{
|
||||
if (messages)
|
||||
{
|
||||
caster.SendLocalizedMessage(1062944); // You must have a weapon or a shield equipped to use this ability!
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!caster.CanBeginAction<Evasion>())
|
||||
{
|
||||
|
|
@ -76,10 +79,9 @@ namespace Server.Spells.Bushido
|
|||
|
||||
public static bool CheckSpellEvasion(Mobile defender)
|
||||
{
|
||||
if (defender.FindItemOnLayer(Layer.OneHanded) is not BaseWeapon weap)
|
||||
{
|
||||
weap = defender.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon;
|
||||
}
|
||||
var weap =
|
||||
defender.FindItemOnLayer<BaseWeapon>(Layer.OneHanded) ??
|
||||
defender.FindItemOnLayer<BaseWeapon>(Layer.TwoHanded);
|
||||
|
||||
if (Core.ML)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -12,22 +12,18 @@ namespace Server.Spells.Ninjitsu
|
|||
|
||||
public override bool Validate(Mobile from)
|
||||
{
|
||||
if (from.FindItemOnLayer(Layer.TwoHanded) is BaseShield)
|
||||
var twoHanded = from.FindItemOnLayer(Layer.TwoHanded);
|
||||
if (twoHanded is BaseShield)
|
||||
{
|
||||
from.SendLocalizedMessage(1063096); // You cannot use this ability while holding a shield.
|
||||
return false;
|
||||
}
|
||||
|
||||
Item handOne = from.FindItemOnLayer(Layer.OneHanded) as BaseWeapon;
|
||||
var meleeWeapon =
|
||||
twoHanded is BaseWeapon and not BaseRanged ||
|
||||
from.FindItemOnLayer(Layer.OneHanded) is BaseWeapon and not BaseRanged;
|
||||
|
||||
if (handOne != null && handOne is not BaseRanged)
|
||||
{
|
||||
return base.Validate(from);
|
||||
}
|
||||
|
||||
Item handTwo = from.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon;
|
||||
|
||||
if (handTwo != null && handTwo is not BaseRanged)
|
||||
if (meleeWeapon)
|
||||
{
|
||||
return base.Validate(from);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue