diff --git a/About/Manifest.xml b/About/Manifest.xml index 86d961c..37a44a1 100644 --- a/About/Manifest.xml +++ b/About/Manifest.xml @@ -1,7 +1,7 @@ RJW Sexperience - 1.0.2.1 + 1.0.2.2 diff --git a/Assemblies/RJWSexperience.dll b/Assemblies/RJWSexperience.dll index 0476669..6d10eed 100644 Binary files a/Assemblies/RJWSexperience.dll and b/Assemblies/RJWSexperience.dll differ diff --git a/Languages/English/Keyed/RJW_Sexperience.xml b/Languages/English/Keyed/RJW_Sexperience.xml index b7561f6..5cea6fd 100644 --- a/Languages/English/Keyed/RJW_Sexperience.xml +++ b/Languages/English/Keyed/RJW_Sexperience.xml @@ -55,6 +55,9 @@ Cum addictiveness More likely to get addicted to cum. times + ago + last sex + Had best sex {0}. Enable record randomizer Randomize pawn's sex records. diff --git a/Languages/Korean/DefInjected/SkillDefs/Translations_SkillDef.xml b/Languages/Korean/DefInjected/SkillDefs/Translations_SkillDef.xml new file mode 100644 index 0000000..028c014 --- /dev/null +++ b/Languages/Korean/DefInjected/SkillDefs/Translations_SkillDef.xml @@ -0,0 +1,6 @@ + + + 상대를 보내버리는 기술 + 섹스 + 섹스 + \ No newline at end of file diff --git a/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml b/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml index d5b79d0..b059fa1 100644 --- a/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml +++ b/Languages/Korean/DefInjected/ThoughtDefs/Translations_ThoughtDef.xml @@ -83,7 +83,15 @@ 드디어! 걸레 + 정액 금단증상 정액이 필요해. - + 정액을 먹음 + 역겨워. + 정액을 먹음 + 냄새나고 맛없어. + 정액을 먹음 + 맛없지만 좋아. + 정액을 먹음 + 맛있어. \ No newline at end of file diff --git a/RJWSexperience/RJWSexperience/Keyed.cs b/RJWSexperience/RJWSexperience/Keyed.cs index 5b5757e..f335c03 100644 --- a/RJWSexperience/RJWSexperience/Keyed.cs +++ b/RJWSexperience/RJWSexperience/Keyed.cs @@ -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(); diff --git a/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs b/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs index f58973c..745b5b8 100644 --- a/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs +++ b/RJWSexperience/RJWSexperience/Patches/RJW_Patch.cs @@ -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) diff --git a/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs b/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs index 09cdb17..f10b4f0 100644 --- a/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs +++ b/RJWSexperience/RJWSexperience/SexHistory/SexHistory.cs @@ -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 partnerlistcache; private List sextypecountsave; private List sextypesatsave; + private List 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(); @@ -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; } } diff --git a/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs b/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs index b6bc4e6..6cc63f3 100644 --- a/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs +++ b/RJWSexperience/RJWSexperience/UI/RJWUIUtility.cs @@ -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 ""; + } + } } diff --git a/RJWSexperience/RJWSexperience/UI/SexStatus.cs b/RJWSexperience/RJWSexperience/UI/SexStatus.cs index 09108a6..a5d9a0e 100644 --- a/RJWSexperience/RJWSexperience/UI/SexStatus.cs +++ b/RJWSexperience/RJWSexperience/UI/SexStatus.cs @@ -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); } diff --git a/changelogs.txt b/changelogs.txt index 351b55a..85e8e1c 100644 --- a/changelogs.txt +++ b/changelogs.txt @@ -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