Пример #1
0
        /// <summary>
        /// Creates the function parameter list for the method that is delegated to some event
        /// </summary>
        /// <param name="e">Event</param>
        /// <param name="c">Client</param>
        /// <param name="arguments">Arguments</param>
        /// <returns>Argument list for some event</returns>
        private object[] GetArgumentParametersForEvent(RPEvent e, Client c, params object[] arguments)
        {
            List <object> paramList = new List <object>();

            if (e.options.Contains(Option.OPTION_INCLUDE_EVENT))
            {
                paramList.Add(e.eventName);
            }

            if (e.options.Contains(Option.OPTION_USES_CHARACTER))
            {
                Character character = PlayerManager.Instance().GetActiveCharacterForClient(c);
                paramList.Add(character);
            }
            else
            {
                paramList.Add(c);
            }

            for (int i = 0; i < arguments.Length; i++)
            {
                paramList.Add(arguments[i]);
            }


            return(paramList.ToArray());
        }
Пример #2
0
        /// <summary>
        /// Handles a server event
        /// </summary>
        /// <param name="player">Client who sent the event</param>
        /// <param name="eventName">Event name</param>
        /// <param name="arguments">Arguments that client sent</param>
        private void HandleEventWithName(Client player, string eventName, params object[] arguments)
        {
            if (events.ContainsKey(eventName))
            {
                RPEvent eventToInvoke = events[eventName];

                if (eventToInvoke.options.Contains(Option.OPTION_USES_CHARACTER) && !PlayerManager.Instance().IsClientUsingCharacter(player))
                {
                    return;
                }
                Type       type   = eventToInvoke.classInstance.GetType();
                MethodInfo method = type.GetMethod(eventToInvoke.method, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
                object[]   prs    = GetArgumentParametersForEvent(eventToInvoke, player, arguments);
                method.Invoke(eventToInvoke.classInstance, prs);
            }
        }