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…
	
	Add table
		Add a link
		
	
		Reference in a new issue