mirror of
https://gitgud.io/c0ffeeeeeeee/rjw-toys-and-masturbation.git
synced 2024-08-15 00:43:44 +00:00
Add project files.
This commit is contained in:
parent
d2dbc71d94
commit
39924e2af5
17 changed files with 487 additions and 0 deletions
12
About/About.xml
Normal file
12
About/About.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<ModMetaData>
|
||||||
|
<name>RimJobWorld - Sex Toys and Masturbation</name>
|
||||||
|
<packageId>c0ffee.SexToysMasturbation</packageId>
|
||||||
|
<author>c0ffee</author>
|
||||||
|
<supportedVersions>
|
||||||
|
<li>1.1</li>
|
||||||
|
<li>1.2</li>
|
||||||
|
</supportedVersions>
|
||||||
|
<description>Sex toys for use with RJW.</description>
|
||||||
|
</ModMetaData>
|
BIN
Assemblies/RJW-ToysAndMasturbation.dll
Normal file
BIN
Assemblies/RJW-ToysAndMasturbation.dll
Normal file
Binary file not shown.
12
Defs/JobDefs/Jobs_MasturbateToy.xml
Normal file
12
Defs/JobDefs/Jobs_MasturbateToy.xml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Defs>
|
||||||
|
<JobDef>
|
||||||
|
|
||||||
|
<defName>MasturbateWithToy</defName>
|
||||||
|
<driverClass>RJW_ToysAndMasturbation.JobDriver_MasturbateWithToy</driverClass>
|
||||||
|
<reportString>Masturbatin' with toy.</reportString>
|
||||||
|
<casualInterruptible>false</casualInterruptible>
|
||||||
|
|
||||||
|
</JobDef>
|
||||||
|
</Defs>
|
||||||
|
|
85
Defs/ThingDefs/SexToys.xml
Normal file
85
Defs/ThingDefs/SexToys.xml
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Defs>
|
||||||
|
<ThingDef Name="SexToyBase" Abstract="True">
|
||||||
|
<thingClass>ThingWithComps</thingClass>
|
||||||
|
<comps>
|
||||||
|
<li Class="CompProperties_Forbiddable" />
|
||||||
|
<li>
|
||||||
|
<compClass>CompQuality</compClass>
|
||||||
|
</li>
|
||||||
|
<li Class="RJW_ToysAndMasturbation.CompProperties_SexToy" />
|
||||||
|
</comps>
|
||||||
|
<selectable>true</selectable>
|
||||||
|
<generateCommonality>0.0</generateCommonality>
|
||||||
|
<category>Item</category>
|
||||||
|
<thingCategories>
|
||||||
|
<li>Manufactured</li>
|
||||||
|
</thingCategories>
|
||||||
|
<techLevel>Industrial</techLevel>
|
||||||
|
<drawGUIOverlay>true</drawGUIOverlay>
|
||||||
|
<pathCost>8</pathCost>
|
||||||
|
<altitudeLayer>Item</altitudeLayer>
|
||||||
|
<tickerType>Never</tickerType>
|
||||||
|
<tradeTags>
|
||||||
|
<li>Exotic</li>
|
||||||
|
</tradeTags>
|
||||||
|
<tradeability>Sellable</tradeability>
|
||||||
|
<alwaysHaulable>true</alwaysHaulable>
|
||||||
|
|
||||||
|
</ThingDef>
|
||||||
|
|
||||||
|
<ThingDef ParentName="SexToyBase">
|
||||||
|
<defName>SexToysDildo</defName>
|
||||||
|
<label>Dildo</label>
|
||||||
|
<description>A simple dildo for masturbation.</description>
|
||||||
|
|
||||||
|
<graphicData>
|
||||||
|
<texPath>Things/SexToys/Dildo</texPath>
|
||||||
|
<shaderType>CutoutComplex</shaderType>
|
||||||
|
<graphicClass>Graphic_Single</graphicClass>
|
||||||
|
</graphicData>
|
||||||
|
|
||||||
|
<statBases>
|
||||||
|
<WorkToMake>1200</WorkToMake>
|
||||||
|
<MaxHitPoints>20</MaxHitPoints>
|
||||||
|
<Flammability>0</Flammability>
|
||||||
|
<Beauty>1</Beauty>
|
||||||
|
<MarketValue>85</MarketValue>
|
||||||
|
<Cleanliness>0</Cleanliness>
|
||||||
|
<Mass>0.2</Mass>
|
||||||
|
</statBases>
|
||||||
|
|
||||||
|
<stuffCategories>
|
||||||
|
<li>Metallic</li>
|
||||||
|
<li>Woody</li>
|
||||||
|
<li>Stony</li>
|
||||||
|
</stuffCategories>
|
||||||
|
|
||||||
|
<costStuffCount>5</costStuffCount>
|
||||||
|
<tradeNeverStack>true</tradeNeverStack>
|
||||||
|
|
||||||
|
<recipeMaker>
|
||||||
|
<workSpeedStat>GeneralLaborSpeed</workSpeedStat>
|
||||||
|
<workSkill>Crafting</workSkill>
|
||||||
|
<effectWorking>Smith</effectWorking>
|
||||||
|
<soundWorking>Recipe_Smith</soundWorking>
|
||||||
|
<recipeUsers>
|
||||||
|
<li>ElectricSmithy</li>
|
||||||
|
<li>FueledSmithy</li>
|
||||||
|
</recipeUsers>
|
||||||
|
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
||||||
|
<defaultIngredientFilter>
|
||||||
|
<categories>
|
||||||
|
<li>Root</li>
|
||||||
|
</categories>
|
||||||
|
<disallowedThingDefs>
|
||||||
|
<li>Uranium</li>
|
||||||
|
<li>Gold</li>
|
||||||
|
<li>Silver</li>
|
||||||
|
<li>Jade</li>
|
||||||
|
<li>Plasteel</li>
|
||||||
|
</disallowedThingDefs>
|
||||||
|
</defaultIngredientFilter>
|
||||||
|
</recipeMaker>
|
||||||
|
</ThingDef>
|
||||||
|
</Defs>
|
36
Properties/AssemblyInfo.cs
Normal file
36
Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("RJW-ToysAndMasturbation")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("RJW-ToysAndMasturbation")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2020")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("a75640f8-d269-44ca-b27c-b8861f2da2dc")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
81
RJW-ToysAndMasturbation.csproj
Normal file
81
RJW-ToysAndMasturbation.csproj
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{A75640F8-D269-44CA-B27C-B8861F2DA2DC}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>RJW_ToysAndMasturbation</RootNamespace>
|
||||||
|
<AssemblyName>RJW-ToysAndMasturbation</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>false</DebugSymbols>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>Assemblies\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="0Harmony">
|
||||||
|
<HintPath>..\..\..\..\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Assembly-CSharp">
|
||||||
|
<HintPath>..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="RJW">
|
||||||
|
<HintPath>..\RJW\1.1\Assemblies\RJW.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="UnityEngine">
|
||||||
|
<HintPath>..\..\RimWorldWin64_Data\Managed\UnityEngine.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="UnityEngine.CoreModule">
|
||||||
|
<HintPath>..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
|
||||||
|
<Private>False</Private>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Source\DefOfs\MasturbateToyDefOf.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Source\JobDrivers\JobDriver_MasturbateWithToy.cs" />
|
||||||
|
<Compile Include="Source\JobGivers\JobGiver_MasturbateWithToy.cs" />
|
||||||
|
<Compile Include="Source\ThingComps\CompProperties_SexToy.cs" />
|
||||||
|
<Compile Include="Source\ThingComps\CompSexToy.cs" />
|
||||||
|
<Compile Include="Source\Utils\SexToyUtility.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Defs\JobDefs\Jobs_MasturbateToy.xml" />
|
||||||
|
<Content Include="Defs\ThingDefs\SexToys.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Textures\Things\SexToys\" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
25
RJW-ToysAndMasturbation.sln
Normal file
25
RJW-ToysAndMasturbation.sln
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.29905.134
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RJW-ToysAndMasturbation", "RJW-ToysAndMasturbation.csproj", "{A75640F8-D269-44CA-B27C-B8861F2DA2DC}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{A75640F8-D269-44CA-B27C-B8861F2DA2DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A75640F8-D269-44CA-B27C-B8861F2DA2DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A75640F8-D269-44CA-B27C-B8861F2DA2DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A75640F8-D269-44CA-B27C-B8861F2DA2DC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {08CD1E1E-A226-4A0F-9469-52A3C67FEAED}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
21
Source/DefOfs/MasturbateToyDefOf.cs
Normal file
21
Source/DefOfs/MasturbateToyDefOf.cs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
using RimWorld;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace RJW_ToysAndMasturbation {
|
||||||
|
|
||||||
|
[DefOf]
|
||||||
|
public static class MasturbateToyDefOf {
|
||||||
|
|
||||||
|
public static JobDef MasturbateWithToy;
|
||||||
|
|
||||||
|
static MasturbateToyDefOf() {
|
||||||
|
DefOfHelper.EnsureInitializedInCtor(typeof(JobDefOf));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
77
Source/JobDrivers/JobDriver_MasturbateWithToy.cs
Normal file
77
Source/JobDrivers/JobDriver_MasturbateWithToy.cs
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using RimWorld;
|
||||||
|
using rjw;
|
||||||
|
using Verse.AI;
|
||||||
|
|
||||||
|
namespace RJW_ToysAndMasturbation {
|
||||||
|
class JobDriver_MasturbateWithToy : JobDriver_SexBaseInitiator {
|
||||||
|
|
||||||
|
public IntVec3 cell => (IntVec3)job.GetTarget(iCell);
|
||||||
|
public override bool TryMakePreToilReservations(bool errorOnFailed) {
|
||||||
|
return ReservationUtility.Reserve(pawn, job.targetA, job, stackCount: 1, errorOnFailed: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public new void setup_ticks() {
|
||||||
|
base.setup_ticks();
|
||||||
|
duration = (int)(xxx.is_frustrated(base.pawn) ? (2500f * Rand.Range(0.2f, 0.7f)) : (2500f * Rand.Range(0.2f, 0.4f)));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override IEnumerable<Toil> MakeNewToils() {
|
||||||
|
setup_ticks();
|
||||||
|
ToilFailConditions.FailOn(this, () => pawn.Downed);
|
||||||
|
ToilFailConditions.FailOn(this, () => pawn.IsBurning());
|
||||||
|
ToilFailConditions.FailOn(this, () => pawn.IsFighting());
|
||||||
|
ToilFailConditions.FailOn(this, () => pawn.Drafted);
|
||||||
|
|
||||||
|
|
||||||
|
yield return Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnDespawnedNullOrForbidden(TargetIndex.A);
|
||||||
|
yield return Toils_Haul.StartCarryThing(TargetIndex.A);
|
||||||
|
|
||||||
|
if (!SexToyUtility.isRJWAnimationsLoaded || true /*True for now, anims come later; disable once created animations*/) {
|
||||||
|
//place down if anims isn't loaded
|
||||||
|
yield return Toils_Haul.CarryHauledThingToCell(TargetIndex.C);
|
||||||
|
yield return Toils_Haul.PlaceHauledThingInCell(TargetIndex.C, Toils_Goto.GotoCell(TargetIndex.C, PathEndMode.OnCell), storageMode: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return Toils_Goto.GotoCell(TargetIndex.C, PathEndMode.OnCell);
|
||||||
|
|
||||||
|
|
||||||
|
Toil masturbationToil = Toils_General.Wait(duration);
|
||||||
|
masturbationToil.handlingFacing = true;
|
||||||
|
masturbationToil.defaultCompleteMode = ToilCompleteMode.Never;
|
||||||
|
masturbationToil.initAction = delegate { Start(); };
|
||||||
|
masturbationToil.tickAction = delegate {
|
||||||
|
duration--;
|
||||||
|
if (Gen.IsHashIntervalTick(pawn, ticks_between_hearts)) {
|
||||||
|
ThrowMetaIcon(pawn.Position, pawn.Map, ThingDefOf.Mote_Heart);
|
||||||
|
}
|
||||||
|
SexTick(pawn, null);
|
||||||
|
SexUtility.reduce_rest(pawn);
|
||||||
|
if (duration <= 0) ReadyForNextToil();
|
||||||
|
};
|
||||||
|
masturbationToil.AddFinishAction(delegate { End(); });
|
||||||
|
yield return masturbationToil;
|
||||||
|
|
||||||
|
Toil AfterToil = new Toil();
|
||||||
|
AfterToil.initAction = delegate {
|
||||||
|
SexUtility.Aftersex(pawn);
|
||||||
|
if(SexUtility.ConsiderCleaning(pawn)) {
|
||||||
|
LocalTargetInfo filth = GridsUtility.GetFirstThing<Filth>(pawn.PositionHeld, pawn.Map);
|
||||||
|
Job cleanup = JobMaker.MakeJob(JobDefOf.Clean);
|
||||||
|
cleanup.AddQueuedTarget(TargetIndex.A, filth);
|
||||||
|
pawn.jobs.jobQueue.EnqueueFirst(cleanup);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
yield return AfterToil;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
40
Source/JobGivers/JobGiver_MasturbateWithToy.cs
Normal file
40
Source/JobGivers/JobGiver_MasturbateWithToy.cs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using RimWorld;
|
||||||
|
using rjw;
|
||||||
|
using Verse;
|
||||||
|
using Verse.AI;
|
||||||
|
|
||||||
|
namespace RJW_ToysAndMasturbation {
|
||||||
|
class JobGiver_MasturbateWithToy : ThinkNode_JobGiver {
|
||||||
|
|
||||||
|
public static IntVec3 FapLocation(Pawn p) => (new JobGiver_Masturbate()).FindFapLocation(p);
|
||||||
|
|
||||||
|
protected override Job TryGiveJob(Pawn pawn) {
|
||||||
|
|
||||||
|
if (pawn.Drafted) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!xxx.can_be_fucked(pawn) && !xxx.can_fuck(pawn)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ((SexUtility.ReadyForLovin(pawn) && (!xxx.is_whore(pawn) || pawn.IsPrisoner || xxx.is_slave(pawn))) || xxx.is_frustrated(pawn)) {
|
||||||
|
if (RJWPreferenceSettings.FapInBed && pawn.jobs.curDriver is JobDriver_LayDown) {
|
||||||
|
Building_Bed bed = ((JobDriver_LayDown)pawn.jobs.curDriver).Bed;
|
||||||
|
if (bed != null) {
|
||||||
|
return JobMaker.MakeJob(xxx.Masturbate, null, bed, bed.Position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (RJWPreferenceSettings.FapEverywhere && (xxx.is_frustrated(pawn) || xxx.has_quirk(pawn, "Exhibitionist"))) {
|
||||||
|
return JobMaker.MakeJob(xxx.Masturbate, null, null, FapLocation(pawn));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
17
Source/ThingComps/CompProperties_SexToy.cs
Normal file
17
Source/ThingComps/CompProperties_SexToy.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using RimWorld;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace RJW_ToysAndMasturbation {
|
||||||
|
public class CompProperties_SexToy : CompProperties {
|
||||||
|
|
||||||
|
public CompProperties_SexToy() {
|
||||||
|
compClass = typeof(CompSexToy);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
59
Source/ThingComps/CompSexToy.cs
Normal file
59
Source/ThingComps/CompSexToy.cs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
using RimWorld;
|
||||||
|
using Verse.AI;
|
||||||
|
using rjw;
|
||||||
|
|
||||||
|
namespace RJW_ToysAndMasturbation {
|
||||||
|
public class CompSexToy : ThingComp {
|
||||||
|
|
||||||
|
public static IntVec3 FapLocation(Pawn p) => (new JobGiver_Masturbate()).FindFapLocation(p);
|
||||||
|
|
||||||
|
public override IEnumerable<FloatMenuOption> CompFloatMenuOptions(Pawn pawn) {
|
||||||
|
|
||||||
|
if (!pawn.CanReach(parent, PathEndMode.Touch, Danger.Deadly)) {
|
||||||
|
yield return new FloatMenuOption(FloatMenuOptionLabel(pawn) + " (" + "NoPath".Translate() + ")", null);
|
||||||
|
}
|
||||||
|
else if (!pawn.CanReserve(parent)) {
|
||||||
|
yield return new FloatMenuOption(FloatMenuOptionLabel(pawn) + " (" + "Reserved".Translate() + ")", null);
|
||||||
|
}
|
||||||
|
else if (!pawn.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)) {
|
||||||
|
yield return new FloatMenuOption(FloatMenuOptionLabel(pawn) + " (" + "Incapable".Translate() + ")", null);
|
||||||
|
}
|
||||||
|
else if (!xxx.can_be_fucked(pawn) && !xxx.can_fuck(pawn)) {
|
||||||
|
yield return new FloatMenuOption(FloatMenuOptionLabel(pawn) + " (" + "Incapable".Translate() + ")", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
|
||||||
|
yield return new FloatMenuOption(FloatMenuOptionLabel(pawn), delegate {
|
||||||
|
|
||||||
|
if (RJWPreferenceSettings.FapInBed && pawn.jobs.curDriver is JobDriver_LayDown) {
|
||||||
|
Building_Bed bed = ((JobDriver_LayDown)pawn.jobs.curDriver).Bed;
|
||||||
|
if (bed != null) {
|
||||||
|
Job j = JobMaker.MakeJob(MasturbateToyDefOf.MasturbateWithToy, parent, bed, bed.Position);
|
||||||
|
j.count = 1;
|
||||||
|
pawn.jobs.TryTakeOrderedJob(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Job j = JobMaker.MakeJob(MasturbateToyDefOf.MasturbateWithToy, parent, null, FapLocation(pawn));
|
||||||
|
j.count = 1;
|
||||||
|
pawn.jobs.TryTakeOrderedJob(j);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private string FloatMenuOptionLabel(Pawn pawn) {
|
||||||
|
return "Use sex toy";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
Source/Utils/SexToyUtility.cs
Normal file
22
Source/Utils/SexToyUtility.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace RJW_ToysAndMasturbation {
|
||||||
|
|
||||||
|
[StaticConstructorOnStartup]
|
||||||
|
public static class SexToyUtility {
|
||||||
|
|
||||||
|
public static bool isRJWAnimationsLoaded = false;
|
||||||
|
|
||||||
|
static SexToyUtility() {
|
||||||
|
if(LoadedModManager.RunningMods.Any((ModContentPack x) => x.Name == "Rimworld-Animations")) {
|
||||||
|
isRJWAnimationsLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
BIN
Textures/Things/SexToys/Dildo.png
Normal file
BIN
Textures/Things/SexToys/Dildo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.6 KiB |
BIN
Textures/Things/SexToys/Dildo_m.png
Normal file
BIN
Textures/Things/SexToys/Dildo_m.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
BIN
Textures/Things/SexToys/dildo2.mdp
Normal file
BIN
Textures/Things/SexToys/dildo2.mdp
Normal file
Binary file not shown.
BIN
Textures/Things/SexToys/dildo_M.mdp
Normal file
BIN
Textures/Things/SexToys/dildo_M.mdp
Normal file
Binary file not shown.
Loading…
Reference in a new issue