Merge remote-tracking branch 'origin/master'

This commit is contained in:
VigersRay 2024-08-17 16:48:46 +03:00
commit 1b87be482a
47 changed files with 847 additions and 153 deletions

View file

@ -47,13 +47,13 @@ namespace Content.Client.UserInterface.Systems.Ghost.Controls
//Sunrise-Start
private string GetLocalizedName(string displayName)
{
var locationKey = $"location-{Regex.Replace(displayName, @"[^\s]", string.Empty).Replace(" ", "-").ToLower()}";
var locationKey = $"location-{Regex.Replace(displayName, @"[^a-zA-Zа-яА-Я0-9\s]", string.Empty).Replace(" ", "-").ToLower()}";
var localizedName = Loc.GetString(locationKey);
if (localizedName == locationKey)
{
if (locationKey != "location--" || locationKey != "location-")
{
Logger.Warning($"Failed to find localization with ID: {locationKey}");
Logger.Warning($"Failed to find localization with ID: {locationKey} and name: {displayName}");
}
localizedName = displayName;
}

View file

@ -0,0 +1,17 @@
using Robust.Shared.Utility;
using Robust.Client.UserInterface.RichText;
namespace Content.Client.UserInterface.RichText;
public sealed class LocTag : IMarkupTag
{
public string Name => "loc";
public string TextBefore(MarkupNode node)
{
if(node.Value.TryGetString(out string? text))
{
return Loc.GetString(text);
}
return "";
}
}

View file

@ -1,6 +1,7 @@
using System.Globalization;
using System.Linq;
using System.Text;
using Content.Server._Sunrise.Chat; //sunrise-edit
using Content.Server.Administration.Logs;
using Content.Server.Administration.Managers;
using Content.Server.Chat.Managers;
@ -150,9 +151,10 @@ public sealed partial class ChatSystem : SharedChatSystem
IConsoleShell? shell = null,
ICommonSession? player = null, string? nameOverride = null,
bool checkRadioPrefix = true,
bool ignoreActionBlocker = false)
bool ignoreActionBlocker = false,
bool isFormatted = false) // sunrise-edit
{
TrySendInGameICMessage(source, message, desiredType, hideChat ? ChatTransmitRange.HideChat : ChatTransmitRange.Normal, hideLog, shell, player, nameOverride, checkRadioPrefix, ignoreActionBlocker);
TrySendInGameICMessage(source, message, desiredType, hideChat ? ChatTransmitRange.HideChat : ChatTransmitRange.Normal, hideLog, shell, player, nameOverride, checkRadioPrefix, ignoreActionBlocker, isFormatted); //sunrise-edit
}
/// <summary>
@ -176,7 +178,8 @@ public sealed partial class ChatSystem : SharedChatSystem
ICommonSession? player = null,
string? nameOverride = null,
bool checkRadioPrefix = true,
bool ignoreActionBlocker = false
bool ignoreActionBlocker = false,
bool isFormatted = false //sunrise-edit
)
{
if (HasComp<GhostComponent>(source))
@ -231,7 +234,7 @@ public sealed partial class ChatSystem : SharedChatSystem
// Was there an emote in the message? If so, send it.
if (player != null && emoteStr != message && emoteStr != null)
{
SendEntityEmote(source, emoteStr, range, nameOverride, ignoreActionBlocker);
SendEntityEmote(source, emoteStr, range, nameOverride, ignoreActionBlocker, isFormatted); //sunrise-edit
}
// This can happen if the entire string is sanitized out.
@ -243,7 +246,7 @@ public sealed partial class ChatSystem : SharedChatSystem
{
if (TryProccessRadioMessage(source, message, out var modMessage, out var channel))
{
SendEntityWhisper(source, modMessage, range, channel, nameOverride, hideLog, ignoreActionBlocker);
SendEntityWhisper(source, modMessage, range, channel, nameOverride, hideLog, ignoreActionBlocker, isFormatted); //sunrise-edit
return;
}
}
@ -263,13 +266,13 @@ public sealed partial class ChatSystem : SharedChatSystem
switch (desiredType)
{
case InGameICChatType.Speak:
SendEntitySpeak(source, message, range, nameOverride, hideLog, ignoreActionBlocker);
SendEntitySpeak(source, message, range, nameOverride, hideLog, ignoreActionBlocker, isFormatted); //sunrise-edit-hg
break;
case InGameICChatType.Whisper:
SendEntityWhisper(source, message, range, null, nameOverride, hideLog, ignoreActionBlocker);
SendEntityWhisper(source, message, range, null, nameOverride, hideLog, ignoreActionBlocker, isFormatted); // sunrise-edit
break;
case InGameICChatType.Emote:
SendEntityEmote(source, message, range, nameOverride, hideLog: hideLog, ignoreActionBlocker: ignoreActionBlocker);
SendEntityEmote(source, message, range, nameOverride, hideLog: hideLog, ignoreActionBlocker: ignoreActionBlocker, isFormatted: isFormatted); //sunrise-edit
break;
}
}
@ -523,7 +526,8 @@ public sealed partial class ChatSystem : SharedChatSystem
ChatTransmitRange range,
string? nameOverride,
bool hideLog = false,
bool ignoreActionBlocker = false
bool ignoreActionBlocker = false,
bool isFormatted = false //sunrise-edit
)
{
if (!_actionBlocker.CanSpeak(source) && !ignoreActionBlocker)
@ -553,13 +557,13 @@ public sealed partial class ChatSystem : SharedChatSystem
}
name = FormattedMessage.EscapeText(name);
if (HasComp<CanFormatMessagesComponent>(source)) isFormatted = true; //sunrise-edit
var wrappedMessage = Loc.GetString(speech.Bold ? "chat-manager-entity-say-bold-wrap-message" : "chat-manager-entity-say-wrap-message",
("entityName", name),
("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))),
("fontType", speech.FontId),
("fontSize", speech.FontSize),
("message", FormattedMessage.EscapeText(message)));
("message", isFormatted ? message : FormattedMessage.EscapeText(message))); //sunrise-edit
SendInVoiceRange(ChatChannel.Local, message, wrappedMessage, source, range);
@ -596,7 +600,8 @@ public sealed partial class ChatSystem : SharedChatSystem
RadioChannelPrototype? channel,
string? nameOverride,
bool hideLog = false,
bool ignoreActionBlocker = false
bool ignoreActionBlocker = false,
bool isFormatted = false //sunrise-edit
)
{
if (!_actionBlocker.CanSpeak(source) && !ignoreActionBlocker)
@ -623,15 +628,15 @@ public sealed partial class ChatSystem : SharedChatSystem
name = nameEv.Name;
}
name = FormattedMessage.EscapeText(name);
if (HasComp<CanFormatMessagesComponent>(source)) isFormatted = true; //sunrise-edit
var wrappedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message",
("entityName", name), ("message", FormattedMessage.EscapeText(message)));
("entityName", name), ("message", isFormatted ? message : FormattedMessage.EscapeText(message))); //sunrise-edit
var wrappedobfuscatedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message",
("entityName", nameIdentity), ("message", FormattedMessage.EscapeText(obfuscatedMessage)));
("entityName", nameIdentity), ("message", isFormatted ? obfuscatedMessage : FormattedMessage.EscapeText(obfuscatedMessage))); //sunrise-edit
var wrappedUnknownMessage = Loc.GetString("chat-manager-entity-whisper-unknown-wrap-message",
("message", FormattedMessage.EscapeText(obfuscatedMessage)));
("message", isFormatted ? obfuscatedMessage : FormattedMessage.EscapeText(obfuscatedMessage))); //sunrise-edit
foreach (var (session, data) in GetRecipients(source, WhisperMuffledRange))
@ -686,7 +691,8 @@ public sealed partial class ChatSystem : SharedChatSystem
bool hideLog = false,
bool checkEmote = true,
bool ignoreActionBlocker = false,
NetUserId? author = null
NetUserId? author = null,
bool isFormatted = false //sunrise-edit
)
{
if (!_actionBlocker.CanEmote(source) && !ignoreActionBlocker)
@ -695,16 +701,16 @@ public sealed partial class ChatSystem : SharedChatSystem
// get the entity's apparent name (if no override provided).
var ent = Identity.Entity(source, EntityManager);
string name = FormattedMessage.EscapeText(nameOverride ?? Name(ent));
if (HasComp<CanFormatMessagesComponent>(source)) isFormatted = true; //sunrise-edit
// Emotes use Identity.Name, since it doesn't actually involve your voice at all.
var wrappedMessage = Loc.GetString("chat-manager-entity-me-wrap-message",
("entityName", name),
("entityName", isFormatted ? "" : name), //sunrise-edit
("entity", ent),
("message", FormattedMessage.RemoveMarkup(action)));
("message", isFormatted ? action : FormattedMessage.RemoveMarkup(action))); //sunrise-edit
if (checkEmote)
TryEmoteChatInput(source, action);
SendInVoiceRange(ChatChannel.Emotes, action, wrappedMessage, source, range, author);
SendInVoiceRange(ChatChannel.Emotes, action, wrappedMessage, source, isFormatted ? ChatTransmitRange.HideChat : range, author); //sunrise-edit
if (!hideLog)
if (name != Name(source))
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Emote from {ToPrettyString(source):user} as {name}: {action}");

View file

@ -1,6 +1,7 @@
using System.Linq;
using Content.Server.Administration;
using Content.Server.Chat.Managers;
using Content.Server.Chat.Systems;
using Content.Server.GameTicking;
using Content.Server.Radio.Components;
using Content.Server.Roles;
@ -38,7 +39,9 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem
[Dependency] private readonly SharedStunSystem _stunSystem = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly SharedRoleSystem _roles = default!;
//sunrise-edit-start
[Dependency] private readonly ChatSystem _chatSystem = default!;
//sunrise-edit-end
/// <inheritdoc/>
public override void Initialize()
{
@ -165,6 +168,9 @@ public sealed class SiliconLawSystem : SharedSiliconLawSystem
EnsureEmaggedRole(uid, component);
_stunSystem.TryParalyze(uid, component.StunTime, true);
//sunrise-edit-start
_chatSystem.TrySendInGameICMessage(uid, Loc.GetString("borg-emagged-message"), InGameICChatType.Emote, false, isFormatted: true);
//sunrise-edit-end
if (!_mind.TryGetMind(uid, out var mindId, out _))
return;

View file

@ -0,0 +1,2 @@
namespace Content.Server._Sunrise.Chat;
[RegisterComponent] public sealed partial class CanFormatMessagesComponent : Component {}

View file

@ -0,0 +1,41 @@
using Content.Server.Chat.Systems;
using Robust.Shared.Enums;
namespace Content.Server._Sunrise.Chat;
/// <summary>
/// Makes this entity periodically advertise by speaking a randomly selected
/// message from a specified dataset into local chat.
/// </summary>
[RegisterComponent, Access(typeof(SayWithIntervalSystem))]
public sealed partial class SayWithIntervalComponent : Component
{
/// <summary>
/// Minimum time in seconds to wait before saying a new ad, in seconds. Has to be larger than or equal to 1.
/// </summary>
[DataField]
public int MinimumWait { get; private set; } = 20;
/// <summary>
/// Maximum time in seconds to wait before saying a new ad, in seconds. Has to be larger than or equal
/// to <see cref="MinimumWait"/>
/// </summary>
[DataField]
public int MaximumWait { get; private set; } = 40;
/// <summary>
/// The identifier for the advertisements dataset prototype.
/// </summary>
[DataField] public string Message = "123";
[DataField] public string chatType = "speak";
[DataField] public bool Format = false;
/// <summary>
/// The next time an advertisement will be said.
/// </summary>
[DataField]
public TimeSpan NextMessageTime { get; set; } = TimeSpan.Zero;
}

View file

@ -0,0 +1,90 @@
using Content.Server.Advertise.Components;
using Content.Server.Chat.Systems;
using Content.Server.Power.Components;
using Content.Shared.VendingMachines;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Server._Sunrise.Chat;
public sealed class SayWithIntervalSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly ChatSystem _chat = default!;
/// <summary>
/// The maximum amount of time between checking if advertisements should be displayed
/// </summary>
private readonly TimeSpan _maximumNextCheckDuration = TimeSpan.FromMilliseconds(20);
/// <summary>
/// The next time the game will check if advertisements should be displayed
/// </summary>
private TimeSpan _nextCheckTime = TimeSpan.MinValue;
public override void Initialize()
{
SubscribeLocalEvent<SayWithIntervalComponent, MapInitEvent>(OnMapInit);
_nextCheckTime = TimeSpan.MinValue;
}
private void OnMapInit(EntityUid uid, SayWithIntervalComponent advert, MapInitEvent args)
{
RandomizeNextAdvertTime(advert);
_nextCheckTime = MathHelper.Min(advert.NextMessageTime, _nextCheckTime);
}
private void RandomizeNextAdvertTime(SayWithIntervalComponent advert)
{
var minDuration = Math.Max(1, advert.MinimumWait);
var maxDuration = Math.Max(minDuration, advert.MaximumWait);
var waitDuration = TimeSpan.FromSeconds(_random.Next(minDuration, maxDuration));
advert.NextMessageTime = _gameTiming.CurTime + waitDuration;
}
public void SayAdvertisement(EntityUid uid, SayWithIntervalComponent? advert = null)
{
if (!Resolve(uid, ref advert))
return;
InGameICChatType type = InGameICChatType.Speak;
switch(advert.chatType)
{
case "whisper": type = InGameICChatType.Whisper; break;
case "emote": type = InGameICChatType.Emote; break;
case "collectiveMind": type = InGameICChatType.CollectiveMind; break;
default: type = InGameICChatType.Speak; break;
} // Костыль, но InGameICChatType не указывается ингейм
_chat.TrySendInGameICMessage(uid, advert.Message, type, false, isFormatted: advert.Format);
}
public override void Update(float frameTime)
{
var currentGameTime = _gameTiming.CurTime;
if (_nextCheckTime > currentGameTime)
return;
// _nextCheckTime starts at TimeSpan.MinValue, so this has to SET the value, not just increment it.
_nextCheckTime = currentGameTime + _maximumNextCheckDuration;
var query = EntityQueryEnumerator<SayWithIntervalComponent>();
while (query.MoveNext(out var uid, out var advert))
{
if (currentGameTime > advert.NextMessageTime)
{
SayAdvertisement(uid, advert);
// The timer is always refreshed when it expires, to prevent mass advertising (ex: all the vending machines have no power, and get it back at the same time).
RandomizeNextAdvertTime(advert);
}
_nextCheckTime = MathHelper.Min(advert.NextMessageTime, _nextCheckTime);
}
}
}

View file

@ -2627,3 +2627,30 @@
type: Fix
id: 192
time: '2024-08-15T23:36:10.639849+00:00'
- author: Rinary
changes:
- message: "\u0418\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D \u043F\u0435\u0440\
\u0435\u0432\u043E\u0434 \u0432\u0430\u0440\u043F \u0442\u043E\u0447\u0435\u043A"
type: Fix
id: 193
time: '2024-08-17T13:44:01.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/291
- author: Focstor
changes:
- message: "\u0411\u043E\u0440\u0433\u0438 \u0442\u0435\u043F\u0435\u0440\u044C\
\ \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0432\u0438\u0434\u0435\u0442\
\u044C \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u043C\u0430\u0439\u043D\u0448\
\u0438\u043B\u0434\u0430."
type: Fix
id: 194
time: '2024-08-17T13:43:08.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/293
- author: Rinary
changes:
- message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0431\u043E\u043B\
\u044C\u0448\u044B\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u0438\
."
type: Add
id: 195
time: '2024-08-17T13:42:48.0000000+00:00'
url: https://github.com/space-sunrise/space-station-14/pull/294

View file

@ -0,0 +1,2 @@
ent-BigThruster = большой ракетный двигатель
.desc = { ent-Thruster }

View file

@ -0,0 +1 @@
borg-emagged-message = [font="Monospace"][color=green][scramble rate=35 length=15 chars="10 "][/color][/font]

View file

@ -0,0 +1,4 @@
ent-DrinkFourteenLokoPlusCan = банка Фоуртин Локо плюс
.desc = Ремейк от Мэйсона Миллера популярного напитка Фоуртин Локо, но также как и в оригинале, пожалуйста пейте ответственно.
ent-DrinkLukin = банка напитка Лукина
.desc = Не очень известный алкогольный напиток Лукина. Он обладает лечебными свойствами в деле телесных повреждений, но не стоит пить слишком много...

View file

@ -0,0 +1,4 @@
ent-FoodSnackMaysonEnergy = энергетический батончик Мэйсона
.desc = Энергетический батончик состоящий из натуральных химикатов!
ent-FoodSnackMaysonEnergyBar = энергетический батончик Мэйсона
.desc = Энергетический батончик состоящий из натуральных химикатов!

View file

@ -0,0 +1,2 @@
reagent-name-fourteen-loko-plus = фоуртин локо плюс
reagent-desc-fourteen-loko-plus = Сильно переработанная жидкая субстанция с элиментами стимулирующих веществ, едва ли соответствующая межгалактическим стандартам безопасности для безалкогольного напитка.

View file

@ -28,6 +28,7 @@ fax-label-captainoffice = Кабинет капитана
fax-label-captainsoffice = Кабинет капитана
fax-label-captainsquarters = Кабинет капитана
fax-label-centralcommand = Центральное коммандование
fax-label-centcomm = Центральное коммандование
fax-label-hop = Глава персонала
fax-label-hopoffice = Глава персонала
fax-label-hopfax = Глава персонала

View file

@ -191584,6 +191584,28 @@ entities:
- type: Transform
pos: 41.438423,17.514713
parent: 2
- proto: MagazineM16A4
entities:
- uid: 27364
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- uid: 27365
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- uid: 27366
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- uid: 27367
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- proto: MagazinePistol
entities:
- uid: 27352
@ -191646,28 +191668,6 @@ entities:
- type: Transform
pos: 59.5,9.5
parent: 2
- proto: MagazinePistolSubMachineGunTopMounted
entities:
- uid: 27364
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- uid: 27365
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- uid: 27366
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- uid: 27367
components:
- type: Transform
pos: 70.38411,8.32258
parent: 2
- proto: MagicDiceBag
entities:
- uid: 27368
@ -234353,6 +234353,13 @@ entities:
- type: Transform
pos: 37.5,2.5
parent: 2
- proto: VendingMachineMayson
entities:
- uid: 452
components:
- type: Transform
pos: 41.5,-12.5
parent: 2
- proto: VendingMachineMedical
entities:
- uid: 34227
@ -260782,6 +260789,13 @@ entities:
- type: Transform
pos: -27.5,-50.5
parent: 2
- proto: WeaponAKMSRifle
entities:
- uid: 39292
components:
- type: Transform
pos: 40.57007,17.532423
parent: 2
- proto: WeaponCapacitorRecharger
entities:
- uid: 39244
@ -261103,7 +261117,44 @@ entities:
rot: 3.141592653589793 rad
pos: -45.5,8.5
parent: 2
- proto: WeaponDisabler
- proto: WeaponDisablerPractice
entities:
- uid: 39269
components:
- type: Transform
pos: 58.486435,16.114597
parent: 2
- uid: 39270
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 58.59685,15.98753
parent: 2
- proto: WeaponEarthGovLaserCarbine
entities:
- uid: 39272
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- uid: 39273
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- uid: 39274
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- proto: WeaponEarthGovLaserSniper
entities:
- uid: 39271
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- proto: WeaponEnergyGunMini
entities:
- uid: 39266
components:
@ -261121,43 +261172,6 @@ entities:
- type: Transform
pos: -45.51563,8.636579
parent: 2
- proto: WeaponDisablerPractice
entities:
- uid: 39269
components:
- type: Transform
pos: 58.486435,16.114597
parent: 2
- uid: 39270
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 58.59685,15.98753
parent: 2
- proto: WeaponLaserCannon
entities:
- uid: 39271
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- proto: WeaponLaserCarbine
entities:
- uid: 39272
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- uid: 39273
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- uid: 39274
components:
- type: Transform
pos: 67.5,9.5
parent: 2
- proto: WeaponLaserCarbinePractice
entities:
- uid: 39275
@ -261175,14 +261189,7 @@ entities:
- type: Transform
pos: 58.470814,18.520847
parent: 2
- proto: WeaponPistolFlintlock
entities:
- uid: 39278
components:
- type: Transform
pos: 23.562122,59.322018
parent: 2
- proto: WeaponPistolMk58
- proto: WeaponPistolACP14
entities:
- uid: 39279
components:
@ -261244,21 +261251,28 @@ entities:
- type: Transform
pos: 58.475845,17.747644
parent: 2
- proto: WeaponRevolverMateba
- proto: WeaponPistolFlintlock
entities:
- uid: 39278
components:
- type: Transform
pos: 23.562122,59.322018
parent: 2
- proto: WeaponRevolverMatebaNew
entities:
- uid: 39291
components:
- type: Transform
pos: 36.47151,18.549223
parent: 2
- proto: WeaponRifleAk
- proto: WeaponRifleBR64
entities:
- uid: 39292
- uid: 39304
components:
- type: Transform
pos: 40.57007,17.532423
pos: 70.4,10.5
parent: 2
- proto: WeaponRifleLecter
- proto: WeaponRifleFamas
entities:
- uid: 39293
components:
@ -261275,7 +261289,29 @@ entities:
- type: Transform
pos: 65.497795,9.494064
parent: 2
- proto: WeaponRifleM90GrenadeLauncher
- proto: WeaponRifleM16A4
entities:
- uid: 39306
components:
- type: Transform
pos: 70.530876,8.579602
parent: 2
- uid: 39307
components:
- type: Transform
pos: 67.483315,7.629155
parent: 2
- uid: 39308
components:
- type: Transform
pos: 67.46212,7.55103
parent: 2
- uid: 39309
components:
- type: Transform
pos: 70.530876,8.579602
parent: 2
- proto: WeaponRifleM28
entities:
- uid: 39296
components:
@ -261313,7 +261349,7 @@ entities:
- type: Transform
pos: -1.6446036,36.6353
parent: 2
- proto: WeaponShotgunEnforcer
- proto: WeaponShotgunSPAS12
entities:
- uid: 14920
components:
@ -261322,7 +261358,7 @@ entities:
- type: Physics
canCollide: False
- type: InsideEntityStorage
- proto: WeaponShotgunKammerer
- proto: WeaponShotgunTrenchgun4034
entities:
- uid: 39301
components:
@ -261339,42 +261375,13 @@ entities:
- type: Transform
pos: 65.5,8.5
parent: 2
- proto: WeaponSniperHristov
entities:
- uid: 39304
components:
- type: Transform
pos: 70.4,10.5
parent: 2
- proto: WeaponSubMachineGunDrozd
- proto: WeaponSubMachineGunMP7
entities:
- uid: 39305
components:
- type: Transform
pos: 65.5,7.5
parent: 2
- proto: WeaponSubMachineGunWt550
entities:
- uid: 39306
components:
- type: Transform
pos: 70.530876,8.579602
parent: 2
- uid: 39307
components:
- type: Transform
pos: 67.483315,7.629155
parent: 2
- uid: 39308
components:
- type: Transform
pos: 67.46212,7.55103
parent: 2
- uid: 39309
components:
- type: Transform
pos: 70.530876,8.579602
parent: 2
- proto: WeaponTurretHostile
entities:
- uid: 39310

View file

@ -98426,7 +98426,7 @@ entities:
- type: Transform
pos: 99.5,21.5
parent: 13329
- proto: CryogenicSleepUnitSpawner
- proto: CryogenicSleepUnitSpawnerLateJoin
entities:
- uid: 27927
components:
@ -98434,8 +98434,6 @@ entities:
rot: 3.141592653589793 rad
pos: 97.5,21.5
parent: 13329
- proto: CryogenicSleepUnitSpawnerLateJoin
entities:
- uid: 27929
components:
- type: Transform
@ -196423,6 +196421,20 @@ entities:
- type: Transform
pos: 33.5,42.5
parent: 13329
- type: ContainerContainer
containers:
machine_board: !type:Container
showEnts: False
occludes: True
ents: []
machine_parts: !type:Container
showEnts: False
occludes: True
ents: []
mixer: !type:ContainerSlot
showEnts: False
occludes: True
ent: null
- proto: VendingBarDrobe
entities:
- uid: 1186
@ -196853,6 +196865,13 @@ entities:
- type: Transform
pos: 72.5,36.5
parent: 13329
- proto: VendingMachineMayson
entities:
- uid: 33992
components:
- type: Transform
pos: 63.5,5.5
parent: 13329
- proto: VendingMachineMedical
entities:
- uid: 10261
@ -220701,6 +220720,14 @@ entities:
- type: Transform
pos: 93.5,-38.5
parent: 13329
- proto: WeaponAKMSRifle
entities:
- uid: 10496
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 35.367424,20.732126
parent: 13329
- proto: WeaponCapacitorRecharger
entities:
- uid: 2216
@ -220905,14 +220932,6 @@ entities:
- type: Transform
pos: 17.56414,13.463523
parent: 13329
- proto: WeaponAKMSRifle
entities:
- uid: 10496
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 35.367424,20.732126
parent: 13329
- proto: WeaponRifleFamas
entities:
- uid: 10666
@ -220930,6 +220949,14 @@ entities:
- type: Transform
pos: 19.43914,12.321453
parent: 13329
- proto: WeaponShotgunHandmade
entities:
- uid: 5418
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -39.140755,78.51152
parent: 13329
- proto: WeaponShotgunSPAS12
entities:
- uid: 10632
@ -220947,14 +220974,6 @@ entities:
- type: Transform
pos: 16.616808,11.387669
parent: 13329
- proto: WeaponShotgunHandmade
entities:
- uid: 5418
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -39.140755,78.51152
parent: 13329
- proto: WeaponSubMachineGunMP7
entities:
- uid: 1348

View file

@ -17,7 +17,7 @@
visible: false
- type: FlashImmunity
- type: ShowJobIcons
- type: ShowMindShieldIcons
# - type: ShowMindShieldIcons Sunrise-Edit
- type: ShowCriminalRecordIcons
- type: BorgCuffed
- type: BorgTransponder
@ -112,7 +112,7 @@
- type: BorgCuffed
- type: FlashImmunity
- type: ShowJobIcons
- type: ShowMindShieldIcons
# - type: ShowMindShieldIcons Sunrise-Edit
- type: ShowCriminalRecordIcons
- type: BorgTransponder
sprite:
@ -205,7 +205,7 @@
map: [ "light" ]
visible: false
- type: ShowJobIcons
- type: ShowMindShieldIcons
# - type: ShowMindShieldIcons Sunrise-Edit
- type: ShowCriminalRecordIcons
- type: SiliconLawProvider
laws: PeaceStatic
@ -461,7 +461,7 @@
volume: -15
- type: FlashImmunity
- type: ShowJobIcons
- type: ShowMindShieldIcons
# - type: ShowMindShieldIcons Sunrise-Edit
- type: ShowCriminalRecordIcons
- type: GhostRole
makeSentient: true

View file

@ -0,0 +1,37 @@
- type: entity
parent: DrinkCanBaseFull
id: DrinkFourteenLokoPlusCan
name: Fourteen Loko Plus can
description: A remake of the popular drink Fourteen Loko. But just like the original, drink responsibly.
components:
- type: SolutionContainerManager
solutions:
drink:
maxVol: 30
reagents:
- ReagentId: FourteenLokoPlus
Quantity: 30
- type: Sprite
sprite: _Sunrise/Objects/Consumable/Drinks/fourteen_loko_plus.rsi
- type: Item
sprite: _Sunrise/Objects/Consumable/Drinks/fourteen_loko_plus.rsi
- type: entity
parent: DrinkCanBaseFull
id: DrinkLukin
name: Lukin's drink
description: Brother Lukin's not very famous alcoholic drink. It has medicinal properties to heal bodily harm, but don't drink too much.
components:
- type: SolutionContainerManager
solutions:
drink:
maxVol: 30
reagents:
- ReagentId: Aloe
Quantity: 16
- ReagentId: Bicaridine
Quantity: 14
- type: Sprite
sprite: _Sunrise/Objects/Consumable/Drinks/lukins_drink.rsi
- type: Item
sprite: _Sunrise/Objects/Consumable/Drinks/lukins_drink.rsi

View file

@ -0,0 +1,51 @@
- type: entity
name: menergy bar
parent: FoodSnackBase
id: FoodSnackMaysonEnergy
description: Mayson's energy bar
components:
- type: Sprite
sprite: _Sunrise/Objects/Consumable/Food/snacks.rsi
state: menergybar
- type: Item
- type: SpawnItemsOnUse
items:
- id: FoodPacketMaysonEnergyTrash
- id: FoodSnackMaysonEnergyBar
sound:
path: /Audio/Effects/unwrap.ogg
- type: entity
name: menergy bar
parent: FoodSnackBase
id: FoodSnackMaysonEnergyBar
description: Mayson's energy bar
components:
- type: FlavorProfile
flavors:
- chocolate
- nutty
- sweet
- type: Sprite
sprite: _Sunrise/Objects/Consumable/Food/snacks.rsi
state: menergybar-open
- type: Item
- type: SolutionContainerManager
solutions:
food:
maxVol: 30
reagents:
- ReagentId: Nutriment
Quantity: 10
- ReagentId: Epinephrine
Quantity: 10
- type: entity
categories: [ HideSpawnMenu ]
parent: FoodPacketTrash
id: FoodPacketMaysonEnergyTrash
name: energybar wrapper
components:
- type: Sprite
sprite: _Sunrise/Objects/Consumable/Food/snacks.rsi
state: menergybar-trash

View file

@ -27,3 +27,38 @@
shader: unshaded
- state: panel
map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: entity
parent: VendingMachine
id: VendingMachineMayson
name: MaysonMil & YanLu corp
description: A vending machine containing products of the company "MaysonMil & YanLu".
components:
- type: VendingMachine
pack: MaysonYanInventory
dispenseOnHitChance: 0.25
dispenseOnHitThreshold: 2
offState: off
brokenState: broken
normalState: normal-unshaded
initialStockQuality: 0.33
- type: Advertise
pack: DiscountDansAds
- type: SpeakOnUIClosed
pack: DiscountDansGoodbyes
- type: Speech
- type: Sprite
sprite: _Sunrise/Structures/Machines/VendingMachines/mayson.rsi
layers:
- state: "off"
map: ["enum.VendingMachineVisualLayers.Base"]
- state: "off"
map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
shader: unshaded
- texture: _Sunrise/Structures/Machines/VendingMachines/maintenance_panel.png
map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: PointLight
radius: 1.5
energy: 1.6
color: "#6148c7"
- type: PlayerCountDependentStock # Sunrise-vend

View file

@ -0,0 +1,41 @@
- type: entity
id: BigThruster
name: big thruster
parent: [ BaseThruster ]
components:
- type: Anchorable
flags:
- Unanchorable
- type: Sprite
sprite: _Sunrise/Structures/Shuttles/big_thruster.rsi
layers:
- state: base
map: ["enum.ThrusterVisualLayers.Base"]
offset: 0.5,0.5
- state: thrust
map: ["enum.ThrusterVisualLayers.ThrustOn"]
shader: unshaded
visible: false
offset: 0.5,0.5
- state: thrust_burn_unshaded
map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"]
shader: unshaded
visible: false
offset: 0.5, 2.5
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.9,-0.9,0.9,0.9"
density: 60
mask:
- MachineMask
layer:
- MachineLayer
- type: Thruster
thrust: 400
requireSpace: false
damage:
types:
Heat: 80

View file

@ -0,0 +1,24 @@
- type: reagent
id: FourteenLokoPlus
name: reagent-name-fourteen-loko-plus
parent: BaseSoda
desc: reagent-desc-fourteen-loko-plus
physicalDesc: reagent-physical-desc-fizzy
flavor: fourteenlokosodaplus
color: "#fcf6de"
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
Narcotic:
effects:
- !type:MovespeedModifier
walkSpeedModifier: 1.2
sprintSpeedModifier: 1.2
Poison:
effects:
- !type:HealthChange
damage:
types:
Poison: 1.5

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

View file

@ -0,0 +1,53 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Sprite made by discord:asr_aa",
"states": [
{
"name": "icon"
},
{
"name": "icon_open"
},
{
"name": "inhand-right",
"directions": 4,
"delays": [
[
1
],
[
1
],
[
1
],
[
1
]
]
},
{
"name": "inhand-left",
"directions": 4,
"delays": [
[
1
],
[
1
],
[
1
],
[
1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,53 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Modified from https://github.com/discordia-space/CEV-Eris/raw/9c980cb9bc84d07b1c210c5447798af525185f80/icons/obj/food.dmi, by asr_aa",
"states": [
{
"name": "icon"
},
{
"name": "icon_open"
},
{
"name": "inhand-right",
"directions": 4,
"delays": [
[
1
],
[
1
],
[
1
],
[
1
]
]
},
{
"name": "inhand-left",
"directions": 4,
"delays": [
[
1
],
[
1
],
[
1
],
[
1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

View file

@ -0,0 +1,20 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24,",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "menergybar"
},
{
"name": "menergybar-open"
},
{
"name": "menergybar-trash"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 855 B

View file

@ -0,0 +1,52 @@
{
"version": 1,
"license": "CC-BY-SA-4.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/1516a728931b4985c1e86f0c5995a5aa1554a1ad and modified by potato1234x",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "broken"
},
{
"name": "deny-unshaded",
"delays": [
[
0.1,
0.1,
0.1
]
]
},
{
"name": "eject-unshaded",
"delays": [
[
0.1,
0.1,
0.8,
0.1,
0.1
]
]
},
{
"name": "normal-unshaded",
"delays": [
[
4,
0.1,
0.6
]
]
},
{
"name": "off"
},
{
"name": "panel"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -0,0 +1,99 @@
{
"version": 1,
"size": {
"x": 64,
"y": 64
},
"copyright": "SUNRISE",
"license": "CLA",
"states": [
{
"name": "base",
"directions": 4
},
{
"name": "thrust",
"directions": 4,
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "thrust_burn_unshaded",
"directions": 4,
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1,
0.1,
0.1
],
[
0.1,
0.1,
0.1,
0.1,
0.1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB