示例#1
0
        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);
            }
示例#3
0
        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);
        }
示例#4
0
        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);
            }
示例#9
0
        // 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);
        }
示例#10
0
        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 });
            }
        }
示例#11
0
        private static bool IsSpouse(NpcData obj)
        {
            FavorObject f = FavorManager.Self.GetFavorObject(obj.id);

            return((f.RelationshipType & FavorRelationshipType.Couple) == FavorRelationshipType.Couple);
        }
示例#12
0
        private static bool IsSpouse(int id)
        {
            FavorObject f = Module <FavorManager> .Self.GetFavorObject(id);

            return(f != null && f.RelationshipType == FavorRelationshipType.Couple);
        }
示例#13
0
        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);
        }
示例#14
0
 static void Prefix(FavorObject __instance)
 {
     Dbgl(__instance.ID.ToString());
 }
示例#15
0
        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]));
        }