Jump to content

Raider_18

Member
  • Content Count

    20
  • Joined

  • Last visited

  • Medals

Community Reputation

7 Neutral

About Raider_18

  • Rank
    Private First Class

Profile Information

  • Interests
    Arma 3 mission design

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Raider_18

    How to turn init code in to a script?

    @pierre MGI Been messing around with the hashmap stuff, as I agree after reading up it seems like the way to go. I use the following code in the debug console to interact with the hashmap and try to learn how it works. I hope it might help someone experimenting with it. I can get what I want from the key/value relationship now which is, a random element from the nested array. in debug console what it might end up like in my loadout function is giving each faction a hashmap in a seperate .hpp file, and then just use the KEYS as the categories and the VALUES as possible choices like in the example above, just because so far it works and im not nearly clever enough to even understand what's really happening here. Speaking of which, notice the toArray command. I have no clue why but it needs to be there. Found that information here: I can only read it for about 5 minutes before my brain starts hurting but, she works and that's all that matters. Some more helpful links for the folks. https://community.bistudio.com/wiki/HashMap#HashMap_Basics https://community.bistudio.com/wiki/Category:Command_Group:_HashMap
  2. SOLVED - Just had to put the doMove command safely in the <player on foot> IF statment. I also added a moveInCargo command. Althought it's not ultra realistic it is somewhat necessary as the AI will sometimes wander or do weird things while trying to keep up. I will post all code below for anyone who wants to tweak it or improve it. My naming style TAG_type_name Variable is VAR / Person or unit is MAN / location is LOC etc. Example: CB_VAR_BATTLE = variable battle CB_MAN_IDAP1 = one of the IDAP escorts Init.sqf My function CB_fnc_actionFollow called by hold action My function CB_fnc_actionStay called by hold action Useage Place 2 men in the editor and name them CB_MAN_IDAP1 & CB_MAN_IDAP2. Essentially, the hold actions dont go away but instead use the CB_VAR_FOLLOW variable to switch between which follow/stay command is visable. When ordering to follow it spawns the loop in CB_fnc_actionFollow for each individual escort. In there, you can see that if you are on foot it is simply telling them to move to your position, if in a vehicle, it uses a MoveInCargo to actually force them into the vehicle. It is important that the doMove is safely in the IF statement or they will continually disembark trying to get to your exact position. Some design notes *If there is no space in the vehicle the escorts will just stand still. You may then have to exit the vehicle and order them to stay and follow again. Ensure the scenario gives the player access to vehicles that can accomodate all escorts and potential friendly AI squad. *When you order them to stay put, they will, regardless of combat or threats. So don't expect them to take cover if you leave them in the open. *I also thought about setting the doMove position a random number of meters away from the player, as they will quite literally stand right next to you. But this worked less than ideal when trying to get them to follow you in a building Hope this helps someone in the future ✌️
  3. UPDATE: Ok so weird but, this is only happening when the player is the Driver of any vehicle, as cargo or any other seat the escort gets in any available seat and stay's put. Until the player exits. Very strange
  4. Curious to what you guys think. The following loop works 99% as intended, but for one small issue. Some context, I have three AI "VIP escorts" with a hold action, you can use it to command them to stay or follow. While {TRUE} I run the following loop to get the AI to follow the player on foot or if in a vehicle. But when the AI enters a vehicle, it continually disembarks and get's back in over and over. I think it might be the orderGetIn command, but I didnt read anywhere on the wiki that its supposed to make units dismount if given the command again. I also tested it with another AI that was just given the orderGetIn to a player vehicle over and over and he doesnt exit the vehicle once loaded. Function As you may notice, I have attached a GetInMan event handler to disable his simulation, and then re-enable once the player exits. It's very close, but he freezes just as he exits the vehicle and hangs out in mid-air until player exits vehicle I have also tried with no luck: *Adding sleep commands of various lengths in between the IF statements, to try and let the simulation disable before he exits *Cutting out the second IF statement, <If player exit vehicle>, part of the loop entirely, just to see if it still happens. It Does *Using (player in vehicle) instead of ObjectParent, nope https://community.bistudio.com/wiki/objectParent *Removing and adding different GetIN/GetOUT commands and actions, only orderGetIn works as intended: https://community.bistudio.com/wiki/Category:Command_Group:_Unit_Control *Waypoints, but the AI is without a group and I have x3 total guys that need to be escorted and they are ungrouped, and seperated on the map for scenario: https://community.bistudio.com/wiki/Category:Command_Group:_Waypoints *JoinSilent, but commanding AI is not the intention as the player already has enough to worry about with 5 friendly AI in the team and other scripts/events. The simple hold action Stay/Follow commands attached to the 'escorts' is the preferred method Any ideas guys? Thanks
  5. Raider_18

    How to turn init code in to a script?

    _bigThanks = "Many thanks, you guys are awesome!! 😁"; _homies = getPos (Pierremgi && @Larrow); _message = _bigThanks deliverTo _homies; Will reconfigure and I am learning alot by your examples. Thanks to you both. Will try to post an example mission with it cleaned up soon, so others can take an inside look.
  6. Raider_18

    How to turn init code in to a script?

    Roger that, changed. Thanks!
  7. Raider_18

    How to turn init code in to a script?

    Spot on it's working good now, thank you for your help! I will post some of it below for anyone who wants to take it and run with it, or make it more efficient as I take the painstaking brute force approach lol. Right now its 3x seperate functions. I think its a very lightweight and effective way to basically make your own "faction" with what Arma 3 gives you plus working in hidden textures. I have never been fully satisfied with vanilla A3 factions especially with the FIA, who in my mind should be scaled down akin to armed civilians, and I wanted some randomness. So Arma 3 being the best platform ever and with the help of the community I have it. You guys rock! init.sqf // detect and change all editor placed units private _mapUnits = allUnits select {!isPlayer _x && _x isKindOf "CAManBase"}; {[_x] call CB_fnc_factionConfig;} forEach _mapUnits; // add MEH to catch anything spawned CB_MEH_factions = addMissionEventHandler ["EntityCreated", { params ["_entity"]; if (_entity IsKindof 'CAManBase') then {[_entity] spawn CB_fnc_factionConfig}; }]; CB_fnc_factionConfig - directs the units to their assigned loadout function with a if/then. As many or as little as you need. Next I will post my FIA example /* Name: factionConfig Author: Raider Description: Removes AI equipment when spawned/detected and assigns a pre-defined loadout function based on faction. Used pieces of code from Beerkan / Larrow / pierremgi / Bohemia fourms ------> https://forums.bohemia.net/forums/topic/180646-list-of-all-hidden-texture-inits/ ------> https://forums.bohemia.net/forums/topic/182390-how-to-turn-init-code-in-to-a-script/?tab=comments#comment-3528029 Known issues: Nothing for vehicles/aircraft. Naked units on the battlefield is your debug Factions can be one of the following West: "BLU_F" (NATO), "BLU_T_F" (NATO Pacific), "BLU_W_F" (NATO Woodland), "BLU_G_F" (FIA), "BLU_CTRG_F" (CTRG), BLU_GEN_F (BLUFOR Police) East: "OPF_F" (CSAT), "OPF_G_F" (FIA), "OPF_T_F" (CSAT Tanoa), "OPF_R_F" (Spetznaz), "OPF_GEN_F" (OPFOR Police) Guer: "IND_F" (AAF), "IND_E_F", (LDF) "IND_G_F" (FIA), "IND_C_F" (SYNDIKAT Tanoa), "IND_L_F" (Looters) Civ: "CIV_F" (Civilians), "CIV_IDAP_F" (IDAP) helpful -> if (faction _unit isEqualTo "FACTION AS A STRING" && _unit IsKindof 'CAManBase') then {YOUR SCRIPT/FUNCTION GOES HERE}; */ // handles private _unit = _this select 0; if (isPlayer _unit) exitWith {}; //ignore special units with this variable // factions to re-paint if (faction _unit isEqualTo "BLU_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_BLUFORnato}; // standard NATO if (faction _unit isEqualTo "BLU_CTRG_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_BLUFORspecops}; // CTRG if (faction _unit isEqualTo "BLU_G_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_BLUFORion}; // FIA as IoN security if (faction _unit isEqualTo "OPF_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_OPFORcsat}; // standard CSAT if (faction _unit isEqualTo "OPF_R_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_OPFORspecops}; // Spetznaz as Viper guys if (faction _unit isEqualTo "IND_G_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_INDFORfia}; // standard FIA if (faction _unit isEqualTo "IND_C_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_INDFORspecops}; // Syndikat as common criminals if (faction _unit isEqualTo "CIV_F" && _unit IsKindof 'CAManBase') then {[_unit] spawn CB_fnc_loadout_CIV}; // standard civ's CB_fnc_loaddout_INDFORfia - Inside one of the loadouts, defined arrays and other miscellanious commands you can tweak or change. The end is the switch/case to get detailed control over individual classnames. Its ugly and painstaking but, it works! /* Name: INDFORfia Author: Raider Description: Custom loadout function Known issues: Nothing for vehicles/aircraft Helpful code: selectRandomWeighted ["STRING", #, "STRING", #, "STRING", #] bluforUnit linkItem "NVGoggles" opforUnit linkItem "NVGoggles_OPFOR" independentUnit linkItem "NVGoggles_INDEP" addPrimaryWeaponItem "weapon attachment" addHandgunItem "weapon attachment" "acc_flashlight" "acc_pointer_IR" "acc_flashlight_pistol" */ // debug // systemChat "FIA function worked"; // handles private _unit = _this select 0; private _side = side _unit; private _unitType = typeOf _unit; /* not used for FIA // skills _unit allowfleeing 0; // 0 = will never run away _unit setskill ['aimingAccuracy',(0.3 + random 0.3)]; _unit setskill ['aimingShake',(0.3 + random 0.3)]; _unit setskill ['aimingSpeed',(0.3 + random 0.3)]; _unit setskill ['commanding',(0.3 + random 0.3)]; _unit setskill ['courage',1]; // 1 = John Wick (I was gonna say John Wayne but thats too old) _unit setskill ['general',(0.3 + random 0.4)]; _unit setskill ['reloadSpeed',(0.3 + random 0.3)]; _unit setskill ['spotDistance',(0.2 + random 0.3)]; _unit setskill ['spotTime',(0.2 + random 0.3)]; // modifiers _unit setUnitTrait ["audibleCoef", 0]; // 0 = silent ninja _unit setUnitTrait ["camouflageCoef", 0]; // 0 = ghost assassin _unit setUnitTrait ["loadCoef", 0]; // 0 = super human */ // all get naked removeAllWeapons _unit; removeAllItems _unit; removeAllAssignedItems _unit; removeUniform _unit; removeVest _unit; removeBackpack _unit; removeHeadgear _unit; removeGoggles _unit; _unit unlinkItem hmd _unit; sleep 0.1; /* if you want to change ethnicity (European CSAT or Tanoan LDF for example), or give recon units camo faces _faces = selectRandom [ "WhiteHead_01", "WhiteHead_05", "WhiteHead_04", "WhiteHead_06", "WhiteHead_07", "WhiteHead_08", "AfricanHead_02", "AsianHead_A3_02", "AfricanHead_03", "WhiteHead_09", "WhiteHead_16", "WhiteHead_11", "WhiteHead_14", "WhiteHead_15", "AfricanHead_01", "TanoanHead_A3_02", "TanoanHead_A3_01", "LivonianHead_5", "WhiteHead_27", "LivonianHead_3", "WhiteHead_32" ]; _unit setFace _faces; _reconFaces = selectRandom [ "WhiteHead_22_a", "WhiteHead_22_l", "WhiteHead_22_sa", "PersianHead_A3_04_sa", "GreekHead_A3_10_l", "GreekHead_A3_10_sa" ]; */ _uniforms = selectRandomWeighted [ "U_I_L_Uniform_01_tshirt_black_F", .5, "U_I_L_Uniform_01_tshirt_olive_F", .5, "U_I_L_Uniform_01_tshirt_skull_F", .5, "U_I_L_Uniform_01_tshirt_sport_F", .5, "U_C_Mechanic_01_F", .5, "U_C_Poor_1", .5, "U_IG_Guerilla1_1", .45, "U_IG_Guerilla1_2_F", .45, "U_C_Uniform_Farmer_01_F", .45, "U_I_C_Soldier_Bandit_2_F", .4, "U_I_C_Soldier_Bandit_5_F", .4, "U_C_Man_casual_4_F", .35, "U_C_Poloshirt_tricolour", .35, "U_C_E_LooterJacket_01_F", .35 ]; _unit forceAddUniform _uniforms; //hidden textures _fiaFatigues = selectRandom [ "\a3\characters_f_gamma\Civil\Data\c_cloth1_black.paa", "A3\Characters_F\Civil\Data\c_cloth1_kabeiroi_co.paa", "A3\Characters_F\Civil\Data\c_cloth1_bandit_co.paa", "A3\Characters_F\Civil\Data\poor_co.paa", "A3\Characters_F\Civil\Data\poor_v2_co.paa" ]; // chance to be cool _coolGuy = [1, 10] call BIS_fnc_randomInt; if ((uniform _unit) == "U_IG_Guerilla1_1" && _coolGuy > 5) then {_unit setObjectTextureGlobal [0, _fiaFatigues]; _unit setobjectTextureGlobal [1, "#(argb,8,8,3)color(0.33,0.31,0.24,0.3)"]; if (random 1 > 0.5) then { _unit setobjectTextureGlobal [1, "#(argb,8,8,3)color(0.33,0.31,0.24,0.3)"]; //Olive pants and boots }; if (random 1 < 0.5) then { _unit setobjectTextureGlobal [1, "#(argb,8,8,3)color(0.1,0.1,0.1,0.3)"]; //Black pants and boots }; }; //hidden textures _farmerSlacks = selectRandom [ "A3\Characters_F\Civil\Data\c_cloth1_bandit_co.paa", "A3\Characters_F\Civil\Data\c_cloth1_co.paa", "A3\Characters_F\Civil\Data\c_cloth1_kabeiroi_co.paa" ]; if ((uniform _unit) == "U_C_Uniform_Farmer_01_F") then {_unit setObjectTextureGlobal [0, _farmerSlacks]}; sleep 0.5; _vests = selectRandom [ "V_LegStrapBag_olive_F", "V_LegStrapBag_coyote_F", "V_LegStrapBag_black_F", "V_Pocketed_black_F", "V_Pocketed_coyote_F", "V_Pocketed_olive_F", "V_HarnessO_brn", "V_HarnessO_gry", "V_HarnessO_ghex_F" ]; _unit addVest _vests; _leaderVest = selectRandom [ "V_TacVest_camo", "V_TacVest_blk", "V_TacVest_brn" ]; _headgear = selectRandom [ "H_Beret_blk", "H_Bandanna_gry", "H_Bandanna_blu", "H_Bandanna_cbr", "H_Booniehat_taiga", "H_Booniehat_wdl", "H_Booniehat_dgtl", "H_Cap_blk", "H_Cap_blu", "H_Cap_red", "H_Cap_tan", "H_Cap_blk_Raven", "H_Bandanna_camo" ]; _unit addHeadGear _headgear; // chance for no headgear _bald = [1, 10] call BIS_fnc_randomInt; if (_bald > 5) then {removeHeadgear _unit}; //Leader gets sniper bait if ((leader group _unit) isEqualto _unit) then {_unit addHeadGear "H_Bandanna_khk_hs";}; _mask = selectRandomWeighted [ "G_Balaclava_oli",.5, "G_Bandanna_shades",.5, "G_Bandanna_blk",.5, "G_Balaclava_Flecktarn",.5, "G_Balaclava_Tropentarn",.5, "G_Bandanna_tan",.5, "G_Balaclava_BlueStrips",.45, "G_Bandanna_sport",.45, "G_Bandanna_khk",.45, "G_Balaclava_blk",.45, "G_Bandanna_beast",.45, "G_Bandanna_shades",.45, "G_Bandanna_BlueFlame1",.4, "G_Bandanna_Syndikat1",.4, "G_Bandanna_BlueFlame2",.4, "G_Bandanna_oli",.4, "G_Bandanna_OrangeFlame1",.4, "G_Bandanna_RedFlame1",.4, "G_Bandanna_Skull1",.4, "G_Bandanna_Skull2",.4 ]; _unit addGoggles _mask; // chance for no facewear _lame = [1, 10] call BIS_fnc_randomInt; if (_lame < 5) then {removeGoggles _unit}; _authorizedEyePro = selectRandom ["G_Shades_Black", "G_Shades_Red"]; _authorizedSmallBag = selectRandom ["B_AssaultPack_dgtl", "B_Messenger_Black_F", "B_Messenger_Coyote_F"]; _authorizedMediumBag = selectRandom ["B_Kitbag_sgg", "B_TacticalPack_ocamo"]; _authorizedLargeBag = selectRandom ["B_Carryall_cbr", "B_Carryall_taiga_F"]; sleep 0.5; // equipment common to all _unit linkItem "ItemWatch"; _unit addItemToUniform "FirstAidKit"; /* nvgs not used for FIA // _giveNVGs = sunOrMoon; // if (_giveNVGs < 1) then {_unit linkItem "NVGoggles_OPFOR";}; // if (_giveNVGs > 1) then {_unit addGoggles _authorizedEyePro}; // _unit assignItem 'acc_flashlight'; */ // basic weapons _Gweapon = selectRandom [ "arifle_AKM_F", "arifle_AKS_F", "arifle_AK12U_F", "arifle_CTAR_blk_F" ]; _Gbeltfed = selectRandom [ "LMG_03_F", "arifle_RPK12_F" ]; /* test with a small team first to get a feel for the vibe I_G_Soldier_F - rifle I_G_Soldier_TL_F - team lead I_G_Soldier_AR_F - auto I_G_Soldier_A_F - ammo bearer I_G_Soldier_GL_F - grenadier I_G_Soldier_SL_F - squad leader */ // second chance for clothes if ((uniform _unit) == "") then {_unit forceAddUniform _uniforms}; sleep 0.5; // class specific switch _side do { case independent: { switch _unitType do { case "I_G_Soldier_F": { [_unit, _Gweapon , 6] call BIS_fnc_addWeapon; _unit addItemToVest "HandGrenade"; }; case "I_G_Soldier_TL_F": { [_unit, _Gweapon , 4] call BIS_fnc_addWeapon; _unit linkItem "ItemRadio"; _unit addItemToVest "HandGrenade"; _unit addItemToVest "SmokeShellYellow"; }; case "I_G_Soldier_AR_F": { [_unit, _Gbeltfed, 5] call BIS_fnc_addWeapon; _unit addBackPack _authorizedSmallBag; _unit addItemToVest "HandGrenade"; }; case "I_G_Soldier_A_F": { [_unit, _Gweapon , 4] call BIS_fnc_addWeapon; _unit addBackPack _authorizedLargeBag; _unit addItemToVest "HandGrenade"; _unit addItemToBackpack "SmokeShellYellow"; for "_i" from 1 to 2 do {_unit addItemToBackpack "Chemlight_yellow";}; for "_i" from 1 to 2 do {_unit addItemToBackpack "HandGrenade";}; for "_i" from 1 to 3 do {_unit addItemToBackpack "30Rnd_762x39_Mag_F";}; for "_i" from 1 to 3 do {_unit addItemToBackpack "30Rnd_762x39_Mag_Green_F";}; for "_i" from 1 to 3 do {_unit addItemToBackpack "75Rnd_762x39_Mag_F";}; for "_i" from 1 to 3 do {_unit addItemToBackpack "75Rnd_762x39_Mag_Tracer_F";}; for "_i" from 1 to 3 do {_unit addItemToBackpack "200Rnd_556x45_Box_F";}; for "_i" from 1 to 3 do {_unit addItemToBackpack "30Rnd_580x42_Mag_Tracer_F";}; }; case "I_G_Soldier_SL_F": { _unit forceAddUniform "U_IG_leader"; _unit addVest _leaderVest; _unit addWeapon "Binocular"; _unit linkItem "ItemMap"; _unit linkItem "ItemRadio"; _unit addItemToVest "HandGrenade"; _unit addItemToVest "SmokeShellYellow"; [_unit, _Gweapon , 4] call BIS_fnc_addWeapon; }; case "I_G_Soldier_GL_F": { _40mm = selectRandom [ "V_HarnessOGL_gry", "V_HarnessOGL_brn", "V_HarnessOGL_ghex_F" ]; _unit addVest _40mm; [_unit, "arifle_CTAR_GL_blk_F", 4] call BIS_fnc_addWeapon; _unit addPrimaryWeaponItem "1Rnd_HE_Grenade_shell"; for "_i" from 1 to 6 do {_unit addItemToVest "1Rnd_HE_Grenade_shell";}; }; case "SOMECLASS": { }; case "SOMECLASS": { }; case "SOMECLASS": { }; default {}; }; }; }; /* you could add weapon lights at night _giveLights = sunOrMoon; if (_giveLights < 1) then {_unit addPrimaryWeaponItem "acc_flashlight"; removeGoggles _unit}; */
  8. Raider_18

    How to turn init code in to a script?

    Holy smokes, event handlers... of course. It was one of those situations where you stare at the same code/script for 2 days and it just melts your brain and you forget about simple things. Thanks for the wake up pierremgi! Still not working though. I have the set up like yours as I agree that an EH is better for the goal, but it still changes all units whenever an entity is created. Should I use _x setVariable on them somehow? Although I tried that many ways already with no luck init.sqf private _mapUnits = allUnits select {!isPlayer _x}; {[_x] call CB_fnc_factionConfig;} forEach _mapUnits; uiSleep 1; addMissionEventHandler ["EntityCreated", { params ["_entity"]; if (_entity isKindOf "CAManBase") then {[_entity] call CB_fnc_factionConfig;}; }]; When I spawn a unit(s) every one in the world gets the function applied again, except player and dead bodies. How would I exclude those previous units and only run it on newly spawned/created? fn_factionConfig.sqf // handles private _unit = _this select 0; if (isPlayer _unit) exitWith {}; // all get naked removeAllWeapons _unit; removeAllItems _unit; removeAllAssignedItems _unit; removeUniform _unit; removeVest _unit; removeBackpack _unit; removeHeadgear _unit; removeGoggles _unit; _unit unlinkItem hmd _unit; /* Factions can be one of the following West: "BLU_F" (NATO), "BLU_G_F" (FIA), "BLU_CTRG_F" (NATO CTRG), BLU_GEN_F (POLICE) East: "OPF_F" (CSAT), "OPF_G_F" (FIA), "OPF_T_F" (CSAT Tanoa) Guer: "IND_F" (AAF), "IND_G_F" (FIA), "IND_C_F" (SYNDIKAT Tanoa) Civ: "CIV_F" (Civilians) */ { if (faction _x isEqualTo 'BLU_F' && _x IsKindof 'Man') then {[_x] execVM 'scripts\loadouts\BLUFOR\NATO.sqf';} else {if (faction _x isEqualTo 'BLU_F') then {{[_x] execVM 'scripts\loadouts\BLUFOR\NATO.sqf'} forEach crew _x};}; } forEach allUnits; Im thinking I need to add these into some exclusion array that I could use instead of allUnits at the end but I am not sure of how. For some clarity, the function should essentially re-dress any spawned unit via my function CB_fnc_factionConfig. In there it takes side and faction into account and executes a loadout from other scripts that have switch/case/do for assigned classnames.
  9. Raider_18

    How to turn init code in to a script?

    Hey guys, trying to use parts of this for a function that changes the loadout of AI when they are spawned in, problem is I cant get the units that have already been changed to be excluded. Im trying to append and use the set/get variable but its changing all the units everytime. I think it's a scope issue? What do you guys think? my init.sqf: // detect and change all units on map private _units = allUnits select {!isPlayer _x && { alive _x } && !(_x getVariable ["CB_VAR_PAINTED",false])}; { [_x] spawn CB_fnc_factionConfig; _x setVariable ["CB_VAR_PAINTED",true,true]; } forEach _units; uiSleep 1; CB_CHECK_UNITS = true; private _checkedUnits = allUnits; while {CB_CHECK_UNITS} do { // this variable will contain any new units that were not included on a previous loop _NewUnits = []; // Remove checked Units from the updated Unit array to create a list of new Units _NewUnits = allUnits - _checkedUnits; // Now only do the following if there are new units found. if (count _NewUnits > 0) then { { if (side _x isEqualTo WEST && _x IsKindof 'Man') then {[_x] spawn CB_fnc_factionConfig} else {if (side _x isEqualTo WEST) then {{[_x] call CB_fnc_factionConfig} forEach crew _x};}; _x setVariable ["CB_VAR_PAINTED",true,true]; } forEach _NewUnits; _checkedUnits append _NewUnits; }; hint composeText [parsetext format["<t size='1.5' align='left' color='#ffffff'>There are <t color='#00ff00'>%1 <t color='#ffffff'>new units found and <t color='#ff0000'>%2 <t color='#ffffff'>Checked Units",count _NewUnits,count _checkedUnits]];// Debug sleep 30; };
  10. It seems that messing around with https://community.bistudio.com/wiki/setVariable https://community.bistudio.com/wiki/getVariable is likely the best way forward
  11. @SoldierXXX - Many Thanks!! I knew it was something simple, and thank you for throwing in the debug stuff thats really useful. 👍🏻
  12. This is going to be a stupid easy question to answer, I know this is a very simple thing to do, but, I cannot figure this out. I have a trigger placed in editor, it is a 'restricted area'. When the player enters it runs my restricted area function. It will eventually be awesome, but first I need to pass parameters from the trigger to the script to define some things, because there will be multiple areas with different owners and be different sizes etc. So, my question is, how in the heck do I return triggerArea inside of the script from the trigger that exec'd it?? On Act: [independent, false] execvm "restricted.sqf"; restricted.sqf /* bunch of debug stuff here dont worry */ // variables _faction = _this select 0; _sendQRF = _this select 1; _zone = _this; _guards = units inAreaArray _zone select {side _x == _faction}; _bodies = allDead inAreaArray _zone; /* more awesome stuff later after I figure out triggerArea */ You see _zone needs to be the triggerArea, and the _guards are the AI inside the triggerArea (of the corresponding side). Once I figure out how to define these variables all my other code will work and I can place down a bunch of restriced areas and just pass the owner params. But I cant get a return of guards or deadBodies in the dang triggerArea. This is as close as I know how to tell the script that _zone should be the triggerArea of the editor placed trigger whatever size it may be. I have also tried the following: *_zone = _thisTrigger *_zone = _thisList *[independent, thisTrigger, false] execvm "restricted.sqf"; with _zone = _this select 1; None of the above works, keep getting syntax errors about arrays and elements provided. And yes, I have read the wiki and searched the interent for a similar script/solution. Please dont reply with the wiki pages and just tell me to 'read the wiki'. If I understood how to write C code or interpret the generous documentation that is published by Bohemia I wouldnt be posting in the forums for help. I have read and tried to the best of my scripting knowledge from the following: https://community.bistudio.com/wiki/triggerArea https://community.bistudio.com/wiki/inArea https://community.bistudio.com/wiki/inAreaArray https://community.bistudio.com/wiki/Magic_Variables Thank you to anyone who can help 👍
  13. Im learning so much about FSMs, so useful! I got conversations working but how would you make the pushback comments happen one at a time in order? For example: This is how the first menu entry is created: _nul = BIS_convMenu pushBack ["Say Hello.", _topic, "intro_greeting", []]; And this needs to be a secondary response added later: _nul = BIS_convMenu pushBack ["Yes, sorry", _topic, "exit_apologize", []]; I have it inside of an IF THEN like the example you provided: if (_this kbWasSaid [_from, _topic, "first_response", 999999]) then { _nul = BIS_convMenu pushBack ["Yes, sorry", _topic, "exit_apologize", []]; }; However both options are shown in the menu from the start regardless, and the response should come after a sentence from the NPC, like a natural conversation. I have tried the BI Switch-Case-Do format as well but does not seem to work when I arrange it like such: switch (_sentenceId) do { case "first_response": { BIS_convMenu pushBack ["Yes, sorry", _topic, "exit_apologize", []]; }; }; Any reason you see why the option is not waiting for the correct response before showing up in BIS_convMenu?? Thanks alot I have learned a ton so far!
  14. Do you use the Arma tools FSM editor or is there another preference for FSM editing??
  15. You absolute madman! THANK YOU!!! Your way looks super clean and is exactly what I needed, I am about to deep dive the example and start learning, but it looks way easier than I thought so far. And as always you went above and beyond with an example mission. You da man! **Will update this thread after I get something hashed out from scratch after reverse engineering it**
×