plugindiagmenuclient.c 54 KB

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