Пример #1
0
        private static void ScanForNetworkAttributes(On.RoR2.Networking.NetworkMessageHandlerAttribute.orig_CollectHandlers orig)
        {
            orig();
            const BindingFlags allFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic;

            var clientListInfo = typeof(NetworkMessageHandlerAttribute).GetField("clientMessageHandlers", allFlags);
            var clientList     = (List <NetworkMessageHandlerAttribute>)clientListInfo?.GetValue(typeof(NetworkMessageHandlerAttribute));

            var serverListInfo = typeof(NetworkMessageHandlerAttribute).GetField("serverMessageHandlers", allFlags);
            var serverList     = (List <NetworkMessageHandlerAttribute>)serverListInfo?.GetValue(typeof(NetworkMessageHandlerAttribute));

            FieldInfo netAttribHandler = typeof(NetworkMessageHandlerAttribute).GetField("messageHandler", allFlags);

            var        members = typeof(Main).GetMember(methodName, allFlags);
            MemberInfo handler = null;

            if (members.Length == 1)
            {
                handler = members[0];
            }
            else
            {
                Main.LogF("Did not find member: " + methodName + " properly." + members.Length + " members found");
            }

            if (handler == null)
            {
                Main.LogF("Handler was null");
                return;
            }
            var attrib = handler.GetCustomAttribute <NetworkMessageHandlerAttribute>();

            if (attrib == null)
            {
                Main.LogF("Handler did not have proper attribute");
                return;
            }
            var del = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), (MethodInfo)handler);

            netAttribHandler?.SetValue(attrib, del);

            if (attrib.client)
            {
                clientList?.Add(attrib);
            }
            if (attrib.server)
            {
                serverList?.Add(attrib);
            }
        }
Пример #2
0
        private static void ScanForNetworkAttributes(On.RoR2.Networking.NetworkMessageHandlerAttribute.orig_CollectHandlers orig)
        {
            orig();
            try {
                const BindingFlags allFlags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic;

                var clientListInfo = typeof(NetworkMessageHandlerAttribute).GetField("clientMessageHandlers", allFlags);
                var clientList     = (List <NetworkMessageHandlerAttribute>)clientListInfo?.GetValue(typeof(NetworkMessageHandlerAttribute));

                var serverListInfo = typeof(NetworkMessageHandlerAttribute).GetField("serverMessageHandlers", allFlags);
                var serverList     = (List <NetworkMessageHandlerAttribute>)serverListInfo?.GetValue(typeof(NetworkMessageHandlerAttribute));

                FieldInfo netAttribHandler = typeof(NetworkMessageHandlerAttribute).GetField("messageHandler", allFlags);

                foreach (MemberInfo m in typeof(ModListAPI).GetMembers(allFlags))
                {
                    var attrib = m.GetCustomAttribute <NetworkMessageHandlerAttribute>();
                    if (attrib == null)
                    {
                        continue;
                    }

                    var del = (NetworkMessageDelegate)Delegate.CreateDelegate(typeof(NetworkMessageDelegate), (MethodInfo)m);
                    netAttribHandler?.SetValue(attrib, del);

                    if (attrib.client)
                    {
                        clientList?.Add(attrib);
                    }
                    if (attrib.server)
                    {
                        serverList?.Add(attrib);
                    }
                }
            }
            catch (Exception e) {
                Fail(e, "ScanForNetworkAttributes");
            }
        }