ModernUO/Projects/UOContent/Skills/ForensicEval.cs
Kamron Batman 8f8b650ab5
fix(core): Converts healthbar packets (#367)
- [X] Converts healthbar packets
2020-12-27 23:22:21 -08:00

118 lines
4.2 KiB
C#

using System;
using Server.Buffers;
using Server.Items;
using Server.Mobiles;
using Server.Targeting;
namespace Server.SkillHandlers
{
public static class ForensicEvaluation
{
public static void Initialize()
{
SkillInfo.Table[(int)SkillName.Forensics].Callback = OnUse;
}
public static TimeSpan OnUse(Mobile m)
{
m.Target = new ForensicTarget();
m.RevealingAction();
m.SendLocalizedMessage(501000); // Show me the crime.
return TimeSpan.FromSeconds(1.0);
}
public class ForensicTarget : Target
{
public ForensicTarget() : base(10, false, TargetFlags.None)
{
}
protected override void OnTarget(Mobile from, object target)
{
if (target is Mobile)
{
if (from.CheckTargetSkill(SkillName.Forensics, target, 40.0, 100.0))
{
if (target is PlayerMobile pm && pm.NpcGuild == NpcGuild.ThievesGuild)
{
from.SendLocalizedMessage(501004); // That individual is a thief!
}
else
{
from.SendLocalizedMessage(501003); // You notice nothing unusual.
}
}
else
{
from.SendLocalizedMessage(501001); // You cannot determain anything useful.
}
}
else if (target is Corpse c)
{
if (from.CheckTargetSkill(SkillName.Forensics, c, 0.0, 100.0))
{
if (c.m_Forensicist != null)
{
from.SendLocalizedMessage(
1042750,
c.m_Forensicist
); // The forensicist ~1_NAME~ has already discovered that:
}
else
{
c.m_Forensicist = from.Name;
}
if (((Body)c.Amount).IsHuman)
{
from.SendLocalizedMessage(
1042751,
c.Killer == null ? "no one" : c.Killer.Name
); // This person was killed by ~1_KILLER_NAME~
}
if (c.Looters.Count > 0)
{
using var sb = new ValueStringBuilder(stackalloc char[128]);
for (var i = 0; i < c.Looters.Count; i++)
{
if (i > 0)
{
sb.Append(i == c.Looters.Count - 1 ? ", and " : ", ");
}
sb.Append(c.Looters[i].Name);
}
from.SendLocalizedMessage(
1042752,
sb.ToString()
); // This body has been disturbed by ~1_PLAYER_NAMES~
}
else
{
from.SendLocalizedMessage(501002); // The corpse has not be desecrated.
}
}
else
{
from.SendLocalizedMessage(501001); // You cannot determain anything useful.
}
}
else if (target is ILockpickable p)
{
if (p.Picker != null)
{
from.SendLocalizedMessage(1042749, p.Picker.Name); // This lock was opened by ~1_PICKER_NAME~
}
else
{
from.SendLocalizedMessage(501003); // You notice nothing unusual.
}
}
}
}
}
}