9 static int m_SystemsMask;
12 bool m_ModifiersEnabled =
true;
14 bool m_StaminaDisabled;
18 bool m_LogPlayerStats;
19 Shape m_VehicleFreeAreaBox;
20 ref EnvDebugData m_EnvDebugData;
21 ref FallDamageDebugData m_FallDamageDebugData;
30 protected void BindCallbacks()
243 super.OnRPC(player, rpc_type, ctx);
247 case ERPCs.DIAG_MISC_ENVIRONMENT_DEBUG_DATA:
250 m_EnvDebugData =
new EnvDebugData();
252 ctx.
Read(m_EnvDebugData);
256 case ERPCs.DIAG_MISC_FALLDAMAGE_DEBUG_DATA:
258 if (!m_FallDamageDebugData)
259 m_FallDamageDebugData =
new FallDamageDebugData();
261 ctx.
Read(m_FallDamageDebugData);
265 case ERPCs.DIAG_VEHICLES_DUMP_CRASH_DATA_CONTENTS:
267 Param1<array<ref CrashDebugData>> par =
new Param1<array<ref CrashDebugData>>(null);
270 CrashDebugData.DumpDataArray(par.param1);
277 override void OnUpdate(
float delta_time)
279 super.OnUpdate(delta_time);
289 UpdateMiscVehicleGetOutBox();
290 UpdateEnvironmentDebug();
292 UpdateMaterialDebug();
296 void CheckTimeAccel()
298 if (!FeatureTimeAccel.m_CurrentTimeAccel)
305 TimeAccelParam param = GetTimeAccelMenuState();
307 if (!FeatureTimeAccel.AreTimeAccelParamsSame(param, FeatureTimeAccel.m_CurrentTimeAccel))
309 int timeAccelBig = param.param2;
310 float timeAccelSmall = param.param2 - timeAccelBig;
311 FeatureTimeAccel.CopyTimeAccelClipboard(param.param1, timeAccelBig, timeAccelSmall, param.param3 );
313 FeatureTimeAccel.m_CurrentTimeAccel = param;
320 static void CBCraftingGenerate(
bool enabled,
int id)
322 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
323 DiagButtonAction(enabled,
id,
ScriptCaller.Create(pluginRecipesManager.CallbackGenerateCache));
327 static void CBCraftingInstant(
bool enabled)
329 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
330 DiagToggleRPC(enabled, pluginRecipesManager.IsEnableDebugCrafting(),
ERPCs.DIAG_CRAFTING_INSTANT);
334 static void CBCraftingDump(
bool enabled,
int id)
336 PluginRecipesManager pluginRecipesManager = PluginRecipesManager.Cast(
GetPlugin(PluginRecipesManager));
337 DiagButtonAction(enabled,
id,
ScriptCaller.Create(pluginRecipesManager.GenerateHumanReadableRecipeList));
341 static void CBCheatsModifiers(
bool enabled)
344 DiagToggleRPCServer(enabled, pluginDiag.m_ModifiersEnabled,
ERPCs.DIAG_CHEATS_MODIFIERS);
348 static void CBCheatsKillPlayer(
bool enabled,
int id)
350 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_CHEATS_KILL_PLAYER,
true);
354 static void CBCheatsInvincibility(
int value)
357 DiagToggleRPCServer(value, pluginDiag.m_IsInvincible,
ERPCs.DIAG_CHEATS_INVINCIBILITY);
361 static void CBCheatsStaminaDisable(
bool enabled)
365 player.SetStaminaDisabled(enabled);
368 DiagToggleRPCServer(enabled, pluginDiag.m_StaminaDisabled,
ERPCs.DIAG_CHEATS_DISABLE_STAMINA);
372 static void CBCheatsResetPlayer(
bool enabled,
int id)
376 player.ResetPlayer(
false);
377 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_CHEATS_RESET_PLAYER,
true);
381 static void CBCheatsResetPlayerMax(
bool enabled,
int id)
385 player.ResetPlayer(
true);
386 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_CHEATS_RESET_PLAYER_MAX,
true);
390 static void CBCheatsInventoryAccess(
bool enabled)
392 DiagToggleRPCServer(enabled,
PlayerBase.DEBUG_INVENTORY_ACCESS,
ERPCs.DIAG_CHEATS_INVENTORY_ACCESS);
396 static void CBCheatsFixItems(
bool enabled,
int id)
398 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_CHEATS_ITEMS_FIX,
true);
401 static void CBCreateHit(
bool enabled,
int id)
403 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_CHEATS_CREATE_HIT,
true);
406 static void CBCreateHitLight(
bool enabled,
int id)
408 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_CHEATS_CREATE_HIT_LIGHT,
true);
412 static void CBPlayerAgentsInjectActions(
bool enabled)
418 static void CBSoftSkillsShowDebug(
bool enabled)
425 static void CBSoftSkillsToggleState(
bool enabled)
432 static void CBSoftSkillsToggleModel(
bool enabled)
435 DiagToggleRPC(enabled, ssMngr.
IsLinear(),
ERPCs.DIAG_SOFT_SKILLS_TOGGLE_MODEL);
439 static void CBSoftSkillsSpecialtyValue(
float value)
446 static void CBLifespanBloodyHands(
bool enabled)
450 DiagToggleRPCServer(enabled, player.HasBloodyHands(),
ERPCs.DIAG_LIFESPAN_BLOODY_HANDS);
454 static void CBLifespanPlaytimeUpdate(
float value)
457 DiagToggleRPCServer(value * 60, pluginDiag.m_Playtime,
ERPCs.DIAG_LIFESPAN_PLAYTIME_UPDATE);
461 static void CBMiscPersonalLight(
bool enabled)
468 static void CBMiscItemDebugActions(
bool enabled)
474 static void CBMiscLogPlayerStats(
bool enabled)
477 DiagToggleRPC(enabled, pluginDiag.m_LogPlayerStats,
ERPCs.DIAG_MISC_LOG_PLAYER_STATS);
481 static void CBMiscForceHintIndex(
int index)
487 static void CBMiscPermanentCrossHair(
bool enabled)
489 PluginPermanentCrossHair crosshair = PluginPermanentCrossHair.Cast(
GetPlugin(PluginPermanentCrossHair));
490 crosshair.SwitchPermanentCrossHair(enabled);
494 void UpdateMiscVehicleGetOutBox()
498 if (m_VehicleFreeAreaBox)
500 m_VehicleFreeAreaBox.Destroy();
501 m_VehicleFreeAreaBox = null;
510 else if (m_VehicleFreeAreaBox)
512 m_VehicleFreeAreaBox.Destroy();
513 m_VehicleFreeAreaBox = null;
518 static void CBMiscToggleHud(
bool enabled)
521 mission.GetHud().Show(!enabled);
524 mission.HideCrosshairVisibility();
528 mission.RefreshCrosshairVisibility();
533 static void CBMiscEnvironmentDebug(
bool enabled)
535 SendDiagRPC(enabled,
ERPCs.DIAG_MISC_ENVIRONMENT_DEBUG);
538 void UpdateEnvironmentDebug()
541 Environment.DisplayEnvDebugPlayerInfo(
true, m_EnvDebugData);
542 else if (m_EnvDebugData)
543 m_EnvDebugData = null;
547 void UpdateMaterialDebug()
558 string materialPath =
"Graphics/Materials/postprocess/ghost";
568 float channelWeights[] = { 0, 0, 0, 0 };
569 float noiseOffset[] = { 0, 0 };
570 float noiseScale[] = { 1, 1 };
571 float noiseLo[] = { 0, 0, 0, 0 };
572 float noiseHi[] = { 1, 1, 1, 1 };
573 float ghostOffset[] = { 0, 0 };
574 float ghostScale[] = { 1, 1 };
575 float colormod[] = { 1, 1, 1, 0.5 };
576 int spacer_height = 10;
578 float rw, gw, bw, aw;
589 float nsx = 1, nsy = 1;
599 float rl = 0, rh = 1;
600 float gl = 0, gh = 1;
601 float bl = 0, bh = 1;
602 float al = 0, ah = 1;
623 float gox = 50, goy = 25;
624 float gsx = 0.85, gsy = 0.85;
634 float cmr = 1, cmg = 1, cmb = 1, cma = 1;
644 channelWeights = { rw, gw, bw, aw };
645 noiseOffset = { nox, noy };
646 noiseScale = { nsx, nsy };
647 noiseLo = { rl, gl, bl, al };
648 noiseHi = { rh, gh, bh, ah };
649 ghostOffset = { gox, goy };
650 ghostScale = { gsx, gsy };
651 colormod = { cmr, cmg, cmb, cma };
671 static void CBMiscEnvironmentLoggingDryWet(
bool enabled)
673 SendDiagRPC(enabled,
ERPCs.DIAG_MISC_ENVIRONMENT_LOGGING_DRYWET);
676 static void CBMiscEnvironmentLoggingItemHeat(
bool enabled)
678 SendDiagRPC(enabled,
ERPCs.DIAG_MISC_ENVIRONMENT_LOGGING_ITEMHEAT);
681 static void CBMiscFallDamageDebug(
bool enabled)
683 SendDiagRPC(enabled,
ERPCs.DIAG_MISC_FALLDAMAGE_DEBUG);
686 void UpdateFallDamageDebug()
690 else if (m_FallDamageDebugData)
691 m_FallDamageDebugData = null;
695 static void CBMiscDisplayPlayerInfo(
int value)
697 PluginRemotePlayerDebugClient prpdc = PluginRemotePlayerDebugClient.Cast(
GetPlugin(PluginRemotePlayerDebugClient));
702 static void CBMiscUniversalTemperatureSources(
bool enabled)
709 static void CBMiscBulletImpact(
bool enabled,
int id)
718 static void CBMiscGoUnconscious(
bool enabled,
int id)
720 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_MISC_GO_UNCONSCIOUS,
true);
724 static void CBMiscGoUnconsciousDelayed(
bool enabled,
int id)
726 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_MISC_GO_UNCONSCIOUS_DELAYED,
true);
730 static void CBMiscQuickRestrain(
bool enabled)
733 DiagToggleRPC(enabled, player.IsQuickRestrain(),
ERPCs.DIAG_MISC_QUICK_RESTRAIN);
737 static void CBMiscHairHide(
bool enabled,
int id)
740 DiagButtonRPCIntInt(enabled,
id, value, enabled,
ERPCs.DIAG_MISC_HAIR_LEVEL_HIDE,
true);
744 static void CBMiscHairHideAll(
bool enabled)
753 static void CBMiscCamShake(
bool enabled,
int id)
756 DiagButtonAction(enabled,
id,
ScriptCaller.Create(cam.SpawnDiagCameraShake));
760 static void CBMiscQuickFishing(
bool enabled)
763 DiagToggleRPC(enabled, player.IsQuickFishing(),
ERPCs.DIAG_MISC_QUICK_FISHING);
767 static void CBMiscShockImpact(
bool enabled,
int id)
769 DiagButtonAction(enabled,
id,
ScriptCaller.Create(ShockImpact));
772 static void ShockImpact()
774 static float intensity;
779 player.SpawnShockEffect(intensity);
783 static void CBMiscPlugArrows(
bool enabled)
785 GetGame().EnableEMPlugs(enabled);
789 static void CBMiscTargetableByAI(
bool enabled,
int id)
793 DiagToggleRPC(enabled, player.m_CanBeTargetedDebug,
ERPCs.DIAG_MISC_TARGETABLE_BY_AI);
797 static void CBMiscHitIndication()
827 static void CBMiscHitIndicationSpawnHit(
bool enabled,
int id)
829 DiagButtonAction(enabled,
id,
ScriptCaller.Create(SpawnHitDirEffect));
832 static void SpawnHitDirEffect()
839 static void CBDebugMonitor(
bool enabled,
int id)
841 SendDiagRPC(enabled,
ERPCs.DIAG_MISC_DEBUG_MONITOR,
true);
849 static void CBPRADrawAll(
bool enabled,
int id)
855 static void CBPRADetect(
bool enabled,
int id)
863 Print(
"player: " + player +
" | at position: " + player.GetPosition() +
" | intersects area: " + pra.
areaName);
865 Print(
"player: " + player +
" | at position: " + player.GetPosition() +
" | is NOT in any PlayerRestrictedArea");
871 static void CBMiscFreezeEntity(
bool enabled,
int id)
873 DiagButtonAction(enabled,
id,
ScriptCaller.Create(FreezeEntity));
876 static void FreezeEntity()
892 FreeDebugCamera camera = FreeDebugCamera.GetInstance();
893 entity =
EntityAI.Cast(camera.GetCrosshairObject());
897 entity.DisableSimulation(!entity.GetIsSimulationDisabled());
901 static void CBMiscFreezePlayer(
bool enabled,
int id)
903 DiagButtonAction(enabled,
id,
ScriptCaller.Create(FreezePlayer));
906 static void FreezePlayer()
910 player.DisableSimulation(!player.GetIsSimulationDisabled());
914 static void CBVehicleDebugOutput(
int value)
920 bitValue = EVehicleDebugOutputType.DAMAGE_APPLIED;
924 bitValue = EVehicleDebugOutputType.DAMAGE_APPLIED | EVehicleDebugOutputType.DAMAGE_CONSIDERED;
928 bitValue = EVehicleDebugOutputType.CONTACT;
932 bitValue = EVehicleDebugOutputType.DAMAGE_APPLIED | EVehicleDebugOutputType.CONTACT;
934 SendDiagRPC(bitValue,
ERPCs.DIAG_VEHICLE_DEBUG_OUTPUT,
true);
938 static void CBDumpCrashData(
bool value)
942 SendDiagRPC(
true,
ERPCs.DIAG_VEHICLES_DUMP_CRASH_DATA_REQUEST,
true);
950 static void SimulateMode(
bool enabled,
int id,
int rpc)
958 DiagButtonRPC(enabled,
id, rpc,
true);
963 DiagButtonRPCSelf(enabled,
id, rpc);
968 DiagButtonRPC(enabled,
id, rpc,
true);
969 DiagButtonRPCSelf(enabled,
id, rpc);
976 static void CBSimulateInfiniteLoop(
bool enabled,
int id)
978 SimulateMode(enabled,
id,
ERPCs.DIAG_SIMULATE_INFINITE_LOOP);
982 static void CBSimulateNullPointer(
bool enabled,
int id)
984 SimulateMode(enabled,
id,
ERPCs.DIAG_SIMULATE_NULL_POINTER);
988 static void CBSimulateDivisionByZero(
bool enabled,
int id)
990 SimulateMode(enabled,
id,
ERPCs.DIAG_SIMULATE_DIVISION_BY_ZERO);
994 static void CBSimulateErrorFunction(
bool enabled,
int id)
996 SimulateMode(enabled,
id,
ERPCs.DIAG_SIMULATE_ERROR_FUNCTION);
1000 static void CBWeaponParticles(
bool enabled)
1006 static void CBWeaponDebug(
bool enabled)
1009 DiagToggleAction(enabled,
ScriptCaller.Create(player.ShowWeaponDebug), player.IsWeaponDebugEnabled());
1013 static void CBWeaponAimNoise(
bool enabled)
1024 static void CBWeaponRecoil(
bool enabled)
1035 static void CBWeaponUnlimitedAmmo(
bool enabled)
1041 static void CBWeaponBurstVersion(
int value)
1045 DiagToggleRPC(value, wpnMngr.GetBurstOption(),
ERPCs.DIAG_WEAPON_BURST_VERSION);
1049 static void CBBleedingSources(
bool enabled)
1052 player.GetBleedingManagerRemote().SetDiag(enabled);
1056 static void CBBleedingDisableBloodLoss(
bool enabled)
1058 SendDiagRPC(enabled,
ERPCs.DIAG_BLEEDING_DISABLE_BLOOD_LOSS,
true);
1062 static void CBBleedingActivateSource(
int value)
1064 SendDiagRPC(value,
ERPCs.DIAG_BLEEDING_ACTIVATE_SOURCE,
true);
1068 static void CBBleedingActivateAllSources(
bool enabled,
int id)
1070 DiagButtonRPC(enabled,
id,
ERPCs.DIAG_BLEEDING_ACTIVATE_ALL_SOURCES,
true);
1074 static void CBBleedingActivateSourceLevel(
int value)
1086 bone =
"lefttoebase";
1100 for (
int i = 0; i < count; ++i)
1110 CBBleedingActivateSource(idx);
1114 static void CBBleedingReload(
bool enabled,
int id)
1117 BleedingSourcesManagerRemote bsMngrRem = player.GetBleedingManagerRemote();
1118 DiagButtonAction(enabled,
id,
ScriptCaller.Create(bsMngrRem.Reload));
1122 static void CBBBleedingIndicators()
1129 if (player && player.GetBleedingManagerRemote())
1131 player.GetBleedingManagerRemote().Reload();
1163 static void CBLogsActions(
bool enabled)
1169 static void CBLogsWeapons(
bool enabled)
1175 static void CBLogsSync(
bool enabled)
1181 static void CBLogsBaseBuilding(
bool enabled)
1187 static void CBLogsSymptoms(
bool enabled)
1193 static void CBLogsInventoryMove(
bool enabled)
1199 static void CBLogsInventoryReservation(
bool enabled)
1205 static void CBLogsInventoryHFSM(
bool enabled)
1211 static void CBLogsQuickbar(
bool enabled)
1217 static void CBLogsBleedingChances(
bool enabled)
1223 static void CBTriggerDebug(
bool enabled)
1225 EnableDebugSystemClient(ESubscriberSystems.TRIGGERS, enabled);
1229 static void CBBaseBuildingWood(
bool enabled)
1231 SendDiagRPC(enabled,
ERPCs.DIAG_BASEBUILDING_WOOD,
true);
1235 static void CBBaseBuildingGate(
bool enabled)
1237 SendDiagRPC(enabled,
ERPCs.DIAG_BASEBUILDING_GATE,
true);
1241 static void CBFinishersFinisherForced(
int value)
1244 DiagToggleRPC(value - 1, player.GetMeleeCombat().DebugGetForcedFinisherType(),
ERPCs.DIAG_FINISHERS_FORCE_FINISHER);
1248 static void CBCameraToolsEnableRemoteCamera(
bool enabled)
1255 if (!enabled && player.m_CameraToolsMenuClient)
1257 player.m_CameraToolsMenuClient.DelayedDestroy();
1280 vector hitPos, hitNormal;
1300 mask = (
ItemBase.GetDebugActionsMask() | type);
1304 mask = (
ItemBase.GetDebugActionsMask() & (~type));
1313 static void EnableDebugSystemClient(ESubscriberSystems system,
bool enable)
1318 mask = (m_SystemsMask | system);
1322 mask = (m_SystemsMask & (~system));
1325 if (mask != m_SystemsMask)
1329 m_SystemsMask = mask;
1337 static void DiagButtonActionParams(
bool enabled,
int id,
ScriptCaller action,
Param params)
1341 action.Invoke(params);
1347 static void DiagButtonAction(
bool enabled,
int id,
ScriptCaller action)
1349 DiagButtonActionParams(enabled,
id, action, null);
1353 static void DiagButtonRPC(
bool enabled,
int id,
int rpc,
bool serverOnly =
false)
1356 SendDiagRPCBasicParam params =
new SendDiagRPCBasicParam(rpc, serverOnly);
1358 DiagButtonActionParams(enabled,
id, action, params);
1362 static void DiagButtonRPCSelf(
bool enabled,
int id,
int rpc)
1365 SendDiagRPCSelfBasicParam params =
new SendDiagRPCSelfBasicParam(rpc);
1367 DiagButtonActionParams(enabled,
id, action, params);
1371 static void DiagButtonRPCIntInt(
bool enabled,
int id,
int value,
int value2,
int rpc,
bool serverOnly =
false)
1379 DiagButtonActionParams(enabled,
id, action, params);
1383 static void DiagToggleRPC(
bool value,
int current,
int rpc)
1385 if (value != current)
1387 SendDiagRPC(value, rpc,
false);
1392 static void DiagToggleRPC(
int value,
int current,
int rpc)
1394 if (value != current)
1396 SendDiagRPC(value, rpc,
false);
1401 static void DiagToggleRPC(
float value,
int current,
int rpc)
1403 if (value != current)
1405 SendDiagRPC(value, rpc,
false);
1410 static void DiagToggleRPCServer(
bool value, out
bool current,
int rpc)
1412 if (value != current)
1415 SendDiagRPC(value, rpc,
true);
1420 static void DiagToggleRPCServer(
int value, out
int current,
int rpc)
1422 if (value != current)
1425 SendDiagRPC(value, rpc,
true);
1430 static void DiagToggleRPCServer(
float value, out
float current,
int rpc)
1432 if (value != current)
1435 SendDiagRPC(value, rpc,
true);
1440 static void DiagToggleRPCAction(
int value,
ScriptCaller action,
int current,
int rpc)
1442 if (value != current)
1444 SendDiagRPC(value, rpc);
1445 action.Invoke(value);
1450 static void DiagToggleAction(
int value,
ScriptCaller action,
int current)
1452 if (value != current)
1454 action.Invoke(value);
1459 static void SendDiagRPCSelf(
Param value,
int rpc)
1469 static void SendDiagRPCSelfBasic(SendDiagRPCSelfBasicParam param)
1471 SendDiagRPCSelf(null, param.param1);
1475 static void SendDiagRPCSelfParam(SendDiagRPCSelfParamParam param)
1477 SendDiagRPCSelf(param.param2, param.param1);
1481 static void SendDiagRPC(
Param value,
int rpc,
bool serverOnly =
false)
1487 if (
GetGame().IsMultiplayer() && playerIdentity)
1492 if (!
GetGame().IsMultiplayer() || !serverOnly)
1500 static void SendDiagRPCBasic(SendDiagRPCBasicParam param)
1502 SendDiagRPC(null, param.param1, param.param2);
1506 static void SendDiagRPCParam(SendDiagRPCParamParam param)
1508 SendDiagRPC(param.param3, param.param1, param.param2);
1512 static void SendDiagRPC(
int rpc,
bool serverOnly =
false)
1514 SendDiagRPC(null, rpc, serverOnly);
1518 static void SendDiagRPC(
bool value,
int rpc,
bool serverOnly =
false)
1525 static void SendDiagRPC(
int value,
int rpc,
bool serverOnly =
false)
1532 static void SendDiagRPC(
float value,
int rpc,
bool serverOnly =
false)