示例#1
0
            static void Postfix(Actor npcActor, TeeterGameCtr __instance, ref bool ___playing, ref bool ___waitForInput,
                                ref float ___startInputTime, ref float ___curTime, TeeterActorCtr ___player, TeeterActorCtr ___npc, ref WhiteCat.Tween.Tweener ___teeterTW, ref int ___gameScores, ref int ___teeterDir)
            {
                lastTeeterActor = npcActor;
                if (!enabled || !settings.ReplaceTeeterTotterGame || !CanTeeterInteract(npcActor))
                {
                    return;
                }
                teeterGameRunning   = true;
                ___teeterTW.enabled = false;
                //___teeterDir = 0;
                Transform t1 = AccessTools.FieldRefAccess <TeeterActorCtr, GameObject>(___player, "tempmodel").transform;
                Transform t2 = AccessTools.FieldRefAccess <TeeterActorCtr, GameObject>(___npc, "tempmodel").transform;

                Vector3 midpoint = (t1.position + t2.position) / 2;

                Player.Self.actor.gamePos = new Vector3(214.5f, 48.4f, -68.5f);
                lastTeeterActor.gamePos   = new Vector3(216.0f, 48.4f, -69.8f);

                for (int i = 0;
                     i < AccessTools.FieldRefAccess <TeeterActorCtr, GameObject>(___player, "tempmodel")
                     .GetComponentsInChildren <Renderer>(true).Length;
                     i++)
                {
                    AccessTools.FieldRefAccess <TeeterActorCtr, GameObject>(___player, "tempmodel").GetComponentsInChildren <Renderer>(true)[i].enabled = false;
                }
                for (int i = 0;
                     i < AccessTools.FieldRefAccess <TeeterActorCtr, GameObject>(___npc, "tempmodel")
                     .GetComponentsInChildren <Renderer>(true).Length;
                     i++)
                {
                    AccessTools.FieldRefAccess <TeeterActorCtr, GameObject>(___npc, "tempmodel").GetComponentsInChildren <Renderer>(true)[i].enabled = false;
                }
            }
示例#2
0
            static bool Prefix(TeeterGameCtr __instance, bool ___playing, ref bool ___waitForInput, ref float ___startInputTime, ref float ___curTime, ref TeeterActorCtr ___player, ref TeeterActorCtr ___npc)
            {
                if (!enabled || !settings.ReplaceTeeterTotterGame || !CanTeeterInteract(lastTeeterActor))
                {
                    return(true);
                }

                if (___playing)
                {
                    __instance.StopJump(null);
                    if (___waitForInput)
                    {
                        MethodInfo dynMethod = __instance.GetType().GetMethod("ScoreChange", BindingFlags.NonPublic | BindingFlags.Instance);
                        if (Input.GetKeyDown(settings.KissKey))
                        {
                            lastAnim = 1;
                            DoInteract(Player.Self.actor, lastTeeterActor, lastAnim);
                            dynMethod.Invoke(__instance, new object[] { 0 });
                        }
                        else if (Input.GetKeyDown(settings.HugKey))
                        {
                            lastAnim = 0;
                            DoInteract(Player.Self.actor, lastTeeterActor, lastAnim);
                            dynMethod.Invoke(__instance, new object[] { 0 });
                        }
                        else if (Input.GetKeyDown(settings.MassageKey))
                        {
                            lastAnim = 2;
                            DoInteract(Player.Self.actor, lastTeeterActor, lastAnim);
                            dynMethod.Invoke(__instance, new object[] { 0 });
                        }
                        ___startInputTime += Time.deltaTime;
                        if (___startInputTime >= OtherConfig.Self.TeetGameWaitTime)
                        {
                            lastAnim = 999;
                            dynMethod.Invoke(__instance, new object[] { 0 });
                            ___waitForInput = false;
                        }
                    }
                    else
                    {
                        ___startInputTime = 0f;
                        if (!isInteracting && __instance.OnActorSpeak != null)
                        {
                            System.Random rand = new System.Random();
                            int           idx  = rand.Next(0, 3);
                            rightAnim = idx;
                            __instance.OnActorSpeak(false, InteractDlg[Interacts[idx]]);
                            startNotInputTime = 0f;
                            ___waitForInput   = true;
                        }
                    }
                    ___curTime += Time.deltaTime;
                    if (___curTime >= OtherConfig.Self.TeetGameTime)
                    {
                        ___playing        = false;
                        teeterGameRunning = false;
                        lastTeeterActor   = null;
                        MethodInfo dynMethod2 = __instance.GetType().GetMethod("EndGame", BindingFlags.NonPublic | BindingFlags.Instance);
                        dynMethod2.Invoke(__instance, new object[] { 0 });
                    }
                }

                return(false);
            }