From 583d2f0b79184a8a9b5638ef9a6f2707908d5f31 Mon Sep 17 00:00:00 2001 From: MataVsn <113342160+MataVsn@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:27:09 +0300 Subject: [PATCH 1/3] new emotes --- .../EmptyInventorySlotRequirement.cs | 21 ++ .../Requirements/HeldItemRequirement.cs | 27 +++ .../_Arcane/Interactions/ERP/anus.yml | 71 ++++++ .../_Arcane/Interactions/ERP/boobs.yml | 23 ++ .../_Arcane/Interactions/ERP/butt.yml | 121 +++++++++++ .../_Arcane/Interactions/ERP/ears.yml | 73 +++++++ .../_Arcane/Interactions/ERP/face.yml | 203 ++++++++++++++++++ .../_Arcane/Interactions/ERP/friendship.yml | 154 +++++++++++++ .../_Arcane/Interactions/ERP/mouth.yml | 20 ++ .../_Arcane/Interactions/ERP/neck.yml | 54 +++++ .../_Arcane/Interactions/ERP/penis.yml | 140 ++++++++++++ .../_Arcane/Interactions/ERP/pussy.yml | 75 +++++++ Resources/Prototypes/_Arcane/tags.yml | 12 ++ 13 files changed, 994 insertions(+) create mode 100644 Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs create mode 100644 Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs create mode 100644 Resources/Prototypes/_Arcane/Interactions/ERP/face.yml create mode 100644 Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml diff --git a/Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs b/Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs new file mode 100644 index 00000000000..38c5cc53bd6 --- /dev/null +++ b/Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs @@ -0,0 +1,21 @@ +using Content.Shared.Inventory; +using Robust.Shared.Serialization; + +namespace Content.Shared._Arcane.ErpPanel.Requirements; + +[Serializable, NetSerializable] +public sealed partial class EmptyInventorySlotRequirement : ErpRequirement +{ + [DataField(required: true)] + public string Slot = string.Empty; + + public override bool IsAvailable(EntityUid uid, IEntityManager entityManager) + { + var inventory = entityManager.System(); + + if (!inventory.HasSlot(uid, Slot)) + return false; + + return !inventory.TryGetSlotEntity(uid, Slot, out _); + } +} diff --git a/Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs b/Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs new file mode 100644 index 00000000000..f70ded645d7 --- /dev/null +++ b/Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs @@ -0,0 +1,27 @@ +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Tag; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._Arcane.ErpPanel.Requirements; + +[Serializable, NetSerializable] +public sealed partial class HeldItemRequirement : ErpRequirement +{ + [DataField(required: true)] + public HashSet> Tags = new(); + + public override bool IsAvailable(EntityUid uid, IEntityManager entityManager) + { + var hands = entityManager.System(); + var tags = entityManager.System(); + + foreach (var held in hands.EnumerateHeld(uid)) + { + if (tags.HasAnyTag(held, Tags)) + return true; + } + + return false; + } +} diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml index fd43fc17ae4..da4232c849e 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml @@ -99,3 +99,74 @@ - Tajaran - HumanoidXeno - Rodentia + +- type: panelInteraction + id: AnalLick2 + category: Anus + name: Глубоко вылизать анус + userArouse: 5 + targetArouse: 15 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/champ_fingering.ogg + messages: + - глубоко проникает языком в анус $target. + - страстно вылизывает анус $target. + - жадно лижет анус $target. + - плотно прижимается языком к анусу $target, проникая глубже. + - ритмично ласкает анус $target языком. + icon: _Arcane/Interface/ErpPanel/anal_lick2.png + targetRequirements: + - !type:EroticOrganRequirement + organ: anus + requireVisible: true + +- type: panelInteraction + id: AnalFingering2 + category: Anus + name: Двумя пальцами в анус + userArouse: 5 + targetArouse: 15 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/champ_fingering.ogg + messages: + - вводит два пальца в анус $target. + - двигает двумя пальцами внутри ануса $target. + - глубоко проникает двумя пальцами в анус $target. + - ритмично трахает пальцами анус $target. + - медленно вводит и выводит два пальца из ануса $target. + icon: _Arcane/Interface/ErpPanel/anal_fingering2.png + targetRequirements: + - !type:EroticOrganRequirement + organ: anus + requireVisible: true + +- type: panelInteraction + id: ToyButt + category: Anus + name: Использовать игрушку в попе + userArouse: 5 + targetArouse: 15 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/asscrap1.ogg + - /Audio/_Arcane/Interactions/asscrap2.ogg + - /Audio/_Arcane/Interactions/asscrap3.ogg + messages: + - вставляет игрушку в анус $target. + - двигает секс-игрушкой в анусе $target. + - ритмично использует игрушку в попе $target. + - аккуратно вводит игрушку в анус $target. + - медленно работает игрушкой в попке $target. + icon: _Arcane/Interface/ErpPanel/toy_butt.png + targetRequirements: + - !type:EroticOrganRequirement + organ: anus + requireVisible: true + userRequirements: + - !type:HeldItemRequirement + tags: + - SexToyAnal + - SexToyDildo + - SexToyVibrator diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml index a520e919575..2aaef1fbb44 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml @@ -168,3 +168,26 @@ - !type:EroticOrganRequirement organ: breasts requireVisible: true + +- type: panelInteraction + id: BoobsSuck + category: Boobs + name: Сосать сосок + userArouse: 5 + targetArouse: 10 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/oral1.ogg + - /Audio/_Arcane/Interactions/oral2.ogg + messages: + - захватывает губами сосок $target. + - нежно сосёт сосок $target. + - посасывает сосок $target. + - обхватывает губами сосок $target и тихо посасывает. + - медленно водит языком вокруг соска $target. + - ласкает сосок $target губами. + icon: _Arcane/Interface/ErpPanel/boobs_suck.png + targetRequirements: + - !type:EroticOrganRequirement + organ: breasts + requireVisible: true diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml index 60a24fb66bc..ede4d70e186 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml @@ -19,3 +19,124 @@ - !type:EroticOrganRequirement organ: penis requireVisible: true + +- type: panelInteraction + id: ButtMassage + category: Butt + name: Массировать попку + targetArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + - /Audio/_Arcane/Interactions/pat2.ogg + messages: + - массирует попку $target. + - разминает ягодицы $target. + - мнёт булки $target. + - нежно разминает попу $target. + - водит руками по ягодицам $target круговыми движениями. + - ласково мнёт попку $target. + icon: _Arcane/Interface/ErpPanel/butt_massage.png + +- type: panelInteraction + id: ButtTail + category: Butt + name: Гладить попу хвостом + targetArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - проводит хвостиком по попке $target. + - гладит ягодицы $target своим хвостом. + - водит хвостом по булкам $target. + - ласкает попу $target кончиком хвоста. + - обвивает хвостом ягодицы $target. + icon: _Arcane/Interface/ErpPanel/butt_tail.png + userRequirements: + - !type:SpeciesRequirement + species: + - Demon + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: HandsOnButt + category: Butt + name: Схватить за попку + userArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + - /Audio/_Arcane/Interactions/pat2.ogg + messages: + - хватает $target за попку! + - кладёт руки на ягодицы $target. + - сжимает попку $target. + - крепко хватает $target за булки. + - обхватывает ягодицы $target руками. + icon: _Arcane/Interface/ErpPanel/hands_on_butt.png + +- type: panelInteraction + id: KissButt + category: Butt + name: Поцеловать попку + targetArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + - /Audio/_Arcane/Interactions/kiss3.ogg + messages: + - целует $target в попку. + - оставляет поцелуй на ягодице $target. + - нежно целует попку $target. + - осыпает поцелуями попку $target. + - прижимается губами к ягодице $target. + icon: _Arcane/Interface/ErpPanel/kiss_butt.png + +- type: panelInteraction + id: SlapButt + category: Butt + name: Шлёпнуть по попе + userArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/bang1.ogg + - /Audio/_Arcane/Interactions/bang2.ogg + - /Audio/_Arcane/Interactions/bang4.ogg + - /Audio/_Arcane/Interactions/bang5.ogg + - /Audio/_Arcane/Interactions/bang6.ogg + messages: + - шлёпает $target по попе! + - звонко хлопает по ягодице $target. + - резко шлёпает $target по булке. + - звонко бьёт $target по попке! + - отвешивает шлепок по ягодицам $target. + icon: _Arcane/Interface/ErpPanel/slap_butt.png + +- type: panelInteraction + id: HornsAssF + category: Butt + name: Водить рогом по попе + userArouse: 5 + targetArouse: 10 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - проводит рогом по ягодицам $target. + - водит рогом по попке $target. + - ласкает попу $target своим рогом. + - аккуратно скользит острым рогом по булкам $target. + - проводит кончиком рога вдоль ягодиц $target. + icon: _Arcane/Interface/ErpPanel/horns_ass_female.png + userRequirements: + - !type:SpeciesRequirement + species: + - Demon diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml index c4ab3891a4c..eefa208d79a 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml @@ -14,3 +14,76 @@ - внезапно кусает $target за ушко. - медленно покусывает ухо $target. icon: _Arcane/Interface/ErpPanel/bite_ears.png + +- type: panelInteraction + id: BiteEarsHuman + category: Ears + name: Укусить ухо + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + messages: + - кусает ухо $target. + - осторожно прикусывает ухо $target. + - слегка кусает $target за ухо. + - игриво покусывает ушко $target. + - нежно прикусывает мочку уха $target. + - внезапно кусает $target за ушко. + icon: _Arcane/Interface/ErpPanel/bite_ears_human.png + +- type: panelInteraction + id: EarsKiss + category: Ears + name: Поцеловать в ухо + targetArouse: 5 + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + - /Audio/_Arcane/Interactions/kiss3.ogg + messages: + - нежно целует $target в ушко. + - касается губами уха $target. + - оставляет нежный поцелуй на ухе $target. + - медленно целует мочку уха $target. + - прижимается губами к ушку $target. + - целует $target за ухом. + icon: _Arcane/Interface/ErpPanel/ears_kiss.png + +- type: panelInteraction + id: PatEars + category: Ears + name: Погладить ушки + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - гладит ушки $target. + - нежно чешет за ушком $target. + - ласково поглаживает ушки $target. + - осторожно трогает пушистые ушки $target. + - проводит пальцем по ушку $target. + - почёсывает $target за ушком. + icon: _Arcane/Interface/ErpPanel/pat_ears.png + targetRequirements: + - !type:SpeciesRequirement + species: + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + - Demon + +- type: panelInteraction + id: PatEarsHuman + category: Ears + name: Потеребить уши + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + messages: + - теребит ухо $target. + - аккуратно трогает ушко $target. + - лёгонько мнёт ухо $target. + - игриво тянет $target за ухо. + - нежно трогает мочку уха $target. + icon: _Arcane/Interface/ErpPanel/pat_ears_human.png diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml new file mode 100644 index 00000000000..1e763f71fb4 --- /dev/null +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml @@ -0,0 +1,203 @@ +- type: panelInteraction + id: CheeksKiss + category: Face + name: Поцеловать в щёку + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + messages: + - нежно целует $target в щёку. + - прикладывает губы к щеке $target. + - оставляет лёгкий поцелуй на щеке $target. + - ласково целует $target в щёчку. + - мягко касается губами щеки $target. + icon: _Arcane/Interface/ErpPanel/cheeks_kiss.png + +- type: panelInteraction + id: CheeksKissBoth + category: Face + name: Поцеловать в обе щёки + targetArouse: 5 + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + - /Audio/_Arcane/Interactions/kiss3.ogg + messages: + - целует $target поочерёдно в обе щёки. + - оставляет поцелуи на обеих щеках $target. + - нежно целует $target в левую, потом в правую щёку. + - приветливо целует $target в обе щёчки. + icon: _Arcane/Interface/ErpPanel/cheeks_kiss_both.png + +- type: panelInteraction + id: CheeksPat + category: Face + name: Похлопать по щекам + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + - /Audio/_Arcane/Interactions/pat2.ogg + messages: + - легонько хлопает $target по щекам. + - похлопывает $target по щекам. + - несильно шлёпает $target по щеке. + - слегка хлопает $target по щёчкам. + - игриво похлопывает $target по щеке. + icon: _Arcane/Interface/ErpPanel/cheeks_pat.png + +- type: panelInteraction + id: CheeksPress + category: Face + name: Сжать щёки + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + messages: + - сжимает щёки $target руками. + - прижимает щёки $target ладонями. + - сдавливает щёчки $target, заставляя $target сложить губы бантиком. + - мнёт щёки $target. + - игриво сжимает лицо $target ладонями. + icon: _Arcane/Interface/ErpPanel/cheeks_press.png + +- type: panelInteraction + id: GentleKiss + category: Face + name: Нежный поцелуй + userArouse: 3 + targetArouse: 5 + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + - /Audio/_Arcane/Interactions/kiss3.ogg + - /Audio/_Arcane/Interactions/kiss4.ogg + - /Audio/_Arcane/Interactions/kiss5.ogg + messages: + - нежно целует $target в губы. + - мягко касается губами губ $target. + - оставляет долгий нежный поцелуй на губах $target. + - медленно целует $target, едва касаясь губами. + - нежно прижимается губами к губам $target. + - тихо целует $target в губы. + icon: _Arcane/Interface/ErpPanel/gentle_kiss.png + +- type: panelInteraction + id: KissLips + category: Face + name: Страстный поцелуй + userArouse: 5 + targetArouse: 10 + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + - /Audio/_Arcane/Interactions/kiss3.ogg + - /Audio/_Arcane/Interactions/kiss4.ogg + - /Audio/_Arcane/Interactions/kiss5.ogg + messages: + - страстно целует $target в губы. + - притягивает $target и жадно целует в губы. + - горячо целует $target, обхватив лицо руками. + - глубоко целует $target, не отпуская. + - страстно прижимается губами к губам $target. + icon: _Arcane/Interface/ErpPanel/kiss_lips.png + +- type: panelInteraction + id: FaceRubCat + category: Face + name: Потереться мордочкой о лицо + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + messages: + - трётся мордочкой о лицо $target. + - мурча, трётся щёкой об щёку $target. + - нежно тычется носиком в лицо $target. + - водит мордашкой по щеке $target. + - мягко трётся о лицо $target. + icon: _Arcane/Interface/ErpPanel/face_rub_cat.png + userRequirements: + - !type:SpeciesRequirement + species: + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: FaceSitting + category: Face + name: Сесть лицом + userArouse: 10 + targetArouse: 10 + sounds: + - /Audio/_Arcane/Interactions/champ_fingering.ogg + messages: + - садится лицом на $target. + - плавно опускается вагиной на лицо $target. + - садится на лицо $target, прижимаясь вплотную. + - усаживается на лицо $target. + - опускается на лицо $target, обхватив ляжками голову. + icon: _Arcane/Interface/ErpPanel/face_sitting.png + userRequirements: + - !type:EroticOrganRequirement + organ: vagina + requireVisible: true + +- type: panelInteraction + id: FaceDickSlap + category: Face + name: Шлёпнуть членом по лицу + userArouse: 10 + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/bang1.ogg + - /Audio/_Arcane/Interactions/bang2.ogg + - /Audio/_Arcane/Interactions/bang3.ogg + messages: + - шлёпает членом по лицу $target. + - хлопает пенисом по щеке $target. + - игриво бьёт $target своим членом по лицу. + - проводит членом по лицу $target. + - несильно шлёпает $target членом по щеке. + icon: _Arcane/Interface/ErpPanel/face_dick_slap.png + userRequirements: + - !type:EroticOrganRequirement + organ: penis + requireVisible: true + +- type: panelInteraction + id: LegsSqueezeface + category: Face + name: Сдавить лицо ляжками + userArouse: 10 + targetArouse: 5 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - зажимает лицо $target между ляжками. + - сдавливает голову $target ляжками. + - крепко обхватывает лицо $target своими ляжками. + - сжимает голову $target между ног. + - удерживает лицо $target ляжками. + icon: _Arcane/Interface/ErpPanel/legs_squeeze_face.png + +- type: panelInteraction + id: Mewing + category: Face + name: Замяукать в лицо + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + messages: + - мяукает прямо в лицо $target. + - смотрит $target в глаза и мяукает. + - издаёт тихое «мяу» в сторону $target. + - игриво мяукает на $target. + - трётся о $target и мяукает. + icon: _Arcane/Interface/ErpPanel/mewing.png + userRequirements: + - !type:SpeciesRequirement + species: + - Felinid + - Tajaran + - HumanoidXeno diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml index 2e794610b89..88b9fe9a261 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml @@ -109,3 +109,157 @@ - ударяет ладошкой по ладошке $target. - звонко шлёпает $target по ладошке! icon: _Arcane/Interface/ErpPanel/high_five.png + +- type: panelInteraction + id: FriendlyFlyingKiss + category: Friendship + name: Послать воздушный поцелуй + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + messages: + - посылает воздушный поцелуй $target. + - игриво целует кончики пальцев и посылает $target воздушный поцелуй. + - нежно дует $target воздушный поцелуй. + - дует поцелуй в сторону $target с улыбкой. + - отправляет $target воздушный поцелуй. + icon: _Arcane/Interface/ErpPanel/friendly_flying_kiss.png + +- type: panelInteraction + id: FriendlyNoseBoop + category: Friendship + name: Дать по носику + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + messages: + - тыкает пальчиком в носик $target. + - игриво дотрагивается до носика $target. + - легонько тыкает $target по носу. + - бупает $target по носику. + - аккуратно нажимает на носик $target. + icon: _Arcane/Interface/ErpPanel/friendly_nose_boop.png + +- type: panelInteraction + id: FriendlyTailPull + category: Friendship + name: Потянуть за хвост + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + messages: + - игриво дёргает $target за хвост. + - тянет за кончик хвоста $target. + - слегка тянет хвостик $target. + - хватает $target за хвост и несильно тянет. + - теребит хвостик $target. + icon: _Arcane/Interface/ErpPanel/friendly_tail_pull.png + targetRequirements: + - !type:SpeciesRequirement + species: + - Demon + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: KissHand + category: Friendship + name: Поцеловать руку + sounds: + - /Audio/_Arcane/Interactions/kiss1.ogg + - /Audio/_Arcane/Interactions/kiss2.ogg + messages: + - галантно целует руку $target. + - нежно берёт руку $target и прикладывает к губам. + - почтительно целует $target в руку. + - прикасается губами к тыльной стороне ладони $target. + - с улыбкой целует руку $target. + icon: _Arcane/Interface/ErpPanel/kiss_hand.png + +- type: panelInteraction + id: PatShoulder + category: Friendship + name: Похлопать по плечу + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + - /Audio/_Arcane/Interactions/pat2.ogg + messages: + - хлопает $target по плечу. + - дружески похлопывает $target по плечу. + - несколько раз хлопает $target по плечу. + - ободряюще похлопывает $target по плечу. + - легонько шлёпает $target по плечу. + icon: _Arcane/Interface/ErpPanel/pat_shoulder.png + +- type: panelInteraction + id: PetHead + category: Friendship + name: Погладить по голове + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - гладит $target по голове. + - нежно проводит рукой по голове $target. + - ласково треплет $target по голове. + - мягко поглаживает голову $target. + - заботливо гладит $target по головке. + - проводит ладонью по волосам $target. + icon: _Arcane/Interface/ErpPanel/pet_head.png + +- type: panelInteraction + id: PlayfulNibble + category: Friendship + name: Игриво укусить + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/pat1.ogg + messages: + - игриво покусывает $target. + - тихонько кусает $target. + - слегка прикусывает $target. + - игриво цапает $target зубками. + - нежно жуёт $target. + icon: _Arcane/Interface/ErpPanel/playful_nibble.png + +- type: panelInteraction + id: HornsPat + category: Friendship + name: Погладить рога + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - гладит рога $target. + - проводит рукой по рогам $target. + - восхищённо трогает рога $target. + - аккуратно поглаживает рог $target. + - нежно касается рогов $target. + icon: _Arcane/Interface/ErpPanel/horns_pat.png + targetRequirements: + - !type:SpeciesRequirement + species: + - Demon + +- type: panelInteraction + id: Kitty + category: Friendship + name: Потереться мордочкой + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + messages: + - трётся мордочкой о $target. + - мурча, трётся щёкой о $target. + - нежно трётся мордашкой об $target. + - тычется носиком в $target. + - игриво трётся о $target щёкой. + icon: _Arcane/Interface/ErpPanel/kitty.png + userRequirements: + - !type:SpeciesRequirement + species: + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml new file mode 100644 index 00000000000..5ebe8d7da94 --- /dev/null +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml @@ -0,0 +1,20 @@ +- type: panelInteraction + id: FeetMouth + category: Mouth + name: Футфетиш + userArouse: 10 + targetArouse: 5 + sounds: + - /Audio/_Arcane/Interactions/oral1.ogg + - /Audio/_Arcane/Interactions/oral2.ogg + messages: + - берёт ногу $target в рот. + - облизывает пальчики ног $target. + - медленно берёт ступню $target в рот. + - сосёт пальцы ног $target. + - проводит языком по ступне $target. + - нежно обсасывает пальчики $target. + icon: _Arcane/Interface/ErpPanel/feet_mouth.png + targetRequirements: + - !type:EmptyInventorySlotRequirement + slot: shoes diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml index a97626a0916..56e42b57e2c 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml @@ -71,3 +71,57 @@ - осторожно разминает затёкшие плечи. - довольно массирует собственные плечи. icon: _Arcane/Interface/ErpPanel/shoulder_massage.png + +- type: panelInteraction + id: NuzzleNeck + category: Neck + name: Уткнуться в шею + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + messages: + - уютно утыкается носом в шею $target. + - нежно тычется в шею $target. + - прижимается лицом к шее $target. + - мягко утыкается в шею $target. + - уткнувшись, прижимается к шее $target. + icon: _Arcane/Interface/ErpPanel/nuzzle_neck.png + +- type: panelInteraction + id: NuzzleNeckVulpa + category: Neck + name: Ткнуться мордочкой в шею + targetArouse: 3 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + messages: + - тычет мордочкой в шею $target. + - нежно тычется носом в шею $target. + - утыкается мордашкой в шею $target, мурча. + - прижимает мордочку к шее $target. + - водит носиком по шее $target. + icon: _Arcane/Interface/ErpPanel/nuzzle_neck_vulpa.png + userRequirements: + - !type:SpeciesRequirement + species: + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: BlowSlap + category: Neck + name: Дать пощёчину + sounds: + - /Audio/_Arcane/Interactions/bang1.ogg + - /Audio/_Arcane/Interactions/bang2.ogg + - /Audio/_Arcane/Interactions/bang3.ogg + messages: + - отвешивает пощёчину $target! + - резко бьёт $target по щеке. + - звонко даёт пощёчину $target. + - хлёстко бьёт $target по щеке. + - с размаху шлёпает $target по щеке. + icon: _Arcane/Interface/ErpPanel/blow_slap.png diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml index 8a3803691cb..f9c652a30c0 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml @@ -181,3 +181,143 @@ - !type:EroticOrganRequirement organ: penis requireVisible: true + +- type: panelInteraction + id: CockBlowjob + category: Penis + name: Сделать минет + userArouse: 5 + targetArouse: 20 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/bj1.ogg + - /Audio/_Arcane/Interactions/bj2.ogg + - /Audio/_Arcane/Interactions/bj3.ogg + - /Audio/_Arcane/Interactions/bj4.ogg + - /Audio/_Arcane/Interactions/bj5.ogg + - /Audio/_Arcane/Interactions/bj6.ogg + - /Audio/_Arcane/Interactions/bj7.ogg + - /Audio/_Arcane/Interactions/bj8.ogg + - /Audio/_Arcane/Interactions/bj9.ogg + - /Audio/_Arcane/Interactions/bj10.ogg + - /Audio/_Arcane/Interactions/bj11.ogg + messages: + - делает минет $target, активно работая головой. + - ритмично двигает головой, сосая член $target. + - жадно глотает член $target. + - страстно делает минет $target, не останавливаясь. + - быстро работает ртом и рукой на члене $target. + icon: _Arcane/Interface/ErpPanel/cock_blowjob.png + targetRequirements: + - !type:EroticOrganRequirement + organ: penis + requireVisible: true + +- type: panelInteraction + id: CockNearAssTail + category: Penis + name: Водить членом по попе с хвостом + userArouse: 10 + targetArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - водит пенисом по попке $target, обвивая хвостом. + - проводит членом по булкам $target, хвостом помогая. + - трётся членом о ягодицы $target, хвостом обвивая. + icon: _Arcane/Interface/ErpPanel/cock_near_ass_tail.png + userRequirements: + - !type:EroticOrganRequirement + organ: penis + requireVisible: true + - !type:SpeciesRequirement + species: + - Demon + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: HairFaceFuck + category: Penis + name: Трахать в рот держа за волосы + userArouse: 15 + targetArouse: 10 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/bj1.ogg + - /Audio/_Arcane/Interactions/bj2.ogg + - /Audio/_Arcane/Interactions/bj3.ogg + - /Audio/_Arcane/Interactions/bj4.ogg + - /Audio/_Arcane/Interactions/bj5.ogg + - /Audio/_Arcane/Interactions/bj6.ogg + - /Audio/_Arcane/Interactions/bj7.ogg + - /Audio/_Arcane/Interactions/bj8.ogg + - /Audio/_Arcane/Interactions/bj9.ogg + - /Audio/_Arcane/Interactions/bj10.ogg + - /Audio/_Arcane/Interactions/bj11.ogg + messages: + - хватает $target за волосы и трахает в рот. + - держит $target за голову и ритмично двигается. + - тянет $target за волосы, погружая член глубже. + - контролирует голову $target, трахая в рот. + - крепко держит $target за волосы и интенсивно трахает в рот. + icon: _Arcane/Interface/ErpPanel/hair_face_fuck.png + userRequirements: + - !type:EroticOrganRequirement + organ: penis + requireVisible: true + +- type: panelInteraction + id: LegsCockFuckTail + category: Penis + name: Трахать ляжками с хвостом + userArouse: 5 + targetArouse: 10 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/friction1.ogg + - /Audio/_Arcane/Interactions/friction2.ogg + messages: + - трахает ляжками член $target, обвивая хвостом. + - зажимает член $target между ляжками, хвостом помогая. + - трётся ляжками о член $target, хвостом обхватив. + icon: _Arcane/Interface/ErpPanel/legs_cock_fuckt_tail.png + targetRequirements: + - !type:EroticOrganRequirement + organ: penis + requireVisible: true + userRequirements: + - !type:SpeciesRequirement + species: + - Demon + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: HornsBlowjobF + category: Penis + name: Лизать рог + targetArouse: 10 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/oral1.ogg + - /Audio/_Arcane/Interactions/oral2.ogg + messages: + - облизывает рог $target. + - нежно лижет рог $target. + - проводит языком по рогу $target. + - медленно лижет кончик рога $target. + - захватывает губами рог $target. + icon: _Arcane/Interface/ErpPanel/horns_blowjob_female.png + targetRequirements: + - !type:SpeciesRequirement + species: + - Demon diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml index ea57c6a4e05..828e48f8c8a 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml @@ -77,3 +77,78 @@ - !type:EroticOrganRequirement organ: vagina requireVisible: true + +- type: panelInteraction + id: PussyTouch + category: Pussy + name: Потрогать вагину + targetArouse: 5 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/champ_fingering.ogg + messages: + - осторожно трогает вагину $target. + - лёгонько касается вагины $target. + - проводит пальцем по губам вагины $target. + - нежно трогает влажную вагину $target. + - аккуратно касается вагины $target. + icon: _Arcane/Interface/ErpPanel/pussy_touch.png + targetRequirements: + - !type:EroticOrganRequirement + organ: vagina + requireVisible: true + +- type: panelInteraction + id: PussyTailFuck + category: Pussy + name: Трахать вагину хвостом + userArouse: 5 + targetArouse: 15 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/champ_fingering.ogg + messages: + - вводит хвостик в вагину $target. + - проникает кончиком хвоста в вагину $target. + - ритмично двигает хвостом внутри вагины $target. + - медленно вводит хвост в мокрую вагину $target. + - страстно трахает вагину $target хвостом. + icon: _Arcane/Interface/ErpPanel/pussy_tail_fuck.png + targetRequirements: + - !type:EroticOrganRequirement + organ: vagina + requireVisible: true + userRequirements: + - !type:SpeciesRequirement + species: + - Demon + - Felinid + - Vulpkanin + - Tajaran + - HumanoidXeno + - Rodentia + +- type: panelInteraction + id: ToyPussy + category: Pussy + name: Использовать игрушку + targetArouse: 15 + range: 1 + sounds: + - /Audio/_Arcane/Interactions/champ_fingering.ogg + messages: + - вставляет игрушку в вагину $target. + - двигает вибратором внутри вагины $target. + - ритмично использует игрушку во влагалище $target. + - медленно вводит игрушку в мокрую вагину $target. + - аккуратно работает игрушкой во влагалище $target. + icon: _Arcane/Interface/ErpPanel/toy_pussy.png + targetRequirements: + - !type:EroticOrganRequirement + organ: vagina + requireVisible: true + userRequirements: + - !type:HeldItemRequirement + tags: + - SexToyDildo + - SexToyVibrator diff --git a/Resources/Prototypes/_Arcane/tags.yml b/Resources/Prototypes/_Arcane/tags.yml index d2da0399cfb..b4f16ea4208 100644 --- a/Resources/Prototypes/_Arcane/tags.yml +++ b/Resources/Prototypes/_Arcane/tags.yml @@ -48,3 +48,15 @@ - type: Tag id: Hookahpipe + +- type: Tag + id: SexToyAnal + +- type: Tag + id: SexToyDildo + +- type: Tag + id: SexToyVibrator + +- type: Tag + id: SexToyFleshlight From 1fde8f8185b95cee74a4b34375bc1668722fe2f6 Mon Sep 17 00:00:00 2001 From: MataVsn <113342160+MataVsn@users.noreply.github.com> Date: Mon, 22 Jun 2026 00:06:39 +0300 Subject: [PATCH 2/3] ERP MORE --- .../_Arcane/ErpPanel/ErpPanelWindow.xaml.cs | 24 +++++++++++++++ .../_Arcane/ErpPanel/ErpPanelSystem.cs | 28 ++++++++++++++--- .../_Arcane/ErpPanel/ErpPanelPrototypes.cs | 3 ++ .../_Arcane/Interactions/ERP/anus.yml | 14 +++++++++ .../_Arcane/Interactions/ERP/boobs.yml | 16 ++++++++++ .../_Arcane/Interactions/ERP/butt.yml | 14 +++++++++ .../_Arcane/Interactions/ERP/categories.yml | 24 ++++++++++++--- .../_Arcane/Interactions/ERP/ears.yml | 4 +++ .../_Arcane/Interactions/ERP/face.yml | 16 ++++++++++ .../_Arcane/Interactions/ERP/friendship.yml | 29 +++++++++--------- .../_Arcane/Interactions/ERP/mouth.yml | 4 ++- .../_Arcane/Interactions/ERP/neck.yml | 14 +++++++-- .../_Arcane/Interactions/ERP/penis.yml | 30 +++++++++++++++++-- .../_Arcane/Interactions/ERP/pussy.yml | 12 ++++++++ 14 files changed, 203 insertions(+), 29 deletions(-) diff --git a/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs b/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs index fb91e1098b0..94b5de986bb 100644 --- a/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs +++ b/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs @@ -18,6 +18,8 @@ namespace Content.Client._Arcane.ErpPanel; [GenerateTypedNameReferences] public sealed partial class ErpPanelWindow : FancyWindow { + private const string ErpInteractionTag = "RequiresERP"; + [Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IGameTiming _timing = default!; @@ -331,6 +333,9 @@ private bool CheckRequirements(EntityUid user, EntityUid target, PanelInteractio { var passed = true; + if (IsErpInteraction(interaction) && !CanUseErp(user, target)) + return false; + var transform = _entManager.System(); if (!transform.InRange(user, target, interaction.Range)) passed = false; @@ -355,4 +360,23 @@ private bool CheckRequirements(EntityUid user, EntityUid target, PanelInteractio return passed; } + + private bool IsErpInteraction(PanelInteractionPrototype interaction) + { + return interaction.Tags.Contains(ErpInteractionTag); + } + + private bool CanUseErp(EntityUid user, EntityUid target) + { + if (_entManager.TryGetComponent(user, out var userStatus) && + userStatus.Preference == ErpPreference.No) + return false; + + if (user != target && + _entManager.TryGetComponent(target, out var targetStatus) && + targetStatus.Preference == ErpPreference.No) + return false; + + return true; + } } diff --git a/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs b/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs index fc75afc601b..d9a3d487e8d 100644 --- a/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs +++ b/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.Chat.Systems; +using Content.Server.Chat.Systems; using Content.Server.Interaction; using Content.Shared._Arcane.ERP; using Content.Shared._Arcane.ErpPanel; @@ -20,6 +20,8 @@ namespace Content.Server._Arcane.ErpPanel; public sealed partial class ErpPanelSystem : EntitySystem { + private const string ErpInteractionTag = "RequiresERP"; + [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; [Dependency] private readonly InteractionSystem _interaction = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; @@ -233,9 +235,6 @@ private bool IsValidUI(EntityUid user, EntityUid target) if (!HasComp(user) || !HasComp(target)) return false; - if (TryComp(target, out var targetStatus) && targetStatus.Preference == ErpPreference.No) - return false; - return true; } @@ -259,12 +258,33 @@ private bool IsValidInteraction(EntityUid user, EntityUid target, PanelInteracti if (!HasComp(user) || !HasComp(target)) return false; + if (IsErpInteraction(interaction) && !CanUseErp(user, target)) + return false; + if (userPanel.Cooldowns.TryGetValue(interaction.ID, out var lastUse) && lastUse + interaction.Cooldown > _ticking.CurTime) return false; return true; } + private bool IsErpInteraction(PanelInteractionPrototype interaction) + { + return interaction.Tags.Contains(ErpInteractionTag); + } + + private bool CanUseErp(EntityUid user, EntityUid target) + { + if (TryComp(user, out var userStatus) && userStatus.Preference == ErpPreference.No) + return false; + + if (user != target && + TryComp(target, out var targetStatus) && + targetStatus.Preference == ErpPreference.No) + return false; + + return true; + } + private bool CheckRequirements(EntityUid user, EntityUid target, PanelInteractionPrototype interaction) { var passed = true; diff --git a/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs b/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs index ea8db7797c9..702b1290766 100644 --- a/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs +++ b/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs @@ -29,6 +29,9 @@ public sealed partial class PanelInteractionPrototype : IPrototype [DataField] public List Sounds = new(); + [DataField] + public HashSet Tags = new(); + [DataField] public TimeSpan Cooldown = TimeSpan.FromSeconds(3); diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml index da4232c849e..1b2a4d34d00 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml @@ -17,6 +17,8 @@ - быстро трахает $target в попу. - нежно трахает анал $target. icon: _Arcane/Interface/ErpPanel/cock_near_ass.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus @@ -42,6 +44,8 @@ - аккуратно вводит язычок в анус $target. - игриво водит язычком вокруг ануса $target. icon: _Arcane/Interface/ErpPanel/anal_lick.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus @@ -62,6 +66,8 @@ - трахает пальцами анус $target. - двигает пальцами внутри ануса $target. icon: _Arcane/Interface/ErpPanel/anal_fingering.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus @@ -86,6 +92,8 @@ - страстно долбит анус $target хвостом. - нежно трахает анус $target, используя свой хвостик. icon: _Arcane/Interface/ErpPanel/butt_tail_fuck.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus @@ -116,6 +124,8 @@ - плотно прижимается языком к анусу $target, проникая глубже. - ритмично ласкает анус $target языком. icon: _Arcane/Interface/ErpPanel/anal_lick2.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus @@ -137,6 +147,8 @@ - ритмично трахает пальцами анус $target. - медленно вводит и выводит два пальца из ануса $target. icon: _Arcane/Interface/ErpPanel/anal_fingering2.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus @@ -160,6 +172,8 @@ - аккуратно вводит игрушку в анус $target. - медленно работает игрушкой в попке $target. icon: _Arcane/Interface/ErpPanel/toy_butt.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: anus diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml index 2aaef1fbb44..54b6110f594 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml @@ -16,6 +16,8 @@ - хлопает $target по сиськам. - бьёт $target по груди. icon: _Arcane/Interface/ErpPanel/boobs_slap.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -36,6 +38,8 @@ - проводит рукой по бюсту $target. - игриво гладит грудь $target. icon: _Arcane/Interface/ErpPanel/boobs_paw.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -61,6 +65,8 @@ - трётся пенисом о бюст $target. - страстно трахает бюст $target! icon: _Arcane/Interface/ErpPanel/boobs_fuck.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -86,6 +92,8 @@ - жмёт руками бюст $target. - хватает $target за грудь! icon: _Arcane/Interface/ErpPanel/boobs_squeeze.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -113,6 +121,8 @@ - нежно целует грудь $target. - целует $target в грудь. icon: _Arcane/Interface/ErpPanel/boobs_many_kisses.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -134,6 +144,8 @@ - обвивает грудь $target хвостом. - гладит грудь $target хвостиком. icon: _Arcane/Interface/ErpPanel/boobs_tail.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -164,6 +176,8 @@ - водит вокруг сосков $target. - аккуратно сжимает и разжимает грудь $target. icon: _Arcane/Interface/ErpPanel/boobs_massage.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts @@ -187,6 +201,8 @@ - медленно водит языком вокруг соска $target. - ласкает сосок $target губами. icon: _Arcane/Interface/ErpPanel/boobs_suck.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: breasts diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml index ede4d70e186..35d489a412c 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml @@ -15,6 +15,8 @@ - дразнит $target, проводя членом по ягодицам. - трётся членом о булки $target. icon: _Arcane/Interface/ErpPanel/cock_near_ass.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: penis @@ -37,6 +39,8 @@ - водит руками по ягодицам $target круговыми движениями. - ласково мнёт попку $target. icon: _Arcane/Interface/ErpPanel/butt_massage.png + tags: + - RequiresERP - type: panelInteraction id: ButtTail @@ -54,6 +58,8 @@ - ласкает попу $target кончиком хвоста. - обвивает хвостом ягодицы $target. icon: _Arcane/Interface/ErpPanel/butt_tail.png + tags: + - RequiresERP userRequirements: - !type:SpeciesRequirement species: @@ -80,6 +86,8 @@ - крепко хватает $target за булки. - обхватывает ягодицы $target руками. icon: _Arcane/Interface/ErpPanel/hands_on_butt.png + tags: + - RequiresERP - type: panelInteraction id: KissButt @@ -98,6 +106,8 @@ - осыпает поцелуями попку $target. - прижимается губами к ягодице $target. icon: _Arcane/Interface/ErpPanel/kiss_butt.png + tags: + - RequiresERP - type: panelInteraction id: SlapButt @@ -118,6 +128,8 @@ - звонко бьёт $target по попке! - отвешивает шлепок по ягодицам $target. icon: _Arcane/Interface/ErpPanel/slap_butt.png + tags: + - RequiresERP - type: panelInteraction id: HornsAssF @@ -136,6 +148,8 @@ - аккуратно скользит острым рогом по булкам $target. - проводит кончиком рога вдоль ягодиц $target. icon: _Arcane/Interface/ErpPanel/horns_ass_female.png + tags: + - RequiresERP userRequirements: - !type:SpeciesRequirement species: diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml index 865faf826b0..4e40d461a4f 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml @@ -10,10 +10,6 @@ id: Boobs name: Грудь -- type: panelInteractionCategory - id: Friendship - name: Дружба - - type: panelInteractionCategory id: Tail name: Хвост @@ -26,6 +22,26 @@ id: Mouth name: Рот +- type: panelInteractionCategory + id: Head + name: Голова + +- type: panelInteractionCategory + id: Hands + name: Руки + +- type: panelInteractionCategory + id: Back + name: Спина + +- type: panelInteractionCategory + id: Shoulders + name: Плечи + +- type: panelInteractionCategory + id: Feet + name: Ступни + - type: panelInteractionCategory id: Ears name: Уши diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml index eefa208d79a..d47aaed63dc 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml @@ -30,6 +30,8 @@ - нежно прикусывает мочку уха $target. - внезапно кусает $target за ушко. icon: _Arcane/Interface/ErpPanel/bite_ears_human.png + tags: + - RequiresERP - type: panelInteraction id: EarsKiss @@ -48,6 +50,8 @@ - прижимается губами к ушку $target. - целует $target за ухом. icon: _Arcane/Interface/ErpPanel/ears_kiss.png + tags: + - RequiresERP - type: panelInteraction id: PatEars diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml index 1e763f71fb4..1a63aac5983 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/face.yml @@ -13,6 +13,8 @@ - ласково целует $target в щёчку. - мягко касается губами щеки $target. icon: _Arcane/Interface/ErpPanel/cheeks_kiss.png + tags: + - RequiresERP - type: panelInteraction id: CheeksKissBoth @@ -29,6 +31,8 @@ - нежно целует $target в левую, потом в правую щёку. - приветливо целует $target в обе щёчки. icon: _Arcane/Interface/ErpPanel/cheeks_kiss_both.png + tags: + - RequiresERP - type: panelInteraction id: CheeksPat @@ -79,6 +83,8 @@ - нежно прижимается губами к губам $target. - тихо целует $target в губы. icon: _Arcane/Interface/ErpPanel/gentle_kiss.png + tags: + - RequiresERP - type: panelInteraction id: KissLips @@ -99,6 +105,8 @@ - глубоко целует $target, не отпуская. - страстно прижимается губами к губам $target. icon: _Arcane/Interface/ErpPanel/kiss_lips.png + tags: + - RequiresERP - type: panelInteraction id: FaceRubCat @@ -114,6 +122,8 @@ - водит мордашкой по щеке $target. - мягко трётся о лицо $target. icon: _Arcane/Interface/ErpPanel/face_rub_cat.png + tags: + - RequiresERP userRequirements: - !type:SpeciesRequirement species: @@ -138,6 +148,8 @@ - усаживается на лицо $target. - опускается на лицо $target, обхватив ляжками голову. icon: _Arcane/Interface/ErpPanel/face_sitting.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: vagina @@ -160,6 +172,8 @@ - проводит членом по лицу $target. - несильно шлёпает $target членом по щеке. icon: _Arcane/Interface/ErpPanel/face_dick_slap.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: penis @@ -181,6 +195,8 @@ - сжимает голову $target между ног. - удерживает лицо $target ляжками. icon: _Arcane/Interface/ErpPanel/legs_squeeze_face.png + tags: + - RequiresERP - type: panelInteraction id: Mewing diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml index 88b9fe9a261..15d5a19749b 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml @@ -1,6 +1,6 @@ - type: panelInteraction id: Handshake - category: Friendship + category: Hands name: Пожать руку range: 1 sounds: @@ -15,7 +15,7 @@ - type: panelInteraction id: FingerTap - category: Friendship + category: Back name: Массировать спину range: 1 sounds: @@ -34,7 +34,7 @@ - type: panelInteraction id: TailPat - category: Friendship + category: Tail name: Погладить хвост range: 1 sounds: @@ -61,7 +61,7 @@ - type: panelInteraction id: TailHug - category: Friendship + category: Tail name: Сплестись хвостами range: 1 sounds: @@ -95,7 +95,7 @@ - type: panelInteraction id: HighFive - category: Friendship + category: Hands name: Дать пять range: 1 sounds: @@ -112,7 +112,7 @@ - type: panelInteraction id: FriendlyFlyingKiss - category: Friendship + category: Face name: Послать воздушный поцелуй sounds: - /Audio/_Arcane/Interactions/kiss1.ogg @@ -127,7 +127,7 @@ - type: panelInteraction id: FriendlyNoseBoop - category: Friendship + category: Face name: Дать по носику sounds: - /Audio/_Arcane/Interactions/pat1.ogg @@ -141,7 +141,7 @@ - type: panelInteraction id: FriendlyTailPull - category: Friendship + category: Tail name: Потянуть за хвост sounds: - /Audio/_Arcane/Interactions/pat1.ogg @@ -164,7 +164,7 @@ - type: panelInteraction id: KissHand - category: Friendship + category: Hands name: Поцеловать руку sounds: - /Audio/_Arcane/Interactions/kiss1.ogg @@ -179,7 +179,7 @@ - type: panelInteraction id: PatShoulder - category: Friendship + category: Shoulders name: Похлопать по плечу sounds: - /Audio/_Arcane/Interactions/pat1.ogg @@ -194,7 +194,7 @@ - type: panelInteraction id: PetHead - category: Friendship + category: Head name: Погладить по голове sounds: - /Audio/_Arcane/Interactions/friction1.ogg @@ -210,9 +210,8 @@ - type: panelInteraction id: PlayfulNibble - category: Friendship + category: Neck name: Игриво укусить - targetArouse: 3 sounds: - /Audio/_Arcane/Interactions/pat1.ogg messages: @@ -225,7 +224,7 @@ - type: panelInteraction id: HornsPat - category: Friendship + category: Head name: Погладить рога sounds: - /Audio/_Arcane/Interactions/friction1.ogg @@ -244,7 +243,7 @@ - type: panelInteraction id: Kitty - category: Friendship + category: Face name: Потереться мордочкой sounds: - /Audio/_Arcane/Interactions/friction1.ogg diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml index 5ebe8d7da94..9eba5cb7c39 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml @@ -1,6 +1,6 @@ - type: panelInteraction id: FeetMouth - category: Mouth + category: Feet name: Футфетиш userArouse: 10 targetArouse: 5 @@ -15,6 +15,8 @@ - проводит языком по ступне $target. - нежно обсасывает пальчики $target. icon: _Arcane/Interface/ErpPanel/feet_mouth.png + tags: + - RequiresERP targetRequirements: - !type:EmptyInventorySlotRequirement slot: shoes diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml index 56e42b57e2c..dbc32b5cc29 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml @@ -12,6 +12,8 @@ - оставляет след от укуса на шее $target. - прикусывает шею $target. icon: _Arcane/Interface/ErpPanel/bite_neck.png + tags: + - RequiresERP - type: panelInteraction id: LickNeck @@ -30,6 +32,8 @@ - медленно проводит языком под ухом $target. - оставляет лёгкий поцелуй и след языка на шее $target. icon: _Arcane/Interface/ErpPanel/lick_neck.png + tags: + - RequiresERP - type: panelInteraction id: KissNeck @@ -48,10 +52,12 @@ - нежно целует чувствительное место на шее $target. - оставляет долгий поцелуй на шее $target. icon: _Arcane/Interface/ErpPanel/kiss_neck.png + tags: + - RequiresERP - type: panelInteraction id: ShoulderMassage - category: Neck + category: Shoulders name: Помассировать плечи messages: - мягко разминает плечи $target. @@ -86,6 +92,8 @@ - мягко утыкается в шею $target. - уткнувшись, прижимается к шее $target. icon: _Arcane/Interface/ErpPanel/nuzzle_neck.png + tags: + - RequiresERP - type: panelInteraction id: NuzzleNeckVulpa @@ -101,6 +109,8 @@ - прижимает мордочку к шее $target. - водит носиком по шее $target. icon: _Arcane/Interface/ErpPanel/nuzzle_neck_vulpa.png + tags: + - RequiresERP userRequirements: - !type:SpeciesRequirement species: @@ -112,7 +122,7 @@ - type: panelInteraction id: BlowSlap - category: Neck + category: Face name: Дать пощёчину sounds: - /Audio/_Arcane/Interactions/bang1.ogg diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml index f9c652a30c0..991cf7c7b19 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml @@ -17,6 +17,8 @@ - обхватывает губами головку члена $target и нежно посасывает. - захватывает член $target губами и ритмично скользит по нему. icon: _Arcane/Interface/ErpPanel/cock_tongue_fap.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -47,6 +49,8 @@ - ритмично передвигает плазму у члена $target. - ласкает головку члена $target своей плазмой. icon: _Arcane/Interface/ErpPanel/cock_slime_sex.png + tags: + - RequiresERP userRequirements: - !type:SpeciesRequirement species: @@ -74,6 +78,8 @@ - наяривает свой пенис. - обхватывает член рукой и активно ласкает его. icon: _Arcane/Interface/ErpPanel/cock_fap.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: penis @@ -99,6 +105,8 @@ - плавно водит ножкой по пенису $target. - гладит ступнёй пенис $target. icon: _Arcane/Interface/ErpPanel/cock_footjob.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -123,6 +131,8 @@ - ударяет пенисом по члену $target. - борется членами с $target, как на мечах. icon: _Arcane/Interface/ErpPanel/cock_swordmanship.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -144,6 +154,8 @@ - обвивает хвостиком член $target. - надрачивает хвостом член $target. icon: _Arcane/Interface/ErpPanel/cock_tail_fap.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -177,6 +189,8 @@ - проталкивает член $target между ляжками. - трётся ляжками о член $target. icon: _Arcane/Interface/ErpPanel/legs_cock_fuck.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -208,6 +222,8 @@ - страстно делает минет $target, не останавливаясь. - быстро работает ртом и рукой на члене $target. icon: _Arcane/Interface/ErpPanel/cock_blowjob.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -215,7 +231,7 @@ - type: panelInteraction id: CockNearAssTail - category: Penis + category: Butt name: Водить членом по попе с хвостом userArouse: 10 targetArouse: 5 @@ -228,6 +244,8 @@ - проводит членом по булкам $target, хвостом помогая. - трётся членом о ягодицы $target, хвостом обвивая. icon: _Arcane/Interface/ErpPanel/cock_near_ass_tail.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: penis @@ -243,7 +261,7 @@ - type: panelInteraction id: HairFaceFuck - category: Penis + category: Mouth name: Трахать в рот держа за волосы userArouse: 15 targetArouse: 10 @@ -267,6 +285,8 @@ - контролирует голову $target, трахая в рот. - крепко держит $target за волосы и интенсивно трахает в рот. icon: _Arcane/Interface/ErpPanel/hair_face_fuck.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: penis @@ -287,6 +307,8 @@ - зажимает член $target между ляжками, хвостом помогая. - трётся ляжками о член $target, хвостом обхватив. icon: _Arcane/Interface/ErpPanel/legs_cock_fuckt_tail.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: penis @@ -303,7 +325,7 @@ - type: panelInteraction id: HornsBlowjobF - category: Penis + category: Head name: Лизать рог targetArouse: 10 range: 1 @@ -317,6 +339,8 @@ - медленно лижет кончик рога $target. - захватывает губами рог $target. icon: _Arcane/Interface/ErpPanel/horns_blowjob_female.png + tags: + - RequiresERP targetRequirements: - !type:SpeciesRequirement species: diff --git a/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml b/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml index 828e48f8c8a..596b440cb25 100644 --- a/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml +++ b/Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml @@ -21,6 +21,8 @@ - глубоко вводит пальцы в свою тугую и мокрую вагину, тихо постанывая. - дразняще водит подушечками пальцев по своим влажным складкам. icon: _Arcane/Interface/ErpPanel/pussy_fingering.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: vagina @@ -48,6 +50,8 @@ - скользит языком между влажных губ $target. - быстро водит языком по мокрой киске $target. icon: _Arcane/Interface/ErpPanel/pussy_lick.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: vagina @@ -69,6 +73,8 @@ - быстро трётся клитором о киску $target. - интенсивно двигается вагиной по мокрой вагине $target. icon: _Arcane/Interface/ErpPanel/pussy_scissors.png + tags: + - RequiresERP userRequirements: - !type:EroticOrganRequirement organ: vagina @@ -93,6 +99,8 @@ - нежно трогает влажную вагину $target. - аккуратно касается вагины $target. icon: _Arcane/Interface/ErpPanel/pussy_touch.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: vagina @@ -114,6 +122,8 @@ - медленно вводит хвост в мокрую вагину $target. - страстно трахает вагину $target хвостом. icon: _Arcane/Interface/ErpPanel/pussy_tail_fuck.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: vagina @@ -143,6 +153,8 @@ - медленно вводит игрушку в мокрую вагину $target. - аккуратно работает игрушкой во влагалище $target. icon: _Arcane/Interface/ErpPanel/toy_pussy.png + tags: + - RequiresERP targetRequirements: - !type:EroticOrganRequirement organ: vagina From d7b25dc3d24c96a0962a3a467bacfa9ada209eff Mon Sep 17 00:00:00 2001 From: MataVsn <113342160+MataVsn@users.noreply.github.com> Date: Mon, 22 Jun 2026 10:42:01 +0300 Subject: [PATCH 3/3] rabbit --- Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs | 4 +--- Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs | 4 +--- Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs | 5 +++++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs b/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs index 94b5de986bb..54aab770271 100644 --- a/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs +++ b/Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs @@ -18,8 +18,6 @@ namespace Content.Client._Arcane.ErpPanel; [GenerateTypedNameReferences] public sealed partial class ErpPanelWindow : FancyWindow { - private const string ErpInteractionTag = "RequiresERP"; - [Dependency] private readonly IEntityManager _entManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IGameTiming _timing = default!; @@ -363,7 +361,7 @@ private bool CheckRequirements(EntityUid user, EntityUid target, PanelInteractio private bool IsErpInteraction(PanelInteractionPrototype interaction) { - return interaction.Tags.Contains(ErpInteractionTag); + return interaction.Tags.Contains(ErpPanelConstants.ErpInteractionTag); } private bool CanUseErp(EntityUid user, EntityUid target) diff --git a/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs b/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs index d9a3d487e8d..bbb4dd678ca 100644 --- a/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs +++ b/Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs @@ -20,8 +20,6 @@ namespace Content.Server._Arcane.ErpPanel; public sealed partial class ErpPanelSystem : EntitySystem { - private const string ErpInteractionTag = "RequiresERP"; - [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; [Dependency] private readonly InteractionSystem _interaction = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; @@ -269,7 +267,7 @@ private bool IsValidInteraction(EntityUid user, EntityUid target, PanelInteracti private bool IsErpInteraction(PanelInteractionPrototype interaction) { - return interaction.Tags.Contains(ErpInteractionTag); + return interaction.Tags.Contains(ErpPanelConstants.ErpInteractionTag); } private bool CanUseErp(EntityUid user, EntityUid target) diff --git a/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs b/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs index 702b1290766..39decc11909 100644 --- a/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs +++ b/Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs @@ -5,6 +5,11 @@ namespace Content.Shared._Arcane.ErpPanel; +public static class ErpPanelConstants +{ + public const string ErpInteractionTag = "RequiresERP"; +} + [Prototype] public sealed partial class PanelInteractionPrototype : IPrototype {