Merge 34a6abe39b into fd5b16abb3
This commit is contained in:
commit
ac2107cb09
|
|
@ -18,19 +18,36 @@ public sealed class ConspiratorSystem : SharedConspiratorSystem
|
|||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<ConspiratorComponent, GetStatusIconsEvent>(OnConspiratorGetIcons);
|
||||
SubscribeLocalEvent<ConspiratorLeaderComponent, GetStatusIconsEvent>(OnConspiratorLeaderGetIcons);
|
||||
}
|
||||
|
||||
private void OnConspiratorGetIcons(Entity<ConspiratorComponent> entity, ref GetStatusIconsEvent args)
|
||||
{
|
||||
if (_playerManager.LocalSession?.AttachedEntity is { } playerEntity)
|
||||
{
|
||||
if (!HasComp<ShowAntagIconsComponent>(playerEntity) &&
|
||||
if ((!HasComp<ShowAntagIconsComponent>(playerEntity) &&
|
||||
!HasComp<ConspiratorComponent>(playerEntity) &&
|
||||
!HasComp<GhostComponent>(playerEntity)) // DeltaV - add GhostComponent
|
||||
!HasComp<GhostComponent>(playerEntity) )) // DeltaV - add GhostComponent and conspirators v2
|
||||
return;
|
||||
}
|
||||
|
||||
if (_prototypeManager.TryIndex(entity.Comp.ConspiratorIcon, out var iconPrototype))
|
||||
args.StatusIcons.Add(iconPrototype);
|
||||
}
|
||||
|
||||
//DV conspirators v2 addtions start
|
||||
private void OnConspiratorLeaderGetIcons(Entity<ConspiratorLeaderComponent> entity, ref GetStatusIconsEvent args)
|
||||
{
|
||||
if (_playerManager.LocalSession?.AttachedEntity is { } playerEntity)
|
||||
{
|
||||
if (!HasComp<ShowAntagIconsComponent>(playerEntity) &&
|
||||
!HasComp<ConspiratorComponent>(playerEntity) &&
|
||||
!HasComp<GhostComponent>(playerEntity))
|
||||
return;
|
||||
}
|
||||
|
||||
if (_prototypeManager.TryIndex(entity.Comp.ConspiratorIcon, out var iconPrototype))
|
||||
args.StatusIcons.Add(iconPrototype);
|
||||
}
|
||||
//DV conspirators v2 addtions end
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ using Content.Server.Chat.Managers;
|
|||
using Content.Server.GameTicking;
|
||||
using Content.Server.Maps;
|
||||
using Content.Shared._DV.CosmicCult.Components; // DeltaV - Cosmic Cult
|
||||
using Content.Shared._Harmony.Conspirators.Components; //deltaV conspirators v2
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Database;
|
||||
|
|
@ -461,6 +462,13 @@ namespace Content.Server.Voting.Managers
|
|||
return false;
|
||||
}
|
||||
// End DeltaV - Cosmic Cult
|
||||
//begin deltaV conspirators v2
|
||||
if (eligibility == VoterEligibility.Conspirators)
|
||||
{
|
||||
if (!_entityManager.HasComponent<ConspiratorComponent>(player.AttachedEntity))
|
||||
return false;
|
||||
}
|
||||
//end deltaV conspirators v2
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -561,6 +569,7 @@ namespace Content.Server.Voting.Managers
|
|||
GhostMinimumPlaytime, // Player needs to be a ghost, with a minimum playtime and deathtime as defined by votekick CCvars.
|
||||
MinimumPlaytime, //Player needs to have a minimum playtime and deathtime as defined by votekick CCvars.
|
||||
CosmicCult, // DeltaV - Player needs to be a cosmic cultist. Used by the cosmic cult gamemode.
|
||||
Conspirators // DeltaV - Player needs to be a Conspirators. Used by the Conspirators subgamemode.
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using Content.Shared.Random;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
||||
|
||||
namespace Content.Server._Harmony.GameTicking.Rules.Components;
|
||||
|
||||
|
|
@ -7,11 +8,15 @@ namespace Content.Server._Harmony.GameTicking.Rules.Components;
|
|||
/// Game rule for conspirators. Handles their shared objective.
|
||||
/// </summary>
|
||||
[RegisterComponent, Access(typeof(ConspiratorRuleSystem))]
|
||||
[AutoGenerateComponentPause]
|
||||
public sealed partial class ConspiratorRuleComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public EntProtoId? Objective = null;
|
||||
|
||||
[DataField]
|
||||
public ProtoId<WeightedRandomPrototype> ObjectiveGroup = "ConspiratorObjectiveGroup";
|
||||
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
|
||||
public TimeSpan? ConspiratorLeaderVoteTimer;
|
||||
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField]
|
||||
public TimeSpan? ConspiratorObjectiveVoteTimer;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,24 +3,48 @@ using Content.Server.Antag;
|
|||
using Content.Server.GameTicking;
|
||||
using Content.Server.GameTicking.Rules;
|
||||
using Content.Server.Roles;
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Voting.Managers;
|
||||
using Content.Server.Voting;
|
||||
using Content.Server.Objectives;
|
||||
using Content.Server.Polymorph.Components;
|
||||
using Content.Shared._Harmony.Conspirators.Components;
|
||||
using Content.Shared._Harmony.Roles.Components;
|
||||
using Content.Shared.GameTicking.Components;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.IdentityManagement;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Content.Shared._DV.CCVars;
|
||||
using Content.Shared.Database;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Utility;
|
||||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Enums;
|
||||
using Robust.Shared.Configuration;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
|
||||
namespace Content.Server._Harmony.GameTicking.Rules;
|
||||
|
||||
public sealed class ConspiratorRuleSystem : GameRuleSystem<ConspiratorRuleComponent>
|
||||
{
|
||||
// [Dependency] private readonly AntagSelectionSystem _antag = default!; // Delta V - Never used
|
||||
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
|
||||
[Dependency] private readonly IConfigurationManager _config = default!;
|
||||
[Dependency] private readonly SharedMindSystem _mind = default!;
|
||||
[Dependency] private readonly IPrototypeManager _proto = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly IVoteManager _votes = default!;
|
||||
|
||||
|
||||
private TimeSpan _objectiveVoteTimer = default!;
|
||||
private TimeSpan _objectiveVoteDelay = default!;
|
||||
private TimeSpan _leaderVoteTimer = default!;
|
||||
private TimeSpan _leaderVoteDelay = default!;
|
||||
|
||||
private readonly SoundSpecifier _conspiratorBriefing = new SoundPathSpecifier("/Audio/_Harmony/Misc/conspirator_greeting.ogg");
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
@ -28,14 +52,31 @@ public sealed class ConspiratorRuleSystem : GameRuleSystem<ConspiratorRuleCompon
|
|||
|
||||
SubscribeLocalEvent<ConspiratorRoleComponent, GetBriefingEvent>(OnGetBriefing);
|
||||
SubscribeLocalEvent<ConspiratorRuleComponent, AfterAntagEntitySelectedEvent>(OnAntagSelected);
|
||||
}
|
||||
|
||||
// deltav additions, conspirators v2
|
||||
Subs.CVar(_config,
|
||||
DCCVars.ConspiratorObjectiveVoteTimer,
|
||||
value => _objectiveVoteTimer = TimeSpan.FromSeconds(value),
|
||||
true);
|
||||
Subs.CVar(_config,
|
||||
DCCVars.ConspiratorObjectiveVoteDelayTimer,
|
||||
value => _objectiveVoteDelay = TimeSpan.FromSeconds(value),
|
||||
true);
|
||||
Subs.CVar(_config,
|
||||
DCCVars.ConspiratorLeaderVoteTimer,
|
||||
value => _leaderVoteTimer = TimeSpan.FromSeconds(value),
|
||||
true);
|
||||
Subs.CVar(_config,
|
||||
DCCVars.ConspiratorLeaderVoteDelayTimer,
|
||||
value => _leaderVoteDelay = TimeSpan.FromSeconds(value),
|
||||
true);
|
||||
// deltav additions, conspirators v2
|
||||
}
|
||||
|
||||
|
||||
/* DeltaV - removed custom round end text in favor of individually displayed objective summaries
|
||||
|
||||
protected override void AppendRoundEndText(EntityUid uid,
|
||||
ConspiratorRuleComponent component,
|
||||
GameRuleComponent gameRule,
|
||||
ref RoundEndTextAppendEvent args)
|
||||
protected override void AppendRoundEndText(EntityUid uid, ConspiratorRuleComponent component,GameRuleComponent gameRule,ref RoundEndTextAppendEvent args)
|
||||
{
|
||||
base.AppendRoundEndText(uid, component, gameRule, ref args);
|
||||
|
||||
|
|
@ -68,21 +109,26 @@ public sealed class ConspiratorRuleSystem : GameRuleSystem<ConspiratorRuleCompon
|
|||
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 (ent.Comp.Objective is null){
|
||||
if (GetRandomObjectivePrototype(ent.Comp, out var objectiveProtoId))
|
||||
ent.Comp.Objective = objectiveProtoId;
|
||||
ent.Comp.Objective = objectiveProtoId;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
if (ent.Comp.Objective is not null)
|
||||
_mind.TryAddObjective(mindId, mind, ent.Comp.Objective);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* deltaV conspirators v2, now uneeded so.
|
||||
private bool GetRandomObjectivePrototype(ConspiratorRuleComponent comp, [NotNullWhen(true)] out EntProtoId? objectiveProto)
|
||||
{
|
||||
objectiveProto = null;
|
||||
|
|
@ -98,5 +144,178 @@ public sealed class ConspiratorRuleSystem : GameRuleSystem<ConspiratorRuleCompon
|
|||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
//delta V addition - conspirators vote system. i am too scared to make generic systems so woe, copy paste code be upon ye
|
||||
protected override void Started(EntityUid uid, ConspiratorRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
|
||||
{
|
||||
component.ConspiratorLeaderVoteTimer = _timing.CurTime + _leaderVoteDelay;
|
||||
component.ConspiratorObjectiveVoteTimer = _timing.CurTime + _objectiveVoteDelay;
|
||||
}
|
||||
|
||||
protected override void ActiveTick(EntityUid uid, ConspiratorRuleComponent component, GameRuleComponent gameRule, float frameTime)
|
||||
{
|
||||
if (component.ConspiratorLeaderVoteTimer is { } _objectiveVoteTimer && _timing.CurTime >= _objectiveVoteTimer)
|
||||
{
|
||||
component.ConspiratorLeaderVoteTimer = null;
|
||||
ConspiratorObjectiveVote(component);
|
||||
} else if (component.ConspiratorObjectiveVoteTimer is { } _leaderVoteTimer && _timing.CurTime >= _leaderVoteTimer)
|
||||
{
|
||||
component.ConspiratorObjectiveVoteTimer = null;
|
||||
ConspiratorLeaderVote();
|
||||
}
|
||||
}
|
||||
|
||||
private void ConspiratorLeaderVote()
|
||||
{
|
||||
// If there's already an entity with ConspiratorLeader, don't hold a vote. This allows admins to add the conspirators rule a 2nd time
|
||||
// in the case that there is only one cultist and they've been chosen as the leader already.
|
||||
if (EntityQuery<ConspiratorLeaderComponent>().Any())
|
||||
{
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Medium,
|
||||
$"conspirator leader already exists. Cancelling leader vote.");
|
||||
return;
|
||||
}
|
||||
|
||||
var conspirators = new List<(string, EntityUid)>();
|
||||
var conspiratorsQuery = EntityQueryEnumerator<ConspiratorComponent, MetaDataComponent>();
|
||||
|
||||
while (conspiratorsQuery.MoveNext(out var conspirator, out _, out var metadata))
|
||||
{
|
||||
var playerInfo = metadata.EntityName;
|
||||
if (TryComp<PolymorphedEntityComponent>(conspirator, out var polyComp) && polyComp.Parent.HasValue) // If the cultist is polymorphed, we use the original entity instead and hope that they'll polymorph back eventually
|
||||
conspirators.Add((playerInfo, polyComp.Parent.Value));
|
||||
else
|
||||
conspirators.Add((playerInfo, conspirator));
|
||||
}
|
||||
|
||||
var options = new VoteOptions
|
||||
{
|
||||
Title = Loc.GetString("conspirator-vote-leader-title"),
|
||||
InitiatorText = Loc.GetString("conspirators-vote-leader-initiator"),
|
||||
Duration = _leaderVoteTimer,
|
||||
VoterEligibility = VoteManager.VoterEligibility.Conspirators
|
||||
};
|
||||
|
||||
// If there are no conspirators, don't hold a vote, or the server will crash.
|
||||
if (conspirators.Count == 0)
|
||||
{
|
||||
Log.Warning($"There are no conspirators present for the leader vote. Voting is cancelled to prevent the server crashing.");
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"There are no conspirators for the leader vote. Leader vote is cancelled to prevent the server crashing.");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var (name, ent) in conspirators)
|
||||
{
|
||||
options.Options.Add((Loc.GetString(name), ent));
|
||||
}
|
||||
|
||||
// If somehow there are conspirators but no options, still don't hold a vote.
|
||||
// Holding a vote with zero options crashes the server.
|
||||
if (options.Options.Count == 0)
|
||||
{
|
||||
Log.Warning($"There are {conspirators.Count} conspirators but no options for the leader vote. Voting is cancelled to prevent the server crashing.");
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"There are {conspirators.Count} conspirators but no options for the leader vote. Steward vote is cancelled to prevent the server crashing.");
|
||||
return;
|
||||
}
|
||||
|
||||
var vote = _votes.CreateVote(options);
|
||||
|
||||
vote.OnFinished += (_, args) =>
|
||||
{
|
||||
EntityUid picked;
|
||||
if (args.Winner == null)
|
||||
{
|
||||
picked = (EntityUid)_random.Pick(args.Winners);
|
||||
}
|
||||
else
|
||||
{
|
||||
picked = (EntityUid)args.Winner;
|
||||
}
|
||||
//changing the icon of the head conspirator
|
||||
EnsureComp<ConspiratorLeaderComponent>(picked);
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Medium, $"conspirators leadership vote finished: {Identity.Entity(picked, EntityManager)} is now leader.");
|
||||
};
|
||||
}
|
||||
|
||||
//summary -> voting system for the conspirators objective
|
||||
private void ConspiratorObjectiveVote(ConspiratorRuleComponent component)
|
||||
{
|
||||
//getting all conspirators and checking if they already have a objective
|
||||
var conspirators = new List<EntityUid>();
|
||||
var conspiratorsQuery = EntityQueryEnumerator<ConspiratorComponent>();
|
||||
|
||||
while (conspiratorsQuery.MoveNext(out var conspirator, out _))
|
||||
{
|
||||
if (TryComp<PolymorphedEntityComponent>(conspirator, out var polyComp) && polyComp.Parent.HasValue) // If the cultist is polymorphed, we use the original entity instead and hope that they'll polymorph back eventually
|
||||
conspirators.Add((polyComp.Parent.Value));
|
||||
else
|
||||
conspirators.Add((conspirator));
|
||||
}
|
||||
|
||||
// If there are no conspirators, don't hold a vote, or the server will crash.
|
||||
if (conspirators.Count == 0)
|
||||
{
|
||||
Log.Warning($"There are no conspirators present for the objective vote. Voting is cancelled");
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"There are no conspirators for the objective vote. objective vote is cancelled");
|
||||
return;
|
||||
}
|
||||
|
||||
var options = new VoteOptions
|
||||
{
|
||||
Title = Loc.GetString("conspirator-vote-objective-title"),
|
||||
InitiatorText = Loc.GetString("conspirators-vote-leader-initiator"),
|
||||
Duration = _objectiveVoteTimer,
|
||||
VoterEligibility = VoteManager.VoterEligibility.Conspirators
|
||||
};
|
||||
|
||||
//dumb array go! from here use it to add the options, will have to add the new objectives to this.
|
||||
int ObjectiveArrayNumber = 0;
|
||||
string[] ConspiratorObjectiveIds = ["ConspiratorBusinessObjective","ConspiratorUsurpObjective","ConspiratorHordeObjective","ConspiratorDistrustObjective","ConspiratorVigilanteObjective","ConspiratorFreedomObjective","ConspiratorNukeObjective","ConspiratorDangerObjective","ConspiratorFreeObjective"];
|
||||
string[] ConspiratorObjectiveNames = ["Set up a business outside Nanotrasen.","Become the true leaders of the station.","Build a horde of valuables.","Brew distrust and hatred.","Enforce the laws secuirty can not.","Free the station of access.","Steal the nuke disk","Arm yourselves","Make your own conspiracy."];
|
||||
|
||||
foreach (string objective in ConspiratorObjectiveNames)
|
||||
{
|
||||
options.Options.Add((Loc.GetString(objective),ConspiratorObjectiveIds[ObjectiveArrayNumber]));
|
||||
ObjectiveArrayNumber++;
|
||||
}
|
||||
|
||||
// If somehow there are cultists but no options, still don't hold a vote.
|
||||
// Holding a vote with zero options crashes the server.
|
||||
if (options.Options.Count == 0)
|
||||
{
|
||||
Log.Warning($"There are {conspirators.Count} conspirators but no options for the leader vote. Voting is cancelled to prevent the server crashing.");
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"There are {conspirators.Count} conspirators but no options for the leader vote. Steward vote is cancelled to prevent the server crashing.");
|
||||
return;
|
||||
}
|
||||
|
||||
var vote = _votes.CreateVote(options);
|
||||
|
||||
vote.OnFinished += (_, args) =>
|
||||
{
|
||||
string picked;
|
||||
if (args.Winner == null)
|
||||
{
|
||||
picked = (string)_random.Pick(args.Winners);
|
||||
}
|
||||
else
|
||||
{
|
||||
picked = (string)args.Winner;
|
||||
}
|
||||
|
||||
//add an objective for each member of the conspiracy, skip if it cant get them
|
||||
foreach (EntityUid ent in conspirators){
|
||||
_mind.TryGetMind(ent, out var mindId, out var mind);
|
||||
if (mind == null){
|
||||
continue;
|
||||
}
|
||||
_mind.TryAddObjective(mindId, mind, picked);
|
||||
}
|
||||
component.Objective = picked;
|
||||
_adminLogger.Add(LogType.Vote, LogImpact.Medium, $"conspirators objective vote finished: {picked} is the objective.");
|
||||
};
|
||||
}
|
||||
|
||||
// deltav additions, conspirators v2
|
||||
}
|
||||
|
|
|
|||
|
|
@ -343,4 +343,28 @@ public sealed partial class DCCVars
|
|||
/// </summary>
|
||||
public static readonly CVarDef<bool> RoundEndIsOOCVote =
|
||||
CVarDef.Create("deltav.round_end_is_ooc_vote", false, CVar.SERVER);
|
||||
|
||||
/// <summary>
|
||||
/// How long the timer for the Conspirator leader vote lasts.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<int> ConspiratorLeaderVoteTimer =
|
||||
CVarDef.Create("conspirator.leader_vote_timer", 60, CVar.SERVER);
|
||||
|
||||
/// <summary>
|
||||
/// How long we wait before starting the Conspirator leader vote.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<int> ConspiratorLeaderVoteDelayTimer =
|
||||
CVarDef.Create("conspirator.leader_vote_delay", 150, CVar.SERVER);
|
||||
|
||||
/// <summary>
|
||||
/// How long the timer for the Conspirator objective vote lasts.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<int> ConspiratorObjectiveVoteTimer =
|
||||
CVarDef.Create("conspirator.objective_vote_timer", 120, CVar.SERVER);
|
||||
|
||||
/// <summary>
|
||||
/// How long we wait before starting the Conspirator objective vote.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<int> ConspiratorObjectiveVoteDelayTimer =
|
||||
CVarDef.Create("conspirator.objective_vote_delay", 25, CVar.SERVER);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
using Content.Shared.StatusIcon;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Harmony.Conspirators.Components;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed partial class ConspiratorLeaderComponent : Component
|
||||
{
|
||||
[DataField]
|
||||
public ProtoId<FactionIconPrototype> ConspiratorIcon = "ConspiratorLeaderFaction";
|
||||
|
||||
public override bool SessionSpecific => true;
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
conspirator-generic-kit-name = Generic
|
||||
conspirator-generic-kit-description =
|
||||
A kit for the basics.
|
||||
Contains 90 sheets of glass, steel and plastic.
|
||||
Also grants a full toolbelt and insulated gloves.
|
||||
|
||||
conspirator-premium-kit-name = Premium
|
||||
conspirator-premium-kit-description =
|
||||
A kit for the finer stuff.
|
||||
Contains 30 ingots of silvar, gold, plasma, plasteel and uranium.
|
||||
Also grants 10,000 spesos.
|
||||
|
||||
conspirator-weapons-kit-name = weapons
|
||||
conspirator-weapons-kit-description =
|
||||
A kit for arming yourselves.
|
||||
Contains 30 wood, Cloth, and gunpowder.
|
||||
also gives a Utility Knife, and 3 Igniters.
|
||||
|
||||
conspirator-electronics-kit-name = Electronics
|
||||
conspirator-electronics-kit-description =
|
||||
A kit for making machines.
|
||||
Contains 30 of each wire type, and 10 modular machine parts.
|
||||
Also grants a Circuit Imprinter board.
|
||||
|
||||
conspirator-maintenance-kit-name = Maintenance
|
||||
conspirator-maintenance-kit-description =
|
||||
A kit for gamblers.
|
||||
contains an entire locker full of random items from the maintenance tunnels.
|
||||
|
||||
conspirator-package-window-title = Conspirator Package
|
||||
conspirator-package-window-description = What did you bring to the table?
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
conspirator-vote-leader-title = Who should lead the Conspiracy
|
||||
conspirators-vote-leader-initiator = The Conspiracy
|
||||
conspirators-vote-leader-briefing = The leader of the Conspiracy is
|
||||
|
||||
conspirator-vote-objective-title = what is the Conspiracys objective.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
conspirator-objective-issuer = [color=#724F29]Conspiracy[/color]
|
||||
conspirator-objective-issuer = [color=#746694]Criminal[/color]
|
||||
|
||||
conspirator-role-greeting =
|
||||
You are a conspirator.
|
||||
|
|
|
|||
|
|
@ -30,10 +30,12 @@
|
|||
#- id: Xenoborgs
|
||||
# prob: 0.05
|
||||
# End DeltaV additions - Disable Xenoborgs
|
||||
#begin DeltaV additions - add hitman
|
||||
#begin DeltaV additions - add hitman (now add conspirators)
|
||||
- id: Hitman
|
||||
prob: 0.2 #as requested
|
||||
# end deltaV additions - add hitman
|
||||
- id: Conspirators
|
||||
prob: 0.2
|
||||
# end deltaV additions - add hitman (now add conspirators)
|
||||
|
||||
- type: entity
|
||||
parent: BaseGameRule
|
||||
|
|
@ -49,10 +51,12 @@
|
|||
#- id: Xenoborgs
|
||||
# prob: 0.05
|
||||
# End DeltaV additions - Disable Xenoborgs
|
||||
#begin DeltaV additions - add hitman
|
||||
#begin DeltaV additions - add hitman (now add conspirators)
|
||||
- id: Hitman
|
||||
prob: 0.2 #as requested
|
||||
# end deltaV additions - add hitman
|
||||
- id: Conspirators
|
||||
prob: 0.2
|
||||
# end deltaV additions - add hitman (now add conspirators)
|
||||
|
||||
- type: entity
|
||||
parent: BaseGameRule
|
||||
|
|
@ -64,10 +68,12 @@
|
|||
prob: 0.5
|
||||
- id: SubWizard
|
||||
prob: 0.05
|
||||
#begin DeltaV additions - add hitman
|
||||
#begin DeltaV additions - add hitman (now add conspirators)
|
||||
- id: Hitman
|
||||
prob: 0.2 #as requested
|
||||
# end deltaV additions - add hitman
|
||||
- id: Conspirators
|
||||
prob: 0.2
|
||||
# end deltaV additions - add hitman (now add conspirators)
|
||||
|
||||
- type: entity
|
||||
parent: BaseGameRule
|
||||
|
|
@ -77,10 +83,12 @@
|
|||
rules:
|
||||
- id: Thief
|
||||
prob: 0.5
|
||||
#begin DeltaV additions - add hitman
|
||||
#begin DeltaV additions - add hitman (now add conspirators)
|
||||
- id: Hitman
|
||||
prob: 0.2 #as requested
|
||||
# end deltaV additions - add hitman
|
||||
- id: Conspirators
|
||||
prob: 0.2
|
||||
# end deltaV additions - add hitman (now add conspirators)
|
||||
|
||||
- type: entity
|
||||
parent: BaseGameRule
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
- type: entity
|
||||
parent: LockerBaseSecureDeltaV
|
||||
id: LockerConspiratorFilledRandom
|
||||
suffix: conspirator
|
||||
components:
|
||||
- type: EntityTableContainerFill
|
||||
containers:
|
||||
entity_storage: !type:NestedSelector
|
||||
tableId: conspiratorLockerLoot
|
||||
|
||||
|
||||
- type: entityTable
|
||||
id: conspiratorLockerLoot
|
||||
table: !type:AllSelector
|
||||
children:
|
||||
#Weapons
|
||||
# fluff
|
||||
- !type:NestedSelector
|
||||
tableId: MaintToolsTable
|
||||
prob: 1
|
||||
- !type:NestedSelector
|
||||
tableId: MaintFluffTable
|
||||
prob: 1
|
||||
#tools
|
||||
- !type:NestedSelector
|
||||
tableId: ToiletCisternCommonToolsTable
|
||||
prob: 1
|
||||
- !type:NestedSelector
|
||||
tableId: ToiletCisternRareToolsTable
|
||||
prob: 1
|
||||
- !type:NestedSelector
|
||||
tableId: ToiletCisternUtilityTable
|
||||
prob: 1
|
||||
#Weapons
|
||||
- !type:NestedSelector
|
||||
tableId: MaintWeaponTable
|
||||
prob: 1
|
||||
- !type:NestedSelector
|
||||
tableId: ToiletCisternWeaponsTable
|
||||
prob: 1
|
||||
# Syndie Loot
|
||||
- !type:NestedSelector
|
||||
tableId: SyndieMaintLoot
|
||||
prob: 1
|
||||
- !type:NestedSelector
|
||||
tableId: ToiletCisternSyndicateTable
|
||||
prob: 1
|
||||
# Recursive
|
||||
- !type:NestedSelector
|
||||
tableId: conspiratorLockerLoot
|
||||
prob: 0.25
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
- type: thiefBackpackSet
|
||||
id: ConspiratorGenericKit
|
||||
name: conspirator-generic-kit-name
|
||||
description: conspirator-generic-kit-description
|
||||
sprite:
|
||||
sprite: Objects/Materials/Sheets/metal.rsi
|
||||
state: steel
|
||||
content:
|
||||
- SheetSteel
|
||||
- SheetSteel
|
||||
- SheetSteel
|
||||
- SheetGlass
|
||||
- SheetGlass
|
||||
- SheetGlass
|
||||
- SheetPlastic
|
||||
- SheetPlastic
|
||||
- SheetPlastic
|
||||
- ClothingBeltUtilityFilled
|
||||
- ClothingHandsGlovesColorYellow
|
||||
|
||||
- type: thiefBackpackSet
|
||||
id: ConspiratorPremiumKit
|
||||
name: conspirator-premium-kit-name
|
||||
description: conspirator-premium-kit-description
|
||||
sprite:
|
||||
sprite: Objects/Materials/ingots.rsi
|
||||
state: gold
|
||||
content:
|
||||
- SheetPlasma
|
||||
- SheetUranium
|
||||
- SheetPlasteel
|
||||
- IngotGold
|
||||
- IngotSilver
|
||||
- SpaceCash10000
|
||||
|
||||
- type: thiefBackpackSet
|
||||
id: ConspiratorWeaponsKit
|
||||
name: conspirator-weapons-kit-name
|
||||
description: conspirator-weapons-kit-description
|
||||
sprite:
|
||||
sprite: _DV/Objects/Weapons/Guns/Rifles/musket.rsi
|
||||
state: base
|
||||
content:
|
||||
- MaterialWoodPlank
|
||||
- MaterialCloth
|
||||
- MaterialGunpowder30
|
||||
- UtilityKnife
|
||||
- Igniter
|
||||
- Igniter
|
||||
- Igniter
|
||||
|
||||
- type: thiefBackpackSet
|
||||
id: ConspiratorElectronicsKit
|
||||
name: conspirator-electronics-kit-name
|
||||
description: conspirator-electronics-kit-description
|
||||
sprite:
|
||||
sprite: Objects/Tools/cable-coils.rsi
|
||||
state: coil-30
|
||||
content:
|
||||
- CableHVStack
|
||||
- CableMVStack
|
||||
- CableApcStack
|
||||
- CircuitImprinterMachineCircuitboard
|
||||
- MicroManipulatorStockPart10
|
||||
|
||||
- type: thiefBackpackSet
|
||||
id: ConspiratorMaintenanceKit
|
||||
name: conspirator-maintenance-kit-name
|
||||
description: conspirator-maintenance-kit-description
|
||||
sprite:
|
||||
sprite: Structures/Storage/wall_locker.rsi
|
||||
state: generic_icon
|
||||
content:
|
||||
- LockerConspiratorFilledRandom
|
||||
|
|
@ -244,3 +244,19 @@
|
|||
componentsToAdd:
|
||||
- type: PyrokinesisPower
|
||||
- type: Psionic
|
||||
|
||||
- type: entity
|
||||
parent: MicroManipulatorStockPart
|
||||
id: MicroManipulatorStockPart10
|
||||
suffix: 10
|
||||
components:
|
||||
- type: Stack
|
||||
count: 10
|
||||
|
||||
- type: entity
|
||||
parent: MaterialGunpowder
|
||||
id: MaterialGunpowder30
|
||||
suffix: 30
|
||||
components:
|
||||
- type: Stack
|
||||
count: 30
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
- type: entity
|
||||
id: ConspiratorsPackage
|
||||
name: conspirators package
|
||||
description: A unopened package with everything you've prepared.
|
||||
parent: ToolboxThief
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: _DV/Objects/Misc/conspirators_package.rsi
|
||||
state: icon
|
||||
- type: ThiefUndeterminedBackpack
|
||||
maxSelectedSets: 1
|
||||
toolName: conspirator-package-window-title
|
||||
toolDesc: conspirator-package-window-description
|
||||
possibleSets:
|
||||
- ConspiratorGenericKit
|
||||
- ConspiratorPremiumKit
|
||||
- ConspiratorWeaponsKit
|
||||
- ConspiratorElectronicsKit
|
||||
- ConspiratorMaintenanceKit
|
||||
|
|
@ -25,3 +25,39 @@
|
|||
sound: "/Audio/_DV/Ambience/Antag/hitman_briefing_piano_between.ogg"
|
||||
- type: DynamicRuleCost
|
||||
cost: 100 # bit more than thief
|
||||
|
||||
- type: entity
|
||||
id: Conspirators
|
||||
components:
|
||||
- type: GameRule
|
||||
minPlayers: 30
|
||||
- type: AntagObjectives
|
||||
objectives:
|
||||
- ConspiratorPrepareObjective
|
||||
- type: ConspiratorRule
|
||||
- type: AntagSelection
|
||||
selectionTime: IntraPlayerSpawn
|
||||
agentName: conspirator-round-end-agent-name # DeltaV - previously unset
|
||||
definitions:
|
||||
- prefRoles: [ Conspirator ]
|
||||
min: 3
|
||||
max: 6
|
||||
playerRatio: 10
|
||||
departmentDistribution: true # DeltaV - previously unset
|
||||
startingGear: ConspiratorGear
|
||||
blacklist: # DeltaV - Blacklist AntagImmune
|
||||
components:
|
||||
- AntagImmune
|
||||
briefing:
|
||||
text: conspirator-role-greeting
|
||||
color: "#724F29"
|
||||
sound: /Audio/_Harmony/Misc/conspirator_greeting.ogg
|
||||
components:
|
||||
- type: Conspirator
|
||||
- type: AutoImplant
|
||||
implants:
|
||||
- RadioImplantConspiracy
|
||||
mindRoles:
|
||||
- MindRoleConspirator
|
||||
- type: DynamicRuleCost
|
||||
cost: 150 # more than hitman by a lot
|
||||
|
|
|
|||
|
|
@ -6,38 +6,3 @@
|
|||
rules:
|
||||
- id: Thief
|
||||
prob: 0.5
|
||||
|
||||
- type: entity
|
||||
parent: BaseGameRule
|
||||
id: Conspirators
|
||||
components:
|
||||
- type: GameRule
|
||||
minPlayers: 15 # DeltaV - changed from 28 to 15
|
||||
minTotalPlayers: 40 # DeltaV - added attribute
|
||||
delay: # DeltaV - add delay to make sure as many people as possible join the round
|
||||
min: 600
|
||||
max: 900
|
||||
- type: ConspiratorRule
|
||||
- type: AntagSelection
|
||||
selectionTime: PostPlayerSpawn # DeltaV - previously IntraPlayerSpawn
|
||||
agentName: conspirator-round-end-agent-name # DeltaV - previously unset
|
||||
definitions:
|
||||
- prefRoles: [ Conspirator ]
|
||||
min: 4
|
||||
max: 7
|
||||
playerRatio: 7
|
||||
departmentDistribution: true # DeltaV - previously unset
|
||||
blacklist: # DeltaV - Blacklist AntagImmune
|
||||
components:
|
||||
- AntagImmune
|
||||
briefing:
|
||||
text: conspirator-role-greeting
|
||||
color: "#724F29"
|
||||
sound: /Audio/_Harmony/Misc/conspirator_greeting.ogg
|
||||
components:
|
||||
- type: Conspirator
|
||||
- type: AutoImplant
|
||||
implants:
|
||||
- RadioImplantConspiracy
|
||||
mindRoles:
|
||||
- MindRoleConspirator
|
||||
|
|
|
|||
|
|
@ -98,3 +98,115 @@
|
|||
icon:
|
||||
sprite: Mobs/Silicon/station_ai.rsi
|
||||
state: ai_camera
|
||||
|
||||
|
||||
# dv addtions - dv conspirators v2
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorPrepareObjective
|
||||
name: Plan and prepare.
|
||||
description: Gather with your other Conspirators and prepare your conspiracy.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Objects/Weapons/Melee/stunprod.rsi
|
||||
state: stunprod_off
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorBusinessObjective
|
||||
name: Set up a business outside Nanotrasen.
|
||||
description: You dont wanna work for nt anymore. Get a shuttle and whatever else would let you set up a profitable business of your own.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Structures/Machines/computers.rsi
|
||||
state: avionics-systems
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorUsurpObjective
|
||||
name: Become the true leaders of the station.
|
||||
description: You want to be the top dogs. Through violence, blackmail, or popularity become the true captains.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Clothing/Head/Hats/captain.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorHordeObjective
|
||||
name: Build a horde of valuables.
|
||||
description: You want it all. gather everything valuable on this station into a hidden location.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Objects/Materials/ingots.rsi
|
||||
state: gold
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorDistrustObjective
|
||||
name: Brew distrust and hatred.
|
||||
description: A angry people is a controlable people. Try and get everyone isolated and angry at everyone else.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Structures/Machines/computers.rsi
|
||||
state: television
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorVigilanteObjective
|
||||
name: Enforce the laws secuirty can not.
|
||||
description: Trespassing, minor theft, contraband, demolish these criminals so secuirty can focus on the real problems.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Objects/Weapons/Melee/baseball_bat.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorFreedomObjective
|
||||
name: Free the station of access.
|
||||
description: The people are constrained by access and departments. Give the people the power to go anywhere.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Structures/Doors/Airlocks/Glass/basic.rsi
|
||||
state: closed
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorNukeObjective
|
||||
name: Steal the nuke disk
|
||||
description: You know the nuclear operatives are coming. If you dont have the disk this station is doomed!
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Objects/Misc/nukedisk.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorDangerObjective
|
||||
name: Arm yourselves
|
||||
description: You're all in danger, get as many weapons and armor as you can to protect yourself.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: Objects/Weapons/Guns/Pistols/mk58.rsi
|
||||
state: icon
|
||||
|
||||
- type: entity
|
||||
parent: BaseConspiratorObjective
|
||||
id: ConspiratorFreeObjective
|
||||
name: Make your own conspiracy.
|
||||
description: you know what you want to do.
|
||||
components:
|
||||
- type: Objective
|
||||
icon:
|
||||
sprite: _ST/Effects/interaction.rsi
|
||||
state: hand
|
||||
|
|
@ -2,12 +2,12 @@
|
|||
- 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 -- DeltaV - remove from pool
|
||||
ConspiratorSiliconObjective: 1 # DeltaV
|
||||
ConspiratorUnionObjective: 1 #deltaV conspirators v2
|
||||
#ConspiratorGameshowObjective: 1
|
||||
#ConspiratorTechnologyObjective: 1
|
||||
#ConspiratorArmsObjective: 1
|
||||
#ConspiratorThiefObjective: 1
|
||||
#ConspiratorMafiaObjective: 1
|
||||
#ConspiratorArrestObjective: 1
|
||||
#ConspiratorCameraObjective: 1 -- DeltaV - remove from pool
|
||||
#ConspiratorSiliconObjective: 1 # DeltaV
|
||||
|
|
@ -1,10 +1,16 @@
|
|||
- type: antag
|
||||
id: Conspirator
|
||||
name: roles-antag-conspirator-name
|
||||
objective: roles-antag-conspirator-objective
|
||||
antagonist: true
|
||||
setPreference: true
|
||||
objective: roles-antag-conspirator-objective
|
||||
guides: [ Conspirators ]
|
||||
requirements:
|
||||
- !type:OverallPlaytimeRequirement
|
||||
time: 86400 # DeltaV - 24h
|
||||
time: 24h # DeltaV - 24h
|
||||
|
||||
- type: startingGear
|
||||
id: ConspiratorGear
|
||||
storage:
|
||||
back:
|
||||
- ConspiratorsPackage
|
||||
|
|
|
|||
|
|
@ -9,3 +9,16 @@
|
|||
icon:
|
||||
sprite: /Textures/_Harmony/Interface/Misc/job_icons.rsi
|
||||
state: Conspirator
|
||||
|
||||
## conspirators v2
|
||||
- type: factionIcon
|
||||
id: ConspiratorLeaderFaction
|
||||
isShaded: true
|
||||
priority: 11
|
||||
showTo:
|
||||
components:
|
||||
- ShowAntagIcons
|
||||
- Conspirator
|
||||
icon:
|
||||
sprite: /Textures/_Harmony/Interface/Misc/job_icons.rsi
|
||||
state: ConspiratorLead
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 803 B |
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-4.0",
|
||||
"copyright": "modifed mail capsuler from Frontier by erhardsteinhauer (discord). modifed by storymatt on github",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 152 B |
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Conspirator made by SuperGDPWYL (GitHub).",
|
||||
"copyright": "Conspirator made by SuperGDPWYL (GitHub). ConspiratorLead modified from Conspirator by stormyatt (github)",
|
||||
"size": {
|
||||
"x": 8,
|
||||
"y": 8
|
||||
|
|
@ -9,6 +9,9 @@
|
|||
"states": [
|
||||
{
|
||||
"name": "Conspirator"
|
||||
},
|
||||
{
|
||||
"name": "ConspiratorLead"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue