/// <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()); }
/// <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); } }