mirror of
https://gitgud.io/Ed86/rjw-whoring.git
synced 2024-08-15 00:03:25 +00:00
Compare commits
No commits in common. "fa56ea2c3736db4cdd2737b9571bf0011ac3102d" and "a6079022ab460d75e2fda8392ed90ea4256aded7" have entirely different histories.
fa56ea2c37
...
a6079022ab
17 changed files with 48 additions and 303 deletions
Binary file not shown.
|
@ -4,14 +4,14 @@
|
||||||
<JobDef>
|
<JobDef>
|
||||||
<defName>WhoreIsServingVisitors</defName>
|
<defName>WhoreIsServingVisitors</defName>
|
||||||
<driverClass>rjwwhoring.JobDriver_WhoreIsServingVisitors</driverClass>
|
<driverClass>rjwwhoring.JobDriver_WhoreIsServingVisitors</driverClass>
|
||||||
<reportString>servicing TargetA.</reportString>
|
<reportString>serving visitors</reportString>
|
||||||
<casualInterruptible>false</casualInterruptible>
|
<casualInterruptible>false</casualInterruptible>
|
||||||
</JobDef>
|
</JobDef>
|
||||||
|
|
||||||
<JobDef>
|
<JobDef>
|
||||||
<defName>WhoreInvitingVisitors</defName>
|
<defName>WhoreInvitingVisitors</defName>
|
||||||
<driverClass>rjwwhoring.JobDriver_WhoreInvitingVisitors</driverClass>
|
<driverClass>rjwwhoring.JobDriver_WhoreInvitingVisitors</driverClass>
|
||||||
<reportString>soliciting TargetA.</reportString>
|
<reportString>attempting hookup</reportString>
|
||||||
<casualInterruptible>false</casualInterruptible>
|
<casualInterruptible>false</casualInterruptible>
|
||||||
</JobDef>
|
</JobDef>
|
||||||
</Defs>
|
</Defs>
|
|
@ -49,11 +49,4 @@
|
||||||
<workerClass>rjwwhoring.MainTab.PawnColumnWorker_Mood</workerClass>
|
<workerClass>rjwwhoring.MainTab.PawnColumnWorker_Mood</workerClass>
|
||||||
<width>100</width>
|
<width>100</width>
|
||||||
</PawnColumnDef>
|
</PawnColumnDef>
|
||||||
<PawnColumnDef>
|
|
||||||
<defName>RJW_WhoringPolicy</defName>
|
|
||||||
<headerTip>Trade sex for benefits</headerTip>
|
|
||||||
<label>Payment type</label>
|
|
||||||
<workerClass>rjwwhoring.MainTab.PawnColumnWorker_WhoringPolicy</workerClass>
|
|
||||||
<width>100</width>
|
|
||||||
</PawnColumnDef>
|
|
||||||
</Defs>
|
</Defs>
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
<li>RJW_EarnedMoneyByWhore</li>
|
<li>RJW_EarnedMoneyByWhore</li>
|
||||||
<li>RJW_AverageMoneyByWhore</li>
|
<li>RJW_AverageMoneyByWhore</li>
|
||||||
<li>RJW_PriceRangeOfWhore</li>
|
<li>RJW_PriceRangeOfWhore</li>
|
||||||
<li>RJW_WhoringPolicy</li>
|
|
||||||
<li>RemainingSpace</li>
|
<li>RemainingSpace</li>
|
||||||
</columns>
|
</columns>
|
||||||
<modExtensions>
|
<modExtensions>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
<!--Whore designators-->
|
<!--Whore designators-->
|
||||||
<ForService>Assign to whorin'</ForService> <!-- This field is not visible -->
|
<ForService>Assign to whorin'</ForService> <!-- This field is not visible -->
|
||||||
<ForServiceDesc><![CDATA[Mark for whoring
|
<ForServiceDesc><![CDATA[Mark for whoring
|
||||||
- Will try to solicit visitors.
|
- Will try to hook up with visitors.
|
||||||
- Entertains other colonists if not busy.
|
- Entertains other colonists if not busy.
|
||||||
- Tries to refrain from masturbation while on the job, may cause frustration.
|
- Tries to refrain from masturbation while on the job, may cause frustration.
|
||||||
]]></ForServiceDesc>
|
]]></ForServiceDesc>
|
||||||
|
|
|
@ -11,7 +11,6 @@ namespace rjwwhoring
|
||||||
public class DataStore : WorldComponent
|
public class DataStore : WorldComponent
|
||||||
{
|
{
|
||||||
public Dictionary<int, BedData> bedData = new Dictionary<int, BedData>();
|
public Dictionary<int, BedData> bedData = new Dictionary<int, BedData>();
|
||||||
public Dictionary<int, WhoringData> whoringData = new Dictionary<int, WhoringData>();
|
|
||||||
|
|
||||||
public DataStore(World world) : base(world)
|
public DataStore(World world) : base(world)
|
||||||
{
|
{
|
||||||
|
@ -22,16 +21,13 @@ namespace rjwwhoring
|
||||||
if (Scribe.mode == LoadSaveMode.Saving)
|
if (Scribe.mode == LoadSaveMode.Saving)
|
||||||
{
|
{
|
||||||
bedData.RemoveAll(item => item.Value == null || !item.Value.IsValid);
|
bedData.RemoveAll(item => item.Value == null || !item.Value.IsValid);
|
||||||
whoringData.RemoveAll(item => item.Value == null || !item.Value.IsValid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
base.ExposeData();
|
base.ExposeData();
|
||||||
Scribe_Collections.Look(ref bedData, "BedData", LookMode.Value, LookMode.Deep);
|
Scribe_Collections.Look(ref bedData, "BedData", LookMode.Value, LookMode.Deep);
|
||||||
Scribe_Collections.Look(ref whoringData, "WhoringData", LookMode.Value, LookMode.Deep);
|
|
||||||
if (Scribe.mode == LoadSaveMode.LoadingVars)
|
if (Scribe.mode == LoadSaveMode.LoadingVars)
|
||||||
{
|
{
|
||||||
if (bedData == null) bedData = new Dictionary<int, BedData>();
|
if (bedData == null) bedData = new Dictionary<int, BedData>();
|
||||||
if (whoringData == null) whoringData = new Dictionary<int, WhoringData>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,21 +46,5 @@ namespace rjwwhoring
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WhoringData GetWhoringData(Pawn pawn)
|
|
||||||
{
|
|
||||||
WhoringData res;
|
|
||||||
var filled = whoringData.TryGetValue(pawn.thingIDNumber, out res);
|
|
||||||
if ((res == null) || (!res.IsValid))
|
|
||||||
{
|
|
||||||
if (filled)
|
|
||||||
{
|
|
||||||
whoringData.Remove(pawn.thingIDNumber);
|
|
||||||
}
|
|
||||||
res = new WhoringData(pawn);
|
|
||||||
whoringData.Add(pawn.thingIDNumber, res);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,17 +0,0 @@
|
||||||
using RimWorld;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwwhoring
|
|
||||||
{
|
|
||||||
public static class PawnExtensions
|
|
||||||
{
|
|
||||||
public static WhoringData WhoringData(this Pawn pawn)
|
|
||||||
{
|
|
||||||
return WhoringBase.DataStore.GetWhoringData(pawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
using System;
|
|
||||||
using Verse;
|
|
||||||
using System.Linq;
|
|
||||||
using RimWorld;
|
|
||||||
using static rjw.xxx;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
|
|
||||||
namespace rjwwhoring
|
|
||||||
{
|
|
||||||
public class WhoringData : IExposable
|
|
||||||
{
|
|
||||||
public Pawn pawn;
|
|
||||||
public bool allowedForWhoringOwner = true;
|
|
||||||
public bool allowedForWhoringAll = false;
|
|
||||||
public int reservedForPawnID = 0;
|
|
||||||
|
|
||||||
public WhoringType WhoringPolicy = WhoringType.Silver;
|
|
||||||
public enum WhoringType { Silver, Goodwill };
|
|
||||||
|
|
||||||
public WhoringData() { }
|
|
||||||
public WhoringData(Pawn pawn)
|
|
||||||
{
|
|
||||||
this.pawn = pawn;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ExposeData()
|
|
||||||
{
|
|
||||||
Scribe_References.Look(ref pawn, "pawn");
|
|
||||||
Scribe_Values.Look(ref WhoringPolicy, "WhoringPolicy", WhoringType.Silver, true);
|
|
||||||
Scribe_Values.Look(ref allowedForWhoringOwner, "allowedForWhoringOwner", true, true);
|
|
||||||
Scribe_Values.Look(ref allowedForWhoringAll, "allowedForWhoringAll", false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsValid { get { return pawn != null; } }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -143,34 +143,26 @@ namespace rjwwhoring
|
||||||
|
|
||||||
if (!(Partner.IsColonist && (pawn.IsPrisonerOfColony || pawn.IsColonist)))
|
if (!(Partner.IsColonist && (pawn.IsPrisonerOfColony || pawn.IsColonist)))
|
||||||
{
|
{
|
||||||
if (pawn.WhoringData().WhoringPolicy == WhoringData.WhoringType.Silver)
|
int netPrice = (int) (basePrice * bedMult);
|
||||||
|
if (netPrice == 0)
|
||||||
|
netPrice += 1;
|
||||||
|
|
||||||
|
int bedTip = netPrice - basePrice;
|
||||||
|
int defect = WhoringHelper.PayPriceToWhore(Partner, netPrice, pawn);
|
||||||
|
|
||||||
|
if (WhoringBase.DebugWhoring)
|
||||||
{
|
{
|
||||||
int netPrice = (int) (basePrice * bedMult);
|
ModLog.Message($"{GetType()}:afterSex toil - {Partner} tried to pay {basePrice}(whore price) + {bedTip}(room modifier) silver to {pawn}");
|
||||||
if (netPrice == 0)
|
|
||||||
netPrice += 1;
|
|
||||||
|
|
||||||
int bedTip = netPrice - basePrice;
|
if (defect <= 0)
|
||||||
int defect = WhoringHelper.PayPriceToWhore(Partner, netPrice, pawn);
|
ModLog.Message(" Paid full price");
|
||||||
|
else if (defect <= bedTip)
|
||||||
if (WhoringBase.DebugWhoring)
|
ModLog.Message(" Could not pay full tip");
|
||||||
{
|
else
|
||||||
ModLog.Message($"{GetType()}:afterSex toil - {Partner} tried to pay {basePrice}(whore price) + {bedTip}(room modifier) silver to {pawn}");
|
ModLog.Message(" Failed to pay base price");
|
||||||
|
|
||||||
if (defect <= 0)
|
|
||||||
ModLog.Message(" Paid full price");
|
|
||||||
else if (defect <= bedTip)
|
|
||||||
ModLog.Message(" Could not pay full tip");
|
|
||||||
else
|
|
||||||
ModLog.Message(" Failed to pay base price");
|
|
||||||
}
|
|
||||||
WhoringHelper.UpdateRecords(pawn, netPrice - defect);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int bedTip = 1;
|
|
||||||
ModLog.Message($"{GetType()}:afterSex toil - {Partner} tried to pay {bedTip} goodwill to {pawn}");
|
|
||||||
WhoringHelper.PayRespectToWhore(Partner, bedTip, pawn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WhoringHelper.UpdateRecords(pawn, netPrice - defect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SexUtility.ConsiderCleaning(pawn))
|
if (SexUtility.ConsiderCleaning(pawn))
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using HugsLib.Utils;
|
|
||||||
using RimWorld;
|
using RimWorld;
|
||||||
using rjw;
|
using rjw;
|
||||||
using Verse;
|
using Verse;
|
||||||
|
@ -19,23 +18,6 @@ namespace rjwwhoring
|
||||||
return val == null ? false : true;
|
return val == null ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Thought_Memory GetMemory(Pawn pawn, Pawn target, ThoughtDef thought)
|
|
||||||
{
|
|
||||||
Thought_Memory val = pawn.needs.mood.thoughts.memories.Memories.Find(
|
|
||||||
(Thought_Memory x) =>
|
|
||||||
{
|
|
||||||
if (x.def != thought)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (x.otherPawn == null || x.otherPawn != target)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
//[SyncMethod]
|
//[SyncMethod]
|
||||||
private static bool Roll_to_skip(Pawn client, Pawn whore)
|
private static bool Roll_to_skip(Pawn client, Pawn whore)
|
||||||
{
|
{
|
||||||
|
@ -150,7 +132,6 @@ namespace rjwwhoring
|
||||||
&& !x.IsPrisoner
|
&& !x.IsPrisoner
|
||||||
&& !xxx.is_slave(x)
|
&& !xxx.is_slave(x)
|
||||||
&& !x.IsColonist
|
&& !x.IsColonist
|
||||||
//&& (!x.IsColonist || x.guest?.GuestStatus == GuestStatus.Guest)
|
|
||||||
&& x.Position.DistanceTo(pos) < 100
|
&& x.Position.DistanceTo(pos) < 100
|
||||||
&& xxx.is_healthy_enough(x));
|
&& xxx.is_healthy_enough(x));
|
||||||
|
|
||||||
|
@ -165,7 +146,6 @@ namespace rjwwhoring
|
||||||
if (!potentialClients.Any()) return null;
|
if (!potentialClients.Any()) return null;
|
||||||
|
|
||||||
if (WhoringBase.DebugWhoring) ModLog.Message($" FindAttractivePawn number of all potential clients {potentialClients.Count()}");
|
if (WhoringBase.DebugWhoring) ModLog.Message($" FindAttractivePawn number of all potential clients {potentialClients.Count()}");
|
||||||
//if (WhoringBase.DebugWhoring) ModLog.Message($" FindAttractivePawn number of all potential clients {potentialClients.ListElements()}");
|
|
||||||
|
|
||||||
List<Pawn> valid_targets = new List<Pawn>();
|
List<Pawn> valid_targets = new List<Pawn>();
|
||||||
|
|
||||||
|
@ -185,7 +165,6 @@ namespace rjwwhoring
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WhoringBase.DebugWhoring) ModLog.Message($" number of reachable clients {valid_targets.Count()}");
|
if (WhoringBase.DebugWhoring) ModLog.Message($" number of reachable clients {valid_targets.Count()}");
|
||||||
//if (WhoringBase.DebugWhoring) ModLog.Message($" number of reachable clients {valid_targets.ListElements()}");
|
|
||||||
|
|
||||||
|
|
||||||
//IEnumerable<Pawn> guestsSpawned = valid_targets.Where(x => x.Faction != whore.Faction
|
//IEnumerable<Pawn> guestsSpawned = valid_targets.Where(x => x.Faction != whore.Faction
|
||||||
|
@ -202,29 +181,10 @@ namespace rjwwhoring
|
||||||
|
|
||||||
//if (RJWSettings.DebugWhoring) ModLog.Message($" number of clients can memory OK {guestsSpawned.Count()}");
|
//if (RJWSettings.DebugWhoring) ModLog.Message($" number of clients can memory OK {guestsSpawned.Count()}");
|
||||||
|
|
||||||
List<Pawn> guestsSpawned = new List<Pawn>();
|
IEnumerable<Pawn> guestsSpawned = valid_targets.Where(x => x.Faction != whore.Faction
|
||||||
|
&& !MemoryChecker(x, ThoughtDef.Named("RJWFailedSolicitation"))
|
||||||
foreach(Pawn x in valid_targets)
|
&& WhoringHelper.CanAfford(x, whore, priceOfWhore)
|
||||||
{
|
&& x != LovePartnerRelationUtility.ExistingLovePartner(whore));
|
||||||
bool canAfford = WhoringHelper.CanAfford(x, whore, priceOfWhore);
|
|
||||||
Thought_Memory refusedMmeory = GetMemory(x, whore, ThoughtDef.Named("RJWFailedSolicitation"));
|
|
||||||
bool refused = refusedMmeory != null;
|
|
||||||
DirectPawnRelation relationship = LovePartnerRelationUtility.ExistingLoveRealtionshipBetween(whore, x);
|
|
||||||
bool relation = relationship != null;
|
|
||||||
bool differentFaction = x.Faction != whore.Faction;
|
|
||||||
|
|
||||||
bool finalResult = canAfford && !refused && !relation && differentFaction;
|
|
||||||
|
|
||||||
if (WhoringBase.DebugWhoring)
|
|
||||||
{
|
|
||||||
ModLog.Message($"Pawn {x.Name} is an {(finalResult ? "acceptable" : "unacceptable")} client for {whore.Name}. Explanation: canAfford {canAfford.ToString()} refused: {refused.ToString()} relation: {relation.ToString()} differentFaction: {differentFaction.ToString()}");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canAfford && !refused && !relation && differentFaction)
|
|
||||||
guestsSpawned.Add(x);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (guestsSpawned.Any())
|
if (guestsSpawned.Any())
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,7 +78,6 @@
|
||||||
<Compile Include="Data\BedData.cs" />
|
<Compile Include="Data\BedData.cs" />
|
||||||
<Compile Include="Data\DataStore.cs" />
|
<Compile Include="Data\DataStore.cs" />
|
||||||
<Compile Include="Data\StringListDef.cs" />
|
<Compile Include="Data\StringListDef.cs" />
|
||||||
<Compile Include="Data\WhoringData.cs" />
|
|
||||||
<Compile Include="DefOf\RecordDefDefOf.cs" />
|
<Compile Include="DefOf\RecordDefDefOf.cs" />
|
||||||
<Compile Include="harmony_Building_BedPatches.cs" />
|
<Compile Include="harmony_Building_BedPatches.cs" />
|
||||||
<Compile Include="harmony_AftersexPatch.cs" />
|
<Compile Include="harmony_AftersexPatch.cs" />
|
||||||
|
@ -87,8 +86,6 @@
|
||||||
<Compile Include="JobDrivers\JobDriver_WhoreIsServingVisitors.cs" />
|
<Compile Include="JobDrivers\JobDriver_WhoreIsServingVisitors.cs" />
|
||||||
<Compile Include="JobGivers\JobGiver_WhoreInvitingVisitors.cs" />
|
<Compile Include="JobGivers\JobGiver_WhoreInvitingVisitors.cs" />
|
||||||
<Compile Include="Location\Brothel_Room.cs" />
|
<Compile Include="Location\Brothel_Room.cs" />
|
||||||
<Compile Include="Data\PawnExtensions.cs" />
|
|
||||||
<Compile Include="WhoringTab\WhoringPolicyUIUtility.cs" />
|
|
||||||
<Compile Include="WhoringTab\PawnColumnCheckbox_Whore.cs" />
|
<Compile Include="WhoringTab\PawnColumnCheckbox_Whore.cs" />
|
||||||
<Compile Include="WhoringTab\PawnColumnWorker_AverageMoneyByWhore.cs" />
|
<Compile Include="WhoringTab\PawnColumnWorker_AverageMoneyByWhore.cs" />
|
||||||
<Compile Include="WhoringTab\PawnColumnWorker_CountOfWhore.cs" />
|
<Compile Include="WhoringTab\PawnColumnWorker_CountOfWhore.cs" />
|
||||||
|
@ -98,7 +95,6 @@
|
||||||
<Compile Include="WhoringTab\PawnColumnWorker_PriceRangeOfWhore.cs" />
|
<Compile Include="WhoringTab\PawnColumnWorker_PriceRangeOfWhore.cs" />
|
||||||
<Compile Include="WhoringTab\PawnColumnWorker_TextCenter.cs" />
|
<Compile Include="WhoringTab\PawnColumnWorker_TextCenter.cs" />
|
||||||
<Compile Include="WhoringTab\PawnColumnWorker_WhoreExperience.cs" />
|
<Compile Include="WhoringTab\PawnColumnWorker_WhoreExperience.cs" />
|
||||||
<Compile Include="WhoringTab\PawnColumnWorker_WhoringPolicy.cs" />
|
|
||||||
<Compile Include="WhoringTab\PawnTable_Whores.cs" />
|
<Compile Include="WhoringTab\PawnTable_Whores.cs" />
|
||||||
<Compile Include="WhoringTab\WhoreCheckbox.cs" />
|
<Compile Include="WhoringTab\WhoreCheckbox.cs" />
|
||||||
<Compile Include="ThinkTreeNodes\ThinkNode_ChancePerHour_Whore.cs" />
|
<Compile Include="ThinkTreeNodes\ThinkNode_ChancePerHour_Whore.cs" />
|
||||||
|
|
|
@ -16,16 +16,8 @@ namespace rjwwhoring.MainTab
|
||||||
|
|
||||||
protected override string GetTextFor(Pawn pawn)
|
protected override string GetTextFor(Pawn pawn)
|
||||||
{
|
{
|
||||||
if (pawn.WhoringData().WhoringPolicy == WhoringData.WhoringType.Silver)
|
min = WhoringHelper.WhoreMinPrice(pawn);
|
||||||
{
|
max = WhoringHelper.WhoreMaxPrice(pawn);
|
||||||
min = WhoringHelper.WhoreMinPrice(pawn);
|
|
||||||
max = WhoringHelper.WhoreMaxPrice(pawn);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
min = 1;
|
|
||||||
max = 1;
|
|
||||||
}
|
|
||||||
return string.Format("{0} - {1}", min, max);
|
return string.Format("{0} - {1}", min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,30 +28,23 @@ namespace rjwwhoring.MainTab
|
||||||
|
|
||||||
protected override string GetTip(Pawn pawn)
|
protected override string GetTip(Pawn pawn)
|
||||||
{
|
{
|
||||||
if (pawn.WhoringData().WhoringPolicy == WhoringData.WhoringType.Silver)
|
string minPriceTip = string.Format(
|
||||||
{
|
" Base: {0}\n Traits: {1}",
|
||||||
string minPriceTip = string.Format(
|
WhoringHelper.baseMinPrice,
|
||||||
" Base: {0}\n Traits: {1}",
|
(WhoringHelper.WhoreTraitAdjustmentMin(pawn) -1f).ToStringPercent()
|
||||||
WhoringHelper.baseMinPrice,
|
);
|
||||||
(WhoringHelper.WhoreTraitAdjustmentMin(pawn) - 1f).ToStringPercent()
|
string maxPriceTip = string.Format(
|
||||||
);
|
" Base: {0}\n Traits: {1}",
|
||||||
string maxPriceTip = string.Format(
|
WhoringHelper.baseMaxPrice,
|
||||||
" Base: {0}\n Traits: {1}",
|
(WhoringHelper.WhoreTraitAdjustmentMax(pawn) -1f).ToStringPercent()
|
||||||
WhoringHelper.baseMaxPrice,
|
);
|
||||||
(WhoringHelper.WhoreTraitAdjustmentMax(pawn) - 1f).ToStringPercent()
|
string bothTip = string.Format(
|
||||||
);
|
" Gender: {0}\n Age: {1}\n Injuries: {2}",
|
||||||
string bothTip = string.Format(
|
(WhoringHelper.WhoreGenderAdjustment(pawn) - 1f).ToStringPercent(),
|
||||||
" Gender: {0}\n Age: {1}\n Injuries: {2}",
|
(WhoringHelper.WhoreAgeAdjustment(pawn) - 1f).ToStringPercent(),
|
||||||
(WhoringHelper.WhoreGenderAdjustment(pawn) - 1f).ToStringPercent(),
|
(WhoringHelper.WhoreInjuryAdjustment(pawn) - 1f).ToStringPercent()
|
||||||
(WhoringHelper.WhoreAgeAdjustment(pawn) - 1f).ToStringPercent(),
|
);
|
||||||
(WhoringHelper.WhoreInjuryAdjustment(pawn) - 1f).ToStringPercent()
|
return string.Format("Min:\n{0}\nMax:\n{1}\nBoth:\n{2}", minPriceTip, maxPriceTip, bothTip);
|
||||||
);
|
|
||||||
return string.Format("Min:\n{0}\nMax:\n{1}\nBoth:\n{2}", minPriceTip, maxPriceTip, bothTip);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return string.Format("Raise Goodwill by 1");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetValueToCompare(Pawn pawn)
|
private int GetValueToCompare(Pawn pawn)
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using RimWorld;
|
|
||||||
using RimWorld.Planet;
|
|
||||||
using UnityEngine;
|
|
||||||
using Verse;
|
|
||||||
using Verse.Sound;
|
|
||||||
|
|
||||||
namespace rjwwhoring.MainTab
|
|
||||||
{
|
|
||||||
[StaticConstructorOnStartup]
|
|
||||||
public class PawnColumnWorker_WhoringPolicy : PawnColumnWorker
|
|
||||||
{
|
|
||||||
public override void DoCell(Rect rect, Pawn pawn, PawnTable table)
|
|
||||||
{
|
|
||||||
if (pawn.drugs != null)
|
|
||||||
{
|
|
||||||
WhoringPolicyUIUtility.DoAssignWhoringPolicyButtons(rect, pawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
using RimWorld;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
using Verse;
|
|
||||||
|
|
||||||
namespace rjwwhoring
|
|
||||||
{
|
|
||||||
public static class WhoringPolicyUIUtility
|
|
||||||
{
|
|
||||||
//public const string AssigningDrugsTutorHighlightTag = "ButtonAssignDrugs";
|
|
||||||
|
|
||||||
public static void DoAssignWhoringPolicyButtons(Rect rect, Pawn pawn)
|
|
||||||
{
|
|
||||||
int num = Mathf.FloorToInt(rect.width);
|
|
||||||
float x = rect.x;
|
|
||||||
Rect rect2 = new Rect(x, rect.y + 2f, num, rect.height - 4f);
|
|
||||||
string text = pawn.WhoringData().WhoringPolicy.ToStringSafe();
|
|
||||||
|
|
||||||
Widgets.Dropdown(rect2, pawn, (Pawn p) => p.WhoringData().WhoringPolicy, Button_GenerateMenu, text.Truncate(rect2.width), paintable: true);
|
|
||||||
//Widgets.Dropdown(rect2, pawn, (Pawn p) => p.drugs.CurrentPolicy, Button_GenerateMenu, text.Truncate(((Rect)(ref rect2)).get_width()), null, pawn.drugs.CurrentPolicy.label, null, delegate
|
|
||||||
//{
|
|
||||||
// PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.DrugPolicies, KnowledgeAmount.Total);
|
|
||||||
//}, paintable: true);
|
|
||||||
x += num;
|
|
||||||
x += 4f;
|
|
||||||
//UIHighlighter.HighlightOpportunity(rect2, "ButtonAssignDrugs");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static IEnumerable<Widgets.DropdownMenuElement<Enum>> Button_GenerateMenu(Pawn pawn)
|
|
||||||
{
|
|
||||||
foreach (WhoringData.WhoringType option in Enum.GetValues(typeof(WhoringData.WhoringType)))
|
|
||||||
{
|
|
||||||
yield return new Widgets.DropdownMenuElement<Enum>
|
|
||||||
{
|
|
||||||
option = new FloatMenuOption(option.ToString(), delegate
|
|
||||||
{
|
|
||||||
pawn.WhoringData().WhoringPolicy = option;
|
|
||||||
}),
|
|
||||||
payload = option
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -188,8 +188,6 @@ namespace rjwwhoring
|
||||||
public static bool CanAfford(Pawn targetPawn, Pawn whore, int priceOfWhore = -1)
|
public static bool CanAfford(Pawn targetPawn, Pawn whore, int priceOfWhore = -1)
|
||||||
{
|
{
|
||||||
//if (targetPawn.Faction == whore.Faction) return true;
|
//if (targetPawn.Faction == whore.Faction) return true;
|
||||||
if (whore.WhoringData().WhoringPolicy == WhoringData.WhoringType.Goodwill) return true;
|
|
||||||
|
|
||||||
if (WhoringBase.MoneyPrinting) return true;
|
if (WhoringBase.MoneyPrinting) return true;
|
||||||
|
|
||||||
//if (RJWSettings.DebugWhoring) ModLog.Message($"CanAfford for client {xxx.get_pawnname(targetPawn)}");
|
//if (RJWSettings.DebugWhoring) ModLog.Message($"CanAfford for client {xxx.get_pawnname(targetPawn)}");
|
||||||
|
@ -312,19 +310,6 @@ namespace rjwwhoring
|
||||||
return AmountLeft;
|
return AmountLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int PayRespectToWhore(Pawn targetPawn, int priceOfWhore, Pawn whore)
|
|
||||||
{
|
|
||||||
if ((targetPawn.Faction != whore.Faction && targetPawn.GuestStatus != GuestStatus.Guest))
|
|
||||||
{
|
|
||||||
if (WhoringBase.DebugWhoring) ModLog.Message($" No need to pay respect");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
targetPawn.Faction.TryAffectGoodwillWith(Faction.OfPlayer, priceOfWhore);
|
|
||||||
if (WhoringBase.DebugWhoring) ModLog.Message($" price: {priceOfWhore}, paid: {priceOfWhore}");
|
|
||||||
|
|
||||||
return priceOfWhore;
|
|
||||||
}
|
|
||||||
|
|
||||||
//[SyncMethod]
|
//[SyncMethod]
|
||||||
public static bool IsHookupAppealing(Pawn target, Pawn whore)
|
public static bool IsHookupAppealing(Pawn target, Pawn whore)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,7 +10,7 @@ using rjw;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// patches Building_Bed to add stuff for WhoreBeds
|
/// patches Building_Bed to add stuff for WhoreBeds
|
||||||
///
|
///
|
||||||
/// Also contains smaller patches for RoomRoleWorker_Barracks (don't count whore beds) (disabled), Toils_LayDown.ApplyBedThoughts (slept in brothel thought) and RestUtility (don't automatically claim brothel beds)
|
/// Also contains smaller patches for RoomRoleWorker_Barracks (don't count whore beds) (disabled) and Toils_LayDown.ApplyBedThoughts (slept in brothel thought)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
namespace rjwwhoring
|
namespace rjwwhoring
|
||||||
|
@ -288,29 +288,5 @@ namespace rjwwhoring
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/// <summary>
|
|
||||||
///Prevents automatic claiming of brothel beds (beds that allow anyone to use for whoring)
|
|
||||||
///Note, that intent is not verified here, and this works because bed usage for actual whoring does not rely on IsValidBedFor call.
|
|
||||||
///Should above change in future, this patch needs to be removed or adjusted
|
|
||||||
///If the bed is already claimed (for example - assigned manually to pawn), it will still be used.
|
|
||||||
///<returns>Modifies __result to false, if bed is set to allow anyone for whroing AND is not already claimed.</returns>
|
|
||||||
/// </summary>
|
|
||||||
[HarmonyPatch(typeof(RestUtility), nameof(RestUtility.IsValidBedFor))]
|
|
||||||
public class RestUtility_IsValidBedFor_Patch
|
|
||||||
{
|
|
||||||
[HarmonyPostfix]
|
|
||||||
public static void Postfix(Pawn sleeper, Thing bedThing, ref bool __result)
|
|
||||||
{
|
|
||||||
if (!__result) return;
|
|
||||||
Building_Bed building_Bed = bedThing as Building_Bed;
|
|
||||||
bool isOwner = sleeper.ownership != null && sleeper.ownership.OwnedBed == bedThing;
|
|
||||||
if (building_Bed.IsAllowedForWhoringAll() && !isOwner ) __result = false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Manifest>
|
<Manifest>
|
||||||
<identifier>RimJobWorld Whoring</identifier>
|
<identifier>RimJobWorld Whoring</identifier>
|
||||||
<version>1.0.6</version>
|
<version>1.0.2</version>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<li>RimJobWorld</li>
|
<li>RimJobWorld</li>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue