briefing.htmlNRCA\modules\Alice\data\scripts\main.sqfNR.CA\modules\Animals\Data\fsms\Animals_main.fsmNRCA\modules\Animals\Data\fsms\Animals_spawn.fsmNRCA\modules\Animals\Data\fsms\Delete_Group.fsmNR@CA\modules\Functions\systems\fn_locations.sqfNR+CA\modules\garbage_collector\data\fsms\garbagecollector.fsmNRCA\modules\garbage_collector\data\scripts\process_queue.sqfNRCA\modules\Silvie\data\scripts\main.sqfNRSCA\modules_e\Alice2\data\actions\combat_hideOut.fsmNR CA\modules_e\Alice2\data\actions\safe_walk.fsmNRCCA\modules_e\Alice2\data\fsms\alice2.fsmNR$%CA\modules_e\Alice2\data\fsms\alice2_town.fsmNRZCA\modules_e\Alice2\data\fsms\alice2_traffic.fsmNR;CA\modules_e\Alice2\data\scripts\fn_civilianSet.sqfNRCA\modules_e\Alice2\data\scripts\main.sqfNR2client\actions\noScript.sqfNRclient\images\i_clear.paaNRclient\images\i_reload.paaNRcommon\client\actions\functions.sqfNR common\client\actions\noScript.sqfNRcommon\client\AI\functions.sqfNR(common\client\briefing.sqfNRcommon\client\defines.sqfNR_common\client\gear\AmmoCrate.sqfNR_common\client\gear\functions.sqfNRzlcommon\client\gear\functions3.sqfNR^kcommon\client\gear\HospitalCargo.sqfNRcommon\client\gear\loadouts.sqfNRz common\client\images\i_clear.paaNRcommon\client\images\i_reload.paaNRcommon\client\injured\functions.sqfNRcommon\client\mainLoop.sqfNRcommon\client\markers\createMarkers.sqfNREcommon\client\markers\functions.sqf4Rcommon\client\misc\functions.sqfNRBcommon\client\misc\triggers.sqfNRcommon\client\respawn\functions.sqf)Rcommon\client\support\functions.sqfNR(common\client\UI\functions.sqfNR|common\client\UI\onKeyPress.sqfNR common\client\UI\onMouseMove.sqfNRcommon\client\UI\setgrass.sqfNRcommon\client\variables.sqfNRcommon\defines.sqfLR9/common\fsm\HeliLift.fsmNR(9common\fsm\ServicePoint.bifsmNR6common\fsm\ServicePoint.fsmNRcommon\functions.sqfNRR.common\initclient-common.sqfNR@common\initserver-common.sqfNRcommon\Lift\heli_action.sqfNRcommon\Lift\heli_lift.sqfNRcommon\Lift\heli_release.sqfNRcommon\resources\constants.hppNRcommon\resources\dialogs.hppNRVcommon\resources\geardialog.hppNRe%common\resources\IEDdetect_dialog.hppNR: common\resources\IEDdetect_screens.hppNR$common\resources\IEDdetect_sounds.hppNRcommon\resources\options.hppNRcommon\resources\sounds.hppNR8common\resources\titles.hppNRcommon\resources\types.hppNR=common\server\AI\functions.sqfNRcommon\server\AI\initUPS.sqfNRcommon\server\AI\UPS.sqfRYcommon\server\caches\functions.sqfNR` common\server\cleanup\functions.sqf9Rcommon\server\data\functions.txtNR,common\server\defines.sqf;Rcommon\server\IEDdetect\IED_Man_v6.sqfNR־common\server\IEDdetect\IEDdetect.sqfNRl-common\server\IEDdetect\IEDdetect_add.sqfNR1 common\server\IEDdetect\IEDdetect_ambientBombers.sqfNRcommon\server\IEDdetect\IEDdetect_ambientProxyIEDs.sqfNRRcommon\server\IEDdetect\IEDdetect_attach.sqfNR?common\server\IEDdetect\IEDdetect_beeper.sqfNRcommon\server\IEDdetect\IEDdetect_cursorTarget.sqfNRwcommon\server\IEDdetect\IEDdetect_detach.sqfNRcommon\server\IEDdetect\IEDdetect_detector.sqfNRcommon\server\IEDdetect\IEDdetect_detector_vehicle.sqfNR]common\server\IEDdetect\IEDdetect_init.sqfNRcommon\server\IEDdetect\IEDdetect_injection.sqfNRcommon\server\IEDdetect\IEDdetect_manualDefuse.sqfNRcommon\server\IEDdetect\IEDdetect_proximity.sqfNRGcommon\server\IEDdetect\IEDdetect_proximity_scatter.sqfNRcommon\server\IEDdetect\IEDdetect_remoteDet.sqfNRQcommon\server\IEDdetect\IEDdetect_triggerman.sqfNR;common\server\IEDdetect\IEDdetect_triggerman_spawn.sqfNRX common\server\IEDdetect\IEDdetect_vehicle.sqfNR,common\server\IEDdetect\sounds\akbar.oggNR3common\server\IEDdetect\sounds\IEDdetect_beep.oggNR5common\server\IEDdetect\sounds\IEDdetect_beep2.oggNRTcommon\server\IEDdetect\sounds\IEDdetect_beep3.oggNRGcommon\server\IEDdetect\sounds\IEDdetect_click.oggNR{common\server\IEDdetect\sounds\IEDdetect_wave.oggNRjcommon\server\mainLoop.sqfNRcommon\server\markers\functions.sqfNRecommon\server\vehicles\functions.sqfNR$defines.sqfNR description.exth\R!HELP\ .txtNRHELP\mission - .sqmNR6YHELP\pmc.txtNR init.sqfz%Rinitclient.sqfNR initserver.sqfNR>LoadingScreen.extNRVLoadingScreen.paahJRULoadingScreenOld.paaNRUmip\ALICE2_houseEffects.sqfNR-mip\export-alice2.sqfNRbmip\export-silvie.sqfNRmip\init-alice2.sqfNRmip\init-animals.sqfNRmip\init-functions.sqfNRamip\init-silvie.sqfNRmission.sqmLR scripts\abramscrewcheck.sqfRscripts\buildpmc.sqfXRWscripts\buildusa.sqfBRQscripts\crewcheck.sqfRscripts\movetorppmc.sqf,=R[scripts\movetorpusa.sqf6=R`scripts\pilotcheck.sqfNRpscripts\rapmc.sqfNRfscripts\rausa.sqfNRfscripts\refill.sqfRscripts\suvclose.sqf(7Rscripts\suvopen.sqf8Riscripts\turlock.sqf5Rscripts\vehicle.sqfNRHsigns\explosives.paaRVsigns\launchers.paa RVsigns\mg.paa4RVsigns\optics.paaBRVsigns\radios.paaRRVsigns\rh.paapWRVsigns\rifles.paa`RVsigns\snipers.paanRVvehicleService\loadout\loadoutCarAT.sqfNRvehicleService\loadout\loadoutCarCO.sqfNRvehicleService\loadout\loadoutCarInf.sqfNRJvehicleService\loadout\loadoutCarMed.sqfNRvehicleService\vehicleAmmoSubroutine.sqfNRvehicleService\vehicleLoadoutSubroutine.sqfNR^vehicleService\vehicleRefuelSubroutine.sqfNRvehicleService\vehicleRepairSubroutine.sqfNRzvehicleService\vehicleRespawnSubroutine.sqfNRvehicleService\vehicleServiceInit.sqfNRvehicleService\vehicleServiceInitSub.sqfNRvehicleService\x_reload.sqfNR z_full_heal.sqfNR( scriptName "Alice\data\scripts\main.sqf"; /* File: main.sqf Author: Karel Moricky Description: Init script - Ambient Life In Civilian Environment Parameter(s): _this: Alice logic unit which triggered this script. */ private ["_logicFnc","_twnlist","_locationParams","_create","_twnlistTemp","_i","_rarity","_faction","_classlist","_scope","_class","_vehicleclass","_actual","_condition","_fsm","_locked","_canrepeat","_initVariables","_init","_allActions","_action","_tempArrayx","_civilianActions","_source","_allActionsx","_allTopics","_endSentences","_tempArray","_element","_type","_topic","_path","_category","_screams","_scream","_categoryId","_oldScreams","_allScreams","_Remarks","_oldRemarks","_allRemarks","_civilianConversations","_civilianScreams","_civilianRemarks","_factionCiv","_name","_logic","_BIS_Alice_path","_AIdoor","_debug","_initArray","_distlimit","_civilianCount","_actionCategories","_kbCategories","_blacklist","_respectModifyCoef","_threatDecay","_unitrarity","_totobj","_allConversations","_twnrespect"]; _logic = _this select 0; _logic setpos [1000,10,0]; //[_logic] join grpnull; //--- Default values _logic setvariable ["id",0]; _logic setvariable ["pause",true]; createcenter west; createcenter east; createcenter resistance; createcenter civilian; //--- File paths _BIS_Alice_path = "ca\modules\alice\data\"; BIS_Alice_civilianInit = compile (preprocessFileLineNumbers (_BIS_Alice_path + "scripts\fnc_civilianInit.sqf")); //--- Is Garbage collector running? if (isnil "BIS_GC_trashItFunc") then {(group _logic) createUnit ["GarbageCollector", position player, [], 0, "NONE"]}; //--- Execute Functions if (isnil "bis_fnc_init") then { _logicFnc = (group _logic) createunit ["FunctionsManager",position player,[],0,"none"]; }; waituntil {!isnil "BIS_fnc_init"}; //--- Dummy door _AIdoor = "BIS_alice_emptydoor" createvehicle [1000,10,10]; _logic setvariable ["dummydoor",_AIdoor]; /////////////////////////////////////////////////////////////////////////////////// ///// Custom params /////////////////////////////////////////////////////////////////////////////////// //--- Debug _debug = if (isnil {_logic getvariable "debug"}) then {false} else {true}; _logic setvariable ["debug",_debug]; //--- Civilian init _initArray = if (isnil {_logic getvariable "initArray"}) then {[]} else {_logic getvariable "initArray";}; _logic setvariable ["initArray",_initArray,true]; //--- Spawn distance _distlimit = if (isnil {_logic getvariable "spawnDistance"}) then {1000} else {_logic getvariable "spawnDistance"}; _logic setvariable ["spawnDistance",_distLimit,true]; //--- Civilian count _civilianCount = if (isnil {_logic getvariable "civilianCount"}) then {"round (2 * (sqrt %1))"} else {_logic getvariable "civilianCount";}; _logic setvariable ["civilianCount",_civilianCount,true]; //--- Civilian actions _actionCategories = if (isnil {_logic getvariable "civilianActions"}) then {["BIS"]} else {_logic getvariable "civilianActions";}; _logic setvariable ["civilianActions",_actionCategories,true]; //--- Civilian conversations _kbCategories = if (isnil {_logic getvariable "civilianConversations"}) then {["BIS"]} else {_logic getvariable "civilianConversations";}; _logic setvariable ["civilianConversations",_kbCategories,true]; //--- Object blacklist _blacklist = if (isnil {_logic getvariable "blacklist"}) then {[]} else {_logic getvariable "blacklist";}; _logic setvariable ["blacklist",_blacklist,true]; //--- Spawn distance _respectModifyCoef = if (isnil {_logic getvariable "respectModifyCoef"}) then {0.15} else {_logic getvariable "respectModifyCoef"}; _logic setvariable ["respectModifyCoef",_respectModifyCoef,true]; //--- ThreatDecay _threatDecay = if (isnil {_logic getvariable "threatDecay"}) then {0.07} else {_logic getvariable "threatDecay"}; _logic setvariable ["threatDecay",_threatDecay,true]; //--- Town list _twnlist = []; if (isnil {_logic getvariable "townlist"}) then { _locationParams = if (_debug) then {[["CityCenter"],[],true]} else {[["CityCenter"]]}; _create = _locationParams call bis_fnc_locations; waituntil {count _create > 0}; { if ((_x getvariable "type") == "CityCenter") then {_twnlist = _twnlist + [_x]}; } foreach (bis_functions_mainscope getvariable "locations"); _logic setvariable ["townlist",_twnlist,true]; } else { _twnlistTemp = _logic getvariable "townlist"; { //--- Array if (typename _x == "ARRAY") then { _locationParams = if (_debug) then {[["CityCenter"],_x,true]} else {[["CityCenter"],_x]}; _create = _locationParams call bis_fnc_locations; {if !(_x in _twnlist) then {_twnlist = _twnlist + [_x]}} foreach _create; } else { if (typename _x == "OBJECT") then { if (typeof _x != "EmptyDetector") then { //--- City logic if (isnil {_x getvariable "class"}) then {[[_x]] call bis_fnc_locations}; _twnlist = _twnlist + [_x]; } else { //--- Trigger _locationParams = if (_debug) then {[["CityCenter"],_x,true]} else {[["CityCenter"],_x]}; _create = _locationParams call bis_fnc_locations; {if !(_x in _twnlist) then {_twnlist = _twnlist + [_x]}} foreach _create; }; }; }; } foreach _twnlistTemp; }; _logic setvariable ["ALICE_alltowns",_twnlist]; /////////////////////////////////////////////////////////////////////////////////// ///// Civilian Classes /////////////////////////////////////////////////////////////////////////////////// _unitrarity = if (format ["%1",_logic getvariable "civilianRarity"] == "") then {[]} else {_logic getvariable "civilianRarity";}; _logic setvariable ["civilianRarity",_unitrarity]; _classlist = []; _totobj = count (configfile >> "cfgVehicles"); for [{_i = 0}, {_i < _totobj}, {_i = _i + 1}] do { _actual = (configfile >> "cfgVehicles") select _i; if (isclass _actual) then { _class = configname _actual; _vehicleclass = gettext (configfile >> "cfgvehicles" >> _class >> "vehicleClass"); if !(_vehicleclass in ["Sounds","Mines"]) then { _scope = getnumber (_actual >> "scope"); if (_class iskindof "civilian" && _scope == 2) then { _rarity = if (_class in _unitrarity) then { _unitrarity select ((_unitrarity find _class)+1); } else { getnumber (_actual >> "rarityUrban"); }; _faction = gettext (_actual >> "faction"); _classlist = _classlist + [[_class,_rarity,_faction]]; }; }; }; }; /////////////////////////////////////////////////////////////////////////////////// ///// Civilian Actions /////////////////////////////////////////////////////////////////////////////////// _allActionsx = []; _allActions = []; for "_i" from 0 to 2 do { _source = [configfile,missionconfigfile,campaignconfigfile] select _i; _tempArrayx = []; { _civilianActions = _source >> "CfgCivilianActions" >> _x; if (str _civilianActions != "") then { _tempArrayx = _tempArrayx + [_civilianActions]; for "_i" from 0 to (count _civilianActions - 1) do { _action = _civilianActions select _i; if (isclass _action) then { _condition = gettext(_action >> "condition"); _fsm = gettext(_action >> "fsm"); _rarity = getnumber(_action >> "rarity"); _locked = getnumber(_action >> "locked"); _canrepeat = getnumber(_action >> "canRepeat"); _initVariables = getarray(_action >> "initVariables"); _init = gettext(_action >> "init"); _allActions = _allActions + [ [ /* 0 */ _action, /* 1 */ configname _action, /* 2 */ _condition, /* 3 */ _fsm, /* 4 */ _rarity, /* 5 */ _locked, /* 6 */ _canrepeat, /* 7 */ _initVariables, /* 8 */ _init ] ]; }; }; }; } foreach _actionCategories; _allActionsx = _allActionsx + [_tempArrayx]; }; _logic setvariable ["ALICE_actionsx",_allActionsx]; _logic setvariable ["ALICE_actions",_allActions]; /////////////////////////////////////////////////////////////////////////////////// ///// Civilian Conversations /////////////////////////////////////////////////////////////////////////////////// _allConversations = [[],[],[],[]]; _allTopics = []; _allScreams = []; _allRemarks = []; //_t = 0; for "_i" from 0 to 2 do { _source = [configfile,missionconfigfile,campaignconfigfile] select _i; _tempArray = []; { _civilianConversations = _source >> "CfgCivilianConversations" >> _x; for "_i" from 0 to (count _civilianConversations - 1) do { _topic = "ALICE_" + (configname _civilianConversations); _path = gettext (_civilianConversations >> "path"); if !(_topic in _allTopics) then {_allTopics = _allTopics + [_topic,_path]}; _category = _civilianConversations select _i; if (isclass _category) then { _type = getnumber (_category >> "type"); _tempArray = _allConversations select _type; for "_c" from 0 to (count _category - 1) do { _element = _category select _c; if (isclass _element) then { _endSentences = getarray (_element >> "endSentences"); _tempArray = _tempArray + [[(configname _civilianConversations),configname _element,_endSentences]]; }; }; _allConversations set [_type,_tempArray]; }; }; //--- Screams _civilianScreams = _source >> "CfgCivilianScreams" >> _x; _screams = []; for "_i" from 0 to (count _civilianScreams - 1) do { _scream = _civilianScreams select _i; if (isclass _scream) then { _screams = _screams + [configname _scream]; }; }; if (_x in _allscreams) then { _categoryId = (_allScreams find _x) + 1; _oldScreams = _allScreams select _categoryId; _allScreams set [_categoryId,_oldScreams + _screams]; } else { _allScreams = _allScreams + [_x,_screams]; }; //--- Remarks _civilianRemarks = _source >> "CfgCivilianRemarks" >> _x; _remarks = []; for "_i" from 0 to (count _civilianRemarks - 1) do { _scream = _civilianRemarks select _i; if (isclass _scream) then { _Remarks = _Remarks + [configname _scream]; }; }; if (_x in _allRemarks) then { _categoryId = (_allRemarks find _x) + 1; _oldRemarks = _allRemarks select _categoryId; _allRemarks set [_categoryId,_oldRemarks + _Remarks]; } else { _allRemarks = _allRemarks + [_x,_remarks]; }; } foreach _kbCategories; }; _logic setvariable ["ALICE_conversations",_allConversations]; _logic setvariable ["ALICE_screams",_allScreams]; _logic setvariable ["ALICE_remarks",_allRemarks]; _logic setvariable ["ALICE_topics",_allTopics]; /////////////////////////////////////////////////////////////////////////////////// ///// Towns /////////////////////////////////////////////////////////////////////////////////// _twnrespect = ["SET"] call BIS_fnc_respect; { _factionCiv = [_x] call BIS_fnc_getFactions; _twnrespect set [_factionCiv,0.5]; } forEach ["CIV","CIV_RU"]; { _type = _x getvariable "type"; _name = _x getvariable "name"; textLogFormat ["Log: ALICE: Initializing ...",_name]; // _pos = position _x; if (isnil {_x getvariable "respect"}) then {_x setVariable ["respect",_twnrespect,true]}; _x setvariable ["ALICE_threat",-1,true]; _x setvariable ["ALICE_status","black",true]; _x setVariable ["ALICE_population",[],true]; _x setVariable ["ALICE_populationActive",[],true]; _x setVariable ["ALICE_populationCountDef",-1,true]; _x setVariable ["ALICE_populationCoef",0,true]; _x setVariable ["ALICE_playersNear",false,true]; _x setVariable ["ALICE_forcePopulation",false,true]; _x setvariable ["doorcountdef",0]; _fsm = [_x,_classlist] execfsm (_BIS_Alice_path + "fsms\alice.fsm"); _x setvariable ["ALICE_fsm",_fsm,true]; //if (_x == bis_loc_acityc_khelm) then {diag_debugfsm _fsm}; //sleep .1; } foreach _twnlist; _logic setvariable ["pause",false]; textLogFormat ["Log: ALICE: Initialized (%1 towns).",count _twnlist]; /////////////////////////////////////////////////////////////////////////////////// ///// Custom Civlians /////////////////////////////////////////////////////////////////////////////////// /* { if (!isnull leader _x && side _x != "sidelogic") then { }; } foreach (synchronizedobjects _logic); */ /*%FSM*/ /*%FSM*/ /* item0[] = {"Start_",0,250,-60.442757,-591.081604,29.557222,-541.081604,0.000000,"Start" \n ""}; item1[] = {"_",8,250,-61.452087,-495.786835,28.547922,-445.786774,0.000000,""}; item2[] = {"Set_Timer",2,250,-61.609619,-405.296356,28.390409,-355.296417,0.000000,"Set Timer"}; item3[] = {"choose_animal_ty",2,4346,570.319641,-325.587158,660.319702,-275.587189,0.000000,"choose animal type"}; item4[] = {"_",-1,250,36.528553,437.695923,93.549850,437.695923,0.000000,""}; item5[] = {"Timer",8,250,-59.650597,-325.281647,30.349508,-275.281647,0.000000,"Timer"}; item6[] = {"Spawn",2,250,-88.102356,208.914841,1.897823,258.914673,0.000000,"Spawn"}; item7[] = {"_",8,250,-89.213760,127.229874,0.786263,177.229874,0.000000,""}; item8[] = {"_",8,250,42.295372,130.517609,132.295319,180.517609,0.000000,""}; item9[] = {"Spawn_1",2,250,42.425583,210.715225,132.425751,260.715057,0.000000,"Spawn"}; item10[] = {"Timer",8,250,570.903625,387.083527,660.903564,437.083344,0.000000,"Timer"}; item11[] = {"Chiken",4,218,-90.355820,-42.517735,-0.355820,7.482265,0.000000,"Chiken"}; item12[] = {"Cow",4,218,39.524693,-41.526276,129.524689,8.473724,0.000000,"Cow"}; item13[] = {"type",2,250,-88.761604,40.842583,1.238390,90.842567,0.000000,"type"}; item14[] = {"type_1",2,250,44.093288,36.876762,134.093231,86.876755,0.000000,"type"}; item15[] = {"Spawn_2",2,250,-213.479080,207.824615,-123.478897,257.824463,0.000000,"Spawn"}; item16[] = {"_",8,250,-214.590469,126.139633,-124.590446,176.139648,0.000000,""}; item17[] = {"sheep",4,218,-215.732559,-43.607948,-125.732559,6.392052,0.000000,"sheep"}; item18[] = {"type_2",2,250,-214.138321,39.752365,-124.138344,89.752350,0.000000,"type"}; item19[] = {"Spawn_3",2,250,-709.741699,215.051620,-619.741516,265.051483,0.000000,"Spawn"}; item20[] = {"_",8,250,-710.853149,133.366623,-620.853088,183.366653,0.000000,""}; item21[] = {"wilboar",4,218,-711.995239,-36.380943,-621.995178,13.619061,0.000000,"wilboar"}; item22[] = {"type_3",2,250,-710.401001,46.979370,-620.400940,96.979340,0.000000,"type"}; item23[] = {"Spawn_4",2,250,-341.318817,206.355194,-251.318634,256.355042,0.000000,"Spawn"}; item24[] = {"_",8,250,-342.430206,124.670212,-252.430176,174.670227,0.000000,""}; item25[] = {"goat",4,218,-343.572296,-45.077370,-253.572296,4.922630,0.000000,"goat"}; item26[] = {"type_4",2,250,-341.978058,38.282944,-251.978058,88.282928,0.000000,"type"}; item27[] = {"Start__1",0,250,-50.173634,-761.548889,39.826366,-711.548889,0.000000,"Start" \n ""}; item28[] = {"_",8,250,-55.290596,-686.792419,34.709435,-636.792236,0.000000,""}; version=1; class LayoutItems { class Item4 { class ItemInfo { FontFace="Arial"; FontHeight=9.000000; lStyle=1; }; }; }; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,5}; link3[] = {3,11}; link4[] = {3,12}; link5[] = {3,17}; link6[] = {3,21}; link7[] = {3,25}; link8[] = {5,3}; link9[] = {6,10}; link10[] = {7,6}; link11[] = {8,9}; link12[] = {9,10}; link13[] = {10,3}; link14[] = {11,13}; link15[] = {12,14}; link16[] = {13,7}; link17[] = {14,8}; link18[] = {15,10}; link19[] = {16,15}; link20[] = {17,18}; link21[] = {18,16}; link22[] = {19,10}; link23[] = {20,19}; link24[] = {21,22}; link25[] = {22,20}; link26[] = {23,10}; link27[] = {24,23}; link28[] = {25,26}; link29[] = {26,24}; link30[] = {27,28}; link31[] = {28,0}; globals[] = {0.000000,0,0,0,0,640,480,1,53,6316128,1,-616.769409,1020.127197,717.567505,-1063.096802,797,867,1}; window[] = {2,-1,-1,-32000,-32000,1138,184,1476,184,3,815}; *//*%FSM*/ class FSM { fsmName = "Animals Main"; class States { /*%FSM*/ class Start_ { name = "Start_"; init = /*%FSM*/"" \n "_initspawnnumber = 0;" \n "" \n "_debug = false;" \n "if(!isNil ""BIS_Animals_debug"") then {_debug = BIS_Animals_debug;};" \n "" \n "_triglist = [];" \n "" \n "" \n "// check blacklisted areas" \n "for [{_n = 0},{_n < 100},{_n = _n + 1}] do {" \n " " \n " if NOT (isnil format [""BIS_arz_%1"",_n]) then {" \n " " \n " _triglist = _triglist + [call compile format [""BIS_arz_%1"",_n]];" \n "" \n " };" \n " " \n "};" \n "" \n "" \n "" \n "//---------------" \n "// user var" \n "//---------------" \n "_SpawnRadius = 750;" \n "_DensityReduction = 200;" \n "_FindPlaceRadius = 200; " \n "" \n "" \n "" \n "" \n "//---------------" \n "// global" \n "//---------------" \n "BIS_MaxAnimalsGroupInArea = (_SpawnRadius / _DensityReduction);" \n "BIS_AnimalsGroupInArea = 0;" \n "" \n "" \n "// Existing Group in area" \n "BIS_CowGroupInArea = 0;" \n "BIS_SheepGroupInArea = 0;" \n "BIS_HenGroupInArea = 0;" \n "BIS_WillboarInArea = 0;" \n "BIS_GoatInArea = 0;" \n "" \n "" \n "" \n "" \n "//-------------------" \n "// density values " \n "// -------------------" \n "" \n "" \n "_CowMaxDensity = 1.0;" \n "_CowMaxGroupInArea = _CowMaxDensity * BIS_MaxAnimalsGroupInArea;" \n "" \n "_SheepMaxDensity = 1.0;" \n "_SheepMaxGroupInArea = _SheepMaxDensity * BIS_MaxAnimalsGroupInArea;" \n "" \n "_GoatMaxDensity = 1.0;" \n "_GoatMaxGroupInArea = _GoatMaxDensity * BIS_MaxAnimalsGroupInArea;" \n "" \n "_HenMaxDensity = 1.0;" \n "_HenMaxGroupInArea = _HenMaxDensity * BIS_MaxAnimalsGroupInArea;" \n "" \n "_WillboarMaxDensity = 0.1;" \n "_WillboarMaxGroupInArea = _WillboarMaxDensity * BIS_MaxAnimalsGroupInArea;" \n "" \n "" \n "" \n "" \n "" \n "" \n "// DEBUG" \n "" \n "// radius marker" \n "" \n "//_radiusmark = createMarkerLocal [""animalsspawnradius"", (Getpos player) ];" \n "//_radiusmark setMarkerTypeLocal ""Empty"";" \n "//_radiusmark setMarkerShapeLocal ""ELLIPSE"";" \n "//_radiusmark setMarkerBrushLocal ""Border"";" \n "//_radiusmark setMarkerSizeLocal [_SpawnRadius, _SpawnRadius];" \n "" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Set_Timer"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Set_Timer { name = "Set_Timer"; init = /*%FSM*/"_looptime = 0.1;" \n "" \n "_timeNow = time;" \n "_waittime = (_looptime);" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timer { priority = 0.000000; to="choose_animal_ty"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _waittime;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class choose_animal_ty { name = "choose_animal_ty"; init = /*%FSM*/"//-----------------------------------------" \n "// Choose a random animal" \n "//-----------------------------------------" \n "" \n "" \n "" \n "" \n "_initspawnnumber = _initspawnnumber + 1;" \n "if (_initspawnnumber == BIS_MaxAnimalsGroupInArea) then {_waittime = 20};" \n "" \n "" \n "" \n "_animalssupported = [""HenGroup"",""CowGroup"",""SheepGroup"",""WildBoar"",""GoatGroup""];" \n "" \n "" \n "" \n "_animalselected = (_animalssupported select floor(random(count _animalssupported)));" \n "" \n "" \n "" \n "" \n "// update radius" \n "//_radiusmark setmarkerposlocal (getpos player);" \n "// DEBUG" \n "// radius marker" \n "{" \n " _radiusmark = ""animalsspawnradius"" + str _x;" \n " if(str getMarkerPos _radiusmark == ""[0,0,0]"") then {" \n " _radiusmark = createMarker [_radiusmark, (Getpos _x) ];" \n " if (_debug) then {_radiusmark setMarkerShape ""ELLIPSE"";} else {_radiusmark setMarkerType ""Empty"";};" \n " _radiusmark setMarkerBrush ""Border"";" \n " _radiusmark setMarkerSize [_SpawnRadius, _SpawnRadius];" \n " } else {" \n " _radiusmark setMarkerPos (getPos _x);" \n " };" \n "} forEach ([] call BIS_fnc_listPlayers);" \n "" \n "" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Cow { priority = 0.000000; to="type_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_animalselected == ""CowGroup"" );"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class sheep { priority = 0.000000; to="type_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_animalselected == ""SheepGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class wilboar { priority = 0.000000; to="type_3"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_animalselected == ""WildBoar"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class goat { priority = 0.000000; to="type_4"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_animalselected == ""GoatGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Chiken { priority = 0.000000; to="type"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_animalselected == ""HenGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn { name = "Spawn"; init = /*%FSM*/"if ( (BIS_AnimalsGroupInArea < BIS_MaxAnimalsGroupInArea) AND (BIS_HenGroupInArea < _HenMaxGroupInArea) ) then {" \n "" \n "" \n "" \n "" \n "" \n "" \n "//--------------------------------" \n "// vars" \n "//-------------------------------- " \n "_agentnumber = floor (2 + random 3); " \n " " \n "" \n "" \n "" \n "// --------------------------------" \n "// Select Favourite places" \n "// --------------------------------" \n " " \n " _root = configFile >> ""CfgVehicles"" >> ""hen"";" \n " _favouritezones = getText ( _root >> ""favouritezones"");" \n "" \n "" \n " " \n " " \n "" \n "// --------------------------------" \n "// Lauch Spawn function" \n "// --------------------------------" \n "" \n "{" \n "" \n "" \n " if (_x distance _Pos < (triggerarea _x select 0) ) then {_Pos = [0,0];}; " \n "" \n "" \n "} foreach _triglist;" \n "" \n " {" \n " _PosList = [];" \n " {" \n " _randrefpoint = [getpos _x, 10, _SpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _PosList = selectbestplaces [_randrefpoint,_FindPlaceRadius,_favouritezones,10,5];" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n "" \n "" \n " _PosSelect = _PosList select (floor random (count _PosList));" \n " _Pos = _PosSelect select 0; " \n "" \n " if (_x distance _Pos < _SpawnRadius && NOT surfaceIsWater _Pos) then {" \n "" \n "" \n " //DEBUG" \n " _GroupMarker = (str (random 9999));" \n " createMarker [_GroupMarker, _Pos ];" \n " if (_debug) then {_GroupMarker setMarkerType ""Dot"";} else {_GroupMarker setMarkerType ""Empty"";};" \n " _GroupMarker setMarkerColor ""ColorRed"";" \n " _GroupMarker setMarkerText (str (_agentnumber + 1)); " \n "" \n "" \n "" \n " for ""_i"" from 0 to _agentnumber do" \n " {" \n "" \n " " \n "" \n " _fsm = [_type, _Pos, _SpawnRadius, _GroupMarker] execfsm ""CA\Modules\Animals\data\fsms\Animals_spawn.fsm"";" \n " " \n "" \n "" \n " [ _GroupMarker, _SpawnRadius, _type] execFSM ""CA\Modules\Animals\data\fsms\Delete_group.fsm"";" \n "" \n " };" \n "" \n " };" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "};" \n "" \n "" \n "" \n "" \n "" \n "_timeNow = time;" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timer { priority = 0.000000; to="choose_animal_ty"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _waittime;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn_1 { name = "Spawn_1"; init = /*%FSM*/"if ( (BIS_AnimalsGroupInArea < BIS_MaxAnimalsGroupInArea) AND (BIS_CowGroupInArea < _CowMaxGroupInArea) ) then {" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "//--------------------------------" \n "// vars" \n "//--------------------------------" \n " " \n "_agentnumber = floor (2 + random 3); " \n " " \n " " \n "" \n "" \n "// --------------------------------" \n "// Favourite places" \n "// --------------------------------" \n " " \n " _root = configFile >> ""CfgVehicles"" >> ""Cow"";" \n " _favouritezones = getText ( _root >> ""favouritezones"");" \n "" \n " " \n "" \n "" \n "// --------------------------------" \n "// Lauch Spawn function" \n "// --------------------------------" \n "" \n "" \n "{" \n "" \n "" \n " if (_x distance _Pos < (triggerarea _x select 0) ) then {_Pos = [0,0];}; " \n "" \n "" \n "} foreach _triglist;" \n "" \n "" \n "" \n "" \n "" \n " {" \n " _PosList = [];" \n " {" \n " _randrefpoint = [getpos _x, 10, _SpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _PosList = selectbestplaces [_randrefpoint,_FindPlaceRadius,_favouritezones,10,5];" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n " _PosSelect = _PosList select (floor random (count _PosList));" \n " _Pos = _PosSelect select 0; " \n "" \n " if (_x distance _Pos < _SpawnRadius && NOT surfaceIsWater _Pos) then {" \n "" \n "" \n " //DEBUG" \n " _GroupMarker = (str (random 9999));" \n " createMarker [_GroupMarker, _Pos ];" \n " if (_debug) then {_GroupMarker setMarkerType ""Dot"";} else {_GroupMarker setMarkerType ""Empty"";};" \n " _GroupMarker setMarkerColor ""ColorBlue"";" \n " _GroupMarker setMarkerText (str (_agentnumber + 1)); " \n "" \n "" \n "" \n " for ""_i"" from 0 to _agentnumber do" \n " {" \n "" \n " " \n "" \n "" \n "" \n " _fsm = [_type, _Pos, _SpawnRadius, _GroupMarker] execfsm ""CA\Modules\Animals\data\fsms\Animals_spawn.fsm"";" \n " [ _GroupMarker, _SpawnRadius, _type] execFSM ""CA\Modules\Animals\data\fsms\Delete_group.fsm"";" \n " " \n "" \n " }; " \n "" \n "" \n " };" \n "" \n "" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "};" \n "" \n "" \n "" \n "" \n "_timeNow = time;" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timer { priority = 0.000000; to="choose_animal_ty"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _waittime;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class type { name = "type"; init = /*%FSM*/"_type = ""HenGroup"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Spawn"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class type_1 { name = "type_1"; init = /*%FSM*/"_type = ""CowGroup"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Spawn_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn_2 { name = "Spawn_2"; init = /*%FSM*/"if ( (BIS_AnimalsGroupInArea < BIS_MaxAnimalsGroupInArea) AND (BIS_SheepGroupInArea < _SheepMaxGroupInArea) ) then {" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "//--------------------------------" \n "// vars" \n "//-------------------------------- " \n "_agentnumber = floor (2 + random 4); " \n " " \n "" \n "" \n "" \n "// --------------------------------" \n "// Select Favourite places" \n "// --------------------------------" \n " " \n " _root = configFile >> ""CfgVehicles"" >> ""Sheep"";" \n " _favouritezones = getText ( _root >> ""favouritezones"");" \n " " \n " " \n " " \n "" \n " " \n "// --------------------------------" \n "// Lauch Spawn function" \n "// --------------------------------" \n "" \n "{" \n "" \n "" \n " if (_x distance _Pos < (triggerarea _x select 0) ) then {_Pos = [0,0];}; " \n "" \n "" \n "} foreach _triglist;" \n "" \n "" \n "" \n " {" \n " _PosList = [];" \n " {" \n " _randrefpoint = [getpos _x, 10, _SpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _PosList = selectbestplaces [_randrefpoint,_FindPlaceRadius,_favouritezones,10,5];" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n " _PosSelect = _PosList select (floor random (count _PosList));" \n " _Pos = _PosSelect select 0; " \n "" \n " if (_x distance _Pos < _SpawnRadius && NOT surfaceIsWater _Pos) then {" \n "" \n "" \n " //DEBUG" \n " _GroupMarker = (str (random 9999));" \n " createMarker [_GroupMarker, _Pos ];" \n " if (_debug) then {_GroupMarker setMarkerType ""Dot"";} else {_GroupMarker setMarkerType ""Empty"";};" \n " _GroupMarker setMarkerColor ""ColorGreen"";" \n " _GroupMarker setMarkerText (str (_agentnumber + 1)); " \n "" \n "" \n "" \n " for ""_i"" from 0 to _agentnumber do" \n " {" \n "" \n " " \n "" \n " _fsm = [_type, _Pos, _SpawnRadius, _GroupMarker] execfsm ""CA\Modules\Animals\data\fsms\Animals_spawn.fsm"";" \n " [ _GroupMarker, _SpawnRadius, _type] execFSM ""CA\Modules\Animals\data\fsms\Delete_group.fsm"";" \n " " \n "" \n " }; " \n "" \n "" \n " };" \n "" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "};" \n "" \n "" \n "" \n "" \n "" \n "" \n "_timeNow = time;" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timer { priority = 0.000000; to="choose_animal_ty"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _waittime;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class type_2 { name = "type_2"; init = /*%FSM*/"_type = ""SheepGroup"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Spawn_2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn_3 { name = "Spawn_3"; init = /*%FSM*/"if ( (BIS_AnimalsGroupInArea < BIS_MaxAnimalsGroupInArea) AND (BIS_WillboarInArea < _WillboarMaxGroupInArea) ) then {" \n "" \n "" \n "" \n "" \n "//--------------------------------" \n "// vars" \n "//-------------------------------- " \n "_agentnumber = 0; // but spawn 1 " \n " " \n "" \n "" \n "// --------------------------------" \n "// Select Favourite places" \n "// --------------------------------" \n " " \n " _root = configFile >> ""CfgVehicles"" >> ""WildBoar"";" \n " _favouritezones = getText ( _root >> ""favouritezones"");" \n "" \n " " \n " " \n "" \n " " \n "// --------------------------------" \n "// Lauch Spawn function" \n "// --------------------------------" \n "" \n "{" \n "" \n "" \n " if (_x distance _Pos < (triggerarea _x select 0) ) then {_Pos = [0,0];}; " \n "" \n "" \n "} foreach _triglist;" \n "" \n "" \n "" \n " {" \n " _PosList = [];" \n " _randrefpoint = [getpos _x, 10, _SpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _PosList = selectbestplaces [_randrefpoint,_FindPlaceRadius,_favouritezones,10,5];" \n " _PosSelect = _PosList select (floor random (count _PosList));" \n " _Pos = _PosSelect select 0; " \n "" \n " if (_x distance _Pos < _SpawnRadius && NOT surfaceIsWater _Pos) then {" \n "" \n "" \n " //DEBUG" \n " _GroupMarker = (str (random 9999));" \n " createMarker [_GroupMarker, _Pos ];" \n " if (_debug) then {_GroupMarker setMarkerType ""Dot"";} else {_GroupMarker setMarkerType ""Empty"";};" \n " _GroupMarker setMarkerColor ""ColorOrange"";" \n " _GroupMarker setMarkerText (str (_agentnumber + 1)); " \n "" \n "" \n "" \n " for ""_i"" from 0 to _agentnumber do" \n " {" \n "" \n " " \n "" \n " _fsm = [_type, _Pos, _SpawnRadius, _GroupMarker] execfsm ""CA\Modules\Animals\data\fsms\Animals_spawn.fsm"";" \n " [ _GroupMarker, _SpawnRadius, _type] execFSM ""CA\Modules\Animals\data\fsms\Delete_group.fsm"";" \n " " \n "" \n " }; " \n "" \n "" \n " };" \n "" \n "" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "};" \n "" \n "" \n "" \n "" \n "" \n "_timeNow = time;" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timer { priority = 0.000000; to="choose_animal_ty"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _waittime;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class type_3 { name = "type_3"; init = /*%FSM*/"_type = ""WildBoar"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Spawn_3"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Spawn_4 { name = "Spawn_4"; init = /*%FSM*/"if ( (BIS_AnimalsGroupInArea < BIS_MaxAnimalsGroupInArea) AND (BIS_GoatInArea < _GoatMaxGroupInArea) ) then {" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "//--------------------------------" \n "// vars" \n "//-------------------------------- " \n "_agentnumber = floor (2 + random 4); " \n " " \n "" \n "" \n "" \n "// --------------------------------" \n "// Select Favourite places" \n "// --------------------------------" \n " " \n " _root = configFile >> ""CfgVehicles"" >> ""Goat"";" \n " _favouritezones = getText ( _root >> ""favouritezones"");" \n " " \n " " \n " " \n "" \n " " \n "// --------------------------------" \n "// Lauch Spawn function" \n "// --------------------------------" \n "" \n "" \n "{" \n "" \n "" \n " if (_x distance _Pos < (triggerarea _x select 0) ) then {_Pos = [0,0];}; " \n "" \n "" \n "} foreach _triglist;" \n "" \n "" \n " {" \n " _PosList = [];" \n " {" \n " _randrefpoint = [getpos _x, 10, _SpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _PosList = selectbestplaces [_randrefpoint,_FindPlaceRadius,_favouritezones,10,5];" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n " _PosSelect = _PosList select (floor random (count _PosList));" \n " _Pos = _PosSelect select 0; " \n "" \n " if (_x distance _Pos < _SpawnRadius && NOT surfaceIsWater _Pos) then {" \n "" \n "" \n " //DEBUG" \n " _GroupMarker = (str (random 9999));" \n " createMarker [_GroupMarker, _Pos ];" \n " if (_debug) then {_GroupMarker setMarkerType ""Dot"";} else {_GroupMarker setMarkerType ""Empty"";};" \n " _GroupMarker setMarkerColor ""ColorYellow"";" \n " _GroupMarker setMarkerText (str (_agentnumber + 1)); " \n "" \n "" \n "" \n " for ""_i"" from 0 to _agentnumber do" \n " {" \n "" \n " " \n "" \n " _fsm = [_type, _Pos, _SpawnRadius, _GroupMarker] execfsm ""CA\Modules\Animals\data\fsms\Animals_spawn.fsm"";" \n " [ _GroupMarker, _SpawnRadius, _type] execFSM ""CA\Modules\Animals\data\fsms\Delete_group.fsm"";" \n " " \n "" \n " }; " \n "" \n "" \n " };" \n "" \n "" \n " } forEach ([] call BIS_fnc_listPlayers);" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "};" \n "" \n "" \n "" \n "" \n "" \n "" \n "_timeNow = time;" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Timer { priority = 0.000000; to="choose_animal_ty"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _waittime;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class type_4 { name = "type_4"; init = /*%FSM*/"_type = ""GoatGroup"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Spawn_4"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Start__1 { name = "Start__1"; init = /*%FSM*/"if (isnil ""bis_fnc_init"") then {" \n " _logicFnc = (createGroup sideLogic) createunit [""FunctionsManager"",position player,[],0,""none""];" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Start_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!isnil ""BIS_fnc_init""" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Start__1"; finalStates[] = { }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Start_",0,250,-63.141418,-441.305878,26.858559,-391.305878,0.000000,"Start" \n ""}; item1[] = {"_",8,250,-64.150749,-346.011047,25.849257,-296.011017,0.000000,""}; item2[] = {"spawn",2,4346,-64.308281,-255.520584,25.691744,-205.520599,0.000000,"spawn"}; item3[] = {"_",-1,250,62.306355,286.994843,119.327652,286.994843,0.000000,""}; item4[] = {"Agent_supp",8,250,-68.872253,-157.472900,21.127827,-107.472916,0.000000,"Agent supp"}; item5[] = {"Supression_",1,250,-65.834793,-54.010098,24.165459,-4.010118,0.000000,"Supression" \n ""}; version=1; class LayoutItems { class Item3 { class ItemInfo { FontFace="Arial"; FontHeight=9.000000; lStyle=1; }; }; }; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,4}; link3[] = {4,5}; globals[] = {0.000000,0,0,0,0,640,480,1,26,6316128,1,-347.973877,356.558624,145.133209,-687.787903,878,858,1}; window[] = {2,-1,-1,-32000,-32000,983,22,1314,29,3,896}; *//*%FSM*/ class FSM { fsmName = "Animals Spawn"; class States { /*%FSM*/ class Start_ { name = "Start_"; init = /*%FSM*/"// ------------------------------------------------------------------" \n "// local vars" \n "// ------------------------------------------------------------------" \n "_type = _this select 0;" \n "_Pos = _this select 1;" \n "_SpawnRadius = _this select 2;" \n "_GroupMarker = _this select 3;" \n "" \n "" \n "_agent = """";" \n "" \n "" \n "" \n "" \n "// SHEEP VAR" \n "" \n " _SheepSpawnRadius = 10;" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="spawn"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class spawn { name = "spawn"; init = /*%FSM*/"" \n "" \n "// ------------------------------------------------------------------" \n "// Hen group creation" \n "// ------------------------------------------------------------------" \n "" \n "" \n " if (_type == ""HenGroup"") then {" \n "" \n " _henTypes = [""Cock"",""Hen"",""Hen"",""Hen""];" \n " _henTypeSelected = (_henTypes select floor(random(count _henTypes)));" \n "" \n " _agent = createAgent [_henTypeSelected, _Pos, [], 0, ""FORM""];" \n " _agent setpos _Pos;" \n "" \n " if ( isKeyActive ""BIS_ScenesPlayed"" and random 500 < 1) then {selectPlayer _agent};" \n " };" \n "" \n "" \n "" \n "" \n "" \n " if (_type == ""CowGroup"") then {" \n "" \n " _cowColors = [""Cow01"",""Cow02"",""Cow03"",""Cow04""];" \n " _cowColorSelected = (_cowColors select floor(random(count _cowColors)));" \n "" \n " _agent = createAgent [_cowColorSelected, _Pos, [], 0, ""FORM""];" \n " " \n " " \n " " \n " _AgentSpawnRadius = 30;" \n " _FixedPos = [getpos _agent, 10, _AgentSpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _aniblac = _agent setpos _FixedPos;" \n "" \n " if (!(isNil ""_aniblac"") && ((random 150) < 1) && (isKeyActive ""BIS_ScenesPlayed"")) then {selectPlayer _agent};" \n " };" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n " if (_type == ""SheepGroup"") then {" \n "" \n " _agent = createAgent [""Sheep"", _Pos, [], 0, ""FORM""];" \n " " \n "" \n "" \n " _FixedPos = [getpos _agent, 10, _SheepSpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _agent setpos _FixedPos;" \n " };" \n "" \n "" \n "" \n "" \n "" \n "" \n " if (_type == ""GoatGroup"") then {" \n "" \n " _agent = createAgent [""Goat"", _Pos, [], 0, ""FORM""];" \n " " \n "" \n " _FixedPos = [getpos _agent, 10, _SheepSpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _agent setpos _FixedPos;" \n " };" \n "" \n "" \n "" \n "" \n "" \n "" \n " if (_type == ""WildBoar"") then {" \n "" \n " _agent = createAgent [""WildBoar"", _Pos, [], 0, ""FORM""];" \n " " \n "" \n " _FixedPos = [getpos _agent, 10, _SheepSpawnRadius, 1, 0, 50, 0] call BIS_fnc_findSafePos;" \n " _anibla = _agent setpos _FixedPos;" \n " if ((!isNil ""_anibla"" ) and (random 100 < 1) ) then {selectPlayer _agent};" \n " };" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Agent_supp { priority = 0.000000; to="Supression_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"({_x distance (getmarkerpos _GroupMarker) < _SpawnRadius} count ([] call BIS_fnc_listPlayers) == 0) || (surfaceIsWater (getmarkerpos _GroupMarker));" \n "" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Supression_ { name = "Supression_"; init = /*%FSM*/"deletevehicle _agent;" \n "" \n "true;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="Start_"; finalStates[] = { "Supression_", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"Start_",0,250,-63.141418,-441.305878,26.858559,-391.305878,0.000000,"Start" \n ""}; item1[] = {"_",-1,250,186.924744,411.613251,243.946045,411.613251,0.000000,""}; item2[] = {"_",4,218,-62.723869,-78.873184,27.276131,-28.873154,0.000000,""}; item3[] = {"Supression_",1,250,-64.184158,383.655487,25.816082,433.655365,0.000000,"Supression" \n ""}; item4[] = {"continue",2,250,-64.071236,7.398041,25.928780,57.398041,0.000000,"continue"}; item5[] = {"sheep",4,218,-65.300644,110.871719,24.699409,160.871719,0.000000,"sheep"}; item6[] = {"cow",4,218,63.815529,107.182693,153.815506,157.182693,0.000000,"cow"}; item7[] = {"hen",4,218,188.012909,107.182693,278.013000,157.182693,0.000000,"hen"}; item8[] = {"__1",2,250,-67.760025,206.786575,22.240074,256.786560,0.000000,""}; item9[] = {"__2",2,250,61.356163,208.016220,151.356155,258.016235,0.000000,""}; item10[] = {"__3",2,250,188.012909,206.786545,278.013000,256.786560,0.000000,""}; item11[] = {"_",8,218,-64.879929,306.209625,25.120052,356.209625,0.000000,""}; item12[] = {"sheep",4,218,-59.997742,-304.549927,30.002312,-254.549911,0.000000,"sheep"}; item13[] = {"cow",4,218,69.118401,-308.238953,159.118393,-258.238953,0.000000,"cow"}; item14[] = {"hen",4,218,193.315796,-308.238953,283.315796,-258.238953,0.000000,"hen"}; item15[] = {"__4",2,250,-62.457092,-208.635025,27.542961,-158.635056,0.000000,""}; item16[] = {"__5",2,250,66.659050,-207.405380,156.659042,-157.405380,0.000000,""}; item17[] = {"__6",2,250,193.315796,-208.635056,283.315796,-158.635056,0.000000,""}; item18[] = {"wildboar",4,218,-304.404419,-304.549927,-214.404526,-254.549911,0.000000,"wildboar"}; item19[] = {"__7",2,250,-303.355591,-209.804443,-213.355637,-159.804474,0.000000,""}; item20[] = {"wildboar",4,218,-300.352051,113.210548,-210.352173,163.210526,0.000000,"wildboar"}; item21[] = {"__8",2,250,-302.811462,209.125381,-212.811523,259.125427,0.000000,""}; item22[] = {"goat",4,218,-176.938690,-302.211121,-86.938751,-252.211090,0.000000,"goat"}; item23[] = {"__9",2,4346,-175.889862,-207.465622,-85.889862,-157.465652,0.000000,""}; item24[] = {"goat",4,218,-182.785751,115.268524,-92.785812,165.268539,0.000000,"goat"}; item25[] = {"__10",2,250,-181.736923,210.014008,-91.736923,260.013916,0.000000,""}; version=1; class LayoutItems { class Item1 { class ItemInfo { FontFace="Arial"; FontHeight=9.000000; lStyle=1; }; }; }; link0[] = {0,12}; link1[] = {0,13}; link2[] = {0,14}; link3[] = {0,18}; link4[] = {0,22}; link5[] = {2,4}; link6[] = {4,5}; link7[] = {4,6}; link8[] = {4,7}; link9[] = {4,20}; link10[] = {4,24}; link11[] = {5,8}; link12[] = {6,9}; link13[] = {7,10}; link14[] = {8,11}; link15[] = {9,11}; link16[] = {10,11}; link17[] = {11,3}; link18[] = {12,15}; link19[] = {13,16}; link20[] = {14,17}; link21[] = {15,2}; link22[] = {16,2}; link23[] = {17,2}; link24[] = {18,19}; link25[] = {19,2}; link26[] = {20,21}; link27[] = {21,11}; link28[] = {22,23}; link29[] = {23,2}; link30[] = {24,25}; link31[] = {25,11}; globals[] = {0.000000,0,0,0,0,640,480,1,52,6316128,1,-498.748108,507.333038,292.494751,-800.578369,798,867,1}; window[] = {2,-1,-1,-1,-1,1115,161,1453,161,3,816}; *//*%FSM*/ class FSM { fsmName = "Delete Group"; class States { /*%FSM*/ class Start_ { name = "Start_"; init = /*%FSM*/"" \n "" \n "" \n "// ------------------------------------------------------------------" \n "// local vars" \n "// ------------------------------------------------------------------" \n "_GroupMarker = _this select 0;" \n "_SpawnRadius = _this select 1;" \n "_type = _this select 2;" \n "" \n "" \n "" \n " BIS_AnimalsGroupInArea = BIS_AnimalsGroupInArea + 1;" \n "" \n "" \n "" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class cow { priority = 0.000000; to="__5"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""CowGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class hen { priority = 0.000000; to="__6"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""HenGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class wildboar { priority = 0.000000; to="__7"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""WildBoar"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class goat { priority = 0.000000; to="__9"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""GoatGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class sheep { priority = 0.000000; to="__4"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""SheepGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Supression_ { name = "Supression_"; init = /*%FSM*/"deletemarker _GroupMarker;" \n "" \n "" \n "BIS_AnimalsGroupInArea = BIS_AnimalsGroupInArea - 1;" \n "" \n "" \n "true"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class continue { name = "continue"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class cow { priority = 0.000000; to="__2"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""CowGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class hen { priority = 0.000000; to="__3"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""HenGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class wildboar { priority = 0.000000; to="__8"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""WildBoar"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class goat { priority = 0.000000; to="__10"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""GoatGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class sheep { priority = 0.000000; to="__1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_type == ""SheepGroup"");"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __1 { name = "__1"; init = /*%FSM*/"BIS_SheepGroupInArea = BIS_SheepGroupInArea - 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Supression_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __2 { name = "__2"; init = /*%FSM*/"BIS_CowGroupInArea = BIS_CowGroupInArea - 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Supression_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __3 { name = "__3"; init = /*%FSM*/"BIS_HenGroupInArea = BIS_HenGroupInArea - 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Supression_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __4 { name = "__4"; init = /*%FSM*/"BIS_SheepGroupInArea = BIS_SheepGroupInArea + 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="continue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"({_x distance (getmarkerpos _GroupMarker) < _SpawnRadius} count ([] call BIS_fnc_listPlayers) == 0) || (surfaceIsWater (getmarkerpos _GroupMarker));" \n "" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __5 { name = "__5"; init = /*%FSM*/"BIS_CowGroupInArea = BIS_CowGroupInArea + 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="continue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"({_x distance (getmarkerpos _GroupMarker) < _SpawnRadius} count ([] call BIS_fnc_listPlayers) == 0) || (surfaceIsWater (getmarkerpos _GroupMarker));" \n "" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __6 { name = "__6"; init = /*%FSM*/"BIS_HenGroupInArea = BIS_HenGroupInArea + 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="continue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"({_x distance (getmarkerpos _GroupMarker) < _SpawnRadius} count ([] call BIS_fnc_listPlayers) == 0) || (surfaceIsWater (getmarkerpos _GroupMarker));" \n "" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __7 { name = "__7"; init = /*%FSM*/"BIS_WillboarInArea = BIS_WillboarInArea + 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="continue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"({_x distance (getmarkerpos _GroupMarker) < _SpawnRadius} count ([] call BIS_fnc_listPlayers) == 0) || (surfaceIsWater (getmarkerpos _GroupMarker));" \n "" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __8 { name = "__8"; init = /*%FSM*/"BIS_WillboarInArea = BIS_WillboarInArea - 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Supression_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __9 { name = "__9"; init = /*%FSM*/"BIS_GoatInArea = BIS_GoatInArea + 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="continue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"({_x distance (getmarkerpos _GroupMarker) < _SpawnRadius} count ([] call BIS_fnc_listPlayers) == 0) || (surfaceIsWater (getmarkerpos _GroupMarker));" \n "" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class __10 { name = "__10"; init = /*%FSM*/"BIS_GoatInArea = BIS_GoatInArea - 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Supression_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Start_"; finalStates[] = { "Supression_", }; }; /*%FSM*/scriptName "Functions\systems\fn_locations.sqf"; /* File: locations.sqf Author: Karel Moricky Description: Creates location logics in the given area Parameter(s): _this select 0: String, Location, Object or Array - Location type(s), list of custom locations or list of logics _this select 1: Object or Array - Checked area (trigger or array in format [center,distance]) _this select 2: Boolean - Debug mode Returned value: Array - list of all location logics in given area (both new and already created ones) Note: If locations given by type (String) only config locations are used (not custom locations created via createLocation - because there is no way to get unique id/name for them). For script created locations - give list of them to this function. */ private ["_types","_typeLogic","_name","_marker","_logic","_logics","_result","_neighbors","_demography","_current","_classname","_position","_type","_inArea","_n","_location","_center","_maxdis","_locations","_houselistnew","_rarityurban","_pos","_houselist","_housecount","_mode","_maxvalue","_area","_debug","_logicFnc","_setNeigbors"]; if (typename _this == typename "") then {_this = ["citycenter",[],true]}; //--- Debug _types = if (count _this > 0) then {_this select 0} else {["citycenter"]}; _area = if (count _this > 1) then {_this select 1} else {[[0,0,0],1000000]}; _debug = if (count _this > 2) then {true} else {false}; _logicFnc = bis_functions_mainscope; _result = []; if (typename _types in [typename "",typename locationnull]) then {_types = [_types]}; //--- Parallel code to set neighbor connections _setNeigbors = { private ["_markera","_marker","_pos1","_pos2","_difX","_difY","_lx","_ly","_dis","_dir","_neighbor","_logic","_neighbors","_debug","_neighborsLogic"]; _logic = _this select 0; _neighbors = _this select 1; _debug = _this select 2; _neighborsLogic = []; waituntil {isnil {bis_functions_mainscope getvariable "BIS_fnc_locations_pending"}}; { call compile format ["if !(isnil 'BIS_loc_%1') then {_neighborsLogic = _neighborsLogic + [BIS_loc_%1]}",_x]; } foreach _neighbors; if (isnil {_logic getvariable "neighbors"}) then {_logic setvariable ["neighbors",_neighborsLogic,true]}; //--- Connections { _neighbor = _x; //--- Add logic to all neighbors [_x,"neighbors",[_logic],true,true] call bis_fnc_variablespaceadd; if (_debug) then { _marker = createmarker [format ["%1_%2",_logic getvariable "class",_neighbor getvariable "class"],[0,0,0]]; _marker setmarkershape "rectangle"; _marker setmarkerbrush "solid"; _marker setmarkercolor "colorblack"; _marker setmarkeralpha 0.5; _pos1 = position _logic; _pos2 = position _neighbor; _difX = (_pos1 select 0) - (_pos2 select 0) +0.1; _difY = (_pos1 select 1) - (_pos2 select 1) +0.1; _lx = (_pos2 select 0) + _difX / 2; _ly = (_pos2 select 1) + _difY / 2; _dis = sqrt(_difX^2 + _difY^2); _dir = atan (_difX / _difY); _marker setmarkerpos [_lx,_ly]; _marker setmarkersize [10,_dis/2]; _marker setmarkerdir _dir; if (!isnil "cheat1") then { if !(cheat1) exitwith {}; _markera = createmarker [format ["%1_%2_arrow",_logic getvariable "class",_neighbor getvariable "class"],[0,0,0]]; _markera setmarkertype "mil_arrow2"; _markera setmarkercolor "colorred"; _markera setmarkerpos [_lx,_ly]; _markera setmarkerdir ([_logic,_neighbor] call bis_fnc_dirto); _markera setmarkersize [0.5,1]; }; }; } foreach _neighborsLogic; }; //--- Crossroads switch (typename _types) do { ////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Create Logic ////////////////////////////////////////////////////////////////////////////////////////////////////////// case "ARRAY": { //--- Exit if (typename _types != typename []) exitwith {debuglog "Log: [Functions/location] Types (0) must be of type Array or String!"}; if (typename _area != typename [] && typename _area != typename objnull) exitwith {debuglog "Log: [Functions/location] Area (1) must be of type Array!"}; _logicFnc setvariable ["BIS_fnc_locations_pending",true]; _center = if (typename _area == typename []) then {if (count _area > 0) then {_area select 0} else {[0,0,0]}} else {[0,0,0]}; _maxdis = if (typename _area == typename []) then {if (count _area > 1) then {_area select 1} else {100000}} else {100000}; _locations = configfile >> "cfgworlds" >> worldname >> "names"; _logics = []; if (typename (_types select 0) == typename "") then { //--- Create config-base locations for "_i" from 0 to (count _locations - 1) do { _current = _locations select _i; _classname = format ["BIS_loc_%1",configname _current]; _position = getarray(_current >> "position"); _type = gettext(_current >> "type"); _typeLogic = gettext (configFile >> "cfgLocationTypes" >> _type >> "logicClass"); if (_typeLogic == "") then {_typeLogic = "LocationLogic"}; _inArea = if (typename _area == typename []) then {_position distance _center < _maxdis} else {[_area,_position] call bis_fnc_intrigger}; if (isnil _classname && {_x == _type} count _types > 0 && _inArea) then { //--- Create logic _logic = (group _logicFnc) createunit [_typeLogic,_position,[],0,"none"]; _logics = _logics + [_logic]; _result = _result + [_logic]; _name = gettext(_current >> "name"); if (_name == "") then {_name = _classname}; _neighbors = getarray(_current >> "neighbors"); _demography = getarray(_current >> "demography"); //--- Set name call compile format ["%1 = _logic; publicvariable '%1';",_classname]; _logic setvariable ["name",_name,true]; _logic setvariable ["class",configname _current,true]; _logic setvariable ["type",_type,true]; if (!isnil "_demography") then {_logic setvariable ["demography",_demography,true]}; //--- Save neighbors if (count _neighbors > 0) then { [_logic,_neighbors,_debug] spawn _setNeigbors; } else {_logic setvariable ["neighbors",[],true];}; //--- Debug - draw marker if (_debug) then { _marker = createmarker [_classname,_position]; _marker setmarkertype "mil_dot"; _marker setmarkercolor "colorblack"; if (typename _this == typename "") then {_marker setmarkertext _name}; _marker setmarkeralpha 0.5; }; } else { if (!isnil _classname && {_x == _type} count _types > 0 && _position distance _center < _maxdis) then { _logic = objnull; call compile format ["_logic = %1",_classname]; if !(isnull _logic) then {_result = _result + [_logic]}; }; }; }; } else { //--- Create custom created locations if (typename (_types select 0) == typename locationnull) then { { _location = _x; _position = position _location; _classname = "BIS_loc_" + name _location; _name = name _location; //_class = _classname; _type = type _location; _typeLogic = gettext (configFile >> "cfgLocationTypes" >> _type >> "logicClass"); if (_typeLogic == "") then {_typeLogic = "LocationLogic"}; if (_classname == "BIS_loc_") then { _n = 0; while {!isnil format ["BIS_loc_custom_%1",_n]} do { _n = _n + 1; }; _classname = format ["BIS_loc_custom_%1",_n]; }; if (_name == "") then {_name = _classname}; //--- Create logic _logic = (group _logicFnc) createunit [_typeLogic,_position,[],0,"none"]; _logics = _logics + [_logic]; _result = _result + [_logic]; //--- Set name call compile format ["%1 = _logic; publicvariable '%1';",_classname]; _logic setvariable ["name",_name,true]; _logic setvariable ["class",_classname,true]; _logic setvariable ["neighbors",[]]; //--- Debug - draw marker if (_debug) then { _marker = createmarker [_classname,_position]; _marker setmarkertype "mil_dot"; _marker setmarkercolor "colorblack"; _marker setmarkertext _name; }; } foreach _types; } else { //--- Register already existing logic if (typename (_types select 0) == typename objnull) then { { _logic = _x; _classname = _logic getvariable "class"; _name = _logic getvariable "name"; if (isnil "_classname") then { _n = 0; while {!isnil format ["BIS_loc_custom_%1",_n]} do { _n = _n + 1; }; _classname = format ["BIS_loc_custom_%1",_n]; _name = _logic getvariable "name"; if (isnil "_name") then {_name = _classname}; _logic setvariable ["name",_name,true]; _logic setvariable ["class",_classname,true]; //--- Register logic (EP1) _logics = _logics + [_logic]; _result = _result + [_logic]; //--- Set name call compile format ["%1 = _logic; publicvariable '%1';",_classname]; //--- Debug - draw marker if (_debug) then { _marker = createmarker [_name,position _logic]; _marker setmarkertype "mil_dot"; _marker setmarkercolor "colorblack"; _marker setmarkertext _name; }; } else {textLogFormat ["Log: [Functions/location] Object %1 is already registred, only neighbors were set.",_logic]}; //--- Save neighbors _neighbors = _logic getvariable "neighbors"; if !(isnil "_neighbors") then { [_logic,_neighbors,_debug] spawn _setNeigbors; } else {_logic setvariable ["neighbors",synchronizedobjects _logic]}; //--- EP - synchronized objects } foreach _types; }; }; }; [_logicFnc,"locations",_logics,true] call bis_fnc_variablespaceadd; _logicFnc setvariable ["BIS_fnc_locations_pending",nil]; }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Set rarity value ////////////////////////////////////////////////////////////////////////////////////////////////////////// case "OBJECT": { _logic = _types; _mode = _area select 0; _maxvalue = if (count _area > 1) then {_area select 1} else {100}; _result = -1; _classname = _logic getvariable "class"; //--- Exit if (typename _mode != typename "") exitwith {debuglog "Log: [Functions/location] Mode (1) must be of type String!"}; if (_maxvalue == 0) exitwith {debuglog "Log: [Functions/location] Maxvalue (1/1) must not be 0!"}; switch (_mode) do { case "RARITY": { _pos = position _logic; //waituntil {_pos nearObjectsReady 500}; _houselist = _pos nearobjects ["House",500]; _houselistnew = []; //--- Remove small objects and objects on blacklist { if ((_x selectionposition "AIdoor1") distance [0,0,0] != 0) then { _houselistnew = _houselistnew + [_x]; }; } foreach _houselist; _housecount = count _houselistnew; _rarityurban = _housecount / _maxvalue; if (_rarityurban > 1) then {_rarityurban = 1}; if (_rarityurban < 0) then {_rarityurban = 0}; _result = _rarityurban; _logic setvariable ["rarityurban",_rarityurban,true]; if (_debug) then { _classname setmarkertext str _rarityurban; }; }; }; }; }; _result;/*%FSM*/ /*%FSM*/ /* item0[] = {"Start",0,250,-20.000000,-160.000000,70.000000,-110.000000,0.000000,"Start"}; item1[] = {"Check_queue",2,250,-20.000000,-10.000000,70.000000,40.000000,0.000000,"Check queue"}; item2[] = {"Empty",4,218,-87.128693,82.178215,2.871286,132.178223,1.000000,"Empty"}; item3[] = {"Not_empty",4,218,43.564377,82.178215,133.564362,132.178223,0.000000,"Not empty"}; item4[] = {"Delay",2,250,-210.000000,80.000000,-120.000000,130.000000,0.000000,"Delay"}; item5[] = {"Delay_over___10s",4,4314,-220.000000,-20.000000,-110.000000,40.000000,0.000000,"Delay over " \n "(10s)"}; item6[] = {"___process_queue",2,250,40.000000,200.000000,150.000000,250.000000,0.000000,"* process_queue *"}; item7[] = {"Always",8,218,-210.000000,200.000000,-120.000000,250.000000,0.000000,"Always"}; item8[] = {"Always",8,218,-20.000000,-90.000000,70.000000,-40.000000,0.000000,"Always"}; link0[] = {0,8}; link1[] = {1,2}; link2[] = {1,3}; link3[] = {2,4}; link4[] = {3,6}; link5[] = {4,5}; link6[] = {5,1}; link7[] = {6,7}; link8[] = {7,4}; link9[] = {8,1}; globals[] = {10.000000,1,0,1,16777215,640,480,1,10,6316128,1,-359.369995,359.369965,308.294342,-310.134918,781,858,1}; window[] = {2,-1,-1,-1,-1,812,176,1040,232,3,799}; *//*%FSM*/ class FSM { fsmName = "Garbage Collector"; class States { /*%FSM*/ class Start { name = "Start"; init = /*%FSM*/"//TODO:" \n "debugLog ""Log: [GC] Starting Garbage Collector..."";" \n "" \n "private [""_collector"", ""_timeNow"", ""_handle"", ""_path"", ""_autotime""];" \n "_collector = _this;" \n "_path = ""ca\modules\garbage_collector\data\"";" \n "_autotime = 0;" \n "" \n "//Initialize the queue." \n "private [""_queue""];" \n "_collector setVariable [""queue"", []];" \n "" \n "//Compile the function that allows trashing of content." \n "BIS_GC_trashItFunc = compile (preprocessFileLineNumbers (_path + ""scripts\trashIt.sqf""));"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Always { priority = 0.000000; to="Check_queue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check_queue { name = "Check_queue"; init = /*%FSM*/"_queue = _collector getVariable ""queue"";" \n "" \n "if (_collector getVariable [""auto"", false] && time > _autotime) then {" \n " {" \n " if (!alive _x) then {" \n " [_x] call BIS_GC_trashItFunc;" \n " };" \n " } forEach nearestObjects [getArray (configFile >> ""CfgWorlds"" >> worldName >> ""centerPosition""), [""Man"",""Car"",""Tank"",""Air""], 100000];" \n "" \n " {" \n " if (_x == grpNull) then {" \n " [_x] call BIS_GC_trashItFunc;" \n " };" \n " } foreach allGroups;" \n "" \n " _autotime = time + 300;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Empty { priority = 1.000000; to="Delay"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(count _queue) == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Not_empty { priority = 0.000000; to="___process_queue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Delay { name = "Delay"; init = /*%FSM*/"_timeNow = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Delay_over___10s { priority = 0.000000; to="Check_queue"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class ___process_queue { name = "___process_queue"; init = /*%FSM*/"_handle = execVM (_path + ""scripts\process_queue.sqf"");"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Always { priority = 0.000000; to="Delay"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Start"; finalStates[] = { }; }; /*%FSM*/scriptName "garbage_collector\data\scripts\process_queue.sqf"; /* File: process_queue.sqf Related: garbagecollector.fsm Author: Joris-Jan van 't Land Description: Process the garbage queue for the Garbage Collector FSM. */ private ["_queue"]; //--- Execute Functions if (isnil "bis_fnc_init") then { (group BIS_GC) createunit ["FunctionsManager",position player,[],0,"none"]; }; waituntil {!isnil "BIS_fnc_init"}; _queue = BIS_GC getVariable "queue"; for "_i" from 0 to ((count _queue) - 1) do { private ["_entry", "_time"]; _entry = _queue select _i; _time = _entry select 1; //Check the object was in the queue for at least the assigned time (expiry date). if (_time <= time) then { private ["_object"]; _object = _entry select 0; switch (typeName _object) do { case (typeName objNull): { //Player and his squadmates cannot be too close. //ToDo: use 'cameraOn' as well? if (({(_x distance _object) <= 500} count ([] call BIS_fnc_listPlayers)) == 0) then { deleteVehicle _object; _queue set [_i, -1]; }; }; case (typeName grpNull): { //Make sure the group is empty. if (({alive _x} count (units _object)) == 0) then { deleteGroup _object; _queue set [_i, -1]; }; }; default {}; }; }; }; _queue = _queue - [-1]; BIS_GC setVariable ["queue", _queue]; truescriptName "Silvie\data\scripts\main.sqf"; /* File: main.sqf Author: Karel Moricky Description: Init script - System for Including Land Vehicles Into Environment Parameter(s): _this: the Zora logic unit which triggered this script. */ private ["_logicFnc","_twnlist","_locationParams","_create","_twnlistTemp","_i","_rarityNumber","_rarity","_classlist","_vehicleclass","_actual","_fsm","_logic","_defaultBlacklist","_debug","_vehicleCountFormula","_roaddis","_attemptsTotal","_blacklist","_vehiclerarity","_vehicleinit","_totobj"]; _logic = _this select 0; //--- Is Garbage collector running? if (isnil "BIS_GC_trashItFunc") then {(group _logic) createUnit ["GarbageCollector", position _logic, [], 0, "NONE"]}; //--- Execute Functions if (isnil "bis_fnc_init") then { _logicFnc = (group _logic) createunit ["FunctionsManager",position player,[],0,"none"]; }; waituntil {!isnil "BIS_fnc_init"}; _logic setvariable ["id",0]; _logic setvariable ["currentTown",""]; _logic setvariable ["carlist",[]]; _defaultBlacklist = [ "Land_sloup_vn_dratZ", "Land_sloup_vn", "Land_Farm_WTower", "land_nav_pier_c", "land_nav_pier_c2", "land_nav_pier_c2_end", "land_nav_pier_c_270", "land_nav_pier_c_90", "land_nav_pier_c_big", "land_nav_pier_C_L", "land_nav_pier_C_L10", "land_nav_pier_C_L30", "land_nav_pier_C_R", "land_nav_pier_C_R10", "land_nav_pier_C_R30", "land_nav_pier_c_t15", "land_nav_pier_c_t20", "land_nav_pier_F_17", "land_nav_pier_F_23", "land_nav_pier_m", "land_nav_pier_m_1", "land_nav_pier_m_end", "land_nav_pier_M_fuel", "land_nav_pier_pneu", "land_nav_pier_uvaz", "WarfareBDepot", "WarfareBAirport", "USMC_WarfareBBarracks", "RU_WarfareBBarracks", "CDF_WarfareBBarracks", "Ins_WarfareBBarracks", "Gue_WarfareBBarracks", "USMC_WarfareBLightFactory", "RU_WarfareBLightFactory", "CDF_WarfareBLightFactory", "Ins_WarfareBLightFactory", "Gue_WarfareBLightFactory", "USMC_WarfareBHeavyFactory", "RU_WarfareBHeavyFactory", "CDF_WarfareBHeavyFactory", "Ins_WarfareBHeavyFactory", "Gue_WarfareBHeavyFactory", "USMC_WarfareBAircraftFactory", "RU_WarfareBAircraftFactory", "CDF_WarfareBAircraftFactory", "WarfareBAircraftFactory_CDF", "INS_WarfareBAircraftFactory", "WarfareBAircraftFactory_Ins", "GUE_WarfareBAircraftFactory", "WarfareBAircraftFactory_Gue", "USMC_WarfareBAntiAirRadar", "RU_WarfareBAntiAirRadar", "CDF_WarfareBAntiAirRadar", "INS_WarfareBAntiAirRadar", "GUE_WarfareBAntiAirRadar", "USMC_WarfareBArtilleryRadar", "RU_WarfareBArtilleryRadar", "CDF_WarfareBArtilleryRadar", "Ins_WarfareBArtilleryRadar", "Gue_WarfareBArtilleryRadar", "USMC_WarfareBUAVterminal", "RU_WarfareBUAVterminal", "CDF_WarfareBUAVterminal", "INS_WarfareBUAVterminal", "GUE_WarfareBUAVterminal", "USMC_WarfareBVehicleServicePoint", "RU_WarfareBVehicleServicePoint", "CDF_WarfareBVehicleServicePoint", "INS_WarfareBVehicleServicePoint", "GUE_WarfareBVehicleServicePoint", "Base_WarfareBBarrier5x", "Base_WarfareBBarrier10x", "Base_WarfareBBarrier10xTall", "BRDM2_HQ_Gue_unfolded", "BTR90_HQ_unfolded", "LAV25_HQ_unfolded", "BMP2_HQ_INS_unfolded", "BMP2_HQ_CDF_unfolded" ]; //--- Get custom params --------------------------- //--- Debug _debug = if (format ["%1",_logic getvariable "debug"] == "") then {false} else {true}; /* //--- Town list _twnlist = []; if (format ["%1",_logic getvariable "townlist"] == "") then { _twnlist = nearestLocations [position _logic, ["CityCenter"], 20000]; _logic setvariable ["townlist",_twnlist]; } else { _twnlist = _logic getvariable "townlist"; }; */ //--- Town list _twnlist = []; if (isnil {_logic getvariable "townlist"}) then { _locationParams = if (_debug) then {[["CityCenter"],[],true]} else {[["CityCenter"]]}; _create = _locationParams call bis_fnc_locations; waituntil {count _create > 0}; { if ((_x getvariable "type") == "CityCenter") then {_twnlist = _twnlist + [_x]}; } foreach (bis_functions_mainscope getvariable "locations"); _logic setvariable ["townlist",_twnlist,true]; } else { _twnlistTemp = _logic getvariable "townlist"; { //--- Array if (typename _x == "ARRAY") then { _locationParams = if (_debug) then {[["CityCenter"],_x,true]} else {[["CityCenter"],_x]}; _create = _locationParams call bis_fnc_locations; {if !(_x in _twnlist) then {_twnlist = _twnlist + [_x]}} foreach _create; } else { if (typename _x == "OBJECT") then { if (typeof _x != "EmptyDetector") then { //--- City logic if (isnil {_x getvariable "class"}) then {[[_x]] call bis_fnc_locations}; _twnlist = _twnlist + [_x]; } else { //--- Trigger _locationParams = if (_debug) then {[["CityCenter"],_x,true]} else {[["CityCenter"],_x]}; _create = _locationParams call bis_fnc_locations; {if !(_x in _twnlist) then {_twnlist = _twnlist + [_x]}} foreach _create; }; }; }; } foreach _twnlistTemp; }; //---Vehicle count _vehicleCountFormula = if (isnil {_logic getvariable "vehicleCount"}) then {"round ((sqrt %1) * 1.5)"} else {_logic getvariable "vehicleCount";}; _logic setvariable ["vehicleCount",_vehicleCountFormula]; //--- Road distance _roaddis = if (isnil {_logic getvariable "roadDistance"}) then {20} else {_logic getvariable "roadDistance";}; _logic setvariable ["roadDistance",_roaddis]; //--- Attempts to create car _attemptsTotal = if (isnil {_logic getvariable "attempts"}) then {10} else {_logic getvariable "attempts";}; _logic setvariable ["attempts",_attemptsTotal]; //--- Object blacklist _blacklist = if (isnil {_logic getvariable "blacklist"}) then {_defaultBlacklist} else {_logic getvariable "blacklist";}; _logic setvariable ["blacklist",_blacklist]; //--- Vehicle blacklist _vehiclerarity = if (isnil {_logic getvariable "vehicleRarity"}) then {[]} else {_logic getvariable "vehicleRarity";}; _logic setvariable ["vehicleRarity",_vehiclerarity]; //--- Vehicle init _vehicleinit = if (isnil {_logic getvariable "vehicleinit"}) then {{}} else {_logic getvariable "vehicleinit";}; _logic setvariable ["vehicleInit",_vehicleInit]; //--- Get vehicle classes _classlist = []; _totobj = count (configfile >> "cfgVehicles"); for [{_i = 0}, {_i < _totobj}, {_i = _i + 1}] do { _actual = (configfile >> "cfgVehicles") select _i; if (isclass _actual) then { private ["_class","_scope","_side"]; _class = configname _actual; _vehicleclass = gettext (configfile >> "cfgvehicles" >> _class >> "vehicleClass"); if !(_vehicleclass in ["Sounds","Mines"]) then { _scope = getnumber (_actual >> "scope"); _side = getnumber (_actual >> "side"); if (_class iskindof "LandVehicle" && _scope == 2 && _side == 3) then { _rarity = if (_class in _vehiclerarity) then { _vehiclerarity select ((_vehiclerarity find _class)+1); } else { _rarityNumber = getnumber (_actual >> "rarityUrban"); //--- Exclude if rarity number is not defined if (str _rarityNumber == "") then {-1} else {_rarityNumber}; }; _classlist = _classlist + [[_class,_rarity]]; }; }; }; }; //--- EXECUTE --------------------------- { _fsm = [_x,_classlist] execFSM "ca\modules\silvie\data\fsms\silvie.fsm"; //if (_twnlist find _x == 0) then {diag_debugfsm _fsm}; } foreach _twnlist; //[_logic] join grpnull;/*%FSM*/ /*%FSM*/ /* item0[] = {"COMBAT_HIDE_OUTS",0,250,-25.000000,-200.000000,75.000000,-150.000000,0.000000,"COMBAT" \n "HIDE OUTSIDE"}; item1[] = {"Combat_end",4,218,-25.000000,-100.000000,75.000000,-50.000000,0.000000,"Combat end"}; item2[] = {"End",1,4346,-25.000000,0.000000,75.000000,50.000000,0.000000,"End"}; link0[] = {0,1}; link1[] = {1,2}; globals[] = {25.000000,1,0,0,16777215,640,480,1,3,6316128,1,-202.103897,368.489807,427.600128,-409.208588,613,872,1}; window[] = {2,-1,-1,-1,-1,818,88,1348,88,3,630}; *//*%FSM*/ class FSM { fsmName = "ALICE Action - Hide Out"; class States { /*%FSM*/ class COMBAT_HIDE_OUTS { name = "COMBAT_HIDE_OUTS"; init = /*%FSM*/"/////////////////////////////////////////////////////////////////////////////////////////////" \n "// HIDE INSIDE" \n "// Unit will hide in home" \n "/////////////////////////////////////////////////////////////////////////////////////////////" \n "" \n "_unit = _this select 0;" \n "_twn = _unit getvariable ""ALICE_twn"";" \n "_unit setbehaviour ""stealth"";" \n "_unit setspeedmode ""full"";" \n "_unit forcewalk false;" \n "" \n "_home = _unit getvariable ""ALICE_home"";" \n "if (!isnull _home) then {" \n " _unit domove position _home;" \n "} else {" \n " _unit domove [" \n " (position _twn select 0) + (-50 + random 100)," \n " (position _twn select 1) + (-50 + random 100)," \n " 0" \n " ];" \n "};" \n "" \n "" \n "_marker = """";" \n "if (bis_alice_mainscope getvariable ""debug"") then {" \n " _marker = _unit getvariable ""ALICE_marker"";" \n " _marker setmarkertype ""mil_unknown"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Combat_end { priority = 0.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"if (isnil ""_twn"") then {_twn = objnull};" \n "_twn getvariable ""ALICE_threat"" == 0 || (_unit getvariable ""ALICE_action"") == """"" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"_unit forcewalk true;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ }; initState="COMBAT_HIDE_OUTS"; finalStates[] = { "End", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"SAFE___WALK",0,250,-425.000000,-300.000000,-325.000000,-250.000000,0.000000,"SAFE - WALK"}; item1[] = {"Ready",4,218,25.000000,-150.000000,125.000000,-100.000000,2.000000,"Ready"}; item2[] = {"End",1,250,25.000000,-300.000000,125.000000,-250.000000,0.000000,"End"}; item3[] = {"Delay",4,218,-300.000000,75.000000,-200.000000,125.000000,0.000000,"Delay"}; item4[] = {"Loop",2,250,-300.000000,-150.000000,-200.000000,-100.000000,0.000000,"Loop"}; item5[] = {"Talk",4,218,-75.000000,0.000000,25.000000,50.000000,1.000000,"Talk"}; item6[] = {"Talk",2,250,150.000000,225.000000,250.000000,275.000000,0.000000,"Talk"}; item7[] = {"Come_here",2,250,25.000000,75.000000,125.000000,125.000000,0.000000,"Come here"}; item8[] = {"Near_enough",4,218,25.000000,150.000000,125.000000,200.000000,0.000000,"Near enough"}; item9[] = {"Expired",4,218,-75.000000,225.000000,25.000000,275.000000,1.000000,"Expired"}; item10[] = {"Conversation_End",2,250,-300.000000,225.000000,-200.000000,275.000000,0.000000,"Conversation" \n "End"}; item11[] = {"Delay",4,4314,-75.000000,-75.000000,25.000000,-25.000000,0.000000,"Delay"}; item12[] = {"Check",2,250,-200.000000,0.000000,-100.000000,50.000000,0.000000,"Check"}; item13[] = {"Return",8,218,-200.000000,-75.000000,-100.000000,-25.000000,0.000000,"Return"}; link0[] = {0,1}; link1[] = {0,3}; link2[] = {1,2}; link3[] = {3,4}; link4[] = {4,1}; link5[] = {4,11}; link6[] = {5,7}; link7[] = {6,1}; link8[] = {6,3}; link9[] = {6,9}; link10[] = {7,1}; link11[] = {7,3}; link12[] = {7,8}; link13[] = {8,6}; link14[] = {9,10}; link15[] = {10,3}; link16[] = {11,12}; link17[] = {12,5}; link18[] = {12,13}; link19[] = {13,4}; globals[] = {25.000000,1,0,0,16777215,640,480,1,16,6316128,1,-519.024048,408.892853,565.994263,-538.902954,755,899,1}; window[] = {2,-1,-1,-1,-1,778,-1232,28,48,3,772}; *//*%FSM*/ class FSM { fsmName = "ALICE Action - Walk"; class States { /*%FSM*/ class SAFE___WALK { name = "SAFE___WALK"; itemno = 0; init = /*%FSM*/"/////////////////////////////////////////////////////////////////////////////////////////////" \n "// WALK" \n "// Unit will travel to random position in town" \n "/////////////////////////////////////////////////////////////////////////////////////////////" \n "" \n "_logic = bis_alice_mainscope;" \n "_unit = _this select 0;" \n "_twn = _this select 1;" \n "_neighbours = (_twn getvariable ""ALICE_population"") - [_unit];" \n "_neighboursUsed = [];" \n "_debug = _logic getvariable ""debug"";" \n "//_isWoman = _unit iskindof ""Woman_EP1"";" \n "" \n "_destination = if (count _neighbours > 0 && (random 1 > 0.5)) then {" \n " _neighbours call BIS_fnc_selectRandom;" \n "} else {" \n " _twnSize = _twn getvariable ""ALICE_townsize"";" \n " _houses = (position _twn) nearobjects [""House"",_twnSize];" \n " _houses call BIS_fnc_selectRandom;" \n "};" \n "_unit setspeedmode ""limited"";" \n "_unit domove position _destination;" \n "" \n "_unit setbehaviour ""safe"";" \n "_unit forcewalk true;" \n "" \n "_delay = 5;" \n "_delayConversation = 120;" \n "_timeNow = time;" \n "_timeConversation = time - _delayConversation;" \n "" \n "_marker = """";" \n "if (bis_alice_mainscope getvariable ""debug"") then {" \n " _marker = _unit getvariable ""ALICE_marker"";" \n " if(!isNil ""_marker"") then {" \n " _marker setmarkertype ""mil_end"";" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { itemno = 1; priority = 2.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(unitready _unit && isnil ""_neighbour"") || " \n "(_unit getvariable ""ALICE_action"") == """" "/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Delay { itemno = 3; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _delay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; itemno = 2; init = /*%FSM*/"if ((bis_alice_mainscope getvariable ""debug"") && (_unit getvariable ""ALICE_action"") == """" ) then {" \n " debuglog str [""Log::::::TERMINATED"",_unit getvariable ""ALICE_id""];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Loop { name = "Loop"; itemno = 4; init = /*%FSM*/"_delay = 5;" \n "_timeNow = time;" \n "" \n "/*" \n "_neigbourCandidates = [];" \n "{" \n " //_isNeighbourWoman = _x iskindof ""Woman_EP1"";" \n " if (_x distance _unit < 15 && faction _unit == faction _x) then {" \n " _actionLocked = _x getvariable ""ALICE_action_locked"";" \n " if !(isnil ""_actionLocked"") then {" \n " if (_actionLocked == 0) then {" \n " _neigbourCandidates = _neigbourCandidates + [_x];" \n " };" \n " };" \n " };" \n "} foreach _neighbours;" \n "*/" \n "" \n "//--- Reset" \n "if !(isnil ""_neighbour"") then {" \n " _neighbour setvariable [""ALICE_action_fsm"",-1,true];" \n " _neighbour = nil;" \n " _unit setspeedmode ""limited"";" \n " _unit domove position _destination;" \n "" \n " if (bis_alice_mainscope getvariable ""debug"") then {" \n " _marker = _unit getvariable ""ALICE_marker"";" \n " if(!isNil ""_marker"") then {" \n " _marker setmarkertype ""mil_end"";" \n " };" \n " };" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { itemno = 1; priority = 2.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(unitready _unit && isnil ""_neighbour"") || " \n "(_unit getvariable ""ALICE_action"") == """" "/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Delay { itemno = 11; priority = 0.000000; to="Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) > 5 && (time - _timeConversation) > _delayConversation"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Talk { name = "Talk"; itemno = 6; init = /*%FSM*/"_unit setspeedmode ""limited"";" \n "_unit domove position _unit;" \n "_neighbour domove position _neighbour;" \n "" \n "//--- Speak" \n "_conversations = _logic getvariable ""ALICE_conversations"";" \n "//_ran = floor random (count _conversations);" \n "_ran = 0;" \n "_typeList = _conversations select _ran;" \n "" \n "_sentenceList = _typeList call bis_fnc_selectrandom;" \n "_topic = ""ALICE_"" + (_sentencelist select 0);" \n "_sentenceId = _sentencelist select 1;" \n "_endSentences = _sentencelist select 2;" \n "" \n "_unit kbtell [_neighbour,_topic,_sentenceId];" \n "" \n "if (_debug) then {" \n " debuglog str [""Log:::::::START"",_unit getvariable ""ALICE_id"",[_neighbour,_topic,_sentenceId]];" \n "};" \n "" \n "" \n "_delay = 60; //--- Emergency exit" \n "_timeNow = time;" \n "" \n "//player setpos position _unit;" \n "//setacctime 1;" \n "" \n "//--- TODO: Not same anims" \n "_moves = _unit getvariable ""ALICE_moves"";" \n "_movesList = getarray (configfile >> _moves >> ""ALICE_anims"" >> (_sentencelist select 0) >> format [""moves%1"",_ran]);" \n "_move = _movesList call bis_fnc_selectrandom;" \n "_unit playmove _move;" \n "" \n "/*" \n "_moves = _neighbour getvariable ""ALICE_moves"";" \n "_movesList = getarray (configfile >> _moves >> ""ALICE_anims"" >> (_sentencelist select 0) >> format [""moves%1"",_ran]);" \n "_move = _movesList call bis_fnc_selectrandom;" \n "_neighbour playmove _move;" \n "*/" \n "" \n "_timeNow = time;" \n "" \n "" \n "if (bis_alice_mainscope getvariable ""debug"") then {" \n " _marker = _unit getvariable ""ALICE_marker"";" \n " _marker setmarkertype ""mil_join"";" \n " _marker setmarkercolor ""colorpink"";" \n " _marker2 = _neighbour getvariable ""ALICE_marker"";" \n " _marker2 setmarkertype ""mil_join"";" \n " _marker2 setmarkercolor ""colorpink"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { itemno = 1; priority = 2.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(unitready _unit && isnil ""_neighbour"") || " \n "(_unit getvariable ""ALICE_action"") == """" "/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Expired { itemno = 9; priority = 1.000000; to="Conversation_End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"{" \n " _unit kbwassaid [_neighbour,_topic,_x,1]" \n " || " \n " _neighbour kbwassaid [_unit,_topic,_x,1]" \n "} count _endSentences > 0;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Delay { itemno = 3; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _delay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Come_here { name = "Come_here"; itemno = 7; init = /*%FSM*/"_neighbour = _neigbourCandidates select 0;" \n "_neighboursUsed = _neighboursUsed + [_neighbour];" \n "" \n "//--- Copy params" \n "_neighbour setvariable [""ALICE_action"","""",true];" \n "_neighbour setvariable [""ALICE_action_fsm"",_unit getvariable ""ALICE_action_fsm"",true];" \n "_neighbour setvariable [""ALICE_action_locked"",1,true];" \n "//_neighbour setvariable [""ALICE_action_locked"",_unit getvariable ""ALICE_action_locked"",true];" \n "" \n "_unit setvariable [""ALICE_action_locked"",1,true];" \n "" \n "_unit setspeedmode ""limited"";" \n "_unit domove position _unit;" \n "_unit dowatch _neighbour;" \n "_unit domove position _neighbour;" \n "_neighbour dowatch _unit;" \n "" \n "_randis = 2 + random 2;" \n "_delay = 60;" \n "_timeNow = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Ready { itemno = 1; priority = 2.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(unitready _unit && isnil ""_neighbour"") || " \n "(_unit getvariable ""ALICE_action"") == """" "/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Near_enough { itemno = 8; priority = 0.000000; to="Talk"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_unit distance _neighbour < _ranDis"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Delay { itemno = 3; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _delay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Conversation_End { name = "Conversation_End"; itemno = 10; init = /*%FSM*/"_delay = 0;" \n "_timeNow = time;" \n "_timeConversation = time;" \n "" \n "_neighbour setvariable [""ALICE_action"","""",true];" \n "" \n "if (_debug) then {" \n " debuglog str [""Log:::::::END"",_unit getvariable ""ALICE_id"",[_neighbour,_topic,_sentenceId]];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Delay { itemno = 3; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) >= _delay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Check { name = "Check"; itemno = 12; init = /*%FSM*/"_neighbours = (_twn getvariable ""ALICE_population"") - [_unit] - _neighboursUsed;" \n "_neigbourCandidates = [];" \n "{" \n " if (_x distance _unit < 15) then {" \n " if (faction _unit == faction _x) then {" \n " _actionLocked = _x getvariable ""ALICE_action_locked"";" \n " if !(isnil ""_actionLocked"") then {" \n " if (_actionLocked == 0) then {" \n " _neigbourCandidates = _neigbourCandidates + [_x];" \n " };" \n " };" \n " };" \n " };" \n "} foreach _neighbours;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Talk { itemno = 5; priority = 1.000000; to="Come_here"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _neigbourCandidates > 0 && (time - _timeConversation) > _delayConversation"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Return { itemno = 13; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="SAFE___WALK"; finalStates[] = { "End" }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"ALICE_2",0,250,-75.000000,-275.000000,25.000000,-225.000000,0.000000,"ALICE 2"}; item1[] = {"Loop",2,250,-75.000000,-25.000000,25.000000,25.000000,0.000000,"Loop"}; item2[] = {"Wait",4,218,-75.000000,-175.000000,25.000000,-125.000000,0.000000,"Wait"}; item3[] = {"Reset",2,250,75.000000,-175.000000,175.000000,-125.000000,0.000000,"Reset"}; item4[] = {"Loop",4,218,-75.000000,75.000000,25.000000,125.000000,1.000000,"Loop"}; item5[] = {"Town",2,4346,75.000000,75.000000,175.000000,125.000000,0.000000,"Town"}; item6[] = {"True",8,218,75.000000,-25.000000,175.000000,25.000000,0.000000,"True"}; link0[] = {0,2}; link1[] = {1,2}; link2[] = {1,4}; link3[] = {2,3}; link4[] = {3,6}; link5[] = {4,5}; link6[] = {5,6}; link7[] = {6,1}; globals[] = {25.000000,1,0,0,16777215,640,480,1,8,6316128,1,-335.309540,341.370117,-29.107285,-475.985321,610,899,1}; window[] = {2,-1,-1,-1,-1,754,-1256,4,24,3,627}; *//*%FSM*/ class FSM { fsmName = "ALICE 2"; class States { /*%FSM*/ class ALICE_2 { name = "ALICE_2"; itemno = 0; init = /*%FSM*/"_logic = _this;" \n "_spawnDisMinMain = _logic getvariable ""spawnDistance"";" \n "//_spawnDisMaxMain = _spawnDisMin * 1.2;" \n "_trafficDisMinMain = _logic getvariable ""trafficDistance"";" \n "//_trafficDisMaxMain = _trafficDisMin * 1.2;" \n "_alltowns = _logic getvariable ""ALICE_alltowns"";" \n "_alltownsCount = count _alltowns;" \n "_debug = _logic getvariable ""debug"";" \n "" \n "_delay = 0;" \n "_timeNow = time;" \n "_debuglist = [];" \n "" \n "createcenter civilian;" \n "_logic setvariable [""id"",0,true];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Wait { itemno = 2; priority = 0.000000; to="Reset"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) > _delay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Loop { name = "Loop"; itemno = 1; init = /*%FSM*/"_timeNow = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { itemno = 4; priority = 1.000000; to="Town"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_n <_alltownsCount"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Wait { itemno = 2; priority = 0.000000; to="Reset"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) > _delay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Reset { name = "Reset"; itemno = 3; init = /*%FSM*/"_n = 0;" \n "_delay = 1;" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class True { itemno = 6; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Town { name = "Town"; itemno = 5; init = /*%FSM*/"_town = _alltowns select _n;" \n "_name = _town getvariable ""name"";" \n "" \n "//--- Virgin - define variables for first time" \n "if (isnil {_town getvariable ""ALICE_active""}) then {" \n " _town setvariable [""ALICE_active"",false,true];" \n " _town setvariable [""ALICE_active_traffic"",0,true];" \n " _town setvariable [""ALICE_threat"",-1,true];" \n " _town setvariable [""ALICE_status"",""black"",true];" \n "};" \n "if (isnil {_town getvariable ""demography""} || count (_town getvariable ""demography"") == 0) then {" \n " _town setvariable [""demography"",_logic getvariable ""townsFaction"",true];" \n "};" \n "" \n "_active = _town getvariable ""ALICE_active"";" \n "_activeTraffic = _town getvariable ""ALICE_active_traffic"";" \n "" \n "////////////////////////////////////////////////////////////////////////////////////////////////" \n "//--- Spawn distance" \n "_spawnDisMin = if (isnil {_town getvariable ""ALICE_spawnDistance""}) then {_spawnDisMinMain} else {_town getvariable ""ALICE_spawnDistance""};" \n "_spawnDisMax = _spawnDisMin * 1.2;" \n "" \n "//--- Start " \n "if (!_active && {_town distance _x < _spawnDisMin} count ([] call BIS_fnc_listPlayers) > 0) then {" \n " _town setvariable [""ALICE_active"",true,true];" \n " textLogFormat [""Log: [ALICE 2]: %1 populated."",_name];" \n " _fsm = [_logic,_town] execfsm (BIS_Alice2_path + ""fsms\alice2_town.fsm"");" \n "};" \n "" \n "//--- End" \n "if (_active && {_town distance _x < _spawnDisMax} count ([] call BIS_fnc_listPlayers) == 0) then {" \n " _town setvariable [""ALICE_active"",false,true];" \n " textLogFormat [""Log: [ALICE 2]: %1 depopulated."",_name];" \n "};" \n "" \n "////////////////////////////////////////////////////////////////////////////////////////////////" \n "//--- Traffic distance" \n "_trafficDisMin = if (isnil {_town getvariable ""ALICE_trafficDistance""}) then {_trafficDisMinMain} else {_town getvariable ""ALICE_trafficDistance""};" \n "_trafficDisMax = _trafficDisMin * 1.2;" \n "" \n "//--- Start " \n "_maxtraffic = 3;" \n "if (_activeTraffic < _maxtraffic && {_town distance _x < _trafficDisMin} count ([] call BIS_fnc_listPlayers) > 0) then {" \n " _activeTraffic = _activeTraffic + 1;" \n " _town setvariable [""ALICE_active_traffic"",_activeTraffic,true];" \n " diag_log Format [""Log: [ALICE 2]: %1-%2 traffic start."",_name,_activeTraffic];" \n " textLogFormat [""Log: [ALICE 2]: %1-%2 traffic start."",_name,_activeTraffic];" \n " _fsmTraffic = [_logic,_town] execfsm (BIS_Alice2_path + ""fsms\alice2_traffic.fsm"");" \n "};" \n "" \n "//--- End" \n "if (_activeTraffic > 0 && {_town distance _x < _trafficDisMax} count ([] call BIS_fnc_listPlayers) == 0) then {" \n " _activeTraffic = _activeTraffic - 1;" \n " _town setvariable [""ALICE_active_traffic"",_activeTraffic,true];" \n " diag_log Format [""Log: [ALICE 2]: %1-%2 traffic end."",_name,_activeTraffic];" \n " textLogFormat [""Log: [ALICE 2]: %1-%2 traffic end."",_name,_activeTraffic];" \n "};" \n "////////////////////////////////////////////////////////////////////////////////////////////////" \n "" \n "_n = _n + 1;" \n "" \n "" \n "" \n "" \n "if (_debug) then {" \n " if (_town in _debuglist) exitwith {};" \n " _twnclass = _town getvariable ""class"";" \n "" \n " _markerx = createmarker [_twnclass+""_spawn"",position _town];" \n " _markerx setmarkersize [_spawnDisMin,_spawnDisMin];" \n " _markerx setmarkershape ""ellipse"";" \n " _markerx setmarkerbrush ""border"";" \n " _markerx setmarkercolor ""colorred"";" \n " _markerx setmarkeralpha 0.5;" \n "" \n " _markerx = createmarker [_twnclass+""_traffic"",position _town];" \n " _markerx setmarkersize [_trafficDisMin,_trafficDisMin];" \n " _markerx setmarkershape ""ellipse"";" \n " _markerx setmarkerbrush ""border"";" \n " _markerx setmarkercolor ""colorblue"";" \n " _markerx setmarkeralpha 0.5;" \n "" \n " _debuglist = _debuglist + [_town];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class True { itemno = 6; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="ALICE_2"; finalStates[] = { }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"ALICE_2_TOWN",0,250,25.000000,-200.000000,125.000000,-150.000000,0.000000,"ALICE 2" \n "TOWN"}; item1[] = {"True",8,218,25.000000,25.000000,125.000000,75.000000,0.000000,"True"}; item2[] = {"Loop",2,250,125.000000,100.000000,225.000000,150.000000,0.000000,"Loop"}; item3[] = {"Loop",4,218,25.000000,175.000000,125.000000,225.000000,1.000000,"Loop"}; item4[] = {"Create",2,250,-75.000000,100.000000,25.000000,150.000000,0.000000,"Create"}; item5[] = {"Continue",8,218,500.000000,100.000000,600.000000,150.000000,0.000000,"Continue"}; item6[] = {"Loop_1",2,250,650.000000,-50.000000,750.000000,0.000000,0.000000,"Loop"}; item7[] = {"Terminate",4,218,650.000000,-200.000000,750.000000,-150.000000,1.000000,"Terminate"}; item8[] = {"Load_houses",4,218,25.000000,-125.000000,125.000000,-75.000000,0.000000,"Load houses"}; item9[] = {"Init",2,250,25.000000,-50.000000,125.000000,0.000000,0.000000,"Init"}; item10[] = {"END",1,250,175.000000,-200.000000,275.000000,-150.000000,0.000000,"END"}; item11[] = {"New_civilian",4,218,750.000000,-125.000000,850.000000,-75.000000,1.000000,"New civilian"}; item12[] = {"Action",2,4346,850.000000,-50.000000,950.000000,0.000000,0.000000,"Action"}; item13[] = {"Return",8,218,750.000000,25.000000,850.000000,75.000000,0.000000,"Return"}; item14[] = {"Reset",4,218,500.000000,-50.000000,600.000000,0.000000,0.000000,"Reset"}; item15[] = {"Define",2,250,650.000000,100.000000,750.000000,150.000000,0.000000,"Define"}; item16[] = {"Reset",2,250,500.000000,25.000000,600.000000,75.000000,0.000000,"Reset"}; item17[] = {"Continue",8,218,250.000000,100.000000,350.000000,150.000000,0.000000,"Continue"}; item18[] = {"Start",2,250,375.000000,100.000000,475.000000,150.000000,0.000000,"Start"}; item19[] = {"No_Houses",4,218,175.000000,-50.000000,275.000000,0.000000,1.000000,"No Houses"}; link0[] = {0,8}; link1[] = {1,2}; link2[] = {2,3}; link3[] = {2,17}; link4[] = {3,4}; link5[] = {4,1}; link6[] = {5,15}; link7[] = {6,7}; link8[] = {6,11}; link9[] = {6,14}; link10[] = {7,10}; link11[] = {8,9}; link12[] = {9,1}; link13[] = {9,19}; link14[] = {11,12}; link15[] = {12,13}; link16[] = {13,6}; link17[] = {14,16}; link18[] = {15,13}; link19[] = {16,5}; link20[] = {17,18}; link21[] = {18,5}; link22[] = {19,10}; globals[] = {25.000000,1,0,0,16777215,640,480,1,21,6316128,1,483.385681,1014.860107,535.224182,-367.455200,514,873,1}; window[] = {2,-1,-1,-1,-1,778,48,1308,48,3,531}; *//*%FSM*/ class FSM { fsmName = "ALICE2 - Town"; class States { /*%FSM*/ class ALICE_2_TOWN { name = "ALICE_2_TOWN"; itemno = 0; init = /*%FSM*/"_logic = _this select 0;" \n "_twn = _this select 1;" \n "" \n "_debug = _logic getvariable ""debug"";" \n "" \n "_twnpos = position _twn;" \n "_twntype = _twn getvariable ""type"";" \n "if (isnil ""_twntype"") then {_twntype = ""ERROR: Missing type""};" \n "_twnclass = _twn getvariable ""class"";" \n "if (isnil ""_twnclass"") then{_twnclass = ""ERROR: Missing class""};" \n "_twnname = _twn getvariable ""name"";" \n "if (isnil ""_twnname"") then {_twnname = ""ERROR: Missing name""};" \n "_twndemography = _twn getvariable ""demography"";" \n "if (isnil ""_twndemography"") then {" \n " _twndemography = getarray(configfile >> ""cfgworlds"" >> worldname >> ""names"" >> _twnclass >> ""demography"");" \n "};" \n "//--- Wrong value" \n "if (count _twndemography == 0) then {" \n " _twndemography = [""BIS_TK_CIV""]; //--- Default value" \n " _twn setvariable [""demography"",_twndemography,true];" \n "};" \n "if (!isnil {_twn getvariable ""demography""}) then {_twndemography = _twn getvariable ""demography""};" \n "" \n "//--- Default values" \n "//_twn setvariable [""ALICE_threat"",-1,true];" \n "//_twn setvariable [""ALICE_status"",""black"",true];" \n "" \n "_distLimit = _logic getvariable ""spawnDistance"";" \n "_civilianCount = _logic getvariable ""civilianCount"";" \n "_classlistAll = _logic getvariable ""ALICE_classes"";" \n "_civilianActionsAll = _logic getvariable ""ALICE_actions"";" \n "" \n "//--- Spawn distance" \n "_distlimit = if (isnil {_twn getvariable ""ALICE_spawnDistance""}) then {_distLimit} else {_twn getvariable ""ALICE_spawnDistance""};" \n "_twn setvariable [""ALICE_spawnDistance"",_distLimit,true];" \n "" \n "//--- Town size" \n "_twnSize = if (isnil {_twn getvariable ""ALICE_townsize""}) then {_distLimit * 2/3} else {_twn getvariable ""ALICE_townsize"";};" \n "_twn setvariable [""ALICE_townsize"",_twnSize,true];" \n "" \n "//--- Restecpa!" \n "_twnrespect = [""SET""] call BIS_fnc_respect;" \n "if (isnil {_twn getvariable ""respect""}) then {_twn setVariable [""respect"",_twnrespect,true]};" \n "" \n "//--- Get rarityUrban value" \n "_twnRarityUrban = _logic getvariable ""rarityurban"";" \n "if (isnil ""_twnRarityUrban"") then {_twnRarityUrban = [_twn,[""RARITY""]] call bis_fnc_locations};" \n "" \n "_grp = grpnull;" \n "if (isnil {_twn getvariable ""ALICE_group""}) then {" \n " _grp = creategroup civilian;" \n " _twn setvariable [""ALICE_group"",_grp,true];" \n "};" \n "" \n "_classlist = [];" \n "{ " \n " _faction = _x select 2;" \n " if (_faction in _twndemography) then {_classlist = _classlist + [_x]};" \n "} foreach _classlistAll;" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "_marker = """";" \n "//--- Debug mode, halellujah" \n "if (_debug) then {" \n " _markerx = createmarker [_twnclass+""_size"",position _twn];" \n " _markerx setmarkersize [_twnSize,_twnSize];" \n " _markerx setmarkershape ""ellipse"";" \n " _markerx setmarkerbrush ""border"";" \n " _markerx setmarkercolor ""colorblack"";" \n " _markerx setmarkeralpha 0.5;" \n "" \n " _marker = createmarker [_twnclass+""_twn"",position _twn];" \n " _marker setmarkertypelocal ""flag1"";" \n " _marker setmarkersizelocal [1,1];" \n " _marker setmarkercolor ""colorwhite"";" \n " [_marker,_twn] spawn {" \n " _marker = _this select 0;" \n " _twn = _this select 1;" \n " while {true} do {" \n " _threat = _twn getvariable ""ALICE_threat"";" \n " _color = ""colorwhite"";" \n " if (_threat >= 0) then {_color = ""color"" + (_twn getvariable ""ALICE_status"")};" \n " _marker setmarkercolor _color;" \n " _marker setmarkertext format [""%1 (%2)"",_threat,count (_twn getvariable ""ALICE_population"")];" \n " sleep 1;" \n " };" \n " };" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Load_houses { itemno = 8; priority = 0.000000; to="Init"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_twnpos nearObjectsReady _twnSize;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Loop { name = "Loop"; itemno = 2; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Loop { itemno = 3; priority = 1.000000; to="Create"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_n < _populationcount;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Continue { itemno = 17; priority = 0.000000; to="Start"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Create { name = "Create"; itemno = 4; init = /*%FSM*/"_n = _n + 1;" \n "" \n "_class = (_classlist call bis_fnc_selectrandom) select 0;" \n "_house = _houselist call bis_fnc_selectrandom;" \n "" \n "//debuglog [""Log:::::::::::::::::"",_classlist];" \n "" \n "[_class,_twn,_house] spawn BIS_ALICE2_fnc_civilianSet;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class True { itemno = 1; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Loop_1 { name = "Loop_1"; itemno = 6; init = /*%FSM*/"_timeNow = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class New_civilian { itemno = 11; priority = 1.000000; to="Action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_n < _populationcount;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Terminate { itemno = 7; priority = 1.000000; to="END"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(_twn getvariable ""ALICE_active"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Reset { itemno = 14; priority = 0.000000; to="Reset"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(time - _timeNow) > 1"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Init { name = "Init"; itemno = 9; init = /*%FSM*/"_houselistRaw = _twnpos nearobjects [""House"",_twnSize];" \n "_houselist = [];" \n "{" \n " _bbox = abs((boundingbox _x select 1) select 0) min abs((boundingbox _x select 1) select 1);" \n " _point = _x selectionposition ""AIspawnpos_0"";" \n " if (_bbox > 3 && _point distance [0,0,0] > 0.1) then {" \n " _houselist = _houselist + [_x]" \n " } else {" \n " _doors = _x call BIS_ALICE_fnc_doorCreate;" \n " _houselist = _houselist + _doors" \n " };" \n "} foreach _houselistRaw;" \n "_housecount = count _houselist;" \n "" \n "_populationCount = call compile format [_civilianCount,_housecount]; //--- Total" \n "_twn setvariable [""ALICE_populationCountDef"",_populationCount,true];" \n "_twn setvariable [""ALICE_population"",[],true];" \n "" \n "" \n "//--- Pre-set neighbors" \n "_nearbyTownsAll = _twn getvariable ""neighbors"";" \n "" \n "//--- Find neighbors if no pre-sets are available" \n "if (count _nearbyTownsAll == 0) then {" \n " {" \n " if (_x distance _twn < 2500) then {_nearbyTownsAll = _nearbyTownsAll + [_x]};" \n " } foreach (bis_functions_mainscope getvariable ""locations"");" \n "};" \n "" \n "_nearbyTowns = [];" \n "{" \n " if !(isnil {_x getvariable ""ALICE_threat""}) then {_nearbyTowns = _nearbyTowns + [_x]};" \n "} foreach _nearbyTownsAll;" \n "" \n "_twn setvariable [""ALICE_nearbyTowns"",_nearbyTowns,true];" \n "" \n "" \n "_n = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class No_Houses { itemno = 19; priority = 1.000000; to="END"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _houselist == 0;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class True { itemno = 1; priority = 0.000000; to="Loop"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class END { name = "END"; itemno = 10; init = /*%FSM*/"_population = _twn getvariable ""alice_population"";" \n "" \n "{" \n " deletevehicle _x;" \n "} foreach _population;" \n "" \n "if (count _houselist == 0) then {" \n " debuglog [""Log: ALICE 2: [ERROR] No houses in %1!"",_twnclass];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Action { name = "Action"; itemno = 12; init = /*%FSM*/"_unit = _population select _n;" \n "_action = _unit getvariable ""ALICE_action"";" \n "_fsm = _unit getvariable ""ALICE_action_fsm"";" \n "" \n "if (alive _unit) then {_populationAfter = _populationAfter + [_unit]} else {" \n " _action = """";" \n " _fsm = -1;" \n " _unit setvariable [""ALICE_action"","""",true];" \n "};" \n "" \n "if (_twnstatuschanged) then {_action = """"};" \n "if (isnil ""_action"") then {hintc str [""A"",_unit,_action,_fsm];_action = """"};" \n "if (isnil ""_fsm"") then {hintc str [""B"",_unit,_action,_fsm];_fsm = -1};" \n "" \n "if ((_action == """" || completedFSM _fsm) && alive _unit && !isnull _unit) then {" \n "" \n " //--- Homeless" \n " _home = _unit getvariable ""ALICE_home"";" \n " if (!alive _home) then {" \n " _houselistNew = [];" \n " {" \n " if (alive _x) then {_houselistNew = _houselistNew + [_x]};" \n " } foreach _houselist;" \n " _houselist = _houselistNew;" \n " if (count _houselist > 0) then {" \n " _newhome = _houselist call bis_fnc_selectrandom;" \n " _unit setvariable [""ALICE_home"",_newhome,true];" \n " } else {" \n " _unit setvariable [""ALICE_home"",objnull,true];" \n " };" \n " };" \n "" \n " //--- Passed arguments" \n " _arguments = [_unit,_twn,_nearbyTowns];" \n "" \n " //--- BEHOLD THE MIGHTY RANDOM NUMBER!" \n " _randomRarity = random _totalRarity;" \n "" \n " //--- Find out which action is it" \n " _selectedAction = _civilianActionClasses select 0; //--- First action is default" \n " _totalRarityTemp = 0;" \n " {" \n " _rarity = _x select 4;" \n " _totalRarityTemp = _totalRarityTemp + _rarity;" \n "" \n "" \n " if (_totalRarityTemp > _randomRarity) exitwith {_selectedAction = _x};" \n " } foreach _civilianActionClasses;" \n "" \n "" \n " /////////////////////////////////////////////////////////////////////////////////////////////" \n " //--- Execute associated FSM" \n " _fsmPath = _selectedAction select 3;" \n " _fsm = _arguments execfsm _fsmPath;" \n " _unit setvariable [""ALICE_action_fsm"",_fsm,true];" \n " _unit setvariable [""ALICE_action"",_selectedaction select 1,true];" \n " _unit setvariable [""ALICE_action_locked"",_selectedAction select 5,true];" \n " /////////////////////////////////////////////////////////////////////////////////////////////" \n "" \n " if (_debug) then {" \n " _id = _unit getvariable ""ALICE_id"";" \n " textLogFormat [""Log: [ALICE] %1 - %2"",_id,_fsmPath];" \n " };" \n "};" \n "" \n "_n = _n + 1;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Return { itemno = 13; priority = 0.000000; to="Loop_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Define { name = "Define"; itemno = 15; init = /*%FSM*/"_twnthreatold =_twnthreat;" \n "_twnthreat = _twn getvariable ""ALICE_threat"";" \n "" \n "//--- Decrease threat level" \n "if (_twnthreat > 0) then {" \n " _decay = _logic getvariable ""threatDecay"";" \n " _twnthreat = _twnthreat - _decay;" \n " if (_twnthreat < 0) then {_twnthreat = 0};" \n " _twn setvariable [""ALICE_threat"",_twnthreat,true];" \n "};" \n "" \n "" \n "//--- Status changed" \n "_twnstatusold =_twnstatus;" \n "_twnstatus = if (_twnthreatold != _twnthreat) then {" \n " _status = ""black"";" \n " _status = if (_twnthreat == 0) then {""green""} else {" \n " if (_twnthreat > 0) then {""red""} else {""black""};" \n " };" \n " _twn setvariable [""ALICE_status"",_status,true];" \n " _status" \n "} else {_twn getvariable ""ALICE_status""};" \n "" \n "_twnstatusChanged = if (_twnstatus != _twnstatusold) then {true} else {false};" \n "" \n "_populationAfter = if (isnil ""_populationAfter"") then {_twn getvariable ""ALICE_population""} else {_populationAfter};" \n "_population = _populationAfter;" \n "_populationAfter = [];" \n "_populationCount = count _population;" \n "_playersNear = _twn getvariable ""ALICE_playersNear"";" \n "" \n "" \n "" \n "//--- Select suitable actions -----------------------------------------------------------" \n "_neighbours = (_twn getvariable ""ALICE_population"");" \n "" \n "" \n "//--- Previous action cannot be repeated" \n "//if (_canrepeat == 0) then {_civilianActionClasses = _civilianActionClasses - [_selectedaction]};" \n "" \n "_arguments = [objnull,_twn,_nearbyTowns];" \n "_civilianActionClasses = [];" \n "{" \n " _condition = _x select 2;" \n " _this = _arguments;" \n " if (call compile _condition) then {_civilianActionClasses = _civilianActionClasses + [_x]};" \n "} foreach _civilianActionsAll;" \n "" \n "" \n "//--- Compose rarities" \n "_totalRarity = 0;" \n "{" \n " _rarity =_x select 4;" \n " _totalRarity = _totalRarity + _rarity;" \n "} foreach _civilianActionClasses;" \n "" \n "xxx = _civilianActionsAll;" \n "yyy = _totalrarity;" \n "" \n "_n = 0;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Return { itemno = 13; priority = 0.000000; to="Loop_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Reset { name = "Reset"; itemno = 16; init = /*%FSM*/"_twn setvariable [""ALICE_population"",_populationAfter,true];" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Continue { itemno = 5; priority = 0.000000; to="Define"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Start { name = "Start"; itemno = 18; init = /*%FSM*/"_twn setvariable [""ALICE_threat"",0,true];" \n "_twn setvariable [""ALICE_status"",""green"",true];" \n "" \n "_twnthreat = 0;" \n "_twnstatus = ""green"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Continue { itemno = 5; priority = 0.000000; to="Define"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="ALICE_2_TOWN"; finalStates[] = { "END", }; }; /*%FSM*//*%FSM*/ /*%FSM*/ /* item0[] = {"START",0,250,-400.000000,-25.000000,-300.000000,25.000000,0.000000,"START"}; item1[] = {"No_Neighbors",4,218,-550.000000,-25.000000,-450.000000,25.000000,1.000000,"No Neighbors"}; item2[] = {"END",1,250,-550.000000,75.000000,-450.000000,125.000000,0.000000,"END"}; item3[] = {"True",8,218,-250.000000,-125.000000,-150.000000,-75.000000,0.000000,"True"}; item4[] = {"Spawn_Car",2,250,-250.000000,175.000000,-150.000000,225.000000,0.000000,"Spawn Car"}; item5[] = {"Exception",2,250,-400.000000,175.000000,-300.000000,225.000000,0.000000,"Exception"}; item6[] = {"Delete",2,250,-700.000000,-125.000000,-600.000000,-75.000000,0.000000,"Delete"}; item7[] = {"Continue_",2,250,-250.000000,-25.000000,-150.000000,25.000000,0.000000,"Continue?"}; item8[] = {"Yes",4,218,-250.000000,75.000000,-150.000000,125.000000,0.000000,"Yes"}; item9[] = {"No",4,218,-400.000000,75.000000,-300.000000,125.000000,1.000000,"No"}; item10[] = {"Safe_Distance",4,4314,-700.000000,175.000000,-600.000000,225.000000,1.000000,"Safe" \n "Distance"}; item11[] = {"Exception",4,218,-400.000000,275.000000,-300.000000,325.000000,1.000000,"Exception"}; item12[] = {"Arrived",4,218,-550.000000,375.000000,-450.000000,425.000000,0.000000,"Arrived"}; item13[] = {"Arrived",2,250,-700.000000,375.000000,-600.000000,425.000000,0.000000,"Arrived"}; item14[] = {"Continue",8,218,-250.000000,375.000000,-150.000000,425.000000,0.000000,"Continue"}; item15[] = {"Move",2,250,-400.000000,375.000000,-300.000000,425.000000,0.000000,"Move"}; item16[] = {"Restart",4,218,-700.000000,475.000000,-600.000000,525.000000,0.000000,"Restart"}; item17[] = {"Restart",2,250,-250.000000,475.000000,-150.000000,525.000000,0.000000,"Restart"}; link0[] = {0,1}; link1[] = {0,3}; link2[] = {1,2}; link3[] = {3,7}; link4[] = {4,14}; link5[] = {5,10}; link6[] = {6,3}; link7[] = {7,8}; link8[] = {7,9}; link9[] = {8,4}; link10[] = {9,2}; link11[] = {10,6}; link12[] = {11,5}; link13[] = {12,13}; link14[] = {13,10}; link15[] = {13,16}; link16[] = {14,15}; link17[] = {15,11}; link18[] = {15,12}; link19[] = {16,17}; link20[] = {17,14}; globals[] = {25.000000,1,0,0,16777215,640,480,1,21,6316128,1,-846.809387,-124.570236,657.285034,-235.827698,727,899,1}; window[] = {2,-1,-1,-1,-1,870,-1266,-6,140,3,744}; *//*%FSM*/ class FSM { fsmName = "ALICE2 - Traffic"; class States { /*%FSM*/ class START { name = "START"; init = /*%FSM*/"_logic = _this select 0;" \n "_twn = _this select 1;" \n "" \n "_debug = _logic getvariable ""debug"";" \n "" \n "_spawnDistance = _logic getvariable ""trafficDistance"";" \n "" \n "_grp = grpnull;" \n "if (isnil {_twn getvariable ""ALICE_group""}) then {" \n " _grp = creategroup civilian;" \n " _twn setvariable [""ALICE_group"",_grp,true];" \n "};" \n "" \n "_neighbors = _twn getvariable ""neighbors"";" \n "if(isNil ""_neighbors"") then {_neighbors = [];};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class No_Neighbors { priority = 1.000000; to="END"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _neighbors == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class True { priority = 0.000000; to="Continue_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class END { name = "END"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Spawn_Car { name = "Spawn_Car"; init = /*%FSM*/"_classlist = _logic getvariable ""ALICE_classes"";" \n "_classlistVehicles = _logic getvariable ""ALICE_classesVehicles"";" \n "_classVehicle = _classlistVehicles call bis_fnc_selectrandom;" \n "_destination = _neighbors call bis_fnc_selectrandom;" \n "" \n "//--- Determine radius" \n "_twnSize = _twn getvariable ""ALICE_townsize"";" \n "if (isnil ""_twnSize"") then {_twnSize = _logic getvariable ""ALICE_townsize""};" \n "_destinationSize = _destination getvariable ""ALICE_townsize"";" \n "if (isnil ""_destinationSize"") then {_destinationSize = _logic getvariable ""ALICE_townsize""};" \n "" \n "//--- Find roads" \n "_twnRoads = _twn nearroads _twnSize;" \n "_twnPos = if (count _twnRoads > 0) then {_twnRoads call bis_fnc_selectrandom} else {_twn};" \n "_destinationRoads = _destination nearroads _destinationSize;" \n "_destinationPos = if (count _destinationRoads > 0) then {_destinationRoads call bis_fnc_selectrandom} else {_destination};" \n "" \n "//--- Select driver" \n "_classlistMen = [];" \n "{" \n " _class = _x select 0;" \n " _rarity = _x select 1;" \n " _faction = _x select 2;" \n " _woman = _x select 3;" \n " if (_woman == 0 && _faction in (_twn getVariable [""demography"", _logic getvariable ""townsFaction""])) then {" \n " _classlistMen = _classlistMen + [_class];" \n " };" \n "} foreach _classlist;" \n "_classMan = _classlistMen call bis_fnc_selectrandom;" \n "" \n "//--- Spawn vehicle" \n "_car = createvehicle [_classVehicle,position _twnPos,[],300,""none""];" \n "_car setdir direction _twnPos;" \n "_grp = _twn getvariable ""ALICE_group"";" \n "_driver = _grp createunit [_classMan,position _car,[],0,""none""];" \n "_driver setSkill 0.5;" \n "{_driver disableAI _x} count [""AUTOTARGET"",""TARGET""];" \n "_driver allowFleeing 0;" \n "_driver assignasdriver _car;" \n "_driver setbehaviour ""SAFE"";" \n "_driver moveindriver _car;" \n "" \n "_cargo = getNumber(configFile >> ""CfgVehicles"" >> _classVehicle >> ""transportSoldier"");" \n "for ""_i"" from 0 to floor(random _cargo) do {" \n " _classManx = _classlistMen call bis_fnc_selectrandom;" \n " _cargoMan = _grp createunit [_classManx,position _car,[],0,""none""];" \n " _cargoMan setSkill 0;" \n " _cargoMan assignascargo _car;" \n " _cargoMan setbehaviour ""SAFE"";" \n " _cargoMan moveincargo _car; " \n "" \n " //--- Custom init" \n " _globalInit = _logic getvariable ""ALICE_civilianinit"";" \n " _localInit = _twn getvariable ""ALICE_civilianinit"";" \n " if !(isnil ""_globalInit"") then {{_cargoMan call _x} foreach _globalInit};" \n " if !(isnil ""_localInit"") then {{_cargoMan call _x} foreach _localInit};" \n "};" \n "" \n "_marker = """";" \n "//--- Debug mode, halellujah" \n "if (_debug) then {" \n " _markertext = format [""%1-%2"",_twn, floor(random 9999)];" \n " _marker = createmarker [_markertext,position _driver];" \n " _marker setmarkertype ""Dot"";" \n " _marker setmarkersize [0.5,0.5];" \n " _marker setmarkertext _markertext;" \n " _marker setmarkercolor ""coloryellow"";" \n " _driver setvariable [""ALICE_marker"",_marker,true];" \n " [_marker,_driver] spawn {" \n " _marker = _this select 0;" \n " _driver = _this select 1;" \n " while {alive _driver} do {" \n " _marker setmarkerpos position vehicle _driver;" \n " sleep 0.1;" \n " };" \n " };" \n "};" \n "_fsmFormation = _driver execfsm ""ca\modules_e\alice2\data\fsms\alice2Formation.fsm"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Continue { priority = 0.000000; to="Move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Exception { name = "Exception"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Safe_Distance { priority = 1.000000; to="Delete"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"{(position _car) distance _x < _spawnDistance} count ([] call BIS_fnc_listPlayers) == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Delete { name = "Delete"; init = /*%FSM*/"_cargo = assignedCargo _car;" \n "{" \n " deletevehicle _x;" \n "} forEach _cargo;" \n "if (_debug) then {" \n " deleteMarker (_driver getvariable ""ALICE_marker"");" \n "};" \n "deletevehicle _driver;" \n "deletevehicle _car;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class True { priority = 0.000000; to="Continue_"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Continue_ { name = "Continue_"; init = /*%FSM*/"_timeNow = time;" \n "_delay = random 15;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class No { priority = 1.000000; to="END"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((_twn getvariable ""ALICE_active_traffic"") == 0)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Yes { priority = 0.000000; to="Spawn_Car"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_twn getvariable ""ALICE_active"")" \n " && " \n "//(_twn getvariable ""ALICE_threat"") <= 0" \n "// && " \n "(time - _timeNow > _delay)" \n "&&" \n "{(position _twn) distance _x < _spawnDistance} count ([] call BIS_fnc_listPlayers) > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Arrived { name = "Arrived"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Safe_Distance { priority = 1.000000; to="Delete"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"{(position _car) distance _x < _spawnDistance} count ([] call BIS_fnc_listPlayers) == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Restart { priority = 0.000000; to="Restart"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Move { name = "Move"; init = /*%FSM*/"_driver domove position _destinationPos;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Exception { priority = 1.000000; to="Exception"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"vehicle _driver == _driver || !alive _driver || !alive _car || !canmove _car"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Arrived { priority = 0.000000; to="Arrived"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"unitready _driver || {(position _car) distance _x < _spawnDistance * 1.2} count ([] call BIS_fnc_listPlayers) == 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Restart { name = "Restart"; init = /*%FSM*/"_twnPos = if (count _twnRoads > 0) then {_twnRoads call bis_fnc_selectrandom} else {_twn};" \n "_destinationPos = _twnPos;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Continue { priority = 0.000000; to="Move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="START"; finalStates[] = { "END", }; }; /*%FSM*/scriptName "Alice2\data\scripts\fnc_civilianSet.sqf"; /* File: fnc_civilianSet.sqf Author: Karel Moricky Description: Sets basic ALICE 2 values for civilian unit Parameter(s): _this select 0: Object - Unit _this select 1: Object - Town _this select 2: Object - House */ private ["_grp","_class","_pos","_unit","_movein","_twns","_houses","_pointPos","_pointMarker","_posList","_point","_color","_marker","_spawnpos","_topic","_path","_bikb","_fsm","_markerx","_logic","_debug","_twn","_house","_id","_moves","_allTopics","_globalInit","_localInit","_add"]; _logic = bis_alice_mainscope; _debug = _logic getvariable "debug"; _movein = false; _unit = _this select 0; if (typename _unit == typename "") then { _grp = if (count _this > 1) then {(_this select 1) getvariable "ALICE_group"} else {createcenter civilian; creategroup civilian;}; _class = _unit; _pos = if (count _this > 2) then {position (_this select 2)} else { if (count _this > 1) then {position (_this select 1)} else {[1,1,1]}; }; _unit = _grp createUnit [_class, _pos, [], 0, "NONE"]; //_unit allowdamage false; _movein = true; }; _twn = if (count _this > 1) then {_this select 1} else { _twns = position _unit nearEntities ["LocationLogicCityCenter",100000]; //--- TODO GITA if (count _twns > 0) then{ _twns select 0; } else {debuglog format ["Log: [ALICE] Cannot add %1 - no towns available!",_unit];false}; }; if (typename _twn == "BOOL") exitwith {}; _house = if (count _this > 2) then {_this select 2} else { _houses = nearestobjects [position _twn,["bis_alice_emptydoor"],500]; if (count _houses > 0) then { _houses call BIS_fnc_selectRandom; } else { _houses = nearestobjects [position _twn,["house"],500]; if (count _houses > 0) then { _houses call BIS_fnc_selectRandom; } else {debuglog format ["Log: [ALICE] Cannot add %1 - no houses available in %2!",_unit,_twn];false}; }; }; if (typename _house == "BOOL") exitwith {}; _id = _logic getvariable "id"; [_logic,"id",1,true] call bis_fnc_variablespaceadd; sleep 0.01; //--- Set values if (_movein && _house isKindOf "bis_alice_emptydoor") then { _unit setpos position _house; }; if (_movein && _house isKindOf "house") then { scopename "moveIn"; _marker = if (_debug) then {_house call BIS_fnc_boundingBoxMarker;} else {""}; //--- In da house _posList = []; for "_i" from 0 to 10 do { _point = _house selectionposition format ["AIspawnpos_%1",_i]; if (_point distance [0,0,0] > 0.1) then { _posList = _posList + [_point]; if (_debug) then { _pointPos = _house modeltoworld _point; _pointMarker = createmarker [format ["X%1",floor random 99999],_pointpos]; _pointMarker setmarkertype "mil_dot"; _pointMarker setmarkercolor "colorpink"; }; } else {breakto "moveIn"}; }; if (_debug) then { _color = if (count _posList > 0) then {"colorgreen"} else {"colorred"}; _marker setmarkercolor _color; }; if (count _posList == 0) then {_posList = [[0,0,0]]}; _spawnpos = _house modeltoworld (_posList call bis_fnc_selectrandom); _unit setposatl _spawnpos; _unit setskill (random 0.5); _unit setvelocity [0,0,0]; }; [_unit] join (_twn getvariable "ALICE_group"); _unit forcewalk true; _unit setbehaviour "safe"; _unit setvariable ["ALICE_id",_id,true]; _unit setvariable ["ALICE_twn",_twn,true]; _unit setvariable ["ALICE_home",_house,true]; _unit setvariable ["ALICE_randomValue",random 1,true]; _unit setvariable ["ALICE_action","",true]; _unit setvariable ["ALICE_action_fsm",-1,true]; _unit setvariable ["ALICE_type",getnumber(configfile >> "cfgvehicles" >> typeof _unit >> "characterID"),true]; _moves = gettext(configfile >> "cfgvehicles" >> typeof _unit >> "moves"); _unit setvariable ["ALICE_moves",_moves,true]; ["ADD",_unit,0.1] call BIS_fnc_respect; _fsm = _unit execfsm "ca\modules_e\alice2\data\fsms\alice2Formation.fsm"; _unit setvariable ["ALICE_fsm",_fsm,true]; //if (_id == 33) then {diag_debugFSM _fsm}; //--- Add conversation topics _allTopics = _logic getvariable "ALICE_topics"; for "_i" from 0 to (count _allTopics - 1) step 2 do { _topic = _allTopics select _i; _path = _allTopics select (_i + 1); _bikb = _path + "CfgCivilianConversations.bikb"; _fsm = _path + "CfgCivilianConversations.fsm"; _unit kbaddtopic [_topic, _bikb, _fsm]; }; sleep 0.01; //--- Storing variables //[_twn,"ALICE_populationCountDef",1,true] call bis_fnc_variablespaceadd; _add = [_twn,"ALICE_population",[_unit]] call bis_fnc_variablespaceadd; debuglog str ["Log::::::::::::",_unit,typeof _unit,count _add]; //--- Event Handlers _unit addeventhandler ["hit",{_this call BIS_ALICE2_fnc_civilianHit}]; _unit addeventhandler ["killed",{_this call BIS_ALICE2_fnc_civilianKilled}]; //--- Custom init _globalInit = _logic getvariable "ALICE_civilianinit"; _localInit = _twn getvariable "ALICE_civilianinit"; if !(isnil "_globalInit") then {{_unit call _x} foreach _globalInit}; if !(isnil "_localInit") then {{_unit call _x} foreach _localInit}; //--- Reacting to danger /* 0 - DCEnemyDetected - the first enemy detected 1 - DCFire - fire visible 2 - DCHit - vehicle hit 3 - DCEnemyNear - enemy very close to me 4 - DCExplosion, - explosion detected 5 - DCDeadBodyGroup - dead soldier from my group found 6 - DCDeadBody - other dead soldier found 7 - DCScream - hit soldier screaming */ [_unit,"BIS_dangerHandler",[{scriptname 'ALICE: dangerHandler'; _unit = _this select 0; _danger = _this select 1; _twn = _unit getvariable "alice_twn"; _dangerCoef = 0.03; debuglog str ["Log:::::::::::::::::::DEAD",["DCEnemyDetected","DCFire","DCHit","DCEnemyNear","DCExplosion","DCDeadBodyGroup","DCDeadBody","DCScream"] select _danger]; //--- Clear & Present Danger if (_danger >= 0) then { _newstatus = [_twn,"ALICE_threat",(1 + _danger)*_dangerCoef,true] call bis_fnc_variablespaceadd; }; if (random 1 > 0.666) then { if (_danger == 1 || _danger == 4 || _danger == 6) then { _screams = bis_alice_mainscope getVariable "ALICE_screams"; _ran = floor random count _screams; _selectId = _ran - (_ran % 2); _topic = "ALICE_" + (_screams select _selectId); _sentences = _screams select (_selectId + 1); _sentenceId = _sentences call bis_fnc_selectrandom; //_sentenceId = format ["ALICE_Scream_0%1",ceil random 8]; //_topic = "ALICE_BIS"; _unit kbtell [_unit,_topic,_sentenceId]; }; }; }]] call bis_fnc_variablespaceadd; //--- Behold the mighty debug mode! _marker = ""; if (_debug) then { _marker = createmarker [format ["BIS_alice_civ_%1",_id],position _unit]; _marker setmarkertypelocal "dot"; _marker setmarkercolor "colorwhite"; _marker setmarkersizelocal [.6,.6]; _marker setmarkertextlocal str(_id); _unit setvariable ["ALICE_marker",_marker,true]; _markerx = createmarker [format ["BIS_alice_civ_%1_w",_id],position _unit]; _markerx setmarkertypelocal "mil_destroy"; _markerx setmarkerdirlocal 45; _markerx setmarkersizelocal [0.3,0.3]; _markerx setmarkertext (str _id); _markerx setmarkercolor "colorwhite"; [_unit,_marker,_markerx] spawn { private ["_color","_twn","_threat","_ed","_unit","_marker","_markerx"]; _unit = _this select 0; _marker = _this select 1; _markerx = _this select 2; while {alive _unit} do { _twn = _unit getvariable "ALICE_twn"; _threat = _twn getvariable "ALICE_threat"; _color = "colorwhite"; if (_threat >= 0) then {_color = "color" + (_twn getvariable "ALICE_status")}; if (_twn == _unit) then {_color = "coloryellow"}; _marker setmarkercolor _color; _marker setmarkerpos position vehicle _unit; _ed = (expecteddestination _unit) select 0; _markerx setmarkerpos _ed; sleep 0.1; }; _marker setmarkertype "mil_dot"; _marker setmarkercolor "colorbrown"; if (isnull _unit) then {deletemarker _marker}; deletemarker _markerx; }; }; true; private ["_logicFnc","_twnlist","_locationParams","_create","_twnlistTemp","_i","_rarity","_faction","_classlist","_classlistVehicles","_scope","_side","_woman","_class","_vehicleclass","_actual","_condition","_fsm","_locked","_canrepeat","_initVariables","_init","_allActions","_action","_tempArrayx","_civilianActions","_source","_allActionsx","_allTopics","_endSentences","_tempArray","_element","_type","_topic","_path","_category","_screams","_scream","_categoryId","_oldScreams","_allScreams","_Remarks","_oldRemarks","_allRemarks","_civilianConversations","_civilianScreams","_civilianRemarks","_factionCiv","_logic","_debug","_initArray","_distlimit","_trafficDistance","_twnSize","_civilianCount","_actionCategories","_kbCategories","_townsFaction","_blacklist","_respectModifyCoef","_threatDecay","_unitrarity","_totobj","_allConversations","_twnrespect"]; scriptName "Alice2\data\scripts\main.sqf"; /* File: main.sqf Author: Karel Moricky Description: Init script - Ambient Life In Civilian Environment 2 Parameter(s): _this: Alice2 logic unit which triggered this script. */ _logic = _this select 0; _logic setpos [1,1,1]; //--- Default values _logic setvariable ["id",0,true]; _logic setvariable ["pause",true,true]; createcenter west; createcenter east; createcenter resistance; createcenter civilian; //--- File paths BIS_Alice2_path = "ca\modules_e\alice2\data\"; //--- Is Garbage collector running? if (isnil "BIS_GC_trashItFunc") then {(group _logic) createUnit ["GarbageCollector", position player, [], 0, "NONE"]}; //--- Execute Functions if (isnil "bis_fnc_init") then { _logicFnc = (group _logic) createunit ["FunctionsManager",position player,[],0,"none"]; }; waituntil {!isnil "BIS_fnc_init"}; //--- Wait for functions if (!isnil "bis_gita_0") then {waituntil {!isnil "bis_gita_init"}}; //--- If present, wait for GITA (town generator) /////////////////////////////////////////////////////////////////////////////////// ///// Custom params /////////////////////////////////////////////////////////////////////////////////// //--- Debug _debug = if (isnil {_logic getvariable "debug"}) then {false} else {true}; _logic setvariable ["debug",_debug,true]; //--- Civilian init _initArray = if (isnil {_logic getvariable "initArray"}) then {[]} else {_logic getvariable "initArray";}; _logic setvariable ["initArray",_initArray,true]; //--- Spawn distance _distlimit = if (isnil {_logic getvariable "spawnDistance"}) then {400} else {_logic getvariable "spawnDistance"}; _logic setvariable ["spawnDistance",_distLimit,true]; //--- Traffic distance _trafficDistance = if (isnil {_logic getvariable "trafficDistance"}) then {500} else {_logic getvariable "trafficDistance"}; _logic setvariable ["trafficDistance",_trafficDistance,true]; //--- Town size _twnSize = if (isnil {_logic getvariable "ALICE_townsize"}) then {_distLimit * 2/3} else {_logic getvariable "ALICE_townsize";}; _logic setvariable ["ALICE_townsize",_twnSize,true]; //--- Civilian count _civilianCount = if (isnil {_logic getvariable "civilianCount"}) then {"round (4 * (sqrt %1))"} else {_logic getvariable "civilianCount";}; _logic setvariable ["civilianCount",_civilianCount,true]; //--- Civilian actions _actionCategories = if (isnil {_logic getvariable "civilianActions"}) then {["BIS"]} else {_logic getvariable "civilianActions";}; _logic setvariable ["civilianActions",_actionCategories,true]; //--- Civilian conversations _kbCategories = if (isnil {_logic getvariable "civilianConversations"}) then {["BIS"]} else {_logic getvariable "civilianConversations";}; _logic setvariable ["civilianConversations",_kbCategories,true]; //--- Towns faction _townsFaction = if (isnil {_logic getvariable "townsFaction"}) then {["BIS_TK_CIV"]} else {_logic getvariable "townsFaction";}; _logic setvariable ["townsFaction",_townsFaction,true]; //--- Object blacklist _blacklist = if (isnil {_logic getvariable "blacklist"}) then {[]} else {_logic getvariable "blacklist";}; _logic setvariable ["blacklist",_blacklist,true]; //--- Respect modify _respectModifyCoef = if (isnil {_logic getvariable "respectModifyCoef"}) then {0.15} else {_logic getvariable "respectModifyCoef"}; _logic setvariable ["respectModifyCoef",_respectModifyCoef,true]; //--- ThreatDecay _threatDecay = if (isnil {_logic getvariable "threatDecay"}) then {0.07} else {_logic getvariable "threatDecay"}; _logic setvariable ["threatDecay",_threatDecay,true]; //--- Town list _twnlist = []; if (isnil {_logic getvariable "townlist"}) then { _locationParams = if (_debug) then {[["CityCenter"],[],true]} else {[["CityCenter"]]}; _create = _locationParams call bis_fnc_locations; //waituntil {count _create > 0}; waituntil {count (bis_functions_mainscope getvariable "locations") > 0}; { if ((_x getvariable "type") == "CityCenter") then {_twnlist = _twnlist + [_x]}; } foreach (bis_functions_mainscope getvariable "locations"); _logic setvariable ["townlist",_twnlist,true]; } else { _twnlistTemp = _logic getvariable "townlist"; { //--- Array if (typename _x == "ARRAY") then { _locationParams = if (_debug) then {[["CityCenter"],_x,true]} else {[["CityCenter"],_x]}; _create = _locationParams call bis_fnc_locations; {if !(_x in _twnlist) then {_twnlist = _twnlist + [_x]}} foreach _create; } else { if (typename _x == "OBJECT") then { if (typeof _x != "EmptyDetector") then { //--- City logic if (isnil {_x getvariable "class"}) then {[[_x]] call bis_fnc_locations}; _twnlist = _twnlist + [_x]; } else { //--- Trigger _locationParams = if (_debug) then {[["CityCenter"],_x,true]} else {[["CityCenter"],_x]}; _create = _locationParams call bis_fnc_locations; {if !(_x in _twnlist) then {_twnlist = _twnlist + [_x]}} foreach _create; }; }; }; } foreach _twnlistTemp; }; _logic setvariable ["ALICE_alltowns",_twnlist,true]; /////////////////////////////////////////////////////////////////////////////////// ///// Civilian & Vehicles Classes /////////////////////////////////////////////////////////////////////////////////// _unitrarity = if (format ["%1",_logic getvariable "civilianRarity"] == "") then {[]} else {_logic getvariable "civilianRarity";}; _logic setvariable ["civilianRarity",_unitrarity,true]; _classlist = []; _classlistVehicles = []; _totobj = count (configfile >> "cfgVehicles"); for [{_i = 0}, {_i < _totobj}, {_i = _i + 1}] do { _actual = (configfile >> "cfgVehicles") select _i; if (isclass _actual) then { _class = configname _actual; _vehicleclass = gettext (configfile >> "cfgvehicles" >> _class >> "vehicleClass"); if !(_vehicleclass in ["Sounds","Mines"]) then { _scope = getnumber (_actual >> "scope"); _side = getnumber (_actual >> "side"); _woman = getnumber (_actual >> "woman"); //--- Civilians if (_class iskindof "civilian" && _scope == 2) then { _rarity = if (_class in _unitrarity) then { _unitrarity select ((_unitrarity find _class)+1); } else { getnumber (_actual >> "rarityUrban"); }; _faction = gettext (_actual >> "faction"); _classlist = _classlist + [[_class,_rarity,_faction,_woman]]; }; //--- Civilian Cars if (_vehicleclass == "Car" && _side == 3 && _scope == 2) then { _classlistVehicles = _classlistVehicles + [_class]; }; }; }; }; _logic setvariable ["ALICE_classes",_classlist,true]; _logic setvariable ["ALICE_classesVehicles",_classlistVehicles,true]; /////////////////////////////////////////////////////////////////////////////////// ///// Civilian Actions /////////////////////////////////////////////////////////////////////////////////// _allActionsx = []; _allActions = []; for "_i" from 0 to 2 do { _source = [configfile,missionconfigfile,campaignconfigfile] select _i; _tempArrayx = []; { _civilianActions = _source >> "CfgCivilianActions_EP1" >> _x; if (str _civilianActions != "") then { _tempArrayx = _tempArrayx + [_civilianActions]; for "_i" from 0 to (count _civilianActions - 1) do { _action = _civilianActions select _i; if (isclass _action) then { _condition = gettext(_action >> "condition"); _fsm = gettext(_action >> "fsm"); _rarity = getnumber(_action >> "rarity"); _locked = getnumber(_action >> "locked"); _canrepeat = getnumber(_action >> "canRepeat"); _initVariables = getarray(_action >> "initVariables"); _init = gettext(_action >> "init"); _allActions = _allActions + [ [ /* 0 */ _action, /* 1 */ configname _action, /* 2 */ _condition, /* 3 */ _fsm, /* 4 */ _rarity, /* 5 */ _locked, /* 6 */ _canrepeat, /* 7 */ _initVariables, /* 8 */ _init ] ]; }; }; }; } foreach _actionCategories; _allActionsx = _allActionsx + [_tempArrayx]; }; _logic setvariable ["ALICE_actionsx",_allActionsx,true]; _logic setvariable ["ALICE_actions",_allActions,true]; /////////////////////////////////////////////////////////////////////////////////// ///// Civilian Conversations /////////////////////////////////////////////////////////////////////////////////// _allConversations = [[],[],[],[]]; _allTopics = []; _allScreams = []; _allRemarks = []; for "_i" from 0 to 2 do { _source = [configfile,missionconfigfile,campaignconfigfile] select _i; _tempArray = []; { _civilianConversations = _source >> "CfgCivilianConversations_EP1" >> _x; for "_i" from 0 to (count _civilianConversations - 1) do { _topic = "ALICE_" + (configname _civilianConversations); _path = gettext (_civilianConversations >> "path"); if !(_topic in _allTopics) then {_allTopics = _allTopics + [_topic,_path]}; _category = _civilianConversations select _i; if (isclass _category) then { _type = getnumber (_category >> "type"); _tempArray = _allConversations select _type; for "_c" from 0 to (count _category - 1) do { _element = _category select _c; if (isclass _element) then { _endSentences = getarray (_element >> "endSentences"); _tempArray = _tempArray + [[(configname _civilianConversations),configname _element,_endSentences]]; }; }; _allConversations set [_type,_tempArray]; }; }; //--- Screams _civilianScreams = _source >> "CfgCivilianScreams_EP1" >> _x; _screams = []; for "_i" from 0 to (count _civilianScreams - 1) do { _scream = _civilianScreams select _i; if (isclass _scream) then { _screams = _screams + [configname _scream]; }; }; if (_x in _allscreams) then { _categoryId = (_allScreams find _x) + 1; _oldScreams = _allScreams select _categoryId; _allScreams set [_categoryId,_oldScreams + _screams]; } else { _allScreams = _allScreams + [_x,_screams]; }; //--- Remarks _civilianRemarks = _source >> "CfgCivilianRemarks_EP1" >> _x; _remarks = []; for "_i" from 0 to (count _civilianRemarks - 1) do { _scream = _civilianRemarks select _i; if (isclass _scream) then { _Remarks = _Remarks + [configname _scream]; }; }; if (_x in _allRemarks) then { _categoryId = (_allRemarks find _x) + 1; _oldRemarks = _allRemarks select _categoryId; _allRemarks set [_categoryId,_oldRemarks + _Remarks]; } else { _allRemarks = _allRemarks + [_x,_remarks]; }; } foreach _kbCategories; }; _logic setvariable ["ALICE_conversations",_allConversations,true]; _logic setvariable ["ALICE_screams",_allScreams,true]; _logic setvariable ["ALICE_remarks",_allRemarks,true]; _logic setvariable ["ALICE_topics",_allTopics,true]; /////////////////////////////////////////////////////////////////////////////////// ///// Execute /////////////////////////////////////////////////////////////////////////////////// _fsm = _logic execfsm (BIS_Alice2_path + "fsms\alice2.fsm"); /////////////////////////////////////////////////////////////////////////////////// ///// Towns /////////////////////////////////////////////////////////////////////////////////// //debuglog format ["Log: ALICE 2: Initializing ...",_twnname]; _twnrespect = ["SET"] call BIS_fnc_respect; { _factionCiv = [_x] call BIS_fnc_getFactions; _twnrespect set [_factionCiv,0.5]; } forEach _townsFaction; /* { _type = _x getvariable "type"; _name = _x getvariable "name"; _pos = position _x; if (isnil {_x getvariable "respect"}) then {_x setVariable ["respect",_twnrespect,true]}; _x setVariable ["ALICE_active",false,true]; _x setVariable ["ALICE_active_traffic",0,true]; _x setvariable ["ALICE_threat",-1,true]; _x setvariable ["ALICE_status","black",true]; _x setVariable ["ALICE_population",[],true]; _x setVariable ["ALICE_populationCount",-1,true]; _fsm = [_x,_classlist] execfsm (BIS_Alice2_path + "fsms\alice2.fsm"); _x setvariable ["ALICE_fsm",_fsm,true]; //if (_x == bis_loc_acityc_khelm) then {diag_debugfsm _fsm}; //sleep .1; } foreach _twnlist; _logic setvariable ["pause",false,true]; */ debuglog format ["Log: ALICE 2: Initialized (%1 towns).",count _twnlist]; bis_alice2_init = true; private "_code"; _code = _this select 3; if ((typeName _code) == "ARRAY") then { { call compile format ["%1", _x]; } forEach _code; } else { call compile format [ "%1", _code]; }; GGATCGVAGGATGALFGGATSFFO@pw~ UUUUUUUU-m۶m#QUUU5Զmۆ$UUI$~` UUWJI$I$IJUUUTUUUUUUUUUUUU7m[bU5=M$\AXWU}$Ir AWUU $Iy UU$ApU϶mۅڶUUTPUUUU1m۶a;ӜUU\ځM}!qZTV gޏ!% "(B`? HAH$I$BTWUUG㉘!qM5I$I$AUUUVI 55X-۰m)JTWUU_H$L$ cP&x' P\\TUUUUUUUUIDI6M۱=ӜWVTVڶb+6by55r ۳ۯ{UUWTx&bT\P?nm۶-EmkUUUUUUUUUUUUUUU ^cm cUUUݱ !T\SIo6j %U$E)WCZzI$H$UWTWUUUUUUUUUUUU Fb#mUUI'Ĝ U\% ѶmUUUMةg] UVpI$I$AUUUVUUUUUUUUUUUUUUUUI$I$UUU$I$u UUU̕ !p^U H$I$bTUUUUUUUUUUUp,sUU5gIr P cAU 'uI9,c Ux wI$O' cUUWTj9*Q cAIqP`.0 bb&I$\!PZUUz[r=Y6ZPsaie^` c aMCs!b -)\y!U_PX$I$AiUUUɗI$ c5UUf-H1ZA-U~&b$!WXXWUUUU@7a -~:xQ W~|6v =؄MӜ WTVVo_E6Q}ss}N%2IJ$!T\\:;ZGGATCGVAGGATGALFGGATSFFO@pw~ UUUUUUUUI$IXqUUU5׶mۆ$UUI$~` UUWLI$I$iJUUUTUUUUUUUUUUUU9m[bU5=Mqsyܶb'p&M$!\^WWooȖ60b}C}P: R9V^^JKaddActions = { //check if MHQ damaged - remove deploy action _hqdamaged = ((damage MHQ)>0.9); if (!alive MHQ && _hqdamaged) then { player removeAction actionHQDeploy; actionHQDeploy = nil; }; if !isNil "actionHQDeploy" then { player removeAction actionHQDeploy; actionHQDeploy = nil; }; actionHQDeploy = player addAction ["Deploy HQ","common\client\actions\noScript.sqf",' _campArray = ["HeliH","MASH_EP1","US_WarfareBVehicleServicePoint_EP1","Land_fortified_nest_small_EP1"]; _houseArray = ["HouseBase"]; _checkHouseCount = (nearestObjects [MHQ, _houseArray, 30]) - (nearestObjects [MHQ, _campArray, 30]); if (count _checkHouseCount == 0) then { _pos = getPosATL MHQ; if (count (_pos isFlatEmpty [0,0,0.2,20,0,false,MHQ]) == 0) exitWith { player groupChat "Cannot deploy here. The terrain is unsuitable"; }; { moveOut _x } forEach crew MHQ; MHQ setPosATL spawnPos; sleep 0.5; HQ setPosATL _pos; HQ setDir getDir MHQ; HQ setVariable ["hqdT",time,true]; } else {player groupChat "You cant deploy HQ near buildings!";}; ',1,false,true,"",'vehicle _target == _target && _target distance MHQ < 4']; /* if !isNil "actionHQMobilise" then { HQ removeAction actionHQMobilise; actionHQMobilise = nil; }; actionHQMobilise = HQ addAction ["Mobilise HQ","common\client\actions\noScript.sqf",' if (lifeState player == "UNCONSCIOUS") exitWith {}; if (mhqDeployTimer == -1) exitWith { player groupChat "The HQ is bolted in place, you cannot redeploy!"; }; _timePassed = HQ getVariable ["hqdT",0]; _dT = mhqDeployTimer - (time - _timePassed); if (_dT > 0 && _timePassed != 0) exitWith { player groupChat format ["You have to wait approx. %1 minutes to mobilize the MHQ.", (round((abs _dT)/60))]; }; _leader = call compile squadLeader(player); _str = "You need a squad leader to mobilise the HQ"; if (isNil "_leader") exitWith { player groupChat _str; }; if (isNull _leader || !isPlayer _leader) exitWith { player groupChat _str; }; if (!alive _leader || isDead(_leader)) exitWith { player groupChat "Your squad leader is dead!"; }; player sideChat format["Sent request to %1 (%2).", unitID(_leader), getName(_leader)]; [nil,_leader,"loc",rSPAWN,player,{ requestingPlayer = _this; player sideChat format["%1, (%2) is requesting permission to mobilise the HQ. Accept?", unitID(_this), getName(_this)]; showCommandingMenu "#USER:query_Menu_MHQ"; }] call RE; ',1,false,true,"",'']; */ if !isNil "actionBagsDeploy" then { player removeAction actionBagsDeploy; actionBagsDeploy = nil; }; actionBagsDeploy = player addAction ["Deploy nest","common\client\actions\noScript.sqf"," _cT = cursorTarget; _bags = call compile format[""bags%1"", _cT]; _pos = _cT modelToWorld [0,-5,0]; _bags setDir (getDir _cT); _bags setPosATL [_pos select 0,_pos select 1,0]; ",1,false,true,"",' _cT = cursorTarget; if !isNull _cT then { if (!(typeOf _cT in (westVehicleClasses-[ATVTYPE]-[HELITYPE])) || !alive _cT) exitWith {}; _pos = _cT modelToWorld [0,-3,0]; _bags = call compile format["bags%1", _cT]; alive _cT && player distance _pos < 3 && _bags distance spawnPos < 50 }; ']; if !isNil "actionBagsLoad" then { player removeAction actionBagsLoad; actionBagsLoad = nil; }; actionBagsLoad = player addAction ["Load nest","common\client\actions\noScript.sqf"," cursorTarget setPosATL [0,0,0]; ",1,false,true,"",' _cT = cursorTarget; if !isNull _cT then { if !(typeOf _cT == "Land_fortified_nest_small_EP1") exitWith {}; _vcl = call compile format["humv1%1", unitNumber(_cT)]; player distance _cT < 3 && _cT distance _vcl < 10 }; ']; if !isNil "actionTyre" then { player removeAction actionTyre; actionTyre = nil; }; actionTyre = player addAction ["Change tyre","common\client\actions\noScript.sqf","[] spawn changeTyre",1,false,true,"",' _cT = cursorTarget; if !isNull _cT then { if !(typeOf _cT in westVehicleClasses) exitWith {}; alive _cT && !canMove _cT && _cT call getTyre != ""; }; ']; if !isNil "actionRearm" then { player removeAction actionRearm; actionRearm = nil; }; actionRearm = player addAction ["Rearm stationary weapon","common\client\actions\noScript.sqf"," _vcl = cursorTarget; player groupChat ""rearming...""; player playMove ""ainvpknlmstpslaywrfldnon_medic""; curTime = time; waitUntil{ animationState player == ""ainvpknlmstpslaywrfldnon_medic""}; waitUntil{ animationState player != ""ainvpknlmstpslaywrfldnon_medic""}; if (time - curTime > 7) then { _vcl setVehicleAmmo 1; }; ",1,false,true,"",' _cT = cursorTarget; if !isNull _cT then { _cT isKindOf "staticWeapon" && alive _cT } ']; if !isNil "doRepairVecs" then { player removeAction doRepairVecs; doRepairVecs = nil; }; doRepairVecs = player addAction ["Repair Vehicles","common\client\actions\noScript.sqf",' _timePas = HQ getVariable ["RepVecs",0]; _rT = 60 - (time - _timePas); if (_rT > 0 && _timePas != 0) exitWith { player groupChat format ["You have to wait approx. %1 minutes to repair vehicles near MHQ.", (round((abs _rT)/60))]; }; _gleader = call compile squadLeader(player); _str = "Only squad leader can repair vehicles near HQ!"; if (isNil "_gleader") exitWith { player groupChat _str; }; if (isNull _gleader || !isPlayer _gleader) exitWith { player groupChat _str; }; for "_i" from 0 to (count westVehicleStrings - 1) do { _str = westVehicleStrings select _i; _vcl = call compile _str; if (typeName _vcl=="OBJECT") then { if (damage _vcl < 0.99 && _vcl distance (baseflag) < 40 && !(player in _vcl)) then { _vcl setDamage 0; hint "Vehicles Repaired!"; HQ setVariable ["RepVecs",time,true]; }; }; }; ',1,false,true,"",' vehicle _target == _target && _target distance HQ < 7 ']; }; changeTyre = { private ["_vcl","_tyre"]; _vcl = cursorTarget; _tyre = _vcl call getTyre; player groupChat "changing tyre..."; player playMove "ainvpknlmstpslaywrfldnon_medic"; sleep 3; waitUntil { animationState player != "ainvpknlmstpslaywrfldnon_medic"}; [nil, nil, rSPAWN, [_vcl, _tyre], { (_this select 0) setHit [_this select 1, 0]; (_this select 0) setVelocity[0,0,1]; }] call RE; }; getTyre = { private ["_offset","_pos"]; _offset = [-1,1.7,-2]; _pos = _this modelToWorld _offset; if (player distance _pos < 1.5 && canSee(player,_pos,45)) exitWith { "wheel_1_1_steering" }; _offset = [-1,-1.7,-2]; _pos = _this modelToWorld _offset; if (player distance _pos < 1.5 && canSee(player,_pos,45)) exitWith { "wheel_1_2_steering" }; _offset = [1,1.7,-2]; _pos = _this modelToWorld _offset; if (player distance _pos < 1.5 && canSee(player,_pos,45)) exitWith { "wheel_2_1_steering" }; _offset = [1,-1.7,-2]; _pos = _this modelToWorld _offset; if (player distance _pos < 1.5 && canSee(player,_pos,45)) exitWith { "wheel_2_2_steering" }; }; addActionWearBelt = { if !isNil "CanWearBelt" then { _this removeAction CanWearBelt; CanWearBelt = nil; }; CanWearBelt = _this addAction ["Wear belt","common\client\actions\noScript.sqf",' if !isNil ((_this select 0) getVariable "BeltWorn") exitWith {} ; _this select 0 removeAction (_this select 2); _this select 0 removeMagazine "BAF_ied_v3"; _this select 0 setVariable ["BeltWorn",1,true]; _this select 0 call addActionDisarmBelt; _this select 0 call addActionExplodeBelt; ',1,false,true,"",' //check if player have ied in inventory _haveIED = magazines _this; _magIED = "BAF_ied_v3"; _magIED in _haveIED ']; }; addActionDisarmBelt = { CanDisarmBelt = _this addAction ["Disarm belt","common\client\actions\noScript.sqf",' _this select 0 removeAction (_this select 2); _this select 0 setVariable ["BeltWorn",nil]; _this select 0 addMagazine "BAF_ied_v3"; _this select 0 removeAction CanExplodeBelt; _this select 0 call addActionWearBelt; ',1,false,true,"",""]; }; addActionExplodeBelt = { CanExplodeBelt = _this addAction ["Explode belt!","common\client\actions\noScript.sqf",' _this select 0 removeAction (_this select 2); _this select 0 removeAction CanDisarmBelt; _this select 0 setVariable ["BeltWorn",nil]; "Sh_125_HE" createVehicle getPos (_this select 0); ',1,false,true,"",' !isNil{_this getVariable "BeltWorn"} ']; }; private "_code"; _code = _this select 3; if ((typeName _code) == "ARRAY") then { { call compile _x; } forEach _code; } else { call compile _code; }; aiMonitor = { private ["_ai","_gun","_ais","_guns"]; _ais = nearestEastMen(getPosATL player,100,true,"array"); _guns = nearestObjects[getPosATL player, eastStationaryGuns, 500]; _ai = objNull; _gun = objNull; if (count _ais > 0) then { if (vehicle (_ais select 0) == (_ais select 0)) then { _ai = _ais select 0; }; }; if (count _guns > 0) then { _gun = gunner (_guns select 0); }; if (isNull _gun && isNull _ai) exitWith {}; [nil,server,"loc",rSPAWN,[_ai,player,_gun],{ _ai = _this select 0; _plr = _this select 1; _gun = _this select 2; if !isNull _ai then { _ai reveal _plr; _ai setUnitPos "UP"; _ai doWatch _plr; _ai doMove getPosATL _plr; }; if !isNull _gun then { _gun reveal _plr; _dir = ((getPosATL _plr select 0) - (getPosATL _gun select 0)) atan2 ((getPosATL _plr select 1) - (getPosATL _gun select 1)); group _gun setFormDir _dir; _gun doTarget _plr; sleep 1; curTime = time; while { time - curTime < 5 } do { vehicle _gun fireAtTarget [_plr,currentWeapon vehicle _gun]; sleep (0.1 + random 0.2); }; }; }] call RE; }; // findHousesFront; find enterable houses close to the player findHousesFront = { private ["_buildings","_minPositions","_enterables"]; // find houses within a certain radius based on a position _buildings = nearestObjects [_this select 0, ["House"], _this select 1]; // house should have _minPositions spawn points, 0 based _minPositions = (_this select 2) - 1; _enterables = []; { //checking if enough spawn positions are found in the house ([0,0,0] returned means illegal position), //if it's a house from OA (optional through mapping defines), is not listed in 'ILLEGALHOUSES', is not damaged and player can see it if ( format["%1", _x buildingPos _minPositions] != "[0,0,0]" && EP1HOUSES && !(typeOf _x in ILLEGALHOUSES) && damage _x == 0 && canSee(player,_x,60) ) then { _enterables set [count _enterables, _x]; }; } forEach _buildings; _enterables }; // makes up the AI name based on player squad name plus a incrementing number and returns it // each player has its "own" AI spawned, defined by the count defined in the mission params // from 25% == 1 AI up to 100% == 4 AIs per player findSquadAIName = { private ["_i","_squad","_str","_unit","_plrs","_pos","_arr"]; _squad = _this select 0; _i = _this select 1; if (_i > maxAIPerPlayer) exitWith { "" }; _str = format["%1ai%2", _squad, _i]; if isNil _str exitWith { _str }; _unit = call compile _str; if isNull _unit exitWith { _str }; _pos = getPosATL _unit; _plrs = nearestPlayers(_pos,SPAWNRANGE,true,"array"); if ( alive _unit && !(str leader _unit in eastPlayerStrings) && ( (count _plrs == 0 || !arrCanSee(_plrs,_unit,90,100)) || (!(player in _plrs) && !arrCanSee(_plrs,_unit,35,50)) ) ) exitWith { _str }; [_squad, _i+1] call findSquadAIName; }; #define findSquadAIName(X) ([X,1] call findSquadAIName) #define exitCondition (findSquadAIName(player) == "" || !alive player) fillHouseEast = { private ["_x","_process","_arr","_inc","_pID","_pos","_bool","_unit","_name","_class","_ai","_nPos","_house","_cCount","_hID","_wCount","_i","_group","_skill"]; scopeName "fillHouseEastMain"; _house = _this select 0; _wCount = _this select 1; _inc = _this select 2; // when this is true, setVehicleInit is processed (i.e. AI is created) _process = false; // number of spawn positions in a house _nPos = nPos(_house); // 0 based count of OPFOR infantry class members _cCount = count eastInfClasses - 1; // random spawn position _x = round random (_nPos-1); // checks if the house is a valid house for AI spawns (if not it's -1) _hID = CACHEHOUSEPOSITIONS find (typeOf _house); _arr = []; if (_hID != -1 && _wCount > 0) then { _arr = CACHEHOUSEPOSITIONS select (_hID + 1); }; for [{ _i=_x},{ _i<((_nPos-1)+_x)},{ _i=_i+_inc}] do { if (count _arr == 0 && _wCount > 0 && _hID != -1) exitWith {}; _pos = _house buildingPos (_i % _nPos); if (count _arr > 0) then { _pID = (_arr select 0); _pos = _house buildingPos _pID; _arr = _arr - [(_arr select 1)] - [_pID]; }; // create an AI at _pos if no other "Man" in radus of 3 meters of _pos if (count nearestObjects[_pos, ["Man"], 3] == 0) then { _name = findSquadAIName(player); if (_name == "") exitWith { breakTo "fillHouseEastMain"; }; _bool = !isNil _name; if _bool then { _bool = alive (call compile _name); }; // when the AI unit (found by name) is alive, make sure it's healthy and, make it // "look-alive" by issuing a move command if _bool exitWith { _unit = call compile _name; _unit setPosATL _pos; _unit setDamage 0; [server,server,"loc",rSPAWN,_unit,{ _this doMove getPosATL _this; sleep 1; doStop _this; }] call RE; if DEBUG then { server globalChat format["moving %1", _name]; }; }; // if there are no appropriate AI units around, prepare for spawning them if DEBUG then { server globalChat format["spawning %1", _name]; }; _class = eastInfClasses select (random _cCount); _group = [player, "EastAIGrp", "", "east"] call getGroup; // create an AI group _ai = _group createUnit [_class, spawnPos, [], 0, "NONE"]; _ai setPosATL _pos; _skill = aiSkill / 10; call compile format[' %1 = _ai; _ai setVehicleInit '' this setVehicleVarName ''''%1''''; %1 = this; doStop this; this addMagazine (%2 select (random (count %2 - 1))); this addMagazine (%2 select (random (count %2 - 1))); // Chance AI will have a nightvision device - Disabled in coop only!!! if (random 100 > 75 && eastRatio > 0) then { if !(this hasWeapon ''''NVGoggles'''') then { this addWeapon ''''NVGoggles''''; if DEBUG then { diag_log format [''''Adding NVG to %1'''', this]; }; }; }; this setSkill %3; this addEventHandler [''''killed'''', { missionNamespace setVariable [''''%1var'''', time]; if (random 100 > 90 || DEBUG) then { _case = createVehicle [''''suitcase'''', %4, [], 0, ''''None'''']; _case setPosATL getPosATL (_this select 0); }; }]; ''; ', _name, IEDList, _skill, spawnPos]; _process = true; }; sleep 0.1; }; // spawns the AI prepared with 'setVehicleInit' if _process then { processInitCommands; }; }; aiSpawn = { private ["_inc","_hPos","_eCount","_wUnits","_wCount","_house","_clear","_gMkr","_houses","_hCount"]; if exitCondition exitWith {}; // player dead or has no name for ai squad name generation, then exit _houses = [getPosATL player, SPAWNRANGE, 3] call findHousesFront; // find available houses for spawn posits _hCount = count _houses; if (_hCount == 0) exitWith {}; _inc = 6; if (_hCount < 10) then { _inc = 3; }; for "_j" from 0 to (count _houses - 1) do { _house = _houses select _j; _clear = _house getVariable "cleared"; _gMkr = str(_house call getGridPos); if (markerColor _gMkr == "ColorRed" && isNil "_clear") then { // make sure it's a red square _hPos = getPosATL _house; _eCount = count nearestObjects[_hPos, ["Man"], 15]; _wUnits = nearestPlayers(_hPos,SPAWNRANGE-200,true,"array"); _wCount = count _wUnits; // players need not to be within SPAWNRANGE-200 from a house or they need not to see the spawn position for its AI to spawn if (_eCount == 0 && (_wCount == 0 || !arrCanSee(_wUnits,_hPos,30,50))) then { [_house, _wCount, _inc] call fillHouseEast; }; }; if exitCondition exitWith {}; }; }; // aiDespawn, removes dead AI aiDespawn = { private ["_unit","_str","_var","_plrs"]; for "_i" from 1 to 4 do { _str = format["%1ai%2", player, _i]; if !isNil _str then { _unit = call compile _str; if isNull _unit exitWith {}; if !alive _unit then { _str = _str + "var"; if (_unit distance graveDigger < 10) exitWith { if DEBUG then { server globalChat format["deleting %1 at gravedigger...", format["%1ai%2", player, _i]]; }; deleteVehicle _unit; missionNamespace setVariable [_str, nil]; }; _plrs = nearestPlayers(getPosATL _unit,200,true,"array"); if (count _plrs == 0 || !arrCanSee(_plrs,_unit,35,30)) then { _var = missionNamespace getVariable _str; if isNil "_var" exitWith { missionNamespace setVariable [_str, time]; }; if (time - _var < infDeleteTime) exitWith { if DEBUG then { server globalChat format["waiting to delete %1: %2s left", format["%1ai%2", player, _i], infDeleteTime - (time - _var)]; }; }; if (_unit distance graveDigger >= 10 && isPlayer _unit && !isNull group _unit) exitWith { _unit call setGrpNull; }; if DEBUG then { server globalChat format["deleting %1...", format["%1ai%2", player, _i]]; }; deleteVehicle _unit; missionNamespace setVariable [_str, nil]; }; sleep 0.01; }; }; }; }; // returns East AI to the gravedigger position setGrpNull = { private "_unit"; _unit = _this; if DEBUG then { server globalChat format["sending %1 to gravedigger", format["%1ai%2", player, _unit]]; }; if alive _unit then { _unit setDamage 1; }; [_unit] join group graveDigger; _unit setPosATL getPosATL graveDigger; }; // this function has no purpose in 0.72 - I assume it was originally used for AIs bought by players and forgotten /* groupAI = { private ["_unit","_waited"]; scopeName "main"; if (isDead(player) || lifeState player != "ALIVE" || vehicle player != player) exitWith {}; if (nearestEastMen(getPosATL player,respawnRange,true,"count") > 0) exitWith {}; if ((round (time*10)) % 50 != 0) exitWith {}; { if !(isNil _x) then { _unit = call compile _x; if (isNull _unit) exitWith {}; _waited = _unit getVariable "waited"; if !(isDead(_unit) && alive _unit && local _unit) exitWith { if !(isNil "_waited") then { _unit setVariable ["waited", nil]; }; }; if (isNil "_waited") exitWith { _unit setVariable ["waited", true]; breakTo "main"; }; _unit setVariable ["waited", nil]; _unit setPosATL getPosATL player; breakTo "main"; }; } forEach squadUnitStrings(squadString(player)); }; */player createDiaryRecord ["Diary", [ "Mission and Situation", " * BLUFOR objective is to find and destroy up to 9 ammo caches.

* OPFOR objective is to stop them.

* When OPFOR units are killed, some will drop silver briefcases. Every briefcase that is collected by BLUFOR reveals another map clue showing the rough distance to an ammo cache. Ammo caches can then be located and destroyed with a satchel or other explosives.

* Red grid-squares may contain OPFOR units and need to be cleared by BLUFOR to become green grid-squares. For this to happen there must be no OPFOR units in the square and at least 1 BLUFOR infantry (up to 3, depending on mission settings) must enter it on foot.

" ] ]; player createDiaryRecord ["Diary", [ "Controls", " Respawn camera additional controls:
N: night vision, M: open map

The M136 requires no magazines, it is a single shot disposable weapon as irl.

If your Humvee's wheel(s) are busted you can change the tyre if via the action menu if you are close enough to the tyre.

Ctrl+T: Toggle Insurgency menu.

Shift+PageUp: Increase color intensity.

Shift+PageDown: Decrease color intensity.

" ] ]; player createDiaryRecord ["Diary", [ "BLUFOR Instructions", " * Injured players can be revived by other players. Dead players cannot.

* To change your weapon as BLUFOR, go to the ammo boxes on the ground next to HQ and choose 'Loadout' from the action menu. Choose your gear then 'Save'.

* Dead BLUFOR can respawn at the HQ or on group-members. You can only spawn on group-members if they are not wounded or not close to enemy.

* BLUFOR players can choose the 'Mobilise HQ' option from the action menu when nearby, to request permission to move the HQ.

* On the map, click on a player/vehicle's marker to see their position then again for name.

* If a BLUFOR vehicle wheel is damaged, get close and aim at the tyre to get a 'Change Tyre' option on the action mention.

* To use weapons such as the mortar, one player must drop a Tripod bag, then a player carrying the M252 bag must aim at the tripod bag and choose the Assemble option from the action menu.

* Group leaders can request Helicopter Transport with the Communication command on the radio. Press 0 then 8 then 'Control Helicopter'. The player will take control of the pilot remotely. While doing this he will be unable to control his group leader unit. Press Backspace to return to control of your group leader unit.

* Players can request Close Air Support with the Communication command on the radio. Press 0 then 8 then 'Request CAS (A10)'. These requests must be approved by the group leader. When instructed, click the location on the map that you intend to bomb. You will then control the A10 remotely. CAS is available every 20 minutes.

" ] ]; player createDiaryRecord ["Diary", [ "OPFOR Instructions", " * 1 Human OPFOR player slot can be occupied for every 4 Human BLUFOR player slots occupied. If you try to play as OPFOR when there are not enough BLUFOR you will be automatically kicked and will need to re-connect to the server.

* OPFOR units are only created when BLUFOR players approach red grid-squares.

* Human OPFOR players can click an individual OPFOR unit on the map to take control of it, as long as BLUFOR players are not too close.

* OPFOR units on the map have red markers unless they are engaging BLUFOR - when they become orange.

* OPFOR are teleported away if they move too close to the BLUFOR HQ.

* BLUFOR weapons can be taken from corpses. BLUFOR vehicles can be used but if you move them too far they disappear.

" ] ]; player createDiaryRecord ["Diary", [ "Credits", " Mission by pogoman, revised and further developed by Fireball.
Insurgency is based on the gamemode created by Project Reality (an excellent realism mod for battlefield 2).
The patrolling AI vehicles use Kronzy's fantastic Urban Patrol Script (UPS).
The gear respawn dialog is a heavily modified version of the one used in Warfare - Benny edition.
Thanks to Swedge for the briefing contribution.
" ] ]; //Misc #define night (daytime >= 18 || daytime <= 6) #define time2 (time - startTime) #define isEast (typeOf player in eastInfClasses) #define isWest (typeOf player in westSoldierClasses) #define remoteControlling (typeOf cameraOn == HELITYPE && (driver cameraOn in units group player || !(player in crew cameraOn))) #define sTypes ["#ZRPole", "#ZRTrava"] #include "gear\loadouts.sqf" //Gear #define leaderItems [] //Respawn #define respawnRange 75 #define A10respawn 1500 #define artyRespawn 1800 //................................ // Fill Ammo Box Script by Lzryde (v0.2) // Based on Lzryde version, improved by Kol9yN special for ACE Insurgency //................................ // Make box is Global! if (isServer) then { stuffbox = _this select 0; publicVariable "stuffbox"; }; // Settings _amountWeapon = 5; _amountAmmo = 60; _amountammoMag = 1; _amountForSquads = 3; _refreshTime = 1800; // refresh every 30 minutes // Loop while {alive stuffbox} do { // Clear box clearWeaponCargo stuffbox; clearMagazineCargo stuffbox; // Fill box //For Heli's stuffbox addWeaponCargo ["ACE_ParachutePack",10]; stuffbox addWeaponCargo ["ACE_ParachuteRoundPack",30]; stuffbox addMagazineCargo ["ACE_VS17Panel_M",6]; stuffbox addMagazineCargo ["ACE_Rope_M_50",6]; stuffbox addMagazineCargo ["ACE_Rope_M_60",6]; stuffbox addMagazineCargo ["ACE_Rope_M_90",6]; stuffbox addMagazineCargo ["ACE_Rope_M_120",6]; stuffbox addMagazineCargo ["ACE_Rope_M5",6]; stuffbox addMagazineCargo ["ACE_Rope_TOW_M_5",6]; //soflam stuffbox addWeaponCargo ["Laserdesignator", _amountForSquads]; stuffbox addMagazineCargo ["Laserbatteries", _amountAmmo]; //M14 stuffbox addWeaponCargo ["M14_EP1", _amountForSquads]; stuffbox addWeaponCargo ["ACE_M14_ACOG", _amountWeapon]; stuffbox addWeaponCargo ["M16A2", _amountWeapon]; stuffbox addWeaponCargo ["ACE_m16a2_scope", _amountWeapon]; stuffbox addWeaponCargo ["M16A2GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_m16a2gl_scope", _amountWeapon]; stuffbox addWeaponCargo ["m16a4", _amountWeapon]; stuffbox addWeaponCargo ["m16a4_acg", _amountWeapon]; stuffbox addWeaponCargo ["M16A4_GL", _amountWeapon]; stuffbox addWeaponCargo ["M4A1_Aim_camo", _amountWeapon]; stuffbox addWeaponCargo ["M4A1_AIM_SD_camo", _amountWeapon]; stuffbox addWeaponCargo ["ACE_TAC50", _amountWeapon]; stuffbox addWeaponCargo ["m8_holo_sd", _amountWeapon]; stuffbox addWeaponCargo ["M79_EP1", _amountWeapon]; stuffbox addWeaponCargo ["M4A1", _amountWeapon]; stuffbox addWeaponCargo ["M4A1_Aim", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_RCO_GL", _amountWeapon]; stuffbox addWeaponCargo ["M4A1_HWS_GL_SD_Camo", _amountWeapon]; stuffbox addWeaponCargo ["M4A1_HWS_GL_camo", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_HWS_GL_SD_Camo_UP", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_GL_SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_Aim_SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_AIM_GL_UP", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_AIM_GL_SD_UP", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_RCO_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_Eotech_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_Eotech", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_C", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_AIM_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_Aim", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4_ACOG", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M16A4_Iron", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M16A4_CCO_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M16A4_ACG_GL_UP", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_Eotech", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M4A1_ACOG", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_Aim", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_Eotech", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_Eotech_4x", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_GL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_GL_13", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_GL_AIMPOINT", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_GL_EOTECH", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SOC_M4A1_SHORTDOT", _amountWeapon]; stuffbox addWeaponCargo ["M4A3_CCO_EP1", _amountWeapon]; stuffbox addWeaponCargo ["M4A3_RCO_GL_EP1", _amountWeapon]; //HK family stuffbox addWeaponCargo ["ACE_HK416_D14_COMPM3", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK416_D14_COMPM3_M320", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK417_micro", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK417_Eotech_4x", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK417_Shortdot", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK416_D14_SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK416_D10_COMPM3_SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK416_D10_SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HK416_D14", _amountWeapon]; //SCAR family stuffbox addWeaponCargo ["SCAR_L_CQC_EGLM_Holo", _amountWeapon]; stuffbox addWeaponCargo ["SCAR_L_STD_EGLM_RCO", _amountWeapon]; stuffbox addWeaponCargo ["SCAR_L_CQC", _amountWeapon]; stuffbox addWeaponCargo ["SCAR_L_CQC_Holo", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SCAR_H_STD_Spect", _amountWeapon]; stuffbox addWeaponCargo ["SCAR_H_STD_EGLM_Spect", _amountWeapon]; stuffbox addWeaponCargo ["SCAR_H_CQC_CCO", _amountWeapon]; //L85 family stuffbox addWeaponCargo ["BAF_L85A2_RIS_ACOG", _amountWeapon]; stuffbox addWeaponCargo ["BAF_L85A2_RIS_Holo", _amountWeapon]; stuffbox addWeaponCargo ["BAF_L85A2_RIS_SUSAT", _amountWeapon]; stuffbox addWeaponCargo ["BAF_L85A2_UGL_ACOG", _amountWeapon]; stuffbox addWeaponCargo ["BAF_L85A2_UGL_Holo", _amountWeapon]; stuffbox addWeaponCargo ["BAF_L85A2_UGL_SUSAT", _amountWeapon]; //G36 family stuffbox addWeaponCargo ["G36a_camo", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G36A1_AG36A1", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G36A2_Bipod_D", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G36A2_D", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G36K_EOTech_D", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G36K_iron_D", _amountWeapon]; //M8 family stuffbox addWeaponCargo ["m8_carbine", _amountWeapon]; stuffbox addWeaponCargo ["m8_carbine_pmc", _amountWeapon]; stuffbox addWeaponCargo ["m8_carbineGL", _amountWeapon]; stuffbox addWeaponCargo ["m8_compact", _amountWeapon]; stuffbox addWeaponCargo ["m8_compact_pmc", _amountWeapon]; //Czech weapons stuffbox addWeaponCargo ["Sa58P_EP1", _amountWeapon]; stuffbox addWeaponCargo ["Sa58V_CCO_EP1", _amountWeapon]; stuffbox addWeaponCargo ["Sa58V_EP1", _amountWeapon]; stuffbox addWeaponCargo ["Sa58V_RCO_EP1", _amountWeapon]; //G3 family stuffbox addWeaponCargo ["ACE_G3A3_RSAS", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G3A3", _amountWeapon]; stuffbox addWeaponCargo ["ACE_G3SG1", _amountWeapon]; //MGs stuffbox addWeaponCargo ["ACE_M27_IAR", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M27_IAR_ACOG", _amountWeapon]; stuffbox addWeaponCargo ["M240", _amountForSquads]; stuffbox addWeaponCargo ["m240_scoped_EP1", _amountForSquads]; stuffbox addWeaponCargo ["BAF_L7A2_GPMG", _amountForSquads]; stuffbox addWeaponCargo ["ACE_BAF_L7A2_GPMG", _amountForSquads]; stuffbox addWeaponCargo ["M249_EP1", _amountForSquads]; stuffbox addWeaponCargo ["ACE_M249_PIP_ACOG", _amountForSquads]; stuffbox addWeaponCargo ["M60A4_EP1", _amountForSquads]; stuffbox addWeaponCargo ["Mk_48_DES_EP1", _amountForSquads]; stuffbox addWeaponCargo ["ACE_M60", _amountForSquads]; //Snipers and DMRs stuffbox addWeaponCargo ["BAF_L86A2_ACOG", _amountForSquads]; stuffbox addWeaponCargo ["ACE_Mk12mod1", _amountForSquads]; stuffbox addWeaponCargo ["DMR", _amountForSquads]; stuffbox addWeaponCargo ["ACE_M110", _amountForSquads]; //MISC guns //fermers dolls stuffbox addWeaponCargo ["M1014", _amountWeapon]; stuffbox addWeaponCargo ["AA12_PMC", _amountWeapon]; stuffbox addWeaponCargo ["ACE_M1014_Eotech", _amountWeapon]; stuffbox addWeaponCargo ["ACE_SPAS12", _amountWeapon]; stuffbox addMagazineCargo ["8Rnd_B_Beneli_74Slug", _amountAmmo]; stuffbox addMagazineCargo ["8Rnd_B_Beneli_Pellets", _amountAmmo]; stuffbox addMagazineCargo ["ACE_8Rnd_12Ga_Buck00", _amountAmmo]; stuffbox addMagazineCargo ["ACE_8Rnd_12Ga_Slug", _amountAmmo]; stuffbox addWeaponCargo ["ACE_M3A1", _amountWeapon]; //Launchers stuffbox addWeaponCargo ["Javelin", _amountForSquads]; stuffbox addWeaponCargo ["Stinger", _amountForSquads]; stuffbox addMagazineCargo ["Stinger", _amountAmmo]; stuffbox addWeaponCargo ["ACE_M136_CSRS", _amountForSquads]; stuffbox addWeaponCargo ["ACE_M72A2", _amountForSquads]; //ACRE Rucks if (Var_acre == 1) then { stuffbox addWeaponCargo ["ACRE_PRC117F", _amountForSquads]; }; if (Var_acre == 1) then { stuffbox addWeaponCargo ["ACRE_PRC119", _amountForSquads]; }; //Rucks stuffbox addWeaponCargo ["ACE_Rucksack_RD90", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_RD91", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_RD92", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_RD54", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_RD99", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_EAST", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_EAST_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_AssaultPack_BAF", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Backpack_TT", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Backpack_FL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Backpack_US", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Backpack_CivAssault", _amountWeapon]; stuffbox addWeaponCargo ["ACE_ALICE_Backpack", _amountWeapon]; stuffbox addWeaponCargo ["ACE_BackPack_ACR_MTP", _amountWeapon]; stuffbox addWeaponCargo ["ACE_BackPack_ACR_DDPM", _amountWeapon]; stuffbox addWeaponCargo ["ACE_BackPack_ACR_DPM", _amountWeapon]; stuffbox addWeaponCargo ["ACE_BackPack_ACR_TT", _amountWeapon]; stuffbox addWeaponCargo ["ACE_BackPack_ACR_FL", _amountWeapon]; stuffbox addWeaponCargo ["ACE_BackPack_ACR", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Coyote_Pack_Black", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Coyote_Pack", _amountWeapon]; stuffbox addWeaponCargo ["ACE_FAST_PackEDC_ACU", _amountWeapon]; stuffbox addWeaponCargo ["ACE_FAST_PackEDC", _amountWeapon]; stuffbox addWeaponCargo ["ACE_CharliePack_ACU_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_CharliePack_ACU", _amountWeapon]; stuffbox addWeaponCargo ["ACE_CharliePack_WMARPAT", _amountWeapon]; stuffbox addWeaponCargo ["ACE_CharliePack", _amountWeapon]; stuffbox addWeaponCargo ["ACE_VTAC_RUSH72_FT_MEDIC", _amountWeapon]; stuffbox addWeaponCargo ["ACE_VTAC_RUSH72_TT_MEDIC", _amountWeapon]; stuffbox addWeaponCargo ["ACE_VTAC_RUSH72_ACU", _amountWeapon]; stuffbox addWeaponCargo ["ACE_VTAC_RUSH72", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_DMARPAT_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_WMARPAT_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_ACU_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_Brown_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_Green_Medic", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_WMARPAT", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_ACU", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_Wood", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_Brown", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Rucksack_MOLLE_Green", _amountWeapon]; //pistols stuffbox addWeaponCargo ["Colt1911", _amountWeapon]; stuffbox addWeaponCargo ["M9", _amountWeapon]; stuffbox addWeaponCargo ["ACE_P226", _amountWeapon]; stuffbox addWeaponCargo ["ACE_L9A1", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Flaregun", _amountWeapon]; stuffbox addWeaponCargo ["ACE_Glock18", _amountWeapon]; stuffbox addWeaponCargo ["ACE_MugLite", _amountWeapon]; stuffbox addWeaponCargo ["ACE_P8", _amountWeapon]; stuffbox addWeaponCargo ["ACE_TT", _amountWeapon]; stuffbox addWeaponCargo ["ACE_USP", _amountWeapon]; stuffbox addWeaponCargo ["ACE_USPSD", _amountWeapon]; stuffbox addWeaponCargo ["revolver_gold_EP1", _amountWeapon]; stuffbox addMagazineCargo ["ACE_13Rnd_9x19_L9A1", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSGreen_FG", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSRed_FG", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSWhite_FG", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSYellow_FG", _amountAmmo]; stuffbox addMagazineCargo ["17Rnd_9x19_glock17", _amountAmmo]; stuffbox addMagazineCargo ["ACE_33Rnd_9x19_G18", _amountAmmo]; stuffbox addMagazineCargo ["ACE_15Rnd_9x19_P8", _amountAmmo]; stuffbox addMagazineCargo ["ACE_8Rnd_762x25_B_Tokarev", _amountAmmo]; stuffbox addMagazineCargo ["ACE_12Rnd_45ACP_USP", _amountAmmo]; stuffbox addMagazineCargo ["ACE_12Rnd_45ACP_USPSD", _amountAmmo]; stuffbox addMagazineCargo ["6Rnd_45ACP", _amountAmmo]; //Mini smg stuffbox addWeaponCargo ["M9SD", _amountWeapon]; stuffbox addWeaponCargo ["Sa61_EP1", _amountWeapon]; stuffbox addWeaponCargo ["UZI_EP1", _amountWeapon]; stuffbox addWeaponCargo ["ACE_KAC_PDW", _amountWeapon]; stuffbox addWeaponCargo ["ACE_MP5A4", _amountWeapon]; stuffbox addWeaponCargo ["ACE_MP5A5", _amountWeapon]; stuffbox addWeaponCargo ["ACE_MP5SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_MP7", _amountWeapon]; stuffbox addWeaponCargo ["ACE_MP7_RSAS", _amountWeapon]; stuffbox addWeaponCargo ["ACE_UMP45", _amountWeapon]; stuffbox addWeaponCargo ["ACE_UMP45_AIM", _amountWeapon]; stuffbox addWeaponCargo ["ACE_UMP45_AIM_SD", _amountWeapon]; stuffbox addWeaponCargo ["ACE_UMP45_SD", _amountWeapon]; stuffbox addMagazineCargo ["ACE_15Rnd_9x19_S_M9", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_B_765x17_Ball", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_9x19_S_UZI", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_6x35_B_PDW", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_9x19_MP5SD", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_9x19_S_MP5", _amountAmmo]; stuffbox addMagazineCargo ["ACE_40Rnd_B_46x30_MP7", _amountAmmo]; //MISC amountAmmo stuffbox addWeaponCargo ["ACE_Javelin_CLU", _amountWeapon]; stuffbox addMagazineCargo ["ACE_Bandage", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Morphine", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Epinephrine", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Medkit", _amountAmmo]; if (Var_acre == 1) then { stuffbox addWeaponCargo ["acre_prc148", _amountWeapon]; }; stuffbox addMagazineCargo ["ACE_Knicklicht_B", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Knicklicht_G", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Knicklicht_IR", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Knicklicht_R", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Knicklicht_W", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Knicklicht_Y", _amountAmmo]; stuffbox addMagazineCargo ["ACE_FlareIR_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSWhite_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSYellow_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSGreen_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_SSRed_M203", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_Smoke_M203", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_SmokeRed_M203", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_SmokeGreen_M203", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_SmokeYellow_M203", _amountAmmo]; stuffbox addMagazineCargo ["IR_Strobe_Marker", _amountAmmo]; stuffbox addMagazineCargo ["IR_Strobe_Target", _amountAmmo]; stuffbox addMagazineCargo ["Mine", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShell", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShellBlue", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShellGreen", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShellOrange", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShellPurple", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShellRed", _amountAmmo]; stuffbox addMagazineCargo ["SmokeShellYellow", _amountAmmo]; stuffbox addMagazineCargo ["ACE_M7A3", 6]; stuffbox addMagazineCargo ["ACE_ANM14", 6]; stuffbox addWeaponCargo ["ACE_GlassesSunglasses", _amountAmmo]; stuffbox addWeaponCargo ["ACE_GlassesBalaklava", _amountAmmo]; stuffbox addWeaponCargo ["ACE_GlassesBalaklavaGray", _amountAmmo]; stuffbox addWeaponCargo ["ACE_GlassesBalaklavaOlive", _amountAmmo]; stuffbox addWeaponCargo ["Binocular", _amountForSquads]; stuffbox addWeaponCargo ["ItemCompass", _amountAmmo]; stuffbox addWeaponCargo ["ACE_DAGR", 6]; stuffbox addWeaponCargo ["ACE_Earplugs", _amountAmmo]; stuffbox addWeaponCargo ["ItemGPS", _amountWeapon]; stuffbox addWeaponCargo ["ACE_HuntIR_monitor", _amountForSquads]; stuffbox addWeaponCargo ["ACE_Kestrel4500", _amountForSquads]; stuffbox addWeaponCargo ["ItemMap", _amountAmmo]; stuffbox addWeaponCargo ["NVGoggles", _amountAmmo]; stuffbox addWeaponCargo ["ItemRadio", _amountAmmo]; stuffbox addWeaponCargo ["ACE_GlassesLHD_glasses", _amountAmmo]; stuffbox addWeaponCargo ["ACE_SpottingScope", _amountForSquads]; stuffbox addWeaponCargo ["ACE_Rangefinder_OD", _amountForSquads]; stuffbox addWeaponCargo ["Binocular_Vector", 6]; stuffbox addWeaponCargo ["ItemWatch", _amountWeapon]; stuffbox addWeaponCargo ["ACE_WireCutter", _amountForSquads]; stuffbox addWeaponCargo ["ACE_SOFLAMTripod", _amountForSquads]; stuffbox addWeaponCargo ["ACE_Map_Tools", _amountForSquads]; stuffbox addWeaponCargo ["ACE_KeyCuffs", _amountAmmo]; stuffbox addWeaponCargo ["ACE_GlassesTactical", _amountAmmo]; stuffbox addWeaponCargo ["ACE_GlassesGasMask_US", _amountAmmo]; stuffbox addWeaponCargo ["ACE_YardAge450", _amountForSquads]; stuffbox addWeaponCargo ["ACE_Minedetector_US", _amountForSquads]; //MAGS amountAmmoMag stuffbox addMagazineCargo ["ACE_10Rnd_127x99_Raufoss_m107", _amountAmmo]; stuffbox addMagazineCargo ["ACE_10Rnd_127x99_T_m107", _amountAmmo]; stuffbox addMagazineCargo ["ACE_100Rnd_556x45_T_M249", _amountAmmo]; stuffbox addMagazineCargo ["ACE_200Rnd_556x45_T_M249", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_556x45_SB_S_Stanag", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_556x45_SB_Stanag", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_556x45_T_Stanag", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_556x45_Stanag", _amountAmmo]; stuffbox addMagazineCargo ["ACE_5Rnd_127x99_B_TAC50", _amountAmmo]; stuffbox addMagazineCargo ["ACE_5Rnd_127x99_S_TAC50", _amountAmmo]; stuffbox addMagazineCargo ["ACE_5Rnd_127x99_T_TAC50", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_S_M110", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_SB_M110", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_T_M110", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_762x51_DMR", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_B_M14", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_T_DMR", _amountAmmo]; stuffbox addMagazineCargo ["10x_303", _amountAmmo]; stuffbox addMagazineCargo ["10Rnd_127x99_m107", _amountAmmo]; stuffbox addMagazineCargo ["200Rnd_556x45_L110A1", _amountAmmo]; stuffbox addMagazineCargo ["5Rnd_86x70_L115A1", _amountAmmo]; stuffbox addMagazineCargo ["100Rnd_762x54_PK", _amountAmmo]; stuffbox addMagazineCargo ["10Rnd_762x54_SVD", _amountAmmo]; stuffbox addMagazineCargo ["8Rnd_9x18_Makarov", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_9x19_UZI", _amountAmmo]; stuffbox addMagazineCargo ["PG7V", _amountAmmo]; stuffbox addMagazineCargo ["PG7VL", _amountAmmo]; stuffbox addMagazineCargo ["PG7VR", _amountAmmo]; stuffbox addMagazineCargo ["OG7", _amountAmmo]; stuffbox addMagazineCargo ["Strela", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_762x51_FNFAL", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_762x39_AK47", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_556x45_Stanag", _amountAmmo]; stuffbox addMagazineCargo ["ACE_5Rnd_762x51_T_M24", _amountAmmo]; stuffbox addMagazineCargo ["100Rnd_762x51_M240", _amountAmmo]; stuffbox addMagazineCargo ["100Rnd_556x45_M249", _amountAmmo]; stuffbox addMagazineCargo ["200Rnd_556x45_M249", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_762x51_B_SCAR", _amountAmmo]; stuffbox addMagazineCargo ["PipeBomb", _amountAmmo]; stuffbox addMagazineCargo ["15Rnd_9x19_M9", _amountAmmo]; stuffbox addMagazineCargo ["7Rnd_45ACP_1911", _amountAmmo]; stuffbox addMagazineCargo ["ACE_15Rnd_9x19_P226", _amountAmmo]; stuffbox addMagazineCargo ["HandGrenade_West", _amountAmmo]; stuffbox addMagazineCargo ["FlareWhite_M203", _amountAmmo]; stuffbox addMagazineCargo ["FlareYellow_M203", _amountAmmo]; stuffbox addMagazineCargo ["FlareGreen_M203", _amountAmmo]; stuffbox addMagazineCargo ["FlareRed_M203", _amountAmmo]; stuffbox addMagazineCargo ["FlareWhite_GP25", _amountAmmo]; stuffbox addMagazineCargo ["FlareGreen_GP25", _amountAmmo]; stuffbox addMagazineCargo ["FlareRed_GP25", _amountAmmo]; stuffbox addMagazineCargo ["FlareYellow_GP25", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_Smoke_GP25", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_SmokeRed_GP25", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_SmokeGreen_GP25", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_SmokeYellow_GP25", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Battery_Rangefinder", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Flashbang", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_SB_SCAR", _amountAmmo]; //m203 stuffbox addMagazineCargo ["ACE_HuntIR_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_1Rnd_HE_M203", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_HE_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_1Rnd_CS_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_1Rnd_PR_M203", _amountAmmo]; stuffbox addMagazineCargo ["ACE_M576", _amountAmmo]; stuffbox addMagazineCargo ["BAF_L109A1_HE", _amountAmmo]; stuffbox addMagazineCargo ["ACE_M84", _amountAmmo]; stuffbox addMagazineCargo ["ACE_Claymore_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_C4_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_OSM4_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_MON50_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_TRIPFLARE_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_M4SLAM_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_M2SLAM_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_DM31_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_BBETTY_M", _amountAmmo]; stuffbox addMagazineCargo ["ACE_25Rnd_1143x23_B_UMP45", _amountAmmo]; stuffbox addMagazineCargo ["ACE_10Rnd_762x39_B_SKS", _amountAmmo]; stuffbox addMagazineCargo ["64Rnd_9x19_Bizon", _amountAmmo]; stuffbox addMagazineCargo ["64Rnd_9x19_SD_Bizon", _amountAmmo]; stuffbox addMagazineCargo ["ACE_64Rnd_9x19_S_Bizon", _amountAmmo]; stuffbox addMagazineCargo ["10Rnd_9x39_SP5_VSS", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_9x39_SP5_VSS", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_1143x23_B_M3", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_B_AA12_74Slug", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_B_AA12_HE", _amountAmmo]; stuffbox addMagazineCargo ["20Rnd_B_AA12_Pellets", _amountAmmo]; //stuffbox addMagazineCargo ["8Rnd_B_Saiga12_74Slug", _amountAmmo]; //stuffbox addMagazineCargo ["8Rnd_B_Saiga12_Pellets", _amountAmmo]; stuffbox addMagazineCargo ["ACE_8Rnd_12Ga_Buck00_Saiga12", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_T_HK417", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_B_HK417", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_SB_HK417", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_T_G3", _amountAmmo]; stuffbox addMagazineCargo ["ACE_20Rnd_762x51_B_G3", _amountAmmo]; stuffbox addMagazineCargo ["1Rnd_HE_GP25", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_545x39_AK", _amountAmmo]; stuffbox addMagazineCargo ["75Rnd_545x39_RPK", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_556x45_G36", _amountAmmo]; stuffbox addMagazineCargo ["ACE_30Rnd_762x39_T_SA58", _amountAmmo]; stuffbox addMagazineCargo ["30Rnd_762x39_SA58", _amountAmmo]; // Wait the duration of _refreshTime sleep _refreshTime; };getQuantity = { private ["_str","_unit","_wep2","_arr","_wep","_quantity"]; if isEast exitWith { "" }; scopeName "main"; _str = ""; _wep = _this; _quantity = call compile format["quantity%1", _wep]; if (!isNil "_quantity") then { _str = str(_quantity - nearestWeapons(_wep,CENTERPOS,AORADIUS,true,"count")); }; if (_wep in limitedGearList) then { for "_i" from 0 to (count limitedSquadGear - 1) do { _arr = limitedSquadGear select _i; if (_wep in _arr) then { for "_j" from 0 to (count _arr - 1) do { _wep2 = _arr select _j; { if (!isNil _x) then { _unit = call compile _x; if (_unit hasWeapon _wep2 && !isDead(_unit) && alive _unit) exitWith { _str = format["H-%1-%2", squadNumber(_unit), unitNumber(_unit)]; breakTo "main"; }; }; } forEach squadUnitStrings(squadString(player)); }; }; }; }; _str }; loadout = { private ["_magTypeOld","_type","_typeOld","_magTypeNew","_typeNew","_count","_quantity"]; removeAllWeapons player; removeAllItems player; player addWeapon "ACE_Earplugs"; player addMagazine "ACE_Bandage"; player addMagazine "ACE_Bandage"; player addMagazine "ACE_Epinephrine"; player addMagazine "ACE_Epinephrine"; player addMagazine "ACE_Morphine"; player addMagazine "ACE_Morphine"; if (!isNull (unitBackpack player)) then { removeBackpack player; }; { _quantity = _x call getQuantity; if (_quantity != "" && _quantity != "1" && _quantity != "2") then { _type = getNumber(configFile >> "CfgWeapons" >> _x >> "type"); respawnWeapons = respawnWeapons - [_x]; if (_type == 1 || _type == 5) then { respawnWeapons = respawnWeapons + [startWeapon]; }; _magTypeOld = getArray(configFile >> "CfgWeapons" >> _x >> "magazines") select 0; if !(_magTypeOld in respawnMagazines) then { _magTypeOld = getArray(configFile >> "CfgWeapons" >> _x >> "magazines") select 1; }; _typeOld = getNumber(configFile >> 'CfgMagazines' >> _magTypeOld >> 'type'); _magTypeNew = getArray(configFile >> "CfgWeapons" >> startWeapon >> "magazines") select 0; _typeNew = getNumber(configFile >> 'CfgMagazines' >> _magTypeNew >> 'type'); _count = count respawnMagazines; respawnMagazines = respawnMagazines - [_magTypeOld]; for "_i" from 0 to ((_count - count respawnMagazines)*(_typeOld/_typeNew) - 1) do { respawnMagazines = respawnMagazines + [_magTypeNew]; }; }; } forEach respawnWeapons; { player addMagazine _x; } forEach respawnMagazines; { if (getNumber(configFile >> "CfgWeapons" >> _x >> "type") > 0) then { player addWeapon _x; } else { player addBackpack _x; }; } forEach respawnWeapons; player selectWeapon primaryWeapon player; }; replaceInventoryAmmo = { private ["_magazines","_newMag","_oldMags","_replacement","_inc","_size","_type"]; _newMag = _this select 0; _oldMags = _this select 1; _magazines = _this select 2; if isNil "_newMag" exitWith { _magazines }; if ((_oldMags select 0) == "20rnd_762x51_B_SCAR" && !((_oldMags select 0) in _magazines)) then { _oldMags set[0, "20Rnd_762x51_B_SCAR"]; }; _replacement = []; _inc = getNumber(configFile >> 'CfgMagazines' >> _newMag >> 'type'); _size = 128; if (_inc >= 256) then { _size = 3072; }; { _type = getNumber(configFile >> 'CfgMagazines' >> _x >> 'type'); if (_type == _inc || _type == _inc*2 || _type == _inc/2 || _type == _inc*6 || _type == _inc/6) then { _size = _size - _type; }; } forEach (_magazines - _oldMags); for "_i" from _inc to _size step _inc do { _replacement = _replacement + [_newMag] }; _magazines = (_magazines - _oldMags) + _replacement; _magazines }; displayInventory = { private ["_inventorySlots","_loadout","_miscItemSlots","_sidearmInventorySlots","_wSlot","_sSlot","_iSlot","_count","_space","_inventoryGUI","_sidearmInvGUI","_miscInvGUI"]; _loadout = _this; _inventoryGUI = 3503; _sidearmInvGUI = 3515; _miscInvGUI = 3523; for [{_count = 0},{_count < 12},{_count = _count + 1}] do {CtrlSetText[_inventoryGUI + _count,"\Ca\UI\Data\ui_gear_mag_gs.paa"]}; for [{_count = 0},{_count < 8},{_count = _count + 1}] do {CtrlSetText[_sidearmInvGUI + _count,"\Ca\UI\Data\ui_gear_mag_gs.paa"]}; for [{_count = 0},{_count < 12},{_count = _count + 1}] do {CtrlSetText[_miscInvGUI + _count,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _inventorySlots = []; _sidearmInventorySlots = []; _miscItemSlots = []; _wSlot = 0; _sSlot = 0; _iSlot = 0; { _space = getNumber(configFile >> 'CfgMagazines' >> _x >> 'type'); if (_space >= 256) then { ctrlSetText[_inventoryGUI + _wSlot, getText(configFile >> 'CfgMagazines' >> _x >> 'picture')]; _wSlot = _wSlot + 1; _inventorySlots = _inventorySlots + [_x]; for [{_count = _space/256 - 1},{_count > 0},{_count = _count - 1}] do { ctrlSetText[_inventoryGUI + _wSlot,""]; _wSlot = _wSlot + 1; _inventorySlots = _inventorySlots + [""]; }; }; if (_space == 16) then { ctrlSetText[_sidearmInvGUI + _sSlot,getText(configFile >> 'CfgMagazines' >> _x >> 'picture')]; _sSlot = _sSlot + 1; _sidearmInventorySlots = _sidearmInventorySlots + [_x]; for [{_count = _space/16 - 1},{_count > 0},{_count = _count - 1}] do { ctrlSetText[_sidearmInvGUI + _sSlot,""]; _sSlot = _sSlot + 1; _sidearmInventorySlots = _sidearmInventorySlots + [""]; }; }; if (_space == 0) then { _space = getNumber(configFile >> 'CfgWeapons' >> _x >> 'type'); ctrlSetText[_miscInvGUI + _iSlot, getText(configFile >> 'CfgWeapons' >> _x >> 'picture')]; _iSlot = _iSlot + 1; _miscItemSlots = _miscItemSlots + [_x]; for [{_count = _space/131072 - 1},{_count > 0},{_count = _count - 1}] do { ctrlSetText[_miscInvGUI + _iSlot,""]; _iSlot = _iSlot + 1; _miscItemSlots = _miscItemSlots + [""]; }; }; } forEach _loadout; [_inventorySlots,_sidearmInventorySlots,_miscItemSlots] }; gearDialog = { private ["_updateFiller","_list","_id","_currentRow","_currentData","_currentValue","_currentItem","_listMagazines","_quantity","_skip","_oldMags","_currentMags","_currentMagazines","_slist","_index","_type","_currentWeapons","_displayInv","_u","_currentSpecials","_currentItems","_currentMag","_currentMagValue","_currentPrimary","_currentSecondary","_currentSidearm","_sideGear","_picture","_i","_data","_inventorySlots","_sidearmInventorySlots","_miscItemSlots","_updateUnit","_slot","_x","_magTypeOld","_typeOld","_magTypeNew","_typeNew","_count","_weapons","_ammo","_filler","_lastFiller","_primaries","_secondaries","_sidearms","_misc","_all","_lb","_lbm","_primaryIDC","_secondaryIDC","_sidearmIDC","_specialIDC","_display","_totalWeapons","_fillerIDC","_fillerTypes","_listPictures","_old","_replaceArray","_getMagazines","_fillList","_addMagazine","_addItem"]; if dialog exitWith { closeDialog 0; }; createDialog "RscGear"; _primaries = primaries; _secondaries = secondaries; _sidearms = sidearms; _misc = misc; _all = _primaries + _secondaries + _sidearms + _misc; lbChange = false; lbMainAction = ""; inventoryClick = -1; WF_Gear_Action = ""; primClicked = false; secoClicked = false; sideClicked = false; saveLoadout = false; buyLoadout = false; _displayInv = false; _updateUnit = true; _updateFiller = false; disableSerialization; _lb = 3700; _lbm = 3701; _primaryIDC = 3500; _secondaryIDC = 3501; _sidearmIDC = 3502; _specialIDC = 3535; _display = findDisplay 16000; _totalWeapons = count primaries + count secondaries + count sidearms; _fillerIDC = [3401,3402,3403,3404,3405]; _fillerTypes = ["all","primaries","secondaries","sidearms","misc"]; _inventorySlots = []; _lastFiller = "nil"; _id = _fillerTypes find "primaries"; _list = []; _listPictures = []; _listMagazines = []; _miscItemSlots = []; _sidearmInventorySlots = []; (_display DisplayCtrl (_fillerIDC select _id)) ctrlSetTextColor [0.7, 1, 0.7, 1]; _currentItem = ""; _currentMags = []; _currentMagValue = 0; _currentData = ""; _currentValue = ""; _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _old = ""; _currentWeapons = []; _currentSpecials = []; _currentItems = []; _currentMagazines = []; //--- Set command is just terrific... _replaceArray = { private ["_array","_indexExcluded","_newArray","_x"]; _array = _this select 0; _indexExcluded = _this select 1; _newArray = []; for [{_x = 0},{_x < count(_array)},{_x = _x + 1}] do { if (_x != _indexExcluded) then { _newArray = _newArray + [_array select _x]; }; }; _newArray }; _getMagazines = { private ["_artm","_tm"]; _tm = getArray(configFile >> "CfgWeapons" >> _this >> "magazines"); _artm = _tm; { if (!(_x in legalMagazines)) then {_artm = _artm - [_x]}; } forEach _tm; _artm }; _fillList = { private ["_list","_filler","_i","_listBox","_listBoxArray","_u","_quant","_class","_char","_name","_pic"]; _list = _this select 0; _filler = _this select 1; _listBox = _this select 2; _listBoxArray = []; _u = 0; _i = 0; { _quant = _x call getQuantity; if (_filler == "magazine") then { _quant = ""; }; _class = "CfgMagazines"; if ( (!(_x in legalMagazines) || (_x in legalMagazines && _x in secondaries)) && _filler != "magazine") then { _class = "CfgWeapons"; }; _name = getText(configFile >> _class >> _x >> "displayName"); _pic = getText(configFile >> _class >> _x >> "picture"); if (_name == "") then { _name = toArray(_x); for "_j" from 0 to (count _name - 1) do { _char = [_name select _j]; if (toString(_char) == "_" || _j >= (count _name - 3)) then { _name set[_j,toArray(" ") select 0]; }; }; _name = toString(_name); _pic = getText(configFile >> "cfgVehicles" >> _x >> "picture"); }; lnbAddRow [_listBox,[_quant,_name]]; lnbSetPicture [_listBox,[_i,0],_pic]; lnbSetData [_listBox,[_i,0],_filler]; lnbSetData [_listBox,[_i,1],_quant]; lnbSetValue [_listBox,[_i,0],_u]; _i = _i + 1; _u = _u + 1; } forEach _list; lnbSetCurSelRow [_listBox,0] }; _addMagazine = { private ["_type","_mag","_magazines","_size","_inc"]; _magazines = _this select 0; _mag = _this select 1; _inc = getNumber(configFile >> "CfgMagazines" >> _mag >> "type"); _size = 128; if (_inc >= 256) then { _size = 3072; }; { _type = getNumber(configFile >> "CfgMagazines" >> _x >> "type"); if (_type == _inc || _type == _inc*2 || _type == _inc/2 || _type == _inc*6 || _type == _inc/6) then { _size = _size - getNumber(configFile >> "CfgMagazines" >> _x >> "type"); }; } forEach _magazines; if (_size >= _inc) then {_magazines = _magazines + [_mag]; }; _magazines }; _addItem = { private ["_items","_limit","_mag","_size"]; _items = _this select 0; _mag = _this select 1; _size = 0; _limit = 12; {_size = _size + 1} forEach _items; if (_size + 1 <= _limit) then {_items = _items + [_mag]}; _items }; server setVariable ["filler", "all"]; while {alive player && dialog} do { scopeName "main"; _filler = server getVariable "filler"; //--- _filler Changed. if (_filler != _lastFiller || _updateFiller) then { _updateFiller = false; _list = call compile format["_%1", _filler]; lnbClear _lb; [_list,_filler,_lb] call _fillList; _id = _fillerTypes find _filler; {(_display displayCtrl _x) ctrlSetTextColor [1, 1, 1, 1]} forEach _fillerIDC; (_display displayCtrl (_fillerIDC select _id)) ctrlSetTextColor [0.7, 1, 0.7, 1]; //--- Update the list since the _filler changed. lbChange = true; }; //--- List Selection Changed. if lbChange then { lbChange = false; _currentRow = lnbCurSelRow _lb; _currentData = lnbData[_lb,[_currentRow,0]]; _currentValue = lnbValue[_lb,[_currentRow,0]]; _currentItem = _list select _currentValue; lnbClear _lbm; _listMagazines = _currentItem call _getMagazines; [_listMagazines,'magazine',_lbm] call _fillList; }; //--- Player have clicked on one of the listbox. if (lbMainAction != "") then { _quantity = lnbData [_lb,[lnbCurSelRow _lb, 1]]; if (lbMainAction != "addWeapon") then { _quantity = ""; }; if (_quantity == "NA") exitWith { player groupChat "this item is not available"; lbMainAction = ""; }; if (_quantity == "0") exitWith { player groupChat "unavailable at this time"; lbMainAction = ""; }; if (_quantity != "1" && _quantity != "2" && _quantity != "") exitWith { player groupChat "your squad is already using a weapon of this type"; lbMainAction = ""; }; switch lbMainAction do { case "addWeapon": { _skip = true; if (_filler == "primaries" || _filler == "secondaries" || _filler == "sidearms" || _filler == "all") then { if (_currentItem in misc) then {_skip = false;_currentValue = _currentValue - _totalWeapons}; if (_skip) then { _slist = call compile format ["_%1",_currentData]; _index = _slist find _currentItem; _type = getNumber(configFile >> "CfgWeapons" >> _currentItem >> "type"); if (_type == 0) then { _currentData = "secondary"; }; if (_type == 4 && getNumber(configFile >> "CfgWeapons" >> _currentPrimary >> "type") == 5) exitWith { player groupChat "you cannot carry two heavy weapons"; lbMainAction = ""; breakTo "main"; }; if (_type == 5 && _currentSecondary != "") exitWith { player groupChat "you cannot carry two heavy weapons"; lbMainAction = ""; breakTo "main"; }; if (_index != -1) then { if (_type == 1 || _type == 5) then {_currentData = "primary"} else { if (_type == 4) then {_currentData = "secondary"} else { if (_type == 2) then {_currentData = "sidearm"}; }; }; if ( (_currentData == "primary" && _currentItem in limitedGearList && _currentSecondary in limitedGearList) || (_currentData == "secondary" && _currentItem in limitedGearList && _currentPrimary in limitedGearList) ) exitWith { player groupChat "you cannot use two different specialised weapons"; lbMainAction = ""; breakTo "main"; }; call compile format [" _old = _current%1; _currentWeapons = _currentWeapons - [_current%1]; _current%1 = _slist select _index; _picture = getText(configFile >> ""CfgWeapons"" >> _currentItem >> ""picture""); if (_type == 0) then { _picture = getText(configFile >> ""CfgVehicles"" >> _currentItem >> ""picture""); }; ctrlSetText[_%1IDC,_picture] ",_currentData]; _currentMags = _currentItem call _getMagazines; _oldMags = []; if (!isNil "_old") then { _oldMags = _old call _getMagazines; }; _currentMagazines = [_currentMags select 0,_oldMags,_currentMagazines] call replaceInventoryAmmo; }; _currentWeapons = _currentWeapons + [_currentItem]; _displayInv = true; }; }; if (_filler == "misc" || !_skip) then { _type = getNumber(configFile >> "CfgWeapons" >> _currentItem >> "type"); if (_type == 0 || _type == 65536) then { _type = getNumber(configFile >> "CfgMagazines" >> _currentItem >> "type"); if (_type == 16 || _type >= 256) then { _currentMagazines = [_currentMagazines,_currentItem] call _addMagazine; _displayInv = true; }; }; if (_type == 4096 && count _currentSpecials < 3 && !(_currentItem in _currentSpecials)) then { _currentSpecials = _currentSpecials + [_currentItem]; _u = 0; { _index = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; _displayInv = true; }; if (_type == 131072) then { if (!(_currentItem in _currentItems)) then { _currentItems = [_currentItems,_currentItem] call _addItem; _displayInv = true; }; }; }; }; case "addMagazine": { _currentMagValue = lnbValue[_lbm,[lnbCurSelRow _lbm,0]]; _currentMag = _currentItem call _getMagazines select _currentMagValue; _currentMagazines = [_currentMagazines,_currentMag] call _addMagazine; _displayInv = true; }; }; lbMainAction = ""; }; //--- Remove a weapon by clicking on it. if (primClicked) then {primClicked = false;if (_currentPrimary != "") then {ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"];_index = primaries find _currentPrimary;_currentWeapons = _currentWeapons - [_currentPrimary];_currentPrimary = "";_displayInv = true}}; if (secoClicked) then {secoClicked = false;if (_currentSecondary != "") then {ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"];_index = secondaries find _currentSecondary;_currentWeapons = _currentWeapons - [_currentSecondary];_currentSecondary = "";_displayInv = true}}; if (sideClicked) then {sideClicked = false;if (_currentSidearm != "") then {ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"];_index = sidearms find _currentSidearm;_currentWeapons = _currentWeapons - [_currentSidearm];_currentSidearm = "";_displayInv = true}}; if (_updateUnit) then { _currentWeapons = respawnWeapons; _currentMagazines = respawnMagazines; _currentSpecials = []; _currentItems = []; _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _sideGear = _currentWeapons; {if (!(_x in _all)) then {_sideGear = _sideGear - [_x]}} forEach _currentWeapons; _currentWeapons = _sideGear; _sideGear = _currentMagazines; {if (!(_x in misc) && !(_x in legalMagazines)) then {_sideGear = _sideGear - [_x]}} forEach _currentMagazines; _currentMagazines = _sideGear; ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"]; ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"]; ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"]; ctrlSetText [3535,"\Ca\UI\Data\ui_gear_eq_gs.paa"]; ctrlSetText [3536,"\Ca\UI\Data\ui_gear_eq_gs.paa"]; { _index = primaries find _x; if (_index != -1) then {_currentPrimary = primaries select _index; ctrlSetText[_primaryIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]}; _index = secondaries find _x; if (_index != -1) then { _currentSecondary = secondaries select _index; _picture = getText(configFile >> "CfgWeapons" >> _x >> "picture"); if (_picture == "") then { _picture = getText(configFile >> "CfgVehicles" >> _x >> "picture"); }; ctrlSetText[_secondaryIDC,_picture]; }; _index = sidearms find _x; if (_index != -1) then {_currentSidearm = sidearms select _index;ctrlSetText[_sidearmIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]}; _index = misc find _x; if (_index != -1) then { _type = getNumber(configFile >> "CfgWeapons" >> _x >> "type"); if (_type == 0) then { _type = getNumber(configFile >> "CfgMagazines" >> _x >> "type"); }; switch _type do { case 4096: { _currentSpecials = _currentSpecials + [_x]; _u = 0; { _i = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; }; case 131072: { _currentItems = _currentItems + [_x]; }; }; }; } forEach _currentWeapons; _currentWeapons = _currentWeapons - misc; _data = (_currentMagazines + _currentItems) call DisplayInventory; _inventorySlots = _data select 0; _sidearmInventorySlots = _data select 1; _miscItemSlots = _data select 2; _updateUnit = false; }; //--- Remove a magazine by clicking on it. if (inventoryClick != -1) then { //--- Main Inventory. if (inventoryClick > 3502 && inventoryClick < 3515) then { _slot = inventoryClick - 3503; if (_slot < count _inventorySlots) then { _index = _currentMagazines find (_inventorySlots Select _slot); if (_index != -1) then {_currentMagazines = [_currentMagazines,_index] call _replaceArray}; }; }; //--- Handgun Inventory if (inventoryClick > 3514 && inventoryClick < 3523) then { _slot = inventoryClick - 3515; if (_slot < count _sidearmInventorySlots) then { _index = _currentMagazines find (_sidearmInventorySlots Select _slot); if (_index != -1) then {_currentMagazines = [_currentMagazines,_index] call _replaceArray}; }; }; //--- Misc Inventory if (inventoryClick > 3522 && inventoryClick < 3535) then { _slot = inventoryClick - 3523; if (_slot < count _miscItemSlots) then { _index = _currentItems find (_miscItemSlots Select _slot); if (_index != -1) then {_currentItems = [_currentItems,_index] call _replaceArray}; }; }; //--- Remove a special item. if (inventoryClick == 3535 || inventoryClick == 3536) then { _slot = inventoryClick - 3535; if (_slot < count _currentSpecials) then { _currentSpecials = _currentSpecials - [_currentSpecials select _slot]; for [{_x = 0},{_x < 2},{_x = _x + 1}] do {ctrlSetText[_specialIDC + _x,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _u = 0; { _index = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; }; }; InventoryClick = -1; _displayInv = true; }; //--- Custom UA. if (WF_Gear_Action != "") then { switch (WF_Gear_Action) do { case "reload": { if !(isNil "respawnWeapons") then { _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _currentWeapons = []; _currentItems = []; _currentSpecials = []; { _index = primaries find _x; if (_index != -1) then {_currentWeapons = _currentWeapons + [_x];_currentPrimary = _x;ctrlSetText[_primaryIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]} else { _index = secondaries find _x; if (_index != -1) then {_currentWeapons = _currentWeapons + [_x];_currentSecondary = _x;ctrlSetText[_secondaryIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]} else { _index = sidearms find _x; if (_index != -1) then {_currentWeapons = _currentWeapons + [_x];_currentSidearm = _x;ctrlSetText[_sidearmIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]}; }; }; _index = misc find _x; if (_index != -1) then { _type = getNumber(configFile >> "CfgWeapons" >> _x >> "type"); if (_type == 0) then { _type = getNumber(configFile >> "CfgMagazines" >> _x >> "type"); }; switch _type do { case 4096: { _currentSpecials = _currentSpecials + [_x]; }; case 131072: { _currentItems = _currentItems + [_x]; }; }; }; } forEach respawnWeapons; if (_currentPrimary == "") then {ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"]}; if (_currentSecondary == "") then {ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"]}; if (_currentSidearm == "") then {ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"]}; _currentMagazines = respawnMagazines; for [{_x = 0},{_x < 2},{_x = _x + 1}] do {ctrlSetText[_specialIDC + _x,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _u = 0; { _index = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; _displayInv = true; }; }; case "clear": { _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _currentWeapons = []; _currentItems = []; _currentSpecials = []; _currentMagazines = []; ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"]; ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"]; ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"]; for [{_x = 0},{_x < 2},{_x = _x + 1}] do {ctrlSetText[_specialIDC + _x,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _displayInv = true; }; }; WF_Gear_Action = ""; }; //Kit Limiting _quantity = _currentPrimary call getQuantity; if (_quantity != "" && _quantity != "1" && _quantity != "2") then { _currentWeapons = _currentWeapons - [_currentPrimary] + [startWeapon]; _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentPrimary >> "magazines") select 0; if !(_magTypeOld in respawnMagazines) then { _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentPrimary >> "magazines") select 1; }; _typeOld = getNumber(configFile >> 'CfgMagazines' >> _magTypeOld >> 'type'); _magTypeNew = getArray(configFile >> "CfgWeapons" >> startWeapon >> "magazines") select 0; _typeNew = getNumber(configFile >> 'CfgMagazines' >> _magTypeNew >> 'type'); _count = count respawnMagazines; respawnMagazines = respawnMagazines - [_magTypeOld]; for "_i" from 0 to ((_count - count respawnMagazines)*(_typeOld/_typeNew) - 1) do { respawnMagazines = respawnMagazines + [_magTypeNew]; }; respawnWeapons = respawnWeapons - [_currentPrimary] + [startWeapon]; _currentPrimary = startWeapon; _updateFiller = true; _updateUnit = true; }; _quantity = _currentSecondary call getQuantity; if (_quantity != "" && _quantity != "1" && _quantity != "2") then { _currentWeapons = _currentWeapons - [_currentSecondary]; _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentSecondary >> "magazines") select 0; if !(_magTypeOld in respawnMagazines) then { _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentSecondary >> "magazines") select 1; }; _typeOld = getNumber(configFile >> 'CfgMagazines' >> _magTypeOld >> 'type'); _magTypeNew = getArray(configFile >> "CfgWeapons" >> _currentPrimary >> "magazines") select 0; _typeNew = getNumber(configFile >> 'CfgMagazines' >> _magTypeNew >> 'type'); _count = count respawnMagazines; respawnMagazines = respawnMagazines - [_magTypeOld]; for "_i" from 0 to ((_count - count respawnMagazines)*(_typeOld/_typeNew) - 1) do { respawnMagazines = respawnMagazines + [_magTypeNew]; }; respawnWeapons = respawnWeapons - [_currentSecondary]; _currentSecondary = ""; _updateFiller = true; _updateUnit = true; }; //--- Show inventory (Icons). if (_displayInv) then { _displayInv = false; _data = (_currentMagazines + _currentItems) call displayInventory; _inventorySlots = _data select 0; _sidearmInventorySlots = _data select 1; _miscItemSlots = _data select 2; }; //--- Buy a loadout. if (buyLoadout) then { buyLoadout = false; respawnWeapons = _currentWeapons + _currentSpecials + _currentItems; respawnMagazines = _currentMagazines; if (player distance HQ < 9000 && isWest) then { hint "Weapons updated!"; call loadout; _updateFiller = true; }; _weapons = (_currentWeapons + _currentSpecials + _currentItems); _ammo = _currentMagazines; _data = (_currentMagazines + _currentItems) call displayInventory; _inventorySlots = _data select 0; _sidearmInventorySlots = _data select 1; _miscItemSlots = _data select 2; }; _lastFiller = _filler; sleep 0.05; }; }; getQuantity = { private ["_str","_unit","_wep2","_arr","_wep","_quantity"]; if isEast exitWith { "" }; scopeName "main"; _str = ""; _wep = _this; _quantity = call compile format["quantity%1", _wep]; if (!isNil "_quantity") then { _str = str(_quantity - nearestWeapons(_wep,CENTERPOS,AORADIUS,true,"count")); }; if (_wep in limitedGearList) then { for "_i" from 0 to (count limitedSquadGear - 1) do { _arr = limitedSquadGear select _i; if (_wep in _arr) then { for "_j" from 0 to (count _arr - 1) do { _wep2 = _arr select _j; { if (!isNil _x) then { _unit = call compile _x; if (_unit hasWeapon _wep2 && !isDead(_unit) && alive _unit) exitWith { _str = format["H-%1-%2", squadNumber(_unit), unitNumber(_unit)]; breakTo "main"; }; }; } forEach squadUnitStrings(squadString(player)); }; }; }; }; _str }; loadout = { private ["_magTypeOld","_type","_typeOld","_magTypeNew","_typeNew","_count","_quantity"]; removeAllWeapons player; removeAllItems player; if (!isNull (unitBackpack player)) then { removeBackpack player; }; { _quantity = _x call getQuantity; if (_quantity != "" && _quantity != "1" && _quantity != "2") then { _type = getNumber(configFile >> "CfgWeapons" >> _x >> "type"); respawnWeapons = respawnWeapons - [_x]; if (_type == 1 || _type == 5) then { respawnWeapons = respawnWeapons + [startWeapon]; }; _magTypeOld = getArray(configFile >> "CfgWeapons" >> _x >> "magazines") select 0; if !(_magTypeOld in respawnMagazines) then { _magTypeOld = getArray(configFile >> "CfgWeapons" >> _x >> "magazines") select 1; }; _typeOld = getNumber(configFile >> 'CfgMagazines' >> _magTypeOld >> 'type'); _magTypeNew = getArray(configFile >> "CfgWeapons" >> startWeapon >> "magazines") select 0; _typeNew = getNumber(configFile >> 'CfgMagazines' >> _magTypeNew >> 'type'); _count = count respawnMagazines; respawnMagazines = respawnMagazines - [_magTypeOld]; for "_i" from 0 to ((_count - count respawnMagazines)*(_typeOld/_typeNew) - 1) do { respawnMagazines = respawnMagazines + [_magTypeNew]; }; }; } forEach respawnWeapons; { player addMagazine _x; } forEach respawnMagazines; { if (getNumber(configFile >> "CfgWeapons" >> _x >> "type") > 0) then { player addWeapon _x; } else { player addBackpack _x; }; } forEach respawnWeapons; player selectWeapon primaryWeapon player; }; replaceInventoryAmmo = { private ["_magazines","_newMag","_oldMags","_replacement","_inc","_size","_type"]; _newMag = _this select 0; _oldMags = _this select 1; _magazines = _this select 2; if isNil "_newMag" exitWith { _magazines }; if ((_oldMags select 0) == "20rnd_762x51_B_SCAR" && !((_oldMags select 0) in _magazines)) then { _oldMags set[0, "20Rnd_762x51_B_SCAR"]; }; _replacement = []; _inc = getNumber(configFile >> 'CfgMagazines' >> _newMag >> 'type'); _size = 128; if (_inc >= 256) then { _size = 3072; }; { _type = getNumber(configFile >> 'CfgMagazines' >> _x >> 'type'); if (_type == _inc || _type == _inc*2 || _type == _inc/2 || _type == _inc*6 || _type == _inc/6) then { _size = _size - _type; }; } forEach (_magazines - _oldMags); for "_i" from _inc to _size step _inc do { _replacement = _replacement + [_newMag] }; _magazines = (_magazines - _oldMags) + _replacement; _magazines }; displayInventory = { private ["_inventorySlots","_loadout","_miscItemSlots","_sidearmInventorySlots","_wSlot","_sSlot","_iSlot","_count","_space","_inventoryGUI","_sidearmInvGUI","_miscInvGUI"]; _loadout = _this; _inventoryGUI = 3503; _sidearmInvGUI = 3515; _miscInvGUI = 3523; for [{_count = 0},{_count < 12},{_count = _count + 1}] do {CtrlSetText[_inventoryGUI + _count,"\Ca\UI\Data\ui_gear_mag_gs.paa"]}; for [{_count = 0},{_count < 8},{_count = _count + 1}] do {CtrlSetText[_sidearmInvGUI + _count,"\Ca\UI\Data\ui_gear_mag_gs.paa"]}; for [{_count = 0},{_count < 12},{_count = _count + 1}] do {CtrlSetText[_miscInvGUI + _count,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _inventorySlots = []; _sidearmInventorySlots = []; _miscItemSlots = []; _wSlot = 0; _sSlot = 0; _iSlot = 0; { _space = getNumber(configFile >> 'CfgMagazines' >> _x >> 'type'); if (_space >= 256) then { ctrlSetText[_inventoryGUI + _wSlot, getText(configFile >> 'CfgMagazines' >> _x >> 'picture')]; _wSlot = _wSlot + 1; _inventorySlots = _inventorySlots + [_x]; for [{_count = _space/256 - 1},{_count > 0},{_count = _count - 1}] do { ctrlSetText[_inventoryGUI + _wSlot,""]; _wSlot = _wSlot + 1; _inventorySlots = _inventorySlots + [""]; }; }; if (_space == 16) then { ctrlSetText[_sidearmInvGUI + _sSlot,getText(configFile >> 'CfgMagazines' >> _x >> 'picture')]; _sSlot = _sSlot + 1; _sidearmInventorySlots = _sidearmInventorySlots + [_x]; for [{_count = _space/16 - 1},{_count > 0},{_count = _count - 1}] do { ctrlSetText[_sidearmInvGUI + _sSlot,""]; _sSlot = _sSlot + 1; _sidearmInventorySlots = _sidearmInventorySlots + [""]; }; }; if (_space == 0) then { _space = getNumber(configFile >> 'CfgWeapons' >> _x >> 'type'); ctrlSetText[_miscInvGUI + _iSlot, getText(configFile >> 'CfgWeapons' >> _x >> 'picture')]; _iSlot = _iSlot + 1; _miscItemSlots = _miscItemSlots + [_x]; for [{_count = _space/131072 - 1},{_count > 0},{_count = _count - 1}] do { ctrlSetText[_miscInvGUI + _iSlot,""]; _iSlot = _iSlot + 1; _miscItemSlots = _miscItemSlots + [""]; }; }; } forEach _loadout; [_inventorySlots,_sidearmInventorySlots,_miscItemSlots] }; gearDialog = { private ["_updateFiller","_list","_id","_currentRow","_currentData","_currentValue","_currentItem","_listMagazines","_quantity","_skip","_oldMags","_currentMags","_currentMagazines","_slist","_index","_type","_currentWeapons","_displayInv","_u","_currentSpecials","_currentItems","_currentMag","_currentMagValue","_currentPrimary","_currentSecondary","_currentSidearm","_sideGear","_picture","_i","_data","_inventorySlots","_sidearmInventorySlots","_miscItemSlots","_updateUnit","_slot","_x","_magTypeOld","_typeOld","_magTypeNew","_typeNew","_count","_weapons","_ammo","_filler","_lastFiller","_primaries","_secondaries","_sidearms","_misc","_all","_lb","_lbm","_primaryIDC","_secondaryIDC","_sidearmIDC","_specialIDC","_display","_totalWeapons","_fillerIDC","_fillerTypes","_listPictures","_old","_replaceArray","_getMagazines","_fillList","_addMagazine","_addItem"]; if dialog exitWith { closeDialog 0; }; createDialog "RscGear"; _primaries = primaries; _secondaries = secondaries; _sidearms = sidearms; _misc = misc; _all = _primaries + _secondaries + _sidearms + _misc; lbChange = false; lbMainAction = ""; inventoryClick = -1; WF_Gear_Action = ""; primClicked = false; secoClicked = false; sideClicked = false; saveLoadout = false; buyLoadout = false; _displayInv = false; _updateUnit = true; _updateFiller = false; disableSerialization; _lb = 3700; _lbm = 3701; _primaryIDC = 3500; _secondaryIDC = 3501; _sidearmIDC = 3502; _specialIDC = 3535; _display = findDisplay 16000; _totalWeapons = count primaries + count secondaries + count sidearms; _fillerIDC = [3401,3402,3403,3404,3405]; _fillerTypes = ["all","primaries","secondaries","sidearms","misc"]; _inventorySlots = []; _lastFiller = "nil"; _id = _fillerTypes find "primaries"; _list = []; _listPictures = []; _listMagazines = []; _miscItemSlots = []; _sidearmInventorySlots = []; (_display DisplayCtrl (_fillerIDC select _id)) ctrlSetTextColor [0.7, 1, 0.7, 1]; _currentItem = ""; _currentMags = []; _currentMagValue = 0; _currentData = ""; _currentValue = ""; _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _old = ""; _currentWeapons = []; _currentSpecials = []; _currentItems = []; _currentMagazines = []; //--- Set command is just terrific... _replaceArray = { private ["_array","_indexExcluded","_newArray","_x"]; _array = _this select 0; _indexExcluded = _this select 1; _newArray = []; for [{_x = 0},{_x < count(_array)},{_x = _x + 1}] do { if (_x != _indexExcluded) then { _newArray = _newArray + [_array select _x]; }; }; _newArray }; _getMagazines = { private ["_artm","_tm"]; _tm = getArray(configFile >> "CfgWeapons" >> _this >> "magazines"); _artm = _tm; { if (!(_x in legalMagazines)) then {_artm = _artm - [_x]}; } forEach _tm; _artm }; _fillList = { private ["_list","_filler","_i","_listBox","_listBoxArray","_u","_quant","_class","_char","_name","_pic"]; _list = _this select 0; _filler = _this select 1; _listBox = _this select 2; _listBoxArray = []; _u = 0; _i = 0; { _quant = _x call getQuantity; if (_filler == "magazine") then { _quant = ""; }; _class = "CfgMagazines"; if ( (!(_x in legalMagazines) || (_x in legalMagazines && _x in secondaries)) && _filler != "magazine") then { _class = "CfgWeapons"; }; _name = getText(configFile >> _class >> _x >> "displayName"); _pic = getText(configFile >> _class >> _x >> "picture"); if (_name == "") then { _name = toArray(_x); for "_j" from 0 to (count _name - 1) do { _char = [_name select _j]; if (toString(_char) == "_" || _j >= (count _name - 3)) then { _name set[_j,toArray(" ") select 0]; }; }; _name = toString(_name); _pic = getText(configFile >> "cfgVehicles" >> _x >> "picture"); }; lnbAddRow [_listBox,[_quant,_name]]; lnbSetPicture [_listBox,[_i,0],_pic]; lnbSetData [_listBox,[_i,0],_filler]; lnbSetData [_listBox,[_i,1],_quant]; lnbSetValue [_listBox,[_i,0],_u]; _i = _i + 1; _u = _u + 1; } forEach _list; lnbSetCurSelRow [_listBox,0] }; _addMagazine = { private ["_type","_mag","_magazines","_size","_inc"]; _magazines = _this select 0; _mag = _this select 1; _inc = getNumber(configFile >> "CfgMagazines" >> _mag >> "type"); _size = 128; if (_inc >= 256) then { _size = 3072; }; { _type = getNumber(configFile >> "CfgMagazines" >> _x >> "type"); if (_type == _inc || _type == _inc*2 || _type == _inc/2 || _type == _inc*6 || _type == _inc/6) then { _size = _size - getNumber(configFile >> "CfgMagazines" >> _x >> "type"); }; } forEach _magazines; if (_size >= _inc) then {_magazines = _magazines + [_mag]; }; _magazines }; _addItem = { private ["_items","_limit","_mag","_size"]; _items = _this select 0; _mag = _this select 1; _size = 0; _limit = 12; {_size = _size + 1} forEach _items; if (_size + 1 <= _limit) then {_items = _items + [_mag]}; _items }; server setVariable ["filler", "all"]; while {alive player && dialog} do { scopeName "main"; _filler = server getVariable "filler"; //--- _filler Changed. if (_filler != _lastFiller || _updateFiller) then { _updateFiller = false; _list = call compile format["_%1", _filler]; lnbClear _lb; [_list,_filler,_lb] call _fillList; _id = _fillerTypes find _filler; {(_display displayCtrl _x) ctrlSetTextColor [1, 1, 1, 1]} forEach _fillerIDC; (_display displayCtrl (_fillerIDC select _id)) ctrlSetTextColor [0.7, 1, 0.7, 1]; //--- Update the list since the _filler changed. lbChange = true; }; //--- List Selection Changed. if lbChange then { lbChange = false; _currentRow = lnbCurSelRow _lb; _currentData = lnbData[_lb,[_currentRow,0]]; _currentValue = lnbValue[_lb,[_currentRow,0]]; _currentItem = _list select _currentValue; lnbClear _lbm; _listMagazines = _currentItem call _getMagazines; [_listMagazines,'magazine',_lbm] call _fillList; }; //--- Player have clicked on one of the listbox. if (lbMainAction != "") then { _quantity = lnbData [_lb,[lnbCurSelRow _lb, 1]]; if (lbMainAction != "addWeapon") then { _quantity = ""; }; if (_quantity == "NA") exitWith { player groupChat "this item is not available"; lbMainAction = ""; }; if (_quantity == "0") exitWith { player groupChat "unavailable at this time"; lbMainAction = ""; }; if (_quantity != "1" && _quantity != "2" && _quantity != "") exitWith { player groupChat "your squad is already using a weapon of this type"; lbMainAction = ""; }; switch lbMainAction do { case "addWeapon": { _skip = true; if (_filler == "primaries" || _filler == "secondaries" || _filler == "sidearms" || _filler == "all") then { if (_currentItem in misc) then {_skip = false;_currentValue = _currentValue - _totalWeapons}; if (_skip) then { _slist = call compile format ["_%1",_currentData]; _index = _slist find _currentItem; _type = getNumber(configFile >> "CfgWeapons" >> _currentItem >> "type"); if (_type == 0) then { _currentData = "secondary"; }; if (_type == 4 && getNumber(configFile >> "CfgWeapons" >> _currentPrimary >> "type") == 5) exitWith { player groupChat "you cannot carry two heavy weapons"; lbMainAction = ""; breakTo "main"; }; if (_type == 5 && _currentSecondary != "") exitWith { player groupChat "you cannot carry two heavy weapons"; lbMainAction = ""; breakTo "main"; }; if (_index != -1) then { if (_type == 1 || _type == 5) then {_currentData = "primary"} else { if (_type == 4) then {_currentData = "secondary"} else { if (_type == 2) then {_currentData = "sidearm"}; }; }; if ( (_currentData == "primary" && _currentItem in limitedGearList && _currentSecondary in limitedGearList) || (_currentData == "secondary" && _currentItem in limitedGearList && _currentPrimary in limitedGearList) ) exitWith { player groupChat "you cannot use two different specialised weapons"; lbMainAction = ""; breakTo "main"; }; call compile format [" _old = _current%1; _currentWeapons = _currentWeapons - [_current%1]; _current%1 = _slist select _index; _picture = getText(configFile >> ""CfgWeapons"" >> _currentItem >> ""picture""); if (_type == 0) then { _picture = getText(configFile >> ""CfgVehicles"" >> _currentItem >> ""picture""); }; ctrlSetText[_%1IDC,_picture] ",_currentData]; _currentMags = _currentItem call _getMagazines; _oldMags = []; if (!isNil "_old") then { _oldMags = _old call _getMagazines; }; _currentMagazines = [_currentMags select 0,_oldMags,_currentMagazines] call replaceInventoryAmmo; }; _currentWeapons = _currentWeapons + [_currentItem]; _displayInv = true; }; }; if (_filler == "misc" || !_skip) then { _type = getNumber(configFile >> "CfgWeapons" >> _currentItem >> "type"); if (_type == 0 || _type == 65536) then { _type = getNumber(configFile >> "CfgMagazines" >> _currentItem >> "type"); if (_type == 16 || _type >= 256) then { _currentMagazines = [_currentMagazines,_currentItem] call _addMagazine; _displayInv = true; }; }; if (_type == 4096 && count _currentSpecials < 3 && !(_currentItem in _currentSpecials)) then { _currentSpecials = _currentSpecials + [_currentItem]; _u = 0; { _index = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; _displayInv = true; }; if (_type == 131072) then { if (!(_currentItem in _currentItems)) then { _currentItems = [_currentItems,_currentItem] call _addItem; _displayInv = true; }; }; }; }; case "addMagazine": { _currentMagValue = lnbValue[_lbm,[lnbCurSelRow _lbm,0]]; _currentMag = _currentItem call _getMagazines select _currentMagValue; _currentMagazines = [_currentMagazines,_currentMag] call _addMagazine; _displayInv = true; }; }; lbMainAction = ""; }; //--- Remove a weapon by clicking on it. if (primClicked) then {primClicked = false;if (_currentPrimary != "") then {ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"];_index = primaries find _currentPrimary;_currentWeapons = _currentWeapons - [_currentPrimary];_currentPrimary = "";_displayInv = true}}; if (secoClicked) then {secoClicked = false;if (_currentSecondary != "") then {ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"];_index = secondaries find _currentSecondary;_currentWeapons = _currentWeapons - [_currentSecondary];_currentSecondary = "";_displayInv = true}}; if (sideClicked) then {sideClicked = false;if (_currentSidearm != "") then {ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"];_index = sidearms find _currentSidearm;_currentWeapons = _currentWeapons - [_currentSidearm];_currentSidearm = "";_displayInv = true}}; if (_updateUnit) then { _currentWeapons = respawnWeapons; _currentMagazines = respawnMagazines; _currentSpecials = []; _currentItems = []; _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _sideGear = _currentWeapons; {if (!(_x in _all)) then {_sideGear = _sideGear - [_x]}} forEach _currentWeapons; _currentWeapons = _sideGear; _sideGear = _currentMagazines; {if (!(_x in misc) && !(_x in legalMagazines)) then {_sideGear = _sideGear - [_x]}} forEach _currentMagazines; _currentMagazines = _sideGear; ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"]; ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"]; ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"]; ctrlSetText [3535,"\Ca\UI\Data\ui_gear_eq_gs.paa"]; ctrlSetText [3536,"\Ca\UI\Data\ui_gear_eq_gs.paa"]; { _index = primaries find _x; if (_index != -1) then {_currentPrimary = primaries select _index; ctrlSetText[_primaryIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]}; _index = secondaries find _x; if (_index != -1) then { _currentSecondary = secondaries select _index; _picture = getText(configFile >> "CfgWeapons" >> _x >> "picture"); if (_picture == "") then { _picture = getText(configFile >> "CfgVehicles" >> _x >> "picture"); }; ctrlSetText[_secondaryIDC,_picture]; }; _index = sidearms find _x; if (_index != -1) then {_currentSidearm = sidearms select _index;ctrlSetText[_sidearmIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]}; _index = misc find _x; if (_index != -1) then { _type = getNumber(configFile >> "CfgWeapons" >> _x >> "type"); if (_type == 0) then { _type = getNumber(configFile >> "CfgMagazines" >> _x >> "type"); }; switch _type do { case 4096: { _currentSpecials = _currentSpecials + [_x]; _u = 0; { _i = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; }; case 131072: { _currentItems = _currentItems + [_x]; }; }; }; } forEach _currentWeapons; _currentWeapons = _currentWeapons - misc; _data = (_currentMagazines + _currentItems) call DisplayInventory; _inventorySlots = _data select 0; _sidearmInventorySlots = _data select 1; _miscItemSlots = _data select 2; _updateUnit = false; }; //--- Remove a magazine by clicking on it. if (inventoryClick != -1) then { //--- Main Inventory. if (inventoryClick > 3502 && inventoryClick < 3515) then { _slot = inventoryClick - 3503; if (_slot < count _inventorySlots) then { _index = _currentMagazines find (_inventorySlots Select _slot); if (_index != -1) then {_currentMagazines = [_currentMagazines,_index] call _replaceArray}; }; }; //--- Handgun Inventory if (inventoryClick > 3514 && inventoryClick < 3523) then { _slot = inventoryClick - 3515; if (_slot < count _sidearmInventorySlots) then { _index = _currentMagazines find (_sidearmInventorySlots Select _slot); if (_index != -1) then {_currentMagazines = [_currentMagazines,_index] call _replaceArray}; }; }; //--- Misc Inventory if (inventoryClick > 3522 && inventoryClick < 3535) then { _slot = inventoryClick - 3523; if (_slot < count _miscItemSlots) then { _index = _currentItems find (_miscItemSlots Select _slot); if (_index != -1) then {_currentItems = [_currentItems,_index] call _replaceArray}; }; }; //--- Remove a special item. if (inventoryClick == 3535 || inventoryClick == 3536) then { _slot = inventoryClick - 3535; if (_slot < count _currentSpecials) then { _currentSpecials = _currentSpecials - [_currentSpecials select _slot]; for [{_x = 0},{_x < 2},{_x = _x + 1}] do {ctrlSetText[_specialIDC + _x,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _u = 0; { _index = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; }; }; InventoryClick = -1; _displayInv = true; }; //--- Custom UA. if (WF_Gear_Action != "") then { switch (WF_Gear_Action) do { case "reload": { if !(isNil "respawnWeapons") then { _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _currentWeapons = []; _currentItems = []; _currentSpecials = []; { _index = primaries find _x; if (_index != -1) then {_currentWeapons = _currentWeapons + [_x];_currentPrimary = _x;ctrlSetText[_primaryIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]} else { _index = secondaries find _x; if (_index != -1) then {_currentWeapons = _currentWeapons + [_x];_currentSecondary = _x;ctrlSetText[_secondaryIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]} else { _index = sidearms find _x; if (_index != -1) then {_currentWeapons = _currentWeapons + [_x];_currentSidearm = _x;ctrlSetText[_sidearmIDC,getText(configFile >> "CfgWeapons" >> _x >> "picture")]}; }; }; _index = misc find _x; if (_index != -1) then { _type = getNumber(configFile >> "CfgWeapons" >> _x >> "type"); if (_type == 0) then { _type = getNumber(configFile >> "CfgMagazines" >> _x >> "type"); }; switch _type do { case 4096: { _currentSpecials = _currentSpecials + [_x]; }; case 131072: { _currentItems = _currentItems + [_x]; }; }; }; } forEach respawnWeapons; if (_currentPrimary == "") then {ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"]}; if (_currentSecondary == "") then {ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"]}; if (_currentSidearm == "") then {ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"]}; _currentMagazines = respawnMagazines; for [{_x = 0},{_x < 2},{_x = _x + 1}] do {ctrlSetText[_specialIDC + _x,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _u = 0; { _index = misc find _x; ctrlSetText[_specialIDC + _u,getText(configFile >> "CfgWeapons" >> _x >> "picture")]; _u = _u + 1; } forEach _currentSpecials; _displayInv = true; }; }; case "clear": { _currentPrimary = ""; _currentSecondary = ""; _currentSidearm = ""; _currentWeapons = []; _currentItems = []; _currentSpecials = []; _currentMagazines = []; ctrlSetText [_primaryIDC,"\ca\ui\data\ui_gear_gun_gs.paa"]; ctrlSetText [_secondaryIDC,"\ca\ui\data\ui_gear_sec_gs.paa"]; ctrlSetText [_sidearmIDC,"\ca\ui\data\ui_gear_hgun_gs.paa"]; for [{_x = 0},{_x < 2},{_x = _x + 1}] do {ctrlSetText[_specialIDC + _x,"\Ca\UI\Data\ui_gear_eq_gs.paa"]}; _displayInv = true; }; }; WF_Gear_Action = ""; }; //Kit Limiting _quantity = _currentPrimary call getQuantity; if (_quantity != "" && _quantity != "1" && _quantity != "2") then { _currentWeapons = _currentWeapons - [_currentPrimary] + [startWeapon]; _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentPrimary >> "magazines") select 0; if !(_magTypeOld in respawnMagazines) then { _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentPrimary >> "magazines") select 1; }; _typeOld = getNumber(configFile >> 'CfgMagazines' >> _magTypeOld >> 'type'); _magTypeNew = getArray(configFile >> "CfgWeapons" >> startWeapon >> "magazines") select 0; _typeNew = getNumber(configFile >> 'CfgMagazines' >> _magTypeNew >> 'type'); _count = count respawnMagazines; respawnMagazines = respawnMagazines - [_magTypeOld]; for "_i" from 0 to ((_count - count respawnMagazines)*(_typeOld/_typeNew) - 1) do { respawnMagazines = respawnMagazines + [_magTypeNew]; }; respawnWeapons = respawnWeapons - [_currentPrimary] + [startWeapon]; _currentPrimary = startWeapon; _updateFiller = true; _updateUnit = true; }; _quantity = _currentSecondary call getQuantity; if (_quantity != "" && _quantity != "1" && _quantity != "2") then { _currentWeapons = _currentWeapons - [_currentSecondary]; _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentSecondary >> "magazines") select 0; if !(_magTypeOld in respawnMagazines) then { _magTypeOld = getArray(configFile >> "CfgWeapons" >> _currentSecondary >> "magazines") select 1; }; _typeOld = getNumber(configFile >> 'CfgMagazines' >> _magTypeOld >> 'type'); _magTypeNew = getArray(configFile >> "CfgWeapons" >> _currentPrimary >> "magazines") select 0; _typeNew = getNumber(configFile >> 'CfgMagazines' >> _magTypeNew >> 'type'); _count = count respawnMagazines; respawnMagazines = respawnMagazines - [_magTypeOld]; for "_i" from 0 to ((_count - count respawnMagazines)*(_typeOld/_typeNew) - 1) do { respawnMagazines = respawnMagazines + [_magTypeNew]; }; respawnWeapons = respawnWeapons - [_currentSecondary]; _currentSecondary = ""; _updateFiller = true; _updateUnit = true; }; //--- Show inventory (Icons). if (_displayInv) then { _displayInv = false; _data = (_currentMagazines + _currentItems) call displayInventory; _inventorySlots = _data select 0; _sidearmInventorySlots = _data select 1; _miscItemSlots = _data select 2; }; //--- Buy a loadout. if (buyLoadout) then { buyLoadout = false; respawnWeapons = _currentWeapons + _currentSpecials + _currentItems; respawnMagazines = _currentMagazines; if (player distance HQ < 50 && isWest) then { hint "Weapons updated!"; call loadout; _updateFiller = true; }; _weapons = (_currentWeapons + _currentSpecials + _currentItems); _ammo = _currentMagazines; _data = (_currentMagazines + _currentItems) call displayInventory; _inventorySlots = _data select 0; _sidearmInventorySlots = _data select 1; _miscItemSlots = _data select 2; }; _lastFiller = _filler; sleep 0.05; }; }; //................................ // Based on Lzryde version, improved by Kol9yN special for ACE Insurgency //................................ // Make box is Global! if (isServer) then { fieldHospital = _this select 0; publicVariable "fieldHospital"; }; // Settings _amountInject = 120; _amountKit = 60; _amountBandage = 120; _amountStretcher = 6; // refresh every 30 minutes _refreshTime = 1800; // Loop while {alive fieldHospital} do { // Clear cargo clearWeaponCargo fieldHospital; clearMagazineCargo fieldHospital; // Fill cargo fieldHospital addWeaponCargo ["ACE_Stretcher",_amountStretcher]; fieldHospital addMagazineCargo ["ACE_Bandage",_amountBandage]; fieldHospital addMagazineCargo ["ACE_Morphine",_amountInject]; fieldHospital addMagazineCargo ["ACE_Epinephrine",_amountInject]; fieldHospital addMagazineCargo ["ACE_Medkit",_amountKit]; // Wait the duration of _refreshTime sleep _refreshTime; }; primaries = [ "M1014", "m107", "ACE_M110", "M14_EP1", "DMR", "M16A2", "M16A2GL", "M24_des_EP1", "M240", "m240_scoped_EP1", "M249_EP1", "M249_TWS_EP1", "M249_m145_EP1", "ACE_M4", "ACE_M4_Aim", "ACE_M4_Eotech", "ACE_M4_GL", "ACE_M4_GL_UP", "ACE_M4_AIM_GL", "ACE_M4_AIM_GL_UP", "ACE_M4_RCO_GL", "ACE_M4A1_Eotech", "ACE_M4A1_ACOG", "ACE_M4A1_GL", "ACE_M4A1_GL_UP", "ACE_M4A1_AIM_GL", "ACE_M4A1_AIM_GL_UP", "ACE_M4A1_RCO2_GL", "ACE_M4A1_RCO2_GL_UP", "ACE_M4A1_RCO_GL", "M40A3", "M60A4_EP1", "SCAR_L_CQC", "SCAR_L_CQC_Holo", "SCAR_L_CQC_EGLM_Holo", "SCAR_L_STD_EGLM_RCO", "SCAR_L_STD_HOLO", "SCAR_L_STD_Mk4CQT", "SCAR_H_CQC_CCO", "SCAR_H_STD_EGLM_Spect", "ACE_TAC50" ]; secondaries = [ "Javelin", "M136", "ACE_M72A2", "ACE_M3TripodProxy", "ACE_MK19MOD3Proxy", "ACE_M3TripodProxy", "ACE_M2HBProxy", "MAAWS", "SMAW", "US_Assault_Pack_EP1", "US_Assault_Pack_Ammo_EP1", "US_Assault_Pack_AmmoSAW_EP1", "US_Assault_Pack_Explosives_EP1", "US_Backpack_EP1", "US_Backpack_AmmoMG_EP1", "US_Backpack_AT_EP1", "US_Backpack_Specops_EP1", "ACE_CharliePack_ACU_Medic" ]; sidearms = ["Colt1911","M9","ACE_P226"]; misc = [ "ACE_C4_M", "ACE_Flashbang", "ACE_HuntIR_M203", "ACE_Claymore_M", "ACE_1Rnd_HE_M203", "1Rnd_HE_M203", "ACE_Knicklicht_R", "ACE_Knicklicht_G", "ACE_Knicklicht_W", "ACE_Knicklicht_Y", "ACE_Knicklicht_B", "ACE_Knicklicht_IR", "FlareWhite_M203", "FlareGreen_M203", "FlareRed_M203", "FlareYellow_M203", "ACE_FlareIR_M203", "ACE_SSWhite_M203", "ACE_SSYellow_M203", "ACE_SSGreen_M203", "ACE_SSRed_M203", "1Rnd_Smoke_M203", "1Rnd_SmokeRed_M203", "1Rnd_SmokeGreen_M203", "1Rnd_SmokeYellow_M203", "ACE_M2_CSWDM", "ACE_MK19_CSWDM", "HandGrenade_West", "IR_Strobe_Marker", "IR_Strobe_Target", "ACE_M34", "ACE_M84", "Mine", "PipeBomb", "SmokeShell", "SmokeShellBlue", "SmokeShellGreen", "SmokeShellOrange", "SmokeShellPurple", "SmokeShellRed", "SmokeShellYellow", "ACE_GlassesSunglasses", "ACE_GlassesBalaklava", "ACE_GlassesBalaklavaGray", "ACE_GlassesBalaklavaOlive", "Binocular", "ItemCompass", "ACE_DAGR", "ACE_Earplugs", "ItemGPS", "ACE_HuntIR_monitor", "ACE_Kestrel4500", "ItemMap", "NVGoggles", "ItemRadio", "ACE_Rope_M_120", "ACE_GlassesLHD_glasses", "ACE_SpottingScope", "Binocular_Vector", "ACE_VS17Panel_M", "ItemWatch", "ACE_Bandage", "ACE_Morphine", "ACE_Epinephrine", "ACE_Medkit" ];GGATCGVAGGATGALFGGATSFFO@pw~ UUUUUUUU-m۶m#QUUU5Զmۆ$UUI$~` UUWJI$I$IJUUUTUUUUUUUUUUUU7m[bU5=M$\AXWU}$Ir AWUU $Iy UU$ApU϶mۅڶUUTPUUUU1m۶a;ӜUU\ځM}!qZTV gޏ!% "(B`? HAH$I$BTWUUG㉘!qM5I$I$AUUUVI 55X-۰m)JTWUU_H$L$ cP&x' P\\TUUUUUUUUIDI6M۱=ӜWVTVڶb+6by55r ۳ۯ{UUWTx&bT\P?nm۶-EmkUUUUUUUUUUUUUUU ^cm cUUUݱ !T\SIo6j %U$E)WCZzI$H$UWTWUUUUUUUUUUUU Fb#mUUI'Ĝ U\% ѶmUUUMةg] UVpI$I$AUUUVUUUUUUUUUUUUUUUUI$I$UUU$I$u UUU̕ !p^U H$I$bTUUUUUUUUUUUp,sUU5gIr P cAU 'uI9,c Ux wI$O' cUUWTj9*Q cAIqP`.0 bb&I$\!PZUUz[r=Y6ZPsaie^` c aMCs!b -)\y!U_PX$I$AiUUUɗI$ c5UUf-H1ZA-U~&b$!WXXWUUUU@7a -~:xQ W~|6v =؄MӜ WTVVo_E6Q}ss}N%2IJ$!T\\:;ZGGATCGVAGGATGALFGGATSFFO@pw~ UUUUUUUUI$IXqUUU5׶mۆ$UUI$~` UUWLI$I$iJUUUTUUUUUUUUUUUU9m[bU5=Mqsyܶb'p&M$!\^WWooȖ60b}C}P: R9V^^JKhandleDamage = { private ["_unit","_hitArea","_damage","_shooter","_ammoUsed","_bool"]; _unit = _this select 0; _hitArea = _this select 1; _damage = _this select 2; _shooter = _this select 3; _ammoUsed = _this select 4; _bool = (_hitArea == "legs" || _hitArea == "hands") && (handsHit _unit == 1 || !canStand _unit); if (!alive _unit) exitWith { _damage}; if (_hitArea == "" && vehicle player == player) exitWith {0}; if (lifeState _unit == "UNCONSCIOUS") exitWith { bloodloss = bloodloss + _damage; if (bloodloss > 100) then { bloodloss = 100; }; hintSilent ("Approximate bloodloss: "+str(round bloodloss)+"%\nCritical bloodloss: 30%"); if (bloodloss >= bloodloosCrit) then { player setDamage 1; }; 0 }; if (vehicle _unit != _unit && _damage > 0.9 && lifeState _unit != "UNCONSCIOUS") exitWith { _unit setUnconscious true; _unit setDamage 0.8; 0.8 }; if (_hitArea == "body" && _damage > 0.9 && lifeState _unit != "UNCONSCIOUS") exitWith { _unit setUnconscious true; _unit setDamage 0.8; 0.8 }; if (_bool && _damage > 0.9 && lifeState _unit != "UNCONSCIOUS") exitWith { _unit setUnconscious true; _unit setDamage 0.8; _damage }; _damage }; handleHeal = { private ["_healPlace","_injured","_anim","_pWep","_posh","_posi","_dy","_dx","_dir"]; _injured = _this select 0; _healPlace = "healPlace0"; _anim = animationState _injured; if (_anim == draggedAnim || _anim in carriedAnims) exitWith { player groupChat "you must release the soldier first!"; false }; _pWep = primaryWeapon player; if (_pWep == "") exitWith { player groupChat "due to scripting limitations you need a primaryWeapon to perform this action"; }; if (currentWeapon player != _pWep) then { player selectWeapon _pWep; sleep 2; }; if ((player distance (_injured modelToWorld healPlace1))<((_injured modelToWorld healPlace0) distance player)) then { _healPlace = "healPlace1"; }; if (_healPlace == "healPlace0") then { player attachTo [_injured, healPlace0]; player playActionNow "medicStartRightSide"; } else { player attachTo [_injured, healPlace1]; player playActionNow "medicStart"; }; sleep 0.001; _posh = player modelToWorld [0,0,0]; _posi = _injured modelToWorld healInjuredModelChestPos; _dy = (_posh select 1) - (_posi select 1); _dx = (_posh select 0) - (_posi select 0); _dir = getDir player; player setDir (270 - (_dy atan2 _dx) - direction _injured); [nil, _injured, "loc", rSPAWN, player, { _healer = _this; nMedics = nMedics + 1; if (animationState player != "ainjppnemstpsnonwrfldnon") then { player playAction "agonyStart"; }; curTime = time - 1; waitUntil { animationState _healer in healAnims }; waitUntil { if (animationState player != "ainjppnemstpsnonwrfldnon") then { player playAction "agonyStart"; }; !alive player || !(animationState _healer in healAnims) || round(time - curTime)*nMedics >= round(minHealTime + bloodloss) }; nMedics = nMedics - 1; if (alive player && animationState _healer in healAnims) then { player setDamage 0; }; }] call RE; waitUntil { animationState player in healAnims }; curTime = time; waitUntil { !(animationState player in healAnims) || !alive _injured || damage _injured == 0}; if (lifeState player == "ALIVE") exitWith { detach player; player switchAction "medicStart"; player playActionNow "medicStop"; true }; false }; injuredLoop = { private ["_bool","_agony"]; { if (lifeState _x == "UNCONSCIOUS") then { _agony = format["%1inAgony", _x]; _bool = missionNamespace getVariable _agony; if isNil "_bool" then { missionNamespace setVariable [_agony, false]; _bool = false; }; if !_bool then { missionNamespace setVariable [_agony, true]; _x spawn animations; }; }; } forEach playableUnits; }; ppEffects = { //if (isNil "ppEffectsOn") then { ppEffectsOn = false; }; //if (isNil "ppUnconscious") then { ppUnconscious = ppEffectCreate [["radialblur", 170], ["colorcorrections", 1580]]; }; if (alive player && lifeState player == "UNCONSCIOUS" && floor((time - curTime)*10 % 5) == 0) then { if!(ppEffectsOn) then { ppEffectsOn = true; { _x ppEffectEnable true } forEach ppUnconscious; }; ppUnconscious select 0 ppEffectAdjust [random 0.005 + 0.0025, random 0.005 + 0.0025, 0.0, 0.0]; ppUnconscious select 0 ppEffectCommit 0.5; ppUnconscious select 1 ppEffectAdjust [1.0, 1.0, 0.0, random 0.6, 0.0, 0.0, random 0.6, 0.0, 1.0, 1.0, 1.0, 0.199, 0.587, 0.114, 0.0]; ppUnconscious select 1 ppEffectCommit 0.5; }; if ((!alive player || lifeState player != "UNCONSCIOUS") && ppEffectsOn) then { { _x ppEffectEnable false} forEach ppUnconscious; ppEffectsOn = false; }; }; initBloodloss = { private ["_anim"]; curTime = time; nMedics = 0; if (animationState player in healAnims) then { detach player; player switchAction "medicStart"; player playActionNow "medicStop"; }; if (animationState player in (draggerAnims+[carrierAnim]+carriedAnims+[draggedAnim])) then { detach player; player switchAction "released"; }; waitUntil { !(animationState player in healAnims) }; if (vehicle player == player) then { player playAction "agonyStart"; }; if (!captive player) then { [nil,player, rSETCAPTIVE, true] call RE; }; while{ alive player && damage player > 0}do{ waitUntil { nMedics == 0 }; if (round(time - curTime) % bloodlossFreq == 0) then { if (bloodloss >= bloodloosCrit) exitWith { player setDamage 1; }; hint ("Approximate bloodloss: "+str(round bloodloss)+"%\nCritical bloodloss: 30%"); _anim = animationState player; if (_anim == draggedAnim || _anim in carriedAnims) exitWith {}; if (!captive player) then { [nil,player, rSETCAPTIVE, true] call RE; }; player playAction "agonyStart"; waitUntil { animationState player == "ainjppnemstpsnonwrfldnon"}; curTime = time; waitUntil { _anim = animationState player; if (_anim != "ainjppnemstpsnonwrfldnon" && _anim != draggedAnim && !(_anim in carriedAnims)) then { player playAction "agonyStart"; }; (time - curTime) > bloodloss*bloodlossFreq/bloodloosCrit || nMedics > 0 }; }; bloodloss = bloodloss + bloodloosCrit/reviveTime; sleep 1; }; if (captive player) then { [nil,player, rSETCAPTIVE, false] call RE; }; player setUnconscious false; if (!alive player) exitWith {}; player playAction "agonyStop"; }; animations = { if isWest then { _this removeAllEventHandlers "handleHeal"; _this addEventHandler ["handleHeal", { _this spawn handleHeal; }]; _this sideChat (switch floor random 2 do { case 0: { "[ugh]"}; case 1: { "[aaah]"}; default { "[arrrrrrrghhhhhh]"}}); }; if (player == _this) then { [] spawn initBloodloss; }; while { lifeState _this == "UNCONSCIOUS"} do { if (vehicle _this != _this) then { _this playAction "GestureAgonyCargo"; //dismount player if driver or gunner and injured if (player == driver _this || player == gunner _this) then { _this enablesimulation false; waitUntil { (speed _this) < 5 }; moveOut _this; _this sideChat "Injured player dismounted!"; _this enablesimulation true; }; waitUntil { vehicle _this == _this }; if (player == _this) then { player playAction "agonyStart"; }; }; waitUntil { vehicle _this != _this || animationState _this == "ainjppnemstpsnonwrfldnon" || lifeState _this != "UNCONSCIOUS" }; _this playAction "GestureSpasm" + str floor random 7; waitUntil { vehicle _this != _this || animationState _this != "ainjppnemstpsnonwrfldnon" || lifeState _this != "UNCONSCIOUS" }; _this playAction "GestureNod"; }; waitUntil { !isNull _this }; _this removeAllEventHandlers "handleHeal"; missionNamespace setVariable [format["%1inAgony", _this], false]; }; private ["_sign","_weapons","_oldPlayerGroup","_playerGroupMembers","_pos","_oldUnit","_Block","_A10Timer","_c","_ctrlText","_PlayerGroup","_HQstate", "_dir", "_xpos", "_ypos", "_vector"]; call disableSerialization; _Block = 10; _A10Timer = time; //_ArtyTimer = time; // arty is definitely an overkill in Insurgency _PlayerGroup = grpNull; _HQstate = startLocation; if isEast then { eastSpawnPos = getMarkerPos "respawn_east"; eastPlayer = player; removeAllWeapons player; }; if isWest then { [] spawn { call disableSerialization; while { true } do { //UI call playerTags; call vehicleTags; sleep 0.1; }; }; }; if isWest then { [] spawn { _aiTimer = time; while { true } do { //AI call aiSpawn; call aiDespawn; if (time - _aiTimer > 30) then { _aiTimer = time; call aiMonitor; }; //call groupAI; sleep 0.1; }; }; }; while { isWest } do { //Markers call gridPath; if (markersEnabled == 1) then { call playerMarkers; call vehicleMarkers; call markerTexts; }; //Misc call clearHouses; call casePickup; call nameStrings; if (_HQstate != startLocation) then { if (_HQstate == HQ) then { hint "HQ mobilised!"; } else { hint "HQ deployed!"; "USFLAG" setMarkerPos startPos; }; _HQstate = startLocation; }; if (getMarkerPos "USFLAG" distance (fieldHospital modelToWorld [0,0,0]) > 50) then { "USFLAG" setMarkerPos (fieldHospital modelToWorld [0,0,0]); }; if (remoteControlling && heliRC == 1) then { hintSilent "You are remotely controlling this vehicle. Press the 'Backspace' key at any time to exit."; if (!alive cameraOn || !alive driver cameraOn || !alive player) then { call exitRC; }; }; //make sure the player returns to his original squad group unless he's piloting the heli _playerGroupMembers = groupMembers(true,"array"); if ((count units group player == 1 && count _playerGroupMembers > 0) && lifeState player != "UNCONSCIOUS" && heliRC == 1) then { _PlayerGroup = group (_playerGroupMembers select 0); if (isNil "heli") exitWith { }; //'heli' might not be a valid object until initWestVehicle has run if (driver heli in units _PlayerGroup) exitWith {}; _oldPlayerGroup = group player; [player] joinSilent _PlayerGroup; deleteGroup _oldPlayerGroup; }; //Respawn if (isDead(player) && isNull respawnCamera) then { [] spawn respawnSystem; }; if (livesLeft == 0 && time > 30) then { if (nearestPlayers(CENTERPOS,AORADIUS,true,"count") == 0) then { endMission "LOSER"; }; }; //Support if !(a10Mode == 0) then { call supportTimer; }; // check to see if a player logged in as admin isAdmin = serverCommandAvailable "#kick"; sleep 0.1; }; while { isEast } do { //Markers call AImarkers; call markerTexts; //Respawn if (isDead(player) && !visibleMap) then { hintSilent "To start playing, open your map and click on the ai unit you wish to become. You can switch units at any time during the game by doing this. If there are no ai units visible on the map it means no blufor players are near hostile areas and so no ai have spawned. In this case either wait awhile or join the blufor team."; }; if (!alive player && player != eastPlayer) then { // respawn delay for east players if (INS_dynamicRespawn == 1) then { // no dynamic respawn for east players _c = 120; } else { _c = INS_dynamicRespawn; }; waitUntil { cutRsc["Rtags", "PLAIN"]; _ctrlText = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64434; _ctrlText ctrlSetStructuredText parseText format[ "Respawn in %1" , abs ceil _c, "#FFFFFF"]; _c = _c - 0.1; sleep 0.1; (ceil _c) <= 0 }; _oldUnit = player; selectPlayer eastPlayer; [_oldUnit] joinSilent oldGroup; }; if (player distance eastSpawnPos > 10 && isDead(player)) then { player setPosATL eastSpawnPos; }; if (player distance startPos < hqProtectionRing && !isDead(HQ)) then { _pos = getPosATL player; _dir = getDirTo(player, startPos); if (_dir < 0) then { _dir = 360 + _dir; }; _vector = [sin(_dir),cos(_dir)]; _xpos = (_pos select 0) - (_vector select 0); _ypos = (_pos select 1) - (_vector select 1); _pos = [_xpos,_ypos,0]; player setPosATL _pos; hintSilent "You are not allowed near the enemy's main base."; }; //UI call eastPlayerTags; sleep 0.1; }; private ["_mkr","_var","_pos","_houses"]; _houses = [CENTERPOS,AORADIUS, 3, true] call findHouses; { _pos = _x call getGridPos; _mkr = str _pos; if (getMarkerPos _mkr select 0 == 0) then { _mkr = createMarkerLocal[_mkr, _pos]; _mkr setMarkerShapeLocal "RECTANGLE"; _mkr setMarkerTypeLocal "SOLID"; _mkr setMarkerSizeLocal [50,50]; _mkr setMarkerAlphaLocal 0.2; }; _var = missionNamespace getVariable format["%1cleared", _mkr]; if isNil "_var" then { _mkr setMarkerColorLocal "ColorRed"; } else { _mkr setMarkerColorLocal "ColorGreen"; }; } forEach _houses; if (isWest && markersEnabled == 1) then { { _mkr = createMarkerLocal[_x, spawnPos]; _mkr setMarkerTypeLocal "mil_triangle"; _mkr setMarkerSizeLocal [0.5,0.7]; } forEach westPlayerStrings; { _mkr = createMarkerLocal[_x, spawnPos]; _mkr setMarkerTypeLocal "mil_triangle"; _mkr setMarkerSizeLocal [0.8,1.0]; _i = westVehicleStrings find _x; if (_i > 3 && _i < 8) then { _mkr setMarkerSizeLocal [0.65,0.85]; }; } forEach westVehicleStrings; }; gridPath = { private ["_gMkr"]; if (vehicle player != player) exitWith {}; _gMkr = str(player call getGridPos); if isNil "_gMkr" exitWith {}; if (markerColor _gMkr == "ColorGreen") exitWith {}; if (nearestEastMen(call compile _gMkr,70,true,"count") > 0 || nearestPlayers(call compile _gMkr,140,true,"count") < playersNeeded) exitWith {}; _gMkr setMarkerColor "ColorGreen"; missionNamespace setVariable [format["%1cleared", _gMkr], true]; publicVariable format["%1cleared", _gMkr]; }; AImarkers = { private ["_mkr","_txt","_color","_isPlayer"]; { if (alive _x && _x != graveDigger) then { _mkr = str _x; if (getMarkerPos _mkr select 0 == 0) then { _mkr = createMarkerLocal[_mkr, getPosATL _x]; _mkr setMarkerShapeLocal "ICON"; _mkr setMarkerTypeLocal "mil_dot"; _mkr setMarkerSizeLocal [0.5,0.7]; _mkr spawn { sleep 10; deleteMarkerLocal _this; }; }; _mkr setMarkerPosLocal getPosATL _x; _mkr setMarkerDirLocal getDir _x; _txt = getText (configFile >> "CfgVehicles" >> typeOf _x >> "displayName"); _isPlayer = str leader _x in eastPlayerStrings; if _isPlayer then { _txt = name _x; }; _mkr setMarkerTextLocal _txt; _color = "ColorRed"; if (_isPlayer || nearestPlayers(getPosATL _x,100,true,"count") > 0 || startPos distance _x < hqProtectionRing) then { _color = "ColorRed"; }; _mkr setMarkerColorLocal _color; }; } forEach nearestObjects[CENTERPOS, eastInfClasses, AORADIUS]; }; playerMarkers = { private ["_colour","_plr","_vcl"]; { if !isNil _x then { _plr = call compile _x; if(isNull _plr) exitWith { _x setMarkerPosLocal spawnPos; _x setMarkerTextLocal ""; }; _vcl = vehicle _plr; if (_vcl != _plr) exitWith { _x setMarkerPosLocal spawnPos; }; _colour = "ColorBlue"; if (str _plr in squadUnitStrings(squadString(player))) then { _colour = "ColorGreen"; }; if (!alive _plr) then { _colour = "ColorBlack"; }; if (lifeState _plr == "UNCONSCIOUS") then { _colour = "ColorRed"; }; _x setMarkerColorLocal _colour; _x setMarkerPosLocal getPosATL _plr; _x setMarkerDirLocal getDir _plr; } else { _x setMarkerPosLocal spawnPos; _x setMarkerTextLocal ""; }; } forEach westPlayerStrings; }; vehicleMarkers = { private ["_bool","_mkr","_vcl","_crew","_type"]; { if !isNil _x then { _mkr = _x; _vcl = call compile _x; _mkr setMarkerPosLocal getPosATL _vcl; _mkr setMarkerDirLocal getDir _vcl; _crew = crew _vcl; _type = typeOf _vcl; if (!alive _vcl) then { _mkr setMarkerColorLocal "ColorBlack"} else { if (count _crew == 0 || (count _crew == 1 && _type == HELITYPE) ) then { _mkr setMarkerColorLocal "ColorYellow"; } else { _bool = false; for "_i" from 0 to (count _crew - 1) do { if (str (_crew select _i) in squadUnitStrings(squadString(player))) then { _bool = true; }; }; if (_bool) then { _mkr setMarkerColorLocal "ColorGreen"; } else { _mkr setMarkerColorLocal "ColorBlue"; }; }; }; }; } forEach westVehicleStrings; }; markerTexts = { if (isNil "mapClickBool") then { mapClickBool = false; }; if !visibleMap exitWith { if mapClickBool then { mapClickBool = false; }; if mapInUse then { mapInUse = false; }; }; if !(mapClickBool || mapInUse) then { mapClickBool = true; onMapSingleClick ' _pos = [_pos select 0, _pos select 1]; if isEast exitWith { // Mission is set to COOP only if (eastRatio == -1) exitWith { _text = format["The mission is set to COOP only! Please join BLUFOR!",_num]; titleText[_text, "PLAIN", 3]; }; // If teams are not balanced, do not let OPFOR players spawn _num = floor(playersNumber west / eastRatio); _pstr = call compile (player getVariable ["INS_playerString","9"]); if !(unitNumber(_pstr) <= _num) exitWith { _text = format["Only OPFOR units up to slot %1 can spawn, due to imbalance (OPFOR:BLUFOR ratio is 1:%2)!",_num, eastRatio]; titleText[_text, "PLAIN", 3]; }; _units = nearestEastMen(_pos,40,true,"array"); if (count _units == 0) exitWith {}; _unit = _units select 0; if (str leader _unit in eastPlayerStrings) exitWith { player groupChat "Cannot switch into a player''s unit"; }; if (nearestPlayers(getPosATL _unit,100,true,"count") > 0 || startPos distance _unit < hqProtectionRing) exitWith { player groupChat "This unit is too close to the enemy"; }; if ((time - lastspawntime) < switchcooldown) exitwith { _tiem = time - lastspawntime; _text = format["You have to wait %1 seconds before switching unit.",_tiem]; player groupChat _text; }; _unit spawn { _unit = _this; _PlayerGroup = group _unit; [_unit] joinSilent startGroup; _oldUnit = player; waitUntil { local _unit }; selectPlayer _unit; player setVariable ["INS_playerString",str _oldUnit, true]; lastspawntime = time; hint "Switched unit!"; //self bomber _unit call addActionWearBelt; if !(str _oldUnit in eastPlayerStrings) then { [_oldUnit] joinSilent oldGroup;}; oldGroup = _PlayerGroup; }; openMap false; }; _units = nearestObjects[_pos,westAllClasses,40]; if (count _units == 0) exitWith {}; _unit = _units select 0; _mkr = str _unit; if (_unit isKindOf "man" && _mkr in westPlayerStrings) then { _id = unitID(_unit); _name = getName(_unit); if (markerText _mkr == "") exitWith { _mkr setMarkerTextLocal _id; }; if (markerText _mkr == _id) exitWith { _mkr setMarkerTextLocal _name; }; _mkr setMarkerTextLocal ""; }; if (_unit in westVehicles) then { _id = victorID(_unit); if (markerText _mkr == "") exitWith { _mkr setMarkerTextLocal _id; }; _mkr setMarkerTextLocal ""; }; '; }; }; clearHouses = { private ["_house","_cleared","_houses","_gMkr"]; _gMkr = str(player call getGridPos); if (markerColor _gMkr == "ColorRed") then { _houses = [getPosATL player, 8, 3, false] call findHouses; if (count _houses > 0) then { _house = _houses select 0; _cleared = _house getVariable "cleared"; if (isNil "_cleared") then { if (nearestEastMen(getPosATL _house, 10, true, "count") == 0) then { _house setVariable ["cleared", true]; }; }; }; }; }; casePickup = { private ["_cases","_case","_cache"]; if (_Block < 10) exitWith { _Block = _Block + 1; }; _cases = nearestObjects[getPosATL player,["suitcase"], 3]; if (count _cases == 0) exitWith {}; _case = _cases select 0; if isNull _case exitWith {}; _Block = 0; deleteVehicle _case; player groupChat "you retrieved some intel on the location of an ammo cache"; _cache = nearestObjects[getPosATL player, [cacheType], AORADIUS] select 0; if (isNil "_cache") exitWith { hint "Currently, there is no intel on caches within your AO. Time to move on and look elsewhere!"; }; [nil,nil,rSPAWN,_cache,{ if (isServer) then { _this call createIntel; }; hint "New intel received on the location of an ammo cache. A marker has been added to the map."; }] call RE; }; nameStrings = { private ["_id","_name","_plr"]; { _id = westPlayerStrings find _x; if !isNil _x then { _plr = call compile _x; if (!isNull _plr && isPlayer _plr) then { if alive _plr then { if (playerNames select _id == "Error: No unit") exitWith {}; _name = name _plr; if (playerNames select _id != _name) then { playerNames set[_id, _name]; }; }; } else { if (playerNames select _id != "") then { playerNames set[_id, ""]; }; }; } else { if (playerNames select _id != "") then { playerNames set[_id, ""]; }; }; } forEach westPlayerStrings; }; vclisFull = { if (_this isKindOf "man" || _this isKindOf "building") exitWith { false }; if (_this emptyPositions "Driver" > 0) exitWith { false }; if (_this emptyPositions "Gunner" > 0)exitWith { false }; if (_this emptyPositions "Commander" > 0) exitWith { false }; if (_this emptyPositions "Cargo" > 0) exitWith { false }; true }; moveInVehicle = { private ["_id"]; if (_this emptyPositions "Driver" > 0) exitWith { player action["getInDriver", _this]; }; if (_this emptyPositions "Gunner" > 0) exitWith { player action["getInTurret", _this, [0]]; }; if (_this emptyPositions "Commander" > 0) exitWith { player action["getInCommander", _this]; }; if (_this emptyPositions "Cargo" > 0) exitWith { _id = count (crew _this - [driver _this] - [gunner _this] - [commander _this]); player action["getInCargo", _this, _id]; }; }; crewToStr = { private ["_pos","_str","_man","_num","_vcl"]; _num = count _this - 1; _vcl = vehicle (_this select 0); _str = ""; for "_j" from 0 to (_num) do { _man = _this select _j; if (alive _man && str _man in westPlayerStrings) then { _str = _str + getName(_man); _pos = " (Cargo)"; if (driver _vcl == _man) then { _pos = " (Driver)"; }; if (_vcl turretUnit [0] == _man) then { _pos = " (Turret)"; }; if (_vcl turretUnit [1] == _man) then { _pos = " (Front Gunner)"; }; _str = _str + _pos; if (_j < _num) then { _str = _str + "
"; }; }; }; _str }; equals = { private ["_bool","_arr1","_arr2"]; _arr1 = _this select 0; _arr2 = _this select 1; _bool = true; if (count _arr1 != count _arr2) exitWith { false}; for "_i" from 0 to (count _arr1 - 1) do { if (!((_arr1 select _i) in _arr2)) exitWith { _bool = false; }; if (!((_arr2 select _i) in _arr1)) exitWith { _bool = false; }; }; _bool }; private ["_trg"]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "Ammo Caches Left"; _trg setTriggerActivation ["ALPHA", "PRESENT", true]; _trg setTriggerStatements ["this", ' hint parseText format[" %1/%2 ammo cache''s have been destroyed. ",cacheCount - count cacheList, cacheCount] ', ""]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "Player Identities"; _trg setTriggerActivation ["BRAVO", "PRESENT", true]; _trg setTriggerStatements ["this", ' _str = ""; { if (!isNil _x) then { _plr = call compile _x; if !isNull _plr then { _color = "#0000FF"; if (str _plr in squadUnitStrings(squadString(player))) then { _color = "#00FF00"; }; _str = _str + format[" %2: %3

", _color, unitID(_plr), getName(_plr)]; }; }; } forEach westPlayerStrings; hint parseText _str; ', ""]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "Server Load"; _trg setTriggerActivation ["CHARLIE", "PRESENT", true]; _trg setTriggerStatements ["this", ' if (serverLoadHint) exitWith { player groupChat "You may only check the server load every 30 seconds to prevent network lag"; }; serverLoadHint = true; [nil,server,"loc",rSPAWN,player,{ [nil,_this,"loc",rSPAWN,diag_fps,{ hint format["nAiUnits: %1\nnGroups: %2\nServer FPS: %3\n Run Time: %4 mins", numberOfAI, count allGroups, round _this, round (time/60)]; sleep 30; serverLoadHint = false; }] call RE; }] call RE; ', ""]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "View Distance - 100"; _trg setTriggerActivation ["DELTA", "PRESENT", true]; _trg setTriggerStatements ["this", 'if (viewDistance > 0) then { setViewDistance (viewDistance - 100); }; hintSilent format["View Distance: %1", viewDistance]', ""]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "View Distance + 100"; _trg setTriggerActivation ["ECHO", "PRESENT", true]; _trg setTriggerStatements ["this", 'if (viewDistance < 5000) then { setViewDistance (viewDistance + 100); }; hintSilent format["View Distance: %1", viewDistance]', ""]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "Fix Headbug"; _trg setTriggerActivation ["FOXTROT", "PRESENT", true]; _trg setTriggerStatements ["this", ' if (lifeState player == "UNCONSCIOUS") exitWith {}; _pos = getPosATL player; _vcl = "Old_bike_TK_CIV_EP1" createVehicleLocal spawnPos; player moveInDriver _vcl; moveOut player; player setPosATL _pos; deleteVehicle _vcl; player switchCamera "INTERNAL"; detach player; ', ""]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "Unflip Vehicle"; _trg setTriggerActivation ["GOLF", "PRESENT", true]; _trg setTriggerStatements ["this", ' _vehicle = vehicle player; if (player != _vehicle) then { _vehicle setPos [getPos _vehicle select 0, getPos _vehicle select 1, 0.5]; _vehicle setVelocity [0,0,-0.5]; }; if (player == _vehicle) then { _objects = player nearEntities[["Car","Motorcycle","Tank"],5]; { if (count _objects > 0) then { _x setPos [getPos _x select 0, getPos _x select 1, 0.5]; _x setVelocity [0,0,-0.5]; }; } forEach _objects; }; ', ""]; if (startLives > -1) then { deleteVehicle _trg; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "Lives remaining"; _trg setTriggerActivation ["GOLF", "PRESENT", true]; _trg setTriggerStatements ["this", ' hint parseText format[" West lives remaining: %1 ",livesLeft]; ', ""]; }; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText " "; _trg setTriggerActivation ["HOTEL", "PRESENT", true]; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText " "; _trg setTriggerActivation ["INDIA", "PRESENT", true]; if DEBUG then { deleteVehicle _trg; _trg = createTrigger ["EmptyDetector", position player]; _trg setTriggerText "teleport"; _trg setTriggerActivation ["INDIA", "PRESENT", true]; _trg setTriggerStatements ["this", 'hint "Click on map to select teleport destination"; onMapSingleClick "player setPosATL _pos; onMapSingleClick """"; hint ""Teleported!"" " ',""]; }; showRadio true; onPlayerKilled = { if (livesLeft > 0 && time > 30) then { westDeaths = westDeaths + 1; publicVariable "westDeaths"; hint parseText format[" West lives remaining: %1 ",livesLeft]; }; if (remoteControlling && heliRC == 1) then { call exitRC; }; detach player; player setUnconscious false; if (captive player) then { [nil,player, rSETCAPTIVE, false] call RE; }; camPlayer = objNull; deadPos = getPosATL player; [server,server,"loc",rSPAWN,player,{ sleep remPlayerBodyTime; hideBody _this; sleep 10; deleteVehicle _this; }] call RE; if (INS_dynamicRespawn == 1) then { [] call INS_setRespawnDelay; } else { setPlayerRespawnTime INS_dynamicRespawn }; INS_lastRespawnTime = time; }; respawnSystem = { private ["_c","_vehicle","_arr","_camPlayer","_plrs","_ctrlText","_pos"]; call disableSerialization; scopeName "main"; _camPlayer = objNull; respawnCamera = "camera" camCreate [0,0,0]; respawnCamera cameraEffect ["INTERNAL","Back"]; while {isDead(player) && time > 30} do { if (isNull camPlayer || _camPlayer != camPlayer) then { _arr = groupMembers(true,"array")+[fieldHospital]; if (livesLeft == 0) then { _arr = nearestPlayers(CENTERPOS,AORADIUS,true,"array"); }; if (isNull camPlayer) then { camPlayer = _arr select 0; }; camAttachCoords = [0,-3,1.5]; if (camPlayer == fieldHospital) then { camAttachCoords = [-50, 0, 12]; }; respawnCamera camSetTarget camPlayer; titleText [" ","Black in", 2]; respawnCamera camCommit 0; respawnCamera attachTo [camPlayer, camAttachCoords]; _camPlayer = camPlayer; _vehicle = camPlayer; enterSpawn = false; _c = 5; }; if (alive camPlayer && !enterSpawn && isDead(player)) then { if (_c < 5) then { _c = 5; }; if (_vehicle != vehicle camPlayer) then { _vehicle = vehicle camPlayer; respawnCamera attachTo [_vehicle, camAttachCoords]; respawnCamera camSetTarget _vehicle; respawnCamera camCommit 0; }; call respawnTags; }; if (_camPlayer == camPlayer && enterSpawn) then { _plrs = nearestPlayers(getPosATL camPlayer,300,true,"array"); if (camPlayer != fieldHospital && (nearestEastMen(getPosATL camPlayer,respawnRange,true,"count") > 0 || vehicle camPlayer call vclisFull) ) exitWith { enterSpawn = false; _c = 5; }; cutRsc["Rtags", "PLAIN"]; _ctrlText = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64434; _ctrlText ctrlSetStructuredText parseText format[ "Spawning in %1

Left Arrow: Previous unit
Right Arrow: Next unit
" , abs ceil _c, "#FFFFFF"]; if ((ceil _c) <= 0) exitWith { breakTo "main"; }; _c = _c - 0.1; }; if (!alive camPlayer) then { camPlayer = objNull; }; sleep 0.1; }; if (!isNull camPlayer && alive camPlayer) then { call addActions; if (vehicle camPlayer != camPlayer) exitWith { (vehicle camPlayer) call moveInVehicle; }; player setDir getDir camPlayer; player setPosATL getPosATL camPlayer; } else { _pos = startLocation modelToWorld [-8,-13+(squadNumber(player)-1)*6+(unitNumber(player)-1)*1.2,0]; player setPosATL _pos; player setDir (getDir startLocation)+90; }; if (typeOf player in canSetRallyUSA) then { player removeAction action_rpu; action_rpu = player addAction ["Put rallypoint", "scripts\buildusa.sqf","rallypoint",998, false, true,""]; _usakilled = player addEventHandler ["killed", {_this execVM "scripts\rausa.sqf";}]; }; if (typeOf player in canSetRallyPMC) then { player removeAction action_rpp; action_rpp = player addAction ["Put rallypoint", "scripts\buildpmc.sqf","rallypoint",998, false, true,""]; _pmckilled = player addEventHandler ["killed", {_this execVM "scripts\rapmc.sqf";}]; }; //if !(isDedicated) then { if (typeOf player in PMCUnits) then {["ca\missions_pmc\data\ui_gps_ca.paa",0,0] call bis_fnc_customGPS;}; //}; openMap [false,false]; respawnCamera cameraEffect ["terminate","back"]; camDestroy respawnCamera; "dynamicBlur" ppEffectEnable true; "dynamicBlur" ppEffectAdjust [6]; "dynamicBlur" ppEffectCommit 0; "dynamicBlur" ppEffectAdjust [0.0]; "dynamicBlur" ppEffectCommit 5; }; INS_setRespawnDelay = { private ["_maxdelay","_timealive","_m","_newrespdelay"]; _maxdelay = 120; //max. resp delay _timealive = time - INS_lastRespawnTime; //linearly decreasing delay _m = ( _maxdelay/3600) * -1; _newrespdelay = 5 max (_timealive * _m + _maxdelay); setPlayerRespawnTime _newrespdelay; INS_lastRespawnTime = time + _newrespdelay; };exitRC = { objNull remoteControl driver cameraOn; vehicle player switchCamera "INTERNAL"; [player] joinSilent startGroup; }; supportTimer = { private ["_leader"]; _leader = squadLeader(player); if (_A10Timer == 99999 && !A10available) then { _A10Timer = time; }; if (isNil _leader) exitWith { }; if ((player == call compile _leader) && !A10available && time - _A10Timer > A10respawn) then { [west,"HQ"] sideChat "CAS (A10) is now available for your squad"; A10available = true; _A10Timer = 99999; }; }; if isWest then { controlChopper = { private ["_pilot"]; _PlayerGroup = ["pilot" + str _this, "Grp", "", "west"] call getGroup; _pilot = driver _this; if !(pilotController in units (group _pilot)) exitWith { player groupChat "This helicopter is currently being controlled by another player"; }; player joinAsSilent [_PlayerGroup, 1]; _pilot joinAsSilent [_PlayerGroup, 2]; waitUntil { local _pilot }; _pilot disableAI "TARGET"; _pilot disableAI "AUTOTARGET"; _pilot disableAI "MOVE"; _pilot disableAI "ANIM"; _this switchCamera "INTERNAL"; player remoteControl _pilot; }; if (heliRC == 1) then { BIS_MENU_GroupCommunication = [ ["Support",true], ["Request CAS (A10)", [2], "", -5, [["expression", ' if (lifeState player == "UNCONSCIOUS") exitWith {}; if (a10Mode == 0) exitWith { [west,"HQ"] sideChat "CAS (A10) support is not available on this mission"; }; _leader = call compile squadLeader(player); _str = "you need a squad leader to call for support"; if (isNil "_leader") exitWith { player groupChat _str; }; if (isNull _leader || !isPlayer _leader) exitWith { player groupChat _str; }; if (!alive _leader || isDead(_leader)) exitWith { player groupChat "your squad leader is dead!"; }; player sideChat format["Sent request to %1 (%2) for support.", unitID(_leader), getName(_leader)]; [nil,_leader,"loc",rSPAWN,player,{ if (!A10available && !DEBUG) exitWith { [nil,_this,"loc",rSPAWN,player,{[west,"HQ"] sideChat "CAS (A10) support is currently not available for your squad";}] call RE; }; requestingPlayer = _this; player sideChat format["%1 (%2) is requesting CAS support. Accept?", unitID(_this), getName(_this)]; showCommandingMenu "#USER:query_Menu_CAS"; }] call RE; ']], "1", "1"], ["Control Helicopter", [3], "", -5, [["expression", ' heli spawn controlChopper; ']], "1", "1"] ]; } else { BIS_MENU_GroupCommunication = [ ["Support",true], ["Request CAS (A10)", [2], "", -5, [["expression", ' if (lifeState player == "UNCONSCIOUS") exitWith {}; if (a10Mode == 0) exitWith { [west,"HQ"] sideChat "CAS (A10) support is not available on this mission"; }; _leader = call compile squadLeader(player); _str = "you need a squad leader to call for support"; if (isNil "_leader") exitWith { player groupChat _str; }; if (isNull _leader || !isPlayer _leader) exitWith { player groupChat _str; }; if (!alive _leader || isDead(_leader)) exitWith { player groupChat "your squad leader is dead!"; }; player sideChat format["Sent request to %1 (%2) for support.", unitID(_leader), getName(_leader)]; [nil,_leader,"loc",rSPAWN,player,{ if (a10Mode == 0) exitWith { [nil,_this,"loc",rSPAWN,player,{[west,"HQ"] sideChat "CAS (A10) support is not available on this mission";}] call RE; }; if (!A10available && !DEBUG) exitWith { [nil,_this,"loc",rSPAWN,player,{[west,"HQ"] sideChat "CAS (A10) support is currently not available for your squad";}] call RE; }; requestingPlayer = _this; player sideChat format["%1 (%2) is requesting CAS support. Accept?", unitID(_this), getName(_this)]; showCommandingMenu "#USER:query_Menu_CAS"; }] call RE; ']], "1", "1"] ]; }; query_Menu_CAS = [ ["Accept call for support",false], ["Yes",[2],"",-5,[["expression",' [nil,requestingPlayer,"loc",rSPAWN,player,{ if (a10Mode == 2) then { player sideChat format["%1 (%2) accepted your request for support. Click a location on the map to designate for CAS", unitID(_this), getName(_this)]; mapInUse = true; openMap true; onMapSingleClick "call spawnA10;"; } else { player sideChat format["%1 (%2) accepted your request for support. CAS inbound.", unitID(_this), getName(_this)]; call spawnA10; }; }] call RE; ']],"1","1"], ["No",[3],"",-5,[["expression",' [nil,requestingPlayer,"loc",rSPAWN,player,{ player sideChat format["%1 (%2) Denied your request for support", unitID(_this), getName(_this)]; }] call RE; ']],"1","1"] ]; query_Menu_MHQ = [ ["Accept mobilise request",false], ["Yes",[2],"",-5,[["expression",' _pos = HQ modelToWorld [0,0,0]; _pos set [2,0]; HQ setPosATL spawnPos; MHQ setDamage 0; MHQ setFuel 1; MHQ setPosATL _pos; ']],"1","1"], ["No",[3],"",-5,[["expression",' [nil,requestingPlayer,"loc",rSPAWN,player,{ player sideChat format["%1 (%2) Denied your request to mobilise the HQ", unitID(_this), getName(_this)]; }] call RE; ']],"1","1"] ]; }; artillery = { private ["_c","_pos","_sID","_gPos"]; _pos = _this; artyAvailable = false; _pos set [2,0]; hint "Position selected!"; openMap [false,false]; mapInUse = false; _sID = squadID(player); _gPos = mapGridPosition _pos; player sideChat format["Crossroad, this is %1, Adjust fire, over.", _sID]; sleep 5; [west,"HQ"] sideChat format["%1 this is Crossroad, adjust fire, out.", _sID]; sleep 4; player sideChat format["Grid %1, over", _gPos]; sleep 3; [west,"HQ"] sideChat format["Grid %1, out", _gPos]; sleep 5; [west,"HQ"] sideChat "R, F, DPICM in effect, 5 rounds, over."; sleep 3; player sideChat "DPICM in effect, 5 rounds, out."; sleep 7; [west,"HQ"] sideChat "shot, over."; sleep 3; player sideChat "shot, out."; sleep 25; [west,"HQ"] sideChat "splash, over."; sleep 2; player sideChat "splash, out."; sleep 5; _c = 0; while { _c < 5 } do { "ARTY_R_227mm_HE" createVehicle [(_pos select 0) + random 50 - random 50,(_pos select 1) + random 50 - random 50,(_pos select 2)]; sleep (0.5+random 2); _c = _c + 1; }; }; spawnA10 = { private ["_startPos","_dir","_pos2","_vcl","_ai","_grp"]; [nil,call compile (squadString(player)+"1"),"loc",rSPAWN,player,{ A10available = false; }] call RE; if (a10Mode == 2) then { hint "Position selected!"; onMapSingleClick ""; openMap [false,false]; mapInUse = false; _startPos = getPosATL player; _dir = ((_pos select 0) - (CENTERPOS select 0)) atan2 ((_pos select 1) - (CENTERPOS select 1)); _pos2 = [(_pos select 0) + (sin _dir)*5000,(_pos select 1) + (cos _dir)*8000,500]; _vcl = createVehicle ["A10_US_EP1",spawnPos,[],0,"NONE"]; _vcl engineOn true; _vcl setPosATL _pos2; _dir = ((_pos select 0) - (_pos2 select 0)) atan2 ((_pos select 1) - (_pos2 select 1)); _vcl setDir _dir; _vcl setVelocity [(sin _dir)*100,(cos _dir)*100,20]; moveOut player; player moveInDriver _vcl; [nil,nil,rSPAWN,[_vcl,player,_startPos,_pos],{ _vcl = _this select 0; _plr = _this select 1; _pos = _this select 3; if (player == _plr) then { flyTime = "-"; _vcl addEventHandler ["fired",{ (_this select 0) removeEventHandler ["fired",0]; flyTime = a10FlyTime;}]; while { alive player } do { if (typeName flyTime != "STRING") exitWith {}; hintSilent format[ "Distance to target: %1m\nBearing-target offset: %2dgs" , round(player distance _pos), round([player,_pos] call getBearing)]; }; curTime = time; waitUntil { hintSilent format[ "Time remaining: %1s\nDistance to target: %2m\nBearing-target offset: %3dgs" , round(flyTime - (time - curTime)), round(player distance _pos), round([player,_pos] call getBearing)]; time - curTime > flyTime || !alive player }; if (alive player && vehicle player == _vcl) then { player setPosATL (_this select 2); if (lifeState player == "UNCONSCIOUS") then { player setUnconscious false; }; }; }; if isServer then { waitUntil { !isNull (driver _vcl) }; waitUntil { isNull (driver _vcl) || !alive _vcl }; if !alive _vcl exitWith {}; _dir = getDir _vcl; _grp = createGroup civilian; _man = _grp createUnit [typeOf _plr, spawnPos, [], 0, "NONE"]; _man assignAsDriver _vcl; _man moveInDriver _vcl; _vcl flyInHeight 300; _vcl engineOn true; _vcl setCaptive true; _pos2 = getPosATL _vcl; _man doMove [(_pos2 select 0) + (sin _dir)*10000,(_pos2 select 1) + (cos _dir)*10000,0]; waitUntil { nearestPlayers(getPosATL _vcl, 3000, true, "count") == 0 || !alive _vcl }; if alive _vcl then { deleteVehicle _vcl; }; deleteVehicle _man; deleteGroup _grp; }; }] call RE; } else { _grp = group player; _pos = getPosATL player; _dir = ((_pos select 0) - (CENTERPOS select 0)) atan2 ((_pos select 1) - (CENTERPOS select 1)); _pos2 = [(_pos select 0) + (sin _dir)*5000,(_pos select 1) + (cos _dir)*8000,500]; _arr = [_pos2, 180, "A10_US_EP1", _grp] call bis_fnc_spawnvehicle; _vcl = _arr select 0; _ai = (_arr select 1) select 0; _vcl engineOn true; _vcl setPosATL _pos2; _dir = ((_pos select 0) - (_pos2 select 0)) atan2 ((_pos select 1) - (_pos2 select 1)); _vcl setDir _dir; _vcl setVelocity [(sin _dir)*100,(cos _dir)*100,20]; flyTime = a10FlyTime*2; curTime = time; waitUntil { hintSilent format[ "Eagle CAS standby, taking orders!\n\nTime remaining: %1s" , round((flyTime) - (time - curTime))]; time - curTime > (flyTime) || !alive _ai || !alive _vcl }; if (alive _vcl) then { player sideChat format["Eagle to %1: We are bingo fuel, RTB. See you soon! Eagle over and out.",unitID(player)]; hint "Eagle CAS is RTB"; _grp = createGroup civilian; [_vcl] join _grp; _vcl doMove [(_pos2 select 0) + (sin _dir)*10000,(_pos2 select 1) + (cos _dir)*10000,0]; waitUntil { nearestPlayers(getPosATL _vcl, 3000, true, "count") == 0 || !alive _vcl }; deleteVehicle _vcl; } else { hint "Eagle CAS was destroyed"; _grp = createGroup west; if (alive _ai) then { [_ai] join _grp; }; }; }; }; fillOptionsDialog = { disableSerialization; private ["_display","_ctrl","_glindex","_index"]; _disp = (uiNameSpace getVariable "INSURGENCY_OPTIONS"); _ctrl = _disp displayCtrl 1001; _glindex = -1; { _index = _ctrl lbAdd _x; if (grasslayer == _index) then {_glindex = _index}; } forEach ["No Gras","Little Gras", "Default", "Full Grass"]; }; respawnTags = { private ["_txt","_ctrlText","_bool","_color"]; if camMap exitWith {}; if (livesLeft == 0) exitWith { cutRsc["Rtags", "PLAIN"]; _color = "#347C17"; if (!(str camPlayer in squadUnitStrings(squadString(player)))) then { _color = "#C11B17"; }; _txt = format["%1: %2 (Spectating)", unitID(camPlayer), getName(camPlayer)]; _ctrlText = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64434; _ctrlText ctrlSetStructuredText parseText format[ "%1" , _txt, _color]; }; _bool = nearestEastMen(getPosATL camPlayer,respawnRange,true,"count") == 0; if (camPlayer != fieldHospital) then { _txt = format["%1: %2 (Press Enter to Spawn)", unitID(camPlayer), getName(camPlayer)]; _color = "#347C17"; if !_bool then { _txt = format["%1: %2 (Cannot spawn while enemies near)", unitID(camPlayer), getName(camPlayer)]; _color = "#C11B17"; }; } else { _txt = "Main Base (Press Enter to Spawn)"; _color = "#2554C7"; }; if (lifeState camPlayer == "UNCONSCIOUS") then { _txt = format["%1: %2 (Cannot spawn on a critically wounded soldier)", unitID(camPlayer), getName(camPlayer)]; _color = "#C11B17"; }; if (vehicle camPlayer call vclisFull) then { _txt = format["%1: %2 (Cannot spawn while vehicle is full)", unitID(camPlayer), getName(camPlayer)]; _color = "#C11B17"; }; cutRsc["Rtags", "PLAIN"]; _ctrlText = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64434; _ctrlText ctrlSetStructuredText parseText format[ "%1

Left Arrow: Previous unit
Right Arrow: Next unit
" , _txt, _color]; }; playerTags = { private ["_color","_cT","_ctrlOffset"]; if (!isNull respawnCamera || isNull cursorTarget || !tagsOn || cameraView == "GUNNER") exitWith {}; _cT = cursorTarget; if (!(str _cT in westPlayerStrings) || !(_cT isKindOf "man") || (!alive _cT && lifeState _cT != "DEAD-RESPAWN") ) exitWith {}; cutRsc["Rtags", "PLAIN"]; _ctrlOffset = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64435; _color = "#2554C7"; if (str _cT in squadUnitStrings(squadString(player))) then { _color = "#347C17"; }; if (lifeState _cT == "UNCONSCIOUS") then { _color = "#C11B17"; }; if (lifeState _cT == "DEAD-RESPAWN") then { _color = "#736F6E"; }; _ctrlOffset ctrlSetStructuredText parseText format[ "%1
%2
" , unitID(_cT), getName(_cT), _color]; }; eastPlayerTags = { private ["_color","_cT","_ctrlOffset"]; if (!isNull respawnCamera || isNull cursorTarget || !tagsOn || cameraView == "GUNNER") exitWith {}; _cT = cursorTarget; if (!(str leader _cT in eastPlayerStrings) || !(_cT isKindOf "man") || !alive _cT ) exitWith {}; cutRsc["Rtags", "PLAIN"]; _ctrlOffset = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64435; _color = "#2554C7"; if (_cT in units group player) then { _color = "#347C17"; }; _ctrlOffset ctrlSetStructuredText parseText format[ "%1" , name _cT, _color]; }; vehicleTags = { private ["_bool","_color","_crew","_ctrlOffset","_cT","_dist","_nVcls","_vcl","_ctrlCenter"]; if (!isNull respawnCamera || isNull cursorTarget || !tagsOn || cameraView == "GUNNER") exitWith {}; _cT = cursorTarget; _dist = player distance _cT; if (_cT in westVehicles) then { _crew = crew _cT; if (count _crew == 0 || _dist < 4) exitWith {}; _bool = false; _color = "#2554C7"; for "_i" from 0 to (count _crew - 1) do { if (str (_crew select _i) in squadUnitStrings(squadString(player))) exitWith { _bool = true; }; }; if (_bool) then { _color = "#347C17"; }; cutRsc["Rtags", "PLAIN"]; _ctrlOffset = (uiNamespace getVariable 'TAGS_HUD') displayCtrl 64435; _ctrlOffset ctrlSetStructuredText parseText format[ "%1" , crew _cT call crewToStr, _color]; }; }; atEntryPoint = { private ["_facing","_offset","_pos"]; _offset = [0,0.5,-1.5]; _pos = _this modelToWorld _offset; _facing = false; if (player distance _pos < 3 && canSee(player,_pos,45)) then { _facing = true; }; if (!alive _this || _this call vclisFull || !_facing) exitWith { false }; true }; superman = { if (!DEBUG) exitWith {}; player allowDamage false; case 57: { _vcl = vehicle player; if (_shift) then { _vcl setVelocity[(velocity _vcl select 0),(velocity _vcl select 1),(velocity _vcl select 2)+1]; if (_vcl == player) then { _handled=true; }; }; }; case 17: { _vcl = vehicle player; if (_shift) then { _vcl setVelocity[(velocity _vcl select 0)+(sin (getDir _vcl)),(velocity _vcl select 1)+(cos (getDir _vcl)),velocity _vcl select 2]; if (_vcl == player) then { _handled=true; }; }; }; case 31: { _vcl = vehicle player; if (_shift) then { _vcl setVelocity[(velocity _vcl select 0)-(sin (getDir _vcl)),(velocity _vcl select 1)-(cos (getDir _vcl)),velocity _vcl select 2]; if (_vcl == player) then { _handled=true; }; }; }; case 30: { _vcl = vehicle player; if (_shift) then { _vcl setVelocity[(velocity _vcl select 0)-(cos (getDir _vcl)),(velocity _vcl select 1)+(sin (getDir _vcl)),velocity _vcl select 2]; if (_vcl == player) then { _handled=true; }; }; }; case 32: { _vcl = vehicle player; if (_shift) then { _vcl setVelocity[(velocity _vcl select 0)+(cos (getDir _vcl)),(velocity _vcl select 1)-(sin (getDir _vcl)),velocity _vcl select 2]; if (_vcl == player) then { _handled=true; }; }; }; }; onKeyPress = { private ["_handled","_vcl","_cT","_dist","_nVcls","_list","_id","_size","_intensity","_key","_shift","_ctrl","_alt"]; _key = _this select 1; _shift = _this select 2; _ctrl = _this select 3; _alt = _this select 4; _handled = false; if (difficultyEnabled "3rdPersonView" && _key in actionKeys "personView" && remoteControlling) exitWith { if (cameraView == "INTERNAL") then { cameraOn switchCamera "EXTERNAL"; } else { cameraOn switchCamera "INTERNAL"; }; true }; if (_key in actionKeys "tacticalView") then { hint "Tactical View is disabled in Insurgency"; _handled=true; }; if (!alive player) exitWith {}; if (_key in (actionKeys 'showmap')) then { if isNull respawnCamera exitWith {}; camMap = !camMap; openMap [camMap,camMap]; if camMap then { mapAnimAdd [0,0.1,getPosATL camPlayer]; mapAnimCommit; }; }; switch _key do { //T key case 20: { if (!_ctrl) exitWith {}; if (useroptions != 1) exitWith {}; if (!dialog) then { createDialog "INSURGENCY_OPTIONS"; } else { closeDialog 0; }; }; //E key //N key case 49: { if (isNull respawnCamera) exitWith {}; if (isNil "camNVG") then { camNVG = true; }; camUseNVG camNVG; camNVG = !camNVG; }; if DEBUG then { call superman; }; //W key case 17: { if (speed player == 0 && lifeState player != "UNCONSCIOUS") then { detach player; }; }; //S key case 31: { if (speed player == 0 && lifeState player != "UNCONSCIOUS") then { detach player; }; }; //Enter key case 28: { if (isNull respawnCamera || camMap || livesLeft == 0) exitWith {}; if enterSpawn exitWith { enterSpawn = false; }; if (!enterSpawn && camPlayer == fieldHospital) exitWith { enterSpawn = true; }; if (nearestEastMen(getPosATL camPlayer,respawnRange,true,"count") > 0) exitWith {}; if (vehicle camPlayer call vclisFull) exitWith {}; if (lifeState camPlayer == "UNCONSCIOUS") exitWith {}; if !enterSpawn then { enterSpawn = true; }; }; //Left case 203: { if isNull respawnCamera exitWith {}; _list = [fieldHospital] + groupMembers(true,"array"); if (livesLeft == 0) then { _list = nearestPlayers(CENTERPOS,AORADIUS,true,"array"); }; _size = count _list; _id = _list find camPlayer; _id = _id - 1; if (_id < 0) then { _id = _size - 1; }; camPlayer = _list select _id; }; //Right case 205: { if isNull respawnCamera exitWith {}; _list = [fieldHospital] + groupMembers(true,"array"); if (livesLeft == 0) then { _list = nearestPlayers(CENTERPOS,AORADIUS,true,"array"); }; _size = count _list; _id = _list find camPlayer; _id = _id + 1; if (_id == _size) then { _id = 0; }; camPlayer = _list select _id; }; //Backspace case 14: { if isNull respawnCamera exitWith { if remoteControlling then { call exitRC; }; }; if (startLocation == MHQ) exitWith { player groupChat "Unavailable when the HQ is mobilised"; }; [] spawn gearDialog; _handled = true; }; //PAGE UP //PAGE DOWN }; if (isWest && INS_RespButtn == 1) then { (time + 1) spawn { while {time < _this} do { if (!isNull (findDisplay 49)) exitWith { ((findDisplay 49) displayCtrl 1010) ctrlEnable false; }; }; }; }; _handled; }; onMouseMove = { private ["_xS","_yS","_xC","_yC","_zC"]; if (isNull respawnCamera || camPlayer == fieldHospital || dialog) exitWith {}; _xS = (_this select 1)/45; _yS = (_this select 2)/25; if (abs _xS < abs _yS) then { _xS = 0; }; if (abs _yS < abs _xS) then { _yS = 0; }; _xC = (camAttachCoords select 0) - _xS; if (_xC > 3) then { _xC = 3; }; if (_xC < -3) then { _xC = -3; }; _yC = camAttachCoords select 1; if (_xC <= 0) then { _yC = _yC + _xS; }; if (_xC > 0) then { _yC = _yC - _xS; }; if (_yC > 0) then { _yC = 0; }; if (_yC < -3 && camPlayer isKindOf "man") then { _yC = -3; }; if (_yC < -3 && !(camPlayer isKindOf "man")) then { _yC = -7; }; _zC = (camAttachCoords select 2) + _yS; if (_zC > 7) then { _zC = 7; }; if (_zC < -2) then { _zC = -2; }; camAttachCoords = [_xC,_yC,_zC]; respawnCamera attachTo [vehicle camPlayer, camAttachCoords]; respawnCamera camSetTarget vehicle camPlayer; respawnCamera camCommit 0; }; private ["_selection", "_control", "_selectedIndex", "_real_list", "_vlist"]; disableSerialization; _selection = _this select 0; _control = _selection select 0; _selectedIndex = _selection select 1; if (_selectedIndex == -1) exitWith {}; _real_list = [50, 25, 12.5, 3.125]; _vlist = ["No Grass","Little Gras", "Default","Full Gras"]; if (grasslayer != _selectedIndex) then { grasslayer = _selectedIndex; setTerrainGrid (_real_list select grasslayer); };//Gear respawnWeapons = weapons player; respawnMagazines = magazines player; startWeapon = primaryWeapon player; //Misc isAdmin = false; playerNames = ["","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]; serverLoadHint = false; mapInUse = false; startTime = time; startGroup = group player; oldGroup = group player; ppEffectsOn = false; ppUnconscious = ppEffectCreate [["radialblur", 170], ["colorcorrections", 1580]]; mapClickBool = false; //Timers _A10Timer = 0; _ArtyTimer = 0; //Respawn camPlayer = objNull; enterSpawn = false; respawnCamera = objNull; camMap = false; deadPos = CENTERPOS; //Support A10available = false; artyAvailable = false; requestingPlayer = objNull; //User Interface keyblock = false; tagsOn = true; #define DEBUG false //Constants #define VIEWDISTANCE 1500 #define SPAWNRANGE 500 #define WEP_DESPAWN_RANGE 100 //Misc Functions // getDirTo - vector of X towards Y in degrees while Y can be either a position or an object; // if X is in the East of Y, vector is from 0.01 to 179.99 and if on the West it's from -0.01 to -179.99 (N is 0, S is 180) #define getDirTo(X,Y) (((if(typeName Y == "OBJECT")then{getPosATL Y}else{Y} select 0) - (getPosATL X select 0)) atan2 ((if(typeName Y == "OBJECT")then{getPosATL Y}else{Y} select 1) - (getPosATL X select 1))) //Params if (isNil "paramsArray") then { if (isClass (missionConfigFile/"Params")) then { for "_i" from 0 to (count (missionConfigFile/"Params") - 1) do { _paramName = configName ((missionConfigFile >> "Params") select _i); missionNamespace setVariable [_paramName, getNumber (missionConfigFile >> "Params" >> _paramName >> "default")]; }; }; } else { for "_i" from 0 to (count paramsArray - 1) do { missionNamespace setVariable [configName ((missionConfigFile >> "Params") select _i), paramsArray select _i]; }; }; #define startLocation (if(isDead(MHQ))then{HQ}else{MHQ}) #define startPos (getPosATL fieldHospital) #define livesLeft (startLives - westDeaths) //AI #define infDeleteTime 30 //String Functions #define squadNumber(X) call compile toString[toArray(str X) select 7] #define squadString(X) ("Hitman1" + str squadNumber(X)) #define squadUnitStrings(X) [X+"1",X+"2",X+"3",X+"4",X+"5"] #define unitNumber(X) call compile toString[toArray(str X) select (count toArray(str X) - 1)] #define vehicleSquad(X) (call compile ("Hitman1" + str unitNumber(X))) #define getName(X) (playerNames select (westPlayerStrings find str X)) #define squadLeader(X) (squadString(X)+"1") // these macros do NOT return the actual name of the unit - these are only for text references #define squadVictor(X) ("Victor-1-" + str squadNumber(X)) #define vehicleID(X) ("Hitman-1-" + str unitNumber(X)) #define squadID(X) ("Hitman-1-" + str squadNumber(X)) #define unitID(X) ("Hitman-1-" + str squadNumber(X) + "-" + str unitNumber(X)) #define victorID(X) (\ if(typeOf X == ATVTYPE)then{"ATV-1-" + str unitNumber(X)}else{\ if(typeOf X == HELITYPE)then{"Heli"}else{\ if(typeOf X == MHQTYPE)then{"MHQ"}else{\ "Victor-1-" + str unitNumber(X)}}}) #define IEDList ["BAF_ied_v1","BAF_ied_v2","BAF_ied_v3","BAF_ied_v4"] #define cacheType "GuerillaCacheBox_EP1" #define ammoBoxType "UNBasicWeapons_EP1" #define westVehicles [humv11,humv12,humv13,humv14,humv15,humv16,atv11,atv12,atv13,atv14,atv15,heli,MHQ] #define westVehicleStrings ["humv11","humv12","humv13","humv14","humv15","humv16","atv11","atv12","atv13","atv14","atv15","heli","MHQ"] #define westPlayerStrings ["Hitman111","Hitman112","Hitman113","Hitman114","Hitman115","Hitman116","Hitman117","Hitman118","Hitman119","Hitman110",\ "Hitman121","Hitman122","Hitman123","Hitman124","Hitman125","Hitman126","Hitman127",\ "Hitman131","Hitman132",\ "Hitman141",\ "Hitman151",\ "Hitman161","Hitman162"] #define eastPlayerStrings ["east1","east2","east3","east4"] #define westAllClasses (westSoldierClasses + westVehicleClasses) #define eastStationaryGuns ["Igla_AA_pod_TK_EP1","KORD_high_UN_EP1","DSHKM_TK_INS_EP1","ZU23_TK_INS_EP1","AGS_TK_INS_EP1"] #define eastVclClasses ["BRDM2_TK_EP1","M113_TK_EP1","BTR60_TK_EP1","LandRover_MG_TK_INS_EP1",\ "LandRover_SPG9_TK_INS_EP1","T34_TK_EP1","T55_TK_EP1","KORD_high_UN_EP1",\ "DSHKM_TK_INS_EP1","ZU23_TK_INS_EP1","AGS_TK_INS_EP1","Mi24_D_TK_EP1","UH1H_TK_EP1","Mi17_TK_EP1","ACE_BTR70_TK","T72_TK_EP1","UAZ_Unarmed_TK_EP1","UAZ_MG_TK_EP1"] #define eastRanks ["CAPTAIN","LIEUTENANT","SERGEANT","CORPORAL","PRIVATE"] #define eastInfClasses [\ "TK_INS_Warlord_EP1",\ "TK_INS_Soldier_TL_EP1",\ "TK_INS_Bonesetter_EP1",\ "TK_INS_Soldier_AT_EP1",\ "TK_INS_Soldier_AT_EP1",\ "TK_INS_Soldier_AA_EP1",\ "TK_INS_Soldier_MG_EP1",\ "TK_INS_Soldier_AR_EP1",\ "TK_INS_Soldier_AR_EP1",\ "TK_INS_Soldier_AAT_EP1",\ "TK_INS_Soldier_EP1",\ "TK_INS_Soldier_2_EP1",\ "TK_INS_Soldier_3_EP1",\ "TK_INS_Soldier_4_EP1"\ ] #define eastAllClasses (eastInfClasses + eastStationaryGuns + eastVclClasses) //////class definitions //Change vehicles, Helis to ACE #define westVehicleClasses ["hilux1_civil_3_open_EP1","MMT_Civ","M1030_US_DES_EP1","ACE_HMMWV_M2_USARMY","ACE_HMMWV_MK19_USARMY","HMMWV_Ambulance_DES_EP1","Lada2_TK_CIV_EP1","HMMWV_M1151_M2_DES_EP1","HMMWV_M998A2_SOV_DES_EP1","M1126_ICV_mk19_EP1","M1126_ICV_M2_EP1","CH_47F_EP1","UH1Y","ACE_MH6","BAF_Merlin_HC3_D","AW159_Lynx_BAF","MV22","ACE_UH60M","HMMWV_M1151_M2_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","SUV_PMC_BAF","HMMWV_M998A2_SOV_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","ACE_ATV_Honda_Desert"] #define westSoldierClasses ["US_Soldier_SL_EP1","US_Soldier_AT_EP1","US_Soldier_TL_EP1","US_Soldier_GL_EP1","US_Soldier_AR_EP1","US_Soldier_Medic_EP1","US_Soldier_MG_EP1","US_Soldier_Pilot_EP1","Soldier_PMC","Soldier_MG_PKM_PMC","Soldier_TL_PMC","Soldier_Bodyguard_M4_PMC","Soldier_Medic_PMC","Soldier_Pilot_PMC","Soldier_Bodyguard_AA12_PMC","CIV_Contractor1_BAF","US_Soldier_SniperH_EP1","US_Soldier_Spotter_EP1","US_Soldier_Crew_EP1"] #define PMCUnits ["Soldier_PMC","Soldier_MG_PKM_PMC","Soldier_TL_PMC","Soldier_Bodyguard_M4_PMC","Soldier_Medic_PMC","Soldier_Pilot_PMC","Soldier_Bodyguard_AA12_PMC","CIV_Contractor1_BAF"] //////unit definitions #define ATVTYPE (\ if(INS_ATVType1 == 1)then{"ACE_ATV_Honda_Desert"}else{\ if(INS_ATVType1 == 2)then{"HMMWV_Ambulance_DES_EP1"}else{\ if(INS_ATVType1 == 3)then{"LandRover_CZ_EP1"}else{\ if(INS_ATVType1 == 4)then{"Lada2_TK_CIV_EP1"}else{\ if(INS_ATVType1 == 5)then{"M1030_US_DES_EP1"}else{\ if(INS_ATVType1 == 6)then{"BAF_Offroad_D"}else{\ if(INS_ATVType1 == 7)then{"MMT_Civ"}else{\ if(INS_ATVType1 == 8)then{"SUV_PMC"}else{\ if(INS_ATVType1 == 10)then{"hilux1_civil_3_open_EP1"}else{\ "SUV_PMC_BAF"}}}}}}}}}) #define HELITYPE (\ if(INS_AdvanceType == 1)then{"ACE_MH6"}else{\ if(INS_AdvanceType == 2)then{"UH1Y"}else{\ if(INS_AdvanceType == 3)then{"CH_47F_EP1"}else{\ if(INS_AdvanceType == 4)then{"BAF_Merlin_HC3_D"}else{\ if(INS_AdvanceType == 5)then{"AW159_Lynx_BAF"}else{\ if(INS_AdvanceType == 6)then{"MV22"}else{\ "ACE_UH60M"}}}}}}) #define PILOTTYPE "US_Soldier_Pilot_EP1" #define CAR1TYPE (\ if(INS_CarType1 == 1)then{"HMMWV_M1151_M2_DES_EP1"}else{\ if(INS_CarType1 == 2)then{"BAF_Jackal2_GMG_D"}else{\ if(INS_CarType1 == 3)then{"BAF_Jackal2_L2A1_D"}else{\ if(INS_CarType1 == 4)then{"ACE_HMMWV_M2_USARMY"}else{\ if(INS_CarType1 == 5)then{"LandRover_Special_CZ_EP1"}else{\ if(INS_CarType1 == 6)then{"BAF_Offroad_D"}else{\ if(INS_CarType1 == 7)then{"ArmoredSUV_PMC"}else{\ if(INS_CarType1 == 8)then{"SUV_PMC"}else{\ "SUV_PMC_BAF"}}}}}}}}) #define CAR2TYPE (\ if(INS_CarType2 == 1)then{"HMMWV_M998A2_SOV_DES_EP1"}else{\ if(INS_CarType2 == 2)then{"BAF_Jackal2_GMG_D"}else{\ if(INS_CarType2 == 3)then{"BAF_Jackal2_L2A1_D"}else{\ if(INS_CarType2 == 4)then{"ACE_HMMWV_MK19_USARMY"}else{\ if(INS_CarType2 == 5)then{"LandRover_Special_CZ_EP1"}else{\ if(INS_CarType2 == 6)then{"BAF_Offroad_D"}else{\ if(INS_CarType2 == 7)then{"ArmoredSUV_PMC"}else{\ if(INS_CarType2 == 8)then{"SUV_PMC"}else{\ "SUV_PMC_BAF"}}}}}}}}) #define MHQTYPE "M1130_CV_EP1" #define humvMagazines [\ ["ACE_30Rnd_556x45_SB_Stanag",12],\ ["ACE_5Rnd_762x51_T_M24",4],\ ["100Rnd_762x51_M240",3],\ ["200Rnd_556x45_M249",3],\ ["20Rnd_762x51_B_SCAR",8],\ ["PipeBomb",2],\ ["ACE_Rope_TOW_M_5",1],\ ["15Rnd_9x19_M9",4],\ ["HandGrenade_West",4],\ ["SmokeShell",4],\ ["SmokeShellBlue",4],\ ["SmokeShellGreen",4],\ ["SmokeShellOrange",4],\ ["SmokeShellPurple",4],\ ["SmokeShellRed",4],\ ["SmokeShellYellow",4],\ ["ACE_M7A3",4],\ ["ACE_ANM14",4],\ ["ACE_M84",4],\ ["1Rnd_HE_M203",6],\ ["IR_Strobe_Target",6],\ ["ACE_Bandage",12],\ ["ACE_Morphine",12],\ ["ACE_Epinephrine",12],\ ["ACE_Medkit",6]\ ] #define humvItems [\ ["ACE_Stretcher",1],\ ["ACE_JerryCan_Dummy_15",1]\ ] #define heliMagazines [\ ["ACE_30Rnd_556x45_SB_Stanag",4],\ ["ACE_5Rnd_762x51_T_M24",4],\ ["100Rnd_762x51_M240",1],\ ["200Rnd_556x45_M249",1],\ ["20Rnd_762x51_B_SCAR",8],\ ["ACE_30Rnd_9x19_S_MP5",6],\ ["PipeBomb",2],\ ["15Rnd_9x19_M9",4],\ ["HandGrenade_West",4],\ ["SmokeShell",2],\ ["SmokeShellBlue",2],\ ["SmokeShellGreen",2],\ ["SmokeShellOrange",2],\ ["SmokeShellPurple",2],\ ["SmokeShellRed",2],\ ["SmokeShellYellow",2],\ ["ACE_M7A3",2],\ ["ACE_ANM14",2],\ ["ACE_M84",2],\ ["IR_Strobe_Target",2],\ ["ACE_Bandage",7],\ ["ACE_Morphine",7],\ ["ACE_Epinephrine",7],\ ["ACE_Medkit",4]\ ] #define heliItems [\ ["ACE_Stretcher",2],\ ["ACE_ParachutePack",10],\ ["ACE_ParachuteRoundPack",10],\ ["ACE_MP5A5",2],\ ["ACE_JerryCan_Dummy_15",1]\ ] #define legalMagazines [\ "10Rnd_127x99_m107",\ "ACE_10Rnd_127x99_Raufoss_m107",\ "ACE_10Rnd_127x99_T_m107",\ "ACE_100Rnd_556x45_T_M249",\ "ACE_200Rnd_556x45_T_M249",\ "ACE_30Rnd_556x45_SB_S_Stanag",\ "ACE_30Rnd_556x45_SB_Stanag",\ "ACE_30Rnd_556x45_T_Stanag",\ "20Rnd_556x45_Stanag",\ "ACE_5Rnd_127x99_B_TAC50",\ "ACE_5Rnd_127x99_S_TAC50",\ "ACE_5Rnd_127x99_T_TAC50",\ "ACE_20Rnd_762x51_S_M110",\ "ACE_20Rnd_762x51_SB_M110",\ "ACE_20Rnd_762x51_T_M110",\ "ACE_15Rnd_9x19_P226",\ "15Rnd_9x19_M9",\ "20Rnd_762x51_DMR",\ "ACE_20Rnd_762x51_B_M14",\ "ACE_20Rnd_762x51_T_DMR",\ "10x_303",\ "5rnd_127x99_as50",\ "10Rnd_127x99_m107",\ "200Rnd_556x45_L110A1",\ "5Rnd_86x70_L115A1",\ "100Rnd_762x54_PK",\ "75Rnd_545x39_RPK",\ "10Rnd_762x54_SVD",\ "8Rnd_9x18_Makarov",\ "6Rnd_45ACP",\ "20Rnd_B_765x17_Ball",\ "30Rnd_9x19_UZI",\ "PG7V",\ "PG7VL",\ "PG7VR",\ "OG7",\ "RPG18",\ "Strela",\ "20Rnd_762x51_FNFAL",\ "30Rnd_545x39_AK",\ "30Rnd_762x39_AK47",\ "30Rnd_556x45_Stanag",\ "5Rnd_762x51_M24",\ "ACE_5Rnd_762x51_T_M24",\ "100Rnd_762x51_M240",\ "100Rnd_556x45_M249",\ "200Rnd_556x45_M249",\ "20Rnd_762x51_B_SCAR",\ "20rnd_762x51_B_SCAR",\ "8Rnd_B_Beneli_Pellets",\ "Laserbatteries",\ "Javelin",\ "ACE_Javelin_Direct",\ "Mine",\ "PipeBomb",\ "15Rnd_9x19_M9",\ "7Rnd_45ACP_1911",\ "17Rnd_9x19_glock17",\ "ACE_15Rnd_9x19_P226",\ "HandGrenade_West",\ "HandGrenade_East",\ "SmokeShell",\ "1Rnd_HE_M203",\ "1Rnd_Smoke_M203",\ "IR_Strobe_Target",\ "IR_Strobe_Marker",\ "SmokeShellRed",\ "SmokeShellGreen",\ "SmokeShellBlue",\ "SmokeShellYellow",\ "SmokeShellOrange",\ "SmokeShellPurple",\ "FlareWhite_M203",\ "FlareYellow_M203",\ "FlareGreen_M203",\ "FlareRed_M203",\ "1Rnd_SmokeRed_M203",\ "1Rnd_SmokeGreen_M203",\ "1Rnd_SmokeYellow_M203",\ "1Rnd_HE_GP25",\ "FlareWhite_GP25",\ "FlareGreen_GP25",\ "FlareRed_GP25",\ "FlareYellow_GP25",\ "1Rnd_Smoke_GP25",\ "1Rnd_SmokeRed_GP25",\ "1Rnd_SmokeGreen_GP25",\ "1Rnd_SmokeYellow_GP25",\ "Laserbatteries",\ "ACE_Battery_Rangefinder",\ "ACE_Flashbang",\ "ACE_SSGreen_M203",\ "ACE_SSRed_M203",\ "ACE_SSWhite_M203",\ "ACE_SSYellow_M203",\ "ACE_FlareIR_M203",\ "ACE_HuntIR_M203",\ "ACE_1Rnd_HE_M203",\ "ACE_M34",\ "BAF_L109A1_HE",\ "ACE_M84",\ "ACE_Claymore_M",\ "ACE_C4_M",\ "ACE_Rope_M_120",\ "ACE_VS17Panel_M",\ "ACE_MAAWS_HE",\ "MAAWS_HEAT",\ "MAAWS_HEDP",\ "ACE_SMAW_NE",\ "SMAW_HEAA",\ "SMAW_HEDP",\ "ACE_SMAW_Spotting",\ "ACE_Bandage",\ "ACE_Epinephrine",\ "ACE_Medkit",\ "ACE_Morphine",\ "ACE_Knicklicht_R",\ "ACE_Knicklicht_G",\ "ACE_Knicklicht_W",\ "ACE_Knicklicht_Y",\ "ACE_Knicklicht_B",\ "ACE_Knicklicht_IR",\ "ACE_M224HE_CSWDM",\ "ACE_M224WP_CSWDM",\ "ACE_M224IL_CSWDM",\ "ACE_MK19_CSWDM",\ "ACE_M2_CSWDM"\ ]/*%FSM*/ /*%FSM*/ /* item0[] = {"start",0,250,-373.032593,-284.857239,-318.484283,-253.586380,0.000000,"start"}; item1[] = {"died",4,218,-391.451599,228.116882,-301.451599,278.116913,0.000000,"died"}; item2[] = {"is_dead",2,250,-391.269012,87.134377,-301.268982,137.134491,0.000000,"is dead"}; item3[] = {"on_foot",2,250,-21.742039,-285.148743,32.806461,-247.188858,0.000000,"on foot"}; item4[] = {"_",8,218,-251.031876,-280.686462,-194.052063,-251.006500,0.000000,""}; item5[] = {"entered_vehicle",4,218,-39.488911,-189.243393,50.511112,-139.243393,0.000000,"entered" \n "vehicle"}; item6[] = {"in_vehicle",2,250,-44.157448,-71.059593,57.565674,2.034799,0.000000,"in vehicle"}; item7[] = {"get_out",4,218,-27.269299,469.415649,62.730694,519.415649,99.000000,"get out"}; item8[] = {"remove_actions",2,250,-13.643346,680.463928,40.309288,718.207825,0.000000,"remove" \n "actions"}; item9[] = {"_",8,218,276.669250,-286.053375,337.110413,-246.867584,0.000000,""}; item10[] = {"is_crew",4,218,-155.750076,92.536636,-65.750084,142.536621,0.000000,"is crew"}; item11[] = {"no_crew",4,218,48.788742,90.360695,138.788818,140.360687,0.000000,"no crew"}; item12[] = {"is_driver",2,250,-155.750092,226.357239,-65.750061,276.357300,0.000000,"is driver"}; item13[] = {"is_not_driver",2,250,48.788738,223.093323,138.788727,273.093292,0.000000,"is not driver"}; item14[] = {"not_playable",4,218,-391.231781,-13.326699,-301.231781,36.673271,0.000000,"not playable"}; item15[] = {"exit",1,250,-373.518372,-109.127876,-316.243805,-74.962837,0.000000,"exit"}; item16[] = {"not_local_unit",4,218,-390.408997,-215.380112,-300.408997,-165.380112,0.000000,"not local" \n "unit"}; item17[] = {"is_playable",4,218,-512.367798,87.683662,-440.136139,137.264435,0.000000,"is" \n "playable"}; item18[] = {"wait_for_respawn",2,250,-637.015747,94.686630,-586.250916,130.419525,0.000000,"wait for" \n "respawn"}; item19[] = {"alive_again",4,4314,-648.175781,-17.617540,-578.863342,34.522636,0.000000,"alive" \n "again"}; item20[] = {"set_Entity",2,250,-645.959534,-408.561798,-583.369629,-385.210632,0.000000,"set Entity"}; item21[] = {"",7,210,300.773651,692.957947,308.773682,700.957947,0.000000,""}; item22[] = {"",7,210,-226.233566,-398.654358,-218.233566,-390.654358,0.000000,""}; link0[] = {0,4}; link1[] = {0,16}; link2[] = {1,2}; link3[] = {2,14}; link4[] = {2,17}; link5[] = {3,1}; link6[] = {3,5}; link7[] = {4,3}; link8[] = {5,6}; link9[] = {6,1}; link10[] = {6,10}; link11[] = {6,11}; link12[] = {7,8}; link13[] = {8,1}; link14[] = {8,21}; link15[] = {9,3}; link16[] = {10,12}; link17[] = {11,13}; link18[] = {12,1}; link19[] = {12,7}; link20[] = {12,11}; link21[] = {13,7}; link22[] = {13,10}; link23[] = {14,15}; link24[] = {16,15}; link25[] = {17,18}; link26[] = {18,19}; link27[] = {19,20}; link28[] = {20,22}; link29[] = {21,9}; link30[] = {22,4}; globals[] = {0.000000,0,0,0,0,640,480,1,32,6316128,1,-832.201660,643.785278,820.161255,-450.471039,1035,891,1}; window[] = {2,-1,-1,-32000,-32000,937,200,1460,200,3,1053}; *//*%FSM*/ class FSM { fsmName = "HeliLift"; class States { /*%FSM*/ class start { name = "start"; init = /*%FSM*/"private [""_vehicle"",""_supplydropaction""];" \n "" \n "_unit = player;" \n "if(not isNil ""_this"") then {" \n " if(count _this > 0) then {_unit = _this select 0};" \n "};" \n "" \n "_isplayable =" \n " if(isMultiplayer) then{" \n " if(_unit in playableUnits) then{true} else{false};" \n " } else { false};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class not_local_unit { priority = 0.000000; to="exit"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"not local _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class _ { priority = 0.000000; to="on_foot"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class is_dead { name = "is_dead"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class is_playable { priority = 0.000000; to="wait_for_respawn"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_isplayable"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class not_playable { priority = 0.000000; to="exit"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"not _isplayable"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class on_foot { name = "on_foot"; init = /*%FSM*/"_vehicle = vehicle _unit;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class entered_vehicle { priority = 0.000000; to="in_vehicle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"vehicle _unit != _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class died { priority = 0.000000; to="is_dead"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"not alive _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class in_vehicle { name = "in_vehicle"; init = /*%FSM*/"_vehicle = vehicle _unit;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class is_crew { priority = 0.000000; to="is_driver"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"driver _vehicle == _unit || commander _vehicle == _unit || gunner _vehicle == _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class no_crew { priority = 0.000000; to="is_not_driver"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"driver _vehicle != _unit && commander _vehicle != _unit && gunner _vehicle != _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class died { priority = 0.000000; to="is_dead"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"not alive _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class remove_actions { name = "remove_actions"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="on_foot"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class died { priority = 0.000000; to="is_dead"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"not alive _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class is_driver { name = "is_driver"; init = /*%FSM*/"if(driver _vehicle == _unit && typeOf _vehicle in HelisCanLift) then {" \n " [_vehicle] execVM ""common\Lift\heli_lift.sqf"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class get_out { priority = 99.000000; to="remove_actions"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"vehicle _unit == _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class no_crew { priority = 0.000000; to="is_not_driver"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"driver _vehicle != _unit && commander _vehicle != _unit && gunner _vehicle != _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class died { priority = 0.000000; to="is_dead"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"not alive _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class is_not_driver { name = "is_not_driver"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class get_out { priority = 99.000000; to="remove_actions"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"vehicle _unit == _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class is_crew { priority = 0.000000; to="is_driver"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"driver _vehicle == _unit || commander _vehicle == _unit || gunner _vehicle == _unit"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class exit { name = "exit"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class wait_for_respawn { name = "wait_for_respawn"; init = /*%FSM*/"_name_unit = name _unit;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class alive_again { priority = 0.000000; to="set_Entity"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"{_name_unit == name _x} count playableUnits > 0"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class set_Entity { name = "set_Entity"; init = /*%FSM*/"{" \n " if(name _x == _name_unit) exitWith{_unit = _x};" \n "} foreach playableUnits;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="on_foot"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="start"; finalStates[] = { "exit", }; }; /*%FSM*/version=1; class GraphItems { class Item0 { Flags=250; BasicText=""; Left=-96.262619; Top=136.01894; Right=-6.2626419; Bottom=186.01894; BgColor=255; class ItemInfo { Text="Init ServicePoint"; lStyle=-842150451; Shape=6; FontFace="Arial"; FontHeight=9; FontWeight=700; FontUnderline=1; FontCharSet=0; ItemType=0; class ItemInfo { Id=0; InitCode="private [""_objlist"",""_vcl"",""_timedelay"",""_pos""];" \n "_timedelay = time+11;"; }; }; }; class Item1 { Flags=218; BasicText=""; Left=-96.79274; Top=401.94778; Right=-6.7927341; Bottom=451.94748; BgColor=65535; class ItemInfo { Text="Vehicle present?"; lStyle=-842150451; Shape=2; FontFace="Arial"; FontHeight=8; FontWeight=0; FontCharSet=0; ItemType=4; class ItemInfo { Id=1; Priority=1; Condition="count _objlist > 0 && (_objlist select 0) in [humv11,humv12,humv13,humv14,humv15,humv16,atv11,atv12,atv13,atv14,atv15,heli,MHQ]"; }; }; }; class Item2 { Flags=250; BasicText=""; Left=-96.956436; Top=319.48734; Right=-6.9564037; Bottom=369.48734; BgColor=16777215; class ItemInfo { Text="Gather Objects"; lStyle=-842150451; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=2; class ItemInfo { Id=2; InitCode="_pos = vehicleServicePoint modelToWorld [-5,0,0];" \n "_pos set [2,0];" \n "_objlist = _pos nearEntities [[""Air"",""Car""],5];"; }; }; }; class Item3 { Flags=218; BasicText=""; Left=-96.465317; Top=229.54578; Right=-6.4652371; Bottom=279.54578; BgColor=65535; class ItemInfo { Text="Wait"; lStyle=-842150451; Shape=2; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=4; class ItemInfo { Id=3; Condition="time > _timedelay"; ConditionTab=2; }; }; }; class Item4 { Flags=4346; BasicText=""; Left=-262.25064; Top=408.89178; Right=-172.25058; Bottom=458.89194; BgColor=16777215; class ItemInfo { Text="Repair Vehicle"; lStyle=-842150451; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=2; class ItemInfo { Id=4; InitCode="_vcl setVehicleInit '" \n "this setVehicleAmmo 1;" \n "this setFuel 1;" \n "this setDamage 0;" \n "{ this addMagazineCargo [_x select 0, _x select 1]; } forEach humvMagazines;" \n "if (player in crew this) then { titleText[""Vehicle serviced"", ""PLAIN DOWN""]; };" \n "';" \n "processInitCommands;"; }; }; }; class Item5 { Flags=218; BasicText=""; Left=-261.71317; Top=320.83105; Right=-171.71307; Bottom=370.83105; BgColor=8421440; class ItemInfo { Text=""; lStyle=-842150451; Shape=2; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=8; class ItemInfo { Id=5; }; }; }; class Item6 { Flags=250; BasicText=""; Left=-261.35068; Top=229.09021; Right=-171.35068; Bottom=279.09021; BgColor=16777215; class ItemInfo { Text="Delay"; lStyle=-842150451; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=2; class ItemInfo { Id=6; InitCode="_timedelay = time+11;"; }; }; }; class Item7 { Flags=250; BasicText=""; Left=-97.245003; Top=489.35303; Right=-7.2450352; Bottom=539.35303; BgColor=16777215; class ItemInfo { Text="Vehicle Check"; lStyle=-842150451; Group=-842150451; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=2; class ItemInfo { Id=17; InitCode="_vcl = _objlist select 0;" \n ""; }; }; }; class Item8 { Flags=218; BasicText=""; Left=-262.66339; Top=488.27878; Right=-172.66339; Bottom=538.27881; BgColor=8421440; class ItemInfo { Text=""; lStyle=-842150451; Shape=2; Group=-842150451; FontFace="Arial"; FontHeight=10; FontWeight=0; FontCharSet=0; ItemType=8; class ItemInfo { Id=18; Priority=1; }; }; }; }; class GraphLinks { class Link0 { From=0; To=3; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link1 { From=1; To=7; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link2 { From=2; To=1; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link3 { From=2; To=5; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link4 { From=3; To=2; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link5 { From=4; To=5; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link6 { From=5; To=6; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link7 { From=6; To=3; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link8 { From=7; To=5; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link9 { From=7; To=8; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; class Link10 { From=8; To=4; Color=6316128; Flags=2; class Extra { ArrowSize=0; }; }; }; class Globals { NextGroupID=1; NextID=19; FSMName="ServicePoint"; CompileConfig="D:\Games\BI Tools\FSM Editor Personal Edition\scriptedFSM.cfg"; class DefaultLink { ArrowSize=0; }; DefaultLinkColor=6316128; DefaultLinkUseCustom=1; PZoomLeft=-288.01981; PZoomRight=64.836761; PZoomBottom=572.51917; PZoomTop=121.91543; Clxs=657; Clys=839; Aspect=1; }; class Window { Flags=2; MaxPosX=-1; MaxPosY=-1; MinPosX=-1; MinPosY=-1; Left=125; Top=125; Right=1085; Bottom=843; ShowCmd=3; SplitPos=675; }; /*%FSM*/ /*%FSM*/ /* item0[] = {"Init_ServicePoin",0,250,-96.262619,136.018936,-6.262642,186.018936,0.000000,"Init ServicePoint"}; item1[] = {"Vehicle_present",4,218,-96.792740,401.947784,-6.792734,451.947479,1.000000,"Vehicle present?"}; item2[] = {"Gather_Objects",2,250,-96.956436,319.487335,-6.956404,369.487335,0.000000,"Gather Objects"}; item3[] = {"Wait",4,218,-96.465317,229.545776,-6.465237,279.545776,0.000000,"Wait"}; item4[] = {"Repair_Vehicle",2,4346,-262.250641,408.891785,-172.250580,458.891937,0.000000,"Repair Vehicle"}; item5[] = {"__1",8,218,-261.713165,320.831055,-171.713074,370.831055,0.000000,""}; item6[] = {"Delay",2,250,-261.350677,229.090210,-171.350677,279.090210,0.000000,"Delay"}; item7[] = {"Vehicle_Check",2,250,-97.245003,489.353027,-7.245035,539.353027,0.000000,"Vehicle Check"}; item8[] = {"_",8,218,-262.663391,488.278778,-172.663391,538.278809,1.000000,""}; link0[] = {0,3}; link1[] = {1,7}; link2[] = {2,1}; link3[] = {2,5}; link4[] = {3,2}; link5[] = {4,5}; link6[] = {5,6}; link7[] = {6,3}; link8[] = {7,5}; link9[] = {7,8}; link10[] = {8,4}; globals[] = {0.000000,0,0,0,0,640,480,1,19,6316128,1,-288.019806,64.836761,572.519165,121.915428,657,839,1}; window[] = {2,-1,-1,-1,-1,843,125,1085,125,3,675}; *//*%FSM*/ class FSM { fsmName = "ServicePoint"; class States { /*%FSM*/ class Init_ServicePoin { name = "Init_ServicePoin"; init = /*%FSM*/"private [""_objlist"",""_vcl"",""_timedelay"",""_pos""];" \n "_timedelay = time+11;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Wait { priority = 0.000000; to="Gather_Objects"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _timedelay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Gather_Objects { name = "Gather_Objects"; init = /*%FSM*/"_pos = vehicleServicePoint modelToWorld [-5,0,0];" \n "_pos set [2,0];" \n "_objlist = _pos nearEntities [[""Air"",""Car""],5];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Vehicle_present { priority = 1.000000; to="Vehicle_Check"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _objlist > 0 && (_objlist select 0) in [humv11,humv12,humv13,humv14,humv15,humv16,atv11,atv12,atv13,atv14,atv15,heli,MHQ]"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class _ { priority = 0.000000; to="Delay"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Repair_Vehicle { name = "Repair_Vehicle"; init = /*%FSM*/"_vcl setVehicleInit '" \n "this setVehicleAmmo 1;" \n "this setFuel 1;" \n "this setDamage 0;" \n "{ this addMagazineCargo [_x select 0, _x select 1]; } forEach humvMagazines;" \n "if (player in crew this) then { titleText[""Vehicle serviced"", ""PLAIN DOWN""]; };" \n "';" \n "processInitCommands;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="Delay"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Delay { name = "Delay"; init = /*%FSM*/"_timedelay = time+11;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Wait { priority = 0.000000; to="Gather_Objects"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _timedelay"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Vehicle_Check { name = "Vehicle_Check"; init = /*%FSM*/"_vcl = _objlist select 0;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 1.000000; to="Repair_Vehicle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class __1 { priority = 0.000000; to="Delay"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="Init_ServicePoin"; finalStates[] = { }; }; /*%FSM*/// return true when distance to spawnPos is less than 1000m unless the unit is flying (i.e. altitude higher than 50m) isDead = { (getPosATL _this select 2 < 50 && (_this distance spawnPos) < 500) }; #define isDead(X) (X call isDead) // find all valid houses which offer a certain minimum count of positions findHouses = { private ["_buildings","_minPositions","_enterables","_alive"]; _buildings = nearestObjects [_this select 0, ["House"], _this select 1]; _minPositions = (_this select 2) - 1; _alive = _this select 3; _enterables = []; { if ( format["%1", _x buildingPos _minPositions] != "[0,0,0]" && EP1HOUSES && !(typeOf _x in ILLEGALHOUSES) && (alive _x || !_alive) ) then { _enterables set [count _enterables, _x]; }; } forEach _buildings; _enterables }; setSurrendered = { if !isDedicated then { if (player distance _this <= 20) then { private "_txt"; switch (round random 1) do { case 0: { _txt = "I Surrender!"; }; case 1: { _txt = "I give up!"; }; }; _this globalChat format["%1: %2", getText (configFile >> "CfgVehicles" >> typeOf _this >> "displayName"), _txt]; }; }; if isServer then { removeAllWeapons _this; _this setUnitPos "UP"; _this disableAI "move"; _this playMoveNow "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon"; _this disableAI "anim"; }; }; getDir2 = { private ["_dirW","_dirS"]; _dirW = screenToWorld [0.5,0.5]; _dirS = ((_dirW select 0) - (getPosATL player select 0)) atan2 ((_dirW select 1) - (getPosATL player select 1)); ((_dirS+360) % 360) }; #define getDir2 (call getDir2) nearestWeapons = { private ["_wep","_pos","_rds","_alive","_type","_result"]; _wep = _this select 0; _pos = _this select 1; _rds = _this select 2; _alive = _this select 3; _type = _this select 4; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (_x isKindOf "man" && (!alive _x || _alive)) then { if (_wep in weapons _x) then { if (_type == "count") then { _result = _result + 1; } else { _result = _result + [_x]; }; }; } else { if (_wep in (getWeaponCargo _x select 0)) then { if (_type == "count") then { _result = _result + 1; } else { _result = _result + [_x]; }; }; }; } forEach nearestObjects[_pos,["weaponHolder","man","ReammoBox","AllVehicles"],_rds]; _result }; #define nearestWeapons(V,W,X,Y,Z) ([V,W,X,Y,Z] call nearestWeapons) groupMembers = { private ["_result","_plr","_alive","_type"]; _alive = _this select 0; _type = _this select 1; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (!isNil _x) then { _plr = call compile _x; if (!isNull _plr) then { if ((alive _plr && !isDead(_plr)) || !_alive) then { if (_type == "count") then { _result = _result + 1; } else { _result = _result + [_plr]; }; }; }; }; } forEach (squadUnitStrings(squadString(player))-[player]); _result }; #define groupMembers(Y,Z) ([Y,Z] call groupMembers) nearestPlayers = { private ["_result","_pos","_range","_type","_alive","_arr"]; _pos = _this select 0; _range = _this select 1; _alive = _this select 2; _type = _this select 3; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (!isNil _x) then { _plr = call compile _x; if (!isNull _plr) then { if (_plr distance _pos <= _range && (alive _plr || !_alive)) then { if (_type == "count") then { _result = _result + 1; } else { _result = _result + [_plr]; }; }; }; }; } forEach westPlayerStrings; _result }; #define nearestPlayers(W,X,Y,Z) ([W,X,Y,Z] call nearestPlayers) nearestInfantry = { private ["_result","_arr","_alive","_type"]; _arr = nearestObjects[_this select 0, ["Man"], _this select 1]; _alive = _this select 2; _type = _this select 3; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (!(_x in westPlayerStrings) && ( (alive _x && primaryWeapon _x != "") || !_alive ) ) then { if (_type == "count") then { _result = _result + 1; } else { _result set [count _result, _x]; }; }; } forEach _arr; _result }; #define nearestInfantry(W,X,Y,Z) ([W,X,Y,Z] call nearestInfantry) nearestEastMen = { private ["_result","_arr1","_arr2","_alive","_type"]; _arr1 = nearestObjects[_this select 0, ["LandVehicle"], _this select 1]; _arr2 = nearestObjects[_this select 0, ["Man"], _this select 1]; _alive = _this select 2; _type = _this select 3; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (typeOf _x in eastInfClasses && ( (alive _x && primaryWeapon _x != "") || !_alive ) ) then { if (_type == "count") then { _result = _result + 1; } else { _result set [count _result, _x]; }; }; } forEach _arr2; for "_i" from 0 to (count _arr1 - 1) do { { if (typeOf _x in eastInfClasses && (alive _x || !_alive) ) then { if (_type == "count") then { _result = _result + 1; } else { _result set [count _result, _x]; }; }; } forEach (crew (_arr1 select _i)); }; _result }; #define nearestEastMen(W,X,Y,Z) ([W,X,Y,Z] call nearestEastMen) #define numberOfAI nearestEastMen(CENTERPOS,AORADIUS,false,"count") nearestMen2 = { private ["_result","_arr1","_arr2","_alive","_type"]; _arr1 = nearestObjects[_this select 0, ["Car","Tank"], _this select 1]; _arr2 = nearestObjects[_this select 0, ["Man"], _this select 1]; _alive = _this select 2; _type = _this select 3; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (!isDead(_x) && _x isKindOf "Man" && !(str _x in westPlayerStrings) && ( (alive _x && primaryWeapon _x != "") || !_alive ) ) then { if (_type == "count") then { _result = _result + 1; } else { _result set [count _result, _x]; }; }; } forEach _arr2; for "_i" from 0 to (count _arr1 - 1) do { { if (!(str _x in westPlayerStrings) && (alive _x || !_alive) ) then { if (_type == "count") then { _result = _result + 1; } else { _result set [count _result, _x]; }; }; } forEach (crew (_arr1 select _i)); }; _result }; #define nearestMen2(W,X,Y,Z) ([W,X,Y,Z] call nearestMen2) knowsAboutAll = { private ["_knows","_unit","_ai","_arr"]; _ai = _this select 0; _arr = _this select 1; _knows = true; for "_i" from 0 to (count _arr - 1) do { _unit = _arr select _i; if (_ai knowsAbout _unit < 1) exitWith { _knows = false; }; }; _knows }; #define knowsAboutAll(X,Y) ([X,Y] call knowsAboutAll) getBearing = { private ["_dirTo","_unit","_obj","_uDir"]; _unit = _this select 0; _obj = _this select 1; _dirTo = abs(getDirTo(_unit,_obj)); _uDir = getDir(vehicle _unit); if (abs(_dirTo - _uDir) > 180) then { _dirTo = -1*(360 - _dirTo); }; (_dirTo - _uDir) }; // canSee; returns true if a _unit looks at the _obj within a certain _arc (field of view) in degrees canSee = { private ["_unit","_obj","_dirTo","_uDir","_vcl","_arc"]; _unit = _this select 0; _obj = _this select 1; _arc = _this select 2; _dirTo = getDirTo(_unit,_obj); // vector from _unit to _obj _uDir = getDir (vehicle _unit); // heading of _unit if (vehicle _unit != _unit) then { // if it's a vehicle and _unit is in a turret we take the heading of that turret _vcl = vehicle _unit; if (_vcl turretUnit [0] == _unit) then { _uDir = _vcl weaponDirection (_vcl weaponsTurret [0] select 0); _uDir = (_uDir select 0) atan2 (_uDir select 1); }; }; if (abs(_dirTo - _uDir) > 180) then { _uDir = -1*(360 - _uDir); }; abs(_dirTo - _uDir) <= _arc }; #define canSee(X,Y,Z) ([X,Y,Z] call canSee) arrCanSee = { private ["_arc","_pos","_arr","_rng","_unit","_canSee"]; _arr = _this select 0; _pos = _this select 1; _arc = _this select 2; _rng = _this select 3; _canSee = false; for "_i" from 0 to (count _arr - 1) do { _unit = _arr select _i; if (alive _unit && (canSee(_unit,_pos,_arc) || _unit distance _pos <= _rng)) exitWith { _canSee = true; }; }; _canSee }; #define arrCanSee(W,X,Y,Z) ([W,X,Y,Z] call arrCanSee) canSeeArr = { private ["_canSee","_unit","_pos","_arr","_arc"]; _pos = _this select 0; _arr = _this select 1; _arc = _this select 2; _canSee = true; for "_i" from 0 to (count _arr - 1) do { _unit = _arr select _i; if !canSee(_pos,_unit,_arc) exitWith { _canSee = false; }; }; _canSee }; #define canSeeArr(X,Y,Z) ([X,Y,Z] call canSeeArr) // create an AI group based on the supplied params and returns the concatenated name // if the AI group already exists it only returns the name getGroup = { private ["_side","_prefix","_name","_suffix"]; _prefix = _this select 0; _name = _this select 1; _suffix = _this select 2; _side = _this select 3; call compile format[" if isNil ""%1%2%3"" exitWith { %1%2%3 = createGroup %4; %1%2%3 }; if isNull %1%2%3 exitWith { %1%2%3 = createGroup %4; %1%2%3 }; %1%2%3 ", _prefix, _name, _suffix, _side]; }; countPositions = { private ["_i","_house","_hPos"]; _house = _this select 0; _i = _this select 1; _hPos = format["%1", _house buildingPos _i]; if (_hPos == "[0,0,0]") exitWith { _i; }; [_house, _i+1] call countPositions; }; #define nPos(X) ([X,0] call countPositions) getGridPos = { private ["_pos","_x","_y"]; _pos = getPosATL _this; _x = _pos select 0; _y = _pos select 1; _x = _x - (_x % 100); _y = _y - (_y % 100); [_x + 50, _y + 50, 0] }; getCaches = { private ["_i","_arr","_str","_cache"]; _arr = _this select 0; _i = _this select 1; if (_i >= cacheCount) exitWith { _arr; }; _str = format["cache%1", _i+1]; _cache = call compile _str; if (!isNull _cache) then { if (alive _cache) then { _arr = _arr + [_cache]; }; }; [_arr, _i+1] call getCaches; }; #define cacheList ([[],0] call getCaches) getCacheMarkers = { private ["_i","_cache","_arr","_mkr"]; _cache = _this select 0; _arr = _this select 1; _i = _this select 2; _mkr = format["%1intel%2", _cache, _i]; if ((getMarkerPos _mkr select 0) == 0) exitWith { _arr; }; _arr set [_i, _mkr]; [_cache, _arr, _i+1] call getCacheMarkers; }; #define cacheMarkers(X) ([X,[],0] call getCacheMarkers) createDebugMarker = { private ["_txt","_dir","_unit","_mkr"]; _unit = _this select 0; if (isNil "_unit") exitWith { }; _mkr = createMarkerLocal["DEBUG" + str _unit, getPosATL _unit]; _mkr setMarkerShapeLocal "ICON"; _mkr setMarkerTypeLocal "mil_triangle"; _mkr setMarkerSizeLocal [0.5,0.7]; _txt = str _unit; //if (typeName _txt == "OBJECT") then {_txt = getText (configFile >> "CfgVehicles" >> typeOf vehicle(_this select 1) >> "displayName"); }; if (str _unit in eastPlayerStrings) then { _txt = name _unit; }; _mkr setMarkerTextLocal _txt; _mkr setMarkerColorLocal "ColorRed"; _dir = getDir _unit; if (vehicle _unit != _unit) then { _dir = formationDirection _unit; }; _mkr setMarkerDirLocal _dir; if (!alive _unit) then { _mkr setMarkerColorLocal "ColorBlack"; }; [_mkr, _unit] spawn { private ["_mkr","_unit"]; _mkr = _this select 0; _unit = _this select 1; while{!isNull _unit && DEBUG}do{ _mkr setMarkerPosLocal getPosATL _unit; _mkr setMarkerDirLocal getDir _unit; if !alive _unit then { _mkr setMarkerColorLocal "ColorBlack"; }; sleep 0.1; }; if !DEBUG then { sleep 5; }; deleteMarkerLocal _mkr; }; }; // \initclient-common.sqf #include "defines.sqf" #include "functions.sqf" #include "client\defines.sqf" #include "client\variables.sqf" #include "client\briefing.sqf" #include "client\gear\functions.sqf" #include "client\AI\functions.sqf" #include "client\actions\functions.sqf" #include "client\markers\functions.sqf" #include "client\markers\createMarkers.sqf" #include "client\misc\functions.sqf" #include "client\misc\triggers.sqf" #include "client\respawn\functions.sqf" #include "client\support\functions.sqf" #include "client\UI\functions.sqf" #include "client\UI\onKeyPress.sqf" #include "client\UI\onMouseMove.sqf" player enableIRLasers true; player enableGunLights true; player setVariable ["BIS_noCoreConversations", true]; // Grass grasslayer = 1; setTerrainGrid 12.5; // FSM for service point (vehicle repairs etc.) execFSM "common\fsm\ServicePoint.fsm"; // Respawn system INS_lastRespawnTime = time; if isWest then { //player addRating 1000000; player addEventHandler ["handleDamage", { _this call handleDamage; }]; player addEventHandler ["killed",{ _this call onPlayerKilled; }]; player addEventHandler ["respawn",{ titleCut ["", "BLACK IN", 10]; }]; player addEventHandler ["fired",{ call firedEH; }]; call addActions; }; if isEast then { player setVariable ["INS_playerString",str player, true]; player addEventHandler ["respawn",{removeAllWeapons player;}]; }; if (isServer) then { [] spawn { call compile preprocessFileLineNumbers "initserver.sqf"; }; }; endLoadingScreen; waitUntil { !(isNull (findDisplay 46)) }; (findDisplay 46) displayAddEventHandler ["KeyDown", "_this call onKeyPress"]; (findDisplay 46) displayAddEventHandler ["MouseMoving", "_this call onMouseMove"]; waitUntil { !isDead(HQ) || time > 30 }; // FSM for helicopter lift system if (INS_HeliLiftSys == 1) then { HelisCanLift = ["CH_47F_EP1","UH1Y","MH6J_EP1","BAF_Merlin_HC3_D","AW159_Lynx_BAF","MV22","UH60M_EP1"]; [] execFSM "common\fsm\HeliLift.fsm"; }; player setVariable ["z_last_heal_call",0]; #include "client\mainLoop.sqf"#include "defines.sqf" #include "functions.sqf" #include "server\defines.sqf" #include "server\cleanup\functions.sqf" #include "server\markers\functions.sqf" #include "server\AI\functions.sqf" #include "server\AI\initUPS.sqf" #include "server\caches\functions.sqf" #include "server\vehicles\functions.sqf" onPlayerConnected ' _caches = cacheList; for "_i" from 0 to (count _caches - 1) do { _cache = _caches select _i; { _x setMarkerPos (getMarkerPos _x); _x setMarkerText (markerText _x); } forEach cacheMarkers(_cache); }; '; if (ambientCivilians == 1) then { nul0 = [] execVM "common\server\IEDdetect\IEDdetect_init.sqf"; /* 200 - is the ambient radius from the player 1 - is the minimum amount of civilians near the player 70 - is the % of presence of a triggerman among them 10 - is the scan interval time "house" - is the object classtype of what could potentially host triggermen bombs (there is always a 50% chance it will be a suicide bomber) 0 - is the beeping (0=no beep, 1=beep, 2=random) 100 - is the area to scan for suitable objects (e.g. "car") and attach the bomb to one of those, randomly. This is also the scan area for the triggerman to trigger the bomb 5 - is the area to scan for hostiles that can instill fear in the triggerman (read above for how fear works). 20 - is the area to scan for possible victims that will make the triggerman touch the bomb off. 65 - is the % for the triggerman to be a suicide bomber instead WEST - is the side to consider enemy of the triggerman */ nul0 = [200,1,70,10,"house",0,100,5,20,65,WEST] execVM "common\server\IEDdetect\IEDdetect_ambientBombers.sqf"; }; setDate [2010, Month, Day, Hour, Minute + (time/60)]; setViewDistance VIEWDISTANCE; //_pos = randPos; //while { count (_pos isFlatEmpty [30,0,0.2,20,0,false,objNull]) == 0 || getTerrainHeightASL _pos <= 2 } do { // _pos = randPos; //}; _pos = getPos mhqposition; HQ setDir (((CENTERPOS select 0) - (_pos select 0)) atan2 ((CENTERPOS select 1) - (_pos select 1))+90); HQ setPosATL _pos; waitUntil { !isDead(HQ) }; if (INS_Roofguns == 1) then { [] spawn { call spawnAIGuns; };}; [] spawn { call setupCaches; }; [] spawn { call spawnAIVehicles; }; #include "server\mainLoop.sqf"//Original by Xeno private ["_vehicle","_caller","_id"]; _vehicle = _this select 0; _caller = _this select 1; _id = _this select 2; if (_caller == driver _vehicle) then { _vehicle removeAction _id; Vehicle_Attached = true; }; if (true) exitWith {}; //Original by Xeno, adapted to Ins by Kol9yN private ["_vehicle","_menu_lift_shown","_nearest","_id","_pos","_npos"]; INS_COMMON_PATH = "common\Lift\"; HTextRed = {"" + _this + ""}; HTextBlue = {"" + _this + ""}; _vehicles_lift_list = []; _vehicles_nolift_list = []; // unfortunately, all kinds of "wheeled_apc" are of type "cars" as well _advtype_lift1 = ["ATV_US_EP1","MMT_Civ","M1030_US_DES_EP1"]; _advtype_lift2 = ["ATV_US_EP1","MMT_Civ","hilux1_civil_3_open_EP1","M1030_US_DES_EP1","HMMWV_M2","HMMWV_MK19","HMMWV_Ambulance_DES_EP1","Lada2_TK_CIV_EP1","HMMWV_M1151_M2_DES_EP1","HMMWV_M998A2_SOV_DES_EP1","M1126_ICV_mk19_EP1","M1126_ICV_M2_EP1","HMMWV_M1151_M2_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","SUV_PMC_BAF","HMMWV_M998A2_SOV_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC"]; _advtype_lift3 = ["M1130_CV_EP1","ATV_US_EP1","MMT_Civ","hilux1_civil_3_open_EP1","M1030_US_DES_EP1","HMMWV_M2","HMMWV_MK19","HMMWV_Ambulance_DES_EP1","Lada2_TK_CIV_EP1","HMMWV_M1151_M2_DES_EP1","HMMWV_M998A2_SOV_DES_EP1","M1126_ICV_mk19_EP1","M1126_ICV_M2_EP1","HMMWV_M1151_M2_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","SUV_PMC_BAF","HMMWV_M998A2_SOV_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC"]; _advtype_lift4 = ["M1130_CV_EP1","hilux1_civil_3_open_EP1","HMMWV_M2","HMMWV_MK19","HMMWV_Ambulance_DES_EP1","Lada2_TK_CIV_EP1","HMMWV_M1151_M2_DES_EP1","HMMWV_M998A2_SOV_DES_EP1","M1126_ICV_mk19_EP1","M1126_ICV_M2_EP1","HMMWV_M1151_M2_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","SUV_PMC_BAF","HMMWV_M998A2_SOV_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC"]; _advtype_lift5 = ["ATV_US_EP1","MMT_Civ","hilux1_civil_3_open_EP1","M1030_US_DES_EP1","HMMWV_M2","HMMWV_MK19","HMMWV_Ambulance_DES_EP1","Lada2_TK_CIV_EP1","HMMWV_M1151_M2_DES_EP1","HMMWV_M998A2_SOV_DES_EP1","M1126_ICV_mk19_EP1","M1126_ICV_M2_EP1","HMMWV_M1151_M2_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","SUV_PMC_BAF","HMMWV_M998A2_SOV_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC"]; _advtype_lift6 = []; _advtype_lift7 = ["ATV_US_EP1","MMT_Civ","hilux1_civil_3_open_EP1","M1030_US_DES_EP1","HMMWV_M2","HMMWV_MK19","HMMWV_Ambulance_DES_EP1","Lada2_TK_CIV_EP1","HMMWV_M1151_M2_DES_EP1","HMMWV_M998A2_SOV_DES_EP1","M1126_ICV_mk19_EP1","M1126_ICV_M2_EP1","HMMWV_M1151_M2_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC","SUV_PMC_BAF","HMMWV_M998A2_SOV_DES_EP1","BAF_Jackal2_GMG_D","BAF_Jackal2_L2A1_D","LandRover_CZ_EP1","LandRover_Special_CZ_EP1","BAF_Offroad_D","ArmoredSUV_PMC","SUV_PMC"]; if(INS_AdvanceType == 1)then{_vehicles_lift_list = _advtype_lift1; _vehicles_nolift_list = ["M1130_CV_EP1"];} else { if(INS_AdvanceType == 2)then{_vehicles_lift_list = _advtype_lift2; _vehicles_nolift_list = ["M1130_CV_EP1"];} else { if(INS_AdvanceType == 3)then{_vehicles_lift_list = _advtype_lift3;} else { if(INS_AdvanceType == 4)then{_vehicles_lift_list = _advtype_lift4;} else { if(INS_AdvanceType == 5)then{_vehicles_lift_list = _advtype_lift5; _vehicles_nolift_list = ["M1130_CV_EP1"];} else { if(INS_AdvanceType == 6)then{_vehicles_lift_list = _advtype_lift6; _vehicles_nolift_list = ["M1130_CV_EP1"];} else { _vehicles_lift_list = _advtype_lift7; _vehicles_nolift_list = ["M1130_CV_EP1"]; }}}}}}; if ( not local player) exitWith {}; _vehicle = _this select 0; Vehicle_Attached = false; Vehicle_Released = false; _menu_lift_shown = false; vehicle_attached_list = []; _nearest = objNull; _id = -1; sleep 0.1; WaitUntil{(alive _vehicle) && (alive player) && (driver _vehicle == player)}; while {(alive _vehicle) && (alive player) && (driver _vehicle == player)} do { if ((driver _vehicle) == player) then { _pos = getPos _vehicle; if (!Vehicle_Attached && (_pos select 2 > 2.5) && (_pos select 2 < 8)) then { _nearest = nearestObjects [_vehicle,["LandVehicle"],50]; _nearest = if(count _nearest > 0) then {_nearest select 0} else {ObjNull}; sleep 0.1; if (!(isNull _nearest) && {_nearest isKindOf _x} count _vehicles_lift_list > 0 && {_nearest isKindOf _x} count _vehicles_nolift_list == 0) then { _nearest_pos = getPos _nearest; _nx = _nearest_pos select 0;_ny = _nearest_pos select 1;_px = _pos select 0;_py = _pos select 1; if ((_px <= _nx + 6 && _px >= _nx - 6) && (_py <= _ny + 6 && _py >= _ny - 6)) then { if (!_menu_lift_shown) then { _id = _vehicle addAction ["Lift Vehicle" call HTextRed, (INS_COMMON_PATH+"heli_action.sqf")]; _menu_lift_shown = true; }; } else { _nearest = objNull; if (_menu_lift_shown) then { _vehicle removeAction _id; _menu_lift_shown = false; }; }; }; } else { if (_menu_lift_shown) then { _vehicle removeAction _id; _menu_lift_shown = false; }; sleep 0.1; if (isNull _nearest) then { Vehicle_Attached = false; Vehicle_Released = false; } else { if (Vehicle_Attached) then { _release_id = _vehicle addAction ["Drop Vehicle" call HTextBlue, (INS_COMMON_PATH+"heli_release.sqf")]; vehicle_attached_list = vehicle_attached_list + [_nearest]; _nearest attachTo [_vehicle,[-1,0,-8]]; _nearest engineOn false; while {!Vehicle_Released && alive _vehicle && alive _nearest && alive player && (driver _vehicle == player)} do {sleep 1}; detach _nearest; Vehicle_Attached = false; Vehicle_Released = false; vehicle_attached_list = vehicle_attached_list - [_nearest]; if (!alive _vehicle) then { _vehicle removeAction _release_id; } else { }; waitUntil {(getPos _nearest) select 2 < 10}; _npos = getPos _nearest; _nearest setPos [_npos select 0, _npos select 1, 0]; sleep 1.012; }; }; }; }; sleep 0.51; }; if (!(alive _vehicle) || !(alive player)) then { _vehicle removeAction vec_id; }; if (true) exitWith {};//Original by Xeno private ["_vehicle","_caller","_id"]; _vehicle = _this select 0; _caller = _this select 1; _id = _this select 2; if (_caller == driver _vehicle) then { _vehicle removeAction _id; Vehicle_Released = true; }; if (true) exitWith {}; // Control types #define CT_STATIC 0 #define CT_BUTTON 1 #define CT_EDIT 2 #define CT_SLIDER 3 #define CT_COMBO 4 #define CT_LISTBOX 5 #define CT_TOOLBOX 6 #define CT_CHECKBOXES 7 #define CT_PROGRESS 8 #define CT_HTML 9 #define CT_STATIC_SKEW 10 #define CT_ACTIVETEXT 11 #define CT_TREE 12 #define CT_STRUCTURED_TEXT 13 #define CT_CONTEXT_MENU 14 #define CT_CONTROLS_GROUP 15 #define CT_SHORTCUT_BUTTON 16 // Arma 2 - textured button #define CT_XKEYDESC 40 #define CT_XBUTTON 41 #define CT_XLISTBOX 42 #define CT_XSLIDER 43 #define CT_XCOMBO 44 #define CT_ANIMATED_TEXTURE 45 #define CT_OBJECT 80 #define CT_OBJECT_ZOOM 81 #define CT_OBJECT_CONTAINER 82 #define CT_OBJECT_CONT_ANIM 83 #define CT_LINEBREAK 98 #define CT_USER 99 #define CT_MAP 100 #define CT_MAP_MAIN 101 #define CT_List_N_Box 102 // Arma 2 - N columns list box // Static styles #define ST_POS 0x0F #define ST_HPOS 0x03 #define ST_VPOS 0x0C #define ST_LEFT 0x00 #define ST_RIGHT 0x01 #define ST_CENTER 0x02 #define ST_DOWN 0x04 #define ST_UP 0x08 #define ST_VCENTER 0x0c #define ST_TYPE 0xF0 #define ST_SINGLE 0 #define ST_MULTI 16 #define ST_TITLE_BAR 32 #define ST_PICTURE 48 #define ST_FRAME 64 #define ST_BACKGROUND 80 #define ST_GROUP_BOX 96 #define ST_GROUP_BOX2 112 #define ST_HUD_BACKGROUND 128 #define ST_TILE_PICTURE 144 #define ST_WITH_RECT 160 #define ST_LINE 176 #define ST_SHADOW 0x100 #define ST_NO_RECT 0x200 #define ST_KEEP_ASPECT_RATIO 0x800 #define ST_TITLE ST_TITLE_BAR + ST_CENTER // Slider styles #define SL_DIR 0x400 #define SL_VERT 0 #define SL_HORZ 0x400 #define SL_TEXTURES 0x10 // Listbox styles #define LB_TEXTURES 0x10 #define LB_MULTI 0x20 #define FontM "Zeppelin32"//#include "IEDdetect_dialog.hpp" #include "options.hpp" #include "geardialog.hpp"//--- Gear Menu. class RscGear { movingEnable = 1; idd = 16000; class controlsBackground { class Mainback : RscPicture { x = 0.04; y = 0.01; w = 1.2549; h = 1.6732; moving = 1; text = "\ca\ui\data\igui_background_gear_ca.paa"; }; }; class controls { class FilterButtonSidearm : RscClickableText { idc = 3400 + 4; style = 48 + 0x800; x = 0.300; y = 0.047; w = 0.086; h = 0.086; color[] = {1, 1, 1, 1}; colorActive[] = subcolor1; text = "\CA\warfare2\images\GearIconSidearm.paa"; action = "server setVariable ['filler', 'sidearms'];"; }; class FilterButtonMisc : FilterButtonSidearm { idc = 3400 + 5; x = 0.375; text = "\CA\warfare2\images\GearIconMisc.paa"; action = "server setVariable ['filler', 'misc'];"; }; class FilterButtonSecondary : FilterButtonSidearm { idc = 3400 + 3; x = 0.225; text = "\CA\warfare2\images\GearIconSecondary.paa"; action = "server setVariable ['filler', 'secondaries'];"; }; class FilterButtonPrimary : FilterButtonSidearm { idc = 3400 + 2; x = 0.15; text = "\CA\warfare2\images\GearIconPrimary.paa"; action = "server setVariable ['filler', 'primaries'];"; }; class FilterButtonAll : FilterButtonSidearm { idc = 3400 + 1; x = 0.075; text = "\CA\warfare2\images\GearIconAll.paa"; action = "server setVariable ['filler', 'all'];"; }; class ConClear : FilterButtonSidearm { idc = 3800; x = 0.902; y = 0.014; w = 0.032; h = 0.032; tooltip = "Gear: Clear the current loadout."; text = "Client\images\i_clear.paa"; action = "WF_Gear_Action = 'clear'"; }; class ConReload : ConClear { idc = 3800 + 1; x = 0.93; tooltip = "Gear: Reload the previous loadout."; text = "Client\images\i_reload.paa"; action = "WF_Gear_Action = 'reload'"; }; class MainList : RscListBoxA { idc = 3700; columns[] = {0.01, 0.25}; drawSideArrows = 0; idcRight = -1; idcLeft = -1; x = 0.043; y = 0.127676; w = 0.45; h = 0.52; onLBSelChanged = "lbChange = true;"; onLBDblClick = "lbMainAction = 'addWeapon';"; }; class SecondaryList : RscListBoxA { idc = 3701; columns[] = {0.01, 0.25}; drawSideArrows = 0; idcRight = -1; idcLeft = -1; x = 0.043; y = 0.66; w = 0.45; h = 0.24; onLBDblClick = "lbMainAction = 'addMagazine';"; }; class PrimaryWeapon : RscClickableText { idc = 3500; x = 0.502; y = 0.244; w = 0.286; h = 0.15; style = 48 + 0x800; soundDoubleClick[] = {"", 0.1, 1}; colorBackground[] = {0.6, 0.83, 0.47, 1}; colorBackgroundSelected[] = {0.6, 0.83, 0.47, 1}; colorFocused[] = {0, 0, 0, 0}; color[] = {0.85, 0.85, 0.85, 1}; colorText[] = {0.85, 0.85, 0.85, 1}; colorActive[] = {1, 1, 1, 1}; text = "\Ca\UI\Data\ui_gear_gun_gs.paa"; action = "primClicked = true"; }; class SecondaryWeapon : PrimaryWeapon { idc = 3500 + 1; y = 0.398; text = "\Ca\UI\Data\ui_gear_sec_gs.paa"; action = "secoClicked = true"; }; class Sidearm : PrimaryWeapon { idc = 3500 + 2; x = 0.56; y = 0.551; w = 0.113; h = 0.15; text = "\Ca\UI\Data\ui_gear_hgun_gs.paa"; action = "sideClicked = true"; }; class InventorySlot0 : PrimaryWeapon { idc = 3500 + 3; x = 0.79; y = 0.244; w = 0.055; h = 0.074; text = "\Ca\UI\Data\ui_gear_mag_gs.paa"; action = "inventoryClick = 3503"; }; class InventorySlot1 : InventorySlot0 { idc = 3500 + 4; x = 0.847; y = 0.244; action = "inventoryClick = 3504;"; }; class InventorySlot2 : InventorySlot0 { idc = 3500 + 5; x = 0.904366; y = 0.244; action = "inventoryClick = 3505"; }; class InventorySlot3 : InventorySlot0 { idc = 3500 + 6; x = 0.79; y = 0.321; action = "inventoryClick = 3506"; }; class InventorySlot4 : InventorySlot0 { idc = 3500 + 7; x = 0.847; y = 0.321; action = "inventoryClick = 3507"; }; class InventorySlot5 : InventorySlot0 { idc = 3500 + 8; x = 0.904366; y = 0.321; action = "inventoryClick = 3508"; }; class InventorySlot6 : InventorySlot0 { idc = 3500 + 9; x = 0.79; y = 0.398; action = "inventoryClick = 3509"; }; class InventorySlot7 : InventorySlot0 { idc = 3500 + 10; x = 0.847; y = 0.398; action = "inventoryClick = 3510"; }; class InventorySlot8 : InventorySlot0 { idc = 3500 + 11; x = 0.904366; y = 0.398; action = "inventoryClick = 3511"; }; class InventorySlot9 : InventorySlot0 { idc = 3500 + 12; x = 0.79; y = 0.474; action = "inventoryClick = 3512"; }; class InventorySlot10 : InventorySlot0 { idc = 3500 + 13; x = 0.847; y = 0.474; action = "inventoryClick = 3513"; }; class InventorySlot11 : InventorySlot0 { idc = 3500 + 14; x = 0.904366; y = 0.474; action = "inventoryClick = 3514"; }; class SidearmInventorySlot0 : InventorySlot0 { idc = 3500 + 15; x = 0.674; y = 0.551; w = 0.055; h = 0.074; text = "\Ca\UI\Data\ui_gear_hgunmag_gs.paa"; action = "inventoryClick = 3515"; }; class SidearmInventorySlot1 : SidearmInventorySlot0 { idc = 3500 + 16; x = 0.733; y = 0.551; action = "inventoryClick = 3516"; }; class SidearmInventorySlot2 : SidearmInventorySlot0 { idc = 3500 + 17; x = 0.79; action = "inventoryClick = 3517"; }; class SidearmInventorySlot3 : SidearmInventorySlot0 { idc = 3500 + 18; x = 0.847; action = "inventoryClick = 3518"; }; class SidearmInventorySlot4 : SidearmInventorySlot0 { idc = 3500 + 19; x = 0.674; y = 0.628; action = "inventoryClick = 3519"; }; class SidearmInventorySlot5 : SidearmInventorySlot0 { idc = 3500 + 20; x = 0.733; y = 0.628; action = "inventoryClick = 3520"; }; class SidearmInventorySlot6 : SidearmInventorySlot0 { idc = 3500 + 21; x = 0.79; y = 0.628; action = "inventoryClick = 3521"; }; class SidearmInventorySlot7 : SidearmInventorySlot0 { idc = 3500 + 22; x = 0.847; y = 0.628; action = "inventoryClick = 3522"; }; class MiscInventorySlot0 : InventorySlot0 { idc = 3500 + 23; x = 0.56; y = 0.705; w = 0.055; h = 0.074; colorActive[] = {0.85, 0.85, 0.85, 1}; text = "\Ca\UI\Data\ui_gear_eq_gs.paa"; action = "inventoryClick = 3523"; }; class MiscInventorySlot1 : MiscInventorySlot0 { idc = 3500 + 24; x = 0.617; y = 0.705; action = "inventoryClick = 3524"; }; class MiscInventorySlot2 : MiscInventorySlot0 { idc = 3500 + 25; x = 0.674; y = 0.705; action = "inventoryClick = 3525"; }; class MiscInventorySlot3 : MiscInventorySlot0 { idc = 3500 + 26; x = 0.733; y = 0.705; action = "inventoryClick = 3526"; }; class MiscInventorySlot4 : MiscInventorySlot0 { idc = 3500 + 27; x = 0.79; y = 0.705; action = "inventoryClick = 3527"; }; class MiscInventorySlot5 : MiscInventorySlot0 { idc = 3500 + 28; x = 0.847; y = 0.705; action = "inventoryClick = 3528"; }; class MiscInventorySlot6 : MiscInventorySlot0 { idc = 3500 + 29; x = 0.56; y = 0.782; action = "inventoryClick = 3529"; }; class MiscInventorySlot7 : MiscInventorySlot0 { idc = 3500 + 30; x = 0.617; y = 0.782; action = "inventoryClick = 3530"; }; class MiscInventorySlot8 : MiscInventorySlot0 { idc = 3500 + 31; x = 0.674; y = 0.782; action = "inventoryClick = 3531"; }; class MiscInventorySlot9 : MiscInventorySlot0 { idc = 3500 + 32; x = 0.733; y = 0.782; action = "inventoryClick = 3532"; }; class MiscInventorySlot10 : MiscInventorySlot0 { idc = 3500 + 33; x = 0.79; y = 0.782; action = "inventoryClick = 3533"; }; class MiscInventorySlot11 : MiscInventorySlot0 { idc = 3500 + 34; x = 0.847; y = 0.782; action = "inventoryClick = 3534"; }; class SpecialInventorySlot0 : InventorySlot0 { idc = 3500 + 35; x = 0.502; y = 0.09; w = 0.113; h = 0.15; colorActive[] = {0.85, 0.85, 0.85, 1}; text = "\Ca\UI\Data\ui_gear_eq_gs.paa"; action = "inventoryClick = 3535"; }; class SpecialInventorySlot1 : SpecialInventorySlot0 { idc = 3500 + 36; x = 0.847; y = 0.09; action = "inventoryClick = 3536"; }; class CA_Money_Value : RscText { idc = 3850; x = 0.727942; y = 0.86; SizeEx = 0.03; text = ""; colorText[] = subcolor1; }; class CA_GearLabel : CA_Money_Value { idc = 3852; style = 2; x = 0.502419; y = 0.0492156; w = 0.456; SizeEx = 0.03; text = "Loadout:"; }; class Gear_Title : CA_Money_Value { idc = 3853; x = 0.047634; y = 0.01; text = "Gear Menu:"; }; class BuyButton : RscIGUIShortcutButton { idc = 3900; x = 0.0392 + 0.245*2; y = 0.897; w = 0.185; h = 0.052; text = "Save"; action = "buyLoadout = true"; }; class CloseButton : BuyButton { idc = 3901; x = 0.0392 + 0.245; text = "Close"; action = "closeDialog 0"; }; }; };////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// #define CT_STATIC 0 #define CT_BUTTON 1 #define CT_EDIT 2 #define CT_SLIDER 3 #define CT_COMBO 4 #define CT_LISTBOX 5 #define CT_ACTIVETEXT 11 #define CT_STRUCTURED_TEXT 13 #define ST_LEFT 0 #define ST_RIGHT 1 #define ST_CENTER 2 #define ST_MULTI 16 #define ST_PICTURE 48 #define ST_FRAME 64 #define ST_SHADOW 256 #define ST_NO_RECT 512 #define SL_HORZ 0x400 #define SL_VERT 0 #define FontM "Bitstream" class RscButton { type = CT_BUTTON; idc = -1; style = ST_CENTER; font = FontM; sizeEx = 0.018; default = false; colorText[] = {1, 1, 1, 1}; colorDisabled[] = {0.35, 0.35, 0.45, 1}; colorBackground[] = {0.95, 0.95, 0.95, 1}; colorBackgroundDisabled[] = {0.65, 0.65, 0.75, 1}; colorBackgroundActive[] = {0.51, 1, 0.01, 1}; offsetX = 0.004; offsetY = 0.004; offsetPressedX = 0.002; offsetPressedY = 0.002; colorFocused[] = {0, 0, 0, 0}; colorShadow[] = {0, 0, 0, 0}; colorBorder[] = {0, 0, 0, 0}; borderSize = 0.008; soundEnter[] = {"", 0.1, 1}; soundPush[] = {"", 0.1, 1}; soundClick[] = {"", 0.1, 1}; soundEscape[] = {"", 0.1, 1}; }; class RscButtonTextOnly: RscButton { colorBackground[] = {1,1,1,0}; colorBackgroundActive[] = {1,1,1,0}; colorBackgroundDisabled[] = {1,1,1,0}; colorFocused[] = {1,1,1,0}; colorShadow[] = {1,1,1,0}; borderSize = 0; }; class IEDdetect_injector { idd = 650; movingEnable = false; enableSimulation = true; duration = 99999; fadein = 0.33; fadeout = 0.33; name = "IEDdetect_injector"; //onUnload = "; class controlsBackground {}; class objects {}; class controls { class IEDdetect_tool: RscPicture { idc = 651; x=0.88; y=0.60; w=0.35; h=0.45; text = "common\server\IEDdetect\screens\IEDdetect_09.paa"; }; class IEDdetect_readings: RscText { idc = 660; x = 1.1; y = 0.75; w = 0.15; h = 0.09; sizeEx = 0.05; colorText[] = {1,1,1,1}; text = ""; }; class IEDdetect_injectP : RscPicture { idc = 652; x = 1.078; y = 0.905; w = 0.10; h = 0.0584; text = "common\server\IEDdetect\screens\IEDdetect_injectbutton.paa"; action = ""; }; class IEDdetect_injectB : RscButtonTextOnly { idc = 653; x = 1.078; y = 0.905; w = 0.10; h = 0.0584; text = ""; action = ""; onMouseButtonDown = "_dummy = [_this, ""MouseButtonDown"", [653], ""2""] execVM ""common\server\IEDdetect\IEDdetect_injection.sqf"";"; onMouseButtonUp = ""; onMouseButtonDblClick = "_dummy = [_this, ""MouseButtonDown"", [653], ""2""] execVM ""common\server\IEDdetect\IEDdetect_injection.sqf"";"; onMouseEnter = ""; onMouseExit = ""; onSetFocus = ""; onKillFocus = ""; }; }; };////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // Screens for my IED Detection Script ////////////////////////////////////////////////////////////////// class IEDdetect_01 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_01"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_01.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_02 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_02"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_02.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_03 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_03"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_03.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_04 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_04"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_04.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_05 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_05"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_05.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_06 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_06"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_06.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_07 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_07"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_07.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_10 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_10"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_10.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_11 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_11"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_11.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_12 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_12"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_12.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; }; class IEDdetect_13 { idd = -1; movingEnable = 0; duration = 4; fadein = 0.33; fadeout = 0.33; name="IEDdetect_13"; controls[]={"Picture"}; class Picture { x=0.88; y=0.60; w=0.35; h=0.45; text="common\server\IEDdetect\screens\IEDdetect_13.paa"; sizeEx = 1; type=0; idc=-1; style=48; colorBackground[]={0,0,0,0}; colorText[]={1,1,1,1}; font="Bitstream"; }; };////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // Sounds for my IED detection script ////////////////////////////////////////////////////////////////// class IEDdetect_beep { name = "IEDdetect_beep"; sound[] = {"common\server\IEDdetect\sounds\IEDdetect_beep.ogg", db-24, 1.0}; titles[] = {}; }; class IEDdetect_beep2 { name = "IEDdetect_beep2"; sound[] = {"common\server\IEDdetect\sounds\IEDdetect_beep2.ogg", db-24, 1.0}; titles[] = {}; }; class IEDdetect_beep3 { name = "IEDdetect_beep3"; sound[] = {"common\server\IEDdetect\sounds\IEDdetect_beep3.ogg", db-56, 1.0}; titles[] = {}; }; class IEDdetect_wave { name = "IEDdetect_wave"; sound[] = {"common\server\IEDdetect\sounds\IEDdetect_wave.ogg", db-24, 1.0}; titles[] = {}; }; class IEDdetect_click { name = "IEDdetect_click"; sound[] = {"common\server\IEDdetect\sounds\IEDdetect_click.ogg", db-24, 1.0}; titles[] = {}; }; class akbar { name = "akbar"; sound[] = {"common\server\IEDdetect\sounds\akbar.ogg", db-10, 1.0}; titles[] = {}; };// Settings Dialog class INSURGENCY_OPTIONS { idd = -1; movingEnable = 1; onLoad = "uiNamespace setVariable ['INSURGENCY_OPTIONS', _this select 0]; _this call fillOptionsDialog"; class controlsBackground { class INS_BackGround : RscText { idc = -1; type = 0; style = 48; x = 0; y = 0; w = 0.8; h = 0.43; colorBackground[] = {0,0,0,0}; text = "\ca\ui\data\ui_mainmenu_background_ca.paa"; font = "Zeppelin32"; sizeEx = 0.032; }; }; class controls { class INS_GraslayerCaption : RscText { idc = -1; x = 0.12; y = 0.063; w = 0.25; h = 0.1; sizeEx = 0.029; colorBackground[] = {1, 1, 1, 0}; text = "Gras Layer:"; }; class INS_GraslayerCombo:RscCombo { idc = 1001; x = 0.125; y = 0.163; w = 0.17; h = 0.03; onLBSelChanged = "[_this] execVM 'common\client\UI\setgrass.sqf'"; }; class INS_CloseButton: RscShortcutButtonMain { idc = -1; text = "X"; action = "closeDialog 0"; default = true; x = 0.25; y = 0.31; h = 0.04; w = 0.1; sizeEx = 0.029; size = 0.029; class TextPos { left = 0.05; top = 0.002; right = 0; bottom = 0; }; }; class INS_MainCaption : RscText { x = 0.12; y = -0.025; w = 0.25; h = 0.1; sizeEx = 0.035; colorBackground[] = {1, 1, 1, 0}; text = "Settings"; }; }; }; class CfgSounds { #include "IEDdetect_sounds.hpp" };class RscTitles { //#include "IEDdetect_screens.hpp" class Rtags { idd=64431; movingEnable = true; fadein = 0; fadeout = 0; duration = 0.2; name = "TAGS_HUD"; controls[] = { "camtag", "nametag", "interact"}; onLoad = "uiNamespace setVariable ['TAGS_HUD', _this select 0]"; class camtag { type = CT_STRUCTURED_TEXT; idc = 64434; style = 0x00; x = safeZoneX; y = safeZoneY+safeZoneH/2+0.3; w = safeZoneW; h = safeZoneH; font = "Zeppelin33"; size = 0.03; colorText[] = { 0, 0.4, 0.8, 0.8}; colorBackground[] ={ 0,0,0,0.0}; text = ""; class Attributes { font = "Zeppelin33"; color = "#347C17"; align = "center"; valign = "middle"; shadow = "1"; shadowColor = "#000000"; size = "1"; }; }; class nametag { type = CT_STRUCTURED_TEXT; idc = 64435; style = 0x00; x = safeZoneX+ 0.1; y = safeZoneY+safeZoneH/2+0.05; w = safeZoneW; h = safeZoneH; font = "Zeppelin33"; size = 0.03; colorText[] = { 0, 0.4, 0.8, 0.8}; colorBackground[] ={ 0,0,0,0.0}; text = ""; class Attributes { font = "Zeppelin33"; color = "#2B60DE"; align = "center"; valign = "middle"; shadow = "1"; shadowColor = "#000000"; size = "1"; }; }; class interact { type = CT_STRUCTURED_TEXT; idc = 64436; style = 0x00; x = safeZoneX; y = safeZoneY+safeZoneH/2+0.2; w = safeZoneW; h = safeZoneH; font = "Zeppelin33"; size = 0.03; colorText[] = { 1, 1, 0, 0.8}; colorBackground[] ={ 0,0,0,0.0}; text = ""; class Attributes { font = "Zeppelin33"; color = "#2B60DE"; align = "center"; valign = "middle"; shadow = "1"; shadowColor = "#000000"; size = "1"; }; }; }; }; /* Controls Definitions. */ #ifdef VANILLA /* Green */ #define subcolor1 {0.7,1,0.7,1} #define subcolor1hex "#b3ffb3" #define WFBE_SoundClick "ui\ui_ok" #define WFBE_SoundEnter "ui\ui_over" #define WFBE_SoundEscape "ui\ui_cc" #else /* Yellow */ #define subcolor1 {1,1,0.7,1} #define subcolor1hex "#ffffb3" #define WFBE_SoundClick "\ca\ui\data\sound\onclick" #define WFBE_SoundEnter "\ca\ui\data\sound\onover" #define WFBE_SoundEscape "\ca\ui\data\sound\onescape" #endif class RscPicture { type = 0; idc = -1; style = 48; colorText[] = {0.75, 0.75, 0.75, 1}; colorBackground[] = {0, 0, 0, 0}; font = "Bitstream"; sizeEx = 0.025; soundClick[] = {WFBE_SoundClick, 0.2, 1}; soundEnter[] = {WFBE_SoundEnter, 0.2, 1}; soundEscape[] = {WFBE_SoundEscape, 0.2, 1}; soundPush[] = {"", 0.2, 1}; w = 0.275; h = 0.04; text = ""; }; class RscShortcutButton { type = 16; idc = -1; style = 0; default = 0; w = 0.183825; h = 0.104575; color[] = {0.543, 0.5742, 0.4102, 1.0}; color2[] = {0.95, 0.95, 0.95, 1}; colorBackground[] = {1, 1, 1, 1}; colorbackground2[] = {1, 1, 1, 0.4}; colorDisabled[] = {1, 1, 1, 0.25}; periodFocus = 1.2; periodOver = 0.8; class HitZone { left = 0.004; top = 0.029; right = 0.004; bottom = 0.029; }; class ShortcutPos { left = 0.004; top = 0.026; w = 0.0392157; h = 0.0522876; }; class TextPos { left = 0.05; top = 0.034; right = 0.005; bottom = 0.005; }; animTextureNormal = "\ca\ui\data\ui_button_normal_ca.paa"; animTextureDisabled = "\ca\ui\data\ui_button_disabled_ca.paa"; animTextureOver = "\ca\ui\data\ui_button_over_ca.paa"; animTextureFocused = "\ca\ui\data\ui_button_focus_ca.paa"; animTexturePressed = "\ca\ui\data\ui_button_down_ca.paa"; animTextureDefault = "\ca\ui\data\ui_button_default_ca.paa"; textureNoShortcut = ""; period = 0.4; font = "Zeppelin32"; size = 0.03521; sizeEx = 0.03521; text = ""; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.09, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.07, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.09, 1}; action = ""; class Attributes { font = "Zeppelin32"; color = "#E5E5E5"; align = "left"; shadow = "true"; }; class AttributesImage { font = "Zeppelin32"; color = "#E5E5E5"; align = "left"; }; }; class RscIGUIShortcutButton : RscShortcutButton { w = 0.183825; h = 0.0522876; style = 2; color[] = {1, 1, 1, 1}; color2[] = {1, 1, 1, 0.85}; colorBackground[] = {1, 1, 1, 1}; colorbackground2[] = {1, 1, 1, 0.85}; colorDisabled[] = {1, 1, 1, 0.4}; class HitZone { left = 0.002; top = 0.003; right = 0.002; bottom = 0.016; }; class ShortcutPos { left = -0.006; top = -0.007; w = 0.0392157; h = 0.0522876; }; class TextPos { left = 0.02; top = 0.0; right = 0.002; bottom = 0.016; }; animTextureNormal = "\ca\ui\data\igui_button_normal_ca.paa"; animTextureDisabled = "\ca\ui\data\igui_button_disabled_ca.paa"; animTextureOver = "\ca\ui\data\igui_button_over_ca.paa"; animTextureFocused = "\ca\ui\data\igui_button_focus_ca.paa"; animTexturePressed = "\ca\ui\data\igui_button_down_ca.paa"; animTextureDefault = "\ca\ui\data\igui_button_normal_ca.paa"; class Attributes { font = "Zeppelin32"; color = "#E5E5E5"; align = "center"; shadow = "true"; }; }; class RscShortcutButtonMain: RscShortcutButton { w = 0.313726; h = 0.104575; color[] = {0.543, 0.5742, 0.4102, 1.0}; colorDisabled[] = {1, 1, 1, 0.25}; class HitZone { left = 0.0; top = 0.0; right = 0.0; bottom = 0.0; }; class ShortcutPos { left = 0.0204; top = 0.026; w = 0.0392157; h = 0.0522876; }; class TextPos { left = 0.08; top = 0.034; right = 0.005; bottom = 0.005; }; animTextureNormal = "\ca\ui\data\ui_button_main_normal_ca.paa"; animTextureDisabled = "\ca\ui\data\ui_button_main_disabled_ca.paa"; animTextureOver = "\ca\ui\data\ui_button_main_over_ca.paa"; animTextureFocused = "\ca\ui\data\ui_button_main_focus_ca.paa"; animTexturePressed = "\ca\ui\data\ui_button_main_down_ca.paa"; animTextureDefault = "\ca\ui\data\ui_button_main_normal_ca.paa"; period = 0.5; font = "Zeppelin32"; size = 0.03921; sizeEx = 0.03921; text = ""; soundEnter[] = {"\ca\ui\data\sound\mouse2", 0.09, 1}; soundPush[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundClick[] = {"\ca\ui\data\sound\mouse3", 0.07, 1}; soundEscape[] = {"\ca\ui\data\sound\mouse1", 0.09, 1}; action = ""; class Attributes { font = "Zeppelin32"; color = "#E5E5E5"; align = "left"; shadow = "false"; }; class AttributesImage { font = "Zeppelin32"; color = "#E5E5E5"; align = "false"; }; }; class RscListBox { idc = -1; type = 5; style = 0 + 0x10; font = "Zeppelin32"; sizeEx = 0.04221; color[] = {1, 1, 1, 1}; colorText[] = {1, 1, 1, 0.75}; colorScrollbar[] = {0.95, 0.95, 0.95, 1}; colorSelect[] = {0.95, 0.95, 0.95, 1}; colorSelect2[] = {0.95, 0.95, 0.95, 1}; colorSelectBackground[] = {0.6, 0.8392, 0.4706, 1.0}; colorSelectBackground2[] = {0.6, 0.8392, 0.4706, 1.0}; columns[] = {0.1, 0.7, 0.1, 0.1}; period = 0; colorBackground[] = {0, 0, 0, 1}; maxHistoryDelay = 1.0; autoScrollSpeed = -1; autoScrollDelay = 5; autoScrollRewind = 0; soundSelect[] = {"\ca\ui\data\sound\new1", 0.09, 1}; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa"; border = "\ca\ui\data\igui_border_scroll_ca.paa"; }; }; class RscListBoxA : RscListBox { type = 102; lineSpacing = 1; sizeEx = 0.029; rowHeight = 0.03; style = 16; arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; }; class RscText { idc = -1; type = 0; x = 0; y = 0; h = 0.037; w = 0.3; style = 256; font = "Zeppelin32"; text = ""; SizeEx = 0.03921; colorText[] = {0.543, 0.5742, 0.4102, 1.0}; colorBackground[] = {0, 0, 0, 0}; }; class RscStructuredText { type = 13; idc = -1; style = 0; x = 0; y = 0; h = 0.035; w = 0.1; text = ""; size = 0.03421; colorText[] = subcolor1; class Attributes { font = "Zeppelin32"; color = subcolor1hex; align = "left"; shadow = true; }; }; class RscXSliderH { idc = -1; type = 43; style = 0x400 + 0x10; x = 0; y = 0; h = 0.029412; w = 0.4; color[] = {1, 1, 1, 0.4}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.2}; arrowEmpty = "\ca\ui\data\ui_arrow_left_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_left_active_ca.paa"; border = "\ca\ui\data\ui_border_frame_ca.paa"; thumb = "\ca\ui\data\ui_slider_bar_ca.paa"; }; class RscCombo { idc = -1; type = 4; style = 1; x = 0; y = 0; w = 0.3; h = 0.035; colorSelect[] = {0.023529, 0, 0.0313725, 1}; colorText[] = {0.023529, 0, 0.0313725, 1}; colorBackground[] = {0.95, 0.95, 0.95, 1}; colorSelectBackground[] = {0.543, 0.5742, 0.4102, 1.0}; colorScrollbar[] = {0.023529, 0, 0.0313725, 1}; arrowEmpty = "\ca\ui\data\ui_arrow_combo_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_combo_active_ca.paa"; wholeHeight = 0.45; color[] = {0, 0, 0, 0.6}; colorActive[] = {0, 0, 0, 1}; colorDisabled[] = {0, 0, 0, 0.3}; font = "Zeppelin32"; sizeEx = 0.031; soundSelect[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundExpand[] = {"\ca\ui\data\sound\new1", 0.09, 1}; soundCollapse[] = {"\ca\ui\data\sound\new1", 0.09, 1}; maxHistoryDelay = 1.0; class ScrollBar { color[] = {1, 1, 1, 0.6}; colorActive[] = {1, 1, 1, 1}; colorDisabled[] = {1, 1, 1, 0.3}; thumb = "\ca\ui\data\ui_scrollbar_thumb_ca.paa"; arrowFull = "\ca\ui\data\ui_arrow_top_active_ca.paa"; arrowEmpty = "\ca\ui\data\ui_arrow_top_ca.paa"; border = "\ca\ui\data\ui_border_scroll_ca.paa"; }; }; class RscClickableText { idc = -1; type = 11; style = 48 + 0x800; color[] = {0.75,0.75,0.75,1}; colorActive[] = {1,1,1,1}; colorBackground[] = {0.6, 0.8392, 0.4706, 1.0}; colorBackgroundSelected[] = {0.6, 0.8392, 0.4706, 1.0}; colorFocused[] = {0.0, 0.0, 0.0, 0}; font = "Zeppelin32"; sizeEx = 0.03921; soundClick[] = {WFBE_SoundClick,0.2,1}; soundDoubleClick[] = {"", 0.1, 1}; soundEnter[] = {WFBE_SoundEnter,0.2,1}; soundEscape[] = {WFBE_SoundEscape,0.2,1}; soundPush[] = {, 0.2, 1}; w = 0.275; h = 0.04; text = ""; }; class RscMapControl { type = 101; moveOnEdges = 1; sizeEx = 0.025; style = 48; x = 0.2; y = 0.2; w = 0.2; h = 0.2; ptsPerSquareSea = 8; ptsPerSquareTxt = 10; ptsPerSquareCLn = 10; ptsPerSquareExp = 10; ptsPerSquareCost = 10; ptsPerSquareFor = "6.0f"; ptsPerSquareForEdge = "15.0f"; ptsPerSquareRoad = "3f"; ptsPerSquareObj = 15; showCountourInterval = "false"; maxSatelliteAlpha = 0.75; alphaFadeStartScale = 0.15; alphaFadeEndScale = 0.29; colorLevels[] = {0.65, 0.6, 0.45, 1}; colorSea[] = {0.46, 0.65, 0.74, 0.5}; colorForest[] = {0.45, 0.64, 0.33, 0.5}; colorRocks[] = {0, 0, 0, 0.3}; colorCountlines[] = {0.85, 0.8, 0.65, 1}; colorMainCountlines[] = {0.45, 0.4, 0.25, 1}; colorCountlinesWater[] = {0.25, 0.4, 0.5, 0.3}; colorMainCountlinesWater[] = {0.25, 0.4, 0.5, 0.9}; colorPowerLines[] = {0.1, 0.1, 0.1, 1}; colorRailWay[] = {0.8, 0.2, 0, 1}; colorForestBorder[] = {0, 0, 0, 0}; colorRocksBorder[] = {0, 0, 0, 0}; colorNames[] = {0.1, 0.1, 0.1, 0.9}; colorInactive[] = {1, 1, 1, 0.5}; colorText[] = {0, 0, 0, 1}; colorBackground[] = {0.8, 0.8, 0.8, 1}; font = "EtelkaNarrowMediumPro"; colorOutside[] = {0, 0, 0, 1}; fontLabel = "Zeppelin32"; sizeExLabel = 0.034; fontGrid = "Zeppelin32"; sizeExGrid = 0.03; fontUnits = "Zeppelin32"; sizeExUnits = 0.034; fontNames = "Zeppelin32"; sizeExNames = 0.056; fontInfo = "Zeppelin32"; sizeExInfo = 0.034; fontLevel = "Zeppelin32"; sizeExLevel = 0.024; text = "\ca\ui\data\map_background2_co.paa"; class Task { icon = "\ca\ui\data\ui_taskstate_current_CA.paa"; iconCreated = "\ca\ui\data\ui_taskstate_new_CA.paa"; iconCanceled = "#(argb,8,8,3)color(0,0,0,0)"; iconDone = "\ca\ui\data\ui_taskstate_done_CA.paa"; iconFailed = "\ca\ui\data\ui_taskstate_failed_CA.paa"; color[] = {0.863, 0.584, 0.0, 1}; colorCreated[] = {0.95, 0.95, 0.95, 1}; colorCanceled[] = {0.606, 0.606, 0.606, 1}; colorDone[] = {0.424, 0.651, 0.247, 1}; colorFailed[] = {0.706, 0.0745, 0.0196, 1}; size = 27; importance = 1; coefMin = 1; coefMax = 1; }; class CustomMark { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0.6471, 0.6706, 0.6235, 1.0}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class Legend { x = "SafeZoneX"; y = "SafeZoneY"; w = 0.34; h = 0.152; font = "Zeppelin32"; sizeEx = 0.03921; colorBackground[] = {0.906, 0.901, 0.88, 0}; color[] = {0, 0, 0, 1}; }; class Bunker { icon = "\ca\ui\data\map_bunker_ca.paa"; size = 14; color[] = {0, 0, 1, 1}; importance = 1.5 * 14 * 0.05; coefMin = 0.25; coefMax = 4; }; class Bush { icon = "\ca\ui\data\map_bush_ca.paa"; color[] = {0.55, 0.64, 0.43, 1}; size = 14; importance = 0.2 * 14 * 0.05; coefMin = 0.25; coefMax = 4; }; class BusStop { icon = "\ca\ui\data\map_busstop_ca.paa"; color[] = {0, 0, 1, 1}; size = 12; importance = 1 * 10 * 0.05; coefMin = 0.25; coefMax = 4; }; class Command { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0, 0.9, 0, 1}; size = 18; importance = 1; coefMin = 1; coefMax = 1; }; class Cross { icon = "\ca\ui\data\map_cross_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 0.7 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Fortress { icon = "\ca\ui\data\map_bunker_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Fuelstation { icon = "\ca\ui\data\map_fuelstation_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.75; coefMax = 4; }; class Fountain { icon = "\ca\ui\data\map_fountain_ca.paa"; color[] = {0.2, 0.45, 0.7, 1}; size = 11; importance = 1 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Hospital { icon = "\ca\ui\data\map_hospital_ca.paa"; color[] = {0.78, 0, 0.05, 1}; size = 16; importance = 2 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Chapel { icon = "\ca\ui\data\map_chapel_ca.paa"; color[] = {0, 0, 1, 1}; size = 16; importance = 1 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Church { icon = "\ca\ui\data\map_church_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Lighthouse { icon = "\ca\ui\data\map_lighthouse_ca.paa"; size = 14; color[] = {0, 0.9, 0, 1}; importance = 3 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Quay { icon = "\ca\ui\data\map_quay_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Rock { icon = "\ca\ui\data\map_rock_ca.paa"; color[] = {0.1, 0.1, 0.1, 0.8}; size = 12; importance = 0.5 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Ruin { icon = "\ca\ui\data\map_ruin_ca.paa"; size = 16; color[] = {0, 0.9, 0, 1}; importance = 1.2 * 16 * 0.05; coefMin = 1; coefMax = 4; }; class SmallTree { icon = "\ca\ui\data\map_smalltree_ca.paa"; color[] = {0.45, 0.64, 0.33, 0.4}; size = 12; importance = 0.6 * 12 * 0.05; coefMin = 0.25; coefMax = 4; }; class Stack { icon = "\ca\ui\data\map_stack_ca.paa"; size = 20; color[] = {0, 0.9, 0, 1}; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Tree { icon = "\ca\ui\data\map_tree_ca.paa"; color[] = {0.45, 0.64, 0.33, 0.4}; size = 12; importance = 0.9 * 16 * 0.05; coefMin = 0.25; coefMax = 4; }; class Tourism { icon = "\ca\ui\data\map_tourism_ca.paa"; size = 16; color[] = {0.78, 0, 0.05, 1}; importance = 1 * 16 * 0.05; coefMin = 0.7; coefMax = 4; }; class Transmitter { icon = "\ca\ui\data\map_transmitter_ca.paa"; color[] = {0, 0.9, 0, 1}; size = 20; importance = 2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class ViewTower { icon = "\ca\ui\data\map_viewtower_ca.paa"; color[] = {0, 0.9, 0, 1}; size = 16; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class Watertower { icon = "\ca\ui\data\map_watertower_ca.paa"; color[] = {0.2, 0.45, 0.7, 1}; size = 20; importance = 1.2 * 16 * 0.05; coefMin = 0.9; coefMax = 4; }; class Waypoint { icon = "\ca\ui\data\map_waypoint_ca.paa"; color[] = {0, 0, 1, 1}; size = 14; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class WaypointCompleted { icon = "\ca\ui\data\map_waypoint_completed_ca.paa"; color[] = {0, 0, 1, 1}; size = 14; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; class ActiveMarker { icon = ""; color[] = {0, 0, 1, 1}; size = 14; importance = 2.5 * 16 * 0.05; coefMin = 0.5; coefMax = 4; }; }; createHeliPilot = { call compile format[' %1 = _PGroup createUnit [PILOTTYPE, spawnPos, [], 0, "NONE"]; %1 setVehicleVarName "%1"; %1 setCaptive true; %1 ', _this]; }; pilotAI = { private ["_pilot","_stopped","_landing","_movePos","_units","_vcl"]; _pilot = "heliPilot"; if isNil _pilot then { _pilot call createHeliPilot; }; _pilot = call compile _pilot; if isNull _pilot then { // null objects can't be re-used in SQF _pilot = "heliPilot"; _pilot call createHeliPilot; }; if !alive _pilot then { deleteVehicle _pilot; _pilot = _pilot call createHeliPilot; }; _units = units group _pilot; if (!(pilotController in _units) && count _units == 1) then { [_pilot] join _PGroup; }; _vcl = vehicle _pilot; if (_vcl == _pilot) then { if (alive heli && heli distance startPos < 300) then { heli setDamage 0; heli setFuel 1; heli lockDriver false; _pilot assignAsDriver heli; _pilot moveInDriver heli; heli lockDriver true; }; } else { _stopped = _vcl getVariable "stopped"; _landing = _vcl getVariable "landing"; if !(pilotController in _units) exitWith { if !isNil "_stopped" then { _vcl setVariable ["stopped", nil]; }; if !isNil "_landing" then { _vcl setVariable ["landing", nil]; }; }; if (getPosATL _vcl select 2 < 5 && count crew _vcl > 1 && isEngineOn _vcl) exitWith { if !isNil "_stopped" exitWith {}; doStop _pilot; _vcl flyInHeight (getPosATL _vcl select 2); _vcl setVariable ["stopped", true]; }; if !isNil "_stopped" then { _vcl setVariable ["stopped", nil]; }; _movePos = expectedDestination _pilot select 0; if (_movePos select 0 == 0 && _vcl distance helipad > 200) exitWith { _vcl flyInHeight 30; _vcl doMove getPosATL helipad; }; if (_vcl distance helipad <= 200 && isEngineOn _vcl) exitWith { if (getPosATL _vcl select 2 < 2) exitWith { _pilot action ["EngineOff", _vcl]; }; if !isNil "_landing" exitWith {}; _vcl land "land"; _vcl setVariable ["landing", true]; }; if !isNil "_landing" then { _vcl setVariable ["landing", nil]; }; }; }; spawnAIVehicle = { private ["_num","_track","_speed","_grp","_type","_obj","_mkr","_pos","_vcl","_ai","_unum"]; _unum = _this; _num = _unum % 3; if (_num == 0) then { _num = 3; }; _grp = ["","vclGrp",_unum+1,"east"] call getGroup; _type = eastVehiclesFreq select round(random (count eastVehiclesFreq - 1)); _obj = call compile ("vclSpawn" + str(_num)); _mkr = str _unum; _pos = getPosATL _obj; _vcl = createVehicle [_type, _pos, [], 0, "None"]; if (DEBUG) then { server globalChat format["AI VEHICLE %1 of TYPE %2 CREATED! POSITION: %3", _unum, str _vcl, str _pos]; }; _vcl setDir getDir _obj; _ai = _grp createUnit [vclCrewClass, _pos, [], 0, "None"]; _ai setRank (eastRanks select 2); _ai moveInDriver _vcl; _ai = _grp createUnit [vclCrewClass, _pos, [], 0, "None"]; _ai setRank (eastRanks select 3); _ai moveInGunner _vcl; if !(typeOf _vcl in eastLightVehicles) then { _vcl lockDriver true; _vcl lockTurret [[0], true]; }; _speed = "slow"; _track = ""; if (DEBUG) then { _track = "track"; }; if (typeOf _vcl in eastLightVehicles) then { _speed = "noslow"; }; [leader _grp, _mkr, _speed, "nowait", _track, "delete:", 200] execVM "common\server\AI\UPS.sqf"; }; spawnAIVehicles = { private "_num"; for "_i" from 1 to eastVehicleNum do { _i call spawnAIVehicle; if (DEBUG) then { server globalChat format ["SPAWNING AI VEHICLE %1", _i]; }; }; }; if (INS_Roofguns == 1) then { spawnAIGuns = { private ["_id","_gCount","_house","_houses"]; _houses = [CENTERPOS,AORADIUS, 4, true] call findHouses; _gCount = 0; while{ _gCount < maxStaticGuns && count _houses > 0} do{ _house = _houses select random(count _houses - 1); _id = GUNROOFPOSITIONS find (typeOf _house); if (_id != -1 && _house distance startLocation > 500) then { if (count nearestObjects[getPosATL _house, eastStationaryGuns, 800] == 0) then { [_id, _house, _gCount] call createRoofGun; _gCount = _gCount + 1; }; }; _houses = _houses - [_house]; }; _gCount }; createRoofGun = { private ["_class","_housePositions","_id","_housePosition","_classId","_gun","_house","_dir","_grp","_gCount","_ai"]; _id = _this select 0; _house = _this select 1; _gCount = _this select 2; _housePositions = GUNROOFPOSITIONS select (_id+1); _housePosition = (_housePositions select random (count _housePositions - 1)) select 0; _classId = (_housePositions select random (count _housePositions - 1)) select 1; if (_classId <= 0.2) then { _class = stationaryGunsLow select random(count stationaryGunsLow - 1); }; if (_classId > 0.2 && _classId < 0.5) then { _class = stationaryGunsMed select random(count stationaryGunsMed - 1); }; if (_classId >= 0.5) then { _class = stationaryGunsHigh select random(count stationaryGunsHigh - 1); }; _gun = createVehicle [_class, spawnPos, [], 0, "None"]; for "_j" from 0 to 10 do { _gun addMagazine (magazines _gun select 0); }; _gun setPosATL (_house buildingPos _housePosition); _dir = ((boundingCenter _house select 0) - (getPosATL _gun select 0)) atan2 ((boundingCenter _house select 1) - (getPosATL _gun select 1)); _dir = (360 - _dir); //_dir = ((getPosATL startLocation select 0) - (getPosATL _gun select 0)) atan2 ((getPosATL startLocation select 1) - (getPosATL _gun select 1)); _gun setDir _dir; _grp = ["static","Grp",str _gCount,"east"] call getGroup; _ai = _grp createUnit [staticClass, spawnPos, [], 0, "NONE"]; _ai assignAsGunner _gun; _ai moveInGunner _gun; _grp setFormDir _dir; if DEBUG then { [_house, _ai] call createDebugMarker; }; }; };KRON_UPS_Debug = DEBUG; // find a random position within a radius KRON_randomPos = { private["_cx","_cy","_rx","_ry","_cd","_sd","_ad","_tx","_ty","_xout","_yout"]; _cx=_this select 0; _cy=_this select 1; _rx=_this select 2; _ry=_this select 3; _cd=_this select 4; _sd=_this select 5; _ad=_this select 6; _tx=random (_rx*2)-_rx; _ty=random (_ry*2)-_ry; _xout=if (_ad!=0) then { _cx+ (_cd*_tx - _sd*_ty)} else { _cx+_tx}; _yout=if (_ad!=0) then { _cy+ (_sd*_tx + _cd*_ty)} else { _cy+_ty}; [_xout,_yout,0] }; // find any building (and its possible building positions) near a position KRON_PosInfo = { private["_pos","_lst","_bld","_bldpos"]; _pos=_this select 0; _lst= nearestObjects [_pos,["House","vbs2_house"],20]; if (count _lst==0) then { _bld=0; _bldpos=0} else { _bld=_lst select 0; _bldpos=[_bld] call KRON_BldPos}; [_bld,_bldpos]}; /// find the highest building position KRON_BldPos = { private ["_bld","_bi","_bldpos","_maxZ","_bp","_bz","_higher"]; _bld=_this select 0; _maxZ=0; _bi=0; _bldpos=0; while { _bi>=0} do { _bp = _bld BuildingPos _bi; if ((_bp select 0)==0) then { _bi=-99} else { _bz=_bp select 2; _higher = ((_bz>_maxZ) || ((abs(_bz-_maxZ)<.5) && (random 1>.5))); if ((_bz>4) && _higher) then { _maxZ=_bz; _bldpos=_bi}}; _bi=_bi+1}; _bldpos}; KRON_OnRoad = { private["_pos","_car","_tries","_lst"]; _pos=_this select 0; _car=_this select 1; _tries=_this select 2; _lst=_pos nearRoads 4; if ((count _lst!=0) && (_car || !(surfaceIsWater _pos))) then { _tries=99}; (_tries+1)}; KRON_getDirPos = { private["_a","_b","_from","_to","_return"]; _from = _this select 0; _to = _this select 1; _return = 0; _a = ((_to select 0) - (_from select 0)); _b = ((_to select 1) - (_from select 1)); if (_a != 0 || _b != 0) then { _return = _a atan2 _b}; if ( _return < 0 ) then { _return = _return + 360}; _return}; KRON_distancePosSqr = { (((_this select 0) select 0)-((_this select 1) select 0))^2 + (((_this select 0) select 1)-((_this select 1) select 1))^2}; KRON_relPos = { private["_p","_d","_a","_x","_y","_xout","_yout"]; _p=_this select 0; _x=_p select 0; _y=_p select 1; _d=_this select 1; _a=_this select 2; _xout=_x + sin(_a)*_d; _yout=_y + cos(_a)*_d; [_xout,_yout,0]}; KRON_rotpoint = { private["_cp","_a","_tx","_ty","_cd","_sd","_cx","_cy","_xout","_yout"]; _cp=_this select 0; _cx=_cp select 0; _cy=_cp select 1; _a=_this select 1; _cd=cos(_a*-1); _sd=sin(_a*-1); _tx=_this select 2; _ty=_this select 3; _xout=if (_a!=0) then { _cx+ (_cd*_tx - _sd*_ty)} else { _cx+_tx}; _yout=if (_a!=0) then { _cy+ (_sd*_tx + _cd*_ty)} else { _cy+_ty}; [_xout,_yout,0]}; KRON_stayInside = { private["_np","_nx","_ny","_cp","_cx","_cy","_rx","_ry","_d","_tp","_tx","_ty","_fx","_fy"]; _np=_this select 0; _nx=_np select 0; _ny=_np select 1; _cp=_this select 1; _cx=_cp select 0; _cy=_cp select 1; _rx=_this select 2; _ry=_this select 3; _d=_this select 4; _tp = [_cp,_d,(_nx-_cx),(_ny-_cy)] call KRON_rotpoint; _tx = _tp select 0; _fx=_tx; _ty = _tp select 1; _fy=_ty; if (_tx<(_cx-_rx)) then { _fx=_cx-_rx}; if (_tx>(_cx+_rx)) then { _fx=_cx+_rx}; if (_ty<(_cy-_ry)) then { _fy=_cy-_ry}; if (_ty>(_cy+_ry)) then { _fy=_cy+_ry}; if ((_fx!=_tx) || (_fy!=_ty)) then { _np = [_cp,_d*-1,(_fx-_cx),(_fy-_cy)] call KRON_rotpoint}; _np; }; KRON_getArg = { private["_cmd","_arg","_list","_a","_v"]; _cmd=_this select 0; _arg=_this select 1; _list=_this select 2; _a=-1; { _a=_a+1; _v=format["%1",_list select _a]; if (_v==_cmd) then { _arg=(_list select _a+1)}; } foreach _list; _arg }; KRON_deleteDead = { private["_u","_s"]; _u=_this select 0; _s= _this select 1; _u removeAllEventHandlers "killed"; sleep _s; hideBody _u; sleep 5; deletevehicle _u; }; KRON_AllWest=[]; KRON_AllEast=[]; KRON_AllRes=[]; KRON_KnownEnemy=[objNull,objNull]; { _s = side _x; switch (_s) do { case west: { KRON_AllWest=KRON_AllWest+[_x]; }; case east: { KRON_AllEast=KRON_AllEast+[_x]; }; case resistance: { KRON_AllRes=KRON_AllRes+[_x]; }; }; }forEach allUnits; if (isNil("KRON_UPS_Debug")) then { KRON_UPS_Debug=false}; KRON_HQ="Logic" createUnit [[0,0], group Server]; KRON_UPS_Instances=0; KRON_UPS_Total=0; KRON_UPS_Exited=0; // ========================================================================================================= // Urban Patrol Script // Version: 2.1.0 // Author: Kronzky (www.kronzky.info / kronzky@gmail.com) // Modified by pogoman for insurgency // --------------------------------------------------------------------------------------------------------- // Required parameters: // unit = Unit to patrol area (1st argument) // markername = Name of marker that covers the active area. (2nd argument) // (e.g. nul=[this,"town"] execVM "ups.sqf") // // Optional parameters: // nomove = Unit will stay at start position until enemy is spotted. // nofollow = Unit will only follow an enemy within the marker area. // delete:n = Delete dead units after 'n' seconds. // nowait = Do not wait at patrol end points. // noslow = Keep default behaviour of unit (don't change to "safe" and "limited"). // noai = Don't use enhanced AI for evasive and flanking maneuvers. // trigger = Display a message when no more units are left in sector. // empty:n = Consider area empty, even if 'n' units are left. // track = Display a position and destination marker for each unit. // // ========================================================================================================= // how far opfors should move away if they're under attack // set this to 200-300, when using the script in open areas (rural surroundings) #define SAFEDIST 75 // how close unit has to be to target to generate a new one #define CLOSEENOUGH 10 // how close units have to be to each other to share information #define SHAREDIST 100 // how long AI units should be in alert mode after initially spotting an enemy #define ALERTTIME 180 #define westPlayerStrings ["Hitman111","Hitman112","Hitman113","Hitman114","Hitman115","Hitman116","Hitman117","Hitman118","Hitman119","Hitman110",\ "Hitman121","Hitman122","Hitman123","Hitman124","Hitman125","Hitman126","Hitman127",\ "Hitman131","Hitman132",\ "Hitman141",\ "Hitman151",\ "Hitman161","Hitman162"] // bugfix value #define CENTERPOS getArray (configFile >> "CfgWorlds" >> worldName >> "centerPosition") nearestPlayers = { private ["_result","_pos","_range","_type","_alive"]; _pos = _this select 0; _range = _this select 1; _alive = _this select 2; _type = _this select 3; if (_type == "count") then { _result = 0; } else { _result = []; }; { if (!isNil _x) then { _plr = call compile _x; if (!isNull _plr) then { if (_plr distance _pos <= _range && (alive _plr || !_alive)) then { if (_type == "count") then { _result = _result + 1; } else { _result = _result + [_plr]; }; }; }; }; } forEach westPlayerStrings; _result }; #define nearestPlayers(W,X,Y,Z) ([W,X,Y,Z] call nearestPlayers) // --------------------------------------------------------------------------------------------------------- //echo format["[K] %1",_this]; // convert argument list to uppercase _UCthis = []; for [{ _i=0},{ _i0) then { { if (alive _x) then { _npc = _x; _exit = false; }} forEach _obj; }; }; // give this group a unique index _grpidx = format["%1",KRON_UPS_Instances]; _grpname = format["%1_%2",(side _npc),_grpidx]; // remember the original group members, so we can later find a new leader, in case he dies _members = units _npc; KRON_UPS_Total = KRON_UPS_Total + (count _members); // what type of "vehicle" is unit ? _isman = _npc isKindOf "Man"; _iscar = _npc isKindOf "vbs2_LandVehicles"; _isboat = _npc isKindOf "Ship"; _isplane = _npc isKindOf "Air"; // check to see whether group is an enemy of the player (for attack and avoidance maneuvers) // since countenemy doesn't count vehicles, and also only counts enemies if they're known, // we just have to brute-force it for now, and declare *everyone* an enemy who isn't a civilian _issoldier = side _npc != civilian; _friends=[]; _enemies=[]; _sharedenemy=0; //TODO: FIND A WAY TO DETERMINE ASSOCIATION OF RESISTANCE UNITS if (_issoldier) then { switch (side _npc) do { case west: { _friends=_friends+KRON_AllWest; _enemies=_enemies+KRON_AllEast+KRON_AllRes; _sharedenemy=0; }; case east: { _friends=_friends+KRON_AllEast; _enemies=_enemies+KRON_AllWest+KRON_AllRes; _sharedenemy=1; }; case resistance: { _enemies=_enemies+KRON_AllEast+KRON_AllWest; _sharedenemy=2; }; }; { _friends=_friends-[_x]; _x disableAI "autotarget"; } forEach _members; }; // global unit variable to externally influence script _named = false; _npcname = str(side _npc); if ("NAMED" in _UCthis) then { _named = true; _npcname = format["%1",_npc]; _grpidx = _npcname; }; // create global variable for this group call compile format ["KRON_UPS_%1=1",_npcname]; // store some trig calculations _cosdir=cos(_areadir); _sindir=sin(_areadir); // minimum distance of new target position if (_rangeX==0) exitWith { hint format["UPS: Cannot patrol Sector: %1\nArea Marker doesn't exist",_areaname]; }; _mindist=(_rangeX^2+_rangeY^2)/4; // remember the original mode & speed _orgMode = behaviour _npc; _orgSpeed = speedmode _npc; _speedmode = _orgSpeed; // set first target to current position (so we'll generate a new one right away) _currPos = getPosATL _npc; _orgPos = _currPos; _orgWatch=[_currPos,50,getDir _npc] call KRON_relPos; _orgDir = getDir _npc; _avoidPos = [0,0]; _flankPos = [0,0]; _attackPos = [0,0]; _dist = 0; _lastdist = 0; _lastmove1 = 0; _lastmove2 = 0; _maxmove=0; _moved=0; _damm=0; _dammchg=0; _lastdamm = 0; curTimeontarget = 0; _fightmode = "walk"; _fm=0; _gothit = false; _hitPos=[0,0,0]; _react = 99; _lastdamage = 0; _lastknown = 0; _opfknowval = 0; _sin90=1; _cos90=0; _sin270=-1; _cos270=0; // set target tolerance high for choppers & planes _closeenough=CLOSEENOUGH*CLOSEENOUGH; if (_isplane) then { _closeenough=5000}; // ***************************************** optional arguments ***************************************** // wait at patrol end points _pause = if ("NOWAIT" in _UCthis) then { "NOWAIT"} else { "WAIT"}; // don't move until an enemy is spotted _nomove = if ("NOMOVE" in _UCthis) then { "NOMOVE"} else { "MOVE"}; // don't follow outside of marker area _nofollow = if ("NOFOLLOW" in _UCthis) then { "NOFOLLOW"} else { "FOLLOW"}; // share enemy info _shareinfo = if ("NOSHARE" in _UCthis) then { "NOSHARE"} else { "SHARE"}; // "area cleared" trigger activator _usetrigger = if ("TRIGGER" in _UCthis) then { "TRIGGER"} else { if ("NOTRIGGER" in _UCthis) then { "NOTRIGGER"} else { "SILENTTRIGGER"}}; // suppress fight behaviour if ("NOAI" in _UCthis) then { _issoldier=false}; // adjust cycle delay _cycle = ["CYCLE:",5,_UCthis] call KRON_getArg; // drop units at random positions _initpos = "ORIGINAL"; if ("RANDOM" in _UCthis) then { _initpos = "RANDOM"}; if ("RANDOMUP" in _UCthis) then { _initpos = "RANDOMUP"}; if ("RANDOMDN" in _UCthis) then { _initpos = "RANDOMDN"}; // don't position groups or vehicles on rooftops if ((_initpos!="ORIGINAL") && ((!_isman) || (count _members)>1)) then { _initpos="RANDOMDN"}; // set behaviour modes (or not) _noslow = if ("NOSLOW" in _UCthis) then { "NOSLOW"} else { "SLOW"}; if (_noslow!="NOSLOW") then { _npc setbehaviour "safe"; _npc setSpeedMode "limited"; _speedmode = "limited"; }; // track unit _track = if (("TRACK" in _UCthis) || KRON_UPS_Debug) then { "TRACK"} else { "NOTRACK"}; _trackername = ""; _destname = ""; if (_track=="TRACK") then { _track = "TRACK"; _trackername=format["trk_%1",_grpidx]; _markerobj = createMarker[_trackername,[0,0]]; _markerobj setMarkerShape "ICON"; _markertype = if (isClass(configFile >> "cfgMarkers" >> "WTF_Dot")) then { "WTF_DOT"} else { "DOT"}; _trackername setMarkerType _markertype; _markercolor = switch (side _npc) do { case west: { "ColorGreen"}; case east: { "ColorRed"}; case resistance: { "ColorBlue"}; default { "ColorBlack"}; }; _trackername setMarkerColor _markercolor; _trackername setMarkerText format["%1",_grpidx]; _trackername setmarkerpos _currPos; _trackername setMarkerSize [.5,.5]; _destname=format["dest_%1",_grpidx]; _markerobj = createMarker[_destname,[0,0]]; _markerobj setMarkerShape "ICON"; _markertype = if (isClass(configFile >> "cfgMarkers" >> "WTF_Flag")) then { "WTF_FLAG"} else { "FLAG"}; _destname setMarkerType _markertype; _destname setMarkerColor _markercolor; _destname setMarkerText format["%1",_grpidx]; _destname setMarkerSize [.5,.5]; }; // delete dead units _deletedead = ["DELETE:",0,_UCthis] call KRON_getArg; if (_deletedead>0) then { { _x addEventHandler['killed',format["[_this select 0,%1] spawn KRON_deleteDead",_deletedead]]}forEach _members; }; // init done _makenewtarget=true; _newpos=false; _targetPos = _currPos; _swimming = false; _waiting = if (_nomove=="NOMOVE") then { 9999} else { 0}; // exit if something went wrong during initialization (or if unit is on roof) if (_exit) exitWith { if ((KRON_UPS_Debug) && !_onroof) then { hint "Initialization aborted"}; }; _vcl = vehicle _npc; _grp = group _npc; // *********************************************************************************************************** // ************************************************ MAIN LOOP ************************************************ _loop=true; _currcycle=_cycle; while { _loop} do { sleep .01; // keep track of how long we've been moving towards a destination curTimeontarget=curTimeontarget+_currcycle; _react=_react+_currcycle; // did anybody in the group got hit? _newdamage=0; { if ((damage _x)>0.2) then { _newdamage=_newdamage+(damage _x); // damage has increased since last round if (_newdamage>_lastdamage) then { _lastdamage=_newdamage; _gothit=true; }; _hitPos= getPosATL _x; if (!alive _x) then { _members=_members-[_x]; _friends=_friends-[_x]; }; }; if (primaryWeapon _x == "") then { _members=_members-[_x]; _friends=_friends-[_x]; }; } forEach _members; sleep .01; // nobody left alive, exit routine if (count _members==0) then { _exit=true; if (KRON_UPS_Debug) then { server globalChat format["UPS group %1 all dead or surrendered", _grpidx]; }; sleep 5; deleteGroup (group _npc); sleep 300+(random aiVehicleRespawnTime); (call compile _grpidx) call spawnAIVehicle; } else { // did the leader die? if (!alive _npc || primaryWeapon _npc == "") then { _npc = _members select 0; group _npc selectLeader _npc; if (isPlayer _npc) then { _exit=true}; }; }; // current position _currPos = getPosATL _npc; _currX = _currPos select 0; _currY = _currPos select 1; if (_track=="TRACK") then { _trackername setmarkerpos _currPos; }; // if the AI is a civilian we don't have to bother checking for enemy encounters if ((_issoldier) && ((count _enemies)>0) && !(_exit)) then { // if the leader comes across another unit that's either injured or dead, go into combat mode as well. // If the other person is still alive, share enemy information. if ((_shareinfo=="SHARE") && (behaviour _npc=="SAFE")) then { _others=_friends-_members; { if ((!(isNull _x) && (_npc distance _x.5) || (behaviour _x in ["AWARE","COMBAT"]))) exitWith { _npc setBehaviour "aware"; _gothit=true; if ((_hitPos select 0)==0) then { _hitPos = getPosATL _x}; if (_npc knowsabout _x>3) then { if (alive _x) then { _npc reveal (KRON_KnownEnemy select _sharedenemy)}; }; }; }forEach _others; }; sleep .01; // did the group spot an enemy? _lastknown=_opfknowval; _opfknowval=0; _maxknowledge=0; { _knows=_npc knowsabout _x; if ((alive _x) && (_knows>0.2) && (_knows>_maxknowledge)) then { KRON_KnownEnemy set [_sharedenemy,_x]; _opfknowval=_opfknowval+_knows; _maxknowledge=_knows; }; if (!alive _x) then { _enemies=_enemies-[_x]}; if (_maxknowledge==4) exitWith {}; }forEach _enemies; sleep .01; _pursue=false; _accuracy=100; // opfor spotted an enemy or got shot, so start pursuit if (_opfknowval>_lastknown || _gothit) then { _npc setbehaviour "combat"; _pursue=true; // make the exactness of the target dependent on the knowledge about the shooter _accuracy=21-(_maxknowledge*5); }; if (isNull (KRON_KnownEnemy select _sharedenemy)) then { _pursue=false; }; // don't react to new fatalities if less than 60 seconds have passed since the last one if ((_react<60) && (_fightmode!="walk")) then { _pursue=false}; if (_pursue) then { // get position of spotted unit in player group, and watch that spot _offsx=_accuracy/2-random _accuracy; _offsY=_accuracy/2-random _accuracy; _targetPos = getPosATL (KRON_KnownEnemy select _sharedenemy); _targetPos = [(_targetPos select 0) + _offsX, (_targetPos select 1) + _offsY]; _targetX = _targetPos select 0; _targetY = _targetPos select 1; { _x dowatch _targetPos} foreach units _npc; sleep .01; // also go into "combat mode" _npc setSpeedMode "full"; _speedmode = "full"; _npc setbehaviour "combat"; _pause="NOWAIT"; _waiting=0; // angle from unit to target _dir1 = [_currPos,_targetPos] call KRON_getDirPos; // angle from target to unit (reverse direction) _dir2 = (_dir1+180) mod 360; // angle from fatality to target _dir3 = if (_hitPos select 0!=0) then { [_hitPos,_targetPos] call KRON_getDirPos} else { _dir1}; _dd=(_dir1-_dir3); // unit position offset straight towards target _relUX = sin(_dir1)*SAFEDIST; _relUY = cos(_dir1)*SAFEDIST; // target position offset straight towards unit _relTX = sin(_dir2)*SAFEDIST; _relTY = cos(_dir2)*SAFEDIST; // go either left or right (depending on location of fatality - or randomly if no fatality) _sinU=_sin90; _cosU=_cos90; _sinT=_sin270; _cosT=_cos270; if ((_dd<0) || (_dd==0 && (random 1)>.5)) then { _sinU=_sin270; _cosU=_cos270; _sinT=_sin90; _cosT=_cos90}; // avoidance position (right or left of unit) _avoidX = _currX + _cosU*_relUX - _sinU*_relUY; _avoidY = _currY + _sinU*_relUX + _cosU*_relUY; _avoidPos = [_avoidX,_avoidY]; // flanking position (right or left of target) _flankX = _targetX + _cosT*_relTX - _sinT*_relTY; _flankY = _targetY + _sinT*_relTX + _cosT*_relTY; _flankPos = [_flankX,_flankY]; // final target position _attackPos = _targetPos; // for now we're stepping a bit to the side _targetPos = _avoidPos; if (_nofollow=="NOFOLLOW") then { _avoidPos = [_avoidPos,_centerpos,_rangeX,_rangeY,_areadir] call KRON_stayInside; _flankPos = [_flankPos,_centerpos,_rangeX,_rangeY,_areadir] call KRON_stayInside; _attackPos = [_attackPos,_centerpos,_rangeX,_rangeY,_areadir] call KRON_stayInside; _targetPos = [_targetPos,_centerpos,_rangeX,_rangeY,_areadir] call KRON_stayInside; }; _react=0; _fightmode="fight"; curTimeontarget=0; _fm=1; if (KRON_UPS_Debug) then { "dead" setmarkerpos _hitPos; "avoid" setmarkerpos _avoidPos; "flank" setmarkerpos _flankPos; "target" setmarkerpos _attackPos; }; _newpos=true; // speed up the cycle duration after an incident if (_currcycle>=_cycle) then { _currcycle=1}; }; }; sleep .01; if !(_newpos) then { // calculate new distance // if we're waiting at a waypoint, no calculating necessary if (_waiting<=0) then { // distance to target _dist = [_currPos,_targetPos] call KRON_distancePosSqr; if (_lastdist==0) then { _lastdist=_dist}; _moved = abs(_dist-_lastdist); // adjust the target tolerance for fast moving vehicles if (_moved>_maxmove) then { _maxmove=_moved; if ((_maxmove/40) > _closeenough) then { _closeenough=_maxmove/40}}; // how much did we move in the last three cycles? _totmove=_moved+_lastmove1+_lastmove2; _damm = damage _npc; // is our damage changing (increasing)? _dammchg = abs(_damm - _lastdamm); // we're either close enough, seem to be stuck, or are getting damaged, so find a new target if ((!_swimming) && ((_dist<=_closeenough) || (_totmove<.2) || (_dammchg>0.01) || (curTimeontarget>ALERTTIME))) then { _makenewtarget=true; }; // in 'attack (approach) mode', so follow the flanking path (don't make it too predictable though) if ((_fightmode!="walk") && (_dist<=_closeenough)) then { if ((random 1)<.95) then { if (_flankPos select 0!=0) then { _targetPos=_flankPos; _flankPos=[0,0]; _makenewtarget=false; _newpos=true; _fm=1; } else { if (_attackPos select 0!=0) then { _targetPos=_attackPos; _attackPos=[0,0]; _makenewtarget=false; _newpos=true; _fm=2; }; }; }; }; sleep .01; // make new target if (_makenewtarget) then { if ((_nomove=="NOMOVE") && (curTimeontarget>ALERTTIME)) then { if (([_currPos,_orgPos] call KRON_distancePosSqr)<_closeenough) then { _newpos = false; } else { _targetPos=_orgPos; }; } else { // re-read marker position/size _npc call _getAreaInfo; // find a new target that's not too close to the current position _targetPos=_currPos; _tries=0; while { (([_currPos,_targetPos] call KRON_distancePosSqr) < _mindist) && (_tries<20)} do { _tries=_tries+1; // generate new target position (on the road) _targetPos=[_centerX,_centerY,_rangeX,_rangeY,_cosdir,_sindir,_areadir] call KRON_randomPos; _posX = _targetPos select 0; _posY = _targetPos select 1; if (isNil "_posX" || isNil "_posY") then { _targetPos = CENTERPOS; }; _roadlist = _targetPos nearRoads 2000; if (count _roadlist>0) exitWith { _targetPos = getPosATL (_roadlist select 0); }; //_road=[_targetPos,(_isplane||_isboat),_road] call KRON_OnRoad; sleep .01; }; }; _avoidPos = [0,0]; _flankPos = [0,0]; _attackPos = [0,0]; _gothit=false; _hitPos=[0,0,0]; _fm=0; _npc setSpeedMode _orgSpeed; _newpos=true; // if we're waiting at patrol end points then don't create a new target right away. Keep cycling though to check for enemy encounters if ((_pause!="NOWAIT") && (_waiting<0)) then { _waiting = (15 + random 20)}; }; }; }; sleep .01; // if in water, get right back out of it again if (surfaceIsWater _currPos) then { if (_isman && !_swimming) then { _drydist=999; // look around, to find a dry spot for [{ _a=0}, { _a<=270}, { _a=_a+90}] do { _dp=[_currPos,30,_a] call KRON_relPos; if !(surfaceIsWater _dp) then { _targetPos=_dp}; }; _newpos=true; _swimming=true; }; } else { _swimming=false; }; _waiting = _waiting - _currcycle; if ((_waiting<=0) && _newpos) then { // tell unit about new target position if (_fightmode!="walk") then { // reset patrol speed after following enemy for a while if (curTimeontarget>ALERTTIME) then { _fightmode="walk"; _speedmode = _orgSpeed; { _vcl = vehicle _npc; if (_vcl != _npc && !(_x in _vcl)) then { _x moveInCargo _vcl; _x assignAsCargo _vcl; }; _x setSpeedMode _speedmode; _x setBehaviour _orgMode; }forEach _members; }; // use individual doMoves if pursuing enemy, // as otherwise the group breaks up too much { _x doMove _targetPos}forEach _members; } else { (group _npc) move _targetPos; (group _npc) setSpeedMode _speedmode; }; if (_track=="TRACK") then { switch (_fm) do { case 1: { _destname setmarkerSize [.4,.4]}; case 2: { _destname setmarkerSize [.6,.6]}; default { _destname setmarkerSize [.5,.5]}; }; _destname setMarkerPos _targetPos; }; _dist=0; _moved=0; _lastmove1=10; _waiting=-1; _newpos=false; _swimming=false; curTimeontarget = 0; }; // move on _lastdist = _dist; _lastmove2 = _lastmove1; _lastmove1 = _moved; _lastdamm = _damm; // check external loop switch _cont = (call compile format ["KRON_UPS_%1",_npcname]); if (_cont==0) then { _exit=true}; _makenewtarget=false; if ((_exit) || (isNil("_npc"))) then { _loop=false; } else { // slowly increase the cycle duration after an incident if (_currcycle<_cycle) then { _currcycle=_currcycle+.5}; sleep _currcycle; }; }; if !(isNil("_npc")) then { { doStop _x; _x domove getPosATL _x; _x move getPosATL _x} forEach _members; }; KRON_UPS_Exited=KRON_UPS_Exited+1; if (_track=="TRACK") then { _trackername setMarkerType "Dot"; _destname setMarkerType "Empty"; }; _friends=nil; _enemies=nil; if (_vcl isKindOf "LandVehicle") then { sleep 300; _i = call compile _areamarker; call spawnVehicle; }; cacheKilled = { private ["_pos","_dur","_count"]; _pos = getPosATL(_this); curTime = time; _dur = 5 + random 5; "ARTY_R_227mm_HE" createVehicle _pos; while{ true }do{ "Warfare82mmMortar" createVehicle _pos; if (random 100 > 70) then { "Sh_125_HE" createVehicle _pos; }; if ((time - curTime) > _dur) exitWith { "ARTY_R_227mm_HE" createVehicle _pos; }; sleep random 1; }; { deleteMarker _x; } forEach cacheMarkers(_this); deleteVehicle _this; sleep 1; _count = count cacheList; [nil,nil,rHINT, parseText format["%1/%2 ammo cache's have been destroyed!", cacheCount - _count, cacheCount]] call RE; if (_count == 0) then { [nil,nil,rSPAWN,[],{ titleText["All ammo cache's have been destroyed!", "PLAIN"]; }] call RE; sleep 20; endMission "END1"; }; }; setupCaches = { private ["_cachePos","_cacheHouse","_cache","_id","_positions","_type","_nWestUnits","_cacheHouses","_n","_m"]; _cacheHouses = [CENTERPOS, AORADIUS, 6, true] call findHouses; for "_i" from 1 to cacheCount do { if DEBUG then { server globalChat format["cache%1 spawning...", _i]; }; _cache = createVehicle [cacheType, spawnPos, [], 0, "None"]; call compile format[' _cache setVehicleInit " this setVehicleVarName ""cache%1""; cache%1 = this; clearWeaponCargo this; clearMagazineCargo this; _n = round (random 2); this addWeaponCargo [""SVD"", _n]; _m = round (((random 3)+2) * _n); this addMagazineCargo [""10Rnd_762x54_SVD"", _m]; "; ', _i]; _cache addEventHandler["Killed", { (_this select 0) spawn cacheKilled; }]; while { count _cacheHouses > 1 } do { _cacheHouse = _cacheHouses select floor(random(count _cacheHouses - 1)); _type = typeOf _cacheHouse; _nWestUnits = nearestObjects[getPosATL _cacheHouse, westSoldierClasses+[cacheType], cacheRadius]; if (count _nWestUnits == 0 && _type in CACHEHOUSEPOSITIONS) exitWith { _id = CACHEHOUSEPOSITIONS find _type; _positions = CACHEHOUSEPOSITIONS select (_id+1); _cachePos = _cacheHouse buildingPos (_positions select floor(random(count _positions - 1))); }; _cacheHouses = _cacheHouses - [_cacheHouse]; }; _cache setPosATL _cachePos; _cacheHouse addEventHandler ["handleDamage", { _damage = _this select 2; _cache = getPosATL (_this select 0) nearestObject cacheType; if (_damage > 0.9) then { _cache setDamage 1; }; _damage }]; if DEBUG then { [_cache, format["cache%1", _i]] call createDebugMarker; }; }; processInitCommands; }; // "&& !(_x getVariable["noclean", false])", // "this setVariable["noclean", true, false];" // quickCleanup = { private ["_wep","_cargoTypes"]; if (time - _WCTime < 10) exitWith {}; _WCTime = time; { if (nearestPlayers(getPosATL _x,WEP_DESPAWN_RANGE,true,"count") == 0 && nearestEastMen(getPosATL _x,WEP_DESPAWN_RANGE,true,"count") == 0 && !(_x getVariable["noclean", false])) then { if (typeOf _x == "Suitcase") exitWith { deleteVehicle _x; }; if (typeOf _x == "WeaponHolder") exitWith { deleteVehicle _x; }; if (typeOf _x == "Land_fortified_nest_small_EP1") exitWith { _x setPosATL spawnPos; }; if ((_x isKindOf "StaticWeapon" || typeOf _x == "CraterLong") && nearestPlayers(getPosATL _x,SPAWNRANGE,true,"count") == 0) exitWith { deleteVehicle _x; }; if (!alive _x && (_x isKindOf "LandVehicle" || _x isKindOf "Air") && nearestPlayers(getPosATL _x,SPAWNRANGE,false,"count") == 0) exitWith { deleteVehicle _x; }; if (locked _x) exitWith {}; }; sleep 0.005; } forEach nearestObjects[CENTERPOS,["CraterLong","Suitcase","WeaponHolder","ReammoBox","AllVehicles","Land_fortified_nest_small_EP1"],AORADIUS]; }; longCleanup = { private ["_wUnits"]; if (time - _BCTime < 600) exitWith {}; _BCTime = time; { if ((damage _x > 0.1 && damage _x < 1) && !(_x getVariable["noclean", false])) then { _wUnits = nearestPlayers(getPosATL _x,SPAWNRANGE,true,"array"); if (count _wUnits > 0 && arrCanSee(_wUnits,getPosATL _x,45,200)) exitWith {}; _x setDamage 1; sleep 0.001; }; } forEach nearestObjects[CENTERPOS,["House"],AORADIUS]; { if !alive _x then { if (nearestPlayers(getPosATL _x,SPAWNRANGE,true,"count") == 0) then { deleteVehicle _x; }; sleep 0.001; }; } forEach nearestObjects[CENTERPOS,["Man"],AORADIUS]; { if (count units _x == 0) then { deleteGroup _x; }; sleep 0.001; } forEach allGroups; };GUNROOFPOSITIONS retrieved using: for "_h" from 0 to 1 step 0.1 do { if!([_checkPos, _dir, _h] call viewBlocked) exitWith { _class = _h; diag_log format["gunHouse %1, pos %2 verified", _i, _j]; }; }; arr = nearestObjects[player,["Land_dum_istan2b"],2000] pos = (arr select 0) buildingPos 0; player setPosATL pos; dir = (([0,0,0] select 0) - (pos select 0)) atan2 (([0,0,0] select 1) - (pos select 1)); hint str dir; [pos, dir, 1] call viewBlocked; findHighPositions = { private "_i"; _house = _this select 0; _arr = _this select 1; _i = _this select 2; _hPos = format["%1", _house buildingPos _i]; if (_hPos == "[0,0,0]") exitWith { _arr}; _hPos = call compile _hPos; if (_hPos select 2 > 2) then { _arr set [count _arr, _i]; }; [_house, _arr, _i+1] call findHighPositions; }; #define highPosList(X) ([X,[],0] call findHighPositions) posIsIndoors = { private "_i"; _indoors = true; _dir = getDir _house; for "_i" from 0 to 360 step 90 do { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL [_checkPos select 0,_checkPos select 1,(_checkPos select 2) + 0.1]; _bullet setVelocity [(sin (_i+_dir))*25,(cos (_i+_dir))*25,30]; _d = 0; waitUntil { if (getPosATL _bullet select 0 != 0) then { _d = getPosATL _bullet select 2; }; _d >= 10 || getPosATL _bullet select 0 == 0}; if (_d >= 10) then { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL [_checkPos select 0,_checkPos select 1,(_checkPos select 2) + 0.3]; _bullet setVelocity [(sin (_i+_dir))*25,(cos (_i+_dir))*25,0]; _d = 0; waitUntil { if (getPosATL _bullet select 0 != 0) then { _d = _bullet distance _checkPos; }; _d >= 4 || getPosATL _bullet select 0 == 0}; if (_d >= 4) then { _indoors = false; }; }; if (!_indoors) exitWith {}; }; _indoors }; posIsOutdoors = { private ["_i","_checkPos"]; _checkPos = _this; _outdoors = true; for "_i" from 0 to 360 step 90 do { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL _checkPos; _bullet setVelocity [(sin _i)*10,(cos _i)*10,30]; _d = 0; waitUntil { if (getPosATL _bullet select 0 != 0) then { _d = getPosATL _bullet select 2; }; _d >= 10 || getPosATL _bullet select 0 == 0}; if (_d < 10) exitWith { _outdoors = false; }; }; _outdoors }; viewBlocked = { _pos = _this select 0; _lvl = _this select 1; blocked = 0; for "_i" from 0 to 360 step 30 do { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL [(_pos select 0), (_pos select 1), (_pos select 2)+_lvl]; // [(_pos select 0)-(sin _i)*2, (_pos select 1)-(sin _i)*2, (_pos select 2)+_lvl]; _bullet setVelocity [(sin _i)*30, (cos _i)*30, 0]; _d = 0; player sideChat format["shooting bullet %1",_i]; waitUntil { ((velocity(_bullet) distance [0,0,0]) < 0.1) }; _d = _bullet distance _pos; player sideChat format["distance: %1",_d]; if (_d < 10) then { blocked = blocked + 1; }; }; player sideChat format["blocked %1",blocked]; if (blocked <= 6) then { false } else { true }; }; gunPosits = { gunPositions = []; _gunHouses = [CENTERPOS, AORADIUS, 4, true] call findHouses; for "_i" from 0 to (count _gunHouses - 1) do { _house = _gunHouses select _i; _type = typeOf _house; _highPosList = highPosList(_house); _arr = []; if!(_type in gunPositions) then { for "_j" from 0 to (count _highPosList - 1) do { diag_log format["examining view of gunHouse %1 with pos %2", _i, _j]; _checkPos = _house buildingPos (_highPosList select _j); if !([_checkPos, 1] call viewBlocked) then { diag_log format["view of gunHouse %1 is free, verifying pos %2", _i, _j]; _class = -1; for "_h" from 0 to 1 step 0.1 do { if!([_checkPos, _h] call viewBlocked) exitWith { _class = _h; diag_log format["gunHouse %1, pos %2 verified", _i, _j]; }; }; _arr = _arr + [[(_highPosList select _j),_class]]; }; }; if (count _arr > 0) then { gunPositions = gunPositions + [_type] + [_arr]; }; }; diag_log format["gunHouse %1 of %2 done", _i+1, count _gunHouses]; copyToClipboard str gunPositions; }; /* for "_i" from 0 to (count GUNROOFPOSITIONS - 1) step 2 do { _type = GUNROOFPOSITIONS select _i; _arr = GUNROOFPOSITIONS select (_i+1); _hse = nearestObjects[getPosATL player, [_type], 3000] select 0; for "_j" from 0 to (count _arr - 1) do { _arr2 = _arr select _j; _id = _arr2 select 0; _h = _arr2 select 1; player setPosATL (_hse buildingPos _id); player groupChat str _h; waitUntil { !wait}; wait=true; }; }; */ }; cachePosits = { cachePositions = []; _cacheHouses = [CENTERPOS, AORADIUS, 4, true] call findHouses; for "_i" from 0 to (count _cacheHouses - 1) do { _house = _cacheHouses select _i; _type = typeOf _house; _nPos = nPos(_house); _highPosList = highPosList(_house); _arr = []; if !(_type in cachePositions || ((boundingBox _house select 1) select 2) > 15) then { for "_j" from 0 to (count _highPosList - 1) do { _checkPos = _house buildingPos (_highPosList select _j); if (call posIsIndoors) then { _arr = _arr + [(_highPosList select _j)]; }; }; if (count _arr <= 1) then { for "_j" from 0 to (_nPos - 1) do { if!(_j in _highPosList) then { _checkPos = _house buildingPos _j; if!(_j in _arr) then { if (call posIsIndoors) then { _arr = _arr + [_j]; }; }; }; }; }; if (count _arr > 0) then { cachePositions = cachePositions + [_type] + [_arr]; }; }; server globalChat format["cacheHouse %1 of %2 done", _i+1, count _cacheHouses]; copyToClipboard str cachePositions; }; }; --------------------- gunPositions = []; _gunHouses = [getPosATL center, AORADIUS, 4, true] call findHouses; for "_i" from 0 to (count _gunHouses - 1) do { _house = _gunHouses select _i; _type = typeOf _house; _highPosList = highPosList(_house); _arr = []; if!(_type in gunPositions) then { for "_j" from 0 to (count _highPosList - 1) do { _checkPos = _house buildingPos (_highPosList select _j); _dir = ((getPosATL startLocation select 0) - (_checkPos select 0)) atan2 ((getPosATL startLocation select 1) - (_checkPos select 1)); if (call posIsOutdoors && !([_checkPos, _dir, 1] call viewBlocked)) then { _class = -1; for "_h" from 0 to 1 step 0.1 do { if!([_checkPos, _dir, _h] call viewBlocked) exitWith { _class = _h; }; }; _arr = _arr + [[(_highPosList select _j),_class]]; }; }; if (count _arr > 0) then { gunPositions = gunPositions + [_type] + [_arr]; }; }; server globalChat format["gunHouse %1 of %2 done", _i+1, count _gunHouses]; copyToClipboard str gunPositions; }; for "_i" from 0 to (count GUNROOFPOSITIONS - 1) step 2 do { _type = GUNROOFPOSITIONS select _i; _arr = GUNROOFPOSITIONS select (_i+1); _hse = nearestObjects[getPosATL player, [_type], 3000] select 0; for "_j" from 0 to (count _arr - 1) do { _arr2 = _arr select _j; _id = _arr2 select 0; _h = _arr2 select 1; player setPosATL (_hse buildingPos _id); player groupChat str _h; waitUntil { !wait}; wait=true; }; }; cacheInsidePositions retrieved using: cachePositions = []; _cacheHouses = [getPosATL center, AORADIUS, 4, true] call findHouses; for "_i" from 0 to (count _cacheHouses - 1) do { _house = _cacheHouses select _i; _type = typeOf _house; _nPos = nPos(_house); _highPosList = highPosList(_house); _arr = []; if!(_type in cachePositions || ((boundingBox _house select 1) select 2) > 15) then { for "_j" from 0 to (count _highPosList - 1) do { _checkPos = _house buildingPos (_highPosList select _j); if (call posIsIndoors) then { _arr = _arr + [(_highPosList select _j)]; }; }; if (count _arr <= 1) then { for "_j" from 0 to (_nPos - 1) do { if!(_j in _highPosList) then { _checkPos = _house buildingPos _j; if!(_j in _arr) then { if (call posIsIndoors) then { _arr = _arr + [_j]; }; }; }; }; }; if (count _arr > 0) then { cachePositions = cachePositions + [_type] + [_arr]; }; }; server globalChat format["cacheHouse %1 of %2 done", _i+1, count _cacheHouses]; copyToClipboard str cachePositions; }; some functions used: findHighPositions = { private "_i"; _house = _this select 0; _arr = _this select 1; _i = _this select 2; _hPos = format["%1", _house buildingPos _i]; if (_hPos == "[0,0,0]") exitWith { _arr}; _hPos = call compile _hPos; if (_hPos select 2 > 2) then { _arr set [count _arr, _i]; }; [_house, _arr, _i+1] call findHighPositions; }; #define highPosList(X) ([X,[],0] call findHighPositions) posIsIndoors = { private "_i"; _indoors = true; _dir = getDir _house; for "_i" from 0 to 360 step 90 do { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL [_checkPos select 0,_checkPos select 1,(_checkPos select 2) + 0.1]; _bullet setVelocity [(sin (_i+_dir))*25,(cos (_i+_dir))*25,30]; _d = 0; waitUntil { if (getPosATL _bullet select 0 != 0) then { _d = getPosATL _bullet select 2; }; _d >= 10 || getPosATL _bullet select 0 == 0}; if (_d >= 10) then { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL [_checkPos select 0,_checkPos select 1,(_checkPos select 2) + 0.3]; _bullet setVelocity [(sin (_i+_dir))*25,(cos (_i+_dir))*25,0]; _d = 0; waitUntil { if (getPosATL _bullet select 0 != 0) then { _d = _bullet distance _checkPos; }; _d >= 4 || getPosATL _bullet select 0 == 0}; if (_d >= 4) then { _indoors = false; }; }; if (!_indoors) exitWith {}; }; _indoors }; posIsOutdoors = { private "_i"; _outdoors = true; for "_i" from 0 to 360 step 90 do { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL _checkPos; _bullet setVelocity [(sin _i)*10,(cos _i)*10,30]; _d = 0; waitUntil { if (getPosATL _bullet select 0 != 0) then { _d = getPosATL _bullet select 2; }; _d >= 10 || getPosATL _bullet select 0 == 0}; if (_d < 10) exitWith { _outdoors = false; }; }; _outdoors }; viewBlocked = { _pos = _this select 0; _dir = _this select 1; _lvl = _this select 2; blocked = 0; for "_i" from (_dir - 22.5) to (_dir + 22.5) step 22.5 do { _bullet = createVehicle ["B_9x18_Ball", [0,0,100], [], 0, "NONE"]; _bullet setPosATL [(_pos select 0)-(sin _i)*2, (_pos select 1)-(sin _i)*2, (_pos select 2)+_lvl]; _bullet setVelocity [(sin _i)*30, (cos _i)*30, 0]; _d = 0; waitUntil { if (getPosATL _bullet select 0 > 0) then { _d = _bullet distance _pos; }; _d >= 10 || isNull _bullet }; if (_d < 10) then { blocked = blocked + 1; }; }; if (blocked <= 1) then { false} else { true}; }; //Vars westDeaths = 0; publicVariable "westDeaths"; #define vclCrewClass "TK_INS_Soldier_AT_EP1" #define staticClass "TK_INS_Soldier_3_EP1" #define eastVehiclesFreq ["BRDM2_TK_EP1","BRDM2_TK_EP1","M113_TK_EP1","M113_TK_EP1","Mi17_TK_EP1","Mi24_D_TK_EP1","UH1H_TK_EP1","BTR60_TK_EP1","BTR60_TK_EP1","LandRover_MG_TK_INS_EP1","LandRover_MG_TK_INS_EP1","LandRover_SPG9_TK_INS_EP1","LandRover_SPG9_TK_INS_EP1","T34_TK_EP1","T55_TK_EP1","ACE_BTR70_TK","ACE_BTR70_TK","T72_TK_EP1","UAZ_MG_TK_EP1","UAZ_MG_TK_EP1","UAZ_Unarmed_TK_EP1","UAZ_Unarmed_TK_EP1","UAZ_Unarmed_TK_EP1"] #define eastLightVehicles ["LandRover_MG_TK_INS_EP1","LandRover_SPG9_TK_INS_EP1","UAZ_MG_TK_EP1","UAZ_Unarmed_TK_EP1"] #define stationaryGunsHigh ["KORD_high_UN_EP1","DSHKM_TK_INS_EP1"] #define stationaryGunsMed ["ZU23_TK_INS_EP1","Igla_AA_pod_TK_EP1","SearchLight_TK_EP1"] #define stationaryGunsLow ["AGS_TK_INS_EP1","ZU23_TK_INS_EP1"] #define eastVclRspnTime 600 #define eastInfCount (count(CENTERPOS nearObjects [eastInfClasses, AORADIUS])) #define maxStaticGuns 18 //Markers #define intelMarkerType "hd_unknown" //Misc #define isEast(X) (typeOf X in eastInfClasses) #define isWest(X) (typeOf X in westSoldierClasses) // [man, Max Buildings to try, Maximum Objects to try, IED TYPE, Move Type, Max Random Time to deploy IED,bin,nogun,"Run"] execvm // //IED TYPE Can Be: GrndS , GrndL , Garbs , GarbL , Rnd // //Move Type Can Be: Sw , Mo // // //private ["_IEDType","_RandomIED","chosenbuilding"]; _man = _this select 0; _MBA = _this select 1; _MOA = _this select 2; _IEDType = _this select 3; _MoveType = _this select 4; _MRT = _this select 5; _Binoc = _this select 6; _Gun = _this select 7; _Relocate = _this select 8; waitUntil {reezo_IEDdetect_initComplete}; _RandomIED = floor (random 4); _IEDDetected = 0; _HI = 0; _OMTC = 15; _DT = 8; //+++++++++++++++++++++++---Detection time given at each stance at each location---+++++++++++++++++++++++++++++++++++++++++++++++++ _KV = 0; //+++++++++++++++++++++++---Knowledge Value Required for IED Target---+++++++++++++++++++++++++++++++++++++++++++++++++ _OSS = 0; //+++++++++++++++++++++++++++++---Object Search Started, used as a switch to look for random locations after object locations---+++++++++++++++++++++++++++++++++++ _NFBA = 30; //++++++++++++++++++++++++++++++++---Number of failed building attempts, where there are no buildings of type in range, used to stop looking for buildings---++++++++++++++++++++++++++++++++ _Stance = 0; Removeallitems _man; _man setcaptive true; _man setcombatmode "Blue"; Sleep (floor (random _MRT)); //+++++++++++++++++++++++++++++++---Generate Randon Time to Deploy IED---++++++++++++++++++++++++++++++++++++++++++++++++++++ //###########################################---Set Up man, Choose IED Type, Add to man, make him deploy it & Assign his position to _IEDPos---############################################################### private ["_IED"]; Switch ( _IEDType ) do { Case "GrndS": { _IED = "BAF_IED_v3"; }; Case "GrndL": { _IED = "BAF_IED_v4"; }; Case "GarbS": { _IED = "BAF_IED_v1"; }; Case "GarbL": { _IED = "BAF_IED_v2"; }; Case "Rnd": { If ( _RandomIED == 0) then { _IED = "BAF_IED_v1"; }; If ( _RandomIED == 1) then { _IED = "BAF_IED_v2"; }; If ( _RandomIED == 2) then { _IED = "BAF_IED_v3"; }; If ( _RandomIED == 3) then { _IED = "BAF_IED_v4"; }; }; }; _man addmagazine "8Rnd_9x18_Makarov"; _man addweapon "Makarov"; _man addmagazine "8Rnd_9x18_Makarov"; _man addmagazine "8Rnd_9x18_Makarov"; _man addmagazine "8Rnd_9x18_Makarov"; _man addmagazine "8Rnd_9x18_Makarov"; _man addweapon "binocular"; //_IEDMuzzle = format ["%1_muzzle",_IED]; //_man addMagazine format ["%1",_IED]; _man playmove "amovpercmstpsraswrfldnon_gear"; //_man Fire format ["%1",_IEDMuzzle]; _iedpos = (getpos _man); _IED = "Land_IED_v1_PMC" createVehicle _iedpos; nul0 = [_IED,0] execVM "common\server\IEDdetect\IEDdetect_add.sqf"; _man setunitpos "up"; sleep 2; //######################################################---Delete the mans waypoints---######################################################################################################################### [_man] join GrpNull; _FS = createVehicle ["TK_soldier_EP1", [000,999,0], [], 0, ""]; _FakeGrp = group _FS; [_man] joinsilent _FakeGrp; [_man] join GrpNull; deletevehicle _FS; //#############################################---Set the Targets location & hide it---############################################################################################################################ _IEDTarget = createVehicle ["TK_GUE_Bonesetter_EP1", [000,999,0], [], 0, ""]; Removeallweapons _IEDTarget; _IEDTarget setdammage 1; Sleep 4; _IEDTarget hideobject True; _IEDTarget setpos _IEDPos; _man setcombatmode "blue"; //#############################################---FIND A HIDING LOCATION---####################################################################################################################################### While { _IEDDetected == 0 && _OMTC >= 0 } do { _HI = (Floor(random 29)); //++++++++++++++++++++++++++++++++++++++++++---Pick random House---+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ _BT = "land_house_C_10_EP1"; If (_HI == 0) then { _BT = "land_house_C_10_EP1";}; If (_HI == 1) then { _BT = "land_house_C_3_EP1";}; If (_HI == 2) then { _BT = "land_house_C_4_EP1";}; If (_HI == 3) then { _BT = "land_house_C_11_EP1";}; If (_HI == 4) then { _BT = "land_house_C_2_EP1";}; If (_HI == 5) then { _BT = "land_house_C_12_EP1";}; If (_HI == 6) then { _BT = "land_house_C_9_EP1";}; If (_HI == 7) then { _BT = "land_house_C_1_EP1";}; If (_HI == 8) then { _BT = "land_house_C_1_v2_EP1";}; If (_HI == 9) then { _BT = "land_house_C_5_EP1";}; If (_HI == 10) then { _BT = "land_house_C_5_v1_EP1";}; If (_HI == 11) then { _BT = "land_house_C_5_v2_EP1";}; If (_HI == 12) then { _BT = "land_house_C_5_v3_EP1";}; If (_HI == 13) then { _BT = "land_house_L_1_EP1";}; If (_HI == 14) then { _BT = "land_house_L_3_EP1";}; If (_HI == 15) then { _BT = "land_house_L_4_EP1";}; If (_HI == 16) then { _BT = "land_house_L_6_EP1";}; If (_HI == 17) then { _BT = "land_house_L_7_EP1";}; If (_HI == 18) then { _BT = "land_house_L_8_EP1";}; If (_HI == 19) then { _BT = "land_house_L_9_EP1";}; If (_HI == 20) then { _BT = "land_house_K_1_EP1";}; If (_HI == 21) then { _BT = "land_house_K_3_EP1";}; If (_HI == 22) then { _BT = "land_house_K_5_EP1";}; If (_HI == 23) then { _BT = "land_house_K_6_EP1";}; If (_HI == 24) then { _BT = "land_house_K_7_EP1";}; If (_HI == 25) then { _BT = "land_house_K_8_EP1";}; If (_HI == 26) then { _BT = "land_A_Minaret_Porto_EP1";}; If (_HI == 27) then { _BT = "land_A_Mosque_Big_Minaret_1_EP1";}; If (_HI == 28) then { _BT = "land_A_Mosque_Big_Minaret_2_EP1";}; If (_HI == 29) then { _BT = "land_A_Minaret_EP1";}; //-------Find buildings put in _BuildingArray then only pick the ones between 30m & 120m & put those in _RangeBuildingArray in order of distance from _man-------------------------------------------------- _BuildingArray = nearestobjects [_man, [_BT],120]; If ( count _BuildingArray == 0 ) then { _NFBA = _NFBA - 1; }; _RangeBuildingArray = []; { If ( _IEDPos distance _x >= 25 && _IEDPos distance _x <= 120 ) then { _RangeBuildingArray = _RangeBuildingArray + [_x]; }; } Foreach _BuildingArray; //--------IF We have a Building Then Continue, if not then bypass this section Assuming we've tried all buildings we want to try)--------------------------------------------------------------------------- IF ( Count _RangebuildingArray >= 1 && _MBA != 0 ) then { //-------Randomly select 1 of the buildings, remove it from the array (_RangebuildingArray) & call it _ChosenBuilding---------------------------------------------------------------------------------------- _RBC = count _RangeBuildingArray; _ChosenBuilding = _RangeBuildingArray select (Floor(random _RBC)); _RangeBuildingArray = _RangeBuildingArray - [_ChosenBuilding]; //-------Get all Positions in Chosen building & assign them to _BPA------------------------------------------------------------------------------------------------------------------------------------------ _BPA = []; _bpan = 0; _bp = 0; _buildpos = _ChosenBuilding buildingpos _bp; while {format ["%1", _buildpos] != "[0,0,0]"} do { _BPA set [_bpan, _buildpos]; _bpan = _bpan +1; _bp = _bp +1; _buildpos = _ChosenBuilding buildingpos _bp; }; _bp = 0; _bpan =0; //-----------Find out what building we're dealing with & put required House positions in _FinalBuildingPositionsArray & Clear _BPA as were done with it in this run------------------------------------------- _FinalBuildingPositionsArray = []; If ( _ChosenBuilding iskindof "land_house_C_10_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 9,_BPA select 14,_BPA select 15,_BPA select 16,_BPA select 17,_BPA select 18,_BPA select 19,_BPA select 20 ]; }; If ( _ChosenBuilding iskindof "land_house_C_3_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 3 , _BPA select 4,_BPA select 8,_BPA select 11,_BPA select 15,_BPA select 16,_BPA select 19,_BPA select 20,_BPA select 22,_BPA select 24,_BPA select 26 ]; }; If ( _ChosenBuilding iskindof "land_house_C_4_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 6 , _BPA select 10,_BPA select 11,_BPA select 14,_BPA select 5 ]; }; If ( _ChosenBuilding iskindof "land_house_C_11_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 2 , _BPA select 4,_BPA select 5 ]; }; If ( _ChosenBuilding iskindof "land_house_C_2_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 2,_BPA select 9 ]; }; If ( _ChosenBuilding iskindof "land_house_C_12_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 3,_BPA select 5,_BPA select 7,_BPA select 8,_BPA select 10,_BPA select 13,_BPA select 14 ]; }; If ( _ChosenBuilding iskindof "land_house_C_9_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 2,_BPA select 3,_BPA select 6,_BPA select 7,_BPA select 8,_BPA select 9 ]; }; If ( _ChosenBuilding iskindof "land_house_C_1_EP1" or _ChosenBuilding iskindof "land_house_C_1_v2_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 2 ]; }; If ( _ChosenBuilding iskindof "land_house_C_5_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 1 , _BPA select 2 , _BPA select 3 , _BPA select 4 , _BPA select 6 , _BPA select 7 ]; }; If ( _ChosenBuilding iskindof "land_house_C_5_v1_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 1 , _BPA select 3 , _BPA select 5 ]; }; If ( _ChosenBuilding iskindof "land_house_C_5_v2_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 3 , _BPA select 6 , _BPA select 7 ]; }; If ( _ChosenBuilding iskindof "land_house_C_5_v3_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 1 , _BPA select 3 , _BPA select 5 ]; }; If ( _ChosenBuilding iskindof "land_house_L_1_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 ]; }; If ( _ChosenBuilding iskindof "land_house_L_3_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 3 , _BPA select 4 ]; }; If ( _ChosenBuilding iskindof "land_house_L_4_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 1 , _BPA select 2 , _BPA select 3 , _BPA select 4 , _BPA select 5 ]; }; If ( _ChosenBuilding iskindof "land_house_L_6_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 1 , _BPA select 2 ]; }; If ( _ChosenBuilding iskindof "land_house_L_7_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 6 ]; }; If ( _ChosenBuilding iskindof "land_house_L_8_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 5 , _BPA select 9,_BPA select 11,_BPA select 14,_BPA select 17 ]; }; If ( _ChosenBuilding iskindof "land_house_L_9_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 1 , _BPA select 2,_BPA select 3 ]; }; If ( _ChosenBuilding iskindof "land_house_K_1_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 1 ]; }; If ( _ChosenBuilding iskindof "land_house_K_3_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 4 , _BPA select 7 , _BPA select 8 ]; }; If ( _ChosenBuilding iskindof "land_house_K_5_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 3 ]; }; If ( _ChosenBuilding iskindof "land_house_K_6_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 1 , _BPA select 4 , _BPA select 8 , _BPA select 11 ]; }; If ( _ChosenBuilding iskindof "land_house_K_7_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 3 , _BPA select 4 , _BPA select 7 , _BPA select 8 , _BPA select 9 , _BPA select 10 , _BPA select 13 , _BPA select 14 ]; }; If ( _ChosenBuilding iskindof "land_house_K_8_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 0 , _BPA select 2 , _BPA select 3 , _BPA select 5 , _BPA select 6 , _BPA select 8 , _BPA select 9 , _BPA select 10 , _BPA select 12 , _BPA select 13 ]; }; If ( _ChosenBuilding iskindof "land_A_Minaret_Porto_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 2 , _BPA select 3 , _BPA select 4 , _BPA select 5 , _BPA select 6 , _BPA select 7 , _BPA select 8 , _BPA select 9 , _BPA select 10 , _BPA select 11 , _BPA select 12 , _BPA select 13 , _BPA select 14 ]; }; If ( _ChosenBuilding iskindof "land_A_Mosque_Big_Minaret_1_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 1 ]; }; If ( _ChosenBuilding iskindof "land_A_Mosque_Big_Minaret_2_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 2 , _BPA select 3 , _BPA select 4 ]; }; If ( _ChosenBuilding iskindof "land_A_Minaret_EP1" ) then { _FinalBuildingPositionsArray = [ _BPA select 5 ]; }; _BPA = []; //--------------Count number of positions in _FinalBuildingPositionsArray , Assign a random house position to _MoveTo & remove this position from the _FinalBuildingPositionsArray----------------------------- _BMNC = count _FinalBuildingPositionsArray; _MoveNo = 1; _BMN = 0; While { _MoveNo <= _BMNC && _IEDDetected == 0 } do { _MoveTo = _FinalBuildingPositionsArray select _BMN; If ( _MoveType == "Sw" ) then { _man setpos _MoveTo; }; If ( _MoveType == "Mo" ) then { _man domove _MoveTo; _man setbehaviour "Safe"; }; Sleep 2; Waituntil { unitready _man or _IEDDetected == 1 }; If ( _ChosenBuilding iskindof "land_house_C_10_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_3_EP1" ) then { If ( _BMN == 0 ) then { _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; _Stance = 1; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; If ( _BMN == 0 or _BMN == 1 or _BMN == 4 or _BMN == 5 or _BMN == 6 or _BMN == 7 or _BMN == 8 or _BMN == 9 or _BMN == 10 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_4_EP1" ) then { If ( _BMN == 2 or _BMN == 3 or _BMN == 4 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_11_EP1" ) then { If ( _BMN == 0 or _BMN == 1 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_2_EP1" ) then { If ( _BMN == 0 or _BMN == 1 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_12_EP1" ) then { If ( _BMN == 6 or _BMN == 7 ) then { _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; _Stance = 1; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; If ( _BMN == 4 or _BMN == 5 or _BMN == 6 or _BMN == 7 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; //_man setdir _CDTI; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_9_EP1" ) then { If ( _BMN == 3 or _BMN == 4 or _BMN == 5 or _BMN == 6 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; //_man setdir _CDTI; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_1_EP1" or _ChosenBuilding iskindof "land_house_C_1_v2_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_5_EP1" ) then { If ( _BMN == 0 or _BMN == 1 or _BMN == 2 or _BMN == 4 or _BMN == 5 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_5_v1_EP1" ) then { If ( _BMN == 0 or _BMN == 1 or _BMN == 3 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_5_v2_EP1" ) then { If ( _BMN == 1 or _BMN == 2 or _BMN == 3 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_C_5_v3_EP1" ) then { If ( _BMN == 0 or _BMN == 2 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_1_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_3_EP1" ) then { If ( _BMN == 0 or _BMN == 1 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_4_EP1" ) then { If ( _BMN == 2 or _BMN == 3 or _BMN == 5 ) then { _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; _Stance = 1; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; If ( _BMN == 2 or _BMN == 3 or _BMN == 4 or _BMN == 5 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_6_EP1" ) then { If ( _BMN == 0 or _BMN == 1 ) then { _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; If ( _BMN == 0 or _BMN == 1 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_7_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_8_EP1" ) then { If ( _BMN == 3 or _BMN == 4 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_L_9_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_K_1_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_K_3_EP1" ) then { If ( _BMN == 2 or _BMN == 3 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_K_5_EP1" or _ChosenBuilding iskindof "land_house_K_6_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_K_7_EP1" ) then { If ( _BMN == 7 or _BMN == 8 ) then { _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; _Stance = 1; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; If ( _BMN == 3 or _BMN == 4 or _BMN == 5 or _BMN == 6 or _BMN == 7 or _BMN == 8 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_house_K_8_EP1" ) then { If ( _BMN == 3 or _BMN == 4 or _BMN == 5 or _BMN == 6 or _BMN == 7 or _BMN == 8 or _BMN == 9 ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; }; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_A_Minaret_Porto_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; Sleep 1; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_A_Mosque_Big_Minaret_1_EP1" or _ChosenBuilding iskindof "land_A_Mosque_Big_Minaret_2_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; If ( _ChosenBuilding iskindof "land_A_Minaret_EP1" ) then { _man setbehaviour "Aware"; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setbehaviour "Safe"; Sleep 1; _man setbehaviour "Aware"; _man setunitpos "up"; Sleep 3; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; }; Sleep 2; _MoveNo = _MoveNo +1; _BMN = _BMN +1; }; _MBA = _MBA -1; If ( _NFBA == 0 ) then { _MBA = 0; }; // Checks Number of failed building attempts & sets _MBA to 0 so houses stopped being checked }; //-----------------------------No Building Options, so find an Object to hide by----------------------------------------------------------------------------- If ( _MBA == 0 or _NFBA == 0 && _MOA != 0 ) then { //-------Find Objects put in _ObjectArray then only pick the ones between 30m & 120m & put those in _RangeObjectArray in order of distance from _man-------------------------------------------------- _ObjectArray = nearestobjects [_IEDPos, [],120]; _OSS = 1; _RangeObjectArray = []; _BuildingArrayAll = []; _HIR = count nearestobjects [_IEDPos, ["house"],50]; //++++++++++++---Houses in range (50m) used to see if he's in a town---++++++++++++++++++++++++++++++++++++++++++++++++ _MinDist = 40; _MaxDist = 120; If ( _HIR <= 2 ) then { _MinDist = 40; _MaxDist = 120; }; If ( _HIR >= 10 ) then { _MinDist = 25; _MaxDist = 50; }; { If ( _IEDPos distance _x >= _MinDist && _IEDPos distance _x <= _MaxDist ) then { _RangeObjectArray = _RangeObjectArray + [_x]; }; } Foreach _ObjectArray; IF ( Count _RangeObjectArray >= 1 ) then { //-------Randomly select 1 of the Objects, remove it from the array (_RangeObjectArray) & call it _ChosenObject---------------------------------------------------------------------------------------- While { _MOA != 0 && _IEDDetected != 1 } do { _ROC = count _RangeObjectArray; _ChosenObject = _RangeObjectArray select (Floor(random _ROC)); _RangeObjectArray = _RangeObjectArray - [_ChosenObject]; while { _ChosenObject iskindof "house" or isonroad getpos _Chosenobject } do { _ROC = count _RangeObjectArray; _ChosenObject = _RangeObjectArray select (Floor(random _ROC)); _RangeObjectArray = _RangeObjectArray - [_ChosenObject]; }; If ( _MoveType == "Sw" ) then { _man setposATL [(getpos _ChosenObject select 0),(getpos _ChosenObject select 1),0]; }; If ( _MoveType == "Mo" ) then { _man domove getpos _ChosenObject; _man setbehaviour "Safe"; }; Waituntil { unitready _man or _IEDDetected == 1 }; "IED_Man" setMarkerPos getpos _man; _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; _Stance = 1; }; _IEDTarget hideobject True; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setunitpos "up"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; //_man setbehaviour "Safe"; _MOA = _MOA -1; }; }; }; //----------------------------------No Building or Object options, so just find a random position within 30-100m---------------------------------------------------------------- If ( _OSS == 1 ) then { _HIR = count nearestobjects [_IEDPos, ["house"],50]; //++++++++++++---Houses in range (50m) used to see if he's in a town---++++++++++++++++++++++++++++++++++++++++++++++++ If ( _HIR <= 2 ) then { _MinDist = 60; _MaxDist = 120; }; If ( _HIR >= 10 ) then { _MinDist = 25; _MaxDist = 50; }; While { _OMTC > 0 && _IEDDetected != 1} do { _Moveto = [( _IEDPos select 0) + ( -50 + (random(100))), ( _IEDPos select 1) + ( -50 + (random(100)))]; while { _Moveto distance _IEDPos <= _MinDist && _Moveto distance _IEDPos >= _MaxDist && isonroad _Moveto } do { _Moveto = [( _IEDPos select 0) + ( -100 + (random(200))), ( _IEDPos select 1) + ( -100 + (random(200)))]; }; If ( _MoveType == "Sw" ) then { _man setpos _Moveto; }; If ( _MoveType == "Mo" ) then { _man domove _MoveTo; _man setbehaviour "Safe"; }; Waituntil { unitready _man or _IEDDetected == 1 }; "IED_Man" setMarkerPos getpos _man; _man setbehaviour "Aware"; _man setunitpos "down"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "down"; _IEDDetected = 1; _Stance = 1; }; _IEDTarget hideobject True; _man setunitpos "middle"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _man setunitpos "middle"; _IEDDetected = 1; _Stance = 2; }; _IEDTarget hideobject True; _man setunitpos "up"; Sleep 4; _IEDTarget hideobject False; _man dowatch _IEDTarget; Sleep _DT; If ( _man knowsabout _IEDTarget > _KV ) then { _man disableai "anim"; _IEDDetected = 1; }; _IEDTarget hideobject True; _OMTC = _OMTC -1; }; }; }; //#############################################---Create & Define Detonation & detection Triggers---############################################################################################################## _IEDtriggerOuter = createTrigger["EmptyDetector", _iedpos]; _IEDtriggerOuter setTriggerActivation ["WEST", "PRESENT", true]; _IEDtriggerOuter setTriggerArea [30, 30, 0, false]; _IEDtriggerOuter setTriggerStatements ["this", "" ,""]; _IEDtriggerInner = createTrigger["EmptyDetector", _iedpos]; _IEDtriggerInner setTriggerActivation ["WEST", "PRESENT", true]; _IEDtriggerInner setTriggerArea [15, 15, 0, false]; _IEDtriggerInner setTriggerStatements ["this", "" ,""]; [_man] Spawn { WaitUntil { Player knowsabout (_this Select 0) >= 4 && CursorTarget == (_this Select 0) }; Sleep (floor (random 5)); (_this Select 0) setCaptive False; (_this Select 0) addrating -10000; }; _man addweapon "ItemMap"; _man enableai "anim"; _man disableai "move"; deleteVehicle _IEDTarget; Sleep 2; _man setcombatmode "blue"; If ( _Stance == 1 ) then { _man setunitpos "down" ; }; If ( _Stance == 2 ) then { _man setunitpos "Middle" ; }; Sleep 2; If ( _binoc == "bin" ) then { _man selectweapon "Binocular"; }; If ( _Gun == "noGun" ) then { Removeallweapons _man; }; _IEDDeted = 0; _shouted = 0; Waituntil {triggeractivated _IEDtriggerOuter}; { While {_man knowsabout _x >=0.1 && _IEDDeted == 0 } do { Waituntil {triggeractivated _IEDtriggerinner}; reezo_IEDdetect_canFear = 1; publicVariable "reezo_IEDdetect_canFear"; nul0 = [_x,_man] execVM "common\server\IEDdetect\IEDdetect_cursorTarget.sqf"; Sleep (floor (random 5)); while {alive _man && reezo_IEDdetect_cursorTarget > -1 && reezo_IEDdetect_canFear == 1} do { sleep 1 }; if (_shouted == 0) then { _shouted = 1; _man say "akbar"; sleep 1.4; }; if (alive _man) then { Reezo_IED_detector_objects = Reezo_IED_detector_objects - [_IED]; publicVariable "Reezo_IED_detector_objects"; reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = reezo_IEDdetect_Targeters - [_x]; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; _rnd = random 1; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _IED) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _IED) } else { "Bo_GBU12_LGB" createVehicle (getPos _IED)}; deleteVehicle _IED; }; _IEDDeted = 1; }; } Foreach list _IEDtriggerOuter; Waituntil { _IEDDeted == 1 }; Sleep (floor (random 10)); _man addrating -10000; _man setcaptive False; _man enableai "move"; _man setunitpos "middle"; _man setcombatmode "Green"; _man setbehaviour "stealth"; _man dowatch objnull; If ( _Relocate == "RUN" ) then { _ObjectArray2 = nearestobjects [_man, [],200]; _RangeObjectArray2 = []; _MOM = 5; { If ( _man distance _x >= 80 && _man distance _x <= 200 ) then { _RangeObjectArray2 = _RangeObjectArray2 + [_x]; }; } Foreach _ObjectArray2; IF ( Count _RangeObjectArray2 >= 1 ) then { //-------Randomly select 1 of the Objects, remove it from the array (_RangeObjectArray) & call it _ChosenObject---------------------------------------------------------------------------------------- While { _MOM > 0 } do { _ROC2 = count _RangeObjectArray2; _ChosenObject2 = _RangeObjectArray2 select (Floor(random _ROC2)); _RangeObjectArray2 = _RangeObjectArray2 - [_ChosenObject2]; _man domove getpos _chosenObject2; Sleep 3; Waituntil { unitready _man }; Sleep (floor (random 60)); _MOM = _MOM -1; }; }; };////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_detector","_range","_interval","_skill","_fakeRatio","_near","_nearCount","_IEDmarker","_rnd","_posX","_posY","_sign","_y","_h","_iedMarkename","_createvarname","_numberMarker","_action_reezo_IEDdetect_remoteDet","_action_reezo_IEDdetect_manualDefuse","_lapse","_nearHosts","_thisHost","_action_reezo_IEDdetect_detach","_fakeIED"]; _detector = _this select 0; _range = _this select 1; _interval = _this select 2; _skill = _this select 3; _fakeRatio = _this select 4; if !(local _detector) exitWith {}; waitUntil {reezo_IEDdetect_initComplete}; reezo_IEDdetect_EODs = reezo_IEDdetect_EODs + [_detector]; publicVariable "reezo_IEDdetect_EODs"; reezo_IEDdetect_detector_respawn = [_detector,_range,_interval,_skill,_fakeRatio]; // MAIN SCAN LOOP while {alive _detector} do { if (reezo_IEDdetect_debug) then { player globalChat "NOW RUNNING: MAIN SCAN LOOP" }; while {count reezo_IED_detector_objects == 0} do { sleep (_interval * 2) }; { if (_detector == driver _x) then { sleep _interval }; } forEach reezo_IEDdetect_EODvehicles; if !(_detector in reezo_IEDdetect_EODs) then { reezo_IEDdetect_EODs = reezo_IEDdetect_EODs + [_detector]; publicVariable "reezo_IEDdetect_EODs"; }; _fakeIED = 0; if (reezo_IEDdetect_busy == 0) then { _near = (getPos _detector) nearObjects (_range - ((speed _detector) * 1.25)); _nearCount = count _near; if (_nearCount > 50) then {_nearCount = 50}; // CASE 1. FAKE IED DETECTED (radio interferences or whatever gizmo might trigger it) _rnd = random 100; if (_rnd < _fakeRatio && reezo_IEDdetect_busy == 0 && _nearCount > 5) then { if (reezo_IEDdetect_debug) then { player globalChat "NOW RUNNING: FAKE IED CODE"; sleep 1; }; // Script goes busy reezo_IEDdetect_busy = 1; publicVariable "reezo_IEDdetect_busy"; _fakeIED = 1; // ACQUIRE IED AND BROADCAST, adding it to the "Found IEDs" array reezo_IEDdetect_activeIED = _near select (floor (random _nearCount)); publicVariable "reezo_IEDdetect_activeIED"; reezo_IEDdetect_activeEOD = _detector; publicVariable "reezo_IEDdetect_activeEOD"; // Scanner notification (Scanning..) waitUntil {!dialog}; cutRsc ["IEDdetect_01", "PLAIN", 0]; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; sleep 2; //MARKER PLACEMENT (approximate) deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; sleep 0.1; _rnd = random _range; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posX = (getPos (_detector) select 0) + _rnd; _rnd = random _range; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posY = (getPos (_detector) select 1) + _rnd; // GENERATE NAME NOT IN USE GLOBALLY _iedMarkename = "REEZOIED"; _numberMarker = 0; if (isnil ("REEZOIED")) then {_iedMarkename="REEZOIED"} else { _createvarname = true; while {_createvarname} do { _iedMarkename = format["REEZOIED_%1",_numberMarker]; if (isnil ("_iedMarkename")) then { _createvarname = false; } else { _numberMarker = _numberMarker+ 1; }; }; }; _IEDmarker = createMarkerLocal[_iedMarkename,[_posX,_posY]]; _IEDmarker setMarkerShape "ICON"; _IEDmarker setMarkerType "WARNING"; _IEDmarker setMarkerColor "colorRed"; _IEDmarker setMarkerText "IED Approx. Position"; _IEDmarker setMarkerSize [.50, .50]; // Report the fake IED waitUntil {!dialog}; cutRsc ["IEDdetect_02", "PLAIN", 0]; playsound "IEDdetect_beep2"; sleep 15 + floor (random 90); // After some time..declare the IED fake waitUntil {!dialog}; cutRsc ["IEDdetect_07", "PLAIN", 0]; playsound "IEDdetect_beep2"; // Cleaning deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; }; if (_fakeIED == 0) then { for [{_y = 0},{_y < _nearCount},{_y = _y + 1}] do { { if (_detector == driver _x) then { sleep _interval }; } forEach reezo_IEDdetect_EODvehicles; // CASE 2. REAL IED DETECTED if ((_near select _y) in reezo_IED_detector_objects && reezo_IEDdetect_busy == 0 && alive _detector) then { if (reezo_IEDdetect_debug) then { player globalChat "NOW RUNNING: REAL IED CODE" }; sleep 1; // Script goes busy reezo_IEDdetect_busy = 1; publicVariable "reezo_IEDdetect_busy"; // ACQUIRE IED AND BROADCAST, adding it to the "Found IEDs" array reezo_IEDdetect_activeIED = _near select _y; publicVariable "reezo_IEDdetect_activeIED"; reezo_IEDdetect_activeEOD = _detector; publicVariable "reezo_IEDdetect_activeEOD"; if (reezo_IEDdetect_debug) then { hint Format["Array:\n\n%1\n\nActiveIED:\n\n%2\n\nActiveEOD:\n\n%3",reezo_IED_detector_objects,reezo_IEDdetect_activeIED, reezo_IEDdetect_activeEOD]; sleep 1; }; // Scanner notification (Scanning..) waitUntil {!dialog}; cutRsc ["IEDdetect_01", "PLAIN", 0]; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; sleep 2; //MARKER PLACEMENT (approximate) deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; sleep 0.1; _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posX = (getPos (reezo_IEDdetect_activeIED) select 0) + _rnd; _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posY = (getPos (reezo_IEDdetect_activeIED) select 1) + _rnd; // GENERATE NAME NOT IN USE GLOBALLY _iedMarkename = "REEZOIED"; _numberMarker = 0; if (isnil ("REEZOIED")) then {_iedMarkename="REEZOIED"} else { _createvarname = true; while {_createvarname} do { _iedMarkename = format["REEZOIED_%1",_numberMarker]; if (isnil ("_iedMarkename")) then { _createvarname = false; } else { _numberMarker = _numberMarker+ 1; }; }; }; _IEDmarker = createMarkerLocal[_iedMarkename,[_posX,_posY]]; _IEDmarker setMarkerShape "ICON"; _IEDmarker setMarkerType "WARNING"; _IEDmarker setMarkerColor "colorRed"; _IEDmarker setMarkerText "IED Approx. Position"; _IEDmarker setMarkerSize [.50, .50]; // Notify the IED found, add disarm actions waitUntil {!dialog}; cutRsc ["IEDdetect_02", "PLAIN", 0]; playsound "IEDdetect_beep2"; reezo_IEDdetect_activeIED removeAction _action_reezo_IEDdetect_manualDefuse; _action_reezo_IEDdetect_manualDefuse = reezo_IEDdetect_activeIED addAction [''+"Defuse Bomb"+'', "common\server\IEDdetect\IEDdetect_manualDefuse.sqf", [], 0, false, true, "",""]; //check if IED is attached to something and if it is, place a Detach action on it if (reezo_IEDdetect_activeIED in reezo_IEDdetect_attachedIEDs) then { _nearHosts = ((getPos reezo_IEDdetect_activeIED) nearObjects 3) - [reezo_IEDdetect_activeIED]; for [{_h= 0},{_h < (count _nearhosts)},{_h = _h + 1}] do { _thisHost = _nearHosts select _h; if (_thisHost in reezo_IEDdetect_hostIEDs) then { _action_reezo_IEDdetect_detach = _thisHost addAction [''+"Detach IED"+'', "common\server\IEDdetect\IEDdetect_detach.sqf", [reezo_IEDdetect_activeIED], 0, false, true, "",""]; }; }; }; // Remote Det possibility _rnd = random 100; if (_rnd < _skill) then { sleep 4; waitUntil {!dialog}; cutRsc ["IEDdetect_03", "PLAIN", 0]; playsound "IEDdetect_beep2"; reezo_IEDdetect_activeEOD removeAction _action_reezo_IEDdetect_remoteDet; _action_reezo_IEDdetect_remoteDet = reezo_IEDdetect_activeEOD addAction [''+"Remotely Detonate Bomb"+'', "common\server\IEDdetect\IEDdetect_remoteDet.sqf", [reezo_IEDdetect_activeIED], 0, false, true, "",""]; }; }; // END IF // MAIN WAIT LOOP _lapse = 1; while { reezo_IEDdetect_busy == 1 && _lapse < 36 && alive reezo_IEDdetect_activeIED && alive reezo_IEDdetect_activeEOD && reezo_IEDdetect_activeIED distance reezo_IEDdetect_activeEOD < 300} do { // update IED marker if it moved in the meantime if (speed reezo_IEDdetect_activeIED != 0) then { _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posX = (getPos (reezo_IEDdetect_activeIED) select 0) + _rnd; _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posY = (getPos (reezo_IEDdetect_activeIED) select 1) + _rnd; _iedMarkename setMarkerPos [_posX, _posY]; }; sleep 5; _lapse = _lapse + 1; }; reezo_IEDdetect_activeIED removeAction _action_reezo_IEDdetect_manualDefuse; reezo_IEDdetect_activeEOD removeAction _action_reezo_IEDdetect_remoteDet; deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; }; // END FOR }; //END IF FAKEIED == 0 reezo_IEDdetect_busy = 0; publicVariable "reezo_IEDdetect_busy"; }; // END IF IEDDETECT_BUSY == 0 sleep _interval; }; // END WHILE deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; reezo_IEDdetect_busy = 0; publicVariable "reezo_IEDdetect_busy"; reezo_IEDdetect_EODs = reezo_IEDdetect_EODs - [_detector]; publicVariable "reezo_IEDdetect_EODs"; sleep 1; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: RESPAWN - RESPAWNING.."; sleep 1; }; waitUntil {alive player}; nul0 = [player,(reezo_IEDdetect_detector_respawn select 1),(reezo_IEDdetect_detector_respawn select 2),(reezo_IEDdetect_detector_respawn select 3),(reezo_IEDdetect_detector_respawn select 4)] execVM "common\server\IEDdetect\IEDdetect.sqf"; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: RESPAWN - RESPAWNED CORRECTLY"; sleep 1; }; if (reezo_IEDdetect_debug) then { player globalChat "reezo_IEDDETECT DEBUG: IEDDETECT.SQF COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_object","_rnd","_beep","_detonate","_wait","_currentDamage"]; if (!isServer) exitWith{}; if (count _this < 1 OR count _this > 2) exitWith {hint "IED_DETECT_ADD.SQF WRONG PARAMETERS, QUITTING.." }; _object = _this select 0; if (count _this == 2) then {_beep = _this select 1 } else { _beep = 2 }; waitUntil {!(isNull _object)}; waitUntil {_object == _object}; waitUntil {reezo_IEDdetect_initComplete}; Reezo_IED_detector_objects = Reezo_IED_detector_objects + [_object]; publicVariable "Reezo_IED_detector_objects"; if (_beep == 2) then { _rnd = random 1; if (_rnd > 0.5) then { _beep = 1 } else { _beep = 0 }; }; if (_beep == 1) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers + [_object]; publicVariable "reezo_IEDdetect_beepers"; }; if (reezo_IEDdetect_debug) then { sleep 1; player globalChat "REEZO_IEDDETECT DEBUG: ADD DONE AND WAITING"; sleep 1;}; // blow up the IED if it gets shot or destroyed _wait = true; _detonate = false; while { _wait } do { _rnd = random 1; if (_rnd < damage _object) then { _detonate = true; _wait = false; }; if (!alive _object) then { _wait = false }; if (_wait) then { sleep 3 }; }; if (_detonate && _object in reezo_IED_detector_objects) then { _rnd = random 1; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _object) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _object) } else { "Bo_GBU12_LGB" createVehicle (getPos _object) }; }; if (_object in Reezo_IED_detector_objects) then { Reezo_IED_detector_objects = Reezo_IED_detector_objects - [_object]; publicVariable "reezo_IED_detector_objects"; }; if (_object in reezo_IEDdetect_beepers) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers - [_object]; publicVariable "reezo_IEDdetect_beepers"; }; if (reezo_IEDdetect_canFear == 1) then { reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = []; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; }; if (alive _object) then { deleteVehicle _object }; if (reezo_IEDdetect_debug) then { sleep 1; player globalChat "REEZO_IEDDETECT DEBUG: ADD COMPLETE"; sleep 1;}; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_soldier","_ambientGROUP","_civilians","_vehicles","_triggerman","_minNumber","_chance","_interval","_bomb","_IEDtype","_beep","_scanArea","_fearArea","_detArea","_suicideRate","_enemySide","_rnd","_fate","_actualPos","_y","_k","_ambientRadius"]; _soldier = player; _ambientGROUP = group _soldier; if !(local _soldier) exitWith{}; if (_soldier != leader group _soldier) exitWith{}; waitUntil {reezo_IEDdetect_initComplete}; if (count _this != 11) exitWith{ hint "IEDdetect_ambientBombers error: wrong parameters!" }; _ambientRadius = _this select 0; _minNumber = _this select 1; _chance = _this select 2; _interval = _this select 3; _IEDtype = _this select 4; _beep = _this select 5; _scanArea = _this select 6; _fearArea = _this select 7; _detArea = _this select 8; _suicideRate = _this select 9; _enemySide = _this select 10; if (side _soldier != _enemySide) exitWith{}; waitUntil { time > 3 }; // MAIN LOOP while {alive _soldier} do { //RANDOMIZE BASED ON CHANCE AND RUN CODE ONLY IF TRUE (SAVES CYCLES IN ACCORDANCE WITH KYOTO PACTS) _fate = random 100; if (_fate < _chance) then { //CHECK HOW MANY CIVILIANS ARE IN THE AREA _civilians = []; _nearPeople = (getPos _soldier) nearObjects ["Man",_ambientRadius]; for [{_y = 0},{_y < (count _nearPeople)},{_y = _y + 1}] do { if (side (_nearPeople select _y) == CIVILIAN) then { _civilians = _civilians + [_nearPeople select _y]; }; }; //PROCEED ONLY IF ENOUGH CIVVIES ARE FOUND AND CHECK FOR ALTITUDE DIFFERENCE TO AVOID TRIGGERING WHEN FLYING OVER _soldierAltitude = (getPos _soldier) select 2; _civAltitude = (getPos (_civilians select 0)) select 2; if (count _civilians >= _minNumber && (abs (_soldierAltitude - _civAltitude)) < 5 ) then { _triggerman = (_civilians select (floor (random (count _civilians)))); _civilians = []; _nearPeople = (getPos _triggerman) nearObjects ["Man",_ambientRadius]; for [{_y = 0},{_y < (count _nearPeople)},{_y = _y + 1}] do { if (side (_nearPeople select _y) == CIVILIAN) then { _civilians = _civilians + [_nearPeople select _y]; }; }; _triggerman = (_civilians select (floor (random (count _civilians)))); _bomb = _triggerman; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: TRIGGERMAN FOUND"; sleep 1; }; _rnd = random 100; _vehicles = []; _nearCars = (getPos _triggerman) nearObjects [_IEDtype,_scanArea]; //DECIDE: SUICIDE BOMBER OR TRIGGERMAN? if (_rnd < _suicideRate && count _nearCars > 0) then { for [{_k = 0},{_k < (count _nearCars)},{_k = _k + 1}] do { if !(side (_nearCars select _k) == _enemySide) then { if (isNull driver (_nearCars select _k) && !(isEngineOn (_nearCars select _k))) then { //hint Format ["%1",(side (_nearCars select _k))]; _vehicles = _vehicles + [_nearCars select _k]; }; }; }; _bomb = (_vehicles select (floor (random (count _vehicles)))); if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: BOMB IS OBJECT"; sleep 1; }; } else { _bomb = _triggerman; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: BOMB IS TRIGGERMAN"; sleep 1; }; }; //FINALLY ACTIVATE THE SON OF A BITCH sleep 1; if (reezo_IEDdetect_debug) then { hintSilent Format["TRIGGERMAN:\n%1\n\nBOMB:\n%2\n\nBEEP:\n%3\n\nFEARAREA:\n%4\n\nDETAREA:\n%5\n\nENEMYSIDE:\n%6",_triggerman,_bomb,_beep,_fearArea,_detArea,_enemySide]; }; nul0 = [_triggerman,_bomb,_beep,_fearArea,_detArea,_enemySide] execVM "common\server\IEDdetect\IEDdetect_triggerman.sqf"; while {_soldier distance _triggerman < (_ambientRadius/2) && alive _triggerman} do { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: WAIT TYPE 2"; _debugMRK1 = createMarkerLocal ["debugMRK1", position _triggerman]; _debugMRK1 setMarkerShapeLocal "ICON"; _debugMRK1 setMarkerTypeLocal "DOT"; if (_triggerman == _bomb) then { _debugMRK1 setMarkerTextLocal "Suicide Bomber"; } else { _debugMRK2 = createMarkerLocal ["debugMRK2", position _bomb]; _debugMRK2 setMarkerShapeLocal "ICON"; _debugMRK2 setMarkerTypeLocal "DOT"; _debugMRK1 setMarkerTextLocal "Triggerman"; _debugMRK2 setMarkerTextLocal "IED"; }; }; sleep _interval; }; } else { //YOU NEVER GET ENOUGH SLEEP WHEN YOU ARE A LAZY PERSON if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: NOT ENOUGH CIVVIES"; sleep 1; }; sleep _interval; }; //SLEEP IF _soldier DOES NOT MOVE FROM THE AREA _actualPos = getPos _soldier; while {_actualPos distance (getPos _soldier) < (_ambientRadius/2)} do { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: WAIT TYPE 1"; sleep 1; }; sleep _interval; }; if (!alive _soldier) then { _soldier = leader _ambientGROUP }; }; }; //END MAIN LOOP // END if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTBOMBERS: SCRIPT COMPLETE"; sleep 1; }; if (true) exitWith{};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_soldier","_ambientGROUP","_objects","_vehicles","_proximityIED","_minNumber","_chance","_interval","_bomb","_IEDtype","_beep","_scanArea","_fearArea","_detArea","_typeRate","_enemySide","_rnd","_fate","_actualPos","_y","_k","_ambientRadius","_IEDskins"]; _soldier = player; _ambientGROUP = group _soldier; if !(local _soldier) exitWith{}; if (_soldier != leader group _soldier) exitWith{}; waitUntil {reezo_IEDdetect_initComplete}; if (count _this != 6) exitWith{ hint "IEDDETECT_AMBIENTPROXYIEDS error: wrong parameters!" }; _ambientRadius = _this select 0; _chance = _this select 1; _interval = _this select 2; _beep = _this select 3; _typeRate = _this select 4; _enemySide = _this select 5; if (reezo_IEDdetect_debug) then { hintSilent Format["RADIUS:\n%1\n\nCHANCE:\n%2\n\nINTERVAL:\n%3\n\nBEEP:\n%4\n\nTYPERATE:\n%5\n\nENEMYSIDE:\n%6",_ambientRadius,_chance,_interval,_beep,_typeRate,_enemySide]; sleep 1; }; _IEDskins = ["Land_IED_v1_PMC","Land_IED_v2_PMC","Land_IED_v3_PMC","Land_IED_v4_PMC"]; if (side _soldier != _enemySide) exitWith{}; waitUntil { time > 3 }; // MAIN LOOP while {alive _soldier} do { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: START MAIN LOOP"; sleep 1; }; //RANDOMIZE BASED ON CHANCE AND RUN CODE ONLY IF TRUE (SAVES CYCLES IN ACCORDANCE WITH KYOTO PACTS) _fate = random 100; if (_fate < _chance) then { //CHECK HOW MANY ROADS ARE IN THE AREA _nearRoads = []; _goodSpots = []; _nearRoads = (getPos _soldier) nearRoads _ambientRadius; //FIND SUITABLE SPOTS AT LEAST 2/3 OF THE SOLDIER POSITION for [{_y = 0},{_y < (count _nearRoads)},{_y = _y + 1}] do { if ((getPos (_nearRoads select _y)) distance getPos _soldier > (_ambientRadius * 0.67)) then { _goodSpots = _goodSpots + [getPos (_nearRoads select _y)]; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: GOOD SPOT FOUND"; hintSilent Format["GOOD SPOT:\n%1\n\nPOSITION:\n%2",(_nearRoads select _y),(getPos (_nearRoads select _y))]; sleep 1; }; }; }; //SPAWN THE IED AND MAKE IT A PROXIMITY IED if (count _goodSpots > 0 && ((getPos _soldier) select 2 < 5)) then { //RANDOMIZE A GOOD POSITION AND AN IED TYPE _IEDtype = _IEDskins select (floor (random (count _IEDskins))); _IEDpos = _goodSpots select (floor (random (count _goodSpots))); //RANDOMIZE POSITION AROUND THE GOOD SPOT FOUND _rndX = 5.5 + random 1.5; _rndY = 5.5 + random 1.5; _segno = random 1; if (_segno < 0.5) then { _rndX = -1 * _rndX }; _segno = random 1; if (_segno < 0.5) then { _rndY = -1 * _rndY }; _IEDpos = [(_IEDpos select 0) + _rndX, (_IEDpos select 1) + _rndY, (_IEDpos select 2)]; if (reezo_IEDdetect_debug) then { hintSilent Format["IEDTYPE:\n%1\n\nIEDPOS:\n%2\n\nSOLDIERPOS:\n%3",_IEDtype,_IEDpos,(getPos _soldier)]; sleep 1; }; _proximityIED = createVehicle [_IEDtype, _IEDpos, [], 0, "NONE"]; _proximityIED setDir (random 360); //_proximityIED = _IEDtype createVehicle ((getPos _goodSpots) select (floor (random (count _goodSpots)))); _rnd = random 100; if (_rnd < _typeRate) then { nul0 = [_proximityIED,_beep,0] execVM "common\server\IEDdetect\IEDdetect_proximity.sqf"; } else { nul0 = [_proximityIED,_beep,1] execVM "common\server\IEDdetect\IEDdetect_proximity.sqf"; }; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: PROXIMITY IED SPAWNED"; sleep 1; }; }; while {_soldier distance _proximityIED <= (_ambientRadius) && alive _proximityIED} do { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: WAIT TYPE 2"; deleteMarker "debugMRK1"; _debugMRK1 = createMarkerLocal ["debugMRK1", position _proximityIED]; _debugMRK1 setMarkerShapeLocal "ICON"; _debugMRK1 setMarkerTypeLocal "DOT"; _debugMRK1 setMarkerTextLocal "DEBUG: Proximity IED"; }; sleep _interval; }; } else { //YOU NEVER GET ENOUGH SLEEP WHEN YOU ARE A LAZY PERSON if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: WAIT TYPE 3"; sleep 1; }; sleep _interval; }; //SLEEP IF _soldier DOES NOT MOVE FROM THE AREA while {_proximityIED distance _soldier < (_ambientRadius * 1.33)} do { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: WAIT TYPE 1"; sleep 1; }; sleep _interval; }; reezo_IED_detector_objects = reezo_IED_detector_objects - [_proximityIED]; publicVariable "reezo_IED_detector_objects"; deleteVehicle _proximityIED; if (!alive _soldier) then { _soldier = leader _ambientGROUP }; }; //END MAIN LOOP // END if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_AMBIENTPROXYIEDS: SCRIPT COMPLETE"; sleep 1; }; if (true) exitWith{};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_object","_beep","_attachedIED","_rnd","_detonate","_wait","_currentDamage"]; if (!isServer) exitWith{}; if (count _this < 1 OR count _this > 2) exitWith {hint "IED_DETECT_ADD.SQF WRONG PARAMETERS, QUITTING.." }; _object = _this select 0; if (count _this == 2) then {_beep = _this select 1 } else { _beep = 0 }; // Better wait until the host object is ready waitUntil {!(isNull _object)}; waitUntil {_object == _object}; waitUntil {reezo_IEDdetect_initComplete}; // Spawn the explosive object _attachedIED = "Explosive" createVehicle (getPos _object); sleep 0.1; //Add that object to the array Reezo_IED_detector_objects = Reezo_IED_detector_objects + [_attachedIED]; publicVariable "Reezo_IED_detector_objects"; //..and add it to the IEDs that are ATTACHED to something Reezo_IEDdetect_attachedIEDs = Reezo_IEDdetect_attachedIEDs + [_attachedIED]; publicVariable "Reezo_IEDdetect_attachedIEDs"; //..and add the object it is attached to in the list of IED hosts reezo_IEDdetect_hostIEDs = reezo_IEDdetect_hostIEDs + [_object]; publicVariable "reezo_IEDdetect_hostIEDs"; // To beep or not to beep, this is the question if (_beep == 2) then { _rnd = random 1; if (_rnd > 0.5) then { _beep = 1 } else { _beep = 0 }; }; if (_beep == 1) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers + [_attachedIED]; publicVariable "reezo_IEDdetect_beepers"; }; // Attach the IED to the object if (_object isKindof "Car" OR _object isKindOf "Tank") then { _attachedIED attachTo [_object,[0,0,-1],"hatch1"]; } else { _attachedIED attachTo [_object,[0,0,0],"hatch1"]; }; sleep 0.1; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: ATTACH DONE AND WAITING" }; // blow up the IED if it gets shot or destroyed _wait = true; _detonate = false; while { _wait } do { if (!alive _attachedIED) then { _wait = false }; _rnd = random 1; if (_object in reezo_IEDdetect_hostIEDs && !(_object isKindOf "Man") && _rnd < damage _object) then { _detonate = true; _wait = false; }; if (!(_object in reezo_IEDdetect_hostIEDs) && _attachedIED in reezo_IEDdetect_attachedIEDs && damage _attachedIED != 0) then { _detonate = true; _wait = false; }; //if (!(_attachedIED in reezo_IED_detector_objects)) then { _wait = false; }; if (_wait) then { sleep 3 }; }; if (_detonate && _attachedIED in reezo_IEDdetect_attachedIEDs) then { _rnd = random 1; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _attachedIED) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _attachedIED) } else { "Bo_GBU12_LGB" createVehicle (getPos _attachedIED) }; }; if (_attachedIED in Reezo_IED_detector_objects) then { Reezo_IED_detector_objects = Reezo_IED_detector_objects - [_attachedIED]; publicVariable "reezo_IED_detector_objects"; }; if (_attachedIED in reezo_IEDdetect_attachedIEDs) then { reezo_IEDdetect_attachedIEDs = reezo_IEDdetect_attachedIEDs - [_attachedIED]; publicVariable "reezo_IEDdetect_attachedIEDs"; }; if (_attachedIED in reezo_IEDdetect_beepers) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers - [_attachedIED]; publicVariable "reezo_IEDdetect_beepers"; }; if (_object in reezo_IEDdetect_hostIEDs) then { reezo_IEDdetect_hostIEDs = reezo_IEDdetect_hostIEDs - [_object]; publicVariable "reezo_IEDdetect_hostIEDs"; }; if (reezo_IEDdetect_canFear == 1) then { reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = []; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; }; if (alive _attachedIED) then { deleteVehicle _attachedIED }; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: ATTACH COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT if (isDedicated) exitWith{}; // BEEPER SOUND while { true } do { { if (alive _x) then { _x say3D "IEDdetect_beep3" }; } forEach reezo_IEDdetect_beepers; sleep 2; }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// private ["_soldier","_triggerman","_nearStuff"]; _soldier = _this select 0; if !(local _soldier) exitWith{}; if (_soldier in reezo_IEDdetect_Targeters) exitWith{}; if (!isMultiplayer && _soldier != player) exitWith{}; if !(_soldier in reezo_IEDdetect_Targeters) then { reezo_IEDdetect_Targeters = reezo_IEDdetect_Targeters + [_soldier]; publicVariable "reezo_IEDdetect_Targeters"; }; _triggerman = _this select 1; while {alive _soldier && alive _triggerman && reezo_IEDdetect_canFear == 1} do { if (reezo_IEDdetect_debug) then { hint Format["CursorTarget\nFEAR:\n\n%1",reezo_IEDdetect_cursorTarget]; }; if (cursorTarget == _triggerman ) then { if (reezo_IEDdetect_cursorTarget > 4) then { reezo_IEDdetect_cursorTarget = 4; } else { reezo_IEDdetect_cursorTarget = reezo_IEDdetect_cursorTarget + 1; }; publicVariable "reezo_IEDdetect_cursorTarget"; } else { if (reezo_IEDdetect_cursorTarget < -4) then { reezo_IEDdetect_cursorTarget = -4; } else { reezo_IEDdetect_cursorTarget = reezo_IEDdetect_cursorTarget - 1; }; publicVariable "reezo_IEDdetect_cursorTarget"; }; sleep 1; }; reezo_IEDdetect_Targeters = reezo_IEDdetect_Targeters - [_soldier]; publicVariable "reezo_IEDdetect_Targeters"; if (reezo_IEDdetect_debug) then { _soldier globalChat "IEDDETECT_CURSORTARGET.SQF COMPLETE" }; if (true) exitWith{};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_object","_title","_text","_EOD","_id","_attachedIED"]; _object = _this select 0; _EOD = _this select 1; _id = _this select 2; _attachedIED = (_this select 3) select 0; if !(local _EOD) exitWith {}; if (!alive _attachedIED) exitWith {_object removeAction _id}; if !(_EOD in reezo_IEDdetect_EODs) exitWith { _title = "UNABLE

"; _text = "You do not have the required expertise"; hint parseText (_title + _text) }; _EOD playMove "AinvPknlMstpSnonWrflDnon_medic3"; sleep 1; _EOD playMove "amovpknlmstpslowwrfldnon_amovpercmstpsraswrfldnon"; sleep 3; if (alive _attachedIED) then { detach _attachedIED; _attachedIED setPos (getPos _EOD); _object removeAction _id; reezo_IEDdetect_hostIEDs = reezo_IEDdetect_hostIEDs - [_object]; }; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: DETACH COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_detector","_range","_interval","_skill","_fakeRatio"]; if (count _this != 5) exitWith {hint "REEZO_IEDDETECT: WRONG PARAMETERS, QUITTING.."}; _detector = _this select 0; if (!local _detector) exitWith {}; if !(_detector isKindOf "Man") exitWith { hint "REEZO_IEDDETECT: DETECTOR IS NOT A UNIT, QUITTING.."}; waitUntil {reezo_IEDdetect_initComplete}; waitUntil {!(isNull _detector)}; waitUntil {_detector == _detector}; _range = _this select 1; _interval = _this select 2; _skill = _this select 3; _fakeRatio = _this select 4; if (_range < 5) then { _range = 5 }; if (_interval < 5) then { _interval = 5 }; //nul0 = [_detector,_range,_interval,_skill,_fakeRatio] execVM "common\server\IEDdetect\IEDdetect_respawn_detector.sqf"; nul0 = [_detector,_range,_interval,_skill,_fakeRatio] execVM "common\server\IEDdetect\IEDdetect.sqf"; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: DETECTOR.SQF COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_detector","_vehicle","_range","_interval","_skill","_fakeRatio","_title","_text"]; if (count _this != 5) exitWith {hint "REEZO_IEDDETECT_DETECTOR_VEHICLE: WRONG PARAMETERS, QUITTING.."}; _vehicle = _this select 0; if (_detector isKindOf "Man") exitWith { hint "REEZO_IEDDETECT: DETECTOR IS NOT A VEHICLE, QUITTING.."}; _range = _this select 1; _interval = _this select 2; _skill = _this select 3; _fakeRatio = _this select 4; waitUntil {!(isNull _vehicle)}; waitUntil {_vehicle == _vehicle}; waitUntil {reezo_IEDdetect_initComplete}; if (_range < 5) then { _range = 5 }; if (_interval < 5) then { _interval = 5 }; reezo_IEDdetect_EODvehicles = reezo_IEDdetect_EODvehicles + [_vehicle]; publicVariable "reezo_IEDdetect_EODvehicles"; while { true } do { while {isNull driver _vehicle} do { sleep (_interval * 2) }; if (!(isNull driver _vehicle) && alive _vehicle) then { _detector = driver _vehicle; nul0 = [_detector,_range,_interval,_skill,_fakeRatio,_vehicle] execVM "common\server\IEDdetect\IEDdetect_vehicle.sqf"; while {alive _vehicle && alive _detector && _detector == driver _vehicle} do { sleep (_interval); _detector = driver _vehicle;}; }; }; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: DETECTOR.SQF COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT if (!isServer) exitWith{}; reezo_IEDdetect_debug = false; //make TRUE to turn on debug messages publicVariable "reezo_IEDdetect_debug"; reezo_IEDdetect_busy = 0; publicVariable "reezo_IEDdetect_busy"; reezo_IED_detector_objects = []; publicVariable "reezo_IED_detector_objects"; reezo_IEDdetect_attachedIEDs = []; publicVariable "reezo_IEDdetect_attachedIEDs"; reezo_IEDdetect_hostIEDs = []; publicVariable "reezo_IEDdetect_hostIEDs"; reezo_IEDdetect_EODs = []; publicVariable "reezo_IEDdetect_EODs"; reezo_IEDdetect_beepers = []; publicVariable "reezo_IEDdetect_beepers"; reezo_IEDdetect_EODvehicles = []; publicVariable "reezo_IEDdetect_EODvehicles"; reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = []; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; reezo_IEDdetect_initComplete = true; publicVariable "reezo_IEDdetect_initComplete"; nul0 = [] execVM "common\server\IEDdetect\IEDdetect_beeper.sqf"; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: INIT COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// private ["_event","_IED","_b","_rnd"]; _display = _this select 0; _event = _this select 1; _control = _this select 2; _modulator = _this select 3; _IED = reezo_IEDdetect_activeIED; _EOD = reezo_IEDdetect_activeEOD; switch (_event) do { case "MouseButtonDown": { if (reezo_IEDdetect_reading mod 3 == 0) then { playsound "IEDdetect_click"; sleep 0.33; closedialog 0; waitUntil {!dialog}; cutRsc ["IEDdetect_10", "PLAIN", 0]; playsound "IEDdetect_beep2"; } else { playsound "IEDdetect_click"; sleep 0.33; closedialog 0; waitUntil {!dialog}; cutRsc ["IEDdetect_11", "PLAIN", 0]; sleep random 2; for [{_b = 24},{_b > 0},{_b = _b - 2}] do { _IED say3D "IEDdetect_Beep3"; sleep (_b / (15 + floor (random 3))); }; _rnd = random 1; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _IED) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _IED) } else { "Bo_GBU12_LGB" createVehicle (getPos _IED) }; }; }; default {}; }; Reezo_IED_detector_objects = Reezo_IED_detector_objects - [_IED]; deleteVehicle _IED; reezo_IEDdetect_injection = 0; publicVariable "reezo_IEDdetect_injection"; reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = []; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: INJECTION.SQF COMPLETED" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_IED","_EOD","_id","_ok"]; _IED = _this select 0; _EOD = _this select 1; _id = _this select 2; if (!local _EOD) exitWith {}; if (!alive _IED OR !alive _EOD) exitWith{}; if !(_EOD in reezo_IEDdetect_EODs) exitWith { _title = "UNABLE

"; _text = "You do not have the required expertise"; hint parseText (_title + _text) }; _IED removeAction _id; _ok = createDialog "IEDdetect_injector"; reezo_IEDdetect_injection = 1; publicVariable "reezo_IEDdetect_injection"; while { reezo_IEDdetect_injection == 1 && alive _IED && alive _EOD} do { reezo_IEDdetect_reading = floor (random 200); publicVariable "reezo_IEDdetect_reading"; (finddisplay 650) displayctrl 660 ctrlSetText format ["%1", reezo_IEDdetect_reading]; sleep 0.2; sleep random 3; }; deleteMarkerLocal "REEZOIED"; Reezo_IED_detector_objects = Reezo_IED_detector_objects - [_IED]; publicVariable "Reezo_IED_detector_objects"; if (_IED in reezo_IEDdetect_attachedIEDs) then { reezo_IEDdetect_attachedIEDs = reezo_IEDdetect_attachedIEDs - [_IED]; publicVariable "reezo_IEDdetect_attachedIEDs"; }; if (_IED in reezo_IEDdetect_beepers) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers - [_IED]; publicVariable "reezo_IEDdetect_beepers"; }; if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: MANUAL.SQF COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_object","_rnd","_beep","_detonate","_wait","_currentDamage","_proximity","_pressureType","_proxyMen","_proxyCars","_proxyTanks"]; if (!isServer) exitWith{}; if (count _this < 1 OR count _this > 3) exitWith {hint "IED_DETECT_PROXIMITY.SQF WRONG PARAMETERS, QUITTING.." }; _object = _this select 0; _beep = _this select 1; _pressureType = _this select 2; if (_pressureType == 2) then { _rnd = random 1; if (_rnd < 0.5) then { _pressureType = 0 } else { _pressureType = 1 }; }; waitUntil {!(isNull _object)}; waitUntil {_object == _object}; waitUntil {reezo_IEDdetect_initComplete}; Reezo_IED_detector_objects = Reezo_IED_detector_objects + [_object]; publicVariable "Reezo_IED_detector_objects"; // BEEPER VALUES if (_beep == 2) then { _rnd = random 1; if (_rnd > 0.5) then { _beep = 1 } else { _beep = 0 }; }; if (_beep == 1) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers + [_object]; publicVariable "reezo_IEDdetect_beepers"; }; // MAIN LOOP _wait = true; _detonate = false; while { _wait } do { if (reezo_IEDdetect_debug) then { player globalChat "REEZO_IEDDETECT DEBUG: PROXIMITY MAIN LOOP" }; _proximity = []; _proxyCars = []; _proxyTanks = []; if (_pressureType == 1 && alive _object) then { _proxyCars = position _object nearObjects ["Car",(6 + random 2)]; _proxyTanks = position _object nearObjects ["Tank",(6 + random 2)]; _proximity = _proxyCars + _proxyTanks; }; if (_pressureType == 0 && alive _object) then { _proxyCars = position _object nearObjects ["Car",(6 + random 2)]; _proxyTanks = position _object nearObjects ["Tank",(6 + random 2)]; _proxyMen = position _object nearObjects ["Man",(2 + random 2)]; _proximity = _proxyMen + _proxyCars + _proxyTanks; }; if (count _proximity > 0) then { _detonate = true; _wait = false;}; if (damage _object != 0) then { _detonate = true; _wait = false; }; if (!alive _object) then { _wait = false }; if (_wait) then { sleep 3 }; }; if (_detonate) then { _rnd = random 1; _object say3D "IEDdetect_beep3"; sleep 0.2; _object say3D "IEDdetect_beep3"; sleep 0.2; _object say3D "IEDdetect_beep3"; sleep 0.33; _object say3D "IEDdetect_beep3"; sleep 0.33; _object say3D "IEDdetect_beep3"; sleep 1 + random 5; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _object) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _object) } else { "Bo_GBU12_LGB" createVehicle (getPos _object) }; }; if (_object in reezo_IED_detector_objects) then { reezo_IED_detector_objects = reezo_IED_detector_objects - [_object]; publicVariable "reezo_IED_detector_objects"; }; if (_object in reezo_IEDdetect_beepers) then { reezo_IEDdetect_beepers = reezo_IEDdetect_beepers - [_object]; publicVariable "reezo_IEDdetect_beepers"; }; if (reezo_IEDdetect_canFear == 1) then { reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = []; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; }; if (alive _object) then {deleteVehicle _object}; if (reezo_IEDdetect_debug) then { sleep 1; player globalChat "REEZO_IEDDETECT DEBUG: PROXIMITY COMPLETE"; sleep 1;}; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_soldier","_ambientGROUP","_objects","_vehicles","_proximityIED","_minNumber","_chance","_interval","_bomb","_IEDtype","_beep","_scanArea","_fearArea","_detArea","_typeRate","_enemySide","_rnd","_fate","_actualPos","_y","_k","_ambientRadius","_IEDskins","_posX","_posY","_posZ","_randomPos"]; if !(isServer) exitWith{}; waitUntil {reezo_IEDdetect_initComplete}; if (count _this != 6) exitWith{ hint "IEDDETECT_AMBIENTPROXYIEDS error: wrong parameters!" }; _center = _this select 0; _radius = _this select 1; _quantity = _this select 2; _chance = _this select 3; _beep = _this select 4; _typeRate = _this select 5; _IEDskins = ["Land_IED_v1_PMC","Land_IED_v2_PMC","Land_IED_v3_PMC","Land_IED_v4_PMC"]; //CHECK HOW MANY ROADS ARE IN THE AREA _nearRoads = []; _goodSpots = []; _nearRoads = (getMarkerPos _center) nearRoads _radius; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT SCATTER: SPOTS ACQUIRED" }; //FIND SUITABLE SPOTS IN THE GIVEN AREA if (count _nearRoads > 0) then { for [{_y = 0},{_y < (count _nearRoads)},{_y = _y + 1}] do { _goodSpots = _goodSpots + [getPos (_nearRoads select _y)]; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT SCATTER: GOOD SPOT FOUND (ON ROAD)"; hintSilent Format["GOOD SPOT:\n%1\n\nPOSITION:\n%2",(_nearRoads select _y),(getPos (_nearRoads select _y))]; sleep 0.05; }; }; } else { for [{_y = 0},{_y < _quantity},{_y = _y + 1}] do { _segno = random 1; if (_segno < 0.5) then { _posX = random _radius } else { _posX = -1 * (random _radius) }; _segno = random 1; if (_segno < 0.5) then { _posY = random _radius } else { _posY = -1 * (random _radius) }; _posX = _posX + ((getMarkerPos _center) select 0); _posY = _posY + ((getMarkerPos _center) select 1); _posZ = (getMarkerPos _center) select 2; _randomPos = [_posX,_posY,_posZ]; _goodSpots = _goodSpots + [_randomPos]; if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT SCATTER: GOOD SPOT FOUND (NOT ON ROAD)"; hintSilent Format["GOOD SPOT:\n\nPOSITION:\n%1",_randomPos]; sleep 0.05; }; }; }; _n = 0; // MAIN LOOP while { _n <= _quantity && count _goodSpots > 0} do { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT SCATTER: START MAIN LOOP" }; //RANDOMIZE BASED ON CHANCE _fate = random 100; if (_fate < _chance) then { //RANDOMIZE A GOOD POSITION, AN IED TYPE AND REMOVE THAT LOCATION FROM THE AVAILABLE SPOTS _IEDtype = _IEDskins select (floor (random (count _IEDskins))); _IEDpos = _goodSpots select (floor (random (count _goodSpots))); _goodSpots = _goodSpots - [_IEDpos]; _n = _n + 1; //RANDOMIZE POSITION AROUND THE GOOD SPOT FOUND _rndX = 5.5 + random 1.5; _rndY = 5.5 + random 1.5; _segno = random 1; if (_segno < 0.5) then { _rndX = -1 * _rndX }; _segno = random 1; if (_segno < 0.5) then { _rndY = -1 * _rndY }; _IEDpos = [(_IEDpos select 0) + _rndX, (_IEDpos select 1) + _rndY, (_IEDpos select 2)]; _proximityIED = createVehicle [_IEDtype, _IEDpos, [], 0, "NONE"]; _proximityIED setDir (random 360); _rnd = random 100; if (_rnd < _typeRate) then { nul0 = [_proximityIED,_beep,0] execVM "common\server\IEDdetect\IEDdetect_proximity.sqf"; } else { nul0 = [_proximityIED,_beep,1] execVM "common\server\IEDdetect\IEDdetect_proximity.sqf"; }; if (reezo_IEDdetect_debug) then { hintSilent Format["IEDTYPE:\n%1\n\nIEDPOS:\n%2",_IEDtype,_IEDpos]; _soldier globalChat "DEBUG IEDDETECT SCATTER: PROXIMITY IED SPAWNED"; _debugProxyName = Format["DEBUG_PROXY_MARKER_%1",_n]; _debugMRK1 = createMarkerLocal[_debugProxyName,position _proximityIED]; _debugMRK1 setMarkerShapeLocal "ICON"; _debugMRK1 setMarkerTypeLocal "DOT"; _debugMRK1 setMarkerTextLocal "DEBUG: Proximity IED Scatter"; sleep 0.05; }; }; //END IF }; //END MAIN LOOP // EXIT if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT SCATTER: SCRIPT COMPLETE"; sleep 1; }; if (true) exitWith{};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_object","_id","_IED","_EOD","_rnd","_y","_nearstuff","_EMP"]; _object = _this select 0; _EOD = _this select 1; _id = _this select 2; _IED = (_this select 3) select 0; _EMP = true; if (!local _EOD) exitWith {}; playsound "IEDdetect_click"; sleep 0.2; _nearstuff = getPos reezo_IEDdetect_activeIED nearObjects 50; // TOO CLOSE for [{_y = 0},{_y < (count _nearstuff)},{_y = _y + 1}] do { if (side (_nearstuff select _y) == side reezo_IEDdetect_activeEOD) then { waitUntil {!dialog}; cutRsc ["IEDdetect_05", "PLAIN", 0]; playsound "IEDdetect_beep2"; _EMP = false; }; }; // TOO FAR if ((reezo_IEDdetect_activeEOD distance reezo_IEDdetect_activeIED) > 150) then { waitUntil {!dialog}; cutRsc ["IEDdetect_06", "PLAIN", 0]; playsound "IEDdetect_beep2"; _EMP = false; }; if (_EMP) then { _object removeAction _id }; if (alive reezo_IEDdetect_activeIED && _EMP) then { waitUntil {!dialog}; cutRsc ["IEDdetect_04", "PLAIN", 0]; playsound "IEDdetect_wave"; sleep 2.5; sleep random 1.5; _rnd = random 1; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _IED) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _IED) } else { "Bo_GBU12_LGB" createVehicle (getPos _IED)}; Reezo_IED_detector_objects = Reezo_IED_detector_objects - [reezo_IEDdetect_activeIED]; publicVariable "Reezo_IED_detector_objects"; deleteVehicle reezo_IEDdetect_activeIED; reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = []; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; }; if (reezo_IEDdetect_debug) then { player globalChat "IEDDETECT_DEBUG: REMOTEDET COMPLETE" }; if (true) exitWith {};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// //INIT if (!isServer) exitWith{}; private ["_triggerman","_scanDistance","_triggerDistance","_IEDhost","_enemySide","_armed","_nearUnits","_nearStuff","_nearTargets","_nearMen","_nearCars","_nearTanks","_nearTargetsMen","_nearTargetsCars","_nearTargetsTanks","_IED","_soldier","_y","_rnd","_trigGROUP","_posX","_posY","_escape"]; if (count _this != 6) exitWith{ hint "IEDdetect_triggerman error: wrong parameters!" }; waitUntil {reezo_IEDdetect_initComplete}; _triggerman = _this select 0; _IEDhost = _this select 1; _beep = _this select 2; _scanDistance = _this select 3; _triggerDistance = _this select 4; _enemySide = _this select 5; _armed = 0; _fearing = 0; _nearUnits = []; _nearTargets = []; _victimsCount = 0; //ATTACH BOMB TO OBJECT nul0 = [_IEDhost,_beep] execVM "common\server\IEDdetect\IEDdetect_attach.sqf"; waitUntil {_IEDhost in reezo_IEDdetect_hostIEDs}; //GET THE ACTUAL IED AND STORE IT INTO A VARIABLE _nearStuff = (getPos _IEDhost) nearObjects ["Explosive",10]; for [{_y = 0},{_y < (count _nearStuff)},{_y = _y + 1}] do { if ((_nearStuff select _y) in reezo_IEDdetect_attachedIEDs) then { _IED = _nearStuff select _y; }; }; //MAIN LOOP while {_armed != 2} do { //SEARCH FOR POTENTIAL VICTIMS AND DECIDE WHETHER TO TRIGGER THE BOMB OR NOT _nearTargetsMen = (getPos _IED) nearObjects ["Man",_triggerDistance]; _nearTargetsCars = (getPos _IED) nearObjects ["Car",_triggerDistance]; _nearTargetsTanks = (getPos _IED) nearObjects ["Tank",_triggerDistance]; _nearTargets = _nearTargetsMen + _nearTargetsCars + _nearTargetsTanks; _victimsCount = 0; for [{_y = 0},{_y < (count _nearTargets)},{_y = _y + 1}] do { _victim = _nearTargets select _y; if (side _victim == _enemySide && _triggerman knowsAbout _victim > 0.22) then { _victimsCount = _victimsCount + 1; }; }; _rnd = random 10; if (_rnd < _victimsCount) then { _armed = 1; _triggerman addRating -1000; reezo_IEDdetect_canFear = 1; publicVariable "reezo_IEDdetect_canFear"; if (reezo_IEDdetect_debug) then {_soldier globalChat "IEDDETECT_CARBOMB DEBUG: Armed"; sleep 1;}; }; //SEARCH FOR UNITS THAT CAN INSTILL FEAR IN THE TRIGGERMAN if (_armed == 1) then { _nearMen = (getPos _triggerman) nearObjects ["Man",_scanDistance]; _nearCars = (getPos _triggerman) nearObjects ["Car",_scanDistance]; _nearTanks = (getPos _triggerman) nearObjects ["Tank",_scanDistance]; _nearUnits = _nearMen + _nearCars + _nearTanks; for [{_y = 0},{_y < (count _nearUnits)},{_y = _y + 1}] do { _soldier = _nearUnits select _y; if (side _soldier == _enemySide) then { _fearing = 1; nul0 = [_soldier,_triggerman] execVM "common\server\IEDdetect\IEDdetect_cursorTarget.sqf"; } else { _fearing = 0; }; }; sleep 3; }; //CHECK FOR THE EFFECTS OF FEAR AND CAUSE IT IN THE TRIGGERMAN BY PAUSING THIS SCRIPT while {_fearing == 1 && alive _triggerman && reezo_IEDdetect_cursorTarget > -1 && reezo_IEDdetect_canFear == 1} do { sleep 1 }; //DURING THE FEAR PHASE, THE TRIGGERMAN OR THE BOMB MIGHT HAVE BEEN NEUTRALIZED if (!alive _IED OR !(_IED in reezo_IED_detector_objects) OR !alive _triggerman) then { _armed = 2; if (reezo_IEDdetect_debug) then { _soldier globalChat "IEDDETECT_CARBOMB DEBUG: armed=2"; sleep 1; }; }; //WITH NO FEAR, ALIVE AND READY, THE TRIGGERMAN DETONATES HIS IED if (_armed == 1 && _IED in reezo_IED_detector_objects && alive _triggerman && reezo_IEDdetect_cursorTarget < 1) then { _triggerman playmove "AmovPercMstpSsurWnonDnon"; _triggerman disableAI "ANIM"; _triggerman disableAI "MOVE"; sleep 0.1; _triggerman say "akbar"; sleep 1.4; //ONE LAST CHECK FOR THE REQUISITES TO MEET BEFORE EXPLOSION if (alive _triggerman && alive _IED && damage _triggerman < 0.8) then { _rnd = random 1; if (_rnd < 0.4) then { "B_30mm_HE" createVehicle (getPos _IEDhost) }; if (_rnd > 0.6) then { "Sh_125_HE" createVehicle (getPos _IEDhost) } else { "Bo_GBU12_LGB" createVehicle (getPos _IEDhost)}; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; _armed = 2; }; }; if (_armed != 2) then { sleep 3 }; }; //CLEAN UP IF IED IS NO LONGER PRESENT Reezo_IED_detector_objects = Reezo_IED_detector_objects - [_IED]; publicVariable "Reezo_IED_detector_objects"; reezo_IEDdetect_attachedIEDs = reezo_IEDdetect_attachedIEDs - [_IED]; publicVariable "reezo_IEDdetect_attachedIEDs"; reezo_IEDdetect_hostIEDs = reezo_IEDdetect_hostIEDs - [_IEDhost]; publicVariable "reezo_IEDdetect_hostIEDs"; deleteVehicle _IED; reezo_IEDdetect_cursorTarget = 0; publicVariable "reezo_IEDdetect_cursorTarget"; reezo_IEDdetect_Targeters = reezo_IEDdetect_Targeters - [_soldier]; publicVariable "reezo_IEDdetect_Targeters"; reezo_IEDdetect_canFear = 0; publicVariable "reezo_IEDdetect_canFear"; if (reezo_IEDdetect_debug) then { _soldier globalChat "IEDDETECT_CARBOMB DEBUG: IED Cleared from array"; sleep 1; }; //RANDOMIZE TRIGGERMAN REACTION IF HE IS STILL ALIVE _rnd = random 100; if (damage _triggerman < 0.9 && _rnd >= 25) then { _triggerman enableAI "ANIM"; _triggerman enableAI "MOVE"; _trigGROUP = createGroup EAST; [_triggerman] join _trigGROUP; _triggerman addRating -1000; if (_rnd >= 75) then { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_TRIGGERMAN FIGHTING" }; _triggerman addWeapon "AK_47_M"; _triggerman addMagazine "30Rnd_762x39_AK47"; _triggerman addMagazine "30Rnd_762x39_AK47"; _triggerman setCombatMode "RED"; _triggerman setBehaviour "COMBAT"; doGetout _triggerman; _triggerman setSkill (random 0.8); //_triggerman doTarget _soldier; //_triggerman doFire _soldier; }; if (_rnd > 0.25 && _rnd <= 0.75) then { if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_TRIGGERMAN ESCAPING" }; _posX = 250 + random 250; _poxY = 250 + random 250; _segno = random 1; if (_segno < 0.5) then { _posX = -1 * _posX }; _segno = random 1; if (_segno < 0.5) then { _posX = -1 * _posY }; _escape = [_posX,_posY]; _trigGROUP addWaypoint [_escape, 0]; [_trigGROUP, 0] setWaypointType "MOVE"; [_trigGROUP, 0] setWaypointSpeed "FULL"; [_trigGROUP, 0] setWaypointBehaviour "AWARE"; }; }; //FINALLY GET THE FUCK OUT OF THIS SCRIPT if (reezo_IEDdetect_debug) then { _soldier globalChat "DEBUG IEDDETECT_TRIGGERMAN COMPLETE" }; if (true) exitWith{};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// if (!isServer) exitWith{}; private ["_center","_area","_civilians","_chance","_IEDtype","_beep","_scanArea","_fearArea","_detArea","_suicideRate","_enemySide","_vehicles","_triggerman","_rnd","_nearCars","_bomb"]; if (count _this != 9) exitWith{ hint "IEDdetect_triggerman_spawn error: wrong parameters!" }; waitUntil {reezo_IEDdetect_initComplete}; _name = _this select 0; _center = getPos _name; _area = (((triggerArea _name) select 0) + ((triggerArea _name) select 1) / 2); _chance = _this select 1; _IEDtype = _this select 2; _beep = _this select 3; _scanArea = _this select 4; _fearArea = _this select 5; _detArea = _this select 6; _suicideRate = _this select 7; _enemySide = _this select 8; if (reezo_IEDdetect_debug) then { player globalChat "DEBUG IEDDETECT_TRIGGERMAN_SPAWN: BEGIN SCRIPT" }; _rnd = random 100; if (_rnd > _chance) exitWith{}; _civilians = []; _nearPeople = _center nearObjects ["Man",_area]; for [{_y = 0},{_y < (count _nearPeople)},{_y = _y + 1}] do { if (side (_nearPeople select _y) == CIVILIAN) then { _civilians = _civilians + [_nearPeople select _y]; }; }; _triggerman = (_civilians select (floor (random (count _civilians)))); if (reezo_IEDdetect_debug) then { player globalChat "DEBUG IEDDETECT_TRIGGERMAN_SPAWN: TRIGGERMAN FOUND" }; _rnd = random 100; _nearCars = (getPos _triggerman) nearObjects [_IEDtype,_scanArea]; _vehicles = []; if (_rnd < _suicideRate && count _nearCars > 0) then { for [{_y = 0},{_y < (count _nearCars)},{_y = _y + 1}] do { if !(side (_nearCars select _y) == _enemySide) then { if (isNull driver (_nearCars select _y) && !(isEngineOn (_nearCars select _y))) then { _vehicles = _vehicles + [_nearCars select _y]; }; }; }; _bomb = (_vehicles select (floor (random (count _vehicles)))); if (reezo_IEDdetect_debug) then { player globalChat "DEBUG IEDDETECT_TRIGGERMAN_SPAWN: BOMB IS OBJECT" }; } else { _bomb = _triggerman; if (reezo_IEDdetect_debug) then { player globalChat "DEBUG IEDDETECT_TRIGGERMAN_SPAWN: BOMB IS TRIGGERMAN" }; }; nul0 = [_triggerman,_bomb,_beep,_fearArea,_detArea,_enemySide] execVM "common\server\IEDdetect\IEDdetect_triggerman.sqf"; if (reezo_IEDdetect_debug) then { player globalChat "IEDDETECT_TRIGGERMAN_SPAWN COMPLETE" }; if (true) exitWith{};////////////////////////////////////////////////////////////////// // Function file for Armed Assault // Created by: Reezo of SR5 Tactical - www.sr5tactical.net // IED Detection and Disposal Scripts ////////////////////////////////////////////////////////////////// // INIT private ["_detector","_range","_interval","_skill","_fakeRatio","_vehicle","_near","_nearCount","_IEDmarker","_rnd","_posX","_posY","_sign","_y","_h","_iedMarkename","_createvarname","_numberMarker","_action_reezo_IEDdetect_remoteDet","_action_reezo_IEDdetect_manualDefuse","_lapse","_nearHosts","_thisHost","_action_reezo_IEDdetect_detach","_fakeIED"]; _detector = _this select 0; _range = _this select 1; _interval = _this select 2; _skill = _this select 3; _fakeRatio = _this select 4; _vehicle = _this select 5; if !(local _detector) exitWith {}; if (damage _vehicle > 0.75) exitWith{}; waitUntil {reezo_IEDdetect_initComplete}; reezo_IEDdetect_EODs = reezo_IEDdetect_EODs + [_detector]; publicVariable "reezo_IEDdetect_EODs"; waitUntil {!dialog}; cutRsc ["IEDdetect_13", "PLAIN", 0]; playsound "IEDdetect_beep2"; // MAIN SCAN LOOP while {alive _detector && alive _vehicle && driver _vehicle == _detector} do { if (reezo_IEDdetect_debug) then { player globalChat "NOW RUNNING: MAIN SCAN LOOP" }; _detector = driver _vehicle; _fakeIED = 0; if !(_detector in reezo_IEDdetect_EODs && driver _vehicle == _detector) then { reezo_IEDdetect_EODs = reezo_IEDdetect_EODs + [_detector]; publicVariable "reezo_IEDdetect_EODs"; }; while {count reezo_IED_detector_objects == 0} do { sleep (_interval * 2) }; if (reezo_IEDdetect_busy == 0) then { _near = (getPos _vehicle) nearObjects (_range - ((speed _vehicle) * 1.25)); _nearCount = count _near; if (_nearCount > 50) then {_nearCount = 50}; // CASE 1. FAKE IED DETECTED (radio interferences or whatever gizmo might trigger it) _rnd = random 100; if (_rnd < _fakeRatio && reezo_IEDdetect_busy == 0 && _nearCount > 5 && _detector == driver _vehicle) then { if (reezo_IEDdetect_debug) then { player globalChat "NOW RUNNING: FAKE IED CODE" }; // Script goes busy reezo_IEDdetect_busy = 1; publicVariable "reezo_IEDdetect_busy"; _fakeIED = 1; // ACQUIRE IED AND BROADCAST, adding it to the "Found IEDs" array reezo_IEDdetect_activeIED = _near select (floor (random _nearCount)); publicVariable "reezo_IEDdetect_activeIED"; reezo_IEDdetect_activeEOD = _detector; publicVariable "reezo_IEDdetect_activeEOD"; // Scanner notification (Scanning..) waitUntil {!dialog}; cutRsc ["IEDdetect_01", "PLAIN", 0]; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; sleep 2; //MARKER PLACEMENT (approximate) deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; sleep 0.1; _rnd = random _range; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posX = (getPos (_detector) select 0) + _rnd; _rnd = random _range; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posY = (getPos (_detector) select 1) + _rnd; // GENERATE NAME NOT IN USE GLOBALLY _iedMarkename = "REEZOIED"; _numberMarker = 0; if (isnil ("REEZOIED")) then {_iedMarkename="REEZOIED"} else { _createvarname = true; while {_createvarname} do { _iedMarkename = format["REEZOIED_%1",_numberMarker]; if (isnil ("_iedMarkename")) then { _createvarname = false; } else { _numberMarker = _numberMarker+ 1; }; }; }; _IEDmarker = createMarkerLocal[_iedMarkename,[_posX,_posY]]; _IEDmarker setMarkerShape "ICON"; _IEDmarker setMarkerType "WARNING"; _IEDmarker setMarkerColor "colorRed"; _IEDmarker setMarkerText "IED Approx. Position"; _IEDmarker setMarkerSize [.50, .50]; // Report the fake IED waitUntil {!dialog}; cutRsc ["IEDdetect_02", "PLAIN", 0]; playsound "IEDdetect_beep2"; sleep 15 + floor (random 90); // After some time..declare the IED fake waitUntil {!dialog}; cutRsc ["IEDdetect_07", "PLAIN", 0]; playsound "IEDdetect_beep2"; // Cleaning deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; }; if (_fakeIED == 0 && _detector == driver _vehicle && alive _detector) then { for [{_y = 0},{_y < _nearCount},{_y = _y + 1}] do { // CASE 2. REAL IED DETECTED if ((_near select _y) in reezo_IED_detector_objects && _detector == driver _vehicle) then { if (reezo_IEDdetect_debug) then { player globalChat "NOW RUNNING: REAL IED CODE" }; sleep 1; // Script goes busy reezo_IEDdetect_busy = 1; publicVariable "reezo_IEDdetect_busy"; // ACQUIRE IED AND BROADCAST, adding it to the "Found IEDs" array reezo_IEDdetect_activeIED = _near select _y; publicVariable "reezo_IEDdetect_activeIED"; reezo_IEDdetect_activeEOD = _detector; publicVariable "reezo_IEDdetect_activeEOD"; if (reezo_IEDdetect_debug) then { hint Format["Array:\n\n%1\n\nActiveIED:\n\n%2\n\nActiveEOD:\n\n%3",reezo_IED_detector_objects,reezo_IEDdetect_activeIED, reezo_IEDdetect_activeEOD]; sleep 1; }; // Scanner notification (Scanning..) waitUntil {!dialog}; cutRsc ["IEDdetect_01", "PLAIN", 0]; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; playsound "IEDdetect_beep"; sleep 1; sleep 2; //MARKER PLACEMENT (approximate) deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; sleep 0.1; _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posX = (getPos (reezo_IEDdetect_activeIED) select 0) + _rnd; _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posY = (getPos (reezo_IEDdetect_activeIED) select 1) + _rnd; // GENERATE NAME NOT IN USE GLOBALLY _iedMarkename = "REEZOIED"; _numberMarker = 0; if (isnil ("REEZOIED")) then {_iedMarkename="REEZOIED"} else { _createvarname = true; while {_createvarname} do { _iedMarkename = format["REEZOIED_%1",_numberMarker]; if (isnil ("_iedMarkename")) then { _createvarname = false; } else { _numberMarker = _numberMarker+ 1; }; }; }; _IEDmarker = createMarkerLocal[_iedMarkename,[_posX,_posY]]; _IEDmarker setMarkerShape "ICON"; _IEDmarker setMarkerType "WARNING"; _IEDmarker setMarkerColor "colorRed"; _IEDmarker setMarkerText "IED Approx. Position"; _IEDmarker setMarkerSize [.50, .50]; // Notify the IED found, add disarm actions waitUntil {!dialog}; cutRsc ["IEDdetect_02", "PLAIN", 0]; playsound "IEDdetect_beep2"; reezo_IEDdetect_activeIED removeAction _action_reezo_IEDdetect_manualDefuse; _action_reezo_IEDdetect_manualDefuse = reezo_IEDdetect_activeIED addAction [''+"Defuse Bomb"+'', "common\server\IEDdetect\IEDdetect_manualDefuse.sqf", [], 0, false, true, "",""]; //check if IED is attached to something and if it is, place a Detach action on it if (reezo_IEDdetect_activeIED in reezo_IEDdetect_attachedIEDs) then { _nearHosts = ((getPos reezo_IEDdetect_activeIED) nearObjects 3) - [reezo_IEDdetect_activeIED]; for [{_h= 0},{_h < (count _nearhosts)},{_h = _h + 1}] do { _thisHost = _nearHosts select _h; if (_thisHost in reezo_IEDdetect_hostIEDs) then { _action_reezo_IEDdetect_detach = _thisHost addAction [''+"Detach IED"+'', "common\server\IEDdetect\IEDdetect_detach.sqf", [reezo_IEDdetect_activeIED], 0, false, true, "",""]; }; }; }; // Remote Det possibility _rnd = random 100; if (_rnd < _skill) then { sleep 4; waitUntil {!dialog}; cutRsc ["IEDdetect_03", "PLAIN", 0]; playsound "IEDdetect_beep2"; _vehicle removeAction _action_reezo_IEDdetect_remoteDet; _action_reezo_IEDdetect_remoteDet = _vehicle addAction [''+"Remotely Detonate Bomb"+'', "common\server\IEDdetect\IEDdetect_remoteDet.sqf", [reezo_IEDdetect_activeIED], 0, false, true, "",""]; }; }; // END IF // MAIN WAIT LOOP _lapse = 1; while { _detector == driver _vehicle && reezo_IEDdetect_busy == 1 && _lapse < 36 && alive reezo_IEDdetect_activeIED && alive reezo_IEDdetect_activeEOD && _vehicle distance reezo_IEDdetect_activeEOD < 300} do { // update IED marker if it moved in the meantime if (speed reezo_IEDdetect_activeIED != 0) then { _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posX = (getPos (reezo_IEDdetect_activeIED) select 0) + _rnd; _rnd = random 5; _sign = random 1; if (_sign < 0.5) then { _rnd = -1 * _rnd }; _posY = (getPos (reezo_IEDdetect_activeIED) select 1) + _rnd; _iedMarkename setMarkerPos [_posX, _posY]; }; sleep 5; _lapse = _lapse + 1; }; if (!alive _vehicle OR !alive reezo_IEDdetect_activeIED OR _detector != driver _vehicle) then { reezo_IEDdetect_activeIED removeAction _action_reezo_IEDdetect_manualDefuse; _vehicle removeAction _action_reezo_IEDdetect_remoteDet; }; deleteMarkerLocal "REEZOIED"; deleteMarkerLocal _iedMarkename; //reezo_IEDdetect_activeIED = _detector; //publicVariable "reezo_IEDdetect_activeIED"; //reezo_IEDdetect_activeEOD = _detector; //publicVariable "reezo_IEDdetect_activeEOD"; }; // END FOR }; //END IF FAKEIED == 0 reezo_IEDdetect_busy = 0; publicVariable "reezo_IEDdetect_busy"; reezo_IEDdetect_EODs = reezo_IEDdetect_EODs - [_detector]; publicVariable "reezo_IEDdetect_EODs"; }; // END IF IEDDETECT_BUSY == 0 sleep _interval; }; // END WHILE reezo_IEDdetect_busy = 0; publicVariable "reezo_IEDdetect_busy"; reezo_IEDdetect_EODs = reezo_IEDdetect_EODs - [_detector]; publicVariable "reezo_IEDdetect_EODs"; if (reezo_IEDdetect_debug) then { player globalChat "reezo_IEDDETECT DEBUG: IEDDETECT_VEHICLE.SQF COMPLETE" }; if (true) exitWith {};OggS5)vorbisDwOggS5b}<-vorbisXiph.Org libVorbis I 20040629vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4sd ||`w jN60qem6mg7 F;,֢#SC9\^pz=/F)I*a W)ܗAw\ٌ W(± Qt a:vK_*rlp6R8P@//&3m>cHxN؀(=gde`U/#H#'5 $FbjXz@ӓPI^LP_YYnRx"6ngMWue5_T8oiϺAuz5JH&"ޑg "&fFTwv"Ieu~ڊg.sTH g} 9z Yle"m99WIW]5\J ߗ28F܇X#4 2>?.>!mUB}w8,'QpȻCYlD2ˤ1"V 2r42> >"R֐É,?[IU s.QQY diȫo/?h 6FrYpEP]Vb6KG@1nr=|QKrU4zK!9v{/Nic[Zǜ]Xs k ԢN:z3(%9e;omL}A"?ۆ-ZAA-G~;OuM dW辰w{FP[Nx]@Ee `7F W9=*&Ix:Mi(/l`[d]8 :Mm ~[A3IfIQ8C:">#0{ Ge;ejg$ NcJ`tjɁo! Gɧk;@TO:8?1v;NUǎĠ) u2 ;HE mHWo1wޯj* EԾڨ3c.)jY1i~4J[iP# Q\|CFtT"ڢ#X`@ZV$ld揵|I6 J~@k8tſ0Zyyw} wC *oW@8^= 5K\ VZH]ۡEgNW.uxYu+r R%a–>9К3K,*$wN/W_ -!릢*Ҁ;27ԖHJ 46J< XqC]o _el^WYĔDX:3߰ lkQᯕVJk{Il0YouT%@DWgCX2L`)q &] ksЀ) aZPJ~%F ս&UFV5Nf/~הQMV0j@#}(x,L/V3ZP 镥1ی"w1d{FjDNJܲcltQ5֡jr\SBh%(ec]n%N6>As6&J&R؄(ЇMRH+ WPq 0̓([e[Y`' Gev3wU\Fl&t$=+(pѯ0@Aݝop}>w{ERtGJB  Sڃ494gO*v@r@:V\ޟZdjtWkqPz{8P qe.98no+UN/R`60-u ,fP( YSŃQ JQPR gb(Xɪ 6R)lީlbٸV;rY g(T8\o,g%&=Q6zvfhd+͜##A<ءK`n/5(^X%TNw޺TF`Kd&6=9xVJ `5[jH_LXJ6-ȥQhe{MRWo%5lxΩ"dKQ!w8,20jZ7V`5#/ܰFǶ8lR?' C8dK@VVǍyℰh7u%fӿ*"O='(鼑N$yS\3N-yՓ? 95vmL=s+񑛞Fx<`zVHZs\4"mI|FC(UؾK(l,8v~}(?+*$g-G"p&0kO1*+QR@Ew/R! 5+O@E"n$dX;~{-v>_(9$9Ľmh$Jr0y)^|@ .͟|QQﯤ;: 22 gy^rKP1K%~S1rB:,z)XX/s61Šuu<%%u@^`=Xy*k|1HQFϧ|[56@žyc WEySd 1 y`"yIx`Vf*_?.JXKf2| BK1E @iQ78Nc4iƽl(zL&ЃvM+a@iq2XQ aΦs;V@6E棌T0Jϩb6RBA9+Y> FH͈&muQe((s+1[Zbhf*I{5gCݮgay>xv\OE_DpXH.x+yI:uA$?4 BP#*fwV CZ&82 SEaK^LG2\Љ"vtv/mb8/IA v z<.-FVD,G[k\X5`f-cH8zx. `>\ vݕ{?66HL.`@`q˽IQ~Q$ڕVPcСtmh/ t~m n;QU/;`YHC)JuuD-L5?X}!Ipo85 aÇ;?^&^ C$^źvn&WY- Y7*=*CIOggS@5ux¿ިeJIzκ zG(A" @ႅdx\FMMԜv2eQPO EFR.rP|O pɌ7fRa,kCxUӼ\ac6d8,@G _oQq+dPܩ6*[ oH}(k]b *l֞8  ^X%9rw;_5-.V>$qMA᱃YsЗ_^MFxT#4"#:]ܐBd߇`S!_@9ꁍwOk) gG"L͍(") VLw䖵ԋ?0Tplm֞4X7<W,2GJH"LEDhcX l(J)=tR-*28\% % *0x4#KD98ɔ1Q 8n1 }vać@лNR"tV1! lcAʙK8\l w G3>LcajFNJeI |@:0Vlc:׫z|xvj۔)9-$L $ *-*wP:SW%-UV$*5V_Nɞ p9ni|{ڷM$ ]?%L@[j0F)-tVd5aiFx&Y91 Y>DGƬCR@oSE0 @/%Z=;> *zɦ!C悀◚:nvwQF)OU"LAZ l L> CoL|XE ue ZsL4A3{ q؀NM 'Hv:dc{P++L g9CE@XPٟσMJ^ѳmھ;;S@P%XՉ+q1MsxbN(R 1JħA*܊\҆Umc@gz?-fe 4噯5<Ty5N}X7_/B KJK%(^ƯcA82Nx5`+}mQ;Ew6\w "8S^dEIy=&y%eY#@9ﶟDDp0h]q:j&}˅Z6֦r+X9p?]:u:!i'p`%wf_l{i./1ЀE.^fƶa(3e [3{UVHV=.EIF~u mGz ƎO{Sl50ݢj A6zT!rPb[@m20HP-[:24]تҎ!׳K3iT^gOGan? d]s%v6+@f$Cg!:hD7ꖚnjl=%fx+j5*00@*$U4|Tnb2"}73HJk,R`zn2EO5SsP{spAyJʤ~ɏ\CKwZ hA1-҂˂o%x;?'%:k+Phi8p4xK)I ?l?Ju%؏FyOdE &U]sخ 6CY꬛D[V8nǸ 8GB5:qV!{:m?z677r%Fǡ547E/F[tO:Ve$ V*@:Xg/_b =|I iss_wOj߼2S9I jj G\0!+ѳh@ru= J*̐J`3] &_--sDΰe[f\kq0eu Uؙ* F5H,)wܺU:KHWJ]삁ˬ`@6ō;wv=i$1/9ĄG\%Mb՚P@2Ʈ͡6WdʘNaYr҈ 3D?mǐf+Oc( 3[qk\@j鐘 hPjfXsC%;xĘ*ӭ}NZ2$.Xq$!w1m w9XrΏ`!8Hh(0>*C)FLI\+C$,d?^$c>/d+ZxHT6TDDPK牓߽<f`4 GGJlxO/I-! J1-բCO(1X)ZXVi}HXjRczxкp+#eD~TfsU%_}8Qa!wTѯ6y]+ ֙0 A$?$92?OF'`Hʹ?k/r|yؓWy^gZ£1u pWV-E(vYX/IqD5*1sN0j>wx@cuz 1NjL²_ (5|%I6iFnV㨯VGwE<̋^ kZ76?76Z=سNHd:O) ʅ0*f/ }ǮQ pcښ#B,*=0anEs8\xag{!S{0)$A';74ѳ*u/w D m74h˴s8PN[fټ8(Q~>/܍Y'6wXJQBC+՚C_??{da,f$W}fEYMe`elH"fFUVB88nNý٠p a$~;|.7.F{9 +6C~"7N{;wn{z |Z|^Yo&"4PܳdV# Ϋvxܰ9|O 죳5jvj #v2 5H.97HGYQCx 7.Uس[-‘G;;u዗>襛'=ɴM:PNX@/7|XEJ磠ajSH䦔κ)3oN3r{ާeFtwNBʤ[OuVr~|#d3} 6qWD/RhImG[1+K0(obm}3Lyz`|Ã::NԬ꙳39PrM3m.YuEbg nZrܻk@|=jlA9h Ro/#Զly/p|5zV`4*.Jr4L@q|Ivew2>74 K8OggS15uHʴgW?#?:.&~R2E*=^z`Rq N-D1%e#Պ#t=HZy2O_겵C3b*ւGѷZj=0ݯN0kx r8b`5㵖N#O[E}a%;Z?2<+؉\VM/ ~6nd]%!@$@Eg`'huhg4Wht+} [ip)S7_}}݁[g󙛍k-mhL.o(&uJ f TEnpyZ@6.(Y:}.AZikuvR8Sy,0}-q%j!B;.6-wT 0TYt%v>fH=C9*6wvᴭR%JħOeo~"8YELO@ǀ3PY0<'Kύ Y+0pr `m-)%@-eM,&l|Gsv* ƷE@[i@VE<& kU@^L_EOggSrvmvorbisDqOggSr`e-vorbisXiph.Org libVorbis I 20040629vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS(r gEBik LPJUE^rINOFxv#>^^,@-ZZn1f>6fJeΆX䆝PIJx!)]ge TC/UE0NsĠng{vW,TPLƬO6jibXmT-vv-mjAa jXZѦYZi,,ˁ 2wW󂭔 l%e DʄRf.GʲQLj=,W&b  U\XՀed0,e@Dd93 leY ,LֺXVYB,R'Y %}9 vuPwo\G2ABFO;ޯ6c/y&bfmYAww&N%[E5/A@ĶB)ύ?Ļc=k6cѱy$~\-C ?~g_?]rC~0?'6%zUw 9$}mx4lP7Q(3iҮj4vHZ3{]z\`RT -ŧ_IJp1ƮTff\pnըfQeʯ(e}l[ZP.y.q/ֹAyK?gcyK?g@p[*,3Qd1UUE!=(J _U/XݗoQ7[K@ B\ :6_yk*8DV'zYOR)ce?>ߤ8rK, ZzY`NUg\5VX\fffXY=b0Eϟ?^9N?F8xPˌXÜ@gBaY_]>+r]e ҍ(bꄴŲ @Q Ci VޖmċE`KXUJlrleybY9b rҲY>ˊe+qxÖ?ћu"srHU%h&2U U }mҬdMtecgLXWK J { CO%'=(Ku6xFUd3x%cUNۿ5 Kɾ1pr'0*HD1QUr ,j V^@+s׍?cz k 3Fwg б'qͱX /s1uw ;8q2PU&o*51(II9)etŎC| ]~~{7%Q :D6DLлQH?l6tYn oc[θnQu͹sExL10SOwꝽyzY s:?Kp7<4:?=hK{Y1\s8Lmwf&} EM9n*5D)f~I'F`ߦhzwo[ov]s5}^[jVicz 0 _Q",icXeޮ~A^9g!2~n na  XfԎcnwqz' [:jD` d:齃.zW9I]y_gfj2bSYk+ cǯݎ*L;iƔe T%{ejjkMx5Uy+`s{OggSx֭vorbisDwOggSx65-vorbisXiph.Org libVorbis I 20040629vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4sMڽa_ M`zͻ!ɯ릔!M2 0 H 5~S>=pdkI.n|DJey&i}7TιF@2Qhؠ3&?fz5ȏs{dC >vYM̍= \Uҋ5Ғ&W=c-sS# [|'V*1w_-ŶUmxuQAdX?w͗49U*l~LMaaLB },/ `O$ӊ╃ӿHOL'gUIMJ5"\)H 6?|=ACp\Q­.F\М <{BBQ8.r~Yn4!~O՟i%H+宓KAnj/8s9hl @Iv%{ jX.Uf2Bnn/ aS >Ņf@)` -@B8O~nÌ/hmozh\ݻ)L-5 P8( PC ,5RmY_x7D@BP4[wRu}agOv%oV!p2~h 5`"Fu=ux}6B^ *AHiJO= )'\(EәÞ;گ5C]sGfeyeYÿ8Ăb!?wa~>{vJ))6u-o_ݼzl=SXBgᴃ tU@+KTjN[ieYE ƒ|nruwt#(6Pg]GXCŎ.fG\-# A]=f>QM`)2C{ј_Af@.w;-|g O"(eIK(q@MVSDb+Ƃb~[n7MSMh0֫r[UHS [qA$)Y A&t|J[0+ξKyWpH|Xu_]s-ȯh3ѬMtg jtD=S*JEQ|#"߳  p6'$ԩi_ c4qpxE_ c4qpxE_ c4qpxE_ c4qpxE C[6nq]㦹{T~reZ4.vr "/#3si2MgZ?Cu}VD %Ki2L? J/hW*[dg:\/G:Y\9mWhiYw =XN7 {I)=FWm5W teT2kV0Y-.-XvBkQ@TQ3M̍I%HXJ t2д2k5vKxF,RwR\w5U #㢘5l/1_>Oъ-~CD SXk)fHy0$;cH}gto`{8NU<sƹ*f7=hwIOMoVg{kB]9tS"9Y@(Lb*jg>K1ZbVQP>тb=uXn;JG-8^dj!.QVa;T;10T*1e:2+֔.xՆZ7/w7İ4g_lݚ>ų.1fFIw `>@P>h-[.M_WoR'69:0C2Lzd}wb@NOw8=K1]AA@Z;EwwMJ Zl @(Ď X6?e:JWGto+.D~6s@P,wC}G--;i0iY\41?pO 1df_ X5p8_I~O",6v*tKB6%(7gm*L&eMm1Yw f\њJvV)c@ifkLV8!~г|i(oye]/ ZHϠzιs%@B nl]N{?> ^b̺6-v+ヾ9DYvy3XeKj/qVfeBVɓ#deeԚ'FV'H- b_s P@߮HE%~ 6;rz]T{I`t1l2._MOTQ"0&k+ܹ% R ٽʷwDq5|J(  HBH 0X %ΊQ ޮ0)so0@p^z_̱}?4Pvɗ@]90zϐB%@vz"L7yT}? Ivz6}H@  ~_ h @? |PHG! 2a-mFRޕKZ| _@IRPR̶PK&7hp:YV֟ /G`c&7Ф}.ow4-?ųl4zU$` p*~OY45?pmSym6IiAU_?@W @&e`(0$HB@y 9@$J"x` X$| / ܏kl@ ;){K(?J@Hd|KF".#17xևQH4#n(}b A(RtqH&b4 ~e/Jq @g ڡz=RpT/ulzW~\^.6G)) yGQ%M((:[aKJndK= DZpKA=8]_R8~Yys̄)]K\$WU(->Khb@,_, ̄ ]KTC# e@[`KL-Csu42dH.%{XY]K_$Cc(>L7cETbr 3Pg3ի]S=SB0/] lf̯g1P෡8 5\iJ.?;?\7le t%^@0@VLK;@JO{eY[-yCQu4;C9i`V6p`1o蔱~/f4߂dmzUf:<*\& EFQ@s Z:fk8eeS꼤 fOU :[+"D S20]OAkPZ)N&QΈ quyH7k'k=O6|2mtSM O^]Պ87WR7Y$FPP-bT7 ԫ*o-(Qv ޤއ}\$>f{̼Y)7]Hj`kWN@NxPtH"{T6o~p]2%&fVJ &mmޖFMEKSvxh .8h:|sQU/&HV,N 涼?K+?/I$JQ3gz=`ӿz*IZJB?PscLpsЙuϥ!LTpT@Nxy/Hs\\JxEBXs_J1֥-_N lǟ4AzѰ&LGOs0@nYba@6ҙo@i}V`~f[d2|lf< |}kV(a*8ڎ/X6g!6у`TY'1%'e>ӻY93c(5S$"e"dEܫ3C k4r;"<΁uT'jݛ &Q^ x%zk'j^rMw31~)EL|ěS9,jKi^xdN!hx10wk>U#OggSu}vorbisDwOggS|b -vorbisXiph.Org libVorbis I 20040629vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggSlr-"DVgutmlpm_tqncalgY[ZU\ggx-H~ [[ 7خ^q7 2hWb}`۞i308 MJI vդ˷30 }GؗՉa=mZL\XNjv +`  i'ˊ5,@d%_z6sHh#WtT ZGWPj@8CalZ"I@YQ",ZAX~RkYSj"=U@[}r$`}N !&C J$7z) U=,+K๣z9G}98>.$Lkos+๿gIOmwX=go o0Fk؊c>@r# 5_h^l6Sm߀#s~2&(6}1.{Xr^\ߴ}~b/Ͱz!I_W !~=Q=+EeߖO1BT};$F\ }r"AP7Y[o UFKu)*P(Z ldul7Z =Oh21Kwv@)P\b{@E$wKI%n^C_sMNz8;M4ɞ|.0:lώk>>rW{߭hrY8Jz&wOY̰,XV Ia"@eCfB0΂ M/{V\r^߳xپb(V[%% ǧ,vui [i+2Idzgۈ_֤׮B'] \2oBSj<_ղls^J{sFb罯p>/0y R>tdf+^s"~t@y.rޤxxQYjX`ӢYuJI/+0ڿ7Uơ1:dU Olg#7Ufnials^-g/O|=ؚ@Q_kCqҟ߶c,E`Q+?^zeHDnƃ]&ApiB"hpd~iGrޞ0V’hjd\ډb*KWjQawO_oqKu>KՎAR\}-׭+ߏP9<1p}.4\vi4\җۅ ~pdY %ͤj`h΂ @A4rW3H@ /<0Ri]BںIxw r3UTfKKf$bp=ߦ\Wd:`+EV@<4'|G"A!{4| |_23nzla5J)M[T͊csTq] Y?{?dTV̐d ma O$:Гz3t^ G//6U->]P;t Yryznw4:ld3}E AZ;f&y5aybDo-Zx?fNVMحAvXw/IoBvu !wtAq~mD6^QKoGƽ|(KkO1vQRd E92\uԝ1<vvGٟ|A 0bSA4;:ؽ4hnSA< Wsb^/5#E|:E9g]i2NL[xQ_30nΜAh&pX8+5 3^0C U-Gx?lV;@HT0cx׾ éQoG~"NglfLco((kt L).Ot[sY]S\9{)orAf1^$wWBiOc:@VH0c`z@[5r|)s?֬*XlH4Nr9ϲY[Ձ`7U{^e(fde:D-MCe24i咎Uљ܌osh\$c߭Rձazϟ%[ձШxh92Y4 affRݺKPke RM~_{GfH-<*oѹo34}$5Kul$qMԢ'av[z7WVGZ*u* '% )F0ݓB8;#igg.Yާ(~&~>{ݿ:.vG?maϯ Ek8n{|s\#h*H~lح'}"yNXFt>[wF1^do~ݗP%~0DE|gs?>xX\.,cze"^yTM_й.9E=$)tp'$ܔ0<02d.+Xu-fvm{w0ܟ,.wwXdD`, nEWDTP ~r_íK$˼}z#ߛJw8xXbG;"3S6 fhX>YvjZ aXa^$r@X{`6H? N/ kΓ=̬P5k]6ھVn<)H7Pls8Lf(%q&eLَG鮗/8<;s<X>+/-FG{Ϟo?woxU^[ZV30(B@1,+ tryx/[^֖ NL7=*kVg=4*{)2v0 ĈR= ^k`V??ܢMޞ4vɩ{$ax<вu1Ʒ?X |`)rj4 60 l, XwI $Ӆ;Wm'x RMڲPʰqobR,Yx8,(?w̶gɦv[~@f,lcti=0E'Y &rf:$[>ճ>ɇیXWg6Jce*Ȝj 4ג_H=)ml'I'gw{L٤k~|u4c||vcζsē2 遅f€Ha`a@(;``@8 ʝM(ח!m螵/d Ud2*ip5ʡkx_:69pl _^J.}ݻнɗsߦ@w+x1kܫ2֊^WR ~N+ "fOƗzs}v"$""sb_ngR"=9߿`Fгb@X( 7fs3*~zgCj./u:'I-vXýGE>zi+G{AA, h`|iOΑ7K(qM!c4h^Ges,'82 qpח З`/ߖ~6i**P2WwO]<I]Ww 2^L9#˪~=|~Zf. ?]w3CQG, ٓro{uSNϨLsbpxy%N_H+ 34ec|mw-p%KY< >Y]27T sΕo%KZ!T4)ׇ\s"S gtGm`V|&ގtUv8䈞r&d3UXʥ5Z<+͆/* ؐd]7 [6M.¹bnHh  { ںp.q5" Y(Z+#4_/_\Jl+Pz}glW0ݝ-ra.B"!\AO)Vd׸Bi W0(GZqRL\JgsFjh+0FѱN9h'񟈋~is/S3/ai9ڦq n`TF =L'tZyKYCcߪP%8:ԽE֮u .`cu@ 1؈]\9\SwM$4._<*|l.g~ Bph2\9OfJQ索% "(,D4Ǥ0Xh#U Ԁ*>Fm\\SB5k3 gW@ Mk:@5ꅑ7f=J-*]a=)г1 ; laX`5 ƶ Xn!҇A_}+7$%U{<cge!F >WNHىJz8{IV.I"J@|u~N=~eq/%Z50W(mhkntƙq hgw=0iw| %keͱj TLcNt7uUY}N`ﳑ5ˋe <Oaߖ313b7ȑR*AAXVEs`1x=mY^e]e-Wd,vt*Dϟ?.U*8aItZv>dO{.eѫ}LtV+Z90۟-]$ y7lGqdj5,pK eO1+ F 81d\" ݧl-QᛦѬ/>,6} =!ٖ :m:R੏ݷ9;mx9M(=&JC9lda/#1ˑ#Bgψn|iQ}Fd$u%)MPugN<ޚn-' Cǥ l/T?R~śMfhJ[;fϱdػ2͘8ݒw}:М/~ZW )7'7n9-\.6Vgf~5N nT<u3{?z߱(wfK~S :[t~l$*~J]2J1O?OzI(_z߾p>OVm:ߖڿ=_UeJ;!1a^R^ =|o<=y}9 Ggeuz87 &4Y,Fg2CYh9zýK _i3"Ң泯nX_Gǒ[쾴ȯ:wQ[)T_eݾp{ͮu!+Ue5קO~SBui[Ψ<+3o,۵#oO]g(߉ݿ 1ܒo_E!X!i^-[wXtv?/~ms7TlDo+W'X <-[Ĵi __{?H#TK7{{F!8lḦ2f4(E )B ) TވލwB >s+~cu cGD>45FbX+{֜d 6Z*d3t:2; B"B=ųą6(}gΝK"U~Js:@CUjJ:x3ꖝɇCӟ<QYmYHbkIŦ+oV ?n*q^FD@(ވ\)2G!T$l pJX vqatz+ra$\bZkNZie.U>Hu?"Ap|dmr}5e~aα\:s)ƓNLhbsI9} 9y~N G?ˏNvNۃYYM^צPW]g\]Mt,[d9AQ?Ʀ@4jJ d͢-3[pamPnu0@Ċe& isG_NiK[Op5<#>jvA;2#h8z iN|=</]ՆSz|dD6~v䒫U'kkD)P[oN۶>kmh.Num3ǟ~<\vQնZh==迼߹Ou+< `tbjcY 5]igHYEp jX?SϯǺՌ< j/vƺnۭ5 Sk yO\E YD2ܲ?+**(U+֤H DVa|(wcY\+ĜD l랴{bE$Ʋ8:H (R @.L>͢w ")zG .@0:a2~ !c $!';Zz/_eC`B8 ,:cy. 'F={zF'mjZvF~R?&CwWŗXd2ɸ(֡GتeTBUl 4]mӷzy7to-+vrc-[2"ERHͯADِ2B@Ě 2=S6+b/r7{6E[i^. ]P=qz'Mi(Æ6,t%mU#k ed 5U$EfbN8kGCTMXWZ ` 'xB?N54!J~$j7[r[,)U7+m2-mzY7 %ő!`-Xo:b9 ÌԟW 3?,P$ q]0? U+;A7Z/Ynm̃l&b!r  D8ސ뵓ר <\* |4ڑqyKdJ{-C'] vL5ga}#^.Ĕj_)H씹2]jqy~ٟ_?sZ7+R]> Y?W~!3?Qϳ&6zӏ/mg)XϘ|ۋ!>$wy;lٗAx>J ÒML YkTOggS@Rlr(imk\hgYqmdSdrm^\klo_c_Z_^bNaZ_kmoqdciq|Zݲ@p?5芤gzB ];aKV5#uwf'0;$d)Q)wq (Pi$p<.mEf(spK$1 @s(z;JM {o Pt<}\54cPeE(9 ſyO70,lFbڲ[Y*SjXջ1yԾgp~f]%tZ!ww^2UK1?4yym4NFsF Rfkj)Cr& S^#'j%7ӕ_CD*V`a+4>s =HkVpYULzEL:)x:8'ئ=Wt@}[Gz{SB5 m#UA$k,UUc @F%U/^SGTł*8q)zбހTtD7u1 $.wj*Z3I_RҩҎ,譨˳MH}Jh{f>COk.*"H^ >|'R0}^'M' : _X3rW>ݎ<w=W8gAIy$YX?#`(q)淗.3bf6"n~~,/`ӇׇEE*$F*T]uDqK/@g!֚`e3Y6h#2r玏blD:gveӼy; ˀ VD:^_Q{Fjbˎ^'f  \,=Asm.U>(d+ol2UᲩU__ |e@ 9@,}$Z2qfx3Њ ?qȵ? v*4j"Ui(j0],-X,?;1[z XWkuߎHVT\Rl5FYW&ױvӫHNR=@I+W!37h1vR4X`")]'G5aP,,`1(dj)hz^ոH Hrzy(,oEB 6aJ" pyƕq!u&Fb fj(a;fp  tK23ZGVZk{Ms/Pv_oa? ˱O'(kU3-Q<UX^nA TvwR ?K];׹$/@ڒ!!<@Đ3Fog]_0X8DgBX]fShPDNK.|*{&:>Ihߴhmf غC ]rCjdh/,OJEkb$3gggLVɱ:q?)1G'zr`%=e+UIB+oC J\idnk~470U:8eV(6zP?*@wH@bD>CWӹȝ6pqi0[G] ~^&I'| ll ;:yQֵ'Bu1[uTڲڗ9 h k7zB4V ň+q! 5TFi/6.7W`| 0($J.{4$ιkSh4A5+t0ꖫgRo Ɗjpk{4)Yh a ,hzpy6@VD> O;ɬ5ww\WNXsť y& ~.Y񝟉-J8iwB\UVFbGTF)4: gUH"$5{M>t/Pd;V(-hL@. t:؀D+X8@Z'T:屯Y{z>-XeC>bH"Z/5+Vٿ=F} dNe WZ5@IъUk d֭L62Le#oYng~Ut/0{Հ1b9(n)@Y쑓O\[z4"j&rf+9T]<2w;c2Ek/",}?>F`{"iE[+Q4¢#FuQ5sLULyV`6b@X*D[BaL,@q?@*H[oRqrgEj,0^LC2mFSc FE rdVK^NkfzX3 P! TU€:Vsm$bҖQڸ60dmu{ D>wgvii\zf8DAE:䀔{4iH3[H13~JZ7FFufΰ- [T2˞AZK+rwy"۲Lch]2am̲1 iEQZj@V jI.#ܱ-Az[kцh s B4@Mq̬%} g}dZDaՁ|}Hv:æ=#[)LgPyU27 $|NHBן^g =~Dڒ]1A㠙!8Vwwͅ龕ޭʿ31pկ2kkvm+賞?"nJ >ϋ%{]6&ukA6xO/D`dm{%׺ZfX67ot*;H,ZޖV,Jc$"6ޞ+Z1LgKzj-Nã<ݘ=ZuCkP9EvInekD5>OJYEz̵̡*-FQԀW ʺélf*Z7bһۨE̩bDr1?ϼG ~^A̱?!Ġ*@,~.5=v77ߙDʭaas$L0ًWPk:xUfoB#(>?ׇr"\*"~oxXٸDgI$TJ0% (kGEvqJ/7mڎϟОO]n**f8X) *[,%Do pZ&@i2oƈ7²* Ǔ+mڰ: OggSqlrG#_kmot^X^CGIEXdcVR^e\XNVJV[`L2UϬLq]:fASx,kh4dwa܀qE:^&B=l %hMt PuTDBs?w0JiW3w^ I;`X9|tg2x44>ȢÁ VA:fn#t m\bC̽CzvbU^Km@2ak)HHL2w`74޶! ! w.H5-7DL.V{@3(`3DRY}|v1vNㅸ7  ˚@MWrb0AyH1E}k*IZ(0;Wcu̒Dx {]04 ՈmH48_.4J;-|[3A{$?9~4TI 뵦;7)k):nLcOF(H֕2}OA+sߍÅqYyߑ.`k4liv# ($$ HA$ew0 ϋܟ޴YGPm=}C7G@r0pvt8Y0ۼ-tOkx?몄t˵=L=Cӡϝ?uwD3Yo4T4̢rjU&PIKkc:?-odqq-~3;?Sb.pǘ)W:LO1Ӝ2  Е?#(˲\zmz\ѰW,p`N[ǧԭ)c43`Sz@7-L@ A"rh1 Ƽ޾r%"{JN^wC_ ""^|p+xm\7~vӏ9`&|ك0ζ$G$tUZ2nHE{ ^IqK>9{v)3?sk,֑,5sYFh܌%ϖr |nGHwvӈŪGU_aǁ1͌)|Srڊ-.at m]w|>s~2X[alY=4 X $6 ֱ ( e(+%lJMkxWeBs{  )cBCXBE-$VЄ:M>1/تo,F2p2X$2RzWO?{m 5!KG $sˆj(ԪڊJSʀg TmE}Pk5TBIz~j /Tl[4^8rwy h  >vpLQD1[>5EV+mg`u] 2aE Z uqIX~*=yϺU[PlJz/w6iQͯg z&B"fLO&HJ\6@؀^N 'ȓ;Ƕz}?Wl6G;6yq gQ[aJJԫW<͛܌**F%f1;o$ j=v-"vG@D\|i2wZ้JS tOe$ `q -E(TTȍ, &@o Khg?@5KKK5F 6YZhNȩp@[sg /vϬ@$gQ_d|q,5Nwn٠ؚY^jk6AzzP֡@X ̳ى\q6 u΍J͉wðA( }~LԔ8 xcM?\eGϺu޿0iR}0@2yYG6R$0=e2, *ZڲZ+08h,A'֫hM,*b:PEQT1$ *4Q>Y#ZAh$ӫbIBFCkjvO|[ 8Z~I$Zyհ-!X:84h&25o}E# 5t|*MQzA1H5QW%ے$E1NU0>%LhՔ#j"sB$ru9|DJd!oE\)ߔEK)O+k"Ub^.54.6hĵbYjyv,cHA :ITw-?,jڦk}< Mv +/H-L5 SHP@ BSYAɮ>n5dVk?a۫0͂'pwW|A6rMv.([(J5kP e ]uw-mݕ-+4:uO4:tiW׹C 7o T᜼Q $W౹-!xtVq ̱CK;sׇi=ЋPrC$2w~5-Lw~Ue}DBZ~9>=?C{U3BXfQEelih!x 2с _e=$6C7̧>OV>U^Vjա $@bvS ̏:S4"ou^@c}I^rx YC'S՝ahZC:B΋ꁺQ&}˯ܘzl  }i!yO "kij4"֥= &h%kVMUD,ѡS 8"KAZIicEe͏"]~,!04V.aӠ%gTl|42tX \w>sfh6r^Ʒ*VqTd]ɺ4V&ϞW7oڴ }(P|^ΰ][PF[R2Fa(VGeQqH."Gzy*8T?>aHeSM@2~ cPX>=nՊhZle"%DRiijɱnй6yk+x`=Q pH z[g-.ʪNo՛ʻLO~{T?>Q3eDb e}W=cU}[\f}hpPZ(=wq [q9bˬ"Hk٬`8,J}:Uz2n@T:C5 \t!,PG IҢȚjM  Xe I*RJ)⼹)B}$V\-r8Gڡ^/}B" @U⎔M\e"n49f5lhC 8 BŁeẢP^uEoQ+>|CW-7/6`Cz @SޙP4Jb'ͽ6L0fkfV* b`@3YUZREOggSlr Y^gc`vrptrtjnkos 5qNd9~VCׁ#l(KH2"E[+5p]ZLng%9ArkWU4(QI_<Y,':]/ 0!$H) -݀ 8 ՑTiIEO*_I< R(  @F_y{+U%6_Ѫ\c x.68Da0$4 *doRaObK1YXMܖ214wb36s3}4B%zhɀuZ2 Ō=3KQ[@FʉVd5X٨+.kBfK O+wd>z&O#;+'ZABhFY-UY2YGfwfy$0}׌+DtB(MuͨHLǛ&#,M|v˩~![:tR;sQnjٻaXڞmQc۶<O"ccE:l>mr)|n=: %OK+HؕE(=#;q:^.Ç' dQl:DZjDDxC$ˡOd](mk5ph_CoM=nE5]Ny:3(O?9ύ4Yn[Vloc/F-Ts++aPsKkm~\\h04n}NFruqQUdWVO>v>"UWO~Go$KGk' !+sd`i(覿Rzg3nKZձ:߬\iv }[,o>qul \2#ފ_,Or轎z::q \C䖊p}~KrD;CV} #|Nnۑr漧1>ξMZ-j4>:G{,: N}&v"Qso@i~x֋}S5͙ImCDž~Eb_oSe省{z Px ajvJln`{> ޜ6W{{o^I5I8ӏekou*ڹd~9æi43}69Xg"{#D5Z>u-Y5jSr݅ $-Ф<2{^e}IqQ6ntSozxϣXY/_5VU8U،&q1LU]L &]d5T߯{f9b9?\szk#:7MPfA;ﻦwL:> {!AJv+Gv a;1p=C.P^?"#1ݼ[r--S^#>g'&hfj$=/~=eXI[0=Ys;E>0HiVS2J8 5p`Ly@ 0D 9 M@j(ڃħ?B{GhMD/m_ l%@W`Xa,f~Ie.Dz_1M&աT`Ee$aWYXl;/0o 8ݼc5`m3OZXiLe9z8=j.OOgw{4TTT0P gv6gEGP% ,{2׋}=|93\ڲ8}:r|7LvvRF_32,$TϠyS=*L'.+ +~/![~8 j,5{Y@)\(rO3 MCTzX.5oџϟ4$dA$Hf&a^2{XLR/ eR[}8R̈L{<ϻdǒ&ٚQ&*6NgO<տ_0i̴{;-#͏e~r Io9Nm,Cۚ7'Xb}^!M2XnAfƂ( WS6<ZbeM0 40 LPTq$TͭJ$ k6U5 t!:VFY[nhHUxؽCH!{$cdU"e=I~ u3UT Ͼd^m)tv`L׳#B_5@y,B#yS^r~ū,&xtD@ 'ހADz @^ 8 Oౡe@ ҦxP;$ 8@@)切cl\}츱E@ <4A%?ZbFi=<И? fm_Q\Y~kWgV3x ~^o5f\\s (Y|P``kL=mv)W/zK ]NVj8g%]Kɧ*}_o)Odrʍ攌;&n,~'D06ISP82 /bVi6K&O.[!<KrtQٌ:i TuSgaؓ5J9AX!?}Bt?{T3[;g4eG$L&E9BT0FH|9 Y\+bs^G_G0@&}Uq?.OCCn8q, 8&@f idU PYh&k^hB:Jr܈[bm665 >׎O#y,ZAta_\3w>T/⎧u7!0qcn0G* N`&3yAC"v@s<^T;)8:JL^ݳv}8o\&;{zdY֟=}bݦi)Yǡ*r)}sU֠s]SNm/m/jc6oͱVNVCK667x>A X4M(= 9P3H-{!Q?׫F!{EbmϰkȤf]cw1C3R?ļ2\Νo ;D*r>jHh fqOy 'aμ'GʗүfKX.bNI6%HA3 #1XP[ctYVx66$d"=0<6oOggSlrŒ*QYUcW^a.8I6H0҈umi{>`!d|.~^գ >M5 V*&}<.B=RQ#*DAJmnP 6ꪪ`˗|u\z7շq:`;mo?vhX=~]; ~1xLuͺvn(=?v"Κ?g[oO =vwo>~X >faڂhe-7p4s~XԄhQ0L/SuZ-bz,:<(!aY_IQ`qdDY 0uUq0C}|eMBʧ;ǘ9K# Cߘ,Qop=5 y;Ѵ =. lF,9n4EUA( (|4Ȕ@[L]g-S `1^Jj\\o'j&1z2ܟ/. :lП??X@67YPkGtWW`00$Isvb|j!/'xؕ. vØR(Z%VO/:[,͏;?{%ߤGhrNIPuie" 6 @:94vg 2^̔4јӲŘ)iڬm2PRxNiP䪆Z;+6Iq\F"#'KM)ٷC}xoY A+d@Qi֠b "//^O_Y眈i2wD\ߟ^FGdi&+ ! D9~@JmGANLgQ,@|pBi ,V4 * J6_AEɔހԗ++gc} gW{M^ PJH)_=@!:;=b%9Sy[JSnG0njW 1Z`%-HqdZ3Go[~de޾輮_r|&&i<_\|5D/]12NvBŽR?jW@s S!Hp` 1 UQeކĪ 6b *VrVLo0,Xn,FDv0(VSn~aZ`wY)XlvsÏ'1~q͓  y|ͽ>Ii 99 ,@ 4 QaPKE)0Ӕxd  >[Sq9Eoh0^n+jk P9A+: cejk$d:]U !A'@323- }!#hM5bzmA `A!Wh&޽.mUygDΜ؞rmz[*JB:箨P:3Ĵ!IΏшj3f\TGQd۔*FAթam%(M==+D)Q0G0i$mxH ɞU]Izct =ʓKa]Cއc^Ζ/|~CojSuK,~U Lò<[,B!p|0E@7@ `a>[GY߇7!)]}Q/R&H7i>`*` J\Hh<QD`I+((P %9jucV-@8˽/!#dm#6Z|d'*b@@MEbZz,ƨ`%0us]L/ZQ}Ig1vؘj @RT66A($dpwhUɒZRR pYdE Y9v<* 15y;+ZX4~?Ss34p sJӝoP3gA[Xb`:Q(d1 p`^KN#Y/c/'>H}4T.:D&G6z&ky 4H0(L hqv{8:09f2t]{ |14]9_} BIb K ;XOI*}gTZxAoBoq.2᥼7uOBtlS96͸5\?1Z CԂ"&Pb!A2J$n؉H.bXX&kj! AP5D(hf${իSm,:{D} n 7Dq&@`5&!"31'Kl? 67$,2`=4(@wG,0_- @30k\$;[i1?ӇZyz1~xp0qű^23o`HO%$, L/HX 3Q=/rX~l,x;۵7g~T<"Vx;[#2 UETuԷo^=ov%g^M>^d8]Łr5>ޘ`E;8h"^ - i b N"DiUIֹ<6YQ4 ./pK9$4@dx@GtzIjiJJ_}K݂`C#/o@zrCWZX:6aE5GO%ioӊ2{XdP~⯭U]ϯ-8WвJB .w" ~kfLwl!kH|?7To6 35`kEK.OEGuH@ &i5cU C0 2a ^ mM0߯Mg+=Key?p&zսם4lzPaz2!*xbET)ՠ`00P[狸P~<<beyh$+PK X@Eo@a<{A^LZJ%9P㻙,Uwy> Pj7›,wNI bc\N˲` &zktwru0XJ3g*RR@E8 ̊a=˥#b&zWƧ"GGޅօ@/7XefV6J)03rl0VJ[bێm+tfYRcu85KlEx2t%x N^F5Af@n"jX Zq},+X,AH֭Ԃl=O%{Y8 >?mhVCA+H[A0"  {)ZI<')LӚEbX"K u@׋+1pDl;[NO*)b?@M 1Q.t|:$V],&XdUR3Qm/+KvahDehk4SԚEZ9MZ Ha yrZwlWfXn=8Vѹb@֩bXnŊ#׭ ?)/ў?HHf>#O~iXB >|df]rbw7I>tWjU+bE+ M|9yTP a F06OggS@lr `-a][]i_U[`]W_]\[[^cd_XTJLW\GTNVSUIHKPHRVVY]eiI|^X0iIX)QE>A_^EAfMjEu. J oHZIr%1{dMZ2\E+_z'9X9 *5޼<`u Hme%RR uQL6E,UfjWWܪ fMW.q_L]Vhd 59)%-I B7n"Rz EI%RDap@XlT+VCw͢X3%̬?F&0 %Fs "u"b867 "e;m,JWZ BA: RVZiS)%yvUmkNb- eE)8q* R|̢>@&/X )՜5n^{PG'Wj,hjA--mb!Z(KH_[+˕V{,fNQfN%_$R57?YwvӭZ9E\ۊV1XcR*^ ˺DM2OGsvU{-OjBK/[5͵t$2ɍBQG̟wzq*xJWv2+6r^Y!jfQMf󞏶D|m}JcWhj^k —>8HVӊ*{'(6E!8}v,^ `.bKELY-^`>-cJ3E%1&'WoDDO*.z#^BZ:V< d& !4eF2p+4J`#H''o(_õkwk-ʨ*Ftj% h PEEH@ɔITa k6j_x@j٧k,9~wuPMV#>:cI.׮Q^jAŲKysP6Q}]=f!2 xQsqF~Ǡ=1{F`0 Quڈ`FDED=+ 8~G2-u/PQ= P s>x<@v]CO#LVZبXʕ'/87E@<bEqӊ3eb j R9m ZoX Uk07/eWO4tzd5 @{aMyQSF+,lbc կ~{">*bzyL 09vPPQM|fnLUFLPi%Y%`5Ff5"gx|vmuU1(,%7ROFH$ξ/sd]YKeRF&,CiB3HEӧOHĂʫVBG+!b_H cI*㬺3Ɨ̎Ex;q A|7D_SjeYO[*x"5AС-EPq$HxE`a}1h%Y_W)Ԯ@2J:2y%#?~Г= z5b̌9R)5`QK7Fvl"QBS@žbHc)F| (=߱,+18i[!r/k0dyWnGt(~pV3@(ld[S캒:el l 2X,a[D^XR&IĎZ)t&F]Z)D~,p 9nw<{KRꫣ!k6X`E_05EC$Ӽ}1Ekcps]>[6]?S)"V$=9}ޤ]UQ5JE3.R$¢? x ow+D_I~Z[ .Ak5 tPoqw/MxĞ׍lۯ`^R d#ǶХA~;.oj?Lt]D$5G`Xc6a *I=wx; {.je@i(r2#{l0PWy^K%FՊ(*hX|էUk;W]VDlEӅh]Pk\&k_nGl`=8` !AUlAYvuyߋ8ZkC@8TKR5w`fՌ za6LiJ uLfNC<II'ez SX*kEE(*QBꓼ-EG.|bmbwE#>Rmr %u5#Aqn]MX"+Qܾz](JĒZy}3=4<&P`T*C:KD R?º ʘarkbf7QMZH5d_UX7 ŋ8ں}Q$[l( z.S*]6 F撗U@;, i!gG- TǨN@*ۖD Ԛx]?IQ=ҿVKbIO!]4{X "-CEn[zU@r7̒Ŕui,u @~RYrh s 暨EuH8QhPvl\tQD\v]1K)bqOߝOutg +:d:ڊT5UYU$48jTU4z!ok (X]}ݿʩ=ݕ<˺w`IfN!/Ɲ`@d-QCӜ۵̋@ "Y`K"3"E`z뭟טȟq:5rNFbA#kncE HM5Kt7|*i[NH瓩D=A?40.@AXXsS >9^//7 [>o$#`!DQ alM@( +*1&y 啯x_ޯ{27.<=v=Kn(os{!'e =D-.9(%˶,U982ەX.iM-l* ӻZSOggSlr 4QW!stoOXZNBjkIOLQMIOaUSDRST` Y4>UQ Lr}7}'> 8- e" P!F%BvK( D5_bɶ|^0;`§@~$5P F>|8J;0đ~%W/^쁐Eg>^w2pn hVSdY28pH ΀^ /pwl#ö2Y`5ELkHͪzQӌKQ@T-8,"F j9FӀ%}U֓[2DZ%`[@ĺENV<$P5뎣 @. b@APX ^5=5y8S#fsFۖ~q)GOX06REuT@d0uL`#8֡W_Wo~rhq7Ql[qjFEOBqw'yw;bjb%= ۳׎ hkr oAvJ{;a:s\5nʡ?{Sy*r6\Xw)eҁZE 0y1ġ2$ CfKTgM F4U@J1R j3g`b@ C6U  2"t88BJ8 gXPҪTW%04 *ɥ_q S|ja.rrwG|l~|Ժ9/s/ޛ t4zh̙X\3oAs/6!]T.WjzPKc>(:vhƢ"JihGBZTI]b#FݗJ7FaL>T]Zxmj|sK ű[W!lݐoJ P8K 3%)rĄ*1f* EѣGΚUSl"* 5k )R$ԗ@ P@Lf""D*,,[ =VU¡WWH}, `J­Mlό4e;@WH0@pK`Jtap=hM_ߴpJ~b2Ywr tW,BvAQEF&.5rXtݔbC=֠z OKd_;fn>V#ʈ"QkB[|0\}8@TktAZm~F}F\Lj{昤- n`1EEEȁ4=׿j5UQl!UAE4T8p(5-%,iK^@TUxM}|vYe=^H*$):.$" &'Ng׹Nz։f{fpwu\MW/u(*J$NTJ6U)bkWO *1Qb`Z-jڪ) 'F|z~O%2٥ժhkVTiPe b!B @ 9rȀB!P2:PhBX(KP ZEmB |T`!X,l$bP,.A,޹pzbDX/}z1siMzJ\0Ϳ:\HiY5׿ty@zLEZ  00 @=mdյPX3l0IrX}Gr(V1n57@І Q, * U4ލy Tj1 *(;o|~6ò7Q2B!|m,gDq&R (@V:y eF2RD62XSf&Q,P)%J  0GWui[0(1@|]Ɩ1> Ex JtI.>p\ex̱ 8D(uv!" 8ԯ{|q1] Em Vmb T6ELT hjN]nWUq]ԒjacXfVASQz~rc2RH lђFPALVX!!c yRh `#Ђ"\ `r($7ݤZ#BhEDQ#bnqRP'b0Yeb-7l¦| ĩ%[v6Rp`"Q'j3D((SQ.'=9:+u[`™lg&AvơBEDX#VMf+?-VX|ƽ _VꨧߤO,[fb-qgPy4 ,JCqBVϛ{5ChTPBv r- A0O)ᲔR4MNE]G5bQ40XPӊu+&NZFNyM -k!,, oܯ 1xc" V2Y1"5KIfjiR]%U \Ao!:|o[\ t@"9 cZ@[0E Fű"N* P䭵7tnYѶ^*n~}Y/@%4?(2 @|kRa O jXB  hh&B4oE;, &}kc+o]!6yUСT) @S$1ANi+&Bl8K X`=i$Ia~ % lD@3i@J ̚^vfsanadiSVt˹ 6Q ӝ+aJq"Z^$h [PF& (,]۾f7fV< [W4= S QE[A VPNhK# '@nS<٬-:Rd]O 2 /AKV:* :M]SJ@m 8lZfag;1+l=@eŒ02#'wEաVfhQ4@A`"u$^ dRgeWR g߸YЈ hxĴ)>iD-V =T}!+GFv[r,cF̆)R~JmDVFo?! D j 3?:)`>ǁ-ZkQZт,]_"5(qĊE]{26 ٍ6K01k |z_GN3b߃@fR|dm3xKqb9N;lR7z5.Y`G=Nj.RppPS}H $Xy26`Xf4?p/p^:1L`ŮQeRZzlt#iWhƶQt,L6`Z6|>-f=Qj. Pdަlpկ'baP.4b [iafNf<\y8E^QF!튛`a@ ȑo20J0MW(P`Ni{>TS[&! $Q $:*Fp033%8 OggS@ lr -١ ijhjZaXVPdynOPXfpgilXggfr'׉@; R=0]8Lj׉6d, n}ߙ$'es:eed9`*▪t+;Z Y ;%Z`pVVlK 41BR0Ra:dd~[R7[J1# ꫛCuZn+"8fB)&Rh\j="i0ܢ!d^C\kBAha͓! O$WEh?[1*F$anzwe9!LJz. JP5#lkjEgAa VAC}AߦxI-jně*b^L5H'?+.i W[k9DR6v*تU[ ]^V3A:9`P b3͊o,BΤ{ME|/f] &I+' & 2Vƻ3')8 ~ j51 gva`|YɊVL$k +oMs$BB_,RiA1ҷ|ծҬpEqlHqU\@zq${ *~vqZ`eKZѸiEiqRUUy:Eb·Fl1==|h ^rh$ x}? E`cU|Xv1ۧ][ue3O_}|*F]x" |nvo~࢕tEhkCl?iыvGcEVDMm=r3VvF> R)G ?`AY)Ee~)?RvB>bSlw%Zq6ޯ}{vG_n[jxEM@gA9>@i=S/a@F3ruVvCX)8˵5v+Yk%*-ɽ,lE|>JkK?R'=w2#1jVժ.zF1lwxe |ӵho<ǹ7[ܲmT֩cuHՏϿ}u&Fbm)ʃQ@2,UWֲ?*:L@5D@JUR,8͍]QErp>c~нƍNȾ^l>\zHNJ rq-J<sS $ p*Sg t2OH~UBMʴcxOJWJ>[h*EPDlHMsOi(d\?%t-%]YX*oywϲ~#$͂lY:Vsײn碠C2":i Ib]/}yj@40{em1L;dpEpέg*XC{(e >w)h)AP'YzUx }`AZSDa\qfb.0uňxȲR d:wtkF. ).O"{?}bR <\|bd=bJF(k ]Ȥ8EȊJG1D>wnu37 4&ֺ,+C UF5^_mрPX(1 LIDA`*hmb T>TUtuMk275kj#g(P@tP4Ԇ`@Ѭc,)LL-X]ZkXD3غtK + PY[idVy>*{Mky:CgWq*-~H^Zn59u`+崎VO#mQ2d 9p85+LRKoif>Y${CHRmh!_bI>C 1ÐiBKo{51"pYw{gKQEa/5tZI̾eeu'|俢늤CKK&HHƙV>k.fYE}IoOz \= ++iWA$je}bGxǺ TVwr}aΫ(_A}>&г >wSiVU׭ ܚiSo赌\#k Cbh3fH^5 PgWA:dJ1ӘS`D 'H4K`XMtEi9OTn2nA ",l EN@Ig}f>_jkv4'O hѻuk' nP髼PN9Ӭ YRZo\5.0X -A_Ť$w&ahNbCCZo#Pq>L41"ާ sr r (WzZ5UUG,@͈`9{P͜TBw02ya7A) i7w]T;`4LCf~NA4rDh5*,+K\;]Xi\mE Т]*lesb~}<=hځ3DB|܉~$q 3y^`]W_rW0'^2Z*K9{+V{i+Ϟ!+k2iwM.}g[m뫹.FXnd;pʾz2o8i$\bɛx{󫶉*]Ttu֮CܺWQF\63.jH};$kR/O 30m,קpOc%W4!D8>Jm` TZIwݙgpDY2jݰqLI 4OggS'lr AQJ*YVaYZX\]cg``^[WXe^b^^Z]YXVRSSXSZ^dnefbmedB59__"R8J yK { w.u_ƛ*7 eڛu$eILHqD$EKuRd4D :_ E/*9$ z3aO j„~OZ%D1 l6u%7޼u z ; Z?^[1 aF:XڈE l6ɴŚԦA=\Bnm{41 4(fx=!d1zVa @tD8: 6iQ&%3xϿY]0P(` aZdAn5ז2twmhmZ"""`@+6n0@̙v՞s Ti"'s'>m=ܝ4T]nLA(V4Vm1J1ЌǗ;Q,jJ~҈Dp?>NH$XRs]B}6|#m*x拏Q~("}T-ZUTk44*aJ %mG.d[+4}v}ʯ#`׽V[ժ(W]EUA,Zk?tVww#5pkOb|s?9Kcd bA "̅Ֆ6Xxb[t"š(T8HѠۜ!͔`rdVKOy/ZHc o!OUHc PdhV$7 [~?Ư X#Ful;XgZbW+jN=Kh2IϪkX2%dx<_AҍZ[we!Ϝ=`{/#~ED|XyG[8 @Hu7w!S8 3pQ!N Bz UhUT=.n^ykk^kĥ~N4< Iޓol^_-KQ_ 4vL"F3.Xݸ1ҳ?۫oןޖT#Oj׮n]  r]W~uΘ`,E%_|DwJ)lz;*gam|Ăc4 h &\wyT5>>=WW]:& VMO;^FSc1Ux%\jD6vĈ@di=kV !`' P{ 2F@J OyonHn9`ǚ_7K" y:/8`adQRDⵦ5`t]`l@DdFwMg$Yy݉.I@dt HP'=X9|^MqO[X[_k2'BO},wCrayFw9  d/5`MS?P\ NME _TG6^S,Q :贄fFoh7F NE~ulމ :/w@aT-s f)/WyT,cA&f `w` `lFr6lFm+gXS$Bw/MH"Hpc tH_Tx diC;n&X+!f) TBKg^f6$dcQZ;Dp'S~lz薿z_ >O^ε]r{\c` J*ƞDç?1s2 yG"ȹCcCcv=A;\LYPuzŋkUD}s˞4[ Xɯf$:)L\cO^rN1)w>'ba)6??>$UXEQ^VTѩ6Vk [!#:&{"х,~|bia~̋YQc֐"*ijs^G[.jHk]QMzEQЉg<㩼FsеȢDOlF}m. neD @g Q]bۀ߽E>ɵ:-RDUj՚*xY hE"uHu'@4>ÆccC]%pƼHex Z!!| ?EcOz'ғ3S% 0)E]L;2o$3Nk,ӹQe}e015VEpZ|NsږX %n?=ٌfmQTP HëgP5T&ҭ*@FdX5,6eT8B%ܜ()47vH3w??}5St]h <4"8*U:PEN]DHҖV )F30m [\!?,4gM 5DykQ0jQ.˼Zg_lͼiZV{xpF+^vwJ|ow-m4wH BK @JGMg9.Yl2^df*Fg<m'" ?y//RI3&xqT1Ʈ\:BeR3O>9ez@,𲛮oP(byx'߆O"\/@)9q2隣oqNVMNQ Q2}A!W5-T5dRxq?j^K( eh~4 ]sv <6A5T52c{Q;kt\ܸ[_/"k$\^=6[P(q[ahBɰD_=we(Rlb(. гH' "e8WJժ%j!ED.ED+ * , DNwoPg""5 R_+;d?y=Rk^ e7}DV8صuҐ ̵'v+gъɚdY@[DNw-4 O:-yZ4ɝ9+N4Zkl2@.7~iav۔.~m23d[D  M9 fd>w.t`V { Ik"MKJ5'/CG>ev_+-Z((@c,/@U: c6|CA[C3%YNӷMmT@E|5~+b['bnZ9V?&d[PX0dv~I6%&z@TuhIB5vYi' b8^x;}:} 10xx`  J VluO ê0h*  _L 6LDJQ @"ڢq*qL"^٨[t)$kQ00Di=(zB?_u#0U#dNȿjD0I}"@"g@A֨-'QrX (:7iNz<|n?룷4\46>y2\kkp%AnBHk%T%x͎C! X]lyjQ 5 @8N>%?5{Zjג3<ko? @<'PAπ]te9:EPj` )P@CxM |Jf4|OhLF>i$Xd55¥ zM>'[C&hO^g5vݾȸ؎>C |JW۝Eg4 ;{_$Xd[VF8-]ǫ"&z֫vѤob:ê7ݺJ: Vb1FRY]_oߪkRp pt'M}U8U! @h%¸ au@L4F(ǗYpzAlVQCzN;Qg{NX?]vx!ӽt/SR`yt͕}:gy(j'{z6LzY.w4ԛ4":ٽtK_κknrƋ4<#~;LbU XY6<.\ JG$--D|J_Dtp]|7ڐv C6M@ɡvӬDŬX%|ٟ ~r1͏ @ d;R}z[i@"_.S=$CF&tzsL.M Xv eUvtz)oL+ VjO..%%a&'>>X J-F|]ןł B \J'䋁ӿt= p+f*oOfP9ڃ,mhobFb "R;:\5O#<|oVӦҿ[*  0,% 8<*M8THTeE6޴B`{߼ֶ3"eP"g%TVZVEXq6 Ss;xQ̪VW8'cw}7\gNE䬧̷0s<%LV1$%zLc'޸QʧZ7H(o)VF%1^1E A$i+SQ>kE QH5+ ^@ѪV)<oysGJ7郌+/i H9=[&6&&@}-i6>7bUdb91 ?WwU)ոd)P/dSОXY)?Dz;J*y[c'if$̥L$ aP<UXƿ}@z_ R=R~7C[ ,D E6@Z1"GT IZD5'W[Uîli]SM:6(t( ]j?)qU=[;ڣ!Ez@& Y25ʮ(ZA<Z9IP1ZwM4`*zBOQu2U>rj/n@J=@VL[ h.xֻމKQ߫e;)NP-H ^ R)X]AjƿN+S/61HqV-FeV,пKGWUu؁cp*OggS]lry6*VbfbWMR^]dod`^cSW_YieOT`^OYcaP]cY^d[gbVVW((A@XX&a~9fyAr*!GTf tny-RX3ȅHSO_%DFjTT"#c8p3_6sKk6Z3U .Zj`$`K|K % hFjv'DA? TEmhDv#HU.( jŢ(Cv'=n#w_f%lTxJt/E~V  W* pTݩom#ߔ"C$I͖{[eαE(K?ۉ=W/p]8`ցm /%.̤K0W{_#4̗|K֮ K1l<>s!M5:Ȝ}/ֱta.oӭ[#?|=K?Y&Β4Ig_r8 0000Xe*3Q(GaaaabYe`dvkaaa,˲,,˲-,˲`DQEQEeY.+>TOOuYjeYK8,2^G,ϟ`֭[nݺ5kweYeYʚhBv[-˲ukϟ?6nݺuŸ`rt5Q+-fV! ߧs^~d~:lD+f_o]^]E(EV x:^ZV\G|-" H'vXgh^;"vQR<^ZhdTшVq0rU9 yC r^ ^'izSmɧr`l%PͽSzuЌs~`_B1y6E{{w['ɢ= P0V Z}ׇc*TnkYCifj1O^_@; [2J9} ot?ue <`3N-E{KeR׺ㅝ]0g .T% j)^ԕaa% EQJUQE^0 qaalDj**#͛m63Ӡ`M0brPLQi #J SQ5(*jUU*w5UZ*Q.^6]ځ5IU8aS3Y9t9xQƍDθɷO45ߞCP:5}}.m"5 HY <"7$8YSNR:YCCiD,I } :mG! G⟚VTYezlM= @(T>;{NHEJ>dѯqZ E,*PꨋZfjV38 C H[L^BsT"G$(Lv4#7`~i}Mk-WdA(`e]׭i]|P"N2:BjRI1,>_܇⊇ P/=  nY_*6y DXݷ)X? i-,ZI-xG  6ϵ)G:+KՀK7wSIf/;d5^a})V1h2zx!,Uhj#`ז2 &wC0;/@B@X Px:5bD=vbd Zu(Ja Fz+vH6g} B$ 4~ _JI" ZRXM+Z9@U(cY#rKbd)X6rB2!ц*KpQƢ;[-Hduk|7pQUn n/i9UĮMΔ%Y다ڥΟ}aݎk;6׉>7-RQx M|^Izy!5ӬrkA7o>㝮*MTG@[4ЬQTZ,N@d13b(P29*YQS/T[9( Ta.~ş?˂C6\lO. U@^V~gXwE=2èE6T((>Qd8 +U|h.,k\FDg!n,^1M@@7VCS'|bIY|w8ǣwp~X@02GA1L2ZA൦0̆t-66ߓOQO+IBomal@X%SB \5}HTy75ؒdI?~IqsE#Z5UlH|]'$Jh#ZIk4 b뾞e -jH"}[rZ$j[Qqec؟TV9}QBꇻ e%vlk7m.RFÐՆ#8g];Dg kO!C>c"VWT`…쁎j:ԖZ'h *2ESj]`.}\%jUQSBWн6bs"0rrPEJ+PS*V)+UG] dK˪WDUEqxWͨrEͱzņB?Bt鑻*@L7yO=}:kh[Ԫ,Ũ,$H!e^"u="Wmmk4pbT^2_>ѣߎdD8[{oH]jj;Vs{aLLʐFwϾKb|~:[E_ |(fC +?AY[ǽ:ID2vӀi_aoзfmq|w'Lut Ɂίl @4s50 ~ K_Qnj囆KMA+Eէ-:w, ߋ =?A#ioC5 ozS?ؼb.3qMȰ_)˄H…MS&B7/Ÿ{ʔ$0̶:vӋS{1#JJ { Y'.\ݚjH}zlZ+5)k(5)v;"ISVxt,hS'QZa*d"jhX;!FQ4r[rZF]`VHSE1"F# 6dš5)b%S45YUlkiˍs5xRv )̄Ր\iFW!#lLzid;O\@0AY)cFhv-b%75mFȫnQ0CSMqM\gXv;K׻K/kW巷;3|ql`gz!)_c(V}w%dQ-`Zn5SUdVB(58e!As>Ya vu{=%т}?0Ws#gjo[AZ _&ԆdfV;;>zappAI? C@țsi9}j^wn<Φ:݀SgO%: bZ4#j-zfc3m,h%u0Ba ʮ5, W%:;blA +nF篢`FCeGɍ&/ 0ϻg K (!}J_Ao㜮+5.~%\Aπڸ6[DV?`Fm_2RR F^C/X`h0hHH# j/VJ7&'9"Hג8JGlQḿTĹeVB^ZO:V#!BȆLD VL]9jq94:UX(APFds do l@ؚ'nݧa;Ob}j _fMF^pUPV]hsTW=IPjr>>.zd,SsMڂ6r1|0x+ދ կ=]8nEGh|dX*Jf HN_굣9Ń>FȾ7>U7=7s}X|&c+fz.*)* Vlhd& =+x@wy"+=%BN2ѲN!H`h8H>. Z:SgF: Zv yfNWGGS/Q+Vן>~Ӵ۷[nff3-Irnw\܅rXk $1XFjDf@ 4(+XiwAэ+Z1294g]%njJn{] P2blv3?^L˴SKMM˫E:wQQ+FWhH y[ٶ!uᲗ$P9$0رq0)duW2:dXqˠHeG b (yn\ z~D%V!6=wy\DLܲ F0"bwXh1J|lE`NsPf;lGR,ݾJyEMYfL-D+ʹZ/YA%H sKW/jN8Td>pEK @ {dy sDЏ(@Ȅ&]VD+|dZ"qn Ċ?ms` sT+[2<=RZ(B)+T(˓ikx]l=en;Ӻ5[j=Uuq{`+ 2kIhiOrU(rQm>/}~=3NGs'+Nuw<7$Jq}۔*"iȋ%~Z5%`~kih*R(TTDZSc6mDc"6H=*J ~C1h%%7`$ Khi)DMBN A1LMzp:1ūbWJFQ.ߥ Dn6P d~kyXA#ڤkL2mۋsU5)-V%YiV $X˄*OzC=BN H?@@PMAV !?`"Ee=fɏkD8uaD@hQ UUE<-@ӧfcPYdy4=H\BNFz/C\6槊EYQբ(_*?4æ.UAH`|WPĴfÝət~.F?"Q,Ke!%CtMAIRH"@cx {`&x=bo032:~`X@ 8T~NeOO-,hIO#4G&H)o!A PՎF79VŲOWTg'ˈ8ƌ M^!c:_6f% E6&C"""V0,6ZJ-00 777)$IR(n"dVdv,rwi~$J_V#0C- ]Ud2Ċ9̘wWUQKUZEb, F,[nT4Ɩɡt~cAv4AJv1+S7 (V @Lޠ)nkHhQQu-lz&0lTݻY!lBRhU7Mc7j@lv d5%3%1)8uW#J&z*E(khʂbiE r$qLzˋ\HxyH<Tj!E!Lp@Emr5sl RNk j9U j5t T~(FGz4nyyD @e5A41JK3 n#zADX+ Yh]lBBAcLvIIx6ſ DNJrh/"39߾C j4h!%;@ml0R){esS$E94@t\vzD3,Fؿp>@# }&H@"(JVks<(jHhڇWF j!:l֗\VwђY`RZ1稄\rY;9AKF:޶EjXf.hPkV+yZgkσZ88Gd2wq> 4& !f&$B:% ВZljx Rn;!jn}wK(-ݢ؊-U.VP ,=6`Q`)FTfw]ߡ>+}Ti|fW@ 0'9AhG56j N 7ޞFc۪5]:: R~]-LKW_#?@jI)S@G@$Z8ZEA53ne!;=G#K@o[$)ZFdΗn bhZi6bdhV [*P.vs^=j 2 9ݜc0Lԕ8NGbhY#^{4@敧*79SSIJ^ ћoP"tA=ʢ9`]qgJWW;@{{L 0>͚v>%j7?ډ#ӉѢJ\8P "+5<zzOSH=F@DC ̅[٦3}?.mL_}195"qƪ(`h rdIK'aE]Ub4V"  E+/?? ;C\04A 93 lWH Zƶ3&P&(u"-B `("i*g!% "0NUF.>a !92Y{ vu8`x0*K;U*b k T,B@zW0g(%Xg6\܉Rҫt<3s:ji0{&Ze,p$q~ͺwnCک ^A[Oi7_;}X1z,ZY9_Ym0񔛛_M2]H3Q4jHٔ)#%UU[[M2S)$ 皈T ` ](T7e&)ɅEq q2 @&mN{tl@EKQcr,hi5 Glg^U@M #Аڃ8B!X0`eUS  (J00`9\N0@`vK*l_?mlx/TĨn>d)30(!DT&:dA!Yi4(@LxD3 }m5^OoE]=msֳ裡;-cXMF. t2F;k5p@DU: `x&zJ1iwSȻ-j&"F C o2@D 4˺qkWaWAm{)fx: Z,v}k1{"yg B"yO4G` @UcYlI0r^5?TDU@}O1( 5^jF8WmNkcRQu84Lu1Y>Rc r` \ sHI۫_rs'FT1bœq(ъ _HiN@1@P|Z#j+ų9[C ,Mh1"|LUl)ɼ - )D9ْ,% PVV/.KR) bQR(ӫif:Z 7BU6C m36C[ZyJc+!C Ƅ)͝~j@s_0)g_j\VQ%E0aXv+y ٟ\6|f g <)M&Ðd:__>)PsaE"TZUU1 1Z:F@u5!V:Y[^WvY"%dӺeviM@jr)Eš"ꪠLj!Tn.ŗS?30#;.yr幹QkĎ]_B⯎0i2/-GHQH L*n (F@9͡Rxb9`@lf!,6KWZ7?lki~z@) e7sAtk1ﵟl6lCE5 l`PUk r@%dG+i&f4 n;Zq?@kIP G'_]R_ETi#Yb"RUNAښaFnQ@[%:+eVYarTveiSHn 1]slZ SgP*iSgh2 :#YUUe+FQ.oJtlQ fay:zAZa\mv8pQ-b*5u`i$csfR O bA4ܐbuo-8x` Y67iVr*؄Ufy\9/d $kXU-=4,hn/S̹"EQ1-U-+mZ -cADDD4FՈ￶|f)&Iҥ-A 4@N&5wHiZ$`UQNlLQQlRrPy}^*X,VTEj&u=Xi5~9 ,tbW}.Nm)R.&p UJF"c>?$cH>e f~OEw.Ik_`ib: n0!ճQC+_z MG1@lQy,$uef;&e#kXQ/`Pk( i_iWxվ?ZW (yWRZFV]1J`•8aJ/'sA( pv50TFE tjEV⫨ئoYşy lt RL5Ni\^ sLP@w0p{8֫kb5 j\f#Go\lE@fvVEca+Z<~|5=F%|Y@ZLwuEwSwEXd2ńkAj ?K6>=\켽vƎڸѝ d @ZJRLqI -8#2m$d[Dւ^tZیڢ๒nVl,Xb$D$ZFotvXgw=:fgփ@HF0}|]z\݄G" ޴M5C%⼹͖ Tk04a(Z?`ccc Q<R^pNM<-Ǖj!% ` h}\ivՃ(RQr[zJhjŊ*o!߆kN4fKUYV[LvWzԸY;jR <>ҍw+j#~jyܙ^MWd?kwGS&pK* \bw}؛NҪ!wGul^(RH5i=NhU AӔ/L^[dUkglv aȂЌn(W; i}mvX)wܤ> 06:Sf3!EC|^VkݺݯmVDv6:YPb0=z,RѫXRh5U.@2@7S -rDb˿N_YUZ=/"Dlʐ4G*>x\ٙgW|9[?hZG=^#Z+a{|W;{F]{ߢk" I Eh #xR[ N{~%Գ]eYOe<e}&tV:P^u4ʧ0?HU| AMC@|P`aڈߎWR2Т9^=<$gc !vbYMvoԥʗ|WT^iV*zݺtMQYW 'p~I4b}lihԈRvn:I Eh@|u XU\:M3(qʕs^sYLPh :dbF$X61U{"V v.6HQHa5a++ȞӾ-@j18yT@hNZ( UT^V1lU oT(2$! B76ĞH+| U5Wy#T5m!NY}RZ4<Q q**Gxb Yjn dmN *"dNvRUp*FT*zUPUΞE91aτ{^i" K+_65鯾x\=IIp@VSрǓ Υ5ϿO펃xZDSANb:n"}ID)63-zQ"s@, Rh J'xÐ̣Mo偘̹~Y9Nf^[F"s+`nL@α5Z}.$4Sl3wKUV9KM b]&L"Ъ,Z,C@/5]`ڨuETZ(^XԊFka ?A˒7{F G@<.NCPT/`yJlDt0XZPjQDZ YT.cg9xV|FaB<̰qlYJ,%C@VA [ZSPZjUUĚ02mZY#q~[^ 3֞Z,qķcJM} aʰ>%}Ha 0KX,XQ5VTE*X*_뜯*bݽMVtY_7g?b3%:EvHgLG#eZֈj"VJz"#Sшjz _>_%oB>oI. 6LH@LF\,)#"NTuȦS#0c\ tAÚ%^zPsGpޑf~ 0nM3߯{yN{hL@ D&8Q!, ,0VיsVf5bŕH @!(YWK8"SQۊi* f#xvqv뱾-krasfѶ +98+B5 ⶀ,˲W33 WRU jen2wvBe-#.бN>lA#b;ت|/'@YX#sXb  @xU`B€f,P @Z juTF5ֹ͠G{E mE 86RߎNh_zhC"T63%$a"S(a ЛYs.n0gf}򧍧kdrȪbkŔ 7%T*`c2.iLӗyWgurw]Gy3; n4NyEju-).+]N! $Lҋ=* "ɞ!$yT X˴ vyTG2;/ LUA$5 D{LЕpҲ P*N YFp [`  a9RPk|bK}j=Plr*X?/''4J ޿iVUlSEmpB0̗{C]4RZ3}Q"9Dn_(|^e:f5ѐ&P? rt0//)gEt V^YVɒuX bWT~rTͬ|NtX ͼyGx4#9F2mi>?K-cȳֈD-kZjE84CΙ>>9ͧ!(MsdBw֟K[<  Ύ\ O 1X )DX;ثVZTUeTť/elZjQdm6 QBTvw0Co).{݇͆`ljETD#BK@{͘WP 4Y]sX'. R Jfy6hZfAp봬tn˿J R3t4817`lGk]IN[ȣzHx:63n)"B/D8ބ-( $f{WY?-L '^/4`_1`ƙ4@#e}P%zvd^fgTsr篧|k?\5?$>03 u܈X,r}+ 0cʻ2Bݼsqp}} 't@{f9 66Iie1p4T`'`zgwTfw4~f{hi0,jK;[?̍!t7#!}|89ƖԦ[Tj?.g.5rP{8f_yWFI`Ԇ@* 0C /E2?9AhΝ_5~l%QWwLČY,\OLlLRgyQu"|ыTߤМ,1"ڛf Y+Qդ얙Fk,dqG4VT%Da0G>h fe]1[34nH^gWq|5K~&H4@05:5IR{?uGiejVUF22FJVTf}_1%p<+EB"L C(Xza4@@H̵ĩ{tnK"m^_^Akk#DZ ޥ]zm<{va~_=12HaUP'Zp9Z.hbQ&cE <^}o3qٝcN,~>e $H&(2 eቴbJuNg{'SzRRw}Ia"a}5wf/9 R j&h?'fy԰kՂCDeQrӱ313 Qw|^Z0Ew~ʹ0Xa "L w$.x^2wU O4Zg@ElV?I[S8׼eh9j4ٺ r!TlaU>b n2A, hpBDtԘ#\nu_OVg{lv R): (-1ǁRa%؋ao^bm\~q d@>Lb CFߞCf/@&!EU%1b(`T0((>ܝ Hnv USjiiO[Yw /]^5 9)@T,->nV ^EwVUe% e+E;[nU$Vw$e55ɖ2חWs AdA}j7QFQjUysss#-F¿tS{$ZRZN&X^K ?$Zr-xh++F0ןb 麵j[ 2e]'Ú5ENB*T>wNt\t^k8{s16KTvV"FRB-@"̂GYnjUJ=C- aX+.\|"Ti&!ׂ[F,(Ѳd[$ZUx MjcKH]bz q7 ji5UA w1Rcِx~7DzTN o2;V36缰}s*KXj*.1FEҌ)*hZ1 [+Iv@rοŖ~q^۱ C*^Iܑ/U;6a!v~WlAchguh:BR`<2 HO`C/#eM_W:E`jTT(@@@/VJSFS=FQ `#i ( FDT*j1M3k}^e3cSW5:e+?Z:mۖeCBB ,Z`)PEU%hOggSlrcR'jWZZVZVU\WWSZqZWUX[VVanrmgV_XXhEVNQ/˓EHptzHe%PP WpX,VDDYe=84*ZFc ;Dmi! @.@`A1%"H v+Vׇ@t} dEN zB vvvv Ӷj(`؛x7?nt՛2Fi_t}vU 8>H]EI*&+eXC AxC5d(bd @ź5k6ZҭDvw_{ ܭ`*;p{v*pťlCAKf9Paxr" Zs(5R  HֱN%,rHϮ/--!DSeX.8\ zyWuQRREŪ  Yc :la Nr_vM*\Ww_qhj$h.&ÒH3Q@z&NȢi(+>*+r:xm EH'' K `^Iw "?8mJj$ؠ(&M)vA=6-LUÐWkXu\|z dXpo>X(,YА+K P%[D-D Z4jN2%|^y"+pҀd2ɉ%h he Ödb|cSNѡ)$j:TQ4x%Dj^ 3p/Wz64n4C[L@v RJr2{8yv:X  lg v:gl3,o}Gz1 ^_ZϘZIr'vٖe=;!СFr] 59i#Eߚ@~{bp45Gpm1MXWv;  DRFߣņ.Ŝ@h4 VZ-3AڳJw[ECST0!:% oU[  tRY(f¢gƃ\EHZ#jN?0ZqH AogkwI[H9j̈JUQwHE.:F8FyG0ίdkh?/DR˵D.ѫ=A-͊gUj5>cRnQ*vU[ brvVdbKREk̩ |4\>:#\`̲3=4KJTz@ubWQDBrXYF-GXx*Z #싏wI>6琺?XO_\]V!R/6-by:XHbLHs>͈|QQ0t˜Am)$R*fV_"@ђĆ6fFP֬T6*i-HFDP/YM1jjV%C/P El?ʪ:?fَYQBtA~ItcrBeXв ̰bdeii&uz?_e PSPr/8 2,j :-mPVm Tv#҇AI0`p'+0ЀӤk`Lݲu$̀70V fS=ISMnbK4G@wyFѿ甔 B!) R{Q5eL ø:nxo8 e7/,QdYEJh@KgM!XB%eBѤ~. ]1tTlQtG/燗?$W)K7xL@Ǘ!W(WHr h:pR|7pbπU냩w֣066*p*!Ikb2f@D8e``oOJAiH$ú ,w7ԛ<4"bd8pp3 h` QOR"ZPP9 "/3ǁJJSqX2%{ujmkJ+xݣzGcC-5 1xuhOggS lr%LSLR_^PMWEGNCOLs@GM^57[ZQC\KqtZug@!J{O=v ara)@m@S Aw50ZeቸX D8df=L:npGSs~,p!| vhT"ϩCY.ku3W;LۼAvŘ ZyA,meD_ GB^#%T{Ay>o"2Ä\j.$%*+EQ@h!){DDd:IcL*JYTV=ϊ9/}3p >0!v-T0D`m ^¨TňVV(;0r,{&Gd1h F0Z8q.'3_URD:\/@0 qFn5+GSa׾>.QS=w~qpٞ2Wm@l,`Blr?M:Q"eca~:qUr[I2oC x=M5;yJGy~0^k)^ _>dnZ^1`SɟߤĸZ!Z]qhw8QDZQ$v%l- u4chF@]صdc )ƒtW+^iTAױ,U#TƁ[:0̭_ r?o B^yVT~{Haآ({r7Ȳ}IIR/Hǽ5Jb0(``E5G J"#Y]%_O>GXXe LFS.',[ޚU)9,@@lRi٦5C*N1Xc!bZ a!\CdeAD-&2M-K'Z30cj&׻t$-$ ,¢E̛,L(ytJjK->>|UJsym>>`P:b&x]r1Vb"6EQܤ$Ўm{HyssSgnas{L]B~2ld0hX[C)JbDUJq*Zm[s\Z%B.-*a{@^KC=qֻ%zpIpHp2',,BR$q DFFP_@5ik(!ܟN"ihV_(@'+ IjЬdHl-!\!IHNxg(o9L&3tGpZVMruMC){~K-G,K,$$jpjvS T4'3brUVY# O{H @E5g0L҈XfxBƨ`fMDWUd1FC> Rh`i,kK2~&"Ȣl_TI؅|?I;@B?MX36ѿO{ٕثJ߆ij*yZ)'GGXcQ'# ,XF&Xc%1Zی߽2,:viWVB BH$o𖖩w"b uL ~{ttb2A}[;_V<[*(2PQ^10` dԐ*5#Ă#\ d?=ge.] .~]`j#*k*(dѡXEG (A 5}ixT~^yM~^˼"*m0l%ADz4ZDV(!j(2Rg%b%jtr}( z PjwG'{U1:h-b5B^AD(XmJrjH# `j_Y=|~,0{y~,ə:R&RڮFZG8Slμ3uEPeVe,6 cg2zHݔCQ*x6T<zO<)\)??r,P>zK=ְa~Ol  SAp8Y'@ jpnݡDЇ=io.9ʯ/.ueRF8ЪI$Ĥ<{ExEA0LQ2 1LL lJGqq`Ys@JpڽC&@ I9\z؛RA,VTS(_OXR <`18Qd)@6P$)G7S;5*׿w쿔/?Vv;GȴEg@}_Q'V B{5'1lֲ{}seZXqy)e\n& (V1M Pcjl2N}Շ?:DDD""I$M@X-,QJ%SRgZ* XVH 0BBH$ V]gbJ <j[($-6 r_ӜIekm.EfAEYN bX0Ҭ5&X 䳾4MeFF$n_w۴}մP<۱HK$gVIƂ%ߴ@1 $M+qԚnE5fMSM[ޫP6[7SPl$,j_DV$ا[!+z(Bs,j5TAi} H9RC$m C& b]J}CܼR_kFmrsQ2ۈ+1'Z<%VYh +8al{{dnw g0םo7!)4sM|b]6U0|S TD),f $M!J@XAPliUn~/psuoKÏm>LJ.8_!*U-,([q`W;(AZ =+9_^y0.-ϿnkBOYd5 GȀB pLp dfzrA/ᦕuaq- PUGP@1TQbQ `X޴DP޴fo fIV[(E 9|"m\]WGau BF%XBF5r (HLQ@YTiAhH1>ya @& ʉ(ɳ("PUHA"T[TZ0JTL "KQ)Q@e] Ƞ[@;NnKM/{9A@Wv &?ͥ+kR+V gOgWw76_Xp, ‚^:3 L2yt)͟8tCj|M|ɑMԢ 'VM `@M J`(UL}Ewe]xȖ]KʞeCL(:::DDQ懇[_~qAh}$ \DXZ":J9:QE)PG)fŒ1ꨱϢd# .I \a,,u㴞=*8!tX @ *604 $!-1F81  y ` BI@ IX"D:W,0OggS.lr"+MJPPYXRYWYRUXU\TZY[\\N9YQ[W\\NScVMSITU[^u_̭03}n/@'qߢ] ֘VRЬ@1k+BQ  WVm*/vuϞw>.^X `y9ڤ*ƺPh+lX(um@rgCN[A0FvGJEЮLCh.ol("$V"QMİbhlP" W* 0iju\vK. rgxΔ8?.4slեRDkUl"o CūQXQEMJ|vu*>Feo!o| MN1Eus3,(ćFV*UDQETUÆDET S!Xِׅ6ZI4t$*ZQfۿ}9 Rd<[=1b@SΛՎG-CS\c q"  L3nзA/@ӜHɉ5o `s*|-k }}3*#b4ZKd7mzO7fĦ*-)OۖҜYrYo @ &\#j01d"jxd laZ\>1׹TrdMNdM5DrBF-ؚXT5 ܤ (>(YX"* !@ c(#mQ,4w!:\sLϙ>v Db/.cZV+mFJpj<2u~1s ZY=HȒQȓT2_ ,V&+QH3L/G0EkT6͔6̣i.KҮ\Wѵ/5?}l?WuaHiH 4c̬VBp^_><ۧ ռ?\ -<^݉9Ts@IQ` "F0l{Wzrg>1掗/=E]+_CȆ8~>ηv8(Ր#95(]@ݢ\ *IPя jT ֠C06DKUY)pp` "!!>h 40 RM,QD6b͌ ^aDSdV)!BM.Uъ1PFL;+bհ-G  )j&!c7's"%ɏ..F:NNR 0ONu-u@c s~N72Z5kl9v ~p`܉exx plc`XbC5`Dkx*#t4i?MAk0TeT5"v]I~E!V}2'WvS5#\=fWjkg@5 TN:j?Tk6"h<}f"8Z_b/Sq(Z_SO=( !=x8+`4&cP]Ū5hJB,ņhE DL-Ѫ,F&2Z}a S = Q?zttǓrW{Fd6ӊ1)FڋWi"0ʆ XFh^_ij4Z X ja`?bJEoGjT*DXT00٠EUh#dۀ\չFF :&k\H1KPdq'_?~k/b vvnzj0J=Pg@$a.H=FI=!$q‘8 ׳`9>=7L+Z7yяfL݄71T]z9;[ULAu5#*jjƞzڤP{3N1% 1մUCPo]ǟw/8;ls)cA,V(m؅ Db)6 \ 2XjJMa!`Da!HcYh 0C Zm*|GRA-0DQH `Avuv.X#b‰BS^(RGwgjC n) yQSZ#naX PS@p,`&cBkwͼ "~{L!!⊈!cPAT"j$1J E@Fm"bSUPE3]IPTIwozߩeN+Evו{ɉHku% 6^{m۶+F6%DDyڑ"0/4\_hP:'0@!0 :l$zz_+GdT|_;C>@2dHGW1 pc]AcN@4 , r_sEKWlq{ԋ(SQU5 -iN ÆA# [ysj 'cPUCZEALmyF61|}[&,!!J.z> ziMՆ0o]=DCZlUU֡mafQtXdhѲ,˲,VZi%V̕_I3A|+<ȯKړ Ha~Zxy|UՕr]ʲ⻻Ν[nݺukVԕЮkxkߞ` "||#4O r=2s'e|,}RVT"5kE +& Fk "1[8ݳDxAkߞƊhST-.-?C%"evrJ, ARUCݳmrE{! غuK4`H k=xSgX~FT-Aͩ բ+>k(aDhH Y@F'q2L czC G5꭮V-A"VPE U! '02CWOr8 Ã\Ļɝ:=Ma-F|9qt\S YQ_y._:-MGƇ|ͼ>vD'zq#_*ƪut X/ ƞو[faM K_iᔠ6T[j^(^j !spUW?f$+k <;@kG 9H c m5`ZwiEEQnY(~uR^*?";h4Tf/MBXgiPZ)>@&t!.Y#&ZV QĬ񸫅eElXmg`m 8T5{̊9Y{fux'N uL#j!S ^h:iHOXur NOU-F@ޭ6qz}?PD9w'=m;c hlQ֑`%U Drh W :*#*E ^R4adNEkUJ3$]ChF i_BLD.SN bRYT k Vlr}JYOTqbo7e6|k ~`hG ZUN7aGq´۞r01+<- KQ#uWҬ! b$Yaw^!aklB84aˆv֬NUB6W;+ &Z۳GB"J[ZXH4 ~g5s WIBXwH@ wEt"U%_NAD*j}G+ƶ-HA,K_ϳ{J Yĕysn*-^^ kAgU^9E;$*Aa(ń5P,=uwL:2x6Hmh`Kh7XҖw 5RquZG.HՈEJj 4hT d#_Q6 Hm }oBh`UU[p5h4`IرDŽcH8 Z$pYDzw:ؽ Jv~ޑn5Ѕk"ZDbɶ$R5khрBFnqzGF~K=u yR| N׈,u Z!#ފ` "jVv*4[k1ޡElc ۔ Z Yϸzul7V+e{S|o|SgQg8DV*DSGSTeH+ζDv-@$q:#g7Wm9?%k1>/ +вfS5`b]TTRDj jBTj*pX ߦ~+UFe۩hrMY:)1Q4 " 2E2fQq&I!un& Y2֨ `pW3 Ch R:2$!_$OZl8_  w*f֫LLE""m+ FjYy׸LbK32dJBpc ֈ[YLrLQQUU9{ "h4"""SElTtsS$`.fuP% ^-.{H%sE;!۬#{PôGU ughUuOjTr{[ZTV7~Ek:lb;NsJ\ 7 $AHѕ: Nk11* Vh楻5]J]5 5A@**H'6f-UF[K#FG;:RtmR9QT5 hThkBA֨: ) [A )%`KKhMbAAn8n@.:X/Ap&ӫJuhО/Б|WEִ"C\`+"@M QmVQ<lb/:ȒO\Xv~^@&^)R@*K`V~JXB0bEH4goj f g7XI%9uYIkAijuRt < ֨\Yvءf&C6 6T2TfˬYpnѻ+ݢ\ Ȭ7!EdH%nl jXUT_`"bZjf:ߢah4 bwS 8}5P/t#~-F%6V5?D Z*jUxrwZyU.U:["Lb]3c]DPnh]a[4IEjJ>@]TRC*&e/{S]Mt~]R!A-8Xl25̳[ 6f",fg6V;cA{?Q"c|YP^ JWlkA0!D@jx) tiY  02ؤLb ٥=3^x=g}>fb%5 bUZEح[)Z<VE@+&y @,4bؐJD 앨rJ>@"9)jl+u@p# 8b Elu'Nf` W hfuh, x&f@ā֕B Pmsdb?ڛXA"iJQ 7E$4b\Ke0g9֬ &B*gbUk0^io&j>Ico\PGoBЩX =Q0mš$b i% Ԏi,ơIѽ=Ȗ|Zl:w}%2QU5u8dtu?Y7J*e5kLZbO%D]`c!,I%>@zDM% 2  8 jy> SP4I:t*bh $B唁!M$Bh5;@jH  &cIg_="EYF:%iT^%ҡIe{&nK"(Az@cpi/`POz;C@Ě atjnlU0tj5T^T;w.eb3 K"dYie8Hff m@* &5F4*`OsnCX$-PUFT{'!Q4X,RB)mxn[3GAyâa&:`cv\{\NBZk|[VbDh59_w~]k\Ne-2ВA%h 4#aIy: OX@FmaZyS4 6Z IEڿ"NNTAU{OggS&hlrS$XD'VbYYX[V\Q]UZ+QQF\Z[^WXX\^XUrYϊo?.pT+~Fթ@.)[C5Q \}|;bMgNɯZh>`JP闃1gF„˧平zW^} uBr H0,mp: 퍹m*'vط%xXٌ4l-4eˬȾ_Kyc׵,QfcW%;6$L## 03؁e( JH3]eZIRՊPfRpzHHbb)$** "MR2,,ۜ,3.^Hj ƊbԯBd|Vr9`PmK`!\O#6B^Ԧ韃o[{ih#oo) Tv$U#"&mXX`7qbsgo㺛7ֽ?/h)1*FċP8֢ba ô0_hdz;_"qZ{M/u{bC^o|;o}e8=[%JC3;"Wì(U&n@'QE X*J!(ʑƈ1 Ü)"-P Ҷ:`8<4Fy21D7%ϐ`A6e C U5D%7}Ÿb|Eց&\J{7BV,VX<M*&CoebT/@-e=b N:넊`5kXoTP4LD]b2V:hdF1T2:\.­oWz4\`<m'#,%F#kE!bY?ъUSDԪMɊ"VGnńъ4ZP%e*oY}vWL$ODS@p@ $~ ~ 8H (bb\ viE`zlͪNz!܆tڴZ16e%Y!+9pGq҇v'w$P̛4ѩزVj J(zVQSa?{k"W?\l$W u0]hf;6t;vHE6AELli ljx Pa* B-հk_TE]jXG/7 =%FŪhТ*j !W5l6>QEA@IW[fNO- X2_,$6!D\ j*U@ɪ@U0(5 Xl>A.-ߢ~Z-EZE$O7^Y{u$$eK4r'#$bŁ^+ 2PFPru"yn,V2#Gwz^I/kx@-vACL,PՠC6= !6X`uV4j [*!9/%оiS#Q,j0xnL/5 ԨXFjŪ+DFU5UEP '(֢ +EBX\{j)ܑZP7Z8TLdժc2UkVUfaK+haŖ@0UrV<숑ҹgxt+;6Txޫ/r;",ڒINu)k !p * m lHw,, #=ܝu8pZp8^SӯV h3֪ *j V(jbb( 黷p=I_4JW:B,9b ʤc Cde5ݷsa+Bqէ_L~ݏuq۷B*[i1h'V HAIjMQ%Ն+cQh{HjS$y+ D㯵JQ V)#1 bU,"jX(b- 1wE#2Z =ę 0,aXXWvJ VFӕ])[ )$"FU, 9˶m5z[A"pP۷M0$Gih$&uQ*nbuxtW3R2XwJuaHر! ޭPvIdAiiקl1juUEMchD  Pi[K=[Ƅ&[@_PzJC eV+mER$^E4H` ZJm[.Nw-NB &0)? x5TUTw+hUv^Ƿ(ŷ4b!gI"p<u0~YR$8R?@$Kh5$U$ @B;X#\S/ghY (6f΁(}mHj$$^l[0I1aaiN 9F4vɇB"p"08 pp?@fH!-W ozU4qbYPLj (%RJf6tP).[Ɠ[|o'l4_AB ~g|,IZM/k*gVA+BQQlDl_5?UXՇ*A bP{*j 0R`"H ? ISn> #`,f1 =GkV{ @Z63 D_OƆt`lm/->) "Vm rprivate ["_PGroup","_WCTime","_BCTime"]; _PGroup = group pilotController; _WCTime = time; _BCTime = time; while { true } do { call westVehicleChecker; if (heliRC == 1) then { call pilotAI; }; call quickCleanup; call longCleanup; if (livesLeft == 0 && time > 30) then { if (nearestPlayers(CENTERPOS,AORADIUS,true,"count") == 0) then { endMission "LOSER"; }; }; sleep 1; }; createIntel = { private ["_i","_sign","_sign2","_radius","_cache","_pos","_mkr","_range"]; _cache = _this; _i = 0; while{ (getMarkerPos format["%1intel%2", _cache, _i] select 0) != 0}do{ _i = _i + 1; }; _sign = 1; if (random 100 > 50) then { _sign = -1; }; _sign2 = 1; if (random 100 > 50) then { _sign2 = -1; }; _radius = intelRadius - _i*50; if (_radius < 50) then { _radius = 50; }; _pos = [ (getPosATL _cache select 0) + _sign *(random _radius), (getPosATL _cache select 1) + _sign2*(random _radius) ]; _mkr = createMarker[format["%1intel%2", _cache, _i], _pos]; _mkr setMarkerType intelMarkerType; _range = round sqrt(_radius^2*2); _range = _range - (_range % 50); _mkr setMarkerText format["%1m", _range]; _mkr setMarkerColor "ColorRed"; _mkr setMarkerSize [0.5,0.5]; }; westVehicleChecker = { private ["_vcl","_pos","_range","_driver","_plrs","_str"]; if (!alive MHQ && startLocation == MHQ) exitWith { _vcl = createVehicle [MHQTYPE, spawnPos, [], 0, "None"]; _vcl setVehicleInit format["this setVehicleVarName ""%1""; %1 = this;", "MHQ"]; processInitCommands; HQ setDir (getDir vehicleServicePoint + 90); _pos = vehicleServicePoint modelToWorld [10,0,0]; _pos set [2,0]; HQ setPosATL _pos; }; if (startLocation != HQ) exitWith {}; _pos = startLocation modelToWorld [3,20,0]; _pos set [2,0]; if (getMarkerPos "USFLAG" distance (helipad modelToWorld [0,0,0]) > 50) then { helipad setPosATL _pos; helipad setDir (getDir startLocation - 90); }; _pos = startLocation modelToWorld [0,-10,0]; _pos set [2,0]; if (getMarkerPos "USFLAG" distance (vehicleServicePoint modelToWorld [0,0,0]) > 50) then { vehicleServicePoint setPosATL _pos; vehicleServicePoint setDir (getDir startLocation - 90); vehicleServicePoint setCaptive true; }; _pos = vehicleServicePoint modelToWorld [-8,0,0]; _pos set [2,0]; if (getMarkerPos "USFLAG" distance (repairarea modelToWorld [0,0,0]) > 50) then { repairarea setPosATL _pos; repairarea setDir (getDir vehicleServicePoint); }; _pos = startLocation modelToWorld [-3,-8,0]; _pos set [2,0]; if (getMarkerPos "USFLAG" distance (baseflag modelToWorld [0,0,0]) > 50) then { baseflag setPosATL _pos; baseflag setDir (getDir startLocation); }; _pos = startLocation modelToWorld [8,0,0]; _pos set [2,0]; if (getMarkerPos "USFLAG" distance (HQ modelToWorld [0,0,0]) > 50) then { fieldHospital setPosATL _pos; fieldHospital setDir (getDir startLocation); fieldHospital setCaptive true; }; _pos = vehicleServicePoint modelToWorld [0,4,0]; _pos set [2,0]; if (getMarkerPos "USFLAG" distance (stuffbox modelToWorld [0,0,0]) > 50) then { stuffbox setPosATL _pos; stuffbox setDir (getDir vehicleServicePoint - 180); }; for "_i" from 0 to (count westVehicleStrings - 1) do { _str = westVehicleStrings select _i; // isNil _str check if the vehicle is undefined // note that, _str does NOT get wrapped in quotes because _str contains the vehicle name // and we are checking for the presence of the vehicle, I assume _str whill always be a valid string if (isNil _str) then { _i call resetWestVehicle; } else { _vcl = call compile _str; // _vcl should not be NIL here .... due to ( isNil _str) protecting us // but it could be anything, so ... check its an object if (typeName _vcl=="OBJECT") then { if ( isNull _vcl) then { _i call resetWestVehicle; } else { call checkVehiclesNearbyCampObjs; if (!alive _vcl) then { _i call resetWestVehicle; } else { scopeName "main"; _range = 400; if (typeOf _vcl == ATVTYPE) then { _range = 100; }; if (typeOf _vcl == HELITYPE && heliRC == 1) exitWith { breakTo "main"; }; _plrs = nearestPlayers(getPosATL _vcl,SPAWNRANGE,false,"array"); if (alive _vcl && !arrCanSee(_plrs,_vcl,45,_range) && _vcl distance startLocation > 100) then { _driver = driver _vcl; _gunner = gunner _vcl; if (!isNull _driver || !isNull _gunner) then { if (alive _driver || alive _gunner) exitWith { breakTo "main"; }; }; { moveOut _x; } forEach (crew _vcl); _i call resetWestVehicle; }; }; }; }; }; sleep 0.01; }; }; // returns one specific vehicle or re-creates it at the start position resetWestVehicle = { private ["_vcl","_str","_objs","_type","_bool","_pos","_dir","_id","_i","_vclKilledTime","_vclTimeDiff"]; _i = _this; _str = westVehicleStrings select _i; if (_i > 11 || _i == -1) exitWith { }; //only return listed vehicles, but not MHQ _id = _i % 6; _pos = baseflag modelToWorld [-9,-10+_id*8,0]; _dir = getDir baseflag - 90; _type = if (_id % 2 == 1) then { CAR1TYPE } else { CAR2TYPE }; if (_i >= 6) then { _id = _id + 1; _type = ATVTYPE; _pos = baseflag modelToWorld [-9,-14+_id*8,0]; }; if (_i == 11) then { _type = HELITYPE; _pos = getPosATL helipad; _dir = getDir helipad; if (_pos distance startLocation > 100) exitWith {}; //avoid racing condition, where helipad is still at spawnPos }; _pos set [2,0]; _bool = isNil _str; _vcl = call compile _str; if !_bool then { _bool = isNull _vcl || !alive _vcl; }; if _bool then { // calculate if vehicle respawn time has elapsed _vclKilledTime = missionNameSpace getVariable format["%1_killedTime",_str]; if (isNil "_vclKilledTime") then { _vclKilledTime = 0; }; _vclTimeDiff = (time - _vclKilledTime); if (_vclTimeDiff <= westVehicleRespawn && _vclKilledTime != 0) exitWith { /* respawn delay has not elapsed */ }; _objs = nearestObjects[_pos,["LandVehicle","Air","CraterLong"],20]; if (count _objs > 0) then { { if (!(_x isKindOf "AllVehicles") || !alive _x) then { deleteVehicle _x; }; } forEach _objs; }; _vcl = createVehicle [_type, spawnPos, [], 0, "None"]; _vcl setVehicleInit format["this setVehicleVarName ""%1""; %1 = this;", _str]; //Set varible to cars - allow full heal near cars if (_vcl getVariable "ace_w_heal" == 0) then {_vcl setVariable ["ace_w_heal", true];}; _vcl setDir _dir; _vcl setPosATL _pos; if (_i < 6) then { _vcl call setVclAmmoCargo; }; if (_i == 11) then { _vcl call setHeliAmmoCargo; }; processInitCommands; [player,_vcl,"loc",rSPAWN,_vcl,{ _this call addActionLock; }] call RE; // attach killed EH to define time when vehicle was killed, in order to check for respawn delay _vcl addEventHandler ["killed", { missionNamespace setVariable [format["%1_killedTime",(_this select 0)], time]; }]; } else { _vcl call vehicleService; _vcl engineOn false; _vcl setDir _dir; _vcl setPosATL _pos; }; }; setWeaponCargo = { private ["_vcl","_wep","_num","_cargo","_arr1","_arr2","_count","_id"]; _vcl = _this select 0; _wep = _this select 1; _num = 0; _cargo = getWeaponCargo _vcl; _arr1 = _cargo select 0; _id = _arr1 find _wep; if (_id == -1) exitWith {}; _arr1 set[_id, str _wep]; _arr2 = (_cargo select 1); _arr2 set[_id, 0]; _cargo = [_arr1,_arr2]; _count = count _arr2; call compile format[' _vcl setVehicleInit " clearWeaponCargo this; for ""_i"" from 0 to (%2 - 1) do { _wep = (%1 select 0) select _i; _num = (%1 select 1) select _i; this addWeaponCargo [_wep,_num]; }; "; processInitCommands; ', _cargo, _count]; }; vehicleService = { _this call setVclAmmoCargo; processInitCommands; if (_vcl == heli) then { _this call setHeliAmmoCargo; processInitCommands; }; }; setVclAmmoCargo = { _this setVehicleInit ' this setVehicleAmmo 1; this setFuel 1; this setDamage 0; clearWeaponCargo this; clearMagazineCargo this; { this addMagazineCargo [_x select 0, _x select 1]; } forEach humvMagazines; { this addWeaponCargo [_x select 0, _x select 1]; } forEach humvItems; if (player in crew this) then { titleText["Vehicle serviced", "PLAIN DOWN"]; }; '; }; setHeliAmmoCargo = { _this setVehicleInit ' this setVehicleAmmo 1; this setFuel 1; this setDamage 0; clearWeaponCargo this; clearMagazineCargo this; { this addMagazineCargo [_x select 0, _x select 1]; } forEach heliMagazines; { this addWeaponCargo [_x select 0, _x select 1]; } forEach heliItems; if (player in crew this) then { titleText["Heli serviced", "PLAIN DOWN"]; }; '; }; addActionLock = { private "_actionIndex"; _actionIndex = _this addAction ["Lock","common\client\actions\noScript.sqf",' _this select 0 lock true; _this select 0 removeAction (_this select 2); _this select 0 call addActionUnlock; ',1,false,true,"","isAdmin"]; }; addActionUnlock = { private "_actionIndex"; _actionIndex = _this addAction ["Unlock","common\client\actions\noScript.sqf",' _this select 0 lock false; _this select 0 removeAction (_this select 2); _this select 0 call addActionLock; ',1,false,true,"","isAdmin"]; }; checkVehiclesNearbyCampObjs = { _isemptycar = _vcl!=heli && !(player in _vcl); _campObjArray = ["M1130_HQ_unfolded_Base_EP1","MASH_EP1","US_WarfareBVehicleServicePoint_EP1","Land_fortified_nest_small_EP1"]; _isemptyheli = _vcl==heli && !(player in _vcl); if (_isemptycar && _vcl distance (fieldHospital modelToWorld [0,0,0]) < 2) then { _vcl setPos [(getPos _vcl select 0) + 3, (getPos _vcl select 1) + 3, (getPos _vcl select 2)]}; if (_isemptycar && _vcl distance (vehicleServicePoint modelToWorld [0,0,0]) < 1) then { _vcl setPos [(getPos _vcl select 0) + 2, (getPos _vcl select 1) + 2, (getPos _vcl select 2)]}; if (_isemptycar && _vcl distance (helipad modelToWorld [0,0,0]) < 7) then { _vcl setPos [(getPos helipad select 0) - 10, (getPos helipad select 1) + 1, (getPos helipad select 2)]}; if (_isemptycar && _vcl distance (HQ modelToWorld [0,0,0]) < 6) then { _vcl setPos [(getPos _vcl select 0) + 0.5, (getPos _vcl select 1) - 6, (getPos _vcl select 2)]}; if (HQ distance (helipad modelToWorld [0,0,0]) < 10) then { HQ setDir (getDir vehicleServicePoint + 90); _pos = vehicleServicePoint modelToWorld [10,0,0]; _pos set [2,0]; HQ setPosATL _pos;}; }; //////map specific definitions/macros //spawnPos must remain available in global missionNamespace, a definition does not spawnPos = [0,0,0]; #define CENTERPOS [3871.31,4016.58,0] #define AORADIUS 4200 #define CACHEHOUSEPOSITIONS ["Land_House_K_1_EP1",[1,2,3,4],"Land_House_L_4_EP1",[6],"Land_House_C_5_V3_EP1",[0,2,6],"Land_House_C_12_EP1",[5,6],"Land_House_K_3_EP1",[9,1,2,3,5],"Land_House_C_5_V2_EP1",[4,0,1,5],"Land_House_L_8_EP1",[7,8],"Land_House_C_4_EP1",[7,12,13,15],"Land_House_C_2_EP1",[1,2,5,6,7,8,9],"Land_House_L_7_EP1",[0,1,2,3,4,5],"Land_House_C_10_EP1",[7,8,9,10,11,12,13,14],"Land_House_K_6_EP1",[6,7,8,9,10],"Land_House_C_11_EP1",[7,8,9,10],"Land_House_C_9_EP1",[2,3,4,5],"Land_House_C_3_EP1",[7,8,9,10,11,12,13,28,29,30,31,32],"Land_A_Office01_EP1",[5,6],"Land_A_Mosque_small_1_EP1",[3,4,5],"Land_A_Stationhouse_ep1",[6,9,13],"Land_House_C_5_EP1",[3,4,5],"Land_House_K_7_EP1",[4,5,6,11],"Land_Mil_ControlTower_EP1",[2,3,4,6],"Land_House_C_5_V1_EP1",[6,7],"Land_House_K_8_EP1",[4,0,1,2,3],"Land_A_BuildingWIP_EP1",[18,20,24,25,26,27,28,29,30,31],"Land_A_Villa_EP1",[4,6,7,8,9],"Land_House_C_1_EP1",[3],"Land_House_L_6_EP1",[4,0,3],"Land_House_L_3_EP1",[0,1,2],"Land_House_K_5_EP1",[1,2],"Land_House_C_1_v2_EP1",[0,1,2,3]] #define GUNROOFPOSITIONS ["Land_House_L_4_EP1",[[2,0],[3,0.2],[5,0]],"Land_House_L_3_EP1",[[3,0.8],[4,0.1]],"Land_House_C_12_EP1",[[7,0.9],[8,0.9],[9,0.6],[10,0.5]],"Land_House_C_5_V2_EP1",[[6,0.6],[7,0.7]],"Land_House_L_8_EP1",[[10,0.9],[11,0.9],[12,0.9],[13,1],[14,0.2],[15,0.8],[17,0.8]],"Land_House_C_4_EP1",[[5,0.1],[14,0.2]],"Land_House_L_6_EP1",[[1,0],[2,0]],"Land_House_C_10_EP1",[[18,0.9],[19,0.9],[20,0.6],[21,0.9]],"Land_House_K_6_EP1",[[11,0.1]],"Land_House_C_9_EP1",[[6,0.2]],"Land_House_C_3_EP1",[[14,0],[15,0],[16,0.4],[18,0],[19,0.4],[20,0],[21,0.1],[22,0],[23,0.3],[24,0.4],[25,0.4],[26,0.3],[27,0.4]],"Land_A_Office01_EP1",[[1,0.5]],"Land_A_Minaret_Porto_EP1",[[3,0],[5,0],[8,0],[9,0],[10,0.9],[11,0],[12,0],[13,0]],"Land_A_Stationhouse_ep1",[[14,0.8],[15,0.8],[16,0],[17,0],[18,0.1],[19,0],[20,0.1],[22,0.1],[23,0.3],[24,0.1],[25,0.2]],"Land_House_C_5_EP1",[[0,0.7],[1,0.9],[2,1],[6,0.8],[7,0.6]],"Land_House_K_7_EP1",[[12,0.1],[13,0],[14,0]],"Land_Mil_ControlTower_EP1",[[9,0.2],[10,0],[11,0],[12,0],[13,0],[14,0.3],[15,0],[16,0]],"Land_A_Mosque_big_hq_EP1",[[11,1],[12,0]],"Land_A_Mosque_big_minaret_2_EP1",[[2,0.9]],"Land_House_C_5_V1_EP1",[[0,0.7],[1,0.7],[5,0.6]],"Land_A_BuildingWIP_EP1",[[19,0.7],[22,0.9],[23,0.4],[33,0.1],[39,0.6],[40,0.5],[41,0.6],[47,0],[48,0.5],[53,0.6],[54,0.5],[55,0.1],[56,0.3],[57,0.2],[60,0.3]],"Land_House_K_8_EP1",[[5,0.2],[12,0.1]],"Land_Ind_Oil_Tower_EP1",[[2,0],[3,0],[4,0]],"Land_A_Villa_EP1",[[10,0.5],[11,0.5],[12,0.5],[13,0.5],[14,0.5]]] #define ILLEGALHOUSES ["Land_Mil_hangar_EP1", "Land_Mil_ControlTower_EP1", "Land_Mil_Guardhouse_EP1", "Land_Mil_Repair_center_EP1","Land_Mil_Barracks_i_EP1","Land_A_Minaret_EP1","Land_Ind_Coltan_Main_EP1"] // set EP1HOUSES to 'true' in order to have the param ignored and AI will spawn in every building, which got positions #define EP1HOUSES (configName(inheritsFrom (configFile >> "CfgVehicles" >> typeOf _x)) == "HOUSE_EP1") #define randPos [(CENTERPOS select 0)+random 2000-random 2000,(CENTERPOS select 1)+random 3000-random 3000, 0] #define cacheRadius 500 #define intelRadius 400showCompass = 1; showGPS = 1; showMap = 1; showWatch = 1; debriefing = 1; respawn = 3; respawnDelay = 30; respawnDialog = 1; disabledAI = 1; onMinimapScript[] = {"BIS_fnc_customGPS_Spawn"}; class Header { gameType = Coop; minPlayers = 1; maxPlayers = 34; }; class Params { class EmtpyLine1 { title = ":: Game Settings"; values[]={0,0}; texts[]={ "",""}; default = 0; }; //ambientCivilians should remain first param class ambientCivilians { title=" Ambient Civilians"; values[]={ 1,0 }; texts[]={ "Enabled","Disabled"}; default=1; code = ""; }; //ACRE On/Off class Var_acre { title=" ACRE Radios"; values[]={1,0}; texts[]={ "Enabled","Disabled"}; default=1; code = ""; }; //Roofguns class INS_Roofguns { title=" OPFOR Static Guns On Roofs"; values[]={ 1,0 }; texts[]={ "Enabled","Disabled"}; default=1; code = ""; }; class aiSkill { title=" AI Accuracy"; values[]={ 1,2,3,4,5,6,7,8,9,10 }; texts[]={ "0.1","0.2","0.3","0.4","0.5","0.6","0.7","0.8","0.9","1.0" }; default=3; code = ""; }; class maxAIPerPlayer { title=" AI Numbers"; values[]={ 2,3,4,5,6,8 }; texts[]={ "50%","75%","100%","125%","150%","200%" }; default=3; code = ""; }; class markersEnabled { title=" Enable Insurgency Markers"; values[]={ 0,1 }; texts[]={ "False","True" }; default=1; code = ""; }; class cacheCount { title=" Number of Ammo Caches"; values[]={ 1,2,3,4,5,6,7,8,9 }; texts[]={ "1","2","3","4","5","6","7","8","9" }; default=9; code = ""; }; class EmtpyLinePlayer { title = ":: Players Settings"; values[]={0,0}; texts[]={ "",""}; default = 0; }; class INS_RespButtn { title=" Disable Respawn Button"; values[]={ 0,1 }; texts[]={ "No","Yes" }; default=0; code = ""; }; class eastRatio { title=" OPFOR Ratio"; values[]={ 1,2,4,-1 }; texts[]={ "None","1:2","1:4","COOP only" }; default=-1; code = ""; }; class switchcooldown { title=" OPFOR unit switch cooldown"; values[]={ 30,60,90,120 }; texts[]={ "30 sec","60 sec","90 sec","120 sec" }; default=60; code = ""; }; class playerblocksrally { title=" OPFOR players can overrun rallypoints"; values[]={ 1,0 }; texts[]={ "Yes","No" }; default=1; code = ""; }; class startLives { title=" Number of Respawns"; values[]={ -1,0,5,10,20,50,100,200,350,500 }; texts[]={ "Infinite","0","5","10","20","50","100","200","350","500" }; default=-1; code = ""; }; class INS_dynamicRespawn { title=" Player respawn delay"; values[]={1,30,60,120,240}; default=30; texts[]={"Dynamic","30 Sec","1 Min","2 Min","4 Min"}; }; class playersNeeded { title=" Players needed to clear a Square"; values[]={ 1,2,3 }; texts[]={ "1","2","3" }; default=1; code = ""; }; class remPlayerBodyTime { title=" Time to remove player body"; values[]={ 30,60,90,180,300 }; texts[]={ "30 sec","60 sec","90 sec","180 sec","300 sec" }; default=300; code = ""; }; class EmtpyLineA10HQ { title = ":: A-10 & HQ Settings"; values[]={0,0}; texts[]={ "",""}; default = 0; }; class a10Mode { title=" A-10 CAS Mode"; values[]={ 0,1,2 }; texts[]={ "Disabled","AI","Player" }; default=0; code = ""; }; class a10FlyTime { title=" A-10 Flying Time (x2 on AI A-10)"; values[]={ 30,45,60,90,120 }; texts[]={ "30 seconds","45 seconds","60 seconds","90 seconds","120 seconds" }; default=45; code = ""; }; class mhqDeployTimer { title=" HQ Re-deployment Timer"; values[]={ 0,1800,3600,7200,10800,14400,18000,-1 }; texts[]={ "Instant","30 minutes","60 minutes","120 minutes","180 minutes","240 minutes","300 minutes","Never"}; default=1800; code = ""; }; class hqProtectionRing { title=" HQ Base Protection"; values[]={ -1,100,200,300,400 }; texts[]={ "None","100 meters","200 meters","300 meters","400 meters"}; default=400; code = ""; }; class EmtpyLineVehicles { title = ":: Vehicles Settings"; values[]={0,0}; texts[]={ "",""}; default = 0; }; class westVehicleRespawn { title=" BLUFOR Vehicles Respawn Delay"; values[]={0,120,300,600,900}; default=900; texts[]={"Instant","2 Minutes","5 Minutes","10 Minutes","15 Minutes"}; }; class INS_HeliLiftSys { title=" Heli Lift System"; values[]={ 0,1 }; texts[]={ "Disabled","Enabled" }; default=1; code = ""; }; class heliRC { title=" Remote-controlled Helicopter"; values[]={ 1,0 }; texts[]={ "Yes","No" }; default=0; code = ""; }; class INS_AdvanceType { title=" Type of Advanced Vehicle"; values[]={ 1,2,3,4,5,6,7 }; texts[]={ "MH-6J Littlebird", "UH-1Y Venom", "CH-47F", "Merlin HC3", "Lynx Wildcat", "MV-22", "UH60M Black Hawk" }; default=2; code = ""; }; class INS_CarType1 { title=" First Setup of Cars - 2pt."; values[]={ 1,2,3,4,5,6,7,8,9 }; texts[]={ "M1151 HMMWV 50cal", "Jackal GL", "Jackal 50cal", "HMMWV (M2) - Woodland Camo", "Land Rover SF 50cal, GL", "BAF Land Rover unarmed", "Armored SUV minigun", "SUV unarmed", "BAF PMC SUV unarmed", }; default=1; code = ""; }; class INS_CarType2 { title=" Second Setup of Cars - 2pt."; values[]={ 1,2,3,4,5,6,7,8,9 }; texts[]={ "HMMWV m249, GL", "Jackal GL", "Jackal 50cal", "HMMWV (Mk19) - Wooldland Camo", "Land Rover SF 50cal, GL", "BAF Land Rover unarmed", "Armored SUV minigun", "SUV unarmed", "BAF PMC SUV unarmed", }; default=1; code = ""; }; class INS_ATVType1 { title=" Third Setup of Cars - 5pt(lite)."; values[]={ 1,2,3,4,5,6,7,8,9,10 }; texts[]={ "ATV's", "HMMWV (Ambulance)", "CZ Land Rover Unadrmed", "Special Forces LADA", "Motocycle", "BAF Land Rover unarmed", "Mountin Bike", "SUV unarmed", "BAF PMC SUV unarmed", "Pickup", }; default=1; code = ""; }; class eastVehicleNum { title=" Number of OPFOR AI Vehicles"; values[]={ 1,2,3,4,5,6,7,8,9 }; texts[]={ "1","2","3","4","5","6","7","8","9" }; default=9; code = ""; }; class aiVehicleRespawnTime { title=" Random Time to OPFOR AI Vehicle Respawn (+5min)"; values[]={ 600,900,1200,1800 }; texts[]={ "10 min","15 min","20 min","30 min" }; default=600; code = ""; }; class EmtpyLine2 { title = ":: UI Settings"; values[]={0,0}; texts[]={ "",""}; default = 0; }; class useroptions { title=" Players can adjust Viewdistance and Grass"; values[]={ 0,1 }; texts[]={ "No","Yes" }; default=1; code = ""; }; class EmtpyLine3 { title = ":: Time & Date Settings"; values[]={0,0}; texts[]={ "",""}; default = 0; }; class Month { title=" Month"; values[]={ 1,2,3,4,5,6,7,8,9,10,11,12}; texts[]={ "January","Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; default=7; code = ""; }; class Day { title=" Day"; values[]={ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; texts[]={ "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"}; default=24; code = ""; }; class Hour { title=" Hour"; values[]={ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24}; texts[]={ "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24"}; default=12; code = ""; }; class Minute { title=" Minute"; values[]={ 00,15,30,45}; texts[]={ "00","15","30","45"}; default=00; code = ""; }; }; #include "common\resources\constants.hpp" #include "common\resources\types.hpp" #include "common\resources\dialogs.hpp" #include "common\resources\titles.hpp" #include "common\resources\sounds.hpp" // Picture by KAAP #define LOADSCREEN "LoadingScreen.paa" #define LOADSCREENTEXT "DobroACE Insurgency" #include "LoadingScreen.ext" loadScreen = LOADSCREEN; onLoadMission = LOADSCREENTEXT; onLoadMissionTime = false; action_rpu = this addAction [""Put rallypoint"", ""scripts\buildusa.sqf"",""rallypoint"",998, false, true,""""]; ;action_rpp = this addAction [""Put rallypoint"", ""scripts\buildpmc.sqf"",""rallypoint"",998, false, true,""""];version=11; class Mission { addOns[]= { "CACharacters_BAF", "cacharacters_e", "ca_modules_functions", "ca_modules_e_weather", "ca_modules_clouds", "caweapons_e_ammoboxes", "camisc_e_wf", "camisc3", "takistan", "cawheeled_e_hmmwv", "cawheeled_d_baf", "CAAir_E_AH6J", "caweapons_baf", "CAWheeled_E_stryker", "cadata", "camisc_e", "zargabad", "CA_Modules_Alice2", "ca_missions_garbagecollector", "ca_modules_silvie", "cacharacters2", "CACharacters_BAF", "CAAir", "CAAir_E_UH60M", "caair_e_ch_47f", "CAWheeled2_MTVR", "ace_sys_playerhud", "ace_main", "ace_sys_slingload", "ace_sys_wounds", "ace_sys_nvg", "ace_sys_tracking", "ace_sys_aitalk", "ca_modules", "CAAir_BAF", "CAWheeled2_MTVR", "ace_sys_repair", "ace_sys_viewblock", "ace_sys_vehicledamage", "ca_modules_animals", "acex_ru_c_weapon", "cacharacters_pmc", "ace_sys_arty_m119", "ace_sys_arty_computers", "ace_sys_arty_ammunition", "CATracked_E", "CATracked_E_M2A2_Bradley", "CAAir2_F35B", "CAWheeled_E", "cawheeled_pmc_armoredsuv", "CAAir2_MV22", "acex_c_weapon", "acre_sys_radio", "BI_SRRS", "ace_sys_map", "cba_main", "ace_c_weapon", "caweapons_e", "ace_sys_weapons", "caair_e_an2" }; addOnsAuto[]= { "cacharacters_e", "cacharacters_pmc", "cacharacters_baf", "ca_modules_e_weather", "ca_modules_clouds", "ca_missions_garbagecollector", "ca_modules_functions", "CA_Modules_Alice2", "ca_modules_silvie", "ace_main", "ace_sys_slingload", "ace_sys_wounds", "ace_sys_aitalk", "ace_sys_nvg", "ace_sys_playerhud", "ace_sys_tracking", "ca_modules", "ace_sys_repair", "ace_sys_viewblock", "ace_sys_vehicledamage", "ca_modules_animals", "BI_SRRS", "cba_main", "caair_e_an2", "camisc_e_wf", "camisc3", "camisc_e", "CAWheeled_E_stryker", "caweapons_baf", "ace_c_weapon", "CATracked_E", "CATracked_E_M2A2_Bradley", "CAAir2_F35B", "CAWheeled_E", "cawheeled_e_hmmwv", "cawheeled_pmc_armoredsuv", "CAAir_E_AH6J", "CAAir_E_UH60M", "CAAir2_MV22", "acre_sys_radio", "caweapons_e", "ace_sys_weapons", "zargabad" }; randomSeed=8342719; class Intel { briefingName="DobroACE Insurgency 1.50"; briefingDescription="Praise Horo!"; resistanceEast=1; startWeather=0; forecastWeather=0; year=2011; month=6; day=15; hour=12; minute=0; }; class Groups { items=35; class Item0 { side="WEST"; class Vehicles { items=10; class Item0 { position[]={-34.706253,106.12006,-6.6381836}; azimut=91.808899; special="NONE"; id=0; side="WEST"; vehicle="US_Soldier_SL_EP1"; player="PLAY CDG"; leader=1; rank="SERGEANT"; skill=1; text="Hitman111"; init="this setGroupId [""Hitman 1 - 1 -""];"; description="USA Hitman 1-1-1 (Squad Leader)"; }; class Item1 { position[]={-32.018265,106.75005,-9.2856445}; azimut=91.808899; special="NONE"; id=1; side="WEST"; vehicle="US_Soldier_AT_EP1"; player="PLAY CDG"; rank="SERGEANT"; skill=1; text="Hitman112"; description="USA Hitman 1-1-2 (AT)"; }; class Item2 { position[]={-32.077835,106.92342,-11.658203}; azimut=91.808899; special="NONE"; id=2; side="WEST"; vehicle="US_Soldier_TL_EP1"; player="PLAY CDG"; rank="CORPORAL"; skill=1; text="Hitman113"; description="USA Hitman 1-1-3 (FTL)"; }; class Item3 { position[]={-32.136917,107.10841,-14.091309}; azimut=91.808899; special="NONE"; id=3; side="WEST"; vehicle="US_Soldier_GL_EP1"; player="PLAY CDG"; skill=1; text="Hitman114"; description="USA Hitman 1-1-4 (GL)"; }; class Item4 { position[]={-32.136917,107.29428,-16.404785}; special="NONE"; id=22; side="WEST"; vehicle="US_Soldier_AR_EP1"; player="PLAY CDG"; skill=0.60000002; text="Hitman115"; description="USA Hitman 1-1-5 (AR)"; }; class Item5 { position[]={-32.169144,107.44614,-18.381836}; azimut=-21.4862; special="NONE"; id=5; side="WEST"; vehicle="US_Soldier_Medic_EP1"; player="PLAY CDG"; skill=1; text="Hitman116"; description="USA Hitman 1-1-6 (Medic)"; }; class Item6 { position[]={-31.98897,107.65027,-20.587402}; azimut=-21.4862; special="NONE"; id=6; side="WEST"; vehicle="US_Soldier_TL_EP1"; player="PLAY CDG"; rank="CORPORAL"; skill=1; text="Hitman117"; description="USA Hitman 1-1-7 (FTL)"; }; class Item7 { position[]={-32.092484,107.76354,-22.347168}; azimut=-21.4862; special="NONE"; id=7; side="WEST"; vehicle="US_Soldier_GL_EP1"; player="PLAY CDG"; skill=1; text="Hitman118"; description="USA Hitman 1-1-8 (GL)"; }; class Item8 { position[]={-32.18428,107.8688,-23.977051}; special="NONE"; id=21; side="WEST"; vehicle="US_Soldier_MG_EP1"; player="PLAY CDG"; skill=0.60000002; text="Hitman119"; description="USA Hitman 1-1-9 (MG)"; }; class Item9 { position[]={-32.306351,107.96314,-25.709473}; azimut=-21.4443; special="NONE"; id=9; side="WEST"; vehicle="US_Soldier_Medic_EP1"; player="PLAY CDG"; skill=1; text="Hitman110"; description="USA Hitman 1-1-10 (Medic)"; }; }; }; class Item1 { side="WEST"; class Vehicles { items=7; class Item0 { position[]={-25.649614,107.58543,-6.3833008}; azimut=-21.4862; special="NONE"; id=4; side="WEST"; vehicle="Soldier_PMC"; player="PLAY CDG"; leader=1; rank="SERGEANT"; skill=1; text="Hitman121"; init="this setGroupId [""Hitman 1 - 2 -""];"; description="PMC Hitman 1-2-1 (Team Leader)"; }; class Item1 { position[]={-23.463091,108.11292,-8.5673828}; azimut=-21.4443; special="NONE"; id=10; side="WEST"; vehicle="Soldier_MG_PKM_PMC"; player="PLAY CDG"; skill=1; fuel=0.76006347; text="Hitman122"; description="PMC Hitman 1-2-2 (AR)"; }; class Item2 { position[]={-24.057329,108.10808,-9.6723633}; azimut=-21.4443; special="NONE"; id=11; side="WEST"; vehicle="Soldier_TL_PMC"; player="PLAY CDG"; skill=1; text="Hitman123"; description="PMC Hitman 1-2-3 (Marksman)"; }; class Item3 { position[]={-24.561724,108.11839,-10.755859}; special="NONE"; id=20; side="WEST"; vehicle="Soldier_Bodyguard_M4_PMC"; player="PLAY CDG"; skill=0.60000002; text="Hitman124"; description="PMC Hitman 1-2-4 (Rifleman)"; }; class Item4 { position[]={-25.336626,108.08832,-11.957031}; azimut=-20.999001; special="NONE"; id=13; side="WEST"; vehicle="Soldier_Medic_PMC"; player="PLAY CDG"; rank="CORPORAL"; skill=1; text="Hitman125"; description="PMC Hitman 1-2-5 (Medic)"; }; class Item5 { position[]={-26.236528,108.05541,-13.328613}; id=82; side="WEST"; vehicle="Soldier_Bodyguard_AA12_PMC"; player="PLAY CDG"; skill=0.60000002; text="Hitman126"; description="PMC Hitman 1-2-6 (Rifleman)"; }; class Item6 { position[]={-27.692583,107.86823,-14.069336}; id=100; side="WEST"; vehicle="CIV_Contractor1_BAF"; player="PLAY CDG"; skill=0.60000002; text="Hitman127"; description="PMC Hitman 1-2-7 (Rifleman)"; }; }; }; class Item2 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={-20.92354,108.33429,-6.2001953}; azimut=-21.4443; special="NONE"; id=8; side="WEST"; vehicle="US_Soldier_Pilot_EP1"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=1; text="Hitman131"; init="this setGroupId [""Hitman 1 - 3 -""]; "; description="USA Hitman 1-3-1 (Pilot)"; }; }; }; class Item3 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={-17.030012,108.95619,-6.1547852}; azimut=-20.999001; special="NONE"; id=12; side="WEST"; vehicle="Soldier_Pilot_PMC"; player="PLAY CDG"; leader=1; rank="SERGEANT"; skill=1; text="Hitman141"; init="this setGroupId [""Hitman 1 - 4 -""]; "; description="PMC Hitman 1-4-1 (Pilot)"; }; }; }; class Item4 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={3433.1487,51.985191,8152.9531}; azimut=-183.32968; id=14; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="vclSpawn1"; }; }; }; class Item5 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={5047.1733,84.874008,15.253235}; azimut=319.67023; id=15; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="vclSpawn3"; }; }; }; class Item6 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={3176.0334,7.2894917,6.8134766}; azimut=343.14706; id=16; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="vclSpawn2"; }; }; }; class Item7 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-735.82593,371.43045,793.14502}; id=19; side="LOGIC"; vehicle="Logic"; leader=1; skill=0.60000002; text="server"; }; }; }; class Item8 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-600.13647,363.49042,950.86182}; id=23; side="LOGIC"; vehicle="WeatherPostprocessManager"; leader=1; lock="UNLOCKED"; skill=0.60000002; text="Colors"; init="this setVariable [""intensity"", 1.1]"; }; }; }; class Item9 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-602.41071,121.69762,889.39307}; id=24; side="LOGIC"; vehicle="BIS_clouds_Logic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item10 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={31.103207,107.99607,-117.34277}; azimut=93.227798; special="NONE"; id=29; side="EAST"; vehicle="TK_INS_Soldier_TL_EP1"; player="PLAY CDG"; leader=1; skill=1; text="east1"; }; }; }; class Item11 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={30.87734,108.00694,-117.19434}; azimut=93.227806; special="NONE"; id=28; side="EAST"; vehicle="TK_INS_Soldier_TL_EP1"; player="PLAY CDG"; leader=1; skill=1; text="east2"; }; }; }; class Item12 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={30.030453,107.79647,-117.65723}; azimut=93.227798; special="NONE"; id=27; side="EAST"; vehicle="TK_INS_Soldier_TL_EP1"; player="PLAY CDG"; leader=1; skill=1; text="east3"; }; }; }; class Item13 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={30.030453,107.79647,-117.65723}; azimut=93.227798; special="NONE"; id=26; side="EAST"; vehicle="TK_INS_Soldier_TL_EP1"; player="PLAY CDG"; leader=1; skill=1; text="east4"; }; }; }; class Item14 { side="EAST"; class Vehicles { items=1; class Item0 { position[]={-597.59009,377.19937,800.89337}; azimut=-180.42642; special="NONE"; id=34; side="EAST"; vehicle="TK_INS_Soldier_EP1"; leader=1; rank="COLONEL"; skill=1; text="graveDigger"; init="this allowDamage false; doStop this"; }; }; }; class Item15 { side="CIV"; class Vehicles { items=1; class Item0 { position[]={-615.27405,372.40643,1093.0129}; id=38; side="CIV"; vehicle="TK_CIV_Takistani01_EP1"; leader=1; skill=1; text="pilotController"; init="this allowDamage false; doStop this"; }; }; }; class Item16 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-662.73523,133.30823,1010.6333}; id=40; side="LOGIC"; vehicle="GarbageCollector"; leader=1; lock="UNLOCKED"; skill=0.60000002; init="BIS_GC setVariable [""auto"",true];"; }; }; }; class Item17 { side="LOGIC"; class Vehicles { items=3; class Item0 { position[]={-723.53101,353.15918,960.0874}; id=17; side="LOGIC"; vehicle="FunctionsManager"; leader=1; lock="UNLOCKED"; skill=0.60000002; init="call compile preprocessFileLineNumbers ""mip\init-functions.sqf"";"; }; class Item1 { presenceCondition="isServer && (paramsArray select 1 == 1)"; position[]={-722.71631,124.34575,895.06836}; id=39; side="LOGIC"; vehicle="Alice2Manager"; lock="UNLOCKED"; skill=0.60000002; init="call compile preprocessFileLineNumbers ""mip\init-alice2.sqf"";"; }; class Item2 { presenceCondition="isServer && (paramsArray select 1 == 1)"; position[]={-668.41187,118.56993,858.91113}; id=41; side="LOGIC"; vehicle="SilvieManager"; lock="UNLOCKED"; skill=0.60000002; init="call compile preprocessFileLineNumbers ""mip\init-silvie.sqf"";"; }; }; }; class Item18 { side="LOGIC"; class Vehicles { items=7; class Item0 { position[]={-298.82642,78.551437,-0.075195313}; id=47; side="LOGIC"; vehicle="ACE_Required_Logic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; class Item1 { position[]={-199.21765,82.160866,2.1879883}; id=50; side="LOGIC"; vehicle="ACE_DisableSlingload"; lock="UNLOCKED"; skill=0.60000002; }; class Item2 { position[]={-275.14163,86.7752,-91.290039}; id=53; side="LOGIC"; vehicle="ACE_Wounds_Logic"; lock="UNLOCKED"; skill=0.60000002; }; class Item3 { position[]={-399.56717,88.035469,-1.2060547}; id=48; side="LOGIC"; vehicle="ACE_AITalk_Logic"; lock="UNLOCKED"; skill=0.60000002; }; class Item4 { position[]={-358.81812,87.175697,70.065918}; id=52; side="LOGIC"; vehicle="ACE_NVG_RangeLimit_Logic"; lock="UNLOCKED"; skill=0.60000002; }; class Item5 { position[]={-299.95831,86.123001,101.74219}; id=49; side="LOGIC"; vehicle="ACE_SYS_PRespawn_Logic"; lock="UNLOCKED"; skill=0.60000002; }; class Item6 { position[]={-241.09863,84.988594,65.541016}; id=51; side="LOGIC"; vehicle="ACE_ForceGroupMarkersOff_Logic"; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item19 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-299.95831,87.456627,-200.31543}; id=54; side="LOGIC"; vehicle="BIS_Effect_FilmGrain"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item20 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-207.73024,86.590256,-121.76611}; id=55; side="LOGIC"; vehicle="ACE_Wounds_FullHeal"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item21 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-364.96497,88.319351,-63.413086}; id=56; side="LOGIC"; vehicle="ace_sys_repair_full"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item22 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-405.56735,84.334946,136.8623}; id=57; side="LOGIC"; vehicle="ACE_Viewblock_EnableAIGrassVB_Mod"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item23 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-207.57385,79.538177,-41.970703}; id=58; side="LOGIC"; vehicle="ACE_Vehicledamage_Enable_Cookoff"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item24 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-399.18045,94.236855,-118.15723}; id=59; side="LOGIC"; vehicle="ACE_RadioTalk_Logic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item25 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-338.50507,88.609726,-124.08789}; id=60; side="LOGIC"; vehicle="ace_sys_repair_tyres"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item26 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-600.10785,110.38442,839.91504}; id=61; side="LOGIC"; vehicle="BIS_animals_Logic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item27 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-728.57086,68.224663,632.52295}; id=78; side="LOGIC"; vehicle="GarbageCollector"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item28 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-650.38428,68.286316,632.68994}; id=79; side="LOGIC"; vehicle="BIS_SRRS_Logic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item29 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-207.88666,82.833145,-89.243164}; id=80; side="LOGIC"; vehicle="ACE_Wounds_EveryoneMedic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item30 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-438.25421,93.109795,-192.06348}; id=81; side="LOGIC"; vehicle="CBA_main_require"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item31 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={4765.8604,29.710167,6154.6445}; azimut=270; special="NONE"; id=85; side="WEST"; vehicle="US_Soldier_EP1"; leader=1; skill=0.60000002; text="towgunner"; init="this action [""getInGunner"", TOW_guard]; this allowDamage false; "; }; }; }; class Item32 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={4765.542,29.643448,6130.0771}; azimut=270; special="NONE"; id=86; side="WEST"; vehicle="US_Soldier_EP1"; leader=1; skill=0.60000002; text="m2_gunner"; init="this action [""getInGunner"", M2_guard]; this allowDamage false; "; }; }; }; class Item33 { side="LOGIC"; class Vehicles { items=1; class Item0 { position[]={-341.01172,89.922005,-200.66406}; id=99; side="LOGIC"; vehicle="ACE_SYS_Force1st_Logic"; leader=1; lock="UNLOCKED"; skill=0.60000002; }; }; }; class Item34 { side="CIV"; class Vehicles { items=1; class Item0 { position[]={567.16626,147.94809,7516.9854}; azimut=150; special="FLY"; id=114; side="CIV"; vehicle="An2_2_TK_CIV_EP1"; leader=1; skill=0.60000002; }; }; class Waypoints { items=14; class Item0 { position[]={3468.5447,31.011974,7459.3433}; class Effects { }; showWP="NEVER"; }; class Item1 { position[]={5223.9727,73.127487,5549.5024}; class Effects { }; showWP="NEVER"; }; class Item2 { position[]={5378.3857,102.56927,2761.9473}; class Effects { }; showWP="NEVER"; }; class Item3 { position[]={4175.5908,72.930038,689.56689}; class Effects { }; showWP="NEVER"; }; class Item4 { position[]={2131.1375,183.2729,713.54297}; class Effects { }; showWP="NEVER"; }; class Item5 { position[]={1321.4048,128.70114,1850.7261}; class Effects { }; showWP="NEVER"; }; class Item6 { position[]={1005.1418,158.62906,4400.6514}; class Effects { }; showWP="NEVER"; }; class Item7 { position[]={1297.7141,135.56584,7740.8413}; class Effects { }; showWP="NEVER"; }; class Item8 { position[]={3101.9041,20.090204,4579.4448}; class Effects { }; showWP="NEVER"; }; class Item9 { position[]={4849.2051,60.464935,1247.3809}; class Effects { }; showWP="NEVER"; }; class Item10 { position[]={5288.0615,17.441072,3815.5078}; class Effects { }; showWP="NEVER"; }; class Item11 { position[]={1793.4583,128.95341,3815.5078}; class Effects { }; showWP="NEVER"; }; class Item12 { position[]={720.90289,163.99089,7338.1348}; class Effects { }; showWP="NEVER"; }; class Item13 { position[]={3198.7061,30.40036,7540.8315}; type="CYCLE"; class Effects { }; showWP="NEVER"; }; }; }; }; class Vehicles { items=61; class Item0 { position[]={63.589409,115.40209,20.193359}; id=18; side="EMPTY"; vehicle="US_WarfareBVehicleServicePoint_EP1"; skill=0.60000002; text="vehicleServicePoint"; init="this allowDamage false"; }; class Item1 { position[]={63.102745,120.10785,-26.346497}; id=25; side="EMPTY"; vehicle="HeliH"; skill=0.60000002; text="helipad"; }; class Item2 { position[]={23.59333,608.17462,24.680115}; id=30; side="EMPTY"; vehicle="Land_fortified_nest_small_EP1"; skill=0.60000002; text="bagshumv11"; init="this allowDamage false"; }; class Item3 { position[]={23.59333,603.61981,9.9753418}; id=31; side="EMPTY"; vehicle="Land_fortified_nest_small_EP1"; skill=0.60000002; text="bagshumv12"; init="this allowDamage false"; }; class Item4 { position[]={24.293045,113.54759,-2.6300049}; id=32; side="EMPTY"; vehicle="Land_fortified_nest_small_EP1"; skill=0.60000002; text="bagshumv13"; init="this allowDamage false"; }; class Item5 { position[]={24.293045,599.08105,-15.234497}; id=33; side="EMPTY"; vehicle="Land_fortified_nest_small_EP1"; skill=0.60000002; text="bagshumv14"; init="this allowDamage false"; }; class Item6 { position[]={-59.159859,103.2779,-32.505432}; id=35; side="EMPTY"; vehicle="MASH_EP1"; skill=0.60000002; text="fieldHospital"; init="this addEventHandler [""handleDamage"", {0}];"; }; class Item7 { position[]={2.3782272,112.80198,-29.21637}; id=36; side="EMPTY"; vehicle="M1130_CV_EP1"; skill=0.60000002; text="MHQ"; }; class Item8 { position[]={-70.69809,97.589134,20.12146}; id=37; side="EMPTY"; vehicle="M1130_HQ_unfolded_Base_EP1"; skill=0.60000002; text="HQ"; init="this allowDamage false"; }; class Item9 { position[]={75.236176,116.92324,19.994812}; id=42; side="EMPTY"; vehicle="Sr_border"; skill=0.60000002; text="repairarea"; init="this setPos [ getPos this select 0, getPos this select 1, (getPos this select 2) +0.02]"; }; class Item10 { position[]={10.279037,111.83453,-0.15625}; id=43; side="EMPTY"; vehicle="FlagCarrierPOWMIA_EP1"; skill=0.60000002; text="baseflag"; init="this allowDamage false; this addAction [""Move to US Army rallypoint"", ""scripts\movetorpusa.sqf""]; this addAction [""Move to PMC rallypoint"", ""scripts\movetorppmc.sqf""];"; }; class Item11 { position[]={24.624949,115.23671,-24.688599}; id=44; side="EMPTY"; vehicle="Land_fortified_nest_small_EP1"; skill=0.60000002; text="bagshumv15"; init="this allowDamage false"; }; class Item12 { position[]={24.293045,115.5665,-32.981567}; id=45; side="EMPTY"; vehicle="Land_fortified_nest_small_EP1"; skill=0.60000002; text="bagshumv16"; init="this allowDamage false"; }; class Item13 { position[]={73.411697,567.51123,-76.20697}; id=46; side="EMPTY"; vehicle="BAF_VehicleBox"; skill=0.60000002; text="stuffbox"; }; class Item14 { position[]={4960.7603,29.632381,6194.1885}; azimut=0.77357298; special="NONE"; id=62; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="arcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_M249_AIM"", 5];this addWeaponCargo [""ACE_M249_PIP_ACOG"", 5];this addWeaponCargo [""ACE_MG36"", 5];this addWeaponCargo [""ACE_MG36_D"", 5];this addWeaponCargo [""ACE_RPK"", 5];this addWeaponCargo [""ACE_RPK74M"", 5];this addWeaponCargo [""ACE_RPK74M_1P29"", 5];this addWeaponCargo [""BAF_L110A1_Aim"", 5];this addWeaponCargo [""M249"", 5];this addWeaponCargo [""M249_EP1"", 5];this addWeaponCargo [""M249_m145_EP1"", 5];this addWeaponCargo [""M249_TWS_EP1"", 5];this addWeaponCargo [""m8_SAW"", 5];this addWeaponCargo [""MG36"", 5];this addWeaponCargo [""MG36_camo"", 5];this addWeaponCargo [""RPK_74"", 5];this addMagazineCargo [""100Rnd_556x45_BetaCMag"", 50];this addMagazineCargo [""100Rnd_556x45_M249"", 50];this addMagazineCargo [""200Rnd_556x45_L110A1"", 50];this addMagazineCargo [""200Rnd_556x45_M249"", 50];this addMagazineCargo [""20Rnd_556x45_Stanag"", 50];this addMagazineCargo [""30Rnd_556x45_Stanag"", 50];this addMagazineCargo [""30Rnd_556x45_StanagSD"", 50];this addMagazineCargo [""ACE_100Rnd_556x45_T_M249"", 50];this addMagazineCargo [""ACE_200Rnd_556x45_T_M249"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_SB_Stanag"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_T_Stanag"", 50];this addMagazineCargo [""30Rnd_556x45_G36"", 50];this addMagazineCargo [""30Rnd_556x45_G36SD"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_AP_G36"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_T_G36"", 50];this addMagazineCargo [""30Rnd_762x39_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_AP_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_AP_S_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_SD_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_T_AK47"", 50];this addMagazineCargo [""ACE_40Rnd_762x39_AP_AK47"", 50];this addMagazineCargo [""ACE_40Rnd_762x39_B_AK47"", 50];this addMagazineCargo [""ACE_40Rnd_762x39_T_AK47"", 50];this addMagazineCargo [""ACE_75Rnd_762x39_B_AK47"", 50];this addMagazineCargo [""ACE_75Rnd_762x39_SD_AK47"", 50];this addMagazineCargo [""30Rnd_545x39_AK"", 50];this addMagazineCargo [""30Rnd_545x39_AKSD"", 50];this addMagazineCargo [""75Rnd_545x39_RPK"", 50];this addMagazineCargo [""ACE_30Rnd_545x39_AP_AK"", 50];this addMagazineCargo [""ACE_30Rnd_545x39_EP_AK"", 50];this addMagazineCargo [""ACE_30Rnd_545x39_T_AK"", 50];this addMagazineCargo [""ACE_45Rnd_545x39_AP_AK"", 50];this addMagazineCargo [""ACE_45Rnd_545x39_B_AK"", 50];this addMagazineCargo [""ACE_45Rnd_545x39_EP_AK"", 50];this addMagazineCargo [""ACE_75Rnd_545x39_T_RPK"", 50];"; }; class Item15 { position[]={4894.8525,37.64901,6204.0112}; azimut=-630.60132; id=63; side="EMPTY"; vehicle="M1A1_US_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item16 { position[]={4967.6826,37.550098,6257.0581}; azimut=-511.5751; id=64; side="EMPTY"; vehicle="M2A2_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item17 { position[]={5071.228,29.045601,6114.0376}; azimut=270; id=65; side="EMPTY"; vehicle="F35B"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item18 { position[]={4943.9458,34.813065,6291.521}; azimut=-242.17776; id=66; side="EMPTY"; vehicle="MtvrReammo_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item19 { position[]={4936.4819,34.803696,6277.3726}; azimut=116.525; id=67; side="EMPTY"; vehicle="MtvrRefuel_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item20 { position[]={4939.9409,34.80191,6283.8301}; azimut=116.525; id=68; side="EMPTY"; vehicle="MtvrRepair_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item21 { position[]={4929.3569,34.808361,6263.7334}; azimut=116.525; id=69; side="EMPTY"; vehicle="HMMWV_MK19_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item22 { position[]={4927.4141,34.806831,6260.0103}; azimut=116.525; id=70; side="EMPTY"; vehicle="HMMWV_M998_crows_M2_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item23 { position[]={4925.4722,34.822544,6256.5718}; azimut=116.525; id=71; side="EMPTY"; vehicle="HMMWV_M998A2_SOV_DES_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item24 { position[]={4924.1772,34.738926,6252.7285}; azimut=116.525; id=72; side="EMPTY"; vehicle="ArmoredSUV_PMC"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item25 { position[]={5058.042,29.232536,6164.9907}; azimut=270; id=73; side="EMPTY"; vehicle="AH6J_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item26 { position[]={5057.6338,29.199577,6151.0991}; azimut=270; id=74; side="EMPTY"; vehicle="MH6J_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item27 { position[]={4909.5742,29.994421,6288.5239}; azimut=214.76967; id=75; side="EMPTY"; vehicle="UH60M_EP1"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item28 { position[]={4883.7026,29.520866,6245.5308}; azimut=-218.90646; id=76; side="EMPTY"; vehicle="MV22"; skill=0.60000002; init="0 = [this, 900, 7200] execVM ""scripts\vehicle.sqf"";"; }; class Item29 { position[]={4991.188,29.473442,6195.3115}; azimut=-0.88349485; id=77; side="EMPTY"; vehicle="ACRE_RadioBox"; skill=0.60000002; }; class Item30 { position[]={4762.1055,29.667351,6130.2095}; azimut=270; special="NONE"; id=83; side="EMPTY"; vehicle="M2StaticMG_US_EP1"; leader=1; skill=0.60000002; text="M2_guard"; init="this allowDamage false; this addEventHandler [""Fired"",{[_this select 0,getNumber (configFile/""CfgAmmo""/(_this select 4)/""explosive"")] spawn {if (_this select 1==1) then {sleep 0.75};_this select 0 setVehicleAmmo 1}}] "; }; class Item31 { position[]={4763.1631,29.716862,6154.5889}; azimut=270; special="NONE"; id=84; side="EMPTY"; vehicle="TOW_TriPod_US_EP1"; leader=1; skill=0.60000002; text="TOW_guard"; init="this allowDamage false; this addEventHandler [""Fired"",{[_this select 0,getNumber (configFile/""CfgAmmo""/(_this select 4)/""explosive"")] spawn {if (_this select 1==1) then {sleep 0.75};_this select 0 setVehicleAmmo 1}}] "; }; class Item32 { position[]={4527.541,30.221693,6264.6602}; azimut=246.6031; special="NONE"; id=87; side="EMPTY"; vehicle="C130J_wreck_EP1"; leader=1; skill=0.60000002; init="this setVectorUp [0,0,1]"; }; class Item33 { position[]={4811.0864,29.462313,6048.9194}; azimut=270; special="NONE"; id=88; side="EMPTY"; vehicle="US_WarfareBAntiAirRadar_Base_EP1"; leader=1; skill=0.60000002; init="this setVectorUp [0,0,1] "; }; class Item34 { position[]={4987.6528,29.468174,6195.27}; azimut=0.77357298; special="NONE"; id=89; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="equipcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_BrokenNVGoggles"", 5];this addWeaponCargo [""ACE_Laserdesignator_D"", 5];this addWeaponCargo [""ACE_MX2A"", 5];this addWeaponCargo [""ACE_Rangefinder_OD"", 5];this addWeaponCargo [""ACE_YardAge450"", 5];this addWeaponCargo [""Binocular"", 5];this addWeaponCargo [""Binocular_Vector"", 5];this addWeaponCargo [""Laserdesignator"", 5];this addWeaponCargo [""LRTV_ACR"", 5];this addWeaponCargo [""NVGoggles"", 5];this addMagazineCargo [""ACE_Battery_Rangefinder"", 50];this addMagazineCargo [""Laserbatteries"", 50];this addMagazineCargo [""ACE_BB2847"", 50];"; }; class Item35 { position[]={4984.0811,29.475534,6195.1538}; azimut=0.77357298; special="NONE"; id=90; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="itemcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ace_arty_rangeTable_2b14"", 5];this addWeaponCargo [""ace_arty_rangeTable_2b14_legacy"", 5];this addWeaponCargo [""ace_arty_rangeTable_d30_legacy"", 5];this addWeaponCargo [""ace_arty_rangeTable_m119"", 5];this addWeaponCargo [""ace_arty_rangeTable_m119_legacy"", 5];this addWeaponCargo [""ace_arty_rangeTable_m224"", 5];this addWeaponCargo [""ace_arty_rangeTable_m224_legacy"", 5];this addWeaponCargo [""ace_arty_rangeTable_m252"", 5];this addWeaponCargo [""ace_arty_rangeTable_m252_legacy"", 5];this addWeaponCargo [""ace_arty_rangeTable_tampella"", 5];this addWeaponCargo [""ACE_Broken_GPS"", 5];this addWeaponCargo [""ACE_BrokenRadio"", 5];this addWeaponCargo [""ACE_BrokenWatch"", 5];this addWeaponCargo [""ACE_Cellphone"", 5];this addWeaponCargo [""ACE_DAGR"", 5];this addWeaponCargo [""ACE_Earplugs"", 5];this addWeaponCargo [""ACE_GlassesBalaklava"", 5];this addWeaponCargo [""ACE_GlassesBalaklavaGray"", 5];this addWeaponCargo [""ACE_GlassesBalaklavaOlive"", 5];this addWeaponCargo [""ACE_GlassesBlackSun"", 5];this addWeaponCargo [""ACE_GlassesBlueSun"", 5];this addWeaponCargo [""ACE_GlassesGasMask2_US"", 5];this addWeaponCargo [""ACE_GlassesGasMask_RU"", 5];this addWeaponCargo [""ACE_GlassesGasMask_S10"", 5];this addWeaponCargo [""ACE_GlassesGasMask_US"", 5];this addWeaponCargo [""ACE_GlassesGreenSun"", 5];this addWeaponCargo [""ACE_GlassesLHD_glasses"", 5];this addWeaponCargo [""ACE_GlassesMFS"", 5];this addWeaponCargo [""ACE_GlassesRedSun"", 5];this addWeaponCargo [""ACE_GlassesSunglasses"", 5];this addWeaponCargo [""ACE_GlassesTactical"", 5];this addWeaponCargo [""ACE_HuntIR_monitor"", 5];this addWeaponCargo [""ACE_JerryCan_Dummy_15"", 5];this addWeaponCargo [""ACE_Kestrel4500"", 5];this addWeaponCargo [""ACE_KeyCuffs"", 5];this addWeaponCargo [""ACE_Map"", 5];this addWeaponCargo [""ACE_Map_Tools"", 5];this addWeaponCargo [""ACE_MineMarkers"", 5];this addWeaponCargo [""ACE_MineMarkers_Light"", 5];this addWeaponCargo [""ACE_MineMarkers_MineFlag"", 5];this addWeaponCargo [""ACE_MineMarkers_MineSign"", 5];this addWeaponCargo [""ACE_MineMarkers_PathSign"", 5];this addWeaponCargo [""ACE_SniperTripod"", 5];this addWeaponCargo [""ACE_SOFLAMTripod"", 5];this addWeaponCargo [""ACE_SpareBarrel"", 5];this addWeaponCargo [""ACE_SpottingScope"", 5];this addWeaponCargo [""ACE_WireCutter"", 5];this addWeaponCargo [""CDF_dogtags"", 5];this addWeaponCargo [""Cobalt_File"", 5];this addWeaponCargo [""EvDogTags"", 5];this addWeaponCargo [""EvKobalt"", 5];this addWeaponCargo [""EvMap"", 5];this addWeaponCargo [""EvMoney"", 5];this addWeaponCargo [""EvMoscow"", 5];this addWeaponCargo [""EvPhoto"", 5];this addWeaponCargo [""ItemCompass"", 5];this addWeaponCargo [""ItemGPS"", 5];this addWeaponCargo [""ItemMap"", 5];this addWeaponCargo [""ItemRadio"", 5];this addWeaponCargo [""ItemWatch"", 5];this addWeaponCargo [""Kostey_map_case"", 5];this addWeaponCargo [""Kostey_notebook"", 5];this addWeaponCargo [""Kostey_photos"", 5];this addWeaponCargo [""Moscow_Bombing_File"", 5];this addWeaponCargo [""PMC_documents"", 5];"; }; class Item36 { position[]={4980.4468,29.493204,6195.2749}; azimut=0.77357298; special="NONE"; id=91; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="launchercrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_Arty_AimingPost_M1A2_M58"", 5];this addWeaponCargo [""ACE_Arty_AimingPost_M1A2_M59"", 5];this addWeaponCargo [""ACE_Arty_M1A1_Collimator"", 5];this addWeaponCargo [""ACE_Arty_M2A2_Aiming_Circle"", 5];this addWeaponCargo [""ACE_Javelin_CLU"", 5];this addWeaponCargo [""ACE_Javelin_Direct"", 5];this addWeaponCargo [""ACE_M136_CSRS"", 5];this addWeaponCargo [""ACE_M47_Daysight"", 5];this addWeaponCargo [""ACE_M72"", 5];this addWeaponCargo [""ACE_M72A2"", 5];this addWeaponCargo [""ACE_ParachutePack"", 5];this addWeaponCargo [""ACE_ParachuteRoundPack"", 5];this addWeaponCargo [""ACE_RMG"", 5];this addWeaponCargo [""ACE_RPG22"", 5];this addWeaponCargo [""ACE_RPG27"", 5];this addWeaponCargo [""ACE_RPG29"", 5];this addWeaponCargo [""ACE_RPG7V_PGO7"", 5];this addWeaponCargo [""ACE_RPOM"", 5];this addWeaponCargo [""ACE_RSHG1"", 5];this addWeaponCargo [""BAF_NLAW_Launcher"", 5];this addWeaponCargo [""Igla"", 5];this addWeaponCargo [""Javelin"", 5];this addWeaponCargo [""M136"", 5];this addWeaponCargo [""M47Launcher_EP1"", 5];this addWeaponCargo [""MAAWS"", 5];this addWeaponCargo [""MetisLauncher"", 5];this addWeaponCargo [""RPG18"", 5];this addWeaponCargo [""RPG7V"", 5];this addWeaponCargo [""SMAW"", 5];this addWeaponCargo [""Stinger"", 5];this addWeaponCargo [""Strela"", 5];this addMagazineCargo [""ACE_RPG29_PG29"", 50];this addMagazineCargo [""ACE_RPG29_TBG29"", 50];this addMagazineCargo [""ACE_PG7VM"", 50];this addMagazineCargo [""ACE_TBG7V"", 50];this addMagazineCargo [""OG7"", 50];this addMagazineCargo [""PG7V"", 50];this addMagazineCargo [""PG7VL"", 50];this addMagazineCargo [""PG7VR"", 50];this addMagazineCargo [""Igla"", 50];this addMagazineCargo [""Dragon_EP1"", 50];this addMagazineCargo [""ACE_MAAWS_HE"", 50];this addMagazineCargo [""MAAWS_HEAT"", 50];this addMagazineCargo [""MAAWS_HEDP"", 50];this addMagazineCargo [""ACE_AT13TB"", 50];this addMagazineCargo [""AT13"", 50];this addMagazineCargo [""ACE_SMAW_NE"", 50];this addMagazineCargo [""SMAW_HEAA"", 50];this addMagazineCargo [""SMAW_HEDP"", 50];this addMagazineCargo [""ACE_SMAW_Spotting"", 50];this addMagazineCargo [""Stinger"", 50];this addMagazineCargo [""Strela"", 50];"; }; class Item37 { position[]={4957.9541,29.646736,6194.1621}; azimut=0.77357298; special="NONE"; id=92; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="mgcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_BAF_L7A2_GPMG"", 5];this addWeaponCargo [""ACE_M240B"", 5];this addWeaponCargo [""ACE_M240L"", 5];this addWeaponCargo [""ACE_M240L_M145"", 5];this addWeaponCargo [""ACE_M60"", 5];this addWeaponCargo [""BAF_L7A2_GPMG"", 5];this addWeaponCargo [""M240"", 5];this addWeaponCargo [""m240_scoped_EP1"", 5];this addWeaponCargo [""M60A4_EP1"", 5];this addWeaponCargo [""Mk_48"", 5];this addWeaponCargo [""Mk_48_DES_EP1"", 5];this addWeaponCargo [""Pecheneg"", 5];this addWeaponCargo [""PK"", 5];this addMagazineCargo [""100Rnd_762x51_M240"", 50];this addMagazineCargo [""100Rnd_762x54_PK"", 50];"; }; class Item38 { position[]={4955.3882,29.642717,6194.0791}; azimut=0.77357298; special="NONE"; id=93; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="pistolcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_APS"", 5];this addWeaponCargo [""ACE_APSB"", 5];this addWeaponCargo [""ACE_Flaregun"", 5];this addWeaponCargo [""ACE_Glock18"", 5];this addWeaponCargo [""ACE_Knicklicht_Proxy"", 5];this addWeaponCargo [""ACE_L9A1"", 5];this addWeaponCargo [""ACE_MugLite"", 5];this addWeaponCargo [""ACE_P226"", 5];this addWeaponCargo [""ACE_P8"", 5];this addWeaponCargo [""ACE_SearchMirror"", 5];this addWeaponCargo [""ACE_SSVZ"", 5];this addWeaponCargo [""ACE_TT"", 5];this addWeaponCargo [""ACE_USP"", 5];this addWeaponCargo [""ACE_USPSD"", 5];this addWeaponCargo [""Colt1911"", 5];this addWeaponCargo [""CZ_75_D_COMPACT"", 5];this addWeaponCargo [""CZ_75_P_07_DUTY"", 5];this addWeaponCargo [""CZ_75_SP_01_PHANTOM"", 5];this addWeaponCargo [""CZ_75_SP_01_PHANTOM_SD"", 5];this addWeaponCargo [""glock17_EP1"", 5];this addWeaponCargo [""M9"", 5];this addWeaponCargo [""M9SD"", 5];this addWeaponCargo [""Makarov"", 5];this addWeaponCargo [""MakarovSD"", 5];this addWeaponCargo [""revolver_EP1"", 5];this addWeaponCargo [""revolver_gold_EP1"", 5];this addWeaponCargo [""Sa61_EP1"", 5];this addWeaponCargo [""UZI_EP1"", 5];this addWeaponCargo [""UZI_SD_EP1"", 5];this addMagazineCargo [""ACE_20Rnd_9x18_APS"", 50];this addMagazineCargo [""ACE_20Rnd_9x18_APSB"", 50];this addMagazineCargo [""ACE_SSGreen_FG"", 50];this addMagazineCargo [""ACE_SSRed_FG"", 50];this addMagazineCargo [""ACE_SSWhite_FG"", 50];this addMagazineCargo [""ACE_SSYellow_FG"", 50];this addMagazineCargo [""17Rnd_9x19_glock17"", 50];this addMagazineCargo [""ACE_33Rnd_9x19_G18"", 50];this addMagazineCargo [""ACE_13Rnd_9x19_L9A1"", 50];this addMagazineCargo [""ACE_15Rnd_9x19_P226"", 50];this addMagazineCargo [""ACE_15Rnd_9x19_P8"", 50];this addMagazineCargo [""ACE_8Rnd_762x25_B_Tokarev"", 50];this addMagazineCargo [""ACE_12Rnd_45ACP_USP"", 50];this addMagazineCargo [""7Rnd_45ACP_1911"", 50];this addMagazineCargo [""15Rnd_9x19_M9"", 50];this addMagazineCargo [""15Rnd_9x19_M9SD"", 50];this addMagazineCargo [""18Rnd_9x19_Phantom"", 50];this addMagazineCargo [""18Rnd_9x19_PhantomSD"", 50];this addMagazineCargo [""ACE_16Rnd_9x19_CZ75"", 50];this addMagazineCargo [""8Rnd_9x18_Makarov"", 50];this addMagazineCargo [""8Rnd_9x18_MakarovSD"", 50];this addMagazineCargo [""6Rnd_45ACP"", 50];this addMagazineCargo [""10Rnd_B_765x17_Ball"", 50];this addMagazineCargo [""20Rnd_B_765x17_Ball"", 50];this addMagazineCargo [""30Rnd_9x19_UZI"", 50];this addMagazineCargo [""30Rnd_9x19_UZI_SD"", 50];"; }; class Item39 { position[]={4952.4497,29.641886,6194.0381}; azimut=0.77357298; special="NONE"; id=94; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="riflecrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""AA12_PMC"", 5];this addWeaponCargo [""ACE_AEK_971"", 5];this addWeaponCargo [""ACE_AEK_971_1p63"", 5];this addWeaponCargo [""ACE_AEK_971_1p78"", 5];this addWeaponCargo [""ACE_AEK_971_1pn100"", 5];this addWeaponCargo [""ACE_AEK_971_gp"", 5];this addWeaponCargo [""ACE_AEK_971_gp_1p63"", 5];this addWeaponCargo [""ACE_AEK_971_shahin"", 5];this addWeaponCargo [""ACE_AEK_971_tgp_cln"", 5];this addWeaponCargo [""ACE_AEK_973s"", 5];this addWeaponCargo [""ACE_AEK_973s_1p63"", 5];this addWeaponCargo [""ACE_AEK_973s_1p78"", 5];this addWeaponCargo [""ACE_AEK_973s_1pn100"", 5];this addWeaponCargo [""ACE_AEK_973s_gp"", 5];this addWeaponCargo [""ACE_AEK_973s_gp_1p63"", 5];this addWeaponCargo [""ACE_AEK_973s_shahin"", 5];this addWeaponCargo [""ACE_AEK_973s_tgp_cln"", 5];this addWeaponCargo [""ACE_AK103"", 5];this addWeaponCargo [""ACE_AK103_1P29"", 5];this addWeaponCargo [""ACE_AK103_GL"", 5];this addWeaponCargo [""ACE_AK103_GL_1P29"", 5];this addWeaponCargo [""ACE_AK103_GL_Kobra"", 5];this addWeaponCargo [""ACE_AK103_GL_PSO"", 5];this addWeaponCargo [""ACE_AK103_Kobra"", 5];this addWeaponCargo [""ACE_AK103_PSO"", 5];this addWeaponCargo [""ACE_AK104"", 5];this addWeaponCargo [""ACE_AK104_1P29"", 5];this addWeaponCargo [""ACE_AK104_Kobra"", 5];this addWeaponCargo [""ACE_AK104_PSO"", 5];this addWeaponCargo [""ACE_AK105"", 5];this addWeaponCargo [""ACE_AK105_1P29"", 5];this addWeaponCargo [""ACE_AK105_Kobra"", 5];this addWeaponCargo [""ACE_AK105_PSO"", 5];this addWeaponCargo [""ACE_AK74M"", 5];this addWeaponCargo [""ACE_AK74M_1P29"", 5];this addWeaponCargo [""ACE_AK74M_1P78"", 5];this addWeaponCargo [""ACE_AK74M_1P78_FL"", 5];this addWeaponCargo [""ACE_AK74M_1P78_FL_F"", 5];this addWeaponCargo [""ACE_AK74M_FL"", 5];this addWeaponCargo [""ACE_AK74M_FL_F"", 5];this addWeaponCargo [""ACE_AK74M_GL"", 5];this addWeaponCargo [""ACE_AK74M_GL_1P29"", 5];this addWeaponCargo [""ACE_AK74M_GL_1P78"", 5];this addWeaponCargo [""ACE_AK74M_GL_Kobra"", 5];this addWeaponCargo [""ACE_AK74M_GL_NSPU"", 5];this addWeaponCargo [""ACE_AK74M_GL_PSO"", 5];this addWeaponCargo [""ACE_AK74M_GL_TWS"", 5];this addWeaponCargo [""ACE_AK74M_Kobra"", 5];this addWeaponCargo [""ACE_AK74M_Kobra_FL"", 5];this addWeaponCargo [""ACE_AK74M_Kobra_FL_F"", 5];this addWeaponCargo [""ACE_AK74M_NSPU"", 5];this addWeaponCargo [""ACE_AK74M_NSPU_FL"", 5];this addWeaponCargo [""ACE_AK74M_NSPU_FL_F"", 5];this addWeaponCargo [""ACE_AK74M_PSO"", 5];this addWeaponCargo [""ACE_AK74M_PSO_FL"", 5];this addWeaponCargo [""ACE_AK74M_PSO_FL_F"", 5];this addWeaponCargo [""ACE_AK74M_SD"", 5];this addWeaponCargo [""ACE_AK74M_SD_1P78"", 5];this addWeaponCargo [""ACE_AK74M_SD_1P78_F"", 5];this addWeaponCargo [""ACE_AK74M_SD_F"", 5];this addWeaponCargo [""ACE_AK74M_SD_Kobra"", 5];this addWeaponCargo [""ACE_AK74M_SD_Kobra_F"", 5];this addWeaponCargo [""ACE_AK74M_SD_NSPU"", 5];this addWeaponCargo [""ACE_AK74M_SD_NSPU_F"", 5];this addWeaponCargo [""ACE_AK74M_SD_PSO"", 5];this addWeaponCargo [""ACE_AK74M_SD_PSO_F"", 5];this addWeaponCargo [""ACE_AK74M_SD_TWS"", 5];this addWeaponCargo [""ACE_AK74M_SD_TWS_F"", 5];this addWeaponCargo [""ACE_AK74M_TWS"", 5];this addWeaponCargo [""ACE_AK74M_TWS_FL"", 5];this addWeaponCargo [""ACE_AK74M_TWS_FL_F"", 5];this addWeaponCargo [""ACE_AKM"", 5];this addWeaponCargo [""ACE_AKM_GL"", 5];this addWeaponCargo [""ACE_AKMS"", 5];this addWeaponCargo [""ACE_AKMS_SD"", 5];this addWeaponCargo [""ACE_AKS74_GP25"", 5];this addWeaponCargo [""ACE_AKS74_UN"", 5];this addWeaponCargo [""ACE_AKS74P"", 5];this addWeaponCargo [""ACE_AKS74P_1P29"", 5];this addWeaponCargo [""ACE_AKS74P_GL"", 5];this addWeaponCargo [""ACE_AKS74P_GL_1P29"", 5];this addWeaponCargo [""ACE_AKS74P_GL_Kobra"", 5];this addWeaponCargo [""ACE_AKS74P_GL_PSO"", 5];this addWeaponCargo [""ACE_AKS74P_Kobra"", 5];this addWeaponCargo [""ACE_AKS74P_PSO"", 5];this addWeaponCargo [""ACE_EVO3_CCO_F"", 5];this addWeaponCargo [""ACE_EVO3_SD_CCO_L"", 5];this addWeaponCargo [""ACE_G36A1_AG36_UP_F"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1_D"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1_D_F"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1_D_UP"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1_D_UP_F"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1_F"", 5];this addWeaponCargo [""ACE_G36A1_AG36A1_UP"", 5];this addWeaponCargo [""ACE_G36A2"", 5];this addWeaponCargo [""ACE_G36A2_AG36A2"", 5];this addWeaponCargo [""ACE_G36A2_AG36A2_F"", 5];this addWeaponCargo [""ACE_G36A2_AG36A2_UP"", 5];this addWeaponCargo [""ACE_G36A2_AG36A2_UP_F"", 5];this addWeaponCargo [""ACE_G36A2_Bipod"", 5];this addWeaponCargo [""ACE_G36A2_Bipod_D"", 5];this addWeaponCargo [""ACE_G36A2_D"", 5];this addWeaponCargo [""ACE_G36A2_D_F"", 5];this addWeaponCargo [""ACE_G36A2_F"", 5];this addWeaponCargo [""ACE_G36K_EOTech"", 5];this addWeaponCargo [""ACE_G36K_EOTech_D"", 5];this addWeaponCargo [""ACE_G36K_iron"", 5];this addWeaponCargo [""ACE_G36K_iron_D"", 5];this addWeaponCargo [""ACE_G3A3"", 5];this addWeaponCargo [""ACE_G3A3_RSAS"", 5];this addWeaponCargo [""ACE_G3A3_RSAS_F"", 5];this addWeaponCargo [""ACE_G3SG1"", 5];this addWeaponCargo [""ACE_gr1"", 5];this addWeaponCargo [""ACE_gr1sd"", 5];this addWeaponCargo [""ACE_gr1sdsp"", 5];this addWeaponCargo [""ACE_gr1sp"", 5];this addWeaponCargo [""ACE_HK416_D10"", 5];this addWeaponCargo [""ACE_HK416_D10_AIM"", 5];this addWeaponCargo [""ACE_HK416_D10_COMPM3"", 5];this addWeaponCargo [""ACE_HK416_D10_COMPM3_SD"", 5];this addWeaponCargo [""ACE_HK416_D10_Holo"", 5];this addWeaponCargo [""ACE_HK416_D10_M320"", 5];this addWeaponCargo [""ACE_HK416_D10_M320_UP"", 5];this addWeaponCargo [""ACE_HK416_D10_SD"", 5];this addWeaponCargo [""ACE_HK416_D14"", 5];this addWeaponCargo [""ACE_HK416_D14_ACOG_PVS14"", 5];this addWeaponCargo [""ACE_HK416_D14_COMPM3"", 5];this addWeaponCargo [""ACE_HK416_D14_COMPM3_M320"", 5];this addWeaponCargo [""ACE_HK416_D14_COMPM3_M320_UP"", 5];this addWeaponCargo [""ACE_HK416_D14_SD"", 5];this addWeaponCargo [""ACE_HK416_D14_TWS"", 5];this addWeaponCargo [""ACE_HK417_Eotech_4x"", 5];this addWeaponCargo [""ACE_HK417_leupold"", 5];this addWeaponCargo [""ACE_HK417_micro"", 5];this addWeaponCargo [""ACE_HK417_Shortdot"", 5];this addWeaponCargo [""ACE_KAC_PDW"", 5];this addWeaponCargo [""ACE_M1014_Eotech"", 5];this addWeaponCargo [""ACE_M14_ACOG"", 5];this addWeaponCargo [""ACE_m16a2_scope"", 5];this addWeaponCargo [""ACE_m16a2gl_scope"", 5];this addWeaponCargo [""ACE_m16a2gl_scope_UP"", 5];this addWeaponCargo [""ACE_M16A2GL_UP"", 5];this addWeaponCargo [""ACE_M16A4_ACG_GL_UP"", 5];this addWeaponCargo [""ACE_M16A4_CCO_GL"", 5];this addWeaponCargo [""ACE_M16A4_CCO_GL_UP"", 5];this addWeaponCargo [""ACE_M16A4_EOT"", 5];this addWeaponCargo [""ACE_M16A4_EOT_GL"", 5];this addWeaponCargo [""ACE_M16A4_EOT_GL_UP"", 5];this addWeaponCargo [""ACE_M16A4_GL_UP"", 5];this addWeaponCargo [""ACE_M16A4_Iron"", 5];this addWeaponCargo [""ACE_M27_IAR"", 5];this addWeaponCargo [""ACE_M27_IAR_ACOG"", 5];this addWeaponCargo [""ACE_M27_IAR_CCO"", 5];this addWeaponCargo [""ACE_M3A1"", 5];this addWeaponCargo [""ACE_M4"", 5];this addWeaponCargo [""ACE_M4_ACOG"", 5];this addWeaponCargo [""ACE_M4_ACOG_F"", 5];this addWeaponCargo [""ACE_M4_ACOG_PVS14"", 5];this addWeaponCargo [""ACE_M4_ACOG_PVS14_F"", 5];this addWeaponCargo [""ACE_M4_Aim"", 5];this addWeaponCargo [""ACE_M4_Aim_F"", 5];this addWeaponCargo [""ACE_M4_AIM_GL"", 5];this addWeaponCargo [""ACE_M4_AIM_GL_F"", 5];this addWeaponCargo [""ACE_M4_AIM_GL_UP"", 5];this addWeaponCargo [""ACE_M4_AIM_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4_C"", 5];this addWeaponCargo [""ACE_M4_Eotech"", 5];this addWeaponCargo [""ACE_M4_Eotech_F"", 5];this addWeaponCargo [""ACE_M4_Eotech_GL"", 5];this addWeaponCargo [""ACE_M4_Eotech_GL_F"", 5];this addWeaponCargo [""ACE_M4_Eotech_GL_UP"", 5];this addWeaponCargo [""ACE_M4_Eotech_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4_F"", 5];this addWeaponCargo [""ACE_M4_GL"", 5];this addWeaponCargo [""ACE_M4_GL_F"", 5];this addWeaponCargo [""ACE_M4_GL_UP"", 5];this addWeaponCargo [""ACE_M4_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4_RCO_GL"", 5];this addWeaponCargo [""ACE_M4_RCO_GL_F"", 5];this addWeaponCargo [""ACE_M4_RCO_GL_UP"", 5];this addWeaponCargo [""ACE_M4_RCO_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_ACOG"", 5];this addWeaponCargo [""ACE_M4A1_ACOG_F"", 5];this addWeaponCargo [""ACE_M4A1_ACOG_PVS14"", 5];this addWeaponCargo [""ACE_M4A1_ACOG_PVS14_F"", 5];this addWeaponCargo [""ACE_M4A1_ACOG_SD"", 5];this addWeaponCargo [""ACE_M4A1_ACOG_SD_F"", 5];this addWeaponCargo [""ACE_M4A1_Aim_F"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_F"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_SD"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_SD_F"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_SD_UP"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_SD_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_UP"", 5];this addWeaponCargo [""ACE_M4A1_AIM_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_Aim_SD"", 5];this addWeaponCargo [""ACE_M4A1_Aim_SD_F"", 5];this addWeaponCargo [""ACE_M4A1_C"", 5];this addWeaponCargo [""ACE_M4A1_EOT_SD"", 5];this addWeaponCargo [""ACE_M4A1_EOT_SD_F"", 5];this addWeaponCargo [""ACE_M4A1_Eotech"", 5];this addWeaponCargo [""ACE_M4A1_Eotech_F"", 5];this addWeaponCargo [""ACE_M4A1_F"", 5];this addWeaponCargo [""ACE_M4A1_GL"", 5];this addWeaponCargo [""ACE_M4A1_GL_F"", 5];this addWeaponCargo [""ACE_M4A1_GL_SD"", 5];this addWeaponCargo [""ACE_M4A1_GL_SD_F"", 5];this addWeaponCargo [""ACE_M4A1_GL_SD_UP"", 5];this addWeaponCargo [""ACE_M4A1_GL_SD_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_GL_UP"", 5];this addWeaponCargo [""ACE_M4A1_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_HWS_GL_camo_UP"", 5];this addWeaponCargo [""ACE_M4A1_HWS_GL_F"", 5];this addWeaponCargo [""ACE_M4A1_HWS_GL_SD_Camo_UP"", 5];this addWeaponCargo [""ACE_M4A1_HWS_GL_UP"", 5];this addWeaponCargo [""ACE_M4A1_HWS_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_RCO2_GL"", 5];this addWeaponCargo [""ACE_M4A1_RCO2_GL_F"", 5];this addWeaponCargo [""ACE_M4A1_RCO2_GL_UP"", 5];this addWeaponCargo [""ACE_M4A1_RCO2_GL_UP_F"", 5];this addWeaponCargo [""ACE_M4A1_RCO_GL"", 5];this addWeaponCargo [""ACE_M4SPR_SD"", 5];this addWeaponCargo [""ACE_Minedetector_US"", 5];this addWeaponCargo [""ACE_Mk12mod1"", 5];this addWeaponCargo [""ACE_Mk12mod1_SD"", 5];this addWeaponCargo [""ACE_MP5A4"", 5];this addWeaponCargo [""ACE_MP5A5"", 5];this addWeaponCargo [""ACE_MP5SD"", 5];this addWeaponCargo [""ACE_MP7"", 5];this addWeaponCargo [""ACE_MP7_RSAS"", 5];this addWeaponCargo [""ACE_oc14"", 5];this addWeaponCargo [""ACE_oc14gl"", 5];this addWeaponCargo [""ACE_oc14glsp"", 5];this addWeaponCargo [""ACE_oc14sd"", 5];this addWeaponCargo [""ACE_oc14sdsp"", 5];this addWeaponCargo [""ACE_oc14sp"", 5];this addWeaponCargo [""ACE_SCAR_H_STD_Spect"", 5];this addWeaponCargo [""ACE_SKS"", 5];this addWeaponCargo [""ACE_SOC_M4A1"", 5];this addWeaponCargo [""ACE_SOC_M4A1_Aim"", 5];this addWeaponCargo [""ACE_SOC_M4A1_AIM_SD"", 5];this addWeaponCargo [""ACE_SOC_M4A1_EOT_SD"", 5];this addWeaponCargo [""ACE_SOC_M4A1_EOT_SD_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_Eotech"", 5];this addWeaponCargo [""ACE_SOC_M4A1_Eotech_4x"", 5];this addWeaponCargo [""ACE_SOC_M4A1_Eotech_4x_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_Eotech_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_13"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_AIMPOINT"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_EOTECH"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_SD"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_SD_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_SD_UP"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_SD_UP_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_GL_UP"", 5];this addWeaponCargo [""ACE_SOC_M4A1_RCO_GL"", 5];this addWeaponCargo [""ACE_SOC_M4A1_RCO_GL_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_RCO_GL_UP"", 5];this addWeaponCargo [""ACE_SOC_M4A1_RCO_GL_UP_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_SD_9"", 5];this addWeaponCargo [""ACE_SOC_M4A1_SHORTDOT"", 5];this addWeaponCargo [""ACE_SOC_M4A1_SHORTDOT_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_SHORTDOT_SD"", 5];this addWeaponCargo [""ACE_SOC_M4A1_SHORTDOT_SD_F"", 5];this addWeaponCargo [""ACE_SOC_M4A1_TWS"", 5];this addWeaponCargo [""ACE_SOC_M4A1_TWS_F"", 5];this addWeaponCargo [""ACE_SPAS12"", 5];this addWeaponCargo [""ACE_UMP45"", 5];this addWeaponCargo [""ACE_UMP45_AIM"", 5];this addWeaponCargo [""ACE_UMP45_AIM_SD"", 5];this addWeaponCargo [""ACE_UMP45_SD"", 5];this addWeaponCargo [""ACE_Val"", 5];this addWeaponCargo [""ACE_Val_Kobra"", 5];this addWeaponCargo [""ACE_Val_PSO"", 5];this addWeaponCargo [""ACE_VMH3"", 5];this addWeaponCargo [""ACE_VMM3"", 5];this addWeaponCargo [""AK_107_GL_kobra"", 5];this addWeaponCargo [""AK_107_GL_pso"", 5];this addWeaponCargo [""AK_107_kobra"", 5];this addWeaponCargo [""AK_107_pso"", 5];this addWeaponCargo [""AK_47_M"", 5];this addWeaponCargo [""AK_47_S"", 5];this addWeaponCargo [""AK_74"", 5];this addWeaponCargo [""AK_74_GL"", 5];this addWeaponCargo [""AK_74_GL_kobra"", 5];this addWeaponCargo [""AKS_74"", 5];this addWeaponCargo [""AKS_74_GOSHAWK"", 5];this addWeaponCargo [""AKS_74_kobra"", 5];this addWeaponCargo [""AKS_74_NSPU"", 5];this addWeaponCargo [""AKS_74_pso"", 5];this addWeaponCargo [""AKS_74_U"", 5];this addWeaponCargo [""AKS_74_UN_kobra"", 5];this addWeaponCargo [""AKS_GOLD"", 5];this addWeaponCargo [""BAF_L85A2_RIS_ACOG"", 5];this addWeaponCargo [""BAF_L85A2_RIS_CWS"", 5];this addWeaponCargo [""BAF_L85A2_RIS_Holo"", 5];this addWeaponCargo [""BAF_L85A2_RIS_SUSAT"", 5];this addWeaponCargo [""BAF_L85A2_UGL_ACOG"", 5];this addWeaponCargo [""BAF_L85A2_UGL_Holo"", 5];this addWeaponCargo [""BAF_L85A2_UGL_SUSAT"", 5];this addWeaponCargo [""BAF_L86A2_ACOG"", 5];this addWeaponCargo [""bizon"", 5];this addWeaponCargo [""bizon_silenced"", 5];this addWeaponCargo [""Evo_ACR"", 5];this addWeaponCargo [""Evo_mrad_ACR"", 5];this addWeaponCargo [""evo_sd_ACR"", 5];this addWeaponCargo [""FN_FAL"", 5];this addWeaponCargo [""FN_FAL_ANPVS4"", 5];this addWeaponCargo [""G36_C_SD_camo"", 5];this addWeaponCargo [""G36_C_SD_eotech"", 5];this addWeaponCargo [""G36a"", 5];this addWeaponCargo [""G36A_camo"", 5];this addWeaponCargo [""G36C"", 5];this addWeaponCargo [""G36C_camo"", 5];this addWeaponCargo [""G36K"", 5];this addWeaponCargo [""G36K_camo"", 5];this addWeaponCargo [""LeeEnfield"", 5];this addWeaponCargo [""M1014"", 5];this addWeaponCargo [""M14_EP1"", 5];this addWeaponCargo [""M16A2"", 5];this addWeaponCargo [""M16A2GL"", 5];this addWeaponCargo [""m16a4"", 5];this addWeaponCargo [""m16a4_acg"", 5];this addWeaponCargo [""M16A4_ACG_GL"", 5];this addWeaponCargo [""M16A4_GL"", 5];this addWeaponCargo [""M32_EP1"", 5];this addWeaponCargo [""M4A1"", 5];this addWeaponCargo [""M4A1_Aim"", 5];this addWeaponCargo [""M4A1_Aim_camo"", 5];this addWeaponCargo [""M4A1_AIM_SD_camo"", 5];this addWeaponCargo [""M4A1_HWS_GL"", 5];this addWeaponCargo [""M4A1_HWS_GL_camo"", 5];this addWeaponCargo [""M4A1_HWS_GL_SD_Camo"", 5];this addWeaponCargo [""M4A1_RCO_GL"", 5];this addWeaponCargo [""M4A3_CCO_EP1"", 5];this addWeaponCargo [""M4A3_RCO_GL_EP1"", 5];this addWeaponCargo [""M4SPR"", 5];this addWeaponCargo [""M79_EP1"", 5];this addWeaponCargo [""m8_carbine"", 5];this addWeaponCargo [""m8_carbine_pmc"", 5];this addWeaponCargo [""m8_carbineGL"", 5];this addWeaponCargo [""m8_compact"", 5];this addWeaponCargo [""m8_compact_pmc"", 5];this addWeaponCargo [""m8_holo_sd"", 5];this addWeaponCargo [""m8_sharpshooter"", 5];this addWeaponCargo [""m8_tws"", 5];this addWeaponCargo [""m8_tws_sd"", 5];this addWeaponCargo [""Mk13_EP1"", 5];this addWeaponCargo [""MP5A5"", 5];this addWeaponCargo [""MP5SD"", 5];this addWeaponCargo [""Sa58P_EP1"", 5];this addWeaponCargo [""Sa58V_CCO_EP1"", 5];this addWeaponCargo [""Sa58V_EP1"", 5];this addWeaponCargo [""Sa58V_RCO_EP1"", 5];this addWeaponCargo [""Saiga12K"", 5];this addWeaponCargo [""SCAR_H_CQC_CCO"", 5];this addWeaponCargo [""SCAR_H_CQC_CCO_SD"", 5];this addWeaponCargo [""SCAR_H_LNG_Sniper"", 5];this addWeaponCargo [""SCAR_H_LNG_Sniper_SD"", 5];this addWeaponCargo [""SCAR_H_STD_EGLM_Spect"", 5];this addWeaponCargo [""SCAR_H_STD_TWS_SD"", 5];this addWeaponCargo [""SCAR_L_CQC"", 5];this addWeaponCargo [""SCAR_L_CQC_CCO_SD"", 5];this addWeaponCargo [""SCAR_L_CQC_EGLM_Holo"", 5];this addWeaponCargo [""SCAR_L_CQC_Holo"", 5];this addWeaponCargo [""SCAR_L_STD_EGLM_RCO"", 5];this addWeaponCargo [""SCAR_L_STD_EGLM_TWS"", 5];this addWeaponCargo [""SCAR_L_STD_HOLO"", 5];this addWeaponCargo [""SCAR_L_STD_Mk4CQT"", 5];this addMagazineCargo [""20Rnd_B_AA12_74Slug"", 50];this addMagazineCargo [""20Rnd_B_AA12_HE"", 50];this addMagazineCargo [""20Rnd_B_AA12_Pellets"", 50];this addMagazineCargo [""30Rnd_545x39_AK"", 50];this addMagazineCargo [""30Rnd_545x39_AKSD"", 50];this addMagazineCargo [""75Rnd_545x39_RPK"", 50];this addMagazineCargo [""ACE_30Rnd_545x39_AP_AK"", 50];this addMagazineCargo [""ACE_30Rnd_545x39_EP_AK"", 50];this addMagazineCargo [""ACE_30Rnd_545x39_T_AK"", 50];this addMagazineCargo [""ACE_45Rnd_545x39_AP_AK"", 50];this addMagazineCargo [""ACE_45Rnd_545x39_B_AK"", 50];this addMagazineCargo [""ACE_45Rnd_545x39_EP_AK"", 50];this addMagazineCargo [""ACE_75Rnd_545x39_T_RPK"", 50];this addMagazineCargo [""1Rnd_HE_GP25"", 50];this addMagazineCargo [""1Rnd_SMOKE_GP25"", 50];this addMagazineCargo [""1Rnd_SmokeGreen_GP25"", 50];this addMagazineCargo [""1Rnd_SmokeRed_GP25"", 50];this addMagazineCargo [""1Rnd_SmokeYellow_GP25"", 50];this addMagazineCargo [""ACE_1Rnd_CS_GP25"", 50];this addMagazineCargo [""ACE_1Rnd_HE_GP25P"", 50];this addMagazineCargo [""ACE_SSGreen_GP25"", 50];this addMagazineCargo [""ACE_SSRed_GP25"", 50];this addMagazineCargo [""ACE_SSWhite_GP25"", 50];this addMagazineCargo [""ACE_SSYellow_GP25"", 50];this addMagazineCargo [""FlareGreen_GP25"", 50];this addMagazineCargo [""FlareRed_GP25"", 50];this addMagazineCargo [""FlareWhite_GP25"", 50];this addMagazineCargo [""FlareYellow_GP25"", 50];this addMagazineCargo [""30Rnd_762x39_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_AP_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_AP_S_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_SD_AK47"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_T_AK47"", 50];this addMagazineCargo [""ACE_40Rnd_762x39_AP_AK47"", 50];this addMagazineCargo [""ACE_40Rnd_762x39_B_AK47"", 50];this addMagazineCargo [""ACE_40Rnd_762x39_T_AK47"", 50];this addMagazineCargo [""ACE_75Rnd_762x39_B_AK47"", 50];this addMagazineCargo [""ACE_75Rnd_762x39_SD_AK47"", 50];this addMagazineCargo [""20Rnd_9x19_EVO"", 50];this addMagazineCargo [""20Rnd_9x19_EVOSD"", 50];this addMagazineCargo [""100Rnd_556x45_BetaCMag"", 50];this addMagazineCargo [""30Rnd_556x45_G36"", 50];this addMagazineCargo [""30Rnd_556x45_G36SD"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_AP_G36"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_T_G36"", 50];this addMagazineCargo [""1Rnd_HE_M203"", 50];this addMagazineCargo [""1Rnd_Smoke_M203"", 50];this addMagazineCargo [""1Rnd_SmokeGreen_M203"", 50];this addMagazineCargo [""1Rnd_SmokeRed_M203"", 50];this addMagazineCargo [""1Rnd_SmokeYellow_M203"", 50];this addMagazineCargo [""ACE_1Rnd_CS_M203"", 50];this addMagazineCargo [""ACE_1Rnd_HE_M203"", 50];this addMagazineCargo [""ACE_1Rnd_PR_M203"", 50];this addMagazineCargo [""ACE_FlareIR_M203"", 50];this addMagazineCargo [""ACE_HuntIR_M203"", 50];this addMagazineCargo [""ACE_M576"", 50];this addMagazineCargo [""ACE_SSGreen_M203"", 50];this addMagazineCargo [""ACE_SSRed_M203"", 50];this addMagazineCargo [""ACE_SSWhite_M203"", 50];this addMagazineCargo [""ACE_SSYellow_M203"", 50];this addMagazineCargo [""FlareGreen_M203"", 50];this addMagazineCargo [""FlareRed_M203"", 50];this addMagazineCargo [""FlareWhite_M203"", 50];this addMagazineCargo [""FlareYellow_M203"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_B_G3"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_G3"", 50];this addMagazineCargo [""20Rnd_556x45_Stanag"", 50];this addMagazineCargo [""30Rnd_556x45_Stanag"", 50];this addMagazineCargo [""30Rnd_556x45_StanagSD"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_SB_Stanag"", 50];this addMagazineCargo [""ACE_30Rnd_556x45_T_Stanag"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_B_HK417"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_SB_HK417"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_HK417"", 50];this addMagazineCargo [""ACE_30Rnd_6x35_B_PDW"", 50];this addMagazineCargo [""8Rnd_B_Beneli_74Slug"", 50];this addMagazineCargo [""8Rnd_B_Beneli_Pellets"", 50];this addMagazineCargo [""20Rnd_762x51_DMR"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_B_M14"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_DMR"", 50];this addMagazineCargo [""ACE_30Rnd_1143x23_B_M3"", 50];this addMagazineCargo [""30Rnd_9x19_MP5"", 50];this addMagazineCargo [""30Rnd_9x19_MP5SD"", 50];this addMagazineCargo [""ACE_40Rnd_B_46x30_MP7"", 50];this addMagazineCargo [""ACE_20Rnd_9x39_B_OC14"", 50];this addMagazineCargo [""ACE_20Rnd_9x39_B_SP6_OC14"", 50];this addMagazineCargo [""20Rnd_762x51_B_SCAR"", 50];this addMagazineCargo [""20Rnd_762x51_SB_SCAR"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_SB_SCAR"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_SCAR"", 50];this addMagazineCargo [""ACE_10Rnd_762x39_B_SKS"", 50];this addMagazineCargo [""ACE_10Rnd_762x39_T_SKS"", 50];this addMagazineCargo [""ACE_25Rnd_1143x23_B_UMP45"", 50];this addMagazineCargo [""10Rnd_9x39_SP5_VSS"", 50];this addMagazineCargo [""20Rnd_9x39_SP5_VSS"", 50];this addMagazineCargo [""ACE_10Rnd_9x39_SP6_VSS"", 50];this addMagazineCargo [""ACE_20Rnd_9x39_SP6_VSS"", 50];this addMagazineCargo [""64Rnd_9x19_Bizon"", 50];this addMagazineCargo [""64Rnd_9x19_SD_Bizon"", 50];this addMagazineCargo [""20Rnd_762x51_FNFAL"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_B_FAL"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_FAL"", 50];this addMagazineCargo [""10x_303"", 50];this addMagazineCargo [""ACE_10Rnd_77x56_T_SMLE"", 50];this addMagazineCargo [""6Rnd_FlareGreen_M203"", 50];this addMagazineCargo [""6Rnd_FlareRed_M203"", 50];this addMagazineCargo [""6Rnd_FlareWhite_M203"", 50];this addMagazineCargo [""6Rnd_FlareYellow_M203"", 50];this addMagazineCargo [""6Rnd_HE_M203"", 50];this addMagazineCargo [""6Rnd_Smoke_M203"", 50];this addMagazineCargo [""6Rnd_SmokeGreen_M203"", 50];this addMagazineCargo [""6Rnd_SmokeRed_M203"", 50];this addMagazineCargo [""6Rnd_SmokeYellow_M203"", 50];this addMagazineCargo [""ACE_6Rnd_CS_M32"", 50];this addMagazineCargo [""30Rnd_762x39_SA58"", 50];this addMagazineCargo [""ACE_30Rnd_762x39_T_SA58"", 50];this addMagazineCargo [""8Rnd_B_Saiga12_74Slug"", 50];this addMagazineCargo [""8Rnd_B_Saiga12_Pellets"", 50];"; }; class Item40 { position[]={4976.2197,29.538902,6195.1987}; azimut=0.77357298; special="NONE"; id=95; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="ruckcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_2b14Proxy"", 5];this addWeaponCargo [""ACE_2b14TripodProxy"", 5];this addWeaponCargo [""ACE_6T7TripodProxy"", 5];this addWeaponCargo [""ACE_AGS30Proxy"", 5];this addWeaponCargo [""ACE_AGS30TripodProxy"", 5];this addWeaponCargo [""ACE_ALICE_Backpack"", 5];this addWeaponCargo [""ACE_ANPRC77"", 5];this addWeaponCargo [""ACE_APOBS_A"", 5];this addWeaponCargo [""ACE_APOBS_B"", 5];this addWeaponCargo [""ACE_AssaultPack_BAF"", 5];this addWeaponCargo [""ACE_BackPack"", 5];this addWeaponCargo [""ACE_BackPack_ACR"", 5];this addWeaponCargo [""ACE_BackPack_ACR_DDPM"", 5];this addWeaponCargo [""ACE_BackPack_ACR_DPM"", 5];this addWeaponCargo [""ACE_BackPack_ACR_FL"", 5];this addWeaponCargo [""ACE_BackPack_ACR_MTP"", 5];this addWeaponCargo [""ACE_BackPack_ACR_TT"", 5];this addWeaponCargo [""ACE_Backpack_ACU"", 5];this addWeaponCargo [""ACE_Backpack_CivAssault"", 5];this addWeaponCargo [""ACE_Backpack_FL"", 5];this addWeaponCargo [""ACE_Backpack_Multicam"", 5];this addWeaponCargo [""ACE_Backpack_Olive"", 5];this addWeaponCargo [""ACE_Backpack_RPG"", 5];this addWeaponCargo [""ACE_Backpack_TT"", 5];this addWeaponCargo [""ACE_Backpack_US"", 5];this addWeaponCargo [""ACE_Backpack_Wood"", 5];this addWeaponCargo [""ACE_BAF_L2A1Proxy"", 5];this addWeaponCargo [""ACE_BAF_static_GMGProxy"", 5];this addWeaponCargo [""ACE_CharliePack"", 5];this addWeaponCargo [""ACE_CharliePack_ACU"", 5];this addWeaponCargo [""ACE_CharliePack_ACU_Medic"", 5];this addWeaponCargo [""ACE_CharliePack_FLORA"", 5];this addWeaponCargo [""ACE_CharliePack_Multicam"", 5];this addWeaponCargo [""ACE_CharliePack_WMARPAT"", 5];this addWeaponCargo [""ACE_Combat_Pack"", 5];this addWeaponCargo [""ACE_Coyote_Pack"", 5];this addWeaponCargo [""ACE_Coyote_Pack_Black"", 5];this addWeaponCargo [""ACE_Coyote_Pack_Flora"", 5];this addWeaponCargo [""ACE_Coyote_Pack_Multicam"", 5];this addWeaponCargo [""ACE_Coyote_Pack_Wood"", 5];this addWeaponCargo [""ACE_DSHKMProxy"", 5];this addWeaponCargo [""ACE_DSHKMTripodProxy"", 5];this addWeaponCargo [""ACE_FAST_PackEDC"", 5];this addWeaponCargo [""ACE_FAST_PackEDC_ACU"", 5];this addWeaponCargo [""ACE_GMGTripodProxy"", 5];this addWeaponCargo [""ACE_KonkursTripodProxy"", 5];this addWeaponCargo [""ACE_KORDProxy"", 5];this addWeaponCargo [""ACE_M122TripodProxy"", 5];this addWeaponCargo [""ACE_M220Proxy"", 5];this addWeaponCargo [""ACE_M220TripodProxy"", 5];this addWeaponCargo [""ACE_M224Proxy"", 5];this addWeaponCargo [""ACE_M224TripodProxy"", 5];this addWeaponCargo [""ACE_M224TripodProxy2"", 5];this addWeaponCargo [""ACE_M252Proxy"", 5];this addWeaponCargo [""ACE_M252TripodProxy"", 5];this addWeaponCargo [""ACE_M2HBProxy"", 5];this addWeaponCargo [""ACE_M3TripodProxy"", 5];this addWeaponCargo [""ACE_MK19MOD3Proxy"", 5];this addWeaponCargo [""ACE_P159_RD54"", 5];this addWeaponCargo [""ACE_P159_RD90"", 5];this addWeaponCargo [""ACE_P159_RD99"", 5];this addWeaponCargo [""ACE_P168_RD90"", 5];this addWeaponCargo [""ACE_PRC119"", 5];this addWeaponCargo [""ACE_PRC119_ACU"", 5];this addWeaponCargo [""ACE_PRC119_MAR"", 5];this addWeaponCargo [""ACE_Rucksack_EAST"", 5];this addWeaponCargo [""ACE_Rucksack_EAST_Medic"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_ACU"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_ACU_Medic"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_Brown"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_Brown_Medic"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_DMARPAT"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_DMARPAT_Medic"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_Green"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_Green_Medic"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_WMARPAT"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_WMARPAT_Medic"", 5];this addWeaponCargo [""ACE_Rucksack_MOLLE_Wood"", 5];this addWeaponCargo [""ACE_Rucksack_RD54"", 5];this addWeaponCargo [""ACE_Rucksack_RD90"", 5];this addWeaponCargo [""ACE_Rucksack_RD91"", 5];this addWeaponCargo [""ACE_Rucksack_RD92"", 5];this addWeaponCargo [""ACE_Rucksack_RD99"", 5];this addWeaponCargo [""ACE_Stretcher"", 5];this addWeaponCargo [""ACE_TacticalLadder_Pack"", 5];this addWeaponCargo [""ACE_VTAC_RUSH72"", 5];this addWeaponCargo [""ACE_VTAC_RUSH72_ACU"", 5];this addWeaponCargo [""ACE_VTAC_RUSH72_FT_MEDIC"", 5];this addWeaponCargo [""ACE_VTAC_RUSH72_OD"", 5];this addWeaponCargo [""ACE_VTAC_RUSH72_TT_MEDIC"", 5];"; }; class Item41 { position[]={4949.6982,29.647146,6193.9302}; azimut=0.77357298; special="NONE"; id=96; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="snipercrate"; init="clearweaponcargo this; clearmagazinecargo this;this addWeaponCargo [""ACE_AS50"", 5];this addWeaponCargo [""ACE_M109"", 5];this addWeaponCargo [""ACE_M110"", 5];this addWeaponCargo [""ACE_M110_SD"", 5];this addWeaponCargo [""ACE_SVD_Bipod"", 5];this addWeaponCargo [""ACE_TAC50"", 5];this addWeaponCargo [""ACE_TAC50_SD"", 5];this addWeaponCargo [""BAF_AS50_scoped"", 5];this addWeaponCargo [""BAF_AS50_TWS"", 5];this addWeaponCargo [""BAF_LRR_scoped"", 5];this addWeaponCargo [""BAF_LRR_scoped_W"", 5];this addWeaponCargo [""CZ_750_S1_ACR"", 5];this addWeaponCargo [""DMR"", 5];this addWeaponCargo [""huntingrifle"", 5];this addWeaponCargo [""ksvk"", 5];this addWeaponCargo [""m107"", 5];this addWeaponCargo [""m107_TWS_EP1"", 5];this addWeaponCargo [""M110_NVG_EP1"", 5];this addWeaponCargo [""M110_TWS_EP1"", 5];this addWeaponCargo [""M24"", 5];this addWeaponCargo [""M24_des_EP1"", 5];this addWeaponCargo [""M40A3"", 5];this addWeaponCargo [""PMC_AS50_scoped"", 5];this addWeaponCargo [""PMC_AS50_TWS"", 5];this addWeaponCargo [""SVD"", 5];this addWeaponCargo [""SVD_CAMO"", 5];this addWeaponCargo [""SVD_des_EP1"", 5];this addWeaponCargo [""SVD_NSPU_EP1"", 5];this addWeaponCargo [""VSS_vintorez"", 5];this addMagazineCargo [""5Rnd_127x99_as50"", 50];this addMagazineCargo [""ACE_5Rnd_127x99_B_TAC50"", 50];this addMagazineCargo [""ACE_5Rnd_127x99_T_TAC50"", 50];this addMagazineCargo [""ACE_5Rnd_25x59_HEDP_Barrett"", 50];this addMagazineCargo [""20Rnd_762x51_B_SCAR"", 50];this addMagazineCargo [""20Rnd_762x51_SB_SCAR"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_SB_M110"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_SB_SCAR"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_M110"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_SCAR"", 50];this addMagazineCargo [""10Rnd_762x54_SVD"", 50];this addMagazineCargo [""ACE_10Rnd_762x54_T_SVD"", 50];this addMagazineCargo [""5Rnd_86x70_L115A1"", 50];this addMagazineCargo [""ACE_5Rnd_86x70_T_L115A1"", 50];this addMagazineCargo [""5Rnd_762x51_M24"", 50];this addMagazineCargo [""ACE_5Rnd_762x51_T_M24"", 50];this addMagazineCargo [""20Rnd_762x51_DMR"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_B_M14"", 50];this addMagazineCargo [""ACE_20Rnd_762x51_T_DMR"", 50];this addMagazineCargo [""5x_22_LR_17_HMR"", 50];this addMagazineCargo [""5Rnd_127x108_KSVK"", 50];this addMagazineCargo [""ACE_5Rnd_127x108_T_KSVK"", 50];this addMagazineCargo [""10Rnd_127x99_m107"", 50];this addMagazineCargo [""ACE_10Rnd_127x99_Raufoss_m107"", 50];this addMagazineCargo [""ACE_10Rnd_127x99_T_m107"", 50];this addMagazineCargo [""10Rnd_9x39_SP5_VSS"", 50];this addMagazineCargo [""20Rnd_9x39_SP5_VSS"", 50];this addMagazineCargo [""ACE_10Rnd_9x39_SP6_VSS"", 50];this addMagazineCargo [""ACE_20Rnd_9x39_SP6_VSS"", 50];"; }; class Item42 { position[]={4972.1978,29.59178,6194.7515}; azimut=0.77357298; special="NONE"; id=97; side="EMPTY"; vehicle="ACE_USVehicleBox_EP1"; leader=1; skill=1; text="specialcrate"; init="clearweaponcargo this; clearmagazinecargo this;this addMagazineCargo [""PipeBomb"", 50];this addMagazineCargo [""Mine"", 50];this addMagazineCargo [""MineE"", 50];this addMagazineCargo [""ACE_Bandage"", 50];this addMagazineCargo [""ACE_Bodybag"", 50];this addMagazineCargo [""ACE_Epinephrine"", 50];this addMagazineCargo [""ACE_LargeBandage"", 50];this addMagazineCargo [""ACE_Medkit"", 50];this addMagazineCargo [""ACE_Morphine"", 50];this addMagazineCargo [""ACE_BBETTY_M"", 50];this addMagazineCargo [""ACE_C4_M"", 50];this addMagazineCargo [""ACE_CLAYMORE_M"", 50];this addMagazineCargo [""ACE_DM12B1_M"", 50];this addMagazineCargo [""ACE_DM12PARM1_M"", 50];this addMagazineCargo [""ACE_DM16_M"", 50];this addMagazineCargo [""ACE_DM21AT_M"", 50];this addMagazineCargo [""ACE_DM31_M"", 50];this addMagazineCargo [""ACE_DM31AT_M"", 50];this addMagazineCargo [""ACE_M2SLAM_M"", 50];this addMagazineCargo [""ACE_M4SLAM_M"", 50];this addMagazineCargo [""ACE_MON50_M"", 50];this addMagazineCargo [""ACE_OSM4_M"", 50];this addMagazineCargo [""ACE_PMN1_M"", 50];this addMagazineCargo [""ACE_PMN2_M"", 50];this addMagazineCargo [""ACE_PMN3_M"", 50];this addMagazineCargo [""ACE_POMZ_M"", 50];this addMagazineCargo [""ACE_PPM2_M"", 50];this addMagazineCargo [""ACE_TRIPFLARE_M"", 50];this addMagazineCargo [""ACE_SandBag_Magazine"", 50];this addMagazineCargo [""ACE_KORD_CSWDM"", 50];this addMagazineCargo [""ACE_DSHKM_CSWDM"", 50];this addMagazineCargo [""ACE_M2_CSWDM"", 50];this addMagazineCargo [""ACE_MK19_CSWDM"", 50];this addMagazineCargo [""ACE_GMG_CSWDM"", 50];this addMagazineCargo [""ACE_AGS30_CSWDM"", 50];this addMagazineCargo [""ACE_TOW_CSWDM"", 50];this addMagazineCargo [""ACE_Stinger_CSWDM"", 50];this addMagazineCargo [""ACE_Konkurs_CSWDM"", 50];this addMagazineCargo [""ACE_KonkursM_CSWDM"", 50];this addMagazineCargo [""ACE_M252HE_CSWDM"", 50];this addMagazineCargo [""ACE_M252WP_CSWDM"", 50];this addMagazineCargo [""ACE_M252IL_CSWDM"", 50];this addMagazineCargo [""ACE_M224HE_CSWDM"", 50];this addMagazineCargo [""ACE_M224WP_CSWDM"", 50];this addMagazineCargo [""ACE_M224IL_CSWDM"", 50];this addMagazineCargo [""ACE_2B14HE_CSWDM"", 50];this addMagazineCargo [""ACE_2B14WP_CSWDM"", 50];this addMagazineCargo [""ACE_2B14IL_CSWDM"", 50];this addMagazineCargo [""ACE_Rope_M_120"", 50];this addMagazineCargo [""ACE_Rope_M_50"", 50];this addMagazineCargo [""ACE_Rope_M_60"", 50];this addMagazineCargo [""ACE_Rope_M_90"", 50];this addMagazineCargo [""ACE_VS17PANEL_M"", 50];this addMagazineCargo [""ACE_VS21APANEL_M"", 50];this addMagazineCargo [""ACE_VS21BPANEL_M"", 50];this addMagazineCargo [""ACE_VS21CPANEL_M"", 50];this addMagazineCargo [""ACE_VS21MEDICPANEL_M"", 50];this addMagazineCargo [""ACE_Rope_M5"", 50];this addMagazineCargo [""BAF_ied_v1"", 50];this addMagazineCargo [""BAF_ied_v2"", 50];this addMagazineCargo [""BAF_ied_v3"", 50];this addMagazineCargo [""BAF_ied_v4"", 50];this addMagazineCargo [""PMC_ied_v1"", 50];this addMagazineCargo [""PMC_ied_v2"", 50];this addMagazineCargo [""PMC_ied_v3"", 50];this addMagazineCargo [""PMC_ied_v4"", 50];this addMagazineCargo [""HandGrenade_Stone"", 50];this addMagazineCargo [""BAF_L109A1_HE"", 50];this addMagazineCargo [""HandGrenade"", 50];this addMagazineCargo [""HandGrenade_East"", 50];this addMagazineCargo [""HandGrenade_West"", 50];this addMagazineCargo [""SmokeShell"", 50];this addMagazineCargo [""SmokeShellBlue"", 50];this addMagazineCargo [""SmokeShellGreen"", 50];this addMagazineCargo [""SmokeShellOrange"", 50];this addMagazineCargo [""SmokeShellPurple"", 50];this addMagazineCargo [""SmokeShellRed"", 50];this addMagazineCargo [""SmokeShellYellow"", 50];this addMagazineCargo [""IR_Strobe_Marker"", 50];this addMagazineCargo [""IR_Strobe_Target"", 50];this addMagazineCargo [""ACE_RDG2"", 50];this addMagazineCargo [""ACE_RDGM"", 50];this addMagazineCargo [""ACE_DM25"", 50];this addMagazineCargo [""ACE_DM31"", 50];this addMagazineCargo [""ACE_DM32"", 50];this addMagazineCargo [""ACE_DM33"", 50];this addMagazineCargo [""ACE_DM34"", 50];this addMagazineCargo [""ACE_DM36"", 50];this addMagazineCargo [""ACE_DM51"", 50];this addMagazineCargo [""ACE_DM51A1"", 50];this addMagazineCargo [""ACE_M86PDM"", 50];this addMagazineCargo [""ACE_Flashbang"", 50];this addMagazineCargo [""ACE_Flashbang2"", 50];this addMagazineCargo [""ACE_Flashbang9"", 50];this addMagazineCargo [""ACE_M84"", 50];this addMagazineCargo [""ACE_TORCH_C"", 50];this addMagazineCargo [""ACE_M7A3"", 50];this addMagazineCargo [""ACE_RG60A"", 50];this addMagazineCargo [""ACE_M15"", 50];this addMagazineCargo [""ACE_M34"", 50];this addMagazineCargo [""ACE_ANM14"", 50];this addMagazineCargo [""ACE_Knicklicht_B"", 50];this addMagazineCargo [""ACE_Knicklicht_G"", 50];this addMagazineCargo [""ACE_Knicklicht_IR"", 50];this addMagazineCargo [""ACE_Knicklicht_R"", 50];this addMagazineCargo [""ACE_Knicklicht_W"", 50];this addMagazineCargo [""ACE_Knicklicht_Y"", 50];"; }; class Item43 { position[]={4965.8076,29.605867,6192.6636}; azimut=-361.94577; special="NONE"; id=98; side="EMPTY"; vehicle="ace_sys_weapons_magicbox"; leader=1; skill=1; }; class Item44 { position[]={4991.6704,29.475006,6197.0142}; azimut=180; id=101; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="radiosign"; init="this setObjectTexture [0,'signs\radios.paa']; this allowDamage false"; }; class Item45 { position[]={4988.1611,29.48045,6197.0449}; azimut=180; id=102; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="opticsign"; init="this setObjectTexture [0,'signs\optics.paa']; this allowDamage false"; }; class Item46 { position[]={4984.647,29.478151,6197.0869}; azimut=180; id=103; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="itemsign"; init="this setObjectTexture [0,'signs\items.paa']; this allowDamage false"; }; class Item47 { position[]={4980.9263,29.502485,6197.1411}; azimut=180; id=104; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="launchersign"; init="this setObjectTexture [0,'signs\launchers.paa']; this allowDamage false"; }; class Item48 { position[]={4976.6685,29.548555,6197.1274}; azimut=180; id=105; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="rucksign"; init="this setObjectTexture [0,'signs\backpack.paa']; this allowDamage false"; }; class Item49 { position[]={4972.7188,29.598179,6196.896}; azimut=180; id=106; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="explosivessign"; init="this setObjectTexture [0,'signs\explosives.paa']; this allowDamage false"; }; class Item50 { position[]={4961.3184,29.657854,6196.23}; azimut=180; id=107; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="arsign"; init="this setObjectTexture [0,'signs\ar.paa']; this allowDamage false"; }; class Item51 { position[]={4958.4526,29.664572,6196.2817}; azimut=180; id=108; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="mgsign"; init="this setObjectTexture [0,'signs\mg.paa']; this allowDamage false"; }; class Item52 { position[]={4955.7383,29.670654,6196.2568}; azimut=180; id=109; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="pistolsign"; init="this setObjectTexture [0,'signs\pistols.paa']; this allowDamage false"; }; class Item53 { position[]={4952.9668,29.677584,6196.168}; azimut=180; id=110; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="riflesign"; init="this setObjectTexture [0,'signs\rifles.paa']; this allowDamage false"; }; class Item54 { position[]={4950.2202,29.684381,6195.9966}; azimut=180; id=111; side="EMPTY"; vehicle="Infostand_2_EP1"; skill=0.60000002; text="snipersign"; init="this setObjectTexture [0,'signs\snipers.paa']; this allowDamage false"; }; class Item55 { position[]={4889.0835,29.707291,6164.708}; azimut=-28.8939; id=112; side="EMPTY"; vehicle="HMMWVWreck"; skill=0.60000002; }; class Item56 { position[]={4086.3838,38.491592,4549.2217}; azimut=240.75684; id=113; side="EMPTY"; vehicle="UH60_wreck_EP1"; skill=0.60000002; }; class Item57 { position[]={4979.1445,29.5954,6248.3213}; azimut=-63.442501; id=115; side="EMPTY"; vehicle="Misc_Backpackheap"; skill=0.60000002; text="rallypointpmc"; }; class Item58 { position[]={4976.2085,29.644148,6242.8047}; azimut=-63.442501; id=116; side="EMPTY"; vehicle="Misc_Backpackheap_EP1"; skill=0.60000002; text="rallypointusa"; }; class Item59 { position[]={4933.0176,29.764467,6201.9111}; azimut=270; id=117; side="EMPTY"; vehicle="Sr_border"; skill=0.60000002; text="veh_serv"; init="this setPos [getPos this select 0, getPos this select 1, getPos this select 2 + 2];"; }; class Item60 { position[]={4933.0405,29.744883,6196.4561}; azimut=-90.604462; id=118; side="EMPTY"; vehicle="PowGen_Big_EP1"; skill=0.60000002; }; }; class Markers { items=3; class Item0 { position[]={-499.20776,413.4437,761.74854}; name="USFLAG"; type="Faction_UNO_EP1"; }; class Item1 { position[]={-17.306868,109.9886,-18.302734}; name="respawn_west"; type="Empty"; }; class Item2 { position[]={30.030453,107.79647,-117.65723}; name="respawn_east"; type="Empty"; angle=93.227806; }; }; class Sensors { items=5; class Item0 { position[]={-710.66772,360.0238,1149.5513}; activationBy="JULIET"; interruptable=1; age="UNKNOWN"; text=" "; class Effects { }; }; class Item1 { position[]={5002.7046,29.374035,6226.2158}; a=0; b=0; interruptable=1; age="UNKNOWN"; text="mhqposition"; name="mhqposition"; class Effects { }; }; class Item2 { position[]={4942.7681,29.85413,6250.8838}; a=0; b=0; repeating=1; interruptable=1; age="UNKNOWN"; text="rallypointusa"; expCond="(alive player) and (typeOf player in canSetRallyUSA) and !(surfaceIsWater position player)"; expActiv="action_rpu = player addAction [""Put rallypoint"", ""scripts\buildusa.sqf"",""rallypoint"",998, false, true,""""];"; expDesactiv="player removeAction action_rpu;"; class Effects { }; }; class Item3 { position[]={4947.5771,29.829651,6251.2959}; a=0; b=0; repeating=1; interruptable=1; age="UNKNOWN"; text="rallypointpmc"; expCond="(alive player) and (typeOf player in canSetRallyPMC) and !(surfaceIsWater position player)"; expActiv="action_rpp = player addAction [""Put rallypoint"", ""scripts\buildpmc.sqf"",""rallypoint"",998, false, true,""""];"; expDesactiv="player removeAction action_rpp;"; class Effects { }; }; class Item4 { position[]={4932.9092,29.765003,6201.9097}; a=5; b=5; rectangular=1; activationBy="WEST"; repeating=1; interruptable=1; age="UNKNOWN"; expCond="(""LandVehicle"" countType thislist > 0) && count (thislist unitsBelowHeight 1) > 0"; expActiv="0=[thislist, veh_serv, ""LandVehicle""] execVM ""vehicleService\vehicleServiceInit.sqf"";"; class Effects { }; }; }; }; class Intro { addOns[]= { "zargabad", "takistan" }; addOnsAuto[]= { "zargabad" }; randomSeed=7738663; class Intel { startWeather=0.40000001; forecastWeather=0.25; year=2008; month=10; day=11; hour=14; minute=20; }; }; class OutroWin { addOns[]= { "zargabad", "takistan" }; addOnsAuto[]= { "zargabad" }; randomSeed=3605365; class Intel { startWeather=0.40000001; forecastWeather=0.25; year=2008; month=10; day=11; hour=14; minute=20; }; }; class OutroLoose { addOns[]= { "zargabad", "takistan" }; addOnsAuto[]= { "zargabad" }; randomSeed=5244217; class Intel { startWeather=0.40000001; forecastWeather=0.25; year=2008; month=10; day=11; hour=14; minute=20; }; }; "US_Soldier_SL_EP1","US_Soldier_AT_EP1","US_Soldier_TL_EP1","US_Soldier_GL_EP1","US_Soldier_AR_EP1","US_Soldier_Medic_EP1","US_Soldier_MG_EP1","US_Soldier_Pilot_EP1","Tanny_PMC","Soldier_MG_PKM_PMC","Soldier_TL_PMC","Soldier_Bodyguard_M4_PMC","Soldier_Medic_PMC","Soldier_Pilot_PMC" #define westSoldierClasses ["US_Soldier_SL_EP1","US_Soldier_AT_EP1","US_Soldier_TL_EP1","US_Soldier_GL_EP1","US_Soldier_AR_EP1","US_Soldier_Medic_EP1","US_Soldier_MG_EP1","US_Soldier_Pilot_EP1","Tanny_PMC","Soldier_MG_PKM_PMC","Soldier_TL_PMC","Soldier_Bodyguard_M4_PMC","Soldier_Medic_PMC","Soldier_Pilot_PMC"] class Item1 { side="WEST"; class Vehicles { items=5; class Item0 { position[]={-8.3425512,108.12854,11.919434}; azimut=-21.4862; special="NONE"; id=4; side="WEST"; vehicle="Tanny_PMC"; player="PLAY CDG"; leader=1; rank="SERGEANT"; skill=1; text="Hitman121"; init="this setGroupId [""Hitman 1 - 2 -""]; "; description="PMC Hitman 1-2-1 (Team Leader)"; }; class Item1 { position[]={-6.1561456,108.74818,9.7353516}; azimut=-21.4443; special="NONE"; id=10; side="WEST"; vehicle="Soldier_MG_PKM_PMC"; player="PLAY CDG"; skill=1; fuel=0.76006347; text="Hitman122"; description="PMC Hitman 1-2-2 (AR)"; }; class Item2 { position[]={-6.7500358,108.81699,8.6303711}; azimut=-21.4443; special="NONE"; id=11; side="WEST"; vehicle="Soldier_TL_PMC"; player="PLAY CDG"; skill=1; text="Hitman123"; description="PMC Hitman 1-2-3 (Marksman)"; }; class Item3 { position[]={-7.2546606,108.89649,7.546875}; special="NONE"; id=20; side="WEST"; vehicle="Soldier_Bodyguard_M4_PMC"; player="PLAY CDG"; skill=0.60000002; text="Hitman124"; description="OMC Hitman 1-2-4 (Rifleman)"; }; class Item4 { position[]={-8.0293055,108.95672,6.3457031}; azimut=-20.999001; special="NONE"; id=13; side="WEST"; vehicle="Soldier_Medic_PMC"; player="PLAY CDG"; rank="CORPORAL"; skill=1; text="Hitman125"; description="PMC Hitman 1-2-5 (Medic)"; }; }; }; class Item2 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={-3.6165392,108.78488,12.102539}; azimut=-21.4443; special="NONE"; id=8; side="WEST"; vehicle="US_Soldier_Pilot_EP1"; player="PLAY CDG"; leader=1; rank="LIEUTENANT"; skill=1; text="Hitman131"; init="this setGroupId [""Hitman 1 - 3 -""]; "; description="USA Hitman 1-3-1 (Pilot)"; }; }; }; class Item3 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={0.27721426,109.31007,12.147949}; azimut=-20.999001; special="NONE"; id=12; side="WEST"; vehicle="Soldier_Pilot_PMC"; player="PLAY CDG"; leader=1; rank="SERGEANT"; skill=1; text="Hitman141"; init="this setGroupId [""Hitman 1 - 4 -""]; "; description="PMC Hitman 1-4-1 (Pilot)"; }; }; };if !isDedicated then { startLoadingScreen ["Loading...","RscLoadScreenCustom"]; }; enableSaving [false, false]; waitUntil { isServer || !isNull player }; waitUntil { !isNil "BIS_MPF_InitDone" }; waitUntil { BIS_MPF_InitDone }; // Global Variable Init curTime = time; //mission start time serverLoadHint = false; //server load hint message if (isServer) then { // ACE Modules ace_sys_wounds_enabled = true; publicVariable "ace_sys_wounds_enabled"; ace_sys_wounds_leftdam = 0; publicVariable "ace_sys_wounds_leftdam"; ace_sys_wounds_all_medics = false; publicVariable "ace_sys_wounds_all_medics"; ace_sys_wounds_no_rpunish = true; publicVariable "ace_sys_wounds_no_rpunish"; ace_sys_wounds_auto_assist_any = true; publicVariable "ace_sys_wounds_auto_assist_any"; ace_sys_wounds_ai_movement_bloodloss = true; publicVariable "ace_sys_wounds_ai_movement_bloodloss"; ace_sys_wounds_player_movement_bloodloss = false; publicVariable "ace_sys_wounds_player_movement_bloodloss"; ace_sys_wounds_auto_assist = true; publicVariable "ace_sys_wounds_auto_assist"; ace_sys_aitalk_enabled = true; publicVariable "ace_sys_aitalk_enabled"; ace_sys_aitalk_radio_enabled = true; publicVariable "ace_sys_aitalk_radio_enabled"; ace_sys_repair_default_tyres = true; publicVariable "ace_sys_repair_default_tyres"; if !(player hasWeapon "ACE_Earplugs") then {player addWeapon "ACE_Earplugs";}; if !(player hasWeapon "ACE_Map") then {player addWeapon "ACE_Map";}; if !(player hasWeapon "ItemMap") then {player addWeapon "ItemMap";}; }; canSetRallyPMC = ["Soldier_PMC"]; canSetRallyUSA = ["US_Soldier_SL_EP1"]; canFly = ["US_Soldier_Pilot_EP1","Soldier_Pilot_PMC"]; canControlArmor = ["US_Soldier_Crew_EP1"]; //Ammobox init stuffbox allowDamage false; stuffbox lock false; stuffbox setVehicleLock "UNLOCKED"; _null = [stuffbox] execVM "common\client\gear\AmmoCrate.sqf"; _null = [fieldHospital] execVM "common\client\gear\HospitalCargo.sqf"; if (local player) then { call compile preprocessFileLineNumbers "initclient.sqf"; }; if (isServer) then { call compile preprocessFileLineNumbers "initserver.sqf"; }; #include "defines.sqf" #include "common\initclient-common.sqf"; if !(player hasWeapon "ACE_Earplugs") then {player addWeapon "ACE_Earplugs";}; if !(player hasWeapon "ACE_Map") then {player addWeapon "ACE_Map";}; if !(player hasWeapon "ItemMap") then {player addWeapon "ItemMap";};#include "defines.sqf" #include "common\initserver-common.sqf"// ====================== // Loading screen related // ====================== #ifndef LOADSCREENTEXT #define LOADSCREEN "img\loading_CO.paa" #endif #ifndef LOADSCREENTEXT #define LOADSCREENTEXT "Loading..." #endif class RscLoadingText : RscText { x = SafezoneX+0.025; y = SafezoneY; w = SafezoneW*0.95; h = SafezoneH*0.075; sizeEx = 0.05; text = ""; colorText[] = { 1,1,0.8,1}; shadow = 2; }; class RscProgress { idc = 104; type = 8; style = 0; shadow = 2; texture = "\ca\ui\data\loadscreen_progressbar_ca.paa"; colorFrame[] = { 0,0,0,0}; colorBar[] = { 1,1,1,1}; x = (SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.5/2/4)*3*SafezoneH; y = SafezoneY+SafezoneH*0.95; w =0.5* (((SafezoneW*3)/4)/SafezoneW)/(1/SafezoneH); h = 0.0261438; }; class RscLoadingBg : RscText { x = SafeZoneXAbs; y = safezoneY; w = SafeZoneWAbs; h = safezoneH; text = ""; colorText[] = { 0,0,0,0}; colorBackground[] = { 0,0,0,1}; }; class RscLoadingPicture: RscPicture { style = 48 + 0x800; // Keep aspect ratio x = SafezoneX; y = SafezoneY+SafezoneH*0.075; w = SafezoneW; h = SafezoneH*0.85; text = ""; }; class RscLoadScreenCustom { idd = -1; duration = 10e10; fadein = 0; fadeout = 0; name = "Loading Screen"; class ControlsBackground { class Loading_BG : RscLoadingBg { }; class Loading_CE2 : RscLoadingPicture { text = LOADSCREEN; }; }; class controls { class Title1 : RscLoadingText { text = LOADSCREENTEXT; }; class CA_Progress : RscProgress { }; }; }; GGATCGVAGGATGALFGGATSFFO@pw~@PTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!!AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!! UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!AZAjUbjU jUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUAUA UAU  Ub*UAUA ! UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!AVbjUAVajUjU!jU$!U%)UE)UE)VUE)UU!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)U!e)UE)UUE)UE)U%)U$!U!*U Ua UA b*UA*!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!AhV!jVAVU jU$!jUE)ZU!e)VU$!1ZUE)1ZUe)9Ue)9VUf19jU19U19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19UU19Uf19Ue)9Ue)9*UE)1*U$!1U!e)UE)U$! U *UA U! A )!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUAh bZVbhV!jVE)jV!e)VUE)1jUe)9ZU19VU9BjU9(BZU9IJUBiJUBiJUBiJZUBiJUU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRU(BjRUBiJUUBiJUBiJUBiJU9IJU9(BU9BU19Ue)9UE)1 U!e)*UE) !*b ) b A )UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUAhZAhZ jZ$!ZV!e)hZUE)1ZU19ZU9BZU9IJjVBiJZU(BRVUIJRZUiJZjURZURZURZVUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cUR cURZURZURZUiJZ*UIJRU(BRUBiJU9IJ*9B U19*UE)1*U!e) )U$! *  A )A )UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUAhZAhZ!jZE)jZVE)1XV19ZV9BZUBIJjV(BRZUIJRVURZjVR cUZ,cjUZMkU cMkjU cMkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cmkUU cMkUU cMkUZMk*UZ,c*UR c*URZ*IJR U(BR*UBIJ 9B U19*E)1 %E)*! *A )A )UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUA`hAhZ!jZ!E)`XVE)1hZV1BZ9IJjZ(BjRZViJZjVRZZUZ,cjVZMkZU,cmkZUMksjUMksVUmk{Us{jUs{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Us{Umk{UMksUMks U,cmk*UZMk UZ,c*RZ UiJZ*(BjR*9IJ*1B *E)1 )!E) %! *A )A )UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!@!`hZ hZ!E)hXE)1hZV1BjZBIJhZIJRhZRZjZZ c`ZU cMkZV,csjVmksVUs{ZUsV{ZU{0jU{0UU{QUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQUQU{QU{0UU{0*U{Uss{*Umks*U,cs cMk Z c URZ*IJR )BIJ )1B *E)1 )!E) )% *)! )!UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUahXb`XZ%)`XZE)1`hZ1BhZBIJhZIJRjZRZjZVZ,chZV,csZmkshZUs{jV{ZU{0VUQZU0qVUQUQUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUqUQUQ U0qUQU{0 U{*Us{ mks)U,cs Z,c )RZ IJR *BIJ )1B )E)1 )%) %b %a )%UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU