DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
PluginDeveloperSync.c
См. документацию.
2{
3 STATS = 1,
4 LEVELS = 2,
5 MODS = 4,
6 AGENTS = 8,
7 STOMACH = 16,
10 HEALTH = 128,
11}
12
13
15{
18
20 {
21 m_Bitmask = 0;
23 }
24}
25
26class PluginDeveloperSync extends PluginBase
27{
31
40
41 protected bool m_IsTargetChanged; // client update
42 protected ref map<PlayerBase, bool> m_HealthObserverMode; // server tracking of player X health mode selection | true = target / false = self
43 protected ref map<PlayerBase, EntityAI> m_HealthObserverEntity; // server tracking of player X health target
44
50
69
70 //================================================================
71 // Init / Update
72 //================================================================
73 override void OnInit()
74 {
75 super.OnInit();
76
77 if ( GetGame().IsServer() )
78 {
79 //create timer
81 }
82 }
83
84
85 void EnableUpdate( bool enable, int type, PlayerBase player )
86 {
87 //set update by type
88 if ( !IsPlayerRegistered(player))
89 RegisterPlayer( player );
90
91
92 switch ( type )
93 {
94 case ERPCs.DEV_STATS_UPDATE:
95 {
96 SetSystemInBitmask(player, PDS_SYSTEMS.STATS, enable);
97 break;
98 }
99
100 case ERPCs.DEV_LEVELS_UPDATE:
101 {
102 SetSystemInBitmask(player, PDS_SYSTEMS.LEVELS, enable);
103 break;
104 }
105
106 case ERPCs.DEV_MODS_UPDATE:
107 {
108 SetSystemInBitmask(player, PDS_SYSTEMS.MODS, enable);
109 break;
110 }
111
112 case ERPCs.DEV_AGENTS_UPDATE:
113 {
114 SetSystemInBitmask(player, PDS_SYSTEMS.AGENTS, enable);
115 break;
116 }
117
118 case ERPCs.DEV_STOMACH_UPDATE:
119 {
120 SetSystemInBitmask(player, PDS_SYSTEMS.STOMACH, enable);
121 break;
122 }
123 case ERPCs.DEV_TEMP_UPDATE:
124 {
125 SetSystemInBitmask(player, PDS_SYSTEMS.TEMPERATURE, enable);
126 break;
127 }
128 case ERPCs.DEV_HEALTH_UPDATE:
129 {
130 SetSystemInBitmask(player, PDS_SYSTEMS.HEALTH, enable);
131 break;
132 }
133 }
134
135 //remove players with empty mask
136 for (int i = 0; i < m_RegisteredPlayers.Count(); i++)
137 {
138 if (m_RegisteredPlayers.GetElement(i).m_Bitmask == 0)
139 {
140 m_RegisteredPlayers.RemoveElement(i);
141 i = 0;
142 }
143 }
144
145 //start/stop the tick based on existence/absence of players registered
146 if ( m_UpdateTimer )
147 {
148 if ( m_RegisteredPlayers.Count() == 0)
149 {
150 m_UpdateTimer.Stop();
151 }
152 else if (!m_UpdateTimer.IsRunning())
153 {
154 m_UpdateTimer.Run( 1, this, "Update", NULL, true );
155 }
156 }
157 }
158
159
160 void Update()
161 {
162 if ( !GetDayZGame().IsMultiplayer() || GetDayZGame().IsServer() )
163 {
164 for ( int i = 0; i < m_RegisteredPlayers.Count(); ++i )
165 {
166 PlayerBase player = m_RegisteredPlayers.GetKey( i );
167 if ( !player || !player.IsAlive() )
168 {
169 m_RegisteredPlayers.RemoveElement(i);
170 i--;
171 }
172 else
173 {
174 int bit_mask = m_RegisteredPlayers.Get( player ).m_Bitmask;
175
176 if ((PDS_SYSTEMS.MODS & bit_mask) != 0 )
177 {
178 SendRPCMods( player);
179 if ( PDS_SYSTEMS.MODS_DETAILED & bit_mask )
180 SendRPCModsDetail( player);
181 }
182 if ((PDS_SYSTEMS.LEVELS & bit_mask) != 0 )
183 {
184 SendRPCLevels( player );
185 }
186
187 if ((PDS_SYSTEMS.STATS & bit_mask) != 0 )
188 {
189 SendRPCStats( player );
190 }
191 if ((PDS_SYSTEMS.STOMACH & bit_mask) != 0 )
192 {
193 SendRPCStomach( player );
194 }
195 if ((PDS_SYSTEMS.AGENTS & bit_mask) != 0 )
196 {
197 SendRPCAgents( player );
198 }
199 if ((PDS_SYSTEMS.TEMPERATURE & bit_mask) )
200 {
201 SendRPCTemp( player );
202 }
203 if ((PDS_SYSTEMS.HEALTH & bit_mask) )
204 {
205 SendRPCHealth( player );
206 }
207 }
208 }
209 }
210 }
211
212 //turns on/off a bit for a given system marking it active/inactive
213 void SetSystemInBitmask( PlayerBase player, int system_bit, bool state)
214 {
215 if ( IsPlayerRegistered(player) )
216 {
217 int current_mask = m_RegisteredPlayers.Get(player).m_Bitmask;
218 if (state)
219 m_RegisteredPlayers.Get(player).m_Bitmask = current_mask | system_bit;
220 else
221 m_RegisteredPlayers.Get(player).m_Bitmask = current_mask & ~system_bit;
222 }
223
224 }
225
226 //turns on/off a bit for a given system marking it active/inactive
227 bool IsSetSystemInBitmask( PlayerBase player, int system_bit)
228 {
229 if ( IsPlayerRegistered(player) )
230 {
231 return (m_RegisteredPlayers.Get(player).m_Bitmask & system_bit);
232 }
233 return false;
234 }
235
236
237
238
239 //--- Register / Unregister player
241 {
242 if ( !IsPlayerRegistered( player ) )
243 {
244 m_RegisteredPlayers.Insert( player, new RegisterPlayerData );
245 }
246 }
247
248 /*
249 void UnregisterPlayer( PlayerBase player )
250 {
251 if ( IsPlayerRegistered( player ) )
252 {
253 m_RegisteredPlayers.Remove( player );
254 }
255 }
256*/
258 {
259 if ( m_RegisteredPlayers.Contains( player ))
260 {
261 return true;
262 }
263
264 return false;
265 }
266
267 //================================================================
268 // RPC
269 //================================================================
270 void OnRPC( PlayerBase player, int rpc_type, ParamsReadContext ctx )
271 {
272 if ( !GetGame().IsDebug() )
273 {
274 return;
275 }
276
277 switch ( rpc_type )
278 {
279 case ERPCs.DEV_STATS_UPDATE:
280 {
281 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_STATS_UPDATE, player ); break;
282 }
283
284 case ERPCs.DEV_LEVELS_UPDATE:
285 {
286 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_LEVELS_UPDATE, player ); break;
287 }
288
289 case ERPCs.DEV_MODS_UPDATE:
290 {
291 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_MODS_UPDATE, player ); break;
292 }
293
294 case ERPCs.DEV_AGENTS_UPDATE:
295 {
296 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_AGENTS_UPDATE, player ); break;
297 }
298
299 case ERPCs.DEV_STOMACH_UPDATE:
300 {
301 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_STOMACH_UPDATE, player ); break;
302 }
303
304 case ERPCs.DEV_HEALTH_UPDATE:
305 {
306 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_HEALTH_UPDATE, player ); break;
307 }
308
309 case ERPCs.DEV_RPC_STATS_DATA:
310 {
311 OnRPCStats( ctx ); break;
312 }
313
314 case ERPCs.DEV_RPC_LEVELS_DATA:
315 {
316 OnRPCLevels( ctx ); break;
317 }
318
319 case ERPCs.DEV_RPC_MODS_DATA:
320 {
321 OnRPCMods( ctx ); break;
322 }
323
324 case ERPCs.DEV_RPC_MODS_DATA_DETAILED:
325 {
326 OnRPCModsDetailed( ctx ); break;
327 }
328
329 case ERPCs.DEV_RPC_AGENTS_DATA:
330 {
331 OnRPCAgents( ctx ); break;
332 }
333 case ERPCs.DEV_RPC_STOMACH_DATA:
334 {
335 OnRPCStomach( ctx ); break;
336 }
337
338 case ERPCs.DEV_RPC_MODS_ACTIVATE:
339 {
340 ActivateModifier( GetRPCModifierID( ctx ), player ); break;
341 }
342 case ERPCs.DEV_RPC_MODS_DETAILED:
343 {
344 RequestDetailedInfo( GetRPCModifierID( ctx ), player ); break;
345 }
346
347 case ERPCs.DEV_RPC_MODS_DEACTIVATE:
348 {
349 DeactivateModifier( GetRPCModifierID( ctx ), player ); break;
350 }
351
352 case ERPCs.DEV_RPC_MODS_LOCK:
353 {
354 int id;
355 bool lock;
356 GetRPCModifierLock( ctx, id, lock );
357 LockModifier( id, lock, player ); break;
358 }
359
360 case ERPCs.DEV_RPC_MODS_RESET:
361 {
362 player.GetModifiersManager().DeactivateAllModifiers();
363 break;
364 }
365
366 case ERPCs.DEV_RPC_STATS_RESET:
367 {
368 player.GetPlayerStats().ResetAllStats();
369 break;
370 }
371
372 case ERPCs.DEV_RPC_STAT_SET:
373 {
374 OnRPCStatSet(ctx, player);
375 break;
376 }
377 case ERPCs.DEV_TEMP_UPDATE:
378 {
379 OnRPCTemp(ctx, player);
380 break;
381 }
382 case ERPCs.DEV_RPC_HEALTH_DATA:
383 {
384 OnRPCHealth(ctx, player); break;
385 }
386
387 case ERPCs.DEV_RPC_HEALTH_SET:
388 {
389 OnRPCHealthSet(ctx, player);
390 break;
391 }
392
393 case ERPCs.DEV_RPC_HORTICULTURE_UPDATE:
394 {
395 OnRPCHorticultUpdate(ctx, player);
396 break;
397 }
398
399 case ERPCs.DEV_RPC_HORTICULTURE_SPEED:
400 {
401 OnRPCHorticultureSpeed(ctx, player);
402 break;
403 }
404 }
405 }
406
407 //get update status from ctx data
409 {
410 Param1<bool> p = new Param1<bool>( 0 );
411 if ( ctx.Read( p ) )
412 {
413 return p.param1;
414 }
415
416 return false;
417 }
418
419 //get modifier id from ctx data
421 {
422 Param1<int> p = new Param1<int>( 0 );
423 if ( ctx.Read( p ) )
424 {
425 return p.param1;
426 }
427
428 return 0;
429 }
430
431 //get modifier lock state from lock ctx data
432 void GetRPCModifierLock( ParamsReadContext ctx, out int id, out bool lock )
433 {
434 Param2<int, bool> p = new Param2<int, bool>( 0, false );
435 if ( ctx.Read( p ) )
436 {
437 id = p.param1;
438 lock = p.param2;
439 }
440 }
441
442 //============================================
443 // STATS
444 //============================================
445 //send player stats through RPC
447 {
448 //write and send values
449 if ( player )
450 {
451 array<ref Param> rpc_params = new array<ref Param>;
452
453 //param count
454 for ( int i = 0; i < player.m_PlayerStats.GetPCO().Get().Count(); i++ )
455 {
456 string label = player.m_PlayerStats.GetPCO().Get().Get( i ).GetLabel();
457 float value = (float) player.m_PlayerStats.GetPCO().Get().Get( i ).Get();
458 float value_norm = (float) player.m_PlayerStats.GetPCO().Get().Get( i ).GetNormalized();
459 rpc_params.Insert( new Param3<string, float, float>( label, value, value_norm ) );
460 }
461 rpc_params.Insert(new Param3<string, float, float>( "(NaS)Immunity", player.GetImmunity(),0 ));
462 rpc_params.Insert(new Param3<string, float, float>( "(NaS)BrokenLegs", player.m_BrokenLegState,0 ));
463
464 rpc_params.InsertAt( new Param1<int>(rpc_params.Count() ), 0);// param count
465 //send params
466 GetDayZGame().RPC( player, ERPCs.DEV_RPC_STATS_DATA, rpc_params, true, player.GetIdentity() );
467 }
468 }
469
470 //Display player stats
472 {
473 //clear values
474 m_PlayerStatsSynced.Clear();
475
476
477 Param1<int> p_count = new Param1<int>(0);
478
480
481 //get param count
482 int param_count = 0;
483 if ( ctx.Read(p_count) )
484 {
485 param_count = p_count.param1;
486 }
487
488 //read values and set
489 for ( int i = 0; i < param_count; i++ )
490 {
491 ctx.Read(p);
492 m_PlayerStatsSynced.Insert( new SyncedValue( p.param1, p.param2, false, p.param3 ) );
493 }
494 }
495
496 //Update data on local
498 {
499 PlayerBase player = PlayerBase.Cast( GetDayZGame().GetPlayer() );
500
501 //clear values
502 m_PlayerStatsSynced.Clear();
503
504 //set values
505 for ( int i = 0; i < player.m_PlayerStats.GetPCO().Get().Count(); i++ )
506 {
507 string label = player.m_PlayerStats.GetPCO().Get().Get( i ).GetLabel();
508 float value = player.m_PlayerStats.GetPCO().Get().Get( i ).Get();
509 float value_norm = player.m_PlayerStats.GetPCO().Get().Get( i ).GetNormalized();
510 m_PlayerStatsSynced.Insert( new SyncedValue( label, value, false, value_norm ) );
511 }
512
513 m_PlayerStatsSynced.Insert(new SyncedValue( "(NaS)Immunity", player.GetImmunity() , false, 0));
514 m_PlayerStatsSynced.Insert(new SyncedValue( "(NaS) BrokenLegs", player.m_BrokenLegState, false, 0));
515 }
516
518 {
520 if ( ctx.Read(p) )
521 {
522 for ( int i = 0; i < player.m_PlayerStats.GetPCO().Get().Count(); i++ )
523 {
524 string label = player.m_PlayerStats.GetPCO().Get().Get( i ).GetLabel();
525 if ( label == p.param1 )
526 {
527 player.m_PlayerStats.GetPCO().Get().Get( i).SetByFloatEx(p.param2);
528 }
529
530 }
531 }
532
533 }
534
535 //============================================
536 // HEALTH
537 //============================================
542
544 {
545 return m_IsTargetChanged;
546 }
547
548 void SetTargetChanged(bool state)
549 {
550 m_IsTargetChanged = state;
551 }
552
554 {
555 //write and send values
556 if ( player )
557 {
558 array<ref Param> rpc_params = new array<ref Param>;
559
560 EntityAI target;
561 if (m_HealthObserverMode.Get(player) == false)
562 target = player;
563 else
564 {
566 target = EntityAI.Cast(itemDiagPlugin.GetWatchedItem(player));
567 }
568
569 if (target)
570 {
571 DamageZoneMap dmgZones = target.GetEntityDamageZoneMap();
572
573 SetupZoneValues(rpc_params, dmgZones, target, "Health", 0);
574 SetupZoneValues(rpc_params, dmgZones, target, "Shock", 1);
575 SetupZoneValues(rpc_params, dmgZones, target, "Blood", 2);
576 }
577
578 bool targetChanged = false;
579 if (target != m_HealthObserverEntity.Get(player))
580 {
581 targetChanged = true;
582 m_HealthObserverEntity.Set(player, target);
583 }
584
585 rpc_params.InsertAt( new Param2<int, bool>(rpc_params.Count(), targetChanged), 0);
586
587 GetDayZGame().RPC( player, ERPCs.DEV_RPC_HEALTH_DATA, rpc_params, true, player.GetIdentity() );
588 }
589 }
590
592 {
593 m_TargetHealthSynced.Clear();
594
595 Param2<int, bool> paramsHeader = new Param2<int, bool>(0, false);
596 Param4<string, float, float, bool> p = new Param4<string, float, float, bool>("", 0, 0, false);
597
598 int paramCount = 0;
599 if ( ctx.Read(paramsHeader) )
600 {
601 paramCount = paramsHeader.param1;
602 SetTargetChanged(paramsHeader.param2);
603 }
604
605 for ( int i = 0; i < paramCount; i++ )
606 {
607 ctx.Read(p);
608 m_TargetHealthSynced.Insert( new SyncedValue( p.param1, p.param2, p.param4, p.param3 ) );
609 }
610 }
611
612 void SetupZoneValues(inout array<ref Param> rpc_params, DamageZoneMap dmgZones, EntityAI target, string healthType, int typeID)
613 {
614 array<string> outHealthTypes = new array<string>;
615
616 //title entry
617 bool isTitleEntry = true;
618 rpc_params.Insert( new Param4<string, float, float, bool>( "", 0, typeID, isTitleEntry ) );
619
620 // global entry
621 isTitleEntry = false;
622 float value;
623 target.GetAdditionalHealthTypes("", outHealthTypes);
624 if (healthType == "Health" || outHealthTypes.Find(healthType) != -1) // zone might not have additional health type
625 {
626 value = target.GetHealth("", healthType);
627 rpc_params.Insert( new Param4<string, float, float, bool>( "Global", value, typeID, isTitleEntry ) );
628 }
629
630 //entries
631 int count = dmgZones.Count();
632 for (int i = 0; i < count; i++)
633 {
634 string zoneName = dmgZones.GetKey(i);
635 outHealthTypes.Clear();
636 target.GetAdditionalHealthTypes(zoneName, outHealthTypes);
637
638 if (healthType != "Health")
639 {
640 if (outHealthTypes.Find(healthType) == -1)
641 continue;
642 }
643
644 if (target.GetMaxHealth(zoneName, healthType) == 0)
645 continue;
646
647 isTitleEntry = false;
648 value = target.GetHealth(zoneName, healthType);
649 rpc_params.Insert( new Param4<string, float, float, bool>( zoneName, value, typeID, isTitleEntry ) );
650 }
651 }
652
653 // Used for client requesting health change or targeting mode (self/target) change
655 {
657 if ( !ctx.Read(p) )
658 return;
659
660 int buttonID = p.param1;
661 string zoneName = p.param2;
662 string healthType = p.param3;
663
664 if (buttonID > 3) // target change only
665 {
666 if (buttonID == 4) // ButtonTarget
667 m_HealthObserverMode.Set(player, true);
668 else if (buttonID == 5) // ButtonSelf
669 m_HealthObserverMode.Set(player, false);
670
671 return;
672 }
673
674 EntityAI target;
675 if (m_HealthObserverMode.Get(player) == false)
676 target = player;
677 else
678 {
680 target = EntityAI.Cast(itemDiagPlugin.GetWatchedItem(player));
681 }
682
683 if (zoneName == "Global")
684 zoneName = "";
685
686 float zoneMax = target.GetMaxHealth(zoneName, healthType);
687 float zoneCurrentHealth = target.GetHealth(zoneName, healthType);
688 float targetHealth;
689
690 if (buttonID == 0) // ButtonMin
691 targetHealth = 0;
692 else if (buttonID == 1) // ButtonMax
693 targetHealth = zoneMax;
694 else if (buttonID == 2) // ButtonAdd
695 targetHealth = zoneCurrentHealth + zoneMax * 0.1;
696 else if (buttonID == 3) // ButtonSubtract
697 targetHealth = zoneCurrentHealth - zoneMax * 0.1;
698
699 target.SetHealth(zoneName, healthType, targetHealth);
700 }
701
703 {
704 Param6<int, GardenBase, int, int, int, int> p = new Param6<int, GardenBase, int, int, int, int>(-1, null, 0, 0, 0, 0);
705 if ( !ctx.Read(p) )
706 return;
707
708 GardenBase garden = p.param2;
709
710 if (p.param1 != -1 && garden)
711 {
712 Slot gSlot = garden.GetSlotByIndex(p.param1);
713 if (gSlot && gSlot.GetPlant())
714 gSlot.GetPlant().DebugSetTimes(p.param3, p.param4, p.param5, p.param6);
715 }
716 else
717 PlantBase.DebugSetGlobalTimes(p.param3, p.param4, p.param5, p.param6);
718 }
719
721 {
722 Param1<float> p = new Param1<float>(1);
723 if (!ctx.Read(p))
724 return;
725
726 PlantBase.DebugSetTickSpeedMultiplier(p.param1);
727 }
728
729 //============================================
730 // LEVELS
731 //============================================
732 //send player stats through RPC
734 {
735 //write and send values
736 if ( player )
737 {
738 array<ref Param> rpc_params = new array<ref Param>;
739
740 rpc_params.Insert(new Param3<string, float, float>( "Immunity: "+ typename.EnumToString(EStatLevels, player.GetImmunityLevel() ),player.GetImmunityLevel(), player.GetBordersImmunity()));
741 rpc_params.Insert(new Param3<string, float, float>( "Blood: "+ typename.EnumToString(EStatLevels, player.GetStatLevelBlood()),player.GetStatLevelBlood(), player.GetStatBordersBlood()));
742 rpc_params.Insert(new Param3<string, float, float>( "Health: "+ typename.EnumToString(EStatLevels, player.GetStatLevelHealth() ),player.GetStatLevelHealth(), player.GetStatBordersHealth()));
743 rpc_params.Insert(new Param3<string, float, float>( "Energy: "+ typename.EnumToString(EStatLevels, player.GetStatLevelEnergy() ),player.GetStatLevelEnergy(), player.GetStatBordersEnergy()));
744 rpc_params.Insert(new Param3<string, float, float>( "Water: "+ typename.EnumToString(EStatLevels, player.GetStatLevelWater() ),player.GetStatLevelWater(), player.GetStatBordersWater()));
745
746 int param_count = rpc_params.Count();
747 rpc_params.InsertAt( new Param3<string, float, float>( "PARAM_COUNT", param_count,0 ), 0);
748 //send params
749 GetDayZGame().RPC( player, ERPCs.DEV_RPC_LEVELS_DATA, rpc_params, true, player.GetIdentity() );
750 }
751 }
752
753 //Display player stats
755 {
756 //clear values
757 m_PlayerLevelsSynced.Clear();
758
760
761 //get param count
762 int param_count = 0;
763 if ( ctx.Read(p3) )
764 {
765 param_count = p3.param2;
766 }
767
768 //read values and set
769 for ( int i = 0; i < param_count; i++ )
770 {
771 if ( ctx.Read(p3) )
772 m_PlayerLevelsSynced.Insert( new SyncedValueLevel( p3.param1, p3.param2, p3.param3 ) );
773 }
774 }
775
776
777 void SendRPCMods( PlayerBase player )
778 {
779 //write and send values
780 if ( player )
781 {
782 array<ref Param> rpc_params = new array<ref Param>;
783
784 //get modifiers
785 ModifiersManager mods_manager = player.GetModifiersManager();
786
787 //param count
789 mods_manager.DbgGetModifiers( modifiers );
790
791 float param_count = ( float ) modifiers.Count();
792 rpc_params.Insert( new Param1<int>( param_count ));
793
794 //set modifiers
795 for ( int i = 0; i < modifiers.Count(); ++i )
796 {
797 int id = modifiers.Get(i).GetID();
798 string name = modifiers.Get(i).GetName();
799 bool active = modifiers.Get(i).IsActive();
800 bool locked = modifiers.Get(i).IsLocked();
801
802 rpc_params.Insert( new Param4<int, string, bool, bool>( id, name, active, locked ) );
803 }
804
805 //send params
806 GetDayZGame().RPC( player, ERPCs.DEV_RPC_MODS_DATA, rpc_params, true, player.GetIdentity() );
807 }
808 }
809
810 //============================================
811 // MODS
812 //============================================
813 //send player mods through RPC
815 {
816 //write and send values
817 if ( player )
818 {
819 Param1<string> p1 = new Param1<string>("");
820 ModifiersManager mods_manager = player.GetModifiersManager();
821 int mod_id = m_RegisteredPlayers.Get(player).m_DetailedModifierIndex;
822 p1.param1 = mods_manager.GetModifier(mod_id).GetDebugText();
823 //send params
824 if (p1.param1 != "")
825 GetDayZGame().RPCSingleParam( player, ERPCs.DEV_RPC_MODS_DATA_DETAILED, p1, true, player.GetIdentity() );
826 }
827 }
828
829 //Display player modifiers
831 {
832 //clear values
833 m_PlayerModsSynced.Clear();
834
835 //ref Param3<string, float, bool> p = new Param3<string, float, bool>( "", 0, false );
836 Param1<int> p1 = new Param1<int>(0);
837 Param4<int, string, bool, bool> p4 = new Param4<int, string, bool, bool>( 0,"", false, false );
838 //get param count
839 int param_count = 0;
840 if ( ctx.Read(p1) )
841 {
842 param_count = (int) p1.param1;
843 }
844
845 //read values and set
846 for ( int i = 0; i < param_count; i++ )
847 {
848 if (ctx.Read(p4))
849 {
850 m_PlayerModsSynced.Insert( new SyncedValueModifier( p4.param1, p4.param2, p4.param3, p4.param4 ) );
851 }
852 }
853 }
854
856 {
857 Param1<string> p1 = new Param1<string>("");
858
859 //get param count
860 if ( ctx.Read(p1) )
861 {
862 m_PlayerModsDetailedSynced = p1.param1;
863 }
864 }
865
866
867 /*
868 //Activates modifier with given ID
869 void RequestDetailedInfo( int id, PlayerBase player = NULL )
870 {
871 int modifier_id = Math.AbsInt( id );
872 if(id == m_DetailedInfoRequested)
873 {
874 m_DetailedInfoRequested = 0;//repeated request --> disable
875 }
876 else
877 {
878 m_DetailedInfoRequested = modifier_id;
879 }
880 }
881 */
882 //Activates modifier with given ID
883 void RequestDetailedInfo( int id, notnull PlayerBase player)
884 {
885 int modifier_id = Math.AbsInt( id );
886 m_RegisteredPlayers.Get(player).m_DetailedModifierIndex = modifier_id;
887
888 if (IsSetSystemInBitmask(player, PDS_SYSTEMS.MODS_DETAILED ))
889 {
890 SetSystemInBitmask(player, PDS_SYSTEMS.MODS_DETAILED, false);
891 }
892 else
893 {
894 SetSystemInBitmask(player, PDS_SYSTEMS.MODS_DETAILED, true);
895 }
896 }
897
898
899 //Activates modifier with given ID
900 void ActivateModifier( int id, PlayerBase player = NULL )
901 {
902 if ( !player )
903 {
904 player = PlayerBase.Cast( GetDayZGame().GetPlayer() );
905 }
906 ModifiersManager mods_manager = player.GetModifiersManager();
907 mods_manager.ActivateModifier( Math.AbsInt( id ) );
908 }
909
910 //Activates modifier with given ID
911 void DeactivateModifier( int id, PlayerBase player = NULL )
912 {
913 if ( !player )
914 {
915 player = PlayerBase.Cast( GetDayZGame().GetPlayer() );
916 }
917 ModifiersManager mods_manager = player.GetModifiersManager();
918 mods_manager.DeactivateModifier( Math.AbsInt( id ) );
919 }
920
921 //Activates modifier with given ID
922 void LockModifier( int id, bool lock, PlayerBase player = NULL )
923 {
924 if ( !player )
925 {
926 player = PlayerBase.Cast( GetDayZGame().GetPlayer() );
927 }
928 ModifiersManager mods_manager = player.GetModifiersManager();
929 mods_manager.SetModifierLock( Math.AbsInt( id ), lock );
930 }
931
932 bool IsModifierLocked( int id, PlayerBase player = NULL )
933 {
934 if ( !player )
935 {
936 player = PlayerBase.Cast( GetDayZGame().GetPlayer() );
937 }
938 ModifiersManager mods_manager = player.GetModifiersManager();
939
940 return mods_manager.GetModifierLock( Math.AbsInt( id ) );
941 }
942
943 //============================================
944 // TEMPERATURE
945 //============================================
946
947 void SendRPCTemp( PlayerBase player )
948 {
949 if ( player )
950 {
951 CachedObjectsParams.PARAM1_STRING.param1 = player.m_Environment.GetDebugMessage();
952 GetDayZGame().RPCSingleParam( player, ERPCs.DEV_TEMP_UPDATE, CachedObjectsParams.PARAM1_STRING, true, player.GetIdentity() );
953 }
954 }
955
957 {
958 if (GetGame().IsServer() && GetGame().IsMultiplayer())
959 {
960 EnableUpdate( GetRPCUpdateState( ctx ), ERPCs.DEV_TEMP_UPDATE, player );
961 }
962 else if (!GetGame().IsMultiplayer() || GetGame().IsClient())
963 {
965 {
967 }
968 }
969
970 }
971
972 //============================================
973 // AGENTS
974 //============================================
975 //send player mods through RPC
977 {
978 //write and send values
979 if ( ( player && player.GetIdentity() && player.m_AgentPool != null ) || ( player && !GetGame().IsMultiplayer() && player.m_AgentPool != null ) )
980 {
981
982 //get agent pool data
983 array<ref Param> agent_pool = new array<ref Param>;
984 player.m_AgentPool.GetDebugObject( agent_pool );
985
986 GetDayZGame().RPC( player, ERPCs.DEV_RPC_AGENTS_DATA, agent_pool, true, player.GetIdentity() );
987 }
988 }
989
990 //Display player modifiers
992 {
993 //clear values
994 m_PlayerAgentsSynced.Clear();
995
996 Param4<string, string, int, float> p4 = new Param4<string, string, int, float>("", "" , 0, 0.0);
997 Param1<int> p1 = new Param1<int>(0);
998
999 //get param count
1000 int paramCount = 0;
1001 if (ctx.Read(p1))
1002 paramCount = p1.param1;
1003
1004 //read values and set
1005 for (int i = 0; i < paramCount; i++)
1006 {
1007 ctx.Read(p4);
1008 m_PlayerAgentsSynced.Insert(new SyncedValueAgent(p4.param1, p4.param2, p4.param3, p4.param4));
1009 }
1010 }
1011
1012 //============================================
1013 // STOMACH
1014 //============================================
1015
1017 {
1018 //write and send values
1019 if ( player )
1020 {
1021 array<ref Param> stomach = new array<ref Param>;
1022 int count = player.m_PlayerStomach.GetDebugObject( stomach );
1023 stomach.InsertAt(new Param1<int>(count), 0);
1024
1025 GetDayZGame().RPC( player, ERPCs.DEV_RPC_STOMACH_DATA, stomach, true, player.GetIdentity() );
1026 }
1027 }
1028
1029
1031 {
1032 //clear values
1033 m_PlayerStomachSynced.Clear();
1034
1035 Param1<int> p1 = new Param1<int>(0);
1036 int param_count = 0;
1037 if ( ctx.Read(p1) )
1038 {
1039 param_count = p1.param1;
1040 }
1041
1042 if (param_count)
1043 {
1044 //invidividual stomach items
1045 for ( int i = 0; i < param_count; i++ )
1046 {
1047 Param5<int,int,int,float,float> p5 = new Param5<int,int,int,float,float>(0,0,0,0,0);
1048 ctx.Read(p5);
1049 m_PlayerStomachSynced.Insert(p5);
1050 }
1051 //volume
1052 Param1<float> p1b = new Param1<float>(0);
1053 ctx.Read(p1b);
1054 m_PlayerStomachSynced.Insert(p1b);
1055 //temperature
1056 Param1<float> paramTemp = new Param1<float>(0);
1057 ctx.Read(paramTemp);
1058 m_PlayerStomachSynced.Insert(paramTemp);
1059 }
1060 }
1061
1062 //================================================================
1063 // FOCUS
1064 //================================================================
1066 {
1068 GetGame().GetUIManager().ShowUICursor( true );
1069 }
1070
1072 {
1074 GetGame().GetUIManager().ShowUICursor( false );
1075 }
1076
1078 {
1079 if ( GetGame().GetInput().HasGameFocus() )
1080 {
1082 GetGame().GetUIManager().ShowUICursor( true );
1083 }
1084 else
1085 {
1087 GetGame().GetUIManager().ShowUICursor( false );
1088 }
1089 }
1090}
Param3 int
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
const string MODS
Определения ClientKickedModule.c:170
map
Определения ControlsXboxNew.c:4
map< string, ref array< string > > DamageZoneMap
Определения DamageSystem.c:157
DayZGame GetDayZGame()
Определения DayZGame.c:3870
ERPCs
Определения ERPCs.c:2
EStatLevels
Определения EStatLevels.c:2
PlayerBase GetPlayer()
Определения ModifierBase.c:51
void ModifiersManager(PlayerBase player)
Определения ModifiersManager.c:80
void PlantBase()
Определения PlantBase.c:54
override float Get()
Определения PlayerStatBase.c:134
PDS_SYSTEMS
Определения PluginDeveloperSync.c:2
@ LEVELS
Определения PluginDeveloperSync.c:4
@ STATS
Определения PluginDeveloperSync.c:3
@ STOMACH
Определения PluginDeveloperSync.c:7
@ MODS_DETAILED
Определения PluginDeveloperSync.c:8
@ TEMPERATURE
Определения PluginDeveloperSync.c:9
@ AGENTS
Определения PluginDeveloperSync.c:6
@ HEALTH
Определения PluginDeveloperSync.c:10
void RegisterPlayerData()
Определения PluginDeveloperSync.c:19
enum PDS_SYSTEMS m_Bitmask
int m_DetailedModifierIndex
Определения PluginDeveloperSync.c:17
void PluginItemDiagnostic()
Определения PluginItemDiagnostic.c:74
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:316
@ Count
Определения RandomGeneratorSyncManager.c:8
void SyncedValueLevel(string name, float value, float value2)
Определения SyncedValue.c:43
void SyncedValueAgent(string name, string value, int id, float temporaryResistance)
Определения SyncedValue.c:111
proto native UIManager GetUIManager()
proto native Input GetInput()
static ref Param1< string > PARAM1_STRING
Определения UtilityClasses.c:14
Определения Building.c:6
Определения GardenPlot.c:2
proto native void ChangeGameFocus(int add, int input_device=-1)
Change game focus number.
proto native void ResetGameFocus(int input_device=-1)
Reset game focus number (set to 0)
Определения EnMath.c:7
Определения PPEConstants.c:68
Определения EntityAI.c:95
Определения PlayerBaseClient.c:2
void CaptureFocus()
Определения PluginDeveloperSync.c:1065
bool m_StatsUpdateStatus
Определения PluginDeveloperSync.c:45
void OnRPCHealthSet(ParamsReadContext ctx, PlayerBase player)
Определения PluginDeveloperSync.c:654
void OnRPCTemp(ParamsReadContext ctx, PlayerBase player)
Определения PluginDeveloperSync.c:956
ref array< ref SyncedValueAgent > m_PlayerAgentsSynced
Определения PluginDeveloperSync.c:38
ref map< PlayerBase, ref RegisterPlayerData > m_RegisteredPlayers
Определения PluginDeveloperSync.c:30
void SetTargetChanged(bool state)
Определения PluginDeveloperSync.c:548
void SendRPCMods(PlayerBase player)
Определения PluginDeveloperSync.c:777
bool GetIsTargetChanged()
Определения PluginDeveloperSync.c:543
void OnRPCStomach(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:1030
int GetRPCModifierID(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:420
bool m_IsTargetChanged
Определения PluginDeveloperSync.c:41
void PluginDeveloperSync()
Определения PluginDeveloperSync.c:51
void UpdateStatsLocal()
Определения PluginDeveloperSync.c:497
void SendRPCStats(PlayerBase player)
Определения PluginDeveloperSync.c:446
bool IsPlayerRegistered(PlayerBase player)
Определения PluginDeveloperSync.c:257
string m_PlayerModsDetailedSynced
Определения PluginDeveloperSync.c:36
override void OnInit()
Определения PluginDeveloperSync.c:73
bool m_StomachUpdateStatus
Определения PluginDeveloperSync.c:49
void OnRPCMods(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:830
void OnRPCHorticultureSpeed(ParamsReadContext ctx, PlayerBase player)
Определения PluginDeveloperSync.c:720
ref array< ref SyncedValue > m_TargetHealthSynced
Определения PluginDeveloperSync.c:39
string m_EnvironmentDebugMessage
Определения PluginDeveloperSync.c:37
void OnRPCHealth(ParamsReadContext ctx, PlayerBase player)
Определения PluginDeveloperSync.c:591
void SetupZoneValues(inout array< ref Param > rpc_params, DamageZoneMap dmgZones, EntityAI target, string healthType, int typeID)
Определения PluginDeveloperSync.c:612
void OnRPCLevels(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:754
bool m_AgentsUpdateStatus
Определения PluginDeveloperSync.c:48
void SendRPCLevels(PlayerBase player)
Определения PluginDeveloperSync.c:733
bool m_ModsUpdateStatus
Определения PluginDeveloperSync.c:47
ref map< PlayerBase, bool > m_HealthObserverMode
Определения PluginDeveloperSync.c:42
void DeactivateModifier(int id, PlayerBase player=NULL)
Определения PluginDeveloperSync.c:911
void OnRPCStats(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:471
void SendRPCModsDetail(PlayerBase player)
Определения PluginDeveloperSync.c:814
void ToggleFocus()
Определения PluginDeveloperSync.c:1077
void SendRPCStomach(PlayerBase player)
Определения PluginDeveloperSync.c:1016
ref array< ref SyncedValue > m_PlayerStatsSynced
Определения PluginDeveloperSync.c:32
void SetSystemInBitmask(PlayerBase player, int system_bit, bool state)
Определения PluginDeveloperSync.c:213
void ActivateModifier(int id, PlayerBase player=NULL)
Определения PluginDeveloperSync.c:900
void Update()
Определения PluginDeveloperSync.c:160
ref array< ref SyncedValueLevel > m_PlayerLevelsSynced
Определения PluginDeveloperSync.c:34
bool IsSetSystemInBitmask(PlayerBase player, int system_bit)
Определения PluginDeveloperSync.c:227
int m_DetailedInfoRequested
Определения PluginDeveloperSync.c:28
bool m_LevelsUpdateStatus
Определения PluginDeveloperSync.c:46
ref Timer m_UpdateTimer
Определения PluginDeveloperSync.c:29
ref array< ref SyncedValue > GetHealthZonesSynched()
Определения PluginDeveloperSync.c:538
void RegisterPlayer(PlayerBase player)
Определения PluginDeveloperSync.c:240
void SendRPCAgents(PlayerBase player)
Определения PluginDeveloperSync.c:976
ref map< PlayerBase, EntityAI > m_HealthObserverEntity
Определения PluginDeveloperSync.c:43
void OnRPCStatSet(ParamsReadContext ctx, PlayerBase player)
Определения PluginDeveloperSync.c:517
bool GetRPCUpdateState(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:408
void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
Определения PluginDeveloperSync.c:270
ref array< ref SyncedValueModifier > m_PlayerModsSynced
Определения PluginDeveloperSync.c:35
void SendRPCHealth(PlayerBase player)
Определения PluginDeveloperSync.c:553
void EnableUpdate(bool enable, int type, PlayerBase player)
Определения PluginDeveloperSync.c:85
void OnRPCAgents(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:991
void OnRPCHorticultUpdate(ParamsReadContext ctx, PlayerBase player)
Определения PluginDeveloperSync.c:702
void ReleaseFocus()
Определения PluginDeveloperSync.c:1071
void LockModifier(int id, bool lock, PlayerBase player=NULL)
Определения PluginDeveloperSync.c:922
void RequestDetailedInfo(int id, notnull PlayerBase player)
Определения PluginDeveloperSync.c:883
void SendRPCTemp(PlayerBase player)
Определения PluginDeveloperSync.c:947
bool IsModifierLocked(int id, PlayerBase player=NULL)
Определения PluginDeveloperSync.c:932
ref array< ref Param > m_PlayerStomachSynced
Определения PluginDeveloperSync.c:33
void OnRPCModsDetailed(ParamsReadContext ctx)
Определения PluginDeveloperSync.c:855
void GetRPCModifierLock(ParamsReadContext ctx, out int id, out bool lock)
Определения PluginDeveloperSync.c:432
Определения PluginBase.c:2
proto bool Read(void value_in)
Определения SyncedValue.c:2
Определения DayZPlayerImplement.c:63
void ShowUICursor(bool visible)
Определения UIManager.c:244
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:97
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
static proto int AbsInt(int i)
Returns absolute value.
const int CALL_CATEGORY_GAMEPLAY
Определения tools.c:10