plugindiagmenuclient.c 55 KB

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