From 0b346ee9c8fa153bccc0f67555bd41a1bcce8a91 Mon Sep 17 00:00:00 2001 From: RevengenRat <138193222+Ratyyy@users.noreply.github.com> Date: Thu, 8 Aug 2024 23:30:59 +0300 Subject: [PATCH 1/7] =?UTF-8?q?=D1=84=D0=B5=D0=BB=D0=B8=D0=BD=D0=B8=D0=B4?= =?UTF-8?q?=D1=8B=20(#203)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR **Медиа** **Проверки** - [X] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [X] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [X] Я запускал локальный сервер со своими изменениями и всё протестировал. - [X] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** --------- Co-authored-by: Schrödinger <132720404+Schrodinger71@users.noreply.github.com> --- .../WoundLicking/WoundLickingComponent.cs | 83 +++++++ .../WoundLicking/WoundLickingSystem.cs | 206 ++++++++++++++++++ .../Speech/Components/NyaAccentComponent.cs | 8 + .../Speech/Components/NyaAccentSystem.cs | 123 +++++++++++ .../WoundLicking/WoundLickingEvents.cs | 14 ++ .../ru-RU/starshine/actions/lick-wounds.ftl | 16 ++ .../Prototypes/ADT/Body/Organs/felinid.yml | 13 ++ .../ADT/Body/Prototypes/felinid.yml | 49 +++++ .../Prototypes/ADT/Damage/modifier_sets.yml | 20 +- .../ADT/Entities/Mobs/Player/felinid.yml | 87 ++++++++ .../ADT/Entities/Mobs/Species/felinid.yml | 177 +++++++++++++++ .../ADT/SoundCollections/emotes.yml | 37 +++- .../ADT/SoundCollections/screams.yml | 11 +- Resources/Prototypes/ADT/Species/felinid.yml | 38 ++++ .../ADT/Voice/speech_emote_sounds.yml | 108 ++++++++- Resources/Prototypes/Actions/felinid.yml | 12 + 16 files changed, 982 insertions(+), 20 deletions(-) create mode 100644 Content.Server/Abilities/WoundLicking/WoundLickingComponent.cs create mode 100644 Content.Server/Abilities/WoundLicking/WoundLickingSystem.cs create mode 100644 Content.Server/Speech/Components/NyaAccentComponent.cs create mode 100644 Content.Server/Speech/Components/NyaAccentSystem.cs create mode 100644 Content.Shared/WoundLicking/WoundLickingEvents.cs create mode 100644 Resources/Locale/ru-RU/starshine/actions/lick-wounds.ftl create mode 100644 Resources/Prototypes/ADT/Body/Organs/felinid.yml create mode 100644 Resources/Prototypes/ADT/Body/Prototypes/felinid.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Player/felinid.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Species/felinid.yml create mode 100644 Resources/Prototypes/ADT/Species/felinid.yml create mode 100644 Resources/Prototypes/Actions/felinid.yml diff --git a/Content.Server/Abilities/WoundLicking/WoundLickingComponent.cs b/Content.Server/Abilities/WoundLicking/WoundLickingComponent.cs new file mode 100644 index 00000000000..2baf3792293 --- /dev/null +++ b/Content.Server/Abilities/WoundLicking/WoundLickingComponent.cs @@ -0,0 +1,83 @@ +using System.Threading; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Felinid +{ + [RegisterComponent] + [Access(typeof(WoundLickingSystem))] + public sealed partial class WoundLickingComponent : Component + { + [DataField("woundLickingAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string? WoundLickingAction = "ActionWoundLicking"; + + [DataField("woundLickingActionEntity")] + public EntityUid? WoundLickingActionEntity; + + /// + /// How frequent wound-licking will cause diseases. Scales with amount of reduced bleeding + /// + [DataField("diseaseChance")] + [ViewVariables(VVAccess.ReadWrite)] + public float DiseaseChance { get; set; } = 0.25f; + + /// + /// Max possible bleeding reduce. Human max bleeding is 20f, many weapons deals near 15f bleeding + /// + [DataField("maxHeal")] + [ViewVariables(VVAccess.ReadWrite)] + public float MaxHeal { get; set; } = 15f; + + /// + /// How long it requires to lick wounds + /// + [DataField("delay")] + [ViewVariables(VVAccess.ReadWrite)] + public float Delay { get; set; } = 3f; + + /// + /// If true, then wound-licking can be applied only on yourself + /// + [DataField("canApplyOnSelf")] + [ViewVariables(VVAccess.ReadWrite)] + public bool CanApplyOnSelf { get; set; } = true; + + /// + /// If true, then wound-licking can be applied only on other entities + /// + [DataField("canApplyOnOther")] + [ViewVariables(VVAccess.ReadWrite)] + public bool CanApplyOnOther { get; set; } = false; + + + + /// + /// Which diseases can be caused because of wound-licking + /// + [DataField("possibleDiseases")] + public List PossibleDiseases { get; set; } = new() + { + "Plague", + "BirdFlew", + "SpaceFlu", + "SpaceCold", + "VentCough" + }; + + /// + /// If Target's bloodstream don't use one of these reagents, then ability can't be performed on it. + /// + [DataField("reagentWhitelist")] + public List ReagentWhitelist { get; set; } = new() + { + "Blood", + "Slime" + }; + + /// + /// Token for interrupting a do-after action. If not null, implies component is + /// currently "in use". + /// + public CancellationTokenSource? CancelToken; + } +} diff --git a/Content.Server/Abilities/WoundLicking/WoundLickingSystem.cs b/Content.Server/Abilities/WoundLicking/WoundLickingSystem.cs new file mode 100644 index 00000000000..bb3ebcfab5d --- /dev/null +++ b/Content.Server/Abilities/WoundLicking/WoundLickingSystem.cs @@ -0,0 +1,206 @@ +//using Content.Server.Disease.Components; +//using Content.Server.Disease; + +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.Popups; +using Content.Shared.DoAfter; +using Content.Shared.Felinid; +using Content.Shared.IdentityManagement; +using Content.Shared.Actions; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs; +using Robust.Shared.Player; +using Robust.Shared.Random; +using System.Linq; +/// taken from https://github.com/Workbench-Team/space-station-14/tree/arumoon-server +namespace Content.Server.Felinid +{ + /// + /// "Lick your or other felinid wounds. Reduce bleeding, but unsanitary and can cause diseases." + /// + public sealed partial class WoundLickingSystem : EntitySystem + { + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; +// [Dependency] private readonly DiseaseSystem _disease = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnDoAfter); + SubscribeLocalEvent(OnActionPerform); + } + + private void OnInit(EntityUid uid, WoundLickingComponent comp, ComponentInit args) + { + _actionsSystem.AddAction(uid, ref comp.WoundLickingActionEntity, comp.WoundLickingAction); + } + + private void OnRemove(EntityUid uid, WoundLickingComponent comp, ComponentRemove args) + { + _actionsSystem.RemoveAction(uid, comp.WoundLickingActionEntity); + } + + protected void OnActionPerform(WoundLickingActionEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + var performer = args.Performer; + var target = args.Target; + + // Ensure components + if ( + !TryComp(performer, out var woundLicking) || + !TryComp(target, out var bloodstream) || + !TryComp(target, out var mobState) + ) + return; + + // Check target + if (mobState.CurrentState == MobState.Dead) + return; + + // Check "CanApplyOnSelf" field + if (performer == target & !woundLicking.CanApplyOnSelf) + { + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-yourself-impossible"), + performer, Filter.Entities(performer), true); + return; + } + + // Check "CanApplyOnOther" field + if (performer != target & !woundLicking.CanApplyOnOther) + { + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-other-impossible"), + performer, Filter.Entities(performer), true); + return; + } + + if (woundLicking.ReagentWhitelist.Any() && + !woundLicking.ReagentWhitelist.Contains(bloodstream.BloodReagent) + ) return; + + // Check bloodstream + if (bloodstream.BleedAmount == 0) + { + if (performer == target) + { + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-yourself-no-wounds"), + performer, performer); + return; + } + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-performer-no-wounds", ("target", target)), + performer, performer); + return; + } + + // Popup + + + if (target == performer) + { + // Applied on yourself + var performerIdentity = Identity.Entity(performer, EntityManager); + var otherFilter = Filter.Pvs(performer, entityManager: EntityManager) + .RemoveWhereAttachedEntity(e => e == performer); + + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-yourself-begin"), + performer, performer); + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-yourself-other-begin", ("performer", performerIdentity)), + performer, otherFilter, true); + } + else + { + // Applied on someone else + var targetIdentity = Identity.Entity(target, EntityManager); + var performerIdentity = Identity.Entity(performer, EntityManager); + var otherFilter = Filter.Pvs(performer, entityManager: EntityManager) + .RemoveWhereAttachedEntity(e => e == performer || e == target); + + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-performer-begin", ("target", targetIdentity)), + performer, performer); + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-target-begin", ("performer", performerIdentity)), + target, target); + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-other-begin", ("performer", performerIdentity), ("target", targetIdentity)), + performer, otherFilter, true); + } + + // DoAfter + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, performer, woundLicking.Delay, new WoundLickingDoAfterEvent(), performer, target: target) + { + BreakOnMove = true, + BreakOnDamage = true + }); + } + + private void OnDoAfter(EntityUid uid, WoundLickingComponent comp, WoundLickingDoAfterEvent args) + { + if (args.Cancelled || args.Handled) + { + return; + } + if (TryComp(args.Args.Target, out var bloodstream)) + LickWound(uid, args.Args.Target.Value, bloodstream, comp); + } + + private void LickWound(EntityUid performer, EntityUid target, BloodstreamComponent bloodstream, WoundLickingComponent comp) + { + // The more you heal, the more is disease chance + // For 15 maxHeal and 50% diseaseChance + // Heal 15 > chance 50% + // Heal 7.5 > chance 25% + // Heal 0 > chance 0% + + var healed = bloodstream.BleedAmount; + if (comp.MaxHeal - bloodstream.BleedAmount < 0) healed = comp.MaxHeal; +/* var chance = comp.DiseaseChance * (1 / comp.MaxHeal * healed); + + if (comp.DiseaseChance > 0f & comp.PossibleDiseases.Any()) + { + if (TryComp(target, out var disCarrier)) + { + var diseaseName = comp.PossibleDiseases[_random.Next(0, comp.PossibleDiseases.Count)]; + _disease.TryInfect(disCarrier, diseaseName, chance); + } + } +*/ + _bloodstreamSystem.TryModifyBleedAmount(target, -healed, bloodstream); + + if (performer == target) + { + // Applied on yourself + var performerIdentity = Identity.Entity(performer, EntityManager); + var otherFilter = Filter.Pvs(performer, entityManager: EntityManager) + .RemoveWhereAttachedEntity(e => e == performer); + + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-yourself-success"), + performer, performer); + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-yourself-other-success", ("performer", performerIdentity)), + performer, otherFilter, true); + } + else + { + // Applied on someone else + var targetIdentity = Identity.Entity(target, EntityManager); + var performerIdentity = Identity.Entity(performer, EntityManager); + var otherFilter = Filter.Pvs(performer, entityManager: EntityManager) + .RemoveWhereAttachedEntity(e => e == performer || e == target); + + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-performer-success", ("target", targetIdentity)), + performer, performer); + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-target-success", ("performer", performerIdentity)), + target, target); + _popupSystem.PopupEntity(Loc.GetString("lick-wounds-other-success", ("performer", performerIdentity), ("target", targetIdentity)), + performer, otherFilter, true); + } + } + } +} diff --git a/Content.Server/Speech/Components/NyaAccentComponent.cs b/Content.Server/Speech/Components/NyaAccentComponent.cs new file mode 100644 index 00000000000..57652c257ea --- /dev/null +++ b/Content.Server/Speech/Components/NyaAccentComponent.cs @@ -0,0 +1,8 @@ +// taken from pr: Workbench-Team/space-station-14#1 +namespace Content.Server.Speech.Components +{ + [RegisterComponent] + public sealed partial class NyaAccentComponent : Component + { + } +} diff --git a/Content.Server/Speech/Components/NyaAccentSystem.cs b/Content.Server/Speech/Components/NyaAccentSystem.cs new file mode 100644 index 00000000000..c2e950ac095 --- /dev/null +++ b/Content.Server/Speech/Components/NyaAccentSystem.cs @@ -0,0 +1,123 @@ +using System.Text.RegularExpressions; +using Content.Server.Speech.Components; +using Robust.Shared.Random; +// taken from pr: https://github.com/Workbench-Team/space-station-14/pull/1 +namespace Content.Server.Speech.EntitySystems; + +public sealed class NyaAccentSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + private static readonly Dictionary DirectReplacements = new() { + {"иди нахуй", "хиииссс" }, + {"иди нах", "хиииссс" }, + + {"дибилы", "баки" }, + {"дибил", "бака" }, + + {"ебланище", "бакище" }, + {"ебланы", "баки" }, + {"еблан", "бака" }, + + {"хуй", "буй" }, // :skull: + {"хуе", "буе" }, + {"хуи", "буи" }, + + {"блять", "блин" }, + {"бля", "блин" }, + + {"сук", "фуг" }, + + {"внимател", "внямател"}, //внямательно + {"маги", "мяуги"}, //мяугия + {"замечател", "замурчател"}, //замурчательно + + {"синдикат", "синдикэт"}, + {"нано", "ньяно"}, //ньянотразен + {"наркотики", "кошачья мята"}, + + {"наркотик", "кошачья мята"}, + {"каргон", "кэтгон"}, // каргония + {"каргония", "кэтгония"} + }; + + private static readonly IReadOnlyList Ending = new List { + "ня", + "мяу", + "мевп", + "мев", + "мррр" + }.AsReadOnly(); + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnAccent); + } + + public string Accentuate(string message) { + var final_msg = ""; + + // Sentence ending + var sentences = AccentSystem.SentenceRegex.Split(message); + foreach (var s in sentences) + { + var new_s = s; + + if (!string.IsNullOrWhiteSpace(new_s) && _random.Prob(0.5f)) + { + // Logger.DebugS("nya", $"SENTENCE: {new_s}"); + + string last_sym = new_s.Substring(new_s.Length-1); + string punct_mark = ""; + string insert = _random.Pick(Ending); + + // Checking end of the sentence to spaces and punctuation marks + if(Regex.Matches(last_sym, "[!?.]").Count > 0) + { + punct_mark = last_sym; + new_s = new_s.Remove(new_s.Length-1); + } + + // Add comma if "s" is real sentence + if (!new_s.EndsWith(' ')) { + insert = " " + insert; + if (new_s.Length > 0 && char.IsLetterOrDigit(new_s, new_s.Length-1)) + { + insert = "," + insert; + } + } + + // Insert ending word + new_s += insert + punct_mark; + } + final_msg += new_s; + } + + // Direct replacements + foreach (var (first, replace) in DirectReplacements) + { + final_msg = final_msg.Replace(first.ToUpper(), replace.ToUpper()); + } + foreach (var (first, replace) in DirectReplacements) + { + final_msg = final_msg.Replace(first, replace, true, null); + } + + // Trimming and uppering first char (Because it can be replaced with lower char) + final_msg = final_msg.Trim(); + final_msg = char.ToUpper(final_msg[0]) + final_msg.Substring(1); + + return final_msg; + } + + private void OnAccent(EntityUid uid, NyaAccentComponent component, AccentGetEvent args) + { + args.Message = Accentuate(args.Message); + } +} + +// |\__/,| (`\ +// |_ _ |.--.) ) +// ( T ) / +// (((^_(((/(((_> diff --git a/Content.Shared/WoundLicking/WoundLickingEvents.cs b/Content.Shared/WoundLicking/WoundLickingEvents.cs new file mode 100644 index 00000000000..20ab62f83c2 --- /dev/null +++ b/Content.Shared/WoundLicking/WoundLickingEvents.cs @@ -0,0 +1,14 @@ +using Content.Shared.Actions; +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Felinid; + +[Serializable, NetSerializable] +public sealed partial class WoundLickingDoAfterEvent : SimpleDoAfterEvent +{ +} + +public sealed partial class WoundLickingActionEvent : EntityTargetActionEvent +{ +} diff --git a/Resources/Locale/ru-RU/starshine/actions/lick-wounds.ftl b/Resources/Locale/ru-RU/starshine/actions/lick-wounds.ftl new file mode 100644 index 00000000000..f828b1ec411 --- /dev/null +++ b/Resources/Locale/ru-RU/starshine/actions/lick-wounds.ftl @@ -0,0 +1,16 @@ +action-name-lick-wounds = Зализать раны +action-desc-lick-wounds = Уменьшает кровотечение, но нарушает санитарию и может вызывать заболевания. +lick-wounds-yourself-impossible = Вы не можете зализать свои раны +lick-wounds-other-impossible = Вы не можете зализать чьи-то раны +lick-wounds-yourself-no-wounds = У вас нету кровотечения +lick-wounds-yourself-begin = Вы начинаете зализывать свои раны +lick-wounds-yourself-success = Вы зализываете ваши раны, уменьшая кровотечение +lick-wounds-yourself-other-begin = { CAPITALIZE($performer) } начинает зализывать свои раны +lick-wounds-yourself-other-success = { CAPITALIZE($performer) } зализывает свои раны +lick-wounds-performer-no-wounds = { CAPITALIZE($target) } не имеет кровотечения +lick-wounds-performer-begin = Вы начинаете зализывать раны { $target } +lick-wounds-performer-success = Вы зализали раны { $target } +lick-wounds-target-begin = { CAPITALIZE($performer) } начинает зализывать ваши раны +lick-wounds-target-success = { CAPITALIZE($performer) } зализывает ваши раны, уменьшая кровотечение +lick-wounds-other-begin = { CAPITALIZE($performer) } начинает зализывать раны { $target } +lick-wounds-other-success = { CAPITALIZE($performer) } успешно зализывает раны { $target } diff --git a/Resources/Prototypes/ADT/Body/Organs/felinid.yml b/Resources/Prototypes/ADT/Body/Organs/felinid.yml new file mode 100644 index 00000000000..fe5e87d1b7b --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Organs/felinid.yml @@ -0,0 +1,13 @@ +- type: entity + id: ADTOrganFelinidHeart + parent: OrganHumanHeart + name: felinid heart + description: "I feel bad for the heartless bastard who lost this." + components: + - type: Metabolizer + maxReagents: 4 + metabolizerTypes: [Felinid, Animal] + groups: + - id: Medicine + - id: Poison + - id: Narcotic \ No newline at end of file diff --git a/Resources/Prototypes/ADT/Body/Prototypes/felinid.yml b/Resources/Prototypes/ADT/Body/Prototypes/felinid.yml new file mode 100644 index 00000000000..49654c5c2ac --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Prototypes/felinid.yml @@ -0,0 +1,49 @@ +- type: body + id: Felinid + name: "felinid" + root: torso + slots: + head: + part: HeadHuman + connections: + - torso + organs: + brain: OrganHumanBrain + eyes: OrganHumanEyes + torso: + part: TorsoHuman + connections: + - right arm + - left arm + - left leg + - right leg + organs: + heart: ADTOrganFelinidHeart + lungs: OrganHumanLungs + stomach: OrganReptilianStomach + liver: OrganAnimalLiver + kidneys: OrganHumanKidneys + right arm: + part: RightArmHuman + connections: + - right hand + left arm: + part: LeftArmHuman + connections: + - left hand + right hand: + part: RightHandHuman + left hand: + part: LeftHandHuman + right leg: + part: RightLegHuman + connections: + - right foot + left leg: + part: LeftLegHuman + connections: + - left foot + right foot: + part: RightFootHuman + left foot: + part: LeftFootHuman diff --git a/Resources/Prototypes/ADT/Damage/modifier_sets.yml b/Resources/Prototypes/ADT/Damage/modifier_sets.yml index ab6acb5ad4f..880d52695de 100644 --- a/Resources/Prototypes/ADT/Damage/modifier_sets.yml +++ b/Resources/Prototypes/ADT/Damage/modifier_sets.yml @@ -47,16 +47,6 @@ Heat: 1.5 Asphyxiation: 2.0 -- type: damageModifierSet - id: Felinid # мяу - coefficients: - Blunt: 1.0 - Piercing: 1.15 - Slash: 1.30 - Cold: 1.5 - Heat: 2.0 - Poison: 1.1 - - type: damageModifierSet id: BloodlossIPC coefficients: @@ -118,3 +108,13 @@ id: Ursus # мишк coefficients: Blunt: 1.0 + +- type: damageModifierSet + id: Felinid # мяу + coefficients: + Blunt: 1.0 + Piercing: 1.0 + Slash: 1.0 + Cold: 1.5 + Heat: 1.0 + Poison: 1.4 diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Player/felinid.yml b/Resources/Prototypes/ADT/Entities/Mobs/Player/felinid.yml new file mode 100644 index 00000000000..6156b2fa59b --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Player/felinid.yml @@ -0,0 +1,87 @@ +- type: entity + save: false + name: Урист МакФелинид + parent: MobFelinidBase + id: MobFelinid + components: + - type: CombatMode + - type: InteractionPopup + successChance: 1 + interactSuccessString: petting-success-generic + interactSuccessSound: /Audio/ADT/Felinid/cat_purr1.ogg + messagePerceivedByOthers: petting-success-soft-floofy-others + interactSuccessSpawn: EffectHearts + interactDelay: 4 + - type: MindContainer + showExamineInfo: true + - type: Input + context: "human" + - type: MobThresholds + thresholds: + 0: Alive + 90: Critical + 195: Dead + - type: MobMover + - type: InputMover + - type: Respirator + damage: + types: + Asphyxiation: 1.9 + damageRecovery: + types: + Asphyxiation: -1.9 + - type: Reactive + groups: + Flammable: [ Touch ] + Extinguish: [ Touch ] + Acidic: [Touch, Ingestion] + reactions: + - reagents: [Water, SpaceCleaner] + methods: [Touch] + effects: + - !type:WashCreamPieReaction + - type: StatusEffects + allowed: + - Stun + - KnockedDown + - SlowedDown + - Stutter + - SeeingRainbows + - Electrocution + - Drunk + - SlurredSpeech + - RatvarianLanguage + - PressureImmunity + - Muted + - ForcedSleep + - TemporaryBlindness + - Pacified + - StaminaModifier + - type: Alerts + - type: Actions + - type: Eye + - type: NyaAccent + - type: CameraRecoil + - type: Examiner + - type: CanHostGuardian + - type: LanguageSpeaker + speaks: + - GalacticCommon + - Nekomimetic + understands: + - GalacticCommon + - Nekomimetic + - type: NpcFactionMember + factions: + - NanoTrasen + - type: Vocal + wilhelm: "/Audio/ADT/Felinid/cat_wilhelm.ogg" + sounds: + Male: MaleFelinid + Female: FemaleFelinid + Unsexed: MaleFelinid + - type: SizeAttributeWhitelist # Frontier + tall: true + tallscale: 1 + short: true + shortscale: 0.8 diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/ADT/Entities/Mobs/Species/felinid.yml new file mode 100644 index 00000000000..c44373fd522 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Species/felinid.yml @@ -0,0 +1,177 @@ +- type: entity + save: false + name: Base felinid + parent: BaseMobHuman + id: MobFelinidBase + abstract: true + components: + - type: Sprite + netsync: false + noRot: true + drawdepth: Mobs + scale: 0.98, 0.98 + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: [ "underwearb" ] #Sirena + - map: [ "underweart" ] #Sirena + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: [ "socks" ] #Sirena + - map: [ "jumpsuit" ] + - map: [ "enum.HumanoidVisualLayers.LHand" ] + - map: [ "enum.HumanoidVisualLayers.RHand" ] + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "clownedon" ] + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + - type: HumanoidAppearance + species: Felinid + - type: Destructible #процесс разрушения на органы + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt #при каком дамаге это происходит + damage: 300 + behaviors: + - !type:GibBehavior { } + - type: Fixtures + fixtures: # TODO: This needs a second fixture just for mob collisions. + fix1: + shape: + !type:PhysShapeCircle + radius: 0.30 + density: 160 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer + - type: Body + prototype: Felinid + - type: Damageable + damageContainer: Biological + damageModifierSet: Felinid + - type: MeleeWeapon + soundHit: + collection: Punch + animation: WeaponArcClaw + damage: + types: + Blunt: 0.9 + Slash: 5 + - type: Blindable + - type: Speech + speechSounds: Alto + - type: DamageOnHighSpeedImpact + damage: + types: + Blunt: 0.9 + soundHit: + path: /Audio/Effects/hit_kick.ogg + - type: Perishable + - type: Butcherable + butcheringType: Spike # TODO human. + spawned: + - id: FoodMeat + - id: ClothingHeadHatCatEars + - type: WoundLicking +- type: entity + save: false + name: Felinid Dummy + parent: MobHumanDummy + id: MobFelinidDummy + noSpawn: true + description: A dummy felinid meant to be used in character setup. + components: + - type: Sprite + netsync: false + noRot: true + drawdepth: Mobs + scale: 1, 1 + layers: + # TODO BODY Turn these into individual body parts? + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: [ "underwearb" ] #Sirena + - map: [ "underweart" ] #Sirena + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: [ "socks" ] #Sirena + - map: [ "jumpsuit" ] + - map: [ "enum.HumanoidVisualLayers.LHand" ] + - map: [ "enum.HumanoidVisualLayers.RHand" ] + - map: [ "enum.HumanoidVisualLayers.Handcuffs" ] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] diff --git a/Resources/Prototypes/ADT/SoundCollections/emotes.yml b/Resources/Prototypes/ADT/SoundCollections/emotes.yml index 24ac3c2ebb6..c5bde96c9ef 100644 --- a/Resources/Prototypes/ADT/SoundCollections/emotes.yml +++ b/Resources/Prototypes/ADT/SoundCollections/emotes.yml @@ -14,7 +14,7 @@ id: DraskTalk files: - /Audio/ADT/Drask/drasktalk.ogg - + # IPC - type: soundCollection id: SynthYes @@ -59,7 +59,7 @@ - /Audio/ADT/Novakid/novakid_laugh03.ogg - /Audio/ADT/Novakid/novakid_laugh04.ogg - /Audio/ADT/Novakid/novakid_laugh05.ogg - + - type: soundCollection id: TajaranHisses files: @@ -175,4 +175,35 @@ - type: soundCollection id: VulpHeckaetSound files: - - /Audio/ADT/Voice/Vulpkanin/vulpkanin_hekaet1.ogg \ No newline at end of file + - /Audio/ADT/Voice/Vulpkanin/vulpkanin_hekaet1.ogg + +#feliinid + +- type: soundCollection + id: FelinidHisses + files: + - /Audio/ADT/Felinid/cat_hiss1.ogg + - /Audio/ADT/Felinid/cat_hiss2.ogg + +- type: soundCollection + id: FelinidMeows + files: + - /Audio/ADT/Felinid/cat_meow1.ogg + - /Audio/ADT/Felinid/cat_meow2.ogg + - /Audio/ADT/Felinid/cat_meow3.ogg + +- type: soundCollection + id: FelinidMews + files: + - /Audio/ADT/Felinid/cat_mew1.ogg + - /Audio/ADT/Felinid/cat_mew2.ogg + +- type: soundCollection + id: FelinidGrowls + files: + - /Audio/ADT/Felinid/cat_growl1.ogg + +- type: soundCollection + id: FelinidPurrs + files: + - /Audio/ADT/Felinid/cat_purr1.ogg diff --git a/Resources/Prototypes/ADT/SoundCollections/screams.yml b/Resources/Prototypes/ADT/SoundCollections/screams.yml index 9c8a2626346..c985000ec3c 100644 --- a/Resources/Prototypes/ADT/SoundCollections/screams.yml +++ b/Resources/Prototypes/ADT/SoundCollections/screams.yml @@ -5,7 +5,7 @@ - /Audio/ADT/Novakid/novakid_scream02.ogg - /Audio/ADT/Novakid/novakid_scream03.ogg - /Audio/ADT/Novakid/novakid_scream04.ogg - + - type: soundCollection id: TajaranMaleScreams files: @@ -21,4 +21,11 @@ files: - /Audio/ADT/Felinid/cat_scream1.ogg - /Audio/ADT/Felinid/cat_scream2.ogg - - /Audio/ADT/Felinid/cat_scream3.ogg \ No newline at end of file + - /Audio/ADT/Felinid/cat_scream3.ogg + +- type: soundCollection + id: FelinidScreams + files: + - /Audio/ADT/Felinid/cat_scream1.ogg + - /Audio/ADT/Felinid/cat_scream2.ogg + - /Audio/ADT/Felinid/cat_scream3.ogg diff --git a/Resources/Prototypes/ADT/Species/felinid.yml b/Resources/Prototypes/ADT/Species/felinid.yml new file mode 100644 index 00000000000..ac031a61134 --- /dev/null +++ b/Resources/Prototypes/ADT/Species/felinid.yml @@ -0,0 +1,38 @@ +- type: species + id: Felinid + name: Фелинид + roundStart: true + prototype: MobFelinid + sprites: MobHumanSprites + markingLimits: MobFelinidMarkingLimits + dollPrototype: MobFelinidDummy + skinColoration: HumanToned + sponsorOnly: true + + +- type: markingPoints + id: MobFelinidMarkingLimits + points: + Hair: + points: 1 + required: false + FacialHair: + points: 1 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ CatTail ] + HeadTop: + points: 1 + required: true + defaultMarkings: [ CatEars ] + Chest: + points: 1 + required: false + Legs: + points: 2 + required: false + Arms: + points: 2 + required: false diff --git a/Resources/Prototypes/ADT/Voice/speech_emote_sounds.yml b/Resources/Prototypes/ADT/Voice/speech_emote_sounds.yml index 3b0bce180b4..ea79a005330 100644 --- a/Resources/Prototypes/ADT/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/ADT/Voice/speech_emote_sounds.yml @@ -304,11 +304,11 @@ collection: MaleCry Whistle: collection: Whistles - # ADT-Apathy Sounds. + # ADT-Apathy Sounds. Scream-apathy: collection: NovakidScreams Laugh-apathy: - collection: NovakidLaugh + collection: NovakidLaugh Sigh-apathy: collection: MaleSigh Crying-apathy: @@ -347,16 +347,16 @@ collection: FemaleCry Whistle: collection: Whistles - # ADT-Apathy Sounds. + # ADT-Apathy Sounds. Scream-apathy: collection: NovakidScreams Laugh-apathy: - collection: NovakidLaugh + collection: NovakidLaugh Sigh-apathy: collection: FemaleSigh Crying-apathy: collection: FemaleCry - + - type: emoteSounds id: UnisexIPC sounds: @@ -534,3 +534,101 @@ collection: Whistles Heckaet: collection: VulpHeckaetSound + +- type: emoteSounds + id: MaleFelinid + params: + variation: 0.125 + sounds: + Scream: + collection: FelinidScreams + Laugh: + collection: MaleLaugh + Hiss: + collection: FelinidHisses + Meow: + collection: FelinidMeows + Mew: + collection: FelinidMews + Growl: + collection: FelinidGrowls + Purr: + collection: FelinidPurrs + Sneeze: + collection: MaleSneezes + Cough: + collection: MaleCoughs + MonkeyScreeches: + collection: MonkeyScreeches + RobotBeep: + collection: RobotBeeps + Yawn: + collection: MaleYawn + Snore: + collection: Snores + Honk: + collection: BikeHorn + Sigh: + collection: MaleSigh + Crying: + collection: MaleCry + Whistle: + collection: Whistles + # ADT-Apathy Sounds. + Scream-apathy: + collection: FelinidScreams + Laugh-apathy: + collection: MaleLaugh + Sigh-apathy: + collection: MaleSigh + Crying-apathy: + collection: MaleCry + +- type: emoteSounds + id: FemaleFelinid + params: + variation: 0.125 + sounds: + Scream: + collection: FelinidScreams + Laugh: + collection: FemaleLaugh + Sneeze: + collection: FemaleSneezes + Cough: + collection: FemaleCoughs + Hiss: + collection: FelinidHisses + Meow: + collection: FelinidMeows + Mew: + collection: FelinidMews + Growl: + collection: FelinidGrowls + Purr: + collection: FelinidPurrs + MonkeyScreeches: + collection: MonkeyScreeches + RobotBeep: + collection: RobotBeeps + Yawn: + collection: FemaleYawn + Snore: + collection: Snores + Honk: + collection: CluwneHorn + Sigh: + collection: FemaleSigh + Crying: + collection: FemaleCry + Whistle: + collection: Whistles + # ADT-Apathy Sounds. + Scream-apathy: + collection: FelinidScreams + Laugh-apathy: + collection: FemaleLaugh + Sigh-apathy: + collection: FemaleSigh + Crying-apathy: + collection: FemaleCry diff --git a/Resources/Prototypes/Actions/felinid.yml b/Resources/Prototypes/Actions/felinid.yml new file mode 100644 index 00000000000..7e6a5457a40 --- /dev/null +++ b/Resources/Prototypes/Actions/felinid.yml @@ -0,0 +1,12 @@ +- type: entity + id: ActionWoundLicking + name: Lick Wound + description: Stop bleeding by licking your wounds + noSpawn: true + components: + - type: EntityTargetAction + whitelist: { components: [ HumanoidAppearance ] } + interactOnMiss: false + icon: { sprite: Mobs/Species/Human/organs.rsi, state: tongue } + priority: -1 + event: !type:WoundLickingActionEvent From 0c618a85c7a74fd3343d19ade918007c21f6a7b4 Mon Sep 17 00:00:00 2001 From: Bolper <169089627+Bolper@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:28:29 +0300 Subject: [PATCH 2/7] Smes (#208) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR **Медиа** **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [ ] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** Собственно добавлен индустриальный СМЭС и иследование его в РНД --- .../Catalog/Fills/Crates/engineering.ftl | 2 + .../Circuitboards/Machine/production.ftl | 2 + .../Structures/Power/industrialSMES.ftl | 5 ++ .../ADT/prototypes/Research/industrial.ftl | 1 + .../ADT/Catalog/Fills/Crates/engines.yml | 7 ++ .../Circuitboards/Machine/production.yml | 15 ++++ .../Structures/Power/industrialSMES.yml | 39 +++++++++ .../ADT/Recipes/Lathes/electronics.yml | 9 +++ .../Prototypes/ADT/Research/industrial.yml | 11 +++ .../Entities/Structures/Machines/lathe.yml | 1 + .../Power/industrial_smes.rsi/meta.json | 74 ++++++++++++++++++ .../Power/industrial_smes.rsi/smes-oc0.png | Bin 0 -> 114 bytes .../Power/industrial_smes.rsi/smes-oc1.png | Bin 0 -> 145 bytes .../Power/industrial_smes.rsi/smes-oc2.png | Bin 0 -> 145 bytes .../Power/industrial_smes.rsi/smes-og1.png | Bin 0 -> 101 bytes .../Power/industrial_smes.rsi/smes-og2.png | Bin 0 -> 155 bytes .../Power/industrial_smes.rsi/smes-og3.png | Bin 0 -> 160 bytes .../Power/industrial_smes.rsi/smes-og4.png | Bin 0 -> 194 bytes .../Power/industrial_smes.rsi/smes-og5.png | Bin 0 -> 200 bytes .../Power/industrial_smes.rsi/smes-op0.png | Bin 0 -> 106 bytes .../Power/industrial_smes.rsi/smes-op1.png | Bin 0 -> 143 bytes .../Power/industrial_smes.rsi/smes-op2.png | Bin 0 -> 111 bytes .../Power/industrial_smes.rsi/smes-open.png | Bin 0 -> 1350 bytes .../Power/industrial_smes.rsi/smes.png | Bin 0 -> 1269 bytes 24 files changed, 166 insertions(+) create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Power/industrialSMES.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Research/industrial.ftl create mode 100644 Resources/Prototypes/ADT/Catalog/Fills/Crates/engines.yml create mode 100644 Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml create mode 100644 Resources/Prototypes/ADT/Entities/Structures/Power/industrialSMES.yml create mode 100644 Resources/Prototypes/ADT/Research/industrial.yml create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/meta.json create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc0.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc1.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc2.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og1.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og2.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og3.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og4.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og5.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op0.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op1.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op2.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-open.png create mode 100644 Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes.png diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Catalog/Fills/Crates/engineering.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Catalog/Fills/Crates/engineering.ftl index e51e3608c00..b97144b3c20 100644 --- a/Resources/Locale/ru-RU/ADT/prototypes/Catalog/Fills/Crates/engineering.ftl +++ b/Resources/Locale/ru-RU/ADT/prototypes/Catalog/Fills/Crates/engineering.ftl @@ -2,3 +2,5 @@ ent-ADTCrateRPDAmmo = ящик консервированной материи .desc = Содержит 3 консервированных картриджа для работы РРТ. ent-ADTCrateRPD = ящик РРТ .desc = Ящик, содержащий один ручной раздатчик труб. +ent-CrateEngineeringIndustrialSMES = Ящик с индустриальным СМЭСом + .desc = Ящик, содержащий инустриальный СМЭС. diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl new file mode 100644 index 00000000000..36053d64cbc --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Objects/Device/Circuitboards/Machine/production.ftl @@ -0,0 +1,2 @@ +ent-ADTIndustrialSMESMachineCircuitboard = Плата индустриального СМЭСа + .desc = Плата Сверхпроводящей Магнитной Энергонакопительной Станции (СМЭС) повышенной ёмкости емкости. Передовое иследование НТ в передачи и хранении энергии. diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Power/industrialSMES.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Power/industrialSMES.ftl new file mode 100644 index 00000000000..a6c022af9d5 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Structures/Power/industrialSMES.ftl @@ -0,0 +1,5 @@ +ent-ADTIndustrialSMES = Индустриальный СМЭС + .desc = Сверхпроводящая Магнитная Энергонакопительная Станция (СМЭС) повышенной ёмкости емкости. Передовое иследование НТ в передачи и хранении энергии +ent-ADTIndustrialSMESEmpty = Индустриальный СМЭС + .desc = Сверхпроводящая Магнитная Энергонакопительная Станция (СМЭС) повышенной ёмкости емкости. Передовое иследование НТ в передачи и хранении энергии + .suffix = Пустой diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Research/industrial.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Research/industrial.ftl new file mode 100644 index 00000000000..fbdb78a099f --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Research/industrial.ftl @@ -0,0 +1 @@ +research-avanted-energy = Продвинутая энергетика diff --git a/Resources/Prototypes/ADT/Catalog/Fills/Crates/engines.yml b/Resources/Prototypes/ADT/Catalog/Fills/Crates/engines.yml new file mode 100644 index 00000000000..ba7a8b7bbd7 --- /dev/null +++ b/Resources/Prototypes/ADT/Catalog/Fills/Crates/engines.yml @@ -0,0 +1,7 @@ +- type: entity + id: CrateEngineeringIndustrialSMES + parent: CrateEngineeringSecure + components: + - type: StorageFill + contents: + - id: ADTIndustrialSMESEmpty diff --git a/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml b/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml new file mode 100644 index 00000000000..1d8d929077d --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Objects/Device/Circuitboards/Machine/production.yml @@ -0,0 +1,15 @@ +- type: entity + id: ADTIndustrialSMESMachineCircuitboard + parent: BaseMachineCircuitboard + name: Industrial SMES machine board + description: A machine printed circuit board for a SMES. + components: + - type: MachineBoard + prototype: ADTIndustrialSMESEmpty + stackRequirements: + Capacitor: 4 + CableHV: 30 + componentRequirements: + PowerCell: + amount: 16 + defaultPrototype: PowerCellSmall diff --git a/Resources/Prototypes/ADT/Entities/Structures/Power/industrialSMES.yml b/Resources/Prototypes/ADT/Entities/Structures/Power/industrialSMES.yml new file mode 100644 index 00000000000..ca065132433 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Structures/Power/industrialSMES.yml @@ -0,0 +1,39 @@ +- type: entity + parent: BaseSMES + id: ADTIndustrialSMES + suffix: Basic, 80MW + components: + - type: Sprite + sprite: ADT/Structures/Power/industrial_smes.rsi + snapCardinals: true + layers: + - state: smes + - map: ["enum.SmesVisualLayers.Charge"] + state: "smes-og1" + shader: unshaded + visible: false + - map: ["enum.SmesVisualLayers.Input"] + state: "smes-oc0" + shader: unshaded + - map: ["enum.SmesVisualLayers.Output"] + state: "smes-op1" + shader: unshaded + - type: Smes + - type: Battery + maxCharge: 80000000 + startingCharge: 80000000 + - type: PowerNetworkBattery + maxSupply: 15000000 + maxChargeRate: 500000 + supplyRampTolerance: 500000 + supplyRampRate: 100000 + - type: Machine + board: ADTIndustrialSMESMachineCircuitboard + +- type: entity + parent: ADTIndustrialSMES + id: ADTIndustrialSMESEmpty + suffix: Empty + components: + - type: Battery + startingCharge: 0 diff --git a/Resources/Prototypes/ADT/Recipes/Lathes/electronics.yml b/Resources/Prototypes/ADT/Recipes/Lathes/electronics.yml index 24c34e966ff..0adfc02de19 100644 --- a/Resources/Prototypes/ADT/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/ADT/Recipes/Lathes/electronics.yml @@ -6,3 +6,12 @@ Steel: 900 Plastic: 100 Gold: 100 + +- type: latheRecipe + id: ADTIndustrialSMESMachineCircuitboard + result: ADTIndustrialSMESMachineCircuitboard + completetime: 4 + materials: + Steel: 100 + Glass: 900 + Gold: 100 diff --git a/Resources/Prototypes/ADT/Research/industrial.yml b/Resources/Prototypes/ADT/Research/industrial.yml new file mode 100644 index 00000000000..2ad05129d9b --- /dev/null +++ b/Resources/Prototypes/ADT/Research/industrial.yml @@ -0,0 +1,11 @@ +- type: technology + id: Advanted Energy + name: research-avanted-energy + icon: + sprite: ADT/Structures/Power/industrial_smes.rsi + state: smes + discipline: Industrial + tier: 3 + cost: 15000 + recipeUnlocks: + - ADTIndustrialSMESMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 1027c510e27..b1f33a361be 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -546,6 +546,7 @@ - MassMediaCircuitboard - ReagentGrinderIndustrialMachineCircuitboard - JukeboxCircuitBoard + - ADTIndustrialSMESMachineCircuitboard #ADT - type: EmagLatheRecipes emagDynamicRecipes: - ShuttleGunDusterCircuitboard diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/meta.json b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/meta.json new file mode 100644 index 00000000000..827aef3b56a --- /dev/null +++ b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/meta.json @@ -0,0 +1,74 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "sprites of smes was created by Unlumination. Discord:unlumy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "smes" + }, + { + "name": "smes-open" + }, + { + "name": "smes-oc0" + }, + { + "name": "smes-oc1", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "smes-oc2", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "smes-og1", + "delays": [ + [ + 1, + 1 + ] + ] + }, + { + "name": "smes-og2" + }, + { + "name": "smes-og3" + }, + { + "name": "smes-og4" + }, + { + "name": "smes-og5" + }, + { + "name": "smes-op0" + }, + { + "name": "smes-op1", + "delays": [ + [ + 1, + 1 + ] + ] + }, + { + "name": "smes-op2" + } + ] +} diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc0.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc0.png new file mode 100644 index 0000000000000000000000000000000000000000..5579432d3fed36949e0cc0872d2886509b9596e4 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzOHUWakcif|7dP@UDDW^lzCXgJ zbNJs^~SEYfn`1yks09?3Qu6xNq_~rhu2)AO3Qy+|@kEcHy>!WX4CG!$3nA NJYD@<);T3K0RSJ?C9(hj literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc1.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc1.png new file mode 100644 index 0000000000000000000000000000000000000000..d624672613b71529b53390c16b976c4cd8af7851 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQW2gmjv*P1Z!d4;Y;fRVy};4L z_w>iKyoARLNt!oSXjmNxZGT=Z;352Df(lSILxcaVc8hghXXB=CdY76rFYojmmC2>= s-g||fVcin^eO~=kqvxy)4fS0e!q%&V7HZw^mFVdQ&MBb@00$B@W&i*H literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc2.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-oc2.png new file mode 100644 index 0000000000000000000000000000000000000000..d624672613b71529b53390c16b976c4cd8af7851 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQW2gmjv*P1Z!d4;Y;fRVy};4L z_w>iKyoARLNt!oSXjmNxZGT=Z;352Df(lSILxcaVc8hghXXB=CdY76rFYojmmC2>= s-g||fVcin^eO~=kqvxy)4fS0e!q%&V7HZw^mFVdQ&MBb@00$B@W&i*H literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og1.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og1.png new file mode 100644 index 0000000000000000000000000000000000000000..c65f011a070e3400ce431363ec2d1452a0672a98 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQaYY4jv*P1Z!Z|~G8ph2*zn=F xncrHr1O~O6{{L8j@(c_%b7!sGS<1=qBW!EL4A!Y`Ol;3V!k(^vF6*2UngG`|91s8i literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og2.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og2.png new file mode 100644 index 0000000000000000000000000000000000000000..0023750405154e83682e95d82f9251fad89d2fee GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DCq0y z;uumf=k57}oD2#)EC+?(cw}!{@g>FgVn3^gi(py&&$}wG3xNt@;1Bx;weXql(Z4F z;uumf=k0}qoIurX5A8D+&)POKYuTp@OpC5OwH4U&Gx6$kpgI^RVE%R`Y;&sT($zNX u88>1a-0}`ct^EGCVcn10&JAyXstOpI_&Bz|k7Bw3(&Fjr=d#Wzp$P!e!!wfr literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og4.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og4.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb3db1bc317c61c13ae5c60a0d5d19c4c96f72a GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C|Kg@ z;uumf=k3LfoDBv7tq;|2+`47eICa}2r@n+sJDNhb6*h$UCCugx$_%r37tr$k@ap%? zt3MX92skh>LWn>78|J>XE$8mbZhsy8)hgjEXNJu(9*Y-~_bW`{O%+t@WHg*{Z#uJ^ j!{2hz16E8N3J(}3nhJzOuMSlP+RxzW>gTe~DWM4f*Tq4} literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og5.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-og5.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c0c8a2eac425d18dc75175efc42717333ffea4 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C|Kp` z;uumf=k2A9ybT6CEC<}3yj)K!EpgR3!r?Gkbj2oK+sKw_TB17=8BPmk{!=~ubbiYA z6*5d53JnYp;!A@tKif^uV~c;v3dHokoL9I*R$DK7zublt&9`Pfl1v-i>zgz_&t1T# oaCFh%s)qKzAAK4wDFSuJeJBtNU6gcz8R!ZIPgg&ebxsLQ0BkfuoB#j- literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op0.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op0.png new file mode 100644 index 0000000000000000000000000000000000000000..573b5c404ffb782747013b0c948d8e1b3ba46092 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzLr)jSkcif|7XmqflFkQ9H#Mie z`ER?iS>aG@qq!IZ!-Hw-ZuWh-xlsL{jSRyd&68{|xj6+g&Y9f=YG&|s^>bP0l+XkK D{h}fG literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op1.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c8e1048941781782c75f26e94579007e891abf GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQemDhjv*P1Z!aI@WHuCFc9=NL zC(1)I^MRM`yO~uYlZ5!{d(sp3GjW;$)iNB=eQ#$yYu&bc$zd1N(~Hh}MF-se|JM4z p$E@R3`UYp$*KGa>R1`I-hH-nFnDsA>^%Ft5JYD@<);T3K0RYS(F?Ij| literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op2.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-op2.png new file mode 100644 index 0000000000000000000000000000000000000000..af560237f17a0a5b2a9ff008cd922cf1b0a0c180 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzGfx-Ckcif|mkx3QB@Z8X;PuE# zPseWV@^cD50*j=VhH!n#Uus2xtO>r>mdK II;Vst0E|5$!vFvP literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-open.png b/Resources/Textures/ADT/Structures/Power/industrial_smes.rsi/smes-open.png new file mode 100644 index 0000000000000000000000000000000000000000..885e2b75291eaddb1b1b9d875f9a0829b8486d9e GIT binary patch literal 1350 zcmV-M1-bf(P)bK#C>X^3NL5uGNE{A_ zZN$WMYId2>1rvk)2n46p9 z-Me?joH>B1s`z|9z=14#EP)OV;Nak2ip63Nsi^zh+?)~DA|RK`SsoCMLP$R`c9@u$ zu#om6HuEWFLpQ{O-C|Ax^RptprfE1Fj@}GpG8slkM{R?N(wr9N6-$!D&d!b@WN&Ye zbLY+-cfvp*z{igt0hpSa0y-P0-EO1n$7hlx^*>ko&5Jp)ku^;NU}k29Y&Lt`2}Rw; z#>TjO`7+DP%SMpfw{J5vG=!qqzAzRtaXmadq*kl(^5sjzCl-tG_3Ky4 zOifLpsw%Nq41ne3Wt>hYfk1$>XV21Zw`nvQMn=q6ajz(fLH^~-7Xa?uxzm%06O|wo z3L(ofe!rjBuU~WT-o1fY5J)DI+_-Urjg3x6Tw7cF^%BJ6aUzijw&&6$?=`8fEv7Jb&l&M59q-*PHF;x%WrEd_Hf? zeM_a-dC|E7DD`@MU_G;W_&Iz&AAc@&JT0%`ty`AYP@0~e*2l-k2?m3G8}@bfcy9FTh4;b%}pf06AT9TWLY*=J~}#z zBuPeNNhA`u-R_3pb?MQgM`r-%HJk2zIN?e6`|8Mx7&n5 zA@8kHOQu+B?u^A-M z?wvE{PLRvxxN_wR5JFL+o&{Y;1^b3nZj>Zp<#s!W8fUvWr<378U>~+%Eu-eUe28 z;jD>tI?d+hriVD0OtQYdPN7f`sdSU&XBI_@ZqfU zq%$srU}a^+QweFo#KZ(6BO~^OEy&aX9jLeai;IgrbHKYZeq})@l}cIXwSdCe?+ns{ z`-S%4lWfNVAw-}BXS*Pzj*pL97qY+yx~}^yC4>eVVb6;*6a1Y7IYu6|7NqE zem@J`#L%%IpU*on72xva%OnzsKnqOMT`f!>4Y;lqc7LLsK6rce|G+qP*m8iB+@2sBLtpkA+&%jK|bo28{C z03JVn>^X?`_Vy4!G?7RgD~jSA!Md&^gkXJr9e_+GLnIREdExZCwpuM-zI^FCG2jpv zi$$8vCj0yQm!!ebcszbA)k`7KX#2D4?c29xG8tc@p!U+z5;HS108}a!hZvw%tMU2s z=YN2@dxa^6VYHyLfKE?OF-_A+>Rwp=;GXOL&+}K4GFj00000NkvXXu0mjfx4>xR literal 0 HcmV?d00001 From 834244139fd712866223b7043f334496d13f637c Mon Sep 17 00:00:00 2001 From: KashRas2 <140270505+KashRas2@users.noreply.github.com> Date: Fri, 9 Aug 2024 20:38:41 +0300 Subject: [PATCH 3/7] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=88=D0=B5=D1=81=D1=82=D0=B2=D0=B8=D0=B5=20?= =?UTF-8?q?(=D0=BF=D0=BE=20=D1=84=D0=B0=D0=BA=D1=82=D1=83=20=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D1=82=D1=8C=D0=B5)=20(#209)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR По просьбе Петра и Шредингера вернул старую спонсорку. **Медиа** ![image](https://github.com/user-attachments/assets/e36e38be-5e1a-4506-aaaf-69d8fbd4f945) (Это подтверждение того, что она есть) **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [x] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** no cl no fun > /\ (Так оффы пишут, когда изменение не должно учитываться ченжлог-ботом. Звучит забавно по-моему). --------- Co-authored-by: KashRas2 --- .../Tabs/PanicBunkerTab/PanicBunkerTab.xaml | 5 - .../PanicBunkerTab/PanicBunkerTab.xaml.cs | 19 +- Content.Client/Content.Client.csproj | 2 - .../Corvax/DiscordAuth/DiscordAuthGui.xaml | 28 + .../Corvax/DiscordAuth/DiscordAuthGui.xaml.cs | 35 + .../Corvax/DiscordAuth/DiscordAuthManager.cs | 30 + .../Corvax/DiscordAuth/DiscordAuthState.cs | 34 + .../Corvax/JoinQueue/JoinQueueManager.cs | 26 + Content.Client/Corvax/JoinQueue/QueueGui.xaml | 34 + .../Corvax/JoinQueue/QueueGui.xaml.cs | 41 + Content.Client/Corvax/JoinQueue/QueueState.cs | 51 + .../Sponsors/CheckSponsorClientSystem.cs | 38 + .../Corvax/Sponsors/SponsorsManager.cs | 23 + .../Corvax/TTS/HumanoidProfileEditor.TTS.cs | 15 +- Content.Client/Entry/EntryPoint.cs | 9 + Content.Client/Humanoid/MarkingPicker.xaml.cs | 15 +- .../Humanoid/SingleMarkingPicker.xaml.cs | 15 +- Content.Client/IoC/ClientContentIoC.cs | 6 + .../Lobby/ClientPreferencesManager.cs | 12 +- Content.Client/Lobby/LobbyUIController.cs | 1 - .../Lobby/UI/CharacterSetupGui.xaml.cs | 8 - .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 5 +- .../UI/Loadouts/LoadoutGroupContainer.xaml.cs | 22 +- .../Lobby/UI/Loadouts/LoadoutWindow.xaml.cs | 12 +- .../JobRequirementsManager.cs | 11 + Content.Packaging/ServerPackaging.cs | 31 - .../20221128142328_Sponsors.Designer.cs | 1378 ++++++++++++++++ .../Postgres/20221128142328_Sponsors.cs | 43 + .../20221130091215_AddDateField.Designer.cs | 1375 ++++++++++++++++ .../Postgres/20221130091215_AddDateField.cs | 27 + ...0221202112609_Sponsor-AllowJob.Designer.cs | 1386 +++++++++++++++++ .../20221202112609_Sponsor-AllowJob.cs | 26 + .../20221128142316_Sponsors.Designer.cs | 1310 ++++++++++++++++ .../Sqlite/20221128142316_Sponsors.cs | 42 + .../20221130091206_AddDateField.Designer.cs | 1309 ++++++++++++++++ .../Sqlite/20221130091206_AddDateField.cs | 27 + ...0221202112556_Sponsor-AllowJob.Designer.cs | 1318 ++++++++++++++++ .../Sqlite/20221202112556_Sponsor-AllowJob.cs | 26 + Content.Server.Database/Model.cs | 24 +- .../Administration/Systems/AdminSystem.cs | 9 - Content.Server/Chat/Managers/ChatManager.cs | 17 +- .../Connection/ConnectionManager.cs | 59 +- Content.Server/Content.Server.csproj | 1 - .../Commands/PanicBunkerCommand.cs | 33 - .../Corvax/DiscordAuth/DiscordAuthManager.cs | 126 ++ .../Corvax/JoinQueue/JoinQueueManager.cs | 168 ++ .../Corvax/Sponsors/CheckSponsorSystem.cs | 44 + .../Corvax/Sponsors/SponsorsManager.cs | 116 ++ Content.Server/Database/ServerDbBase.cs | 17 + Content.Server/Database/ServerDbManager.cs | 21 + Content.Server/Entry/EntryPoint.cs | 6 + .../GameTicking/GameTicker.Player.cs | 6 +- .../GameTicking/GameTicker.StatusShell.cs | 11 +- Content.Server/IoC/ServerContentIoC.cs | 6 + .../PlayTimeTrackingSystem.cs | 12 + .../Managers/ServerPreferencesManager.cs | 61 +- Content.Shared/ADT/RPD/Systems/RPDSystem.cs | 4 - Content.Shared/Content.Shared.csproj | 1 - Content.Shared/Corvax/CCCVars/CCCVars.cs | 42 +- .../Corvax/DiscordAuth/MsgDiscordAuthCheck.cs | 22 + .../DiscordAuth/MsgDiscordAuthRequired.cs | 25 + .../Corvax/JoinQueue/MsgQueueUpdate.cs | 36 + .../Loadouts/Effects/SponsorLoadoutEffect.cs | 49 - .../Sponsors/CheckSponsorSharedSystem.cs | 29 + .../Corvax/Sponsors/MsgSponsorInfo.cs | 116 ++ .../SharedHumanoidAppearanceSystem.cs | 16 +- .../Preferences/HumanoidCharacterProfile.cs | 3 +- .../Loadouts/Effects/GroupLoadoutEffect.cs | 4 +- .../Effects/JobRequirementLoadoutEffect.cs | 2 +- .../Loadouts/Effects/LoadoutEffect.cs | 1 - .../Effects/PointsCostLoadoutEffect.cs | 1 - .../Loadouts/Effects/SpeciesLoadoutEffect.cs | 2 +- .../Preferences/Loadouts/LoadoutPrototype.cs | 5 + .../Preferences/Loadouts/RoleLoadout.cs | 25 +- .../Content.Corvax.Interfaces.Client.csproj | 13 - .../IClientDiscordAuthManager.cs | 8 - .../IClientJoinQueueManager.cs | 6 - .../ISponsorWindowCreator.cs | 6 - .../Content.Corvax.Interfaces.Server.csproj | 13 - .../IServerDiscordAuthManager.cs | 13 - .../IServerJoinQueueManager.cs | 10 - .../IServerVPNGuardManager.cs | 9 - .../Content.Corvax.Interfaces.Shared.csproj | 10 - .../ISharedDiscordAuthManager.cs | 6 - .../ISharedLoadoutsManager.cs | 11 - .../ISharedSponsorsManager.cs | 19 - SpaceStation14.sln | 37 - Tools/package_client_build.py | 192 +++ Tools/package_server_build.py | 289 ++++ 89 files changed, 10053 insertions(+), 504 deletions(-) create mode 100644 Content.Client/Corvax/DiscordAuth/DiscordAuthGui.xaml create mode 100644 Content.Client/Corvax/DiscordAuth/DiscordAuthGui.xaml.cs create mode 100644 Content.Client/Corvax/DiscordAuth/DiscordAuthManager.cs create mode 100644 Content.Client/Corvax/DiscordAuth/DiscordAuthState.cs create mode 100644 Content.Client/Corvax/JoinQueue/JoinQueueManager.cs create mode 100644 Content.Client/Corvax/JoinQueue/QueueGui.xaml create mode 100644 Content.Client/Corvax/JoinQueue/QueueGui.xaml.cs create mode 100644 Content.Client/Corvax/JoinQueue/QueueState.cs create mode 100644 Content.Client/Corvax/Sponsors/CheckSponsorClientSystem.cs create mode 100644 Content.Client/Corvax/Sponsors/SponsorsManager.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20221128142328_Sponsors.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20221128142328_Sponsors.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20221130091215_AddDateField.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20221130091215_AddDateField.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20221202112609_Sponsor-AllowJob.Designer.cs create mode 100644 Content.Server.Database/Migrations/Postgres/20221202112609_Sponsor-AllowJob.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20221128142316_Sponsors.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20221128142316_Sponsors.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20221130091206_AddDateField.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20221130091206_AddDateField.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20221202112556_Sponsor-AllowJob.Designer.cs create mode 100644 Content.Server.Database/Migrations/Sqlite/20221202112556_Sponsor-AllowJob.cs delete mode 100644 Content.Server/Corvax/Administration/Commands/PanicBunkerCommand.cs create mode 100644 Content.Server/Corvax/DiscordAuth/DiscordAuthManager.cs create mode 100644 Content.Server/Corvax/JoinQueue/JoinQueueManager.cs create mode 100644 Content.Server/Corvax/Sponsors/CheckSponsorSystem.cs create mode 100644 Content.Server/Corvax/Sponsors/SponsorsManager.cs create mode 100644 Content.Shared/Corvax/DiscordAuth/MsgDiscordAuthCheck.cs create mode 100644 Content.Shared/Corvax/DiscordAuth/MsgDiscordAuthRequired.cs create mode 100644 Content.Shared/Corvax/JoinQueue/MsgQueueUpdate.cs delete mode 100644 Content.Shared/Corvax/Preferences/Loadouts/Effects/SponsorLoadoutEffect.cs create mode 100644 Content.Shared/Corvax/Sponsors/CheckSponsorSharedSystem.cs create mode 100644 Content.Shared/Corvax/Sponsors/MsgSponsorInfo.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Client/Content.Corvax.Interfaces.Client.csproj delete mode 100644 Corvax/Content.Corvax.Interfaces.Client/IClientDiscordAuthManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Client/IClientJoinQueueManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Client/ISponsorWindowCreator.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Server/Content.Corvax.Interfaces.Server.csproj delete mode 100644 Corvax/Content.Corvax.Interfaces.Server/IServerDiscordAuthManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Server/IServerJoinQueueManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Server/IServerVPNGuardManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Shared/Content.Corvax.Interfaces.Shared.csproj delete mode 100644 Corvax/Content.Corvax.Interfaces.Shared/ISharedDiscordAuthManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Shared/ISharedLoadoutsManager.cs delete mode 100644 Corvax/Content.Corvax.Interfaces.Shared/ISharedSponsorsManager.cs create mode 100755 Tools/package_client_build.py create mode 100755 Tools/package_server_build.py diff --git a/Content.Client/Administration/UI/Tabs/PanicBunkerTab/PanicBunkerTab.xaml b/Content.Client/Administration/UI/Tabs/PanicBunkerTab/PanicBunkerTab.xaml index f5b91ddde8f..ee7ba4d34ff 100644 --- a/Content.Client/Administration/UI/Tabs/PanicBunkerTab/PanicBunkerTab.xaml +++ b/Content.Client/Administration/UI/Tabs/PanicBunkerTab/PanicBunkerTab.xaml @@ -38,11 +38,6 @@