* Add examines for damage values Even immersive sims still give you values. We should also do this for armour so people don't have to yml dive and so the general public actually know the balance of things. * Slightly better * Cleanup
77 lines
2.4 KiB
C#
77 lines
2.4 KiB
C#
using Content.Server.Projectiles.Components;
|
|
using Content.Shared.Damage;
|
|
using Content.Shared.Examine;
|
|
using Content.Shared.FixedPoint;
|
|
using Content.Shared.Verbs;
|
|
using Content.Shared.Weapons.Ranged.Components;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Server.Weapon.Ranged.Systems;
|
|
|
|
public sealed partial class GunSystem
|
|
{
|
|
protected override void InitializeCartridge()
|
|
{
|
|
base.InitializeCartridge();
|
|
SubscribeLocalEvent<CartridgeAmmoComponent, ExaminedEvent>(OnCartridgeExamine);
|
|
SubscribeLocalEvent<CartridgeAmmoComponent, GetVerbsEvent<ExamineVerb>>(OnCartridgeVerbExamine);
|
|
}
|
|
|
|
private void OnCartridgeVerbExamine(EntityUid uid, CartridgeAmmoComponent component, GetVerbsEvent<ExamineVerb> args)
|
|
{
|
|
if (!args.CanInteract || !args.CanAccess)
|
|
return;
|
|
|
|
var damageSpec = GetProjectileDamage(component.Prototype);
|
|
|
|
if (damageSpec == null)
|
|
return;
|
|
|
|
var verb = new ExamineVerb()
|
|
{
|
|
Act = () =>
|
|
{
|
|
var markup = Damageable.GetDamageExamine(damageSpec, Loc.GetString("damage-projectile"));
|
|
_examine.SendExamineTooltip(args.User, uid, markup, false, false);
|
|
},
|
|
Text = Loc.GetString("damage-examinable-verb-text"),
|
|
Message = Loc.GetString("damage-examinable-verb-message"),
|
|
Category = VerbCategory.Examine,
|
|
IconTexture = "/Textures/Interface/VerbIcons/smite.svg.192dpi.png"
|
|
};
|
|
|
|
args.Verbs.Add(verb);
|
|
}
|
|
|
|
private DamageSpecifier? GetProjectileDamage(string proto)
|
|
{
|
|
if (!ProtoManager.TryIndex<EntityPrototype>(proto, out var entityProto))
|
|
return null;
|
|
|
|
if (entityProto.Components
|
|
.TryGetValue(_factory.GetComponentName(typeof(ProjectileComponent)), out var projectile))
|
|
{
|
|
var p = (ProjectileComponent) projectile.Component;
|
|
|
|
if (p.Damage.Total > FixedPoint2.Zero)
|
|
{
|
|
return p.Damage;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private void OnCartridgeExamine(EntityUid uid, CartridgeAmmoComponent component, ExaminedEvent args)
|
|
{
|
|
if (component.Spent)
|
|
{
|
|
args.PushMarkup(Loc.GetString("gun-cartridge-spent"));
|
|
}
|
|
else
|
|
{
|
|
args.PushMarkup(Loc.GetString("gun-cartridge-unspent"));
|
|
}
|
|
}
|
|
}
|