124 lines
4.6 KiB
C#
124 lines
4.6 KiB
C#
using System;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
using Server.Targeting;
|
|
|
|
namespace Server.SkillHandlers
|
|
{
|
|
public static class ArmsLore
|
|
{
|
|
public static void Initialize()
|
|
{
|
|
SkillInfo.Table[(int)SkillName.ArmsLore].Callback = OnUse;
|
|
}
|
|
|
|
public static TimeSpan OnUse(Mobile m)
|
|
{
|
|
m.Target = new InternalTarget();
|
|
|
|
m.SendLocalizedMessage(500349); // What item do you wish to get information about?
|
|
|
|
return TimeSpan.FromSeconds(1.0);
|
|
}
|
|
|
|
[PlayerVendorTarget]
|
|
private class InternalTarget : Target
|
|
{
|
|
public InternalTarget() : base(2, false, TargetFlags.None) => AllowNonlocal = true;
|
|
|
|
protected override void OnTarget(Mobile from, object targeted)
|
|
{
|
|
if (targeted is BaseWeapon weap)
|
|
{
|
|
if (from.CheckTargetSkill(SkillName.ArmsLore, weap, 0, 100))
|
|
{
|
|
if (weap.MaxHitPoints != 0)
|
|
{
|
|
var hp = Math.Clamp((int)(weap.HitPoints / (double)weap.MaxHitPoints * 10), 0, 9);
|
|
|
|
from.SendLocalizedMessage(1038285 + hp);
|
|
}
|
|
|
|
var damage = (weap.MaxDamage + weap.MinDamage) / 2;
|
|
var hand = weap.Layer == Layer.OneHanded ? 0 : 1;
|
|
|
|
if (damage < 3)
|
|
{
|
|
damage = 0;
|
|
}
|
|
else
|
|
{
|
|
damage = (int)Math.Ceiling(Math.Min(damage, 30) / 5.0);
|
|
}
|
|
|
|
var type = weap.Type;
|
|
|
|
if (type == WeaponType.Ranged)
|
|
{
|
|
from.SendLocalizedMessage(1038224 + damage * 9);
|
|
}
|
|
else if (type == WeaponType.Piercing)
|
|
{
|
|
from.SendLocalizedMessage(1038218 + hand + damage * 9);
|
|
}
|
|
else if (type == WeaponType.Slashing)
|
|
{
|
|
from.SendLocalizedMessage(1038220 + hand + damage * 9);
|
|
}
|
|
else if (type == WeaponType.Bashing)
|
|
{
|
|
from.SendLocalizedMessage(1038222 + hand + damage * 9);
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage(1038216 + hand + damage * 9);
|
|
}
|
|
|
|
if (weap.Poison != null && weap.PoisonCharges > 0)
|
|
{
|
|
from.SendLocalizedMessage(1038284); // It appears to have poison smeared on it.
|
|
}
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage(500353); // You are not certain...
|
|
}
|
|
}
|
|
else if (targeted is BaseArmor arm)
|
|
{
|
|
if (from.CheckTargetSkill(SkillName.ArmsLore, arm, 0, 100))
|
|
{
|
|
if (arm.MaxHitPoints != 0)
|
|
{
|
|
var hp = Math.Clamp((int)(arm.HitPoints / (double)arm.MaxHitPoints * 10), 0, 9);
|
|
|
|
from.SendLocalizedMessage(1038285 + hp);
|
|
}
|
|
|
|
from.SendLocalizedMessage(1038295 + (int)Math.Ceiling(Math.Min(arm.ArmorRating, 35) / 5.0));
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage(500353); // You are not certain...
|
|
}
|
|
}
|
|
else if (targeted is SwampDragon pet && pet.HasBarding)
|
|
{
|
|
if (from.CheckTargetSkill(SkillName.ArmsLore, pet, 0, 100))
|
|
{
|
|
var perc = Math.Clamp(4 * pet.BardingHP / pet.BardingMaxHP, 0, 4);
|
|
pet.PrivateOverheadMessage(MessageType.Regular, 0x3B2, 1053021 - perc, from.NetState);
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage(500353); // You are not certain...
|
|
}
|
|
}
|
|
else
|
|
{
|
|
from.SendLocalizedMessage(500352); // This is neither weapon nor armor.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|