Jump to content
Dramacius

getUID, and setting variables based on UID

Recommended Posts

hey guys, I have found I can allow connections to my server using UID (or more to the point disallow players from joining if they're Steam ID is not in an allowed list.

I am sure there is a way of doing other things with it so I have been expermenting with the following idea.

I have a nested array of players that includes player name, UID, and a couple of other settings I would like to set when a player joins the server.

I use ace so would like to be able to set the Medical, Engineering and EOD perms through this system.

players = [
    [
        "76561198001748042",  // Dungeon Master
        0,                    // Medical (0 = none, 1 = Combat Medic, 2 = Doctor)
        0,                    // Engineer (0 = no, 1 = yes)
        0                     // EOD (0 = no, 1 = yes)
    ]
];

allowedPlayers = pushBack players (select 0 in each of the sub arrays); // I don't know how to get the position 0 of a sub array and can't find anything on google to explain it.

I would like to have these settings set when a player connects so in initPlayerLocal.sqf I need to put the following codes

 

_player = [player name, getplayerUID player];
_name = _player select 0;
_uid = _player select 1;
_medic = players (each nested array select 1); // I don't know how to do this and the same for engineer and EOD
_engineer = players (each nested array select 2);
_eod = players (each nested array select 3);

if (_uid !in allowedPlayers) then {
    endMission 3;
} else {
	if (_medic == 1) then {
		_this setVariable ["ace_medical_medicClass",1,true];
	};
	if (_medic == 2) then {
		_this setVariable ["ace_medical_medicClass",2,true];
	};
	if (_engineer == 1) then {
		_this setVariable ["ACE_IsEngineer",1,true];
	};
	if (_EOD == 1) then {
		_this setVariable ["ACE_isEOD",1,true];
	};

 

Share this post


Link to post
Share on other sites

Try something like: (I modified some variables)

DRA_players = [[ "76561198001748042",0,1,1,1] ,[ "76561198001748043",2,1,1,1]];
private _allowedPlayers = DRA_players apply {_x#0};
private _player = [name player, getplayerUID player];
_player params ["_name","_uid"];
if !(_uid in _allowedPlayers) exitWith {endMission "END3"};
private _playerData = DRA_players select (DRA_players find {_x#0 == "_uid"});
_playerData params ["_uid","_medic","_engineer","_eod"];
if (_medic >0) then { player setVariable ["ace_medical_medicClass",_medic,true]};
if (_engineer == 1) then { player setVariable ["ACE_IsEngineer",1,true]};
if (_eod == 1) then { player setVariable ["ACE_isEOD",1,true]};

 

  • Like 2

Share this post


Link to post
Share on other sites

*edit* - @pierremgi has provided a nice, concise version ^^^

 

Iterate through your array "players," pushing back the first nested element:

allowedPlayers = [];

{
	allowedPlayers pushBack (_x #0);
} forEach players;

 

private _player = [player name, getplayerUID player];
private _name = _player #0;
private _uid = _player #1;

if (_uid !in allowedPlayers) then {  //  need to check this before we look for UID in "players" else error
    endMission 3;
} else {

	private _index = players find _uid; // returns index of element that contains UID
	private _element = players #_index;
	private _medic = _element #1;
	private _engineer = _element #2;
	private _eod = _element #3;

	if (_medic == 1) then {
		_this setVariable ["ace_medical_medicClass",1,true];
	};
	if (_medic == 2) then {
		_this setVariable ["ace_medical_medicClass",2,true];
	};
	if (_engineer == 1) then {
		_this setVariable ["ACE_IsEngineer",1,true];
	};
	if (_EOD == 1) then {
		_this setVariable ["ACE_isEOD",1,true];
	};

 

  • Like 1

Share this post


Link to post
Share on other sites

thank you guys, both your codes look great and I will try them tomorrow.

Share this post


Link to post
Share on other sites

hey guys. thanks again for all your help. I have got the majority of this working so far I think however I have added some additional sections.

The two problems I am having now is no matter what I set my "Role" as selection 5 of the _allPlayers sub array it always loads the "commander.sqf" script and the second issue is the _this setUnitRank _rank; command is not working it keeps giving me an error saying Type Array expected Object or something similar to that.

This is the whole code that runs in initPlayerLocal.sqf

Spoiler

// UID, Medical (0 = none, 1 = Combat Medic, 2 = Doctor), Engineer (0 = no, 1 = yes), EOD (0 = no, 1 = yes), Rank ("PRIVATE" · "CORPORAL" · "SERGEANT" · "LIEUTENANT" · "CAPTAIN" · "MAJOR" · "COLONEL"), Role ("Commander", "PlatoonLead", "SquadLead", "Rifleman")
private _allPlayers = [
    [ "myUID", 0, 0, 0, "COLONEL", "rifleman" ], // me
	[ "aDifferentUID", 0, 0, 0, "COLONEL", "commander" ]  // Someone Else
];
private _allowedPlayers = [];
{
	_allowedPlayers pushBack (_x #0);
} forEach _allPlayers;

private _player = [name player, getplayerUID player];
private _name = _player #0;
private _uid = _player #1;

if !(_uid in _allowedPlayers) then {  //  need to check this before we look for UID in "players" else error
    endMission 3;
} else {

	private _index = DM_allPlayers apply {_x #0 } find _uid;  // returns index of element that contains UID
	private _element = _allPlayers #_index;
	private _medic = _element #1;
	private _engineer = _element #2;
	private _eod = _element #3;
	private _rank = _element #4;
	private _role = _element #5;

	if (_medic == 1) then {
		_this setVariable ["ace_medical_medicClass",1,true];
	};
	if (_medic == 2) then {
		_this setVariable ["ace_medical_medicClass",2,true];
	};
	if (_engineer == 1) then {
		_this setVariable ["ACE_IsEngineer",1,true];
	};
	if (_EOD == 1) then {
		_this setVariable ["ACE_isEOD",1,true];
	};
	// _this setUnitRank _rank;
	execVM format ["DM_Scripts\DM_Loudouts\%1.sqf", _role];
};

 


I these loadouts stored in seperate SQF files
 

Spoiler

commander.sqf

Spoiler

 




comment "Exported from Arsenal by Dungeon Master";

comment "[!] UNIT MUST BE LOCAL [!]";
if (!local player) exitWith {};

comment "Remove existing items";
removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;

comment "Add weapons";
player addWeapon "arifle_SPAR_01_blk_F";
player addPrimaryWeaponItem "acc_pointer_IR";
player addPrimaryWeaponItem "optic_Aco";
player addPrimaryWeaponItem "30Rnd_556x45_Stanag";
player addWeapon "hgun_P07_blk_F";
player addHandgunItem "16Rnd_9x21_yellow_Mag";

comment "Add containers";
player forceAddUniform "U_B_CombatUniform_mcam";
player addVest "V_PlateCarrier2_rgr";
player addBackpack "B_Kitbag_mcamo";

comment "Add binoculars";
player addWeapon "ACE_Vector";

comment "Add items to containers";
player addItemToUniform "FirstAidKit";
for "_i" from 1 to 2 do {player addItemToUniform "ACE_CableTie";};
player addItemToUniform "ACE_EarPlugs";
player addItemToUniform "ItemcTabHCam";
player addItemToUniform "ACE_Flashlight_MX991";
player addItemToUniform "ACE_Flashlight_XL50";
player addItemToVest "ACE_Canteen";
for "_i" from 1 to 2 do {player addItemToVest "ACE_IR_Strobe_Item";};
player addItemToVest "ACE_MapTools";
player addItemToVest "ItemMicroDAGR";
for "_i" from 1 to 8 do {player addItemToVest "30Rnd_556x45_Stanag";};
for "_i" from 1 to 3 do {player addItemToVest "16Rnd_9x21_yellow_Mag";};
for "_i" from 1 to 2 do {player addItemToVest "SmokeShell";};
for "_i" from 1 to 2 do {player addItemToVest "HandGrenade";};
for "_i" from 1 to 2 do {player addItemToVest "ACE_CTS9";};
for "_i" from 1 to 6 do {player addItemToVest "ACE_Chemlight_HiGreen";};
for "_i" from 1 to 10 do {player addItemToBackpack "ACE_elasticBandage";};
for "_i" from 1 to 10 do {player addItemToBackpack "ACE_quikclot";};
player addItemToBackpack "ACE_EntrenchingTool";
player addItemToBackpack "ACE_Fortify";
player addItemToBackpack "kka3_ace_extension_Land_Camping_Light_off_F";
for "_i" from 1 to 2 do {player addItemToBackpack "ACE_MRE_BeefStew";};
player addItemToBackpack "ACE_SpareBarrel_Item";
for "_i" from 1 to 4 do {player addItemToBackpack "ACE_tourniquet";};
player addHeadgear "H_HelmetB_desert";

comment "Add items";
player linkItem "ItemMap";
player linkItem "ItemCompass";
player linkItem "ACE_Altimeter";
player linkItem "TFAR_anprc152";
player linkItem "ACE_NVG_Gen1_Brown";

platoonLead.sqf

Spoiler



comment "Exported from Arsenal by Dungeon Master";

comment "[!] UNIT MUST BE LOCAL [!]";
if (!local player) exitWith {};

comment "Remove existing items";
removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;

comment "Add weapons";
player addWeapon "arifle_SPAR_01_blk_F";
player addPrimaryWeaponItem "acc_pointer_IR";
player addPrimaryWeaponItem "optic_Aco";
player addPrimaryWeaponItem "30Rnd_556x45_Stanag";
player addWeapon "hgun_P07_blk_F";
player addHandgunItem "16Rnd_9x21_yellow_Mag";

comment "Add containers";
player forceAddUniform "U_B_CombatUniform_mcam";
player addVest "V_PlateCarrier2_rgr";
player addBackpack "B_Kitbag_mcamo";

comment "Add binoculars";
player addWeapon "ACE_Vector";

comment "Add items to containers";
player addItemToUniform "FirstAidKit";
for "_i" from 1 to 2 do {player addItemToUniform "ACE_CableTie";};
player addItemToUniform "ACE_EarPlugs";
player addItemToUniform "ItemcTabHCam";
player addItemToUniform "ACE_Flashlight_MX991";
player addItemToUniform "ACE_Flashlight_XL50";
player addItemToVest "ACE_Canteen";
for "_i" from 1 to 2 do {player addItemToVest "ACE_IR_Strobe_Item";};
player addItemToVest "ACE_MapTools";
player addItemToVest "ItemMicroDAGR";
for "_i" from 1 to 8 do {player addItemToVest "30Rnd_556x45_Stanag";};
for "_i" from 1 to 3 do {player addItemToVest "16Rnd_9x21_yellow_Mag";};
for "_i" from 1 to 2 do {player addItemToVest "SmokeShell";};
for "_i" from 1 to 2 do {player addItemToVest "HandGrenade";};
for "_i" from 1 to 2 do {player addItemToVest "ACE_CTS9";};
for "_i" from 1 to 6 do {player addItemToVest "ACE_Chemlight_HiGreen";};
for "_i" from 1 to 10 do {player addItemToBackpack "ACE_elasticBandage";};
for "_i" from 1 to 10 do {player addItemToBackpack "ACE_quikclot";};
player addItemToBackpack "ACE_EntrenchingTool";
player addItemToBackpack "ACE_Fortify";
player addItemToBackpack "kka3_ace_extension_Land_Camping_Light_off_F";
for "_i" from 1 to 2 do {player addItemToBackpack "ACE_MRE_BeefStew";};
player addItemToBackpack "ACE_SpareBarrel_Item";
for "_i" from 1 to 4 do {player addItemToBackpack "ACE_tourniquet";};
player addHeadgear "H_HelmetB_desert";

comment "Add items";
player linkItem "ItemMap";
player linkItem "ItemCompass";
player linkItem "ACE_Altimeter";
player linkItem "TFAR_anprc152";
player linkItem "ACE_NVG_Gen1_Brown";

 

squadLead.sqf

Spoiler



comment "Exported from Arsenal by Dungeon Master";

comment "[!] UNIT MUST BE LOCAL [!]";
if (!local player) exitWith {};

comment "Remove existing items";
removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;

comment "Add weapons";
player addWeapon "arifle_SPAR_01_blk_F";
player addPrimaryWeaponItem "acc_pointer_IR";
player addPrimaryWeaponItem "optic_Aco";
player addPrimaryWeaponItem "30Rnd_556x45_Stanag";
player addWeapon "hgun_P07_blk_F";
player addHandgunItem "16Rnd_9x21_yellow_Mag";

comment "Add containers";
player forceAddUniform "U_B_CombatUniform_mcam";
player addVest "V_PlateCarrier2_rgr";
player addBackpack "TFAR_rt1523g_black";

comment "Add binoculars";
player addWeapon "ACE_Vector";

comment "Add items to containers";
player addItemToUniform "FirstAidKit";
for "_i" from 1 to 2 do {player addItemToUniform "ACE_CableTie";};
player addItemToUniform "ACE_EarPlugs";
player addItemToUniform "ItemcTabHCam";
player addItemToUniform "ACE_Flashlight_MX991";
player addItemToUniform "ACE_Flashlight_XL50";
player addItemToVest "ACE_Canteen";
for "_i" from 1 to 2 do {player addItemToVest "ACE_IR_Strobe_Item";};
player addItemToVest "ACE_MapTools";
player addItemToVest "ItemAndroid";
for "_i" from 1 to 6 do {player addItemToVest "30Rnd_556x45_Stanag";};
for "_i" from 1 to 3 do {player addItemToVest "16Rnd_9x21_yellow_Mag";};
for "_i" from 1 to 2 do {player addItemToVest "SmokeShell";};
for "_i" from 1 to 2 do {player addItemToVest "HandGrenade";};
for "_i" from 1 to 2 do {player addItemToVest "ACE_CTS9";};
for "_i" from 1 to 6 do {player addItemToVest "ACE_Chemlight_HiGreen";};
player addHeadgear "H_HelmetB_desert";

comment "Add items";
player linkItem "ItemMap";
player linkItem "ItemCompass";
player linkItem "ACE_Altimeter";
player linkItem "TFAR_anprc152";
player linkItem "ACE_NVG_Gen1_Brown";

 

rifleman.sqf

Spoiler



comment "Exported from Arsenal by Dungeon Master";

comment "[!] UNIT MUST BE LOCAL [!]";
if (!local player) exitWith {};

comment "Remove existing items";
removeAllWeapons player;
removeAllItems player;
removeAllAssignedItems player;
removeUniform player;
removeVest player;
removeBackpack player;
removeHeadgear player;
removeGoggles player;

comment "Add weapons";
player addWeapon "arifle_SPAR_01_blk_F";
player addPrimaryWeaponItem "acc_pointer_IR";
player addPrimaryWeaponItem "optic_Aco";
player addPrimaryWeaponItem "30Rnd_556x45_Stanag";
player addWeapon "hgun_P07_blk_F";
player addHandgunItem "16Rnd_9x21_yellow_Mag";

comment "Add containers";
player forceAddUniform "U_B_CombatUniform_mcam";
player addVest "V_PlateCarrier2_rgr";
player addBackpack "B_Kitbag_mcamo";

comment "Add binoculars";
player addWeapon "ACE_Vector";

comment "Add items to containers";
player addItemToUniform "FirstAidKit";
for "_i" from 1 to 2 do {player addItemToUniform "ACE_CableTie";};
player addItemToUniform "ACE_EarPlugs";
player addItemToUniform "ItemcTabHCam";
player addItemToUniform "ACE_Flashlight_MX991";
player addItemToUniform "ACE_Flashlight_XL50";
player addItemToVest "ACE_Canteen";
for "_i" from 1 to 2 do {player addItemToVest "ACE_IR_Strobe_Item";};
player addItemToVest "ACE_MapTools";
player addItemToVest "ItemMicroDAGR";
for "_i" from 1 to 8 do {player addItemToVest "30Rnd_556x45_Stanag";};
for "_i" from 1 to 3 do {player addItemToVest "16Rnd_9x21_yellow_Mag";};
for "_i" from 1 to 2 do {player addItemToVest "SmokeShell";};
for "_i" from 1 to 2 do {player addItemToVest "HandGrenade";};
for "_i" from 1 to 2 do {player addItemToVest "ACE_CTS9";};
for "_i" from 1 to 6 do {player addItemToVest "ACE_Chemlight_HiGreen";};
for "_i" from 1 to 10 do {player addItemToBackpack "ACE_elasticBandage";};
for "_i" from 1 to 10 do {player addItemToBackpack "ACE_quikclot";};
player addItemToBackpack "ACE_EntrenchingTool";
player addItemToBackpack "ACE_Fortify";
player addItemToBackpack "kka3_ace_extension_Land_Camping_Light_off_F";
for "_i" from 1 to 2 do {player addItemToBackpack "ACE_MRE_BeefStew";};
player addItemToBackpack "ACE_SpareBarrel_Item";
for "_i" from 1 to 4 do {player addItemToBackpack "ACE_tourniquet";};
player addHeadgear "H_HelmetB_desert";

comment "Add items";
player linkItem "ItemMap";
player linkItem "ItemCompass";
player linkItem "ACE_Altimeter";
player linkItem "TFAR_anprc152";
player linkItem "ACE_NVG_Gen1_Brown";

 

 

Solved by changing

private _index = DM_allPlayers find _uid;

to 

private _index = DM_allPlayers apply {_x #0 } find _uid; 

 

Share this post


Link to post
Share on other sites

New task related to this.

I want to extend the controls so that players create or join a specified group when they connect

Group names are Spartan, Alpha, Hotel, Apollo, Artemis, Hades and Hydra.

I want them to set the Squad Leader to highest ranking member unless someone has joined with the role SquadLead.

Is this possible?

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×