12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // For modding, see PluginDiagMenuModding.c
- // !!! MODDING DISCLAIMER: These are debug functionality files, if you are thinking about modding the vanilla ones, do so at your own risk
- // These files will not be maintained with the thought of "what if a modder modded this" (Excluding the modding functionality of course)
- // Which is why the modding functionality was developed with the thought of the modded ones having their own isolated safe space
- class PluginDiagMenuServer : PluginDiagMenu
- {
- #ifdef DIAG_DEVELOPER
- static ref map<Man, int> m_Subscribers = new map<Man, int>;
-
- // A bit of a hack, because SP creates both Client and Server Plugins
- override private void RegisterDiags()
- {
- if (GetGame().IsMultiplayer())
- {
- super.RegisterDiags();
- }
- }
-
- //---------------------------------------------
- override void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
- {
- super.OnRPC(player, rpc_type, ctx);
-
- switch (rpc_type)
- {
- case ERPCs.DEV_DIAGMENU_SUBSCRIBE:
- {
- if (ctx.Read(CachedObjectsParams.PARAM1_INT))
- {
- int newMask = CachedObjectsParams.PARAM1_INT.param1;
- int currentMask = m_Subscribers.Get(player);
-
- if (newMask != currentMask)
- {
- if (newMask == 0)
- {
- m_Subscribers.Remove(player);
- }
- else
- {
- m_Subscribers.Set(player, newMask);
- }
- }
- }
- break;
- }
- }
- }
-
- //---------------------------------------------
- static void SendDataToSubscribersServer(Object target, ESubscriberSystems system, int rpc_type, Param data, bool guaranteed = true)
- {
- for (int i = 0; i < m_Subscribers.Count(); ++i)
- {
- Man man = m_Subscribers.GetKey(i);
- if (man)
- {
- int subscribedSystems = m_Subscribers.Get(man);
- if (system & subscribedSystems)
- {
- GetGame().RPCSingleParam( target, rpc_type, data, guaranteed, man.GetIdentity() );
- }
- }
- else
- {
- m_Subscribers.RemoveElement(i);
- i--;
- }
- }
- }
- #endif
- }
|