This commit is contained in:
moreoreganostodump 2021-10-03 16:56:57 +09:00
parent 3f94c3b94d
commit 72dfde81d9
11 changed files with 184 additions and 21 deletions

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Manifest>
<identifier>RJW Sexperience</identifier>
<version>1.0.2.1</version>
<version>1.0.2.2</version>
<dependencies>
</dependencies>
<incompatibleWith />

Binary file not shown.

View File

@ -55,6 +55,9 @@
<RS_CumAddictiveness>Cum addictiveness</RS_CumAddictiveness>
<RS_CumAddictiveness_Tooltip>More likely to get addicted to cum.</RS_CumAddictiveness_Tooltip>
<RS_NumofTimes>times</RS_NumofTimes>
<RS_Ago>ago</RS_Ago>
<RS_LastSex>last sex</RS_LastSex>
<RS_HadBestSexDaysAgo>Had best sex {0}.</RS_HadBestSexDaysAgo>
<RSOption_1_Label>Enable record randomizer</RSOption_1_Label>
<RSOption_1_Desc>Randomize pawn's sex records.</RSOption_1_Desc>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<Sex.description>상대를 보내버리는 기술</Sex.description>
<Sex.skillLabel>섹스</Sex.skillLabel>
<Sex.label>섹스</Sex.label>
</LanguageData>

View File

@ -83,7 +83,15 @@
<Virgin_Shameful_Taken.stages.2.description>드디어!</Virgin_Shameful_Taken.stages.2.description>
<Virgin_OnlyForSpouse_Know_Taken.stages.0.description>걸레</Virgin_OnlyForSpouse_Know_Taken.stages.0.description>
<CumWithdrawal.stages.1.label>정액 금단증상</CumWithdrawal.stages.1.label>
<CumWithdrawal.stages.1.description>정액이 필요해.</CumWithdrawal.stages.1.description>
<AteCum.stages.0.label>정액을 먹음</AteCum.stages.0.label>
<AteCum.stages.0.description>역겨워.</AteCum.stages.0.description>
<AteCum.stages.1.label>정액을 먹음</AteCum.stages.1.label>
<AteCum.stages.1.descrption>냄새나고 맛없어.</AteCum.stages.1.descrption>
<AteCum.stages.2.label>정액을 먹음</AteCum.stages.2.label>
<AteCum.stages.2.description>맛없지만 좋아.</AteCum.stages.2.description>
<AteCum.stages.3.label>정액을 먹음</AteCum.stages.3.label>
<AteCum.stages.3.description>맛있어.</AteCum.stages.3.description>
</LanguageData>

View File

@ -18,6 +18,7 @@ namespace RJWSexperience
public static string RS_LostVirgin(string pawn, string partner) => "RS_LostVirgin".Translate(pawn.Colorize(Color.yellow),partner.Colorize(Color.yellow));
public static string RS_Sex_Info(string sextype, string sexcount) => "RS_Sex_Info".Translate(sextype, sexcount);
public static string RS_SAT_AVG(string avgsat) => "RS_SAT_AVG".Translate(avgsat);
public static string RS_HadBestSexDaysAgo(string days) => "RS_HadBestSexDaysAgo".Translate(days);
public static readonly string Mod_Title = "RS_Mod_Title".Translate();
public static readonly string SlaveStatFactorDefault = "SlaveStatFactorDefault".Translate();
@ -72,6 +73,8 @@ namespace RJWSexperience
public static readonly string RS_CumAddictiveness = "RS_CumAddictiveness".Translate();
public static readonly string RS_CumAddictiveness_Tooltip = "RS_CumAddictiveness_Tooltip".Translate();
public static readonly string RS_NumofTimes = "RS_NumofTimes".Translate();
public static readonly string RS_Ago = "RS_Ago".Translate();
public static readonly string RS_LastSex = "RS_LastSex".Translate();
public static readonly string Option_1_Label = "RSOption_1_Label".Translate();

View File

@ -191,7 +191,7 @@ namespace RJWSexperience
{
public static void Postfix(Pawn pawn, ref Job __result)
{
if (RJWPreferenceSettings.FapEverywhere && __result != null)
if (RJWPreferenceSettings.FapEverywhere && (pawn.Faction?.IsPlayer ?? false) && __result != null)
{
Building_CumBucket bucket = pawn.FindClosestBucket();
if (bucket != null)

View File

@ -24,11 +24,13 @@ namespace RJWSexperience
protected string recentpartner = "";
protected int[] sextypecount = new int[ARRLEN];
protected float[] sextypesat = new float[ARRLEN];
protected int[] sextyperecenttickabs = new int[ARRLEN];
protected int virginstaken = 0;
protected int incestuous = 0;
protected int bestiality = 0;
protected int corpsefuck = 0;
protected int interspecies = 0;
protected int firstsextickabs = 0;
protected string mostpartnercache = "";
protected xxx.rjwSextype mostsextypecache = xxx.rjwSextype.None;
@ -43,11 +45,15 @@ namespace RJWSexperience
protected int preferracesexcountcache = 0;
protected Pawn preferracepawncache = null;
protected float avtsatcache = 0;
protected int recentsextickabscache = 0;
protected int mostsextickabscache = 0;
protected int bestsextickabscache = 0;
private List<SexHistory> partnerlistcache;
private List<int> sextypecountsave;
private List<float> sextypesatsave;
private List<int> sextyperecenttickabssave;
public SexHistory GetFirstPartnerHistory
@ -198,6 +204,68 @@ namespace RJWSexperience
return sextypesat.Sum() / totalsexcache;
}
}
public int RecentSexElapsedTicks
{
get
{
return GenTicks.TicksAbs - recentsextickabscache;
}
}
public string RecentSexDays
{
get
{
if (recentsextickabscache != 0) return GenDate.ToStringTicksToDays(RecentSexElapsedTicks) + " " + Keyed.RS_Ago;
return "";
}
}
public int FirstSexElapsedTicks
{
get
{
return GenTicks.TicksAbs - firstsextickabs;
}
}
public string FirstSexDays
{
get
{
if (firstsextickabs != 0) return GenDate.ToStringTicksToDays(FirstSexElapsedTicks) + " " + Keyed.RS_Ago;
return "";
}
}
public int MostSexElapsedTicks
{
get
{
return GenTicks.TicksAbs - mostsextickabscache;
}
}
public string MostSexDays
{
get
{
if (mostsextickabscache != 0) return GenDate.ToStringTicksToDays(MostSexElapsedTicks) + " " + Keyed.RS_Ago;
return "";
}
}
public int BestSexElapsedTicks
{
get
{
return GenTicks.TicksAbs - bestsextickabscache;
}
}
public string BestSexDays
{
get
{
if (bestsextickabscache != 0) return GenDate.ToStringTicksToDays(BestSexElapsedTicks) + " " + Keyed.RS_Ago;
return "";
}
}
public Texture GetPreferRaceIcon(Vector2 size)
{
Update();
@ -220,6 +288,13 @@ namespace RJWSexperience
return recentsat;
}
public string SextypeRecentDays(int sextype)
{
int index = (int)sextype;
if (sextyperecenttickabs[index] != 0) return GenDate.ToStringTicksToDays(GenTicks.TicksAbs - sextyperecenttickabs[index]) + " " + Keyed.RS_Ago;
return Keyed.Unknown;
}
public SexHistory this[Pawn pawn]
{
get
@ -253,6 +328,7 @@ namespace RJWSexperience
{
sextypecountsave = sextypecount.ToList();
sextypesatsave = sextypesat.ToList();
sextyperecenttickabssave = sextyperecenttickabs.ToList();
}
Scribe_Collections.Look(ref histories, "histories", LookMode.Value, LookMode.Deep);
@ -265,14 +341,17 @@ namespace RJWSexperience
Scribe_Values.Look(ref bestiality, "bestiality", bestiality, true);
Scribe_Values.Look(ref corpsefuck, "corpsefuck", corpsefuck, true);
Scribe_Values.Look(ref interspecies, "interspecies", interspecies, true);
Scribe_Values.Look(ref firstsextickabs, "firstsextickabs", firstsextickabs, true);
Scribe_Collections.Look(ref sextypecountsave, "sextypecountsave", LookMode.Value);
Scribe_Collections.Look(ref sextypesatsave, "sextypesatsave", LookMode.Value);
Scribe_Collections.Look(ref sextyperecenttickabssave, "sextyperecenttickabssave", LookMode.Value);
//Scribe_Values.Look(ref sextypecount, "sextypecount", new int[ARRLEN], true); // not work
//Scribe_Values.Look(ref sextypesat, "sextypesat", new float[ARRLEN], true);
if (Scribe.mode == LoadSaveMode.LoadingVars)
{
sextypecount = sextypecountsave?.ToArray() ?? new int[ARRLEN];
sextypesat = sextypesatsave?.ToArray() ?? new float[ARRLEN];
sextyperecenttickabs = sextyperecenttickabssave?.ToArray() ?? new int[ARRLEN];
}
if (histories == null) histories = new Dictionary<string, SexHistory>();
@ -290,6 +369,7 @@ namespace RJWSexperience
history?.RecordSex(props);
recentsex = props.sexType;
sextypecount[(int)props.sexType]++;
sextyperecenttickabs[(int)props.sexType] = GenTicks.TicksAbs;
if (partner.IsIncest(pawn)) incestuous++;
if (partner.Dead) corpsefuck++;
if (props.IsBestiality()) bestiality++;
@ -331,6 +411,7 @@ namespace RJWSexperience
TryAddHistory(partner);
first = partner.ThingID;
SexPartnerHistory history = partner.GetPartnerHistory();
firstsextickabs = GenTicks.TicksAbs;
if (history != null)
{
history.TakeSomeonesVirgin(parent as Pawn);
@ -366,6 +447,7 @@ namespace RJWSexperience
int maxindex = 0;
string mostID = Keyed.Unknown;
string bestID = Keyed.Unknown;
totalsexcache = 0;
totalrapedcache = 0;
totalbeenrapedcache = 0;
@ -431,6 +513,10 @@ namespace RJWSexperience
mostpartnercache = mostID;
bestpartnercache = bestID;
recentsextickabscache = histories.TryGetValue(recentpartner)?.RecentSexTickAbs ?? 0;
mostsextickabscache = histories.TryGetValue(mostpartnercache)?.RecentSexTickAbs ?? 0;
bestsextickabscache = histories.TryGetValue(bestpartnercache)?.BestSexTickAbs ?? 0;
racetotalsat.Clear();
allpartners.Clear();
}
@ -492,6 +578,8 @@ namespace RJWSexperience
protected float bestsatisfaction = 0;
protected bool itookvirgin = false;
protected bool incest = false;
protected int recentsextickabs = 0;
protected int bestsextickabs = 0;
public string Label
{
@ -578,7 +666,35 @@ namespace RJWSexperience
return rapedme;
}
}
public int RecentSexTickAbs
{
get
{
return recentsextickabs;
}
}
public int BestSexTickAbs
{
get
{
return bestsextickabs;
}
}
public int BestSexElapsedTicks
{
get
{
return GenTicks.TicksAbs - bestsextickabs;
}
}
public string BestSexDays
{
get
{
if (bestsextickabs != 0) return Keyed.RS_HadBestSexDaysAgo(GenDate.ToStringTicksToDays(BestSexElapsedTicks) + " " + Keyed.RS_Ago);
return "";
}
}
public SexHistory() { }
public SexHistory(Pawn pawn, bool incest = false)
@ -601,6 +717,8 @@ namespace RJWSexperience
Scribe_Values.Look(ref bestsatisfaction, "bestsatisfaction", bestsatisfaction, true);
Scribe_Values.Look(ref itookvirgin, "itookvirgin", itookvirgin, true);
Scribe_Values.Look(ref incest, "incest", incest, true);
Scribe_Values.Look(ref recentsextickabs, "recentsextickabs", recentsextickabs, true);
Scribe_Values.Look(ref bestsextickabs, "bestsextickabs", bestsextickabs, true);
}
public void RecordSex(SexProps props)
@ -617,6 +735,8 @@ namespace RJWSexperience
raped++;
}
}
recentsextickabs = GenTicks.TicksAbs;
}
public void RecordSatisfaction(SexProps props, float satisfaction)
@ -626,6 +746,7 @@ namespace RJWSexperience
orgasms++;
bestsextype = props.sexType;
bestsatisfaction = satisfaction;
bestsextickabs = GenTicks.TicksAbs;
}
}

View File

@ -81,9 +81,18 @@ namespace RJWSexperience.UI
public static string GetStatExplanation(Pawn pawn, StatDef stat, float val)
{
if (!pawn.Dead)
return stat.description + "\n" +
stat.Worker.GetExplanationFull(StatRequest.For(pawn), ToStringNumberSense.Undefined, val);
return "Dead".Translate();
}
public static string GetSexDays(int absticks, bool printUnknown = false)
{
if (absticks != 0) return GenDate.ToStringTicksToDays(GenTicks.TicksAbs - absticks) + " " + Keyed.RS_Ago;
else if (printUnknown) return Keyed.Unknown;
else return "";
}
}
}

View File

@ -212,9 +212,10 @@ namespace RJWSexperience.UI
FillableBarLabeled(bestsexRect,String.Format(Keyed.RS_Best_Sextype+": {0}", Keyed.Sextype[(int)history.BestSextype]), p / 2, HistoryUtility.SextypeColor[(int)history.BestSextype], Texture2D.blackTexture, null, String.Format("{0:P2}", p));
if (history.IamFirst) str += "\n" + Keyed.RS_LostVirgin(history.Label, pawn.LabelShort);
str += "\n" + history.BestSexDays;
TooltipHandler.TipRegion(rect, str);
}
else
{
@ -226,11 +227,12 @@ namespace RJWSexperience.UI
}
}
protected void DrawSexInfoCard(Rect rect, SexHistory history, string label, string tooltip)
protected void DrawSexInfoCard(Rect rect, SexHistory history, string label, string tooltip, string rightlabel = "")
{
Rect labelRect = new Rect(rect.x, rect.y, rect.width, FONTHEIGHT);
Rect infoRect = new Rect(rect.x, rect.y + FONTHEIGHT, rect.width, rect.height - FONTHEIGHT);
GUI.Label(labelRect, label, fontstyleleft);
GUI.Label(labelRect, rightlabel, fontstyleright);
DrawInfoWithPortrait(infoRect,history, tooltip);
@ -243,10 +245,10 @@ namespace RJWSexperience.UI
{
Listing_Standard listmain = new Listing_Standard();
listmain.Begin(rect.ContractedBy(4f));
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetRecentPartnersHistory, Keyed.RS_Recent_Sex_Partner, Keyed.RS_Recent_Sex_Partner_ToolTip);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetFirstPartnerHistory, Keyed.RS_First_Sex_Partner, Keyed.RS_First_Sex_Partner_ToolTip);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetMostPartnerHistory, Keyed.RS_Most_Sex_Partner, Keyed.RS_Most_Sex_Partner_ToolTip);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetBestSexPartnerHistory, Keyed.RS_Best_Sex_Partner, Keyed.RS_Best_Sex_Partner_ToolTip);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetRecentPartnersHistory, Keyed.RS_Recent_Sex_Partner, Keyed.RS_Recent_Sex_Partner_ToolTip, history.RecentSexDays);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetFirstPartnerHistory, Keyed.RS_First_Sex_Partner, Keyed.RS_First_Sex_Partner_ToolTip, history.FirstSexDays);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetMostPartnerHistory, Keyed.RS_Most_Sex_Partner, Keyed.RS_Most_Sex_Partner_ToolTip, history.MostSexDays);
DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), history.GetBestSexPartnerHistory, Keyed.RS_Best_Sex_Partner, Keyed.RS_Best_Sex_Partner_ToolTip, history.BestSexDays);
GUI.Label(listmain.GetRect(FONTHEIGHT), Keyed.RS_PreferRace, fontstyleleft);
DrawPreferRace(listmain.GetRect(66f+15f));
listmain.GetRect(15f);
@ -354,11 +356,11 @@ namespace RJWSexperience.UI
tmp = listmain.GetRect(FONTHEIGHT);
p = pawn.records.GetValue(VariousDefOf.Lust);
FillableBarLabeled(tmp, String.Format(Keyed.Lust +": {0:0.00}", p), Mathf.Clamp01(p.Normalization(-Configurations.LustLimit*3, Configurations.LustLimit*3)), HistoryUtility.Slaanesh, Texture2D.blackTexture, null, String.Format(xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.sex_drive_stat)));
FillableBarLabeled(tmp, String.Format(Keyed.Lust +": {0:0.00}", p), Mathf.Clamp01(p.Normalization(-Configurations.LustLimit*3, Configurations.LustLimit*3)), HistoryUtility.Slaanesh, Texture2D.blackTexture, null, String.Format(xxx.sex_drive_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.Dead ? 0 : pawn.GetStatValue(xxx.sex_drive_stat)));
listmain.Gap(1f);
if (Mouse.IsOver(tmp))
{
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_drive_stat, pawn.GetStatValue(xxx.sex_drive_stat)));
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_drive_stat, pawn.Dead ? 0 : pawn.GetStatValue(xxx.sex_drive_stat)));
}
p = history.GetBestSextype(out xxx.rjwSextype sextype) / BASESAT;
@ -414,27 +416,27 @@ namespace RJWSexperience.UI
if (p < history.BeenRapedCount)
{
p = history.BeenRapedCount;
FillableBarLabeled(tmp, String.Format(Keyed.RS_BeenRaped + ": {0}", p), p / 50, Texture2D.grayTexture, Texture2D.blackTexture, null, String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.vulnerability_stat)));
FillableBarLabeled(tmp, String.Format(Keyed.RS_BeenRaped + ": {0}", p), p / 50, Texture2D.grayTexture, Texture2D.blackTexture, null, String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.Dead ? 0 : pawn.GetStatValue(xxx.vulnerability_stat)));
listmain.Gap(1f);
}
else
{
FillableBarLabeled(tmp, String.Format(Keyed.RS_RapedSomeone + ": {0}", p), p / 50, HistoryUtility.Khorne, Texture2D.blackTexture, null, String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.vulnerability_stat)));
FillableBarLabeled(tmp, String.Format(Keyed.RS_RapedSomeone + ": {0}", p), p / 50, HistoryUtility.Khorne, Texture2D.blackTexture, null, String.Format(xxx.vulnerability_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.Dead ? 0 : pawn.GetStatValue(xxx.vulnerability_stat)));
listmain.Gap(1f);
}
if (Mouse.IsOver(tmp))
{
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.vulnerability_stat, pawn.GetStatValue(xxx.vulnerability_stat)));
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.vulnerability_stat, pawn.Dead ? 0 : pawn.GetStatValue(xxx.vulnerability_stat)));
}
p = pawn.GetStatValue(xxx.sex_satisfaction);
p = pawn.Dead ? 0 : pawn.GetStatValue(xxx.sex_satisfaction);
tmp = listmain.GetRect(FONTHEIGHT);
FillableBarLabeled(tmp, String.Format(xxx.sex_satisfaction.LabelCap.CapitalizeFirst() + ": {0:P2}", p), p/2, HistoryUtility.Satisfaction, Texture2D.blackTexture);
listmain.Gap(1f);
if (Mouse.IsOver(tmp))
{
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_satisfaction, pawn.GetStatValue(xxx.sex_satisfaction)));
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_satisfaction, pawn.Dead ? 0 : pawn.GetStatValue(xxx.sex_satisfaction)));
}
//p = pawn.GetStatValue(xxx.vulnerability_stat);
@ -444,16 +446,16 @@ namespace RJWSexperience.UI
SkillRecord skill = pawn.skills?.GetSkill(VariousDefOf.SexSkill);
p = skill?.Level ?? 0;
tmp = listmain.GetRect(FONTHEIGHT);
FillableBarLabeled(tmp, String.Format(Keyed.RS_SexSkill + ": {0}, {1:P2}", p, skill?.xpSinceLastLevel/ skill?.XpRequiredForLevelUp), p / 20, HistoryUtility.Tzeentch, Texture2D.blackTexture, null, String.Format(xxx.sex_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.GetStatValue(xxx.sex_stat)), HistoryUtility.PassionBG[(int)(skill?.passion ?? 0)]);
FillableBarLabeled(tmp, String.Format(Keyed.RS_SexSkill + ": {0}, {1:P2}", p, skill?.xpSinceLastLevel/ skill?.XpRequiredForLevelUp), p / 20, HistoryUtility.Tzeentch, Texture2D.blackTexture, null, String.Format(xxx.sex_stat.LabelCap.CapitalizeFirst() + ": {0:P2}", pawn.Dead ? 0 : pawn.GetStatValue(xxx.sex_stat)), HistoryUtility.PassionBG[(int)(skill?.passion ?? 0)]);
if (Mouse.IsOver(tmp))
{
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_stat, pawn.GetStatValue(xxx.sex_stat)));
TooltipHandler.TipRegion(tmp, RJWUIUtility.GetStatExplanation(pawn, xxx.sex_stat, pawn.Dead ? 0 : pawn.GetStatValue(xxx.sex_stat)));
}
listmain.Gap(1f);
if (selectedPawn != null) DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), selectedPawn, Keyed.RS_Selected_Partner, Keyed.RS_Selected_Partner);
if (selectedPawn != null) DrawSexInfoCard(listmain.GetRect(CARDHEIGHT), selectedPawn, Keyed.RS_Selected_Partner, Keyed.RS_Selected_Partner, RJWUIUtility.GetSexDays(selectedPawn.RecentSexTickAbs));
else DrawExtraInfo(listmain.GetRect(CARDHEIGHT));
listmain.End();
@ -498,7 +500,13 @@ namespace RJWSexperience.UI
int sexindex = Sextype[i];
p = history.GetAVGSat(sexindex) / BASESAT;
string label = Keyed.RS_Sex_Info(Keyed.Sextype[sexindex], history.GetSexCount(sexindex).ToString());
FillableBarLabeled(listmain.GetRect(FONTHEIGHT),label, p / 2, HistoryUtility.SextypeColor[sexindex], Texture2D.blackTexture, null, Keyed.RS_SAT_AVG(String.Format("{0:P2}", p)));
Rect tmpRect = listmain.GetRect(FONTHEIGHT);
FillableBarLabeled(tmpRect,label, p / 2, HistoryUtility.SextypeColor[sexindex], Texture2D.blackTexture, null, Keyed.RS_SAT_AVG(String.Format("{0:P2}", p)));
if (Mouse.IsOver(tmpRect))
{
TooltipHandler.TipRegion(tmpRect, Keyed.RS_LastSex.CapitalizeFirst() + ": " + history.SextypeRecentDays(Sextype[i]));
}
listmain.Gap(1f);
}

View File

@ -1,3 +1,8 @@
Version Beta 1.0.2.2
- non-player faction pawns no longer use cum buckets
- fixed sex history error with dead pawns
- added recent sex time
Version Beta 1.0.2.1
- messages about virginity loss will not be shown if the record randomizer is off
- fixed rituals not worked properly