Новые предметы, фикс супер материи, правки (#515)
* permission changes * super matter changes * NT backpack energy dome * energy dome is contraband * fix singularity * upd * upd supermatter * reflector * upd * upd * add meta.json * fix announcement * upd * fix rsi * fix ids * return checking for double actions * fix hydro assembly * fix x2 hydroponics and chemistry airlock * upd * У всех хардсьютов временно забран пнв(переработка хардсьютов под пнв момент) * peace parts * clown parts * upd parts meta * akms bigger price * fix * fix x2 * add clown, peace parts --------- Co-authored-by: darkrell <rc-alh@outlook.com>
|
|
@ -199,7 +199,7 @@ public sealed class RadioSystem : EntitySystem
|
|||
private string GetIdCardName(EntityUid senderUid)
|
||||
{
|
||||
var idCardTitle = Loc.GetString("chat-radio-no-id");
|
||||
idCardTitle = GetIdCard(senderUid)?.JobTitle ?? idCardTitle;
|
||||
idCardTitle = GetIdCard(senderUid)?.LocalizedJobTitle ?? idCardTitle;
|
||||
|
||||
var textInfo = CultureInfo.CurrentCulture.TextInfo;
|
||||
idCardTitle = textInfo.ToTitleCase(idCardTitle);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using Content.Shared.Atmos;
|
||||
using Content.Shared.Atmos;
|
||||
using Robust.Shared.Audio;
|
||||
|
||||
namespace Content.Server.Supermatter.Components;
|
||||
|
|
@ -6,6 +6,36 @@ namespace Content.Server.Supermatter.Components;
|
|||
[RegisterComponent]
|
||||
public sealed partial class SupermatterComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// The damage taken from direct hits, e.g. laser weapons
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float AVExternalDamage = 0f;
|
||||
|
||||
//
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float HeatAccumulatorRate = 0.5f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float AVHeatAccumulator = 0f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float RadiationAccumulatorRate = 0.3f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float AVRadiationAccumulator = 0f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float LightingAccumulatorThreshold = 2f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float LightingAccumulatorRate = 0.1f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float AVLightingAccumulator = 0f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float InternalEnergyAccumulatorRate = 0.1f;
|
||||
/// <summary>
|
||||
/// Lightning prototype IDs that the supermatter should spit out.
|
||||
/// </summary>
|
||||
|
|
@ -64,8 +94,6 @@ public sealed partial class SupermatterComponent : Component
|
|||
|
||||
public float UpdateTimerAccumulator = 0f;
|
||||
|
||||
public float ZapTimerAccumulator = 0f;
|
||||
|
||||
public float AnnouncementTimerAccumulator = 0f;
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -74,12 +102,6 @@ public sealed partial class SupermatterComponent : Component
|
|||
[DataField("updateTimer")]
|
||||
public float UpdateTimer = 1f;
|
||||
|
||||
/// <summary>
|
||||
/// Amount of seconds to pass before SM does it's zap.
|
||||
/// </summary>
|
||||
[DataField("zapTimer")]
|
||||
public float ZapTimer = 10f;
|
||||
|
||||
/// <summary>
|
||||
/// Amount of seconds to pass before makes an announcement.
|
||||
/// </summary>
|
||||
|
|
@ -123,12 +145,6 @@ public sealed partial class SupermatterComponent : Component
|
|||
/// </summary>
|
||||
public float DamageArchive = 0f;
|
||||
|
||||
/// <summary>
|
||||
/// The damage taken from direct hits, e.g. laser weapons
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float ExternalDamage = 0f;
|
||||
|
||||
/// <summary>
|
||||
/// The temperature at which the supermatter crystal will begin to take damage.
|
||||
/// </summary>
|
||||
|
|
@ -168,11 +184,8 @@ public sealed partial class SupermatterComponent : Component
|
|||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float GasPowerlossInhibition = 0f;
|
||||
/// <summary>
|
||||
/// Affects the amount of power the main SM zap makes.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public float PowerTransmissionRate = 0f;
|
||||
public float ThermalСonductivity = 0f;
|
||||
/// <summary>
|
||||
/// Affects the power gain the SM experiences from heat.
|
||||
/// </summary>
|
||||
|
|
@ -199,15 +212,15 @@ public sealed partial class SupermatterComponent : Component
|
|||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public GasFact[] GasFacts =
|
||||
{
|
||||
new (transmissionRate: .15f, heatPowerGeneration: 1f), // o2
|
||||
new (heatModifier: -2.5f, heatPowerGeneration: -1), // n2
|
||||
new (heatModifier: 1f, heatPowerGeneration: 1f, powerlossInhibition: 1f), // co2
|
||||
new (transmissionRate: .4f, heatModifier: 14f, heatPowerGeneration: 1f), // plasma
|
||||
new (transmissionRate: 3f, heatModifier: 9f, heatPowerGeneration: 1f), // tritium
|
||||
new (transmissionRate: -.25f, heatModifier: 11f, heatPowerGeneration: 1f), // vapor
|
||||
new (heatPowerGeneration: .5f), // ommonium
|
||||
new (heatResistance: 5f), // n2o
|
||||
new (transmissionRate: -3f, heatModifier: 9f, heatResistance: 1f, heatPowerGeneration: 1f), // frezon
|
||||
new (thermalConductivity: 2.4f, heatPowerGeneration: 1f), // o2
|
||||
new (thermalConductivity: 2.0f, heatModifier: -2.5f, heatPowerGeneration: -1), // n2
|
||||
new (thermalConductivity: 1.2f, heatModifier: 1f, heatPowerGeneration: 1f, powerlossInhibition: 1f), // co2
|
||||
new (thermalConductivity: 6.0f, heatModifier: 14f, heatPowerGeneration: 1f), // plasma
|
||||
new (thermalConductivity: 3.0f, heatModifier: 9f, heatPowerGeneration: 1f), // tritium
|
||||
new (thermalConductivity: 1.4f, heatModifier: 11f, heatPowerGeneration: 1f), // vapor
|
||||
new (thermalConductivity: 1.6f, heatPowerGeneration: .5f), // ommonium
|
||||
new (thermalConductivity: 1.3f, heatResistance: 5f), // n2o
|
||||
new (thermalConductivity: 9.9f, heatModifier: 9f, heatResistance: 1f, heatPowerGeneration: 1f), // frezon
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -222,7 +235,7 @@ public sealed partial class GasFact
|
|||
/// Affects the amount of power the main SM zap makes.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public float PowerTransmissionRate;
|
||||
public float ThermalСonductivity;
|
||||
/// <summary>
|
||||
/// Affects the heat SM makes.
|
||||
/// </summary>
|
||||
|
|
@ -244,9 +257,9 @@ public sealed partial class GasFact
|
|||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public float PowerlossInhibition;
|
||||
|
||||
public GasFact(float? transmissionRate = null, float? heatModifier = null, float? heatResistance = null, float? heatPowerGeneration = null, float? powerlossInhibition = null)
|
||||
public GasFact(float? thermalConductivity = null, float? heatModifier = null, float? heatResistance = null, float? heatPowerGeneration = null, float? powerlossInhibition = null)
|
||||
{
|
||||
PowerTransmissionRate = transmissionRate ?? 1;
|
||||
ThermalСonductivity = thermalConductivity ?? 1;
|
||||
HeatModifier = heatModifier ?? 1;
|
||||
HeatResistance = heatResistance ?? 0;
|
||||
HeatPowerGeneration = heatPowerGeneration ?? 0;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Supermatter.Components;
|
||||
using Content.Shared.Atmos;
|
||||
using Content.Server.Lightning;
|
||||
|
|
@ -26,6 +26,8 @@ using Content.Shared.Examine;
|
|||
using Content.Server.DoAfter;
|
||||
using Content.Server.Explosion.EntitySystems;
|
||||
using Content.Server.Kitchen.Components;
|
||||
using Content.Shared.Singularity.Components;
|
||||
using System;
|
||||
|
||||
namespace Content.Server.Supermatter.EntitySystems;
|
||||
|
||||
|
|
@ -39,6 +41,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
[Dependency] private readonly AmbientSoundSystem _ambience = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly TagSystem _tagSystem = default!;
|
||||
[Dependency] private readonly StationSystem _station = default!;
|
||||
[Dependency] private readonly AnomalySystem _anomaly = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
|
|
@ -81,17 +84,10 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
|
||||
public void Cycle(EntityUid uid, SupermatterComponent sm)
|
||||
{
|
||||
sm.ZapTimerAccumulator++;
|
||||
sm.AnnouncementTimerAccumulator++;
|
||||
|
||||
ProcessAtmos(uid, sm);
|
||||
|
||||
if (sm.ZapTimerAccumulator >= sm.ZapTimer)
|
||||
{
|
||||
sm.ZapTimerAccumulator = 0f;
|
||||
ProcessPower(uid, sm);
|
||||
}
|
||||
|
||||
ProcessPower(uid, sm);
|
||||
ProcessDamage(uid, sm);
|
||||
|
||||
// due to how damage calculation works, it will do the announcement only if sm is consistently taking damage
|
||||
|
|
@ -104,7 +100,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
if (sm.Damage > sm.DamageEmergencyPoint)
|
||||
loc = "critical";
|
||||
|
||||
SupermatterAlert(uid, Loc.GetString($"supermatter-announcement-{loc}", ("integrity", Math.Round(sm.DelaminationPoint - sm.Damage, 1))));
|
||||
SupermatterAlert(uid, Loc.GetString($"supermatter-announcement-{loc}", ("integrity", (int)(sm.DelaminationPoint - sm.Damage))));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +123,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
// calculate gases
|
||||
var gasPercentages = new float[Enum.GetValues(typeof(Gas)).Length];
|
||||
|
||||
var powerTransmissionRate = 0f;
|
||||
var thermalСonductivity = 0f;
|
||||
var heatModifier = 0f;
|
||||
var heatResistance = 0f;
|
||||
var heatPowerGeneration = 0f;
|
||||
|
|
@ -148,7 +144,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
gasPercentages[i] = moleCount / moles;
|
||||
var smGas = sm.GasFacts[i];
|
||||
|
||||
powerTransmissionRate += smGas.PowerTransmissionRate * gasPercentages[i];
|
||||
thermalСonductivity += smGas.ThermalСonductivity * gasPercentages[i];
|
||||
heatModifier += smGas.HeatModifier * gasPercentages[i];
|
||||
heatResistance += smGas.HeatResistance * gasPercentages[i];
|
||||
heatPowerGeneration += smGas.HeatPowerGeneration * gasPercentages[i];
|
||||
|
|
@ -159,7 +155,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
powerlossInhibition = Math.Clamp(powerlossInhibition, 0, 1);
|
||||
|
||||
sm.AbsorbedGasMix = absorbedMix;
|
||||
sm.PowerTransmissionRate = powerTransmissionRate;
|
||||
sm.ThermalСonductivity = thermalСonductivity;
|
||||
sm.GasHeatModifier = heatModifier;
|
||||
sm.GasHeatResistance = heatResistance;
|
||||
sm.HeatPowerGeneration = heatPowerGeneration;
|
||||
|
|
@ -172,17 +168,32 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
{
|
||||
var powerHeat = sm.HeatPowerGeneration * sm.AbsorbedGasMix.Temperature * SupermatterComponent.GasHeatPowerScaling;
|
||||
var powerloss = -1 * sm.GasPowerlossInhibition;
|
||||
var atmosStrength = Math.Clamp((powerHeat + powerloss) * sm.PowerTransmissionRate, 0, 2);
|
||||
var atmosStrength = Math.Clamp((powerHeat + powerloss) * 0.2f, 0, 2);
|
||||
|
||||
var damageStrength = Math.Clamp(sm.Damage / sm.DelaminationPoint, 0, 1);
|
||||
var strength = Math.Clamp(atmosStrength + damageStrength, 0, 4);
|
||||
var damageExternal = sm.AVExternalDamage + strength;
|
||||
sm.AVExternalDamage = 0f;
|
||||
|
||||
sm.InternalEnergy = strength;
|
||||
var lightningProto = sm.LightningPrototypeIDs[(int) Math.Clamp(strength, 0, 3)];
|
||||
sm.AVHeatAccumulator = Math.Clamp(sm.AVHeatAccumulator + (damageExternal * sm.HeatAccumulatorRate), 0, 10);
|
||||
sm.AVRadiationAccumulator = Math.Clamp(sm.AVRadiationAccumulator + (damageExternal * sm.RadiationAccumulatorRate), 0, 10);
|
||||
sm.AVLightingAccumulator = Math.Clamp(sm.AVLightingAccumulator + (damageExternal * sm.LightingAccumulatorRate), 0, 10);
|
||||
sm.InternalEnergy = Math.Clamp(sm.InternalEnergy + (damageExternal * sm.InternalEnergyAccumulatorRate), 0, 10);
|
||||
|
||||
_sound.PlayPvs(SupermatterComponent.SupermatterZapSound, uid);
|
||||
_lightning.ShootRandomLightnings(uid, 3, (int) strength < 1 ? 1 : (int) strength, lightningProto);
|
||||
Comp<RadiationSourceComponent>(uid).Intensity = 1 + strength;
|
||||
if (sm.AVLightingAccumulator > sm.LightingAccumulatorThreshold)
|
||||
{
|
||||
var lightningProto = sm.LightningPrototypeIDs[(int)Math.Clamp(sm.AVLightingAccumulator, 0, 3)];
|
||||
_lightning.ShootRandomLightnings(uid, 3, (int)sm.AVLightingAccumulator, lightningProto);
|
||||
sm.AVLightingAccumulator = 0;
|
||||
}
|
||||
|
||||
Comp<RadiationSourceComponent>(uid).Intensity = 1 + sm.AVRadiationAccumulator;
|
||||
sm.AVRadiationAccumulator /= 2;
|
||||
sm.InternalEnergy /= 2;
|
||||
|
||||
var mix = _atmos.GetContainingMixture((uid, Transform(uid)), true, true) ?? new();
|
||||
mix.Temperature += sm.AVHeatAccumulator * 4;
|
||||
sm.AVHeatAccumulator /= sm.ThermalСonductivity;
|
||||
}
|
||||
/// <summary>
|
||||
/// React to damage dealt by all doodads.
|
||||
|
|
@ -196,11 +207,8 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
|
||||
sm.TempLimit = Math.Max(tempLimitBase + tempLimitGas + tempLimitMoles, Atmospherics.TCMB);
|
||||
|
||||
var damageExternal = sm.ExternalDamage * Math.Clamp((sm.DamageEmergencyPoint - sm.Damage) / sm.DamageEmergencyPoint, 0, 1);
|
||||
sm.ExternalDamage = 0f;
|
||||
|
||||
var damageHeat = Math.Clamp((sm.AbsorbedGasMix.Temperature - sm.TempLimit) / 24000, 0, .15f);
|
||||
var damagePower = Math.Clamp((sm.InternalEnergy - SupermatterComponent.PowerPenaltyThreshold) / 40000, 0, .1f);
|
||||
var damagePower = Math.Clamp((sm.InternalEnergy - SupermatterComponent.PowerPenaltyThreshold), 0, .1f);
|
||||
var damageMoles = Math.Clamp((sm.AbsorbedGasMix.TotalMoles - SupermatterComponent.MolePenaltyThreshold) / 3200, 0, .1f);
|
||||
|
||||
var damageHealHeat = 0f;
|
||||
|
|
@ -208,7 +216,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
if (sm.AbsorbedGasMix.TotalMoles > 0)
|
||||
damageHealHeat = Math.Clamp((sm.AbsorbedGasMix.TotalMoles - sm.TempLimit) / 6000, -.1f, 0);
|
||||
|
||||
var totalDamage = damageExternal + damageHeat + damagePower + damageMoles + damageHealHeat;
|
||||
var totalDamage = damageHeat + damagePower + damageMoles + damageHealHeat;
|
||||
|
||||
sm.Damage += Math.Max(totalDamage, 0);
|
||||
|
||||
|
|
@ -235,7 +243,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
mergeMix.Temperature = Math.Clamp(mergeMix.Temperature, Atmospherics.TCMB, 2500 * sm.WasteMultiplier);
|
||||
|
||||
mergeMix.AdjustMoles(Gas.Plasma, Math.Max(.65f * sm.InternalEnergy * sm.WasteMultiplier * SupermatterComponent.PlasmaReleaseModifier, 0));
|
||||
mergeMix.AdjustMoles(Gas.Oxygen, Math.Max((.65f + mergeMix.Temperature * sm.WasteMultiplier - Atmospherics.T0C) * SupermatterComponent.OxygenReleaseModifier, 0));
|
||||
mergeMix.AdjustMoles(Gas.Oxygen, Math.Max(.65f * sm.InternalEnergy * sm.WasteMultiplier * SupermatterComponent.OxygenReleaseModifier, 0));
|
||||
|
||||
_atmos.Merge(mix, mergeMix);
|
||||
}
|
||||
|
|
@ -282,7 +290,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
|
||||
for (var i = 0; i < amount; i++)
|
||||
{
|
||||
_anomaly.SpawnOnRandomGridLocation((EntityUid) grid, "RandomAnomalySpawner");
|
||||
_anomaly.SpawnOnRandomGridLocation((EntityUid)grid, "RandomAnomalySpawner");
|
||||
_adminLogger.Add(LogType.Anomaly, LogImpact.Medium, $"An anomaly has been spawned by the supermatter crystal.");
|
||||
}
|
||||
}
|
||||
|
|
@ -295,6 +303,13 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
if (EntityManager.IsQueuedForDeletion(uid))
|
||||
return;
|
||||
|
||||
if (_tagSystem.HasTag(uid, "EmitterBolt")
|
||||
|| HasComp<SingularityComponent>(uid))
|
||||
return;
|
||||
|
||||
if (TryComp<SupermatterComponent>(smUid, out var sm))
|
||||
sm.AVExternalDamage += 1f;
|
||||
|
||||
_sound.PlayPvs(SupermatterComponent.VaporizeSound, smUid);
|
||||
EntityManager.QueueDeleteEntity(uid);
|
||||
|
||||
|
|
@ -302,14 +317,13 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
_adminLogger.Add(LogType.Action, LogImpact.High, $"{EntityManager.ToPrettyString(uid):player} has been vaporized by the supermatter.");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Handle supermatter delamination and the end of the station.
|
||||
/// </summary>
|
||||
private void Delaminate(EntityUid uid, SupermatterComponent sm)
|
||||
{
|
||||
sm.PreferredDelamType = sm.PreferredDelamType ?? (int) ChooseDelam(sm);
|
||||
Delaminate(uid, sm, (DelamType) sm.PreferredDelamType);
|
||||
sm.PreferredDelamType = sm.PreferredDelamType ?? (int)ChooseDelam(sm);
|
||||
Delaminate(uid, sm, (DelamType)sm.PreferredDelamType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -413,8 +427,6 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
sm.DelamCountdownAccumulator++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void OnCollide(EntityUid uid, SupermatterComponent sm, StartCollideEvent args)
|
||||
{
|
||||
if (!sm.Activated)
|
||||
|
|
@ -446,7 +458,7 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
private void OnGetSliver(EntityUid uid, SupermatterComponent sm, SupermatterDoAfterEvent args)
|
||||
{
|
||||
sm.Damage += 10; // your criminal actions will not go unnoticed
|
||||
SupermatterAlert(uid, Loc.GetString("supermatter-announcement-tamper", ("integrity", (int) (100 - sm.Damage))));
|
||||
SupermatterAlert(uid, Loc.GetString("supermatter-announcement-tamper", ("integrity", (int)(100 - sm.Damage))));
|
||||
|
||||
Spawn(sm.SliverPrototype, _transform.GetMapCoordinates(args.User));
|
||||
_popup.PopupClient(Loc.GetString("supermatter-tamper-end"), args.User);
|
||||
|
|
@ -457,17 +469,14 @@ public sealed class SupermatterSystem : EntitySystem
|
|||
if (!sm.Activated)
|
||||
sm.Activated = true;
|
||||
|
||||
sm.ExternalDamage += args.DamageDelta?.GetTotal().Value / 1000 ?? 0;
|
||||
|
||||
Cycle(uid, sm);
|
||||
ProcessPower(uid, sm);
|
||||
sm.AVExternalDamage += args.DamageDelta?.GetTotal().Value / 100 ?? 0;
|
||||
}
|
||||
|
||||
private void OnExamine(EntityUid uid, SupermatterComponent sm, ExaminedEvent args)
|
||||
{
|
||||
if (args.IsInDetailsRange) // get all close to it
|
||||
{
|
||||
args.PushMarkup(Loc.GetString("supermatter-examine-integrity", ("integrity", (int) (100 - sm.Damage))));
|
||||
args.PushMarkup(Loc.GetString("supermatter-examine-integrity", ("integrity", (int)(100 - sm.Damage))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -238,16 +238,16 @@ public sealed class ActionContainerSystem : EntitySystem
|
|||
DebugTools.AssertOwner(uid, comp);
|
||||
comp ??= EnsureComp<ActionsContainerComponent>(uid);
|
||||
|
||||
///if (!TryComp<MetaDataComponent>(actionId, out var actionData))
|
||||
/// return false;
|
||||
///if (!TryPrototype(actionId, out var actionProto, actionData))
|
||||
/// return false;
|
||||
if (!TryComp<MetaDataComponent>(actionId, out var actionData))
|
||||
return false;
|
||||
if (!TryPrototype(actionId, out var actionProto, actionData))
|
||||
return false;
|
||||
|
||||
///if (HasAction(uid, actionProto.ID))
|
||||
///{
|
||||
/// Log.Debug($"Tried to insert action {ToPrettyString(actionId)} into {ToPrettyString(uid)}. Failed due to duplicate actions.");
|
||||
/// return false;
|
||||
///}
|
||||
if (HasAction(uid, actionProto.ID, comp))
|
||||
{
|
||||
Log.Debug($"Tried to insert action {ToPrettyString(actionId)} into {ToPrettyString(uid)}. Failed due to duplicate actions.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_container.Insert(actionId, comp.Container))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ public sealed partial class SleepingSystem : EntitySystem
|
|||
{
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
|
||||
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
|
||||
[Dependency] private readonly BlindableSystem _blindableSystem = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
|
|
@ -241,6 +242,8 @@ public sealed partial class SleepingSystem : EntitySystem
|
|||
{
|
||||
RemComp<SleepingComponent>(ent);
|
||||
_actionsSystem.RemoveAction(ent, ent.Comp.WakeAction);
|
||||
if (ent.Comp.WakeAction != null)
|
||||
_actionContainer.RemoveAction(ent.Comp.WakeAction.Value);
|
||||
|
||||
var ev = new SleepStateChangedEvent(false);
|
||||
RaiseLocalEvent(ent, ref ev);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ public sealed partial class ReflectComponent : Component
|
|||
[DataField("spread"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public Angle Spread = Angle.FromDegrees(45);
|
||||
|
||||
[DataField("overrideAngle"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public Angle? OverrideAngle = null;
|
||||
|
||||
[DataField("soundOnReflect")]
|
||||
public SoundSpecifier? SoundOnReflect = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/laser_sear_wall.ogg");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,19 +104,35 @@ public sealed class ReflectSystem : EntitySystem
|
|||
return false;
|
||||
}
|
||||
|
||||
var rotation = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2).Opposite();
|
||||
var existingVelocity = _physics.GetMapLinearVelocity(projectile, component: physics);
|
||||
var relativeVelocity = existingVelocity - _physics.GetMapLinearVelocity(user);
|
||||
var newVelocity = rotation.RotateVec(relativeVelocity);
|
||||
if (reflect.OverrideAngle is not null)
|
||||
{
|
||||
var overrideAngle = _transform.GetWorldRotation(reflector) + reflect.OverrideAngle.Value;
|
||||
|
||||
// Have the velocity in world terms above so need to convert it back to local.
|
||||
var difference = newVelocity - existingVelocity;
|
||||
var existingVelocity = _physics.GetMapLinearVelocity(projectile, component: physics);
|
||||
var relativeVelocity = existingVelocity - _physics.GetMapLinearVelocity(user);
|
||||
var speed = relativeVelocity.Length();
|
||||
|
||||
_physics.SetLinearVelocity(projectile, physics.LinearVelocity + difference, body: physics);
|
||||
var newVelocity = new Vector2((float)Math.Cos(overrideAngle), (float)Math.Sin(overrideAngle)) * speed;
|
||||
|
||||
var locRot = Transform(projectile).LocalRotation;
|
||||
var newRot = rotation.RotateVec(locRot.ToVec());
|
||||
_transform.SetLocalRotation(projectile, newRot.ToAngle());
|
||||
var difference = newVelocity - existingVelocity;
|
||||
_physics.SetLinearVelocity(projectile, physics.LinearVelocity + difference, body: physics);
|
||||
_transform.SetLocalRotation(projectile, overrideAngle);
|
||||
}
|
||||
else
|
||||
{
|
||||
var rotation = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2).Opposite();
|
||||
var existingVelocity = _physics.GetMapLinearVelocity(projectile, component: physics);
|
||||
var relativeVelocity = existingVelocity - _physics.GetMapLinearVelocity(user);
|
||||
var newVelocity = rotation.RotateVec(relativeVelocity);
|
||||
|
||||
var difference = newVelocity - existingVelocity;
|
||||
|
||||
_physics.SetLinearVelocity(projectile, physics.LinearVelocity + difference, body: physics);
|
||||
|
||||
var locRot = Transform(projectile).LocalRotation;
|
||||
var newRot = rotation.RotateVec(locRot.ToVec());
|
||||
_transform.SetLocalRotation(projectile, newRot.ToAngle());
|
||||
}
|
||||
|
||||
if (_netManager.IsServer)
|
||||
{
|
||||
|
|
@ -176,9 +192,17 @@ public sealed class ReflectSystem : EntitySystem
|
|||
_popup.PopupEntity(Loc.GetString("reflect-shot"), user);
|
||||
_audio.PlayPvs(reflect.SoundOnReflect, user, AudioHelpers.WithVariation(0.05f, _random));
|
||||
}
|
||||
|
||||
var spread = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2);
|
||||
newDirection = -spread.RotateVec(direction);
|
||||
if (reflect.OverrideAngle is not null)
|
||||
{
|
||||
var overrideAngle = _transform.GetWorldRotation(reflector) + reflect.OverrideAngle.Value;
|
||||
newDirection = new Vector2((float)Math.Cos(overrideAngle), (float)Math.Sin(overrideAngle));
|
||||
newDirection = newDirection.Value.Normalized();
|
||||
}
|
||||
else
|
||||
{
|
||||
var spread = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2);
|
||||
newDirection = -spread.RotateVec(direction);
|
||||
}
|
||||
|
||||
if (shooter != null)
|
||||
_adminLogger.Add(LogType.HitScanHit, LogImpact.Medium, $"{ToPrettyString(user)} reflected hitscan from {ToPrettyString(shotSource)} shot by {ToPrettyString(shooter.Value)}");
|
||||
|
|
@ -216,7 +240,7 @@ public sealed class ReflectSystem : EntitySystem
|
|||
|
||||
private void OnToggleReflect(EntityUid uid, ReflectComponent comp, ref ItemToggledEvent args)
|
||||
{
|
||||
if (args.User is {} user)
|
||||
if (args.User is { } user)
|
||||
RefreshReflectUser(user);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ using Content.Shared.Inventory;
|
|||
using Content.Shared.Actions;
|
||||
using Content.Shared.Inventory.Events;
|
||||
using Content.Shared.Toggleable;
|
||||
using Content.Shared.PowerCell;
|
||||
using Content.Shared.PowerCell.Components;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Network;
|
||||
|
|
@ -20,6 +22,7 @@ public sealed class NightVisionDeviceSystem : EntitySystem
|
|||
[Dependency] private readonly SharedPointLightSystem _light = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly SharedPowerCellSystem _cell = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
|
|
@ -27,6 +30,9 @@ public sealed class NightVisionDeviceSystem : EntitySystem
|
|||
|
||||
SubscribeLocalEvent<NightVisionDeviceComponent, InventoryRelayedEvent<CanVisionAttemptEvent>>(OnNVDTrySee);
|
||||
SubscribeLocalEvent<NightVisionDeviceComponent, NightVisionDeviceUpdateVisualsEvent>(OnNightVisionDeviceUpdateVisuals);
|
||||
|
||||
SubscribeLocalEvent<NightVisionDeviceComponent, PowerCellChangedEvent>(OnPowerCellChanged);
|
||||
SubscribeLocalEvent<NightVisionDeviceComponent, PowerCellSlotEmptyEvent>(OnPowerCellSlotEmpty);
|
||||
|
||||
SubscribeLocalEvent<NightVisionDeviceComponent, GetItemActionsEvent>(OnGetActions);
|
||||
SubscribeLocalEvent<NightVisionDeviceComponent, ToggleActionEvent>(OnToggleAction);
|
||||
|
|
@ -56,7 +62,20 @@ public sealed class NightVisionDeviceSystem : EntitySystem
|
|||
{
|
||||
_actionsSystem.RemoveAction(uid, component.ToggleActionEntity);
|
||||
}
|
||||
|
||||
private void OnPowerCellSlotEmpty(Entity<NightVisionDeviceComponent> ent, ref PowerCellSlotEmptyEvent args)
|
||||
{
|
||||
if (ent.Comp.isPowered)
|
||||
Toggle(ent);
|
||||
}
|
||||
|
||||
private void OnPowerCellChanged(Entity<NightVisionDeviceComponent> ent, ref PowerCellChangedEvent args)
|
||||
{
|
||||
if (args.Ejected || !_powerCell.HasDrawCharge(ent))
|
||||
if (ent.Comp.isPowered)
|
||||
Toggle(ent);
|
||||
}
|
||||
|
||||
private void OnToggleAction(Entity<NightVisionDeviceComponent> ent, ref ToggleActionEvent args)
|
||||
{
|
||||
if (args.Handled)
|
||||
|
|
@ -68,6 +87,13 @@ public sealed class NightVisionDeviceSystem : EntitySystem
|
|||
return;
|
||||
}
|
||||
|
||||
Toggle(ent);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
public void Toggle(Entity<NightVisionDeviceComponent> ent)
|
||||
{
|
||||
var updVisEv = new NightVisionDeviceUpdateVisualsEvent();
|
||||
RaiseLocalEvent(ent, ref updVisEv);
|
||||
|
||||
|
|
@ -81,15 +107,22 @@ public sealed class NightVisionDeviceSystem : EntitySystem
|
|||
|
||||
if (!_light.TryGetLight(ent.Owner, out var light))
|
||||
return;
|
||||
|
||||
var draw = Comp<PowerCellDrawComponent>(ent.Owner);
|
||||
_cell.QueueUpdate((ent.Owner, draw));
|
||||
_cell.SetDrawEnabled((ent.Owner, draw), ent.Comp.Activated);
|
||||
|
||||
_appearance.SetData(ent, ToggleableLightVisuals.Enabled, ent.Comp.Activated);
|
||||
_light.SetEnabled(ent.Owner, ent.Comp.Activated, comp: light);
|
||||
|
||||
var changeEv = new NightVisionDeviceToggledEvent(args.Performer);
|
||||
RaiseLocalEvent(ent.Owner, ref changeEv);
|
||||
Dirty(ent);
|
||||
if (TryComp<TransformComponent>(ent.Owner, out var transform))
|
||||
{
|
||||
var equipped = transform.ParentUid;
|
||||
|
||||
args.Handled = true;
|
||||
var changeEv = new NightVisionDeviceToggledEvent(equipped);
|
||||
RaiseLocalEvent(ent.Owner, ref changeEv);
|
||||
}
|
||||
Dirty(ent);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
ent-EnergyDomeGeneratorBackpackSyndie = кроваво-красный наспинный генератор щита
|
||||
.desc = Наспинный генератор щита, защищающий владельца от лазеров и пуль, но не позволяющий самому использовать оружие дальнего боя. Использует батареи.
|
||||
ent-EnergyDomeGeneratorBackpackNT = BR-50c "Бастион"
|
||||
.desc = Наспинный генератор щита, защищающий владельца от лазеров и пуль, но не позволяющий самому использовать оружие дальнего боя. Использует батареи.
|
||||
ent-EnergyDomeGeneratorPersonalNT = BT-21b "Барьер"
|
||||
.desc = Генератор щита, защищающий владельца от лазеров и пуль, но не позволяющий самому использовать оружие дальнего боя. Использует батареи.
|
||||
.desc = Генератор щита, защищающий владельца от лазеров и пуль, но не позволяющий самому использовать оружие дальнего боя. Использует батареи.
|
||||
|
|
@ -86,9 +86,9 @@
|
|||
# Sunrise-Start
|
||||
- type: EyeProtection
|
||||
- type: FlashImmunity
|
||||
- type: NightVisionDevice
|
||||
displayColor: "#ebeb00"
|
||||
displayShader: NVDDisplay
|
||||
# - type: NightVisionDevice
|
||||
# displayColor: "#ebeb00"
|
||||
# displayShader: NVDDisplay
|
||||
# Sunrise-End
|
||||
|
||||
#Spationaut Hardsuit
|
||||
|
|
@ -405,9 +405,9 @@
|
|||
Slash: 0.9
|
||||
Piercing: 0.9
|
||||
Heat: 0.9
|
||||
- type: NightVisionDevice #Sunrise - night vision
|
||||
displayColor: "#44b855"
|
||||
displayShader: NVDDisplay
|
||||
# - type: NightVisionDevice Sunrise - night vision
|
||||
# displayColor: "#44b855"
|
||||
# displayShader: NVDDisplay
|
||||
|
||||
#Syndicate Elite Hardsuit
|
||||
- type: entity
|
||||
|
|
@ -437,9 +437,9 @@
|
|||
Slash: 0.9
|
||||
Piercing: 0.9
|
||||
Heat: 0.9
|
||||
- type: NightVisionDevice #Sunrise - night vision
|
||||
displayColor: "#44b855"
|
||||
displayShader: NVDDisplay
|
||||
# - type: NightVisionDevice Sunrise - night vision
|
||||
# displayColor: "#44b855"
|
||||
# displayShader: NVDDisplay
|
||||
|
||||
#Syndicate Commander Hardsuit
|
||||
- type: entity
|
||||
|
|
@ -464,9 +464,9 @@
|
|||
Slash: 0.9
|
||||
Piercing: 0.9
|
||||
Heat: 0.9
|
||||
- type: NightVisionDevice #Sunrise - night vision
|
||||
displayColor: "#44b855"
|
||||
displayShader: NVDDisplay
|
||||
# - type: NightVisionDevice Sunrise - night vision
|
||||
# displayColor: "#44b855"
|
||||
# displayShader: NVDDisplay
|
||||
|
||||
#Cybersun Juggernaut Hardsuit
|
||||
- type: entity
|
||||
|
|
@ -491,9 +491,9 @@
|
|||
Slash: 0.9
|
||||
Piercing: 0.9
|
||||
Heat: 0.9
|
||||
- type: NightVisionDevice #Sunrise - night vision
|
||||
displayColor: "#44b855"
|
||||
displayShader: NVDDisplay
|
||||
# - type: NightVisionDevice Sunrise - night vision
|
||||
# displayColor: "#44b855"
|
||||
# displayShader: NVDDisplay
|
||||
|
||||
#Wizard Hardsuit
|
||||
- type: entity
|
||||
|
|
|
|||
|
|
@ -501,3 +501,183 @@
|
|||
tags:
|
||||
- Trash
|
||||
- BorgServiceTorso
|
||||
|
||||
# peace parts
|
||||
- type: entity
|
||||
id: LeftArmBorgPeace
|
||||
parent: BaseBorgArmLeft
|
||||
name: peace cyborg left arm
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_l_arm
|
||||
- type: Icon
|
||||
state: peace_l_arm
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgArm
|
||||
- BorgPeaceLArm
|
||||
|
||||
- type: entity
|
||||
id: RightArmBorgPeace
|
||||
parent: BaseBorgArmRight
|
||||
name: peace cyborg right arm
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_r_arm
|
||||
- type: Icon
|
||||
state: peace_r_arm
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgArm
|
||||
- BorgPeaceRArm
|
||||
|
||||
- type: entity
|
||||
id: LeftLegBorgPeace
|
||||
parent: BaseBorgLegLeft
|
||||
name: peace cyborg left leg
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_l_leg
|
||||
- type: Icon
|
||||
state: peace_l_leg
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgLeg
|
||||
- BorgPeaceLLeg
|
||||
|
||||
- type: entity
|
||||
id: RightLegBorgPeace
|
||||
parent: BaseBorgLegRight
|
||||
name: peace cyborg right leg
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_r_leg
|
||||
- type: Icon
|
||||
state: peace_r_leg
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgLeg
|
||||
- BorgPeaceRLeg
|
||||
|
||||
- type: entity
|
||||
id: HeadBorgPeace
|
||||
parent: BaseBorgHead
|
||||
name: peace cyborg head
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_head
|
||||
- type: Icon
|
||||
state: peace_head
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgHead
|
||||
- BorgPeaceHead
|
||||
|
||||
- type: entity
|
||||
id: TorsoBorgPeace
|
||||
parent: BaseBorgTorso
|
||||
name: peace cyborg torso
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_chest
|
||||
- type: Icon
|
||||
state: peace_chest
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgPeaceTorso
|
||||
|
||||
# clown parts
|
||||
- type: entity
|
||||
id: LeftArmBorgClown
|
||||
parent: BaseBorgArmLeft
|
||||
name: clown cyborg left arm
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_l_arm
|
||||
- type: Icon
|
||||
state: peace_l_arm
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgArm
|
||||
- BorgClownLArm
|
||||
|
||||
- type: entity
|
||||
id: RightArmBorgClown
|
||||
parent: BaseBorgArmRight
|
||||
name: clown cyborg right arm
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_r_arm
|
||||
- type: Icon
|
||||
state: peace_r_arm
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgArm
|
||||
- BorgClownRArm
|
||||
|
||||
- type: entity
|
||||
id: LeftLegBorgClown
|
||||
parent: BaseBorgLegLeft
|
||||
name: clown cyborg left leg
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_l_leg
|
||||
- type: Icon
|
||||
state: peace_l_leg
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgLeg
|
||||
- BorgClownLLeg
|
||||
|
||||
- type: entity
|
||||
id: RightLegBorgClown
|
||||
parent: BaseBorgLegRight
|
||||
name: clown cyborg right leg
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_r_leg
|
||||
- type: Icon
|
||||
state: peace_r_leg
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgLeg
|
||||
- BorgClownRLeg
|
||||
|
||||
- type: entity
|
||||
id: HeadBorgClown
|
||||
parent: BaseBorgHead
|
||||
name: clown cyborg head
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_head
|
||||
- type: Icon
|
||||
state: peace_head
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgHead
|
||||
- BorgClownHead
|
||||
|
||||
- type: entity
|
||||
id: TorsoBorgClown
|
||||
parent: BaseBorgTorso
|
||||
name: clown cyborg torso
|
||||
components:
|
||||
- type: Sprite
|
||||
state: peace_chest
|
||||
- type: Icon
|
||||
state: peace_chest
|
||||
- type: Tag
|
||||
tags:
|
||||
- Trash
|
||||
- BorgClownTorso
|
||||
|
|
@ -166,6 +166,54 @@
|
|||
whitelist:
|
||||
tags:
|
||||
- BorgJanitorTorso
|
||||
peace_l_arm+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgPeaceLArm
|
||||
peace_r_arm+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgPeaceRArm
|
||||
peace_l_leg+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgPeaceLLeg
|
||||
peace_r_leg+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgPeaceRLeg
|
||||
peace_head+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgPeaceHead
|
||||
peace_chest+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgPeaceTorso
|
||||
clown_l_arm+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgClownLArm
|
||||
clown_r_arm+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgClownRArm
|
||||
clown_l_leg+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgClownLLeg
|
||||
clown_r_leg+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgClownRLeg
|
||||
clown_head+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgClownHead
|
||||
clown_chest+o:
|
||||
whitelist:
|
||||
tags:
|
||||
- BorgClownTorso
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
part-container: !type:Container
|
||||
|
|
@ -212,6 +260,20 @@
|
|||
- BorgMiningRLeg
|
||||
- BorgMiningHead
|
||||
- BorgMiningTorso
|
||||
peace:
|
||||
- BorgPeaceLArm
|
||||
- BorgPeaceRArm
|
||||
- BorgPeaceLLeg
|
||||
- BorgPeaceRLeg
|
||||
- BorgPeaceHead
|
||||
- BorgPeaceTorso
|
||||
clown:
|
||||
- BorgClownLArm
|
||||
- BorgClownRArm
|
||||
- BorgClownLLeg
|
||||
- BorgClownRLeg
|
||||
- BorgClownHead
|
||||
- BorgClownTorso
|
||||
- type: Construction
|
||||
graph: Cyborg
|
||||
node: start
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
name: blood red personal shield generator
|
||||
description: A personal shield generator that protects the wearer from lasers and bullets but prevents from using ranged weapons himself. Uses a power cell.
|
||||
id: EnergyDomeGeneratorPersonalSyndie
|
||||
parent: BaseItem
|
||||
parent: [ BaseItem, BaseSyndicateContraband ]
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@
|
|||
suffix: Hydroponics
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Structures/Doors/Airlocks/Standard/hydroponics.rsi
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Standard/hydroponics.rsi #Sunrise-Resprite
|
||||
state: "assembly"
|
||||
|
||||
- type: entity
|
||||
|
|
@ -154,7 +154,7 @@
|
|||
suffix: Hydroponics, Glass
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Structures/Doors/Airlocks/Glass/hydroponics.rsi
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/hydroponics.rsi #Sunrise-Resprite
|
||||
state: "assembly"
|
||||
|
||||
#Maintenance
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@
|
|||
atmospherics: Structures/Doors/Airlocks/Standard/atmospherics.rsi
|
||||
basic: Structures/Doors/Airlocks/Standard/basic.rsi
|
||||
cargo: Structures/Doors/Airlocks/Standard/cargo.rsi
|
||||
chemistry: Structures/Doors/Airlocks/Standard/chemistry.rsi
|
||||
chemistry: _Sunrise/Structures/Doors/Airlocks/Standard/chemistry.rsi #Sunrise-Resprite
|
||||
command: Structures/Doors/Airlocks/Standard/command.rsi
|
||||
engineering: Structures/Doors/Airlocks/Standard/engineering.rsi
|
||||
freezer: Structures/Doors/Airlocks/Standard/freezer.rsi
|
||||
hydroponics: Structures/Doors/Airlocks/Standard/hydroponics.rsi
|
||||
hydroponics: _Sunrise/Structures/Doors/Airlocks/Standard/hydroponics.rsi #Sunrise-Resprite
|
||||
maintenance: Structures/Doors/Airlocks/Standard/maint.rsi
|
||||
medical: Structures/Doors/Airlocks/Standard/medical.rsi
|
||||
science: Structures/Doors/Airlocks/Standard/science.rsi
|
||||
|
|
@ -24,11 +24,11 @@
|
|||
basic: Structures/Doors/Airlocks/Glass/basic.rsi
|
||||
cargo: Structures/Doors/Airlocks/Glass/cargo.rsi
|
||||
command: Structures/Doors/Airlocks/Glass/command.rsi
|
||||
chemistry: Structures/Doors/Airlocks/Glass/chemistry.rsi
|
||||
chemistry: _Sunrise/Structures/Doors/Airlocks/Glass/chemistry.rsi #Sunrise-Resprite
|
||||
science: Structures/Doors/Airlocks/Glass/science.rsi
|
||||
engineering: Structures/Doors/Airlocks/Glass/engineering.rsi
|
||||
glass: Structures/Doors/Airlocks/Glass/glass.rsi
|
||||
hydroponics: Structures/Doors/Airlocks/Glass/hydroponics.rsi
|
||||
hydroponics: _Sunrise/Structures/Doors/Airlocks/Glass/hydroponics.rsi #Sunrise-Resprite
|
||||
maintenance: Structures/Doors/Airlocks/Glass/maint.rsi
|
||||
medical: Structures/Doors/Airlocks/Glass/medical.rsi
|
||||
security: Structures/Doors/Airlocks/Glass/security.rsi
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
sprite: _Sunrise/Objects/Weapons/Guns/Rifles/akms/big.rsi
|
||||
state: icon
|
||||
product: CrateArmoryAKMS
|
||||
cost: 11000
|
||||
cost: 35000
|
||||
category: cargoproduct-category-name-armory
|
||||
group: market
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
- type: PowerCellDraw
|
||||
drawRate: 0
|
||||
useRate: 20
|
||||
- type: ToggleCellDraw
|
||||
|
||||
- type: entity
|
||||
parent: [ClothingEyesNVD,ShowSecurityIcons]
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
name: blood red backpack shield generator
|
||||
description: A backpack shield generator that protects the wearer from lasers and bullets but prevents from using ranged weapons himself. Uses a power cell.
|
||||
id: EnergyDomeGeneratorBackpackSyndie
|
||||
parent: BaseItem
|
||||
parent: [ BaseItem, BaseSyndicateContraband ]
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
|
|
@ -38,11 +38,51 @@
|
|||
- type: UseDelay
|
||||
delay: 10.0
|
||||
|
||||
- type: entity
|
||||
name: BR-50c "Bastion"
|
||||
description: A backpack shield generator that protects the wearer from lasers and bullets but prevents from using ranged weapons himself. Uses a power cell.
|
||||
id: EnergyDomeGeneratorBackpackNT
|
||||
parent: [ BaseItem, BaseCentcommContraband ]
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
- type: MultiHandedItem
|
||||
- type: Clothing
|
||||
quickEquip: false
|
||||
slots:
|
||||
- Back
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Objects/Tools/EnergyDome/nanotrasen_back.rsi
|
||||
layers:
|
||||
- state: icon
|
||||
- type: ContainerContainer
|
||||
containers:
|
||||
cell_slot: !type:ContainerSlot
|
||||
- type: PowerCellSlot
|
||||
cellSlotId: cell_slot
|
||||
- type: ItemSlots
|
||||
slots:
|
||||
cell_slot:
|
||||
name: power-cell-slot-component-slot-name-default
|
||||
startingItem: PowerCellSmall
|
||||
whitelist:
|
||||
tags:
|
||||
- PowerCell
|
||||
- PowerCellSmall
|
||||
- type: EnergyDomeGenerator
|
||||
damageEnergyDraw: 3
|
||||
domePrototype: EnergyDomeMediumBlue
|
||||
- type: PowerCellDraw
|
||||
drawRate: 2
|
||||
useRate: 0
|
||||
- type: UseDelay
|
||||
delay: 10.0
|
||||
|
||||
- type: entity
|
||||
name: BT-21b "Barrier"
|
||||
description: A personal shield generator that protects the wearer from lasers and bullets but prevents from using ranged weapons himself. Uses a power cell.
|
||||
id: EnergyDomeGeneratorPersonalNT
|
||||
parent: BaseItem
|
||||
parent: [ BaseItem, BaseCentcommContraband ]
|
||||
components:
|
||||
- type: Item
|
||||
size: Ginormous
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
- type: entity
|
||||
id: Reflector
|
||||
name: reflector
|
||||
placement:
|
||||
mode: SnapgridCenter
|
||||
components:
|
||||
- type: MeleeSound
|
||||
soundGroups:
|
||||
Brute:
|
||||
collection: GlassSmack
|
||||
- type: Anchorable
|
||||
- type: Pullable
|
||||
- type: Rotatable
|
||||
- type: Machine
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.25,-0.25,0.25,0.25"
|
||||
density: 400
|
||||
mask:
|
||||
- MachineMask
|
||||
layer:
|
||||
- MachineLayer
|
||||
- type: Reflect
|
||||
reflectProb: 1.0
|
||||
overrideAngle: 270
|
||||
reflects:
|
||||
- Energy
|
||||
- type: RCDDeconstructable
|
||||
deconstructable: false
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Reflector/reflector.rsi
|
||||
layers:
|
||||
- state: reflector_box
|
||||
shader: unshaded
|
||||
- type: Repairable
|
||||
fuelCost: 15
|
||||
doAfterDelay: 3
|
||||
- type: Damageable
|
||||
damageContainer: StructuralInorganic
|
||||
damageModifierSet: RGlass
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 1000
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 500
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: WindowShatter
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
ShardGlassReinforced:
|
||||
min: 1
|
||||
max: 2
|
||||
PartRodMetal:
|
||||
min: 1
|
||||
max: 2
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: Construction
|
||||
graph: Window
|
||||
node: shuttleWindow
|
||||
- type: Appearance
|
||||
- type: DamageVisuals
|
||||
thresholds: [5, 10, 20]
|
||||
damageDivisor: 28
|
||||
trackAllDamage: true
|
||||
damageOverlay:
|
||||
sprite: Structures/Windows/cracks.rsi
|
||||
- type: StaticPrice
|
||||
price: 150
|
||||
- type: ExaminableDamage
|
||||
messages: WindowMessages
|
||||
- type: InteractionPopup
|
||||
interactSuccessString: comp-window-knock
|
||||
messagePerceivedByOthers: comp-window-knock
|
||||
interactSuccessSound:
|
||||
path: /Audio/Effects/glass_knock.ogg
|
||||
- type: BlockWeather
|
||||
|
|
@ -146,6 +146,42 @@
|
|||
|
||||
- type: Tag
|
||||
id: BorgMedicalTorso
|
||||
|
||||
- type: Tag
|
||||
id: BorgPeaceHead
|
||||
|
||||
- type: Tag
|
||||
id: BorgPeaceLArm
|
||||
|
||||
- type: Tag
|
||||
id: BorgPeaceLLeg
|
||||
|
||||
- type: Tag
|
||||
id: BorgPeaceRArm
|
||||
|
||||
- type: Tag
|
||||
id: BorgPeaceRLeg
|
||||
|
||||
- type: Tag
|
||||
id: BorgPeaceTorso
|
||||
|
||||
- type: Tag
|
||||
id: BorgClownHead
|
||||
|
||||
- type: Tag
|
||||
id: BorgClownLArm
|
||||
|
||||
- type: Tag
|
||||
id: BorgClownLLeg
|
||||
|
||||
- type: Tag
|
||||
id: BorgClownRArm
|
||||
|
||||
- type: Tag
|
||||
id: BorgClownRLeg
|
||||
|
||||
- type: Tag
|
||||
id: BorgClownTorso
|
||||
|
||||
- type: Tag
|
||||
id: BorgMiningHead
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 561 B |
|
After Width: | Height: | Size: 559 B |
|
After Width: | Height: | Size: 470 B |
|
After Width: | Height: | Size: 472 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 257 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 219 B |
|
|
@ -213,6 +213,78 @@
|
|||
},
|
||||
{
|
||||
"name": "service_r_leg+o"
|
||||
},
|
||||
{
|
||||
"name": "peace_l_arm"
|
||||
},
|
||||
{
|
||||
"name": "peace_r_arm"
|
||||
},
|
||||
{
|
||||
"name": "peace_l_leg"
|
||||
},
|
||||
{
|
||||
"name": "peace_r_leg"
|
||||
},
|
||||
{
|
||||
"name": "peace_chest"
|
||||
},
|
||||
{
|
||||
"name": "peace_head"
|
||||
},
|
||||
{
|
||||
"name": "peace_head+o"
|
||||
},
|
||||
{
|
||||
"name": "peace_chest+o"
|
||||
},
|
||||
{
|
||||
"name": "peace_l_arm+o"
|
||||
},
|
||||
{
|
||||
"name": "peace_r_arm+o"
|
||||
},
|
||||
{
|
||||
"name": "peace_l_leg+o"
|
||||
},
|
||||
{
|
||||
"name": "peace_r_leg+o"
|
||||
},
|
||||
{
|
||||
"name": "clown_l_arm"
|
||||
},
|
||||
{
|
||||
"name": "clown_r_arm"
|
||||
},
|
||||
{
|
||||
"name": "clown_l_leg"
|
||||
},
|
||||
{
|
||||
"name": "clown_r_leg"
|
||||
},
|
||||
{
|
||||
"name": "clown_chest"
|
||||
},
|
||||
{
|
||||
"name": "clown_head"
|
||||
},
|
||||
{
|
||||
"name": "clown_head+o"
|
||||
},
|
||||
{
|
||||
"name": "clown_chest+o"
|
||||
},
|
||||
{
|
||||
"name": "clown_l_arm+o"
|
||||
},
|
||||
{
|
||||
"name": "clown_r_arm+o"
|
||||
},
|
||||
{
|
||||
"name": "clown_l_leg+o"
|
||||
},
|
||||
{
|
||||
"name": "clown_r_leg+o"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 380 B |
|
After Width: | Height: | Size: 379 B |
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 348 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 257 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 917 B |
|
After Width: | Height: | Size: 877 B |
|
After Width: | Height: | Size: 807 B |
|
After Width: | Height: | Size: 798 B |
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CLA",
|
||||
"copyright": "SUNRISE",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon",
|
||||
"delays": [
|
||||
[
|
||||
0.1,
|
||||
0.1,
|
||||
0.1,
|
||||
0.1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "equipped-BACKPACK",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"copyright": "Taked From Paradise Station",
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"states": [
|
||||
{
|
||||
"name": "reflector_box",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
|
@ -73,19 +73,21 @@
|
|||
- Flags: MAPPING
|
||||
Commands:
|
||||
- addmap
|
||||
- loadgrid
|
||||
- loadmap
|
||||
#Sunrise-start: loadmap|mapinit|loadgrid|tpgrid|rmmap|rmgrid for moderators
|
||||
# - loadgrid
|
||||
# - loadmap
|
||||
- pausemap
|
||||
- querymappaused
|
||||
- rmgrid
|
||||
- rmmap
|
||||
- mapinit
|
||||
# - rmgrid
|
||||
# - rmmap
|
||||
# - mapinit
|
||||
- savegrid
|
||||
- savemap
|
||||
- setambientlight
|
||||
- tpgrid
|
||||
# - tpgrid
|
||||
- gridtc
|
||||
- togglespritenetsync
|
||||
#Sunrise-end
|
||||
|
||||
- Flags: ADMIN
|
||||
Commands:
|
||||
|
|
@ -111,6 +113,14 @@
|
|||
- spawn
|
||||
- cspawn
|
||||
- delete
|
||||
#Sunrise-start: loadmap|mapinit|loadgrid for moderators
|
||||
- loadgrid
|
||||
- loadmap
|
||||
- mapinit
|
||||
- tpgrid
|
||||
- rmgrid
|
||||
- rmmap
|
||||
#Sunrise-end
|
||||
|
||||
- Flags: MODERATOR
|
||||
Commands:
|
||||
|
|
|
|||