DIFF

PluginDiagMenu.c

enum DebugActionType
{
	GENERIC_ACTIONS = 1,
	PLAYER_AGENTS = 2,
	UNLIMITED_AMMO = 4,
};

#ifdef DEVELOPER
enum ESubscriberSystems
{
	TRIGGERS = 0x00000001,
	//SYSTEM2 = 0x00000002,
	//SYSTEM3 = 0x00000004,
	//SYSTEM4 = 0x00000008,
}
#endif

class PluginDiagMenu extends PluginBase
{
#ifdef DEVELOPER
	static ref map<Man, int> m_Subscribers = new map<Man, int>;
	static int m_SystemsMaks;
	static bool DIAGS_REGISTERED;
	ref Timer m_Timer;
	bool m_EnableModifiers 			= true;
	bool m_EnableUnlimitedAmmo;
	bool m_DisableBloodLoss			= false;
	int m_IsInvincible 				= false;
	bool m_ShowCraftingDebugActions = false;
	bool m_BuildWood 				= false;
	bool m_BuildGate 				= false;
	bool m_LogPlayerStats 			= false;
	bool m_SoftSkillsState 			= false;
	bool m_SoftSkillsDebug 			= false;
	bool m_GunParticlesState		= false;
	bool m_SoftSkillsModel 			= false;
	bool m_BloodyHands	 			= false;
	bool m_PermanentCrossHair		= false;
	bool m_ToggleHud				= false;
	bool m_ShowingWeaponDebug		= false;
	bool m_AimNoiseEnabled			= true;
	int m_DisplayPlayerInfo			= false;
	bool m_ProceduralRecoilEnabled 	= true;
	bool m_EnableQuickRestrain 		= false;
	bool m_EnableQuickFishing		= false;
	bool m_StaminaDisabled			= false;
	bool m_EnvironmentStats			= false;
	bool m_EnableUniversalTemperatureSources	= false;
	bool m_DrawCheckerboard			= false;
	bool m_PresenceNotifierDebug	= false;
	bool m_ShowBleedingSources		= false;
	bool m_DoActionLogs				= false;
	bool m_DoWeaponLogs				= false;
	bool m_DoInventoryMoveLogs		= false;
	bool m_DoInventoryReservationLogs	= false;
	bool m_DoInventoryHFSMLogs		= false;
	bool m_DoSymptomLogs			= false;
	bool m_AllowInventoryAccess		= false;
	bool m_EnableRemoteCamera;
	bool m_FixItems					= false;
	bool m_HitIndicationDebugEnabled = false;
	
	float m_SpecialtyLevel			= 0;
	float m_LifespanLevel			= 0;
	int  m_DayzPlayerDebugMenu		= -1;
	int m_BleedingSourceRequested;
	int m_BleedingSourceLevelRequested;
	int m_HairLevelSelected 		= 0;
	int m_TotalHairLevelsAdjusted;
	int m_Burst = 0;
	static bool ENABLE_BREATH_VAPOR;
	
	//string m_HairSelections 		= "Clipping_GhillieHood, Clipping_grathelm, Clipping_ConstructionHelmet, Clipping_Hockey_hekmet, Clipping_Maska, Clipping_ProtecSkateHelmet2, Clipping_BandanaFace, Clipping_NioshFaceMask, Clipping_NBC_Hood, Clipping_MotoHelmet, Clipping_FireHelmet, Clipping_ushanka, Clipping_TankerHelmet, Clipping_SantasBeard, Clipping_Surgical_mask, Clipping_PumpkinHelmet, Clipping_Balaclava_3holes, Clipping_Balaclava, Clipping_GP5GasMask, Clipping_BoonieHat, Clipping_prison_cap, Clipping_MilitaryBeret_xx, Clipping_Policecap, Clipping_OfficerHat, Clipping_Hat_leather, Clipping_CowboyHat, Clipping_BandanaHead, Clipping_SantasHat, Clipping_FlatCap, Clipping_MxHelmet, Clipping_baseballcap, Clipping_BeanieHat, Clipping_MedicalScrubs_Hat, Clipping_RadarCap, Clipping_ZmijovkaCap, Clipping_HeadTorch, Clipping_pilotka, Clipping_MxHelmet, Clipping_HelmetMich, Clipping_Ssh68Helmet, Clipping_Mich2001, Clipping_Welding_Mask, Clipping_VintageHockeyMask, Clipping_mouth_rags, Clipping_Gasmask";
	ref map<int,bool> m_HairHidingStateMap;
	ref TStringArray m_HairSelectionArray;
	Shape m_VehicleFreeAreaBox;
	
	override void OnInit()
	{
		if ( GetGame().IsMultiplayer() && GetGame().IsServer() ) return; //(only client/local)
		
		m_DoActionLogs = IsCLIParam("doActionLog");
		m_DoActionLogs = IsCLIParam("doInventoryLog");
		m_DoActionLogs = IsCLIParam("doActionLog");
		m_DoWeaponLogs = IsCLIParam("doWeaponLog");
		
		//----------------------
		m_HairHidingStateMap = new map<int,bool>;
		m_HairSelectionArray = new TStringArray;
		m_VehicleFreeAreaBox = Debug.DrawBox(vector.Zero, vector.Zero, 0xffffffff);
		
		g_Game.ConfigGetTextArray("cfgVehicles Head_Default simpleHiddenSelections", m_HairSelectionArray);
		m_TotalHairLevelsAdjusted = m_HairSelectionArray.Count() - 1;
		for (int i = 0; i < m_HairSelectionArray.Count(); ++i)
		{
			m_HairHidingStateMap.Insert(i, 1); //all considered "shown" on init
		}
		
		//----------------------
		m_Timer = new Timer();

		m_Timer.Run(0.5, this, "Update", null, true);
		
		if (DIAGS_REGISTERED)
			return;
		
		//---------------------------------------------------------------
		// LEVEL 0
		//---------------------------------------------------------------
 		DiagMenu.RegisterMenu(DiagMenuIDs.DM_SCRIPTS_MENU, "Script", "");
		{
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_PLAYER_STATES_MENU, "Player States", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Player States
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_SYMPTOMS_SHOW, "lalt+6", "Show States", "Player States");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_TRANSFER_VALUES_MENU, "TransferValues", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > TransferValues
				//---------------------------------------------------------------		
				DiagMenu.RegisterBool(DiagMenuIDs.DM_TRANSFER_VALUES_SHOW, "", "ShowValues", "TransferValues");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_PLAYER_CRAFTING_MENU, "Crafting", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Crafting
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_CRAFTING_GENERATE, "", "Generate Cache", "Crafting");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_CRAFTING_DEBUG_ACTIONS_ENABLE, "", "Debug Insta Crafting", "Crafting");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_CRAFTING_DUMP, "", "Dump recipes to file", "Crafting");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_CHEATS_MENU, "Cheats", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Cheats
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_CHEATS_MODIFIERS_ENABLE, "lalt+2", "Tick Modifiers", "Cheats");
					DiagMenu.SetValue(DiagMenuIDs.DM_CHEATS_MODIFIERS_ENABLE, true);
				DiagMenu.RegisterBool(DiagMenuIDs.DM_CHEATS_PLAYER_INSTAKILL, "", "Kill Player", "Cheats");
				DiagMenu.RegisterItem( DiagMenuIDs.DM_CHEATS_INVINCIBILITY, "lalt+1", "Invincibility (IDDQD)", "Cheats", "Disabled,Partial,Full" );
				DiagMenu.RegisterBool(DiagMenuIDs.DM_CHEATS_STAMINA_DISABLE, "", "Disable stamina", "Cheats");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_RESET, "", "Reset Player", "Cheats");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_RESET_MAX, "lalt+3", "Reset Player Max", "Cheats");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_INVENTORY_ACCESS, "", "Inventory Access", "Cheats");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FIX_ITEMS, "", "Fix Inventory Items", "Cheats");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_PLAYER_AGENTS_MENU, "Player Agents", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Player Agents
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_AGENTS_INJECTS_SHOW, "lalt+5", "Allow Inject Actions", "Player Agents");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_SOFT_SKILLS_MENU, "Soft Skills", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Soft Skills
				//---------------------------------------------------------------
				DiagMenu.RegisterBool( DiagMenuIDs.DM_SOFT_SKILLS_SHOW_DEBUG, "", "Show Debug", "Soft Skills" );
				DiagMenu.RegisterBool( DiagMenuIDs.DM_SOFT_SKILLS_TOGGLE_STATE, "", "Enable SoftSkills", "Soft Skills" );
				DiagMenu.RegisterBool( DiagMenuIDs.DM_SOFT_SKILLS_TOGGLE_MODEL, "", "Enable linear model", "Soft Skills" );
				DiagMenu.RegisterRange( DiagMenuIDs.DM_SOFT_SKILLS_SPECIALTY_VALUE, "", "Set specialty value", "Soft Skills", "-1, 1, 0, 0.01" );
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_LIFESPAN_MENU, "Lifespan", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Lifespan
				//---------------------------------------------------------------
				DiagMenu.RegisterBool( DiagMenuIDs.DM_BLOODY_HANDS, "", "Bloody hands", "Lifespan" );
				DiagMenu.RegisterRange( DiagMenuIDs.DM_LIFESPAN_PLAYTIME_UPDATE, "", "Playtime in minutes", "Lifespan", "0, 600, 0, 10" );
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_MISC_MENU, "Misc", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Misc
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_DISABLE_PERSONAL_LIGHT, "", "Disable Personal Light", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_ITEM_DEBUG_ACTIONS_SHOW, "lalt+4", "Item Debug Actions", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PLAYER_STATS_LOG_ENABLE, "", "Log Player Stats", "Misc");
				DiagMenu.RegisterMenu(DiagMenuIDs.DM_ACTION_TARGETS_MENU, "Action Targets", "Misc");
				{
					//---------------------------------------------------------------
					// LEVEL 3 - Script > Misc > Action Targets
					//---------------------------------------------------------------
					DiagMenu.RegisterBool(DiagMenuIDs.DM_ACTION_TARGETS_NEW, "", "New AT Selection", "Action Targets", true);
					DiagMenu.RegisterBool(DiagMenuIDs.DM_ACTION_TARGETS_DEBUG, "", "Show Debug", "Action Targets");
					DiagMenu.RegisterBool(DiagMenuIDs.DM_ACTION_TARGETS_SELPOS_DEBUG, "", "Show selection pos debug", "Action Targets");
				}
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Misc
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PERMANENT_CROSSHAIR, "", "Enable permanent crosshair", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SHOW_VEHICLE_GETOUT_BOX, "", "Debug transport freespace", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_TOGGLE_HUD, "", "Toggle HUD on/off", "Misc", true);
				DiagMenu.RegisterBool(DiagMenuIDs.DM_ENVIRONMENT_DEBUG_ENABLE, "", "Show Environment stats", "Misc");
				DiagMenu.RegisterRange(DiagMenuIDs.DM_DISPLAY_PLAYER_INFO, "", "Display Player Info", "Misc", "0,2,0,1");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_UNIVERSAL_TEMPERATURE_SOURCES, "lalt+u", "Universal Temp Sources", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_DRAW_CHECKERBOARD, "", "Draw Checkerboard on screen", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_BULLET_IMPACT, "lalt+7", "BulletImpact", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_PRESENCE_NOTIFIER_DBG, "", "Show Presence to AI dbg", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_GO_UNCONSCIOUS, "", "Go Unconscious", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_GO_UNCONSCIOUS_DELAYED, "", "Uncons. in 10sec", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_QUICK_RESTRAIN, "", "Quick Restrain", "Misc");
				DiagMenu.RegisterMenu(DiagMenuIDs.DM_HAIR_MENU, "Hair Hiding", "Misc");
				{
					//---------------------------------------------------------------
					// LEVEL 3 - Script > Misc > Hair Hiding
					//---------------------------------------------------------------
					DiagMenu.RegisterBool(DiagMenuIDs.DM_HAIR_DISPLAY_DEBUG, "", "Display Debug", "Hair Hiding");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HAIR_LEVEL, "", "Hair Level#", "Hair Hiding", string.Format("0,%1,0,1", m_TotalHairLevelsAdjusted));
					DiagMenu.RegisterBool(DiagMenuIDs.DM_HAIR_LEVEL_HIDE, "", "Toggle Hair Level", "Hair Hiding");
					DiagMenu.RegisterBool(DiagMenuIDs.DM_HAIR_HIDE_ALL, "", "Hide/Show All", "Hair Hiding");
				}
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Misc
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_CAM_SHAKE, "", "Simulate Cam Shake", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_QUICK_FISHING, "", "Quick Fishing", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_HOLOGRAM, "lctrl+h", "Hologram placing debug", "Misc");				
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SHOCK_IMPACT, "lalt+8", "ShockHitEffect", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SHOW_PLUG_ARROWS, "", "Show Energy Manager Plug Arrows", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_BREATH_VAPOR_LVL, "", "Breath Vapor", "Misc");
					DiagMenu.SetValue(DiagMenuIDs.DM_BREATH_VAPOR_LVL, true);				
				DiagMenu.RegisterBool(DiagMenuIDs.DM_TARGETABLE_BY_AI, "", "Toggle Targetable By AI", "Misc");
					DiagMenu.SetValue(DiagMenuIDs.DM_TARGETABLE_BY_AI, true);
				DiagMenu.RegisterMenu(DiagMenuIDs.DM_HIT_INDICATION_MENU, "Hit Indication", "Misc");
				{
					//---------------------------------------------------------------
					// LEVEL 3 - Script > Misc > Hit Indication
					//---------------------------------------------------------------
					DiagMenu.RegisterBool(DiagMenuIDs.DM_HIT_INDICATION_ENABLE_DEBUG, "", "Enable Debug", "Hit Indication");
					DiagMenu.RegisterBool(DiagMenuIDs.DM_HIT_INDICATION_SPAWN_HIT, "", "Spawn Hit", "Hit Indication");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HIT_INDICATION_SPAWN_HIT_DIRECTION, "", "Spawn Hit Direction", "Hit Indication", "0, 359, 0, 1");
					DiagMenu.RegisterItem(DiagMenuIDs.DM_HIT_INDICATION_MODE, "", "Mode", "Hit Indication", "Disabled,Static,Dynamic");
						DiagMenu.SetValue(DiagMenuIDs.DM_HIT_INDICATION_MODE, 1);
					DiagMenu.RegisterItem(DiagMenuIDs.DM_HIT_INDICATION_TYPE, "", "Type", "Hit Indication", "Splash,Spike,Arrow");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HIT_INDICATION_DURATION, "", "Hit Duration Max", "Hit Indication", "0.1, 5.0, 1.0, 0.1");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HIT_INDICATION_BREAKPOINT, "", "Hit Breakpoint", "Hit Indication", "0.0, 1.0, 0.8, 0.05");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HIT_INDICATION_DISTANCE, "", "Distance Adjust", "Hit Indication", "0.0, 1.0, 0.0, 0.01");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HIT_INDICATION_ROTATION, "", "Rotation Override", "Hit Indication", "0, 360, 0, 15");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_HIT_INDICATION_SCATTER, "", "Direction Scatter", "Hit Indication", "0, 90, 0, 1");
					DiagMenu.RegisterBool(DiagMenuIDs.DM_HIT_INDICATION_DISABLE_PPE, "", "Disable Hit PPE", "Hit Indication");
				}			
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Misc
				//---------------------------------------------------------------	
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SUPPRESSNEXTFRAMEINPUTS, "", "Suppress Next Frame Inputs", "Misc");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FREEZE_ENTITY, "lalt+x", "Freeze entity", "Misc");					
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_MISC_SIMULATE, "Simulate script", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Simulate script
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SIMULATE_INFINITE_LOOP, "", "Simulate infinite loop", "Simulate script");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SIMULATE_NULL_POINTER, "", "Simulate null pointer", "Simulate script");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SIMULATE_DIVISION_BY_ZERO, "", "Simulate division by 0", "Simulate script");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SIMULATE_ERROR_FUNCTION, "", "Simulate Error() function", "Simulate script");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_MELEE_MENU, "Melee", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Melee
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_DEBUG_ENABLE, "", "Enable Melee Debug", "Melee");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_CONTINUOUS, "", "Continuous update", "Melee");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_SHOW_TARGETS, "", "Show targets", "Melee");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_DRAW_TARGETS, "", "Draw targets", "Melee");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_DRAW_RANGE, "", "Draw range", "Melee");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_DRAW_BLOCK_RANGE_AI, "", "Draw block range PVE", "Melee");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_MELEE_DRAW_BLOCK_RANGE_PVP, "", "Draw block range PVP", "Melee");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_WEAPON_DEBUG_MENU, "Weapon", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Weapon
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_GUN_PARTICLES, "", "Enable gun particles", "Weapon", true);
				DiagMenu.RegisterBool(DiagMenuIDs.DM_WEAPON_DEBUG_ENABLE, "", "Show Debug", "Weapon");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_WEAPON_AIM_NOISE, "", "Weapon Sway", "Weapon");
					DiagMenu.SetValue(DiagMenuIDs.DM_WEAPON_AIM_NOISE, true);
				DiagMenu.RegisterBool(DiagMenuIDs.DM_WEAPON_ALLOW_RECOIL, "", "Procedural Recoil", "Weapon");
					DiagMenu.SetValue(DiagMenuIDs.DM_WEAPON_ALLOW_RECOIL, true);
				DiagMenu.RegisterBool(DiagMenuIDs.DM_WEAPON_UNLIMITED, "lalt+9", "Unlimited Ammo", "Weapon");
				DiagMenu.RegisterItem(DiagMenuIDs.DM_WEAPON_BURST, "lctrl+0", "Burst Version", "Weapon", "Hold, Press");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_WEAPON_CLAYMORE_DEBUG, "", "Claymore debugs", "Weapon");
			}
		
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_BLEEDING_MENU, "Bleeding", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Bleeding
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SHOW_BLEEDING_SOURCES, "", "Show Bleeding Sources", "Bleeding");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_DISABLE_BLOOD_LOSS, "", "Disable Blood Loss", "Bleeding");
				DiagMenu.RegisterRange(DiagMenuIDs.DM_ACTIVATE_SOURCE, "", "Activate Source #", "Bleeding", "1, 32, 0, 1");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_ACTIVATE_ALL_BS, "", "Activate All Sources", "Bleeding");
				DiagMenu.RegisterItem(DiagMenuIDs.DM_ACTIVATE_BS_LEVEL, "", "Activate Blsource Level", "Bleeding", "None, Low, Medium, High");
						DiagMenu.SetValue(DiagMenuIDs.DM_ACTIVATE_BS_LEVEL, 0);
				DiagMenu.RegisterBool(DiagMenuIDs.DM_BS_RELOAD, "", "Client Reload", "Bleeding");
				DiagMenu.RegisterMenu(DiagMenuIDs.DM_BLEEDINGINDICATORS_MENU, "Bleeding Indication", "Bleeding");
				{
					//---------------------------------------------------------------
					// LEVEL 3 - Script > Bleeding > Bleeding Indication
					//---------------------------------------------------------------
					DiagMenu.RegisterBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_ENABLE, "", "Enable BleedingIndicators", "Bleeding Indication");
						DiagMenu.SetValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_ENABLE, true);
					DiagMenu.RegisterBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_USEVALUEOVERRIDES, "", "Enable Debug Overrides", "Bleeding Indication");
						DiagMenu.SetValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_USEVALUEOVERRIDES, false);
					DiagMenu.RegisterBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RANDOMROTATION, "", "Enable Random Rotation", "Bleeding Indication");
						DiagMenu.SetValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RANDOMROTATION, true);
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_SEQUENCE_DURATION, "", "Sequence Duration", "Bleeding Indication", "0.2, 5.0, " + BleedingIndicationConstants.SEQUENCE_DURATION_DEFAULT.ToString() + ", 0.01");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_BASEDURATION, "", "Drop Anim Duration", "Bleeding Indication", "0.1, 5.0, " + BleedingIndicationConstants.DROP_DURATION_LOW.ToString() + ", 0.05");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_MINDELAY, "", "Drop Min Delay", "Bleeding Indication", "0.0, 5.0, " + BleedingIndicationConstants.SEQUENCE_DROP_DELAY_MIN_LOW.ToString() + ", 0.05");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_MAXDELAY, "", "Drop Max Delay", "Bleeding Indication", "0.0, 5.0, " + BleedingIndicationConstants.SEQUENCE_DROP_DELAY_MAX_LOW.ToString() + ", 0.05");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_PROGRESSTHRESHOLD, "", "Drop Progress Threshold", "Bleeding Indication", "0.1, 1.0, " + BleedingIndicationConstants.DROP_PROGRESS_THRESHOLD.ToString() + ", 0.05");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_STARTSIZE, "", "Drop Start Size", "Bleeding Indication", "0.1, 1.0, " + BleedingIndicationConstants.DROP_SIZE_START_LOW.ToString() + ", 0.01");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_ENDSIZE, "", "Drop End Size", "Bleeding Indication", "0.1, 1.0, " + BleedingIndicationConstants.DROP_SIZE_END_LOW.ToString() + ", 0.01");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RNDSCALEMIN, "", "Drop Size Random Min", "Bleeding Indication", "0.0, 2.0, " + BleedingIndicationConstants.DROP_SIZE_VARIATION_MIN_LOW.ToString() + ", 0.01");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RNDSCALEMAX, "", "Drop Size Random Max", "Bleeding Indication", "0.0, 2.0, " + BleedingIndicationConstants.DROP_SIZE_VARIATION_MAX_LOW.ToString() + ", 0.01");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_SCATTER, "", "Drop Scatter px", "Bleeding Indication", "0.0, 500.0, " + BleedingIndicationConstants.DROP_SCATTER_LOW.ToString() + ", 1.0");
					DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_SLIDEDISTANCE, "", "Drop Slide Distance", "Bleeding Indication", "0.0, 500.0, 0, 0.1");
					DiagMenu.RegisterMenu(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLORMENU, "Color Debug", "Bleeding Indication");
					{
						//---------------------------------------------------------------
						// LEVEL 4 - Script > Bleeding > Bleeding Indication > Color Debug
						//---------------------------------------------------------------
						DiagMenu.RegisterBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_ENABLEDESATURATION, "", "Desaturate", "Color Debug");
							DiagMenu.SetValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_ENABLEDESATURATION, true);				
						DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_DESATURATIONEND, "", "Saturation End Value", "Color Debug", "0.0, 1.0, " + BleedingIndicationConstants.DROP_COLOR_DESATURATIONEND.ToString() + ", 0.05");
						DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_R, "", "Red", "Color Debug", "0.0, 255.0, " + BleedingIndicationConstants.DROP_COLOR_RED.ToString() + ", 1.0");
						DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_G, "", "Green", "Color Debug", "0.0, 255.0, " + BleedingIndicationConstants.DROP_COLOR_GREEN.ToString() + ", 1.0");
						DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_B, "", "Blue", "Color Debug", "0.0, 255.0, " + BleedingIndicationConstants.DROP_COLOR_BLUE.ToString() + ", 1.0");
						DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_A_START, "", "Alpha - Start", "Color Debug", "0.0, 255.0, " + BleedingIndicationConstants.DROP_COLOR_ALPHA_START.ToString() + ", 1.0");
						DiagMenu.RegisterRange(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_A_END, "", "Alpha - End", "Color Debug", "0.0, 255.0, " + BleedingIndicationConstants.DROP_COLOR_ALPHA_END.ToString() + ", 1.0");
					}
				}
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_LOGS_MENU, "Logs", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Logs
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_LOG_ACTIONS, "", "Log Actions", "Logs");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_LOG_SYMPTOM, "", "Log Symptoms", "Logs");
				DiagMenu.RegisterMenu(DiagMenuIDs.DM_LOGS_MENU_INVENTORY, "InventoryLog", "Logs");
				{
					//---------------------------------------------------------------
					// LEVEL 3 - Script > Logs > InventoryLogs
					//---------------------------------------------------------------
					DiagMenu.RegisterBool(DiagMenuIDs.DM_LOG_INVENTORY_MOVE, "", "Log Items move", "InventoryLog");
					DiagMenu.RegisterBool(DiagMenuIDs.DM_LOG_INVENTORY_RESERVATION, "", "Log Reservations", "InventoryLog");
					DiagMenu.RegisterBool(DiagMenuIDs.DM_LOG_INVENTORY_HFSM, "", "Log HandFSM", "InventoryLog");
				}
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_TRIGGER_MENU, "Triggers", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Triggers
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SHOW_AREADMG_TRIGGER, "", "Show Triggers", "Triggers");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SHOW_PLAYER_TOUCHTRIGGER, "", "Show Player Touch", "Triggers");
				#ifdef TRIGGER_DEBUG_BASIC
					DiagMenu.SetValue(DiagMenuIDs.DM_SHOW_AREADMG_TRIGGER, true);
					DiagMenu.SetValue(DiagMenuIDs.DM_SHOW_PLAYER_TOUCHTRIGGER, true);
				#endif
			}

			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_BASEBUILDING_MENU, "Base Building", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Base Building
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_BUILD_WOOD, "", "Spawn uses wood/metal", "Base Building");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_BUILD_GATE, "", "Spawn Fence makes gate", "Base Building");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_UNDERGROUNDS, "Underground Areas", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Underground Areas
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_UNDERGROUND_SHOW_BREADCRUMB, "", "Show Breadcrumbs", "Underground Areas");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_UNDERGROUND_DISABLE_DARKENING, "lctrl+f", "Disable Darkening", "Underground Areas");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_FINISHERS_MENU, "Finishers", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Finishers
				//---------------------------------------------------------------
				DiagMenu.RegisterItem(DiagMenuIDs.DM_FINISHERS_FINISHER_FORCED, "", "Forced Finisher: ", "Finishers", "None,Liver,Neck");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_SOUNDS_MENU, "Script Sounds", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Script Sounds
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_SOUNDS_ITEM_IMPACT_SOUNDS, "", "Item impact sounds", "Script Sounds");
			}
			
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_CAMERA_TOOLS_MENU, "Cinematic Camera Tools", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Cinematic Camera Tools
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_ENABLE_REMOTE_CAMERA, "", "Show remote camera", "Cinematic Camera Tools");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_ENABLE_REMOTE_CAMERA_BROADCAST, "", "Broadcast camera", "Cinematic Camera Tools");
			}
			//---------------------------------------------------------------
			// LEVEL 1 - Script
			//---------------------------------------------------------------
			DiagMenu.RegisterMenu(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_MENU, "Time Accel", "Script");
			{
				//---------------------------------------------------------------
				// LEVEL 2 - Script > Cinematic Camera Tools
				//---------------------------------------------------------------
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_ENABLE, "", "Apply Time Accel", "Time Accel");
				DiagMenu.RegisterRange(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_VALUE1, "", "Accel Factor Big", "Time Accel","0,100,1,1");
				DiagMenu.RegisterRange(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_VALUE2, "", "Accel Factor Small", "Time Accel","0,0.95 ,0,0.05");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_UG_ENTRANCES, "", "Underground Entrances", "Time Accel");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_UG_RESERVOIR, "", "Underground Reservoir", "Time Accel");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_ENERGY_CONSUME, "", "Energy Consumption", "Time Accel");
				DiagMenu.RegisterBool(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_ENERGY_RECHARGE, "", "Energy Recharging", "Time Accel");
			}
		}
		
		DIAGS_REGISTERED = true;
	}
	
	void Update(float deltaT)
	{
		//---------------------------------------------
		// every system can handle their own actions locally(within the system itself),
		// this section is for systems which don't have client side representation,
		// or don't have their own tick, or for whatever other reason you prefer to put the logic here
		// PUT ONLY METHOD CALLS HERE, NO CODE !!
		// PUT ONLY METHOD CALLS HERE, NO CODE !!
		//---------------------------------------------
			
		CheckModifiers();//should modifiers be ticking
		CheckKillPlayer();//should i kill myself ?
		CheckCraftingDebugActions();
		CheckItemDebugActions();
		CheckAgentInjectActions();
		CheckGenerateRecipeCache();
		CheckDayzPlayerMenu();
		CheckSoftSkillsDebug();
		CheckSoftSkillsState();
		CheckSoftSkillsModel();
		CheckGunParticles();
		CheckSpecialtyLevel();
		CheckBloodyHands();
		CheckLifeSpanPlaytimeUpdate();
		CheckPermanentCrossHairUpdate();
		CheckToggleHud();
		CheckShowWeaponDebug();
		CheckInvincibility();
		CheckStamina();
		CheckAimNoise();
		CheckProceduralRecoil();
		CheckUnlimitedAmmo();
		CheckCraftingDump();
		CheckEnvironmentStats();
		CheckUniversalTemperatureSources();
		CheckDisplayMenu();
		CheckDrawCheckerboard();
		CheckBulletImpact();
		CheckShockImpact();
		CheckTargetableByAI();
		CheckPresenceNotifierDebug();
		CheckGoUnconscious();
		CheckGoUnconsciousDelayed();
		CheckSimulateNULLPointer();
		CheckSimulateDivisionByZero();
		CheckSimulateInfiniteLoop();
		CheckSimulateErrorFunction();
		CheckShowBleedingSources();
		CheckDisableBloodLoss();
		CheckActivateAllBS();
		CheckReloadBS();
		CheckActivateBleedingSource();
		CheckActivateBleedingSourceLevel();
		CheckQuickRestrain();
		CheckQuickFishing();
		CheckHairLevel();
		CheckHairHide();
		CheckPersonalLight();
		CheckCamShake();
		CheckVehicleGetOutBox();
		CheckDoActionLogs();
		CheckDoWeaponLogs();
		CheckDoInventoryLogs();
		CheckDoSymptomLogs();
		CheckPlayerReset();
		CheckInventoryAccess();
		CheckFixItems();
		CheckPlugArrows();
		CheckBurst();
		CheckBreathVapor();
		CheckHitDirection();
		CheckBleedingIndicators();
		CheckFinisherOverride();
		CheckInputSuppression();
		CheckFreezeEntity();
		CheckBuildWood();
		CheckBuildGate();
		CheckClientCameraObserver();
		CheckTriggerDebug();
		CheckTimeAccel();
		
	}
	//---------------------------------------------
	void CheckTimeAccel()
	{
		bool 	enable 			= DiagMenu.GetBool(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_ENABLE);
		float 	timeAccel 		= DiagMenu.GetRangeValue(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_VALUE1) + DiagMenu.GetRangeValue(DiagMenuIDs.DM_FEATURE_TIME_ACCEL_VALUE2);
		int 	bitMask			= GetTimeAccelBitmask();
		
		
		
		TimeAccelParam param 	= new TimeAccelParam(enable, timeAccel, bitMask);
		
		if (!AreTimeAccelParamsSame(param, FeatureTimeAccel.m_CurrentTimeAccel))
		{
			SendTimeAccel(param);
			FeatureTimeAccel.m_CurrentTimeAccel = param;
		}
				
	}
	//---------------------------------------------
	void CheckTriggerDebug()
	{
		EnableDebugSystemClient(ESubscriberSystems.TRIGGERS,DiagMenu.GetBool(DiagMenuIDs.DM_SHOW_AREADMG_TRIGGER));
	}	
	
	//---------------------------------------------
	void CheckBreathVapor()
	{
		ENABLE_BREATH_VAPOR = DiagMenu.GetBool(DiagMenuIDs.DM_BREATH_VAPOR_LVL);
	}	
	//---------------------------------------------
	
	void CheckClientCameraObserver()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_ENABLE_REMOTE_CAMERA))
		{
			if (!m_EnableRemoteCamera)
			{
				
				if (GetGame() && GetGame().GetPlayer()) 
					GetGame().RPCSingleParam( null, ERPCs.DEV_CAMERA_TOOLS_CAM_SUBSCRIBE, new Param2<bool, EntityAI>(true, GetGame().GetPlayer()), true );
				m_EnableRemoteCamera = true;
			}
		}
		else
		{
			if (m_EnableRemoteCamera)
			{
				if (GetGame() && GetGame().GetPlayer())
				{
					GetGame().RPCSingleParam( null, ERPCs.DEV_CAMERA_TOOLS_CAM_SUBSCRIBE, new Param2<bool, EntityAI>(false, GetGame().GetPlayer()), true );
					if (PlayerBase.Cast(GetGame().GetPlayer()).m_CameraToolsMenuClient)
						PlayerBase.Cast(GetGame().GetPlayer()).m_CameraToolsMenuClient.DelayedDestroy();
				}
				m_EnableRemoteCamera = false;
				
				
			}
		}
	}
	
	void CheckPlayerReset()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_RESET) || DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_RESET_MAX))
		{
		
			if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_RESET) )
			{
				CachedObjectsParams.PARAM1_BOOL.param1 = false;
				
			}
			
			if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_RESET_MAX) )
			{
				CachedObjectsParams.PARAM1_BOOL.param1 = true;
				
			}
			
			
			if (GetGame() && GetGame().GetPlayer()) 
			{
				GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_PLAYER_RESET, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
				DiagMenu.SetValue(DiagMenuIDs.DM_PLAYER_RESET, false);
				DiagMenu.SetValue(DiagMenuIDs.DM_PLAYER_RESET_MAX, false);
			}
		}
	}	
	void CheckInventoryAccess()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_INVENTORY_ACCESS) )
		{
			if (!m_AllowInventoryAccess)
			{
				SendInventoryAccessRPC(true);
				PlayerBase.DEBUG_INVENTORY_ACCESS = true;
				m_AllowInventoryAccess = true;
			}
		}
		else
		{
			if (m_AllowInventoryAccess)
			{
				PlayerBase.DEBUG_INVENTORY_ACCESS = false;
				m_AllowInventoryAccess = false;
			}
		}
	}	
	void CheckFixItems()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_FIX_ITEMS) )
		{
			if (GetGame() && GetGame().GetPlayer()) 
				GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_ITEMS_FIX, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
			DiagMenu.SetValue(DiagMenuIDs.DM_FIX_ITEMS, false);
		}
	}
	
	//---------------------------------------------
	void CheckModifiers()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_CHEATS_MODIFIERS_ENABLE) )
		{
			if (!m_EnableModifiers)
			{
				SendModifiersRPC(true);
				m_EnableModifiers = true;
			}
		}
		else
		{
			if (m_EnableModifiers)
			{
				SendModifiersRPC(false);
				m_EnableModifiers = false;
			}
		}
	}
	//---------------------------------------------
	void CheckUnlimitedAmmo()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_WEAPON_UNLIMITED) )
		{
			if (!m_EnableUnlimitedAmmo)
			{
				SendUnlimitedRPC(true);
				m_EnableUnlimitedAmmo = true;
				ItemBase.SetDebugActionsMask( ItemBase.GetDebugActionsMask() | DebugActionType.UNLIMITED_AMMO );
			}
		}
		else
		{
			if (m_EnableUnlimitedAmmo)
			{
				SendUnlimitedRPC(false);
				m_EnableUnlimitedAmmo = false;
				ItemBase.SetDebugActionsMask( ItemBase.GetDebugActionsMask() & (~DebugActionType.UNLIMITED_AMMO) );
			}
		}
	}	
	//---------------------------------------------
	void CheckDisableBloodLoss()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_DISABLE_BLOOD_LOSS) )
		{
			if (!m_DisableBloodLoss)
			{
				SendDisableBloodLossRPC(true);
				m_DisableBloodLoss = true;
			}
		}
		else
		{
			if (m_DisableBloodLoss)
			{
				SendDisableBloodLossRPC(false);
				m_DisableBloodLoss = false;
			}
		}
	}
	//---------------------------------------------
	void CheckActivateAllBS()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_ACTIVATE_ALL_BS) )
		{
			SendActivateAllBSRPC();
			DiagMenu.SetValue(DiagMenuIDs.DM_ACTIVATE_ALL_BS, false);//to prevent constant RPC calls, switch back to false
		}
	}	
	//---------------------------------------------
	void CheckReloadBS()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_BS_RELOAD) )
		{
			PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
			if (player && player.GetBleedingManagerRemote())
			{
				player.GetBleedingManagerRemote().Reload();
			}
			DiagMenu.SetValue(DiagMenuIDs.DM_BS_RELOAD, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckGenerateRecipeCache()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_CRAFTING_GENERATE) )
		{
			PluginRecipesManager plugin_recipes_manager;
			Class.CastTo(plugin_recipes_manager, GetPlugin(PluginRecipesManager));
			plugin_recipes_manager.CallbackGenerateCache();
			DiagMenu.SetValue(DiagMenuIDs.DM_PLAYER_CRAFTING_GENERATE, false);
		}
	}
	//---------------------------------------------
	void CheckShowBleedingSources()
	{
		PlayerBase player;
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SHOW_BLEEDING_SOURCES) )
		{
			if ( !m_ShowBleedingSources )
			{
				player = PlayerBase.Cast(GetGame().GetPlayer());
				player.GetBleedingManagerRemote().SetDiag(true);
				m_ShowBleedingSources = true;
			}
		}
		else
		{
			if ( m_ShowBleedingSources )
			{
				player = PlayerBase.Cast(GetGame().GetPlayer());
				player.GetBleedingManagerRemote().SetDiag(false);
				m_ShowBleedingSources = false;
			}
		}
	}
	//---------------------------------------------
	void CheckKillPlayer()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_CHEATS_PLAYER_INSTAKILL) )
		{
			SendKillPlayerRPC();
			DiagMenu.SetValue(DiagMenuIDs.DM_CHEATS_PLAYER_INSTAKILL, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckGoUnconscious()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_GO_UNCONSCIOUS) )
		{
			SendGoUnconsciousRPC(false);
			DiagMenu.SetValue(DiagMenuIDs.DM_GO_UNCONSCIOUS, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckGoUnconsciousDelayed()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_GO_UNCONSCIOUS_DELAYED) )
		{
			SendGoUnconsciousRPC(true);
			DiagMenu.SetValue(DiagMenuIDs.DM_GO_UNCONSCIOUS_DELAYED, false);//to prevent constant RPC calls, switch back to false
		}
	}
	
	void CheckHairLevel()
	{
		int value = DiagMenu.GetRangeValue(DiagMenuIDs.DM_HAIR_LEVEL);
		if (value != m_HairLevelSelected)
		{
			m_HairLevelSelected = value;
			//SendSetHairLevelRPC();
			DiagMenu.SetRangeValue(DiagMenuIDs.DM_HAIR_LEVEL, value);//to prevent constant RPC calls, switch back to false
		}
	}
	
	void CheckHairHide()
	{
		int value = DiagMenu.GetBool(DiagMenuIDs.DM_HAIR_LEVEL_HIDE);
		bool hide_all = DiagMenu.GetBool(DiagMenuIDs.DM_HAIR_HIDE_ALL);
		if (hide_all)
		{
			SendSetHairLevelHideRPC(-1,value);
			DiagMenu.SetValue(DiagMenuIDs.DM_HAIR_HIDE_ALL, false);//to prevent constant RPC calls, switch back to false
		}
		else if (value)
		{
			SendSetHairLevelHideRPC(m_HairLevelSelected,value);
			DiagMenu.SetValue(DiagMenuIDs.DM_HAIR_LEVEL_HIDE, false);//to prevent constant RPC calls, switch back to false
		}
	}
	
	void CheckPersonalLight()
	{
		int value = DiagMenu.GetBool(DiagMenuIDs.DM_DISABLE_PERSONAL_LIGHT);
		PlayerBaseClient.m_PersonalLightDisabledByDebug = value;
		PlayerBaseClient.UpdatePersonalLight();
	}
	
	//---------------------------------------------
	void CheckItemDebugActions()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_ITEM_DEBUG_ACTIONS_SHOW) )
		{
			if ( (ItemBase.GetDebugActionsMask() & DebugActionType.GENERIC_ACTIONS) == 0 )
			{
				int mask = (ItemBase.GetDebugActionsMask() | DebugActionType.GENERIC_ACTIONS);
				ItemBase.SetDebugActionsMask(mask);
				SendDebugActionsRPC();
			}
		}
		else
		{
			if ( (ItemBase.GetDebugActionsMask() & DebugActionType.GENERIC_ACTIONS) )
			{
				int mask2 = (ItemBase.GetDebugActionsMask() & (~DebugActionType.GENERIC_ACTIONS));
				ItemBase.SetDebugActionsMask(mask2);
				SendDebugActionsRPC();
			}
		}
	}

	void CheckBulletImpact()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_BULLET_IMPACT) )
		{
			PlayerBase pl_player = PlayerBase.Cast(GetGame().GetPlayer() );
			CachedObjectsParams.PARAM2_FLOAT_FLOAT.param1 = 32;
			CachedObjectsParams.PARAM2_FLOAT_FLOAT.param2 = 0.3;
			pl_player.SpawnDamageDealtEffect2(CachedObjectsParams.PARAM2_FLOAT_FLOAT);
			DiagMenu.SetValue(DiagMenuIDs.DM_BULLET_IMPACT, false);
		}
		else
		{
			
		}
	}
	
	float tmp = 0.25;
	void CheckShockImpact()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SHOCK_IMPACT) )
		{
			PlayerBase pl_player = PlayerBase.Cast(GetGame().GetPlayer() );
			if (tmp >= 1.0) 	tmp = 0.25;
			pl_player.SpawnShockEffect(tmp);
			tmp += 0.25;
			DiagMenu.SetValue(DiagMenuIDs.DM_SHOCK_IMPACT, false);
		}
	}
	
	void CheckHitDirection()
	{
		PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
		bool enabled = DiagMenu.GetBool(DiagMenuIDs.DM_HIT_INDICATION_ENABLE_DEBUG);
		if (enabled != m_HitIndicationDebugEnabled)
		{
			if (!enabled)
			{
				HitDirectionEffectBase.CheckValues();
				if (player)
				{
					player.SetHitPPEEnabled(CfgGameplayHandler.GetHitIndicationPPEEnabled());
				}
			}
			//Print("DbgHitDirection | PluginDiagMenu | CheckHitDirection | enabled: " + enabled);
			m_HitIndicationDebugEnabled = enabled;
		}
		
		if ( m_HitIndicationDebugEnabled )
		{
			HitDirectionEffectBase.m_Mode = DiagMenu.GetValue(DiagMenuIDs.DM_HIT_INDICATION_MODE);
			HitDirectionEffectBase.m_ID = DiagMenu.GetValue(DiagMenuIDs.DM_HIT_INDICATION_TYPE);
			HitDirectionEffectBase.m_DurationMax = DiagMenu.GetRangeValue(DiagMenuIDs.DM_HIT_INDICATION_DURATION);
			HitDirectionEffectBase.m_BreakPointBase = DiagMenu.GetRangeValue(DiagMenuIDs.DM_HIT_INDICATION_BREAKPOINT);
			HitDirectionEffectBase.m_DistanceAdjust = DiagMenu.GetRangeValue(DiagMenuIDs.DM_HIT_INDICATION_DISTANCE);
			HitDirectionEffectBase.m_RotationOverride = DiagMenu.GetRangeValue(DiagMenuIDs.DM_HIT_INDICATION_ROTATION);
			HitDirectionEffectBase.m_Scatter = DiagMenu.GetRangeValue(DiagMenuIDs.DM_HIT_INDICATION_SCATTER);
		}
		
		if (player)
		{
			if ( DiagMenu.GetBool(DiagMenuIDs.DM_HIT_INDICATION_SPAWN_HIT) )
			{
				if ( m_HitIndicationDebugEnabled )
				{
					GetGame().GetMission().GetHud().SpawnHitDirEffect(player,DiagMenu.GetRangeValue(DiagMenuIDs.DM_HIT_INDICATION_SPAWN_HIT_DIRECTION),1.0);
				}
				DiagMenu.SetValue(DiagMenuIDs.DM_HIT_INDICATION_SPAWN_HIT,false);
			}
			
			if ( m_HitIndicationDebugEnabled )
			{
				player.SetHitPPEEnabled(!DiagMenu.GetBool(DiagMenuIDs.DM_HIT_INDICATION_DISABLE_PPE));
			}
		}
	}
	
	void CheckBleedingIndicators()
	{
		bool diagEnable = DiagMenu.GetBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_ENABLE);
		if (diagEnable != DbgBleedingIndicationStaticInfo.m_DbgEnableBleedingIndication)
		{
			DbgBleedingIndicationStaticInfo.m_DbgEnableBleedingIndication = diagEnable;
			PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
			if (player && player.GetBleedingManagerRemote())
			{
				player.GetBleedingManagerRemote().Reload();
			}
		}
		DbgBleedingIndicationStaticInfo.m_DbgUseOverrideValues = DiagMenu.GetBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_USEVALUEOVERRIDES);
		
		if (DbgBleedingIndicationStaticInfo.m_DbgUseOverrideValues)
		{
			DbgBleedingIndicationStaticInfo.m_DbgSequenceDuration = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_SEQUENCE_DURATION);
			DbgBleedingIndicationStaticInfo.m_DbgDropRotationRandom = DiagMenu.GetBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RANDOMROTATION);
			DbgBleedingIndicationStaticInfo.m_DbgDropDurationBase = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_BASEDURATION);
			DbgBleedingIndicationStaticInfo.m_DbgDropMinDelay = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_MINDELAY);
			DbgBleedingIndicationStaticInfo.m_DbgDropMaxDelay = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_MAXDELAY);
			DbgBleedingIndicationStaticInfo.m_DbgDropProgressTreshold = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_PROGRESSTHRESHOLD);
			DbgBleedingIndicationStaticInfo.m_DbgDropStartSize = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_STARTSIZE);
			DbgBleedingIndicationStaticInfo.m_DbgDropEndSize = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_ENDSIZE);
			DbgBleedingIndicationStaticInfo.m_DbgDropSizeVariationMin = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RNDSCALEMIN);
			DbgBleedingIndicationStaticInfo.m_DbgDropSizeVariationMax = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_RNDSCALEMAX);
			DbgBleedingIndicationStaticInfo.m_DbgDropScatter = (int)DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_SCATTER);
			DbgBleedingIndicationStaticInfo.m_DbgDropSlideDistance = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_SLIDEDISTANCE);
			
			DbgBleedingIndicationStaticInfo.m_DbgDropDesaturate = DiagMenu.GetBool(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_ENABLEDESATURATION);
			DbgBleedingIndicationStaticInfo.m_DbgDesaturationEnd = DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_DESATURATIONEND);
			DbgBleedingIndicationStaticInfo.m_DbgDropColorRed = (int)DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_R);
			DbgBleedingIndicationStaticInfo.m_DbgDropColorGreen = (int)DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_G);
			DbgBleedingIndicationStaticInfo.m_DbgDropColorBlue = (int)DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_B);
			DbgBleedingIndicationStaticInfo.m_DbgDropColorAlphaStart = (int)DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_A_START);
			DbgBleedingIndicationStaticInfo.m_DbgDropColorAlphaEnd = (int)DiagMenu.GetRangeValue(DiagMenuIDs.DM_BLEEDINGINDICATORS_DROP_COLOR_A_END);
		}
	}
	
	void CheckFinisherOverride()
	{
		PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
		int value = DiagMenu.GetValue(DiagMenuIDs.DM_FINISHERS_FINISHER_FORCED) - 1;
		if ( player && player.GetMeleeCombat() && player.GetMeleeCombat().DebugGetForcedFinisherType() != value )
		{
			player.GetMeleeCombat().DebugSetForcedFinisherType(value);
			SendForceFinisherType(value);
		}
	}
	
	void CheckTargetableByAI()
	{
		PlayerBase pl_player = PlayerBase.Cast(GetGame().GetPlayer());
		if (pl_player)
		{
			bool value = DiagMenu.GetBool(DiagMenuIDs.DM_TARGETABLE_BY_AI);
			if ( value != pl_player.m_CanBeTargetedDebug )
			{
				pl_player.m_CanBeTargetedDebug = value;
				SendTargetabilityRPC(value);
			}
		}
	}
	
	void CheckInputSuppression()
	{
		/*Mission mission = GetGame().GetMission();
		if (mission)
		{
			bool value = DiagMenu.GetBool(DiagMenuIDs.DM_SUPPRESSNEXTFRAMEINPUTS);
			if ( value != mission.GetInputSuppression() )
			{
				mission.SetInputSuppression(value);
			}
		}*/
	}
	
	void CheckFreezeEntity()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_FREEZE_ENTITY) )
		{
			EntityAI entity;
			if (PluginSceneManager.GetInstance() && PluginSceneManager.GetInstance().IsOpened())
			{
				// Scene Editor
				SceneObject scene_obj = PluginSceneManager.GetInstance().GetSelectedSceneObject();

				if (scene_obj)
				{
					entity = scene_obj.GetObject();
				}
			}
			else
			{
				// FreeDebugCamera
				FreeDebugCamera camera = FreeDebugCamera.GetInstance();
				entity = EntityAI.Cast(camera.GetCrosshairObject());
			}
			
			if (entity)
				entity.DisableSimulation(!entity.GetIsSimulationDisabled());
			
			DiagMenu.SetValue(DiagMenuIDs.DM_FREEZE_ENTITY, false);
		}
	}
	
	//---------------------------------------------
	void CheckAgentInjectActions()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_AGENTS_INJECTS_SHOW) )
		{
			if ( (ItemBase.GetDebugActionsMask() & DebugActionType.PLAYER_AGENTS) == 0 )
			{
				int mask = (ItemBase.GetDebugActionsMask() | DebugActionType.PLAYER_AGENTS);
				ItemBase.SetDebugActionsMask(mask);	
				SendDebugActionsRPC();
			}
		}
		else
		{
			if ( ItemBase.GetDebugActionsMask() & DebugActionType.PLAYER_AGENTS )
			{
				int mask2 = (ItemBase.GetDebugActionsMask() & (~DebugActionType.PLAYER_AGENTS));
				ItemBase.SetDebugActionsMask(mask2);
				SendDebugActionsRPC();
			}
		}
	}
	//---------------------------------------------
	/*
	void CheckAgentInjectActions()
	{
		if ( DiagMenu.GetBool(DM_PLAYER_AGENTS_INJECTS_SHOW) )
		{
			if ( !ItemBase.IsShowInjectActions() )
			{
				ItemBase.SetShowInjectActions(true);		
			}
		}
		else
		{
			if ( ItemBase.IsShowInjectActions() )
			{
				ItemBase.SetShowInjectActions(false);		
			}
		}
	}
	*/
	
	//---------------------------------------------
	void CheckCraftingDump()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_CRAFTING_DUMP) )
		{
			PluginRecipesManager plugin_recipes_manager;
			Class.CastTo(plugin_recipes_manager, GetPlugin(PluginRecipesManager));
			plugin_recipes_manager.GenerateHumanReadableRecipeList();
			DiagMenu.SetValue(DiagMenuIDs.DM_PLAYER_CRAFTING_DUMP, false);
		}
	}
	//---------------------------------------------
	
	
	//---------------------------------------------
	void CheckCraftingDebugActions()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_CRAFTING_DEBUG_ACTIONS_ENABLE) )
		{
			if (!m_ShowCraftingDebugActions)
			{
				SendDebugCraftingRPC(true);
				PluginRecipesManager plugin_recipes_manager;
				Class.CastTo(plugin_recipes_manager, GetPlugin(PluginRecipesManager));
				plugin_recipes_manager.SetEnableDebugCrafting(true);
				m_ShowCraftingDebugActions = true;
			}
		}
		else
		{
			if (m_ShowCraftingDebugActions)
			{
				SendDebugCraftingRPC(false);
				PluginRecipesManager plugin_recipes_manager2;
				Class.CastTo(plugin_recipes_manager2, GetPlugin(PluginRecipesManager));
				plugin_recipes_manager2.SetEnableDebugCrafting(false);
				m_ShowCraftingDebugActions = false;
			}
		}
	}
	//---------------------------------------------
	void CheckBuildWood()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_BUILD_WOOD) )
		{
			if (!m_BuildWood)
			{
				SendBuildWoodRPC(true);
				m_BuildWood = true;
			}
		}
		else
		{
			if (m_BuildWood)
			{
				SendBuildWoodRPC(false);
				m_BuildWood = false;
			}
		}
	}
	//---------------------------------------------
	void CheckBuildGate()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_BUILD_GATE) )
		{
			if (!m_BuildGate)
			{
				SendBuildGateRPC(true);
				m_BuildGate = true;
			}
		}
		else
		{
			if (m_BuildGate)
			{
				SendBuildGateRPC(false);
				m_BuildGate = false;
			}
		}
	}
	//---------------------------------------------
	void CheckInvincibility()
	{
		if (DiagMenu.GetValue(DiagMenuIDs.DM_CHEATS_INVINCIBILITY) == 1)
		{
			if (m_IsInvincible != 1)	
			{
				SendInvincibilityRPC(1);
				m_IsInvincible = 1;
			}
		}
		else if (DiagMenu.GetValue(DiagMenuIDs.DM_CHEATS_INVINCIBILITY) == 2)
		{
			if (m_IsInvincible != 2)	
			{
				SendInvincibilityRPC(2);
				m_IsInvincible = 2;
			}
		}
		else
		{
			if (m_IsInvincible != 0)
			{
				SendInvincibilityRPC(0);
				m_IsInvincible = 0;
			}
		}
		
	}
	//---------------------------------------------
	void CheckBurst()
	{
		int value = DiagMenu.GetValue(DiagMenuIDs.DM_WEAPON_BURST);
		if ( m_Burst != value )
		{
			m_Burst = value;
			SendBurstRPC(value);
			PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
			player.GetWeaponManager().SetBurstOption(m_Burst);
		}
	} 

	//---------------------------------------------
	void CheckStamina()
	{
		if (DiagMenu.GetBool(DiagMenuIDs.DM_CHEATS_STAMINA_DISABLE))
		{
			if (!m_StaminaDisabled)	
			{
				SendStaminaRPC(m_StaminaDisabled);
				m_StaminaDisabled = true;
			}
		}
		else
		{
			if (m_StaminaDisabled)	
			{
				SendStaminaRPC(m_StaminaDisabled);
				m_StaminaDisabled = false;
			}
		}
	}

	//---------------------------------------------
	void CheckLogPlayerStats()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_PLAYER_STATS_LOG_ENABLE) )
		{
			if (!m_LogPlayerStats)	
			{
				SendLogPlayerStatsRPC(true);
				m_LogPlayerStats = true;
			}
		}
		else
		{
			if (m_LogPlayerStats)	
			{
				SendLogPlayerStatsRPC(false);
				m_LogPlayerStats = false;
			}
		}
	}

	//---------------------------------------------
	void CheckSoftSkillsDebug()
	{
		PlayerBase player;
		SoftSkillManagerDebug m_DebugWindow;

		if ( DiagMenu.GetBool( DiagMenuIDs.DM_SOFT_SKILLS_SHOW_DEBUG ) )
		{
			if (!m_SoftSkillsDebug)	
			{
				Class.CastTo(player, GetGame().GetPlayer());
				player.GetSoftSkillsManager().CreateDebugWindow( true );
				SoftSkillsShowDebugRPC(true);
				m_SoftSkillsDebug = true;
			}
		}
		else
		{
			if (m_SoftSkillsDebug)	
			{
				Class.CastTo(player, GetGame().GetPlayer());
				player.GetSoftSkillsManager().CreateDebugWindow( false );
				SoftSkillsShowDebugRPC(false);
				m_SoftSkillsDebug = false;
			}
		}
	}

	//---------------------------------------------
	void CheckSoftSkillsState()
	{
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_SOFT_SKILLS_TOGGLE_STATE ) )
		{
			if (!m_SoftSkillsState)	
			{
				SoftSkillsToggleStateRPC(true);
				m_SoftSkillsState = true;
			}
		}
		else
		{
			if (m_SoftSkillsState)	
			{
				SoftSkillsToggleStateRPC(false);
				m_SoftSkillsState = false;
			}
		}
	}
		
	//---------------------------------------------
	void CheckGunParticles()
	{
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_GUN_PARTICLES ) )
		{
			if (!m_GunParticlesState)
			{
				GunParticlesToggleStateRPC(false);
				m_GunParticlesState = true;
			}
		}
		else
		{
			if (m_GunParticlesState)
			{
				GunParticlesToggleStateRPC(true);
				m_GunParticlesState = false;
			}
		}
	}

	//---------------------------------------------
	void CheckSoftSkillsModel()
	{
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_SOFT_SKILLS_TOGGLE_MODEL ) )
		{
			if (!m_SoftSkillsModel)	
			{
				SoftSkillsToggleModelRPC(true);
				m_SoftSkillsModel = true;
			}
		}
		else
		{
			if (m_SoftSkillsModel)	
			{
				SoftSkillsToggleModelRPC(false);
				m_SoftSkillsModel = false;
			}
		}
	}

	//---------------------------------------------
	void CheckSpecialtyLevel()
	{
		float specialty_value = DiagMenu.GetRangeValue( DiagMenuIDs.DM_SOFT_SKILLS_SPECIALTY_VALUE );

		if ( m_SpecialtyLevel != specialty_value )
		{
			SoftSkillsSetSpecialtyRPC( specialty_value );
			m_SpecialtyLevel = specialty_value;
		}
	}
	
	//---------------------------------------------
	void CheckActivateBleedingSource()
	{
		int bleeding_source = DiagMenu.GetRangeValue( DiagMenuIDs.DM_ACTIVATE_SOURCE );
		
		if ( bleeding_source != m_BleedingSourceRequested )
		{
			SendActivateBleedingSource(bleeding_source);
			m_BleedingSourceRequested = bleeding_source;
		}
	}

	//---------------------------------------------
	void CheckActivateBleedingSourceLevel()
	{
		int source_level = DiagMenu.GetValue( DiagMenuIDs.DM_ACTIVATE_BS_LEVEL );
		
		if (source_level != m_BleedingSourceLevelRequested)
		{
			PlayerBase player;
			if (Class.CastTo(player, GetGame().GetPlayer()))
			{
				BleedingSourcesManagerBase mgr = player.GetBleedingManagerRemote();
				
				int idx = 100; //invalid index, just deletes all
				if (source_level != 0)
				{
					string bone = ""; //lower-case!
					switch (source_level)
					{
						case 1: //PlayerConstants.BLEEDING_SOURCE_FLOW_MODIFIER_LOW
							bone = "lefttoebase";
						break;
						
						case 2: //PlayerConstants.BLEEDING_SOURCE_FLOW_MODIFIER_MEDIUM
							bone = "leftarm";
						break;
						
						case 3: //PlayerConstants.BLEEDING_SOURCE_FLOW_MODIFIER_HIGH
							bone = "neck";
						break;
					}
					
					for (int i = 0; i < mgr.m_BleedingSourceZone.Count(); i++)
					{
						if (mgr.m_BleedingSourceZone.GetKey(i) == bone)
						{
							idx = i;
							break;
						}
					}
				}
				SendActivateBleedingSource(idx);
			}
			m_BleedingSourceLevelRequested = source_level;
		}
	}

	//---------------------------------------------
	void CheckBloodyHands()
	{
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_BLOODY_HANDS ) )
		{
			if (!m_BloodyHands)	
			{
				LifespanBloodyHandsRPC(true);
				m_BloodyHands = true;
			}
		}
		else
		{
			if (m_BloodyHands)	
			{
				LifespanBloodyHandsRPC(false);
				m_BloodyHands = false;
			}
		}
	}

	//---------------------------------------------
	void CheckLifeSpanPlaytimeUpdate()
	{
		float lifespan_level = DiagMenu.GetRangeValue( DiagMenuIDs.DM_LIFESPAN_PLAYTIME_UPDATE ) * 60;

		if ( m_LifespanLevel != lifespan_level )
		{
			LifespanPlaytimeUpdateRPC( lifespan_level );
			m_LifespanLevel = lifespan_level;
		}
	}
	//---------------------------------------------	
	void CheckPermanentCrossHairUpdate()
	{
		PluginPermanentCrossHair crosshair;
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_PERMANENT_CROSSHAIR ) )
		{
			if (!m_PermanentCrossHair)	
			{
				Class.CastTo(crosshair, GetPlugin( PluginPermanentCrossHair ));
				crosshair.SwitchPermanentCrossHair(true);
				m_PermanentCrossHair = true;
			}
		}
		else
		{
			if (m_PermanentCrossHair)	
			{
				Class.CastTo(crosshair, GetPlugin( PluginPermanentCrossHair ));
				crosshair.SwitchPermanentCrossHair(false);
				m_PermanentCrossHair = false;
			}
		}
	}
	
	//---------------------------------------------		
	void CheckVehicleGetOutBox()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SHOW_VEHICLE_GETOUT_BOX ) )
		{
			if (m_VehicleFreeAreaBox)
			{
				m_VehicleFreeAreaBox.Destroy();
				m_VehicleFreeAreaBox = null;
			}
			
			HumanCommandVehicle hcv = GetGame().GetPlayer().GetCommand_Vehicle();
			if (!hcv)
				return;
			m_VehicleFreeAreaBox = hcv.GetTransport().DebugFreeAreaAtDoor( hcv.GetVehicleSeat() );
		}
		else if (m_VehicleFreeAreaBox)
		{
			m_VehicleFreeAreaBox.Destroy();
			m_VehicleFreeAreaBox = null;
		}
	}
	
	//---------------------------------------------	
	void CheckToggleHud()
	{
		Hud hud;
			
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_TOGGLE_HUD ) )
		{
			if (!m_ToggleHud)	
			{
				hud = GetGame().GetMission().GetHud();
				hud.Show( m_ToggleHud );
				GetGame().GetMission().HideCrosshairVisibility();
				m_ToggleHud = true;
			}
		}
		else
		{
			if (m_ToggleHud)	
			{
				hud = GetGame().GetMission().GetHud();
				hud.Show( m_ToggleHud );
				GetGame().GetMission().RefreshCrosshairVisibility();
				m_ToggleHud = false;
			}
		}
	}

	//---------------------------------------------	
	void CheckShowWeaponDebug()
	{
		PlayerBase player;
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_WEAPON_DEBUG_ENABLE ) )
		{
			if (!m_ShowingWeaponDebug)	
			{

				Class.CastTo(player, GetGame().GetPlayer());
				player.ShowWeaponDebug(true);
				m_ShowingWeaponDebug = true;
			}
		}
		else
		{
			if (m_ShowingWeaponDebug)	
			{
				Class.CastTo(player, GetGame().GetPlayer());
				player.ShowWeaponDebug(false);
				m_ShowingWeaponDebug = false;
			}
		}
	}
	//---------------------------------------------	
	void CheckProceduralRecoil()
	{
		DayZPlayerImplement player;
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_WEAPON_ALLOW_RECOIL ) )
		{
			if (!m_ProceduralRecoilEnabled)
			{
				//Class.CastTo(player, GetGame().GetPlayer());
				//player.GetAimingModel().SetProceduralRecoilEnabled(true);
				SendProceduralRecoilRPC(true);
				m_ProceduralRecoilEnabled = true;
			}
		}
		else
		{
			if (m_ProceduralRecoilEnabled)	
			{
				//Class.CastTo(player, GetGame().GetPlayer());
				//player.GetAimingModel().SetProceduralRecoilEnabled(false);
				SendProceduralRecoilRPC(false);
				m_ProceduralRecoilEnabled = false;
			}
		}
	}
	//---------------------------------------------	
	void CheckQuickRestrain()
	{
		
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_QUICK_RESTRAIN ) )
		{
			if (!m_EnableQuickRestrain)
			{
				SendEnableQuickRestrainRPC(true);
				m_EnableQuickRestrain = true;
			}
		}
		else
		{
			if (m_EnableQuickRestrain)	
			{
				SendEnableQuickRestrainRPC(false);
				m_EnableQuickRestrain = false;
			}
		}
	}
	
	//---------------------------------------------	
	void CheckQuickFishing()
	{
		
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_QUICK_FISHING ) )
		{
			if (!m_EnableQuickFishing)
			{
				SendEnableQuickFishingRPC(true);
				m_EnableQuickFishing = true;
			}
		}
		else
		{
			if (m_EnableQuickFishing)	
			{
				SendEnableQuickFishingRPC(false);
				m_EnableQuickFishing = false;
			}
		}
	}
	
	//---------------------------------------------	
	
	void CheckCamShake()
	{
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_CAM_SHAKE ) )
		{
			GetGame().GetPlayer().GetCurrentCamera().SpawnCameraShake(1,1,15,4);
			DiagMenu.SetValue(DiagMenuIDs.DM_CAM_SHAKE, false);
		}
		

	}
	//---------------------------------------------	
	void CheckAimNoise()
	{
		DayZPlayerImplement player;
		if ( DiagMenu.GetBool( DiagMenuIDs.DM_WEAPON_AIM_NOISE ) )
		{
			if (!m_AimNoiseEnabled)
			{

				Class.CastTo(player, GetGame().GetPlayer());
				player.GetAimingModel().SetAimNoiseAllowed(true);
				m_AimNoiseEnabled = true;
			}
		}
		else
		{
			if (m_AimNoiseEnabled)	
			{
				Class.CastTo(player, GetGame().GetPlayer());
				player.GetAimingModel().SetAimNoiseAllowed(false);
				m_AimNoiseEnabled = false;
			}
		}
	}

	//---------------------------------------------
	void CheckDayzPlayerMenu()
	{
		int	actMenuValue = DiagMenu.GetValue(DayZPlayerConstants.DEBUG_SHOWDEBUGPLUGIN);
		// Print("Debug Menu:" + actMenuValue.ToString());
		if (actMenuValue != m_DayzPlayerDebugMenu)
		{
			if (g_Plugins != NULL)
			{
				PluginDayzPlayerDebug pd;
				Class.CastTo(pd, g_Plugins.GetPluginByType(PluginDayzPlayerDebug));
				if (pd != NULL)
				{
					pd.ToggleDebugWindowSetMode(actMenuValue);
					//Print("DayzPlayerDebug - switched to:" + actMenuValue.ToString());
				}
			}
			m_DayzPlayerDebugMenu = actMenuValue;
		}

	}
	//---------------------------------------------
	
	void CheckDisplayMenu()
	{
		PluginRemotePlayerDebugClient plugin_remote_client;
		int value = DiagMenu.GetRangeValue( DiagMenuIDs.DM_DISPLAY_PLAYER_INFO );
		
		if ( value != 0 )
		{
			if ( m_DisplayPlayerInfo != value )
			{
				plugin_remote_client = PluginRemotePlayerDebugClient.Cast( GetPlugin(PluginRemotePlayerDebugClient) );
				plugin_remote_client.RequestPlayerInfo( PlayerBase.Cast(GetGame().GetPlayer()), value );
				
				m_DisplayPlayerInfo = value;
			}
		}
		else
		{
			if ( m_DisplayPlayerInfo != 0 )	
			{
				plugin_remote_client = PluginRemotePlayerDebugClient.Cast( GetPlugin(PluginRemotePlayerDebugClient) );
				plugin_remote_client.RequestPlayerInfo( PlayerBase.Cast(GetGame().GetPlayer()), 0 );
				
				m_DisplayPlayerInfo = 0;
			}
		}
	}
	
	void CheckUniversalTemperatureSources()
	{
		PluginUniversalTemperatureSourceClient client;
		int value = DiagMenu.GetBool(DiagMenuIDs.DM_UNIVERSAL_TEMPERATURE_SOURCES);
		
		if (m_EnableUniversalTemperatureSources != value)
		{
			client = PluginUniversalTemperatureSourceClient.Cast(GetPlugin(PluginUniversalTemperatureSourceClient));
			client.RequestUniversalTemperatureSources(PlayerBase.Cast(GetGame().GetPlayer()), value);
			
			m_EnableUniversalTemperatureSources = value;
		}
	}

	void CheckEnvironmentStats()
	{
		if (DiagMenu.GetBool(DiagMenuIDs.DM_ENVIRONMENT_DEBUG_ENABLE))
		{
			if (!m_EnvironmentStats)
				m_EnvironmentStats = true;
		}
		else
		{
			if (m_EnvironmentStats)
				m_EnvironmentStats = false;
		}
	}
	
	void CheckDrawCheckerboard()
	{
		if (DiagMenu.GetBool(DiagMenuIDs.DM_DRAW_CHECKERBOARD))
		{
			if (!m_DrawCheckerboard) m_DrawCheckerboard = true;
		}
		else
		{
			if (m_DrawCheckerboard) m_DrawCheckerboard = false;
		}
	}

	void CheckPresenceNotifierDebug()
	{
		if (DiagMenu.GetBool(DiagMenuIDs.DM_PRESENCE_NOTIFIER_DBG))
		{
			if (!m_PresenceNotifierDebug) m_PresenceNotifierDebug = true;
		}
		else
		{
			if (m_PresenceNotifierDebug) m_PresenceNotifierDebug = false;
		}
	}
	
	//---------------------------------------------
	void CheckSimulateNULLPointer()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SIMULATE_NULL_POINTER) )
		{
			SendSimulateNULLPointer();
			DiagMenu.SetValue(DiagMenuIDs.DM_SIMULATE_NULL_POINTER, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckSimulateDivisionByZero()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SIMULATE_DIVISION_BY_ZERO) )
		{
			SendSimulateDivisionByZero();
			DiagMenu.SetValue(DiagMenuIDs.DM_SIMULATE_DIVISION_BY_ZERO, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckSimulateInfiniteLoop()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SIMULATE_INFINITE_LOOP) )
		{
			SendSimulateInfiniteLoop();
			DiagMenu.SetValue(DiagMenuIDs.DM_SIMULATE_INFINITE_LOOP, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckSimulateErrorFunction()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SIMULATE_ERROR_FUNCTION) )
		{
			SendSimulateErrorFunction();
			DiagMenu.SetValue(DiagMenuIDs.DM_SIMULATE_ERROR_FUNCTION, false);//to prevent constant RPC calls, switch back to false
		}
	}
	//---------------------------------------------
	void CheckDoActionLogs()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_LOG_ACTIONS) )
		{
			if ( !m_DoActionLogs )
			{
				SendSetActionLogs(true);
				LogManager.ActionLogEnable(true);
				m_DoActionLogs = true;
			}
		}
		else
		{
			if ( m_DoActionLogs )
			{
				SendSetActionLogs(false);
				LogManager.ActionLogEnable(false);
				m_DoActionLogs = false;
			}
		}
	}
	//---------------------------------------------
	void CheckDoWeaponLogs()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_LOG_WEAPON) )
		{
			if ( !m_DoActionLogs )
			{
				SendSetWeaponLogs(true);
				LogManager.WeaponLogEnable(true);
				m_DoWeaponLogs = true;
			}
		}
		else
		{
			if ( m_DoActionLogs )
			{
				SendSetWeaponLogs(false);
				LogManager.WeaponLogEnable(false);
				m_DoWeaponLogs = false;
			}
		}
	}
	//---------------------------------------------
	void CheckDoInventoryLogs()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_LOG_INVENTORY_MOVE) )
		{
			if ( !m_DoInventoryMoveLogs )
			{
				SendSetInventoryMoveLogs(true);
				LogManager.InventoryMoveLogEnable(true);
				m_DoInventoryMoveLogs = true;
			}
		}
		else
		{
			if ( m_DoInventoryMoveLogs )
			{
				SendSetInventoryMoveLogs(false);
				LogManager.InventoryMoveLogEnable(false);
				m_DoInventoryMoveLogs = false;
			}
		}
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_LOG_INVENTORY_RESERVATION) )
		{
			if ( !m_DoInventoryReservationLogs )
			{
				SendSetInventoryReservationLogs(true);
				LogManager.InventoryReservationLogEnable(true);
				m_DoInventoryReservationLogs = true;
			}
		}
		else
		{
			if ( m_DoInventoryReservationLogs )
			{
				SendSetInventoryReservationLogs(false);
				LogManager.InventoryReservationLogEnable(false);
				m_DoInventoryReservationLogs = false;
			}
		}
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_LOG_INVENTORY_MOVE) )
		{
			if ( !m_DoInventoryHFSMLogs )
			{
				SendSetInventoryHFSMLogs(true);
				LogManager.InventoryHFSMLogEnable(true);
				m_DoInventoryHFSMLogs = true;
			}
		}
		else
		{
			if ( m_DoInventoryHFSMLogs )
			{
				SendSetInventoryHFSMLogs(false);
				LogManager.InventoryHFSMLogEnable(false);
				m_DoInventoryHFSMLogs = false;
			}
		}
	}
	//---------------------------------------------
	void CheckDoSymptomLogs()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_LOG_SYMPTOM) )
		{
			if ( !m_DoSymptomLogs )
			{
				SendSetSymptomLogs(true);
				LogManager.SymptomLogEnable(true);
				m_DoSymptomLogs = true;
			}
		}
		else
		{
			if ( m_DoSymptomLogs )
			{
				SendSetSymptomLogs(false);
				LogManager.SymptomLogEnable(false);
				m_DoSymptomLogs = false;
			}
		}
	}
	
	bool m_Active = false;
	void CheckPlugArrows()
	{
		if ( DiagMenu.GetBool(DiagMenuIDs.DM_SHOW_PLUG_ARROWS) )
		{
			if ( m_Active == false )
			{
				for ( int i = 0; i < GetGame().m_EnergyManagerArray.Count(); i++)
				{
					if ( GetGame().m_EnergyManagerArray[i] )
						GetGame().m_EnergyManagerArray[i].SetDebugPlugs( DiagMenu.GetBool(DiagMenuIDs.DM_SHOW_PLUG_ARROWS) );
				}
				m_Active = true;
			}
		}
		else
		{
			for ( int j = 0; j < GetGame().m_EnergyManagerArray.Count(); j++)
			{
				if ( GetGame().m_EnergyManagerArray[j] )
					GetGame().m_EnergyManagerArray[j].SetDebugPlugs( DiagMenu.GetBool(DiagMenuIDs.DM_SHOW_PLUG_ARROWS) );
			}
			m_Active = false;
		}
	}
	
	//---------------------------------------------
	void SendDebugActionsRPC()
	{
		CachedObjectsParams.PARAM1_INT.param1 = ItemBase.GetDebugActionsMask();
		if ( GetGame() && GetGame().GetPlayer() ) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_ITEM_DEBUG_ACTIONS, CachedObjectsParams.PARAM1_INT, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	//---------------------------------------------
	void SendEnableQuickRestrainRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
		if (player) player.SetQuickRestrain(enable);
		if ( GetGame() && GetGame().GetPlayer() ) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_ENABLE_QUICK_RESTRAIN, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	//---------------------------------------------
	void SendEnableQuickFishingRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
		if (player) player.SetQuickFishing(enable);
		if ( GetGame() && GetGame().GetPlayer() ) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_ENABLE_QUICK_FISHING, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	//---------------------------------------------
	void SendProceduralRecoilRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
		if (player) player.GetAimingModel().SetProceduralRecoilEnabled(enable);
		if ( GetGame() && GetGame().GetPlayer() ) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_WEAPON_PROC_RECOIL, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	//---------------------------------------------
	void SendActivateAllBSRPC()
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_ACTIVATE_ALL_BS, NULL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendKillPlayerRPC()
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_KILL_PLAYER, NULL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendInvincibilityRPC(int level)
	{
		CachedObjectsParams.PARAM1_INT.param1 = level;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_ENABLE_INVINCIBILITY, CachedObjectsParams.PARAM1_INT, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendStaminaRPC(bool value)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = value;
		if (GetGame() && GetGame().GetPlayer())
		{ 
			GetGame().RPCSingleParam(GetGame().GetPlayer(), ERPCs.DEV_RPC_STAMINA_TOGGLE, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity());
		}
 	}
	//---------------------------------------------
	void SendTargetabilityRPC(bool value)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = value;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_TOGGLE_TARGETABLE, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendBurstRPC(int opt)
	{
		CachedObjectsParams.PARAM1_INT.param1 = opt;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_BURST_OPT, CachedObjectsParams.PARAM1_INT, true, GetGame().GetPlayer().GetIdentity() );
 	}		
	//---------------------------------------------
	void SendLogPlayerStatsRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_LOG_PLAYER_STATS, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendModifiersRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DISABLE_MODIFIERS, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendInventoryAccessRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_INVENTORY_ACCESS, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	//---------------------------------------------
	void SendUnlimitedRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_UNLIMITED_AMMO, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendDisableBloodLossRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_DISABLE_BLOODLOOS, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendDebugCraftingRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_CRAFTING_DEBUG, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendBuildWoodRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(), ERPCs.RPC_BUILD_WOOD, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendBuildGateRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(), ERPCs.RPC_BUILD_GATE, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SoftSkillsShowDebugRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_SOFT_SKILLS_DEBUG_WINDOW, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SoftSkillsToggleStateRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_SOFT_SKILLS_TOGGLE_STATE, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void GunParticlesToggleStateRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_GUN_PARTICLES_TOGGLE, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SoftSkillsToggleModelRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_SOFT_SKILLS_TOGGLE_MODEL, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SoftSkillsSetSpecialtyRPC( float specialty_value )
	{
		CachedObjectsParams.PARAM1_FLOAT.param1 = specialty_value;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_SOFT_SKILLS_SET_SPECIALTY, CachedObjectsParams.PARAM1_FLOAT, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void LifespanBloodyHandsRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_LIFESPAN_BLOODY_HANDS, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void LifespanPlaytimeUpdateRPC( float playtime )
	{
		CachedObjectsParams.PARAM1_FLOAT.param1 = playtime;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_LIFESPAN_PLAYTIME_UPDATE, CachedObjectsParams.PARAM1_FLOAT, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendMeleeBlockStanceRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_MELEE_BLOCK_STANCE, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
	}
	//---------------------------------------------
	void SendMeleeFightRPC(bool enable)
	{
		CachedObjectsParams.PARAM1_BOOL.param1 = enable;
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_MELEE_FIGHT, CachedObjectsParams.PARAM1_BOOL, true, GetGame().GetPlayer().GetIdentity() );
	}
	//---------------------------------------------
	void SendGoUnconsciousRPC(bool is_delayed)
	{
		Param1<bool> p1 = new Param1<bool>(is_delayed);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_GO_UNCONSCIOUS, p1, true, GetGame().GetPlayer().GetIdentity() );
 	}
	//---------------------------------------------
	void SendSimulateNULLPointer()
	{
		GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_SIMULATE_NULL_POINTER, NULL, true, GetGame().GetPlayer().GetIdentity() );
	}
	//---------------------------------------------
	void SendSimulateDivisionByZero()
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_SIMULATE_DIVISION_BY_ZERO, NULL, true, GetGame().GetPlayer().GetIdentity() );
	}
	//---------------------------------------------
	void SendSimulateInfiniteLoop()
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_SIMULATE_INFINITE_LOOP, NULL, true, GetGame().GetPlayer().GetIdentity() );
	}
	//---------------------------------------------
	void SendSimulateErrorFunction()
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_SIMULATE_ERROR_FUNCTION, NULL, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendActivateBleedingSource(int bleeding_source)
	{
		Param1<int> p1 = new Param1<int>(bleeding_source);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_ACTIVATE_BS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	//---------------------------------------------
	void SendSetHairLevelRPC()
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_HAIR_LEVEL, NULL, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	void SendSetHairLevelHideRPC(int level, bool value)
	{
		Param2<int,bool> p2 = new Param2<int,bool>(level,value);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_HAIR_LEVEL_HIDE, p2, true, GetGame().GetPlayer().GetIdentity() );
 	}
	
	void SendSetActionLogs(bool enable)
	{
		Param1<bool> p1 = new Param1<bool>(enable);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DO_ACTION_LOGS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendSetWeaponLogs(bool enable)
	{
		Param1<bool> p1 = new Param1<bool>(enable);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DO_WEAPON_LOGS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendSetSymptomLogs(bool enable)
	{
		Param1<bool> p1 = new Param1<bool>(enable);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DO_SYMPTOMS_LOGS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendSetInventoryMoveLogs(bool enable)
	{
		Param1<bool> p1 = new Param1<bool>(enable);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DO_INV_MOVE_LOGS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendSetInventoryReservationLogs(bool enable)
	{
		Param1<bool> p1 = new Param1<bool>(enable);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DO_INV_RESERVATION_LOGS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendSetInventoryHFSMLogs(bool enable)
	{
		Param1<bool> p1 = new Param1<bool>(enable);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.RPC_DO_INV_HFSM_LOGS, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendForceFinisherType(int value)
	{
		Param1<int> p1 = new Param1<int>(value);
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_RPC_FORCE_FINISHER, p1, true, GetGame().GetPlayer().GetIdentity() );
	}
	
	void SendTimeAccel(Param param)
	{
		if (GetGame() && GetGame().GetPlayer()) 
			GetGame().RPCSingleParam( GetGame().GetPlayer() ,ERPCs.DEV_TIME_ACCEL, param, true);
	}
	
	//---------------------------------------------
	void OnRPC(PlayerBase player, int rpc_type, ParamsReadContext ctx)
	{
		bool enable;
		
		switch (rpc_type)
		{
			case ERPCs.DEV_SIMULATE_NULL_POINTER:
				PlayerBase NULL_player = null;
				NULL_player.SetHealth("","", -1);		
			break;
				
			case ERPCs.DEV_SIMULATE_DIVISION_BY_ZERO:
				int zero = 0;
				int division_by_zero = 1/zero;
			break;
				
			case ERPCs.DEV_SIMULATE_INFINITE_LOOP:
				while ( true )
				{
					Print("simulated infinite loop");
				}
			break;
				
			case ERPCs.DEV_SIMULATE_ERROR_FUNCTION:
				Error("Simulated error");
			break;
			
			case ERPCs.DEV_DIAGMENU_SUBSCRIBE:
				if (ctx.Read(CachedObjectsParams.PARAM1_INT))
				{
					int newMask = CachedObjectsParams.PARAM1_INT.param1;
					int currentMask = m_Subscribers.Get(player);
				
					if (newMask != currentMask)
					{
						if (newMask == 0)
						{
							m_Subscribers.Remove(player);
						}
						else
						{
							m_Subscribers.Set(player, newMask);
						}
					}
				}
					
					
			break;
			case ERPCs.DEV_ACTIVATE_BS:
					ctx.Read(CachedObjectsParams.PARAM1_INT);
					player.GetBleedingManagerServer().DebugActivateBleedingSource(CachedObjectsParams.PARAM1_INT.param1);
			break;
			
			case ERPCs.DEV_RPC_UNLIMITED_AMMO:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				if (enable)
				{			
					ItemBase.SetDebugActionsMask( ItemBase.GetDebugActionsMask() | DebugActionType.UNLIMITED_AMMO );
				}
				else
				{
					ItemBase.SetDebugActionsMask( ItemBase.GetDebugActionsMask() & (~DebugActionType.UNLIMITED_AMMO) );			
				}
			break;
			
			case ERPCs.RPC_DISABLE_MODIFIERS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				player.SetModifiers( enable );
			break;
			
			case ERPCs.DEV_RPC_DISABLE_BLOODLOOS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				player.GetBleedingManagerServer().SetBloodLoss( CachedObjectsParams.PARAM1_BOOL.param1 );
			break;
			
			case ERPCs.RPC_KILL_PLAYER:
				player.SetHealth("","", -1);
			break;	
			
			case ERPCs.DEV_ACTIVATE_ALL_BS:
				player.GetBleedingManagerServer().ActivateAllBS();
			break;

			case ERPCs.RPC_ENABLE_INVINCIBILITY:
				ctx.Read(CachedObjectsParams.PARAM1_INT);
				int level = CachedObjectsParams.PARAM1_INT.param1;
				if (level == 0)
				{
					player.SetAllowDamage(true);
					player.SetCanBeDestroyed(true);
				}
				else if (level == 1)
				{
					player.SetAllowDamage(true);
					player.SetCanBeDestroyed(false);
				}
				else if (level == 2)
				{
					player.SetAllowDamage(false);
				}
			break;

			case ERPCs.DEV_RPC_STAMINA_TOGGLE:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				bool staminaState = CachedObjectsParams.PARAM1_BOOL.param1;
				player.SetStaminaEnabled(staminaState);
			break;
			
			case ERPCs.DEV_RPC_TOGGLE_TARGETABLE:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				bool value = CachedObjectsParams.PARAM1_BOOL.param1;
				player.m_CanBeTargetedDebug = value;
			break;
			
			case ERPCs.RPC_BURST_OPT:
				ctx.Read(CachedObjectsParams.PARAM1_INT);
				int opt = CachedObjectsParams.PARAM1_INT.param1;
				player.GetWeaponManager().SetBurstOption(opt);
			break;

			case ERPCs.RPC_ITEM_DEBUG_ACTIONS:
				ctx.Read(CachedObjectsParams.PARAM1_INT);
				int mask = CachedObjectsParams.PARAM1_INT.param1;
				ItemBase.SetDebugActionsMask(mask);
			break;
			
			case  ERPCs.RPC_WEAPON_PROC_RECOIL:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				player.GetAimingModel().SetProceduralRecoilEnabled(enable);
			break;
			
			case ERPCs.RPC_ENABLE_QUICK_RESTRAIN:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				player.SetQuickRestrain(enable);
			break;
			
			case ERPCs.RPC_ENABLE_QUICK_FISHING:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				player.SetQuickFishing(enable);
			break;

			case ERPCs.RPC_LOG_PLAYER_STATS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				player.GetPlayerStats().SetAllowLogs(CachedObjectsParams.PARAM1_BOOL.param1);
			break;

			case ERPCs.RPC_SOFT_SKILLS_TOGGLE_STATE:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				player.GetSoftSkillsManager().SetSoftSkillsState(CachedObjectsParams.PARAM1_BOOL.param1);
			break;

			case ERPCs.RPC_SOFT_SKILLS_DEBUG_WINDOW:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				
				if ( enable )
				{
					player.GetSoftSkillsManager().StartSynchTimer();
				}
				else
				{
					player.GetSoftSkillsManager().StopSynchTimer();
					player.GetSoftSkillsManager().ResetDebugWindow();
				}
				
			break;
		
			case ERPCs.RPC_GUN_PARTICLES_TOGGLE:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				PrtTest.m_GunParticlesState = CachedObjectsParams.PARAM1_BOOL.param1;
			break;

			case ERPCs.RPC_CRAFTING_DEBUG:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				PluginRecipesManager plugin_recipes_manager;
				Class.CastTo(plugin_recipes_manager, GetPlugin(PluginRecipesManager));
				plugin_recipes_manager.SetEnableDebugCrafting(CachedObjectsParams.PARAM1_BOOL.param1);
			break;

			case ERPCs.RPC_SOFT_SKILLS_TOGGLE_MODEL:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				player.GetSoftSkillsManager().SetLinearState(CachedObjectsParams.PARAM1_BOOL.param1) ;
			break;

			case ERPCs.RPC_SOFT_SKILLS_SET_SPECIALTY:
				ctx.Read( CachedObjectsParams.PARAM1_FLOAT );
				float specialty = CachedObjectsParams.PARAM1_FLOAT.param1;
				SoftSkillsManager soft_skill_manager = player.GetSoftSkillsManager();
				soft_skill_manager.SetSpecialtyLevel( specialty );
				soft_skill_manager.SynchSpecialtyLevel();
				player.GetStatSpecialty().Set( specialty );
			break;

			case ERPCs.RPC_LIFESPAN_BLOODY_HANDS:
				ctx.Read( CachedObjectsParams.PARAM1_BOOL );
				enable = CachedObjectsParams.PARAM1_BOOL.param1;
				PluginLifespan lifespan_bloody_hands;
				Class.CastTo(lifespan_bloody_hands, GetPlugin( PluginLifespan ));
				lifespan_bloody_hands.UpdateBloodyHandsVisibility( player, enable );
			break;

			case ERPCs.RPC_LIFESPAN_PLAYTIME_UPDATE:
				ctx.Read( CachedObjectsParams.PARAM1_FLOAT );
				//reset players playtime
				float playtime = player.StatGet("playtime");
				float opposite_playtime = playtime * ( -1 );
				player.StatUpdate("playtime", opposite_playtime );
				//set new playtime
				float playtime_update = CachedObjectsParams.PARAM1_FLOAT.param1;
				player.StatUpdate("playtime", playtime_update );
				player.SetLastShavedSeconds( 0 );
				//update lifespan
				PluginLifespan module_lifespan_update;
				Class.CastTo(module_lifespan_update, GetPlugin( PluginLifespan ));
				module_lifespan_update.UpdateLifespan( player, true );
				module_lifespan_update.ChangeFakePlaytime( player, playtime_update );
				
			break;
			case ERPCs.DEV_GO_UNCONSCIOUS:
				ctx.Read( CachedObjectsParams.PARAM1_BOOL );
				if (!CachedObjectsParams.PARAM1_BOOL.param1)
				{
					GoUnconscious(player);
				}
				else
				{
					GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(GoUnconscious, 10000, false, player);
				}
			//DayZPlayerSyncJunctures.SendPlayerUnconsciousness(player, !player.IsUnconscious() );
			break;
			case ERPCs.DEV_HAIR_LEVEL_HIDE:
				ctx.Read( CachedObjectsParams.PARAM2_INT_INT ); //PARAM2_INT_INT.param2 is BOOL here
				player.SetHairLevelToHide(CachedObjectsParams.PARAM2_INT_INT.param1, CachedObjectsParams.PARAM2_INT_INT.param2, true);
				player.UpdateHairSelectionVisibility(true);
			break;
			
			case ERPCs.RPC_DO_ACTION_LOGS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				LogManager.ActionLogEnable(CachedObjectsParams.PARAM1_BOOL.param1);
			break;		
				
			case ERPCs.RPC_DO_WEAPON_LOGS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				LogManager.WeaponLogEnable(CachedObjectsParams.PARAM1_BOOL.param1);
			break;
			
			case ERPCs.RPC_DO_SYMPTOMS_LOGS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				LogManager.SymptomLogEnable(CachedObjectsParams.PARAM1_BOOL.param1);
			break;
			
			case ERPCs.RPC_DO_INV_MOVE_LOGS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				LogManager.InventoryMoveLogEnable(CachedObjectsParams.PARAM1_BOOL.param1);
			break;
			
			case ERPCs.RPC_DO_INV_RESERVATION_LOGS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				LogManager.InventoryReservationLogEnable(CachedObjectsParams.PARAM1_BOOL.param1);
			break;
			
			case ERPCs.RPC_DO_INV_HFSM_LOGS:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				LogManager.InventoryHFSMLogEnable(CachedObjectsParams.PARAM1_BOOL.param1);
			break;			
			case ERPCs.DEV_RPC_ITEMS_FIX:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				player.FixAllInventoryItems();
			break;
			case ERPCs.DEV_RPC_FORCE_FINISHER:
				ctx.Read(CachedObjectsParams.PARAM1_INT);
				player.GetMeleeCombat().DebugSetForcedFinisherType(CachedObjectsParams.PARAM1_INT.param1);
			break;
			case ERPCs.RPC_BUILD_GATE:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				DiagMenu.SetValue(DiagMenuIDs.DM_BUILD_GATE, CachedObjectsParams.PARAM1_BOOL.param1);
			break;
			case ERPCs.RPC_BUILD_WOOD:
				ctx.Read(CachedObjectsParams.PARAM1_BOOL);
				DiagMenu.SetValue(DiagMenuIDs.DM_BUILD_WOOD, CachedObjectsParams.PARAM1_BOOL.param1);
			break;
			case ERPCs.DEV_TIME_ACCEL:
			{
				TimeAccelParam tap = new TimeAccelParam(false,0,0);
				
				if (ctx.Read(tap))
				{
					FeatureTimeAccel.m_CurrentTimeAccel = tap;
					/*
					Print(" -------- TimeAccelParam -------");
					Print(tap.param1);
					Print(tap.param2);
					Print(tap.param3);
					Print(" -------------------------------");
					Print(GetFeatureTimeAccelEnabled(ETimeAccelCategories.UNDERGROUND_ENTRANCE));
					Print(GetFeatureTimeAccelValue());
					Print(" ===============================");
					*/
				}
				break;
			}
		}
	}
	
	// Helper diag functions

	void GoUnconscious(PlayerBase player)
	{
		if (player.IsUnconscious())
		{
			player.SetHealth("","Shock",100);
		}
		else
		{
			player.m_UnconsciousEndTime = -60;
			player.SetHealth("","Shock",0);
		}
	}
	
	bool AreTimeAccelParamsSame(TimeAccelParam p1, TimeAccelParam p2)
	{
		if (p1.param1 != p2.param1)
			return false;
		if (p1.param2 != p2.param2)
			return false;
		if (p1.param3 != p2.param3)
			return false;
		return true;
	}
	
	static void EnableDebugSystemClient(ESubscriberSystems system, bool enable)
	{
		int mask;
		if (enable)
		{
			mask = (m_SystemsMaks | system);//turn on bit
		}
		else
		{
			mask = ((~system) & m_SystemsMaks);//turn off bit
		}
		
		if (mask != m_SystemsMaks)
		{
			GetGame().RPCSingleParam( GetGame().GetPlayer(),ERPCs.DEV_DIAGMENU_SUBSCRIBE, new Param1<int>(mask) , true, GetGame().GetPlayer().GetIdentity() );
			m_SystemsMaks = mask;
		}
	}
	
	static void SendDataToSubscribersServer(Object target, ESubscriberSystems system,int rpc_type, Param data, bool guaranteed = true)
	{
		for (int i = 0; i < m_Subscribers.Count(); i++)
		{
			Man man = m_Subscribers.GetKey(i);
			if (man)
			{
				int subscribedSystems = m_Subscribers.Get(man);
				if (system & subscribedSystems)
				{
					GetGame().RPCSingleParam( target, rpc_type, data, guaranteed , man.GetIdentity() );
				}
			}
			else
			{
				m_Subscribers.RemoveElement(i);
				i--;
			}
		}
	}
	
	
	// time accel related
	int GetTimeAccelBitmask()
	{
		int bitmask = 0;
		WriteCategoryBit(bitmask, DiagMenuIDs.DM_FEATURE_TIME_ACCEL_UG_ENTRANCES, ETimeAccelCategories.UNDERGROUND_ENTRANCE);
		WriteCategoryBit(bitmask, DiagMenuIDs.DM_FEATURE_TIME_ACCEL_UG_RESERVOIR, ETimeAccelCategories.UNDERGROUND_RESERVOIR);
		WriteCategoryBit(bitmask, DiagMenuIDs.DM_FEATURE_TIME_ACCEL_ENERGY_CONSUME, ETimeAccelCategories.ENERGY_CONSUMPTION);
		WriteCategoryBit(bitmask, DiagMenuIDs.DM_FEATURE_TIME_ACCEL_ENERGY_RECHARGE, ETimeAccelCategories.ENERGY_RECHARGE);
		return bitmask;
	}
	
	void WriteCategoryBit(out int bitmask, int diagMenuID, ETimeAccelCategories category)
	{
		if (DiagMenu.GetValue(diagMenuID))
		{
			bitmask = bitmask | category;
		}
	}

#endif
}