diff --git a/Content.Server/Access/Systems/AgentIDCardSystem.cs b/Content.Server/Access/Systems/AgentIDCardSystem.cs index d5e9dc357dd..450cb2e0b0d 100644 --- a/Content.Server/Access/Systems/AgentIDCardSystem.cs +++ b/Content.Server/Access/Systems/AgentIDCardSystem.cs @@ -77,6 +77,11 @@ private void OnJobChanged(EntityUid uid, AgentIDCardComponent comp, AgentIDCardJ return; _cardSystem.TryChangeJobTitle(uid, args.Job, idCard); + + // A-13 upgraded chat system start + if (TryFindJobProtoFromJobName(args.Job.ToLowerInvariant(), out var job)) + _cardSystem.TryChangeJobColor(uid, PresetIdCardSystem.GetJobColor(_prototypeManager, job), job.RadioIsBold); + // A-13 upgraded chat system end } private void OnNameChanged(EntityUid uid, AgentIDCardComponent comp, AgentIDCardNameChangedMessage args) @@ -109,15 +114,41 @@ private bool TryFindJobProtoFromIcon(StatusIconPrototype jobIcon, [NotNullWhen(t { foreach (var jobPrototype in _prototypeManager.EnumeratePrototypes()) { - if(jobPrototype.Icon == jobIcon.ID) + if (jobPrototype.Icon == jobIcon.ID) + { + job = jobPrototype; + return true; + } + } + + job = null; + return false; + } + + // A-13 upgraded chat system start + private bool TryFindJobProtoFromJobName(string jobName, [NotNullWhen(true)] out JobPrototype? job) + { + foreach (var jobPrototype in _prototypeManager.EnumeratePrototypes()) + { + if (jobPrototype.LocalizedName == jobName) { job = jobPrototype; return true; } } + foreach (var jobPrototypePassenger in _prototypeManager.EnumeratePrototypes()) + { + if (jobPrototypePassenger.LocalizedName == "пассажир") + { + job = jobPrototypePassenger; + return true; + } + } + job = null; return false; } + // A-13 upgraded chat system end } } diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs index d11890013ab..abd3227a234 100644 --- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs +++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs @@ -85,7 +85,7 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component var jobProto = new ProtoId(string.Empty); if (TryComp(targetId, out var keyStorage) - && keyStorage.Key is {} key + && keyStorage.Key is { } key && _record.TryGetRecord(key, out var record)) { jobProto = record.JobPrototype; @@ -140,7 +140,7 @@ private void TryWriteToTargetId(EntityUid uid, job.RadioIsBold ); // A-13 upgraded chat system start - + _idCard.TryChangeJobDepartment(targetId, job); } diff --git a/Content.Server/Access/Systems/PresetIdCardSystem.cs b/Content.Server/Access/Systems/PresetIdCardSystem.cs index e6731b7dd88..489e5f8f35d 100644 --- a/Content.Server/Access/Systems/PresetIdCardSystem.cs +++ b/Content.Server/Access/Systems/PresetIdCardSystem.cs @@ -98,10 +98,7 @@ public static string GetJobColor(IPrototypeManager prototypeManager, IPrototype var departments = prototypeManager.EnumeratePrototypes().ToList(); departments.Sort((a, b) => a.Sort.CompareTo(b.Sort)); - foreach (var department in from department in departments - from jobId in department.Roles - where jobId == jobCode - select department) + foreach (var department in departments.Where(department => department.Roles.Contains(jobCode))) { return department.Color.ToHex(); } diff --git "a/Content.Server/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaSystem.cs" "b/Content.Server/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaSystem.cs" new file mode 100644 index 00000000000..20cfb1143b6 --- /dev/null +++ "b/Content.Server/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaSystem.cs" @@ -0,0 +1,243 @@ +using Content.Shared.Verbs; +using Robust.Shared.Utility; +using Content.Shared.Popups; +using Content.Shared.Weapons.Melee; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Content.Shared.Interaction.Components; +using Content.Shared.Damage.Prototypes; +using Content.Shared.Damage; +using Robust.Shared.Prototypes; +using Content.Shared.FixedPoint; +using Content.Shared.Actions.Events; +using Robust.Server.GameObjects; +using Robust.Shared.Random; +using Content.Server.Chat.Systems; +using Content.Shared.Actions; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Andromeda.SoulСuttingKatana; +using Content.Shared.Mobs; +using Content.Shared.Weapons.Reflect; + +namespace Content.Server.Andromeda.SoulСuttingKatana; + +public sealed class SoulCuttingKatanaSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifierSystem = default!; + [Dependency] private readonly SharedPointLightSystem _pointLight = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly SharedActionsSystem _actionSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent>(AddKatanaVerbs); + SubscribeLocalEvent(OnGetMask); + SubscribeLocalEvent(OnMobStateChanged); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + foreach (var katanaComp in EntityManager.EntityQuery(true)) + { + if (!katanaComp.IsActive) + return; + + katanaComp.DamageTimer -= frameTime; + if (katanaComp.DamageTimer <= 0) + { + ApplyDamage(katanaComp); + katanaComp.DamageTimer = katanaComp.DamageInterval; + } + } + } + + public void ApplyDamage(SoulCuttingKatanaComponent katanaComp) + { + if (!_prototypeManager.TryIndex("Slash", out var slashDamageType)) + return; + + var damage = new DamageSpecifier(slashDamageType, FixedPoint2.New(2.5)); + EntityManager.System().TryChangeDamage(katanaComp.OwnerUid, damage); + } + + private void AddKatanaVerbs(EntityUid katanaUid, SoulCuttingKatanaComponent katanaComp, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + if (HasComp(args.User) && katanaComp.OwnerUid != args.User) + return; + + Verb setOwnerVerb = new Verb + { + Text = "Стать владельцем", + Act = () => SetOwner(katanaUid, katanaComp, args.User), + Icon = new SpriteSpecifier.Texture(new("/Textures/Andromeda/Lemird/VerbKatana/takekatana.png")) + }; + + if (katanaComp.OwnerIdentified) + { + args.Verbs.Remove(setOwnerVerb); + } + else + { + args.Verbs.Add(setOwnerVerb); + } + + if (katanaComp.OwnerUid == args.User) + { + Verb activateVerb = new Verb + { + Text = "Активировать катану", + Act = () => ActivateKatana(katanaUid, katanaComp, args.User), + Icon = new SpriteSpecifier.Texture(new("/Textures/Andromeda/Lemird/VerbKatana/activatekatana.png")) + }; + + if (katanaComp.IsActive) + { + Verb deactivateVerb = new Verb + { + Text = "Отключить катану", + Act = () => DeActivateKatana(katanaUid, katanaComp, args.User), + Icon = new SpriteSpecifier.Texture(new("/Textures/Andromeda/Lemird/VerbKatana/deactivatekatana.png")) + }; + + args.Verbs.Add(deactivateVerb); + args.Verbs.Remove(activateVerb); + } + else + { + args.Verbs.Add(activateVerb); + } + } + } + + private void SetOwner(EntityUid katanaUid, SoulCuttingKatanaComponent katanaComp, EntityUid ownerUid) + { + AddComp(ownerUid); + + if (TryComp(ownerUid, out var ownerComp)) + { + ownerComp.OwnerUid = ownerUid; + ownerComp.KatanaUid = katanaUid; + katanaComp.OwnerUid = ownerUid; + katanaComp.OwnerIdentified = true; + + _popupSystem.PopupCursor(Loc.GetString("Непонятные символы оказываются на катане..."), ownerUid, PopupType.Large); + + AddComp(katanaUid); + TryComp(katanaUid, out var light); + _pointLight.SetColor(katanaUid, Color.Red, light); + _pointLight.SetRadius(katanaUid, (float) 2.0, light); + _pointLight.SetEnergy(katanaUid, (float) 1.0, light); + + var message = _random.Pick(katanaComp.OneBlockMessage); + _chat.TrySendInGameICMessage(ownerUid, message, InGameICChatType.Speak, true); + + _actionSystem.AddAction(ownerUid, ref ownerComp.GetMaskActionSoulCuttingEntity, ownerComp.GetMaskSoulCuttingAction); + } + } + + private void ActivateKatana(EntityUid katanaUid, SoulCuttingKatanaComponent katanaComp, EntityUid ownerUid) + { + katanaComp.IsActive = true; + + _popupSystem.PopupCursor(Loc.GetString("КРУШИ! РУБИ! УБИВАЙ!"), ownerUid, PopupType.Large); + + if (TryComp(ownerUid, out var moveComp)) + { + katanaComp.OriginalWalkSpeed = moveComp.BaseWalkSpeed; + katanaComp.OriginalSprintSpeed = moveComp.BaseSprintSpeed; + + var newWalkSpeed = katanaComp.OriginalWalkSpeed * 1.3f; //+ 30% + var newSprintSpeed = katanaComp.OriginalSprintSpeed * 1.3f; //+ 30% + + _movementSpeedModifierSystem.ChangeBaseSpeed(ownerUid, newWalkSpeed, newSprintSpeed, moveComp.Acceleration); + } + + if (TryComp(katanaUid, out var reflectComponent)) + { + reflectComponent.ReflectProb = 0.7f; + } + + if (TryComp(katanaUid, out var meleeComp)) + { + katanaComp.OriginalDamage = meleeComp.Damage; + + meleeComp.AttackRate = 3; + meleeComp.Damage = new DamageSpecifier(_prototypeManager.Index("Slash"), FixedPoint2.New(4)); + } + + AddComp(katanaUid); + + TryComp(katanaUid, out var light); + _pointLight.SetColor(katanaUid, Color.DarkRed, light); + _pointLight.SetRadius(katanaUid, (float) 10.0, light); + _pointLight.SetEnergy(katanaUid, (float) 4.0, light); + + var message = _random.Pick(katanaComp.TwoBlockMessage); + _chat.TrySendInGameICMessage(ownerUid, message, InGameICChatType.Speak, true); + } + + private void DeActivateKatana(EntityUid katanaUid, SoulCuttingKatanaComponent katanaComp, EntityUid ownerUid) + { + katanaComp.IsActive = false; + + _popupSystem.PopupCursor(Loc.GetString("Вы чувствуете что сила полученная вам, угасает... Кажется всё закончилось."), ownerUid, PopupType.Large); + + if (TryComp(ownerUid, out var moveMod)) + { + _movementSpeedModifierSystem.ChangeBaseSpeed(ownerUid, katanaComp.OriginalWalkSpeed, katanaComp.OriginalSprintSpeed, moveMod.Acceleration); + } + + if (TryComp(katanaUid, out var meleeComp)) + { + meleeComp.AttackRate = 1; + meleeComp.Damage = katanaComp.OriginalDamage; + } + + if (TryComp(katanaUid, out var reflectComponent)) + { + reflectComponent.ReflectProb = 0.1f; + } + + RemComp(katanaUid); + + TryComp(katanaUid, out var light); + _pointLight.SetColor(katanaUid, Color.Red, light); + _pointLight.SetRadius(katanaUid, (float) 2.0, light); + _pointLight.SetEnergy(katanaUid, (float) 1.0, light); + + var message = _random.Pick(katanaComp.ThreeBlockMessage); + _chat.TrySendInGameICMessage(ownerUid, message, InGameICChatType.Speak, true); + } + + private void OnGetMask(EntityUid ownerUid, SoulCuttingUserComponent ownerComp, GetSoulCuttingMaskEvent args) + { + var user = args.Performer; + var mask = Spawn(ownerComp.SoulСuttingMaskPrototype, Transform(user).Coordinates); + _hands.TryPickupAnyHand(user, mask); + + _popupSystem.PopupEntity("Дьявольская маска появляется в руках.", user, user); + _actionSystem.RemoveAction(user, ownerComp.GetMaskActionSoulCuttingEntity); + } + + private void OnMobStateChanged(EntityUid ownerUid, SoulCuttingUserComponent ownerComp, MobStateChangedEvent args) + { + if (args.NewMobState == MobState.Critical && ownerComp.KatanaUid.HasValue) + { + var katanaUid = ownerComp.KatanaUid.Value; + if (TryComp(katanaUid, out var katanaComp) && katanaComp.IsActive) + { + DeActivateKatana(katanaUid, katanaComp, ownerUid); + } + } + } +} \ No newline at end of file diff --git "a/Content.Server/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingMaskSystem.cs" "b/Content.Server/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingMaskSystem.cs" new file mode 100644 index 00000000000..9c445bf8f05 --- /dev/null +++ "b/Content.Server/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingMaskSystem.cs" @@ -0,0 +1,160 @@ +using Content.Shared.Actions; +using Content.Shared.Actions.Events; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Interaction.Components; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Utility; +using Content.Shared.Andromeda.SoulСuttingKatana; +using Content.Shared.Inventory; +using Content.Shared.Speech; + +namespace Content.Server.Andromeda.SoulСuttingKatana; + +public sealed class SoulCuttingMaskSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actionSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent>(AddMaskVerbs); + SubscribeLocalEvent(OnRecallKatana); + } + + private void AddMaskVerbs(EntityUid maskUid, SoulCuttingMaskComponent maskComp, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract) + return; + + if (!TryComp(args.User, out var userComp) || userComp.MaskUid != null && maskComp.OwnerUid != args.User) + return; + + Verb setHostVerb = new Verb + { + Text = "Стать владельцем маски", + Act = () => SetHost(maskUid, maskComp, args.User), + Icon = new SpriteSpecifier.Texture(new("/Textures/Andromeda/Lemird/VerbKatana/takemask.png")) + }; + + if (maskComp.OwnerIdentified) + { + args.Verbs.Remove(setHostVerb); + } + else + { + args.Verbs.Add(setHostVerb); + } + + if (maskComp.OwnerUid == args.User) + { + Verb saveVerb = new Verb + { + Text = "Зафиксировать маску", + Act = () => SaveMask(maskUid, maskComp, args.User), + Icon = new SpriteSpecifier.Texture(new("/Textures/Andromeda/Lemird/VerbKatana/activatemask.png")) + }; + + if (maskComp.MaskSealed) + { + Verb removeVerb = new Verb + { + Text = "Снять маску", + Act = () => RemoveMask(maskUid, maskComp, args.User), + Icon = new SpriteSpecifier.Texture(new("/Textures/Andromeda/Lemird/VerbKatana/deactivatemask.png")) + }; + + args.Verbs.Remove(saveVerb); + args.Verbs.Add(removeVerb); + } + else + { + args.Verbs.Add(saveVerb); + } + } + } + + private void SetHost(EntityUid maskUid, SoulCuttingMaskComponent maskComp, EntityUid ownerUid) + { + if (TryComp(ownerUid, out var ownerComp)) + { + ownerComp.MaskUid = maskUid; + maskComp.OwnerUid = ownerUid; + maskComp.OwnerIdentified = true; + + _popupSystem.PopupCursor("Вы стали обладателем могущественной маски...", ownerUid, PopupType.Large); + } + } + + private void SaveMask(EntityUid maskUid, SoulCuttingMaskComponent maskComp, EntityUid ownerUid) + { + if (TryComp(ownerUid, out var ownerComp)) + { + if (!_inventorySystem.TryGetSlotEntity(ownerUid, "mask", out var slotEntity)) + { + _popupSystem.PopupCursor("Маска не находится на лице.", ownerUid, PopupType.Large); + return; + } + + maskComp.MaskSealed = true; + + if (TryComp(ownerUid, out var speechComp)) + { + maskComp.OriginalSpeechSounds = speechComp.SpeechSounds; + speechComp.SpeechSounds = "SoulCuttingSpech"; + } + + AddComp(maskUid); + + _popupSystem.PopupCursor("Вы чувствует как маска электризуется и запечатывается...", ownerComp.OwnerUid, PopupType.Large); + _actionSystem.AddAction(ownerUid, ref maskComp.RecallKatanaActionSoulCuttingEntity, maskComp.RecallKatanaSoulCuttingAction); + } + } + + private void RemoveMask(EntityUid maskUid, SoulCuttingMaskComponent maskComp, EntityUid ownerUid) + { + if (maskComp.MaskSealed) + { + maskComp.MaskSealed = false; + + if (TryComp(ownerUid, out var speechComp) && maskComp.OriginalSpeechSounds.HasValue) + { + speechComp.SpeechSounds = maskComp.OriginalSpeechSounds; + } + + RemComp(maskUid); + + _actionSystem.RemoveAction(ownerUid, maskComp.RecallKatanaActionSoulCuttingEntity); + } + } + + private void OnRecallKatana(EntityUid ownerUid, SoulCuttingUserComponent component, RecallSoulCuttingKatanaEvent args) + { + if (TryComp(ownerUid, out var ownerComp) && TryComp(ownerComp.MaskUid, out var maskComp)) + { + if (component.KatanaUid == null) + return; + + var user = args.Performer; + var katana = component.KatanaUid.Value; + + if (maskComp.MaskSealed) + { + _hands.TryPickupAnyHand(user, katana); + _popupSystem.PopupEntity("Катана появляется в руках.", user, user); + args.Handled = true; + } + else + { + _popupSystem.PopupCursor("Маска не зафиксированна.", user, PopupType.Large); + } + } + else + { + Log.Error($"Не удалось извлечь SoulCuttingUserComponent и SoulCuttingMaskComponent"); + } + } +} \ No newline at end of file diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs index 83b7b67ba46..167f3171a16 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping.Binary.Components; using Content.Shared.Audio; +using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Interaction; @@ -106,6 +107,14 @@ private void OnPumpActivate(EntityUid uid, GasPressurePumpComponent pump, Activa if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + { + _popup.PopupCursor(Loc.GetString("Вы не можете пока что пользоваться этим устройством, потому что, наиграли слишком мало времени"), args.User, PopupType.Large); + return; + } + //A-13 Eblan system update end + if (Transform(uid).Anchored) { _userInterfaceSystem.OpenUi(uid, GasPressurePumpUiKey.Key, actor.PlayerSession); diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs index ed7567428e1..26acca8f455 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasValveSystem.cs @@ -4,6 +4,7 @@ using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos.Piping; using Content.Shared.Audio; +using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update using Content.Shared.Examine; using Content.Shared.Interaction; using JetBrains.Annotations; @@ -52,6 +53,11 @@ private void OnStartup(EntityUid uid, GasValveComponent component, ComponentStar private void OnActivate(EntityUid uid, GasValveComponent component, ActivateInWorldEvent args) { + //A-13 Eblan system update start + if (HasComp(args.User)) + return; + //A-13 Eblan system update end + Toggle(uid, component); _audio.PlayPvs(component.ValveSound, uid, AudioParams.Default.WithVariation(0.25f)); } diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs index e279db09aaf..33a8b705ce8 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs @@ -11,6 +11,7 @@ using Content.Server.Popups; using Content.Shared.Atmos; using Content.Shared.Atmos.Piping.Binary.Components; +using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; using Content.Shared.Interaction; @@ -204,6 +205,11 @@ private void OnCanisterActivate(EntityUid uid, GasCanisterComponent component, A if (!TryComp(args.User, out var actor)) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + return; + //A-13 Eblan system update end + if (CheckLocked(uid, component, args.User)) return; @@ -221,6 +227,11 @@ private void OnCanisterInteractHand(EntityUid uid, GasCanisterComponent componen if (!TryComp(args.User, out var actor)) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + return; + //A-13 Eblan system update end + if (CheckLocked(uid, component, args.User)) return; diff --git a/Content.Server/Communications/CommunicationsConsoleSystem.cs b/Content.Server/Communications/CommunicationsConsoleSystem.cs index 4c82674f3eb..61cd3787aa7 100644 --- a/Content.Server/Communications/CommunicationsConsoleSystem.cs +++ b/Content.Server/Communications/CommunicationsConsoleSystem.cs @@ -220,15 +220,10 @@ private void OnSelectAlertLevelMessage(EntityUid uid, CommunicationsConsoleCompo if (message.Actor is not { Valid: true } mob) return; - //A-13 disable start //A-13 Eblan system update start - // if (HasComp(mob)) - // { - // _popupSystem.PopupEntity(Loc.GetString("В данный момент вы наиграли слишком мало времени, новички не могут пользоваться консолью связи."), uid, message.Session); - // return; - // } + if (HasComp(mob)) + return; //A-13 Eblan system update end - //A-13 disable end if (!CanUse(mob, uid)) { @@ -256,15 +251,10 @@ private void OnAnnounceMessage(EntityUid uid, CommunicationsConsoleComponent com return; } - //A-13 disable start //A-13 Eblan system update start - // if (HasComp(mob)) - // { - // _popupSystem.PopupEntity(Loc.GetString("В данный момент вы наиграли слишком мало времени, новички не могут пользоваться консолью связи."), uid, message.Session); - // return; - // } + if (HasComp(mob)) + return; //A-13 Eblan system update end - //A-13 disable end if (!CanUse(mob, uid)) { diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 679db90b79d..04e48219d20 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -22,7 +22,6 @@ using Robust.Shared.Utility; using Content.Server.Voting.Managers; using Content.Shared.Voting; -using Content.Shared.CCVar; using System.Text.RegularExpressions; //A-13 AnnonceRoundUpdate using System.IO; //A-13 AnnonceRoundUpdate @@ -294,6 +293,7 @@ public void StartRound(bool force = false) UpdateInfoText(); SendRoundStartedDiscordMessage(); RaiseLocalEvent(new RoundStartedEvent(RoundId)); // Corvax + _configurationManager.SetCVar(CCVars.GameMap, ""); //A-13 Fix forcemap #if EXCEPTION_TOLERANCE } @@ -549,10 +549,10 @@ public void RestartRound() SendStatusToAll(); UpdateInfoText(); + //A-13 Vote in end round start if (_configurationManager.GetCVar(CCVars.GameAutoMapVote)) - { _voteManager.CreateStandardVote(null, StandardVoteType.Map); - } + //A-13 Vote in end round end ReqWindowAttentionAll(); } diff --git a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs index cffe13a6c90..c68b1373aea 100644 --- a/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/MicrowaveSystem.cs @@ -297,7 +297,7 @@ private void OnInteractUsing(Entity ent, ref InteractUsingEv //A-13 Eblan system update start if (HasComp(args.User) && TryComp(args.Used, out var _)) { - _popupSystem.PopupEntity(Loc.GetString("Вы не можете вставить батарейку в микроволновку!"), ent, args.User); + _popupSystem.PopupCursor(Loc.GetString("Вы не можете вставить батарейку в микроволновку."), args.User, PopupType.Large); return; } //A-13 Eblan system update end diff --git a/Content.Server/Morgue/CrematoriumSystem.cs b/Content.Server/Morgue/CrematoriumSystem.cs index 0359abe9bb3..b61a0fcc775 100644 --- a/Content.Server/Morgue/CrematoriumSystem.cs +++ b/Content.Server/Morgue/CrematoriumSystem.cs @@ -81,9 +81,7 @@ private void AddCremateVerb(EntityUid uid, CrematoriumComponent component, GetVe //A-13 Eblan system update start if (HasComp(args.User)) - { return; - } //A-13 Eblan system update end if (!args.CanAccess || !args.CanInteract || args.Hands == null || storage.Open) diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs index c0e5a8b2e17..34edf879c41 100644 --- a/Content.Server/Radio/EntitySystems/RadioSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs @@ -221,7 +221,7 @@ private bool GetIdCardIsBold(EntityUid senderUid) { return GetIdCard(senderUid)?.RadioBold ?? false; } - // A-13 upgraded chat system end + // A-13 upgraded chat system end /// private bool HasActiveServer(MapId mapId, string channelId) diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs index a9763b64d90..69510a182db 100644 --- a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -6,6 +6,7 @@ using Content.Server.Power.EntitySystems; using Content.Server.Projectiles; using Content.Server.Weapons.Ranged.Systems; +using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Interaction; @@ -64,6 +65,14 @@ private void OnInteractHand(EntityUid uid, EmitterComponent component, InteractH if (args.Handled) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + { + _popup.PopupCursor(Loc.GetString("Вы не можете пока что пользоватсья такими устройствами, потому что, наиграли ещё слишком мало времени."), args.User, PopupType.Large); + return; + } + //A-13 Eblan system update end + if (TryComp(uid, out LockComponent? lockComp) && lockComp.Locked) { _popup.PopupEntity(Loc.GetString("comp-emitter-access-locked", @@ -103,6 +112,11 @@ private void OnGetVerb(EntityUid uid, EmitterComponent component, GetVerbsEvent< if (!args.CanAccess || !args.CanInteract || args.Hands == null) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + return; + //A-13 Eblan system update end + if (TryComp(uid, out var lockComp) && lockComp.Locked) return; diff --git a/Content.Server/Tools/ToolSystem.cs b/Content.Server/Tools/ToolSystem.cs index 7b866f3f15b..db5d7b4fa5e 100644 --- a/Content.Server/Tools/ToolSystem.cs +++ b/Content.Server/Tools/ToolSystem.cs @@ -4,9 +4,6 @@ using Content.Shared.Tools.Components; using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Popups; -using Content.Shared.Popups; //A-13 Eblan system update -using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update -using Content.Shared.Tools.Components; //A-13 Eblan system update using Robust.Server.GameObjects; using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem; diff --git a/Content.Shared/Access/Systems/SharedIdCardSystem.cs b/Content.Shared/Access/Systems/SharedIdCardSystem.cs index 071bde06929..20d15e4a8e3 100644 --- a/Content.Shared/Access/Systems/SharedIdCardSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardSystem.cs @@ -166,7 +166,7 @@ public bool TryChangeJobColor(EntityUid uid, string? jobColor, bool boldRadio = id.JobColor = jobColor; id.RadioBold = boldRadio; - Dirty(id); + Dirty(uid, id); UpdateEntityName(uid, id); if (player != null) diff --git "a/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaComponent.cs" "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaComponent.cs" new file mode 100644 index 00000000000..e044c367bc9 --- /dev/null +++ "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaComponent.cs" @@ -0,0 +1,107 @@ +using Content.Shared.Damage; +using Robust.Shared.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Andromeda.SoulСuttingKatana; + +[RegisterComponent] +public sealed partial class SoulCuttingKatanaComponent : Component +{ + [DataField("ownerUid")] + public EntityUid OwnerUid; + + [DataField("isActive")] + public bool IsActive { get; set; } = false; + + [DataField("ownerIdentified")] + public bool OwnerIdentified { get; set; } = false; + + [DataField("originalWalkSpeed")] + public float OriginalWalkSpeed { get; set; } + + [DataField("originalSprintSpeed")] + public float OriginalSprintSpeed { get; set; } + + [DataField("speedReduced")] + public bool SpeedReduced { get; set; } = false; + + [DataField("damageTimer")] + public float DamageTimer { get; set; } = 0.7f; + + [DataField("damageInterval")] + public float DamageInterval { get; set; } = 0.7f; + + [DataField("originalDamage")] + public DamageSpecifier OriginalDamage = new(); + + [DataField("oneBlockMessage")] + public List OneBlockMessage { get; set; } = new() + { + "Когда-то я гнался за непокорным ветром. Теперь я охочусь на бушующую тьму.", + "Меня путают с кошмарами. Хех…", + "Во второй жизни я уже проклят...", + "Я думал, что смерть принесёт мне покой. Как же я был наивен…", + "Меня терзает прошлое, которое я не в силах изменить...", + "Обрету ли я когда-нибудь покой?...", + "Ммм… Охота продолжается.", + "Ах… Как я соскучился по еде.", + "Демоны принимают разные формы, но для охоты это не важно.", + "Теперь вся моя жизнь – это охота.", + "Я здесь не для того, чтобы спасать души.", + "Если назвать страх по имени, он потеряет власть.", + "Разрушить жизнь легко. Я это знаю.", + "Люди лгут. Мечи – нет.", + "Моргни – и пропустишь свою смерть.", + "Твоя смерть не принесёт мне радости.", + "Два пути пересеклись, один завершился.", + "Жаль, что ты не видишь истинную угрозу.", + "Смерть отвергает меня, но с радостью примет тебя." + }; + + [DataField("twoBlockMessage")] + public List TwoBlockMessage { get; set; } = new() + { + "Воплощение кошмаров, я прикончу тебя раньше, чем ты доберёшься до застенчивой лани.", + "Доброта – непозволительная роскошь.", + "Это твоё лекарство.", + "С дороги!", + "Я спасу тебя от тебя.", + "Отступись!", + "Страх – твои оковы.", + "Жертва неуверенности!", + "Почему ты отвергаешь искупление?", + "Тебе уже не помочь.", + "Сомнения выдают тебя.", + "От страха не сбежать.", + "Жаль клинки о тебя марать.", + "Сожаления – твоя слабость!", + "Внутренние демоны… Хм.", + "Без жалости и сожалений.", + "Похоже, ты во власти демона.", + "Отступи, или падешь от моих клинков.", + "Настоящая битва в твоей душе.", + "Оса-и!", + "Ко-ан!", + "Ка-се-тон!", + "Разрубить!", + "Прятаться негде!", + "Сквозь пелену!", + "Тысяча порезов!", + "Сгинь!", + "Прощай…" + }; + + [DataField("threeBlockMessage")] + public List ThreeBlockMessage { get; set; } = new() + { + "Пора заканчивать.", + "Я отступаю, чтобы снова идти вперед", + "Ещё один демон отправляется туда, где ему и место.", + "С каждой новой печатью демонов становится только больше.", + "Я не враг тебе.", + "Отбрось груз прошлого.", + "Треснувшая маска и меч, утративший честь.", + "Тобой не движет демон, нет смысла тратить на тебя время." + }; +} \ No newline at end of file diff --git "a/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaEvent.cs" "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaEvent.cs" new file mode 100644 index 00000000000..7c4928c034c --- /dev/null +++ "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingKatanaEvent.cs" @@ -0,0 +1,5 @@ +namespace Content.Shared.Actions.Events; + +public sealed partial class RecallSoulCuttingKatanaEvent : InstantActionEvent { } + +public sealed partial class GetSoulCuttingMaskEvent : InstantActionEvent { } \ No newline at end of file diff --git "a/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingMaskComponent.cs" "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingMaskComponent.cs" new file mode 100644 index 00000000000..4c04aa1591f --- /dev/null +++ "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingMaskComponent.cs" @@ -0,0 +1,30 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Content.Shared.Speech; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Andromeda.SoulСuttingKatana; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SoulCuttingMaskComponent : Component +{ + [DataField("ownerUid")] + public EntityUid OwnerUid; + + [DataField("maskSealed")] + public bool MaskSealed { get; set; } = false; + + [DataField("ownerIdentified")] + public bool OwnerIdentified { get; set; } = false; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("speechSounds")] + public ProtoId? OriginalSpeechSounds; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("recallKatanaSoulCuttingAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string RecallKatanaSoulCuttingAction = "ActionRecallSoulCuttingKatana"; + + [DataField, AutoNetworkedField] + public EntityUid? RecallKatanaActionSoulCuttingEntity; +} \ No newline at end of file diff --git "a/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingUserComponent.cs" "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingUserComponent.cs" new file mode 100644 index 00000000000..94fb43ab35d --- /dev/null +++ "b/Content.Shared/Andromeda/Soul\320\241uttingKatana/Soul\320\241uttingUserComponent.cs" @@ -0,0 +1,28 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Andromeda.SoulСuttingKatana; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class SoulCuttingUserComponent : Component +{ + [DataField("ownerUid")] + public EntityUid OwnerUid; + + [DataField("katanaUid")] + public EntityUid? KatanaUid; + + [DataField("maskUid")] + public EntityUid? MaskUid; + + [DataField("soulСuttingMaskPrototype", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string SoulСuttingMaskPrototype = "SoulСuttingMask"; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("getMaskSoulCuttingAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string GetMaskSoulCuttingAction = "ActionGetSoulCuttingMask"; + + [DataField, AutoNetworkedField] + public EntityUid? GetMaskActionSoulCuttingEntity; +} \ No newline at end of file diff --git a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs index 523f67bac3d..75040f75874 100644 --- a/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/SharedItemToggleSystem.cs @@ -7,6 +7,8 @@ using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; +using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update +using Content.Shared.Tools.Components; //A-13 Eblan system update namespace Content.Shared.Item.ItemToggle; /// @@ -47,6 +49,14 @@ private void OnUseInHand(EntityUid uid, ItemToggleComponent itemToggle, UseInHan if (args.Handled) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + { + if (TryComp(uid, out var toolComponent) && toolComponent.Qualities.Contains("Welding")) + return; + } + //A-13 Eblan system update end + args.Handled = true; Toggle(uid, args.User, predicted: itemToggle.Predictable, itemToggle: itemToggle); diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index 974755f0004..1abcffa9597 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.Administration.Logs; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; +using Content.Shared.CombatMode.Pacification; //A-13 Eblan system update using Content.Shared.Construction; using Content.Shared.Database; using Content.Shared.DoAfter; @@ -129,6 +130,11 @@ private void OnAfterInteract(EntityUid uid, RCDComponent component, AfterInterac if (args.Handled || !args.CanReach) return; + //A-13 Eblan system update start + if (HasComp(args.User)) + return; + //A-13 Eblan system update end + var user = args.User; var location = args.ClickLocation; diff --git a/Resources/Audio/Andromeda/Lemird/Misc/katanahit.ogg b/Resources/Audio/Andromeda/Lemird/Misc/katanahit.ogg new file mode 100644 index 00000000000..c37f9008959 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/Misc/katanahit.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/Misc/katanaswipe.ogg b/Resources/Audio/Andromeda/Lemird/Misc/katanaswipe.ogg new file mode 100644 index 00000000000..7ca4863a56a Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/Misc/katanaswipe.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask1.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask1.ogg new file mode 100644 index 00000000000..cfccb65aee7 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask1.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask2.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask2.ogg new file mode 100644 index 00000000000..dbe775c4a22 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask2.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask3.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask3.ogg new file mode 100644 index 00000000000..a29dff05dcb Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask3.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim1.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim1.ogg new file mode 100644 index 00000000000..51757ffa736 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim1.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim2.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim2.ogg new file mode 100644 index 00000000000..67f8a169dc2 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim2.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim3.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim3.ogg new file mode 100644 index 00000000000..d115dcecfc4 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim3.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim4.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim4.ogg new file mode 100644 index 00000000000..65d501a3ad7 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim4.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim5.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim5.ogg new file mode 100644 index 00000000000..3494cf213e6 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim5.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim6.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim6.ogg new file mode 100644 index 00000000000..a43363d461d Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim6.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim7.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim7.ogg new file mode 100644 index 00000000000..e9a2c0cbf6c Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim7.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say1.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say1.ogg new file mode 100644 index 00000000000..db0e560d9f3 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say1.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say2.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say2.ogg new file mode 100644 index 00000000000..640fcd3213c Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say2.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say3.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say3.ogg new file mode 100644 index 00000000000..dca76216e2a Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say3.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say4.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say4.ogg new file mode 100644 index 00000000000..a14742ec5dd Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say4.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say5.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say5.ogg new file mode 100644 index 00000000000..e6031c5f067 Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say5.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say6.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say6.ogg new file mode 100644 index 00000000000..0a7c130917f Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say6.ogg differ diff --git a/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say7.ogg b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say7.ogg new file mode 100644 index 00000000000..d37ee9e8ccc Binary files /dev/null and b/Resources/Audio/Andromeda/Lemird/SoundCollection/SoulUser/say7.ogg differ diff --git a/Resources/Prototypes/Andromeda/Entities/Objects/Misc/books.yml b/Resources/Prototypes/Andromeda/Entities/Objects/Misc/books.yml index 12e35715281..2277d8c40cd 100644 --- a/Resources/Prototypes/Andromeda/Entities/Objects/Misc/books.yml +++ b/Resources/Prototypes/Andromeda/Entities/Objects/Misc/books.yml @@ -7,7 +7,7 @@ - type: Sprite sprite: Objects/Misc/books.rsi layers: - - state: book7 + - state: icon_medical - type: MeleeWeapon damage: types: diff --git a/Resources/Prototypes/Andromeda/Evrozor's Prototypes/Clothing/med_solution_hud.yml b/Resources/Prototypes/Andromeda/Evrozor's Prototypes/Clothing/med_solution_hud.yml new file mode 100644 index 00000000000..eca3a1d6542 --- /dev/null +++ b/Resources/Prototypes/Andromeda/Evrozor's Prototypes/Clothing/med_solution_hud.yml @@ -0,0 +1,112 @@ +- type: entity + parent: ClothingEyesBase + id: ClothingEyesHudMedSol + suffix: Андромеда + name: медицинский хим визор + description: Окуляр с индикатором на стекле, который сканирует гуманоидов в поле зрения и предоставляет точные данные о состоянии их здоровья. Со встроеным химическим анализатором. + components: + - type: Sprite + sprite: Andromeda/Evrozor/Clothing/medsol.rsi + - type: Clothing + sprite: Andromeda/Evrozor/Clothing/medsol.rsi + - type: SolutionScanner + - type: ShowHealthBars + damageContainers: + - Biological + - type: ShowHealthIcons + damageContainers: + - Biological + - type: Construction + graph: HudMedSol + node: medsolHud + +- type: constructionGraph + id: HudMedSol + start: start + graph: + - node: start + edges: + - to: medsolHud + steps: + - tag: HudMedical + name: medical hud + icon: + sprite: Clothing/Eyes/Hud/med.rsi + state: icon + doAfter: 5 + - tag: HudChemical + name: chemical analysis goggles + icon: + sprite: Clothing/Eyes/Glasses/science.rsi + state: icon + doAfter: 5 + - material: Cable + amount: 5 + doAfter: 5 + - tag: Radio + name: radio + icon: + sprite: Objects/Devices/communication.rsi + state: walkietalkie + doAfter: 5 + - tag: CapacitorStockPart + name: capacitor + icon: + sprite: Objects/Misc/stock_parts.rsi + state: capacitor + doAfter: 5 + - tag: CapacitorStockPart + name: capacitor + icon: + sprite: Objects/Misc/stock_parts.rsi + state: capacitor + doAfter: 5 + - node: medsolHud + entity: ClothingEyesHudMedSol + +- type: construction + name: медицинский хим визор + id: ClothingEyesHudMedSol + graph: HudMedSol + startNode: start + targetNode: medsolHud + category: construction-category-clothing + description: Два визора, соединенные руками. + icon: { sprite: Andromeda/Evrozor/Clothing/medsol.rsi, state: icon } + objectType: Item + + +- type: latheRecipe + id: ClothingEyesHudMedical + result: ClothingEyesHudMedical + completetime: 2 + materials: + Steel: 150 + Plastic: 200 + Glass: 300 + +- type: latheRecipe + id: RadioHandheld + result: RadioHandheld + completetime: 2 + materials: + Steel: 100 + Plastic: 200 + Glass: 100 + +- type: technology + id: Huds + name: Окулярная технология + icon: + sprite: Clothing/Eyes/Hud/med.rsi + state: icon + discipline: CivilianServices + tier: 1 + cost: 5000 + recipeUnlocks: + - ClothingEyesHudMedical + - ClothingEyesHudSecurity + - ClothingEyesGlassesChemical + +- type: Tag + id: HudChemical \ No newline at end of file diff --git a/Resources/Prototypes/Andromeda/Lemird Prototype's/katanasould.yml b/Resources/Prototypes/Andromeda/Lemird Prototype's/katanasould.yml new file mode 100644 index 00000000000..8216a49985a --- /dev/null +++ b/Resources/Prototypes/Andromeda/Lemird Prototype's/katanasould.yml @@ -0,0 +1,106 @@ +- type: entity + parent: Katana + id: SoulСuttingKatana + name: катана разрезающая душу + description: Судя по всему это катана которая имеет странные символы... Возможно её не стоит трогать... + suffix: Андромеда, катана синдиката. + components: + - type: SoulCuttingKatana + - type: Sprite + sprite: Andromeda/Lemird/soulkatana.rsi + - type: Item + size: Normal + sprite: Andromeda/Lemird/soulkatana.rsi + - type: MeleeWeapon + attackRate: 1 + damage: + types: + Slash: 10 + soundSwing: /Audio/Andromeda/Lemird/Misc/katanaswipe.ogg + soundHit: /Audio/Andromeda/Lemird/Misc/katanahit.ogg + wideAnimationRotation: -135 + - type: Reflect + reflectProb: 0.1 + +- type: entity + parent: ClothingMaskBase + id: SoulСuttingMask + name: дьявольская маска + description: Маска выглядит как обычнакя маска, только выглядит немного... Странно... + suffix: Андромеда, катана синдиката + components: + - type: SoulCuttingMask + - type: BreathMask + - type: EyeProtection + protectionTime: 5 + - type: Sprite + sprite: Andromeda/Clothing/Mask/redfestivalmask.rsi + - type: Clothing + sprite: Andromeda/Clothing/Mask/redfestivalmask.rsi + +- type: entity + id: ActionRecallSoulCuttingKatana + name: Вернуть катану назад + description: Телепортирует катану разрезающую душу назад к вам в руки. + noSpawn: true + components: + - type: InstantAction + useDelay: 60 + icon: + sprite: Andromeda/Lemird/soulkatana.rsi + state: icon + itemIconStyle: NoItem + priority: -11 + event: !type:RecallSoulCuttingKatanaEvent {} + +- type: entity + id: ActionGetSoulCuttingMask + name: Получить маску разрезающую душу + description: Вы получаете уникальную маску которая даёт вам лишь больше сил. + noSpawn: true + components: + - type: InstantAction + icon: + sprite: Andromeda/Clothing/Mask/redfestivalmask.rsi + state: icon + itemIconStyle: NoItem + priority: -11 + event: !type:GetSoulCuttingMaskEvent {} + +- type: speechSounds + id: SoulCuttingSpech + saySound: + collection: SoulUserSaySpeech + askSound: + collection: SoulUserAskSpeech + exclaimSound: + collection: SoulUserExclaimSpeech + +- type: soundCollection + id: SoulUserSaySpeech + files: + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say1.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say2.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say3.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say4.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say5.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say6.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/say7.ogg + +- type: soundCollection + id: SoulUserExclaimSpeech + files: + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim1.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim2.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim3.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim4.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim5.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim6.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/exclaim7.ogg + +- type: soundCollection + id: SoulUserAskSpeech + files: + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask1.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask2.ogg + - /Audio/Andromeda/Lemird/SoundCollection/SoulUser/ask3.ogg \ No newline at end of file diff --git a/Resources/Prototypes/Andromeda/Lemird Prototype's/uplinkcatolog.yml b/Resources/Prototypes/Andromeda/Lemird Prototype's/uplinkcatolog.yml index f7717696ebe..2520c8174d3 100644 --- a/Resources/Prototypes/Andromeda/Lemird Prototype's/uplinkcatolog.yml +++ b/Resources/Prototypes/Andromeda/Lemird Prototype's/uplinkcatolog.yml @@ -67,4 +67,20 @@ cost: Telecrystal: 5 categories: - - UplinkPointless \ No newline at end of file + - UplinkPointless + +- type: listing + id: UplinkSoulСuttingKatana + name: катана разрезающая душу + description: Катана, которой пользовались ещё до появления NanoTrasen. Взаимодействовать с ней необходимо через контекстное меню и хотбар. Когда вы станете владельцем катаны то вам откроются возможности получить уникальную маску и активировать катану. При активации катаны вы получаете бонус к скорости, а так же сверх быструю атаку, но урон от катаны намного меньше и каждые 0.7 секунд наносится режущий урон. Деактивировать катану возможно через контекстное меню точно так же, как и активация. Получение маски, становления владельцем и фиксации маски на лице даёт вам возможность возвращать катану каждую минуту, а так же даёт вам другой голос, но пока вы фиксируете маску на своём лице её невозможно снять. Только лишь вы можете её деактивировать чтобы снять. К тому же если вы уже стали владельцем любого из предмета, то другие не могут пользоваться ими. Круши! Руби! Разрезай! + icon: { sprite: Andromeda/Lemird/soulkatana.rsi, state: icon } + productEntity: SoulСuttingKatana + cost: + Telecrystal: 14 + categories: + - UplinkWeaponry + conditions: + - !type:StoreWhitelistCondition + blacklist: + tags: + - NukeOpsUplink \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index 16529790ccc..53cba54610e 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -224,6 +224,11 @@ - type: Clothing sprite: Clothing/Eyes/Glasses/science.rsi - type: SolutionScanner + #A-13 HudChemical start + - type: Tag + tags: + - HudChemical + #A-13 HudChemical end - type: entity parent: ClothingEyesBase diff --git a/Resources/Prototypes/Entities/Objects/Devices/radio.yml b/Resources/Prototypes/Entities/Objects/Devices/radio.yml index 43f84fe404e..43838761cb6 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/radio.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/radio.yml @@ -20,6 +20,10 @@ - type: Item sprite: Objects/Devices/communication.rsi heldPrefix: walkietalkie + #A-13 Added price for walkie-talkie start + - type: StaticPrice + price: 40 + #A-13 Added price for walkie-talkie end - type: Tag tags: - Radio diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 9d525f7f25c..f563af2c86a 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -196,6 +196,7 @@ - WeaponCapacitorRechargerCircuitboard - HandheldStationMap - ClothingHeadHatWelding + - RadioHandheld #A-13 MedSolHud craft - type: EmagLatheRecipes emagStaticRecipes: - BoxLethalshot @@ -266,7 +267,6 @@ staticRecipes: - LargeBeaker - Dropper - - ClothingEyesGlassesChemical dynamicRecipes: - PowerDrill - MiningDrill @@ -330,6 +330,7 @@ - FauxTileAstroSnow - OreBagOfHolding - DeviceQuantumSpinInverter + - ClothingEyesGlassesChemical #A-13 MedSolHud craft - type: EmagLatheRecipes emagDynamicRecipes: - BoxBeanbag @@ -713,7 +714,6 @@ - BoxShotgunFlare - BoxShotgunPractice - BoxShotgunSlug - - ClothingEyesHudSecurity - Flash - ForensicPad - Handcuffs @@ -748,6 +748,7 @@ - WeaponDisablerPractice - WeaponLaserCarbinePractice - Zipties + - ClothingEyesHudSecurity #A-13 MedSolHud craft dynamicRecipes: - BoxBeanbag - BoxShotgunIncendiary @@ -915,13 +916,14 @@ - Drill - Saw - Hemostat - - ClothingEyesGlassesChemical dynamicRecipes: - ChemicalPayload - CryostasisBeaker - BluespaceBeaker - SyringeBluespace - SyringeCryostasis + - ClothingEyesGlassesChemical #A-13 MedSolHud craft + - ClothingEyesHudMedical #A-13 MedSolHud craft - type: Machine board: MedicalTechFabCircuitboard - type: StealTarget diff --git a/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/equipped-EYES.png b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/equipped-EYES.png new file mode 100644 index 00000000000..9d763a8ff62 Binary files /dev/null and b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/icon.png b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/icon.png new file mode 100644 index 00000000000..e4a988652fd Binary files /dev/null and b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/icon.png differ diff --git a/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/inhand-left.png b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/inhand-left.png new file mode 100644 index 00000000000..b8ba3af551b Binary files /dev/null and b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/inhand-left.png differ diff --git a/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/inhand-right.png b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/inhand-right.png new file mode 100644 index 00000000000..0b94780ca1e Binary files /dev/null and b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/inhand-right.png differ diff --git a/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/meta.json b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/meta.json new file mode 100644 index 00000000000..82ed5395e10 --- /dev/null +++ b/Resources/Textures/Andromeda/Evrozor/Clothing/medsol.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprite by s6766, code by Evrozor for Andromeda-13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/activatekatana.png b/Resources/Textures/Andromeda/Lemird/VerbKatana/activatekatana.png new file mode 100644 index 00000000000..eee946d1a26 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/VerbKatana/activatekatana.png differ diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/activatemask.png b/Resources/Textures/Andromeda/Lemird/VerbKatana/activatemask.png new file mode 100644 index 00000000000..e5a397f3e4c Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/VerbKatana/activatemask.png differ diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/deactivatekatana.png b/Resources/Textures/Andromeda/Lemird/VerbKatana/deactivatekatana.png new file mode 100644 index 00000000000..31de07dc7b0 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/VerbKatana/deactivatekatana.png differ diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/deactivatemask.png b/Resources/Textures/Andromeda/Lemird/VerbKatana/deactivatemask.png new file mode 100644 index 00000000000..ef3d2de64bf Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/VerbKatana/deactivatemask.png differ diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/katana.yml b/Resources/Textures/Andromeda/Lemird/VerbKatana/katana.yml new file mode 100644 index 00000000000..497c6beff96 --- /dev/null +++ b/Resources/Textures/Andromeda/Lemird/VerbKatana/katana.yml @@ -0,0 +1,2 @@ +sample: + filter: true \ No newline at end of file diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/takekatana.png b/Resources/Textures/Andromeda/Lemird/VerbKatana/takekatana.png new file mode 100644 index 00000000000..bb4614ca883 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/VerbKatana/takekatana.png differ diff --git a/Resources/Textures/Andromeda/Lemird/VerbKatana/takemask.png b/Resources/Textures/Andromeda/Lemird/VerbKatana/takemask.png new file mode 100644 index 00000000000..f9232db6136 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/VerbKatana/takemask.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/icon.png b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/icon.png new file mode 100644 index 00000000000..f5a7caa5d81 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/icon.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/inhand-left.png b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/inhand-left.png new file mode 100644 index 00000000000..53a57657261 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/inhand-left.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/inhand-right.png b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/inhand-right.png new file mode 100644 index 00000000000..cd086832e7c Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/inhand-right.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/meta.json b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/meta.json new file mode 100644 index 00000000000..d7f91ef48c5 --- /dev/null +++ b/Resources/Textures/Andromeda/Lemird/soulkatana.rsi/meta.json @@ -0,0 +1,79 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "By Lemird", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 1.0, 1.0, 1.0, 1.0 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 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 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 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 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Andromeda/Lemird/soulmask.rsi/equipped-MASK-reptilian.png b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/equipped-MASK-reptilian.png new file mode 100644 index 00000000000..1917e479912 Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/equipped-MASK-reptilian.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulmask.rsi/equipped-MASK.png b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/equipped-MASK.png new file mode 100644 index 00000000000..cf718119d7e Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulmask.rsi/icon.png b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/icon.png new file mode 100644 index 00000000000..272b1d9998f Binary files /dev/null and b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/icon.png differ diff --git a/Resources/Textures/Andromeda/Lemird/soulmask.rsi/meta.json b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/meta.json new file mode 100644 index 00000000000..4a657daf90b --- /dev/null +++ b/Resources/Textures/Andromeda/Lemird/soulmask.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "By Lemird", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + }, + { + "name": "equipped-MASK-reptilian", + "directions": 4 + } + ] +} \ No newline at end of file