From 96d0197c9437a4c9ee2f1d2b8fb47717955fce63 Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Mon, 27 Jul 2026 14:15:46 +0700 Subject: [PATCH 01/12] ZZZZ --- .../ExperimentalLawProviderComponent.cs | 3 + .../Silicons/Laws/SiliconLawSystem.cs | 41 +++++- .../ru-RU/_Arcane/research/experiements.ftl | 16 +++ .../Locale/ru-RU/_Arcane/silicon/laws.ftl | 2 + .../Prototypes/_Arcane/Research/scanning.yml | 127 ++++++++++++++++++ .../_Orion/Research/Experiments/scanning.yml | 76 +++++------ 6 files changed, 225 insertions(+), 40 deletions(-) create mode 100644 Resources/Locale/ru-RU/_Arcane/research/experiements.ftl create mode 100644 Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl create mode 100644 Resources/Prototypes/_Arcane/Research/scanning.yml diff --git a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs index b388a8c5a9a..fcb6bb82d91 100644 --- a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs @@ -15,4 +15,7 @@ public sealed partial class ExperimentalLawProviderComponent : Component [DataField] public float RewardTime = 120.0f; [DataField] public int RewardPoints = 30000; + + [DataField] + public bool Used = false; } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 9926908cee7..b8a2b10397a 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -35,6 +35,7 @@ using Content.Shared.Research.Components; using Content.Server.Radio.EntitySystems; using Content.Server.Research.Systems; +using Robust.Shared.Timing; // Corvax-Next-AiRemoteControl using Content.Shared.Silicons.StationAi; @@ -59,6 +60,7 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem [Dependency] private readonly ResearchSystem _research = default!; [Dependency] private readonly RadioSystem _radio = default!; [Dependency] private readonly TagSystem _tagSystem = default!; // Corvax-Next-AiRemoteControl + [Dependency] private readonly IGameTiming _timing = default!; // Arcane-Edit @@ -415,11 +417,41 @@ public void SetLawsSilent(List newLaws, EntityUid target, SoundSpeci // Goob edit start private void ApplyExperimentalLaws(Entity ent, Entity experiment) { - var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); + if (experiment.Comp1.Used) + { + var failMessage = Loc.GetString("experimental-law-provider-already-used"); + _radio.SendRadioMessage(ent, failMessage, AnnouncementChannel, ent, escapeMarkup: false); + return; + } + var query = EntityManager.CompRegistryQueryEnumerator(ent.Comp.Components); + var hasSubverted = false; + var targetList = new List(); while (query.MoveNext(out var update)) + { + targetList.Add(update); + if (TryComp(update, out var provider) && provider.Subverted) + { + hasSubverted = true; + } + } + + if (hasSubverted) + { + var failMessage = Loc.GetString("experimental-law-provider-already-subverted"); + _radio.SendRadioMessage(ent, failMessage, AnnouncementChannel, ent, escapeMarkup: false); + return; + } + + var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); + + foreach (var update in targetList) + { SetLaws(laws.Laws, update, experiment.Comp2.LawUploadSound); + } + + experiment.Comp1.Used = true; var activeProv = EnsureComp(ent); activeProv.Timer = experiment.Comp1.RewardTime; @@ -429,7 +461,12 @@ private void ApplyExperimentalLaws(Entity ent, Entit var message = Loc.GetString("experimental-law-provider-start", ("timeLeft", (int) experiment.Comp1.RewardTime)); _radio.SendRadioMessage(ent, message, AnnouncementChannel, ent, escapeMarkup: false); - QueueDel(experiment); // Don't need this experimental board anymore + var boardUid = experiment.Owner; + Timer.Spawn(TimeSpan.FromSeconds(0.5), () => + { + if (!Deleted(boardUid)) QueueDel(boardUid); + } + ); } private const string AnnouncementChannel = "Science"; diff --git a/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl b/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl new file mode 100644 index 00000000000..05727bcd6aa --- /dev/null +++ b/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl @@ -0,0 +1,16 @@ +research-experiment-scanning-reagent-gun-name = Сканирование оружия +research-experiment-scanning-reagent-gun-desc = Сборка оружия позволяет узнать их слабые стороны и пересобрать в будущем. Отсканируйте 2 эксземпляра. +research-experiment-scanning-riotshield-name = Композитный щит подавления +research-experiment-scanning-riotshield-desc = Щит содержит слоистый композит, способный рассеивать энергию. Для усиления защиты нужен анализ структуры. Соберите щит и отсканируйте его. +research-experiment-scanning-ripley-name = Тяжёлый экзоскелет Рипли +research-experiment-scanning-ripley-desc = Механический экзоскелет Рипли использует сервоприводы нового поколения. Для улучшения маневренности необходим анализ гидравлики. Соберите Рипли и отсканируйте его. +research-experiment-scanning-clothing-name = Сканирование одежды +research-experiment-scanning-clothing-desc = Анализ тканей одежды позволяет улучшить их износостойкость. Отсканируйте 5 экземпляров. +research-experiment-scanning-implants-name = Сканирование имплантов +research-experiment-scanning-implants-desc = Анализ имплантации позволяет улучшить их износостойкость. Отсканируйте 3 экземпляров. +research-experiment-scanning-machines-name = Сканирование машин +research-experiment-scanning-machines-desc = Анализ машин позволяет улучшить их эффективность и надёжность. Отсканируйте 2 экземпляров. +research-experiment-scanning-bots-name = Сканирование ботов +research-experiment-scanning-bots-desc = Изучение конструкции ботов позволяет улучшить их автономность. Отсканируйте 3 экземпляра. +research-experiment-scanning-humanoids-name = Сканирование гуманоидов +research-experiment-scanning-humanoids-desc = Изучение анатомии гуманоидов позволяет улучшить медицинские процедуры. Отсканируйте 5 экземпляров. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl b/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl new file mode 100644 index 00000000000..63e5cea2ffd --- /dev/null +++ b/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl @@ -0,0 +1,2 @@ +experimental-law-provider-already-used = Экспериментальный закон уже был использован и не может быть активирован повторно. +experimental-law-provider-already-subverted = Невозможно применить экспериментальные законы: законы целевого ИИ/борга уже были изменены. \ No newline at end of file diff --git a/Resources/Prototypes/_Arcane/Research/scanning.yml b/Resources/Prototypes/_Arcane/Research/scanning.yml new file mode 100644 index 00000000000..239c51032f6 --- /dev/null +++ b/Resources/Prototypes/_Arcane/Research/scanning.yml @@ -0,0 +1,127 @@ +- type: researchExperiment + id: ScanningRandomGun + name: research-experiment-scanning-reagent-gun-name + description: research-experiment-scanning-reagent-gun-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - Gun + target: 2 + reward: + pointRewards: + - type: General + amount: 5000 + - type: Experimental + amount: 500 + +- type: researchExperiment + id: ScanningRandomBlocking + name: research-experiment-scanning-riotshield-name + description: research-experiment-scanning-riotshield-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - Blocking + target: 3 + reward: + pointRewards: + - type: General + amount: 5000 + - type: Experimental + amount: 500 + +- type: researchExperiment + id: ScanningRandomRipley + name: research-experiment-scanning-ripley-name + description: research-experiment-scanning-ripley-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - MechAir + target: 1 + reward: + pointRewards: + - type: General + amount: 8000 + - type: Experimental + amount: 500 + +- type: researchExperiment + id: ScanningBots + name: research-experiment-scanning-clothing-name + description: research-experiment-scanning-clothing-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - Clothing + target: 5 + reward: + pointRewards: + - type: General + amount: 3000 + - type: Experimental + amount: 600 + +- type: researchExperiment + id: ScanningImplanter + name: research-experiment-scanning-clothing-name + description: research-experiment-scanning-clothing-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - Implanter + target: 3 + reward: + pointRewards: + - type: General + amount: 4500 + - type: Experimental + amount: 600 + +- type: researchExperiment + id: ScanningImplanter + name: research-experiment-scanning-implants-name + description: research-experiment-scanning-implants-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - Vehicle + target: 2 + reward: + pointRewards: + - type: General + amount: 4500 + - type: Experimental + amount: 600 + +- type: researchExperiment + id: ScanningImplanter + name: research-experiment-scanning-bots-name + description: research-experiment-scanning-bots-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - HTN + target: 3 + reward: + pointRewards: + - type: General + amount: 4500 + - type: Experimental + amount: 600 + +- type: researchExperiment + id: ScanningHumanoids + name: research-experiment-scanning-humanoids-name + description: research-experiment-scanning-humanoids-desc + category: Scanning + objective: !type:ScanDifferentEntitiesExperimentObjective + requiredComponents: + - HumanoidAppearance + target: 5 + reward: + pointRewards: + - type: General + amount: 4000 + - type: Experimental + amount: 400 \ No newline at end of file diff --git a/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml b/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml index 6dcce330882..53886773fff 100644 --- a/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml +++ b/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml @@ -10,9 +10,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningFish @@ -26,9 +26,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningFishSecond @@ -42,9 +42,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPeopleAndroid @@ -58,9 +58,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPeopleAugmentedOrgans @@ -74,9 +74,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPeopleMutant @@ -90,9 +90,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPeopleSkillchip @@ -104,9 +104,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPointsAnomalies @@ -120,9 +120,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPointsBluespaceCrystal @@ -136,9 +136,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPointsMachineryTieredScanTier2Any @@ -151,9 +151,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPointsMachineryTieredScanTier3Any @@ -166,9 +166,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningPointsSlimeHard @@ -182,9 +182,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningRandomJanitorTrash @@ -198,9 +198,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningRandomMechaDamageScan @@ -216,9 +216,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningRandomMechaEquippedScan @@ -232,9 +232,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningRandomPlantsTraits @@ -248,9 +248,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningRandomPlantsWild @@ -264,9 +264,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningReagentCryostylane @@ -279,9 +279,9 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 - type: researchExperiment id: ScanningReagentHaloperidol @@ -294,6 +294,6 @@ reward: pointRewards: - type: General - amount: 500 + amount: 5000 - type: Experimental - amount: 150 + amount: 500 From b3a4025d968a5890ac66b3aa33ae083eedc3575d Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Tue, 28 Jul 2026 21:32:54 +0700 Subject: [PATCH 02/12] id --- Resources/Prototypes/_Arcane/Research/scanning.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/_Arcane/Research/scanning.yml b/Resources/Prototypes/_Arcane/Research/scanning.yml index 239c51032f6..c6930d3c035 100644 --- a/Resources/Prototypes/_Arcane/Research/scanning.yml +++ b/Resources/Prototypes/_Arcane/Research/scanning.yml @@ -47,7 +47,7 @@ amount: 500 - type: researchExperiment - id: ScanningBots + id: ScanningClothing name: research-experiment-scanning-clothing-name description: research-experiment-scanning-clothing-desc category: Scanning @@ -79,9 +79,9 @@ amount: 600 - type: researchExperiment - id: ScanningImplanter - name: research-experiment-scanning-implants-name - description: research-experiment-scanning-implants-desc + id: ScanningVehicle + name: research-experiment-scanning-machines-name + description: research-experiment-scanning-machines-desc category: Scanning objective: !type:ScanDifferentEntitiesExperimentObjective requiredComponents: @@ -95,7 +95,7 @@ amount: 600 - type: researchExperiment - id: ScanningImplanter + id: ScanningBots name: research-experiment-scanning-bots-name description: research-experiment-scanning-bots-desc category: Scanning From 706f5afd8c8d43523a1c730f9b08673a4f5e9055 Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Tue, 28 Jul 2026 21:38:38 +0700 Subject: [PATCH 03/12] =?UTF-8?q?=D0=BC=D0=BC=D0=BC=D0=BC=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Silicons/Laws/SiliconLawSystem.cs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index b8a2b10397a..1931f99092a 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -415,6 +415,7 @@ public void SetLawsSilent(List newLaws, EntityUid target, SoundSpeci // Corvax-Next-AiRemoteControl-End // Goob edit start + // Arcane edit start private void ApplyExperimentalLaws(Entity ent, Entity experiment) { if (experiment.Comp1.Used) @@ -425,12 +426,22 @@ private void ApplyExperimentalLaws(Entity ent, Entit } var query = EntityManager.CompRegistryQueryEnumerator(ent.Comp.Components); - var hasSubverted = false; var targetList = new List(); + var hasSubverted = false; while (query.MoveNext(out var update)) { targetList.Add(update); + + // Проверяем связанного ИИ + if (TryComp(update, out var stationAiHeldComp) && + stationAiHeldComp.CurrentConnectedEntity != null && + HasComp(stationAiHeldComp.CurrentConnectedEntity.Value) && + !targetList.Contains(stationAiHeldComp.CurrentConnectedEntity.Value)) + { + targetList.Add(stationAiHeldComp.CurrentConnectedEntity.Value); + } + if (TryComp(update, out var provider) && provider.Subverted) { hasSubverted = true; @@ -464,10 +475,11 @@ private void ApplyExperimentalLaws(Entity ent, Entit var boardUid = experiment.Owner; Timer.Spawn(TimeSpan.FromSeconds(0.5), () => { - if (!Deleted(boardUid)) QueueDel(boardUid); - } - ); + if (!Deleted(boardUid)) + QueueDel(boardUid); + }); } + // Arcane-Edit-End private const string AnnouncementChannel = "Science"; From da8a7df5fa169215644471fdf20a5e8e129c76b4 Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 11:47:19 +0700 Subject: [PATCH 04/12] 4 --- .../ActiveExperimentalLawProviderComponent.cs | 3 ++ .../Silicons/Laws/SiliconLawSystem.cs | 40 +++++++++---------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs index c284e852529..1e3a15443ed 100644 --- a/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs @@ -22,4 +22,7 @@ public sealed partial class ActiveExperimentalLawProviderComponent : Component [DataField] public SoundSpecifier? LawRewardSound = new SoundPathSpecifier("/Audio/Misc/cryo_warning.ogg"); + + [DataField] + public List TargetedEntities = new(); // Arcane-Edit } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 1931f99092a..85d939e1e18 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -425,15 +425,15 @@ private void ApplyExperimentalLaws(Entity ent, Entit return; } - var query = EntityManager.CompRegistryQueryEnumerator(ent.Comp.Components); + // Собираем ВСЕ цели (включая удалённо управляемых ИИ) var targetList = new List(); - var hasSubverted = false; + var query = EntityManager.CompRegistryQueryEnumerator(ent.Comp.Components); while (query.MoveNext(out var update)) { targetList.Add(update); - // Проверяем связанного ИИ + // Добавляем связанного ИИ из StationAiHeldComponent if (TryComp(update, out var stationAiHeldComp) && stationAiHeldComp.CurrentConnectedEntity != null && HasComp(stationAiHeldComp.CurrentConnectedEntity.Value) && @@ -441,25 +441,23 @@ private void ApplyExperimentalLaws(Entity ent, Entit { targetList.Add(stationAiHeldComp.CurrentConnectedEntity.Value); } - - if (TryComp(update, out var provider) && provider.Subverted) - { - hasSubverted = true; - } } - if (hasSubverted) + foreach (var target in targetList) { - var failMessage = Loc.GetString("experimental-law-provider-already-subverted"); - _radio.SendRadioMessage(ent, failMessage, AnnouncementChannel, ent, escapeMarkup: false); - return; + if (TryComp(target, out var provider) && provider.Subverted) + { + var failMessage = Loc.GetString("experimental-law-provider-already-subverted"); + _radio.SendRadioMessage(ent, failMessage, AnnouncementChannel, ent, escapeMarkup: false); + return; + } } var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); - foreach (var update in targetList) + foreach (var target in targetList) { - SetLaws(laws.Laws, update, experiment.Comp2.LawUploadSound); + SetLaws(laws.Laws, target, experiment.Comp2.LawUploadSound); } experiment.Comp1.Used = true; @@ -468,6 +466,7 @@ private void ApplyExperimentalLaws(Entity ent, Entit activeProv.Timer = experiment.Comp1.RewardTime; activeProv.RewardPoints = experiment.Comp1.RewardPoints; activeProv.OldSiliconLawsetId = ent.Comp.LastLawset; + activeProv.TargetedEntities = targetList; // <-- СОХРАНЯЕМ СПИСОК ЦЕЛЕЙ ДЛЯ ОТКАТА var message = Loc.GetString("experimental-law-provider-start", ("timeLeft", (int) experiment.Comp1.RewardTime)); _radio.SendRadioMessage(ent, message, AnnouncementChannel, ent, escapeMarkup: false); @@ -500,15 +499,16 @@ public override void Update(float frameTime) researchClient.Server == null) continue; - if (!TryComp(uid, out SiliconLawUpdaterComponent? updater)) - continue; - // Replace laws back + // Arcane-Edit-Start var lawset = GetLawset(provider.OldSiliconLawsetId).Laws; - var query = EntityManager.CompRegistryQueryEnumerator(updater.Components); - while (query.MoveNext(out var update)) - SetLaws(lawset, update, provider.LawRewardSound); + foreach (var target in provider.TargetedEntities) + { + if (!Deleted(target)) + SetLaws(lawset, target, provider.LawRewardSound); + } + // Arcane-Edit-End RemCompDeferred(uid, provider); _research.ModifyServerPoints(researchClient.Server.Value, provider.RewardPoints); From 771958e9537b8faf6eb2aecdef62bf333ab7d5cf Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 12:01:27 +0700 Subject: [PATCH 05/12] 5 --- .../ExperimentalLawProviderComponent.cs | 2 + .../Silicons/Laws/SiliconLawSystem.cs | 76 +++++++++---------- .../ru-RU/_Arcane/research/experiements.ftl | 2 +- .../Locale/ru-RU/_Arcane/silicon/laws.ftl | 2 +- .../Prototypes/_Arcane/Research/scanning.yml | 2 +- .../_Orion/Research/Experiments/scanning.yml | 38 +++++----- 6 files changed, 61 insertions(+), 61 deletions(-) diff --git a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs index fcb6bb82d91..0021ee98835 100644 --- a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs @@ -16,6 +16,8 @@ public sealed partial class ExperimentalLawProviderComponent : Component [DataField] public int RewardPoints = 30000; + // Arcane-Start [DataField] public bool Used = false; + // Arcane-End } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 85d939e1e18..1421dd13fd5 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -60,7 +60,7 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem [Dependency] private readonly ResearchSystem _research = default!; [Dependency] private readonly RadioSystem _radio = default!; [Dependency] private readonly TagSystem _tagSystem = default!; // Corvax-Next-AiRemoteControl - [Dependency] private readonly IGameTiming _timing = default!; // Arcane-Edit + [Dependency] private readonly IGameTiming _timing = default!; // Arcane @@ -415,9 +415,9 @@ public void SetLawsSilent(List newLaws, EntityUid target, SoundSpeci // Corvax-Next-AiRemoteControl-End // Goob edit start - // Arcane edit start private void ApplyExperimentalLaws(Entity ent, Entity experiment) { + // Arcane-Edit-Start if (experiment.Comp1.Used) { var failMessage = Loc.GetString("experimental-law-provider-already-used"); @@ -432,53 +432,47 @@ private void ApplyExperimentalLaws(Entity ent, Entit while (query.MoveNext(out var update)) { targetList.Add(update); - - // Добавляем связанного ИИ из StationAiHeldComponent - if (TryComp(update, out var stationAiHeldComp) && - stationAiHeldComp.CurrentConnectedEntity != null && - HasComp(stationAiHeldComp.CurrentConnectedEntity.Value) && - !targetList.Contains(stationAiHeldComp.CurrentConnectedEntity.Value)) { - targetList.Add(stationAiHeldComp.CurrentConnectedEntity.Value); + if (TryComp(update, out var stationAiHeldComp) && + stationAiHeldComp.CurrentConnectedEntity != null && + HasComp(stationAiHeldComp.CurrentConnectedEntity.Value) && + !targetList.Contains(stationAiHeldComp.CurrentConnectedEntity.Value)) + { + targetList.Add(stationAiHeldComp.CurrentConnectedEntity.Value); + } } - } - foreach (var target in targetList) - { - if (TryComp(target, out var provider) && provider.Subverted) + var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); + + foreach (var target in targetList) { - var failMessage = Loc.GetString("experimental-law-provider-already-subverted"); - _radio.SendRadioMessage(ent, failMessage, AnnouncementChannel, ent, escapeMarkup: false); - return; + var clonedLaws = laws.Laws.Select(law => law.ShallowClone()).ToList(); + SetLaws(clonedLaws, target, experiment.Comp2.LawUploadSound); + RaiseLocalEvent(new AILawUpdatedEvent(target, experiment.Comp2.Laws)); // Поднимаем событие } - } - - var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); - - foreach (var target in targetList) - { - SetLaws(laws.Laws, target, experiment.Comp2.LawUploadSound); - } - experiment.Comp1.Used = true; + experiment.Comp1.Used = true; + // Arcane-Edit-End - var activeProv = EnsureComp(ent); - activeProv.Timer = experiment.Comp1.RewardTime; - activeProv.RewardPoints = experiment.Comp1.RewardPoints; - activeProv.OldSiliconLawsetId = ent.Comp.LastLawset; - activeProv.TargetedEntities = targetList; // <-- СОХРАНЯЕМ СПИСОК ЦЕЛЕЙ ДЛЯ ОТКАТА + var activeProv = EnsureComp(ent); + activeProv.Timer = experiment.Comp1.RewardTime; + activeProv.RewardPoints = experiment.Comp1.RewardPoints; + activeProv.OldSiliconLawsetId = ent.Comp.LastLawset; + activeProv.TargetedEntities = targetList; - var message = Loc.GetString("experimental-law-provider-start", ("timeLeft", (int) experiment.Comp1.RewardTime)); - _radio.SendRadioMessage(ent, message, AnnouncementChannel, ent, escapeMarkup: false); + var message = Loc.GetString("experimental-law-provider-start", ("timeLeft", (int) experiment.Comp1.RewardTime)); + _radio.SendRadioMessage(ent, message, AnnouncementChannel, ent, escapeMarkup: false); - var boardUid = experiment.Owner; - Timer.Spawn(TimeSpan.FromSeconds(0.5), () => - { - if (!Deleted(boardUid)) - QueueDel(boardUid); - }); + // Arcane-Edit-Start + var boardUid = experiment.Owner; + Timer.Spawn(TimeSpan.FromSeconds(0.5), () => + { + if (!Deleted(boardUid)) + QueueDel(boardUid); + }); + } + // Arcane-Edit-End } - // Arcane-Edit-End private const string AnnouncementChannel = "Science"; @@ -507,6 +501,10 @@ public override void Update(float frameTime) { if (!Deleted(target)) SetLaws(lawset, target, provider.LawRewardSound); + + var clonedLaws = lawset.Select(law => law.ShallowClone()).ToList(); + SetLaws(clonedLaws, target, provider.LawRewardSound); + RaiseLocalEvent(new AILawUpdatedEvent(target, provider.OldSiliconLawsetId)); } // Arcane-Edit-End diff --git a/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl b/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl index 05727bcd6aa..10b02891f27 100644 --- a/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl +++ b/Resources/Locale/ru-RU/_Arcane/research/experiements.ftl @@ -13,4 +13,4 @@ research-experiment-scanning-machines-desc = Анализ машин позво research-experiment-scanning-bots-name = Сканирование ботов research-experiment-scanning-bots-desc = Изучение конструкции ботов позволяет улучшить их автономность. Отсканируйте 3 экземпляра. research-experiment-scanning-humanoids-name = Сканирование гуманоидов -research-experiment-scanning-humanoids-desc = Изучение анатомии гуманоидов позволяет улучшить медицинские процедуры. Отсканируйте 5 экземпляров. \ No newline at end of file +research-experiment-scanning-humanoids-desc = Изучение анатомии гуманоидов позволяет улучшить медицинские процедуры. Отсканируйте 5 экземпляров. diff --git a/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl b/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl index 63e5cea2ffd..813859b9637 100644 --- a/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl +++ b/Resources/Locale/ru-RU/_Arcane/silicon/laws.ftl @@ -1,2 +1,2 @@ experimental-law-provider-already-used = Экспериментальный закон уже был использован и не может быть активирован повторно. -experimental-law-provider-already-subverted = Невозможно применить экспериментальные законы: законы целевого ИИ/борга уже были изменены. \ No newline at end of file +experimental-law-provider-already-subverted = Невозможно применить экспериментальные законы: законы целевого ИИ/борга уже были изменены. diff --git a/Resources/Prototypes/_Arcane/Research/scanning.yml b/Resources/Prototypes/_Arcane/Research/scanning.yml index c6930d3c035..d330112f289 100644 --- a/Resources/Prototypes/_Arcane/Research/scanning.yml +++ b/Resources/Prototypes/_Arcane/Research/scanning.yml @@ -124,4 +124,4 @@ - type: General amount: 4000 - type: Experimental - amount: 400 \ No newline at end of file + amount: 400 diff --git a/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml b/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml index 53886773fff..e783c63ac53 100644 --- a/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml +++ b/Resources/Prototypes/_Orion/Research/Experiments/scanning.yml @@ -10,7 +10,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -26,7 +26,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -42,7 +42,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -58,7 +58,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -74,7 +74,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -90,7 +90,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -104,7 +104,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -120,7 +120,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 300 - type: Experimental amount: 500 @@ -136,7 +136,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 3000 - type: Experimental amount: 500 @@ -151,7 +151,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -166,7 +166,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -182,7 +182,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -198,7 +198,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -216,7 +216,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -232,7 +232,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -248,7 +248,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -264,7 +264,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 2500 - type: Experimental amount: 500 @@ -279,7 +279,7 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 3600 - type: Experimental amount: 500 @@ -294,6 +294,6 @@ reward: pointRewards: - type: General - amount: 5000 + amount: 400 - type: Experimental amount: 500 From a18d9dcde0fb80b7a137032737ff6d98d41b06fa Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 12:02:01 +0700 Subject: [PATCH 06/12] =?UTF-8?q?=D0=BF=D0=B0=D0=B2=D0=B0=D0=BF=D0=B2?= =?UTF-8?q?=D1=81=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Content.Server/Silicons/Laws/SiliconLawSystem.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 1421dd13fd5..01c97d04d02 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -425,7 +425,6 @@ private void ApplyExperimentalLaws(Entity ent, Entit return; } - // Собираем ВСЕ цели (включая удалённо управляемых ИИ) var targetList = new List(); var query = EntityManager.CompRegistryQueryEnumerator(ent.Comp.Components); @@ -448,7 +447,7 @@ private void ApplyExperimentalLaws(Entity ent, Entit { var clonedLaws = laws.Laws.Select(law => law.ShallowClone()).ToList(); SetLaws(clonedLaws, target, experiment.Comp2.LawUploadSound); - RaiseLocalEvent(new AILawUpdatedEvent(target, experiment.Comp2.Laws)); // Поднимаем событие + RaiseLocalEvent(new AILawUpdatedEvent(target, experiment.Comp2.Laws)); } experiment.Comp1.Used = true; From c293bbb0b111bd2a890b1ad112a49ebc95d897fe Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 12:45:47 +0700 Subject: [PATCH 07/12] =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D1=8F=20=D1=81?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ActiveExperimentalLawProviderComponent.cs | 3 - .../ExperimentalLawProviderComponent.cs | 11 ++- .../Silicons/Laws/SiliconLawSystem.cs | 75 ++++--------------- 3 files changed, 21 insertions(+), 68 deletions(-) diff --git a/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs index 1e3a15443ed..c284e852529 100644 --- a/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ActiveExperimentalLawProviderComponent.cs @@ -22,7 +22,4 @@ public sealed partial class ActiveExperimentalLawProviderComponent : Component [DataField] public SoundSpecifier? LawRewardSound = new SoundPathSpecifier("/Audio/Misc/cryo_warning.ogg"); - - [DataField] - public List TargetedEntities = new(); // Arcane-Edit } diff --git a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs index 0021ee98835..31f4ce728e1 100644 --- a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs @@ -14,10 +14,9 @@ public sealed partial class ExperimentalLawProviderComponent : Component // buffed point amounts 3x so people will actually use this; 30k in two minutes seems ok to me (triples points per second from ~80 to ~240)- strong but takes a lot of setup by RD (and stealing the AI upload console) [DataField] public float RewardTime = 120.0f; - [DataField] public int RewardPoints = 30000; - - // Arcane-Start - [DataField] - public bool Used = false; - // Arcane-End + // Arcane-Edit-Start + //[DataField] public int RewardPoints = 30000; + [DataField] public int MinRewardPoints = 1000; + [DataField] public int MaxRewardPoints = 15000; +// Arcane-Edit-End } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 01c97d04d02..1f5d67bbb95 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -60,7 +60,6 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem [Dependency] private readonly ResearchSystem _research = default!; [Dependency] private readonly RadioSystem _radio = default!; [Dependency] private readonly TagSystem _tagSystem = default!; // Corvax-Next-AiRemoteControl - [Dependency] private readonly IGameTiming _timing = default!; // Arcane @@ -183,7 +182,7 @@ private void OnIonStormLaws(EntityUid uid, SiliconLawProviderComponent component component.Subverted = true; // new laws may allow antagonist behaviour so make it clear for admins - if(_mind.TryGetMind(uid, out var mindId, out _)) + if (_mind.TryGetMind(uid, out var mindId, out _)) EnsureSubvertedSiliconRole(mindId); } @@ -417,60 +416,23 @@ public void SetLawsSilent(List newLaws, EntityUid target, SoundSpeci // Goob edit start private void ApplyExperimentalLaws(Entity ent, Entity experiment) { - // Arcane-Edit-Start - if (experiment.Comp1.Used) - { - var failMessage = Loc.GetString("experimental-law-provider-already-used"); - _radio.SendRadioMessage(ent, failMessage, AnnouncementChannel, ent, escapeMarkup: false); - return; - } - - var targetList = new List(); + var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); var query = EntityManager.CompRegistryQueryEnumerator(ent.Comp.Components); while (query.MoveNext(out var update)) - { - targetList.Add(update); - { - if (TryComp(update, out var stationAiHeldComp) && - stationAiHeldComp.CurrentConnectedEntity != null && - HasComp(stationAiHeldComp.CurrentConnectedEntity.Value) && - !targetList.Contains(stationAiHeldComp.CurrentConnectedEntity.Value)) - { - targetList.Add(stationAiHeldComp.CurrentConnectedEntity.Value); - } - } + SetLaws(laws.Laws, update, experiment.Comp2.LawUploadSound); - var laws = GetRandomLaws(experiment.Comp1.RandomLawsets); + var activeProv = EnsureComp(ent); + activeProv.Timer = experiment.Comp1.RewardTime; - foreach (var target in targetList) - { - var clonedLaws = laws.Laws.Select(law => law.ShallowClone()).ToList(); - SetLaws(clonedLaws, target, experiment.Comp2.LawUploadSound); - RaiseLocalEvent(new AILawUpdatedEvent(target, experiment.Comp2.Laws)); - } + activeProv.RewardPoints = _robustRandom.Next(10, 15001); - experiment.Comp1.Used = true; - // Arcane-Edit-End + activeProv.OldSiliconLawsetId = ent.Comp.LastLawset; - var activeProv = EnsureComp(ent); - activeProv.Timer = experiment.Comp1.RewardTime; - activeProv.RewardPoints = experiment.Comp1.RewardPoints; - activeProv.OldSiliconLawsetId = ent.Comp.LastLawset; - activeProv.TargetedEntities = targetList; + var message = Loc.GetString("experimental-law-provider-start", ("timeLeft", (int) experiment.Comp1.RewardTime)); + _radio.SendRadioMessage(ent, message, AnnouncementChannel, ent, escapeMarkup: false); - var message = Loc.GetString("experimental-law-provider-start", ("timeLeft", (int) experiment.Comp1.RewardTime)); - _radio.SendRadioMessage(ent, message, AnnouncementChannel, ent, escapeMarkup: false); - - // Arcane-Edit-Start - var boardUid = experiment.Owner; - Timer.Spawn(TimeSpan.FromSeconds(0.5), () => - { - if (!Deleted(boardUid)) - QueueDel(boardUid); - }); - } - // Arcane-Edit-End + QueueDel(experiment); // Don't need this experimental board anymore } private const string AnnouncementChannel = "Science"; @@ -486,6 +448,9 @@ public override void Update(float frameTime) if (provider.Timer >= 0) continue; + if (!TryComp(uid, out SiliconLawUpdaterComponent? updater)) + continue; + // Reward time!!! if (!TryComp(uid, out ResearchClientComponent? researchClient) || !researchClient.ConnectedToServer || @@ -493,19 +458,11 @@ public override void Update(float frameTime) continue; // Replace laws back - // Arcane-Edit-Start var lawset = GetLawset(provider.OldSiliconLawsetId).Laws; + var query = EntityManager.CompRegistryQueryEnumerator(updater.Components); - foreach (var target in provider.TargetedEntities) - { - if (!Deleted(target)) - SetLaws(lawset, target, provider.LawRewardSound); - - var clonedLaws = lawset.Select(law => law.ShallowClone()).ToList(); - SetLaws(clonedLaws, target, provider.LawRewardSound); - RaiseLocalEvent(new AILawUpdatedEvent(target, provider.OldSiliconLawsetId)); - } - // Arcane-Edit-End + while (query.MoveNext(out var update)) + SetLaws(lawset, update, provider.LawRewardSound); RemCompDeferred(uid, provider); _research.ModifyServerPoints(researchClient.Server.Value, provider.RewardPoints); From 57b48244e0da51d81a73c147cbb67c7db34e9826 Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 12:49:16 +0700 Subject: [PATCH 08/12] Update ExperimentalLawProviderComponent.cs --- .../Silicons/Components/ExperimentalLawProviderComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs index 31f4ce728e1..00085bbde3d 100644 --- a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs @@ -12,7 +12,7 @@ public sealed partial class ExperimentalLawProviderComponent : Component [DataField] public string RandomLawsets = "IonStormLawsets"; // buffed point amounts 3x so people will actually use this; 30k in two minutes seems ok to me (triples points per second from ~80 to ~240)- strong but takes a lot of setup by RD (and stealing the AI upload console) - [DataField] public float RewardTime = 120.0f; + [DataField] public float RewardTime = 300.0f; // Arcane-Edit // Arcane-Edit-Start //[DataField] public int RewardPoints = 30000; From d308bea8276d8d10a2a59390c5e78ce08c82532c Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 13:02:30 +0700 Subject: [PATCH 09/12] Update SiliconLawSystem.cs --- Content.Server/Silicons/Laws/SiliconLawSystem.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 1f5d67bbb95..11663235750 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -448,15 +448,15 @@ public override void Update(float frameTime) if (provider.Timer >= 0) continue; - if (!TryComp(uid, out SiliconLawUpdaterComponent? updater)) - continue; - // Reward time!!! if (!TryComp(uid, out ResearchClientComponent? researchClient) || !researchClient.ConnectedToServer || researchClient.Server == null) continue; + if (!TryComp(uid, out SiliconLawUpdaterComponent? updater)) + continue; + // Replace laws back var lawset = GetLawset(provider.OldSiliconLawsetId).Laws; var query = EntityManager.CompRegistryQueryEnumerator(updater.Components); From 87f446e28dfea23e290a85f054aea9800184b7fe Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 13:14:40 +0700 Subject: [PATCH 10/12] =?UTF-8?q?=D1=82=D0=B0=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Content.Server/Silicons/Laws/SiliconLawSystem.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 11663235750..a7ce5c796a9 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -424,8 +424,10 @@ private void ApplyExperimentalLaws(Entity ent, Entit var activeProv = EnsureComp(ent); activeProv.Timer = experiment.Comp1.RewardTime; - - activeProv.RewardPoints = _robustRandom.Next(10, 15001); + /*Arcane-Edit-Start + activeProv.RewardPoints = experiment.Comp1.RewardPoints;*/ + activeProv.RewardPoints = _robustRandom.Next(experiment.Comp1.MinRewardPoints, experiment.Comp1.MaxRewardPoints); + //Arcane-Edit-End activeProv.OldSiliconLawsetId = ent.Comp.LastLawset; From 3571dbb63a8c5fd10f8e8013f89b40f4b709829f Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 13:22:49 +0700 Subject: [PATCH 11/12] ZZZ --- .../Silicons/Components/ExperimentalLawProviderComponent.cs | 4 ++-- .../Entities/Objects/Specific/experimental_boards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs index 00085bbde3d..82703202eff 100644 --- a/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs +++ b/Content.Goobstation.Common/Silicons/Components/ExperimentalLawProviderComponent.cs @@ -16,7 +16,7 @@ public sealed partial class ExperimentalLawProviderComponent : Component // Arcane-Edit-Start //[DataField] public int RewardPoints = 30000; - [DataField] public int MinRewardPoints = 1000; - [DataField] public int MaxRewardPoints = 15000; + [DataField] public int MinRewardPoints = 10; + [DataField] public int MaxRewardPoints = 15001; // Arcane-Edit-End } diff --git a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/experimental_boards.yml b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/experimental_boards.yml index 86ae6d37329..61bc9c3a23e 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/experimental_boards.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Objects/Specific/experimental_boards.yml @@ -27,4 +27,4 @@ laws: Crewsimov # Placeholder because lazy. - type: ExperimentalLawProvider rewardTime: 10.0 - rewardPoints: 100000 + # rewardPoints: 100000 Arcane-Edit From 6f429bccc77b63245a67e9b53795d0f6f36853e5 Mon Sep 17 00:00:00 2001 From: liegend <2008.morozov.ri@gmail.com> Date: Wed, 29 Jul 2026 20:18:18 +0700 Subject: [PATCH 12/12] Update SiliconLawSystem.cs --- Content.Server/Silicons/Laws/SiliconLawSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index a7ce5c796a9..0c3726d3165 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -426,7 +426,7 @@ private void ApplyExperimentalLaws(Entity ent, Entit activeProv.Timer = experiment.Comp1.RewardTime; /*Arcane-Edit-Start activeProv.RewardPoints = experiment.Comp1.RewardPoints;*/ - activeProv.RewardPoints = _robustRandom.Next(experiment.Comp1.MinRewardPoints, experiment.Comp1.MaxRewardPoints); + activeProv.RewardPoints = _robustRandom.Next(experiment.Comp1.MinRewardPoints, experiment.Comp1.MaxRewardPoints + 1); //Arcane-Edit-End activeProv.OldSiliconLawsetId = ent.Comp.LastLawset;