Revert "Заговорщики (#474)"

This reverts commit 51e8e5c3b0.
This commit is contained in:
Litogin
2026-02-05 22:00:33 +03:00
committed by GitHub
parent ceff9e969f
commit a121af80c2
38 changed files with 2 additions and 548 deletions

View File

@@ -1,34 +0,0 @@
using Content.Shared._WL.Conspirators.Components;
using Content.Shared._WL.Conspirators.EntitySystems;
using Content.Shared.Antag;
using Content.Shared.StatusIcon.Components;
using Robust.Client.Player;
using Robust.Shared.Prototypes;
namespace Content.Client._WL.Conspirators.EntitySystems;
public sealed class ConspiratorSystem : SharedConspiratorSystem
{
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ConspiratorComponent, GetStatusIconsEvent>(OnConspiratorGetIcons);
}
private void OnConspiratorGetIcons(Entity<ConspiratorComponent> entity, ref GetStatusIconsEvent args)
{
if (_playerManager.LocalSession?.AttachedEntity is { } playerEntity)
{
if (!HasComp<ShowAntagIconsComponent>(playerEntity) &&
!HasComp<ConspiratorComponent>(playerEntity))
return;
}
if (_prototypeManager.TryIndex(entity.Comp.ConspiratorIcon, out var iconPrototype))
args.StatusIcons.Add(iconPrototype);
}
}

View File

@@ -13,7 +13,6 @@ using Robust.Shared.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Content.Shared.Roles.Components;
using Content.Server._WL.GameTicking.Rules.Components; // WL-Changes: Conspirators
namespace Content.Server.Administration.Systems;
@@ -33,7 +32,6 @@ public sealed partial class AdminVerbSystem
private static readonly EntProtoId ParadoxCloneRuleId = "ParadoxCloneSpawn";
private static readonly EntProtoId DefaultWizardRule = "Wizard";
private static readonly EntProtoId DefaultNinjaRule = "NinjaSpawn";
private static readonly EntProtoId DefaultConspiratorRule = "Conspirators"; // WL-Changes: Conspirators
private static readonly ProtoId<StartingGearPrototype> PirateGearId = "PirateGear";
// All antag verbs have names so invokeverb works.
@@ -227,23 +225,6 @@ public sealed partial class AdminVerbSystem
};
args.Verbs.Add(ninja);
//WL-Changes: Conspiratrs start
var conspiratorName = Loc.GetString("admin-verb-text-make-conspirator");
Verb conspirator = new()
{
Text = conspiratorName,
Category = VerbCategory.Antag,
Icon = new SpriteSpecifier.Rsi(new("/Textures/_WL/Interface/Misc/job_icons.rsi"), "Conspirator"),
Act = () =>
{
_antag.ForceMakeAntag<ConspiratorRuleComponent>(targetPlayer, DefaultConspiratorRule);
},
Impact = LogImpact.High,
Message = string.Join(": ", conspiratorName, Loc.GetString("admin-verb-make-conspirator")),
};
args.Verbs.Add(conspirator);
//WL-Changes: Conspiratrs end
if (HasComp<HumanoidAppearanceComponent>(args.Target)) // only humanoids can be cloned
args.Verbs.Add(paradox);
}

View File

@@ -1,17 +0,0 @@
using Content.Shared.Random;
using Robust.Shared.Prototypes;
namespace Content.Server._WL.GameTicking.Rules.Components;
/// <summary>
/// Game rule for conspirators. Handles their shared objective.
/// </summary>
[RegisterComponent, Access(typeof(ConspiratorRuleSystem))]
public sealed partial class ConspiratorRuleComponent : Component
{
[DataField]
public EntProtoId? Objective = null;
[DataField]
public ProtoId<WeightedRandomPrototype> ObjectiveGroup = "ConspiratorObjectiveGroup";
}

View File

@@ -1,99 +0,0 @@
using Content.Server._WL.GameTicking.Rules.Components;
using Content.Server.Antag;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.Roles;
using Content.Shared._WL.Conspirators.Components;
using Content.Shared._WL.Roles.Components;
using Content.Shared.GameTicking.Components;
using Content.Shared.Mind;
using Content.Shared.Random.Helpers;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Utility;
using System.Diagnostics.CodeAnalysis;
namespace Content.Server._WL.GameTicking.Rules;
public sealed class ConspiratorRuleSystem : GameRuleSystem<ConspiratorRuleComponent>
{
[Dependency] private readonly AntagSelectionSystem _antag = default!;
[Dependency] private readonly SharedMindSystem _mind = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IRobustRandom _random = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ConspiratorRoleComponent, GetBriefingEvent>(OnGetBriefing);
SubscribeLocalEvent<ConspiratorRuleComponent, AfterAntagEntitySelectedEvent>(OnAntagSelected);
}
protected override void AppendRoundEndText(EntityUid uid,
ConspiratorRuleComponent component,
GameRuleComponent gameRule,
ref RoundEndTextAppendEvent args)
{
base.AppendRoundEndText(uid, component, gameRule, ref args);
var sessionData = _antag.GetAntagIdentifiers(uid);
args.AddLine(Loc.GetString("conspirator-count", ("count", sessionData.Count)));
foreach (var (_, data, name) in sessionData)
{
args.AddLine(Loc.GetString("conspirator-name-user",
("name", name),
("username", data.UserName)));
}
if (!_proto.TryIndex(component.Objective, out var objectiveProto))
return;
args.AddLine(Loc.GetString("conspirator-objective", ("objective", objectiveProto.Name)));
}
private void OnGetBriefing(Entity<ConspiratorRoleComponent> ent, ref GetBriefingEvent args)
{
args.Append(Loc.GetString("conspirator-identities"));
var conspirators = AllEntityQuery<ConspiratorComponent>();
while (conspirators.MoveNext(out var id, out _))
{
args.Append(Loc.GetString("conspirator-name", ("name", Name(id))));
}
args.Append(Loc.GetString("conspirator-radio-implant"));
}
private void OnAntagSelected(Entity<ConspiratorRuleComponent> ent, ref AfterAntagEntitySelectedEvent args)
{
if (!_mind.TryGetMind(args.Session, out var mindId, out var mind))
return;
if (ent.Comp.Objective is null)
{
if (GetRandomObjectivePrototype(ent.Comp, out var objectiveProtoId))
ent.Comp.Objective = objectiveProtoId;
}
if (ent.Comp.Objective is not null)
_mind.TryAddObjective(mindId, mind, ent.Comp.Objective);
}
private bool GetRandomObjectivePrototype(ConspiratorRuleComponent comp, [NotNullWhen(true)] out EntProtoId? objectiveProto)
{
objectiveProto = null;
if (!_proto.TryIndex(comp.ObjectiveGroup, out var group))
return false;
var objectives = group.Weights.ShallowClone();
while (_random.TryPickAndTake(objectives, out var proto))
{
objectiveProto = proto!;
return true;
}
return false;
}
}

View File

@@ -1,9 +0,0 @@
using Content.Server._WL.Objectives.Systems;
namespace Content.Server._WL.Objectives.Components;
/// <summary>
/// This objective will always show as 0% complete as it is not intended to be tracked. Used for Conspirator objectives.
/// </summary>
[RegisterComponent, Access(typeof(NoCompletionObjectiveSystem))]
public sealed partial class NoCompletionObjectiveComponent : Component;

View File

@@ -1,19 +0,0 @@
using Content.Server._WL.Objectives.Components;
using Content.Shared.Objectives.Components;
namespace Content.Server._WL.Objectives.Systems;
public sealed class NoCompletionObjectiveSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<NoCompletionObjectiveComponent, ObjectiveGetProgressEvent>(OnGetProgress);
}
private void OnGetProgress(Entity<NoCompletionObjectiveComponent> entity, ref ObjectiveGetProgressEvent args)
{
args.Progress = 0f;
}
}

View File

@@ -1,14 +0,0 @@
using Content.Shared.StatusIcon;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared._WL.Conspirators.Components;
[RegisterComponent, NetworkedComponent]
public sealed partial class ConspiratorComponent : Component
{
[DataField]
public ProtoId<FactionIconPrototype> ConspiratorIcon = "ConspiratorFaction";
public override bool SessionSpecific => true;
}

View File

@@ -1,31 +0,0 @@
using Content.Shared._WL.Conspirators.Components;
using Content.Shared.Antag;
using Robust.Shared.GameStates;
using Robust.Shared.Player;
namespace Content.Shared._WL.Conspirators.EntitySystems;
public abstract class SharedConspiratorSystem : EntitySystem // looking at blood bound to see how the icons work
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ConspiratorComponent, ComponentGetStateAttemptEvent>(OnConspiratorAttemptGetState);
}
private void OnConspiratorAttemptGetState(
Entity<ConspiratorComponent> entity,
ref ComponentGetStateAttemptEvent args)
{
args.Cancelled = !CanGetState(args.Player);
}
private bool CanGetState(ICommonSession? player)
{
if (player?.AttachedEntity is not { } uid)
return true;
return HasComp<ConspiratorComponent>(uid) || HasComp<ShowAntagIconsComponent>(uid);
}
}

View File

@@ -1,10 +0,0 @@
using Content.Shared.Roles.Components;
using Robust.Shared.GameStates;
namespace Content.Shared._WL.Roles.Components;
/// <summary>
/// Added to mind role entities to tag that they are a conspirator.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class ConspiratorRoleComponent : BaseMindRoleComponent;

View File

@@ -1,4 +0,0 @@
- files: ["conspirator_greeting.ogg"]
license: "CC-BY-SA-3.0"
copyright: "Taken from TG station as heretic_gain.ogg"
source: "https://github.com/tgstation/tgstation/commit/436ba869ebcd0b60b63973fb7562f447ee655205"

View File

@@ -1,2 +0,0 @@
admin-verb-make-conspirator = Сделать цель Заговорщиком.
admin-verb-text-make-conspirator = Сделать Заговорщиком

View File

@@ -1,5 +0,0 @@
ent-RadioImplanterConspiracy = заговорческий радио-имплантер
.desc = { ent-BaseImplantOnlyImplanter.desc }
ent-RadioImplantConspiracy = заговорческий радио-имплант
.desc = Даёт доступ к радио-каналу заговорщиков.

View File

@@ -1,13 +0,0 @@
conspirator-objective-issuer = [color=#724F29]Заговорщики[/color]
conspirator-role-greeting =
Вы заговорщик.
Вы начинаешь, зная всех других заговорщиков и с имплантом радио-связи для коммуникации с ними.
Сотрудничайте и не останавливайтесь ни перед чем для воплощения заговора в реальность.
conspirator-count = Всего было {$count} заговорщиков:
conspirator-name-user = [color=white]{CAPITALIZE($name)}[/color] ([color=gray]{$username}[/color]) был заговорщиком.
conspirator-objective = Целью заговорщиков было: [color=white]{$objective}[/color].
conspirator-identities = Заговорщики это:
conspirator-name = {$name} заговорщик.
conspirator-radio-implant = Используйте свой радио-имплант для общения с другими заговорщиками (:з).
conspiracy-title = Заговор
conspiracy-description = ЗАГОВОРЩИК ПОДТВЕРЖДЁН

View File

@@ -1 +0,0 @@
guide-entry-conspirators = Заговорщики

View File

@@ -1,2 +1 @@
chat-radio-hitin = Хитин
chat-radio-conspiracy = Заговорщики

View File

@@ -1 +0,0 @@
role-subtype-conspirator = Заговорщик

View File

@@ -1,23 +0,0 @@
ent-ConspiratorUnionObjective = Захват одного из отделов станции
.desc = Захватите один из отделов станции и объявите независимость от НТ!
ent-ConspiratorGameshowObjective = Устройте шоу насмерть
.desc = Заставьте экипаж стать частью смертельного ТВ-шоу!
ent-ConspiratorTechnologyObjective = Захватите все технологии станции
.desc = Покажите экипажу прелести простой жизни. Потому что только вы достойны технологического прогресса!
ent-ConspiratorArmsObjective = Разоружите СБ и вооружитесь сами
.desc = Отберите у СБ всё оружие и вооружитесь сами. Этим корпоратским крысам ничего нельзя доверить...
ent-ConspiratorThiefObjective = Совершите величайшее ограбление всех времён!
.desc = Впишите свои имена в историю преступного мира, ограбив вашу станцию.
ent-ConspiratorMafiaObjective = Станьте криминальной семьёй
.desc = Заберитесь на вершину преступного мира станции и зацементируйте ваше превосходство над ним!
ent-ConspiratorArrestObjective = Заставьте СБ арестовывать невиновных
.desc = Продемонстрируйте корпоративную некомпетентность, показав как легко их обмануть.
ent-ConspiratorCameraObjective = Ослепите НТ на станции
.desc = Верните обычным рабочим и пассажирам право на частную жизнь.

View File

@@ -1,2 +0,0 @@
roles-antag-conspirator-name = Заговорщик
roles-antag-conspirator-objective = Сотрудничайте и не останавливайтесь ни перед чем для воплощения заговора в реальность.

View File

@@ -1 +0,0 @@
ent-MindRoleConspirator = Роль Заговорщика

View File

@@ -11,7 +11,6 @@
- Wizard
- Zombies
- Xenoborgs
- Conspirators # WL-Changes: Conspirators
- MinorAntagonists
- type: guideEntry

View File

@@ -1,7 +0,0 @@
- type: entity
parent: BaseImplantOnlyImplanter # it's weird because this neither an NT or syndicate implanter. it's completely unobtainable though and exists more for playtesting convenience than anything
id: RadioImplanterConspiracy
name: conspiracy radio implanter
components:
- type: Implanter
implant: RadioImplantConspiracy

View File

@@ -1,11 +0,0 @@
- type: entity
parent: BaseSubdermalImplant
id: RadioImplantConspiracy
categories: [ HideSpawnMenu ]
name: conspiracy radio implant
description: This implant grants access to the Conspiracy channel without a headset.
components:
- type: SubdermalImplant
- type: RadioImplant
radioChannels:
- Conspiracy

View File

@@ -1,25 +0,0 @@
- type: entity
parent: BaseGameRule
id: Conspirators
components:
- type: GameRule
minPlayers: 28 # minimum of 4 conspirators
- type: ConspiratorRule
- type: AntagSelection
selectionTime: IntraPlayerSpawn
definitions:
- prefRoles: [ Conspirator ]
min: 4
max: 7
playerRatio: 7
briefing:
text: conspirator-role-greeting
color: "#724F29"
sound: /Audio/_WL/Misc/illuminati.ogg
components:
- type: Conspirator
- type: AutoImplant
implants:
- RadioImplantConspiracy
mindRoles:
- MindRoleConspirator

View File

@@ -1,4 +0,0 @@
- type: guideEntry
id: Conspirators
name: guide-entry-conspirators
text: "/ServerInfo/Guidebook/_WL/Antagonist/Conspirators.xml"

View File

@@ -1,100 +0,0 @@
- type: entity
abstract: true
parent: BaseObjective
id: BaseConspiratorObjective
components:
- type: Objective
issuer: conspirator-objective-issuer
difficulty: 0 # uses own system for assignment
- type: RoleRequirement
roles:
- ConspiratorRole
- type: NoCompletionObjective
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorUnionObjective
name: Forcefully seize control of a department
description: Assume direct control over a department and declare independence from Nanotrasen.
components:
- type: Objective
icon:
sprite: Objects/Weapons/Melee/stunprod.rsi
state: stunprod_off
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorGameshowObjective
name: Run a life-or-death game show
description: Force the crew to take part in a game show with incredible stakes.
components:
- type: Objective
icon:
sprite: Structures/Machines/computers.rsi
state: television
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorTechnologyObjective
name: Seize all station technology
description: Show the crew the merits of a simpler life. Because only you deserve the wonders of technology.
components:
- type: Objective
icon:
sprite: Structures/Machines/autolathe.rsi
state: icon
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorArmsObjective
name: Disarm Security and arm yourselves instead
description: Take the guns from Security and give them to yourselves. They cannot be trusted with them.
components:
- type: Objective
icon:
sprite: Objects/Weapons/Guns/Pistols/mk58.rsi
state: icon
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorThiefObjective
name: Pull off the greatest heist of all time
description: Get your names written in the history books for what you take from this station.
components:
- type: Objective
icon:
sprite: Objects/Tools/thief_beacon.rsi
state: extraction_point
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorMafiaObjective
name: Form a crime family
description: Become the leaders of crime on this station and cement your reputation as a group not to be messed with.
components:
- type: Objective
icon:
sprite: Clothing/Hands/Gloves/KnuckleDusters/brassknuckleduster.rsi
state: brassknuckleduster
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorArrestObjective
name: Trick Security into arresting innocent people
description: Demonstrate their incompetence by showing just how easy they are to fool.
components:
- type: Objective
icon:
sprite: Objects/Weapons/Melee/stunbaton.rsi
state: stunbaton_off
- type: entity
parent: BaseConspiratorObjective
id: ConspiratorCameraObjective
name: Dismantle the surveillance state
description: Bring back the right to privacy for Nanotrasen employees.
components:
- type: Objective
icon:
sprite: Mobs/Silicon/station_ai.rsi
state: ai_camera

View File

@@ -1,11 +0,0 @@
- type: weightedRandom
id: ConspiratorObjectiveGroup # if you want to add another objective, feel free
weights:
ConspiratorUnionObjective: 1
ConspiratorGameshowObjective: 1
ConspiratorTechnologyObjective: 1
ConspiratorArmsObjective: 1
ConspiratorThiefObjective: 1
ConspiratorMafiaObjective: 1
ConspiratorArrestObjective: 1
ConspiratorCameraObjective: 1

View File

@@ -1,7 +0,0 @@
- type: antag
id: Conspirator
name: roles-antag-conspirator-name
antagonist: true
setPreference: true
objective: roles-antag-conspirator-objective
guides: [ Conspirators ]

View File

@@ -1,11 +0,0 @@
- type: entity
parent: BaseMindRoleAntag
id: MindRoleConspirator
name: Conspirator Role
components:
- type: ConspiratorRole
- type: MindRole
antagPrototype: Conspirator
exclusiveAntag: true
roleType: TeamAntagonist
subtype: role-subtype-conspirator

View File

@@ -1,11 +0,0 @@
- type: factionIcon
id: ConspiratorFaction
isShaded: true
priority: 11
showTo:
components:
- ShowAntagIcons
- Conspirator
icon:
sprite: /Textures/_WL/Interface/Misc/job_icons.rsi
state: Conspirator

View File

@@ -1,10 +0,0 @@
- type: npcFaction
id: Conspirator
hostile:
- NanoTrasen
- Zombie
- SimpleHostile
- Dragon
- AllHostile
- Wizard
- Xenoborg

View File

@@ -1,14 +0,0 @@
- type: gamePreset
id: Conspiracy
alias:
- conspirators
- conspirator
name: conspiracy-title
description: conspiracy-description
showInVote: false # secret
rules:
- Conspirators
- BasicStationEventScheduler
- MeteorSwarmScheduler
- SpaceTrafficControlEventScheduler
- BasicRoundstartVariation

View File

@@ -5,11 +5,3 @@
frequency: 4944
color: "#cc7722"
longRange: true
- type: radioChannel
id: Conspiracy
name: chat-radio-conspiracy
keycode: 'з'
frequency: 1174
color: "#724F29"
longRange: true

View File

@@ -3,8 +3,7 @@
weights:
Extended: 0.29
Nukeops: 0.15
Traitor: 0.3
Conspirators: 0.1 # WL-Changes: Conspirators
Traitor: 0.4
#Zombie: 0.04
#Zombieteors: 0.01
Survival: 0.1

View File

@@ -1,16 +0,0 @@
<Document>
# Заговорщики
<Box>
[color=#999999][italic]"Мы — холодный ветер в зимний день. Мы — тень в безлунной ночи. Мы — яд в твоём чае и шёпот у твоего уха. Мы везде."[/italic][/color]
</Box>
Заговорщики — это группа из членов экипажа, которые кооперируются для воплощения заговора в жизнь. Заговорщики неотличимы от обычных работников станции, но они знают друг друга и имеют [color=cyan]заговорческий радио-имплант[/color], позволяющий им общаться друг с другом.
## Игра за заговорщика
Заговор — это просто!
- Проверьте ваше меню персонажа, узнайте личности других заговорщиков и вашу общую [bold]цель[/bold]. Эта цель является лишь предложением. Если все заговорщики пожелают сделать что-то другое, вы можете заняться уже этим.
- Используйте имплант радиосвязи [color=yellow][bold](:з)[/color][/bold] для общения с другими заговорщиками.
- Работайте с друг другом, воплощая свои замыслы в жизнь за счёт экипажа.
- Постарайтесь выбрать себе главу, ведь любой заговор нуждается в оргнизаторе.
</Document>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "By ReArtInt. Conspirator made by SuperGDPWYL (GitHub).",
"copyright": "By ReArtInt",
"size": {
"x": 8,
"y": 8
@@ -9,10 +9,6 @@
"states": [
{
"name": "Adjutant"
},
{
"name": "Conspirator"
}
]
}