mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2024-08-15 00:23:31 +00:00
93 lines
4.2 KiB
C#
93 lines
4.2 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Reflection;
|
|||
|
using System.Reflection.Emit;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using HarmonyLib;
|
|||
|
using rjw;
|
|||
|
using RimWorld;
|
|||
|
using Verse;
|
|||
|
using static LicentiaLabs.Licentia;
|
|||
|
using static HarmonyLib.Code;
|
|||
|
|
|||
|
namespace RJW_Genes
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Changes LicentiaLabs (if Present) to add a cumflation-counter hediff, when the pawn is cumflated.
|
|||
|
/// The counter hediff takes away the negative stats of the original hediff.
|
|||
|
/// This code is exercised / loaded in the HarmonyInit.
|
|||
|
/// Patched File: https://gitgud.io/John-the-Anabaptist/licentia-labs/-/blob/master/Source/LicentiaLabs/LicentiaLabs/Cumflation.cs
|
|||
|
/// </summary>
|
|||
|
///
|
|||
|
class Patch_LikesCumflation
|
|||
|
{
|
|||
|
// This patch does not need the normal Harmony Targetting,
|
|||
|
// as it needs to be added only on demand (See HarmonyInit.cs)
|
|||
|
public static void PostFix(SexProps props)
|
|||
|
{
|
|||
|
|
|||
|
if (props == null || props.pawn == null || props.partner == null) return;
|
|||
|
|
|||
|
if (props.pawn.genes != null && props.pawn.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation) )
|
|||
|
{
|
|||
|
AddOrIncreaseCumflationCounterHediff(props.pawn);
|
|||
|
}
|
|||
|
|
|||
|
if (props.partner.genes != null && props.partner.genes.HasActiveGene(GeneDefOf.rjw_genes_likes_cumflation))
|
|||
|
{
|
|||
|
AddOrIncreaseCumflationCounterHediff(props.partner);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void AddOrIncreaseCumflationCounterHediff(Pawn inflated)
|
|||
|
{
|
|||
|
//Hediff cumstuffed_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumstuffed);
|
|||
|
Hediff cumstuffed_hediff = LicentiaLabs.CumflationHelper.GetCumflationHediff(inflated, LicentiaLabs.Licentia.HediffDefs.Cumstuffed, "stomach");
|
|||
|
if (cumstuffed_hediff != null && cumstuffed_hediff.Severity >= 0.01) {
|
|||
|
|
|||
|
ModLog.Message($"{inflated} got cumstuffed and gets the counter-part");
|
|||
|
var bodyPartRecord = inflated.RaceProps.body.AllParts.Find(bpr => bpr.def.defName.Contains("stomach") || bpr.def.defName.Contains("stomach".ToLower()));
|
|||
|
var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumstuffed_counter, bodyPartRecord);
|
|||
|
counter_hediff.Severity = cumstuffed_hediff.Severity;
|
|||
|
}
|
|||
|
else if (cumstuffed_hediff != null)
|
|||
|
{
|
|||
|
ModLog.Message("cumstuffed_hediff was too un-sever");
|
|||
|
}
|
|||
|
else
|
|||
|
ModLog.Message("cumstuffed_hediff was null");
|
|||
|
|
|||
|
Hediff cumflation_hediff = inflated.health.hediffSet.GetFirstHediffOfDef(LicentiaLabs.Licentia.HediffDefs.Cumflation);
|
|||
|
if (cumflation_hediff != null && cumflation_hediff.Severity >= 0.01)
|
|||
|
{
|
|||
|
ModLog.Message($"{inflated} got cumflated and gets the counter-part");
|
|||
|
var bodyPartRecord = Genital_Helper.get_genitalsBPR(inflated);
|
|||
|
var counter_hediff = CreateOrGetCumflationCounterHediff(inflated, HediffDefOf.rjw_genes_cumstuffed_counter, bodyPartRecord);
|
|||
|
counter_hediff.Severity = cumstuffed_hediff.Severity;
|
|||
|
}
|
|||
|
else if (cumflation_hediff != null)
|
|||
|
{
|
|||
|
ModLog.Message("Cumflation Hediff was too un-sever");
|
|||
|
}
|
|||
|
else
|
|||
|
ModLog.Message("Cumflation Hediff was null");
|
|||
|
}
|
|||
|
|
|||
|
public static Hediff CreateOrGetCumflationCounterHediff(Pawn inflated, HediffDef counterCumflationDef, BodyPartRecord bodyPartRecord)
|
|||
|
{
|
|||
|
Hediff cumflationHediff = inflated.health.hediffSet.GetFirstHediffOfDef(counterCumflationDef);
|
|||
|
if (cumflationHediff == null)
|
|||
|
{
|
|||
|
cumflationHediff = HediffMaker.MakeHediff(counterCumflationDef, inflated, bodyPartRecord);
|
|||
|
cumflationHediff.Severity = 0;
|
|||
|
inflated.health.AddHediff(cumflationHediff, bodyPartRecord);
|
|||
|
} else {
|
|||
|
ModLog.Message("Did not find a correct Counter-CumflationDef ");
|
|||
|
}
|
|||
|
return cumflationHediff;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|