- fix: some message for interactions
This commit is contained in:
@@ -7,15 +7,15 @@
|
||||
<BoxContainer Orientation="Vertical" Margin="5 5 5 5">
|
||||
<BoxContainer Orientation="Vertical" Margin="5 20 5 20" HorizontalAlignment="Stretch" HorizontalExpand="True">
|
||||
<BoxContainer HorizontalAlignment="Center" HorizontalExpand="True">
|
||||
<BoxContainer Orientation="Vertical" Margin="5 5 5 5">
|
||||
<SpriteView Name="PerformerView" Margin="5 10 5 15" HorizontalAlignment="Center"/>
|
||||
<BoxContainer Margin="5 5 5 5">
|
||||
<RichTextLabel Name="PerformerDesc"/>
|
||||
<SpriteView Scale="2 2" Name="PerformerView" Margin="5 10 5 15" HorizontalAlignment="Center"/>
|
||||
</BoxContainer>
|
||||
|
||||
<controls1:HighDivider Margin="5 5 5 5"/>
|
||||
|
||||
<BoxContainer Orientation="Vertical" Margin="5 5 5 5">
|
||||
<SpriteView Name="TargetView" Margin="5 10 5 15" HorizontalAlignment="Center"/>
|
||||
<BoxContainer Margin="5 5 5 5">
|
||||
<SpriteView Scale="2 2" Name="TargetView" Margin="5 10 5 15" HorizontalAlignment="Center"/>
|
||||
<RichTextLabel Name="TargerDesc"/>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
@@ -39,7 +39,7 @@
|
||||
<CheckBox Margin="5 0 5 0" Name="DisCheckbox"/>
|
||||
<Label Margin="5 0 5 0" Text="{Loc 'interaction-hide-unvisible'}"/>
|
||||
</BoxContainer>
|
||||
<Button Margin="5 5 5 5" Text="Update"/>
|
||||
<Button Margin="5 5 5 5" Text="{Loc 'interaction-update'}" Name="UpdateButton"/>
|
||||
|
||||
<ScrollContainer HorizontalExpand="True" VerticalExpand="True">
|
||||
<BoxContainer Orientation="Vertical" Margin="5 20 5 20" Name="Interactions">
|
||||
|
||||
@@ -5,6 +5,7 @@ using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Client._Amour.InteractionPanel.UI;
|
||||
|
||||
@@ -24,6 +25,7 @@ public sealed partial class InteractionPanelWindow : DefaultWindow
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
||||
DisCheckbox.OnPressed += _ => OnUpdateRequired?.Invoke();
|
||||
UpdateButton.OnPressed += _ => OnUpdateRequired?.Invoke();
|
||||
}
|
||||
|
||||
public void AddButton(InteractionEntry entry)
|
||||
@@ -60,6 +62,31 @@ public sealed partial class InteractionPanelWindow : DefaultWindow
|
||||
Groups.Add(prototype.ID,Interactions.ChildCount - 1);
|
||||
}
|
||||
|
||||
var messageUser = new FormattedMessage();
|
||||
if (state.DescUser.Count == 0)
|
||||
{
|
||||
messageUser.AddMarkup($"- {Loc.GetString("interaction-empty")}\n");
|
||||
}
|
||||
|
||||
foreach (var desc in state.DescUser)
|
||||
{
|
||||
messageUser.AddMarkup($"- {Loc.GetString(desc)}\n");
|
||||
}
|
||||
PerformerDesc.SetMessage(messageUser);
|
||||
|
||||
var messageTarget = new FormattedMessage();
|
||||
if (state.DescTarget.Count == 0)
|
||||
{
|
||||
messageTarget.AddMarkup($"- {Loc.GetString("interaction-empty")}\n");
|
||||
}
|
||||
|
||||
foreach (var desc in state.DescTarget)
|
||||
{
|
||||
messageTarget.AddMarkup($"- {Loc.GetString(desc)}\n");
|
||||
}
|
||||
TargerDesc.SetMessage(messageTarget);
|
||||
|
||||
|
||||
TargetView.SetEntity(state.Target);
|
||||
PerformerView.SetEntity(state.Performer);
|
||||
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
using Content.Shared._Amour.Hole;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Server.Chat.Systems;
|
||||
using Content.Server.HealthExaminable;
|
||||
using Content.Server.Mind;
|
||||
using Content.Shared._Amour.Hole;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Item;
|
||||
using Robust.Server.Containers;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server._Amour.Hole;
|
||||
|
||||
public sealed partial class HoleSystem
|
||||
{
|
||||
[Dependency] private readonly ContainerSystem _container = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!;
|
||||
[Dependency] private readonly ChatSystem _chatSystem = default!;
|
||||
[Dependency] private readonly BodySystem _bodySystem = default!;
|
||||
|
||||
private void InitializeInventory()
|
||||
{
|
||||
@@ -17,4 +28,37 @@ public sealed partial class HoleSystem
|
||||
{
|
||||
component.Slot = _container.EnsureContainer<ContainerSlot>(uid,HoleInventoryComponent.SlotName);
|
||||
}
|
||||
|
||||
public void PutItem(Entity<ItemComponent?> item, Entity<HoleInventoryComponent?> entity)
|
||||
{
|
||||
if(!Resolve(entity,ref entity.Comp) || !Resolve(item,ref item.Comp))
|
||||
return;
|
||||
if(!_prototypeManager.TryIndex(item.Comp.Size, out var itemSizePrototype)
|
||||
|| !_prototypeManager.TryIndex(entity.Comp.Size, out var holeSize)
|
||||
|| !_prototypeManager.TryIndex(entity.Comp.MaxSize, out var maxHoleSize))
|
||||
return;
|
||||
|
||||
if (itemSizePrototype.Weight >= maxHoleSize.Weight)
|
||||
{
|
||||
_bloodstreamSystem.TryModifyBleedAmount(entity, (itemSizePrototype.Weight - maxHoleSize.Weight)*8);
|
||||
_chatSystem.TrySendInGameICMessage(item.Owner," с грохотом падает на пол", InGameICChatType.Emote, ChatTransmitRange.HideChat);
|
||||
//_bodySystem.GibBody(entity);
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemSizePrototype.Weight >= holeSize.Weight)
|
||||
{
|
||||
_bloodstreamSystem.TryModifyBleedAmount(entity, (itemSizePrototype.Weight - holeSize.Weight)*4);
|
||||
}
|
||||
|
||||
_container.Insert(item.Owner, entity.Comp.Slot);
|
||||
}
|
||||
|
||||
public List<EntityUid> TakeItem(Entity<HoleInventoryComponent?> entity)
|
||||
{
|
||||
if(!Resolve(entity,ref entity.Comp))
|
||||
return new List<EntityUid>();
|
||||
|
||||
return _container.EmptyContainer(entity.Comp.Slot);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,10 @@ using Content.Server.EUI;
|
||||
using Content.Server.Interaction;
|
||||
using Content.Shared._Amour.Arousal;
|
||||
using Content.Shared._Amour.InteractionPanel;
|
||||
using Content.Shared._Amour.InteractionPanel.Checks;
|
||||
using Content.Shared.Eui;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Reflection;
|
||||
|
||||
namespace Content.Server._Amour.InteractionPanel;
|
||||
|
||||
@@ -12,14 +14,38 @@ public sealed class InteractionPanelEui : BaseEui
|
||||
{
|
||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly IReflectionManager _reflectionManager = default!;
|
||||
private readonly InteractionPanelSystem _interactionPanelSystem;
|
||||
|
||||
public readonly Entity<InteractionPanelComponent> User;
|
||||
public readonly Entity<InteractionPanelComponent> Target;
|
||||
|
||||
public readonly List<IInteractionCheck> UserInfo = new()
|
||||
{
|
||||
new UserHasBreast(),
|
||||
new UserHasButt(),
|
||||
new UserHasPenis(),
|
||||
new UserHasTesticles(),
|
||||
new UserHasVagina(),
|
||||
new IsUserCrawl()
|
||||
};
|
||||
|
||||
public readonly List<IInteractionCheck> TargetInfo = new()
|
||||
{
|
||||
new HasSmallDistance(),
|
||||
new TargetHasBreast(),
|
||||
new TargetHasButt(),
|
||||
new TargetHasPenis(),
|
||||
new TargetHasTesticles(),
|
||||
new TargetHasVagina(),
|
||||
new IsTargetCrawl()
|
||||
};
|
||||
|
||||
public InteractionPanelEui(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target)
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
||||
_interactionPanelSystem = _entityManager.System<InteractionPanelSystem>();
|
||||
User = user;
|
||||
Target = target;
|
||||
}
|
||||
@@ -42,13 +68,32 @@ public sealed class InteractionPanelEui : BaseEui
|
||||
if(!_prototypeManager.TryIndex(protoId,out var prototype))
|
||||
continue;
|
||||
|
||||
var isAvailable = prototype.Checks.All(check => check.IsAvailable(User, Target, _entityManager));
|
||||
var isAvailable = _interactionPanelSystem.Check(User, Target, prototype, out _);
|
||||
|
||||
availableActions.Add(new InteractionEntry(protoId,isAvailable));
|
||||
}
|
||||
|
||||
var descUser = new HashSet<string>();
|
||||
foreach (var check in UserInfo)
|
||||
{
|
||||
if (TryCheck(check, out var desc))
|
||||
descUser.Add(desc);
|
||||
}
|
||||
|
||||
return new InteractionState(_entityManager.GetNetEntity(User), _entityManager.GetNetEntity(Target),availableActions,arousal);
|
||||
var descTarget = new HashSet<string>();
|
||||
foreach (var check in TargetInfo)
|
||||
{
|
||||
if (TryCheck(check, out var desc))
|
||||
descTarget.Add(desc);
|
||||
}
|
||||
|
||||
return new InteractionState(_entityManager.GetNetEntity(User), _entityManager.GetNetEntity(Target),availableActions,arousal, descUser, descTarget);
|
||||
}
|
||||
|
||||
private bool TryCheck(IInteractionCheck check, out string output)
|
||||
{
|
||||
output = $"interaction-success-{check.GetType().Name.ToLower()}";
|
||||
return check.IsAvailable(User, Target, _entityManager);
|
||||
}
|
||||
|
||||
public override void HandleMessage(EuiMessageBase msg)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Linq;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Server.Access.Systems;
|
||||
using Content.Server.Chat.Managers;
|
||||
using Content.Server.Chat.Systems;
|
||||
@@ -6,13 +7,18 @@ using Content.Server.DoAfter;
|
||||
using Content.Server.EUI;
|
||||
using Content.Shared._Amour.Hole;
|
||||
using Content.Shared._Amour.InteractionPanel;
|
||||
using Content.Shared._Amour.InteractionPanel.Checks;
|
||||
using Content.Shared._White.GhostRecruitment;
|
||||
using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.Carrying;
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Emoting;
|
||||
using Content.Shared.Fluids;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.Interaction.Events;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Movement.Events;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Server.Audio;
|
||||
@@ -37,12 +43,23 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
[Dependency] private readonly IRobustRandom _robustRandom = default!;
|
||||
[Dependency] private readonly IChatManager _chatManager = default!;
|
||||
[Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
|
||||
[Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<InteractionPanelComponent,GetVerbsEvent<Verb>>(OnVerb);
|
||||
SubscribeLocalEvent<InteractionPanelComponent,ComponentInit>(OnInit);
|
||||
SubscribeLocalEvent<InteractionPanelComponent,PanelDoAfterEvent>(OnPanel);
|
||||
SubscribeLocalEvent<InteractionPanelComponent,ChangeDirectionAttemptEvent>(OnCancelable);
|
||||
SubscribeLocalEvent<InteractionPanelComponent,UpdateCanMoveEvent>(OnCancelable);
|
||||
}
|
||||
|
||||
private void OnCancelable(EntityUid uid, InteractionPanelComponent component, CancellableEntityEventArgs args)
|
||||
{
|
||||
if (component.IsActive || component.IsBlocked)
|
||||
{
|
||||
args.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
private void OnPanel(EntityUid uid, InteractionPanelComponent component, PanelDoAfterEvent args)
|
||||
@@ -71,7 +88,7 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
{
|
||||
args.Verbs.Add(new Verb()
|
||||
{
|
||||
Text = "Open funny panel",
|
||||
Text = Loc.GetString("interaction-open"),
|
||||
Act = () => OpenPanel(args.User,args.User,uid)
|
||||
});
|
||||
}
|
||||
@@ -102,9 +119,9 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
|| !_prototypeManager.TryIndex(protoId, out var prototype))
|
||||
return;
|
||||
|
||||
foreach (var check in prototype.Checks.Where(check => !check.IsAvailable(user!, target!, EntityManager)))
|
||||
if(!Check(user!,target!,prototype, out var check))
|
||||
{
|
||||
if(!_playerManager.TryGetSessionByEntity(user,out var session))
|
||||
if(_playerManager.TryGetSessionByEntity(user,out var session) || session is null)
|
||||
return;
|
||||
|
||||
var message = ParseMessage(target, $"interaction-fail-{check.GetType().Name.ToLower()}");
|
||||
@@ -145,20 +162,18 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
private void Interact(Entity<InteractionPanelComponent> user,
|
||||
Entity<InteractionPanelComponent> target, InteractionPrototype prototype, bool hasChecked = true)
|
||||
{
|
||||
if (!hasChecked)
|
||||
if(!hasChecked && !Check(user,target,prototype, out var check))
|
||||
{
|
||||
foreach (var check in prototype.Checks.Where(check => !check.IsAvailable(user!, target!, EntityManager)))
|
||||
{
|
||||
if(!_playerManager.TryGetSessionByEntity(user,out var session))
|
||||
if(_playerManager.TryGetSessionByEntity(user,out var session) || session is null)
|
||||
return;
|
||||
|
||||
var message = ParseMessage(target, $"interaction-fail-{check.GetType().Name.ToLower()}");
|
||||
_chatManager.ChatMessageToOne(ChatChannel.Emotes,message,message,EntityUid.Invalid,false,session.Channel);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
user.Comp.Timeout = _gameTiming.CurTime + prototype.Timeout;
|
||||
|
||||
user.Comp.Timeout = _gameTiming.CurTime + prototype.Timeout + prototype.EndTime;
|
||||
user.Comp.EndTime = _gameTiming.CurTime + prototype.EndTime;
|
||||
user.Comp.IsActive = true;
|
||||
user.Comp.CurrentAction = prototype.ID;
|
||||
@@ -180,6 +195,9 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
action.Run(user!,target!,EntityManager);
|
||||
}
|
||||
|
||||
_actionBlockerSystem.UpdateCanMove(user);
|
||||
_actionBlockerSystem.UpdateCanMove(target);
|
||||
|
||||
RaiseLocalEvent(user,new InteractionBeginningEvent(prototype.ID,user,target));
|
||||
}
|
||||
|
||||
@@ -205,6 +223,19 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
("target", GetName(target)), ("gender", GetGender(target)));
|
||||
}
|
||||
|
||||
public bool Check(Entity<InteractionPanelComponent> user,
|
||||
Entity<InteractionPanelComponent> target, InteractionPrototype prototype,[NotNullWhen(false)] out IInteractionCheck? check)
|
||||
{
|
||||
check = null;
|
||||
foreach (var checkout in prototype.Checks.Where(check => !check.IsAvailable(user!, target!, EntityManager)))
|
||||
{
|
||||
check = checkout;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
@@ -221,6 +252,7 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
}
|
||||
|
||||
var user = new Entity<InteractionPanelComponent>(uid, component);
|
||||
var target = component.CurrentPartner.Value;
|
||||
|
||||
if (_prototypeManager.TryIndex(component.CurrentAction, out var prototype))
|
||||
{
|
||||
@@ -242,11 +274,14 @@ public sealed class InteractionPanelSystem : EntitySystem
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
component.IsActive = false;
|
||||
|
||||
_actionBlockerSystem.UpdateCanMove(user);
|
||||
_actionBlockerSystem.UpdateCanMove(target);
|
||||
|
||||
RaiseLocalEvent(uid, new InteractionEndingEvent(component.CurrentAction,
|
||||
user,
|
||||
component.CurrentPartner.Value));
|
||||
target));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
using System.Numerics;
|
||||
using Content.Server._Amour.Animation;
|
||||
using Content.Server._Amour.Crawl;
|
||||
using Content.Server._Amour.Hole;
|
||||
using Content.Server.Hands.Systems;
|
||||
using Content.Server.Pulling;
|
||||
using Content.Shared._Amour.Animation;
|
||||
using Content.Shared._Amour.InteractionPanel;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Robust.Shared.Animations;
|
||||
|
||||
namespace Content.Server._Amour.InteractionPanel;
|
||||
@@ -13,6 +16,9 @@ public sealed class Interactions : EntitySystem
|
||||
[Dependency] private readonly CrawlSystem _crawlSystem = default!;
|
||||
[Dependency] private readonly SharebleAnimationSystem _animationSystem = default!;
|
||||
[Dependency] private readonly PullingSystem _pullingSystem = default!;
|
||||
[Dependency] private readonly HoleSystem _holeSystem = default!;
|
||||
[Dependency] private readonly HandsSystem _handsSystem = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<InteractionPanelComponent,InteractionBeginningEvent>(OnBegin);
|
||||
@@ -43,6 +49,41 @@ public sealed class Interactions : EntitySystem
|
||||
case "CrawlTarget" :
|
||||
_crawlSystem.EnableCrawl(args.Target);
|
||||
break;
|
||||
case "ItemOnButt":
|
||||
PutHole(uid,"Anus");
|
||||
break;
|
||||
case "ItemOnVagina":
|
||||
PutHole(uid,"Vagina");
|
||||
break;
|
||||
case "ItemFromButt":
|
||||
TakeHole(uid,"Anus");
|
||||
break;
|
||||
case "ItemFromVagina":
|
||||
TakeHole(uid,"Vagina");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void PutHole(EntityUid uid,string holeType)
|
||||
{
|
||||
if (!TryComp<HandsComponent>(uid, out var handsComponent)
|
||||
|| handsComponent.ActiveHand?.HeldEntity is null
|
||||
|| !_holeSystem.TryFind(uid,holeType,out var hole))
|
||||
return;
|
||||
|
||||
var ent = handsComponent.ActiveHand.HeldEntity.Value;
|
||||
|
||||
_holeSystem.PutItem(ent,hole.Owner);
|
||||
}
|
||||
|
||||
private void TakeHole(EntityUid uid,string holeType)
|
||||
{
|
||||
if (!_holeSystem.TryFind(uid,holeType,out var hole))
|
||||
return;
|
||||
|
||||
foreach (var entity in _holeSystem.TakeItem(hole.Owner))
|
||||
{
|
||||
_handsSystem.TryPickup(uid, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public sealed class ArousalSystem : EntitySystem
|
||||
|
||||
private void OnComponentInit(EntityUid uid, ArousalComponent component, ComponentInit args)
|
||||
{
|
||||
UpdateAlarm(new Entity<ArousalComponent?>(uid,component));
|
||||
//UpdateAlarm(new Entity<ArousalComponent?>(uid,component));
|
||||
}
|
||||
|
||||
private void UpdateAlarm(Entity<ArousalComponent?> entity)
|
||||
|
||||
27
Content.Shared/_Amour/InteractionPanel/Checks/HandsCheck.cs
Normal file
27
Content.Shared/_Amour/InteractionPanel/Checks/HandsCheck.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Content.Shared.Hands.Components;
|
||||
|
||||
namespace Content.Shared._Amour.InteractionPanel.Checks;
|
||||
|
||||
public sealed class HasItemInUserHand : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.TryGetComponent<HandsComponent>(user, out var handsComponent) && handsComponent.ActiveHand?.HeldEntity is not null;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class UserHasHand : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.HasComponent<HandsComponent>(user);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class TargetHasHand : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.HasComponent<HandsComponent>(target);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ public sealed class UserHasButt : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(user.Owner, "Anus", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(user.Owner, "Anus");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public sealed class TargetHasButt : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(target.Owner, "Anus", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(target.Owner, "Anus");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public sealed class UserHasPenis : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(user.Owner, "Dick", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(user.Owner, "Dick");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public sealed class TargetHasPenis : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(target.Owner, "Dick", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(target.Owner, "Dick");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public sealed class UserHasVagina : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(user.Owner, "Vagina", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(user.Owner, "Vagina");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public sealed class TargetHasVagina : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(target.Owner, "Vagina", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(target.Owner, "Vagina");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ public sealed class UserHasTesticles : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(user.Owner, "Testicles", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(user.Owner, "Testicles");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ public sealed class TargetHasTesticles : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(target.Owner, "Testicles", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(target.Owner, "Testicles");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ public sealed class UserHasBreast : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(user.Owner, "Breast", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(user.Owner, "Breast");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +78,6 @@ public sealed class TargetHasBreast : IInteractionCheck
|
||||
{
|
||||
public bool IsAvailable(Entity<InteractionPanelComponent> user, Entity<InteractionPanelComponent> target, IEntityManager entityManager)
|
||||
{
|
||||
return entityManager.System<SharedHoleSystem>().TryFind(target.Owner, "Breast", out _);
|
||||
return entityManager.System<SharedHoleSystem>().HasAccessTo(target.Owner, "Breast");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,14 +26,20 @@ public sealed class InteractionState: EuiStateBase
|
||||
public NetEntity Performer { get; }
|
||||
public NetEntity Target { get; }
|
||||
public HashSet<InteractionEntry> AvailableInteractions;
|
||||
|
||||
public HashSet<string> DescUser;
|
||||
public HashSet<string> DescTarget;
|
||||
|
||||
public byte? Arousal;
|
||||
|
||||
public InteractionState(NetEntity performer, NetEntity target, HashSet<InteractionEntry> availableInteractions, byte? arousal)
|
||||
public InteractionState(NetEntity performer, NetEntity target, HashSet<InteractionEntry> availableInteractions, byte? arousal, HashSet<string> descUser, HashSet<string> descTarget)
|
||||
{
|
||||
Performer = performer;
|
||||
Target = target;
|
||||
AvailableInteractions = availableInteractions;
|
||||
Arousal = arousal;
|
||||
DescUser = descUser;
|
||||
DescTarget = descTarget;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2
Resources/Locale/ru-RU/_amour/arosual/arousal.ftl
Normal file
2
Resources/Locale/ru-RU/_amour/arosual/arousal.ftl
Normal file
@@ -0,0 +1,2 @@
|
||||
alerts-arousal-name = Прикольное
|
||||
alerts-arousal-desc = Показывает ваш уровень возбуждения. В разработке.
|
||||
16
Resources/Locale/ru-RU/_amour/interactions/fail.ftl
Normal file
16
Resources/Locale/ru-RU/_amour/interactions/fail.ftl
Normal file
@@ -0,0 +1,16 @@
|
||||
interaction-fail-userhasbutt = Но у меня нет попы!
|
||||
interaction-fail-targethasbutt = Но у того нет попы!
|
||||
interaction-fail-userhaspenis = Но у меня нет члена!
|
||||
interaction-fail-targethaspenis = Но у того нет члена!
|
||||
interaction-fail-userhasvagina = Но у меня нет вагины!
|
||||
interaction-fail-targethasvagina = Но у неё нет вагины!
|
||||
interaction-fail-userhastesticles = Но у меня нет яиц!
|
||||
interaction-fail-targethastesticles = Но у него нет яиц!
|
||||
interaction-fail-userhasbreast = Но у меня нет груди!
|
||||
interaction-fail-targethasbreast = Но у неё нет груди!
|
||||
|
||||
interaction-fail-hassmalldistance = До цели так далеко...
|
||||
interaction-fail-interactself = Я могу сделать это лишь с собой!
|
||||
interaction-fail-cantinteractself = Я не могу сделать это с собой!
|
||||
interaction-fail-isusercrawl = Но я не лежу!
|
||||
interaction-fail-istargetcrawl = Но цель не лежит!
|
||||
@@ -4,7 +4,8 @@ interaction-name-dickinbutt = выебать в очко
|
||||
interaction-name-dickinvagina = выебать в вагину
|
||||
interaction-name-itemonbutt = засунуть вещь в очко
|
||||
interaction-name-itemonvagina = засунуть вещь в вагину
|
||||
interaction-name-itemonpenis = засунуть вещь в член
|
||||
interaction-name-itemfrombutt = засунуть руку в очко
|
||||
interaction-name-itemfromvagina = засунуть руку в вагину
|
||||
interaction-name-lickdick = отлизать мужсокй половой орган
|
||||
interaction-name-lickvagina = отлизать вагину
|
||||
interaction-name-lickface = отлизать лицо
|
||||
@@ -17,12 +18,92 @@ interaction-name-combbutt = погладить по попе
|
||||
interaction-name-pulltarget = держать за ручку
|
||||
interaction-name-sitwithbutt = насадить на своё очко хуй
|
||||
interaction-name-sitwithvagina = насадить на свою вагину хуй
|
||||
|
||||
|
||||
|
||||
|
||||
interaction-name-drochdick = подрочить хуй
|
||||
|
||||
interaction-butt-slap1 = шлёпает попку { $target }
|
||||
interaction-butt-slap2 = со всей силы бьёт по жопе { $target }
|
||||
interaction-butt-slap3 = шлёпает попку { $target }
|
||||
interaction-butt-slap3 = примерясь, звонко шлёпает { $target } по попке
|
||||
|
||||
interaction-crawl-before1 = пытается толкнуть { $target }
|
||||
interaction-crawl1 = с грохотом роняет { $target }
|
||||
interaction-crawl2 = заставляет упасть { $target }
|
||||
interaction-crawl3 = толкает { $target } на пол
|
||||
|
||||
interaction-butt-fuck1 = схватив за бёдра, нежно просовывает член прямо в булки { $target }
|
||||
interaction-butt-fuck2 = войдя в дырочку своим половым органом, начинает проникать всё глубже в { $target }
|
||||
interaction-butt-fuck3 = просунув в колечко свой орган, с пристрастием входит в анал { $target }
|
||||
|
||||
interaction-vagina-fuck1 = вставляет свой возбуждённый член в киску и с силой совершает толчки бёдрами в сторону { $target }
|
||||
interaction-vagina-fuck2 = вводит стоячий орган прямо в вагину, начиная входить всё глубже в { $target }
|
||||
interaction-vagina-fuck3 = войдя в киску своим горячим членом, занялся актом совокупления с { $target }
|
||||
|
||||
interaction-butt-put-before1 = суёт между булок { $target } нечто
|
||||
interaction-butt-put1 = засунул вещь между булок { $target }
|
||||
interaction-butt-put2 = засунул вещь между булок { $target }
|
||||
interaction-butt-put3 = засунул вещь между булок { $target }
|
||||
|
||||
interaction-vagina-put-before1 = суёт в киску { $target } нечто смешное
|
||||
interaction-vagina-put1 = успешно засунул в киску { $target } вещь
|
||||
interaction-vagina-put2 = успешно засунул в киску { $target } вещь
|
||||
interaction-vagina-put3 = успешно засунул в киску { $target } вещь
|
||||
|
||||
interaction-butt-take-before1 = суёт между булок { $target } свою руку
|
||||
interaction-butt-take1 = иследовал булки { $target } своими руками
|
||||
interaction-butt-take2 = иследовал булки { $target } своими руками
|
||||
interaction-butt-take3 = иследовал булки { $target } своими руками
|
||||
|
||||
interaction-vagina-take-before1 = суёт в киску { $target } свою руку
|
||||
interaction-vagina-take1 = успешно исследовал киску { $target } своими ручками
|
||||
interaction-vagina-take2 = успешно исследовал киску { $target } своими ручками
|
||||
interaction-vagina-take3 = успешно исследовал киску { $target } своими ручками
|
||||
|
||||
interaction-sit-butt1 = присаживается дырочкой прямиком на член { $target }
|
||||
interaction-sit-butt2 = осторожно садится на половой орган { $target }
|
||||
interaction-sit-butt3 = вставляет в свой анал член и присаживается на { $target }
|
||||
|
||||
interaction-sit-vagina1 = медленно садится своей киской прямо на член { $target }
|
||||
interaction-sit-vagina2 = вставляя в себя член, аккуратно опускается вагиной на орган { $target }
|
||||
interaction-sit-vagina3 = постепенно опустившись вниз, присаживается своей киской на член { $target }
|
||||
interaction-dick-lick1 = вобрав в свой ротик член, начинает посасывать орган { $target }
|
||||
interaction-dick-lick2 = приблизившись к половому органу своим ртом, просовывает тот внутрь себя и начинает массировать язычком член { $target }
|
||||
interaction-dick-lick3 = ласково облизав своим язычком член, начинает отсасывать у { $target }
|
||||
|
||||
interaction-vagina-lick1 = начинает оживлённо полизывать сладкую киску язычком у { $target }
|
||||
interaction-vagina-lick2 = вылизывая вагину языком, слегка слюнявит { $target }
|
||||
interaction-vagina-lick3 = осторожно проникает своим язычишком прямо в киску { $target }
|
||||
|
||||
interaction-face-lick1 = высунув горячий язычок, полизывает личико { $target }
|
||||
interaction-face-lick2 = быстрым движением языка ласково лижет лицо { $target }
|
||||
interaction-face-lick3 = проводит язычком по личику, оставляя след из слюнок на { $target }
|
||||
|
||||
interaction-droch-dick1 = прильнув ручкой к половому органу, начинает ласкать член { $target }
|
||||
interaction-droch-dick2 = опустив ручку к члену, мастурбирует орган { $target }
|
||||
interaction-droch-dick3 = удерживая член, ласкает половой орган { $target }
|
||||
|
||||
interaction-mouth-kiss1 = приблизившись устами к губкам, страстно целует { $target }
|
||||
interaction-mouth-kiss2 = не теряя ни минуты, начинает жаркий поцелуй с { $target }
|
||||
interaction-mouth-kiss3 = тут же начинает упиваться сладостным поцелуем с { $target }
|
||||
|
||||
interaction-neck-kiss1 = приблизился губами к шейке и оставил след от поцелуя с { $target }
|
||||
interaction-neck-kiss2 = жарко поцеловав устами шею, оставляет заметный след на { $target }
|
||||
interaction-neck-kiss3 = с любовью расцеловывает шейку { $target }
|
||||
|
||||
interaction-face-kiss1 = оставляет лёгкий поцелуйчик на щеке { $target }
|
||||
interaction-face-kiss2 = чмокает в щёчку { $target }
|
||||
interaction-face-kiss3 = легонько целует в щёку { $target }
|
||||
|
||||
interaction-head-comb1 = опустив руку на голову, поглаживает { $target }
|
||||
interaction-head-comb2 = ласково и с любовью гладит { $target }
|
||||
interaction-head-comb3 = выражает свою любовь, поглаживая по макушке { $target }
|
||||
|
||||
interaction-ears-comb1 = убрав руку за ушко, почёсывает { $target }
|
||||
interaction-ears-comb2 = с лаской чешет за ушком { $target }
|
||||
interaction-ears-comb3 = заботливо почёсывает ушко { $target }
|
||||
|
||||
interaction-butt-comb1 = спустившись к булочкам, поглаживает { $target }
|
||||
interaction-butt-comb2 = мнёт и полаживает ягодицы { $target }
|
||||
interaction-butt-comb3 = проводя ладошкой по упругой попке, гладит { $target }
|
||||
|
||||
interaction-pull1 = робко схватил за ручки { $target }
|
||||
interaction-pull2 = подхватывает { $target } за руки
|
||||
interaction-pull3 = подхватывает { $target } за руки
|
||||
|
||||
16
Resources/Locale/ru-RU/_amour/interactions/success.ftl
Normal file
16
Resources/Locale/ru-RU/_amour/interactions/success.ftl
Normal file
@@ -0,0 +1,16 @@
|
||||
interaction-success-userhasbreast = У меня есть грудь
|
||||
interaction-success-userhasbutt = У меня есть попа
|
||||
interaction-success-userhaspenis = У меня есть член
|
||||
interaction-success-userhastesticles = У меня есть яйца
|
||||
interaction-success-userhasvagina = У меня есть вагина
|
||||
interaction-success-isusercrawl = Я лежу!
|
||||
|
||||
interaction-success-hassmalldistance = ..Довольно близко
|
||||
interaction-success-targethasbreast = ..Имеет грудь
|
||||
interaction-success-targethasbutt = ..Имеет попу
|
||||
interaction-success-targethaspenis = ..Имеет член
|
||||
interaction-success-targethastesticles = ..Имеет яйца
|
||||
interaction-success-targethasvagina = ..Имеет вагину
|
||||
interaction-success-istargetcrawl = ..Лежит
|
||||
|
||||
interaction-empty = ..Пусто
|
||||
@@ -1,2 +1,4 @@
|
||||
interaction-panel-title = Панель взаимодействий
|
||||
interaction-hide-unvisible = Спрятать недоступные действия
|
||||
interaction-update = Обновить список
|
||||
interaction-open = Открыть панель взаимодействий
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
- interaction-butt-fuck2
|
||||
- interaction-butt-fuck3
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
- type: interaction
|
||||
id: DickInVagina
|
||||
@@ -60,17 +61,28 @@
|
||||
- !type:TargetHasVagina
|
||||
beginningSound:
|
||||
path: /Audio/Effects/Emotes/clap1.ogg
|
||||
beginningActions:
|
||||
- !type:RequireAnimation
|
||||
k0: 0
|
||||
k1: 0.1
|
||||
k3: 0.25
|
||||
repeat: 12
|
||||
beginningMessages:
|
||||
- interaction-butt-fuck1
|
||||
- interaction-butt-fuck2
|
||||
- interaction-butt-fuck3
|
||||
- interaction-vagina-fuck1
|
||||
- interaction-vagina-fuck2
|
||||
- interaction-vagina-fuck3
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
- type: interaction
|
||||
id: ItemOnButt
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasButt
|
||||
- !type:HasItemInUserHand
|
||||
beginningTimeout: 10
|
||||
preBeginMessages:
|
||||
- interaction-butt-put-before1
|
||||
beginningMessages:
|
||||
- interaction-butt-put1
|
||||
- interaction-butt-put2
|
||||
@@ -82,6 +94,10 @@
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasVagina
|
||||
- !type:HasItemInUserHand
|
||||
beginningTimeout: 10
|
||||
preBeginMessages:
|
||||
- interaction-vagina-put-before1
|
||||
beginningMessages:
|
||||
- interaction-vagina-put1
|
||||
- interaction-vagina-put2
|
||||
@@ -90,15 +106,35 @@
|
||||
|
||||
|
||||
- type: interaction
|
||||
id: ItemOnPenis
|
||||
id: ItemFromButt
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasPenis
|
||||
- !type:TargetHasButt
|
||||
- !type:UserHasHand
|
||||
beginningTimeout: 10
|
||||
preBeginMessages:
|
||||
- interaction-butt-take-before1
|
||||
beginningMessages:
|
||||
- interaction-penis-put1
|
||||
- interaction-penis-put2
|
||||
- interaction-penis-put3
|
||||
group: Extreme
|
||||
- interaction-butt-take1
|
||||
- interaction-butt-take2
|
||||
- interaction-butt-take3
|
||||
group: Danger
|
||||
|
||||
- type: interaction
|
||||
id: ItemFromVagina
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasVagina
|
||||
- !type:UserHasHand
|
||||
beginningTimeout: 10
|
||||
preBeginMessages:
|
||||
- interaction-vagina-take-before1
|
||||
beginningMessages:
|
||||
- interaction-vagina-take1
|
||||
- interaction-vagina-take2
|
||||
- interaction-vagina-take3
|
||||
group: Danger
|
||||
|
||||
|
||||
|
||||
- type: interaction
|
||||
@@ -106,6 +142,7 @@
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasPenis
|
||||
- !type:CantInteractSelf
|
||||
#- !type:UserHasButt
|
||||
- !type:IsTargetCrawl
|
||||
beginningSound:
|
||||
@@ -117,6 +154,7 @@
|
||||
- interaction-sit-butt2
|
||||
- interaction-sit-butt3
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
|
||||
- type: interaction
|
||||
@@ -124,6 +162,7 @@
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasPenis
|
||||
- !type:CantInteractSelf
|
||||
- !type:UserHasVagina
|
||||
- !type:IsTargetCrawl
|
||||
beginningSound:
|
||||
@@ -135,11 +174,13 @@
|
||||
- interaction-sit-vagina2
|
||||
- interaction-sit-vagina3
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
- type: interaction
|
||||
id: LickDick
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:CantInteractSelf
|
||||
- !type:TargetHasPenis
|
||||
beginningSound:
|
||||
path: /Audio/White/Felinid/lick.ogg
|
||||
@@ -150,14 +191,18 @@
|
||||
- interaction-dick-lick2
|
||||
- interaction-dick-lick3
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
- type: interaction
|
||||
id: LickVagina
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:CantInteractSelf
|
||||
- !type:TargetHasVagina
|
||||
beginningSound:
|
||||
path: /Audio/White/Felinid/lick.ogg
|
||||
beginningActions:
|
||||
- !type:RequireHorizontalAnimation
|
||||
beginningAction:
|
||||
- !type:RequireHorizontalAnimation
|
||||
beginningMessages:
|
||||
@@ -165,6 +210,7 @@
|
||||
- interaction-vagina-lick2
|
||||
- interaction-vagina-lick3
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
- type: interaction
|
||||
id: LickFace
|
||||
@@ -181,7 +227,25 @@
|
||||
- interaction-face-lick1
|
||||
- interaction-face-lick2
|
||||
- interaction-face-lick3
|
||||
group: Moderate
|
||||
|
||||
- type: interaction
|
||||
id: DrochDick
|
||||
checks:
|
||||
- !type:HasSmallDistance
|
||||
- !type:TargetHasPenis
|
||||
beginningSound:
|
||||
path: /Audio/Effects/Emotes/clap1.ogg
|
||||
beginningActions:
|
||||
- !type:RequireAnimation
|
||||
k0: 0
|
||||
k1: 0.1
|
||||
k2: 3.4
|
||||
k3: 0.25
|
||||
beginningMessages:
|
||||
- interaction-droch-dick1
|
||||
group: Danger
|
||||
endTime: 6
|
||||
|
||||
- type: interaction
|
||||
id: KissMouth
|
||||
@@ -282,6 +346,7 @@
|
||||
- type: interaction
|
||||
id: CombButt
|
||||
checks:
|
||||
- !type:CantInteractSelf
|
||||
- !type:HasSmallDistance
|
||||
beginningSound:
|
||||
path: /Audio/White/Interactions/ches.ogg
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
- DickInVagina
|
||||
- ItemOnButt
|
||||
- ItemOnVagina
|
||||
- ItemOnPenis
|
||||
- LickVagina
|
||||
- LickDick
|
||||
- LickFace
|
||||
@@ -21,3 +20,6 @@
|
||||
- CrawlTarget
|
||||
- SitWithButt
|
||||
- SitWithVagina
|
||||
- DrochDick
|
||||
- ItemFromButt
|
||||
- ItemFromVagina
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
- type: genitalsGroup
|
||||
id: Penis
|
||||
prototypes:
|
||||
- PenisAmputated0
|
||||
#- PenisAmputated0
|
||||
- PenisBarbknot1
|
||||
- PenisBarbknot2
|
||||
- PenisBarbknot3
|
||||
@@ -39,12 +39,12 @@
|
||||
- PenisTentacle2
|
||||
- PenisTentacle3
|
||||
- PenisTentacle4
|
||||
- PenisThick1
|
||||
- PenisThick2
|
||||
- PenisThick3
|
||||
- PenisThick4
|
||||
- PenisThick5
|
||||
- VaginaCloaca1
|
||||
#- PenisThick1
|
||||
#- PenisThick2
|
||||
#- PenisThick3
|
||||
#- PenisThick4
|
||||
#- PenisThick5
|
||||
#- VaginaCloaca1
|
||||
- VaginaDentata1
|
||||
- VaginaFurred1
|
||||
- VaginaGaping1
|
||||
@@ -72,16 +72,16 @@
|
||||
- BreastsPairD
|
||||
- BreastsPairE
|
||||
- BreastsPairF
|
||||
- BreastsPairGiga
|
||||
#- BreastsPairGiga
|
||||
- BreastsPairG
|
||||
- BreastsPairHuge
|
||||
#- BreastsPairHuge
|
||||
- BreastsPairH
|
||||
- BreastsPairImpossible
|
||||
#- BreastsPairImpossible
|
||||
- BreastsPairI
|
||||
- BreastsPairJ
|
||||
- BreastsPairK
|
||||
- BreastsPairL
|
||||
- BreastsPairMassive
|
||||
#- BreastsPairMassive
|
||||
- BreastsPairM
|
||||
- BreastsPairN
|
||||
- BreastsPairO
|
||||
@@ -91,16 +91,16 @@
|
||||
- BreastsQuadD
|
||||
- BreastsQuadE
|
||||
- BreastsQuadF
|
||||
- BreastsQuadGiga
|
||||
#- BreastsQuadGiga
|
||||
- BreastsQuadG
|
||||
- BreastsQuadHuge
|
||||
#- BreastsQuadHuge
|
||||
- BreastsQuadH
|
||||
- BreastsQuadImpossible
|
||||
#- BreastsQuadImpossible
|
||||
- BreastsQuadI
|
||||
- BreastsQuadJ
|
||||
- BreastsQuadK
|
||||
- BreastsQuadL
|
||||
- BreastsQuadMassive
|
||||
#- BreastsQuadMassive
|
||||
- BreastsQuadM
|
||||
- BreastsQuadN
|
||||
- BreastsQuadO
|
||||
@@ -110,16 +110,16 @@
|
||||
- BreastsSextupleD
|
||||
- BreastsSextupleE
|
||||
- BreastsSextupleF
|
||||
- BreastsSextupleGiga
|
||||
#- BreastsSextupleGiga
|
||||
- BreastsSextupleG
|
||||
- BreastsSextupleHuge
|
||||
#- BreastsSextupleHuge
|
||||
- BreastsSextupleH
|
||||
- BreastsSextupleImpossible
|
||||
#- BreastsSextupleImpossible
|
||||
- BreastsSextupleI
|
||||
- BreastsSextupleJ
|
||||
- BreastsSextupleK
|
||||
- BreastsSextupleL
|
||||
- BreastsSextupleMassive
|
||||
#- BreastsSextupleMassive
|
||||
- BreastsSextupleM
|
||||
- BreastsSextupleN
|
||||
- BreastsSextupleO
|
||||
@@ -131,9 +131,9 @@
|
||||
- TesticlesSheath2
|
||||
- TesticlesSheath3
|
||||
- TesticlesSheath4
|
||||
- TesticlesSheath5
|
||||
- TesticlesSingle1
|
||||
- TesticlesSingle2
|
||||
- TesticlesSingle3
|
||||
- TesticlesSingle4
|
||||
- TesticlesSingle5
|
||||
#- TesticlesSheath5
|
||||
#- TesticlesSingle1
|
||||
#- TesticlesSingle2
|
||||
#- TesticlesSingle3
|
||||
#- TesticlesSingle4
|
||||
#- TesticlesSingle5
|
||||
|
||||
Reference in New Issue
Block a user