Files
OldThink/Content.Shared/_White/BetrayalDagger/BackstabSystem.cs
Aviu00 735ff4a00b Всякое (#213)
* - tweak: Shotgun firerate standartization.

* - tweak: Less storage clothing size.

* - tweak: No spears for nukies.

* - tweak: Slightly buff ling armor.

* - tweak: Nerf tranquilizers.

* Revert "Tranquilizer balance (#23979)"

This reverts commit 9e1342f3e4.

* - remove: Disable whisper aspect.

* - fix: Borer fix on transform person.

* - fix: Items no longer get dropped on transform.

* - tweak: Reduce ling tentacle stun time.

* - tweak: Update chitinous armor desc.

* - fix: Transform sting range check.

* - tweak: More explosion resistance.

* - tweak: Fuel tanks can't create vacuum.

* - fix: Fix transform while being carried.

* - fix: Monkey form.

* - fix: I have no brain but I must live.

* - tweak: Update ling desc.

* - tweak: Fleshmend heals airloss.

* - fix: New wiki rules.

* - fix: Fix missing polymorph.

* - tweak: Structural damage now works better.

* - tweak: Less reflect prob.

* - fix: Popup fix.
2024-03-20 22:54:07 +03:00

58 lines
2.0 KiB
C#

using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes;
using Content.Shared.Mobs.Components;
using Content.Shared.Popups;
using Content.Shared.Weapons.Melee.Events;
using Robust.Shared.Network;
using Robust.Shared.Prototypes;
namespace Content.Shared._White.BetrayalDagger;
public sealed class BackstabSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<BackstabComponent, MeleeHitEvent>(HandleHit);
}
private void HandleHit(Entity<BackstabComponent> ent, ref MeleeHitEvent args)
{
if (args.HitEntities.Count != 1)
return;
var target = args.HitEntities[0];
if (target == args.User || !HasComp<MobStateComponent>(target) ||
!TryComp(target, out TransformComponent? xform))
return;
var userXform = Transform(args.User);
var v1 = (_transform.GetWorldRotation(xform) + MathHelper.PiOver2).ToVec(); // Flipped WorldVec
var v2 = _transform.GetWorldPosition(userXform) - _transform.GetWorldPosition(xform);
var angle = Vector3.CalculateAngle(new Vector3(v1), new Vector3(v2));
if (angle > ent.Comp.Tolerance.Theta)
return;
var damage = args.BaseDamage.GetTotal() * ent.Comp.DamageMultiplier;
args.BonusDamage = new DamageSpecifier(_prototypeManager.Index<DamageTypePrototype>("Slash"),
damage - args.BaseDamage.GetTotal());
args.PenetrateArmor = ent.Comp.PenetrateArmor;
if (!_net.IsServer)
return;
var message = Loc.GetString("backstab-damage-betrayal-dagger", ("damage", damage));
_popup.PopupEntity(message, args.User, args.User, PopupType.MediumCaution);
}
}