Пример #1
0
        private void MenuMouseFix()
        {
            var flag = BonfireManager.Instance.IsBonfireInteracting;

            if (m_lastMenuFix != flag)
            {
                m_lastMenuFix = flag;

                Character c = CharacterManager.Instance.GetFirstLocalCharacter();

                if (c.CharacterUI.PendingDemoCharSelectionScreen is Panel panel)
                {
                    if (m_lastMenuFix)
                    {
                        panel.Show();
                    }
                    else
                    {
                        panel.Hide();
                    }
                }
                else if (m_lastMenuFix)
                {
                    GameObject obj = new GameObject();
                    obj.transform.parent = c.transform;
                    obj.SetActive(true);

                    Panel newPanel = obj.AddComponent <Panel>();
                    At.SetValue(newPanel, typeof(CharacterUI), c.CharacterUI, "PendingDemoCharSelectionScreen");
                    newPanel.Show();
                }
            }
        }
Пример #2
0
        public IEnumerator BonfireCoroutine()
        {
            foreach (PlayerSystem ps in Global.Lobby.PlayersInLobby.Where(x => x.IsLocalPlayer))
            {
                Character c = ps.ControlledCharacter;
                c.Stats.RestoreAllVitals();
                At.SetValue(true, typeof(Character), c, "m_invincible");
                c.CharacterControl.InputLocked = true;
                c.CastSpell(Character.SpellCastType.Sit, c.gameObject, Character.SpellCastModifier.Immobilized, 1, -1f);
            }

            yield return(new WaitForSeconds(1f));

            while (IsBonfireInteracting || NetworkLevelLoader.Instance.IsGameplayPaused)
            {
                yield return(null);
            }

            foreach (Character c in CharacterManager.Instance.Characters.Values)
            {
                if (c.IsAI)
                {
                    if ((bool)OutSouls.config.GetValue(Settings.Bonfires_Heal_Enemies))
                    {
                        if (c.Health <= 0)
                        {
                            if (!PhotonNetwork.isNonMasterClientInRoom)
                            {
                                var wasEnabled = c.gameObject.activeSelf;
                                c.RessurectCampingSquad();
                                c.gameObject.SetActive(false);
                                if (wasEnabled)
                                {
                                    c.gameObject.SetActive(true);
                                }
                            }
                        }
                        else
                        {
                            c.ResetStats();
                        }
                    }
                }
                else
                {
                    At.SetValue(false, typeof(Character), c, "m_invincible");
                    c.CharacterControl.InputLocked = false;
                    c.ForceCancel(true, true);
                }
            }

            if ((bool)OutSouls.config.GetValue(Settings.Bonfires_Heal_Enemies))
            {
                foreach (SplitPlayer player in SplitScreenManager.Instance.LocalPlayers)
                {
                    player.CharUI.ShowInfoNotification("Nearby enemies have been resurrected...");
                }
                //StartCoroutine(OutSoulsGUI.Instance.SetMessage("Nearby foes have been resurrected...", 3));
            }
        }
Пример #3
0
        public IEnumerator ResetArea()
        {
            Dictionary <string, Vector3> positions = new Dictionary <string, Vector3>();

            if (!PhotonNetwork.isNonMasterClientInRoom)
            {
                foreach (PlayerSystem ps in Global.Lobby.PlayersInLobby)
                {
                    Character c = ps.ControlledCharacter;
                    positions.Add(c.UID, c.transform.position);
                }
            }

            BlackFade.Instance.StartFade(true);
            yield return(new WaitForSeconds(1f));

            IsBonfireInteracting = false;

            Area  area      = AreaManager.Instance.GetAreaFromSceneName(SceneManagerHelper.ActiveSceneName);
            float origReset = (float)At.GetValue(typeof(Area), area, "m_resetTime");

            At.SetValue(-999, typeof(Area), area, "m_resetTime");
            NetworkLevelLoader.Instance.ReloadLevel(0, true, -1, 0, true);

            while (NetworkLevelLoader.Instance.IsGameplayPaused)
            {
                yield return(null);
            }

            foreach (KeyValuePair <string, Vector3> entry in positions)
            {
                if (CharacterManager.Instance.GetCharacter(entry.Key) is Character c)
                {
                    c.Teleport(entry.Value, Quaternion.identity);

                    c.CharacterControl.InputLocked = false;
                    At.SetValue(false, typeof(Character), c, "m_invincible");

                    c.Stats.RestoreAllVitals();
                    c.ResetCastType();
                    c.ForceCancel(true, true);
                }
            }

            Debug.Log("Restoring original reset time to " + origReset);
            At.SetValue(origReset, typeof(Area), area, "m_resetTime");

            yield return(null);
        }
Пример #4
0
        // usually called from LoadScene. Also by the Sync functions when you join a host.
        public IEnumerator SetupBonfireLocal(Vector3 position, string uid)
        {
            Debug.Log("Setting up bonfire at: " + position.ToString() + ", uid: " + uid);

            var bonfire = new GameObject("Bonfire_" + uid);

            bonfire.transform.position = position;

            var activatedCampfire = ResourcesPrefabManager.Instance.GetItemPrefab(5000101).GetComponent <Deployable>().DeployedStateItemPrefab.VisualPrefab;
            var fireVisuals       = Instantiate(activatedCampfire.gameObject);

            fireVisuals.transform.parent   = bonfire.transform;
            fireVisuals.transform.position = bonfire.transform.position;

            var swordVisuals = Instantiate(ResourcesPrefabManager.Instance.GetItemPrefab(2000151).VisualPrefab.gameObject);

            swordVisuals.transform.parent   = bonfire.transform;
            swordVisuals.transform.position = bonfire.transform.position + Vector3.up;
            swordVisuals.transform.rotation = Quaternion.Euler(0, 0, 90);

            var sigilVisuals = Instantiate(ResourcesPrefabManager.Instance.GetItemPrefab(8000010).VisualPrefab.gameObject);

            sigilVisuals.transform.parent   = bonfire.transform;
            sigilVisuals.transform.position = bonfire.transform.position;

            // interaction gameobject base
            GameObject actionHolder = new GameObject("Interaction_Holder");

            actionHolder.transform.parent   = bonfire.transform;
            actionHolder.transform.position = bonfire.transform.position;

            // setup components
            InteractionTriggerBase triggerBase  = actionHolder.AddComponent <InteractionTriggerBase>();
            InteractionActivator   activator    = actionHolder.AddComponent <InteractionActivator>();
            InteractionBase        interactBase = actionHolder.AddComponent <InteractionBase>();

            // setup the trigger base
            triggerBase.SetHolderUID(uid);
            triggerBase.GenerateColliderIfNone = true;
            triggerBase.IsLargeTrigger         = true;
            triggerBase.DetectionPriority      = -9999;
            triggerBase.SetActivator(activator);

            // setup the interaction activator
            activator.SetUID(uid);
            At.SetValue("Rest at <color=#fc4e03>Bonfire</color>", typeof(InteractionActivator), activator, "m_overrideBasicText");
            At.SetValue(interactBase, typeof(InteractionActivator), activator, "m_sceneBasicInteraction");

            // setup the event interaction base
            interactBase.OnActivationEvent = BonfireEvent;

            // =========== finalize =========== //
            bonfire.gameObject.SetActive(true);

            yield return(new WaitForSeconds(0.1f));

            //activator.Reregister();
            foreach (ParticleSystem ps in fireVisuals.GetComponentsInChildren <ParticleSystem>())
            {
                ps.Play();
                var m = ps.main;
                m.prewarm     = true;
                m.playOnAwake = true;
            }
            foreach (Light light in fireVisuals.GetComponentsInChildren <Light>())
            {
                light.gameObject.SetActive(true);
            }
            foreach (SoundPlayer sound in fireVisuals.GetComponentsInChildren <SoundPlayer>())
            {
                sound.Play(false);
            }
        }