plugindiagmenuclient.c 54 KB

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