From 84e20049b871ea25b6942b966d9afcf9a3381725 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Thu, 25 Aug 2022 15:41:37 +0200 Subject: [PATCH] Important fix for table climbing (#10803) --- Content.Server/Climbing/ClimbSystem.cs | 41 ++++++++++++++++++ .../Climbing/Components/ClimbableComponent.cs | 35 +++++++++++++++ Content.Shared/CCVar/CCVars.cs | 6 +++ Resources/Audio/Items/attributions.yml | 9 ++++ Resources/Audio/Items/trayhit1.ogg | Bin 0 -> 10736 bytes Resources/Audio/Items/trayhit2.ogg | Bin 0 -> 21600 bytes .../Furniture/Tables/base_structuretables.yml | 6 +++ .../Structures/Furniture/Tables/tables.yml | 10 ++++- .../Prototypes/SoundCollections/tray.yml | 5 +++ 9 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 Resources/Audio/Items/attributions.yml create mode 100644 Resources/Audio/Items/trayhit1.ogg create mode 100644 Resources/Audio/Items/trayhit2.ogg create mode 100644 Resources/Prototypes/SoundCollections/tray.yml diff --git a/Content.Server/Climbing/ClimbSystem.cs b/Content.Server/Climbing/ClimbSystem.cs index d41f94d45c..c43e26b4a9 100644 --- a/Content.Server/Climbing/ClimbSystem.cs +++ b/Content.Server/Climbing/ClimbSystem.cs @@ -1,11 +1,14 @@ using Content.Server.Climbing.Components; using Content.Server.DoAfter; +using Content.Server.Interaction.Components; using Content.Server.Popups; using Content.Server.Stunnable; +using Content.Server.Xenoarchaeology.XenoArtifacts.Triggers.Systems; using Content.Shared.ActionBlocker; using Content.Shared.Body.Components; using Content.Shared.Body.Part; using Content.Shared.Buckle.Components; +using Content.Shared.CCVar; using Content.Shared.Climbing; using Content.Shared.Damage; using Content.Shared.DragDrop; @@ -16,17 +19,21 @@ using Content.Shared.Physics; using Content.Shared.Popups; using Content.Shared.Verbs; using JetBrains.Annotations; +using Robust.Server.GameObjects; +using Robust.Shared.Configuration; using Robust.Shared.GameStates; using Robust.Shared.Physics; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Dynamics; using Robust.Shared.Player; +using SharpZstd.Interop; namespace Content.Server.Climbing; [UsedImplicitly] public sealed class ClimbSystem : SharedClimbSystem { + [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; [Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; @@ -34,6 +41,7 @@ public sealed class ClimbSystem : SharedClimbSystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly StunSystem _stunSystem = default!; + [Dependency] private readonly AudioSystem _audioSystem = default!; private const string ClimbingFixtureName = "climb"; private const int ClimbingCollisionGroup = (int) (CollisionGroup.TableLayer | CollisionGroup.LowImpassable); @@ -80,6 +88,9 @@ public sealed class ClimbSystem : SharedClimbSystem if (!args.CanAccess || !args.CanInteract || !_actionBlockerSystem.CanMove(args.User)) return; + if (component.Bonk && _cfg.GetCVar(CCVars.GameTableBonk)) + return; + if (!TryComp(args.User, out ClimbingComponent? climbingComponent) || climbingComponent.IsClimbing) return; @@ -102,6 +113,9 @@ public sealed class ClimbSystem : SharedClimbSystem if (!TryComp(entityToMove, out ClimbingComponent? climbingComponent) || climbingComponent.IsClimbing) return; + if (TryBonk(component, user)) + return; + _doAfterSystem.DoAfter(new DoAfterEventArgs(entityToMove, component.ClimbDelay, default, climbable) { BreakOnTargetMove = true, @@ -112,6 +126,33 @@ public sealed class ClimbSystem : SharedClimbSystem }); } + private bool TryBonk(ClimbableComponent component, EntityUid user) + { + if (!component.Bonk) + return false; + + if (!_cfg.GetCVar(CCVars.GameTableBonk)) + { + // Not set to always bonk, try clumsy roll. + if (!TryComp(user, out ClumsyComponent? clumsy)) + return false; + + if (!clumsy.RollClumsy(component.BonkClumsyChance)) + return false; + } + + // BONK! + + _audioSystem.PlayPvs(component.BonkSound, component.Owner); + + _stunSystem.TryKnockdown(user, TimeSpan.FromSeconds(component.BonkTime), true); + + if (component.BonkDamage is { } bonkDmg) + _damageableSystem.TryChangeDamage(user, bonkDmg, true); + + return true; + } + private void OnClimbFinished(EntityUid uid, ClimbingComponent climbing, ClimbFinishedEvent args) { Climb(uid, args.User, args.Climbable, climbing: climbing); diff --git a/Content.Server/Climbing/Components/ClimbableComponent.cs b/Content.Server/Climbing/Components/ClimbableComponent.cs index 67efd88c86..53cd673d5c 100644 --- a/Content.Server/Climbing/Components/ClimbableComponent.cs +++ b/Content.Server/Climbing/Components/ClimbableComponent.cs @@ -1,4 +1,7 @@ +using Content.Shared.CCVar; using Content.Shared.Climbing; +using Content.Shared.Damage; +using Robust.Shared.Audio; namespace Content.Server.Climbing.Components; @@ -12,4 +15,36 @@ public sealed class ClimbableComponent : SharedClimbableComponent [ViewVariables] [DataField("delay")] public float ClimbDelay = 0.8f; + + /// + /// If set, people can bonk on this if is set or if they are clumsy. + /// + [ViewVariables] [DataField("bonk")] public bool Bonk = false; + + /// + /// Chance of bonk triggering if the user is clumsy. + /// + [ViewVariables] [DataField("bonkClumsyChance")] + public float BonkClumsyChance = 0.75f; + + /// + /// Sound to play when bonking. + /// + /// + [ViewVariables] [DataField("bonkSound")] + public SoundSpecifier? BonkSound; + + /// + /// How long to stun players on bonk, in seconds. + /// + /// + [ViewVariables] [DataField("bonkTime")] + public float BonkTime = 2; + + /// + /// How much damage to apply on bonk. + /// + /// + [ViewVariables] [DataField("bonkDamage")] + public DamageSpecifier? BonkDamage; } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 523f5164ba..717709c3ef 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -231,6 +231,12 @@ namespace Content.Shared.CCVar public static readonly CVarDef PanicBunkerMinAccountAge = CVarDef.Create("game.panic_bunker.min_account_age", 1440, CVar.SERVERONLY); + /// + /// Make people bonk when trying to climb certain objects like tables. + /// + public static readonly CVarDef GameTableBonk = + CVarDef.Create("game.table_bonk", false, CVar.SERVERONLY); + #if EXCEPTION_TOLERANCE /// /// Amount of times round start must fail before the server is shut down. diff --git a/Resources/Audio/Items/attributions.yml b/Resources/Audio/Items/attributions.yml new file mode 100644 index 0000000000..84c0d544d0 --- /dev/null +++ b/Resources/Audio/Items/attributions.yml @@ -0,0 +1,9 @@ +- files: ["trayhit1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Time immemorial" + source: "https://github.com/tgstation/tgstation/blob/172b533d0257fcc1f8a05406f1c9fad514c14d88/sound/items/trayhit1.ogg" + +- files: ["trayhit2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Time immemorial" + source: "https://github.com/tgstation/tgstation/blob/172b533d0257fcc1f8a05406f1c9fad514c14d88/sound/items/trayhit2.ogg" \ No newline at end of file diff --git a/Resources/Audio/Items/trayhit1.ogg b/Resources/Audio/Items/trayhit1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a2b5532a542d537a5da5476edf62a6ec0bf9646d GIT binary patch literal 10736 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 literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml index 0a0072385d..4211265a68 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/base_structuretables.yml @@ -27,4 +27,10 @@ key: state base: state_ - type: Climbable + bonk: true + bonkDamage: + types: + Blunt: 4 + bonkSound: !type:SoundCollectionSpecifier + collection: TrayHit - type: Clickable diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml index abd0d2da88..051d2c9ec6 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml @@ -45,7 +45,7 @@ - type: Construction graph: Table node: TableFrame - + - type: entity id: CounterWoodFrame parent: BaseStructure @@ -216,6 +216,12 @@ - type: Construction graph: Table node: TableReinforced + - type: Climbable + # Reinforced tables are extra tough + bonkDamage: + types: + Blunt: 8 + bonkTime: 3 - type: entity id: TableGlass @@ -490,7 +496,7 @@ - type: Construction graph: Table node: CounterWood - + - type: entity id: TableCounterMetal parent: CounterMetalFrame diff --git a/Resources/Prototypes/SoundCollections/tray.yml b/Resources/Prototypes/SoundCollections/tray.yml new file mode 100644 index 0000000000..960b6dfe2c --- /dev/null +++ b/Resources/Prototypes/SoundCollections/tray.yml @@ -0,0 +1,5 @@ +- type: soundCollection + id: TrayHit + files: + - /Audio/Items/trayhit1.ogg + - /Audio/Items/trayhit2.ogg