Skip to content

Commit

Permalink
Merge branch 'master' into ADTSlugCat
Browse files Browse the repository at this point in the history
  • Loading branch information
Schrodinger71 authored Sep 25, 2024
2 parents 364ffb5 + 06834f7 commit 48edaab
Show file tree
Hide file tree
Showing 218 changed files with 50,172 additions and 46,978 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,10 @@ public void ProcessChatMessage(ChatMessage msg, bool speechBubble = true)
{
foreach (var locString in locStrings)
{
msg.WrappedMessage = SharedChatSystem.InjectTagAroundString(msg, Loc.GetString(locString), "color", color);
var message = Loc.GetString(locString);
if (SharedChatSystem.MessageTextContains(msg, message)) {
msg.WrappedMessage = SharedChatSystem.InjectTagAroundString(msg, message, "color", color);
}
}
}
}
Expand Down
113 changes: 113 additions & 0 deletions Content.Server/ADT/DocumentPrinter/DocumentPrinterSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
using Content.Server.GameTicking;
using Content.Shared.Containers.ItemSlots;
using Content.Shared.Inventory;
using Content.Shared.Paper;
using Content.Shared.PDA;
using Content.Shared.Verbs;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Timing;

namespace Content.Shared.DocumentPrinter;
public sealed class DocumentPrinterSystem : EntitySystem
{
const int TIME_YEAR_SPACE_STATION_ADT = 544;

[Dependency] private readonly GameTicker _ticker = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<DocumentPrinterComponent, PrintingDocumentEvent>(OnPrinting);
SubscribeLocalEvent<DocumentPrinterComponent, GetVerbsEvent<AlternativeVerb>>(AddVerbOnOff);
}

public void AddVerbOnOff(EntityUid uid, DocumentPrinterComponent component, GetVerbsEvent<AlternativeVerb> args)
{
AlternativeVerb verb = new();
if (component.IsOnAutocomplite)
{
verb.Text = "Выкл.";
verb.Act = () =>
{
component.IsOnAutocomplite = false;
_audioSystem.PlayPvs(component.SwitchSound, uid);
};
}
else
{
verb.Text = "Вкл.";
verb.Act = () =>
{
component.IsOnAutocomplite = true;
_audioSystem.PlayPvs(component.SwitchSound, uid);
};
}
args.Verbs.Add(verb);
}

public void OnPrinting(EntityUid uid, DocumentPrinterComponent component, PrintingDocumentEvent args)
{
//coef for YEAR 544
if (!TryComp<PaperComponent>(args.Paper, out var paperComponent)) return;
if (!TryComp<InventoryComponent>(args.Actor, out var inventoryComponent)) return;

string text = paperComponent.Content;

if (component.IsOnAutocomplite)
{
MetaDataComponent? meta_id = null;
PdaComponent? pda = null;
foreach (var slot in inventoryComponent.Containers)
{
if (slot.ID == "id")//for checking only PDA
{
TryComp(slot.ContainedEntity, out pda);
TryComp<ItemSlotsComponent>(slot.ContainedEntity, out var itemslots);
if (itemslots is not null)
TryComp(itemslots.Slots["PDA-id"].Item, out meta_id);
break;
}
}
DateTime time = DateTime.UtcNow.AddYears(TIME_YEAR_SPACE_STATION_ADT).AddHours(3);
text = text.Replace("$time$", $"{_gameTiming.CurTime.Subtract(_ticker.RoundStartTimeSpan).ToString("hh\\:mm\\:ss")} | {(time.Day < 10 ? $"0{time.Day}" : time.Day)}.{(time.Month < 10 ? $"0{time.Month}" : time.Month)}.{time.Year}");
if (pda?.StationName is not null)
{
text = text.Replace("Station XX-000", pda.StationName);
}
if (meta_id is null)
{
text = text.Replace("$name$", "");
text = text.Replace("$job$", "");
}
else
{
int startIndex = meta_id.EntityName.IndexOf("("); int endIndex = meta_id.EntityName.IndexOf(")");
if (startIndex.Equals(-1) || startIndex.Equals(-1))
{
text = text.Replace("$name$", "");
text = text.Replace("$job$", "");
}
else
{
string id_card_word = "ID карта ";
text = text.Replace("$name$", meta_id.EntityName.Replace(id_card_word, "").Substring(0, startIndex - id_card_word.Length - 2));
text = text.Replace("$job$", meta_id.EntityName.Substring(startIndex + 1, endIndex - startIndex - 1));
}
}
paperComponent.Content = text;
// if (!TryComp<MetaDataComponent>(args.Actor, out var comp)) return; // was for test, STFU JUST LEAVE IT HERE
}
else
{
text = text.Replace("$time$", "");
text = text.Replace("$name$", "");
text = text.Replace("$job$", "");
paperComponent.Content = text;
}
}
}

//(C) Korol_Charodey
21 changes: 19 additions & 2 deletions Content.Server/Lathe/LatheSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
using Robust.Shared.Audio.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
using Content.Shared.DocumentPrinter;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace Content.Server.Lathe
{
Expand Down Expand Up @@ -178,7 +180,7 @@ public bool TryAddToQueue(EntityUid uid, LatheRecipePrototype recipe, LatheCompo
foreach (var (mat, amount) in recipe.Materials)
{
var adjustedAmount = recipe.ApplyMaterialDiscount
? (int) (-amount * component.MaterialUseMultiplier)
? (int)(-amount * component.MaterialUseMultiplier)
: -amount;

_materialStorage.TryChangeMaterialAmount(uid, mat, adjustedAmount);
Expand Down Expand Up @@ -223,12 +225,20 @@ public void FinishProducing(EntityUid uid, LatheComponent? comp = null, LathePro
{
if (!Resolve(uid, ref comp, ref prodComp, false))
return;

if (comp.CurrentRecipe != null)
{
if (comp.CurrentRecipe.Result is { } resultProto)
{
var result = Spawn(resultProto, Transform(uid).Coordinates);
//ADT tweak start
if (TryComp<DocumentPrinterComponent>(uid, out var printerComponent))
{
var tuple = printerComponent.Queue.First();
if (tuple.Item2.Result.Equals(resultProto))
RaiseLocalEvent(uid, new PrintingDocumentEvent(result, tuple.Item1));
printerComponent.Queue.Remove(tuple);
}
//ADT tweak end
_stack.TryMergeToContacts(result);
}

Expand Down Expand Up @@ -388,6 +398,13 @@ private void OnLatheQueueRecipeMessage(EntityUid uid, LatheComponent component,
}
}
TryStartProducing(uid, component);
//ADT Tweak start
if (TryComp<DocumentPrinterComponent>(uid, out var comp))
{
if (recipe is not null)
comp.Queue.Add((args.Actor, recipe));
}
//ADT tweak end
UpdateUserInterfaceState(uid, component);
}

Expand Down
25 changes: 25 additions & 0 deletions Content.Shared/ADT/DocumentPrinter/DocumentPrinterComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Content.Shared.Research.Prototypes;
using Robust.Shared.Audio;
using Robust.Shared.GameStates;

namespace Content.Shared.DocumentPrinter;

[RegisterComponent, NetworkedComponent]
public sealed partial class DocumentPrinterComponent : Component
{
public List<(EntityUid, LatheRecipePrototype)> Queue { get; set; } = new();
public SoundSpecifier SwitchSound = new SoundPathSpecifier("/Audio/Machines/machine_switch.ogg");
public bool IsOnAutocomplite = true;
}

public sealed class PrintingDocumentEvent : EntityEventArgs
{
public EntityUid Paper { get; private set; }
public EntityUid Actor { get; private set; }
public PrintingDocumentEvent(EntityUid paper, EntityUid actor)
{
Paper = paper;
Actor = actor;
}
}
//(C) Korol_Charodey
2 changes: 1 addition & 1 deletion Content.Shared/CCVar/CCVars.cs
Original file line number Diff line number Diff line change
Expand Up @@ -930,7 +930,7 @@ public static readonly CVarDef<bool>
/// <seealso cref="AdminUseCustomNamesAdminRank"/>
/// <seealso cref="AhelpAdminPrefixWebhook"/>
public static readonly CVarDef<bool> AhelpAdminPrefix =
CVarDef.Create("ahelp.admin_prefix", false, CVar.SERVERONLY);
CVarDef.Create("ahelp.admin_prefix", true, CVar.SERVERONLY); // ADT-Tweak

/// <summary>
/// Should the administrator's position be displayed in the webhook.
Expand Down
7 changes: 7 additions & 0 deletions Content.Shared/Chat/SharedChatSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -265,4 +265,11 @@ public static string GetStringInsideTag(ChatMessage message, string tag)
tagStart += tag.Length + 2;
return rawmsg.Substring(tagStart, tagEnd - tagStart);
}

// ADT-Tweak-Start: возможность выделять сообщения в чате
public static bool MessageTextContains(ChatMessage msg, string text)
{
return Regex.IsMatch(msg.Message, "(?>^|[ ,.!?])(" + text + ")(?>$|[ ,.!?])", RegexOptions.IgnoreCase);
}
// ADT-Tweak-End
}
21 changes: 21 additions & 0 deletions Resources/Changelog/1ChangelogADT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3184,3 +3184,24 @@ Entries:
- {message: Улучшен стелс костюма ниндзи, type: Tweak}
time: '2024-09-22T13:21:41Z'
id: 378
- author: PyotrIgn
changes:
- {message: Добавлена новая станционная цель - список со множеством целей на
выбор для командования., type: Add}
time: '2024-09-23T10:54:00Z'
id: 379
- author: Шрёдька
changes:
- {message: 'Подтянуты коммиты с Корвакса, 23.09.2024.', type: Tweak}
time: '2024-09-23T18:23:03Z'
id: 380
- author: PyotrIgn
changes:
- {message: Добавлены закуски к Октоберфесту, type: Add}
time: '2024-09-23T23:18:43Z'
id: 381
- author: RipZoro1
changes:
- {message: Добавлен костюмчик для меня, type: Add}
time: '2024-09-24T08:22:12Z'
id: 382
3 changes: 3 additions & 0 deletions Resources/Locale/ru-RU/ADT/Flavors/flavor-profiles.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ flavor-complex-classicpaulaner = как хмель, солод и традици
flavor-complex-technobeer = как хмель, солод и горячая зад...душа
flavor-complex-sausagebeer = как хмель, солод и колбаска
flavor-complex-goldenale = как эль, золото и исцеление
flavor-base-adtpoppy = маково
flavor-base-adtvanilla = ванильно
15 changes: 15 additions & 0 deletions Resources/Locale/ru-RU/ADT/personalization.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -335,10 +335,25 @@ ent-ADTClothingOuterCoatMaki = Пальто Хонкоматери
.desc = Пальто дарованное самой Хонкоматерью одному из её лучших клоунов несущих веру Хонка. Оно такое же вычурное, как и сами клоуны, а жёлтые элементы выполнены из чистого бананиума. От пальто исходит лёгкий запах кремового пирога.
.suffix = Именное, Maki_gg.
ent-ADTZoroKatana = легендарная катана
.desc = Катана легендарного фехтовальщика...
.suffix = Именное, Rip_Zoro.
ent-ADTClothingBeltZoroSheath = ножны легендарной катаны
.desc = Ножны для катаны величайшего фехтовальщика...
.suffix = Именное, Rip_Zoro.
ent-ADTUrogCrowbarGold = Золотой лом Урог-Джаха
.desc = На ломе гравировка "Пиши заявку, сука!!!"
.suffix = { "Именное, Vladylya" }
ent-ADTOwlScimitar = Совиный клинок
.desc = Увесистый клинок, схожий со скимитарами давно ушедшей эпохи, с выжженой на рукояти совой. Побит временем, но всё так же рвётся в бой.
.suffix = Именное, Filo
ent-ADTClothingUniformZoroJumpsuit = легендарный деловой костюм
.desc = Легендарный, поношенный костюм. Весь белый с позолотой. От него пахнет ванилью...
.suffix = Именное, Rip_Zoro.
ent-ADTPlushieEmma = плюшевая Эмма
.desc = Кажется, она хочет заставить вас работать.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ent-ADTCrateFoodOktoberfestSnack = ящик закусок к пиву
.desc = Ящик с набором колбасок и кренделей, чтобы закусывать пиво на Октоберфесте. Ну или в техах под карго.
.suffix = { "Октоберфест" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ent-ADTCrateFunOktoberfestClothes = ящик одежды для Октоберфеста
.desc = Ящик с набором мужской и женской традиционной одежды для Октоберфеста.
.suffix = { "Октоберфест" }
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,25 @@ ent-ADTClothingHeadHatsBeretAtmos = берет атмосферного техн
.desc = Голубой берет с вышитой эмблемой инжерного отдела. Пахнет фрезоном.
ent-ADTClothingHeadHatsBeretHOP = берет главы персонала
.desc = Синий берет с вышитой командирской эмблемой. Холодная рассудительность и твердая рука - вот что главное.
ent-ADTClothingHeadHatsBavarianHat = баварская шляпа
.desc = Традиционная баварская шляпа.
.suffix = { "Октоберфест" }
ent-ADTClothingHeadHatsBavarianHatBlueBorder = баварская шляпа с голубой каймой
.desc = Традиционная баварская шляпа с голубой каймой.
.suffix = { "Октоберфест" }
ent-ADTClothingHeadHatsBavarianHatRedBorder = баварская шляпа с красной каймой
.desc = Традиционная баварская шляпа с красной каймой.
.suffix = { "Октоберфест" }
ent-ADTClothingHeadHatsBavarianHatGreenBorder = баварская шляпа с зеленой каймой
.desc = Традиционная баварская шляпа с зеленой каймой.
.suffix = { "Октоберфест" }
ent-ADTClothingHeadHatsBavarianHatBlue = синяя егерская шляпа
.desc = Егерская шляпа синего цвета, с пером.
.suffix = { "Октоберфест" }
ent-ADTClothingHeadHatsBavarianHatGreen = зеленая егерская шляпа
.desc = Егерская шляпа зеленого цвета, с пером.
.suffix = { "Октоберфест" }
ent-ADTClothingHeadHatsBavarianHatRed = красная егерская шляпа
.desc = Егерская шляпа красного цвета, с пером.
.suffix = { "Октоберфест" }
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,25 @@ ent-ADTClothingJumpskirtHopAlt = деловой костюм с юбкой гл
ent-ADTClothingUniformJumpskirtJanimaid = костюм горничной
.desc = Обновленный костюм горничной от НТ.
ent-ADTClothingUniformOktoberfestDirndlShort = дирндль с короткой юбкой
.desc = Стилизованное под традиционный наряд платье с короткой юбкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestDirndlShortGreen = дирндль с зеленой короткой юбкой
.desc = Стилизованное под традиционный наряд платье с зеленой короткой юбкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestDirndlShortRed = дирндль с красной короткой юбкой
.desc = Стилизованное под традиционный наряд платье с красной короткой юбкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestDirndlShortBlue = дирндль с синей короткой юбкой
.desc = Стилизованное под традиционный наряд платье с синей короткой юбкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestDirndlBlue = дирндль с синей юбкой
.desc = Стилизованное под традиционный наряд платье с синей юбкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestDirndlGreen = дирндль с зеленой юбкой
.desc = Стилизованное под традиционный наряд платье с зеленой юбкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestDirndlRed = дирндль с красной юбкой
.desc = Стилизованное под традиционный наряд платье с красной юбкой.
.suffix = { "Октоберфест" }
Original file line number Diff line number Diff line change
Expand Up @@ -209,3 +209,24 @@ ent-ADTClothingJumpsuitSecOffMogesBlue = костюм офицера СБ с М
ent-ADTClothingJumpsuitSecOffMogesGray = костюм офицера СБ с Могеса
.desc = Не совсем формальный, но очень подходящий для трофиков костюм офицера, служившего в филиале Нанотрейзен на планете Могес. Заслужить право носить такой может только ветеран СБ. Стоять, СБ Могеса!
ent-ADTClothingUniformOktoberfestWhite = костюм для Октоберфеста с белой рубашкой
.desc = Традиционный баварский мужской костюм с короткими штанами и белой рубашкой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestBlueCheckered = костюм для Октоберфеста в голубую клетку
.desc = Традиционный баварский мужской костюм с короткими штанами и рубашкой в голубую клетку.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestGreenCheckered = костюм для Октоберфеста в зеленую клетку
.desc = Традиционный баварский мужской костюм с короткими штанами и рубашкой в зеленую клетку.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestRedCheckered = костюм для Октоберфеста в красную клетку
.desc = Традиционный баварский мужской костюм с короткими штанами и рубашкой в красную клетку.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestGreenVest = костюм для Октоберфеста с зеленой жилеткой
.desc = Традиционный баварский мужской костюм с короткими штанами и зеленой жилеткой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestBlueVest = костюм для Октоберфеста с синей жилеткой
.desc = Традиционный баварский мужской костюм с короткими штанами и синей жилеткой.
.suffix = { "Октоберфест" }
ent-ADTClothingUniformOktoberfestRedVest = костюм для Октоберфеста с красной жилеткой
.desc = Традиционный баварский мужской костюм с короткими штанами и красной жилеткой.
.suffix = { "Октоберфест" }
Loading

0 comments on commit 48edaab

Please sign in to comment.