From e9b634c6c9d30b7c19bf9b3c129eb3ac6833dd0d Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Thu, 13 Jun 2024 23:56:59 +0000 Subject: [PATCH 01/14] - add: Mjolnir. (#350) --- .../Components/DamageOtherOnHitComponent.cs | 3 + .../Damage/Systems/DamageOtherOnHitSystem.cs | 6 +- .../_White/Wizard/Magic/WizardSpellsSystem.cs | 1 + .../Components/MeleeThrowOnHitComponent.cs | 10 ++++ .../Weapons/Melee/MeleeThrowOnHitSystem.cs | 53 +++++++++++++++++- Resources/Audio/White/Magic/Mjolnir/hit.ogg | Bin 0 -> 20762 bytes Resources/Audio/White/Magic/Mjolnir/swing.ogg | Bin 0 -> 11541 bytes Resources/Prototypes/Magic/white.yml | 1 + .../Prototypes/_White/Wizard/magic_items.yml | 53 ++++++++++++++++++ .../Prototypes/_White/Wizard/spellblade.yml | 2 +- .../_White/Wizard/spellbook_catalog.yml | 13 +++++ .../Weapons/mjolnir.rsi/equipped-BACKPACK.png | Bin 0 -> 568 bytes .../Objects/Weapons/mjolnir.rsi/icon.png | Bin 0 -> 1297 bytes .../Weapons/mjolnir.rsi/inhand-left.png | Bin 0 -> 686 bytes .../Weapons/mjolnir.rsi/inhand-right.png | Bin 0 -> 681 bytes .../Objects/Weapons/mjolnir.rsi/meta.json | 46 +++++++++++++++ .../mjolnir.rsi/wielded-inhand-left.png | Bin 0 -> 695 bytes .../mjolnir.rsi/wielded-inhand-right.png | Bin 0 -> 684 bytes 18 files changed, 183 insertions(+), 5 deletions(-) create mode 100644 Resources/Audio/White/Magic/Mjolnir/hit.ogg create mode 100644 Resources/Audio/White/Magic/Mjolnir/swing.ogg create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/icon.png create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/inhand-left.png create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/inhand-right.png create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/meta.json create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/White/Objects/Weapons/mjolnir.rsi/wielded-inhand-right.png diff --git a/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs b/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs index 3123e251af..5135211fd0 100644 --- a/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs +++ b/Content.Server/Damage/Components/DamageOtherOnHitComponent.cs @@ -1,5 +1,6 @@ using Content.Server.Damage.Systems; using Content.Shared.Damage; +using Robust.Shared.Audio; namespace Content.Server.Damage.Components { @@ -15,5 +16,7 @@ namespace Content.Server.Damage.Components [ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier Damage = default!; + [DataField, ViewVariables(VVAccess.ReadWrite)] // WD + public SoundSpecifier? Sound; } } diff --git a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs index 8d5f1687b9..406ad69a3b 100644 --- a/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs +++ b/Content.Server/Damage/Systems/DamageOtherOnHitSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Effects; using Content.Shared.Mobs.Components; using Content.Shared.Projectiles; using Content.Shared.Throwing; +using Content.Shared.Weapons.Melee; using Robust.Shared.Physics.Components; using Robust.Shared.Player; @@ -28,7 +29,8 @@ namespace Content.Server.Damage.Systems public override void Initialize() { - SubscribeLocalEvent(OnDoHit); + SubscribeLocalEvent(OnDoHit, + before: new[] {typeof(MeleeThrowOnHitSystem)}); // WD EDIT SubscribeLocalEvent(OnDamageExamine); } @@ -55,7 +57,7 @@ namespace Content.Server.Damage.Systems _color.RaiseEffect(Color.Red, new List() { args.Target }, Filter.Pvs(args.Target, entityManager: EntityManager)); } - _guns.PlayImpactSound(args.Target, dmg, null, false); + _guns.PlayImpactSound(args.Target, dmg, component.Sound, component.Sound != null); // WD EDIT if (TryComp(uid, out var body) && body.LinearVelocity.LengthSquared() > 0f) { var direction = body.LinearVelocity.Normalized(); diff --git a/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs b/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs index 6c0dec15af..3e0ac10fa8 100644 --- a/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs +++ b/Content.Server/_White/Wizard/Magic/WizardSpellsSystem.cs @@ -159,6 +159,7 @@ public sealed class WizardSpellsSystem : EntitySystem _handsSystem.TryForcePickupAnyHand(msg.Performer, recallComponent.Item.Value); msg.Handled = true; + Speak(msg); return; } diff --git a/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs b/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs index 82ffc5e51f..43425ad798 100644 --- a/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs +++ b/Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs @@ -47,6 +47,16 @@ public sealed partial class MeleeThrowOnHitComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] [AutoNetworkedField] public bool Enabled = true; + + // WD START + [DataField, ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public float StunTime; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + [AutoNetworkedField] + public bool ThrowOnThrowHit; + // WD END } /// diff --git a/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs b/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs index 7886356233..8b76d14a02 100644 --- a/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs +++ b/Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs @@ -1,5 +1,7 @@ using System.Numerics; using Content.Shared.Construction.Components; +using Content.Shared.Stunnable; +using Content.Shared.Throwing; using Content.Shared.Weapons.Melee.Components; using Content.Shared.Weapons.Melee.Events; using Robust.Shared.Physics; @@ -18,22 +20,67 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedStunSystem _stun = default!; // WD + [Dependency] private readonly ThrownItemSystem _thrownItem = default!; // WD /// public override void Initialize() { + SubscribeLocalEvent(OnDoHit); // WD + SubscribeLocalEvent(OnMeleeHit); SubscribeLocalEvent(OnThrownStartup); SubscribeLocalEvent(OnThrownShutdown); SubscribeLocalEvent(OnStartCollide); } + private void OnDoHit(Entity ent, ref ThrowDoHitEvent args) // WD + { + if (!ent.Comp.ThrowOnThrowHit) + return; + + if (!CanThrowOnHit(ent, args.Target)) + return; + + if (!TryComp(ent, out PhysicsComponent? physics)) + return; + + var velocity = physics.LinearVelocity.Normalized() * ent.Comp.Speed; + + RemComp(args.Target); + var thrownComp = new MeleeThrownComponent + { + Velocity = velocity, + Lifetime = ent.Comp.Lifetime, + MinLifetime = ent.Comp.MinLifetime + }; + AddComp(args.Target, thrownComp); + if (ent.Comp.StunTime != 0f) + _stun.TryParalyze(args.Target, TimeSpan.FromSeconds(ent.Comp.StunTime), true); + + _thrownItem.LandComponent(ent, args.Component, physics, false); + _physics.SetLinearVelocity(ent, Vector2.Zero); + } + private void OnMeleeHit(Entity ent, ref MeleeHitEvent args) { var (_, comp) = ent; if (!args.IsHit) return; + // WD START + var stunTime = comp.StunTime; + var speed = comp.Speed; + var lifetime = comp.Lifetime; + + if (args.Direction != null) // Heavy attack + { + stunTime = 0f; + speed *= 0.5f; + lifetime *= 0.5f; + } + // WD END + var mapPos = _transform.GetMapCoordinates(args.User).Position; foreach (var hit in args.HitEntities) { @@ -55,11 +102,13 @@ public sealed class MeleeThrowOnHitSystem : EntitySystem RaiseLocalEvent(hit, ref ev); var thrownComp = new MeleeThrownComponent { - Velocity = angle.Normalized() * comp.Speed, - Lifetime = comp.Lifetime, + Velocity = angle.Normalized() * speed, // WD EDIT + Lifetime = lifetime, // WD EDIT MinLifetime = comp.MinLifetime }; AddComp(hit, thrownComp); + if (stunTime != 0f) + _stun.TryParalyze(hit, TimeSpan.FromSeconds(stunTime), true); } } diff --git a/Resources/Audio/White/Magic/Mjolnir/hit.ogg b/Resources/Audio/White/Magic/Mjolnir/hit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..17abf06675fcd267287b2c8e8248185275ffefa0 GIT binary patch literal 20762 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/White/Magic/Mjolnir/swing.ogg b/Resources/Audio/White/Magic/Mjolnir/swing.ogg new file mode 100644 index 0000000000000000000000000000000000000000..43a2ea97902c1a6e70180da8d062036a370a9651 GIT binary patch literal 11541 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 AqW}N^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/mjolnir.rsi/icon.png b/Resources/Textures/White/Objects/Weapons/mjolnir.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..420a46f29a14632f8f2ada2bb1c3d90fdfa1f8e1 GIT binary patch literal 1297 zcmb7Ee>l^59RGY9+lb~zemwGQyB3~UGdsFY_xNsEm(7|VvFghCO?6fYXN7I0POdr; zHNu?CQ%AUd;5hM+q*Afk^c)vrDu&Fjx$o@e{<#19}g3Qnwk3$#K8^NdT;SxEfG_+qw+^7!hO=khBi&ZLW#y<0dgt&VjX|9)?jHUSdomU5MX`8--c zNtvgo!=<%Oz1XfwVg2aVeSwah5d(}z_hQzzx&W2VHMxL+zLqeW1yM=czai76-LH^S>SsH^Tx&1uyVXWwXQbi_ z`|cDF(16tZo-dj6lk5K;xUN8PO`iHlS zdPa_XmYFM&<~-Xg62szKe0m)?kQ-d8j}?yotigZ|)VC<|>SmqL5d zc~LSr;-F6zTy~OIhC~$(+&%Hq`iXl`-LV_1d@~HfdU;i;M;2~sKMkZG%7;N}{MHGJ zhLL6K$|)S3j?i9e-d5L;rvMd!Fdc;^O`_hwNL#FBIQ(5 zohNATn@63MO<=J8N}R>j8Um3V2GjR73B`5EIuQ9`8Tw!F)Ko;bLK^S%5s04}(fxW8&%M3bojD@mcmX6F zFMx#O1(0yO01{3i0psyF#bX$THF6wd0li*N1z)e%)$=HdoR(lDpxtg~!GjD#gf31PQGQ4pjq-WK;x zgdkxWMQV~ne!wMx>$^+K1TjZ&O5hS(YAUQHkVBNd7H};oVqFaBH3Kjm!uTw54sM~W z0uTU_C#24K=LRj!M(}`D0D>P5htz7dC~xqPH5!f7XKlbL070AF74-X&X;wl2FunFo zrR~c>?g-h;C=XJAO}qdSju$|}@d8LVUH}Ql3n1Zm0VEtRz}64#(^J6Nk6=Xrw#u>9 zg{rb?Ii0&7fn5MjT5oS52yAwKsW1M4jeZ1n0q7q{c3x{4{{>>JAAwZ>O6IStHO>12 zqHZTU{=LuOH*EAHunEY5-)z-MtCPRECiE9ztNg!9z*av3n*f~L)lUC_sv^hB+}A&_ z(T~6;K$o`g&#OLyPx1!;)B8F45m*Fp*7eHnM_>_Pqpnw0DV{}utrB?|zvI^eR3VDY z36&C{?mC7Gr%DOXnPaor%sm<^B>*66#M(jR2q@B9P$>aG^dwjWFMx#O1(0yw0UpGA U0m2tiv;Y7A07*qoM6N<$g1e+A)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/mjolnir.rsi/inhand-right.png b/Resources/Textures/White/Objects/Weapons/mjolnir.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4128442ba30552fc3763c8a9091d426d599305 GIT binary patch literal 681 zcmV;a0#^NrP)b;?kj|2z~;coMQfgS7J$PFLxJmdG}jd%jN9*sN3z*cs!=sFM->qx5oL&X^h|@VfL|Z%%Zh(>mL*nfZHC@9A_TE^XIMw z50nLP@KwFY;rprVN0bCqJ$RtH8B-Ea_27%3B%p4=gPj6+e-B*T;{)EQ?)(0^0uVg! z?_Ju|Y=ex2gnbWdxdJc{2Vqk)7!1f|cxT%0_jB(MJC^`Ua5eq2EEbD2n-9(arVhdX zcOpgnBBXo~l!O;R!tnw~I9>n=#|t3gcmX6FFMx#O1=yHWr(dA#UIXI-bovD_9UsUxBFx4-R9iPsVNa!WYDGUN@ z^$BeOHcRGdCWRq!dCP_bZ2@JJ%(=#AV{UB$WtGfr{U84T2NhzN@5v@F^1jepw&la)ac-2xl9 zo0b@KOwjL`8sTzolC;|9^0d#JJl@&*mYus>Ip^`4T?XokPYswoEYC0m@fkNvIn1Mg z%6-sXw%fLtJ9C!YMMlLX`VW)VhMne~>eX7cS58(*s+Xudw@S|VU%sw$>n=5w#TPqPU46A_LY}$Bg6tcs z3VtWNN!zS>@A}IUuI!tv3j!~3>M?e5|9fq0x38Xyx$(4;{_)R`Cm(wE;dje6%N_qK zSPbfG*9j){=6E!TJFdPu>*KZOj~=|M5m!-eujgF zF~h&V5Bq-Xxo`jb`L@&f#SdP7n|kcq^?+%t6Rs&r37q12P;N3)FYDh;`{&Ftc2n3R zT=&ctpKz?Ka^2BQ3_>o<*G}@Zu%+2eW7lxj&=)wZaRe;tG?Vee-{;d^Zv#!OX*iw# zi{nQnV`k3u=TSP`3XUcUQzSpcs{qa19$PotxPJS3lWq6)PBVEFv;60NQ=R5;ipis+ xj{Qw`TEg7Y+tU>^+a(=NC9+K@T4DZxKYhWQ$KnYr=Yc7a!PC{xWt~$(695DVHq!tA literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/Objects/Weapons/mjolnir.rsi/wielded-inhand-right.png b/Resources/Textures/White/Objects/Weapons/mjolnir.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef1c92af24967cc50d8e47b9c7a568524b1dd4e GIT binary patch literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Qf> zr;B4q#hkaZHhM8T3bd(D_%7gCd}E1l4RiPEOG{2kM|5$pi#Y{F{ALSZ>RH;lm4k7& z^8{@kr5`L&ovvqO&TX7|=ia*XyxBAPnX0XC-kn)*Uf%fow}Ol)L(5{OhJp|Vfj%yV zLxGGA7FrA(?yL+CS1>FTo8`AW`?Hnjq(N>1<^uL1% z4BbbSBK)G6QX;qYJ>KE->e-iy+QRQUwsM!&uCw?iJ2%#G-t*Lt5eiM$cgSsBIiJO- z_@;Wzy?v4gR5VupeERd;gXQ1*wc^@y&wO9za3@hm#L(5?;G^PicmE&yyj04wWv#Hm z?6V48i;i*LRtXbv{rRvsS^m)P=btU#aL>~}XDipg`n4BB$dQm|PaYJcFORp|uaLXL z^5(H4vzb;#c%2YoxxM9gOSW>&L-XL*{tSl9r?+39>-73pOyQeoHBKM3$*4#&_%svZt#b_;yb|*=+rR&u>jH+$qiev~B(V1DXz#^BaD% zYJ3y-Z|IbK9M_m+oPK$h&9PdBwX6=aYM8e*#mr;4Eg`?Yp}*q}d%|Iu`e% Date: Thu, 13 Jun 2024 23:58:02 +0000 Subject: [PATCH 02/14] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index a4397d2086..0adcf24ae4 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4271,3 +4271,12 @@ id: 298 time: '2024-06-12T20:28:18.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/349 +- author: Aviu + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043C\u044C\u0451\u043B\ + \u044C\u043D\u0438\u0440 \u0432 \u043A\u043D\u0438\u0433\u0443 \u0437\u0430\u043A\ + \u043B\u0438\u043D\u0430\u043D\u0438\u0439." + type: Add + id: 299 + time: '2024-06-13T23:56:59.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/350 From a4647cf529127a2f2f1f8d3ad7c9ec8bbff84c02 Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Fri, 14 Jun 2024 18:47:15 +0700 Subject: [PATCH 03/14] =?UTF-8?q?[Fix]=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20Popup=20(#354)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: теперь попапы не видно в чате через всю станцию и стены * fix: use examine system instead of interaction --- Content.Client/Popups/PopupSystem.cs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Content.Client/Popups/PopupSystem.cs b/Content.Client/Popups/PopupSystem.cs index d9f47c0799..d24e2aff72 100644 --- a/Content.Client/Popups/PopupSystem.cs +++ b/Content.Client/Popups/PopupSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Client.UserInterface.Systems.Chat; using Content.Shared.Examine; using Content.Shared.Chat; using Content.Shared.GameTicking; @@ -10,7 +11,6 @@ using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Shared.Configuration; using Robust.Shared.Map; -using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Replays; @@ -31,7 +31,6 @@ namespace Content.Client.Popups [Dependency] private readonly IReplayRecordingManager _replayRecording = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; - [Dependency] private readonly IClientNetManager _clientNet = default!; public IReadOnlyList WorldLabels => _aliveWorldLabels; public IReadOnlyList CursorLabels => _aliveCursorLabels; @@ -94,6 +93,13 @@ namespace Content.Client.Popups _aliveWorldLabels.Add(label); + // START WhiteDream + if (!_isLogging) + return; + + if (!_examine.InRangeUnOccluded(_playerManager.LocalEntity!.Value, coordinates, 10)) + return; + var fontSizeDict = new Dictionary { { PopupType.Medium, "12" }, @@ -103,14 +109,16 @@ namespace Content.Client.Popups }; var fontsize = fontSizeDict.GetValueOrDefault(type, "10"); - var fontcolor = type is PopupType.LargeCaution or PopupType.MediumCaution or PopupType.SmallCaution ? "c62828" : "aeabc4"; + var fontcolor = type is PopupType.LargeCaution or PopupType.MediumCaution or PopupType.SmallCaution + ? "c62828" + : "aeabc4"; - if (_isLogging) - { - var wrappedMEssage = $"[font size={fontsize}][color=#{fontcolor}]{message}[/color][/font]"; - var chatMsg = new ChatMessage(ChatChannel.Emotes, message, wrappedMEssage, GetNetEntity(EntityUid.Invalid), null); - _clientNet.DispatchLocalNetMessage(new MsgChatMessage { Message = chatMsg }); - } + var wrappedMEssage = $"[font size={fontsize}][color=#{fontcolor}]{message}[/color][/font]"; + var chatMsg = new ChatMessage(ChatChannel.Emotes, message, wrappedMEssage, + GetNetEntity(EntityUid.Invalid), null); + _uiManager.GetUIController().ProcessChatMessage(chatMsg); + + // END WhiteDream } #region Abstract Method Implementations From 11ceefc019e7b6e3f2e6186bf9534fa3b3de0b66 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Fri, 14 Jun 2024 11:48:18 +0000 Subject: [PATCH 04/14] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 0adcf24ae4..8b9d65c1b3 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4280,3 +4280,14 @@ id: 299 time: '2024-06-13T23:56:59.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/350 +- author: Remuchi + changes: + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0432\u0441\u043F\u043B\u044B\u0432\ + \u0430\u044E\u0449\u0438\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\ + \u044F \u043D\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\ + \u0441\u044F \u0432 \u0447\u0430\u0442\u0435, \u0435\u0441\u043B\u0438 \u0438\ + \u0433\u0440\u043E\u043A \u0438\u0445 \u043D\u0435 \u0432\u0438\u0434\u0438\u0442" + type: Fix + id: 300 + time: '2024-06-14T11:47:15.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/354 From 894af847cd8899ed4b842ccb6b108e0252b040b5 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:01:02 +0000 Subject: [PATCH 05/14] Cherrypicks (#356) * Katana Dash checks based on vision rather than collision (#27793) * Fix dash check * unused * obsolete function --------- Co-authored-by: plykiya * Fix StepTrigger blacklist not working (#26968) * Make cuff default range again (#28576) * Make cuff default range again * uncuff distance * how about ONE --------- Co-authored-by: plykiya --------- Co-authored-by: Plykiya <58439124+Plykiya@users.noreply.github.com> Co-authored-by: plykiya Co-authored-by: no <165581243+pissdemon@users.noreply.github.com> --- Content.Shared/Cuffs/SharedCuffableSystem.cs | 4 ++-- Content.Shared/Ninja/Systems/DashAbilitySystem.cs | 9 ++++----- Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Content.Shared/Cuffs/SharedCuffableSystem.cs b/Content.Shared/Cuffs/SharedCuffableSystem.cs index 059e6c6c79..1e22ed8068 100644 --- a/Content.Shared/Cuffs/SharedCuffableSystem.cs +++ b/Content.Shared/Cuffs/SharedCuffableSystem.cs @@ -545,7 +545,7 @@ namespace Content.Shared.Cuffs BreakOnWeightlessMove = false, BreakOnDamage = true, NeedHand = true, - DistanceThreshold = 0.3f + DistanceThreshold = 1f // shorter than default but still feels good }; if (!_doAfter.TryStartDoAfter(doAfterEventArgs)) @@ -650,7 +650,7 @@ namespace Content.Shared.Cuffs BreakOnDamage = true, NeedHand = true, RequireCanInteract = false, // Trust in UncuffAttemptEvent - DistanceThreshold = 0.3f + DistanceThreshold = 1f // shorter than default but still feels good }; if (!_doAfter.TryStartDoAfter(doAfterEventArgs)) diff --git a/Content.Shared/Ninja/Systems/DashAbilitySystem.cs b/Content.Shared/Ninja/Systems/DashAbilitySystem.cs index 011b6f9f66..50319ae651 100644 --- a/Content.Shared/Ninja/Systems/DashAbilitySystem.cs +++ b/Content.Shared/Ninja/Systems/DashAbilitySystem.cs @@ -5,8 +5,8 @@ using Content.Shared.Charges.Systems; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Ninja.Components; -using Content.Shared.Physics; using Content.Shared.Popups; +using Content.Shared.Examine; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; @@ -21,7 +21,7 @@ public sealed class DashAbilitySystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; - [Dependency] private readonly SharedInteractionSystem _interaction = default!; + [Dependency] private readonly ExamineSystemShared _examine = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly ActionContainerSystem _actionContainer = default!; @@ -81,11 +81,10 @@ public sealed class DashAbilitySystem : EntitySystem _popup.PopupClient(Loc.GetString("dash-ability-no-charges", ("item", uid)), user, user); return; } - - var origin = Transform(user).MapPosition; + var origin = _transform.GetMapCoordinates(user); var target = args.Target.ToMap(EntityManager, _transform); // prevent collision with the user duh - if (!_interaction.InRangeUnobstructed(origin, target, 0f, CollisionGroup.Opaque, uid => uid == user)) + if (!_examine.InRangeUnOccluded(origin, target, SharedInteractionSystem.MaxRaycastRange, null)) { // can only dash if the destination is visible on screen _popup.PopupClient(Loc.GetString("dash-ability-cant-see", ("item", uid)), user, user); diff --git a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs index b4ac2cde75..d81ad754d1 100644 --- a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs +++ b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs @@ -59,7 +59,7 @@ public sealed class StepTriggerSystem : EntitySystem if (component.Blacklist != null && TryComp(transform.GridUid, out var grid)) { - var positon = _map.LocalToTile(uid, grid, transform.Coordinates); + var positon = _map.LocalToTile(transform.GridUid.Value, grid, transform.Coordinates); var anch = _map.GetAnchoredEntitiesEnumerator(uid, grid, positon); while (anch.MoveNext(out var ent)) From f18cde3d6cfbec67e3f348139f376a70e99dc8c2 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:01:26 +0000 Subject: [PATCH 06/14] Cult fix cloning & more (#355) * - fix: Fix cult cloning. * - tweak: Some tweaks. * - fix: Cult door not rcd deconstructible. --- .../_White/Cult/GameRule/CultRuleSystem.cs | 27 ++++++++++++++++--- .../_White/Cult/HolyWater/DeconvertCultist.cs | 20 +++++--------- .../VendingMachines/Inventories/salvage.yml | 4 +-- .../Entities/Objects/Misc/handcuffs.yml | 2 -- .../Entities/Objects/Tools/jaws_of_life.yml | 4 +-- .../Entities/Objects/Weapons/Melee/spear.yml | 2 +- .../Entities/Cult/Weapons/blood_spear.yml | 1 + .../_White/Entities/Cult/other_structures.yml | 2 ++ 8 files changed, 37 insertions(+), 25 deletions(-) diff --git a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs index 2c4153514b..5ef0ce6407 100644 --- a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs +++ b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs @@ -3,15 +3,12 @@ using Content.Server._Miracle.GulagSystem; using Content.Server.Actions; using Content.Server.Antag; using Content.Server.Bible.Components; -using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules.Components; -using Content.Server.NPC.Systems; +using Content.Server.Objectives.Components; using Content.Server.Roles; -using Content.Server.Roles.Jobs; using Content.Server.RoundEnd; -using Content.Server.Shuttles.Components; using Content.Server.StationEvents.Components; using Content.Server.Storage.EntitySystems; using Content.Shared.Body.Systems; @@ -29,6 +26,7 @@ using Content.Shared._White; using Content.Shared._White.Cult.Components; using Content.Shared._White.Cult.Systems; using Content.Shared._White.Mood; +using Content.Shared.Cloning; using Content.Shared.Mind; using Content.Shared.NPC.Systems; using Robust.Server.Player; @@ -72,10 +70,16 @@ public sealed class CultRuleSystem : GameRuleSystem SubscribeLocalEvent(OnCultistComponentInit); SubscribeLocalEvent(OnCultistComponentRemoved); SubscribeLocalEvent(OnCultistsStateChanged); + SubscribeLocalEvent(OnClone); SubscribeLocalEvent(OnGetBriefing); } + private void OnClone(Entity ent, ref CloningEvent args) + { + RemoveObjectiveAndRole(ent); + } + protected override void Added(EntityUid uid, CultRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) { base.Added(uid, component, gameRule, args); @@ -178,6 +182,21 @@ public sealed class CultRuleSystem : GameRuleSystem } } + public void RemoveObjectiveAndRole(EntityUid uid) + { + if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind)) + return; + + var objectives = mind.Objectives.FindAll(HasComp); + foreach (var obj in objectives) + { + _mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + } + + if (_roleSystem.MindHasRole(mindId)) + _roleSystem.MindRemoveRole(mindId); + } + private void OnCultistComponentRemoved(EntityUid uid, CultistComponent component, ComponentRemove args) { var query = QueryActiveRules(); diff --git a/Content.Server/_White/Cult/HolyWater/DeconvertCultist.cs b/Content.Server/_White/Cult/HolyWater/DeconvertCultist.cs index 8989d11435..4ceb407cd0 100644 --- a/Content.Server/_White/Cult/HolyWater/DeconvertCultist.cs +++ b/Content.Server/_White/Cult/HolyWater/DeconvertCultist.cs @@ -1,4 +1,5 @@ using System.Threading; +using Content.Server._White.Cult.GameRule; using Content.Server.Objectives.Components; using Content.Server.Popups; using Content.Server.Roles; @@ -8,6 +9,7 @@ using Content.Shared.IdentityManagement; using Content.Shared.Inventory; using Content.Shared._White.Cult.Components; using Content.Shared._White.Mood; +using Content.Shared.Jittering; using Content.Shared.Mind; using JetBrains.Annotations; using Robust.Server.Containers; @@ -40,6 +42,8 @@ public sealed partial class DeconvertCultist : ReagentEffect args.EntityManager.System() .TryParalyze(uid, TimeSpan.FromSeconds(component.HolyConvertTime + 5f), true); + args.EntityManager.System() + .DoJitter(uid, TimeSpan.FromSeconds(component.HolyConvertTime + 5f), true); var target = Identity.Name(uid, args.EntityManager); args.EntityManager.System() .PopupEntity(Loc.GetString("holy-water-started-converting", ("target", target)), uid); @@ -73,20 +77,8 @@ public sealed partial class DeconvertCultist : ReagentEffect entityManager.RemoveComponent(uid); entityManager.RemoveComponent(uid); - var mindSystem = entityManager.System(); - var roleSystem = entityManager.System(); - - if (!mindSystem.TryGetMind(uid, out var mindId, out var mind)) - return; - - var objectives = mind.Objectives.FindAll(entityManager.HasComponent); - foreach (var obj in objectives) - { - mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); - } - - if (roleSystem.MindHasRole(mindId)) - roleSystem.MindRemoveRole(mindId); + var cultRuleSystem = entityManager.System(); + cultRuleSystem.RemoveObjectiveAndRole(uid); entityManager.EventBus.RaiseLocalEvent(uid, new MoodRemoveEffectEvent("CultFocused")); } diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml index 11f1f26aa8..07e145e636 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/salvage.yml @@ -1,8 +1,8 @@ - type: vendingMachineInventory id: SalvageEquipmentInventory startingInventory: - WeaponProtoKineticAccelerator: 4 - WeaponCrusher: 4 + WeaponProtoKineticAccelerator: 2 + WeaponCrusher: 2 WeaponCrusherDagger: 4 WeaponGrapplingGun: 3 HandheldGPSBasic: 10 diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml index f1c9f5acb3..09cff8ee0e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml @@ -36,7 +36,6 @@ parent: Handcuffs components: - type: Handcuff - breakoutTime: 3 cuffedRSI: Objects/Misc/cablecuffs.rsi bodyIconState: body-overlay color: forestgreen @@ -79,7 +78,6 @@ size: Tiny storedRotation: 0 - type: Handcuff - breakoutTime: 3 cuffedRSI: Objects/Misc/cablecuffs.rsi # cablecuffs will look fine bodyIconState: body-overlay breakOnRemove: true diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 508254d5bb..203b13c38f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -47,7 +47,7 @@ damage: types: Blunt: 15 - Structural: 40 + Structural: 10 soundHit: path: "/Audio/Weapons/smash.ogg" @@ -89,4 +89,4 @@ damage: types: Blunt: 20 - Structural: 60 + Structural: 20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index 8bfec739cc..0579964727 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -60,7 +60,7 @@ - type: SolutionContainerManager solutions: melee: - maxVol: 2 + maxVol: 5 - type: MeleeChemicalInjector solution: melee - type: RefillableSolution diff --git a/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml b/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml index dfcdfc7c9b..14de56bd1a 100644 --- a/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml +++ b/Resources/Prototypes/_White/Entities/Cult/Weapons/blood_spear.yml @@ -46,6 +46,7 @@ - type: Clothing slots: - back + - suitStorage - type: Wieldable - type: IncreaseDamageOnWield damage: diff --git a/Resources/Prototypes/_White/Entities/Cult/other_structures.yml b/Resources/Prototypes/_White/Entities/Cult/other_structures.yml index 09bb9842d6..e30892d7ca 100644 --- a/Resources/Prototypes/_White/Entities/Cult/other_structures.yml +++ b/Resources/Prototypes/_White/Entities/Cult/other_structures.yml @@ -44,6 +44,8 @@ - type: Construction graph: AirlockGlassCult node: airlock + - type: RCDDeconstructable + deconstructable: false - type: PlacementReplacement key: walls - type: Appearance From 8fee60474267e6595f2e9566baee602726f4084b Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:01:37 +0000 Subject: [PATCH 07/14] - remove: No ninja shoes. (#353) --- Resources/Maps/White/Whitebox.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Resources/Maps/White/Whitebox.yml b/Resources/Maps/White/Whitebox.yml index a24b109827..c186e781a5 100644 --- a/Resources/Maps/White/Whitebox.yml +++ b/Resources/Maps/White/Whitebox.yml @@ -76640,13 +76640,6 @@ entities: - type: Transform pos: -15.657842,47.202713 parent: 2 -- proto: ClothingShoesSpaceNinja - entities: - - uid: 10939 - components: - - type: Transform - pos: 30.33621,-71.6811 - parent: 2 - proto: ClothingUnderSocksBee entities: - uid: 10940 From 6b1395b8d630bbc87ab9807c90b1c49858f6684a Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Fri, 14 Jun 2024 14:02:41 +0000 Subject: [PATCH 08/14] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 8b9d65c1b3..66c8633a7b 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4291,3 +4291,73 @@ id: 300 time: '2024-06-14T11:47:15.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/354 +- author: Aviu + changes: + - message: "\u0423\u0431\u0440\u0430\u043D\u044B \u0431\u043E\u0442\u0438\u043D\u043A\ + \u0438 \u043A\u043E\u0441\u043C\u043E\u043D\u0438\u043D\u0434\u0437\u044F \u0441\ + \ \u0432\u0430\u0439\u0442\u0431\u043E\u043A\u0441\u0430." + type: Remove + id: 301 + time: '2024-06-14T14:01:37.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/353 +- author: Aviu + changes: + - message: "\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u043B\u044C\u0437\u044F\ + \ \u0441\u0433\u043E\u0440\u0435\u0442\u044C, \u0441\u0442\u043E\u044F \u043D\ + \u0430 \u043C\u043E\u0441\u0442\u0438\u043A\u0435 \u043D\u0430\u0434 \u043B\u0430\ + \u0432\u043E\u0439." + type: Fix + - message: "\u0423\u0432\u0435\u043B\u0438\u0447\u0435\u043D\u0430 \u0434\u0430\u043B\ + \u044C\u043D\u043E\u0441\u0442\u044C \u043D\u0430\u0434\u0435\u0432\u0430\u043D\ + \u0438\u044F \u043D\u0430\u0440\u0443\u0447\u043D\u0438\u043A\u043E\u0432." + type: Tweak + id: 302 + time: '2024-06-14T14:01:02.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/356 +- author: Aviu + changes: + - message: "\u041A\u0443\u043B\u044C\u0442\u0438\u0441\u0442\u044B \u0442\u0435\u043F\ + \u0435\u0440\u044C \u0442\u0440\u044F\u0441\u0443\u0442\u0441\u044F \u043F\u0440\ + \u0438 \u0434\u0435\u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0430\u0446\u0438\ + \u0438." + type: Add + - message: "\u041F\u043E\u0441\u043B\u0435 \u043A\u043B\u043E\u043D\u0438\u0440\u043E\ + \u0432\u0430\u043D\u0438\u044F \u0443 \u043A\u0443\u043B\u044C\u0442\u0438\u0441\ + \u0442\u043E\u0432 \u043F\u0440\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0446\ + \u0435\u043B\u044C, \u0440\u043E\u043B\u044C, \u0438 \u0438\u0445 \u043C\u043E\ + \u0436\u043D\u043E \u0441\u043D\u043E\u0432\u0430 \u0441\u043A\u043E\u043D\u0432\ + \u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C." + type: Fix + - message: "\u0414\u0432\u0435\u0440\u044C \u043A\u0443\u043B\u044C\u0442\u0430\ + \ \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435\u043B\u044C\u0437\u044F\ + \ \u0440\u0430\u0437\u043E\u0431\u0440\u0430\u0442\u044C \u0420\u0426\u0414." + type: Fix + - message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D \u0441\u0442\u0440\u0443\ + \u043A\u0442\u0443\u0440\u043D\u044B\u0439 \u0443\u0440\u043E\u043D \u0443 \u0447\ + \u0435\u043B\u044E\u0441\u0442\u0435\u0439 \u0436\u0438\u0437\u043D\u0438." + type: Tweak + - message: "\u0423\u043C\u0435\u043D\u044C\u0448\u0435\u043D\u043E \u043A\u043E\u043B\ + \u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u0440\u043E\u0431\u0438\u043B\ + \u043E\u043A \u0438 \u043F\u043A\u0430 \u0432 \u0430\u0432\u0442\u043E\u043C\ + \u0430\u0442\u0435 \u0443\u0442\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\ + \u043E\u0432." + type: Tweak + - message: "\u0421\u0442\u044F\u0436\u043A\u0438 \u0442\u0435\u043F\u0435\u0440\u044C\ + \ \u043D\u0435 \u0441\u043D\u0438\u043C\u0430\u044E\u0442\u0441\u044F \u0437\ + \u0430 3 \u0441\u0435\u043A\u0443\u043D\u0434\u044B." + type: Tweak + - message: "\u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u043E \u043C\u0430\ + \u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u0445\u0440\u0430\ + \u043D\u0438\u043B\u0438\u0449\u0435 \u0440\u0435\u0430\u0433\u0435\u043D\u0442\ + \u043E\u0432 \u0432 \u043A\u043E\u043F\u044C\u044F\u0445 5 \u0435\u0434\u0438\ + \u043D\u0438\u0446." + type: Tweak + - message: "\u041A\u0440\u043E\u0432\u0430\u0432\u043E\u0435 \u043A\u043E\u043F\u044C\ + \u0451 \u043C\u043E\u0436\u043D\u043E \u043F\u043E\u0432\u0435\u0441\u0438\u0442\ + \u044C \u043D\u0430 \u0431\u0440\u043E\u043D\u044E, \u043A\u0430\u043A \u0438\ + \ \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0435 \u043A\u043E\u043F\u044C\ + \u044F." + type: Tweak + id: 303 + time: '2024-06-14T14:01:26.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/355 From e90ffe397348b98c1791b5643dda54ea4433a7fd Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Sat, 15 Jun 2024 00:47:49 +0000 Subject: [PATCH 09/14] Spell descriptions (#352) * - add: Spell descriptions and more. * - add: Update wizard shuttle. * - add: Add wizard to secret. * - add: Call shuttle on wizard death. --- .../_White/Wizard/WizardRuleComponent.cs | 2 +- .../Locale/ru-RU/_white/wizard/spellbook.ftl | 53 +++++++++++++++++++ .../Locale/ru-RU/_white/wizard/spells.ftl | 44 +++++++++++++++ .../Locale/ru-RU/_white/wizard/wizard.ftl | 12 +++++ .../entities/clothing/outerclothing/armor.ftl | 4 +- Resources/Maps/White/Shuttles/wizard.yml | 26 +++++++++ .../Entities/Clothing/Head/helmets.yml | 12 +++++ .../Entities/Clothing/OuterClothing/armor.yml | 17 +++++- .../Entities/Structures/Walls/walls.yml | 18 +++---- Resources/Prototypes/secret_weights.yml | 13 ++--- 10 files changed, 181 insertions(+), 20 deletions(-) create mode 100644 Resources/Locale/ru-RU/_white/wizard/spellbook.ftl create mode 100644 Resources/Locale/ru-RU/_white/wizard/spells.ftl diff --git a/Content.Server/_White/Wizard/WizardRuleComponent.cs b/Content.Server/_White/Wizard/WizardRuleComponent.cs index 271dffcbca..3bdda39bbd 100644 --- a/Content.Server/_White/Wizard/WizardRuleComponent.cs +++ b/Content.Server/_White/Wizard/WizardRuleComponent.cs @@ -50,7 +50,7 @@ public sealed partial class WizardRuleComponent : Component [DataField] public ProtoId Faction = "Wizard"; - public RoundEndBehavior RoundEndBehavior = RoundEndBehavior.Nothing; + public RoundEndBehavior RoundEndBehavior = RoundEndBehavior.ShuttleCall; [DataField] public string RoundEndTextSender = "comms-console-announcement-title-centcom"; diff --git a/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl b/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl new file mode 100644 index 0000000000..1d3f6e353e --- /dev/null +++ b/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl @@ -0,0 +1,53 @@ +spellbook-fireball-name = { ent-ActionFireballSpell } +spellbook-fireball-desc = { ent-ActionFireballSpell.desc } + +spellbook-forcewall-name = { ent-ActionForcewallSpell } +spellbook-forcewall-desc = { ent-ActionForcewallSpell.desc } + +spellbook-knock-name = { ent-ActionKnock } +spellbook-knock-desc = { ent-ActionKnock.desc } + +spellbook-arc-name = { ent-ActionElectricArcSpell } +spellbook-arc-desc = { ent-ActionElectricArcSpell.desc } + +spellbook-force-name = { ent-ActionForceSpell } +spellbook-force-desc = { ent-ActionForceSpell.desc } + +spellbook-cards-name = { ent-ActionCardSpell } +spellbook-cards-desc = { ent-ActionCardSpell.desc } + +spellbook-blink-name = { ent-ActionBlinkSpell } +spellbook-blink-desc = { ent-ActionBlinkSpell.desc } + +spellbook-jaunt-name = { ent-ActionEtherealJauntSpell } +spellbook-jaunt-desc = { ent-ActionEtherealJauntSpell.desc } + +spellbook-emp-name = { ent-ActionEmpSpell } +spellbook-emp-desc = { ent-ActionEmpSpell.desc } + +spellbook-cluwne-name = { ent-ActionCluwneCurseSpell } +spellbook-cluwne-desc = { ent-ActionCluwneCurseSpell.desc } + +spellbook-clown-name = { ent-ActionBananaTouchSpell } +spellbook-clown-desc = { ent-ActionBananaTouchSpell.desc } + +spellbook-mime-name = { ent-ActionMimeTouchSpell } +spellbook-mime-desc = { ent-ActionMimeTouchSpell.desc } + +spellbook-recall-name = { ent-ActionInstantRecallSpell } +spellbook-recall-desc = { ent-ActionInstantRecallSpell.desc } + +spellbook-smite-name = { ent-ActionSmite } +spellbook-smite-desc = { ent-ActionSmite.desc } + +spellbook-hardsuit-name = Скафандр волшебника +spellbook-hardsuit-desc = Украшенный магическими драгоценными камнями скафандр, функционирующий так же, как и обычная мантия волшебника, но в то же время является пригодным для использования в космосе и бронированным. Небольшое замедление. Теперь вы можете произносить заклинания в космосе и местах с низкой температурой! Имеет функцию энергетического щита,который защищает от всех снарядов. Щит разряжается при получении урона и автоматически заряжается. + +spellbook-hfrequency-name = Высокочастотный клинок +spellbook-hfrequency-desc = Невероятно мощный клинок, способный атаковать очень, ОЧЕНЬ быстро. Также клинок способен отражать выстрелы. + +spellbook-spellblade-name = Клинок заклинаний +spellbook-spellblade-desc = Клинок, наполненный магией, можно усилить, выбрав один из пяти аспектов. + +spellbook-mjolnir-name = Мьёльнир +spellbook-mjolnir-desc = Могучий двуручный молот Тора. Ударив им по врагам, вы заставите их отлететь от вас, а также оглушить на 1,5 секунды. Вы можете его бросить для достижения того же эффекта. diff --git a/Resources/Locale/ru-RU/_white/wizard/spells.ftl b/Resources/Locale/ru-RU/_white/wizard/spells.ftl new file mode 100644 index 0000000000..075acfc6c4 --- /dev/null +++ b/Resources/Locale/ru-RU/_white/wizard/spells.ftl @@ -0,0 +1,44 @@ +ent-ActionElectricArcSpell = Электрическая дуга + .desc = Выпускает из ваших рук мощную молнию, способную сразить любого члена экипажа. Альтернативный каст: выпускает взрывающуюся шаровую молнию. При зарядке: выпускает несколько молний вокруг вас. Не работает без волшебной мантии и шляпы. + +ent-ActionForceSpell = Сила + .desc = Притягивает все объекты и сущности в указанную точку. Альтернативный каст: Прицельно притягивает к вам предмет или сущность. При зарядке: Вместо притяжение в выбранную точку, отталкивает все объекты от заклинателя. С каждым уровнем повышается мощность отталкивания. + +ent-ActionFireballSpell = Огненный шар + .desc = Создает огненный шар, наносящий огромный урон при взрыве. Альтернативный каст: Поджигает одну цель на любом расстоянии, навешивая проклятие, при котором смерть от огня уничтожит тело. При зарядке: Поджигает все сущности вокруг, с каждым уровнем повышается сила поджога и радиус поражения. Не работает без волшебной мантии и шляпы. + +ent-ActionCardSpell = Карты + .desc = Настоящий козырь в рукаве! Вернее, целая колода таких. Выпускает несколько смертельных карт в одном направлении. Карты способны оглушить цель. Альтернативный каст: Превращает в карту любой предмет. В карту можно превратить только предметы. При зарядке: Выпускает карты вокруг вас, с каждым уровнем зарядки количество выпускаемых карт повышается. + +ent-ActionForcewallSpell = Силовой барьер + .desc = Создает перед заклинателем 3 барьера. Альтернативный каст: Позволяет поставить барьер 3x3 в любой точке. При зарядке: Барьеры появляются не перед магом, а вокруг него, с каждым уровнем будет повышаться количество барьеров. Не работает без волшебной мантии и шляпы. + +ent-ActionBlinkSpell = Прыжок + .desc = Переносит на несколько тайлов вперед. + +ent-ActionEtherealJauntSpell = Потустороннее путешествие + .desc = Создаёт вашу астральную форму, временно делая вас невидимым и способным проходить сквозь стены. Не работает без волшебной мантии и шляпы. + +ent-ActionEmpSpell = ЭМИ + .desc = Создаёт ЭМИ взрыв в огромном радиусе вокруг мага. Не работает без волшебной мантии и шляпы. + +ent-ActionCluwneCurseSpell = Проклятье клувна + .desc = Ужаснейшее проклятие, превращает цель в толстого и уродливого тупицу - клувень. + +ent-ActionBananaTouchSpell = Банановое касание + .desc = Превращает цель в клоуна. + +ent-ActionMimeTouchSpell = Касание мима + .desc = Превращает в мима любого члена экипажа, без возможности нарушить обет молчания. + +ent-ActionInstantRecallSpell = Мгновенный призыв + .desc = Привязывает к вашей душе отдельный предмет. Используйте это заклинание, удерживая предмет, чтобы пометить его. Снова примените заклинание и привязанный предмет телепортируется к вам в руку. Если вы отметили предмет и произнесли это заклинание, удерживая другой предмет, вы удалите исходную метку. + +ent-ActionTeleportSpell = Телепортация + .desc = Позволяет телепортироваться в любое место на станции! Переносит вас в выбранное место. + +ent-ActionKnock = Стук + .desc = Открывает все двери и шлюзы в радиусе 4 тайлов. + +ent-ActionSmite = Кара + .desc = Заряжает вашу руку мерзкой энергией, которую можно использовать для взрыва жертв. Заклинание требует, чтобы вы коснулись своей цели, поэтому вы не сможете использовать его в наручниках или будучи оглушённым. Не работает без волшебной мантии и шляпы. diff --git a/Resources/Locale/ru-RU/_white/wizard/wizard.ftl b/Resources/Locale/ru-RU/_white/wizard/wizard.ftl index ee9f0461b4..84feddbcb0 100644 --- a/Resources/Locale/ru-RU/_white/wizard/wizard.ftl +++ b/Resources/Locale/ru-RU/_white/wizard/wizard.ftl @@ -24,6 +24,18 @@ ent-WizardSurviveObjective = Переживете смену, устроив к ent-SpellBook = книга заклинаний .desc = Неземной фолиант, излучающий силу. +ent-ClothingHeadHatRealWizardFancy = волшебная шляпа + .desc = Странный головной убор, который наверняка принадлежит настоящему магу. + +ent-ClothingHeadHatRealWizardFancyAlt = волшебная шляпа + .desc = Странный головной убор, который наверняка принадлежит настоящему магу. + +ent-ClothingOuterRealWizardFancy = мантия волшебника + .desc = Великолепная, украшенная драгоценными камнями мантия, которая, кажется, излучает силу. + +ent-ClothingHeadHelmetWizardHelmArmored = шлем мага + .desc = Странный головной убор, который наверняка принадлежит настоящему магу. Не обладает свойствами волшебной шляпы. + store-currency-display-spell-point = Очки заклинаний store-category-spells-attack = Атакующие заклинания diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/armor.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/armor.ftl index 2ddbb404bc..b44670be46 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/armor.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/outerclothing/armor.ftl @@ -17,10 +17,10 @@ ent-ClothingOuterArmorHeavyRed = красный тяжелый бронекос .desc = Тяжело бронированный костюм с красными вставками, способный защитить от высокого урона. .suffix = { "" } ent-ClothingOuterArmorMagusblue = синие доспехи магуса - .desc = Синий бронекостюм, обеспечивающий хорошую защиту. + .desc = Синий бронекостюм, обеспечивающий хорошую защиту. Не обладает свойствами волшебной мантии. .suffix = { "" } ent-ClothingOuterArmorMagusred = красные доспехи магуса - .desc = Красный бронекостюм, обеспечивающий хорошую защиту. + .desc = Красный бронекостюм, обеспечивающий хорошую защиту. Не обладает свойствами волшебной мантии. .suffix = { "" } ent-ClothingOuterArmorRiot = противоударный костюм .desc = Бронежилет с тяжелыми накладками для защиты в ближнем бою, идеально подходит для борьбы с правонарушителями на станции. diff --git a/Resources/Maps/White/Shuttles/wizard.yml b/Resources/Maps/White/Shuttles/wizard.yml index 0efc2f61c2..0ec7a8e005 100644 --- a/Resources/Maps/White/Shuttles/wizard.yml +++ b/Resources/Maps/White/Shuttles/wizard.yml @@ -2050,6 +2050,18 @@ entities: - type: Transform pos: -5.52865,-9.359842 parent: 2 +- proto: ClothingHeadHelmetWizardHelmArmored + entities: + - uid: 772 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 2 + - uid: 773 + components: + - type: Transform + pos: 1.5,-1.5 + parent: 2 - proto: ClothingMaskGasChameleon entities: - uid: 275 @@ -2057,6 +2069,20 @@ entities: - type: Transform pos: -9.537922,-3.3987489 parent: 2 +- proto: ClothingOuterArmorMagusblue + entities: + - uid: 771 + components: + - type: Transform + pos: -2.505693,-1.8391577 + parent: 2 +- proto: ClothingOuterArmorMagusred + entities: + - uid: 770 + components: + - type: Transform + pos: 1.4998147,-1.8497881 + parent: 2 - proto: ClothingUniformJumpskirtColorBlack entities: - uid: 276 diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 9e8a140be3..63ea974c47 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -203,6 +203,18 @@ - type: IngestionBlocker - type: IdentityBlocker +- type: entity + parent: ClothingHeadHelmetWizardHelm + id: ClothingHeadHelmetWizardHelmArmored + components: + - type: Armor + modifiers: + coefficients: + Blunt: 0.8 + Slash: 0.8 + Piercing: 0.85 + Heat: 0.8 + #Fire Helmet - type: entity parent: ClothingHeadLightBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 58a1674b4a..6dc1eb2a83 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -200,7 +200,7 @@ sprite: Clothing/OuterClothing/Armor/heavyred.rsi - type: entity - parent: ClothingOuterArmorHeavy + parent: ClothingOuterBaseLarge id: ClothingOuterArmorMagusblue name: blue magus armor description: An blue armored suit that provides good protection. @@ -209,9 +209,22 @@ sprite: Clothing/OuterClothing/Armor/magusblue.rsi - type: Clothing sprite: Clothing/OuterClothing/Armor/magusblue.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.5 + Slash: 0.5 + Piercing: 0.6 + Heat: 0.5 + - type: ExplosionResistance + damageCoefficient: 0.5 + - type: GroupExamine + - type: ClothingSpeedModifier + walkModifier: 1 + sprintModifier: 1 - type: entity - parent: ClothingOuterArmorHeavy + parent: ClothingOuterArmorMagusblue id: ClothingOuterArmorMagusred name: red magus armor description: A red armored suit that provides good protection. diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 44ffa057aa..84550cfa7a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -136,7 +136,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -284,7 +284,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -320,7 +320,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -441,7 +441,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -686,7 +686,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -722,7 +722,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -893,7 +893,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: @@ -1244,7 +1244,7 @@ name: force wall components: - type: TimedDespawn - lifetime: 20 + lifetime: 9 - type: Tag tags: - Wall @@ -1284,7 +1284,7 @@ - type: RCDDeconstructable cost: 6 delay: 8 - fx: EffectRCDDeconstruct8 + fx: EffectRCDDeconstruct8 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/secret_weights.yml b/Resources/Prototypes/secret_weights.yml index 882d0b16ae..1e624b6b4e 100644 --- a/Resources/Prototypes/secret_weights.yml +++ b/Resources/Prototypes/secret_weights.yml @@ -1,10 +1,11 @@ - type: weightedRandom id: Secret weights: - Traitor: 0.35 - Changeling: 0.15 - Nukeops: 0.15 + Traitor: 0.3 + Changeling: 0.14 + Nukeops: 0.14 Cult: 0.15 - Revolutionary: 0.1 - Zombie: 0.05 - Survival: 0.05 + Wizard: 0.15 + Revolutionary: 0.04 + Zombie: 0.04 + Survival: 0.04 From 7072dd31d205c4f369649c2786f69cd648f7a8ca Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 15 Jun 2024 00:48:53 +0000 Subject: [PATCH 10/14] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 66c8633a7b..3a0453d8cb 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4361,3 +4361,23 @@ id: 303 time: '2024-06-14T14:01:26.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/355 +- author: Aviu + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043E\u043F\u0438\ + \u0441\u0430\u043D\u0438\u044F \u0432\u0441\u0435\u043C \u0437\u0430\u043A\u043B\ + \u0438\u043D\u0430\u043D\u0438\u044F\u043C \u043C\u0430\u0433\u0430." + type: Add + - message: "\u0420\u0435\u0436\u0438\u043C \u043C\u0430\u0433\u0430 \u0434\u043E\ + \u0431\u0430\u0432\u043B\u0435\u043D \u0432 \u0441\u0435\u043A\u0440\u0435\u0442\ + ." + type: Add + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0431\u0440\u043E\ + \u043D\u044F \u043C\u0430\u0433\u0443\u0441\u0430 \u043D\u0430 \u0448\u0430\u0442\ + \u0442\u043B \u043C\u0430\u0433\u0430, \u043D\u043E \u0432 \u043D\u0435\u0439\ + \ \u043D\u0435\u043B\u044C\u0437\u044F \u043A\u0430\u0441\u0442\u043E\u0432\u0430\ + \u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u043E\ + \ \u0437\u0430\u043A\u043B\u0438\u043D\u0430\u043D\u0438\u0439." + type: Add + id: 304 + time: '2024-06-15T00:47:50.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/352 From 73954e87b1b274a28c99b183123606ebf9b9d8da Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Sat, 15 Jun 2024 13:11:59 +0000 Subject: [PATCH 11/14] Indicator fixes (#357) * - fix: Fix hud showing stealth entities. * - fix: Fix aghost SSD indicator. * - tweak: Make ninja more stealthy. --- .../Overlays/EntityHealthBarOverlay.cs | 6 ++++ .../SSDIndicator/SSDIndicatorSystem.cs | 13 ++++++- .../StatusIcon/StatusIconOverlay.cs | 3 ++ Content.Client/StatusIcon/StatusIconSystem.cs | 34 +++++++++++++++++++ Content.Client/Stealth/StealthSystem.cs | 11 ++++++ .../Storage/Systems/EntityStorageSystem.cs | 8 +++++ .../Administration/Commands/AGhost.cs | 2 ++ .../Entities/Clothing/OuterClothing/suits.yml | 4 +-- 8 files changed, 78 insertions(+), 3 deletions(-) diff --git a/Content.Client/Overlays/EntityHealthBarOverlay.cs b/Content.Client/Overlays/EntityHealthBarOverlay.cs index c1c0ae93ec..0d06e0b5b6 100644 --- a/Content.Client/Overlays/EntityHealthBarOverlay.cs +++ b/Content.Client/Overlays/EntityHealthBarOverlay.cs @@ -7,6 +7,7 @@ using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Shared.Enums; using System.Numerics; +using Content.Client.StatusIcon; using Content.Shared.StatusIcon.Components; using Content.Client.UserInterface.Systems; using Robust.Shared.Prototypes; @@ -24,6 +25,7 @@ public sealed class EntityHealthBarOverlay : Overlay private readonly MobStateSystem _mobStateSystem; private readonly MobThresholdSystem _mobThresholdSystem; private readonly ProgressColorSystem _progressColor; + private readonly StatusIconSystem _statusIcon; public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; public HashSet DamageContainers = new(); @@ -34,6 +36,7 @@ public sealed class EntityHealthBarOverlay : Overlay _mobStateSystem = _entManager.System(); _mobThresholdSystem = _entManager.System(); _progressColor = _entManager.System(); + _statusIcon = entManager.System(); } protected override void Draw(in OverlayDrawArgs args) @@ -70,6 +73,9 @@ public sealed class EntityHealthBarOverlay : Overlay continue; } + if (!_statusIcon.IsVisible(uid)) + continue; + // we use the status icon component bounds if specified otherwise use sprite var bounds = _entManager.GetComponentOrNull(uid)?.Bounds ?? spriteComponent.Bounds; var worldPos = _transform.GetWorldPosition(xform, xformQuery); diff --git a/Content.Client/SSDIndicator/SSDIndicatorSystem.cs b/Content.Client/SSDIndicator/SSDIndicatorSystem.cs index 587450a2f6..5757f74213 100644 --- a/Content.Client/SSDIndicator/SSDIndicatorSystem.cs +++ b/Content.Client/SSDIndicator/SSDIndicatorSystem.cs @@ -1,4 +1,6 @@ using Content.Shared.CCVar; +using Content.Shared.Ghost; +using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mobs.Systems; using Content.Shared.NPC; @@ -34,9 +36,18 @@ public sealed class SSDIndicatorSystem : EntitySystem !_mobState.IsDead(uid) && !HasComp(uid) && TryComp(uid, out var mindContainer) && - mindContainer.ShowExamineInfo) + mindContainer.ShowExamineInfo && + !IsAghosted(mindContainer)) // WD EDIT { args.StatusIcons.Add(_prototype.Index(component.Icon)); } } + + private bool IsAghosted(MindContainerComponent mindContainer) // WD + { + if (!TryComp(mindContainer.Mind, out MindComponent? mindComp)) + return false; + + return TryComp(mindComp.VisitingEntity, out GhostComponent? ghost) && ghost.CanGhostInteract; + } } diff --git a/Content.Client/StatusIcon/StatusIconOverlay.cs b/Content.Client/StatusIcon/StatusIconOverlay.cs index 471f0b8753..dc3f3c6bb3 100644 --- a/Content.Client/StatusIcon/StatusIconOverlay.cs +++ b/Content.Client/StatusIcon/StatusIconOverlay.cs @@ -59,6 +59,9 @@ public sealed class StatusIconOverlay : Overlay if (icons.Count == 0) continue; + if (!_statusIcon.IsVisible(uid)) + continue; + var worldMatrix = Matrix3.CreateTranslation(worldPos); Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); diff --git a/Content.Client/StatusIcon/StatusIconSystem.cs b/Content.Client/StatusIcon/StatusIconSystem.cs index 980fd9f2a9..1eec788387 100644 --- a/Content.Client/StatusIcon/StatusIconSystem.cs +++ b/Content.Client/StatusIcon/StatusIconSystem.cs @@ -1,7 +1,10 @@ using Content.Shared.CCVar; +using Content.Shared.Ghost; using Content.Shared.StatusIcon; using Content.Shared.StatusIcon.Components; +using Robust.Client.GameObjects; using Robust.Client.Graphics; +using Robust.Client.Player; using Robust.Shared.Configuration; namespace Content.Client.StatusIcon; @@ -13,6 +16,10 @@ public sealed class StatusIconSystem : SharedStatusIconSystem { [Dependency] private readonly IConfigurationManager _configuration = default!; [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IPlayerManager _playerMan = default!; + + private EntityQuery _ghostQuery; + private EntityQuery _spriteQuery; private bool _globalEnabled; private bool _localEnabled; @@ -20,6 +27,9 @@ public sealed class StatusIconSystem : SharedStatusIconSystem /// public override void Initialize() { + _ghostQuery = GetEntityQuery(); + _spriteQuery = GetEntityQuery(); + Subs.CVar(_configuration, CCVars.LocalStatusIconsEnabled, OnLocalStatusIconChanged, true); Subs.CVar(_configuration, CCVars.GlobalStatusIconsEnabled, OnGlobalStatusIconChanged, true); } @@ -59,5 +69,29 @@ public sealed class StatusIconSystem : SharedStatusIconSystem RaiseLocalEvent(uid, ref ev); return ev.StatusIcons; } + + /// + /// For overlay to check if an entity can be seen. + /// + public bool IsVisible(EntityUid uid) + { + // ghosties can always see them + var viewer = _playerMan.LocalSession?.AttachedEntity; + if (_ghostQuery.HasComponent(viewer)) + return true; + + if (_spriteQuery.TryGetComponent(uid, out var sprite) && !sprite.Visible) + return false; + + var ev = new StatusIconVisibleEvent(true); + RaiseLocalEvent(uid, ref ev); + return ev.Visible; + } } +/// +/// Raised on an entity to check if it should draw hud icons. +/// Used to check invisibility etc inside the screen bounds. +/// +[ByRefEvent] +public record struct StatusIconVisibleEvent(bool Visible); diff --git a/Content.Client/Stealth/StealthSystem.cs b/Content.Client/Stealth/StealthSystem.cs index b60ffc2a40..3e5df79192 100644 --- a/Content.Client/Stealth/StealthSystem.cs +++ b/Content.Client/Stealth/StealthSystem.cs @@ -1,4 +1,5 @@ using Content.Client.Interactable.Components; +using Content.Client.StatusIcon; using Content.Shared.Stealth; using Content.Shared.Stealth.Components; using Robust.Client.GameObjects; @@ -18,9 +19,12 @@ public sealed class StealthSystem : SharedStealthSystem base.Initialize(); _shader = _protoMan.Index("Stealth").InstanceUnique(); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnShaderRender); + + SubscribeLocalEvent(OnStatusIconVisible); } public override void SetEnabled(EntityUid uid, bool value, StealthComponent? component = null) @@ -92,5 +96,12 @@ public sealed class StealthSystem : SharedStealthSystem visibility = MathF.Max(0, visibility); args.Sprite.Color = new Color(visibility, visibility, 1, 1); } + + private void OnStatusIconVisible(EntityUid uid, StealthComponent comp, ref StatusIconVisibleEvent args) + { + // no sechud seing invisible ninjas + if (comp.Enabled) + args.Visible = false; + } } diff --git a/Content.Client/Storage/Systems/EntityStorageSystem.cs b/Content.Client/Storage/Systems/EntityStorageSystem.cs index dd3f8d3860..05962b4e32 100644 --- a/Content.Client/Storage/Systems/EntityStorageSystem.cs +++ b/Content.Client/Storage/Systems/EntityStorageSystem.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Client.StatusIcon; using Content.Client.Storage.Components; using Content.Shared.Destructible; using Content.Shared.Foldable; @@ -29,6 +30,8 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem SubscribeLocalEvent(OnGetState); SubscribeLocalEvent(OnHandleState); + + SubscribeLocalEvent(OnStatusIconVisible); } public override bool ResolveStorage(EntityUid uid, [NotNullWhen(true)] ref SharedEntityStorageComponent? component) @@ -40,4 +43,9 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem component = storage; return component != null; } + + private void OnStatusIconVisible(EntityUid uid, InsideEntityStorageComponent comp, ref StatusIconVisibleEvent args) + { + args.Visible = false; + } } diff --git a/Content.Server/Administration/Commands/AGhost.cs b/Content.Server/Administration/Commands/AGhost.cs index 4f0c49bd95..77f2c028ab 100644 --- a/Content.Server/Administration/Commands/AGhost.cs +++ b/Content.Server/Administration/Commands/AGhost.cs @@ -85,6 +85,8 @@ public sealed class AGhost : LocalizedCommands return; } + _entities.Dirty(mindId, mind); // WD + if (mind.VisitingEntity != default && _entities.TryGetComponent(mind.VisitingEntity, out var oldGhostComponent)) { mindSystem.UnVisit(mindId, mind); diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 5e82959c4e..db00905ea6 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -113,7 +113,7 @@ - type: ContainerContainer containers: toggleable-clothing: !type:ContainerSlot {} - + - type: entity parent: ClothingOuterBaseLarge id: ClothingOuterSuitSpaceNinja @@ -125,7 +125,7 @@ - type: Clothing sprite: Clothing/OuterClothing/Suits/spaceninja.rsi - type: StealthClothing - visibility: 1.1 + visibility: 0.5 toggleAction: ActionTogglePhaseCloak - type: PressureProtection highPressureMultiplier: 0.6 From f07712a5f6ad562cd244304a23238c09147d8423 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 15 Jun 2024 13:13:03 +0000 Subject: [PATCH 12/14] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 3a0453d8cb..3a85dcd7c4 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4381,3 +4381,22 @@ id: 304 time: '2024-06-15T00:47:50.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/352 +- author: Aviu + changes: + - message: "\u041D\u0438\u043D\u0434\u0437\u044E \u0432 \u0441\u0442\u0435\u043B\ + \u0441\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043F\u043E\u043A\ + \u0430\u0437\u044B\u0432\u0430\u044E\u0442 \u0445\u0443\u0434\u044B." + type: Fix + - message: "\u041F\u0440\u0438 \u0430\u0433\u043E\u0441\u0442\u0435 \u0443 \u043F\ + \u0435\u0440\u0441\u043E\u043D\u0430\u0436\u0430 \u0431\u043E\u043B\u044C\u0448\ + \u0435 \u043D\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\ + \u0441\u044F \u0421\u0421\u0414 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\ + \u0440." + type: Fix + - message: "\u041D\u0438\u043D\u0434\u0437\u044F \u0432 \u0441\u0442\u0435\u043B\ + \u0441\u0435 \u0442\u0435\u043F\u0435\u0440\u044C \u043C\u0435\u043D\u0435\u0435\ + \ \u0437\u0430\u043C\u0435\u0442\u0435\u043D." + type: Tweak + id: 305 + time: '2024-06-15T13:11:59.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/357 From 41c6d99b936a995c6bac0a2b1d5de784451c90dd Mon Sep 17 00:00:00 2001 From: ThereDrD0 <88589686+ThereDrD0@users.noreply.github.com> Date: Sat, 15 Jun 2024 16:37:17 +0300 Subject: [PATCH 13/14] add: scroll resprite (#358) --- .../Textures/White/Misc/scrolls.rsi/scroll.png | Bin 673 -> 853 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/White/Misc/scrolls.rsi/scroll.png b/Resources/Textures/White/Misc/scrolls.rsi/scroll.png index 2f00a2340183f2699d42669764231e4f85aef91e..1b923d489a1c4210ffaf924f99074e9ad3403841 100644 GIT binary patch delta 830 zcmV-E1Ht^E1=R+SB!2;OQb$4nuFf3k0008@NklN-tv3MS>6^3emhpQeY+MDKH93vWPB0ha%`;MHF51kO-YRkD%1){=D0} z?e*O&xDM<0vUhvmcbnp?KV_hKq(^eq~5Jr zJQ7c$s2VP(!?plh4-}(Rfx9F9OwG;f3OswWsCN!C{XMH08g_=&kdeCiOcDz z>MYo?0^;BikYoj)$7PrT;e|b!0)gRyZf2f;z|-tuc%ZwCyb^ZJ17iOHLlIIs!-#n zcD^PziFO}s1FOHF-B%5-jBZmdCYH+ly8^3g5dfaP{K)j=cufnIBG7%Y_A!*w z8D76zV0v<#<;71sCa>maxoH6%p*9prvn99sk5DU2D;(fQBC8; z7&m+JrD`MYZ~OszPuQDsn-cE;000hUSV?A0O#mtY000O800000007cclK=n!07*qo IM6N<$f|7BLl>h($ delta 649 zcmV;40(Sk?2B8IzB!3BTNLh0L01m_e01m_fl`9S#00070NklEt#~t$kw@i;ZXnFO~9i_xMUf!y{@v z{M;0Bj`KZxAd#F>b&ZXQ8X@e-{-e3I^0oex< zc1o!EMya@I17Ai?z%~Qyy5C9!gae-g5;A)AwVavJX;}#tr+}`0WmEDiS|Fh)xeP>Ifd4+z45l&)WSv+Zh#{Nyv{8FSsh8 zJ}PQ=0e@dccBdRNM&`#g8` Date: Sat, 15 Jun 2024 13:38:20 +0000 Subject: [PATCH 14/14] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 3a85dcd7c4..b00b2d6fd6 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -4400,3 +4400,11 @@ id: 305 time: '2024-06-15T13:11:59.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/357 +- author: ThereDrD + changes: + - message: "\u0420\u0435\u0441\u043F\u0440\u0430\u0439\u0442 \u0441\u0432\u0438\u0442\ + \u043A\u0430" + type: Add + id: 306 + time: '2024-06-15T13:37:17.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/358