private static void AddNumber(UiGirlSlot __instance) { GirlDefinition girlDefinition = __instance.girlDefinition; PlayerFileGirl girlFile = Game.Persistence.playerFile.GetPlayerFileGirl(girlDefinition); __instance.nameLabel.richText = true; //__instance.nameLabel.text = "<size=75%><color=#FFFFFF>" + uniques[(int)girlFile.girlDefinition.shoesType] + "<line-height=75%>\n</line-height>" + shoes[(int)girlFile.girlDefinition.shoesType] + "</color></size>\n\n<voffset=3.25em> " + girlDefinition.GetNickName().ToUpper() + "</voffset>"; __instance.nameLabel.text = "<size=230%>" + girlFile.relationshipPoints + "</size>\n<voffset=3em>" + girlDefinition.GetNickName().ToUpper() + "</voffset>"; //__instance.nameLabel.text = " " + girlDefinition.GetNickName().ToUpper(); }
/// <summary> /// Patch to have changeOutfit accept -69 to select a nude outfit /// </summary> /// <param name="__instance">UiDoll instance</param> /// <param name="outfitIndex">index of selected outfit</param> /// <returns></returns> public static bool N69AddNude(UiDoll __instance, int outfitIndex) { var privateFeilds = typeof(UiDoll).GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var girlDefinition = (privateFeilds[2].GetValue(__instance) as GirlDefinition); if (girlDefinition == null) { return(false); } var loadPartFunc = typeof(UiDoll).GetMethod("LoadPart", BindingFlags.NonPublic | BindingFlags.Instance); if (outfitIndex == -69) { GirlOutfitSubDefinition girlOutfitSubDefinition = new GirlOutfitSubDefinition(); girlOutfitSubDefinition.hideNipples = false; girlOutfitSubDefinition.partIndexOutfit = -1; girlOutfitSubDefinition.outfitName = "Nude"; loadPartFunc.Invoke(__instance, new object[] { __instance.partOutfit, girlOutfitSubDefinition.partIndexOutfit, -1f }); __instance.partNipples.Show(); return(false); } PlayerFileGirl playerFileGirl = Game.Persistence.playerFile.GetPlayerFileGirl(girlDefinition); outfitIndex = ((outfitIndex == -1) ? playerFileGirl.outfitIndex : outfitIndex); outfitIndex = Mathf.Clamp(outfitIndex, 0, girlDefinition.outfits.Count - 1); privateFeilds[6].SetValue(__instance, outfitIndex); if (outfitIndex >= 0 && outfitIndex < girlDefinition.outfits.Count) { GirlOutfitSubDefinition girlOutfitSubDefinition = girlDefinition.outfits[outfitIndex]; loadPartFunc.Invoke(__instance, new object[] { __instance.partOutfit, girlOutfitSubDefinition.partIndexOutfit, -1f }); if (girlOutfitSubDefinition.hideNipples) { __instance.partNipples.Hide(); return(false); } __instance.partNipples.Show(); } return(false); }
public static void CheckPercentage() { PlayerFile _this = Game.Persistence.playerFile; float num = (float)Mathf.Clamp(_this.storyProgress - 2, 0, 12) * 0.5f; Logger.LogDebug(Mathf.FloorToInt(num)); for (int i = 0; i < 4; i++) { num += (float)_this.GetAffectionLevel((PuzzleAffectionType)i, true) * 0.625f; } Logger.LogDebug(Mathf.FloorToInt(num)); for (int j = 0; j < _this.girls.Count; j++) { PlayerFileGirl playerFileGirl = _this.girls[j]; if (!playerFileGirl.girlDefinition.specialCharacter && playerFileGirl.playerMet) { num += (float)playerFileGirl.learnedBaggage.Count * 0.25f; num += (float)playerFileGirl.receivedUniques.Count * 0.125f; num += (float)playerFileGirl.receivedShoes.Count * 0.125f; for (int k = 0; k < playerFileGirl.unlockedHairstyles.Count; k++) { if (k != playerFileGirl.girlDefinition.defaultHairstyleIndex && k != 6) { num += 0.046875f; } } for (int l = 0; l < playerFileGirl.unlockedOutfits.Count; l++) { if (l != playerFileGirl.girlDefinition.defaultOutfitIndex && l != 6) { num += 0.046875f; } } } Logger.LogDebug(playerFileGirl.girlDefinition.girlName + ": " + playerFileGirl.learnedBaggage.Count + "," + playerFileGirl.receivedUniques.Count + "," + playerFileGirl.receivedShoes.Count + "," + playerFileGirl.unlockedHairstyles.Count + "," + playerFileGirl.unlockedOutfits.Count); Logger.LogDebug(Mathf.FloorToInt(num)); } //Logger.LogDebug(Mathf.FloorToInt(num)); for (int m = 0; m < _this.girlPairs.Count; m++) { PlayerFileGirlPair playerFileGirlPair = _this.girlPairs[m]; if (!playerFileGirlPair.girlPairDefinition.specialPair) { GirlPairRelationshipType relationshipType = playerFileGirlPair.relationshipType; if (relationshipType >= GirlPairRelationshipType.COMPATIBLE) { num += 0.25f; } if (relationshipType >= GirlPairRelationshipType.ATTRACTED) { num += 1f; } if (relationshipType >= GirlPairRelationshipType.LOVERS) { num += 1f; } } } Logger.LogDebug(Mathf.FloorToInt(num)); }
public static void GetGirlData() { //couldn't find a quick way to get these strings so i got them manually Dictionary <string, string> convertPairQuestions = new Dictionary <string, string>(); convertPairQuestions.Add("Movie Genre", "movie genre"); convertPairQuestions.Add("Phone App", "app on your phone"); convertPairQuestions.Add("Theme Park Ride", "theme park ride"); convertPairQuestions.Add("Holiday", "holiday"); convertPairQuestions.Add("Outdoor Activity", "outdoor activity"); convertPairQuestions.Add("Sunday Morning", "Sunday morning"); convertPairQuestions.Add("Place to Shop", "place to go shopping"); convertPairQuestions.Add("Trait in Partner", "trait to have in a partner"); convertPairQuestions.Add("Own Body Part", "part about your own body"); convertPairQuestions.Add("P**n Category", "category of p**n"); convertPairQuestions.Add("Ice Cream Flavor", "flavor of ice cream"); convertPairQuestions.Add("Friday Night", "Friday night"); convertPairQuestions.Add("Weather", "kind of weather"); convertPairQuestions.Add("Pet", "type of pet"); convertPairQuestions.Add("School Subject", "subject in high school"); convertPairQuestions.Add("Drink", "thing to drink"); convertPairQuestions.Add("Music Genre", "music genre"); convertPairQuestions.Add("Online Activity", "thing to do online"); convertPairQuestions.Add("Type of Exercise", "way to exercise"); convertPairQuestions.Add("Sex Position", "sex position"); Dictionary <int, string> girlIDToHotkey = new Dictionary <int, string>(); for (int i = 1; i <= 9; i++) { girlIDToHotkey.Add(i, i.ToString()); } girlIDToHotkey.Add(10, "0"); girlIDToHotkey.Add(11, "-"); girlIDToHotkey.Add(12, "="); Logger.LogDebug(Game.Persistence.playerFile.girls.Count + " girls"); List <GirlDefinition> allBySpecial = Game.Data.Girls.GetAllBySpecial(false); List <GirlPairDefinition> allBySpecial2 = Game.Data.GirlPairs.GetAllBySpecial(false); foreach (GirlDefinition g in allBySpecial) { Logger.LogDebug(g.girlName + " " + g.id); } List <GirlDefinition> allSpecialGirls = Game.Data.Girls.GetAllBySpecial(true); foreach (GirlDefinition g in allSpecialGirls) { Logger.LogDebug(g.girlName + " " + g.id); } foreach (PlayerFileGirl pfg in Game.Persistence.playerFile.girls) { Logger.LogDebug(pfg.girlDefinition.girlName); } string data = ""; //output unordered girl info list foreach (GirlDefinition g in allBySpecial) { data += g.girlName + " (" + girlIDToHotkey[g.id] + "): Loves " + g.favoriteAffectionType + ", Hates " + g.leastFavoriteAffectionType + "\n"; data += g.uniqueType + " (" + g.uniqueAdj + "), " + g.shoesType + " (" + g.shoesAdj + ")\n"; data += GetQuestionQuizlet(g) + "\n"; } data += "\n"; allBySpecial.Sort((x, y) => x.girlName.CompareTo(y.girlName)); //output alphabetical girl info list foreach (GirlDefinition g in allBySpecial) { data += g.girlName + " (" + girlIDToHotkey[g.id] + "): Loves " + g.favoriteAffectionType + ", Hates " + g.leastFavoriteAffectionType + "\n"; data += g.uniqueType + " (" + g.uniqueAdj + "), " + g.shoesType + " (" + g.shoesAdj + ")\n"; data += GetQuestionQuizlet(g) + "\n"; } //output unordered pair info list foreach (GirlPairDefinition g in allBySpecial2) { GirlDefinition g1 = g.girlDefinitionOne; GirlDefinition g2 = g.girlDefinitionTwo; data += g1.girlName + " + " + g2.girlName + "; " + g2.girlName + " + " + g1.girlName + " (" + g1.favoriteAffectionType + ", " + g2.favoriteAffectionType + ")\n"; if (g.introductionPair) { data += "Introduction Pair: YES, "; } data += "Meeting Location: " + g.meetingLocationDefinition.locationName + ", Sex Day Phase: " + g.sexDaytime + "\n"; data += "Favorite Questions: "; List <GirlPairFavQuestionSubDefinition> qs = g.favQuestions; foreach (GirlPairFavQuestionSubDefinition q in qs) { if (convertPairQuestions.ContainsKey(q.questionDefinition.questionName)) { q.questionDefinition.questionName = convertPairQuestions[q.questionDefinition.questionName]; } } qs.Sort((x, y) => x.questionDefinition.questionName.CompareTo(y.questionDefinition.questionName)); foreach (GirlPairFavQuestionSubDefinition q in qs) { data += q.questionDefinition.questionName + ", "; } data = data.Substring(0, data.Length - 2); data += "\n\n"; } data += "\n"; foreach (GirlPairDefinition g in allBySpecial2) { //swap pairs so earlier name is always girldefinitionone if (g.girlDefinitionOne.girlName.CompareTo(g.girlDefinitionTwo.girlName) > 0) { GirlDefinition temp = g.girlDefinitionOne; g.girlDefinitionOne = g.girlDefinitionTwo; g.girlDefinitionTwo = temp; } } allBySpecial2.Sort((x, y) => { int result = x.girlDefinitionOne.girlName.CompareTo(y.girlDefinitionOne.girlName); if (result == 0) { result = x.girlDefinitionTwo.girlName.CompareTo(y.girlDefinitionTwo.girlName); } return(result); } ); //allBySpecial2.Sort((x, y) => { if (x.girlDefinitionOne.girlName == y.girlDefinitionOne.girlName) return x.girlDefinitionTwo.girlName.CompareTo(y.girlDefinitionTwo.girlName); else return 0; }); foreach (GirlPairDefinition g in allBySpecial2) { GirlDefinition g1 = g.girlDefinitionOne; GirlDefinition g2 = g.girlDefinitionTwo; data += g1.girlName + " + " + g2.girlName + "; " + g2.girlName + " + " + g1.girlName + " (" + g1.favoriteAffectionType + ", " + g2.favoriteAffectionType + ")\n"; if (g.introductionPair) { data += "Introduction Pair: YES, "; } data += "Meeting Location: " + g.meetingLocationDefinition.locationName + ", Sex Day Phase: " + g.sexDaytime + "\n"; data += "Favorite Questions: "; List <GirlPairFavQuestionSubDefinition> qs = g.favQuestions; foreach (GirlPairFavQuestionSubDefinition q in qs) { if (convertPairQuestions.ContainsKey(q.questionDefinition.questionName)) { q.questionDefinition.questionName = convertPairQuestions[q.questionDefinition.questionName]; } } qs.Sort((x, y) => x.questionDefinition.questionName.CompareTo(y.questionDefinition.questionName)); foreach (GirlPairFavQuestionSubDefinition q in qs) { data += q.questionDefinition.questionName + ", "; } data = data.Substring(0, data.Length - 2); data += "\n\n"; } Logger.LogDebug(data); string huge = ""; for (int a = 0; a < allBySpecial.Count; a++) { for (int b = 0; b < allBySpecial[a].herQuestions.Count; b++) { for (int c = 0; c < allBySpecial[a].herQuestions[b].answers.Count; c++) { huge += a + "," + b + "," + c + ": " + PurifyDialogText(allBySpecial[a].herQuestions[b].answers[c].answerText) + " (" + allBySpecial[a].herQuestions[b].answers[c].responseIndex + ")\n"; if (allBySpecial[a].herQuestions[b].answers[c].hasAlt) { huge += a + "," + b + "," + c + " ALT: " + PurifyDialogText(allBySpecial[a].herQuestions[b].answers[c].answerTextAlt) + " (" + allBySpecial[a].herQuestions[b].answers[c].responseIndex + ")\n"; } } } } //Logger.LogDebug(huge); float num = (float)Mathf.Clamp(Game.Persistence.playerFile.storyProgress - 2, 0, 12) * 0.5f; Logger.LogDebug(num); for (int i = 0; i < 4; i++) { num += (float)Game.Persistence.playerFile.GetAffectionLevel((PuzzleAffectionType)i, true) * 0.625f; Logger.LogDebug(num); } Logger.LogDebug(num); for (int j = 0; j < Game.Persistence.playerFile.girls.Count; j++) { PlayerFileGirl playerFileGirl = Game.Persistence.playerFile.girls[j]; if (!playerFileGirl.girlDefinition.specialCharacter && playerFileGirl.playerMet) { num += (float)playerFileGirl.learnedBaggage.Count * 0.25f; num += (float)playerFileGirl.receivedUniques.Count * 0.125f; num += (float)playerFileGirl.receivedShoes.Count * 0.125f; for (int k = 0; k < playerFileGirl.unlockedHairstyles.Count; k++) { if (k != playerFileGirl.girlDefinition.defaultHairstyleIndex && k != 6) { num += 0.046875f; } } for (int l = 0; l < playerFileGirl.unlockedOutfits.Count; l++) { if (l != playerFileGirl.girlDefinition.defaultOutfitIndex && l != 6) { num += 0.046875f; } } } Logger.LogDebug(num); } for (int m = 0; m < Game.Persistence.playerFile.girlPairs.Count; m++) { PlayerFileGirlPair playerFileGirlPair = Game.Persistence.playerFile.girlPairs[m]; if (!playerFileGirlPair.girlPairDefinition.specialPair) { GirlPairRelationshipType relationshipType = playerFileGirlPair.relationshipType; if (relationshipType >= GirlPairRelationshipType.COMPATIBLE) { num += 0.25f; } if (relationshipType >= GirlPairRelationshipType.ATTRACTED) { num += 1f; } if (relationshipType >= GirlPairRelationshipType.LOVERS) { num += 1f; } } } Logger.LogDebug(num); }
public static bool ChangeTooltipText(UiCellphoneAppProfile __instance, UiTooltipSimple ____tooltip, PlayerFileGirl ____playerFileGirl) { //enable the Girl Profile head to choose pairs, but only when cheating / using all pairs mod if (HP2SR.cheatsEnabled || HP2SR.AllPairsEnabled.Value) { string text = ____playerFileGirl.girlDefinition.girlName + "'s Profile"; text = text + "\nAge: " + ____playerFileGirl.girlDefinition.girlAge.ToString(); text = text + "\nClick to visit any\nof this girl's pairs!"; ____tooltip.Populate(text, 0, 1f, 1920f); ____tooltip.Show(Vector2.up * 50f, false); return(false); } return(true); }