From a05ea2e8df62897c97c0ef96499f635a7f488a86 Mon Sep 17 00:00:00 2001 From: Fansana <116083121+Fansana@users.noreply.github.com> Date: Sun, 10 Nov 2024 02:44:34 +0100 Subject: [PATCH 01/17] Update CODEOWNERS --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b997a1cacb2..3655d448e5d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,3 @@ # Floofstation CODEOWNERS -* @Fansana @Memeji @FoxxoTrystan @fenndragon +* @Fansana @Memeji @FoxxoTrystan From 99ed7749aec42611b8e4b2436e033fd5be399a33 Mon Sep 17 00:00:00 2001 From: Fansana Date: Mon, 11 Nov 2024 08:14:45 +0100 Subject: [PATCH 02/17] update changelog --- Resources/Changelog/Floof.yml | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 8d1fc7d44fc..4d81c902029 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1344,3 +1344,67 @@ Entries: id: 180 time: '2024-11-01T20:32:06.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/313 +- author: FoxxoTrystan + changes: + - type: Fix + message: Fix the call the shuttle button. + id: 181 + time: '2024-11-09T15:55:29.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/338 +- author: VividPups + changes: + - type: Add + message: New Combat Boots! + id: 182 + time: '2024-11-08T00:42:08.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/335 +- author: Memeji + changes: + - type: Add + message: 18 plants + - type: Tweak + message: Added plant mutations to existing plants. + id: 183 + time: '2024-11-07T22:30:55.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/284 +- author: VividPups + changes: + - type: Add + message: New way for Syndies to deal with those pesky psionic + id: 184 + time: '2024-11-07T04:47:49.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/322 +- author: fenndragon + changes: + - type: Add + message: 'inventory, body, and grabbing setups for NT xenos ' + id: 185 + time: '2024-11-07T01:18:41.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/316 +- author: FoxxoTrystan + changes: + - type: Tweak + message: >- + LPO no longer has the CC Stamp and they have a new communication + console. + id: 186 + time: '2024-11-06T13:15:11.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/325 +- author: KyuPolaris + changes: + - type: Fix + message: >- + Prescription Lenses re-added to prescription MedHUDs and prescription + SecHUDs. + id: 187 + time: '2024-11-05T23:03:37.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/330 +- author: Fansana + changes: + - type: Fix + message: >- + fix Voltage drink, now required VodkaRedBool instead of vodka and energy + drink + id: 188 + time: '2024-11-05T00:33:06.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/328 From 9745ad3cae28dd4adcee93354c52447bedfa7243 Mon Sep 17 00:00:00 2001 From: Memeji Date: Mon, 11 Nov 2024 17:20:19 -0600 Subject: [PATCH 03/17] Initial commit --- .../Consumable/Smokeables/Cigarettes/cigarette.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml index 18ea198697e..6476c0e4816 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml @@ -77,9 +77,11 @@ smokable: maxVol: 40 reagents: - - ReagentId: Nicotine - Quantity: 10 - - ReagentId: Omnizine + - ReagentId: Iron # Floof - Herbals aren't nicotine + Quantity: 5 + - ReagentId: Omnizine # Floof - Herbals aren't nicotine + Quantity: 5 + - ReagentId: Dylovene # Floof - Herbals aren't nicotine Quantity: 5 - type: entity From 5bee86f3bf7a3ccd27bf8bad458340c7c81b740a Mon Sep 17 00:00:00 2001 From: Fansana Date: Wed, 13 Nov 2024 11:34:53 +0100 Subject: [PATCH 04/17] no more munching on uranium --- .../Prototypes/Entities/Objects/Materials/Sheets/other.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index ae6770d631d..5fec307625d 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -216,9 +216,6 @@ suffix: Full components: - type: Material - - type: Food - transferAmount: 10 - - type: BadFood - type: PhysicalComposition materialComposition: Uranium: 100 From c59ca5ddd0fefa828458e5d267ba80affce47455 Mon Sep 17 00:00:00 2001 From: fenndragon Date: Wed, 13 Nov 2024 15:27:17 -0700 Subject: [PATCH 05/17] Update and rename Adolescent_dragon.yml to Drake.yml --- .../Entities/Mobs/NPCs/{Adolescent_dragon.yml => Drake.yml} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename Resources/Prototypes/Floof/Entities/Mobs/NPCs/{Adolescent_dragon.yml => Drake.yml} (97%) diff --git a/Resources/Prototypes/Floof/Entities/Mobs/NPCs/Adolescent_dragon.yml b/Resources/Prototypes/Floof/Entities/Mobs/NPCs/Drake.yml similarity index 97% rename from Resources/Prototypes/Floof/Entities/Mobs/NPCs/Adolescent_dragon.yml rename to Resources/Prototypes/Floof/Entities/Mobs/NPCs/Drake.yml index 895b43726f9..850a8a2f064 100644 --- a/Resources/Prototypes/Floof/Entities/Mobs/NPCs/Adolescent_dragon.yml +++ b/Resources/Prototypes/Floof/Entities/Mobs/NPCs/Drake.yml @@ -3,8 +3,8 @@ - SimpleSpaceMobBase - FlyingMobBase id: MobDragonPet - name: adolescent space dragon - description: A younger Space dragon with a friendly demeanor. + name: Space Drake + description: A smaller breed of space dragon with a friendly demeanor. components: - type: Body prototype: Animal @@ -156,6 +156,7 @@ - TauCetiBasic understands: - TauCetiBasic + - type: LeashAnchor - type: entity categories: [ HideSpawnMenu ] From 6694ad8dc86f496a552ee9450c59611219374580 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 11 Nov 2024 22:00:54 -0400 Subject: [PATCH 06/17] Auto voting system for first-time player join as well as return to lobby. --- Content.Server/AutoVote/AutoVoteSystem.cs | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Content.Server/AutoVote/AutoVoteSystem.cs diff --git a/Content.Server/AutoVote/AutoVoteSystem.cs b/Content.Server/AutoVote/AutoVoteSystem.cs new file mode 100644 index 00000000000..77ba406a302 --- /dev/null +++ b/Content.Server/AutoVote/AutoVoteSystem.cs @@ -0,0 +1,57 @@ +using Robust.Shared.Configuration; +using Content.Server.Voting.Managers; +using Content.Shared.GameTicking; +using Content.Shared.Voting; +using Content.Shared.CCVar; +using Robust.Server.Player; +using Content.Server.GameTicking; + +namespace Content.Server.AutoVote; + +public sealed class AutoVoteSystem : EntitySystem +{ + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] public readonly IVoteManager _voteManager = default!; + [Dependency] public readonly IPlayerManager _playerManager = default!; + + public bool _shouldVoteNextJoin = false; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnReturnedToLobby); + SubscribeLocalEvent(OnPlayerJoinedLobby); + } + + public void OnReturnedToLobby(RoundRestartCleanupEvent ev) + { + CallAutovote(); + } + + public void OnPlayerJoinedLobby(PlayerJoinedLobbyEvent ev) + { + if (_shouldVoteNextJoin) + { + CallAutovote(); + _shouldVoteNextJoin = false; + } + } + + private void CallAutovote() + { + if (!_cfg.GetCVar(CCVars.AutoVoteEnabled)) + return; + + if (_playerManager.PlayerCount == 0) + { + _shouldVoteNextJoin = true; + return; + } + + if (_cfg.GetCVar(CCVars.MapAutoVoteEnabled)) + _voteManager.CreateStandardVote(null, StandardVoteType.Preset); + if (_cfg.GetCVar(CCVars.PresetAutoVoteEnabled)) + _voteManager.CreateStandardVote(null, StandardVoteType.Map); + } +} From eb800c6a12bcec07e56cb32da0059dd9f456a279 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Tue, 12 Nov 2024 03:15:47 +0100 Subject: [PATCH 07/17] CVars --- Content.Shared/CCVar/CCVars.cs | 36 ++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 93a1ffc7d17..7ef691f3364 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2005,7 +2005,7 @@ public static readonly CVarDef /// Allow Ethereal Ent to PassThrough Walls/Objects while in Ethereal. /// public static readonly CVarDef EtherealPassThrough = - CVarDef.Create("ic.EtherealPassThrough", true, CVar.SERVER); + CVarDef.Create("ic.EtherealPassThrough", false, CVar.SERVER); /* * Salvage @@ -2062,13 +2062,13 @@ public static readonly CVarDef */ /// - /// Time that players have to wait before rules can be accepted. + /// Time that players have to wait before rules can be accepted. /// public static readonly CVarDef RulesWaitTime = - CVarDef.Create("rules.time", 60f, CVar.SERVER | CVar.REPLICATED); + CVarDef.Create("rules.time", 10f, CVar.SERVER | CVar.REPLICATED); /// - /// Don't show rules to localhost/loopback interface. + /// Don't show rules to localhost/loopback interface. /// public static readonly CVarDef RulesExemptLocal = CVarDef.Create("rules.exempt_local", true, CVar.SERVERONLY); @@ -2640,5 +2640,33 @@ public static readonly CVarDef CVarDef.Create("ghost.allow_same_character", false, CVar.SERVERONLY); #endregion + + /// + /// Set to true to disable parallel processing in the pow3r solver. + /// + public static readonly CVarDef DebugPow3rDisableParallel = + CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); + + /* + * AUTOVOTE SYSTEM + */ + + /// + /// Enables the automatic voting system. + /// + public static readonly CVarDef AutoVoteEnabled = + CVarDef.Create("vote.autovote_enabled", false, CVar.SERVERONLY); + + /// + /// Automatically make map votes on return to lobby? Requires auto voting to be enabled. + /// + public static readonly CVarDef MapAutoVoteEnabled = + CVarDef.Create("vote.map_autovote_enabled", true, CVar.SERVERONLY); + + /// + /// Automatically make preset votes on return to lobby? Requires auto voting to be enabled. + /// + public static readonly CVarDef PresetAutoVoteEnabled = + CVarDef.Create("vote.preset_autovote_enabled", true, CVar.SERVERONLY); } } From 2dd15f00be9fd1fa26db5bdb0b0f5206cc31f0bd Mon Sep 17 00:00:00 2001 From: fenndragon Date: Wed, 13 Nov 2024 16:18:35 -0700 Subject: [PATCH 08/17] Update DragonSystem.cs --- Content.Server/Dragon/DragonSystem.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Content.Server/Dragon/DragonSystem.cs b/Content.Server/Dragon/DragonSystem.cs index 79e5c0a2a9c..3bc9195a30b 100644 --- a/Content.Server/Dragon/DragonSystem.cs +++ b/Content.Server/Dragon/DragonSystem.cs @@ -93,12 +93,7 @@ public override void Update(float frameTime) comp.RiftAccumulator += frameTime; - // Delete it, naughty dragon! - if (comp.RiftAccumulator >= comp.RiftMaxAccumulator) - { - Roar(uid, comp); - QueueDel(uid); - } + } } From e889d49f94e4683fea43195d0c0781abae04ac80 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Tue, 12 Nov 2024 22:46:45 -0400 Subject: [PATCH 09/17] remove unused cvars --- Content.Shared/CCVar/CCVars.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 7ef691f3364..657726cea4e 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2005,7 +2005,7 @@ public static readonly CVarDef /// Allow Ethereal Ent to PassThrough Walls/Objects while in Ethereal. /// public static readonly CVarDef EtherealPassThrough = - CVarDef.Create("ic.EtherealPassThrough", false, CVar.SERVER); + CVarDef.Create("ic.EtherealPassThrough", true, CVar.SERVER); /* * Salvage @@ -2065,7 +2065,7 @@ public static readonly CVarDef /// Time that players have to wait before rules can be accepted. /// public static readonly CVarDef RulesWaitTime = - CVarDef.Create("rules.time", 10f, CVar.SERVER | CVar.REPLICATED); + CVarDef.Create("rules.time", 60f, CVar.SERVER | CVar.REPLICATED); /// /// Don't show rules to localhost/loopback interface. @@ -2641,12 +2641,6 @@ public static readonly CVarDef #endregion - /// - /// Set to true to disable parallel processing in the pow3r solver. - /// - public static readonly CVarDef DebugPow3rDisableParallel = - CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY); - /* * AUTOVOTE SYSTEM */ From e01bf4adebc4d9d704b03ed4cb6a67d04228dcbb Mon Sep 17 00:00:00 2001 From: fenndragon Date: Wed, 13 Nov 2024 16:28:42 -0700 Subject: [PATCH 10/17] Update ghost-role-component.ftl --- Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index cbc7923fb0e..e3c2c409333 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -144,7 +144,7 @@ ghost-role-information-ifrit-name = Ifrit ghost-role-information-ifrit-description = Listen to your owner. Don't tank damage. Punch people hard. ghost-role-information-space-dragon-name = Space dragon -ghost-role-information-space-dragon-description = Call in 3 carp rifts and take over this quadrant! You have only 5 minutes in between each rift before you will disappear. +ghost-role-information-space-dragon-description = create 3 carp rifts and protect your nest! ghost-role-information-space-dragon-dungeon-description = Defend the expedition dungeon with your fishy comrades! ghost-role-information-cluwne-name = Cluwne From 3cd7160f4d8db00db47598f4345e8e80f9832289 Mon Sep 17 00:00:00 2001 From: Fansana Date: Thu, 14 Nov 2024 00:30:14 +0100 Subject: [PATCH 11/17] cvar enabled by default --- Content.Shared/CCVar/CCVars.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 657726cea4e..4228762bf5b 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -2649,7 +2649,7 @@ public static readonly CVarDef /// Enables the automatic voting system. /// public static readonly CVarDef AutoVoteEnabled = - CVarDef.Create("vote.autovote_enabled", false, CVar.SERVERONLY); + CVarDef.Create("vote.autovote_enabled", true, CVar.SERVERONLY); // Floof enabled by default /// /// Automatically make map votes on return to lobby? Requires auto voting to be enabled. From 5ee3319fe53dabf55af6efe7998ad7d5d8e0f12f Mon Sep 17 00:00:00 2001 From: Fansana Date: Thu, 14 Nov 2024 00:57:25 +0100 Subject: [PATCH 12/17] fix power flickers --- Content.Server/Power/Pow3r/BatteryRampPegSolver.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs index 5d52bde3777..d8f46e6966f 100644 --- a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs +++ b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs @@ -54,7 +54,7 @@ public void Tick(float frameTime, PowerState state, IParallelManager parallel) // suppliers + discharger) Then decide based on total layer size whether its worth parallelizing that // layer? _networkJob.Networks = group; - parallel.ProcessNow(_networkJob, group.Count); + parallel.ProcessSerialNow(_networkJob, group.Count); } ClearBatteries(state); From c062bae108deb49d1557d525dc7dcbdbe1ba7b59 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:02:58 +0000 Subject: [PATCH 13/17] Automatic Changelog Update (#352) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 60cde136232..8b4eaeef442 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1445,3 +1445,10 @@ Entries: id: 192 time: '2024-11-14T09:57:52.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/350 +- author: fenndragon + changes: + - type: Remove + message: Removed timer from dragon gameplay + id: 193 + time: '2024-11-14T18:02:17.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/352 From 94abc4888ed017c6eb753f7034dff259546e9151 Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:04:16 +0000 Subject: [PATCH 14/17] Automatic Changelog Update (#354) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 8b4eaeef442..754a98d7ae4 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1452,3 +1452,10 @@ Entries: id: 193 time: '2024-11-14T18:02:17.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/352 +- author: Fansana + changes: + - type: Fix + message: Fixed the power flickers! + id: 194 + time: '2024-11-14T18:03:44.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/354 From 0e8e0c10a0c0c5002f8a88de5213f5c2cd4c02ee Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:07:55 +0000 Subject: [PATCH 15/17] Automatic Changelog Update (#349) --- Resources/Changelog/Floof.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 754a98d7ae4..1745ff4ec30 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1459,3 +1459,12 @@ Entries: id: 194 time: '2024-11-14T18:03:44.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/354 +- author: fenndragon + changes: + - type: Add + message: Added Leash anchor to Space drakes + - type: Tweak + message: 'Tweaked the name of Space drakes ' + id: 195 + time: '2024-11-14T18:05:25.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/349 From ec8db19c85783b0c723e57b38cd90159a6f22bea Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:13:59 +0000 Subject: [PATCH 16/17] Automatic Changelog Update (#344) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 1745ff4ec30..07cb0f352fe 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1468,3 +1468,10 @@ Entries: id: 195 time: '2024-11-14T18:05:25.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/349 +- author: Memeji + changes: + - type: Tweak + message: Removed nicotine from Interdynes and replaced it with iron and dylovene. + id: 196 + time: '2024-11-14T18:06:38.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/344 From e183e332ca66e621c3b92eae011fee73a359dccc Mon Sep 17 00:00:00 2001 From: FloofStation Changelogs <175611579+Floof-Station-Bot@users.noreply.github.com> Date: Thu, 14 Nov 2024 23:20:50 +0000 Subject: [PATCH 17/17] Automatic Changelog Update (#351) --- Resources/Changelog/Floof.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Floof.yml b/Resources/Changelog/Floof.yml index 07cb0f352fe..8105e549ca3 100644 --- a/Resources/Changelog/Floof.yml +++ b/Resources/Changelog/Floof.yml @@ -1475,3 +1475,10 @@ Entries: id: 196 time: '2024-11-14T18:06:38.0000000+00:00' url: https://github.com/Fansana/floofstation1/pull/344 +- author: Fansana + changes: + - type: Add + message: Added auto vote system + id: 197 + time: '2024-11-14T23:20:24.0000000+00:00' + url: https://github.com/Fansana/floofstation1/pull/351