DayZ 1.24
Loading...
Searching...
No Matches
PluginDeveloperSync.c
Go to the documentation of this file.
2{
3 STATS = 1,
4 LEVELS = 2,
5 MODS = 4,
6 AGENTS = 8,
7 STOMACH = 16,
10}
11
12
14{
17
19 {
20 m_Bitmask = 0;
22 }
23}
24
25class PluginDeveloperSync extends PluginBase
26{
27 int m_DetailedInfoRequested = 0;
30
38
44
46 {
47 m_RegisteredPlayers = new map<PlayerBase, ref RegisterPlayerData>;
48 m_PlayerStatsSynced = new array<ref SyncedValue>;
49 m_PlayerLevelsSynced = new array<ref SyncedValueLevel>;
50 m_PlayerModsSynced = new array<ref SyncedValueModifier>;
51 m_PlayerAgentsSynced = new array<ref SyncedValueAgent>;
52 m_PlayerStomachSynced = new array<ref Param>;
53
54 m_StatsUpdateStatus = false;
55 m_LevelsUpdateStatus = false;
56 m_ModsUpdateStatus = false;
57 m_AgentsUpdateStatus = false;
58 m_StomachUpdateStatus = false;
59 }
60
61 //================================================================
62 // Init / Update
63 //================================================================
64 override void OnInit()
65 {
66 super.OnInit();
67
68 if (GetGame().IsServer())
69 {
70 //create timer
72 }
73 }
74
75
76 void EnableUpdate(bool enable, int type, PlayerBase player)
77 {
78 //set update by type
81
82
83 switch (type)
84 {
85 case ERPCs.DEV_STATS_UPDATE:
86 {
88 break;
89 }
90
91 case ERPCs.DEV_LEVELS_UPDATE:
92 {
94 break;
95 }
96
97 case ERPCs.DEV_MODS_UPDATE:
98 {
100 break;
101 }
102
103 case ERPCs.DEV_AGENTS_UPDATE:
104 {
106 break;
107 }
108
109 case ERPCs.DEV_STOMACH_UPDATE:
110 {
112 break;
113 }
114 case ERPCs.DEV_TEMP_UPDATE:
115 {
117 break;
118 }
119 }
120
121 //remove players with empty mask
122 for (int i = 0; i < m_RegisteredPlayers.Count(); i++)
123 {
124 if (m_RegisteredPlayers.GetElement(i).m_Bitmask == 0)
125 {
126 m_RegisteredPlayers.RemoveElement(i);
127 i = 0;
128 }
129 }
130
131 //start/stop the tick based on existence/absence of players registered
132 if (m_UpdateTimer)
133 {
134 if (m_RegisteredPlayers.Count() == 0)
135 m_UpdateTimer.Stop();
136 else if (!m_UpdateTimer.IsRunning())
137 m_UpdateTimer.Run(1, this, "Update", NULL, true);
138 }
139 }
140
141
142 void Update()
143 {
144 if (!GetDayZGame().IsMultiplayer() || GetDayZGame().IsServer())
145 {
146 for (int i = 0; i < m_RegisteredPlayers.Count(); i++)
147 {
148 PlayerBase player = m_RegisteredPlayers.GetKey(i);
149 if (!player || !player.IsAlive())
150 {
151 m_RegisteredPlayers.RemoveElement(i);
152 i--;
153 }
154 else
155 {
156 int bit_mask = m_RegisteredPlayers.Get(player).m_Bitmask;
157
158 if ((PDS_SYSTEMS.MODS & bit_mask) != 0)
159 {
161 if (PDS_SYSTEMS.MODS_DETAILED & bit_mask)
163 }
164 if ((PDS_SYSTEMS.LEVELS & bit_mask) != 0)
166
167 if ((PDS_SYSTEMS.STATS & bit_mask) != 0)
169 if ((PDS_SYSTEMS.STOMACH & bit_mask) != 0)
171 if ((PDS_SYSTEMS.AGENTS & bit_mask) != 0)
173 if ((PDS_SYSTEMS.TEMPERATURE & bit_mask))
175 }
176 }
177 }
178 }
179
180 //turns on/off a bit for a given system marking it active/inactive
182 {
184 {
185 int current_mask = m_RegisteredPlayers.Get(player).m_Bitmask;
186 if (state)
187 m_RegisteredPlayers.Get(player).m_Bitmask = current_mask | system_bit;
188 else
189 m_RegisteredPlayers.Get(player).m_Bitmask = current_mask & ~system_bit;
190 }
191
192 }
193
194 //turns on/off a bit for a given system marking it active/inactive
196 {
198 return (m_RegisteredPlayers.Get(player).m_Bitmask & system_bit);
199 return false;
200 }
201
202
203 //--- Register / Unregister player
205 {
207 m_RegisteredPlayers.Insert(player, new RegisterPlayerData);
208 }
209
210 /*
211 void UnregisterPlayer( PlayerBase player )
212 {
213 if ( IsPlayerRegistered( player ) )
214 {
215 m_RegisteredPlayers.Remove( player );
216 }
217 }
218 */
220 {
221 if (m_RegisteredPlayers.Contains(player))
222 return true;
223
224 return false;
225 }
226
227 //================================================================
228 // RPC
229 //================================================================
231 {
232 if (!GetGame().IsDebug())
233 return;
234
235 switch (rpc_type)
236 {
237 case ERPCs.DEV_STATS_UPDATE:
238 {
239 EnableUpdate(GetRPCUpdateState(ctx), ERPCs.DEV_STATS_UPDATE, player); break;
240 }
241
242 case ERPCs.DEV_LEVELS_UPDATE:
243 {
244 EnableUpdate(GetRPCUpdateState(ctx), ERPCs.DEV_LEVELS_UPDATE, player); break;
245 }
246
247 case ERPCs.DEV_MODS_UPDATE:
248 {
249 EnableUpdate(GetRPCUpdateState(ctx), ERPCs.DEV_MODS_UPDATE, player); break;
250 }
251
252 case ERPCs.DEV_AGENTS_UPDATE:
253 {
254 EnableUpdate(GetRPCUpdateState(ctx), ERPCs.DEV_AGENTS_UPDATE, player); break;
255 }
256
257 case ERPCs.DEV_STOMACH_UPDATE:
258 {
259 EnableUpdate(GetRPCUpdateState(ctx), ERPCs.DEV_STOMACH_UPDATE, player); break;
260 }
261
262 case ERPCs.DEV_RPC_STATS_DATA:
263 {
264 OnRPCStats(ctx); break;
265 }
266
267 case ERPCs.DEV_RPC_LEVELS_DATA:
268 {
269 OnRPCLevels(ctx); break;
270 }
271
272 case ERPCs.DEV_RPC_MODS_DATA:
273 {
274 OnRPCMods(ctx); break;
275 }
276
277 case ERPCs.DEV_RPC_MODS_DATA_DETAILED:
278 {
279 OnRPCModsDetailed(ctx); break;
280 }
281
282 case ERPCs.DEV_RPC_AGENTS_DATA:
283 {
284 OnRPCAgents(ctx); break;
285 }
286 case ERPCs.DEV_RPC_STOMACH_DATA:
287 {
288 OnRPCStomach(ctx); break;
289 }
290
291 case ERPCs.DEV_RPC_MODS_ACTIVATE:
292 {
294 }
295 case ERPCs.DEV_RPC_MODS_DETAILED:
296 {
298 }
299
300 case ERPCs.DEV_RPC_MODS_DEACTIVATE:
301 {
303 }
304
305 case ERPCs.DEV_RPC_MODS_LOCK:
306 {
307 int id;
308 bool lock;
310 LockModifier(id, lock, player); break;
311 }
312
313 case ERPCs.DEV_RPC_MODS_RESET:
314 {
315 player.GetModifiersManager().DeactivateAllModifiers();
316 break;
317 }
318
319 case ERPCs.DEV_RPC_STATS_RESET:
320 {
321 player.GetPlayerStats().ResetAllStats();
322 break;
323 }
324
325 case ERPCs.DEV_RPC_STAT_SET:
326 {
328 break;
329 }
330 case ERPCs.DEV_TEMP_UPDATE:
331 {
333 break;
334 }
335 }
336 }
337
338 //get update status from ctx data
340 {
341 Param1<bool> p = new Param1<bool>(0);
342 if (ctx.Read(p))
343 return p.param1;
344
345 return false;
346 }
347
348 //get modifier id from ctx data
350 {
351 Param1<int> p = new Param1<int>(0);
352 if (ctx.Read(p))
353 return p.param1;
354
355 return 0;
356 }
357
358 //get modifier lock state from lock ctx data
360 {
361 Param2<int, bool> p = new Param2<int, bool>(0, false);
362 if (ctx.Read(p))
363 {
364 id = p.param1;
365 lock = p.param2;
366 }
367 }
368
369 //============================================
370 // STATS
371 //============================================
372 //send player stats through RPC
374 {
375 //write and send values
376 if (player)
377 {
379
380 //param count
381 for (int i = 0; i < player.m_PlayerStats.GetPCO().Get().Count(); i++)
382 {
383 string label = player.m_PlayerStats.GetPCO().Get().Get(i).GetLabel();
384 float value = (float) player.m_PlayerStats.GetPCO().Get().Get(i).Get();
385 float value_norm = (float) player.m_PlayerStats.GetPCO().Get().Get(i).GetNormalized();
387 }
388 rpc_params.Insert(new Param3<string, float, float>("(NaS)Immunity", player.GetImmunity(), 0));
389 rpc_params.Insert(new Param3<string, float, float>("(NaS)BrokenLegs", player.m_BrokenLegState, 0));
390
391 rpc_params.InsertAt(new Param1<int>(rpc_params.Count()), 0); // param count
392 //send params
393 GetDayZGame().RPC(player, ERPCs.DEV_RPC_STATS_DATA, rpc_params, true, player.GetIdentity());
394 }
395 }
396
397 //Display player stats
399 {
400 //clear values
401 m_PlayerStatsSynced.Clear();
402
403
405
407
408 //get param count
409 int param_count = 0;
410 if (ctx.Read(p_count))
411 param_count = p_count.param1;
412
413 //read values and set
414 for (int i = 0; i < param_count; i++)
415 {
416 ctx.Read(p);
417 m_PlayerStatsSynced.Insert(new SyncedValue(p.param1, p.param2, false, p.param3));
418 }
419 }
420
421 //Update data on local
423 {
425
426 //clear values
427 m_PlayerStatsSynced.Clear();
428
429 //set values
430 for (int i = 0; i < player.m_PlayerStats.GetPCO().Get().Count(); i++)
431 {
432 string label = player.m_PlayerStats.GetPCO().Get().Get(i).GetLabel();
433 float value = player.m_PlayerStats.GetPCO().Get().Get(i).Get();
434 float value_norm = player.m_PlayerStats.GetPCO().Get().Get(i).GetNormalized();
435 m_PlayerStatsSynced.Insert(new SyncedValue(label, value, false, value_norm));
436 }
437
438 m_PlayerStatsSynced.Insert(new SyncedValue("(NaS)Immunity", player.GetImmunity(), false, 0));
439 m_PlayerStatsSynced.Insert(new SyncedValue("(NaS) BrokenLegs", player.m_BrokenLegState, false, 0));
440 }
441
443 {
445 if (ctx.Read(p))
446 {
447 for (int i = 0; i < player.m_PlayerStats.GetPCO().Get().Count(); i++)
448 {
449 string label = player.m_PlayerStats.GetPCO().Get().Get(i).GetLabel();
450 if (label == p.param1)
451 player.m_PlayerStats.GetPCO().Get().Get(i).SetByFloatEx(p.param2);
452
453 }
454 }
455
456 }
457
458 //============================================
459 // LEVELS
460 //============================================
461 //send player stats through RPC
463 {
464 //write and send values
465 if (player)
466 {
468
469 rpc_params.Insert(new Param3<string, float, float>("Immunity: " + typename.EnumToString(EStatLevels, player.GetImmunityLevel()), player.GetImmunityLevel(), player.GetBordersImmunity()));
470 rpc_params.Insert(new Param3<string, float, float>("Blood: " + typename.EnumToString(EStatLevels, player.GetStatLevelBlood()), player.GetStatLevelBlood(), player.GetStatBordersBlood()));
471 rpc_params.Insert(new Param3<string, float, float>("Health: " + typename.EnumToString(EStatLevels, player.GetStatLevelHealth()), player.GetStatLevelHealth(), player.GetStatBordersHealth()));
472 rpc_params.Insert(new Param3<string, float, float>("Energy: " + typename.EnumToString(EStatLevels, player.GetStatLevelEnergy()), player.GetStatLevelEnergy(), player.GetStatBordersEnergy()));
473 rpc_params.Insert(new Param3<string, float, float>("Water: " + typename.EnumToString(EStatLevels, player.GetStatLevelWater()), player.GetStatLevelWater(), player.GetStatBordersWater()));
474
475 int param_count = rpc_params.Count();
476 rpc_params.InsertAt(new Param3<string, float, float>("PARAM_COUNT", param_count, 0), 0);
477 //send params
478 GetDayZGame().RPC(player, ERPCs.DEV_RPC_LEVELS_DATA, rpc_params, true, player.GetIdentity());
479 }
480 }
481
482 //Display player stats
484 {
485 //clear values
486 m_PlayerLevelsSynced.Clear();
487
489
490 //get param count
491 int param_count = 0;
492 if (ctx.Read(p3))
493 param_count = p3.param2;
494
495 //read values and set
496 for (int i = 0; i < param_count; i++)
497 {
498 if (ctx.Read(p3))
499 m_PlayerLevelsSynced.Insert(new SyncedValueLevel(p3.param1, p3.param2, p3.param3));
500 }
501 }
502
503
505 {
506 //write and send values
507 if (player)
508 {
510
511 //get modifiers
512 ModifiersManager mods_manager = player.GetModifiersManager();
513
514 //param count
516 mods_manager.DbgGetModifiers(modifiers);
517
518 float param_count = (float) modifiers.Count();
520
521 //set modifiers
522 for (int i = 0; i < modifiers.Count(); ++i)
523 {
524 int id = modifiers.Get(i).GetID();
525 string name = modifiers.Get(i).GetName();
526 bool active = modifiers.Get(i).IsActive();
527 bool locked = modifiers.Get(i).IsLocked();
528
530 }
531
532 //send params
533 GetDayZGame().RPC(player, ERPCs.DEV_RPC_MODS_DATA, rpc_params, true, player.GetIdentity());
534 }
535 }
536
537 //============================================
538 // MODS
539 //============================================
540 //send player mods through RPC
542 {
543 //write and send values
544 if (player)
545 {
547 ModifiersManager mods_manager = player.GetModifiersManager();
548 int mod_id = m_RegisteredPlayers.Get(player).m_DetailedModifierIndex;
549 p1.param1 = mods_manager.GetModifier(mod_id).GetDebugText();
550 //send params
551 if (p1.param1 != "")
552 GetDayZGame().RPCSingleParam(player, ERPCs.DEV_RPC_MODS_DATA_DETAILED, p1, true, player.GetIdentity());
553 }
554 }
555
556 //Display player modifiers
558 {
559 //clear values
560 m_PlayerModsSynced.Clear();
561
562 //ref Param3<string, float, bool> p = new Param3<string, float, bool>( "", 0, false );
563 Param1<int> p1 = new Param1<int>(0);
565 //get param count
566 int param_count = 0;
567 if (ctx.Read(p1))
568 param_count = (int) p1.param1;
569
570 //read values and set
571 for (int i = 0; i < param_count; i++)
572 {
573 if (ctx.Read(p4))
574 m_PlayerModsSynced.Insert(new SyncedValueModifier(p4.param1, p4.param2, p4.param3, p4.param4));
575 }
576 }
577
579 {
581
582 //get param count
583 if (ctx.Read(p1))
584 m_PlayerModsDetailedSynced = p1.param1;
585 }
586
587
588 /*
589 //Activates modifier with given ID
590 void RequestDetailedInfo( int id, PlayerBase player = NULL )
591 {
592 int modifier_id = Math.AbsInt( id );
593 if(id == m_DetailedInfoRequested)
594 {
595 m_DetailedInfoRequested = 0;//repeated request --> disable
596 }
597 else
598 {
599 m_DetailedInfoRequested = modifier_id;
600 }
601 }
602 */
603 //Activates modifier with given ID
605 {
606 int modifier_id = Math.AbsInt(id);
607 m_RegisteredPlayers.Get(player).m_DetailedModifierIndex = modifier_id;
608
609 if (IsSetSystemInBitmask(player, PDS_SYSTEMS.MODS_DETAILED))
610 SetSystemInBitmask(player, PDS_SYSTEMS.MODS_DETAILED, false);
611 else
612 SetSystemInBitmask(player, PDS_SYSTEMS.MODS_DETAILED, true);
613 }
614
615
616 //Activates modifier with given ID
618 {
619 if (!player)
621 ModifiersManager mods_manager = player.GetModifiersManager();
622 mods_manager.ActivateModifier(Math.AbsInt(id));
623 }
624
625 //Activates modifier with given ID
627 {
628 if (!player)
630 ModifiersManager mods_manager = player.GetModifiersManager();
631 mods_manager.DeactivateModifier(Math.AbsInt(id));
632 }
633
634 //Activates modifier with given ID
635 void LockModifier(int id, bool lock, PlayerBase player = NULL)
636 {
637 if (!player)
639 ModifiersManager mods_manager = player.GetModifiersManager();
640 mods_manager.SetModifierLock(Math.AbsInt(id), lock);
641 }
642
644 {
645 if (!player)
647 ModifiersManager mods_manager = player.GetModifiersManager();
648
649 return mods_manager.GetModifierLock(Math.AbsInt(id));
650 }
651
652 //============================================
653 // TEMPERATURE
654 //============================================
655
657 {
658 if (player)
659 {
660 CachedObjectsParams.PARAM1_STRING.param1 = player.m_Environment.GetDebugMessage();
661 GetDayZGame().RPCSingleParam(player, ERPCs.DEV_TEMP_UPDATE, CachedObjectsParams.PARAM1_STRING, true, player.GetIdentity());
662 }
663 }
664
666 {
667 if (GetGame().IsServer() && GetGame().IsMultiplayer())
668 EnableUpdate(GetRPCUpdateState(ctx), ERPCs.DEV_TEMP_UPDATE, player);
669 else if (!GetGame().IsMultiplayer() || GetGame().IsClient())
670 {
672 m_EnvironmentDebugMessage = CachedObjectsParams.PARAM1_STRING.param1;
673 }
674
675 }
676
677 //============================================
678 // AGENTS
679 //============================================
680 //send player mods through RPC
682 {
683 //write and send values
684 if ((player && player.GetIdentity() && player.m_AgentPool != null) || (player && !GetGame().IsMultiplayer() && player.m_AgentPool != null))
685 {
686
687 //get agent pool data
689 player.m_AgentPool.GetDebugObject(agent_pool);
690
691 GetDayZGame().RPC(player, ERPCs.DEV_RPC_AGENTS_DATA, agent_pool, true, player.GetIdentity());
692 }
693 }
694
695 //Display player modifiers
697 {
698 //clear values
699 m_PlayerAgentsSynced.Clear();
700
702 Param1<int> p1 = new Param1<int>(0);
703
704 //get param count
705 int param_count = 0;
706 if (ctx.Read(p1))
707 param_count = p1.param1;
708
709 //read values and set
710 for (int i = 0; i < param_count; i++)
711 {
712 ctx.Read(p3);
713 m_PlayerAgentsSynced.Insert(new SyncedValueAgent(p3.param1, p3.param2, p3.param3));
714 }
715 }
716
717 //============================================
718 // STOMACH
719 //============================================
720
722 {
723 //write and send values
724 if (player)
725 {
727 int count = player.m_PlayerStomach.GetDebugObject(stomach);
728 stomach.InsertAt(new Param1<int>(count), 0);
729
730 GetDayZGame().RPC(player, ERPCs.DEV_RPC_STOMACH_DATA, stomach, true, player.GetIdentity());
731 }
732 }
733
734
736 {
737 //clear values
738 m_PlayerStomachSynced.Clear();
739
740 Param1<int> p1 = new Param1<int>(0);
741 int param_count = 0;
742 if (ctx.Read(p1))
743 param_count = p1.param1;
744
745 if (param_count)
746 {
747 //invidividual stomach items
748 for (int i = 0; i < param_count; i++)
749 {
751 ctx.Read(p4);
752 m_PlayerStomachSynced.Insert(p4);
753 }
754 //volume
756 ctx.Read(p1b);
757 m_PlayerStomachSynced.Insert(p1b);
758 }
759 }
760
761 //Update data on local
762 /*
763 void UpdateAgentsLocal()
764 {
765 PlayerBase player = PlayerBase.Cast( GetDayZGame().GetPlayer() );
766
767 if ( player )
768 {
769 //clear values
770 m_PlayerAgentsSynced.Clear();
771
772 //get agent pool data
773 array<ref Param> agent_pool = new array<ref Param>;
774 player.m_AgentPool.GetDebugObject( agent_pool );
775
776 //get agents count
777 Param1<int> p1 = Param1<int>.Cast( agent_pool.Get( 0 ) );
778 int agents_count = p1.param1;
779
780 //set synced data
781 for ( int i = 0; i < agents_count; i++ )
782 {
783 string name = Param2<string,string>.Cast(agent_pool.Get(i+1)).param1;
784 string count = Param2<string,string>.Cast(agent_pool.Get(i+1)).param2;
785 m_PlayerAgentsSynced.Insert( new SyncedValueAgent( name, count, false ) );
786 }
787 }
788 }
789 */
790 //================================================================
791 // FOCUS
792 //================================================================
794 {
795 GetGame().GetInput().ChangeGameFocus(1);
796 GetGame().GetUIManager().ShowUICursor(true);
797 }
798
800 {
801 GetGame().GetInput().ChangeGameFocus(-1);
802 GetGame().GetUIManager().ShowUICursor(false);
803 }
804
806 {
807 if (GetGame().GetInput().HasGameFocus())
808 {
809 GetGame().GetInput().ChangeGameFocus(1);
810 GetGame().GetUIManager().ShowUICursor(true);
811 }
812 else
813 {
814 GetGame().GetInput().ResetGameFocus();
815 GetGame().GetUIManager().ShowUICursor(false);
816 }
817 }
818}
Param3 int
ActionInput GetInput()
Definition ActionBase.c:989
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
DayZGame GetDayZGame()
Definition DayZGame.c:3530
ERPCs
Definition ERPCs.c:2
EStatLevels
Definition EStatLevels.c:2
PlayerBase GetPlayer()
void ModifiersManager(PlayerBase player)
array< ref PlayerStatBase > Get()
@ STOMACH
@ MODS_DETAILED
@ TEMPERATURE
void RegisterPlayerData()
enum PDS_SYSTEMS m_Bitmask
int m_DetailedModifierIndex
ref Timer m_UpdateTimer
Definition RadialMenu.c:20
void SyncedValueAgent(string name, string value, int id)
void SyncedValueLevel(string name, float value, float value2)
Definition SyncedValue.c:43
static ref Param1< string > PARAM1_STRING
Definition EnMath.c:7
void OnRPCTemp(ParamsReadContext ctx, PlayerBase player)
ref array< ref SyncedValueAgent > m_PlayerAgentsSynced
ref map< PlayerBase, ref RegisterPlayerData > m_RegisteredPlayers
void SendRPCMods(PlayerBase player)
void OnRPCStomach(ParamsReadContext ctx)
int GetRPCModifierID(ParamsReadContext ctx)
void PluginDeveloperSync()
void SendRPCStats(PlayerBase player)
bool IsPlayerRegistered(PlayerBase player)
string m_PlayerModsDetailedSynced
override void OnInit()
void OnRPCMods(ParamsReadContext ctx)
string m_EnvironmentDebugMessage
void OnRPCLevels(ParamsReadContext ctx)
void SendRPCLevels(PlayerBase player)
void DeactivateModifier(int id, PlayerBase player=NULL)
void OnRPCStats(ParamsReadContext ctx)
void SendRPCModsDetail(PlayerBase player)
void SendRPCStomach(PlayerBase player)
ref array< ref SyncedValue > m_PlayerStatsSynced
void SetSystemInBitmask(PlayerBase player, int system_bit, bool state)
void ActivateModifier(int id, PlayerBase player=NULL)
ref array< ref SyncedValueLevel > m_PlayerLevelsSynced
bool IsSetSystemInBitmask(PlayerBase player, int system_bit)
ref Timer m_UpdateTimer
void RegisterPlayer(PlayerBase player)
void SendRPCAgents(PlayerBase player)
void OnRPCStatSet(ParamsReadContext ctx, PlayerBase player)
bool GetRPCUpdateState(ParamsReadContext ctx)
void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
ref array< ref SyncedValueModifier > m_PlayerModsSynced
void EnableUpdate(bool enable, int type, PlayerBase player)
void OnRPCAgents(ParamsReadContext ctx)
void LockModifier(int id, bool lock, PlayerBase player=NULL)
void RequestDetailedInfo(int id, notnull PlayerBase player)
void SendRPCTemp(PlayerBase player)
bool IsModifierLocked(int id, PlayerBase player=NULL)
ref array< ref Param > m_PlayerStomachSynced
void OnRPCModsDetailed(ParamsReadContext ctx)
void GetRPCModifierLock(ParamsReadContext ctx, out int id, out bool lock)
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto native CGame GetGame()
static proto int AbsInt(int i)
Returns absolute value.
const int CALL_CATEGORY_GAMEPLAY
Definition tools.c:10