public static bool ManorHouse_performAction_Prefix(ManorHouse __instance, string action, Farmer who, ref bool __result) { try { ModEntry.ResetSpouses(who); Dictionary <string, NPC> spouses = ModEntry.GetSpouses(who, true); if (action != null && who.IsLocalPlayer && !Game1.player.divorceTonight.Value && (Game1.player.isMarried() || spouses.Count > 0)) { string a = action.Split(new char[] { ' ' })[0]; if (a == "DivorceBook") { string str = Helper.Translation.Get("divorce_who"); List <Response> responses = new List <Response>(); foreach (NPC spouse in spouses.Values) { responses.Add(new Response(spouse.Name, spouse.displayName)); } responses.Add(new Response("No", Game1.content.LoadString("Strings\\Lexicon:QuestionDialogue_No"))); __instance.createQuestionDialogue(str, responses.ToArray(), Divorce.afterDialogueBehavior); //__instance.createQuestionDialogue(s2, responses.ToArray(), "divorce"); __result = true; return(false); } } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(ManorHouse_performAction_Prefix)}:\n{ex}", LogLevel.Error); } return(true); }
public static void DialogueBox_Prefix(ref List <string> dialogues) { try { if (dialogues == null || dialogues.Count < 2) { return; } if (dialogues[1] == Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1826")) { List <string> newDialogues = new List <string>() { dialogues[0] }; List <NPC> spouses = ModEntry.GetSpouses(Game1.player, true).Values.OrderBy(o => Game1.player.friendshipData[o.Name].Points).Reverse().Take(4).ToList(); List <int> which = new List <int> { 0, 1, 2, 3 }; ModEntry.ShuffleList(ref which); List <int> myWhich = new List <int>(which).Take(spouses.Count).ToList(); for (int i = 0; i < spouses.Count; i++) { switch (which[i]) { case 0: newDialogues.Add(Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1827", spouses[i].displayName)); break; case 1: newDialogues.Add(((spouses[i].Gender == 0) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1832") : Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1834")) + " " + ((spouses[i].Gender == 0) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1837", spouses[i].displayName[0]) : Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1838", spouses[i].displayName[0]))); break; case 2: newDialogues.Add(Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1843", spouses[i].displayName)); break; case 3: newDialogues.Add(((spouses[i].Gender == 0) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1831") : Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1833")) + " " + ((spouses[i].Gender == 0) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1837", spouses[i].displayName[0]) : Game1.content.LoadString("Strings\\StringsFromCSFiles:Event.cs.1838", spouses[i].displayName[i]))); break; } } dialogues = new List <string>(newDialogues); } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(DialogueBox_Prefix)}:\n{ex}", LogLevel.Error); } }
public static void GameLocation_checkEventPrecondition_Prefix(ref string precondition) { try { if (precondition == null || precondition == "") { return; } string[] split = precondition.Split('/'); if (split.Length == 0) { return; } int eventId; if (!int.TryParse(split[0], out eventId)) { return; } if (Game1.player.eventsSeen.Contains(eventId)) { return; } Dictionary <string, NPC> spouses = ModEntry.GetSpouses(Game1.player, true); for (int i = 1; i < split.Length; i++) { if (split[i].Length == 0) { continue; } if (split[i][0] == 'O') { string name = split[i].Substring(2); if (Game1.player.spouse != name && spouses.ContainsKey(name)) { Monitor.Log($"Got unofficial spouse requirement for event: {name}, switching event condition to isSpouse O"); split[i] = $"o {name}"; } } else if (split[i][0] == 'o') { string name = split[i].Substring(2); if (Game1.player.spouse != name && spouses.ContainsKey(name)) { Monitor.Log($"Got unofficial spouse barrier to event: {name}, switching event condition to notSpouse o"); split[i] = $"O {name}"; } } } precondition = string.Join("/", split); } catch (Exception ex) { Monitor.Log($"Failed in {nameof(GameLocation_checkEventPrecondition_Prefix)}:\n{ex}", LogLevel.Error); } }
public static void NPC_marriageDuties_Prefix(NPC __instance) { try { if (ModEntry.GetSpouses(Game1.player, false).ContainsKey(__instance.Name)) { ModEntry.tempOfficialSpouse = __instance; } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(NPC_marriageDuties_Prefix)}:\n{ex}", LogLevel.Error); } }
internal static void NPC_loadCurrentDialogue_Prefix(NPC __instance, ref string __state) { try { if (ModEntry.GetSpouses(Game1.player, false).ContainsKey(__instance.Name)) { __state = Game1.player.spouse; Game1.player.spouse = __instance.Name; } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(NPC_loadCurrentDialogue_Prefix)}:\n{ex}", LogLevel.Error); } }
public static bool FarmHouse_getSpouseBedSpot_Prefix(FarmHouse __instance, string spouseName, ref Point __result) { try { if (spouseName == null || !Config.EnableMod) { return(true); } var spouses = ModEntry.GetSpouses(__instance.owner, true); if (!spouses.TryGetValue(spouseName, out NPC spouse) || spouse is null || spouse.isMoving() || !ModEntry.IsInBed(__instance, spouse.GetBoundingBox())) { return(true); } __result = spouse.getTileLocationPoint(); return(false); } catch (Exception ex) { Monitor.Log($"Failed in {nameof(FarmHouse_GetSpouseBed_Postfix)}:\n{ex}", LogLevel.Error); } return(true); }
public static bool NPC_tryToReceiveActiveObject_Prefix(NPC __instance, ref Farmer who, Dictionary <string, string> ___dialogue, ref List <int> __state) { try { if (ModEntry.GetSpouses(who, true).ContainsKey(__instance.Name) && Game1.NPCGiftTastes.ContainsKey(__instance.Name)) { Monitor.Log($"Gift to spouse {__instance.Name}"); __state = new List <int> { who.friendshipData[__instance.Name].GiftsToday, who.friendshipData[__instance.Name].GiftsThisWeek, 0, 0 }; if (Config.MaxGiftsPerSpousePerDay < 0 || who.friendshipData[__instance.Name].GiftsToday < Config.MaxGiftsPerSpousePerDay) { who.friendshipData[__instance.Name].GiftsToday = 0; } else { who.friendshipData[__instance.Name].GiftsToday = 1; __state[2] = 1; // flag to say we set it to 1 } if (Config.MaxGiftsPerSpousePerWeek < 0 || who.friendshipData[__instance.Name].GiftsThisWeek < Config.MaxGiftsPerSpousePerWeek) { who.friendshipData[__instance.Name].GiftsThisWeek = 0; } else { who.friendshipData[__instance.Name].GiftsThisWeek = 2; __state[3] = 1; // flag to say we set it to 2 } } string safe_name = __instance.Name.ToLower().Replace(' ', '_'); if (who.ActiveObject.HasContextTag("propose_roommate_" + safe_name)) { Monitor.Log($"Roommate proposal item {who.ActiveObject.Name} to {__instance.Name}"); if (who.getFriendshipHeartLevelForNPC(__instance.Name) >= 10 && who.HouseUpgradeLevel >= 1) { Monitor.Log($"proposal success!"); AccessTools.Method(typeof(NPC), "engagementResponse").Invoke(__instance, new object[] { who, true }); return(false); } Game1.drawObjectDialogue(Game1.parseText(Game1.content.LoadString("Strings\\Characters:MovieInvite_NoTheater", __instance.displayName))); return(false); } else if (who.ActiveObject.ParentSheetIndex == 808 && __instance.Name.Equals("Krobus")) { if (who.getFriendshipHeartLevelForNPC(__instance.Name) >= 10 && who.HouseUpgradeLevel >= 1) { AccessTools.Method(typeof(NPC), "engagementResponse").Invoke(__instance, new object[] { who, true }); return(false); } } else if (who.ActiveObject.ParentSheetIndex == 458) { Monitor.Log($"Try give bouquet to {__instance.Name}"); if (ModEntry.GetSpouses(who, true).ContainsKey(__instance.Name)) { who.spouse = __instance.Name; ModEntry.ResetSpouses(who); Game1.currentLocation.playSound("dwop", NetAudio.SoundContext.NPC); if (ModEntry.customSpouseRoomsAPI == null) { FarmHouse fh = Utility.getHomeOfFarmer(who); fh.showSpouseRoom(); Helper.Reflection.GetMethod(fh, "resetLocalState").Invoke(); } return(false); } if (!__instance.datable.Value) { if (ModEntry.myRand.NextDouble() < 0.5) { Game1.drawObjectDialogue(Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3955", __instance.displayName)); return(false); } __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3956") : Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3957"), __instance)); Game1.drawDialogue(__instance); return(false); } else { if (who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].IsDating()) { Game1.drawObjectDialogue(Game1.content.LoadString("Strings\\UI:AlreadyDatingBouquet", __instance.displayName)); return(false); } if (who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].IsDivorced()) { __instance.CurrentDialogue.Push(new Dialogue(Game1.content.LoadString("Strings\\Characters:Divorced_bouquet"), __instance)); Game1.drawDialogue(__instance); return(false); } if (who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].Points < Config.MinPointsToDate / 2f) { __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3958") : Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3959"), __instance)); Game1.drawDialogue(__instance); return(false); } if (who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].Points < Config.MinPointsToDate) { __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3960") : Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3961"), __instance)); Game1.drawDialogue(__instance); return(false); } Friendship friendship = who.friendshipData[__instance.Name]; if (!friendship.IsDating()) { friendship.Status = FriendshipStatus.Dating; Multiplayer mp = ModEntry.SHelper.Reflection.GetField <Multiplayer>(typeof(Game1), "multiplayer").GetValue(); mp.globalChatInfoMessage("Dating", new string[] { who.Name, __instance.displayName }); } __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3962") : Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3963"), __instance)); who.changeFriendship(25, __instance); who.reduceActiveItemByOne(); who.completelyStopAnimatingOrDoingAction(); __instance.doEmote(20, true); Game1.drawDialogue(__instance); return(false); } } else if (who.ActiveObject.ParentSheetIndex == 460) { Monitor.Log($"Try give pendant to {__instance.Name}"); if (who.isEngaged()) { Monitor.Log($"Tried to give pendant while engaged"); __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3965") : Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3966"), __instance)); Game1.drawDialogue(__instance); return(false); } if (!__instance.datable.Value || __instance.isMarriedOrEngaged() || (who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].Points < Config.MinPointsToMarry * 0.6f)) { Monitor.Log($"Tried to give pendant to someone not datable"); if (ModEntry.myRand.NextDouble() < 0.5) { Game1.drawObjectDialogue(Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3969", __instance.displayName)); return(false); } __instance.CurrentDialogue.Push(new Dialogue((__instance.Gender == 1) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3970") : Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3971"), __instance)); Game1.drawDialogue(__instance); return(false); } else if (__instance.datable.Value && who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].Points < Config.MinPointsToMarry) { Monitor.Log($"Tried to give pendant to someone not marriable"); if (!who.friendshipData[__instance.Name].ProposalRejected) { __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3972") : Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3973"), __instance)); Game1.drawDialogue(__instance); who.changeFriendship(-20, __instance); who.friendshipData[__instance.Name].ProposalRejected = true; return(false); } __instance.CurrentDialogue.Push(new Dialogue((ModEntry.myRand.NextDouble() < 0.5) ? Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3974") : Game1.LoadStringByGender(__instance.Gender, "Strings\\StringsFromCSFiles:NPC.cs.3975"), __instance)); Game1.drawDialogue(__instance); who.changeFriendship(-50, __instance); return(false); } else { Monitor.Log($"Tried to give pendant to someone marriable"); if (!__instance.datable.Value || who.HouseUpgradeLevel >= 1) { typeof(NPC).GetMethod("engagementResponse", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { who, false }); return(false); } Monitor.Log($"Can't marry"); if (ModEntry.myRand.NextDouble() < 0.5) { Game1.drawObjectDialogue(Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3969", __instance.displayName)); return(false); } __instance.CurrentDialogue.Push(new Dialogue(Game1.content.LoadString("Strings\\StringsFromCSFiles:NPC.cs.3972"), __instance)); Game1.drawDialogue(__instance); return(false); } } else if (who.ActiveObject.ParentSheetIndex == 809 && !who.ActiveObject.bigCraftable.Value) { Monitor.Log($"Tried to give movie ticket to {__instance.Name}"); if (ModEntry.GetSpouses(who, true).ContainsKey(__instance.Name) && Utility.doesMasterPlayerHaveMailReceivedButNotMailForTomorrow("ccMovieTheater") && !__instance.Name.Equals("Krobus") && who.lastSeenMovieWeek.Value < Game1.Date.TotalWeeks && !Utility.isFestivalDay(Game1.dayOfMonth, Game1.currentSeason) && Game1.timeOfDay <= 2100 && __instance.lastSeenMovieWeek.Value < Game1.Date.TotalWeeks && MovieTheater.GetResponseForMovie(__instance) != "reject") { Monitor.Log($"Tried to give movie ticket to spouse"); foreach (MovieInvitation invitation in who.team.movieInvitations) { if (invitation.farmer == who) { return(true); } } foreach (MovieInvitation invitation2 in who.team.movieInvitations) { if (invitation2.invitedNPC == __instance) { return(true); } } Monitor.Log($"Giving movie ticket to spouse"); if (LocalizedContentManager.CurrentLanguageCode == LocalizedContentManager.LanguageCode.en) { __instance.CurrentDialogue.Push(new Dialogue(__instance.GetDispositionModifiedString("Strings\\Characters:MovieInvite_Spouse_" + __instance.Name, new object[0]), __instance)); } else if (LocalizedContentManager.CurrentLanguageCode == LocalizedContentManager.LanguageCode.en && ___dialogue != null && ___dialogue.ContainsKey("MovieInvitation")) { __instance.CurrentDialogue.Push(new Dialogue(___dialogue["MovieInvitation"], __instance)); } else { __instance.CurrentDialogue.Push(new Dialogue(__instance.GetDispositionModifiedString("Strings\\Characters:MovieInvite_Invited", new object[0]), __instance)); } Game1.drawDialogue(__instance); who.reduceActiveItemByOne(); who.completelyStopAnimatingOrDoingAction(); who.currentLocation.localSound("give_gift"); MovieTheater.Invite(who, __instance); if (who == Game1.player) { ModEntry.mp.globalChatInfoMessage("MovieInviteAccept", new string[] { Game1.player.displayName, __instance.displayName }); return(false); } } return(true); } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(NPC_tryToReceiveActiveObject_Prefix)}:\n{ex}", LogLevel.Error); } return(true); }
public static bool NPC_checkAction_Prefix(ref NPC __instance, ref Farmer who, GameLocation l, ref bool __result) { if (!Config.EnableMod || __instance.IsInvisible || __instance.isSleeping.Value || !who.canMove || who.checkForQuestComplete(__instance, -1, -1, who.ActiveObject, null, -1, 5) || (who.pantsItem.Value?.ParentSheetIndex == 15 && (__instance.Name.Equals("Lewis") || __instance.Name.Equals("Marnie"))) || (__instance.Name.Equals("Krobus") && who.hasQuest(28))) { return(true); } try { ModEntry.ResetSpouses(who); if ((__instance.Name.Equals(who.spouse) || ModEntry.GetSpouses(who, true).ContainsKey(__instance.Name)) && __instance.Sprite.CurrentAnimation == null && who.IsLocalPlayer) { Monitor.Log($"{__instance.Name} is married to {who.Name}"); __instance.faceDirection(-3); if (who.friendshipData.ContainsKey(__instance.Name) && who.friendshipData[__instance.Name].Points >= 3125 && !who.mailReceived.Contains("CF_Spouse")) { Monitor.Log($"getting starfruit"); __instance.CurrentDialogue.Push(new Dialogue(Game1.content.LoadString(Game1.player.isRoommate(who.spouse) ? "Strings\\StringsFromCSFiles:Krobus_Stardrop" : "Strings\\StringsFromCSFiles:NPC.cs.4001"), __instance)); Game1.player.addItemByMenuIfNecessary(new Object(Vector2.Zero, 434, "Cosmic Fruit", false, false, false, false), null); __instance.shouldSayMarriageDialogue.Value = false; __instance.currentMarriageDialogue.Clear(); who.mailReceived.Add("CF_Spouse"); __result = true; return(false); } if (__instance.Sprite.CurrentAnimation == null && !__instance.hasTemporaryMessageAvailable() && __instance.currentMarriageDialogue.Count == 0 && __instance.CurrentDialogue.Count == 0 && Game1.timeOfDay < 2200 && !__instance.isMoving() && who.ActiveObject == null && ModEntry.kissingAPI == null) { Monitor.Log($"Trying to kiss/hug {__instance.Name}"); __instance.faceGeneralDirection(who.getStandingPosition(), 0, false); who.faceGeneralDirection(__instance.getStandingPosition(), 0, false); if (__instance.FacingDirection == 3 || __instance.FacingDirection == 1) { if (__instance.hasBeenKissedToday.Value) { Monitor.Log($"{__instance.Name} has been kissed today"); return(true); } int spouseFrame = 28; bool facingRight = true; string name = __instance.Name; if (name == "Sam") { spouseFrame = 36; facingRight = true; } else if (name == "Penny") { spouseFrame = 35; facingRight = true; } else if (name == "Sebastian") { spouseFrame = 40; facingRight = false; } else if (name == "Alex") { spouseFrame = 42; facingRight = true; } else if (name == "Krobus") { spouseFrame = 16; facingRight = true; } else if (name == "Maru") { spouseFrame = 28; facingRight = false; } else if (name == "Emily") { spouseFrame = 33; facingRight = false; } else if (name == "Harvey") { spouseFrame = 31; facingRight = false; } else if (name == "Shane") { spouseFrame = 34; facingRight = false; } else if (name == "Elliott") { spouseFrame = 35; facingRight = false; } else if (name == "Leah") { spouseFrame = 25; facingRight = true; } else if (name == "Abigail") { spouseFrame = 33; facingRight = false; } bool flip = (facingRight && __instance.FacingDirection == 3) || (!facingRight && __instance.FacingDirection == 1); if (who.getFriendshipHeartLevelForNPC(__instance.Name) >= 9) { Monitor.Log($"Can kiss/hug {__instance.Name}"); int delay = Game1.IsMultiplayer ? 1000 : 10; __instance.movementPause = delay; __instance.Sprite.setCurrentAnimation(new List <FarmerSprite.AnimationFrame> { new FarmerSprite.AnimationFrame(spouseFrame, delay, false, flip, new AnimatedSprite.endOfAnimationBehavior(__instance.haltMe), true) }); if (!__instance.hasBeenKissedToday.Value) { who.changeFriendship(10, __instance); if (who.friendshipData[__instance.Name].RoommateMarriage) { Monitor.Log($"Hugging {__instance.Name}"); ModEntry.mp.broadcastSprites(who.currentLocation, new TemporaryAnimatedSprite[] { new TemporaryAnimatedSprite("LooseSprites\\emojis", new Microsoft.Xna.Framework.Rectangle(0, 0, 9, 9), 2000f, 1, 0, new Vector2((float)__instance.getTileX(), (float)__instance.getTileY()) * 64f + new Vector2(16f, -64f), false, false, 1f, 0f, Color.White, 4f, 0f, 0f, 0f, false) { motion = new Vector2(0f, -0.5f), alphaFade = 0.01f } }); } else { Monitor.Log($"Kissing {__instance.Name}"); ModEntry.mp.broadcastSprites(who.currentLocation, new TemporaryAnimatedSprite[] { new TemporaryAnimatedSprite("LooseSprites\\Cursors", new Microsoft.Xna.Framework.Rectangle(211, 428, 7, 6), 2000f, 1, 0, new Vector2((float)__instance.getTileX(), (float)__instance.getTileY()) * 64f + new Vector2(16f, -64f), false, false, 1f, 0f, Color.White, 4f, 0f, 0f, 0f, false) { motion = new Vector2(0f, -0.5f), alphaFade = 0.01f } }); } __instance.currentLocation.playSound("dwop", NetAudio.SoundContext.NPC); who.exhausted.Value = false; } __instance.hasBeenKissedToday.Value = true; __instance.Sprite.UpdateSourceRect(); } else { Monitor.Log($"Kiss/hug rejected by {__instance.Name}"); __instance.faceDirection((ModEntry.myRand.NextDouble() < 0.5) ? 2 : 0); __instance.doEmote(12, true); } int playerFaceDirection = 1; if ((facingRight && !flip) || (!facingRight && flip)) { playerFaceDirection = 3; } who.PerformKiss(playerFaceDirection); __result = true; return(false); } } } } catch (Exception ex) { Monitor.Log($"Failed in {nameof(NPC_checkAction_Prefix)}:\n{ex}", LogLevel.Error); } return(true); }
public static bool Farmer_isMarried_Prefix(Farmer __instance, ref bool __result) { try { __result = __instance.team.IsMarried(__instance.UniqueMultiplayerID) || ModEntry.GetSpouses(__instance, true).Count > 0; return(false); } catch (Exception ex) { Monitor.Log($"Failed in {nameof(Farmer_isMarried_Prefix)}:\n{ex}", LogLevel.Error); } return(true); }
public Dictionary <string, NPC> GetSpouses(Farmer farmer, int all = -1) { return(ModEntry.GetSpouses(farmer, all != 0)); }
public Dictionary <string, NPC> GetSpouses(Farmer farmer, bool all = true) { return(ModEntry.GetSpouses(farmer, all)); }
public static void afterDialogueBehavior(Farmer who, string whichAnswer) { Monitor.Log("answer " + whichAnswer); if (ModEntry.GetSpouses(who, true).ContainsKey(whichAnswer)) { Monitor.Log("divorcing " + whichAnswer); string s2 = Game1.content.LoadString("Strings\\Locations:ManorHouse_DivorceBook_Question_" + whichAnswer, whichAnswer); if (s2 == null || s2 == "Strings\\Locations:ManorHouse_DivorceBook_Question_" + whichAnswer) { s2 = Game1.content.LoadStringReturnNullIfNotFound("Strings\\Locations:ManorHouse_DivorceBook_Question"); } List <Response> responses = new List <Response>(); responses.Add(new Response($"divorce_Yes_{whichAnswer}", Game1.content.LoadString("Strings\\Lexicon:QuestionDialogue_Yes"))); if (Config.ComplexDivorce) { responses.Add(new Response($"divorce_complex_{whichAnswer}", Helper.Translation.Get("divorce_complex"))); } responses.Add(new Response("No", Game1.content.LoadString("Strings\\Lexicon:QuestionDialogue_No"))); (Game1.activeClickableMenu as DialogueBox)?.closeDialogue(); Game1.currentLocation.createQuestionDialogue(s2, responses.ToArray(), afterDialogueBehavior); } else if (whichAnswer.StartsWith("divorce_Yes_")) { Monitor.Log("confirmed " + whichAnswer); string spouse = whichAnswer.Split('_')[2]; if (Game1.player.Money >= 50000 || spouse == "Krobus") { Monitor.Log("divorce initiated successfully"); if (!Game1.player.isRoommate(spouse)) { Game1.player.Money -= 50000; ModEntry.divorceHeartsLost = Config.PreventHostileDivorces ? 0 : -1; } else { ModEntry.divorceHeartsLost = 0; } ModEntry.spouseToDivorce = spouse; Game1.player.divorceTonight.Value = true; string s = Game1.content.LoadString("Strings\\Locations:ManorHouse_DivorceBook_Filed_" + spouse, spouse); if (s == null) { s = Game1.content.LoadStringReturnNullIfNotFound("Strings\\Locations:ManorHouse_DivorceBook_Filed"); } Game1.drawObjectDialogue(s); if (!Game1.player.isRoommate(spouse)) { ModEntry.mp.globalChatInfoMessage("Divorce", new string[] { Game1.player.Name }); } } else { Monitor.Log("not enough money to divorce"); Game1.drawObjectDialogue(Game1.content.LoadString("Strings\\UI:NotEnoughMoney1")); } } else if (whichAnswer.StartsWith("divorce_complex_")) { complexDivorceSpouse = whichAnswer.Replace("divorce_complex_", ""); ModEntry.divorceHeartsLost = 1; ShowNextDialogue("divorce_fault_", Game1.currentLocation); } else if (whichAnswer.StartsWith("divorce_fault_")) { Monitor.Log("divorce fault"); string r = Helper.Translation.Get(whichAnswer); if (r != null) { if (int.TryParse(r.Split('#')[r.Split('#').Length - 1], out int lost)) { ModEntry.divorceHeartsLost += lost; } } string nextKey = $"divorce_{r.Split('#')[r.Split('#').Length - 2]}reason_"; Translation test = Helper.Translation.Get(nextKey + "q"); if (!test.HasValue()) { ShowNextDialogue($"divorce_method_", Game1.currentLocation); return; } ShowNextDialogue($"divorce_{r.Split('#')[r.Split('#').Length - 2]}reason_", Game1.currentLocation); } else if (whichAnswer.Contains("reason_")) { Monitor.Log("divorce reason"); string r = Helper.Translation.Get(whichAnswer); if (r != null) { if (int.TryParse(r.Split('#')[r.Split('#').Length - 1], out int lost)) { ModEntry.divorceHeartsLost += lost; } } ShowNextDialogue($"divorce_method_", Game1.currentLocation); } else if (whichAnswer.StartsWith("divorce_method_")) { Monitor.Log("divorce method"); ModEntry.spouseToDivorce = complexDivorceSpouse; string r = Helper.Translation.Get(whichAnswer); if (r != null) { if (int.TryParse(r.Split('#')[r.Split('#').Length - 1], out int lost)) { ModEntry.divorceHeartsLost += lost; } } if (Game1.player.Money >= 50000 || complexDivorceSpouse == "Krobus") { if (!Game1.player.isRoommate(complexDivorceSpouse)) { int money = 50000; if (int.TryParse(r.Split('#')[r.Split('#').Length - 2], out int mult)) { money = (int)Math.Round(money * mult / 100f); } Monitor.Log($"money cost {money}"); Game1.player.Money -= money; } Game1.player.divorceTonight.Value = true; string s = Game1.content.LoadString("Strings\\Locations:ManorHouse_DivorceBook_Filed_" + complexDivorceSpouse, complexDivorceSpouse); if (s == null || s == "Strings\\Locations:ManorHouse_DivorceBook_Filed_" + complexDivorceSpouse) { s = Game1.content.LoadStringReturnNullIfNotFound("Strings\\Locations:ManorHouse_DivorceBook_Filed"); } Game1.drawObjectDialogue(s); if (!Game1.player.isRoommate(complexDivorceSpouse)) { ModEntry.mp.globalChatInfoMessage("Divorce", new string[] { Game1.player.Name }); } Monitor.Log($"hearts lost {ModEntry.divorceHeartsLost}"); } else { Game1.drawObjectDialogue(Game1.content.LoadString("Strings\\UI:NotEnoughMoney1")); } } }