From 6fb12233d48de476c2b06415031fa2e9c9a1d327 Mon Sep 17 00:00:00 2001 From: juniwoofs Date: Sun, 22 Dec 2024 11:24:58 -0800 Subject: [PATCH 1/8] Plushies! (#1369) # Description Added two new plushies to the game! A harpy plushie and a plushie for the beloved station pet Morty! ![image](https://github.com/user-attachments/assets/3e202da2-3571-4c67-82c9-54a6aaf3c91f) ![mortplush](https://github.com/user-attachments/assets/9f131eb9-ed89-4818-b54c-e9da949e8ce2) ![harpyplushie](https://github.com/user-attachments/assets/47aa5b91-0747-4a2c-8c5c-18c5429ab570) --- # Changelog :cl: - add: two new cuddly friends to the station! (harpy and morty plush) --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: juniwoofs Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Entities/Markers/Spawners/Random/toy.yml | 2 + .../Prototypes/Entities/Objects/Fun/toys.yml | 60 ++++++++++++++++++ .../Objects/Fun/toys.rsi/harpyplushie.png | Bin 0 -> 1083 bytes .../Textures/Objects/Fun/toys.rsi/meta.json | 6 ++ .../Objects/Fun/toys.rsi/mortplush.png | Bin 0 -> 832 bytes 5 files changed, 68 insertions(+) create mode 100644 Resources/Textures/Objects/Fun/toys.rsi/harpyplushie.png create mode 100644 Resources/Textures/Objects/Fun/toys.rsi/mortplush.png diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml index 96b5f7aa8c5d4c..62c9e48ca6575f 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/toy.yml @@ -69,6 +69,8 @@ - PlushieTrystan - PlushieSlips - PlushieJester + - PlushieHarpy + - PlushieMort chance: 0.5 offset: 0.2 diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index a547f33b59aafe..d5ee3e0b4d51a7 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1966,3 +1966,63 @@ - type: Sprite sprite: Objects/Fun/toys.rsi state: shadowkin + +- type: entity + parent: BasePlushie + id: PlushieMort + name: morty plushie + description: A plushie of the lovely Morty. It's a resilient, yet sensitive type of plush. + components: + - type: Sprite + sprite: Objects/Fun/toys.rsi + state: mortplush + +- type: entity + parent: BasePlushie + id: PlushieHarpy + name: harpy plushie + description: A soft plushie of a harpy! A small tag on it guarantees that all feathers are ethically sourced. + components: + - type: Sprite + sprite: Objects/Fun/toys.rsi + state: harpyplushie + - type: StaminaDamageOnHit + damage: 0.8 + - type: EmitSoundOnActivate + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + - type: EmitSoundOnUse + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + - type: EmitSoundOnCollide + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + - type: EmitSoundOnLand + sound: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + - type: UseDelay + delay: 0.8 + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.5 + damage: + types: + Blunt: 0 + soundHit: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + soundSwing: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 + soundNoDamage: + path: /Audio/DeltaV/Voice/Harpy/caw1.ogg + params: + variation: 0.05 \ No newline at end of file diff --git a/Resources/Textures/Objects/Fun/toys.rsi/harpyplushie.png b/Resources/Textures/Objects/Fun/toys.rsi/harpyplushie.png new file mode 100644 index 0000000000000000000000000000000000000000..d93178d3f7b18e3363bb1de16b5768aa81feaa63 GIT binary patch literal 1083 zcmV-B1jPG^P)L64HGlD#J2!e#DNIO(y9x8~k$e%tsD^TK2A>dzs3<_gc#v2jxYlD7P_?80n#QYr% z@MUl4TRTE51w1K(vNc@;CP7jZ32WB^Jw2MQ&yQ>+!j=Gx3&dq&g#=fsdmabVGFsK6|=DNW;nbUYZp-{VaFEqss*$$Fw#fB~8N}=mXw}eZA-CX@h|N!8WWOZ&H2eFRvTUMo-eT0yhq5Lz61{D8YD7 z^5JP zg5CiKW;jUr)XbdZyYJmpJJ})^EMQ_n%tkw8XG~L9>fonDGs%K9l0x-!Divr)mkXdQ9MWgUuFH7eHYq zyE3(*dq1K{tZRYeWKpJ)oFMA#??11c0lf`(wX3)5k~LyhkhVn3hP3hrK`|lGER!rX z0Z8tf5v9#2Q)AO`A5uVgIY%ahYGHjSgnOViAc8-L$@w_bWUNBS3{V++$!r-Y$>T*P zT%+-YkVJX`e8zWN^z)>Ysj;$p=f!dC)twFcSi=xX^7^q{)OQ*cGeZ*U7oX93dY%Wc z8A}l_{AZTL4X>Q(VU(MjtK{Vs(^s8bx7!7eXD|?ZwXr*-bwx#m3dtGM+X zEP-$V5zm6k$_s&Q)6o$mZ)~hJjnVsGyjW#<#)Jzoz1M@<37D(DB_>;8>7;X*tN&cE z|C;Y_8ndKVRQ5Cq0000EWmrjOO-%qQ00008000000002eQs(5XvUh_VD7 zji5Re6kV*m1Y#Ye0>dDv4hzvCyyQ_R2*e<$SPCy&X1CC!A9?t--{d#Gnf?89yY9d; zzc+8@ec$`u+ZmdAE~ zfFg6uusP10I<40+ID?Q&Dvd%_tdTju{xr6zMt?NrK>9CkfaDmfxEpVU>U~7lyBDEGXdnzMe6-F3Z6Z$a2WCB$dG; zAU8K0AJXQQww-#WofMFMkiajgFDwGTSA7$IX#YN4cMQz1Ipn@1LLgBX?2o+MtR8s% zVk+3)++<>+2RP7xlECeU&s6h{4ZkEJ8&a02`21y6(_0E09T@gxb_9(BU;VW~4BxUT zB{+OkLMjq^dALfrnbVdE03hGhZSIAz(qIqHNF^d~FP8+Axjueh$NgUZq32vr&fqLB z|5UB5Z3=UyBU^<}a5_jLk^tU?=|_)EpmR5`S>SYlgaikPsNTStfxQ`3xHD;RV+qJK zGTB`wb9bFKm4Tf<-20F4V%aD&IoQvwUial&`aAM53aKH;R{fo3-@MaF$d?p0UQUq4 zfI=6K^o4|sAyAweGY5DBa*Z}0ulZL`4Key88Z&?YZAmXzN?_cvPpAx>KXKOkboYj( zKt)D#UhdT;sO-mFIfF@_GxEcc`VB8$Ij@5p+TE_%BO8265;AL&TF0000< KMNUMnLSTYDOKL;_ literal 0 HcmV?d00001 From 5293b92007f7ca81375d9806cccf9be38846c8d3 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:25:31 +0000 Subject: [PATCH 2/8] Automatic Changelog Update (#1369) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 186a28f65b148f..3a624ecb1ccbf5 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8757,3 +8757,10 @@ Entries: id: 6587 time: '2024-12-22T10:26:41.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1366 +- author: juniwoofs + changes: + - type: Add + message: two new cuddly friends to the station! (harpy and morty plush) + id: 6588 + time: '2024-12-22T19:24:58.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1369 From 2fc1f25bc0daa29e2017490adbdf41f9db4f4927 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 22 Dec 2024 14:55:22 -0500 Subject: [PATCH 3/8] Traits System Anticheat (#1358) # Description It turns out that there was no system in place for serverside fact checking of whether or not people have a legal traits list. Last night a bug was reported whereby a player used Cheat Engine to give himself every trait in the game, bypassing the points system entirely. It's not actually possible to reduce a trait selection down to a legal list without creating interesting race conditions, which limits my options on how to deal with it. So I made it a vote on the Einstein Engines discord, and the vote was unanimous. PUNISH THE CHEATERS.

Media

https://www.youtube.com/watch?v=X2QMN0a_TrA

# Changelog :cl: - add: Implemented Anti-cheat for Traits. Attempting to join a round with an illegal traits list will result in hilarious consequences. --- Content.Server/Traits/TraitSystem.cs | 61 ++++++++++++++++++++++++++++ Content.Shared/CCVar/CCVars.cs | 7 ++++ 2 files changed, 68 insertions(+) diff --git a/Content.Server/Traits/TraitSystem.cs b/Content.Server/Traits/TraitSystem.cs index 75771a57432121..7a028b381ad53f 100644 --- a/Content.Server/Traits/TraitSystem.cs +++ b/Content.Server/Traits/TraitSystem.cs @@ -1,14 +1,23 @@ using System.Linq; +using Content.Server.Administration.Logs; +using Content.Server.Administration.Systems; +using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Players.PlayTimeTracking; +using Content.Shared.CCVar; +using Content.Shared.Chat; using Content.Shared.Customization.Systems; +using Content.Shared.Database; using Content.Shared.Players; using Content.Shared.Roles; using Content.Shared.Traits; +using Robust.Server.Player; using Robust.Shared.Configuration; using Robust.Shared.Prototypes; +using Robust.Shared.Random; using Robust.Shared.Serialization.Manager; using Robust.Shared.Utility; +using Timer = Robust.Shared.Timing.Timer; namespace Content.Server.Traits; @@ -20,6 +29,11 @@ public sealed class TraitSystem : EntitySystem [Dependency] private readonly PlayTimeTrackingManager _playTimeTracking = default!; [Dependency] private readonly IConfigurationManager _configuration = default!; [Dependency] private readonly IComponentFactory _componentFactory = default!; + [Dependency] private readonly IAdminLogManager _adminLog = default!; + [Dependency] private readonly AdminSystem _adminSystem = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IChatManager _chatManager = default!; public override void Initialize() { @@ -31,6 +45,9 @@ public override void Initialize() // When the player is spawned in, add all trait components selected during character creation private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent args) { + var pointsTotal = _configuration.GetCVar(CCVars.GameTraitsDefaultPoints); + var traitSelections = _configuration.GetCVar(CCVars.GameTraitsMax); + foreach (var traitId in args.Profile.TraitPreferences) { if (!_prototype.TryIndex(traitId, out var traitPrototype)) @@ -47,8 +64,15 @@ private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent args) out _)) continue; + // To check for cheaters. :FaridaBirb.png: + pointsTotal += traitPrototype.Points; + --traitSelections; + AddTrait(args.Mob, traitPrototype); } + + if (pointsTotal < 0 || traitSelections < 0) + PunishCheater(args.Mob); } /// @@ -59,4 +83,41 @@ public void AddTrait(EntityUid uid, TraitPrototype traitPrototype) foreach (var function in traitPrototype.Functions) function.OnPlayerSpawn(uid, _componentFactory, EntityManager, _serialization); } + + /// + /// On a non-cheating client, it's not possible to save a character with a negative number of traits. This can however + /// trigger incorrectly if a character was saved, and then at a later point in time an admin changes the traits Cvars to reduce the points. + /// Or if the points costs of traits is increased. + /// + private void PunishCheater(EntityUid uid) + { + _adminLog.Add(LogType.AdminMessage, LogImpact.High, + $"{ToPrettyString(uid):entity} attempted to spawn with an invalid trait list. This might be a mistake, or they might be cheating"); + + if (!_configuration.GetCVar(CCVars.TraitsPunishCheaters) + || !_playerManager.TryGetSessionByEntity(uid, out var targetPlayer)) + return; + + // For maximum comedic effect, this is plenty of time for the cheater to get on station and start interacting with people. + var timeToDestroy = _random.NextFloat(120, 360); + + Timer.Spawn(TimeSpan.FromSeconds(timeToDestroy), () => VaporizeCheater(targetPlayer)); + } + + /// + /// https://www.youtube.com/watch?v=X2QMN0a_TrA + /// + private void VaporizeCheater (Robust.Shared.Player.ICommonSession targetPlayer) + { + _adminSystem.Erase(targetPlayer); + + var feedbackMessage = $"[font size=24][color=#ff0000]{"You have spawned in with an illegal trait point total. If this was a result of cheats, then your nonexistence is a skill issue. Otherwise, feel free to click 'Return To Lobby', and fix your trait selections."}[/color][/font]"; + _chatManager.ChatMessageToOne( + ChatChannel.Emotes, + feedbackMessage, + feedbackMessage, + EntityUid.Invalid, + false, + targetPlayer.Channel); + } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index ef63d89af961f6..05a0a7f1883553 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -381,6 +381,13 @@ public static readonly CVarDef public static readonly CVarDef GameTraitsDefaultPoints = CVarDef.Create("game.traits_default_points", 10, CVar.REPLICATED); + /// + /// Whether the game will SMITE people who used cheat engine to spawn with all of the traits. + /// Illegal trait totals will still be logged even if this is disabled. + /// If you are intending to decrease the trait points availability, or modify the costs of traits, consider temporarily disabling this. + /// + public static readonly CVarDef TraitsPunishCheaters = + CVarDef.Create("game.traits_punish_cheaters", true, CVar.REPLICATED); /// /// Whether to allow characters to select loadout items. From 9d738c8f36c0762e0ba3942fb26ef25735ade327 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:55:48 +0000 Subject: [PATCH 4/8] Automatic Changelog Update (#1358) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3a624ecb1ccbf5..a4f23cfc509304 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8764,3 +8764,12 @@ Entries: id: 6588 time: '2024-12-22T19:24:58.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1369 +- author: VMSolidus + changes: + - type: Add + message: >- + Implemented Anti-cheat for Traits. Attempting to join a round with an + illegal traits list will result in hilarious consequences. + id: 6589 + time: '2024-12-22T19:55:22.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1358 From 7f8d76ea6f63d334c894fc0f7ada6fd1359408f1 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sun, 22 Dec 2024 14:56:20 -0500 Subject: [PATCH 5/8] Make Prisoner Not Shitter Role (#1341) # Description Prisoner is consistently the most problematic role in this entire game, being seen as "The Self Antagging Role", which produces endless amounts of administrative burden. This is especially a problem with lowpop servers, or servers that are understaffed with admins. Players just join as Prisoner, *immediately* break out of the permabrig, and then go on a self antagging spree. The solution to this was staring us in the face the whole time. Just give them the same Pacified component that the Thief antag has. Now it's impossible for them to smash the permabrig windows, someone has to intentionally let them out, and even if they do, they will be hard pressed to selfantag when they can't turn on harm intent. # Changelog :cl: - add: Prisoners now spawn with a Pacifier Implant. --- .../Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml index 0ca17947425370..638aaecd2cf9e6 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml @@ -22,6 +22,10 @@ - !type:CharacterTraitRequirement traits: - ShadowkinBlackeye + special: + - !type:AddComponentSpecial + components: + - type: Pacified - type: startingGear id: PrisonerGear From 68cb9ea4888c16056c6cfe9fea17de1a78420374 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:56:48 +0000 Subject: [PATCH 6/8] Automatic Changelog Update (#1341) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a4f23cfc509304..29eb52436cf19e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8773,3 +8773,10 @@ Entries: id: 6589 time: '2024-12-22T19:55:22.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1358 +- author: VMSolidus + changes: + - type: Add + message: Prisoners now spawn with a Pacifier Implant. + id: 6590 + time: '2024-12-22T19:56:21.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1341 From a13d9640ec77e07b532b729ac540dc95b689c557 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sun, 22 Dec 2024 15:57:10 -0400 Subject: [PATCH 7/8] Fix Jittering (#1334) # Description Title. Ported from https://github.com/Fansana/floofstation1/pull/393 Resolves #1277 --- # Changelog :cl: - fix: Fixed jittering displacing your character when shaken. --- Content.Client/Jittering/JitteringSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Client/Jittering/JitteringSystem.cs b/Content.Client/Jittering/JitteringSystem.cs index 185bd490d3b18f..aafaf318bb9bd4 100644 --- a/Content.Client/Jittering/JitteringSystem.cs +++ b/Content.Client/Jittering/JitteringSystem.cs @@ -45,7 +45,7 @@ private void OnShutdown(EntityUid uid, JitteringComponent jittering, ComponentSh private void OnAnimationCompleted(EntityUid uid, JitteringComponent jittering, AnimationCompletedEvent args) { - if(args.Key != _jitterAnimationKey) + if (args.Key != _jitterAnimationKey || jittering.LifeStage >= ComponentLifeStage.Stopping) return; if (TryComp(uid, out AnimationPlayerComponent? animationPlayer) From bfb32cf24eda47ff3dbd5d4b15b58e25ae597947 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sun, 22 Dec 2024 19:57:37 +0000 Subject: [PATCH 8/8] Automatic Changelog Update (#1334) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 29eb52436cf19e..95604a1e21c1ec 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8780,3 +8780,10 @@ Entries: id: 6590 time: '2024-12-22T19:56:21.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1341 +- author: sleepyyapril + changes: + - type: Fix + message: Fixed jittering displacing your character when shaken. + id: 6591 + time: '2024-12-22T19:57:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1334