-
Notifications
You must be signed in to change notification settings - Fork 164
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into billions-must-flip
- Loading branch information
Showing
125 changed files
with
2,175 additions
and
399 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
using Content.Shared.Damage.Systems; | ||
|
||
namespace Content.Client.Damage; | ||
|
||
public sealed class DamageOtherOnHitSystem : SharedDamageOtherOnHitSystem; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 0 additions & 19 deletions
19
Content.Server/Damage/Components/DamageOtherOnHitComponent.cs
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,65 +1,66 @@ | ||
using Content.Server.Administration.Logs; | ||
using Content.Server.Damage.Components; | ||
using Content.Server.Weapons.Ranged.Systems; | ||
using Content.Shared.Camera; | ||
using Content.Shared.Damage; | ||
using Content.Shared.Damage.Components; | ||
using Content.Shared.Damage.Events; | ||
using Content.Shared.Damage.Systems; | ||
using Content.Shared.Database; | ||
using Content.Shared.Effects; | ||
using Content.Shared.Item.ItemToggle.Components; | ||
using Content.Shared.Mobs.Components; | ||
using Content.Shared.Projectiles; | ||
using Content.Shared.Popups; | ||
using Content.Shared.Throwing; | ||
using Content.Shared.Weapons.Melee; | ||
using Robust.Server.GameObjects; | ||
using Robust.Shared.Audio; | ||
using Robust.Shared.Physics.Components; | ||
using Robust.Shared.Player; | ||
using Robust.Shared.Prototypes; | ||
using Robust.Shared.Utility; | ||
|
||
namespace Content.Server.Damage.Systems | ||
{ | ||
public sealed class DamageOtherOnHitSystem : EntitySystem | ||
public sealed class DamageOtherOnHitSystem : SharedDamageOtherOnHitSystem | ||
{ | ||
[Dependency] private readonly IAdminLogManager _adminLogger = default!; | ||
[Dependency] private readonly GunSystem _guns = default!; | ||
[Dependency] private readonly DamageableSystem _damageable = default!; | ||
[Dependency] private readonly DamageExamineSystem _damageExamine = default!; | ||
[Dependency] private readonly SharedCameraRecoilSystem _sharedCameraRecoil = default!; | ||
[Dependency] private readonly SharedColorFlashEffectSystem _color = default!; | ||
[Dependency] private readonly ThrownItemSystem _thrownItem = default!; | ||
[Dependency] private readonly SharedPopupSystem _popup = default!; | ||
[Dependency] private readonly StaminaSystem _stamina = default!; | ||
|
||
public override void Initialize() | ||
{ | ||
SubscribeLocalEvent<DamageOtherOnHitComponent, ThrowDoHitEvent>(OnDoHit); | ||
base.Initialize(); | ||
|
||
SubscribeLocalEvent<StaminaComponent, BeforeThrowEvent>(OnBeforeThrow); | ||
SubscribeLocalEvent<DamageOtherOnHitComponent, DamageExamineEvent>(OnDamageExamine); | ||
} | ||
|
||
private void OnDoHit(EntityUid uid, DamageOtherOnHitComponent component, ThrowDoHitEvent args) | ||
private void OnBeforeThrow(EntityUid uid, StaminaComponent component, ref BeforeThrowEvent args) | ||
{ | ||
var dmg = _damageable.TryChangeDamage(args.Target, component.Damage, component.IgnoreResistances, origin: args.Component.Thrower); | ||
|
||
// Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying. | ||
if (dmg != null && HasComp<MobStateComponent>(args.Target)) | ||
_adminLogger.Add(LogType.ThrowHit, $"{ToPrettyString(args.Target):target} received {dmg.GetTotal():damage} damage from collision"); | ||
|
||
if (dmg is { Empty: false }) | ||
{ | ||
_color.RaiseEffect(Color.Red, new List<EntityUid>() { args.Target }, Filter.Pvs(args.Target, entityManager: EntityManager)); | ||
} | ||
if (!TryComp<DamageOtherOnHitComponent>(args.ItemUid, out var damage)) | ||
return; | ||
|
||
_guns.PlayImpactSound(args.Target, dmg, null, false); | ||
if (TryComp<PhysicsComponent>(uid, out var body) && body.LinearVelocity.LengthSquared() > 0f) | ||
if (component.CritThreshold - component.StaminaDamage <= damage.StaminaCost) | ||
{ | ||
var direction = body.LinearVelocity.Normalized(); | ||
_sharedCameraRecoil.KickCamera(args.Target, direction); | ||
args.Cancelled = true; | ||
_popup.PopupEntity(Loc.GetString("throw-no-stamina", ("item", args.ItemUid)), uid, uid); | ||
return; | ||
} | ||
|
||
// TODO: If more stuff touches this then handle it after. | ||
if (TryComp<PhysicsComponent>(uid, out var physics)) | ||
{ | ||
_thrownItem.LandComponent(args.Thrown, args.Component, physics, false); | ||
} | ||
_stamina.TakeStaminaDamage(uid, damage.StaminaCost, component, visual: false); | ||
} | ||
|
||
private void OnDamageExamine(EntityUid uid, DamageOtherOnHitComponent component, ref DamageExamineEvent args) | ||
{ | ||
_damageExamine.AddDamageExamine(args.Message, component.Damage, Loc.GetString("damage-throw")); | ||
_damageExamine.AddDamageExamine(args.Message, GetDamage(uid, component, args.User), Loc.GetString("damage-throw")); | ||
|
||
if (component.StaminaCost == 0) | ||
return; | ||
|
||
var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( | ||
Loc.GetString("damage-stamina-cost", | ||
("type", Loc.GetString("damage-throw")), ("cost", component.StaminaCost))); | ||
args.Message.PushNewline(); | ||
args.Message.AddMessage(staminaCostMarkup); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
Content.Shared/Customization/Systems/CharacterRequirements.Misc.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
using Content.Shared.Customization.Systems; | ||
using Content.Shared.Preferences; | ||
using Content.Shared.Roles; | ||
using JetBrains.Annotations; | ||
using Robust.Shared.Configuration; | ||
using Robust.Shared.Prototypes; | ||
using Robust.Shared.Serialization; | ||
|
||
namespace Content.Shared.Customization.Systems; | ||
|
||
/// <summary> | ||
/// Requires the server to have a specific CVar value. | ||
/// </summary> | ||
[UsedImplicitly, Serializable, NetSerializable,] | ||
public sealed partial class CVarRequirement : CharacterRequirement | ||
{ | ||
[DataField("cvar", required: true)] | ||
public string CVar; | ||
|
||
[DataField(required: true)] | ||
public string RequiredValue; | ||
|
||
public override bool IsValid( | ||
JobPrototype job, | ||
HumanoidCharacterProfile profile, | ||
Dictionary<string, TimeSpan> playTimes, | ||
bool whitelisted, | ||
IPrototype prototype, | ||
IEntityManager entityManager, | ||
IPrototypeManager prototypeManager, | ||
IConfigurationManager configManager, | ||
out string? reason, | ||
int depth = 0 | ||
) | ||
{ | ||
if (!configManager.IsCVarRegistered(CVar)) | ||
{ | ||
reason = null; | ||
return true; | ||
} | ||
|
||
const string color = "lightblue"; | ||
var cvar = configManager.GetCVar(CVar); | ||
var isValid = cvar.ToString()! == RequiredValue; | ||
|
||
reason = Loc.GetString( | ||
"character-cvar-requirement", | ||
("inverted", Inverted), | ||
("color", color), | ||
("cvar", CVar), | ||
("value", RequiredValue)); | ||
|
||
return isValid; | ||
} | ||
} |
Oops, something went wrong.