DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
PluginDiagMenuClient.c
Go to the documentation of this file.
1// For modding, see PluginDiagMenuModding.c
2// !!! MODDING DISCLAIMER: These are debug functionality files, if you are thinking about modding the vanilla ones, do so at your own risk
3// These files will not be maintained with the thought of "what if a modder modded this" (Excluding the modding functionality of course)
4// Which is why the modding functionality was developed with the thought of the modded ones having their own isolated safe space
5
7{
8#ifdef DIAG_DEVELOPER
9 static int m_SystemsMask;
10
11 // Cheats
12 bool m_ModifiersDisabled;
13 int m_IsInvincible;
14 bool m_StaminaDisabled;
15
16 // Misc
17 float m_Playtime;
18 bool m_LogPlayerStats;
19 Shape m_VehicleFreeAreaBox;
20 ref EnvDebugData m_EnvDebugData;
21 ref FallDamageDebugData m_FallDamageDebugData;
22
23 override void OnInit()
24 {
25 super.OnInit();
26
27 BindCallbacks();
28 }
29
30 protected void BindCallbacks()
31 {
32 //---------------------------------------------------------------
33 // LEVEL 2 - Script > Crafting
34 //---------------------------------------------------------------
35 DiagMenu.BindCallback(DiagMenuIDs.CRAFTING_GENERATE, CBCraftingGenerate);
36 DiagMenu.BindCallback(DiagMenuIDs.CRAFTING_INSTANT, CBCraftingInstant);
37 DiagMenu.BindCallback(DiagMenuIDs.CRAFTING_DUMP, CBCraftingDump);
38
39 //---------------------------------------------------------------
40 // LEVEL 2 - Script > Vehicles
41 //---------------------------------------------------------------
42 DiagMenu.BindCallback(DiagMenuIDs.VEHICLE_DEBUG_OUTPUT, CBVehicleDebugOutput);
43 DiagMenu.BindCallback(DiagMenuIDs.VEHICLE_DUMP_CRASH_DATA, CBDumpCrashData);
44
45 //---------------------------------------------------------------
46 // LEVEL 2 - Script > Cheats
47 //---------------------------------------------------------------
48 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_MODIFIERS, CBCheatsModifiers);
49 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_KILL_PLAYER, CBCheatsKillPlayer);
50 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_INVINCIBILITY, CBCheatsInvincibility);
51 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_DISABLE_STAMINA, CBCheatsStaminaDisable);
52 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_RESET_PLAYER, CBCheatsResetPlayer);
53 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_RESET_PLAYER_MAX, CBCheatsResetPlayerMax);
54 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_INVENTORY_ACCESS, CBCheatsInventoryAccess);
55 DiagMenu.BindCallback(DiagMenuIDs.CHEATS_FIX_ITEMS, CBCheatsFixItems);
56
57 //---------------------------------------------------------------
58 // LEVEL 2 - Script > Player Agents
59 //---------------------------------------------------------------
60 DiagMenu.BindCallback(DiagMenuIDs.PLAYER_AGENTS_INJECTS_SHOW, CBPlayerAgentsInjectActions);
61
62 //---------------------------------------------------------------
63 // LEVEL 2 - Script > Soft Skills
64 //---------------------------------------------------------------
65 DiagMenu.BindCallback(DiagMenuIDs.SOFT_SKILLS_SHOW_DEBUG, CBSoftSkillsShowDebug);
66 DiagMenu.BindCallback(DiagMenuIDs.SOFT_SKILLS_TOGGLE_STATE, CBSoftSkillsToggleState);
67 DiagMenu.BindCallback(DiagMenuIDs.SOFT_SKILLS_TOGGLE_MODEL, CBSoftSkillsToggleModel);
68 DiagMenu.BindCallback(DiagMenuIDs.SOFT_SKILLS_SPECIALTY_VALUE, CBSoftSkillsSpecialtyValue);
69
70 //---------------------------------------------------------------
71 // LEVEL 2 - Script > Lifespan
72 //---------------------------------------------------------------
73 DiagMenu.BindCallback(DiagMenuIDs.LIFESPAN_BLOODY_HANDS, CBLifespanBloodyHands);
74 DiagMenu.BindCallback(DiagMenuIDs.LIFESPAN_PLAYTIME_UPDATE, CBLifespanPlaytimeUpdate);
75
76 //---------------------------------------------------------------
77 // LEVEL 2 - Script > Misc
78 //---------------------------------------------------------------
79 DiagMenu.BindCallback(DiagMenuIDs.MISC_DISABLE_PERSONAL_LIGHT, CBMiscPersonalLight);
80 DiagMenu.BindCallback(DiagMenuIDs.MISC_ITEM_DEBUG_ACTIONS, CBMiscItemDebugActions); // Is enabled by default now
81 DiagMenu.BindCallback(DiagMenuIDs.MISC_LOG_PLAYER_STATS, CBMiscLogPlayerStats);
82
83 //---------------------------------------------------------------
84 // LEVEL 2 - Script > Misc -> Environment
85 //---------------------------------------------------------------
86 DiagMenu.BindCallback(DiagMenuIDs.MISC_ENVIRONMENT_DEBUG, CBMiscEnvironmentDebug);
87 DiagMenu.BindCallback(DiagMenuIDs.MISC_ENVIRONMENT_LOGGING_DRYWET, CBMiscEnvironmentLoggingDryWet);
88
89 //---------------------------------------------------------------
90 // LEVEL 2 - Script > Misc
91 //---------------------------------------------------------------
92 DiagMenu.BindCallback(DiagMenuIDs.MISC_PERMANENT_CROSSHAIR, CBMiscPermanentCrossHair);
93 DiagMenu.BindCallback(DiagMenuIDs.MISC_TOGGLE_HUD, CBMiscToggleHud);
94 DiagMenu.BindCallback(DiagMenuIDs.MISC_FALLDAMAGE_DEBUG, CBMiscFallDamageDebug);
95 DiagMenu.BindCallback(DiagMenuIDs.MISC_DISPLAY_PLAYER_INFO, CBMiscDisplayPlayerInfo);
96 DiagMenu.BindCallback(DiagMenuIDs.MISC_UNIVERSAL_TEMPERATURE_SOURCES, CBMiscUniversalTemperatureSources);
97 DiagMenu.BindCallback(DiagMenuIDs.MISC_BULLET_IMPACT, CBMiscBulletImpact);
98 DiagMenu.BindCallback(DiagMenuIDs.MISC_GO_UNCONSCIOUS, CBMiscGoUnconscious);
99 DiagMenu.BindCallback(DiagMenuIDs.MISC_GO_UNCONSCIOUS_DELAYED, CBMiscGoUnconsciousDelayed);
100 DiagMenu.BindCallback(DiagMenuIDs.MISC_QUICK_RESTRAIN, CBMiscQuickRestrain);
101
102 //---------------------------------------------------------------
103 // LEVEL 3 - Script > Misc > Hair Hiding
104 //---------------------------------------------------------------
105 DiagMenu.BindCallback(DiagMenuIDs.MISC_HAIR_LEVEL_HIDE, CBMiscHairHide);
106 DiagMenu.BindCallback(DiagMenuIDs.MISC_HAIR_HIDE_ALL, CBMiscHairHideAll);
107
108 //---------------------------------------------------------------
109 // LEVEL 2 - Script > Misc
110 //---------------------------------------------------------------
111 DiagMenu.BindCallback(DiagMenuIDs.MISC_CAM_SHAKE, CBMiscCamShake);
112 DiagMenu.BindCallback(DiagMenuIDs.MISC_QUICK_FISHING, CBMiscQuickFishing);
113 DiagMenu.BindCallback(DiagMenuIDs.MISC_SHOCK_IMPACT, CBMiscShockImpact);
114 DiagMenu.BindCallback(DiagMenuIDs.MISC_SHOW_PLUG_ARROWS, CBMiscPlugArrows);
115 DiagMenu.BindCallback(DiagMenuIDs.MISC_TARGETABLE_BY_AI, CBMiscTargetableByAI);
116
117 //---------------------------------------------------------------
118 // LEVEL 3 - Script > Misc > Hit Indication
119 //---------------------------------------------------------------
120 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_DEBUG, CBMiscHitIndication);
121 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_SPAWN_HIT, CBMiscHitIndicationSpawnHit);
122 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_MODE, CBMiscHitIndication);
123 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_TYPE, CBMiscHitIndication);
124 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_DURATION, CBMiscHitIndication);
125 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_BREAKPOINT, CBMiscHitIndication);
126 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_DISTANCE, CBMiscHitIndication);
127 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_ROTATION, CBMiscHitIndication);
128 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_SCATTER, CBMiscHitIndication);
129 DiagMenu.BindCallback(DiagMenuIDs.MISC_HIT_INDICATION_DISABLE_PPE, CBMiscHitIndication);
130
131 //---------------------------------------------------------------
132 // LEVEL 2 - Script > Misc
133 //---------------------------------------------------------------
134 DiagMenu.BindCallback(DiagMenuIDs.MISC_FREEZE_ENTITY, CBMiscFreezeEntity);
135
136 //---------------------------------------------------------------
137 // LEVEL 2 - Script > Simulate script
138 //---------------------------------------------------------------
139 DiagMenu.BindCallback(DiagMenuIDs.SIMULATE_INFINITE_LOOP, CBSimulateInfiniteLoop);
140 DiagMenu.BindCallback(DiagMenuIDs.SIMULATE_NULL_POINTER, CBSimulateNullPointer);
141 DiagMenu.BindCallback(DiagMenuIDs.SIMULATE_DIVISION_BY_ZERO, CBSimulateDivisionByZero);
142 DiagMenu.BindCallback(DiagMenuIDs.SIMULATE_ERROR_FUNCTION, CBSimulateErrorFunction);
143
144 //---------------------------------------------------------------
145 // LEVEL 2 - Script > Weapon
146 //---------------------------------------------------------------
147 DiagMenu.BindCallback(DiagMenuIDs.WEAPON_PARTICLES, CBWeaponParticles);
148 DiagMenu.BindCallback(DiagMenuIDs.WEAPON_AIM_NOISE, CBWeaponAimNoise);
149 DiagMenu.BindCallback(DiagMenuIDs.WEAPON_RECOIL, CBWeaponRecoil);
150 DiagMenu.BindCallback(DiagMenuIDs.WEAPON_UNLIMITED_AMMO, CBWeaponUnlimitedAmmo);
151 DiagMenu.BindCallback(DiagMenuIDs.WEAPON_BURST_VERSION, CBWeaponBurstVersion);
152
153 //---------------------------------------------------------------
154 // LEVEL 2 - Script > Bleeding
155 //---------------------------------------------------------------
156 DiagMenu.BindCallback(DiagMenuIDs.BLEEDING_SOURCES, CBBleedingSources);
157 DiagMenu.BindCallback(DiagMenuIDs.BLEEDING_DISABLE_BLOOD_LOSS, CBBleedingDisableBloodLoss);
158 DiagMenu.BindCallback(DiagMenuIDs.BLEEDING_ACTIVATE_SOURCE, CBBleedingActivateSource);
159 DiagMenu.BindCallback(DiagMenuIDs.BLEEDING_ACTIVATE_ALL_SOURCES, CBBleedingActivateAllSources);
160 DiagMenu.BindCallback(DiagMenuIDs.BLEEDING_ACTIVATE_SOURCE_LEVEL, CBBleedingActivateSourceLevel);
161 DiagMenu.BindCallback(DiagMenuIDs.BLEEDING_RELOAD, CBBleedingReload);
162
163 //---------------------------------------------------------------
164 // LEVEL 3 - Script > Bleeding > Bleeding Indication
165 //---------------------------------------------------------------
166 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS, CBBBleedingIndicators);
167 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_USEVALUEOVERRIDES, CBBBleedingIndicators);
168 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_RANDOMROTATION, CBBBleedingIndicators);
169 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_SEQUENCE_DURATION, CBBBleedingIndicators);
170 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_BASEDURATION, CBBBleedingIndicators);
171 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_MINDELAY, CBBBleedingIndicators);
172 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_MAXDELAY, CBBBleedingIndicators);
173 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_PROGRESSTHRESHOLD, CBBBleedingIndicators);
174 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_STARTSIZE, CBBBleedingIndicators);
175 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_ENDSIZE, CBBBleedingIndicators);
176 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_RNDSCALEMIN, CBBBleedingIndicators);
177 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_RNDSCALEMAX, CBBBleedingIndicators);
178 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_SCATTER, CBBBleedingIndicators);
179 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_SLIDEDISTANCE, CBBBleedingIndicators);
180
181 //---------------------------------------------------------------
182 // LEVEL 4 - Script > Bleeding > Bleeding Indication > Color Debug
183 //---------------------------------------------------------------
184 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_ENABLEDESATURATION, CBBBleedingIndicators);
185 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_DESATURATIONEND, CBBBleedingIndicators);
186 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_R, CBBBleedingIndicators);
187 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_G, CBBBleedingIndicators);
188 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_B, CBBBleedingIndicators);
189 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_A_START, CBBBleedingIndicators);
190 DiagMenu.BindCallback(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_A_END, CBBBleedingIndicators);
191
192 //---------------------------------------------------------------
193 // LEVEL 2 - Script > Logs
194 //---------------------------------------------------------------
195 DiagMenu.BindCallback(DiagMenuIDs.LOGS_ACTIONS, CBLogsActions);
196 DiagMenu.BindCallback(DiagMenuIDs.LOGS_WEAPONS, CBLogsWeapons);
197 DiagMenu.BindCallback(DiagMenuIDs.LOGS_SYMPTOMS, CBLogsSymptoms);
198
199 //---------------------------------------------------------------
200 // LEVEL 3 - Script > Logs > InventoryLogs
201 //---------------------------------------------------------------
202 DiagMenu.BindCallback(DiagMenuIDs.LOGS_INVENTORY_MOVE, CBLogsInventoryMove);
203 DiagMenu.BindCallback(DiagMenuIDs.LOGS_INVENTORY_RESERVATION, CBLogsInventoryReservation);
204 DiagMenu.BindCallback(DiagMenuIDs.LOGS_INVENTORY_HFSM, CBLogsInventoryHFSM);
205
206 //---------------------------------------------------------------
207 // LEVEL 2 - Script > Triggers
208 //---------------------------------------------------------------
209 DiagMenu.BindCallback(DiagMenuIDs.TRIGGER_DEBUG, CBTriggerDebug);
210
211 //---------------------------------------------------------------
212 // LEVEL 2 - Script > Base Building
213 //---------------------------------------------------------------
214 DiagMenu.BindCallback(DiagMenuIDs.BASEBUILDING_WOOD, CBBaseBuildingWood);
215 DiagMenu.BindCallback(DiagMenuIDs.BASEBUILDING_GATE, CBBaseBuildingGate);
216
217 //---------------------------------------------------------------
218 // LEVEL 2 - Script > Finishers
219 //---------------------------------------------------------------
220 DiagMenu.BindCallback(DiagMenuIDs.FINISHERS_FINISHER_FORCED, CBFinishersFinisherForced);
221
222 //---------------------------------------------------------------
223 // LEVEL 2 - Script > Cinematic Camera Tools
224 //---------------------------------------------------------------
225 DiagMenu.BindCallback(DiagMenuIDs.CAMERATOOLS_ENABLE_REMOTE_CAMERA, CBCameraToolsEnableRemoteCamera);
226 }
227
228 //---------------------------------------------
229 override void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
230 {
231 super.OnRPC(player, rpc_type, ctx);
232
233 switch (rpc_type)
234 {
235 case ERPCs.DIAG_MISC_ENVIRONMENT_DEBUG_DATA:
236 {
237 if (!m_EnvDebugData)
238 m_EnvDebugData = new EnvDebugData();
239
240 ctx.Read(m_EnvDebugData);
241 break;
242 }
243
244 case ERPCs.DIAG_MISC_FALLDAMAGE_DEBUG_DATA:
245 {
246 if (!m_FallDamageDebugData)
247 m_FallDamageDebugData = new FallDamageDebugData();
248
249 ctx.Read(m_FallDamageDebugData);
250 break;
251 }
252
253 case ERPCs.DIAG_VEHICLES_DUMP_CRASH_DATA_CONTENTS:
254 {
255 Param1<array<ref CrashDebugData>> par = new Param1<array<ref CrashDebugData>>(null);
256
257 if (ctx.Read(par))
258 CrashDebugData.DumpDataArray(par.param1);
259 break;
260 }
261 }
262 }
263
264 //---------------------------------------------
265 override void OnUpdate(float delta_time)
266 {
267 super.OnUpdate(delta_time);
268
269 //---------------------------------------------
270 // every system can handle their own actions locally(within the system itself),
271 // this section is for systems which don't have client side representation,
272 // or don't have their own tick, or for whatever other reason you prefer to put the logic here
273 // PUT ONLY METHOD CALLS HERE, NO CODE !!
274 // PUT ONLY METHOD CALLS HERE, NO CODE !!
275 //---------------------------------------------
276
277 UpdateMiscVehicleGetOutBox();
278 UpdateEnvironmentDebug();
279 CheckTimeAccel();
280 }
281
282 //---------------------------------------------
283 void CheckTimeAccel()
284 {
285 if (!FeatureTimeAccel.m_CurrentTimeAccel)
286 {
287 InitTimeAccel();
288 }
289
290 if (GetGame() && GetGame().GetPlayer())
291 {
292 TimeAccelParam param = GetTimeAccelMenuState();
293
294 if (!FeatureTimeAccel.AreTimeAccelParamsSame(param, FeatureTimeAccel.m_CurrentTimeAccel))
295 {
296 int timeAccelBig = param.param2;
297 float timeAccelSmall = param.param2 - timeAccelBig;
298 FeatureTimeAccel.CopyTimeAccelClipboard(param.param1, timeAccelBig, timeAccelSmall, param.param3 );
299 FeatureTimeAccel.SendTimeAccel(GetGame().GetPlayer(), param);
300 FeatureTimeAccel.m_CurrentTimeAccel = param;
301 }
302 }
303
304 }
305
306 //---------------------------------------------
307 static void CBCraftingGenerate(bool enabled, int id)
308 {
309 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(GetPlugin(PluginRecipesManager));
310 DiagButtonAction(enabled, id, ScriptCaller.Create(pluginRecipesManager.CallbackGenerateCache));
311 }
312
313 //---------------------------------------------
314 static void CBCraftingInstant(bool enabled)
315 {
316 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(GetPlugin(PluginRecipesManager));
317 DiagToggleRPC(enabled, pluginRecipesManager.IsEnableDebugCrafting(), ERPCs.DIAG_CRAFTING_INSTANT);
318 }
319
320 //---------------------------------------------
321 static void CBCraftingDump(bool enabled, int id)
322 {
323 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(GetPlugin(PluginRecipesManager));
324 DiagButtonAction(enabled, id, ScriptCaller.Create(pluginRecipesManager.GenerateHumanReadableRecipeList));
325 }
326
327 //---------------------------------------------
328 static void CBCheatsModifiers(bool enabled)
329 {
331 DiagToggleRPCServer(enabled, pluginDiag.m_ModifiersDisabled, ERPCs.DIAG_CHEATS_MODIFIERS);
332 }
333
334 //---------------------------------------------
335 static void CBCheatsKillPlayer(bool enabled, int id)
336 {
337 DiagButtonRPC(enabled, id, ERPCs.DIAG_CHEATS_KILL_PLAYER, true);
338 }
339
340 //---------------------------------------------
341 static void CBCheatsInvincibility(int value)
342 {
344 DiagToggleRPCServer(value, pluginDiag.m_IsInvincible, ERPCs.DIAG_CHEATS_INVINCIBILITY);
345 }
346
347 //---------------------------------------------
348 static void CBCheatsStaminaDisable(bool enabled)
349 {
351 DiagToggleRPCServer(enabled, pluginDiag.m_StaminaDisabled, ERPCs.DIAG_CHEATS_DISABLE_STAMINA);
352 }
353
354 //---------------------------------------------
355 static void CBCheatsResetPlayer(bool enabled, int id)
356 {
357 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
358 if (player)
359 player.ResetPlayer(false);
360 DiagButtonRPC(enabled, id, ERPCs.DIAG_CHEATS_RESET_PLAYER, true);
361 }
362
363 //---------------------------------------------
364 static void CBCheatsResetPlayerMax(bool enabled, int id)
365 {
366 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
367 if (player)
368 player.ResetPlayer(true);
369 DiagButtonRPC(enabled, id, ERPCs.DIAG_CHEATS_RESET_PLAYER_MAX, true);
370 }
371
372 //---------------------------------------------
373 static void CBCheatsInventoryAccess(bool enabled)
374 {
375 DiagToggleRPCServer(enabled, PlayerBase.DEBUG_INVENTORY_ACCESS, ERPCs.DIAG_CHEATS_INVENTORY_ACCESS);
376 }
377
378 //---------------------------------------------
379 static void CBCheatsFixItems(bool enabled, int id)
380 {
381 DiagButtonRPC(enabled, id, ERPCs.DIAG_CHEATS_ITEMS_FIX, true);
382 }
383
384 //---------------------------------------------
385 static void CBPlayerAgentsInjectActions(bool enabled)
386 {
387 DiagDebugAction(DebugActionType.PLAYER_AGENTS, enabled);
388 }
389
390 //---------------------------------------------
391 static void CBSoftSkillsShowDebug(bool enabled)
392 {
393 SoftSkillsManager ssMngr = GetPlayer().GetSoftSkillsManager();
394 DiagToggleRPCAction(enabled, ScriptCaller.Create(ssMngr.CreateDebugWindow), ssMngr.IsDebug(), ERPCs.DIAG_SOFT_SKILLS_SHOW_DEBUG);
395 }
396
397 //---------------------------------------------
398 static void CBSoftSkillsToggleState(bool enabled)
399 {
400 SoftSkillsManager ssMngr = GetPlayer().GetSoftSkillsManager();
401 DiagToggleRPC(enabled, ssMngr.GetSoftSkillsState(), ERPCs.DIAG_SOFT_SKILLS_TOGGLE_STATE);
402 }
403
404 //---------------------------------------------
405 static void CBSoftSkillsToggleModel(bool enabled)
406 {
407 SoftSkillsManager ssMngr = GetPlayer().GetSoftSkillsManager();
408 DiagToggleRPC(enabled, ssMngr.IsLinear(), ERPCs.DIAG_SOFT_SKILLS_TOGGLE_MODEL);
409 }
410
411 //---------------------------------------------
412 static void CBSoftSkillsSpecialtyValue(float value)
413 {
414 SoftSkillsManager ssMngr = GetPlayer().GetSoftSkillsManager();
415 DiagToggleRPC(value, ssMngr.GetSpecialtyLevel(), ERPCs.DIAG_SOFT_SKILLS_SPECIALTY_VALUE);
416 }
417
418 //---------------------------------------------
419 static void CBLifespanBloodyHands(bool enabled)
420 {
421 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
422 if (player)
423 DiagToggleRPCServer(enabled, player.HasBloodyHands(), ERPCs.DIAG_LIFESPAN_BLOODY_HANDS);
424 }
425
426 //---------------------------------------------
427 static void CBLifespanPlaytimeUpdate(float value)
428 {
430 DiagToggleRPCServer(value * 60, pluginDiag.m_Playtime, ERPCs.DIAG_LIFESPAN_PLAYTIME_UPDATE);
431 }
432
433 //---------------------------------------------
434 static void CBMiscPersonalLight(bool enabled)
435 {
436 PlayerBaseClient.m_PersonalLightDisabledByDebug = enabled;
437 PlayerBaseClient.UpdatePersonalLight();
438 }
439
440 //---------------------------------------------
441 static void CBMiscItemDebugActions(bool enabled)
442 {
443 DiagDebugAction(DebugActionType.GENERIC_ACTIONS, enabled);
444 }
445
446 //---------------------------------------------
447 static void CBMiscLogPlayerStats(bool enabled)
448 {
450 DiagToggleRPC(enabled, pluginDiag.m_LogPlayerStats, ERPCs.DIAG_MISC_LOG_PLAYER_STATS);
451 }
452
453 //---------------------------------------------
454 static void CBMiscPermanentCrossHair(bool enabled)
455 {
456 PluginPermanentCrossHair crosshair = PluginPermanentCrossHair.Cast(GetPlugin(PluginPermanentCrossHair));
457 crosshair.SwitchPermanentCrossHair(enabled);
458 }
459
460 //---------------------------------------------
461 void UpdateMiscVehicleGetOutBox()
462 {
463 if ( DiagMenu.GetBool(DiagMenuIDs.MISC_VEHICLE_GETOUT_BOX) )
464 {
465 if (m_VehicleFreeAreaBox)
466 {
467 m_VehicleFreeAreaBox.Destroy();
468 m_VehicleFreeAreaBox = null;
469 }
470
471 HumanCommandVehicle hcv = GetGame().GetPlayer().GetCommand_Vehicle();
472 if (!hcv)
473 return;
474
475 m_VehicleFreeAreaBox = hcv.GetTransport().DebugFreeAreaAtDoor( hcv.GetVehicleSeat() );
476 }
477 else if (m_VehicleFreeAreaBox)
478 {
479 m_VehicleFreeAreaBox.Destroy();
480 m_VehicleFreeAreaBox = null;
481 }
482 }
483
484 //---------------------------------------------
485 static void CBMiscToggleHud(bool enabled)
486 {
488 mission.GetHud().Show(!enabled);
489 if (enabled)
490 {
492 }
493 else
494 {
496 }
497 }
498
499 //---------------------------------------------
500 static void CBMiscEnvironmentDebug(bool enabled)
501 {
502 SendDiagRPC(enabled, ERPCs.DIAG_MISC_ENVIRONMENT_DEBUG);
503 }
504
505 void UpdateEnvironmentDebug()
506 {
507 if (DiagMenu.GetBool(DiagMenuIDs.MISC_ENVIRONMENT_DEBUG) && m_EnvDebugData)
508 Environment.DisplayEnvDebugPlayerInfo(true, m_EnvDebugData);
509 else if (m_EnvDebugData)
510 m_EnvDebugData = null;
511 }
512
513 static void CBMiscEnvironmentLoggingDryWet(bool enabled)
514 {
515 SendDiagRPC(enabled, ERPCs.DIAG_MISC_ENVIRONMENT_LOGGING_DRYWET);
516 }
517
518 static void CBMiscFallDamageDebug(bool enabled)
519 {
520 SendDiagRPC(enabled, ERPCs.DIAG_MISC_FALLDAMAGE_DEBUG);
521 }
522
523 void UpdateFallDamageDebug()
524 {
525 if (DiagMenu.GetBool(DiagMenuIDs.MISC_FALLDAMAGE_DEBUG) && m_FallDamageDebugData)
526 DayZPlayerImplementFallDamage.DisplayFallDamageDebugInfo(true, m_FallDamageDebugData);
527 else if (m_FallDamageDebugData)
528 m_FallDamageDebugData = null;
529 }
530
531 //---------------------------------------------
532 static void CBMiscDisplayPlayerInfo(int value)
533 {
534 PluginRemotePlayerDebugClient prpdc = PluginRemotePlayerDebugClient.Cast(GetPlugin(PluginRemotePlayerDebugClient));
535 prpdc.RequestPlayerInfo(PlayerBase.Cast(GetGame().GetPlayer()), value);
536 }
537
538 //---------------------------------------------
539 static void CBMiscUniversalTemperatureSources(bool enabled)
540 {
542 client.RequestUniversalTemperatureSources(PlayerBase.Cast(GetGame().GetPlayer()), enabled);
543 }
544
545 //---------------------------------------------
546 static void CBMiscBulletImpact(bool enabled, int id)
547 {
548 PlayerBase player = GetPlayer();
551 DiagButtonActionParams(enabled, id, ScriptCaller.Create(player.SpawnDamageDealtEffect2), CachedObjectsParams.PARAM2_FLOAT_FLOAT);
552 }
553
554 //---------------------------------------------
555 static void CBMiscGoUnconscious(bool enabled, int id)
556 {
557 DiagButtonRPC(enabled, id, ERPCs.DIAG_MISC_GO_UNCONSCIOUS, true);
558 }
559
560 //---------------------------------------------
561 static void CBMiscGoUnconsciousDelayed(bool enabled, int id)
562 {
563 DiagButtonRPC(enabled, id, ERPCs.DIAG_MISC_GO_UNCONSCIOUS_DELAYED, true);
564 }
565
566 //---------------------------------------------
567 static void CBMiscQuickRestrain(bool enabled)
568 {
569 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
570 DiagToggleRPC(enabled, player.IsQuickRestrain(), ERPCs.DIAG_MISC_QUICK_RESTRAIN);
571 }
572
573 //---------------------------------------------
574 static void CBMiscHairHide(bool enabled, int id)
575 {
576 int value = DiagMenu.GetRangeValue(DiagMenuIDs.MISC_HAIR_LEVEL);
577 DiagButtonRPCIntInt(enabled, id, value, enabled, ERPCs.DIAG_MISC_HAIR_LEVEL_HIDE, true);
578 }
579
580 //---------------------------------------------
581 static void CBMiscHairHideAll(bool enabled)
582 {
584 CachedObjectsParams.PARAM2_INT_INT.param2 = enabled;
585
586 SendDiagRPC(CachedObjectsParams.PARAM2_INT_INT, ERPCs.DIAG_MISC_HAIR_LEVEL_HIDE, true);
587 }
588
589 //---------------------------------------------
590 static void CBMiscCamShake(bool enabled, int id)
591 {
592 DayZPlayerCamera cam = GetGame().GetPlayer().GetCurrentCamera();
593 DiagButtonAction(enabled, id, ScriptCaller.Create(cam.SpawnDiagCameraShake));
594 }
595
596 //---------------------------------------------
597 static void CBMiscQuickFishing(bool enabled)
598 {
599 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
600 DiagToggleRPC(enabled, player.IsQuickFishing(), ERPCs.DIAG_MISC_QUICK_FISHING);
601 }
602
603 //---------------------------------------------
604 static void CBMiscShockImpact(bool enabled, int id)
605 {
606 DiagButtonAction(enabled, id, ScriptCaller.Create(ShockImpact));
607 }
608
609 static void ShockImpact()
610 {
611 static float intensity;
612 intensity += 0.25;
613 intensity = Math.WrapFloat(intensity, 0.25, 1);
614
615 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
616 player.SpawnShockEffect(intensity);
617 }
618
619 //---------------------------------------------
620 static void CBMiscPlugArrows(bool enabled)
621 {
622 GetGame().EnableEMPlugs(enabled);
623 }
624
625 //---------------------------------------------
626 static void CBMiscTargetableByAI(bool enabled, int id)
627 {
628 PlayerBase player = GetPlayer();
629 if (player)
630 DiagToggleRPC(enabled, player.m_CanBeTargetedDebug, ERPCs.DIAG_MISC_TARGETABLE_BY_AI);
631 }
632
633 //---------------------------------------------
634 static void CBMiscHitIndication()
635 {
636 PlayerBase player = GetPlayer();
637
638 if (DiagMenu.GetBool(DiagMenuIDs.MISC_HIT_INDICATION_DEBUG))
639 {
640 HitDirectionEffectBase.m_Mode = DiagMenu.GetValue(DiagMenuIDs.MISC_HIT_INDICATION_MODE);
641 HitDirectionEffectBase.m_ID = DiagMenu.GetValue(DiagMenuIDs.MISC_HIT_INDICATION_TYPE);
646 HitDirectionEffectBase.m_Scatter = DiagMenu.GetRangeValue(DiagMenuIDs.MISC_HIT_INDICATION_SCATTER);
647
648 if (player)
649 {
650 player.SetHitPPEEnabled(!DiagMenu.GetBool(DiagMenuIDs.MISC_HIT_INDICATION_DISABLE_PPE));
651 }
652 }
653 else
654 {
656 if (player)
657 {
658 player.SetHitPPEEnabled(CfgGameplayHandler.GetHitIndicationPPEEnabled());
659 }
660 }
661 }
662
663 //---------------------------------------------
664 static void CBMiscHitIndicationSpawnHit(bool enabled, int id)
665 {
666 DiagButtonAction(enabled, id, ScriptCaller.Create(SpawnHitDirEffect));
667 }
668
669 static void SpawnHitDirEffect()
670 {
671 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
672 GetGame().GetMission().GetHud().SpawnHitDirEffect(player, DiagMenu.GetRangeValue(DiagMenuIDs.MISC_HIT_INDICATION_SPAWN_HIT_DIRECTION), 1.0);
673 }
674
675 //---------------------------------------------
676 static void CBMiscFreezeEntity(bool enabled, int id)
677 {
678 DiagButtonAction(enabled, id, ScriptCaller.Create(FreezeEntity));
679 }
680
681 static void FreezeEntity()
682 {
683 EntityAI entity;
684 if (PluginSceneManager.GetInstance() && PluginSceneManager.GetInstance().IsOpened())
685 {
686 // Scene Editor
687 SceneObject scene_obj = PluginSceneManager.GetInstance().GetSelectedSceneObject();
688
689 if (scene_obj)
690 {
691 entity = scene_obj.GetObject();
692 }
693 }
694 else
695 {
696 // FreeDebugCamera
697 FreeDebugCamera camera = FreeDebugCamera.GetInstance();
698 entity = EntityAI.Cast(camera.GetCrosshairObject());
699 }
700
701 if (entity)
702 entity.DisableSimulation(!entity.GetIsSimulationDisabled());
703 }
704
705 //---------------------------------------------
706 static void CBVehicleDebugOutput(int value)
707 {
708
709 int bitValue = 0;
710 if (value == 1)//"Basic"
711 {
712 bitValue = EVehicleDebugOutputType.DAMAGE_APPLIED;
713 }
714 if (value == 2)//"Extended"
715 {
716 bitValue = EVehicleDebugOutputType.DAMAGE_APPLIED | EVehicleDebugOutputType.DAMAGE_CONSIDERED;
717 }
718 else if (value == 3)//"Contact"
719 {
720 bitValue = EVehicleDebugOutputType.CONTACT;
721 }
722 else if (value == 4)//"Basic" + "Contact"
723 {
724 bitValue = EVehicleDebugOutputType.DAMAGE_APPLIED | EVehicleDebugOutputType.CONTACT;
725 }
726 SendDiagRPC(bitValue, ERPCs.DIAG_VEHICLE_DEBUG_OUTPUT, true);
727 }
728
729 //---------------------------------------------
730 static void CBDumpCrashData(bool value)
731 {
732 if (value)
733 {
734 SendDiagRPC(true, ERPCs.DIAG_VEHICLES_DUMP_CRASH_DATA_REQUEST, true);
735 DiagMenu.SetValue(DiagMenuIDs.VEHICLE_DUMP_CRASH_DATA, 0);
736 }
737 //DiagButtonRPC(value, DiagMenuIDs.VEHICLE_DUMP_CRASH_DATA, ERPCs.DIAG_VEHICLES_DUMP_CRASH_DATA_REQUEST, true);
738
739 }
740
741 //---------------------------------------------
742 static void SimulateMode(bool enabled, int id, int rpc)
743 {
744 int value = DiagMenu.GetRangeValue(DiagMenuIDs.SIMULATE_MODE);
745
746 switch (value)
747 {
748 case 0:
749 {
750 DiagButtonRPC(enabled, id, rpc, true);
751 break;
752 }
753 case 1:
754 {
755 DiagButtonRPCSelf(enabled, id, rpc);
756 break;
757 }
758 case 2:
759 {
760 DiagButtonRPC(enabled, id, rpc, true);
761 DiagButtonRPCSelf(enabled, id, rpc);
762 break;
763 }
764 }
765 }
766
767 //---------------------------------------------
768 static void CBSimulateInfiniteLoop(bool enabled, int id)
769 {
770 SimulateMode(enabled, id, ERPCs.DIAG_SIMULATE_INFINITE_LOOP);
771 }
772
773 //---------------------------------------------
774 static void CBSimulateNullPointer(bool enabled, int id)
775 {
776 SimulateMode(enabled, id, ERPCs.DIAG_SIMULATE_NULL_POINTER);
777 }
778
779 //---------------------------------------------
780 static void CBSimulateDivisionByZero(bool enabled, int id)
781 {
782 SimulateMode(enabled, id, ERPCs.DIAG_SIMULATE_DIVISION_BY_ZERO);
783 }
784
785 //---------------------------------------------
786 static void CBSimulateErrorFunction(bool enabled, int id)
787 {
788 SimulateMode(enabled, id, ERPCs.DIAG_SIMULATE_ERROR_FUNCTION);
789 }
790
791 //---------------------------------------------
792 static void CBWeaponParticles(bool enabled)
793 {
794 DiagToggleRPCServer(enabled, PrtTest.m_GunParticlesState, ERPCs.DIAG_WEAPON_PARTICLES);
795 }
796
797 //---------------------------------------------
798 static void CBWeaponDebug(bool enabled)
799 {
800 PlayerBase player = GetPlayer();
801 DiagToggleAction(enabled, ScriptCaller.Create(player.ShowWeaponDebug), player.IsWeaponDebugEnabled());
802 }
803
804 //---------------------------------------------
805 static void CBWeaponAimNoise(bool enabled)
806 {
807 PlayerBase player = GetPlayer();
808 if (player)
809 {
810 DayZPlayerImplementAiming aimModel = player.GetAimingModel();
811 DiagToggleAction(enabled, ScriptCaller.Create(aimModel.SetAimNoiseAllowed), aimModel.IsAimNoiseAllowed());
812 }
813 }
814
815 //---------------------------------------------
816 static void CBWeaponRecoil(bool enabled)
817 {
818 PlayerBase player = GetPlayer();
819 if (player)
820 {
821 DayZPlayerImplementAiming aimModel = player.GetAimingModel();
822 DiagToggleRPC(enabled, aimModel.IsProceduralRecoilEnabled(), ERPCs.DIAG_WEAPON_RECOIL);
823 }
824 }
825
826 //---------------------------------------------
827 static void CBWeaponUnlimitedAmmo(bool enabled)
828 {
829 DiagDebugAction(DebugActionType.UNLIMITED_AMMO, enabled);
830 }
831
832 //---------------------------------------------
833 static void CBWeaponBurstVersion(int value)
834 {
835 PlayerBase player = GetPlayer();
836 WeaponManager wpnMngr = player.GetWeaponManager();
837 DiagToggleRPC(value, wpnMngr.GetBurstOption(), ERPCs.DIAG_WEAPON_BURST_VERSION);
838 }
839
840 //---------------------------------------------
841 static void CBBleedingSources(bool enabled)
842 {
843 PlayerBase player = GetPlayer();
844 player.GetBleedingManagerRemote().SetDiag(enabled);
845 }
846
847 //---------------------------------------------
848 static void CBBleedingDisableBloodLoss(bool enabled)
849 {
850 SendDiagRPC(enabled, ERPCs.DIAG_BLEEDING_DISABLE_BLOOD_LOSS, true);
851 }
852
853 //---------------------------------------------
854 static void CBBleedingActivateSource(int value)
855 {
856 SendDiagRPC(value, ERPCs.DIAG_BLEEDING_ACTIVATE_SOURCE, true);
857 }
858
859 //---------------------------------------------
860 static void CBBleedingActivateAllSources(bool enabled, int id)
861 {
862 DiagButtonRPC(enabled, id, ERPCs.DIAG_BLEEDING_ACTIVATE_ALL_SOURCES, true);
863 }
864
865 //---------------------------------------------
866 static void CBBleedingActivateSourceLevel(int value)
867 {
868 PlayerBase player = GetPlayer();
869 BleedingSourcesManagerBase mgr = player.GetBleedingManagerRemote();
870
871 int idx = 100; //invalid index, just deletes all
872 if (value != 0)
873 {
874 string bone = ""; //lower-case!
875 switch (value)
876 {
877 case 1: //PlayerConstants.BLEEDING_SOURCE_FLOW_MODIFIER_LOW
878 bone = "lefttoebase";
879 break;
880
881 case 2: //PlayerConstants.BLEEDING_SOURCE_FLOW_MODIFIER_MEDIUM
882 bone = "leftarm";
883 break;
884
885 case 3: //PlayerConstants.BLEEDING_SOURCE_FLOW_MODIFIER_HIGH
886 bone = "neck";
887 break;
888 }
889
890 int count = mgr.m_BleedingSourceZone.Count();
891
892 for (int i = 0; i < count; ++i)
893 {
894 if (mgr.m_BleedingSourceZone.GetKey(i) == bone)
895 {
896 idx = i;
897 break;
898 }
899 }
900 }
901
902 CBBleedingActivateSource(idx);
903 }
904
905 //---------------------------------------------
906 static void CBBleedingReload(bool enabled, int id)
907 {
908 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
909 BleedingSourcesManagerRemote bsMngrRem = player.GetBleedingManagerRemote();
910 DiagButtonAction(enabled, id, ScriptCaller.Create(bsMngrRem.Reload));
911 }
912
913 //---------------------------------------------
914 static void CBBBleedingIndicators()
915 {
916 bool diagEnable = DiagMenu.GetBool(DiagMenuIDs.BLEEDINGINDICATORS);
918 {
920 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
921 if (player && player.GetBleedingManagerRemote())
922 {
923 player.GetBleedingManagerRemote().Reload();
924 }
925 }
926
928
930 {
943
944 DbgBleedingIndicationStaticInfo.m_DbgDropDesaturate = DiagMenu.GetBool(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_ENABLEDESATURATION);
945 DbgBleedingIndicationStaticInfo.m_DbgDesaturationEnd = DiagMenu.GetRangeValue(DiagMenuIDs.BLEEDINGINDICATORS_DROP_COLOR_DESATURATIONEND);
951 }
952 }
953
954 //---------------------------------------------
955 static void CBLogsActions(bool enabled)
956 {
957 DiagToggleRPC(enabled, LogManager.IsActionLogEnable(), ERPCs.DIAG_LOGS_ACTIONS);
958 }
959
960 //---------------------------------------------
961 static void CBLogsWeapons(bool enabled)
962 {
963 DiagToggleRPC(enabled, LogManager.IsWeaponLogEnable(), ERPCs.DIAG_LOGS_WEAPONS);
964 }
965
966 //---------------------------------------------
967 static void CBLogsSymptoms(bool enabled)
968 {
969 DiagToggleRPC(enabled, LogManager.IsSymptomLogEnable(), ERPCs.DIAG_LOGS_SYMPTOMS);
970 }
971
972 //---------------------------------------------
973 static void CBLogsInventoryMove(bool enabled)
974 {
975 DiagToggleRPC(enabled, LogManager.IsInventoryMoveLogEnable(), ERPCs.DIAG_LOGS_INVENTORY_MOVE);
976 }
977
978 //---------------------------------------------
979 static void CBLogsInventoryReservation(bool enabled)
980 {
981 DiagToggleRPC(enabled, LogManager.IsInventoryReservationLogEnable(), ERPCs.DIAG_LOGS_INVENTORY_RESERVATION);
982 }
983
984 //---------------------------------------------
985 static void CBLogsInventoryHFSM(bool enabled)
986 {
987 DiagToggleRPC(enabled, LogManager.IsInventoryHFSMLogEnable(), ERPCs.DIAG_LOGS_INVENTORY_HFSM);
988 }
989
990 //---------------------------------------------
991 static void CBTriggerDebug(bool enabled)
992 {
993 EnableDebugSystemClient(ESubscriberSystems.TRIGGERS, enabled);
994 }
995
996 //---------------------------------------------
997 static void CBBaseBuildingWood(bool enabled)
998 {
999 SendDiagRPC(enabled, ERPCs.DIAG_BASEBUILDING_WOOD, true);
1000 }
1001
1002 //---------------------------------------------
1003 static void CBBaseBuildingGate(bool enabled)
1004 {
1005 SendDiagRPC(enabled, ERPCs.DIAG_BASEBUILDING_GATE, true);
1006 }
1007
1008 //---------------------------------------------
1009 static void CBFinishersFinisherForced(int value)
1010 {
1011 PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
1012 DiagToggleRPC(value - 1, player.GetMeleeCombat().DebugGetForcedFinisherType(), ERPCs.DIAG_FINISHERS_FORCE_FINISHER);
1013 }
1014
1015 //---------------------------------------------
1016 static void CBCameraToolsEnableRemoteCamera(bool enabled)
1017 {
1018 PlayerBase player = GetPlayer();
1019
1020 if (!player)
1021 return;
1022
1023 if (!enabled && player.m_CameraToolsMenuClient)
1024 {
1025 player.m_CameraToolsMenuClient.DelayedDestroy();
1026 }
1027
1028 auto param = new Param2<bool, EntityAI>(enabled, GetGame().GetPlayer());
1029 GetGame().RPCSingleParam( null, ERPCs.DIAG_CAMERATOOLS_CAM_SUBSCRIBE, param, true );
1030 }
1031
1032 //---------------------------------------------
1033 // Misc
1034 //---------------------------------------------
1035 static PlayerBase GetPlayer()
1036 {
1037 if (!GetGame())
1038 return null;
1039
1040 return PlayerBase.Cast(GetGame().GetPlayer());
1041 }
1042
1043 //---------------------------------------------
1044 // DebugAction
1045 //---------------------------------------------
1046 static void DiagDebugAction(DebugActionType type, bool enable)
1047 {
1048 int mask;
1049 if (enable)
1050 {
1051 mask = (ItemBase.GetDebugActionsMask() | type);
1052 }
1053 else
1054 {
1055 mask = (ItemBase.GetDebugActionsMask() & (~type));
1056 }
1057
1058 DiagToggleRPCAction(mask, ScriptCaller.Create(ItemBase.SetDebugActionsMask), ItemBase.HasDebugActionsMask(type), ERPCs.DIAG_ITEM_DEBUG_ACTIONS);
1059 }
1060
1061 //---------------------------------------------
1062 // SubscriberClient
1063 //---------------------------------------------
1064 static void EnableDebugSystemClient(ESubscriberSystems system, bool enable)
1065 {
1066 int mask;
1067 if (enable)
1068 {
1069 mask = (m_SystemsMask | system);//turn on bit
1070 }
1071 else
1072 {
1073 mask = (m_SystemsMask & (~system));//turn off bit
1074 }
1075
1076 if (mask != m_SystemsMask)
1077 {
1078 CachedObjectsParams.PARAM1_INT.param1 = mask;
1079 GetGame().RPCSingleParam( GetGame().GetPlayer(), ERPCs.DEV_DIAGMENU_SUBSCRIBE, CachedObjectsParams.PARAM1_INT, true, GetGame().GetPlayer().GetIdentity() );
1080 m_SystemsMask = mask;
1081 }
1082 }
1083
1084
1085 //---------------------------------------------
1086 // Helper diag functions
1087 //---------------------------------------------
1088 static void DiagButtonActionParams(bool enabled, int id, ScriptCaller action, Param params)
1089 {
1090 if ( enabled )
1091 {
1092 action.Invoke(params);
1093 DiagMenu.SetValue(id, false);
1094 }
1095 }
1096
1097 //---------------------------------------------
1098 static void DiagButtonAction(bool enabled, int id, ScriptCaller action)
1099 {
1100 DiagButtonActionParams(enabled, id, action, null);
1101 }
1102
1103 //---------------------------------------------
1104 static void DiagButtonRPC(bool enabled, int id, int rpc, bool serverOnly = false)
1105 {
1106 ScriptCaller action = ScriptCaller.Create(SendDiagRPCBasic);
1107 SendDiagRPCBasicParam params = new SendDiagRPCBasicParam(rpc, serverOnly);
1108
1109 DiagButtonActionParams(enabled, id, action, params);
1110 }
1111
1112 //---------------------------------------------
1113 static void DiagButtonRPCSelf(bool enabled, int id, int rpc)
1114 {
1115 ScriptCaller action = ScriptCaller.Create(SendDiagRPCSelfBasic);
1116 SendDiagRPCSelfBasicParam params = new SendDiagRPCSelfBasicParam(rpc);
1117
1118 DiagButtonActionParams(enabled, id, action, params);
1119 }
1120
1121 //---------------------------------------------
1122 static void DiagButtonRPCIntInt(bool enabled, int id, int value, int value2, int rpc, bool serverOnly = false)
1123 {
1124 ScriptCaller action = ScriptCaller.Create(SendDiagRPCParam);
1125
1126 CachedObjectsParams.PARAM2_INT_INT.param1 = value;
1127 CachedObjectsParams.PARAM2_INT_INT.param2 = value2;
1128 SendDiagRPCParamParam params = new SendDiagRPCParamParam(rpc, serverOnly, CachedObjectsParams.PARAM2_INT_INT);
1129
1130 DiagButtonActionParams(enabled, id, action, params);
1131 }
1132
1133 //---------------------------------------------
1134 static void DiagToggleRPC(bool value, int current, int rpc)
1135 {
1136 if (value != current)
1137 {
1138 SendDiagRPC(value, rpc, false);
1139 }
1140 }
1141
1142 //---------------------------------------------
1143 static void DiagToggleRPC(int value, int current, int rpc)
1144 {
1145 if (value != current)
1146 {
1147 SendDiagRPC(value, rpc, false);
1148 }
1149 }
1150
1151 //---------------------------------------------
1152 static void DiagToggleRPC(float value, int current, int rpc)
1153 {
1154 if (value != current)
1155 {
1156 SendDiagRPC(value, rpc, false);
1157 }
1158 }
1159
1160 //---------------------------------------------
1161 static void DiagToggleRPCServer(bool value, out bool current, int rpc)
1162 {
1163 if (value != current)
1164 {
1165 current = value;
1166 SendDiagRPC(value, rpc, true);
1167 }
1168 }
1169
1170 //---------------------------------------------
1171 static void DiagToggleRPCServer(int value, out int current, int rpc)
1172 {
1173 if (value != current)
1174 {
1175 current = value;
1176 SendDiagRPC(value, rpc, true);
1177 }
1178 }
1179
1180 //---------------------------------------------
1181 static void DiagToggleRPCServer(float value, out float current, int rpc)
1182 {
1183 if (value != current)
1184 {
1185 current = value;
1186 SendDiagRPC(value, rpc, true);
1187 }
1188 }
1189
1190 //---------------------------------------------
1191 static void DiagToggleRPCAction(int value, ScriptCaller action, int current, int rpc)
1192 {
1193 if (value != current)
1194 {
1195 SendDiagRPC(value, rpc);
1196 action.Invoke(value);
1197 }
1198 }
1199
1200 //---------------------------------------------
1201 static void DiagToggleAction(int value, ScriptCaller action, int current)
1202 {
1203 if (value != current)
1204 {
1205 action.Invoke(value);
1206 }
1207 }
1208
1209 //---------------------------------------------
1210 static void SendDiagRPCSelf(Param value, int rpc)
1211 {
1212 PlayerBase player = GetPlayer();
1213 if (player)
1214 {
1215 GetGame().RPCSelfSingleParam(player, rpc, value);
1216 }
1217 }
1218
1219 //---------------------------------------------
1220 static void SendDiagRPCSelfBasic(SendDiagRPCSelfBasicParam param)
1221 {
1222 SendDiagRPCSelf(null, param.param1);
1223 }
1224
1225 //---------------------------------------------
1226 static void SendDiagRPCSelfParam(SendDiagRPCSelfParamParam param)
1227 {
1228 SendDiagRPCSelf(param.param2, param.param1);
1229 }
1230
1231 //---------------------------------------------
1232 static void SendDiagRPC(Param value, int rpc, bool serverOnly = false)
1233 {
1234 PlayerBase player = GetPlayer();
1235 if (player)
1236 {
1237 PlayerIdentity playerIdentity = player.GetIdentity();
1238 if (GetGame().IsMultiplayer() && playerIdentity)
1239 {
1240 GetGame().RPCSingleParam(player, rpc, value, true, playerIdentity);
1241 }
1242
1243 if (!GetGame().IsMultiplayer() || !serverOnly)
1244 {
1245 SendDiagRPCSelf(value, rpc);
1246 }
1247 }
1248 }
1249
1250 //---------------------------------------------
1251 static void SendDiagRPCBasic(SendDiagRPCBasicParam param)
1252 {
1253 SendDiagRPC(null, param.param1, param.param2);
1254 }
1255
1256 //---------------------------------------------
1257 static void SendDiagRPCParam(SendDiagRPCParamParam param)
1258 {
1259 SendDiagRPC(param.param3, param.param1, param.param2);
1260 }
1261
1262 //---------------------------------------------
1263 static void SendDiagRPC(int rpc, bool serverOnly = false)
1264 {
1265 SendDiagRPC(null, rpc, serverOnly);
1266 }
1267
1268 //---------------------------------------------
1269 static void SendDiagRPC(bool value, int rpc, bool serverOnly = false)
1270 {
1271 CachedObjectsParams.PARAM1_BOOL.param1 = value;
1272 SendDiagRPC(CachedObjectsParams.PARAM1_BOOL, rpc, serverOnly);
1273 }
1274
1275 //---------------------------------------------
1276 static void SendDiagRPC(int value, int rpc, bool serverOnly = false)
1277 {
1278 CachedObjectsParams.PARAM1_INT.param1 = value;
1279 SendDiagRPC(CachedObjectsParams.PARAM1_INT, rpc, serverOnly);
1280 }
1281
1282 //---------------------------------------------
1283 static void SendDiagRPC(float value, int rpc, bool serverOnly = false)
1284 {
1285 CachedObjectsParams.PARAM1_FLOAT.param1 = value;
1286 SendDiagRPC(CachedObjectsParams.PARAM1_FLOAT, rpc, serverOnly);
1287 }
1288#endif
1289}
enum EScriptInvokerInsertFlags ScriptCaller()
Designed to hold 1 valid call.
class RecipeCacheData int
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
Mission mission
DiagMenuIDs
Definition EDiagMenuIDs.c:2
ERPCs
Definition ERPCs.c:2
PlayerBase GetPlayer()
DebugActionType
PluginBase GetPlugin(typename plugin_type)
ref map< string, ref BleedingSourceZone > m_BleedingSourceZone
proto native Mission GetMission()
void RPCSelfSingleParam(Object target, int rpcType, Param param)
Definition Game.c:889
proto native DayZPlayer GetPlayer()
void RPCSingleParam(Object target, int rpc_type, Param param, bool guaranteed, PlayerIdentity recipient=null)
see CGame.RPC
Definition Game.c:882
static ref Param2< int, int > PARAM2_INT_INT
static ref Param1< bool > PARAM1_BOOL
static ref Param1< float > PARAM1_FLOAT
static ref Param2< float, float > PARAM2_FLOAT_FLOAT
static ref Param1< int > PARAM1_INT
static bool GetHitIndicationPPEEnabled()
static void CheckValues()
range 0..180, randomized offset of direction to make it less acurate
static float m_DistanceAdjust
range 0..1, a point where the fading starts
void Show(bool show)
Definition gameplay.c:642
void SpawnHitDirEffect(DayZPlayer player, float hit_direction, float intensity_max)
proto native Transport GetTransport()
proto native int GetVehicleSeat()
static bool IsInventoryHFSMLogEnable()
Definition Debug.c:620
static bool IsInventoryMoveLogEnable()
Definition Debug.c:600
static bool IsWeaponLogEnable()
Definition Debug.c:640
static bool IsActionLogEnable()
Definition Debug.c:590
static bool IsInventoryReservationLogEnable()
Definition Debug.c:610
static bool IsSymptomLogEnable()
Definition Debug.c:630
Definition EnMath.c:7
Mission class.
Definition gameplay.c:670
void RefreshCrosshairVisibility()
Definition gameplay.c:754
Hud GetHud()
Definition gameplay.c:697
void HideCrosshairVisibility()
Definition gameplay.c:756
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
The class that will be instanced (moddable)
Definition gameplay.c:378
void OnInit()
void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
void PluginSceneManager()
static bool m_GunParticlesState
Definition gameplay.c:1475
EntityAI GetObject()
Definition SceneObject.c:59
Serialization general interface. Serializer API works with:
Definition Serializer.c:56
proto bool Read(void value_in)
void CreateDebugWindow(bool create)
override Shape DebugFreeAreaAtDoor(int currentSeat, float maxAllowedObjHeight=0.5, float horizontalExtents=0.5, float playerHeight=1.7)
Definition Car.c:112
class DayZPlayerCameraResult DayZPlayerCamera(DayZPlayer pPlayer, HumanInputController pInput)
Definition dayzplayer.c:56
proto native CGame GetGame()
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
static proto void SetValue(int id, int value)
Set value at the given script id.
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead
static proto bool BindCallback(int id, func callback)
Bind a callback to the given id.
static proto int GetValue(int id)
Get value as int from the given script id.
static proto float GetRangeValue(int id)
Get range value at the given script id.
static proto float WrapFloat(float f, float min, float max)
Returns wrap number to specified interval [min, max[.
proto native void OnUpdate()
Definition tools.c:338