public static bool CheckExpress_Prefix(FavorObject favorObj, ref int failReason, ref bool __result) { if (!enabled) { return(true); } if (!Environment.StackTrace.Contains("ExecuteGiveGift")) { return(true); } //Dbgl($"Checking confession for {favorObj.ID}"); if (romanceMeta == null) { Dbgl("Problem getting romance meta data"); return(true); } FavorRelationshipData refData = FavorRelationshipData.GetRefData((int)favorObj.Relationship); if (refData.canExpress) { float num = (refData.expressChance[1] - refData.expressChance[0]) * (float)(favorObj.FavorValue - refData.MinValue) / (float)(refData.MaxValue - refData.MinValue) + refData.expressChance[0]; num += Module <FeatureModule> .Self.ModifyFloat(FeatureType.ExpressSucceedRatio, new object[] { num }); float baseChance = num; Dbgl($"Vanilla confession chance: {baseChance }"); num += settings.ConfessPercentChanceIncrease * 0.01f; RomanceCounts rc = romanceMeta.romances.Find(r => r.id == favorObj.ID); if (rc != null) { num += settings.ConfessPercentChanceIncreasePerConfession * 0.01f * rc.confessions; } Dbgl($"Modified confession chance: {num}"); if (new System.Random().NextDouble() < num) { __result = true; return(false); } } failReason = 6; __result = false; return(false); }
static bool Prefix(int npcId, ref bool __result, ref MGState ___mState, ref Actor ___mActor, ref int ___mNpcID) { if (!enabled) { return(true); } //Debug.Log("XYZ Checking if "+Module<NpcRepository>.Self.GetNpcName(npcId)+" "+npcId+" is Spouse"); FavorObject f = FavorManager.Self.GetFavorObject(npcId); __result = (f.RelationshipType == FavorRelationshipType.Couple); //Debug.Log("XYZ " + Module<NpcRepository>.Self.GetNpcName(npcId) + " " + npcId + " is"+(__result?" ":" not ")+"Spouse"); int spouseid = GetCurrentSpouse(); if (spouseid == 0) { if (___mState != MGState.Propose) { ___mState = MGState.Single; ___mActor = null; ___mNpcID = 0; } return(false); } List <FavorObject> fList = new List <FavorObject>(FavorManager.Self.GetAllShowFavorObjects()); foreach (FavorObject fo in fList) { if (fo.RelationshipType == FavorRelationshipType.Couple) { if (___mState == MGState.Single) { ___mState = MGState.Marriage; } if (spouseid == fo.ID && ___mState != MGState.Propose) { ___mActor = ActorMgr.Self.Get(fo.ID); ___mNpcID = fo.ID; } } } return(false); }
public static bool CheckPropose_Prefix(FavorObject favorObj, ref int failReason, ref bool __result) { if (!enabled) { return(true); } if (!Environment.StackTrace.Contains("ExecuteGiveGift")) { return(true); } //Dbgl($"Checking proposal for {favorObj.ID}"); if (romanceMeta == null) { Dbgl("Problem getting romance meta data"); return(true); } FavorRelationshipData refData = FavorRelationshipData.GetRefData((int)favorObj.Relationship); if (refData.canPropose) { float num = (refData.proposeChance[1] - refData.proposeChance[0]) * (float)(favorObj.FavorValue - refData.MinValue) / (float)(refData.MaxValue - refData.MinValue) + refData.proposeChance[0]; Dbgl($"Vanilla confession chance: {num}"); num += settings.ProposePercentChanceIncrease * 0.01f; RomanceCounts rc = romanceMeta.romances.Find(r => r.id == favorObj.ID); if (rc != null) { num += settings.ProposePercentChanceIncreasePerProposal * 0.01f * rc.proposals; } Dbgl($"Modified confession chance: {num}"); if (new System.Random().NextDouble() < num) { __result = true; return(false); } } failReason = 12; __result = false; return(false); }
private static void BringBack(int id) { Actor actor = Module <ActorMgr> .Self.Get(id); actor.SetBehaviorState(BehaveState.Default, true); Module <ActorMgr> .Self.MoveToScenario(actor, "Main", ReturnLocations[id][0]); FavorObject f = Module <FavorManager> .Self.GetFavorObject(id); FavorRelationshipId r = f.Relationship; f.Relationship = FavorRelationshipId.Friend; FavorRelationshipUtil.TryUpgradeRelationShip(f, false, false, true); Module <FavorInfluenceManager> .Self.OnUpdateRelation(f.ID, r, f.Relationship); Module <FavorManager> .Self.RemoveToBlackList(f.ID); }
public static void Postfix(FavorObject favorObj, ref string __result) { if (!Enabled) { return; } try { if (favorObj == null || __result == null) { return; } __result = $"{__result} ({Format(favorObj)})"; } catch (Exception exception) { Main.Logger.Exception(exception); } }
private static int?GetNextFavorValue(FavorObject favor) { var relationship = FavorRelationshipData.GetRefData((int)favor.Relationship); if (relationship == null) { return(null); } if (favor.FavorValue >= 0) { return(relationship.CanUpgrade ? relationship.upgradeValue : (int?)null); } else { return(relationship.CanDowngrade ? relationship.downgradeValue : (int?)null); } }
static void Prefix(int userId) { if (!enabled) { return; } if (userId < 0) { return; } FavorObject f = FavorManager.Self.GetFavorObject(userId); if (f != null && f.RelationshipType == FavorRelationshipType.Couple) { Actor a = ActorMgr.Self.Get(f.ID); a.ReleaseStop(MGConst.BehaviourStop); a.SetSpouse(Module <Player> .Self.actor); } }
private static string Format(FavorObject favorObj) { var favor = favorObj.FavorValue; var favorString = favor.ToString("+#;-#;0"); var nextFavor = GetNextFavorValue(favorObj); if (nextFavor != null) { favorString = $"{favorString} / {nextFavor}"; } if (favor > 0) { favorString = favorString.Colored("green"); } else if (favor < 0) { favorString = favorString.Colored("red"); } return(favorString); }
// allowing romancing while married public static bool Pathea_Player_CanExpressRuntime_Patch_Prefix(int npcId, ref int result, ref bool __result) { if (!Main.enabled) { return(true); } result = -1; if (!Module <MGMgr> .Self.IsSingle()) { FavorObject f = FavorManager.Self.GetFavorObject(npcId); if (f.RelationshipType == FavorRelationshipType.Couple) { result = 3; __result = false; } else { result = -1; __result = true; } return(false); } return(true); }
private static void BringBack(int id) { Actor actor = Module <ActorMgr> .Self.Get(id); actor.SetBehaviorState(BehaveState.Default, true); Module <ActorMgr> .Self.MoveToScenario(actor, "Main", ReturnLocations[id][0]); FavorObject f = Module <FavorManager> .Self.GetFavorObject(id); FavorRelationshipId r = f.Relationship; f.Relationship = FavorRelationshipId.Friend; FavorRelationshipUtil.TryUpgradeRelationShip(f, false, false, true); Module <FavorInfluenceManager> .Self.OnUpdateRelation(f.ID, r, f.Relationship); if (typeof(FavorManager).GetMethod("RemoveFromBlackList") != null) { typeof(FavorManager).GetMethod("RemoveFromBlackList").Invoke(Module <FavorManager> .Self, new object[] { f.ID }); } else if (typeof(FavorManager).GetMethod("RemoveToBlackList") != null) { typeof(FavorManager).GetMethod("RemoveToBlackList").Invoke(Module <FavorManager> .Self, new object[] { f.ID }); } }
private static bool IsSpouse(NpcData obj) { FavorObject f = FavorManager.Self.GetFavorObject(obj.id); return((f.RelationshipType & FavorRelationshipType.Couple) == FavorRelationshipType.Couple); }
private static bool IsSpouse(int id) { FavorObject f = Module <FavorManager> .Self.GetFavorObject(id); return(f != null && f.RelationshipType == FavorRelationshipType.Couple); }
private static void OnGUI(UnityModManager.ModEntry modEntry) { float infoBoxWidth = (typeof(UnityModManager).GetProperty("Params", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null, new object[] { }) as UnityModManager.Param).WindowWidth * 0.9f; if (infoBoxWidth == 0) { infoBoxWidth = 960; } float buttonWidthShort = infoBoxWidth / 7f; float buttonWidthMedium = infoBoxWidth / 2f; if (Module <FavorManager> .Self?.GetAllShowFavorObjects() == null) { npcContent = null; return; } if (npcContent == null || npcContent.Length != Module <FavorManager> .Self.GetAllShowFavorObjects().Length + 1) { npcContent = new string[Module <FavorManager> .Self.GetAllShowFavorObjects().Length + 1]; } string[] tempNPC = new string[Module <FavorManager> .Self.GetAllShowFavorObjects().Length]; for (int i = 0; i < Module <FavorManager> .Self.GetAllShowFavorObjects().Length; i++) { FavorObject favorObject = Module <FavorManager> .Self.GetAllShowFavorObjects()[i]; NpcData npcData = Module <FavorManager> .Self.npcData[i]; string text = (npcData == null) ? favorObject.ID.ToString() : npcData.Name; string text2 = (!favorObject.IsDebut) ? string.Empty : "(?) "; tempNPC[i] = string.Concat(new object[] { text, " ", text2, favorObject.ID, " ", FavorRelationshipUtil.GetGenderRelation(npcData.gender, favorObject.Relationship), " ", favorObject.FavorValue }); } tempNPC.CopyTo(npcContent, 0); string[] sortedNPC = new string[Module <FavorManager> .Self.GetAllShowFavorObjects().Length + 1]; Array.Sort(tempNPC); tempNPC.CopyTo(sortedNPC, 0); npcContent[npcContent.Length - 1] = "All NPCs"; sortedNPC[sortedNPC.Length - 1] = "All NPCs"; GUILayout.Box("NPC Count:" + Module <FavorManager> .Self.GetAllShowFavorObjects().Length, new GUILayoutOption[0]); realSelectIndex = GUILayout.SelectionGrid(realSelectIndex, sortedNPC, 2, new GUILayoutOption[] { GUILayout.Width((float)infoBoxWidth) }); selectIndex = npcContent.IndexOf(sortedNPC[realSelectIndex]); GUILayout.Space(10); GUILayout.BeginHorizontal(new GUILayoutOption[0]); if (GUILayout.Button("Talk", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { if (selectIndex < npcContent.Length - 1) { FavorObject favorObject2 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; IFavorBehavior favorBehavior = favorObject2.FavorBehaviorList.Find((IFavorBehavior it) => it is FavorBehavior_Dialog); favorBehavior.Execute(favorObject2, null); favorObject2.IsDebut = false; } else { foreach (FavorObject favorObject3 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { IFavorBehavior favorBehavior2 = favorObject3.FavorBehaviorList.Find((IFavorBehavior it) => it is FavorBehavior_Dialog); favorBehavior2.Execute(favorObject3, null); favorObject3.IsDebut = false; } } } giftIdStr = GUILayout.TextField(giftIdStr, new GUILayoutOption[] { GUILayout.Width(58f) }); if (GUILayout.Button("Gift", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { int num; int.TryParse(giftIdStr, out num); if (selectIndex < npcContent.Length - 1) { FavorObject favorObject4 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; IFavorBehavior favorBehavior3 = favorObject4.FavorBehaviorList.Find((IFavorBehavior it) => it is FavorBehavior_GiveGift); favorBehavior3.Execute(favorObject4, new object[] { num }); favorObject4.IsDebut = false; } else { foreach (FavorObject favorObject5 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { IFavorBehavior favorBehavior4 = favorObject5.FavorBehaviorList.Find((IFavorBehavior it) => it is FavorBehavior_GiveGift); favorBehavior4.Execute(favorObject5, new object[] { num }); favorObject5.IsDebut = false; } } } addFavor = GUILayout.TextField(addFavor, new GUILayoutOption[] { GUILayout.Width(40f) }); if (GUILayout.Button("Add", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { int gainFavorValue; int.TryParse(addFavor, out gainFavorValue); if (selectIndex < npcContent.Length - 1) { FavorObject favorObject6 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; favorObject6.GainFavorValue(-1, gainFavorValue, true, true, true); favorObject6.IsDebut = false; } else { foreach (FavorObject favorObject7 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { Actor actor = Module <ActorMgr> .Self.Get(favorObject7.ID); if (!(actor == null) && (!(actor != null) || !actor.InFarAwayScene())) { favorObject7.GainFavorValue(-1, gainFavorValue, true, true, true); favorObject7.IsDebut = false; } } } } GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(new GUILayoutOption[0]); if (GUILayout.Button("Love", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { if (selectIndex < npcContent.Length - 1) { FavorObject favorObject10 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; FavorUtility.SetNpcRelation(favorObject10.ID, FavorRelationshipId.NormalLover, 0); favorObject10.IsDebut = false; } else { foreach (FavorObject favorObject11 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { FavorUtility.SetNpcRelation(favorObject11.ID, FavorRelationshipId.NormalLover, 0); favorObject11.IsDebut = false; } } } if (GUILayout.Button("BreakUp", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { if (selectIndex < npcContent.Length - 1) { FavorObject favorObject12 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; FavorRelationLover.Breakup(favorObject12); favorObject12.IsDebut = false; } else { foreach (FavorObject favorObject13 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { FavorRelationLover.Breakup(favorObject13); favorObject13.IsDebut = false; } } } if (GUILayout.Button("Marry", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { if (selectIndex < npcContent.Length - 1) { FavorObject favorObject14 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; FavorUtility.SetNpcRelation(favorObject14.ID, FavorRelationshipId.NormalCouple, 0); favorObject14.IsDebut = false; } else { foreach (FavorObject favorObject15 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { favorObject15.IsDebut = false; FavorUtility.SetNpcRelation(favorObject15.ID, FavorRelationshipId.NormalCouple, 0); } } } if (GUILayout.Button("Divorce", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { if (selectIndex < npcContent.Length - 1) { FavorObject favorObject16 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; FavorRelationMarriage.DoDivorce(favorObject16); favorObject16.IsDebut = false; } else { foreach (FavorObject favorObject17 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { FavorRelationMarriage.DoDivorce(favorObject17); favorObject17.IsDebut = false; } } } if (GUILayout.Button("Move", new GUILayoutOption[] { GUILayout.Width((float)buttonWidthShort) })) { if (selectIndex < npcContent.Length - 1) { FavorObject favorObject18 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; if (favorObject18 != null) { Actor actor2 = StoryHelper.GetActor(favorObject18.ID, string.Empty); if (actor2 == null) { actor2 = Module <NpcRepository> .Self.CreateNpc(favorObject18.ID); Debug.Log(string.Concat(new object[] { "创建NPC->", favorObject18.ID, " Name:", (!actor2) ? "Null" : actor2.ActorName, " 于地点:", Module <Player> .Self.actor.gamePos, new Vector3(0f, 2f, 0f) })); } if (actor2 != null) { actor2.ClearActionQueue(); actor2.DoCommand(ACType.Transfer, ACTransferPara.Construct(Module <ScenarioModule> .Self.CurrentScenarioName, Module <Player> .Self.actor.gamePos + new Vector3(0f, 2f, 0f), Vector3.zero)); } } } else { foreach (FavorObject favorObject19 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { if (favorObject19 != null) { Actor actor3 = StoryHelper.GetActor(favorObject19.ID, string.Empty); if (actor3 == null) { actor3 = Module <NpcRepository> .Self.CreateNpc(favorObject19.ID); Debug.Log(string.Concat(new object[] { "创建NPC->", favorObject19.ID, " Name:", (!actor3) ? "Null" : actor3.ActorName, " 于地点:", Module <Player> .Self.actor.gamePos, new Vector3(0f, 2f, 0f) })); } if (actor3 != null) { actor3.ClearActionQueue(); actor3.DoCommand(ACType.Transfer, ACTransferPara.Construct(Module <ScenarioModule> .Self.CurrentScenarioName, Module <Player> .Self.actor.gamePos + new Vector3(0f, 2f, 0f), Vector3.zero)); } } } } } GUILayout.EndHorizontal(); GUILayout.Space(10); GUILayout.BeginHorizontal(new GUILayoutOption[0]); GUILayout.Label($"Relation: {Enum.GetName(typeof(FavorRelationshipId), relationEnum[relationId])}", new GUILayoutOption[] { GUILayout.Width(150) }); relationId = (int)GUILayout.HorizontalSlider(relationId, 0, relationEnum.Length - 1, new GUILayoutOption[0]); if (GUILayout.Button("Set", new GUILayoutOption[] { GUILayout.Width(150) })) { try { int relationIdEnum = relationEnum[relationId]; if (selectIndex < npcContent.Length - 1) { FavorObject favorObject8 = Module <FavorManager> .Self.GetAllShowFavorObjects()[selectIndex]; FavorUtility.SetNpcRelation(favorObject8.ID, (FavorRelationshipId)relationIdEnum, 0); favorObject8.IsDebut = false; } else { foreach (FavorObject favorObject9 in Module <FavorManager> .Self.GetAllShowFavorObjects()) { FavorUtility.SetNpcRelation(favorObject9.ID, (FavorRelationshipId)relationIdEnum, 0); favorObject9.IsDebut = false; } } } catch { } } GUILayout.EndHorizontal(); GUILayout.Space(20); }
static void Prefix(FavorObject __instance) { Dbgl(__instance.ID.ToString()); }
private static void IFavorBehavior_Execute_Postfix(FavorBehavior_GiveGift __instance, FavorObject favorObject, object[] args, object __result) { if (!enabled) { return; } if (__result == null) { return; } GiveGiftResult ggr = (GiveGiftResult)__result; if (((int)args[0] != 7000041 && (int)args[0] != 8000019) || ggr.FeeLevel != FeeLevelEnum.Refuse) { return; } Dbgl($"rejected gift {args[0]}: feel { ((__result is GiveGiftResult) ? ((GiveGiftResult)__result).FeeLevel : 0) }"); for (int i = 0; i < romanceMeta.romances.Count; i++) { if (romanceMeta.romances[i].id == favorObject.ID) { if ((int)args[0] == 7000041) { romanceMeta.romances[i].confessions++; } else { romanceMeta.romances[i].proposals++; } return; } } romanceMeta.romances.Add(new RomanceCounts(favorObject.ID, (int)args[0])); }