Пример #1
0
        public override void OnEnabled()
        {
            base.OnEnabled();

            singleton = this;
            ev        = new EventHandlers();

            Check035();

            Exiled.Events.Handlers.Server.RoundStarted += ev.OnRoundStart;
            Exiled.Events.Handlers.Player.Escaping     += ev.OnEscaping;
            Exiled.Events.Handlers.Player.Died         += ev.OnPlayerDeath;
            Exiled.Events.Handlers.Server.RoundEnded   += ev.OnRoundEnd;
        }
        private void Update()
        {
            LocalUser localUser = LocalUserManager.GetFirstLocalUser();

            if (CharacterBody == null && localUser != null)
            {
                CharacterBody = localUser.cachedBody;
            }

            if (StatsDisplay == null && CharacterBody != null)
            {
                StatsDisplay = CharacterBody.gameObject.AddComponent <Api.Notification>();
                StatsDisplay.transform.SetParent(CharacterBody.transform);
                StatsDisplay.SetPosition(new Vector3((float)(Screen.width * 0.25), (float)(Screen.height * 0.25), 0));
                StatsDisplay.GetTitle       = () => "STATS";
                StatsDisplay.GetDescription = GetCharacterStats;
                StatsDisplay.GenericNotification.fadeTime = 1f;
                StatsDisplay.GenericNotification.duration = 1800f;
            }

            if (CharacterBody == null && StatsDisplay != null)
            {
                Destroy(StatsDisplay.RootObject);
                Destroy(StatsDisplay.GenericNotification);
                Destroy(StatsDisplay);
            }

            if (localUser != null && localUser.inputPlayer != null && localUser.inputPlayer.GetButton("info"))
            {
                if (StatsDisplay != null && StatsDisplay.RootObject != null)
                {
                    StatsDisplay.RootObject.SetActive(true);
                }
            }
            else
            {
                if (StatsDisplay != null && StatsDisplay.RootObject != null)
                {
                    StatsDisplay.RootObject.SetActive(false);
                }
            }
        }
        public static void Init(StatsDisplay statsDisplay, ConfigFile config)
        {
            //Soft dependency on mod loader
            _config       = config;
            _statsDisplay = statsDisplay;
            Type modDetailsType     = null;
            Type frogtownSharedType = null;

            foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
            {
                if (!a.FullName.StartsWith("FrogtownShared,"))
                {
                    continue;
                }
                var allTypes = a.GetTypes();
                foreach (var t in allTypes)
                {
                    switch (t.Name)
                    {
                    case "FrogtownModDetails":
                        modDetailsType = t;
                        break;

                    case "FrogtownShared":
                        frogtownSharedType = t;
                        break;
                    }
                }

                break;
            }

            try
            {
                if (modDetailsType == null || frogtownSharedType == null)
                {
                    return;
                }
                //Will be set back to true by the manager when it initializes
                statsDisplay.Enabled = false;

                var obj = Activator.CreateInstance(modDetailsType, "com.kookehs.statsdisplay");
                obj.SetFieldValue("description",
                                  "Displays character stats on Info Screen.", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
                obj.SetFieldValue("OnGUI", new UnityAction(() => { OnSettingsGui(); }), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
                obj.SetFieldValue("afterToggle", new UnityAction(() =>
                {
                    statsDisplay.Enabled = obj.GetPropertyValue <bool>("enabled", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
                }), System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);

                var register = frogtownSharedType.GetMethod("RegisterMod", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
                register?.Invoke(null, new[] { obj });

                InitSettings();
            }
            catch (Exception e)
            {
                Debug.Log("Failed to initialize mod manager features");
                Debug.Log(e.Message);
                Debug.Log(e.StackTrace);
            }
        }