Dayz Explorer 1.29.162510
Loading...
Searching...
No Matches
pluginremoteplayerdebugserver.c
Go to the documentation of this file.
1class PluginRemotePlayerDebugServer extends PluginBase
2{
3 ref set<PlayerBase> m_ClientList = new set<PlayerBase>;
4
5 ref array<ref RemotePlayerStatDebug> m_PlayerDebugStats = new array<ref RemotePlayerStatDebug>;
6 ref map<PlayerBase, ref RemotePlayerDamageDebug> m_PlayerDebugDamage = new map<PlayerBase, ref RemotePlayerDamageDebug>;
7 float m_AccuTime;
8 const int INTERVAL = 1;
9
11 bool m_Watching;
12
13 override void OnUpdate(float delta_time)
14 {
15 #ifdef SERVER
16 if ( m_ClientList.Count() != 0 )
17 {
18 m_AccuTime += delta_time;
19
20 if ( m_AccuTime > INTERVAL )
21 {
22 m_AccuTime = 0;
23 SendDebug();
24 }
25 }
26 #endif
27 }
28
29 void SetWatching(bool enable)
30 {
31 m_Watching = enable;
32 }
33
34 bool GetWatching()
35 {
36 return m_Watching;
37 }
38
39 void GatherPlayerInfo()
40 {
41 if (!g_Game.IsDedicatedServer())
42 return;
43
44 array<Man> players = new array<Man>;
45 g_Game.GetPlayers(players);
46 m_PlayerDebugStats.Clear();
47
48 foreach (Man playerMan : players)
49 {
50 PlayerBase player = PlayerBase.Cast(playerMan);
52 m_PlayerDebugStats.Insert(rpd);
53 }
54 }
55
56 void SendDebug()
57 {
58#ifdef DIAG_DEVELOPER
59 GatherPlayerInfo();
60 array<ref RemotePlayerDamageDebug> player_damage = new array<ref RemotePlayerDamageDebug>;
61
62 for(int i = 0; i < m_ClientList.Count(); ++i)
63 {
64 PlayerBase player = m_ClientList[i];
65 if (player)
66 {
67 ScriptRPC rpc = new ScriptRPC();
68 rpc.Write(m_PlayerDebugStats);
69
70 foreach (PlayerBase player2, RemotePlayerDamageDebug value : m_PlayerDebugDamage)
71 {
72 if (player2)
73 {
74 player_damage.Insert(value);
75
76 }
77 //int xs = 1 + 1;
78 }
79
80 rpc.Write(player_damage);
81
82 rpc.Send(player, ERPCs.DEV_PLAYER_DEBUG_DATA, true, player.GetIdentity());
83 m_PlayerDebugDamage.Clear();
84 }
85 else
86 {
87 m_ClientList.Remove(i);
88 --i;
89 }
90 }
91#endif
92 }
93
94
95 void OnDamageEvent(PlayerBase player, TotalDamageResult damageResult)
96 {
97 if ( !GetWatching() || !damageResult )
98 return;
99
100 float damage_global = damageResult.GetDamage("","");
101 float damage_blood = damageResult.GetDamage("","Blood");
102 float damage_shock = damageResult.GetDamage("","Shock");
103
104 if ( m_PlayerDebugDamage.Contains(player) )
105 {
106 m_PlayerDebugDamage.Get(player).AddDamage( damage_global, damage_blood, damage_shock );
107 }
108 else
109 {
110 RemotePlayerDamageDebug rpdd = new RemotePlayerDamageDebug(player);
111 rpdd.AddDamage(damage_global, damage_blood, damage_shock);
112 m_PlayerDebugDamage.Insert(player, rpdd);
113 }
114 }
115
116
117 void OnRequestReceived(PlayerBase player, bool enable)
118 {
119 int index = m_ClientList.Find(player);
120
121 if (enable)
122 {
123 m_ClientList.Insert(player);
124 SetWatching(true);
125 }
126 else if (index != -1 && m_ClientList.Count() != 0)
127 {
128 m_ClientList.Remove(index);
129 }
130
131 if ( m_ClientList.Count() == 0 )
132 {
133 SetWatching(false);
134 }
135 }
136
137 void OnRPC(ParamsReadContext ctx, PlayerBase player)
138 {
139 bool enable;
140 ctx.Read(enable);
141 OnRequestReceived(player, enable);
142 }
143}
Plugin interface for controlling of agent pool system.
Definition pluginbase.c:2
void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
DayZGame g_Game
Definition dayzgame.c:3942
ERPCs
Definition erpcs.c:2
Serializer ParamsReadContext
Definition gameplay.c:15
void OnUpdate()
Definition tools.c:349
eRemoteDebugType m_DebugType
ref map< PlayerBase, ref RemotePlayerDamageDebug > m_PlayerDebugDamage
ref array< ref RemotePlayerStatDebug > m_PlayerDebugStats
void RemotePlayerStatDebug(PlayerBase player)