Jump to content

DJPorterNZ

Community Member
  • Posts

    1
  • Joined

  • Last visited

  • Donations

    0.00 GBP 

DJPorterNZ's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. RE: ArmA 3 Alpha / Invade & Annex After having some ongoing issues with griefers on our "realism" units public server running the latest release of Invade & Annex, we have decided to restrict the use of all of the armed vehicles and helos to unit members only. To this end, I have slightly modified the code in the file 'pilotCheck.sqf', and copied and repurposed in two 'rblock*.sqf' files to add restrictions for the armed land and sea vehicles. i.e.: pilotCheck.sqf: (Modified!) _AllowPilots = ["B_Helipilot_F", "O_helipilot_F"]; while {true} do { waitUntil {sleep 0.5; alive player}; if (!((typeof player) in _AllowPilots)) then { private "_v"; while {alive player} do { waitUntil {sleep 0.5; vehicle player != player}; _v = vehicle player; if (_v isKindOf "Helicopter" && !(_v isKindOf "ParachuteBase")) then { if (driver _v == player) then { player action ["eject", _v]; waitUntil {sleep 0.5; vehicle player == player}; player action ["engineOff", _v]; hint "You must be a pilot to fly!"; }; }; }; } else { waitUntil {sleep 0.5; !alive player}; }; }; rblock1.sqf: (restrict AH-9/Ka60 to unit members only) /* Checks if the player attempting to get in pilot seat of AH9 or Ka60 helicopter is both a pilot and is whitelisted in the _SOAR list of player UIDs. Add more UIDs to the list as follows ["UID", "nextuid", "lastuid"] */ _SOAR = [ "76561198089126128", "76561198030565436"]; _AirRoles = ["B_Helipilot_F", "O_helipilot_F"]; _RestrictAir = ["B_AH9_F", "O_Ka60_F"]; while {true} do { waitUntil {sleep 0.5; alive player}; if (!((getPlayerUID player) in _SOAR) && ((typeof player) in _AirRoles)) then { private "_v","_t"; while {alive player} do { waitUntil {sleep 0.5; vehicle player != player}; _v = vehicle player; _t = typeof _v; if (_t in _RestrictAir) then { if (driver _v == player) then { player action ["eject", _v]; waitUntil {sleep 0.5; vehicle player == player}; player action ["engineOff", _v]; hint "Authorized UNIT Pilots Only!"; }; }; }; } else { waitUntil {sleep 0.5; !alive player}; }; }; rblock2.sqf: (restrict armed land & sea vehicles to UNIT members only) /* Checks if the player attempting to get in driver seat of armed vehicles is whitelisted in the _SOAR list of player UIDs. Add more UIDs to the list as follows ["UID", "nextuid", "lastuid"] */ _SOAR = [ "76561198089126128", "76561198030565436"]; _RestrictLandSea = ["B_Hunter_HMG_F", "B_Hunter_RCWS_F", "B_SpeedBoat", "O_Ifrit_MG_F", "O_Ifrit_GMG_F", "O_SpeedBoat", "B_Mk6"]; while {true} do { waitUntil {sleep 0.5; alive player}; if !((getPlayerUID player) in _SOAR) then { private "_v,"_t""; while {alive player} do { waitUntil {sleep 0.5; vehicle player != player}; _v = vehicle player; _t = typeof _v; if (_t in _RestrictLandSea) then { if (driver _v == player) then { player action ["eject", _v]; waitUntil {sleep 0.5; vehicle player == player}; player action ["engineOff", _v]; hint "Authorized UNIT Drivers/Gunners Only!"; }; }; }; } else { waitUntil {sleep 0.5; !alive player}; }; }; .. and the INIT line for units now is: (formatting is used here only for clarity) nul = [] execVM "pilotCheck.sqf"; nul = [] execVM "rblock1.sqf"; nul = [] execVM "rblock2.sqf"; this addMPEventHandler ["mprespawn",{nul = [] execVM "pilotCheck.sqf"; nul = [] execVM "rblock1.sqf"; nul = [] execVM "rblock2.sqf";}]; Now for the questions... Can these checks be combined into a single check per unit somehow? I've tried repeatedly, but have failed miserably each time. To be honest, I can't even get my head around the necessary logic and have it come out right. Is there a server or client-side penalty for duplicating want are essentially very similar functions? Would this penalty be better or worse than the penalty imposed by a more elaborate if-then-else structure to combine all of these functions? The above system works. Should I even be worried about changing them? Thanks for your time
×
×
  • Create New...