// 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 (g_Game.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)
{
g_Game.RPCSingleParam( target, rpc_type, data, guaranteed, man.GetIdentity() );
}
}
else
{
m_Subscribers.RemoveElement(i);
i--;
}
}
}
#endif
}
Esc
↑↓ to navigate · ↵ to open · type Class.member to scope