From afe905f89dcc06cbaf0dc575366ef47a8199bf34 Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 26 Mar 2020 19:47:17 +0000 Subject: [PATCH 01/40] Initial vehicle work --- AL.ini | 18 +-- Altis_Life.Altis/config/Config_SpyGlass.hpp | 6 +- .../core/actions/fn_storeVehicle.sqf | 27 ++-- .../core/housing/fn_houseMenu.sqf | 4 +- .../core/shops/fn_vehicleShopBuy.sqf | 62 +------- .../core/vehicle/fn_openInventory.sqf | 7 +- .../dialog/function/fn_garageLBChange.sqf | 44 +++--- .../dialog/function/fn_impoundMenu.sqf | 21 +-- .../dialog/function/fn_sellGarage.sqf | 28 ++-- .../dialog/function/fn_unimpound.sqf | 44 ++++-- .../dialog/function/fn_vehicleGarage.sqf | 2 +- BEFilters/setvariable.txt | 2 +- altislife.sql | 7 +- .../Functions/Systems/fn_chopShopSell.sqf | 7 +- life_server/Functions/Systems/fn_cleanup.sqf | 13 +- .../Functions/Systems/fn_entityKilled.sqf | 10 +- .../Functions/Systems/fn_getVehicles.sqf | 17 +-- .../Functions/Systems/fn_spawnVehicle.sqf | 141 +++++++----------- .../Functions/Systems/fn_vehicleCreate.sqf | 103 ++++++++++--- .../Functions/Systems/fn_vehicleDelete.sqf | 19 +-- .../Functions/Systems/fn_vehicleStore.sqf | 119 ++++++--------- .../Functions/Systems/fn_vehicleUpdate.sqf | 13 +- life_server/config.cpp | 1 - life_server/init.sqf | 1 - life_server/initHC.sqf | 1 - 25 files changed, 323 insertions(+), 394 deletions(-) diff --git a/AL.ini b/AL.ini index b23904e72..36191e6be 100755 --- a/AL.ini +++ b/AL.ini @@ -248,21 +248,21 @@ SQL1_INPUTS = 1 [selectVehicles] -SQL1_1 = SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? +SQL1_1 = SELECT plate, classname, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? SQL1_INPUTS = 1, 2, 3 -OUTPUT = 1, 2-STRING, 3-STRING, 4-STRING, 5-STRING, 6, 7, 8, 9 +OUTPUT = 1-STRING, 2-STRING, 3 [selectVehiclesMore] -SQL1_1 = SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id = ? AND pid = ? +SQL1_1 = SELECT side, classname, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE plate = ? AND pid = ? SQL1_INPUTS = 1, 2 -OUTPUT = 1, 2-STRING, 3-STRING, 4-STRING, 5-STRING, 6, 7, 8, 9, 10, 11, 12, 13, 14 +OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9, 10, 11 [updateVehicle] -SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND id = ? +SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND plate = ? SQL1_INPUTS = 1, 2 [updateVehicleBlacklist] -SQL1_1 = UPDATE vehicles SET blacklist = '0' WHERE id = ? AND pid = ? +SQL1_1 = UPDATE vehicles SET blacklist = '0' WHERE plate = ? AND pid = ? SQL1_INPUTS = 1, 2 [updateVehicleBlacklistPlate] @@ -286,17 +286,13 @@ SQL1_1 = UPDATE vehicles SET inventory = ? WHERE pid = ? AND plate = ? SQL1_INPUTS = 1, 2, 3 [insertVehicle] -SQL1_1 = INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage) VALUES (?, ?, ?, ?, '1','1','[[],0]', ?, ?,'[]','[]') +SQL1_1 = INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear) VALUES (?, ?, ?, ?, '1','1','[[],0]', ?, ?,'[]') SQL1_INPUTS = 1, 2, 3, 4, 5, 6 [deleteVehicle] SQL1_1 = UPDATE vehicles SET alive = '0' WHERE pid = ? AND plate = ? SQL1_INPUTS = 1, 2 -[deleteVehicleID] -SQL1_1 = UPDATE vehicles SET alive = '0' WHERE pid = ? AND id = ? -SQL1_INPUTS = 1, 2 - [cleanupVehicle] SQL1_1 = UPDATE vehicles SET active = '0', fuel = ? WHERE pid = ? AND plate = ? SQL1_INPUTS = 1, 2, 3 diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 83105abe7..b6241e2dc 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -285,7 +285,7 @@ class SpyGlass { }; SERVER_Functions[] = { - "db_fnc_asynccall","db_fnc_bool","db_fnc_insertrequest","db_fnc_insertvehicle","db_fnc_mresarray","db_fnc_mresstring","db_fnc_mrestoarray","db_fnc_numbersafe","db_fnc_queryrequest","db_fnc_updatepartial","db_fnc_updaterequest","ton_fnc_addhouse","ton_fnc_addhouse_meta","ton_fnc_cell_adminmsg","ton_fnc_cell_adminmsgall","ton_fnc_cell_emsrequest","ton_fnc_cell_textadmin","ton_fnc_cell_textcop", + "db_fnc_asynccall","db_fnc_bool","db_fnc_insertrequest","db_fnc_mresarray","db_fnc_mresstring","db_fnc_mrestoarray","db_fnc_numbersafe","db_fnc_queryrequest","db_fnc_updatepartial","db_fnc_updaterequest","ton_fnc_addhouse","ton_fnc_addhouse_meta","ton_fnc_cell_adminmsg","ton_fnc_cell_adminmsgall","ton_fnc_cell_emsrequest","ton_fnc_cell_textadmin","ton_fnc_cell_textcop", "ton_fnc_cell_textmsg","ton_fnc_chopshopsell","ton_fnc_chopshopsell_meta","ton_fnc_cleanup","ton_fnc_cleanup_meta","ton_fnc_cleanuprequest","ton_fnc_cleanuprequest_meta","ton_fnc_clientdisconnect","ton_fnc_clientdisconnect_meta","ton_fnc_clientgangkick","ton_fnc_clientgangleader","ton_fnc_clientgangleft","TON_fnc_clientGangLeft","ton_fnc_clientgetkey","ton_fnc_clientmessage","ton_fnc_federalupdate", "ton_fnc_federalupdate_meta","ton_fnc_fetchplayerhouses","ton_fnc_fetchplayerhouses_meta","ton_fnc_getid","ton_fnc_getid_meta","ton_fnc_getvehicles","ton_fnc_getvehicles_meta","ton_fnc_housecleanup","ton_fnc_housecleanup_meta","ton_fnc_huntingzone","ton_fnc_huntingzone_meta","ton_fnc_index","ton_fnc_inithouses","ton_fnc_inithouses_meta","ton_fnc_insertgang","ton_fnc_insertgang_meta","ton_fnc_isnumber", "ton_fnc_keymanagement","ton_fnc_keymanagement_meta","ton_fnc_managesc","ton_fnc_managesc_meta","ton_fnc_pickupaction","ton_fnc_pickupaction_meta","ton_fnc_player_query","ton_fnc_queryplayergang","ton_fnc_queryplayergang_meta","ton_fnc_removegang","ton_fnc_removegang_meta","ton_fnc_sellhouse","ton_fnc_sellhouse_meta","ton_fnc_spawnvehicle", @@ -298,7 +298,7 @@ class SpyGlass { }; DB_Functions[] = { - "db_fnc_asynccall","db_fnc_asynccall_meta","db_fnc_bool","db_fnc_bool_meta","db_fnc_insertrequest","db_fnc_insertrequest_meta","db_fnc_insertvehicle","db_fnc_insertvehicle_meta","db_fnc_mresarray","db_fnc_mresarray_meta","db_fnc_mresstring","db_fnc_mresstring_meta","db_fnc_mrestoarray","db_fnc_mrestoarray_meta","db_fnc_numbersafe","db_fnc_numbersafe_meta","db_fnc_queryrequest","db_fnc_queryrequest_meta", + "db_fnc_asynccall","db_fnc_asynccall_meta","db_fnc_bool","db_fnc_bool_meta","db_fnc_insertrequest","db_fnc_insertrequest_meta","db_fnc_mresarray","db_fnc_mresarray_meta","db_fnc_mresstring","db_fnc_mresstring_meta","db_fnc_mrestoarray","db_fnc_mrestoarray_meta","db_fnc_numbersafe","db_fnc_numbersafe_meta","db_fnc_queryrequest","db_fnc_queryrequest_meta", "db_fnc_updatepartial","db_fnc_updatepartial_meta","db_fnc_updaterequest","db_fnc_updaterequest_meta" }; @@ -341,7 +341,7 @@ class SpyGlass { { "cheat2", "BOOL" }, { "gang_flag_2", "OBJECT" }, { "life_interrupted", "BOOL" }, { "license_civ_dive", "BOOL" }, { "cheat3", "BOOL" }, { "bank_obj", "OBJECT" }, { "gang_flag_3", "OBJECT" }, { "life_inv_cocaineprocessed", "SCALAR" }, { "cheat4", "BOOL" }, { "paramsarray", "ARRAY" }, { "life_maxweight", "SCALAR" }, { "life_cash", "SCALAR" }, { "life_inv_salemaraw", "SCALAR" }, { "cheat5", "BOOL" }, { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "cheat7", "BOOL" }, { "life_trunk_vehicle", "OBJECT" }, { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, - { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "serv_sv_use", "ARRAY" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, + { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, { "reb_car_1", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, diff --git a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf index 5de3baf66..55f03acbb 100644 --- a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf +++ b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf @@ -6,16 +6,18 @@ Description: Stores the vehicle in the garage. */ -private ["_nearVehicles","_vehicle"]; -if !(isNull objectParent player) then { - _vehicle = vehicle player; -} else { - _nearVehicles = nearestObjects[getPos (_this select 0),["Car","Air","Ship"],30]; //Fetch vehicles within 30m. - if (count _nearVehicles > 0) then { +params [ + ["_garage",objNull,[objNull]], + ["_unit",objNull,[objNull]] +]; + +private _vehicle = objNull; +if (isNull objectParent player) then { + private _nearVehicles = nearestObjects[getPos _garage,["Car","Air","Ship"],30]; //Fetch vehicles within 30m. + if !(_nearVehicles isEqualTo []) then { { - if (!isNil "_vehicle") exitWith {}; //Kill the loop. _vehData = _x getVariable ["vehicle_info_owners",[]]; - if (count _vehData > 0) then { + if !(_vehData isEqualTo []) then { _vehOwner = ((_vehData select 0) select 0); if ((getPlayerUID player) == _vehOwner) exitWith { _vehicle = _x; @@ -25,16 +27,13 @@ if !(isNull objectParent player) then { }; }; -if (isNil "_vehicle") exitWith {hint localize "STR_Garage_NoNPC"}; -if (isNull _vehicle) exitWith {}; +if (isNull _vehicle) exitWith {hint localize "STR_Garage_NoNPC"}; if (!alive _vehicle) exitWith {hint localize "STR_Garage_SQLError_Destroyed"}; -_storetext = localize "STR_Garage_Store_Success"; - if (life_HC_isActive) then { - [_vehicle,false,(_this select 1),_storetext] remoteExec ["HC_fnc_vehicleStore",HC_Life]; + [_vehicle,false,_unit] remoteExec ["HC_fnc_vehicleStore",HC_Life]; } else { - [_vehicle,false,(_this select 1),_storetext] remoteExec ["TON_fnc_vehicleStore",RSERV]; + [_vehicle,false,_unit] remoteExec ["TON_fnc_vehicleStore",RSERV]; }; hint localize "STR_Garage_Store_Server"; diff --git a/Altis_Life.Altis/core/housing/fn_houseMenu.sqf b/Altis_Life.Altis/core/housing/fn_houseMenu.sqf index d1b51cb15..9fc467136 100644 --- a/Altis_Life.Altis/core/housing/fn_houseMenu.sqf +++ b/Altis_Life.Altis/core/housing/fn_houseMenu.sqf @@ -126,7 +126,7 @@ if (!(_curTarget in life_vehicles) || isNil {_curTarget getVariable "house_owner _Btn2 ctrlShow true; _Btn3 ctrlSetText localize "STR_pInAct_StoreVeh"; - _Btn3 buttonSetAction "closeDialog 0; [life_pInact_curTarget,player] spawn life_fnc_storeVehicle;"; + _Btn3 buttonSetAction "closeDialog 0; [life_pInact_curTarget,player] call life_fnc_storeVehicle;"; _Btn3 ctrlShow true; } else { _Btn1 ctrlSetText localize "STR_pInAct_SellHouse"; @@ -168,7 +168,7 @@ if (!(_curTarget in life_vehicles) || isNil {_curTarget getVariable "house_owner _Btn5 ctrlShow true; _Btn6 ctrlSetText localize "STR_pInAct_StoreVeh"; - _Btn6 buttonSetAction "closeDialog 0; [life_pInact_curTarget,player] spawn life_fnc_storeVehicle;"; + _Btn6 buttonSetAction "closeDialog 0; [life_pInact_curTarget,player] call life_fnc_storeVehicle;"; _Btn6 ctrlShow true; } else { _Btn5 ctrlSetText localize "STR_pInAct_BuyGarage"; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf index dbd66fcb9..f99e7425d 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf @@ -88,66 +88,10 @@ if (_mode) then { hint format [localize "STR_Shop_Veh_Rented",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText]; }; -//Spawn the vehicle and prep it. - -private "_vehicle"; - -if ((life_veh_shop select 0) == "med_air_hs") then { - _vehicle = createVehicle [_className,[0,0,999],[], 0, "NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait? - _vehicle allowDamage false; - _hs = nearestObjects[getMarkerPos _spawnPoint,["Land_Hospital_side2_F"],50] select 0; - _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); - sleep 0.6; +if (life_HC_isActive) then { + [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; } else { - _vehicle = createVehicle [_className, (getMarkerPos _spawnPoint), [], 0, "NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; //Wait? - _vehicle allowDamage false; //Temp disable damage handling.. - _vehicle setPos (getMarkerPos _spawnPoint); - _vehicle setVectorUp (surfaceNormal (getMarkerPos _spawnPoint)); - _vehicle setDir (markerDir _spawnPoint); -}; - -_vehicle lock 2; - -[_vehicle,_colorIndex] call life_fnc_colorVehicle; -[_vehicle] call life_fnc_clearVehicleAmmo; - -_vehicle setVariable ["trunk_in_use",false,true]; -_vehicle setVariable ["vehicle_info_owners",[[getPlayerUID player,profileName]],true]; - -_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. - -//Side Specific actions. -switch (playerSide) do { - case west: { - [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; - }; - case civilian: { - if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then { - [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; - }; - }; - case independent: { - [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; - }; -}; - -_vehicle allowDamage true; - -life_vehicles pushBack _vehicle; - -//Always handle key management by the server -[getPlayerUID player,playerSide,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; - -if (_mode) then { - if !(_className in LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly")) then { - if (life_HC_isActive) then { - [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; - } else { - [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; - }; - }; + [player,_className,_spawnPoint,_colorIndex,_mode] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; }; if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { diff --git a/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf b/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf index 99be902df..30a1ee0b6 100644 --- a/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_openInventory.sqf @@ -6,9 +6,10 @@ Description: Starts the initialization of vehicle virtual inventory menu. */ -private ["_vehicle","_veh_data"]; if (dialog) exitWith {}; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; +params [ + ["_vehicle",objNull,[objNull]] +]; if (isNull _vehicle || !(_vehicle isKindOf "Car" || _vehicle isKindOf "Air" || _vehicle isKindOf "Ship" || _vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F")) exitWith {}; //Either a null or invalid vehicle type. if ((_vehicle getVariable ["trunk_in_use",false])) exitWith {hint localize "STR_MISC_VehInvUse"}; _vehicle setVariable ["trunk_in_use",true,true]; @@ -22,7 +23,7 @@ if (_vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F ctrlSetText[3501,format [(localize "STR_MISC_VehStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]]; }; -_veh_data = [_vehicle] call life_fnc_vehicleWeight; +private _veh_data = [_vehicle] call life_fnc_vehicleWeight; if (_veh_data select 0 isEqualTo -1) exitWith {closeDialog 0; _vehicle setVariable ["trunk_in_use",false,true]; hint localize "STR_MISC_NoStorageVeh";}; diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index 21927009c..3dbf56d2f 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -6,30 +6,30 @@ Description: Can't be bothered to answer it.. Already deleted it by accident.. */ -disableSerialization; -private ["_control","_index","_className","_classNameLife","_dataArr","_vehicleColor","_vehicleInfo","_trunkSpace","_sellPrice","_retrievePrice","_sellMultiplier","_price","_storageFee","_purchasePrice"]; -_control = _this select 0; -_index = _this select 1; +params [ + ["_control",controlNull,[controlNull]], + ["_index",0,[0]] +]; //Fetch some information. -_dataArr = CONTROL_DATAI(_control,_index); +private _dataArr = _control lbData _index; +private _color = _control lbValue _index; _dataArr = call compile format ["%1",_dataArr]; -_className = (_dataArr select 0); -_classNameLife = _className; +_dataArr params ["_plate","_className"]; -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist }; -_vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures") select (_dataArr select 1)) select 0); +private _vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures") select _color) select 0); if (isNil "_vehicleColor") then {_vehicleColor = "Default";}; -_vehicleInfo = [_className] call life_fnc_fetchVehInfo; -_trunkSpace = [_className] call life_fnc_vehicleWeightCfg; +private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; +private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; -_price = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); -_storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); +private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); switch (playerSide) do { case civilian: { @@ -65,14 +65,14 @@ if (!(_retrievePrice isEqualType 0) || _retrievePrice < 1) then {_retrievePrice " +(localize "STR_Shop_Veh_UI_Trunk")+ " %6
" +(localize "STR_Shop_Veh_UI_Fuel")+ " %7 ", -[_retrievePrice] call life_fnc_numberText, -[_sellPrice] call life_fnc_numberText, -(_vehicleInfo select 8), -(_vehicleInfo select 11), -(_vehicleInfo select 10), -if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, -(_vehicleInfo select 12), -_vehicleColor + [_retrievePrice] call life_fnc_numberText, + [_sellPrice] call life_fnc_numberText, + (_vehicleInfo select 8), + (_vehicleInfo select 11), + (_vehicleInfo select 10), + if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, + (_vehicleInfo select 12), + _vehicleColor ]; ctrlShow [2803,true]; diff --git a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf index d73b0d015..c4655ef5a 100644 --- a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf +++ b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf @@ -7,29 +7,30 @@ Not actually a impound menu, may act as confusion to some but that is what I wanted. The purpose of this menu is it is now called a 'Garage' where vehicles are stored (persistent ones). */ -private ["_vehicles","_control"]; -disableSerialization; -_vehicles = param [0,[],[[]]]; +params [ + ["_vehicles",[],[[]]] +]; ctrlShow[2803,false]; ctrlShow[2830,false]; waitUntil {!isNull (findDisplay 2800)}; -if (count _vehicles isEqualTo 0) exitWith { +if (_vehicles isEqualTo []) exitWith { ctrlSetText[2811,localize "STR_Garage_NoVehicles"]; }; -_control = CONTROL(2800,2802); +private _control = CONTROL(2800,2802); lbClear _control; { - _vehicleInfo = [(_x select 2)] call life_fnc_fetchVehInfo; + _x params ["_plate","_className","_color"]; + _vehicleInfo = [_className] call life_fnc_fetchVehInfo; _control lbAdd (_vehicleInfo select 3); - _tmp = [(_x select 2),(_x select 8)]; + _tmp = [_plate,_className]; _tmp = str(_tmp); - _control lbSetData [(lbSize _control)-1,_tmp]; - _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; - _control lbSetValue [(lbSize _control)-1,(_x select 0)]; + _control lbSetData [_forEachIndex,_tmp]; + _control lbSetPicture [_forEachIndex,(_vehicleInfo select 2)]; + _control lbSetValue [_forEachIndex,_color]; } forEach _vehicles; ctrlShow[2810,false]; diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index c078be048..95b26197e 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -6,23 +6,23 @@ Description: Sells a vehicle from the garage. */ -private ["_vehicle","_vehicleLife","_vid","_pid","_sellPrice","_multiplier","_price","_purchasePrice"]; -disableSerialization; -if ((lbCurSel 2802) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; -_vehicle = lbData[2802,(lbCurSel 2802)]; -_vehicle = (call compile format ["%1",_vehicle]) select 0; -_vehicleLife = _vehicle; -_vid = lbValue[2802,(lbCurSel 2802)]; -_pid = getPlayerUID player; +private _control = CONTROL(2800,2802); +private _index = lbCurSel _control; +if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; + +private _dataArr = _control lbData _index; +private _color = _control lbValue _index; +_dataArr = call compile format ["%1",_dataArr]; +_dataArr params ["_plate",["_className",""]]; +if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; -if (isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _vehicleLife)) then { - _vehicleLife = "Default"; //Use Default class if it doesn't exist - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_vehicle]; +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist }; -_price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); switch (playerSide) do { case civilian: { _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); @@ -59,7 +59,7 @@ if !(_action) exitWith {}; if (life_HC_isActive) then { [_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; } else { - [_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; + [player,_plate] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; }; hint format [localize "STR_Garage_SoldCar",[_sellPrice] call life_fnc_numberText]; diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 9e13093e4..18c8d3431 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -6,24 +6,23 @@ Description: Yeah... Gets the vehicle from the garage. */ -private ["_vehicle","_vehicleLife","_vid","_pid","_unit","_price","_price","_storageFee","_purchasePrice"]; -disableSerialization; -if ((lbCurSel 2802) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; -_vehicle = lbData[2802,(lbCurSel 2802)]; -_vehicle = (call compile format ["%1",_vehicle]) select 0; -_vehicleLife = _vehicle; -_vid = lbValue[2802,(lbCurSel 2802)]; -_pid = getPlayerUID player; -_unit = player; -_spawntext = localize "STR_Garage_spawn_Success"; -if (isNil "_vehicle") exitWith {hint localize "STR_Garage_Selection_Error"}; -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _vehicleLife)) then { - _vehicleLife = "Default"; //Use Default class if it doesn't exist - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_vehicle]; +private _control = CONTROL(2800,2802); +private _index = lbCurSel _control; +if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; + +private _dataArr = _control lbData _index; +private _color = _control lbValue _index; +_dataArr = call compile format ["%1",_dataArr]; +_dataArr params ["_plate",["_className",""]]; +if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; + +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist }; -_price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); -_storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); switch (playerSide) do { case civilian: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN");}; @@ -36,6 +35,19 @@ _price = _purchasePrice * _storageFee; if (!(_price isEqualType 0) || _price < 1) then {_price = 500;}; if (BANK < _price) exitWith {hint format [(localize "STR_Garage_CashError"),[_price] call life_fnc_numberText];}; +private _spawnPoint = life_garage_sp; +if (_spawnPoint isEqualType []) then { + { + if ((nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _x} + } forEach _spawnPoint; +}; + +if (life_HC_isActive) then { + +} else { + [player,_plate,_spawnPoint] +}; + if (life_garage_sp isEqualType []) then { if (life_HC_isActive) then { [_vid,_pid,(life_garage_sp select 0),_unit,_price,(life_garage_sp select 1),_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; diff --git a/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf b/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf index e7beb0643..b6f5b2d94 100644 --- a/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf @@ -30,7 +30,7 @@ life_garage_type = _type; if (life_HC_isActive) then { [getPlayerUID player,playerSide,_type,player] remoteExec ["HC_fnc_getVehicles",HC_Life]; } else { - [getPlayerUID player,playerSide,_type,player] remoteExec ["TON_fnc_getVehicles",RSERV]; + [player,_type] remoteExec ["TON_fnc_getVehicles",RSERV]; }; createDialog "Life_impound_menu"; diff --git a/BEFilters/setvariable.txt b/BEFilters/setvariable.txt index add9a4edd..1f4d8ddb2 100644 --- a/BEFilters/setvariable.txt +++ b/BEFilters/setvariable.txt @@ -1,3 +1,3 @@ //regex 1 "" -5 "" !bis_disabled_Door_[1-6] !=BIS_fnc_(selectRespawnTemplate_respawned|setVehicleMass) !=chargeplaced !container_(id|owner) !=containers !=dbInfo !=Escorting !=escortingPlayer !fuelTank(Work)? !gang_(bank|id|maxMembers|members|name|owner) !=gangOwner !=gbank_in_use_by !house_(id|owned|owner|sold) !houses_.+ !=inCapture !=inUse !=isEscorting !=item !life_(clientID|VEH_color) !=color !=lights !=lightSource !=locked !=mining !(real)?name !=NPC !=playerSurrender !=rank !=restrained !=Revive !=Reviving !=robbed !safe(_open)? !=sellers !=siren !=slots !=spikeDeployed !=steam64id !=transporting !Trunk(_in_use(_by)?)? !=uid !=vehicle_info_owners !="(true|false) [\d]:[\d]+ (C_man_1|B_RangeMaster_F)" !=#var !=saved3deninventory +5 "" !bis_disabled_Door_[1-6] !=BIS_fnc_(selectRespawnTemplate_respawned|setVehicleMass) !=chargeplaced !container_(id|owner) !=containers !=plate !=Escorting !=escortingPlayer !fuelTank(Work)? !gang_(bank|id|maxMembers|members|name|owner) !=gangOwner !=gbank_in_use_by !house_(id|owned|owner|sold) !houses_.+ !=inCapture !=inUse !=isEscorting !=item !life_(clientID|VEH_color) !=color !=lights !=lightSource !=locked !=mining !(real)?name !=NPC !=playerSurrender !=rank !=restrained !=Revive !=Reviving !=robbed !safe(_open)? !=sellers !=siren !=slots !=spikeDeployed !=steam64id !=transporting !Trunk(_in_use(_by)?)? !=uid !=vehicle_info_owners !="(true|false) [\d]:[\d]+ (C_man_1|B_RangeMaster_F)" !=#var !=saved3deninventory diff --git a/altislife.sql b/altislife.sql index 0d7c2997a..624a65d64 100755 --- a/altislife.sql +++ b/altislife.sql @@ -114,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `players` ( -- CREATE TABLE IF NOT EXISTS `vehicles` ( - `id` INT NOT NULL AUTO_INCREMENT, + `plate` VARCHAR(9) NOT NULL, `pid` VARCHAR(17) NOT NULL, `side` VARCHAR(10) NOT NULL, `classname` VARCHAR(64) NOT NULL, @@ -122,15 +122,14 @@ CREATE TABLE IF NOT EXISTS `vehicles` ( `alive` TINYINT NOT NULL DEFAULT 1, `blacklist` TINYINT NOT NULL DEFAULT 0, `active` TINYINT NOT NULL DEFAULT 0, - `plate` MEDIUMINT NOT NULL, `color` INT NOT NULL, `inventory` TEXT NOT NULL, `gear` TEXT NOT NULL, `fuel` DOUBLE NOT NULL DEFAULT 1, - `damage` VARCHAR(256) NOT NULL, + `damage` VARCHAR(256) NOT NULL DEFAULT '[]', `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`id`), + PRIMARY KEY (`plate`), INDEX `fkIdx_players_vehicles` (`pid`), CONSTRAINT `FK_players_vehicles` FOREIGN KEY `fkIdx_players_vehicles` (`pid`) REFERENCES `players` (`pid`) diff --git a/life_server/Functions/Systems/fn_chopShopSell.sqf b/life_server/Functions/Systems/fn_chopShopSell.sqf index 512d65394..c1758446d 100755 --- a/life_server/Functions/Systems/fn_chopShopSell.sqf +++ b/life_server/Functions/Systems/fn_chopShopSell.sqf @@ -18,9 +18,10 @@ if (isNull _vehicle || isNull _unit) exitWith { private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); -private _dbInfo = _vehicle getVariable ["dbInfo",[]]; -if (count _dbInfo > 0) then { - _dbInfo params ["_uid","_plate"]; +private _plate = _vehicle getVariable ["plate",""]; +if !(_plate isEqualTo "") then { + private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; _query = format ["deleteVehicle:%1:%2", _uid, _plate]; [_query,1] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/Systems/fn_cleanup.sqf b/life_server/Functions/Systems/fn_cleanup.sqf index 48f2208bb..91342f6a7 100755 --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -20,19 +20,16 @@ for "_i" from 0 to 1 step 0 do { if (crew _x isEqualTo [] && {_noUnitsNear}) then { private _fuel = if (_saveFuel) then {fuel _x} else {1}; - private _dbInfo = _x getVariable "dbInfo"; - + private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; + private _plate = _x getVariable ["plate",""]; + deleteVehicle _x; - if (isNil "_dbInfo") exitWith {}; + if (_plate isEqualTo "") exitWith {}; waitUntil {uiSleep 1; isNull _x}; - _dbInfo params [ - "_uid", - "_plate" - ]; - private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; [_query, 1] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/Systems/fn_entityKilled.sqf b/life_server/Functions/Systems/fn_entityKilled.sqf index 836d8d8c9..4ef2a65b7 100644 --- a/life_server/Functions/Systems/fn_entityKilled.sqf +++ b/life_server/Functions/Systems/fn_entityKilled.sqf @@ -46,13 +46,11 @@ if (isPlayer _killed) exitWith { private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _killed) >> "vehicleClass"); if (_vehicleClass in ["Air","Armored","Car","Ship","Submarine"]) exitWith { - private _dbInfo = _killed getVariable ["dbInfo",[]]; + private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; + private _plate = _x getVariable ["plate",""]; - if (count _dbInfo > 0) then { - _dbInfo params [ - "_uid", - "_plate" - ]; + if !(_plate isEqualTo "") then { private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; [_query,1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index e89bf0e83..7efcaf13a 100755 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -2,27 +2,22 @@ /* File: fn_getVehicles.sqf Author: Bryan "Tonic" Boardwine - Description: Sends a request to query the database information and returns vehicles. */ - params [ - ["_pid", "", [""]], - ["_side", sideUnknown, [west]], + ["_unit", objNull, [objNull]], ["_type", "", [""]], - ["_unit", objNull, [objNull]] ]; //Error checks -if (_pid isEqualTo "" || {_side isEqualTo sideUnknown} || {_type isEqualTo ""} || {isNull _unit}) exitWith { +if (isNull _unit || {_type isEqualTo ""}) exitWith { if (!isNull _unit) then { [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; }; }; -_unit = owner _unit; -_side = switch (_side) do { +private _side = switch (side _unit) do { case west:{"cop"}; case civilian: {"civ"}; case independent: {"med"}; @@ -30,7 +25,7 @@ _side = switch (_side) do { }; if (_side isEqualTo "Error") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu", (owner _unit)]; + [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; }; private _query = format ["selectVehicles:%1:%2:%3", _pid, _side, _type]; @@ -47,7 +42,7 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { }; if (_queryResult isEqualType "") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu", (owner _unit)]; + [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; }; -[_queryResult] remoteExec ["life_fnc_impoundMenu", _unit]; +[_queryResult] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 3eaddef48..3b5e927a7 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -2,34 +2,22 @@ /* File: fn_spawnVehicle.sqf Author: Bryan "Tonic" Boardwine - Description: - Sends the query request to the database, if an array is returned then it creates - the vehicle if it's not in use or dead. + Attempts to create the selected vehicle, returning error messages if required. */ - params [ - ["_vid", -1, [0]], - ["_pid", "", [""]], - ["_sp", [], [[],""]], - ["_unit", objNull, [objNull]], - ["_price", 0, [0]], - ["_dir", 0, [0]], - "_spawntext" + ["_unit",objNull,[objNull]], + ["_plate","",[""]], + ["_spawnPoint","",[""]] ]; -private _unit_return = _unit; private _name = name _unit; private _side = side _unit; -_unit = owner _unit; +private _pid = getPlayerUID _unit; -if (_vid isEqualTo -1 || {_pid isEqualTo ""}) exitWith {}; -if (_vid in serv_sv_use) exitWith {}; -serv_sv_use pushBack _vid; +if (isNull _unit || {_plate isEqualTo ""}) exitWith {}; -private _servIndex = serv_sv_use find _vid; - -private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; +private _query = format ["selectVehiclesMore:%1:%2", _plate, _pid]; private _tickTime = diag_tickTime; private _queryResult = [_query, 2] call DB_fnc_asyncCall; @@ -42,79 +30,69 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { diag_log "------------------------------------------------"; }; -if (_queryResult isEqualType "") exitWith {}; - -private _vInfo = _queryResult; -if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; -if (_vInfo isEqualTo []) exitWith {serv_sv_use deleteAt _servIndex;}; +if (_queryResult isEqualType "" || {_queryResult isEqualTo []}) exitWith {}; +_queryResult params ["_side","_className","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; -if ((_vInfo select 5) isEqualTo 0) exitWith { - serv_sv_use deleteAt _servIndex; +if (_alive isEqualTo 0) exitWith { [1,"STR_Garage_SQLError_Destroyed",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; }; -if ((_vInfo select 6) isEqualTo 1) exitWith { - serv_sv_use deleteAt _servIndex; +if (_active isEqualTo 1) exitWith { [1,"STR_Garage_SQLError_Active",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; }; -private "_nearVehicles"; -if !(_sp isEqualType "") then { - _nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10]; -} else { - _nearVehicles = []; -}; +private _nearVehicles = nearestObjects[_spawnPoint,["Car","Air","Ship"],6]; //last check for nearby vehicles if !(_nearVehicles isEqualTo []) exitWith { - serv_sv_use deleteAt _servIndex; [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit]; [1,"STR_Garage_SpawnPointError",true] remoteExecCall ["life_fnc_broadcast",_unit]; }; -_query = format ["updateVehicle:%1:%2", _pid, _vid]; +_query = format ["updateVehicle:%1:%2", _pid, _plate]; +[_query, 1] call DB_fnc_asyncCall; -private _trunk = _vInfo select 9; -private _gear = _vInfo select 10; -private _damage = _vInfo select 12; -private _wasIllegal = _vInfo select 13; _wasIllegal = _wasIllegal isEqualTo 1; -[_query, 1] call DB_fnc_asyncCall; +private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; +_vehicle setDir (markerDir _spawnPoint); -private "_vehicle"; -if (_sp isEqualType "") then { - _vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; - _vehicle allowDamage false; - _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0; - _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); - uiSleep 0.6; -} else { - _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; - _vehicle allowDamage false; - _vehicle setPos _sp; - _vehicle setVectorUp (surfaceNormal _sp); - _vehicle setDir _dir; -}; -_vehicle allowDamage true; -//Send keys over the network. -[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; -[_pid,_side,_vehicle,1] call TON_fnc_keyManagement; +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; _vehicle lock 2; -//Reskin the vehicle -[_vehicle,(_vInfo select 8)] remoteExecCall ["life_fnc_colorVehicle",_unit]; -_vehicle setVariable ["vehicle_info_owners",[[_pid,_name]],true]; -_vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7)],true]; -_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. +_vehicle disableTIEquipment true; + +[_vehicle,_colorIndex] call life_fnc_colorVehicle; [_vehicle] call life_fnc_clearVehicleAmmo; -if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { +_vehicle setVariable ["trunk_in_use",false,true]; +_vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; +_vehicle setPlateNumber _plate; +//_vehicle setVariable ["plate", _plate, true]; what happens to ships/air? +switch (side _unit) do { + case west: { + [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; + }; + case civilian: { + if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then { + [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; + }; + }; + case independent: { + [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; + }; +}; + +[_uid,(side _unit),_vehicle,1] call TON_fnc_keyManagement; +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { _vehicle setVariable ["Trunk",_trunk,true]; if (_wasIllegal) then { - private _refPoint = if (_sp isEqualType "") then {getMarkerPos _sp;} else {_sp;}; + private _refPoint = getMarkerPos _spawnPoint; private _distance = 100000; private "_location"; @@ -134,7 +112,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { _location = text _location; [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; - _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; + _query = format ["updateVehicleBlacklist:%1:%2", _plate, _pid]; [_query, 1] call DB_fnc_asyncCall; }; } else { @@ -142,16 +120,13 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { }; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _vehicle setFuel (_vInfo select 11); + _vehicle setFuel _fuel; } else { _vehicle setFuel 1; }; if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { - _items = _gear select 0; - _mags = _gear select 1; - _weapons = _gear select 2; - _backpacks = _gear select 3; + _gear params ["_items","_mags","_weapons","_backpacks"]; for "_i" from 0 to ((count (_items select 0)) - 1) do { _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; @@ -168,25 +143,11 @@ if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") }; if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { - _parts = getAllHitPointsDamage _vehicle; + private _parts = getAllHitPointsDamage _vehicle; for "_i" from 0 to ((count _damage) - 1) do { _vehicle setHitPointDamage [format ["%1",((_parts select 0) select _i)],_damage select _i]; }; }; -//Sets of animations -if ((_vInfo select 1) isEqualTo "civ" && (_vInfo select 2) isEqualTo "B_Heli_Light_01_F" && !((_vInfo select 8) isEqualTo 13)) then { - [_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; -}; - -if ((_vInfo select 1) isEqualTo "cop" && ((_vInfo select 2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { - [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; -}; - -if ((_vInfo select 1) isEqualTo "med" && (_vInfo select 2) isEqualTo "C_Offroad_01_F") then { - [_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; -}; - -[1,_spawntext] remoteExecCall ["life_fnc_broadcast",_unit]; -serv_sv_use deleteAt _servIndex; +[1,"STR_Garage_spawn_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 078215457..567d0572d 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -1,36 +1,95 @@ /* File: fn_vehicleCreate.sqf Author: Bryan "Tonic" Boardwine - Description: - Answers the query request to create the vehicle in the database. + Creates the vehicle and adds a database entry if vehicle is purchased. */ - params [ - ["_uid", "", [""]], - ["_side", sideUnknown, [west]], - ["_vehicle", objNull, [objNull]], - ["_color", -1, [0]] + ["_unit", objNull, [objNull]], + ["_className","",[""]], + ["_spawnPoint","",[""]], + ["_color", -1, [0]], + ["_purchase",false,[false]] ]; -//Error checks -if (_uid isEqualTo "" || {_side isEqualTo sideUnknown} || {isNull _vehicle}) exitWith {}; -if (!alive _vehicle) exitWith {}; +if (isNull _unit || {{_className isEqualTo ""} || {_spawnPoint isEqualTo ""}}) exitWith {}; + +private _uid = getPlayerUID _unit; private _className = typeOf _vehicle; -private _type = switch (true) do { - case (_vehicle isKindOf "Car"): {"Car"}; - case (_vehicle isKindOf "Air"): {"Air"}; - case (_vehicle isKindOf "Ship"): {"Ship"}; + +private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); +private _plateFormatArray = _plateFormat splitString ""; +private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; + +private _plate = ""; +while {_plate isEqualTo ""} do { + { + private _randomPlate = []; + if (_x isEqualTo "") then { + _randomPlate pushBack (selectRandom _letterArray); + } else { + if (_x isEqualTo " ") then { + _randomPlate pushBack " "; + } else { + _randomPlate pushBack (round(random 9)); + }; + }; + _randomPlate = _randomPlate joinString ""; + + private _return = [format["checkPlate:%1",_randomPlate],2] call DB_fnc_asyncCall; + if (_return isEqualTo []) exitWith {_plate = _randomPlate}; + } forEach _plateFormatArray; }; -_side = switch (_side) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; +if (_purchase) then { + private _type = call { + if (_vehicle isKindOf "Car") exitWith {"Car"}; + if (_vehicle isKindOf "Air") exitWith {"Air"}; + if (_vehicle isKindOf "Ship") exitWith {"Ship"}; + }; + + private _side = switch (side _unit) do { + case west:{"cop"}; + case civilian: {"civ"}; + case independent: {"med"}; + default {"Error"}; + }; + + private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; + [_query, 1] call DB_fnc_asyncCall; }; -private _plate = round(random(1000000)); -[_uid, _side, _type, _classname, _color, _plate] call DB_fnc_insertVehicle; +private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; +_vehicle setDir (markerDir _spawnPoint); + +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; +_vehicle lock 2; +_vehicle disableTIEquipment true; + +[_vehicle,_colorIndex] call life_fnc_colorVehicle; +[_vehicle] call life_fnc_clearVehicleAmmo; + +_vehicle setVariable ["trunk_in_use",false,true]; +_vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; +_vehicle setPlateNumber _plate; +//_vehicle setVariable ["plate", _plate, true]; what happens to ships/air? + +switch (side _unit) do { + case west: { + [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; + }; + case civilian: { + if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then { + [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; + }; + }; + case independent: { + [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; + }; +}; -_vehicle setVariable ["dbInfo", [_uid, _plate], true]; +[_uid,(side _unit),_vehicle,1] call TON_fnc_keyManagement; +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_vehicleDelete.sqf b/life_server/Functions/Systems/fn_vehicleDelete.sqf index a3b3622c5..2906f989e 100755 --- a/life_server/Functions/Systems/fn_vehicleDelete.sqf +++ b/life_server/Functions/Systems/fn_vehicleDelete.sqf @@ -1,21 +1,16 @@ /* File: fn_vehicleDelete.sqf Author: Bryan "Tonic" Boardwine - Description: - Doesn't actually delete since we don't give our DB user that type of - access so instead we set it to alive=0 so it never shows again. + Sets the vehicle to be 'dead' so it can be cleaned up later. */ params [ - ["_vid", -1, [0]], - ["_pid", "", [""]], - ["_sp", 2500, [0]], - ["_unit", objNull, [objNull]], - ["_type", "", [""]] + ["_unit",objNull,[objNull]], + ["_plate","",[""]] ]; +if (isNull _unit || {_plate isEqualTo ""}) exitWith {}; -if (_vid isEqualTo -1 || {_pid isEqualTo ""} || {_sp isEqualTo 0} || {isNull _unit} || {_type isEqualTo ""}) exitWith {}; - -private _query = format ["deleteVehicleID:%1:%2", _pid, _vid]; -private _thread = [_query, 1] call DB_fnc_asyncCall; +private _pid = getPlayerUID _unit; +private _query = format ["deleteVehicle:%1:%2", _pid, _plate]; +[_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index 5b56d6ab3..eb5ca2df1 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -5,82 +5,61 @@ Description: Stores the vehicle in the 'Garage' */ - params [ ["_vehicle", objNull, [objNull]], ["_impound", false, [true]], - ["_unit", objNull, [objNull]], - ["_storetext", "", [""]] + ["_unit", objNull, [objNull]] ]; -private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - if (isNull _vehicle || {isNull _unit}) exitWith {life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse";life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed. -private _vInfo = _vehicle getVariable ["dbInfo", []]; -private "_plate"; -private "_uid"; -if !(_vInfo isEqualTo []) then { - _plate = _vInfo select 1; - _uid = _vInfo select 0; -}; +private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; +_ownerInfo params ["_uid"]; +private _plate = _vehicle getVariable ["plate",""]; // save damage. -private "_damage"; +private _damage = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { _damage = getAllHitPointsDamage _vehicle; _damage = _damage select 2; -} else { - _damage = []; }; // because fuel price! -private "_fuel"; +private _fuel = 1; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { _fuel = (fuel _vehicle); -} else { - _fuel = 1; }; -private "_query"; -private "_thread"; if (_impound) exitWith { - if (_vInfo isEqualTo []) then { - life_impound_inuse = false; - (owner _unit) publicVariableClient "life_impound_inuse"; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - } else { // no free repairs! - _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; - _thread = [_query,1] call DB_fnc_asyncCall; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; + if !(_vInfo isEqualTo []) then { + private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; + [_query,1] call DB_fnc_asyncCall; + }; - life_impound_inuse = false; - (owner _unit) publicVariableClient "life_impound_inuse"; + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; }; + + life_impound_inuse = false; + (owner _unit) publicVariableClient "life_impound_inuse"; }; // not persistent so just do this! if (_vInfo isEqualTo []) exitWith { if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { - [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_unit]; if (!isNil "_vehicle" && {!isNull _vehicle}) then { deleteVehicle _vehicle; }; } else { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_unit]; }; life_garage_store = false; (owner _unit) publicVariableClient "life_garage_store"; }; if !(_uid isEqualTo getPlayerUID _unit) exitWith { - [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_unit]; life_garage_store = false; (owner _unit) publicVariableClient "life_garage_store"; }; @@ -89,73 +68,69 @@ if !(_uid isEqualTo getPlayerUID _unit) exitWith { private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; private _itemList = _trunk select 0; private _totalweight = 0; -private "_weight"; -_items = []; +private _items = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { private _blacklist = false; - _profileQuery = format ["selectName:%1", _uid]; - _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; + private _profileQuery = format ["selectName:%1", _uid]; + private _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; _profileName = _profileName select 0; { - private _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); + _x params ["_itemName","_itemCount"]; + private _isIllegal = M_CONFIG(getNumber,"VirtualItems",_itemName,"illegal"); - _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; + _isIllegal = _isIllegal isEqualTo 1; - if (((_x select 0) in _resourceItems) || (_isIllegal)) then { - _items pushBack[(_x select 0),(_x select 1)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + if ((_itemName in _resourceItems) || _isIllegal) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; _totalweight = _weight + _totalweight; }; if (_isIllegal) then { _blacklist = true; }; - } - foreach _itemList; + } forEach _itemList; if (_blacklist) then { - [_uid, _profileName, "481"] remoteExecCall["life_fnc_wantedAdd", RSERV]; - _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; - _thread = [_query, 1] call DB_fnc_asyncCall; + [_uid, _profileName, "481"] remoteExecCall ["life_fnc_wantedAdd", RSERV]; + private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; + [_query, 1] call DB_fnc_asyncCall; }; - } - else { + } else { { - if ((_x select 0) in _resourceItems) then { - _items pushBack[(_x select 0),(_x select 1)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _x params ["_itemName","_itemCount"]; + if (_itemName in _resourceItems) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; _totalweight = _weight + _totalweight; }; - } - forEach _itemList; + } forEach _itemList; }; _trunk = [_items, _totalweight]; -} -else { +} else { _trunk = [[], 0]; }; -private "_cargo"; - +private _cargo = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { private _vehItems = getItemCargo _vehicle; private _vehMags = getMagazineCargo _vehicle; private _vehWeapons = getWeaponCargo _vehicle; private _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; - // no items? clean the array so the database looks pretty - if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; - } else { - _cargo = []; + + if !(((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { + _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; + }; }; // update -_query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; -_thread = [_query,1] call DB_fnc_asyncCall; +private _query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; +[_query,1] call DB_fnc_asyncCall; if (!isNil "_vehicle" && {!isNull _vehicle}) then { deleteVehicle _vehicle; @@ -163,4 +138,4 @@ if (!isNil "_vehicle" && {!isNull _vehicle}) then { life_garage_store = false; (owner _unit) publicVariableClient "life_garage_store"; -[1,_storetext] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; +[1,"STR_Garage_Store_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_server/Functions/Systems/fn_vehicleUpdate.sqf b/life_server/Functions/Systems/fn_vehicleUpdate.sqf index dc685b4f9..8c76ca2de 100755 --- a/life_server/Functions/Systems/fn_vehicleUpdate.sqf +++ b/life_server/Functions/Systems/fn_vehicleUpdate.sqf @@ -6,7 +6,6 @@ Description: Tells the database that this vehicle need update inventory. */ - params [ ["_vehicle", objNull, [objNull]], ["_mode", 1, [0]] @@ -14,13 +13,13 @@ params [ if (isNull _vehicle) exitWith {}; //NULL -private _dbInfo = _vehicle getVariable ["dbInfo",[]]; +private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; if (_dbInfo isEqualTo []) exitWith {}; -private _uid = _dbInfo select 0; -private _plate = _dbInfo select 1; +_ownerInfo params ["_uid"]; +private _plate = _vehicle getVariable ["plate",""]; -switch (_mode) do { +switch _mode do { case 1: { private _vehItems = getItemCargo _vehicle; private _vehMags = getMagazineCargo _vehicle; @@ -34,7 +33,7 @@ switch (_mode) do { }; private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _plate]; - private _thread = [_query, 1] call DB_fnc_asyncCall; + [_query, 1] call DB_fnc_asyncCall; }; case 2: { @@ -53,6 +52,6 @@ switch (_mode) do { _trunk = [_items,_totalweight]; private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _plate]; - private _thread = [_query,1] call DB_fnc_asyncCall; + [_query,1] call DB_fnc_asyncCall; }; }; diff --git a/life_server/config.cpp b/life_server/config.cpp index c4bc04dd3..1f8add14c 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -19,7 +19,6 @@ class CfgFunctions { class asyncCall{}; class insertRequest{}; class updateRequest{}; - class insertVehicle {}; class updatePartial {}; }; }; diff --git a/life_server/init.sqf b/life_server/init.sqf index 61c6baf1d..5764547a5 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -14,7 +14,6 @@ DB_Async_Active = false; DB_Async_ExtraLock = false; life_server_isReady = false; _extDBNotLoaded = ""; -serv_sv_use = []; publicVariable "life_server_isReady"; life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; diff --git a/life_server/initHC.sqf b/life_server/initHC.sqf index 733fd897c..243bbe4f9 100644 --- a/life_server/initHC.sqf +++ b/life_server/initHC.sqf @@ -14,7 +14,6 @@ HC_UID = nil; HC_UID = getPlayerUID hc_1; HC_Life = owner hc_1; publicVariable "HC_Life"; - HC_Life publicVariableClient "serv_sv_use"; terminate cleanup; terminate aiSpawn; [true] call TON_fnc_transferOwnership; From 4e2772151bbe3b8e833ede08195aa341c684044b Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 26 Mar 2020 19:52:10 +0000 Subject: [PATCH 02/40] Vehicle format --- Altis_Life.Altis/config/Config_Master.hpp | 1 + life_server/Functions/Systems/fn_vehicleCreate.sqf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index bb50a1c53..23f461883 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -146,6 +146,7 @@ class Life_Settings { vehicleShop_rentalOnly[] = { "B_MRAP_01_hmg_F", "B_G_Offroad_01_armed_F", "B_Boat_Armed_01_minigun_F" }; //Vehicles that can only be rented and not purchased. (Last only for the session) vehicleShop_3D = false; //Add preview 3D inside Shop vehicle. Default : False vehicle_rentalReturn = false; //Can return rental vehicles to 'Store vehicle in garage', doesn't actually store it in garage. + vehicle_plateFormat = "$$## $$$"; //Format of vehicle plates, $ representing letter, # representing number, maximum 9 characters. /* Vehicle Purchase Prices */ vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 567d0572d..8bc0dc787 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -25,7 +25,7 @@ private _plate = ""; while {_plate isEqualTo ""} do { { private _randomPlate = []; - if (_x isEqualTo "") then { + if (_x isEqualTo "$") then { _randomPlate pushBack (selectRandom _letterArray); } else { if (_x isEqualTo " ") then { From a89c50b63475cfa7e4acf13c3b09ba79e302dbbe Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 26 Mar 2020 20:43:01 +0000 Subject: [PATCH 03/40] More changes --- .../dialog/function/fn_garageLBChange.sqf | 9 ++++--- .../dialog/function/fn_unimpound.sqf | 26 ++----------------- .../Functions/Systems/fn_vehicleCreate.sqf | 2 +- .../Functions/Systems/fn_vehicleStore.sqf | 4 +-- 4 files changed, 10 insertions(+), 31 deletions(-) diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index 3dbf56d2f..13d9c0f5b 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -26,6 +26,7 @@ private _vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"te if (isNil "_vehicleColor") then {_vehicleColor = "Default";}; private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; +_vehicleInfo params ["","","","","","","","","_maxSpeed","","_seats","_horsePower","_fuelCapacity"]; private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); @@ -67,11 +68,11 @@ if (!(_retrievePrice isEqualType 0) || _retrievePrice < 1) then {_retrievePrice ", [_retrievePrice] call life_fnc_numberText, [_sellPrice] call life_fnc_numberText, - (_vehicleInfo select 8), - (_vehicleInfo select 11), - (_vehicleInfo select 10), + _maxSpeed, + _horsePower, + _seats, if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, - (_vehicleInfo select 12), + _fuelCapacity, _vehicleColor ]; diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 18c8d3431..03480cc31 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -43,31 +43,9 @@ if (_spawnPoint isEqualType []) then { }; if (life_HC_isActive) then { - -} else { - [player,_plate,_spawnPoint] -}; - -if (life_garage_sp isEqualType []) then { - if (life_HC_isActive) then { - [_vid,_pid,(life_garage_sp select 0),_unit,_price,(life_garage_sp select 1),_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; - } else { - [_vid,_pid,(life_garage_sp select 0),_unit,_price,(life_garage_sp select 1),_spawntext] remoteExec ["TON_fnc_spawnVehicle",RSERV]; - }; + [player,_plate,_spawnPoint] remoteExecCall ["NC_fnc_spawnVehicle",HC_Life]; } else { - if (life_garage_sp in ["medic_spawn_1","medic_spawn_2","medic_spawn_3"]) then { - if (life_HC_isActive) then { - [_vid,_pid,life_garage_sp,_unit,_price,0,_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; - } else { - [_vid,_pid,life_garage_sp,_unit,_price,0,_spawntext] remoteExec ["TON_fnc_spawnVehicle",RSERV]; - }; - } else { - if (life_HC_isActive) then { - [_vid,_pid,(getMarkerPos life_garage_sp),_unit,_price,markerDir life_garage_sp,_spawntext] remoteExec ["HC_fnc_spawnVehicle",HC_Life]; - } else { - [_vid,_pid,(getMarkerPos life_garage_sp),_unit,_price,markerDir life_garage_sp,_spawntext] remoteExec ["TON_fnc_spawnVehicle",RSERV]; - }; - }; + [player,_plate,_spawnPoint] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; }; hint localize "STR_Garage_SpawningVeh"; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 8bc0dc787..ddafefe4b 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -12,7 +12,7 @@ params [ ["_purchase",false,[false]] ]; -if (isNull _unit || {{_className isEqualTo ""} || {_spawnPoint isEqualTo ""}}) exitWith {}; +if (isNull _unit || {_className isEqualTo "" || {_spawnPoint isEqualTo ""}}) exitWith {}; private _uid = getPlayerUID _unit; private _className = typeOf _vehicle; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index eb5ca2df1..0b8895815 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -83,7 +83,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { _isIllegal = _isIllegal isEqualTo 1; - if ((_itemName in _resourceItems) || _isIllegal) then { + if ((_itemName in _resourceItems) || {_isIllegal}) then { _items pushBack [_itemName,_itemCount]; private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; _totalweight = _weight + _totalweight; @@ -123,7 +123,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { private _vehWeapons = getWeaponCargo _vehicle; private _vehBackpacks = getBackpackCargo _vehicle; - if !(((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { + if !((_vehItems select 0) isEqualTo [] && {(_vehMags select 0) isEqualTo [] && {(_vehWeapons select 0) isEqualTo [] && {(_vehBackpacks select 0) isEqualTo []}}}) then { _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; }; }; From 8c5b027b07b742c29a07a89f1f82bf7141e28e44 Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 26 Mar 2020 21:40:26 +0000 Subject: [PATCH 04/40] Further work --- .../core/actions/fn_storeVehicle.sqf | 14 ++++++----- .../core/shops/fn_vehicleShopBuy.sqf | 2 +- .../dialog/function/fn_garageLBChange.sqf | 3 +-- .../dialog/function/fn_impoundMenu.sqf | 5 ++-- .../dialog/function/fn_sellGarage.sqf | 9 ++++--- .../dialog/function/fn_unimpound.sqf | 25 +++++++++---------- .../dialog/function/fn_vehicleGarage.sqf | 6 ++--- .../Functions/Systems/fn_spawnVehicle.sqf | 8 ++++-- 8 files changed, 38 insertions(+), 34 deletions(-) diff --git a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf index 55f03acbb..af62e212e 100644 --- a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf +++ b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf @@ -12,14 +12,16 @@ params [ ]; private _vehicle = objNull; -if (isNull objectParent player) then { +if !(isNull objectParent player) then { + _vehicle = vehicle player; +} else { private _nearVehicles = nearestObjects[getPos _garage,["Car","Air","Ship"],30]; //Fetch vehicles within 30m. if !(_nearVehicles isEqualTo []) then { { - _vehData = _x getVariable ["vehicle_info_owners",[]]; + private _vehData = _x getVariable ["vehicle_info_owners",[]]; if !(_vehData isEqualTo []) then { - _vehOwner = ((_vehData select 0) select 0); - if ((getPlayerUID player) == _vehOwner) exitWith { + (_vehData select 0) params ["_ownerUID"]; + if ((getPlayerUID player) isEqualTo _ownerUID) exitWith { _vehicle = _x; }; }; @@ -31,9 +33,9 @@ if (isNull _vehicle) exitWith {hint localize "STR_Garage_NoNPC"}; if (!alive _vehicle) exitWith {hint localize "STR_Garage_SQLError_Destroyed"}; if (life_HC_isActive) then { - [_vehicle,false,_unit] remoteExec ["HC_fnc_vehicleStore",HC_Life]; + [_vehicle,false,_unit] remoteExecCall ["HC_fnc_vehicleStore",HC_Life]; } else { - [_vehicle,false,_unit] remoteExec ["TON_fnc_vehicleStore",RSERV]; + [_vehicle,false,_unit] remoteExecCall ["TON_fnc_vehicleStore",RSERV]; }; hint localize "STR_Garage_Store_Server"; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf index f99e7425d..ed5296fdd 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf @@ -89,7 +89,7 @@ if (_mode) then { }; if (life_HC_isActive) then { - [(getPlayerUID player),playerSide,_vehicle,_colorIndex] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; + [player,_className,_spawnPoint,_colorIndex,_mode] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; } else { [player,_className,_spawnPoint,_colorIndex,_mode] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; }; diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index 13d9c0f5b..030cd1847 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -14,8 +14,7 @@ params [ //Fetch some information. private _dataArr = _control lbData _index; private _color = _control lbValue _index; -_dataArr = call compile format ["%1",_dataArr]; -_dataArr params ["_plate","_className"]; +(parseSimpleArray _dataArr) params ["_plate","_className"]; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; diff --git a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf index c4655ef5a..84d413ecd 100644 --- a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf +++ b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf @@ -24,10 +24,9 @@ lbClear _control; { _x params ["_plate","_className","_color"]; - _vehicleInfo = [_className] call life_fnc_fetchVehInfo; + private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; _control lbAdd (_vehicleInfo select 3); - _tmp = [_plate,_className]; - _tmp = str(_tmp); + private _tmp = str([_plate,_className]); _control lbSetData [_forEachIndex,_tmp]; _control lbSetPicture [_forEachIndex,(_vehicleInfo select 2)]; _control lbSetValue [_forEachIndex,_color]; diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index 95b26197e..11d8a5be1 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -12,8 +12,7 @@ if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; private _dataArr = _control lbData _index; private _color = _control lbValue _index; -_dataArr = call compile format ["%1",_dataArr]; -_dataArr params ["_plate",["_className",""]]; +(parseSimpleArray _dataArr) params ["_plate",["_className",""]]; if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; @@ -22,6 +21,8 @@ if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { _className = "Default"; //Use Default class if it doesn't exist }; +private "_multiplier"; +private "_purchasePrice"; private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); switch (playerSide) do { case civilian: { @@ -42,7 +43,7 @@ switch (playerSide) do { }; }; -_sellPrice = _purchasePrice * _multiplier; +private _sellPrice = _purchasePrice * _multiplier; if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; @@ -57,7 +58,7 @@ private _action = [ if !(_action) exitWith {}; if (life_HC_isActive) then { - [_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; + [player,_plate] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; } else { [player,_plate] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; }; diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 03480cc31..75e982020 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -12,8 +12,7 @@ if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; private _dataArr = _control lbData _index; private _color = _control lbValue _index; -_dataArr = call compile format ["%1",_dataArr]; -_dataArr params ["_plate",["_className",""]]; +(parseSimpleArray _dataArr) params ["_plate",["_className",""]]; if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { @@ -21,14 +20,14 @@ if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { _className = "Default"; //Use Default class if it doesn't exist }; -private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); -switch (playerSide) do { - case civilian: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN");}; - case west: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP");}; - case independent: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC");}; - case east: {_purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR");}; +private _purchasePrice = switch (playerSide) do { + case civilian: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN")}; + case west: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP")}; + case independent: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC")}; + case east: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR")}; }; _price = _purchasePrice * _storageFee; @@ -36,16 +35,16 @@ if (!(_price isEqualType 0) || _price < 1) then {_price = 500;}; if (BANK < _price) exitWith {hint format [(localize "STR_Garage_CashError"),[_price] call life_fnc_numberText];}; private _spawnPoint = life_garage_sp; +private _dir = 0; if (_spawnPoint isEqualType []) then { - { - if ((nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _x} - } forEach _spawnPoint; + _spawnPoint = _spawnPoint select 0; + _dir = _spawnPoint select 1; }; if (life_HC_isActive) then { - [player,_plate,_spawnPoint] remoteExecCall ["NC_fnc_spawnVehicle",HC_Life]; + [player,_plate,_spawnPoint,_dir] remoteExecCall ["HC_fnc_spawnVehicle",HC_Life]; } else { - [player,_plate,_spawnPoint] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; + [player,_plate,_spawnPoint,_dir] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; }; hint localize "STR_Garage_SpawningVeh"; diff --git a/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf b/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf index b6f5b2d94..7df27f819 100644 --- a/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_vehicleGarage.sqf @@ -12,7 +12,7 @@ params [ ["_type","",[""]] ]; -_className = typeOf _garageObj; +private _className = typeOf _garageObj; private _houseConfig = missionConfigFile >> "Housing" >> worldName >> _className; private _garageConfig = missionConfigFile >> "Garages" >> worldName >> _className; @@ -28,9 +28,9 @@ life_garage_sp = [(_garageObj modelToWorld _mTwPos),((getDir _garageObj) + _dir) life_garage_type = _type; if (life_HC_isActive) then { - [getPlayerUID player,playerSide,_type,player] remoteExec ["HC_fnc_getVehicles",HC_Life]; + [player,_type] remoteExecCall ["HC_fnc_getVehicles",HC_Life]; } else { - [player,_type] remoteExec ["TON_fnc_getVehicles",RSERV]; + [player,_type] remoteExecCall ["TON_fnc_getVehicles",RSERV]; }; createDialog "Life_impound_menu"; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 3b5e927a7..8151d5c16 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -8,7 +8,8 @@ params [ ["_unit",objNull,[objNull]], ["_plate","",[""]], - ["_spawnPoint","",[""]] + ["_spawnPoint","",[""]], + ["_dir",-1,[0]] ]; private _name = name _unit; @@ -54,7 +55,10 @@ _query = format ["updateVehicle:%1:%2", _pid, _plate]; _wasIllegal = _wasIllegal isEqualTo 1; private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; -_vehicle setDir (markerDir _spawnPoint); +if (_dir isEqualTo -1) then { + _dir = markerDir _spawnPoint; +}; +_vehicle setDir _dir; clearWeaponCargoGlobal _vehicle; clearMagazineCargoGlobal _vehicle; From 97143e7c18cf1b48c633ec9ba87b503df9c4ebe6 Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 26 Mar 2020 22:34:56 +0000 Subject: [PATCH 05/40] Adding prefix --- Altis_Life.Altis/config/Config_Master.hpp | 1 + altislife.sql | 2 +- life_server/Functions/Systems/fn_getVehicles.sqf | 2 +- life_server/Functions/Systems/fn_spawnVehicle.sqf | 2 +- life_server/Functions/Systems/fn_vehicleCreate.sqf | 4 +++- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 23f461883..1551cb692 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -147,6 +147,7 @@ class Life_Settings { vehicleShop_3D = false; //Add preview 3D inside Shop vehicle. Default : False vehicle_rentalReturn = false; //Can return rental vehicles to 'Store vehicle in garage', doesn't actually store it in garage. vehicle_plateFormat = "$$## $$$"; //Format of vehicle plates, $ representing letter, # representing number, maximum 9 characters. + vehicle_platePrefix = ""; //Prefix of the plate, can be left blank, max 5 characters. /* Vehicle Purchase Prices */ vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier diff --git a/altislife.sql b/altislife.sql index 624a65d64..a7a732886 100755 --- a/altislife.sql +++ b/altislife.sql @@ -114,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `players` ( -- CREATE TABLE IF NOT EXISTS `vehicles` ( - `plate` VARCHAR(9) NOT NULL, + `plate` VARCHAR(14) NOT NULL, `pid` VARCHAR(17) NOT NULL, `side` VARCHAR(10) NOT NULL, `classname` VARCHAR(64) NOT NULL, diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index 7efcaf13a..832954846 100755 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -13,7 +13,7 @@ params [ //Error checks if (isNull _unit || {_type isEqualTo ""}) exitWith { if (!isNull _unit) then { - [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; + [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; }; }; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 8151d5c16..220ec94fc 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -73,7 +73,7 @@ _vehicle disableTIEquipment true; _vehicle setVariable ["trunk_in_use",false,true]; _vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; _vehicle setPlateNumber _plate; -//_vehicle setVariable ["plate", _plate, true]; what happens to ships/air? +_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber switch (side _unit) do { case west: { diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index ddafefe4b..a534fd336 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -18,6 +18,7 @@ private _uid = getPlayerUID _unit; private _className = typeOf _vehicle; private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); +private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); private _plateFormatArray = _plateFormat splitString ""; private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; @@ -40,6 +41,7 @@ while {_plate isEqualTo ""} do { if (_return isEqualTo []) exitWith {_plate = _randomPlate}; } forEach _plateFormatArray; }; +_plate = format["%1%2",_platePrefix,_plate]; if (_purchase) then { private _type = call { @@ -75,7 +77,7 @@ _vehicle disableTIEquipment true; _vehicle setVariable ["trunk_in_use",false,true]; _vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; _vehicle setPlateNumber _plate; -//_vehicle setVariable ["plate", _plate, true]; what happens to ships/air? +_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber switch (side _unit) do { case west: { From 4e6f1ed4873ef0cf79e49181203e6e1751486248 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 12:24:49 +0000 Subject: [PATCH 06/40] Further fixes, sideToString, BE Filter update, default plate prefix --- AL.ini | 4 +- Altis_Life.Altis/CfgRemoteExec.hpp | 1 - Altis_Life.Altis/Functions.hpp | 1 - Altis_Life.Altis/config/Config_Master.hpp | 2 +- Altis_Life.Altis/config/Config_SpyGlass.hpp | 4 +- Altis_Life.Altis/core/admin/fn_adminMenu.sqf | 2 +- Altis_Life.Altis/core/fn_sideToString.sqf | 26 +++++++++ .../core/housing/fn_garageRefund.sqf | 10 ++-- Altis_Life.Altis/core/pmenu/fn_cellphone.sqf | 6 +-- .../core/pmenu/fn_p_updateMenu.sqf | 2 +- Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf | 2 +- .../core/session/fn_updatePartial.sqf | 2 +- .../core/session/fn_updateRequest.sqf | 2 +- .../core/shops/fn_clothingMenu.sqf | 2 +- .../core/shops/fn_vehicleShopBuy.sqf | 8 +-- Altis_Life.Altis/core/shops/fn_virt_menu.sqf | 2 +- .../core/shops/fn_weaponShopMenu.sqf | 2 +- BEFilters/createvehicle.txt | 2 +- BEFilters/remoteexec.txt | 2 +- .../Functions/Systems/fn_getVehicles.sqf | 9 +--- .../Functions/Systems/fn_spawnVehicle.sqf | 34 ++++++------ .../Functions/Systems/fn_vehicleAnimate.sqf | 53 +++++++++++++++++++ .../Functions/Systems/fn_vehicleCreate.sqf | 22 ++++---- life_server/config.cpp | 1 + 24 files changed, 135 insertions(+), 66 deletions(-) create mode 100644 Altis_Life.Altis/core/fn_sideToString.sqf create mode 100644 life_server/Functions/Systems/fn_vehicleAnimate.sqf diff --git a/AL.ini b/AL.ini index 36191e6be..960c306a8 100755 --- a/AL.ini +++ b/AL.ini @@ -253,9 +253,9 @@ SQL1_INPUTS = 1, 2, 3 OUTPUT = 1-STRING, 2-STRING, 3 [selectVehiclesMore] -SQL1_1 = SELECT side, classname, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE plate = ? AND pid = ? +SQL1_1 = SELECT classname, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE plate = ? AND pid = ? SQL1_INPUTS = 1, 2 -OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9, 10, 11 +OUTPUT = 1-STRING, 2, 3, 4, 5, 6, 7, 8, 9, 10 [updateVehicle] SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND plate = ? diff --git a/Altis_Life.Altis/CfgRemoteExec.hpp b/Altis_Life.Altis/CfgRemoteExec.hpp index d08d6d4bb..6ccf0d0bc 100644 --- a/Altis_Life.Altis/CfgRemoteExec.hpp +++ b/Altis_Life.Altis/CfgRemoteExec.hpp @@ -59,7 +59,6 @@ class CfgRemoteExec { F(life_fnc_tazeSound,CLIENT) F(life_fnc_ticketPaid,CLIENT) F(life_fnc_ticketPrompt,CLIENT) - F(life_fnc_vehicleAnimate,CLIENT) F(life_fnc_wantedList,CLIENT) F(life_fnc_wireTransfer,CLIENT) F(life_fnc_gangBankResponse,CLIENT) diff --git a/Altis_Life.Altis/Functions.hpp b/Altis_Life.Altis/Functions.hpp index 3345d181b..485572f50 100644 --- a/Altis_Life.Altis/Functions.hpp +++ b/Altis_Life.Altis/Functions.hpp @@ -109,7 +109,6 @@ class Life_Client_Core { file = "core\config"; class houseConfig {}; class itemWeight {}; - class vehicleAnimate {}; class vehicleWeightCfg {}; }; diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 1551cb692..497a8ad8b 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -147,7 +147,7 @@ class Life_Settings { vehicleShop_3D = false; //Add preview 3D inside Shop vehicle. Default : False vehicle_rentalReturn = false; //Can return rental vehicles to 'Store vehicle in garage', doesn't actually store it in garage. vehicle_plateFormat = "$$## $$$"; //Format of vehicle plates, $ representing letter, # representing number, maximum 9 characters. - vehicle_platePrefix = ""; //Prefix of the plate, can be left blank, max 5 characters. + vehicle_platePrefix = "AYU "; //Prefix of the plate, can be left blank, max 5 characters. /* Vehicle Purchase Prices */ vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index b6241e2dc..96b537562 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -275,7 +275,7 @@ class SpyGlass { "life_fnc_spawnpointcfg_meta","life_fnc_spawnpointselected","life_fnc_spawnpointselected_meta","life_fnc_spikestrip","life_fnc_spikestrip_meta","life_fnc_spikestripeffect","life_fnc_spikestripeffect_meta","life_fnc_stopescorting","life_fnc_stopescorting_meta","life_fnc_storagebox","life_fnc_storagebox_meta","life_fnc_storevehicle","life_fnc_storevehicle_meta","life_fnc_storevehicleaction", "life_fnc_storevehicleaction_meta","life_fnc_startLoadout","life_fnc_startLoadout_meta","life_fnc_stripdownplayer","life_fnc_stripdownplayer_meta","life_fnc_surrender","life_fnc_surrender_meta","life_fnc_survival","life_fnc_survival_meta","life_fnc_tazed","life_fnc_tazed_meta","life_fnc_teleport","life_fnc_teleport_meta","life_fnc_ticketaction","life_fnc_ticketaction_meta","life_fnc_ticketgive", "life_fnc_ticketgive_meta","life_fnc_ticketpaid","life_fnc_ticketpaid_meta","life_fnc_ticketpay","life_fnc_ticketpay_meta","life_fnc_ticketprompt","life_fnc_ticketprompt_meta","life_fnc_unimpound","life_fnc_unimpound_meta","life_fnc_unrestrain","life_fnc_unrestrain_meta","life_fnc_updateviewdistance","life_fnc_updateviewdistance_meta","life_fnc_useitem","life_fnc_useitem_meta", - "life_fnc_vehicleanimate","life_fnc_vehicleanimate_meta","life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta","life_fnc_vehicleowners", + "life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta","life_fnc_vehicleowners", "life_fnc_vehicleowners_meta","life_fnc_3dpreviewdisplay","life_fnc_3dpreviewdisplay_meta","life_fnc_vehicleshopbuy","life_fnc_vehicleshopbuy_meta","life_fnc_3dpreviewexit","life_fnc_3dpreviewexit_meta","life_fnc_3dpreviewinit","life_fnc_3dpreviewinit_meta","life_fnc_vehicleshoplbchange","life_fnc_vehicleshoplbchange_meta", "life_fnc_vehicleshopmenu","life_fnc_vehicleshopmenu_meta","life_fnc_vehicleweight","life_fnc_vehicleweight_meta","life_fnc_vehicleweightcfg","life_fnc_vehicleweightcfg_meta","life_fnc_vehinventory","life_fnc_vehinventory_meta","life_fnc_vehinvsearch","life_fnc_vehinvsearch_meta","life_fnc_vehshoplicenses","life_fnc_vehshoplicenses_meta","life_fnc_vehstoreitem","life_fnc_vehstoreitem_meta", "life_fnc_vehtakeitem","life_fnc_vehtakeitem_meta","life_fnc_vinteractionmenu","life_fnc_vinteractionmenu_meta","life_fnc_virt_buy","life_fnc_virt_buy_meta","life_fnc_virt_menu","life_fnc_virt_menu_meta","life_fnc_virt_sell","life_fnc_virt_sell_meta","life_fnc_virt_update","life_fnc_virt_update_meta","life_fnc_wantedadd","life_fnc_wantedadd_meta","life_fnc_wantedaddp","life_fnc_wantedaddp_meta", @@ -290,7 +290,7 @@ class SpyGlass { "ton_fnc_federalupdate_meta","ton_fnc_fetchplayerhouses","ton_fnc_fetchplayerhouses_meta","ton_fnc_getid","ton_fnc_getid_meta","ton_fnc_getvehicles","ton_fnc_getvehicles_meta","ton_fnc_housecleanup","ton_fnc_housecleanup_meta","ton_fnc_huntingzone","ton_fnc_huntingzone_meta","ton_fnc_index","ton_fnc_inithouses","ton_fnc_inithouses_meta","ton_fnc_insertgang","ton_fnc_insertgang_meta","ton_fnc_isnumber", "ton_fnc_keymanagement","ton_fnc_keymanagement_meta","ton_fnc_managesc","ton_fnc_managesc_meta","ton_fnc_pickupaction","ton_fnc_pickupaction_meta","ton_fnc_player_query","ton_fnc_queryplayergang","ton_fnc_queryplayergang_meta","ton_fnc_removegang","ton_fnc_removegang_meta","ton_fnc_sellhouse","ton_fnc_sellhouse_meta","ton_fnc_spawnvehicle", "ton_fnc_spawnvehicle_meta","ton_fnc_spikestrip","ton_fnc_spikestrip_meta","ton_fnc_terrainsort","ton_fnc_terrainsort_meta","ton_fnc_updategang","ton_fnc_updategang_meta","ton_fnc_updatehousecontainers","ton_fnc_updatehousecontainers_meta","ton_fnc_updatehousetrunk","ton_fnc_updatehousetrunk_meta","ton_fnc_vehiclecreate","ton_fnc_vehiclecreate_meta","ton_fnc_vehicledead","ton_fnc_vehicledead_meta", - "ton_fnc_vehicledelete","ton_fnc_vehicledelete_meta","ton_fnc_vehiclestore","ton_fnc_vehiclestore_meta","ton_fnc_entityRespawned","ton_fnc_entityRespawned_meta" + "ton_fnc_vehicledelete","ton_fnc_vehicledelete_meta","ton_fnc_vehiclestore","ton_fnc_vehiclestore_meta","ton_fnc_entityrespawned","ton_fnc_entityrespawned_meta","ton_fnc_vehicleanimate","ton_fnc_vehicleanimate_meta" }; SOCK_Functions[] = { diff --git a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf index f1ac50e36..6fe81ecf6 100644 --- a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf @@ -27,7 +27,7 @@ switch (FETCH_CONST(life_adminlevel)) do lbClear _list; { - _side = switch (side _x) do {case west: {"Cop"}; case civilian: {"Civ"}; case independent: {"Medic"}; default {"Unknown"};}; + private _side = [_x] call life_util_fnc_sideToString; _list lbAdd format ["%1 - %2", _x getVariable ["realname",name _x],_side]; _list lbSetdata [(lbSize _list)-1,str(_x)]; } forEach playableUnits; diff --git a/Altis_Life.Altis/core/fn_sideToString.sqf b/Altis_Life.Altis/core/fn_sideToString.sqf new file mode 100644 index 000000000..8c80bf2af --- /dev/null +++ b/Altis_Life.Altis/core/fn_sideToString.sqf @@ -0,0 +1,26 @@ +/* + File: fn_sideToString.sqf + Author: DomT602 + Description: + Translates a side to a string representing the side. + To-do - add to functions.hpp, add to spyglass, move into utils folder +*/ +params [ + ["_unit",objNull,[objNull]], + ["_lowerCase",false,[true]] +]; +if (isNull _unit) exitWith {}; + +private _sideText = switch (side _unit) do { + case west: {"Cop"}; + case civilian: {"Civ"}; + case independent: {"Med"}; + case east: {"East"}; + default {"Unknown"}; +}; + +if (_lowerCase) then { + _sideText = toLower _sideText; +}; + +_sideText; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_garageRefund.sqf b/Altis_Life.Altis/core/housing/fn_garageRefund.sqf index 03b049981..90c420898 100644 --- a/Altis_Life.Altis/core/housing/fn_garageRefund.sqf +++ b/Altis_Life.Altis/core/housing/fn_garageRefund.sqf @@ -4,10 +4,12 @@ Author: Bryan "Tonic" Boardwine Description: - I don't know? + Returns players money as vehicle could not be spawned. */ -_price = _this select 0; -_unit = _this select 1; -if !(_unit isEqualTo player) exitWith {}; +params [ + ["_price",0,[0]] +]; + +hint localize "STR_Garage_SpawnPointError"; BANK = BANK + _price; [1] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf b/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf index fe083bdc0..b6ad43c18 100644 --- a/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_cellphone.sqf @@ -22,11 +22,7 @@ if (FETCH_CONST(life_adminlevel) < 1) then { }; { if (alive _x && !(_x isEqualTo player)) then { - _type = switch (side _x) do { - case west: {"Cop"}; - case civilian: {"Civ"}; - case independent: {"Med"}; - }; + private _type = [_x] call life_util_fnc_sideToString; _units lbAdd format ["%1 (%2)",_x getVariable ["realname",name _x],_type]; _units lbSetData [(lbSize _units)-1,str(_x)]; }; diff --git a/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf index b34aae732..e0d4c3448 100644 --- a/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_p_updateMenu.sqf @@ -13,7 +13,7 @@ if (FETCH_CONST(life_adminlevel) < 1) then { ctrlShow[2021,false]; }; -_side = switch (playerSide) do {case west:{"cop"}; case civilian:{"civ"}; case independent:{"med"};}; +private _side = [player,true] call life_util_fnc_sideToString; _inv = CONTROL(2001,2005); _lic = CONTROL(2001,2014); diff --git a/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf index c7626fd29..532eb5cf4 100644 --- a/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_wantedMenu.sqf @@ -21,7 +21,7 @@ lbClear _list; lbClear _players; { - private _side = switch (side _x) do {case west: {"Cop"}; case civilian : {"Civ"}; default {"Unknown"};}; + private _side = [_x] call life_util_fnc_sideToString; _players lbAdd format ["%1 - %2", name _x,_side]; _players lbSetdata [(lbSize _players)-1,str(_x)]; } forEach playableUnits; diff --git a/Altis_Life.Altis/core/session/fn_updatePartial.sqf b/Altis_Life.Altis/core/session/fn_updatePartial.sqf index 8f8e6a1d3..330422d95 100644 --- a/Altis_Life.Altis/core/session/fn_updatePartial.sqf +++ b/Altis_Life.Altis/core/session/fn_updatePartial.sqf @@ -12,7 +12,7 @@ private ["_mode","_packet","_array","_flag"]; _mode = param [0,0,[0]]; _packet = [getPlayerUID player,playerSide,nil,_mode]; _array = []; -_flag = switch (playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"};}; +private _flag = [player,true] call life_util_fnc_sideToString; switch (_mode) do { case 0: { diff --git a/Altis_Life.Altis/core/session/fn_updateRequest.sqf b/Altis_Life.Altis/core/session/fn_updateRequest.sqf index df40ceaad..045b92d01 100644 --- a/Altis_Life.Altis/core/session/fn_updateRequest.sqf +++ b/Altis_Life.Altis/core/session/fn_updateRequest.sqf @@ -11,7 +11,7 @@ _packet = [getPlayerUID player,(profileName),playerSide,CASH,BANK]; _array = []; _alive = alive player; _position = getPosATL player; -_flag = switch (playerSide) do {case west: {"cop"}; case civilian: {"civ"}; case independent: {"med"};}; +private _flag = [player,true] call life_util_fnc_sideToString; { _varName = LICENSE_VARNAME(configName _x,_flag); diff --git a/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf b/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf index c97766cd4..3bc9547ad 100644 --- a/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf +++ b/Altis_Life.Altis/core/shops/fn_clothingMenu.sqf @@ -25,7 +25,7 @@ private _exit = false; private "_flag"; if !(_shopSide isEqualTo "") then { - _flag = switch (playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; + _flag = [player,true] call life_util_fnc_sideToString; if !(_flag isEqualTo _shopSide) then {_exit = true;}; }; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf index ed5296fdd..a1901a2a6 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf @@ -13,10 +13,11 @@ if ((lbCurSel 2302) isEqualTo -1) exitWith {hint localize "STR_Shop_Veh_DidntPic if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; life_action_delay = time; +life_veh_shop params ["_type","_spawnPoints"]; private _className = lbData[2302,(lbCurSel 2302)]; private _vIndex = lbValue[2302,(lbCurSel 2302)]; -private _vehicleList = M_CONFIG(getArray,"CarShops",(life_veh_shop select 0),"vehicles"); -private _shopSide = M_CONFIG(getText,"CarShops",(life_veh_shop select 0),"side"); +private _vehicleList = M_CONFIG(getArray,"CarShops",_type,"vehicles"); +private _shopSide = M_CONFIG(getText,"CarShops",_type,"side"); private _initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); @@ -60,10 +61,9 @@ private _colorIndex = lbValue[2304,(lbCurSel 2304)]; if (_purchasePrice < 0) exitWith {closeDialog 0;}; //Bad price entry if (CASH < _purchasePrice) exitWith {hint format [localize "STR_Shop_Veh_NotEnough",[_purchasePrice - CASH] call life_fnc_numberText];closeDialog 0;}; -private _spawnPoints = life_veh_shop select 1; private _spawnPoint = ""; -if ((life_veh_shop select 0) == "med_air_hs") then { +if (_type == "med_air_hs") then { if (nearestObjects[(getMarkerPos _spawnPoints),["Air"],35] isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; } else { //Check if there is multiple spawn points and find a suitable spawnpoint. diff --git a/Altis_Life.Altis/core/shops/fn_virt_menu.sqf b/Altis_Life.Altis/core/shops/fn_virt_menu.sqf index 12cb7cfa0..bdc6ae782 100644 --- a/Altis_Life.Altis/core/shops/fn_virt_menu.sqf +++ b/Altis_Life.Altis/core/shops/fn_virt_menu.sqf @@ -23,7 +23,7 @@ life_shop_npc = _shopNPC; private _exit = false; if !(_shopSide isEqualTo "") then { - private _flag = switch (playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; + private _flag = [player,true] call life_util_fnc_sideToString; if !(_flag isEqualTo _shopSide) then {_exit = true;}; }; diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf index dc1ee63b0..f0647a0c1 100644 --- a/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf +++ b/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf @@ -13,7 +13,7 @@ private _conditions = M_CONFIG(getText,"WeaponShops",(_this select 3),"condition private _exit = false; if !(_shopSide isEqualTo "") then { - private _flag = switch (playerSide) do {case west: {"cop"}; case independent: {"med"}; default {"civ"};}; + private _flag = [player,true] call life_util_fnc_sideToString; if !(_flag isEqualTo _shopSide) then {_exit = true;}; }; diff --git a/BEFilters/createvehicle.txt b/BEFilters/createvehicle.txt index ac0012f16..67ce9ed5a 100644 --- a/BEFilters/createvehicle.txt +++ b/BEFilters/createvehicle.txt @@ -1,6 +1,6 @@ //regex 1 "" !=GroundWeaponHolder !=WeaponHolderSimulated !Supply[\d]{1,3} !=#lightpoint !=Land_ClutterCutter_small_F -5 "" !=GroundWeaponHolder !=WeaponHolderSimulated !Supply[\d]{1,3} !=#lightpoint !=Land_ClutterCutter_small_F !B_(OutdoorPack|AssaultPack|TacticalPack|Kitbag|FieldPack|Bergen|Carryall)_(blk|khk|dgtl|rgr|sgg|cbr|oli|mcamo|ocamo|oucamo|tna|ghex) !B_Parachute !B_Quadbike_01_F ![BOI]_Truck_0[123]_(box|covered|device|fuel|medical|transport)_F !C_Hatchback_01_(sport_)?F ![BC]_(G_)?Offroad_01_(armed_)?F !C_SUV_01_F !C_Van_01_(transport|box|fuel)_F !C_Kart_01_(Blu|Fuel|Red|Vrana)_F ![BCO]_Heli_Light_0[12]_(civil_|stripped_|unarmed_)?F !C_Rubberboat !C_Boat_Civil_01_(police_)?F !B_SDV_01_F ![BO]_MRAP_0[12]_(hmg_)?F !B_(Boat|Heli)_Transport_01_F !B_Boat_Armed_01_minigun_F !=C_Offroad_02_unarmed_F !=C_Plane_Civil_01_F !=C_Boat_Transport_02_F !=C_Scooter_Transport_01_F !=O_T_LSV_02_unarmed_F !=Chemlight_(red|yellow|green|blue) !=GrenadeHand_stone !=Land_(Razorwire|Money|Suitcase|CanisterFuel|Can|BottlePlastic|TacticalBacon)_F !=Land_Can_V3_F !=Land_BottlePlastic_V1_F !=B_RangeMaster_F !=C_man_1 !=Bo_GBU12_LGB_MI10 !=(CMflare_Chaff_|SmokeLauncher)Ammo !=Box_IND_Grenades_F !=B_supplyCrate_F +5 "" !=GroundWeaponHolder !=WeaponHolderSimulated !Supply[\d]{1,3} !=#lightpoint !=Land_ClutterCutter_small_F !B_(OutdoorPack|AssaultPack|TacticalPack|Kitbag|FieldPack|Bergen|Carryall)_(blk|khk|dgtl|rgr|sgg|cbr|oli|mcamo|ocamo|oucamo|tna|ghex) !B_Parachute !=Chemlight_(red|yellow|green|blue) !=GrenadeHand_stone !=Land_(Razorwire|Money|Suitcase|CanisterFuel|Can|BottlePlastic|TacticalBacon)_F !=Land_Can_V3_F !=Land_BottlePlastic_V1_F !=B_RangeMaster_F !=C_man_1 !=Bo_GBU12_LGB_MI10 !=(CMflare_Chaff_|SmokeLauncher)Ammo !=Box_IND_Grenades_F !=B_supplyCrate_F 5 B_AssaultPack_blk_DiverExp 5 B_AssaultPack_mcamo_AT 5 B_AssaultPack_mcamo_AA diff --git a/BEFilters/remoteexec.txt b/BEFilters/remoteexec.txt index f1aba0f4a..9b227a16b 100644 --- a/BEFilters/remoteexec.txt +++ b/BEFilters/remoteexec.txt @@ -1,3 +1,3 @@ //regex 1 "" !="_this call fn_whoDoneIt" -5 "" !BIS_fnc_(effectKilled(AirDestruction|Secondaries)|execVM) !DB_fnc_(insertRequest|queryRequest|updatePartial|updateRequest) !HC_fnc_(addContainer|addHouse|chopShopSell|deleteDBContainer|getVehicles|insertGang|insertRequest|jailSys|queryRequest|receivekeyofServer) !HC_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !HC_fnc_update(Gang|HouseContainers|HouseTrunk|Partial|Request) !HC_fnc_vehicle(Create|Delete|Store|Update) !HC_fnc_wanted(Add|Bounty|Crimes|Fetch|ProfUpdate|Remove) !life_fnc_(AAN|addVehicle2Chain|adminid|admininfo|animSync|bountyReceive|broadcast|colorVehicle|copLights) !life_fnc_(copSearch|CopSiren|corpse|demoChargeTimer|flashbang|freezePlayer|gangCreated|gangDisbanded|gangInvite) !life_fnc_(garageRefund|giveDiff|hideObj|impoundMenu|jail(Me|Sys)?) !life_fnc_(jumpFnc|knockedOut|licenseCheck|licensesRead|lightHouse|lockVehicle|medic(Lights|Request|Siren)) !life_fnc_(moveIn|pickupItem|pickupMoney|pulloutVeh|receiveItem|receiveMoney|removeLicenses|restrain|revived) !life_fnc_(robPerson|robReceive|say3D|searchClient|seizeClient|setFuel|simDisable|soundDevice|spikeStripEffect) !life_fnc_(tazeSound|ticketPaid|ticketPrompt|vehicleAnimate|gangBankResponse) !life_fnc_wanted(Add|Bounty|Crimes|Fetch|Info|List|ProfUpdate|Remove) !life_fnc_wireTransfer !SOCK_fnc_(dataQuery|insertPlayerInfo|updateRequest) !SPY_fnc_(cookieJar|notifyAdmins|observe) !TON_fnc_(addContainer|addHouse|chopShopSell|cleanupRequest|handleBlastingCharge) !TON_fnc_clientGang(Kick|Leader|Left) !TON_fnc_(clientGetKey|clientMessage) !TON_fnc_(deleteDBContainer|getID|getVehicles|insertGang|keyManagement|managesc|pickupAction|player_query|recupkeyforHC) !TON_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !TON_fnc_update(Gang|HouseContainers|HouseTrunk) !TON_fnc_vehicle(Create|Delete|Store|Update) !="_this call fn_whoDoneIt" +5 "" !BIS_fnc_(effectKilled(AirDestruction|Secondaries)|execVM) !DB_fnc_(insertRequest|queryRequest|updatePartial|updateRequest) !HC_fnc_(addContainer|addHouse|chopShopSell|deleteDBContainer|getVehicles|insertGang|insertRequest|jailSys|queryRequest|receivekeyofServer) !HC_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !HC_fnc_update(Gang|HouseContainers|HouseTrunk|Partial|Request) !HC_fnc_vehicle(Create|Delete|Store|Update) !HC_fnc_wanted(Add|Bounty|Crimes|Fetch|ProfUpdate|Remove) !life_fnc_(AAN|addVehicle2Chain|adminid|admininfo|animSync|bountyReceive|broadcast|colorVehicle|copLights) !life_fnc_(copSearch|CopSiren|corpse|demoChargeTimer|flashbang|freezePlayer|gangCreated|gangDisbanded|gangInvite) !life_fnc_(garageRefund|giveDiff|hideObj|impoundMenu|jail(Me|Sys)?) !life_fnc_(jumpFnc|knockedOut|licenseCheck|licensesRead|lightHouse|lockVehicle|medic(Lights|Request|Siren)) !life_fnc_(moveIn|pickupItem|pickupMoney|pulloutVeh|receiveItem|receiveMoney|removeLicenses|restrain|revived) !life_fnc_(robPerson|robReceive|say3D|searchClient|seizeClient|setFuel|simDisable|soundDevice|spikeStripEffect) !life_fnc_(tazeSound|ticketPaid|ticketPrompt|gangBankResponse) !life_fnc_wanted(Add|Bounty|Crimes|Fetch|Info|List|ProfUpdate|Remove) !life_fnc_wireTransfer !SOCK_fnc_(dataQuery|insertPlayerInfo|updateRequest) !SPY_fnc_(cookieJar|notifyAdmins|observe) !TON_fnc_(addContainer|addHouse|chopShopSell|cleanupRequest|handleBlastingCharge) !TON_fnc_clientGang(Kick|Leader|Left) !TON_fnc_(clientGetKey|clientMessage) !TON_fnc_(deleteDBContainer|getID|getVehicles|insertGang|keyManagement|managesc|pickupAction|player_query|recupkeyforHC) !TON_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !TON_fnc_update(Gang|HouseContainers|HouseTrunk) !TON_fnc_vehicle(Create|Delete|Store|Update) !="_this call fn_whoDoneIt" diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index 832954846..a6f9d566a 100755 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -17,14 +17,9 @@ if (isNull _unit || {_type isEqualTo ""}) exitWith { }; }; -private _side = switch (side _unit) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; -}; +private _side = [_unit,true] call life_util_fnc_sideToString; -if (_side isEqualTo "Error") exitWith { +if (_side isEqualTo "Unknown") exitWith { [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; }; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 220ec94fc..437e97732 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -11,13 +11,12 @@ params [ ["_spawnPoint","",[""]], ["_dir",-1,[0]] ]; +if (isNull _unit || {_plate isEqualTo ""}) exitWith {}; private _name = name _unit; private _side = side _unit; private _pid = getPlayerUID _unit; -if (isNull _unit || {_plate isEqualTo ""}) exitWith {}; - private _query = format ["selectVehiclesMore:%1:%2", _plate, _pid]; private _tickTime = diag_tickTime; @@ -32,28 +31,25 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { }; if (_queryResult isEqualType "" || {_queryResult isEqualTo []}) exitWith {}; -_queryResult params ["_side","_className","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; +_queryResult params ["_className","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; if (_alive isEqualTo 0) exitWith { - [1,"STR_Garage_SQLError_Destroyed",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; + [1,"STR_Garage_SQLError_Destroyed",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; }; if (_active isEqualTo 1) exitWith { - [1,"STR_Garage_SQLError_Active",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; + [1,"STR_Garage_SQLError_Active",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; }; private _nearVehicles = nearestObjects[_spawnPoint,["Car","Air","Ship"],6]; //last check for nearby vehicles if !(_nearVehicles isEqualTo []) exitWith { - [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit]; - [1,"STR_Garage_SpawnPointError",true] remoteExecCall ["life_fnc_broadcast",_unit]; + [_price] remoteExecCall ["life_fnc_garageRefund",_unit]; }; _query = format ["updateVehicle:%1:%2", _pid, _plate]; [_query, 1] call DB_fnc_asyncCall; -_wasIllegal = _wasIllegal isEqualTo 1; - private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; if (_dir isEqualTo -1) then { _dir = markerDir _spawnPoint; @@ -71,31 +67,35 @@ _vehicle disableTIEquipment true; [_vehicle] call life_fnc_clearVehicleAmmo; _vehicle setVariable ["trunk_in_use",false,true]; -_vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; +_vehicle setVariable ["vehicle_info_owners",[[_pid,name _unit]],true]; _vehicle setPlateNumber _plate; _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber -switch (side _unit) do { +switch _side do { case west: { - [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; + if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; + }; }; case civilian: { - if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then { - [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo 13)) then { + [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; }; }; case independent: { - [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; + if (_className isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; + }; }; }; -[_uid,(side _unit),_vehicle,1] call TON_fnc_keyManagement; +[_pid,_side,_vehicle,1] call TON_fnc_keyManagement; [_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { _vehicle setVariable ["Trunk",_trunk,true]; - if (_wasIllegal) then { + if (_wasIllegal isEqualTo 1) then { private _refPoint = getMarkerPos _spawnPoint; private _distance = 100000; diff --git a/life_server/Functions/Systems/fn_vehicleAnimate.sqf b/life_server/Functions/Systems/fn_vehicleAnimate.sqf new file mode 100644 index 000000000..43140276d --- /dev/null +++ b/life_server/Functions/Systems/fn_vehicleAnimate.sqf @@ -0,0 +1,53 @@ +/* + File: fn_vehicleAnimate.sqf + Author: DomT602 + Description: + Animates various aspects of the vehicle - moved to server. +*/ +params [ + ["_vehicle",objNull,[objNull]], + ["_animate","",[""]], + ["_preset",false,[false]] +]; +if (isNull _vehicle) exitWith {}; + +if !(_preset) then { + if (count _animate > 1) then { + { + _x params ["_selection","_value"]; + _vehicle animate [_selection,_value]; + } forEach _animate; + } else { + _animate params ["_selection","_value"]; + _vehicle animate [_selection,_value]; + }; +} else { + switch (_animate) do { + case "civ_littlebird": { + _vehicle animate ["addDoors",1]; + _vehicle animate ["addBenches",0]; + _vehicle animate ["addTread",0]; + _vehicle animate ["AddCivilian_hide",1]; + _vehicle lockCargo [2,true]; + _vehicle lockCargo [3,true]; + _vehicle lockCargo [4,true]; + _vehicle lockCargo [5,true]; + }; + + case "service_truck": { + _vehicle animate ["HideServices", 0]; + _vehicle animate ["HideDoor3", 1]; + }; + + case "med_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle setVariable ["lights",false,true]; + }; + + case "cop_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle animate ["HideBumper1", 0]; + _vehicle setVariable ["lights",false,true]; + }; + }; +}; \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index a534fd336..2590e9557 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -15,7 +15,6 @@ params [ if (isNull _unit || {_className isEqualTo "" || {_spawnPoint isEqualTo ""}}) exitWith {}; private _uid = getPlayerUID _unit; -private _className = typeOf _vehicle; private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); @@ -50,12 +49,7 @@ if (_purchase) then { if (_vehicle isKindOf "Ship") exitWith {"Ship"}; }; - private _side = switch (side _unit) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; - }; + private _side = [_unit,true] call life_util_fnc_sideToString; private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; [_query, 1] call DB_fnc_asyncCall; @@ -71,7 +65,7 @@ clearBackpackCargoGlobal _vehicle; _vehicle lock 2; _vehicle disableTIEquipment true; -[_vehicle,_colorIndex] call life_fnc_colorVehicle; +[_vehicle,_color] call life_fnc_colorVehicle; [_vehicle] call life_fnc_clearVehicleAmmo; _vehicle setVariable ["trunk_in_use",false,true]; @@ -81,15 +75,19 @@ _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for se switch (side _unit) do { case west: { - [_vehicle,"cop_offroad",true] spawn life_fnc_vehicleAnimate; + if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; + }; }; case civilian: { - if ((life_veh_shop select 2) isEqualTo "civ" && {_className == "B_Heli_Light_01_F"}) then { - [_vehicle,"civ_littlebird",true] spawn life_fnc_vehicleAnimate; + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo 13)) then { + [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; }; }; case independent: { - [_vehicle,"med_offroad",true] spawn life_fnc_vehicleAnimate; + if (_className isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; + }; }; }; diff --git a/life_server/config.cpp b/life_server/config.cpp index 1f8add14c..0837a08c3 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -72,6 +72,7 @@ class CfgFunctions { class recupkeyforHC {}; class handleBlastingCharge {}; class terrainSort {}; + class vehicleAnimate {}; }; class Housing { From 41c57b938f068b76497e9fc8cbc612c4055c8fbe Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 12:29:44 +0000 Subject: [PATCH 07/40] Illegal use of tabs --- Altis_Life.Altis/core/fn_sideToString.sqf | 20 +++++++++---------- .../core/housing/fn_garageRefund.sqf | 2 +- .../core/shops/fn_weaponShopMenu.sqf | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Altis_Life.Altis/core/fn_sideToString.sqf b/Altis_Life.Altis/core/fn_sideToString.sqf index 8c80bf2af..839d697c5 100644 --- a/Altis_Life.Altis/core/fn_sideToString.sqf +++ b/Altis_Life.Altis/core/fn_sideToString.sqf @@ -2,25 +2,25 @@ File: fn_sideToString.sqf Author: DomT602 Description: - Translates a side to a string representing the side. - To-do - add to functions.hpp, add to spyglass, move into utils folder + Translates a side to a string representing the side. + To-do - add to functions.hpp, add to spyglass, move into utils folder */ params [ - ["_unit",objNull,[objNull]], - ["_lowerCase",false,[true]] + ["_unit",objNull,[objNull]], + ["_lowerCase",false,[true]] ]; if (isNull _unit) exitWith {}; private _sideText = switch (side _unit) do { - case west: {"Cop"}; - case civilian: {"Civ"}; - case independent: {"Med"}; - case east: {"East"}; - default {"Unknown"}; + case west: {"Cop"}; + case civilian: {"Civ"}; + case independent: {"Med"}; + case east: {"East"}; + default {"Unknown"}; }; if (_lowerCase) then { - _sideText = toLower _sideText; + _sideText = toLower _sideText; }; _sideText; \ No newline at end of file diff --git a/Altis_Life.Altis/core/housing/fn_garageRefund.sqf b/Altis_Life.Altis/core/housing/fn_garageRefund.sqf index 90c420898..fc0fb7bbd 100644 --- a/Altis_Life.Altis/core/housing/fn_garageRefund.sqf +++ b/Altis_Life.Altis/core/housing/fn_garageRefund.sqf @@ -7,7 +7,7 @@ Returns players money as vehicle could not be spawned. */ params [ - ["_price",0,[0]] + ["_price",0,[0]] ]; hint localize "STR_Garage_SpawnPointError"; diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf index f0647a0c1..b606dbc1a 100644 --- a/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf +++ b/Altis_Life.Altis/core/shops/fn_weaponShopMenu.sqf @@ -13,7 +13,7 @@ private _conditions = M_CONFIG(getText,"WeaponShops",(_this select 3),"condition private _exit = false; if !(_shopSide isEqualTo "") then { - private _flag = [player,true] call life_util_fnc_sideToString; + private _flag = [player,true] call life_util_fnc_sideToString; if !(_flag isEqualTo _shopSide) then {_exit = true;}; }; From 88436d348cc3875ccdfdc9f4c131ef870d404f10 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 16:04:25 +0000 Subject: [PATCH 08/40] Missing query and loop change --- AL.ini | 5 +- Altis_Life.Altis/core/fn_sideToString.sqf | 4 +- .../Functions/Systems/fn_vehicleCreate.sqf | 190 +++++++++--------- 3 files changed, 101 insertions(+), 98 deletions(-) diff --git a/AL.ini b/AL.ini index 960c306a8..7848c6b0f 100755 --- a/AL.ini +++ b/AL.ini @@ -245,7 +245,10 @@ SQL1_1 = UPDATE containers SET owned = '0', pos = '[]' WHERE id = ? SQL1_INPUTS = 1 - +[checkPlate] +SQL1_1 = SELECT plate FROM vehicles WHERE plate=?; +SQL1_INPUTS = 1 +OUTPUT = 1-STRING [selectVehicles] SQL1_1 = SELECT plate, classname, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? diff --git a/Altis_Life.Altis/core/fn_sideToString.sqf b/Altis_Life.Altis/core/fn_sideToString.sqf index 839d697c5..eed94a860 100644 --- a/Altis_Life.Altis/core/fn_sideToString.sqf +++ b/Altis_Life.Altis/core/fn_sideToString.sqf @@ -16,11 +16,11 @@ private _sideText = switch (side _unit) do { case civilian: {"Civ"}; case independent: {"Med"}; case east: {"East"}; - default {"Unknown"}; + default {"Unknown"}; }; if (_lowerCase) then { _sideText = toLower _sideText; }; -_sideText; \ No newline at end of file +_sideText; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 2590e9557..f04ff1a47 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -1,95 +1,95 @@ -/* - File: fn_vehicleCreate.sqf - Author: Bryan "Tonic" Boardwine - Description: - Creates the vehicle and adds a database entry if vehicle is purchased. -*/ -params [ - ["_unit", objNull, [objNull]], - ["_className","",[""]], - ["_spawnPoint","",[""]], - ["_color", -1, [0]], - ["_purchase",false,[false]] -]; - -if (isNull _unit || {_className isEqualTo "" || {_spawnPoint isEqualTo ""}}) exitWith {}; - -private _uid = getPlayerUID _unit; - -private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); -private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); -private _plateFormatArray = _plateFormat splitString ""; -private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; - -private _plate = ""; -while {_plate isEqualTo ""} do { - { - private _randomPlate = []; - if (_x isEqualTo "$") then { - _randomPlate pushBack (selectRandom _letterArray); - } else { - if (_x isEqualTo " ") then { - _randomPlate pushBack " "; - } else { - _randomPlate pushBack (round(random 9)); - }; - }; - _randomPlate = _randomPlate joinString ""; - - private _return = [format["checkPlate:%1",_randomPlate],2] call DB_fnc_asyncCall; - if (_return isEqualTo []) exitWith {_plate = _randomPlate}; - } forEach _plateFormatArray; -}; -_plate = format["%1%2",_platePrefix,_plate]; - -if (_purchase) then { - private _type = call { - if (_vehicle isKindOf "Car") exitWith {"Car"}; - if (_vehicle isKindOf "Air") exitWith {"Air"}; - if (_vehicle isKindOf "Ship") exitWith {"Ship"}; - }; - - private _side = [_unit,true] call life_util_fnc_sideToString; - - private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; - [_query, 1] call DB_fnc_asyncCall; -}; - -private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; -_vehicle setDir (markerDir _spawnPoint); - -clearWeaponCargoGlobal _vehicle; -clearMagazineCargoGlobal _vehicle; -clearItemCargoGlobal _vehicle; -clearBackpackCargoGlobal _vehicle; -_vehicle lock 2; -_vehicle disableTIEquipment true; - -[_vehicle,_color] call life_fnc_colorVehicle; -[_vehicle] call life_fnc_clearVehicleAmmo; - -_vehicle setVariable ["trunk_in_use",false,true]; -_vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; -_vehicle setPlateNumber _plate; -_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber - -switch (side _unit) do { - case west: { - if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { - [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; - }; - }; - case civilian: { - if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo 13)) then { - [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; - }; - }; - case independent: { - if (_className isEqualTo "C_Offroad_01_F") then { - [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; - }; - }; -}; - -[_uid,(side _unit),_vehicle,1] call TON_fnc_keyManagement; -[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; \ No newline at end of file +/* + File: fn_vehicleCreate.sqf + Author: Bryan "Tonic" Boardwine + Description: + Creates the vehicle and adds a database entry if vehicle is purchased. +*/ +params [ + ["_unit", objNull, [objNull]], + ["_className","",[""]], + ["_spawnPoint","",[""]], + ["_color", -1, [0]], + ["_purchase",false,[false]] +]; + +if (isNull _unit || {_className isEqualTo "" || {_spawnPoint isEqualTo ""}}) exitWith {}; + +private _uid = getPlayerUID _unit; + +private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); +private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); +private _plateFormatArray = _plateFormat splitString ""; +private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; + +private _plate = ""; +while {_plate isEqualTo ""} do { + private _randomPlate = []; + { + if (_x isEqualTo "$") then { + _randomPlate pushBack (selectRandom _letterArray); + } else { + if (_x isEqualTo " ") then { + _randomPlate pushBack " "; + } else { + _randomPlate pushBack (round(random 9)); + }; + }; + } forEach _plateFormatArray; + + _randomPlate = _randomPlate joinString ""; + private _return = [format["checkPlate:%1",_randomPlate],2] call DB_fnc_asyncCall; + if (_return isEqualTo []) exitWith {_plate = _randomPlate}; +}; +_plate = format["%1%2",_platePrefix,_plate]; + +if (_purchase) then { + private _type = call { + if (_vehicle isKindOf "Car") exitWith {"Car"}; + if (_vehicle isKindOf "Air") exitWith {"Air"}; + if (_vehicle isKindOf "Ship") exitWith {"Ship"}; + }; + + private _side = [_unit,true] call life_util_fnc_sideToString; + + private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; + [_query, 1] call DB_fnc_asyncCall; +}; + +private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; +_vehicle setDir (markerDir _spawnPoint); + +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; +_vehicle lock 2; +_vehicle disableTIEquipment true; + +[_vehicle,_color] call life_fnc_colorVehicle; +[_vehicle] call life_fnc_clearVehicleAmmo; + +_vehicle setVariable ["trunk_in_use",false,true]; +_vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; +_vehicle setPlateNumber _plate; +_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber + +switch (side _unit) do { + case west: { + if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; + }; + }; + case civilian: { + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo 13)) then { + [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; + }; + }; + case independent: { + if (_className isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; + }; + }; +}; + +[_uid,(side _unit),_vehicle,1] call TON_fnc_keyManagement; +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; From b24e4bfc7ed6b6b8b1c45b2bf3df97eafe74c2a4 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 19:17:27 +0000 Subject: [PATCH 09/40] Config option for unique plates --- AL.ini | 31 +++++++++++-------- Altis_Life.Altis/config/Config_Master.hpp | 1 + .../core/config/fn_vehicleWeightCfg.sqf | 15 ++++----- .../dialog/function/fn_garageLBChange.sqf | 6 ++-- .../dialog/function/fn_impoundMenu.sqf | 6 ++-- .../dialog/function/fn_sellGarage.sqf | 6 ++-- .../dialog/function/fn_unimpound.sqf | 6 ++-- altislife.sql | 5 +-- life_server/Functions/Systems/fn_cleanup.sqf | 6 ++-- .../Functions/Systems/fn_entityKilled.sqf | 6 ++-- .../Functions/Systems/fn_getVehicles.sqf | 2 +- .../Functions/Systems/fn_spawnVehicle.sqf | 13 ++++---- .../Functions/Systems/fn_vehicleCreate.sqf | 20 ++++++++++-- .../Functions/Systems/fn_vehicleDelete.sqf | 6 ++-- .../Functions/Systems/fn_vehicleStore.sqf | 8 ++--- .../Functions/Systems/fn_vehicleUpdate.sqf | 6 ++-- 16 files changed, 84 insertions(+), 59 deletions(-) diff --git a/AL.ini b/AL.ini index 7848c6b0f..0eb817d73 100755 --- a/AL.ini +++ b/AL.ini @@ -250,42 +250,47 @@ SQL1_1 = SELECT plate FROM vehicles WHERE plate=?; SQL1_INPUTS = 1 OUTPUT = 1-STRING +[selectVehicleID] +SQL1_1 = SELECT id FROM vehicles WHERE plate = ? AND pid = ? ORDER BY id DESC LIMIT 1; +SQL1_INPUTS = 1, 2 +OUTPUT = 1 + [selectVehicles] -SQL1_1 = SELECT plate, classname, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? +SQL1_1 = SELECT id, plate, classname, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? SQL1_INPUTS = 1, 2, 3 -OUTPUT = 1-STRING, 2-STRING, 3 +OUTPUT = 1, 2-STRING, 3-STRING, 4 [selectVehiclesMore] -SQL1_1 = SELECT classname, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE plate = ? AND pid = ? +SQL1_1 = SELECT classname, plate, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE id = ? AND pid = ? SQL1_INPUTS = 1, 2 -OUTPUT = 1-STRING, 2, 3, 4, 5, 6, 7, 8, 9, 10 +OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9,10 [updateVehicle] -SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2 [updateVehicleBlacklist] -SQL1_1 = UPDATE vehicles SET blacklist = '0' WHERE plate = ? AND pid = ? +SQL1_1 = UPDATE vehicles SET blacklist = '0' WHERE id = ? AND pid = ? SQL1_INPUTS = 1, 2 [updateVehicleBlacklistPlate] -SQL1_1 = UPDATE vehicles SET blacklist = '1' WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET blacklist = '1' WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2 [updateVehicleFuel] -SQL1_1 = UPDATE vehicles SET active = '0', fuel = ?, damage = ? WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET active = '0', fuel = ?, damage = ? WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2, 3, 4 [updateVehicleAll] -SQL1_1 = UPDATE vehicles SET active = '0', inventory = ?, gear = ?, fuel = ?, damage = ? WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET active = '0', inventory = ?, gear = ?, fuel = ?, damage = ? WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2, 3, 4, 5, 6 [updateVehicleGear] -SQL1_1 = UPDATE vehicles SET gear = ? WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET gear = ? WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2, 3 [updateVehicleTrunk] -SQL1_1 = UPDATE vehicles SET inventory = ? WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET inventory = ? WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2, 3 [insertVehicle] @@ -293,11 +298,11 @@ SQL1_1 = INSERT INTO vehicles (side, classname, type, pid, alive, active, invent SQL1_INPUTS = 1, 2, 3, 4, 5, 6 [deleteVehicle] -SQL1_1 = UPDATE vehicles SET alive = '0' WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET alive = '0' WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2 [cleanupVehicle] -SQL1_1 = UPDATE vehicles SET active = '0', fuel = ? WHERE pid = ? AND plate = ? +SQL1_1 = UPDATE vehicles SET active = '0', fuel = ? WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2, 3 diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 497a8ad8b..c9fca3fba 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -148,6 +148,7 @@ class Life_Settings { vehicle_rentalReturn = false; //Can return rental vehicles to 'Store vehicle in garage', doesn't actually store it in garage. vehicle_plateFormat = "$$## $$$"; //Format of vehicle plates, $ representing letter, # representing number, maximum 9 characters. vehicle_platePrefix = "AYU "; //Prefix of the plate, can be left blank, max 5 characters. + vehicle_enforceUniquePlate = false; //True to prevent vehicles having the same plates. /* Vehicle Purchase Prices */ vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier diff --git a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf index 413c1d565..705f6faf8 100644 --- a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf +++ b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf @@ -6,14 +6,15 @@ Description: Master configuration for vehicle weight. */ -private ["_className","_classNameLife","_weight"]; -_className = [_this,0,"",[""]] call BIS_fnc_param; -_classNameLife = _className; -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist +params [ + ["_className","",[""]] +]; + +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist }; -_weight = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"vItemSpace"); -if (isNil "_weight") then {_weight = -1;}; +private _weight = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"vItemSpace"); + _weight; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index 030cd1847..a66876891 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -14,21 +14,21 @@ params [ //Fetch some information. private _dataArr = _control lbData _index; private _color = _control lbValue _index; -(parseSimpleArray _dataArr) params ["_plate","_className"]; +(parseSimpleArray _dataArr) params ["","_className"]; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; _className = "Default"; //Use Default class if it doesn't exist }; -private _vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures") select _color) select 0); +private _vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures") select _color) select 0); if (isNil "_vehicleColor") then {_vehicleColor = "Default";}; private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; _vehicleInfo params ["","","","","","","","","_maxSpeed","","_seats","_horsePower","_fuelCapacity"]; private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; -private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); switch (playerSide) do { diff --git a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf index 84d413ecd..f80440689 100644 --- a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf +++ b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf @@ -23,10 +23,10 @@ private _control = CONTROL(2800,2802); lbClear _control; { - _x params ["_plate","_className","_color"]; + _x params ["_vid","_plate","_className","_color"]; private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; - _control lbAdd (_vehicleInfo select 3); - private _tmp = str([_plate,_className]); + _control lbAdd format ["%1 - %2",(_vehicleInfo select 3),_plate]; + private _tmp = str([_vid,_className]); _control lbSetData [_forEachIndex,_tmp]; _control lbSetPicture [_forEachIndex,(_vehicleInfo select 2)]; _control lbSetValue [_forEachIndex,_color]; diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index 11d8a5be1..a0349ab7a 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -12,7 +12,7 @@ if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; private _dataArr = _control lbData _index; private _color = _control lbValue _index; -(parseSimpleArray _dataArr) params ["_plate",["_className",""]]; +(parseSimpleArray _dataArr) params ["_vid",["_className",""]]; if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; @@ -58,9 +58,9 @@ private _action = [ if !(_action) exitWith {}; if (life_HC_isActive) then { - [player,_plate] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; + [player,_vid] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; } else { - [player,_plate] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; + [player,_vid] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; }; hint format [localize "STR_Garage_SoldCar",[_sellPrice] call life_fnc_numberText]; diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 75e982020..32e09df39 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -12,7 +12,7 @@ if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; private _dataArr = _control lbData _index; private _color = _control lbValue _index; -(parseSimpleArray _dataArr) params ["_plate",["_className",""]]; +(parseSimpleArray _dataArr) params ["_vid",["_className",""]]; if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { @@ -42,9 +42,9 @@ if (_spawnPoint isEqualType []) then { }; if (life_HC_isActive) then { - [player,_plate,_spawnPoint,_dir] remoteExecCall ["HC_fnc_spawnVehicle",HC_Life]; + [player,_vid,_spawnPoint,_dir] remoteExecCall ["HC_fnc_spawnVehicle",HC_Life]; } else { - [player,_plate,_spawnPoint,_dir] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; + [player,_vid,_spawnPoint,_dir] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; }; hint localize "STR_Garage_SpawningVeh"; diff --git a/altislife.sql b/altislife.sql index a7a732886..087aac31c 100755 --- a/altislife.sql +++ b/altislife.sql @@ -114,7 +114,7 @@ CREATE TABLE IF NOT EXISTS `players` ( -- CREATE TABLE IF NOT EXISTS `vehicles` ( - `plate` VARCHAR(14) NOT NULL, + `id` INT NOT NULL AUTO_INCREMENT, `pid` VARCHAR(17) NOT NULL, `side` VARCHAR(10) NOT NULL, `classname` VARCHAR(64) NOT NULL, @@ -122,6 +122,7 @@ CREATE TABLE IF NOT EXISTS `vehicles` ( `alive` TINYINT NOT NULL DEFAULT 1, `blacklist` TINYINT NOT NULL DEFAULT 0, `active` TINYINT NOT NULL DEFAULT 0, + `plate` VARCHAR(15) NOT NULL, `color` INT NOT NULL, `inventory` TEXT NOT NULL, `gear` TEXT NOT NULL, @@ -129,7 +130,7 @@ CREATE TABLE IF NOT EXISTS `vehicles` ( `damage` VARCHAR(256) NOT NULL DEFAULT '[]', `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`plate`), + PRIMARY KEY (`id`), INDEX `fkIdx_players_vehicles` (`pid`), CONSTRAINT `FK_players_vehicles` FOREIGN KEY `fkIdx_players_vehicles` (`pid`) REFERENCES `players` (`pid`) diff --git a/life_server/Functions/Systems/fn_cleanup.sqf b/life_server/Functions/Systems/fn_cleanup.sqf index 91342f6a7..64f5b5702 100755 --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -22,15 +22,15 @@ for "_i" from 0 to 1 step 0 do { private _fuel = if (_saveFuel) then {fuel _x} else {1}; private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; _ownerInfo params ["_uid"]; - private _plate = _x getVariable ["plate",""]; + private _vid = _x getVariable ["vehID",-1]; deleteVehicle _x; - if (_plate isEqualTo "") exitWith {}; + if (_vid isEqualTo -1) exitWith {}; waitUntil {uiSleep 1; isNull _x}; - private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; + private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _vid]; [_query, 1] call DB_fnc_asyncCall; }; }; diff --git a/life_server/Functions/Systems/fn_entityKilled.sqf b/life_server/Functions/Systems/fn_entityKilled.sqf index 4ef2a65b7..581b4f621 100644 --- a/life_server/Functions/Systems/fn_entityKilled.sqf +++ b/life_server/Functions/Systems/fn_entityKilled.sqf @@ -48,11 +48,11 @@ private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _killed) if (_vehicleClass in ["Air","Armored","Car","Ship","Submarine"]) exitWith { private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; _ownerInfo params ["_uid"]; - private _plate = _x getVariable ["plate",""]; + private _vid = _x getVariable ["vehID",-1]; - if !(_plate isEqualTo "") then { + if !(_vid isEqualTo -1) then { - private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; + private _query = format ["deleteVehicle:%1:%2", _uid, _vid]; [_query,1] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index a6f9d566a..4055ee7fa 100755 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -12,7 +12,7 @@ params [ //Error checks if (isNull _unit || {_type isEqualTo ""}) exitWith { - if (!isNull _unit) then { + if !(isNull _unit) then { [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; }; }; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 437e97732..58645489d 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -7,17 +7,17 @@ */ params [ ["_unit",objNull,[objNull]], - ["_plate","",[""]], + ["_vid",-1,[""]], ["_spawnPoint","",[""]], ["_dir",-1,[0]] ]; -if (isNull _unit || {_plate isEqualTo ""}) exitWith {}; +if (isNull _unit || {_vid isEqualTo -1}) exitWith {}; private _name = name _unit; private _side = side _unit; private _pid = getPlayerUID _unit; -private _query = format ["selectVehiclesMore:%1:%2", _plate, _pid]; +private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; private _tickTime = diag_tickTime; private _queryResult = [_query, 2] call DB_fnc_asyncCall; @@ -31,7 +31,7 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { }; if (_queryResult isEqualType "" || {_queryResult isEqualTo []}) exitWith {}; -_queryResult params ["_className","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; +_queryResult params ["_className","_plate","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; if (_alive isEqualTo 0) exitWith { [1,"STR_Garage_SQLError_Destroyed",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; @@ -47,7 +47,7 @@ if !(_nearVehicles isEqualTo []) exitWith { [_price] remoteExecCall ["life_fnc_garageRefund",_unit]; }; -_query = format ["updateVehicle:%1:%2", _pid, _plate]; +_query = format ["updateVehicle:%1:%2", _pid, _vid]; [_query, 1] call DB_fnc_asyncCall; private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; @@ -70,6 +70,7 @@ _vehicle setVariable ["trunk_in_use",false,true]; _vehicle setVariable ["vehicle_info_owners",[[_pid,name _unit]],true]; _vehicle setPlateNumber _plate; _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber +_vehicle setVariable ["vehID",_vid]; switch _side do { case west: { @@ -116,7 +117,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { _location = text _location; [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; - _query = format ["updateVehicleBlacklist:%1:%2", _plate, _pid]; + _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; [_query, 1] call DB_fnc_asyncCall; }; } else { diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index f04ff1a47..f180a0d6c 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -18,6 +18,7 @@ private _uid = getPlayerUID _unit; private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); +private _plateForceUnique = LIFE_SETTINGS(getNumber,"vehicle_enforceUniquePlate") isEqualTo 1; private _plateFormatArray = _plateFormat splitString ""; private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; @@ -37,11 +38,16 @@ while {_plate isEqualTo ""} do { } forEach _plateFormatArray; _randomPlate = _randomPlate joinString ""; - private _return = [format["checkPlate:%1",_randomPlate],2] call DB_fnc_asyncCall; - if (_return isEqualTo []) exitWith {_plate = _randomPlate}; + if (_plateForceUnique) then { + private _return = [format["checkPlate:%1",_randomPlate],2] call DB_fnc_asyncCall; + if (_return isEqualTo []) exitWith {_plate = _randomPlate}; + } else { + _plate = _randomPlate; + }; }; _plate = format["%1%2",_platePrefix,_plate]; +private _vid = -1; if (_purchase) then { private _type = call { if (_vehicle isKindOf "Car") exitWith {"Car"}; @@ -72,6 +78,16 @@ _vehicle setVariable ["trunk_in_use",false,true]; _vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; _vehicle setPlateNumber _plate; _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber +if (_purchase) then { + [_plate,_uid,_vehicle] spawn { + params ["_plate","_uid","_vehicle"]; + uiSleep 0.3; + private _query = format ["selectVehicleID:%1:%2", _plate, _uid]; + private _queryResult = [_query, 2] call DB_fnc_asyncCall; + _queryResult params ["_vid"]; + _vehicle setVariable ["vehID",_vid]; + }; +}; switch (side _unit) do { case west: { diff --git a/life_server/Functions/Systems/fn_vehicleDelete.sqf b/life_server/Functions/Systems/fn_vehicleDelete.sqf index 2906f989e..94017d3d4 100755 --- a/life_server/Functions/Systems/fn_vehicleDelete.sqf +++ b/life_server/Functions/Systems/fn_vehicleDelete.sqf @@ -7,10 +7,10 @@ params [ ["_unit",objNull,[objNull]], - ["_plate","",[""]] + ["_vid",-1,[0]] ]; -if (isNull _unit || {_plate isEqualTo ""}) exitWith {}; +if (isNull _unit || {_vid isEqualTo -1}) exitWith {}; private _pid = getPlayerUID _unit; -private _query = format ["deleteVehicle:%1:%2", _pid, _plate]; +private _query = format ["deleteVehicle:%1:%2", _pid, _vid]; [_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index 0b8895815..b02f8f230 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -15,7 +15,7 @@ if (isNull _vehicle || {isNull _unit}) exitWith {life_impound_inuse = false; (ow private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; _ownerInfo params ["_uid"]; -private _plate = _vehicle getVariable ["plate",""]; +private _vid = _vehicle getVariable ["vehID",-1]; // save damage. private _damage = []; @@ -32,7 +32,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { if (_impound) exitWith { if !(_vInfo isEqualTo []) then { - private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; + private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; [_query,1] call DB_fnc_asyncCall; }; @@ -96,7 +96,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { if (_blacklist) then { [_uid, _profileName, "481"] remoteExecCall ["life_fnc_wantedAdd", RSERV]; - private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; + private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _vid]; [_query, 1] call DB_fnc_asyncCall; }; @@ -129,7 +129,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { }; // update -private _query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; +private _query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _vid]; [_query,1] call DB_fnc_asyncCall; if (!isNil "_vehicle" && {!isNull _vehicle}) then { diff --git a/life_server/Functions/Systems/fn_vehicleUpdate.sqf b/life_server/Functions/Systems/fn_vehicleUpdate.sqf index 8c76ca2de..be31736f1 100755 --- a/life_server/Functions/Systems/fn_vehicleUpdate.sqf +++ b/life_server/Functions/Systems/fn_vehicleUpdate.sqf @@ -17,7 +17,7 @@ private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; if (_dbInfo isEqualTo []) exitWith {}; _ownerInfo params ["_uid"]; -private _plate = _vehicle getVariable ["plate",""]; +private _vid = _vehicle getVariable ["vehID",-1]; switch _mode do { case 1: { @@ -32,7 +32,7 @@ switch _mode do { _cargo = []; }; - private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _plate]; + private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _vid]; [_query, 1] call DB_fnc_asyncCall; }; @@ -51,7 +51,7 @@ switch _mode do { } forEach _itemList; _trunk = [_items,_totalweight]; - private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _plate]; + private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _vid]; [_query,1] call DB_fnc_asyncCall; }; }; From 81b672a97defb6678516964fd8a73d1a3b47271e Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 19:28:01 +0000 Subject: [PATCH 10/40] Tab and cleanup --- .../core/config/fn_vehicleAnimate.sqf | 62 ------------------- .../core/config/fn_vehicleWeightCfg.sqf | 2 +- .../dialog/function/fn_garageLBChange.sqf | 2 +- .../dialog/function/fn_unimpound.sqf | 2 +- .../Functions/Systems/fn_vehicleAnimate.sqf | 15 ++--- 5 files changed, 8 insertions(+), 75 deletions(-) delete mode 100644 Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf diff --git a/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf b/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf deleted file mode 100644 index b9c190d1f..000000000 --- a/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf +++ /dev/null @@ -1,62 +0,0 @@ -/* - File: fn_vehicleAnimate.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pass what you want to be animated. -*/ -private ["_vehicle","_animate","_state"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _vehicle) exitWith {}; //FUCK -_animate = [_this,1,"",["",[]]] call BIS_fnc_param; -_preset = [_this,2,false,[false]] call BIS_fnc_param; - -if (!_preset) then -{ - if (count _animate > 1) then - { - { - _vehicle animate[_x select 0,_x select 1]; - } forEach _animate; - } - else - { - _vehicle animate[_animate select 0,_animate select 1]; - }; -} - else -{ - switch (_animate) do - { - case "civ_littlebird": - { - _vehicle animate ["addDoors",1]; - _vehicle animate ["addBenches",0]; - _vehicle animate ["addTread",0]; - _vehicle animate ["AddCivilian_hide",1]; - _vehicle lockCargo [2,true]; - _vehicle lockCargo [3,true]; - _vehicle lockCargo [4,true]; - _vehicle lockCargo [5,true]; - }; - - case "service_truck": - { - _vehicle animate ["HideServices", 0]; - _vehicle animate ["HideDoor3", 1]; - }; - - case "med_offroad": - { - _vehicle animate ["HidePolice", 0]; - _vehicle setVariable ["lights",false,true]; - }; - - case "cop_offroad": - { - _vehicle animate ["HidePolice", 0]; - _vehicle animate ["HideBumper1", 0]; - _vehicle setVariable ["lights",false,true]; - }; - }; -}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf index 705f6faf8..505806475 100644 --- a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf +++ b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf @@ -7,7 +7,7 @@ Master configuration for vehicle weight. */ params [ - ["_className","",[""]] + ["_className","",[""]] ]; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index a66876891..d30934a13 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -4,7 +4,7 @@ Author: Bryan "Tonic" Boardwine Description: - Can't be bothered to answer it.. Already deleted it by accident.. + Updates the information when garage selection is changed. */ params [ ["_control",controlNull,[controlNull]], diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 32e09df39..898103c20 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -4,7 +4,7 @@ Author: Bryan "Tonic" Boardwine Description: - Yeah... Gets the vehicle from the garage. + Gets the vehicle from the garage. */ private _control = CONTROL(2800,2802); private _index = lbCurSel _control; diff --git a/life_server/Functions/Systems/fn_vehicleAnimate.sqf b/life_server/Functions/Systems/fn_vehicleAnimate.sqf index 43140276d..f56619018 100644 --- a/life_server/Functions/Systems/fn_vehicleAnimate.sqf +++ b/life_server/Functions/Systems/fn_vehicleAnimate.sqf @@ -6,23 +6,18 @@ */ params [ ["_vehicle",objNull,[objNull]], - ["_animate","",[""]], + ["_animate","",["",[]]], ["_preset",false,[false]] ]; if (isNull _vehicle) exitWith {}; if !(_preset) then { - if (count _animate > 1) then { - { - _x params ["_selection","_value"]; - _vehicle animate [_selection,_value]; - } forEach _animate; - } else { - _animate params ["_selection","_value"]; + { + _x params ["_selection","_value"]; _vehicle animate [_selection,_value]; - }; + } forEach _animate; } else { - switch (_animate) do { + switch _animate do { case "civ_littlebird": { _vehicle animate ["addDoors",1]; _vehicle animate ["addBenches",0]; From 11b6870d7c6bbd0b37e8e41c7c84411e6db4d3e4 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 19:36:54 +0000 Subject: [PATCH 11/40] Different method of returning vehicle ID --- AL.ini | 8 ++------ life_server/Functions/Systems/fn_vehicleCreate.sqf | 11 +++++------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/AL.ini b/AL.ini index 0eb817d73..589f5d3a0 100755 --- a/AL.ini +++ b/AL.ini @@ -250,11 +250,6 @@ SQL1_1 = SELECT plate FROM vehicles WHERE plate=?; SQL1_INPUTS = 1 OUTPUT = 1-STRING -[selectVehicleID] -SQL1_1 = SELECT id FROM vehicles WHERE plate = ? AND pid = ? ORDER BY id DESC LIMIT 1; -SQL1_INPUTS = 1, 2 -OUTPUT = 1 - [selectVehicles] SQL1_1 = SELECT id, plate, classname, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? SQL1_INPUTS = 1, 2, 3 @@ -294,8 +289,9 @@ SQL1_1 = UPDATE vehicles SET inventory = ? WHERE pid = ? AND id = ? SQL1_INPUTS = 1, 2, 3 [insertVehicle] -SQL1_1 = INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear) VALUES (?, ?, ?, ?, '1','1','[[],0]', ?, ?,'[]') +SQL1_1 = INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear) VALUES (?, ?, ?, ?, '1','1','[[],0]', ?, ?,'[]'); SELECT LAST_INSERT_ID() SQL1_INPUTS = 1, 2, 3, 4, 5, 6 +OUTPUT= = 1 [deleteVehicle] SQL1_1 = UPDATE vehicles SET alive = '0' WHERE pid = ? AND id = ? diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index f180a0d6c..5d44e8e34 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -58,7 +58,9 @@ if (_purchase) then { private _side = [_unit,true] call life_util_fnc_sideToString; private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; - [_query, 1] call DB_fnc_asyncCall; + private _queryResult = [_query, 2] call DB_fnc_asyncCall; + _queryResult params ["_vid"]; + }; private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; @@ -79,12 +81,9 @@ _vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; _vehicle setPlateNumber _plate; _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber if (_purchase) then { - [_plate,_uid,_vehicle] spawn { - params ["_plate","_uid","_vehicle"]; + [_vehicle,_vid] spawn { + params ["_vehicle","_vid"]; uiSleep 0.3; - private _query = format ["selectVehicleID:%1:%2", _plate, _uid]; - private _queryResult = [_query, 2] call DB_fnc_asyncCall; - _queryResult params ["_vid"]; _vehicle setVariable ["vehID",_vid]; }; }; From a15a7e079349bc6a2580f4030472ac6d93285810 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 19:41:20 +0000 Subject: [PATCH 12/40] Copy'n'Pasta --- AL.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AL.ini b/AL.ini index 589f5d3a0..a66dd0a48 100755 --- a/AL.ini +++ b/AL.ini @@ -246,7 +246,7 @@ SQL1_INPUTS = 1 [checkPlate] -SQL1_1 = SELECT plate FROM vehicles WHERE plate=?; +SQL1_1 = SELECT plate FROM vehicles WHERE plate=? SQL1_INPUTS = 1 OUTPUT = 1-STRING @@ -291,7 +291,7 @@ SQL1_INPUTS = 1, 2, 3 [insertVehicle] SQL1_1 = INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear) VALUES (?, ?, ?, ?, '1','1','[[],0]', ?, ?,'[]'); SELECT LAST_INSERT_ID() SQL1_INPUTS = 1, 2, 3, 4, 5, 6 -OUTPUT= = 1 +OUTPUT = 1 [deleteVehicle] SQL1_1 = UPDATE vehicles SET alive = '0' WHERE pid = ? AND id = ? From 09318f0cd61a12bd5e1cef103a6f8b0a5bfc7918 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 27 Mar 2020 23:50:29 +0000 Subject: [PATCH 13/40] Local var --- life_server/Functions/Systems/fn_vehicleCreate.sqf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 5d44e8e34..6d366d7b3 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -59,8 +59,7 @@ if (_purchase) then { private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; private _queryResult = [_query, 2] call DB_fnc_asyncCall; - _queryResult params ["_vid"]; - + _vid = _queryResult select 0; }; private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; From c92ac4c815943723a089b56afd260d5ded133c16 Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 31 Mar 2020 12:17:23 +0100 Subject: [PATCH 14/40] Colours to strings and cleanup --- AL.ini | 4 +-- Altis_Life.Altis/CfgRemoteExec.hpp | 2 +- .../core/shops/fn_vehicleShopLBChange.sqf | 5 +--- .../core/vehicle/fn_colorVehicle.sqf | 27 ++++++++++--------- .../core/vehicle/fn_vehicleColor3DRefresh.sqf | 6 ++--- .../dialog/function/fn_garageLBChange.sqf | 8 +++--- .../dialog/function/fn_impoundMenu.sqf | 3 +-- .../dialog/function/fn_sellGarage.sqf | 1 - .../dialog/function/fn_unimpound.sqf | 1 - altislife.sql | 2 +- .../Functions/MySQL/fn_insertVehicle.sqf | 22 --------------- .../Functions/Systems/fn_spawnVehicle.sqf | 4 +-- .../Functions/Systems/fn_vehicleCreate.sqf | 4 +-- life_server/config.cpp | 4 --- 14 files changed, 30 insertions(+), 63 deletions(-) delete mode 100755 life_server/Functions/MySQL/fn_insertVehicle.sqf diff --git a/AL.ini b/AL.ini index a66dd0a48..67ddc8e43 100755 --- a/AL.ini +++ b/AL.ini @@ -253,12 +253,12 @@ OUTPUT = 1-STRING [selectVehicles] SQL1_1 = SELECT id, plate, classname, color FROM vehicles WHERE pid = ? AND alive = '1' AND active = '0' AND side = ? AND type = ? SQL1_INPUTS = 1, 2, 3 -OUTPUT = 1, 2-STRING, 3-STRING, 4 +OUTPUT = 1, 2-STRING, 3-STRING, 4-STRING [selectVehiclesMore] SQL1_1 = SELECT classname, plate, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE id = ? AND pid = ? SQL1_INPUTS = 1, 2 -OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9,10 +OUTPUT = 1-STRING, 2-STRING, 3-STRING, 4, 5, 6, 7, 8, 9,10 [updateVehicle] SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND id = ? diff --git a/Altis_Life.Altis/CfgRemoteExec.hpp b/Altis_Life.Altis/CfgRemoteExec.hpp index 6ccf0d0bc..ceaa8fc7f 100644 --- a/Altis_Life.Altis/CfgRemoteExec.hpp +++ b/Altis_Life.Altis/CfgRemoteExec.hpp @@ -42,6 +42,7 @@ class CfgRemoteExec { JIP(life_fnc_mediclights,CLIENT) F(life_fnc_medicRequest,CLIENT) JIP(life_fnc_medicSiren,CLIENT) + F(life_fnc_colorVehicle,CLIENT) F(life_fnc_moveIn,CLIENT) F(life_fnc_pickupItem,CLIENT) F(life_fnc_pickupMoney,CLIENT) @@ -153,7 +154,6 @@ class CfgRemoteExec { F(BIS_fnc_effectKilledSecondaries,ANYONE) F(life_fnc_animSync,ANYONE) F(life_fnc_broadcast,ANYONE) - F(life_fnc_colorVehicle,ANYONE) F(life_fnc_corpse,ANYONE) F(life_fnc_demoChargeTimer,ANYONE) F(life_fnc_flashbang,ANYONE) diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf index 948362f6f..ed84f3f21 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf @@ -76,14 +76,11 @@ if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { _colorArray = M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures"); { - _flag = (_x select 1); - _textureName = (_x select 0); + _x params ["_textureName","_flag"]; if ((life_veh_shop select 2) isEqualTo _flag) then { - _x params ["_texture"]; private _toShow = [_x] call life_fnc_levelCheck; if (_toShow) then { _ctrl lbAdd _textureName; - _ctrl lbSetValue [(lbSize _ctrl)-1,_forEachIndex]; }; }; } forEach _colorArray; diff --git a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf index 89bd1306d..11d3b499d 100644 --- a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf @@ -8,28 +8,31 @@ */ params [ ["_vehicle",objNull,[objNull]], - ["_index",-1,[0]] + ["_colorName","",[""]] ]; private _className = typeOf _vehicle; -if (isNull _vehicle || {!alive _vehicle} || {_index isEqualTo -1}) exitWith {}; -//Does the vehicle already have random styles? Halt till it's set. - -if (local _vehicle) then { - private _colorIndex = 1; - if (_className isEqualTo "C_Offroad_01_F") then {_colorIndex = 3}; - _vehicle setVariable ["color",_colorIndex,true]; -}; +if (isNull _vehicle || {!alive _vehicle} || {_colorName isEqualTo ""}) exitWith {}; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; _className = "Default"; //Use Default class if it doesn't exist }; -private _textures = ((M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures") select _index) param [2,[]]); +private _textureArray = M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures"); +private _colorIndex = _textureArray findIf {_x select 0 == _colorName}; +private _textures = (_textureArray select _colorIndex) select 2; if (_textures isEqualTo []) exitWith {}; -_vehicle setVariable ["Life_VEH_color",_index,true]; +if (local _vehicle) exitWith { + { + _vehicle setObjectTexture [_forEachIndex,_x] + } forEach _textures; +}; + +_vehicle setVariable ["Life_veh_color",_index,true]; -{_vehicle setObjectTextureGlobal [_forEachIndex,_x]} forEach _textures; +{ + _vehicle setObjectTextureGlobal [_forEachIndex,_x] +} forEach _textures; diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleColor3DRefresh.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleColor3DRefresh.sqf index 2852f0556..1598256bc 100644 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleColor3DRefresh.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_vehicleColor3DRefresh.sqf @@ -6,9 +6,7 @@ Description: Called when a new selection is made in the rsc box and paint the vehicle with the color selected. */ -disableSerialization; -_display = findDisplay 2300; -_colorIndex = lbValue[2304, (lbCurSel 2304)]; if (isNull life_3dPreview_object) exitWith {}; +private _color = lbText [2304, (lbCurSel 2304)]; -[life_3dPreview_object, _colorIndex] call life_fnc_colorVehicle; \ No newline at end of file +[life_3dPreview_object, _color] call life_fnc_colorVehicle; \ No newline at end of file diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index d30934a13..2f3ad07fb 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -13,17 +13,13 @@ params [ //Fetch some information. private _dataArr = _control lbData _index; -private _color = _control lbValue _index; -(parseSimpleArray _dataArr) params ["","_className"]; +(parseSimpleArray _dataArr) params ["","_className","_vehicleColor"]; if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; _className = "Default"; //Use Default class if it doesn't exist }; -private _vehicleColor = ((M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures") select _color) select 0); -if (isNil "_vehicleColor") then {_vehicleColor = "Default";}; - private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; _vehicleInfo params ["","","","","","","","","_maxSpeed","","_seats","_horsePower","_fuelCapacity"]; private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; @@ -31,6 +27,8 @@ private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); +private "_purchasePrice"; +private "_sellMultiplier"; switch (playerSide) do { case civilian: { _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); diff --git a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf index f80440689..0fa4459f5 100644 --- a/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf +++ b/Altis_Life.Altis/dialog/function/fn_impoundMenu.sqf @@ -26,10 +26,9 @@ lbClear _control; _x params ["_vid","_plate","_className","_color"]; private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; _control lbAdd format ["%1 - %2",(_vehicleInfo select 3),_plate]; - private _tmp = str([_vid,_className]); + private _tmp = str([_vid,_className,_color]); _control lbSetData [_forEachIndex,_tmp]; _control lbSetPicture [_forEachIndex,(_vehicleInfo select 2)]; - _control lbSetValue [_forEachIndex,_color]; } forEach _vehicles; ctrlShow[2810,false]; diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index a0349ab7a..f5585ef52 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -11,7 +11,6 @@ private _index = lbCurSel _control; if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; private _dataArr = _control lbData _index; -private _color = _control lbValue _index; (parseSimpleArray _dataArr) params ["_vid",["_className",""]]; if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 898103c20..11f438095 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -11,7 +11,6 @@ private _index = lbCurSel _control; if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; private _dataArr = _control lbData _index; -private _color = _control lbValue _index; (parseSimpleArray _dataArr) params ["_vid",["_className",""]]; if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; diff --git a/altislife.sql b/altislife.sql index 087aac31c..8792be008 100755 --- a/altislife.sql +++ b/altislife.sql @@ -123,7 +123,7 @@ CREATE TABLE IF NOT EXISTS `vehicles` ( `blacklist` TINYINT NOT NULL DEFAULT 0, `active` TINYINT NOT NULL DEFAULT 0, `plate` VARCHAR(15) NOT NULL, - `color` INT NOT NULL, + `color` VARCHAR(64) NOT NULL, `inventory` TEXT NOT NULL, `gear` TEXT NOT NULL, `fuel` DOUBLE NOT NULL DEFAULT 1, diff --git a/life_server/Functions/MySQL/fn_insertVehicle.sqf b/life_server/Functions/MySQL/fn_insertVehicle.sqf deleted file mode 100755 index 59532ad2e..000000000 --- a/life_server/Functions/MySQL/fn_insertVehicle.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - File: fn_insertVehicle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Inserts the vehicle into the database -*/ - -params [ - "_uid", - "_side", - "_type", - "_className", - ["_color",-1,[0]], - ["_plate",-1,[0]] -]; - -//Stop bad data being passed. -if (_uid isEqualTo "" || {_side isEqualTo ""} || {_type isEqualTo ""} || {_className isEqualTo ""} || {_color isEqualTo -1} || {_plate isEqualTo -1}) exitWith {}; - -private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; -[_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index 58645489d..d72f565d2 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -63,7 +63,7 @@ clearBackpackCargoGlobal _vehicle; _vehicle lock 2; _vehicle disableTIEquipment true; -[_vehicle,_colorIndex] call life_fnc_colorVehicle; +[_vehicle,_color] call life_fnc_colorVehicle; [_vehicle] call life_fnc_clearVehicleAmmo; _vehicle setVariable ["trunk_in_use",false,true]; @@ -79,7 +79,7 @@ switch _side do { }; }; case civilian: { - if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo 13)) then { + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo "Digi Green")) then { [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; }; }; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 6d366d7b3..0e163476f 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -8,7 +8,7 @@ params [ ["_unit", objNull, [objNull]], ["_className","",[""]], ["_spawnPoint","",[""]], - ["_color", -1, [0]], + ["_color", "", [""]], ["_purchase",false,[false]] ]; @@ -94,7 +94,7 @@ switch (side _unit) do { }; }; case civilian: { - if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo 13)) then { + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo "Digi Green")) then { [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; }; }; diff --git a/life_server/config.cpp b/life_server/config.cpp index 0837a08c3..10e5d7072 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -40,10 +40,6 @@ class CfgFunctions { file = "\life_server\Functions\Jail"; class jailSys {}; }; - - class Client_Code { - file = "\life_server\Functions\Client"; - }; }; class TON_System { From cfe5a4edfa0b8f2d95649a4fbb2734e84445b6d1 Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 31 Mar 2020 12:17:34 +0100 Subject: [PATCH 15/40] Optimisation of other vehicle files --- Altis_Life.Altis/Functions.hpp | 1 - Altis_Life.Altis/config/Config_SpyGlass.hpp | 2 +- .../core/actions/fn_searchVehAction.sqf | 41 ++++++++-------- Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf | 20 +++----- Altis_Life.Altis/core/pmenu/fn_keyGive.sqf | 37 +++++++-------- Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf | 47 ++++++++----------- .../core/vehicle/fn_addVehicle2Chain.sqf | 11 +++-- .../core/vehicle/fn_vehicleOwners.sqf | 16 ------- .../core/vehicle/fn_vehicleWeight.sqf | 11 ++--- 9 files changed, 76 insertions(+), 110 deletions(-) delete mode 100644 Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf diff --git a/Altis_Life.Altis/Functions.hpp b/Altis_Life.Altis/Functions.hpp index 485572f50..1e64a8614 100644 --- a/Altis_Life.Altis/Functions.hpp +++ b/Altis_Life.Altis/Functions.hpp @@ -364,7 +364,6 @@ class Life_Client_Core { class lockVehicle {}; class openInventory {}; class vehiclecolor3DRefresh {}; - class vehicleOwners {}; class vehicleWeight {}; class vehInventory {}; class vehStoreItem {}; diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 96b537562..9058cf351 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -275,7 +275,7 @@ class SpyGlass { "life_fnc_spawnpointcfg_meta","life_fnc_spawnpointselected","life_fnc_spawnpointselected_meta","life_fnc_spikestrip","life_fnc_spikestrip_meta","life_fnc_spikestripeffect","life_fnc_spikestripeffect_meta","life_fnc_stopescorting","life_fnc_stopescorting_meta","life_fnc_storagebox","life_fnc_storagebox_meta","life_fnc_storevehicle","life_fnc_storevehicle_meta","life_fnc_storevehicleaction", "life_fnc_storevehicleaction_meta","life_fnc_startLoadout","life_fnc_startLoadout_meta","life_fnc_stripdownplayer","life_fnc_stripdownplayer_meta","life_fnc_surrender","life_fnc_surrender_meta","life_fnc_survival","life_fnc_survival_meta","life_fnc_tazed","life_fnc_tazed_meta","life_fnc_teleport","life_fnc_teleport_meta","life_fnc_ticketaction","life_fnc_ticketaction_meta","life_fnc_ticketgive", "life_fnc_ticketgive_meta","life_fnc_ticketpaid","life_fnc_ticketpaid_meta","life_fnc_ticketpay","life_fnc_ticketpay_meta","life_fnc_ticketprompt","life_fnc_ticketprompt_meta","life_fnc_unimpound","life_fnc_unimpound_meta","life_fnc_unrestrain","life_fnc_unrestrain_meta","life_fnc_updateviewdistance","life_fnc_updateviewdistance_meta","life_fnc_useitem","life_fnc_useitem_meta", - "life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta","life_fnc_vehicleowners", + "life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta", "life_fnc_vehicleowners_meta","life_fnc_3dpreviewdisplay","life_fnc_3dpreviewdisplay_meta","life_fnc_vehicleshopbuy","life_fnc_vehicleshopbuy_meta","life_fnc_3dpreviewexit","life_fnc_3dpreviewexit_meta","life_fnc_3dpreviewinit","life_fnc_3dpreviewinit_meta","life_fnc_vehicleshoplbchange","life_fnc_vehicleshoplbchange_meta", "life_fnc_vehicleshopmenu","life_fnc_vehicleshopmenu_meta","life_fnc_vehicleweight","life_fnc_vehicleweight_meta","life_fnc_vehicleweightcfg","life_fnc_vehicleweightcfg_meta","life_fnc_vehinventory","life_fnc_vehinventory_meta","life_fnc_vehinvsearch","life_fnc_vehinvsearch_meta","life_fnc_vehshoplicenses","life_fnc_vehshoplicenses_meta","life_fnc_vehstoreitem","life_fnc_vehstoreitem_meta", "life_fnc_vehtakeitem","life_fnc_vehtakeitem_meta","life_fnc_vinteractionmenu","life_fnc_vinteractionmenu_meta","life_fnc_virt_buy","life_fnc_virt_buy_meta","life_fnc_virt_menu","life_fnc_virt_menu_meta","life_fnc_virt_sell","life_fnc_virt_sell_meta","life_fnc_virt_update","life_fnc_virt_update_meta","life_fnc_wantedadd","life_fnc_wantedadd_meta","life_fnc_wantedaddp","life_fnc_wantedaddp_meta", diff --git a/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf b/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf index d0bccd4e7..de7bdf2c9 100644 --- a/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf @@ -1,30 +1,31 @@ #include "..\..\script_macros.hpp" /* File: fn_searchVehAction.sqf - Author: + Author: DomT602 Description: - + Currently finds who has keys to the vehicle. */ -private ["_vehicle","_data"]; -_vehicle = cursorObject; -if ((_vehicle isKindOf "Car") || !(_vehicle isKindOf "Air") || !(_vehicle isKindOf "Ship")) then { - _owners = _vehicle getVariable "vehicle_info_owners"; - if (isNil "_owners") exitWith {hint localize "STR_NOTF_VehCheat"; deleteVehicle _vehicle;}; +params [ + ["_vehicle",objNull,[objNull]] +]; +if (isNull _vehicle) exitWith {}; + +private _keyHolders = _vehicle getVariable ["vehicle_info_owners",[]]; +if (_keyHolders isEqualTo []) exitWith {hint localize "STR_NOTF_VehCheat"; deleteVehicle _vehicle}; + +life_action_inUse = true; +hint localize "STR_NOTF_Searching"; - life_action_inUse = true; - hint localize "STR_NOTF_Searching"; +sleep 3; +life_action_inUse = false; - sleep 3; - life_action_inUse = false; +if (!alive _vehicle || {player distance _vehicle > 10 || {!alive player}}) exitWith {hint localize "STR_NOTF_SearchVehFail"}; - if (player distance _vehicle > 10 || !alive player || !alive _vehicle) exitWith {hint localize "STR_NOTF_SearchVehFail";}; - //_inventory = [(_vehicle getVariable "vehicle_info_inv")] call fnc_veh_inv; - //if (isNil {_inventory}) then {_inventory = "Nothing in storage."}; - _owners = [_owners] call life_fnc_vehicleOwners; +private _owners = ""; +{ + private _name = _x select 1; + _owners = format ["%1
%2",_owners,_name]; +} forEach _keyHolders; - if (_owners == "any
") then { - _owners = "No owners, impound it
"; - }; - hint parseText format [localize "STR_NOTF_SearchVeh",_owners]; -}; +hint parseText format [localize "STR_NOTF_SearchVeh",_owners]; diff --git a/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf b/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf index 1acfc7150..282f5beb4 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyDrop.sqf @@ -9,19 +9,15 @@ disableSerialization; private _dialog = findDisplay 2700; private _list = _dialog displayCtrl 2701; -private _sel = lbCurSel _list; +private _listIndex = lbCurSel _list; -if (_sel isEqualTo -1) exitWith { +if (_listIndex isEqualTo -1) exitWith { hint localize "STR_NOTF_noDataSelected" }; -if (_list lbData _sel isEqualTo "") exitWith { - hint localize "STR_NOTF_didNotSelectVehicle" -}; - -private _index = parseNumber (_list lbData _sel); -private _vehicle = life_vehicles param [_index, objNull, [objNull]]; -if isNull _vehicle exitWith {}; +private _keyIndex = _list lbValue _vehIndex; +private _vehicle = life_vehicles select _keyIndex; +if (isNull _vehicle) exitWith {}; // Do not let them drop the key to a house if (_vehicle isKindOf "House_F") exitWith { @@ -37,8 +33,6 @@ life_vehicles = life_vehicles - [_vehicle]; // Update vehicle owners private _owners = _vehicle getVariable ["vehicle_info_owners", []]; -_owners deleteAt _index; +_owners deleteAt _keyIndex; _vehicle setVariable ["vehicle_info_owners", _owners, true]; - -// Reload -call life_fnc_keyMenu +_list lbDelete _listIndex; diff --git a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf index 599a24b5c..d3ff4fee4 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf @@ -5,34 +5,29 @@ Description: Gives a copy of the key for the selected vehicle to the selected player. - Player must be within range. */ -private ["_dialog","_list","_plist","_sel","_vehicle","_owners","_index","_unit","_uid"]; disableSerialization; -_dialog = findDisplay 2700; -_list = _dialog displayCtrl 2701; -_plist = _dialog displayCtrl 2702; +private _dialog = findDisplay 2700; +private _list = _dialog displayCtrl 2701; +private _pList = _dialog displayCtrl 2702; -_sel = lbCurSel _list; -if ((_list lbData _sel) isEqualTo "") exitWith {hint localize "STR_NOTF_didNotSelectVehicle";}; -_vehicle = _list lbData _sel; -_vehicle = life_vehicles select parseNumber(_vehicle); +private _vehIndex = lbCurSel _list; +if (_vehIndex isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectVehicle"}; +private _playerIndex = lbCurSel _pList; +if (_playerIndex isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectPlayer"}; -if ((lbCurSel 2702) isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectPlayer";}; -_sel = lbCurSel _plist; -_unit = _plist lbData _sel; -_unit = call compile format ["%1", _unit]; -if (isNull _unit || isNil "_unit") exitWith {}; -if (_unit == player) exitWith {}; +private _vehicle = life_vehicles select (_list lbValue _vehIndex); +private _unit = call compile format ["%1", (_pList select _playerIndex)]; +if (isNil "_unit" || {isNull _unit}) exitWith {}; -_uid = getPlayerUID _unit; -_owners = _vehicle getVariable "vehicle_info_owners"; -_index = [_uid,_owners] call TON_fnc_index; -if (_index isEqualTo -1) then { - _owners pushBack [_uid,_unit getVariable ["realname",name _unit]]; +private _uid = getPlayerUID _unit; +private _owners = _vehicle getVariable "vehicle_info_owners"; +private _insertedIndex = _owners pushBackUnique [_uid,_unit getVariable ["realname",name _unit]]; + +if (_insertedIndex != -1) then { _vehicle setVariable ["vehicle_info_owners",_owners,true]; }; hint format [localize "STR_NOTF_givenKeysTo",_unit getVariable ["realname",name _unit],typeOf _vehicle]; -[_vehicle,_unit,profileName] remoteExecCAll ["TON_fnc_clientGetKey",_unit]; +[_vehicle,_unit,profileName] remoteExecCall ["TON_fnc_clientGetKey",_unit]; diff --git a/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf index 4f3bf00ae..8859aaeb4 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf @@ -7,45 +7,38 @@ Initializes the key menu Will be revised. */ -private ["_display","_vehicles","_plist","_near_units","_pic","_name","_text","_color","_index"]; disableSerialization; waitUntil {!isNull (findDisplay 2700)}; -_display = findDisplay 2700; -_vehicles = _display displayCtrl 2701; -lbClear _vehicles; -_plist = _display displayCtrl 2702; -lbClear _plist; -_near_units = []; +private _display = findDisplay 2700; +private _vehicles = _display displayCtrl 2701; +private _pList = _display displayCtrl 2702; -{ if (player distance _x < 20) then {_near_units pushBack _x};} forEach playableUnits; - -for "_i" from 0 to (count life_vehicles)-1 do { - _veh = life_vehicles select _i; - if (!isNull _veh && alive _veh) then { - _color = ((M_CONFIG(getArray,"LifeCfgVehicles",(typeOf _veh),"textures") select (_veh getVariable "Life_VEH_color")) select 0); - if (isNil "_color") then {_color = ""}; - _text = format ["(%1)",_color]; - if (_text == "()") then { - _text = ""; +life_vehicles = life_vehicles - [objNull]; +{ + if (alive _x) then { + private _className = typeOf _x; + private _color = _x getVariable ["Life_veh_color",""]; + if !(_color isEqualTo "") then { + _color = format["(%1)",_color]; }; + private _name = getText(configFile >> "CfgVehicles" >> _className >> "displayName"); + private _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); - _name = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "displayName"); - _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); - _vehicles lbAdd format ["%1 %3 - [Distance: %2m]",_name,round(player distance _veh),_text]; - if (_pic != "pictureStaticObject") then { + _vehicles lbAdd format ["%1 %3 - [Distance: %2m]",_name,round(player distance _veh),_color]; + if !(_pic isEqualTo "pictureStaticObject") then { _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic]; }; - _vehicles lbSetData [(lbSize _vehicles)-1,str(_i)]; + _vehicles lbSetValue [(lbSize _vehicles)-1,_forEachIndex]; }; -}; +} forEach life_vehicles; { - if (!isNull _x && alive _x && player distance _x < 20 && !(_x isEqualTo player)) then { - _plist lbAdd format ["%1 - %2",_x getVariable ["realname",name _x], side _x]; - _plist lbSetData [(lbSize _plist)-1,str(_x)]; + if (alive _x && {player distance _x < 20}) then { + _pList lbAdd format ["%1 - %2",_x getVariable ["realname",name _x], side _x]; + _pList lbSetData [(lbSize _pList)-1,str(_x)]; }; -} forEach _near_units; +} forEach (playableUnits - [player]); if (((lbSize _vehicles)-1) isEqualTo -1) then { _vehicles lbAdd localize "STR_NOTF_noVehOwned"; diff --git a/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf b/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf index ce2910c23..d841194ad 100644 --- a/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_addVehicle2Chain.sqf @@ -5,8 +5,9 @@ Description: A short function for telling the player to add a vehicle to his keychain. */ -private "_vehicle"; -_vehicle = param [0,objNull,[objNull]]; -if (!(_vehicle in life_vehicles)) then { - life_vehicles pushBack _vehicle; -}; \ No newline at end of file +params [ + ["_vehicle",objNull,[objNull]] +]; +if (isNull _vehicle) exitWith {}; + +life_vehicles pushBackUnique _vehicle; diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf deleted file mode 100644 index 64c408022..000000000 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleOwners.sqf +++ /dev/null @@ -1,16 +0,0 @@ -/* - File: fn_vehicleOwners.sqf - Author: - - Description: - Pulled from old system, will be revised for new system. -*/ -private ["_return","_format"]; -_return = ""; - -{ - _format = format ["%1
",_x select 1]; - _return = _return + _format; -} forEach (_this select 0); - -_return; diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf index 499f0b8e7..7b2d44506 100644 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf @@ -5,13 +5,12 @@ Description: Calculates Vehicle Weight. */ -private ["_vehicle","_weight","_used"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; +params [ + ["_vehicle",objNull,[objNull]] +]; if (isNull _vehicle) exitWith {}; -_weight = -1; -_used = (_vehicle getVariable "Trunk") select 1; -_weight = [(typeOf _vehicle)] call life_fnc_vehicleWeightCfg; +private _used = (_vehicle getVariable ["Trunk",[[],0]]) select 1; +private _weight = [(typeOf _vehicle)] call life_fnc_vehicleWeightCfg; -if (isNil "_used") then {_used = 0}; [_weight,_used]; From ff3665fd1324528113032787ba356cea96e3438c Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 31 Mar 2020 12:19:33 +0100 Subject: [PATCH 16/40] Remove tab --- Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf index 7b2d44506..baa026f51 100644 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf @@ -6,7 +6,7 @@ Calculates Vehicle Weight. */ params [ - ["_vehicle",objNull,[objNull]] + ["_vehicle",objNull,[objNull]] ]; if (isNull _vehicle) exitWith {}; From cecf7f28528dc4fa81c1a5dd9322438e65ae3151 Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 31 Mar 2020 12:53:25 +0100 Subject: [PATCH 17/40] Cleanup --- Altis_Life.Altis/config/Config_SpyGlass.hpp | 2 +- Altis_Life.Altis/core/pmenu/fn_keyGive.sqf | 1 - Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 9058cf351..6a3fe0c7b 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -276,7 +276,7 @@ class SpyGlass { "life_fnc_storevehicleaction_meta","life_fnc_startLoadout","life_fnc_startLoadout_meta","life_fnc_stripdownplayer","life_fnc_stripdownplayer_meta","life_fnc_surrender","life_fnc_surrender_meta","life_fnc_survival","life_fnc_survival_meta","life_fnc_tazed","life_fnc_tazed_meta","life_fnc_teleport","life_fnc_teleport_meta","life_fnc_ticketaction","life_fnc_ticketaction_meta","life_fnc_ticketgive", "life_fnc_ticketgive_meta","life_fnc_ticketpaid","life_fnc_ticketpaid_meta","life_fnc_ticketpay","life_fnc_ticketpay_meta","life_fnc_ticketprompt","life_fnc_ticketprompt_meta","life_fnc_unimpound","life_fnc_unimpound_meta","life_fnc_unrestrain","life_fnc_unrestrain_meta","life_fnc_updateviewdistance","life_fnc_updateviewdistance_meta","life_fnc_useitem","life_fnc_useitem_meta", "life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta", - "life_fnc_vehicleowners_meta","life_fnc_3dpreviewdisplay","life_fnc_3dpreviewdisplay_meta","life_fnc_vehicleshopbuy","life_fnc_vehicleshopbuy_meta","life_fnc_3dpreviewexit","life_fnc_3dpreviewexit_meta","life_fnc_3dpreviewinit","life_fnc_3dpreviewinit_meta","life_fnc_vehicleshoplbchange","life_fnc_vehicleshoplbchange_meta", + "life_fnc_3dpreviewdisplay","life_fnc_3dpreviewdisplay_meta","life_fnc_vehicleshopbuy","life_fnc_vehicleshopbuy_meta","life_fnc_3dpreviewexit","life_fnc_3dpreviewexit_meta","life_fnc_3dpreviewinit","life_fnc_3dpreviewinit_meta","life_fnc_vehicleshoplbchange","life_fnc_vehicleshoplbchange_meta", "life_fnc_vehicleshopmenu","life_fnc_vehicleshopmenu_meta","life_fnc_vehicleweight","life_fnc_vehicleweight_meta","life_fnc_vehicleweightcfg","life_fnc_vehicleweightcfg_meta","life_fnc_vehinventory","life_fnc_vehinventory_meta","life_fnc_vehinvsearch","life_fnc_vehinvsearch_meta","life_fnc_vehshoplicenses","life_fnc_vehshoplicenses_meta","life_fnc_vehstoreitem","life_fnc_vehstoreitem_meta", "life_fnc_vehtakeitem","life_fnc_vehtakeitem_meta","life_fnc_vinteractionmenu","life_fnc_vinteractionmenu_meta","life_fnc_virt_buy","life_fnc_virt_buy_meta","life_fnc_virt_menu","life_fnc_virt_menu_meta","life_fnc_virt_sell","life_fnc_virt_sell_meta","life_fnc_virt_update","life_fnc_virt_update_meta","life_fnc_wantedadd","life_fnc_wantedadd_meta","life_fnc_wantedaddp","life_fnc_wantedaddp_meta", "life_fnc_wantedbounty","life_fnc_wantedbounty_meta","life_fnc_wantedfetch","life_fnc_wantedfetch_meta","life_fnc_wantedgrab","life_fnc_wantedgrab_meta","life_fnc_wantedinfo","life_fnc_wantedinfo_meta","life_fnc_wantedlist","life_fnc_wantedlist_meta","life_fnc_wantedmenu","life_fnc_wantedmenu_meta","life_fnc_wantedperson","life_fnc_wantedperson_meta","life_fnc_wantedpunish","life_fnc_wantedpunish_meta", diff --git a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf index d3ff4fee4..c8deade98 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf @@ -1,4 +1,3 @@ -#include "..\..\script_macros.hpp" /* File: fn_keyGive.sqf Author: Bryan "Tonic" Boardwine diff --git a/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf index 8859aaeb4..bf943549f 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyMenu.sqf @@ -5,7 +5,6 @@ Description: Initializes the key menu - Will be revised. */ disableSerialization; @@ -26,7 +25,7 @@ life_vehicles = life_vehicles - [objNull]; private _pic = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "picture"); _vehicles lbAdd format ["%1 %3 - [Distance: %2m]",_name,round(player distance _veh),_color]; - if !(_pic isEqualTo "pictureStaticObject") then { + if (_pic != "pictureStaticObject") then { _vehicles lbSetPicture [(lbSize _vehicles)-1,_pic]; }; _vehicles lbSetValue [(lbSize _vehicles)-1,_forEachIndex]; From 5187ba5977beb1731e0f03ec4708275a6e240b93 Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 31 Mar 2020 19:59:45 +0100 Subject: [PATCH 18/40] Default colour, few optimisations --- .../core/shops/fn_vehicleShopBuy.sqf | 210 +++++++++-------- .../core/shops/fn_vehicleShopLBChange.sqf | 215 +++++++++--------- .../core/shops/fn_vehicleShopMenu.sqf | 132 ++++++----- .../core/vehicle/fn_colorVehicle.sqf | 3 + 4 files changed, 277 insertions(+), 283 deletions(-) diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf index a1901a2a6..e926f649c 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopBuy.sqf @@ -1,107 +1,103 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleShopBuy.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Does something with vehicle purchasing. -*/ - -params [["_mode",true,[true]]]; - -if ((lbCurSel 2302) isEqualTo -1) exitWith {hint localize "STR_Shop_Veh_DidntPick";closeDialog 0;}; -if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; -life_action_delay = time; - -life_veh_shop params ["_type","_spawnPoints"]; -private _className = lbData[2302,(lbCurSel 2302)]; -private _vIndex = lbValue[2302,(lbCurSel 2302)]; -private _vehicleList = M_CONFIG(getArray,"CarShops",_type,"vehicles"); -private _shopSide = M_CONFIG(getText,"CarShops",_type,"side"); - - -private _initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); - -private "_buyMultiplier"; -private "_rentMultiplier"; - -switch (playerSide) do { - case civilian: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN"); - }; - case west: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP"); - }; - case independent: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC"); - }; - case east: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR"); - }; -}; - -private "_purchasePrice"; - -if (_mode) then { - _purchasePrice = round(_initalPrice * _buyMultiplier); -} else { - _purchasePrice = round(_initalPrice * _rentMultiplier); -}; - -private _conditions = M_CONFIG(getText,"LifeCfgVehicles",_className,"conditions"); - -if !([_conditions] call life_fnc_levelCheck) exitWith {hint localize "STR_Shop_Veh_NoLicense";}; - -private _colorIndex = lbValue[2304,(lbCurSel 2304)]; - -if (_purchasePrice < 0) exitWith {closeDialog 0;}; //Bad price entry -if (CASH < _purchasePrice) exitWith {hint format [localize "STR_Shop_Veh_NotEnough",[_purchasePrice - CASH] call life_fnc_numberText];closeDialog 0;}; - -private _spawnPoint = ""; - -if (_type == "med_air_hs") then { - if (nearestObjects[(getMarkerPos _spawnPoints),["Air"],35] isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; -} else { - //Check if there is multiple spawn points and find a suitable spawnpoint. - if (_spawnPoints isEqualType []) then { - //Find an available spawn point. - { - if ((nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _x}; - true - } count _spawnPoints; - } else { - if (nearestObjects[(getMarkerPos _spawnPoints),["Car","Ship","Air"],5] isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; - }; -}; - - -if (_spawnPoint isEqualTo "") exitWith {hint localize "STR_Shop_Veh_Block"; closeDialog 0;}; -CASH = CASH - _purchasePrice; -[0] call SOCK_fnc_updatePartial; -if (_mode) then { - hint format [localize "STR_Shop_Veh_Bought",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText]; -} else { - hint format [localize "STR_Shop_Veh_Rented",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText]; -}; - -if (life_HC_isActive) then { - [player,_className,_spawnPoint,_colorIndex,_mode] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; -} else { - [player,_className,_spawnPoint,_colorIndex,_mode] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; -}; - -if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { - if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { - advanced_log = format [localize "STR_DL_AL_boughtVehicle_BEF",_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText]; - } else { - advanced_log = format [localize "STR_DL_AL_boughtVehicle",profileName,(getPlayerUID player),_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText]; - }; - publicVariableServer "advanced_log"; -}; - -closeDialog 0; //Exit the menu. -true; +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleShopBuy.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Does something with vehicle purchasing. +*/ + +params [["_mode",true,[true]]]; + +if ((lbCurSel 2302) isEqualTo -1) exitWith {hint localize "STR_Shop_Veh_DidntPick";closeDialog 0;}; +if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; +life_action_delay = time; + +life_veh_shop params ["_type","_spawnPoints"]; +private _className = lbData[2302,(lbCurSel 2302)]; +private _vIndex = lbValue[2302,(lbCurSel 2302)]; +private _vehicleList = M_CONFIG(getArray,"CarShops",_type,"vehicles"); +private _shopSide = M_CONFIG(getText,"CarShops",_type,"side"); + +private _initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); + +private "_buyMultiplier"; +private "_rentMultiplier"; + +switch (playerSide) do { + case civilian: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN"); + }; + case west: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP"); + }; + case independent: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC"); + }; + case east: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR"); + }; +}; + +private _purchasePrice = if (_mode) then { + round(_initalPrice * _buyMultiplier); +} else { + round(_initalPrice * _rentMultiplier); +}; + +private _conditions = M_CONFIG(getText,"LifeCfgVehicles",_className,"conditions"); +if !([_conditions] call life_fnc_levelCheck) exitWith {hint localize "STR_Shop_Veh_NoLicense"}; + +private _color = lbText [2304,(lbCurSel 2304)]; + +if (_purchasePrice < 0) exitWith {closeDialog 0;}; //Bad price entry +if (CASH < _purchasePrice) exitWith {hint format [localize "STR_Shop_Veh_NotEnough",[_purchasePrice - CASH] call life_fnc_numberText];closeDialog 0;}; + +private _spawnPoint = ""; + +if (_type == "med_air_hs") then { + if (nearestObjects[(getMarkerPos _spawnPoints),["Air"],35] isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; +} else { + //Check if there is multiple spawn points and find a suitable spawnpoint. + if (_spawnPoints isEqualType []) then { + //Find an available spawn point. + { + if ((nearestObjects[(getMarkerPos _x),["Car","Ship","Air"],5]) isEqualTo []) exitWith {_spawnPoint = _x}; + true + } count _spawnPoints; + } else { + if (nearestObjects[(getMarkerPos _spawnPoints),["Car","Ship","Air"],5] isEqualTo []) exitWith {_spawnPoint = _spawnPoints}; + }; +}; + + +if (_spawnPoint isEqualTo "") exitWith {hint localize "STR_Shop_Veh_Block"; closeDialog 0;}; +CASH = CASH - _purchasePrice; +[0] call SOCK_fnc_updatePartial; +if (_mode) then { + hint format [localize "STR_Shop_Veh_Bought",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText]; +} else { + hint format [localize "STR_Shop_Veh_Rented",getText(configFile >> "CfgVehicles" >> _className >> "displayName"),[_purchasePrice] call life_fnc_numberText]; +}; + +if (life_HC_isActive) then { + [player,_className,_spawnPoint,_color,_mode] remoteExecCall ["HC_fnc_vehicleCreate",HC_Life]; +} else { + [player,_className,_spawnPoint,_color,_mode] remoteExecCall ["TON_fnc_vehicleCreate",RSERV]; +}; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_boughtVehicle_BEF",_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_boughtVehicle",profileName,(getPlayerUID player),_className,[_purchasePrice] call life_fnc_numberText,[CASH] call life_fnc_numberText,[BANK] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; +}; + +closeDialog 0; //Exit the menu. +true; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf index ed84f3f21..545b9047d 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf @@ -1,109 +1,106 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleShopLBChange.sqf - Author: Bryan "Tonic" Boardwine - Modified : NiiRoZz - - Description: - Called when a new selection is made in the list box and - displays various bits of information about the vehicle. -*/ -disableSerialization; -private ["_className","_classNameLife","_initalPrice","_buyMultiplier","_rentMultiplier","_vehicleInfo","_colorArray","_ctrl","_trunkSpace","_maxspeed","_horsepower","_passengerseats","_fuel","_armor"]; - -//Fetch some information. -_className = (_this select 0) lbData (_this select 1); -_classNameLife = _className; -_vIndex = (_this select 0) lbValue (_this select 1); - -_initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"price"); - -switch (playerSide) do { - case civilian: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN"); - }; - case west: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP"); - }; - case independent: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC"); - }; - case east: { - _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); - _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR"); - }; -}; - -_vehicleInfo = [_className] call life_fnc_fetchVehInfo; -_trunkSpace = [_className] call life_fnc_vehicleWeightCfg; -_maxspeed = (_vehicleInfo select 8); -_horsepower = (_vehicleInfo select 11); -_passengerseats = (_vehicleInfo select 10); -_fuel = (_vehicleInfo select 12); -_armor = (_vehicleInfo select 9); -[_className] call life_fnc_3dPreviewDisplay; - -ctrlShow [2330,true]; -(CONTROL(2300,2303)) ctrlSetStructuredText parseText format [ - (localize "STR_Shop_Veh_UI_Rental")+ " $%1
" + - (localize "STR_Shop_Veh_UI_Ownership")+ " $%2
" + - (localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
" + - (localize "STR_Shop_Veh_UI_HPower")+ " %4
" + - (localize "STR_Shop_Veh_UI_PSeats")+ " %5
" + - (localize "STR_Shop_Veh_UI_Trunk")+ " %6
" + - (localize "STR_Shop_Veh_UI_Fuel")+ " %7
" + - (localize "STR_Shop_Veh_UI_Armor")+ " %8", - [round(_initalPrice * _rentMultiplier)] call life_fnc_numberText, - [round(_initalPrice * _buyMultiplier)] call life_fnc_numberText, - _maxspeed, - _horsepower, - _passengerseats, - if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, - _fuel, - _armor -]; - -_ctrl = CONTROL(2300,2304); -lbClear _ctrl; - -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _classNameLife)) then { - _classNameLife = "Default"; //Use Default class if it doesn't exist - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; -}; -_colorArray = M_CONFIG(getArray,"LifeCfgVehicles",_classNameLife,"textures"); - -{ - _x params ["_textureName","_flag"]; - if ((life_veh_shop select 2) isEqualTo _flag) then { - private _toShow = [_x] call life_fnc_levelCheck; - if (_toShow) then { - _ctrl lbAdd _textureName; - }; - }; -} forEach _colorArray; - -_numberindexcolorarray = []; -for "_i" from 0 to (count(_colorArray) - 1) do { - _numberindexcolorarray pushBack _i; -}; -_indexrandom = selectRandom _numberindexcolorarray; -_ctrl lbSetCurSel _indexrandom; - -if (_className in (LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly"))) then { - ctrlEnable [2309,false]; -} else { - if (!(life_veh_shop select 3)) then { - ctrlEnable [2309,true]; - }; -}; - -if !((lbSize _ctrl)-1 isEqualTo -1) then { - ctrlShow[2304,true]; -} else { - ctrlShow[2304,false]; -}; - -true; +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleShopLBChange.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + Description: + Called when a new selection is made in the list box and + displays various bits of information about the vehicle. +*/ +params [ + ["_control",controlNull,[controlNull]], + ["_index",0,[0]] +]; +disableSerialization; + +private _className = _control lbData _index; +private _vIndex = _control lbValue _index; +private _initalPrice = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); + +private "_buyMultiplier"; +private "_rentMultiplier"; +switch playerSide do { + case civilian: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_CIVILIAN"); + }; + case west: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_COP"); + }; + case independent: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_MEDIC"); + }; + case east: { + _buyMultiplier = LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + _rentMultiplier = LIFE_SETTINGS(getNumber,"vehicle_rental_multiplier_OPFOR"); + }; +}; + +private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; +private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; +_vehicleInfo params ["","","","","","","","","_maxSpeed","_armor","_seats","_horsePower","_fuelCapacity"]; + +if (LIFE_SETTINGS(getNumber,"vehicleShop_3D") isEqualTo 1) then { + [_className] call life_fnc_3dPreviewDisplay; +}; + +ctrlShow [2330,true]; +(CONTROL(2300,2303)) ctrlSetStructuredText parseText format [ + (localize "STR_Shop_Veh_UI_Rental")+ " $%1
" + + (localize "STR_Shop_Veh_UI_Ownership")+ " $%2
" + + (localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
" + + (localize "STR_Shop_Veh_UI_HPower")+ " %4
" + + (localize "STR_Shop_Veh_UI_PSeats")+ " %5
" + + (localize "STR_Shop_Veh_UI_Trunk")+ " %6
" + + (localize "STR_Shop_Veh_UI_Fuel")+ " %7
" + + (localize "STR_Shop_Veh_UI_Armor")+ " %8", + [round(_initalPrice * _rentMultiplier)] call life_fnc_numberText, + [round(_initalPrice * _buyMultiplier)] call life_fnc_numberText, + _maxSpeed, + _horsePower, + _seats, + if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, + _fuelCapacity, + _armor +]; + +private _ctrl = CONTROL(2300,2304); +lbClear _ctrl; + +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist +}; + +private _colorArray = M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures"); +{ + _x params ["_textureName","_flag"]; + if ((life_veh_shop select 2) isEqualTo _flag) then { + private _toShow = [_x] call life_fnc_levelCheck; + if (_toShow) then { + _ctrl lbAdd _textureName; + }; + }; +} forEach _colorArray; + +private _count = (count _colorArray) - 1; +_ctrl lbSetCurSel (round(random _count)); + +if (_className in (LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly"))) then { + ctrlEnable [2309,false]; +} else { + if !(life_veh_shop select 3) then { + ctrlEnable [2309,true]; + }; +}; + +if !((lbSize _ctrl)-1 isEqualTo -1) then { + ctrlShow[2304,true]; +} else { + ctrlShow[2304,false]; +}; + +true; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf index e537769c7..b67759fe7 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopMenu.sqf @@ -1,67 +1,65 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleShopMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Blah -*/ - -(_this select 3) params [ - ["_shop","",[""]], - ["_sideCheck",sideUnknown,[civilian]], - ["_spawnPoints","",["",[]]], - ["_shopFlag","",[""]], - ["_shopTitle","",[""]], - ["_disableBuy",false,[true]] -]; - -disableSerialization; - -//Long boring series of checks -if (dialog) exitWith {}; -if (_shop isEqualTo "") exitWith {}; -if (!(_sideCheck isEqualTo sideUnknown) && {!(playerSide isEqualTo _sideCheck)}) exitWith {hint localize "STR_Shop_Veh_NotAllowed"}; - -private _conditions = M_CONFIG(getText,"CarShops",_shop,"conditions"); -if !([_conditions] call life_fnc_levelCheck) exitWith {hint localize "STR_Shop_Veh_NotAllowed"}; - -if (LIFE_SETTINGS(getNumber,"vehicleShop_3D") isEqualTo 1) then { - createDialog "Life_Vehicle_Shop_v2_3D"; -} else { - createDialog "Life_Vehicle_Shop_v2"; -}; - -life_veh_shop = [_shop,_spawnpoints,_shopFlag,_disableBuy]; //Store it so so other parts of the system can access it. - -ctrlSetText [2301,_shopTitle]; - -if (_disableBuy) then { - //Disable the buy button. - ctrlEnable [2309,false]; -}; - -//Fetch the shop config. -_vehicleList = M_CONFIG(getArray,"CarShops",_shop,"vehicles"); - -private _control = CONTROL(2300,2302); -lbClear _control; //Flush the list. -ctrlShow [2330,false]; -ctrlShow [2304,false]; - -//Loop through -{ - _x params["_className"]; - - private _toShow = [_x] call life_fnc_levelCheck; - - if (_toShow) then { - _vehicleInfo = [_className] call life_fnc_fetchVehInfo; - _control lbAdd (_vehicleInfo select 3); - _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; - _control lbSetData [(lbSize _control)-1,_className]; - _control lbSetValue [(lbSize _control)-1,_forEachIndex]; - }; -} forEach _vehicleList; - -((findDisplay 2300) displayCtrl 2302) lbSetCurSel 0; +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleShopMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Blah +*/ + +(_this select 3) params [ + ["_shop","",[""]], + ["_sideCheck",sideUnknown,[civilian]], + ["_spawnPoints","",["",[]]], + ["_shopFlag","",[""]], + ["_shopTitle","",[""]], + ["_disableBuy",false,[true]] +]; + +disableSerialization; + +if (dialog || {_shop isEqualTo ""}) exitWith {}; +if (!(_sideCheck isEqualTo sideUnknown) && {!(playerSide isEqualTo _sideCheck)}) exitWith {hint localize "STR_Shop_Veh_NotAllowed"}; + +private _conditions = M_CONFIG(getText,"CarShops",_shop,"conditions"); +if !([_conditions] call life_fnc_levelCheck) exitWith {hint localize "STR_Shop_Veh_NotAllowed"}; + +if (LIFE_SETTINGS(getNumber,"vehicleShop_3D") isEqualTo 1) then { + createDialog "Life_Vehicle_Shop_v2_3D"; +} else { + createDialog "Life_Vehicle_Shop_v2"; +}; + +life_veh_shop = [_shop,_spawnpoints,_shopFlag,_disableBuy]; //Store it so so other parts of the system can access it. + +ctrlSetText [2301,_shopTitle]; + +if (_disableBuy) then { + //Disable the buy button. + ctrlEnable [2309,false]; +}; + +//Fetch the shop config. +private _vehicleList = M_CONFIG(getArray,"CarShops",_shop,"vehicles"); + +private _control = CONTROL(2300,2302); +lbClear _control; //Flush the list. +ctrlShow [2330,false]; +ctrlShow [2304,false]; + +//Loop through +{ + _x params["_className"]; + + private _toShow = [_x] call life_fnc_levelCheck; + + if (_toShow) then { + _vehicleInfo = [_className] call life_fnc_fetchVehInfo; + _control lbAdd (_vehicleInfo select 3); + _control lbSetPicture [(lbSize _control)-1,(_vehicleInfo select 2)]; + _control lbSetData [(lbSize _control)-1,_className]; + _control lbSetValue [(lbSize _control)-1,_forEachIndex]; + }; +} forEach _vehicleList; + +((findDisplay 2300) displayCtrl 2302) lbSetCurSel 0; diff --git a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf index 11d3b499d..d6939646f 100644 --- a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf @@ -22,6 +22,9 @@ if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { private _textureArray = M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures"); private _colorIndex = _textureArray findIf {_x select 0 == _colorName}; +if (_colorIndex isEqualTo -1) then { + _colorIndex = 0; +}; private _textures = (_textureArray select _colorIndex) select 2; if (_textures isEqualTo []) exitWith {}; From 4e0f8a4e8a741fb8202d9dd12f62762af7160a57 Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 2 Apr 2020 15:31:56 +0100 Subject: [PATCH 19/40] Remove life_fnc_requestClientID and associated TON function --- Altis_Life.Altis/config/Config_SpyGlass.hpp | 768 +++++++++--------- Altis_Life.Altis/core/init.sqf | 235 +++--- BEFilters/publicvariable.txt | 6 +- life_hc/MySQL/Vehicles/fn_vehicleStore.sqf | 334 ++++---- .../Functions/Systems/fn_vehicleAnimate.sqf | 96 +-- life_server/init.sqf | 413 +++++----- 6 files changed, 921 insertions(+), 931 deletions(-) diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 6a3fe0c7b..b0b41826a 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -1,384 +1,384 @@ -class SpyGlass { - civSlotNumber = 100; - copSlotNumber = 19; - medSlotNumber = 6; - - /* - Internal functions, sort by what they are. - Please note any functions you add need the functions named defined and the functions meta name which is the functions name + _meta i.e: - "life_fnc_mycoolfunction","life_fnc_mycoolfunction_meta" - */ - //ArmA 3 Functions - BIS_Functions[] = { - "bis_fnc_destroyer01handledamage","bis_fnc_destroyer01inithullnumbers","bis_fnc_effectfiredcruisemissile","bis_fnc_destroyer01playhangardoorsound","bis_fnc_boatrack01init","bis_fnc_destroyer01operatehangardoors","bis_fnc_destroyer01animatehangardoors","bis_fnc_boatrack01actionremove","bis_fnc_3denexportsqf","bis_fnc_boatrack01canexetuteaction","bis_fnc_destroyer01edeninit", - "bis_fnc_destroyer01getshippart","bis_fnc_boatrack01adjustzoffset","bis_fnc_destroyer01edendelete","bis_fnc_boatrack01actionadd","bis_fnc_boatrack01initadjustzoffsets","bis_fnc_destroyer01init","bis_fnc_boatrack01canprogressaction","bis_fnc_destroyer01posupdate","bis_fnc_sethitpointdamage","bis_fnc_selectrespawntemplate_loaded","bis_fnc_animateflag","bis_fnc_advhintformat", - "bis_fnc_storeparamsvalues","bis_fnc_door","bis_fnc_storeparamsvalues_data","bis_fnc_diagobjectperformance","bis_egspectator_allowaiswitch","bis_egspectator_allowfreecamera","bis_egspectator_draw3d","bis_egspectator_entityrespawned","bis_egspectator_initialized","bis_egspectator_showfocusinfo","bis_egspectator_thread","bis_egspectator_unitsiconstodraw","bis_egspectator_whitelistedsides", - "bis_egspectatorcamera_camera","bis_egspectatorcamera_cameramode","bis_egspectatorcamera_deltatime","bis_egspectatorcamera_dirtemp","bis_egspectatorcamera_dummytarget","bis_egspectatorcamera_freecamhastarget","bis_egspectatorcamera_heightmode","bis_egspectatorcamera_isveryfastspeed","bis_egspectatorcamera_lastticktime","bis_egspectatorcamera_manual","bis_egspectatorcamera_pitch", - "bis_egspectatorcamera_targetinvehicle","bis_egspectatorcamera_tick","bis_egspectatorcamera_usesurfacespeed","bis_egspectatorcamera_vision","bis_egspectatorcamera_yaw","bis_egspectatorcamera_zoom","bis_egspectatorcamera_zoomtemp","bis_egspectatordraw3d_drawlocations","bis_fnc_3dcredits","bis_fnc_3dencamera","bis_fnc_3dencontrolshint","bis_fnc_3dendiagcreatelist","bis_fnc_3dendiagfonts", - "bis_fnc_3dendiagmousecontrol","bis_fnc_3dendrawlocations","bis_fnc_3denentitymenu","bis_fnc_3denexportattributes","bis_fnc_3denexportoldsqm","bis_fnc_3denexportterrainbuilder","bis_fnc_3denflashlight","bis_fnc_3dengrid","bis_fnc_3denintel","bis_fnc_3deninterface","bis_fnc_3denlistlocations","bis_fnc_3denmissionpreview","bis_fnc_3denmoduledescription", - "bis_fnc_3dennotification","bis_fnc_3denrevivemode","bis_fnc_3denreviverequireditems","bis_fnc_3denshowmessage","bis_fnc_3denstatusbar","bis_fnc_3dentoolbar","bis_fnc_3dentutorial","bis_fnc_3denvisionmode","bis_fnc_3dmarkers","bis_fnc_aan","bis_fnc_absspeed","bis_fnc_activateaddons","bis_fnc_addclassoo","bis_fnc_addcommmenuitem","bis_fnc_addcuratorareafromtrigger", - "bis_fnc_addcuratorchallenge","bis_fnc_addcuratoricon","bis_fnc_addevidence","bis_fnc_addrespawninventory","bis_fnc_addrespawnposition","bis_fnc_addscore","bis_fnc_addscriptedeventhandler","bis_fnc_addscriptedeventhandler_egspectator_oncameramodechanged","bis_fnc_addscriptedeventhandler_rscdisplayegspectator_mapstatechanged","bis_fnc_addstackedeventhandler", - "bis_fnc_addsupportlink","bis_fnc_addtopairs","bis_fnc_addvirtualbackpackcargo","bis_fnc_addvirtualitemcargo","bis_fnc_addvirtualmagazinecargo","bis_fnc_addvirtualweaponcargo","bis_fnc_addweapon","bis_fnc_adjustsimpleobject","bis_fnc_advhint","bis_fnc_advhintarg","bis_fnc_advhintcall","bis_fnc_advhintcredits","bis_fnc_aligntabs","bis_fnc_allsynchronizedobjects", - "bis_fnc_ambientanim","bis_fnc_ambientanimcombat","bis_fnc_ambientanimgetparams","bis_fnc_ambientblacklist","bis_fnc_ambientblacklistadd","bis_fnc_ambientboats","bis_fnc_ambientflyby","bis_fnc_ambienthelicopters","bis_fnc_ambientplanes","bis_fnc_ambientpostprocess","bis_fnc_animalbehaviour","bis_fnc_animalrandomization","bis_fnc_animalsitespawn", - "bis_fnc_animatetaskwaypoint","bis_fnc_animtype","bis_fnc_animviewer","bis_fnc_areequal","bis_fnc_areequalnotnil","bis_fnc_arefriendly","bis_fnc_arithmeticmean","bis_fnc_arraycompare","bis_fnc_arrayfinddeep","bis_fnc_arrayinsert","bis_fnc_arraypop","bis_fnc_arraypush","bis_fnc_arraypushstack","bis_fnc_arrayshift","bis_fnc_arrayshuffle","bis_fnc_arrayunshift", - "bis_fnc_arsenal","bis_fnc_assignplayerrole","bis_fnc_attachtorelative","bis_fnc_basevehicle","bis_fnc_baseweapon","bis_fnc_basicbackpack","bis_fnc_basictask","bis_fnc_bitflagscheck","bis_fnc_bitflagsflip","bis_fnc_bitflagsset","bis_fnc_bitflagstoarray","bis_fnc_bitflagsunset","bis_fnc_bitwiseand","bis_fnc_bitwisenot","bis_fnc_bitwiseor","bis_fnc_bitwisexor", - "bis_fnc_blackin","bis_fnc_blackout","bis_fnc_bleedtickets","bis_fnc_bloodeffect","bis_fnc_boundingboxcorner","bis_fnc_boundingboxdimensions","bis_fnc_boundingboxmarker","bis_fnc_boundingcircle","bis_fnc_briefinganimate","bis_fnc_briefinginit","bis_fnc_buildingpositions","bis_fnc_call","bis_fnc_callscriptedeventhandler","bis_fnc_camera","bis_fnc_cameraold", - "bis_fnc_camfollow","bis_fnc_cargoturretindex","bis_fnc_changesupportradiochannel","bis_fnc_cinemaborder","bis_fnc_classmagazine","bis_fnc_classweapon","bis_fnc_codeperformance","bis_fnc_colorconfigtorgba","bis_fnc_colorrgbatohtml","bis_fnc_colorrgbatotexture","bis_fnc_colorrgbtohtml","bis_fnc_commsmenucreate","bis_fnc_commsmenutoggleavailability", - "bis_fnc_commsmenutogglevisibility","bis_fnc_compatibleitems","bis_fnc_completedcuratorchallengescount","bis_fnc_conditionalselect","bis_fnc_configextremes","bis_fnc_configpath","bis_fnc_configviewer","bis_fnc_consolidatearray","bis_fnc_controlconfigs","bis_fnc_convertunits","bis_fnc_countdown","bis_fnc_counter","bis_fnc_createlogrecord","bis_fnc_createmenu", - "bis_fnc_createobjectoo","bis_fnc_createsimpleobject","bis_fnc_credits","bis_fnc_credits_movie","bis_fnc_credits_movieconfig","bis_fnc_credits_moviesupport","bis_fnc_crewcount","bis_fnc_crossproduct","bis_fnc_crows","bis_fnc_ctrlfittotextheight","bis_fnc_ctrlsetscale","bis_fnc_ctrltextheight","bis_fnc_curatorattachobject","bis_fnc_curatorattributes", - "bis_fnc_curatorautomatic","bis_fnc_curatorautomaticpositions","bis_fnc_curatorchallengedestroyvehicle","bis_fnc_curatorchallengefindintel","bis_fnc_curatorchallengefireweapon","bis_fnc_curatorchallengegetinvehicle","bis_fnc_curatorchallengeilluminate","bis_fnc_curatorchallengespawnlightning","bis_fnc_curatorhint","bis_fnc_curatorobjectedited","bis_fnc_curatorobjectplaced", - "bis_fnc_curatorobjectregistered","bis_fnc_curatorobjectregisteredtable","bis_fnc_curatorpinged","bis_fnc_curatorrespawn","bis_fnc_curatorsaymessage","bis_fnc_curatorvisionmodes","bis_fnc_curatorwaypointplaced","bis_fnc_customgps","bis_fnc_customgpsvideo","bis_fnc_cutdecimals","bis_fnc_damagechanged","bis_fnc_damagepulsing","bis_fnc_dataterminalanimate", - "bis_fnc_dataterminalcolor","bis_fnc_dbclasscheck","bis_fnc_dbclassid","bis_fnc_dbclassindex","bis_fnc_dbclasslist","bis_fnc_dbclassremove","bis_fnc_dbclassreturn","bis_fnc_dbclassset","bis_fnc_dbconfigpath","bis_fnc_dbimportconfig","bis_fnc_dbimportxml","bis_fnc_dbisclass","bis_fnc_dbisvalue","bis_fnc_dbprint","bis_fnc_dbsymbolclass","bis_fnc_dbsymbolvalue", - "bis_fnc_dbvaluecheck","bis_fnc_dbvalueid","bis_fnc_dbvalueindex","bis_fnc_dbvaluelist","bis_fnc_dbvalueremove","bis_fnc_dbvaluereturn","bis_fnc_dbvalueset","bis_fnc_debugprofile","bis_fnc_decodeflags","bis_fnc_deletecounter","bis_fnc_deleteinventory","bis_fnc_deletetask","bis_fnc_deletevehiclecrew","bis_fnc_destroycity","bis_fnc_diagaar","bis_fnc_diagaarrecord", - "bis_fnc_diagaarrecord_fsm","bis_fnc_diaganim","bis_fnc_diagbulletcam","bis_fnc_diagconfig","bis_fnc_diagfindmissingauthors","bis_fnc_diaghit","bis_fnc_diagjiralink","bis_fnc_diagkey","bis_fnc_diagkeylayout","bis_fnc_diagkeytest","bis_fnc_diagknownastarget","bis_fnc_diagknowntargets","bis_fnc_diagloop","bis_fnc_diagmacros","bis_fnc_diagmacrosauthor", - "bis_fnc_diagmacroseditorpreview","bis_fnc_diagmacrosmapsize","bis_fnc_diagmacrosnamesound","bis_fnc_diagmacrosverify","bis_fnc_diagmissionpositions","bis_fnc_diagmissionweapons","bis_fnc_diagpreview","bis_fnc_diagpreviewcycle","bis_fnc_diagpreviewvehiclecrew","bis_fnc_diagradio","bis_fnc_diagvehicleicons","bis_fnc_diagwiki","bis_fnc_diaryhints","bis_fnc_diarymaps", - "bis_fnc_didjip","bis_fnc_dirindicator","bis_fnc_dirteffect","bis_fnc_dirto","bis_fnc_disableloading","bis_fnc_disablerevive","bis_fnc_disablesaving","bis_fnc_displayclouds","bis_fnc_displaycolorget","bis_fnc_displaycolorset","bis_fnc_displaycontrols","bis_fnc_displayloading","bis_fnc_displaymission","bis_fnc_displayname","bis_fnc_displayresize","bis_fnc_distance2d", - "bis_fnc_distance2dsqr","bis_fnc_doorclose","bis_fnc_doornohandleclose","bis_fnc_doornohandleopen","bis_fnc_dooropen","bis_fnc_dotproduct","bis_fnc_drawao","bis_fnc_drawcuratordeaths","bis_fnc_drawcuratorlocations","bis_fnc_drawcuratorrespawnmarkers","bis_fnc_drawminefields","bis_fnc_drawrespawnpositions","bis_fnc_dynamicgroups","bis_fnc_dynamictext","bis_fnc_earthquake", - "bis_fnc_effectfired","bis_fnc_effectfiredartillery","bis_fnc_effectfiredflares","bis_fnc_effectfiredhelirocket","bis_fnc_effectfiredlongsmoke","bis_fnc_effectfiredrifle","bis_fnc_effectfiredrocket","bis_fnc_effectfiredsmokelauncher","bis_fnc_effectfiredsmokelauncher_boat","bis_fnc_effectkilled","bis_fnc_effectkilledairdestruction","bis_fnc_effectkilledairdestructionstage2", - "bis_fnc_effectkilledsecondaries","bis_fnc_effectplankton","bis_fnc_egobjectivevisualizer","bis_fnc_egobjectivevisualizerdraw","bis_fnc_egspectator","bis_fnc_egspectatorcamera","bis_fnc_egspectatorcamerapreparetarget","bis_fnc_egspectatorcameraresettarget","bis_fnc_egspectatorcamerasettarget","bis_fnc_egspectatorcameratick","bis_fnc_egspectatordraw2d", - "bis_fnc_egspectatordraw3d","bis_fnc_egspectatorgetunitstodraw","bis_fnc_enablesaving","bis_fnc_encodeflags","bis_fnc_endloadingscreen","bis_fnc_endmission","bis_fnc_endmissionserver","bis_fnc_enemydetected","bis_fnc_enemysides","bis_fnc_enemytargets","bis_fnc_error","bis_fnc_errormsg","bis_fnc_errorparamstype","bis_fnc_establishingshot","bis_fnc_estimatedtimeleft", - "bis_fnc_execfsm","bis_fnc_execremote","bis_fnc_executestackedeventhandler","bis_fnc_exp_camp_addtickets","bis_fnc_exp_camp_balancegroup","bis_fnc_exp_camp_checkpoint","bis_fnc_exp_camp_dynamicaiskill","bis_fnc_exp_camp_getcinematicmode","bis_fnc_exp_camp_getplayersgroup","bis_fnc_exp_camp_guidedprojectile","bis_fnc_exp_camp_hasmissionstarted", - "bis_fnc_exp_camp_iff","bis_fnc_exp_camp_initcharacter","bis_fnc_exp_camp_initclasses","bis_fnc_exp_camp_initdifficulty","bis_fnc_exp_camp_lobby","bis_fnc_exp_camp_lobby_clearvars","bis_fnc_exp_camp_lobby_ctrlsetcolor","bis_fnc_exp_camp_lobby_findhost","bis_fnc_exp_camp_lobby_gethostsettings","bis_fnc_exp_camp_lobby_getplayersquadname","bis_fnc_exp_camp_lobby_go", - "bis_fnc_exp_camp_lobby_intro","bis_fnc_exp_camp_lobby_launch","bis_fnc_exp_camp_lobby_loop","bis_fnc_exp_camp_lobby_missioncountdown","bis_fnc_exp_camp_lobby_onload","bis_fnc_exp_camp_lobby_onunload","bis_fnc_exp_camp_lobby_playmissionvideo","bis_fnc_exp_camp_lobby_serverping","bis_fnc_exp_camp_lobby_serverupdate","bis_fnc_exp_camp_lobby_structuredtext", - "bis_fnc_exp_camp_lobby_uimilitarymanager","bis_fnc_exp_camp_lobby_uimissioncountdown","bis_fnc_exp_camp_lobby_uimissionmanager","bis_fnc_exp_camp_lobby_uioverlaymanager","bis_fnc_exp_camp_lobby_uiprogressmanager","bis_fnc_exp_camp_lobby_uisettingsmanager","bis_fnc_exp_camp_lobby_updatehostsettings","bis_fnc_exp_camp_lobby_updateintel", - "bis_fnc_exp_camp_lobby_updatemilitaryefficiency","bis_fnc_exp_camp_lobby_updateplayers","bis_fnc_exp_camp_lobby_updateplayerstatus","bis_fnc_exp_camp_manager","bis_fnc_exp_camp_manager_getstate","bis_fnc_exp_camp_manager_onplayerregistered","bis_fnc_exp_camp_manager_setstate","bis_fnc_exp_camp_manager_triggerevent", - "bis_fnc_exp_camp_playerchecklist","bis_fnc_exp_camp_playsubtitles","bis_fnc_exp_camp_playtimelinevideo","bis_fnc_exp_camp_replacevehicles","bis_fnc_exp_camp_setcinematicmode","bis_fnc_exp_camp_setskill","bis_fnc_exp_camp_sitrep","bis_fnc_exportcfggroups","bis_fnc_exportcfghints","bis_fnc_exportcfgmagazines","bis_fnc_exportcfgpatches","bis_fnc_exportcfgvehicles", - "bis_fnc_exportcfgvehiclesassetdb","bis_fnc_exportcfgweapons","bis_fnc_exportconfighierarchy","bis_fnc_exportcuratorcosttable","bis_fnc_exporteditorpreviews","bis_fnc_exportfunctionstowiki","bis_fnc_exportgroupformations","bis_fnc_exportguibaseclasses","bis_fnc_exportinventory","bis_fnc_exportmaptobitxt","bis_fnc_exportvehicle","bis_fnc_fadeeffect","bis_fnc_fatigueeffect", - "bis_fnc_feedback_allowdeathscreen","bis_fnc_feedback_allowpp","bis_fnc_feedback_blue","bis_fnc_feedback_burningtimer","bis_fnc_feedback_damageblur","bis_fnc_feedback_damagecc","bis_fnc_feedback_damagepp","bis_fnc_feedback_damageradialblur","bis_fnc_feedback_fatigueblur","bis_fnc_feedback_fatiguecc","bis_fnc_feedback_fatiguepp","bis_fnc_feedback_fatigueradialblur", - "bis_fnc_feedback_testhelper","bis_fnc_feedbackinit","bis_fnc_feedbackmain","bis_fnc_feedbackmain_fsm","bis_fnc_ffvupdate","bis_fnc_filterstring","bis_fnc_findallnestedelements","bis_fnc_findextreme","bis_fnc_findinpairs","bis_fnc_findnestedelement","bis_fnc_findoverwatch","bis_fnc_findsafepos","bis_fnc_finishcuratorchallenge","bis_fnc_firesupport", - "bis_fnc_firesupportcluster","bis_fnc_firesupportvirtual","bis_fnc_fixdate","bis_fnc_flameseffect","bis_fnc_flies","bis_fnc_forcecuratorinterface","bis_fnc_forceend","bis_fnc_formatcuratorchallengeobjects","bis_fnc_fps","bis_fnc_friendlysides","bis_fnc_ftlmanager","bis_fnc_functionmeta","bis_fnc_functionpath","bis_fnc_functionsdebug","bis_fnc_garage3den","bis_fnc_garage", - "bis_fnc_gc","bis_fnc_gcinit","bis_fnc_genericsentence","bis_fnc_genericsentenceinit","bis_fnc_geometricmean","bis_fnc_getangledelta","bis_fnc_getcfg","bis_fnc_getcfgdata","bis_fnc_getcfgdataarray","bis_fnc_getcfgdatabool","bis_fnc_getcfgdataobject","bis_fnc_getcfgdatapool","bis_fnc_getcfgisclass","bis_fnc_getcfgsubclasses","bis_fnc_getfactions","bis_fnc_getfrompairs", - "bis_fnc_getidc","bis_fnc_getidd","bis_fnc_getintersectionsundercursor","bis_fnc_getlinedist","bis_fnc_getname","bis_fnc_getnetmode","bis_fnc_getobjectbbd","bis_fnc_getparamvalue","bis_fnc_getpitchbank","bis_fnc_getrespawninventories","bis_fnc_getrespawnmarkers","bis_fnc_getrespawnpositions","bis_fnc_getservervariable","bis_fnc_getturrets","bis_fnc_getunitbyuid", - "bis_fnc_getunitinsignia","bis_fnc_getvehiclecustomization","bis_fnc_getvirtualbackpackcargo","bis_fnc_getvirtualitemcargo","bis_fnc_getvirtualmagazinecargo","bis_fnc_getvirtualweaponcargo","bis_fnc_greatestnum","bis_fnc_gridtopos","bis_fnc_groupindicator","bis_fnc_groupvehicles","bis_fnc_guibackground","bis_fnc_guieditor","bis_fnc_guieffecttiles", - "bis_fnc_guieffecttiles_ppchromaberration","bis_fnc_guigrid","bis_fnc_guigridtoprofile","bis_fnc_guihint","bis_fnc_guimessage","bis_fnc_guinewsfeed","bis_fnc_halo","bis_fnc_halt","bis_fnc_hatchclose","bis_fnc_hatchopen","bis_fnc_healing","bis_fnc_healtheffects","bis_fnc_helicoptercanfly","bis_fnc_helicopterdamage","bis_fnc_helicoptergethitpoints","bis_fnc_helicopterseat", - "bis_fnc_helicopterseatmove","bis_fnc_helicoptertype","bis_fnc_help","bis_fnc_hextorgb","bis_fnc_highlightcontrol","bis_fnc_holdactionadd","bis_fnc_holdactionremove","bis_fnc_hudlimits","bis_fnc_importimagelinks","bis_fnc_inanglesector","bis_fnc_incapacitatedeffect","bis_fnc_indicatebleeding","bis_fnc_infotext","bis_fnc_init","bis_fnc_initammobox", - "bis_fnc_initcuratorattribute","bis_fnc_initdisplay","bis_fnc_initdisplays","bis_fnc_initexpo","bis_fnc_initintelobject","bis_fnc_initlistnboxsorting","bis_fnc_initmodules","bis_fnc_initmodules_animals","bis_fnc_initmodules_audio","bis_fnc_initmodules_chemlights","bis_fnc_initmodules_curator","bis_fnc_initmodules_effects","bis_fnc_initmodules_environment", - "bis_fnc_initmodules_events","bis_fnc_initmodules_firingdrills","bis_fnc_initmodules_flares","bis_fnc_initmodules_groupmodifiers","bis_fnc_initmodules_intel","bis_fnc_initmodules_missionflow","bis_fnc_initmodules_modes","bis_fnc_initmodules_multiplayer","bis_fnc_initmodules_no_category","bis_fnc_initmodules_objectives", - "bis_fnc_initmodules_objectmodifiers","bis_fnc_initmodules_ordnance","bis_fnc_initmodules_respawn","bis_fnc_initmodules_sites","bis_fnc_initmodules_smokeshells","bis_fnc_initmodules_strategicmap","bis_fnc_initmodules_supports","bis_fnc_initmodules_training","bis_fnc_initmultiplayer","bis_fnc_initparams","bis_fnc_initpixelui","bis_fnc_initplayable","bis_fnc_initrespawn", - "bis_fnc_initrespawnbackpack","bis_fnc_initslidervalue","bis_fnc_initvehicle","bis_fnc_initvehiclecrew","bis_fnc_initvehiclekart","bis_fnc_initvirtualunit","bis_fnc_initworldscene","bis_fnc_instring","bis_fnc_instructorfigure","bis_fnc_interpolateweather","bis_fnc_intrigger","bis_fnc_inv","bis_fnc_invadd","bis_fnc_invcodetoarray","bis_fnc_inventoryexists", - "bis_fnc_invremove","bis_fnc_invslots","bis_fnc_invslotsempty","bis_fnc_invslottype","bis_fnc_invstring","bis_fnc_isbuildingenterable","bis_fnc_iscampaign","bis_fnc_iscurator","bis_fnc_iscuratoreditable","bis_fnc_isdemo","bis_fnc_isforcedcuratorinterface","bis_fnc_isinfrontof","bis_fnc_isinsidearea","bis_fnc_isinzoom","bis_fnc_isleapyear","bis_fnc_isloading", - "bis_fnc_islocalized","bis_fnc_isposblacklisted","bis_fnc_isthrowable","bis_fnc_isunitvirtual","bis_fnc_itemtype","bis_fnc_jukebox","bis_fnc_kbcanspeak","bis_fnc_kbcreatedummy","bis_fnc_kbisspeaking","bis_fnc_kbmenu","bis_fnc_kbpriority","bis_fnc_kbsentence","bis_fnc_kbskip","bis_fnc_kbtell","bis_fnc_kbtelllocal","bis_fnc_kbtopicconfig","bis_fnc_keycode","bis_fnc_keyhold", - "bis_fnc_keypointsexport","bis_fnc_keypointsexportfromkml","bis_fnc_kmlimport","bis_fnc_lerp","bis_fnc_limitammunition","bis_fnc_limititems","bis_fnc_limitsupport","bis_fnc_limitweaponitems","bis_fnc_linearconversion","bis_fnc_listcuratorplayers","bis_fnc_listplayers","bis_fnc_livefeed","bis_fnc_livefeedeffects","bis_fnc_livefeedmoduleeffects","bis_fnc_livefeedmoduleinit", - "bis_fnc_livefeedmodulesetsource","bis_fnc_livefeedmodulesettarget","bis_fnc_livefeedsetsource","bis_fnc_livefeedsettarget","bis_fnc_livefeedterminate","bis_fnc_loadclass","bis_fnc_loadentry","bis_fnc_loadfunctions","bis_fnc_loadinventory","bis_fnc_loadvehicle","bis_fnc_localize","bis_fnc_locationdescription","bis_fnc_locations","bis_fnc_lockeddoornohandleopen", - "bis_fnc_lockeddooropen","bis_fnc_locweaponinfo","bis_fnc_log","bis_fnc_logformat","bis_fnc_logformatserver","bis_fnc_loop","bis_fnc_lowestnum","bis_fnc_magnitude","bis_fnc_magnitudesqr","bis_fnc_managecuratoraddons","bis_fnc_managecuratorchallenges","bis_fnc_mapsize","bis_fnc_markercreate","bis_fnc_markerparams","bis_fnc_markerpath","bis_fnc_markertotrigger", - "bis_fnc_markwaypoints","bis_fnc_maxdiffarray","bis_fnc_mirrorcuratorsettings","bis_fnc_miscanim","bis_fnc_missilelaunchpositionfix","bis_fnc_missionconversations","bis_fnc_missionconversationslocal","bis_fnc_missionflow","bis_fnc_missionflow_fsm","bis_fnc_missionhandlers","bis_fnc_missionhandlers_reloads","bis_fnc_missionrespawntype","bis_fnc_missiontasks", - "bis_fnc_missiontaskslocal","bis_fnc_missiontimeleft","bis_fnc_moduleai","bis_fnc_moduleammo","bis_fnc_moduleanimals","bis_fnc_modulearsenal","bis_fnc_modulebleedtickets","bis_fnc_modulebootcampstage","bis_fnc_modulecas","bis_fnc_modulechat","bis_fnc_modulecombatgetin","bis_fnc_modulecountdown","bis_fnc_modulecovermap","bis_fnc_modulecreatediaryrecord", - "bis_fnc_modulecreateprojectile","bis_fnc_modulecurator","bis_fnc_modulecuratoraddaddons","bis_fnc_modulecuratoraddcameraarea","bis_fnc_modulecuratoraddeditableobjects","bis_fnc_modulecuratoraddeditingarea","bis_fnc_modulecuratoraddeditingareaplayers","bis_fnc_modulecuratoraddicon","bis_fnc_modulecuratoraddpoints","bis_fnc_modulecuratorsetattributes", - "bis_fnc_modulecuratorsetcamera","bis_fnc_modulecuratorsetcoefs","bis_fnc_modulecuratorsetcostsdefault","bis_fnc_modulecuratorsetcostsside","bis_fnc_modulecuratorsetcostsvehicleclass","bis_fnc_modulecuratorseteditingareatype","bis_fnc_modulecuratorsetobjectcost","bis_fnc_moduledamage","bis_fnc_moduledate","bis_fnc_modulediary","bis_fnc_moduledooropen", - "bis_fnc_moduleeffectsbubbles","bis_fnc_moduleeffectsemittercreator","bis_fnc_moduleeffectsfire","bis_fnc_moduleeffectsplankton","bis_fnc_moduleeffectsshells","bis_fnc_moduleeffectssmoke","bis_fnc_moduleendmission","bis_fnc_moduleexecute","bis_fnc_modulefdballoonairdestruction","bis_fnc_modulefdballoonwaterdestruction","bis_fnc_modulefdcpclear","bis_fnc_modulefdcpin", - "bis_fnc_modulefdcpout","bis_fnc_modulefdfademarker","bis_fnc_modulefdskeetdestruction","bis_fnc_modulefdstatsclear","bis_fnc_modulefiringdrill","bis_fnc_modulefriendlyfire","bis_fnc_modulefuel","bis_fnc_modulegenericradio","bis_fnc_modulegrenade","bis_fnc_modulegroupid","bis_fnc_modulehandle","bis_fnc_modulehealth","bis_fnc_modulehint","bis_fnc_modulehq", - "bis_fnc_modulehvtinit","bis_fnc_modulehvtobjective","bis_fnc_modulehvtobjectives","bis_fnc_modulehvtobjectivesinstance","bis_fnc_moduleinit","bis_fnc_modulelightning","bis_fnc_modulemine","bis_fnc_modulemissionname","bis_fnc_modulemode","bis_fnc_modulemodules","bis_fnc_modulemptypedefense","bis_fnc_modulemptypegamemaster","bis_fnc_modulemptypegroundsupport", - "bis_fnc_modulemptypegroundsupportbase","bis_fnc_modulemptypesectorcontrol","bis_fnc_modulemptypeseize","bis_fnc_modulenametags","bis_fnc_moduleobjective","bis_fnc_moduleobjectivefind","bis_fnc_moduleobjectivegetin","bis_fnc_moduleobjectivemove","bis_fnc_moduleobjectiveracecp","bis_fnc_moduleobjectiveracefinish","bis_fnc_moduleobjectiveracestart", - "bis_fnc_moduleobjectivesector","bis_fnc_moduleobjectivetarget","bis_fnc_modulepositioning","bis_fnc_moduleposter","bis_fnc_modulepostprocess","bis_fnc_moduleprojectile","bis_fnc_modulepunishment","bis_fnc_moduleradiochannelcreate","bis_fnc_modulerank","bis_fnc_modulerating","bis_fnc_moduleremotecontrol","bis_fnc_modulerespawninventory","bis_fnc_modulerespawnposition", - "bis_fnc_modulerespawntickets","bis_fnc_modulerespawnvehicle","bis_fnc_modulesavegame","bis_fnc_modulesector","bis_fnc_modulesfx","bis_fnc_moduleshowhide","bis_fnc_modulesimulationmanager","bis_fnc_modulesimulationmanager_grab","bis_fnc_modulesiteinit","bis_fnc_moduleskill","bis_fnc_moduleskiptime","bis_fnc_moduleslingload","bis_fnc_modulesound","bis_fnc_modulespawnai", - "bis_fnc_modulespawnaioptions","bis_fnc_modulespawnaipoint","bis_fnc_modulespawnaisectortactic","bis_fnc_modulestrategicmapimage","bis_fnc_modulestrategicmapinit","bis_fnc_modulestrategicmapmission","bis_fnc_modulestrategicmapopen","bis_fnc_modulestrategicmaporbat","bis_fnc_modulesupportsinitprovider","bis_fnc_modulesupportsinitprovidervirtual", - "bis_fnc_modulesupportsinitrequester","bis_fnc_moduletaskcreate","bis_fnc_moduletasksetdescription","bis_fnc_moduletasksetdestination","bis_fnc_moduletasksetstate","bis_fnc_moduletimemultiplier","bis_fnc_moduletimetrial","bis_fnc_moduletracers","bis_fnc_moduletrident","bis_fnc_moduletriggers","bis_fnc_modulettcpclear","bis_fnc_modulettcpin","bis_fnc_modulettcpout", - "bis_fnc_modulettcptrigger","bis_fnc_modulettcptriggerbehind","bis_fnc_modulettstatsclear","bis_fnc_moduleunits","bis_fnc_moduleunlockarea","bis_fnc_moduleunlockobject","bis_fnc_modulevolume","bis_fnc_moduleweather","bis_fnc_modulezoneprotection","bis_fnc_modulezonerestriction","bis_fnc_monthdays","bis_fnc_moveaction","bis_fnc_movein","bis_fnc_movetorespawnposition", - "bis_fnc_mp","bis_fnc_mp_packet","bis_fnc_mpexec","bis_fnc_music","bis_fnc_nearesthelipad","bis_fnc_nearestnum","bis_fnc_nearestposition","bis_fnc_nearestroad","bis_fnc_neutralizeunit","bis_fnc_noflyzone","bis_fnc_noflyzonescreate","bis_fnc_noflyzonesexport","bis_fnc_numberdigits","bis_fnc_numbertext","bis_fnc_objectheight","bis_fnc_objectinventoryanimatedclose", - "bis_fnc_objectinventoryanimatedopen","bis_fnc_objectsgrabber","bis_fnc_objectside","bis_fnc_objectsmapper","bis_fnc_objecttype","bis_fnc_objectvar","bis_fnc_ondiarychanged","bis_fnc_onend","bis_fnc_onload","bis_fnc_onplayerconnected","bis_fnc_openfieldmanual","bis_fnc_orbataddgroupoverlay","bis_fnc_orbatanimate","bis_fnc_orbatconfigpreview","bis_fnc_orbatgetgroupparams", - "bis_fnc_orbatopen","bis_fnc_orbatremovegroupoverlay","bis_fnc_orbatsetgroupfade","bis_fnc_orbatsetgroupparams","bis_fnc_orbattooltip","bis_fnc_ordinalnumber","bis_fnc_overviewauthor","bis_fnc_overviewdifficulty","bis_fnc_overviewmission","bis_fnc_overviewterrain","bis_fnc_overviewtimetrial","bis_fnc_packstaticweapon","bis_fnc_param","bis_fnc_paramcountdown", - "bis_fnc_paramdaytime","bis_fnc_paramguerfriendly","bis_fnc_paramin","bis_fnc_paramrespawntickets","bis_fnc_paramrevivebleedoutduration","bis_fnc_paramreviveduration","bis_fnc_paramreviveforcerespawnduration","bis_fnc_paramrevivemedicspeedmultiplier","bis_fnc_paramrevivemode","bis_fnc_paramreviverequireditems","bis_fnc_paramreviverequireditemsfakconsumed", - "bis_fnc_paramreviverequiredtrait","bis_fnc_paramreviveunconsciousstatemode","bis_fnc_paramtimeacceleration","bis_fnc_paramviewdistance","bis_fnc_paramweather","bis_fnc_parsenumber","bis_fnc_phoneticalword","bis_fnc_pip","bis_fnc_playendmusic","bis_fnc_playername","bis_fnc_playersidefaction","bis_fnc_playmusic","bis_fnc_playsound","bis_fnc_playvideo","bis_fnc_posdegtoutm", - "bis_fnc_posdegtoworld","bis_fnc_position","bis_fnc_postogrid","bis_fnc_posutmtodeg","bis_fnc_preload","bis_fnc_preload_init","bis_fnc_preload_server","bis_fnc_prepareao","bis_fnc_progressloadingscreen","bis_fnc_quotations","bis_fnc_radialred","bis_fnc_radialredout","bis_fnc_radiosetchannel","bis_fnc_radiosetplaylist","bis_fnc_radiosettrack","bis_fnc_randomindex", - "bis_fnc_randomint","bis_fnc_randomnum","bis_fnc_randompos","bis_fnc_randompostrigger","bis_fnc_rankparams","bis_fnc_recompile","bis_fnc_refreshcommmenu","bis_fnc_registercuratorobject","bis_fnc_relativedirto","bis_fnc_relpos","bis_fnc_relposobject","bis_fnc_relscaleddist","bis_fnc_removeallscriptedeventhandlers","bis_fnc_removecommmenuitem","bis_fnc_removecuratoricon", - "bis_fnc_removedestroyedcuratoreditableobjects","bis_fnc_removefrompairs","bis_fnc_removeindex","bis_fnc_removenestedelement","bis_fnc_removerespawninventory","bis_fnc_removerespawnposition","bis_fnc_removescriptedeventhandler","bis_fnc_removestackedeventhandler","bis_fnc_removesupportlink","bis_fnc_removevirtualbackpackcargo","bis_fnc_removevirtualitemcargo", - "bis_fnc_removevirtualmagazinecargo","bis_fnc_removevirtualweaponcargo","bis_fnc_replacewithsimpleobject","bis_fnc_respawnbase","bis_fnc_respawnconfirm","bis_fnc_respawncounter","bis_fnc_respawnendmission","bis_fnc_respawngroup","bis_fnc_respawninstant","bis_fnc_respawnmanager","bis_fnc_respawnmenuinventory","bis_fnc_respawnmenuposition","bis_fnc_respawnmenuspectator", - "bis_fnc_respawnnone","bis_fnc_respawnrounds","bis_fnc_respawnseagull","bis_fnc_respawnside","bis_fnc_respawnspectator","bis_fnc_respawntickets","bis_fnc_respawntimepenalty","bis_fnc_respawnwave","bis_fnc_respect","bis_fnc_returnchildren","bis_fnc_returnconfigentry","bis_fnc_returngroupcomposition","bis_fnc_returnnestedelement","bis_fnc_returnparents", - "bis_fnc_returnvehicleturrets","bis_fnc_reviveallowed","bis_fnc_reviveawarddeath","bis_fnc_reviveawardkill","bis_fnc_revivebleedout","bis_fnc_revivecontrol","bis_fnc_revivedamagerecalc","bis_fnc_revivedamagereset","bis_fnc_revivedebug","bis_fnc_reviveenabled","bis_fnc_reviveexecutetemplates","bis_fnc_reviveget3dicons","bis_fnc_revivegetactionicon", - "bis_fnc_revivehandleforcerespawnaction","bis_fnc_revivehandleincapunitdetection","bis_fnc_revivehandlekeypress","bis_fnc_revivehandlereviveaction","bis_fnc_reviveiconcontrol","bis_fnc_reviveiconmanager","bis_fnc_reviveincapacitate","bis_fnc_reviveinit","bis_fnc_reviveisvalid","bis_fnc_revivekeys","bis_fnc_reviveonbeingrevived","bis_fnc_reviveonforcingrespawn", - "bis_fnc_reviveonplayerhandledamage","bis_fnc_reviveonplayerhandledamagebasic","bis_fnc_reviveonplayerhandleheal","bis_fnc_reviveonplayerkilled","bis_fnc_reviveonplayerrespawn","bis_fnc_reviveonstate","bis_fnc_reviveonstatejip","bis_fnc_reviveprogress","bis_fnc_reviveremovehelper","bis_fnc_revivesethelper","bis_fnc_revivesetstatus","bis_fnc_romannumeral", - "bis_fnc_rotatevector2d","bis_fnc_rounddir","bis_fnc_roundnum","bis_fnc_rsclayer","bis_fnc_rsclayer_list","bis_fnc_runlater","bis_fnc_sandstorm","bis_fnc_savegame","bis_fnc_saveinventory","bis_fnc_savevehicle","bis_fnc_saymessage","bis_fnc_sceneareaclearance","bis_fnc_scenecheckweapons","bis_fnc_scenecreatescenetrigger","bis_fnc_scenecreatesoundentities", - "bis_fnc_scenegetobjects","bis_fnc_scenegetparticipants","bis_fnc_scenegetpositionbyangle","bis_fnc_sceneintruderdetector","bis_fnc_scenemiscstuff","bis_fnc_scenerotate","bis_fnc_scenesetanimationsforgroup","bis_fnc_scenesetbehaviour","bis_fnc_scenesetobjects","bis_fnc_scenesetposformation","bis_fnc_scriptedmove","bis_fnc_scriptedwaypointtype","bis_fnc_secondstostring", - "bis_fnc_selectcrew","bis_fnc_selectdiarysubject","bis_fnc_selectrandom","bis_fnc_selectrandomweighted","bis_fnc_selectrespawntemplate","bis_fnc_selectrespawntemplates_args","bis_fnc_setcuratorattributes","bis_fnc_setcuratorcamera","bis_fnc_setcuratorvisionmodes","bis_fnc_setdate","bis_fnc_setfog","bis_fnc_setheight","bis_fnc_setidcstreamfriendly","bis_fnc_setidentity", - "bis_fnc_setmissionstatusslot","bis_fnc_setnestedelement","bis_fnc_setobjectrotation","bis_fnc_setobjecttexture","bis_fnc_setovercast","bis_fnc_setpitchbank","bis_fnc_setppeffecttemplate","bis_fnc_setrank","bis_fnc_setrespawndelay","bis_fnc_setrespawninventory","bis_fnc_setservervariable","bis_fnc_settask","bis_fnc_settasklocal","bis_fnc_settopairs", - "bis_fnc_setunitinsignia","bis_fnc_setvehiclemass","bis_fnc_shakecuratorcamera","bis_fnc_shakegauges","bis_fnc_sharedobjectives","bis_fnc_showcuratorattributes","bis_fnc_showcuratorfeedbackmessage","bis_fnc_showmarkers","bis_fnc_showmissionstatus","bis_fnc_shownotification","bis_fnc_showrespawnmenu","bis_fnc_showrespawnmenudisableitem", - "bis_fnc_showrespawnmenudisableitemcheck","bis_fnc_showrespawnmenudisableitemdraw","bis_fnc_showrespawnmenuheader","bis_fnc_showrespawnmenuinventory","bis_fnc_showrespawnmenuinventorydetails","bis_fnc_showrespawnmenuinventoryitems","bis_fnc_showrespawnmenuinventorylimit","bis_fnc_showrespawnmenuinventorylimitrefresh","bis_fnc_showrespawnmenuinventorylimitrespawn", - "bis_fnc_showrespawnmenuinventorylist","bis_fnc_showrespawnmenuinventoryloadout","bis_fnc_showrespawnmenuinventorymetadata","bis_fnc_showrespawnmenuposition","bis_fnc_showrespawnmenupositionlist","bis_fnc_showrespawnmenupositionmap","bis_fnc_showrespawnmenupositionmapdraw","bis_fnc_showrespawnmenupositionmaphandle","bis_fnc_showrespawnmenupositionmetadata", - "bis_fnc_showrespawnmenupositionname","bis_fnc_showrespawnmenupositionrefresh","bis_fnc_showsubtitle","bis_fnc_showtime","bis_fnc_showunitinfo","bis_fnc_showwelcomescreen","bis_fnc_shutdown","bis_fnc_sidecolor","bis_fnc_sideid","bis_fnc_sideisenemy","bis_fnc_sideisfriendly","bis_fnc_sidename","bis_fnc_sidenameunlocalized","bis_fnc_sidetype","bis_fnc_simpleobjectdata", - "bis_fnc_singlemissionconfig","bis_fnc_singlemissionkeys","bis_fnc_singlemissionname","bis_fnc_singlewingslidedoorclose","bis_fnc_singlewingslidedooropen","bis_fnc_skirmishtrigger","bis_fnc_sortalphabetically","bis_fnc_sortby","bis_fnc_sortnum","bis_fnc_spawn","bis_fnc_spawncrew","bis_fnc_spawnenemy","bis_fnc_spawngroup","bis_fnc_spawnobjects","bis_fnc_spawnvehicle", - "bis_fnc_splitstring","bis_fnc_spotter","bis_fnc_stalk","bis_fnc_startloadingscreen","bis_fnc_startloadingscreen_ids","bis_fnc_strategicmapanimate","bis_fnc_strategicmapmousebuttonclick","bis_fnc_strategicmapopen","bis_fnc_subclasses","bis_fnc_subselect","bis_fnc_supplydrop","bis_fnc_supplydropservice","bis_fnc_swapvars","bis_fnc_switchlamp","bis_fnc_synchronizedobjects", - "bis_fnc_target","bis_fnc_taskattack","bis_fnc_taskchildren","bis_fnc_taskcompleted","bis_fnc_taskcreate","bis_fnc_taskcurrent","bis_fnc_taskdefend","bis_fnc_taskdescription","bis_fnc_taskdestination","bis_fnc_taskexists","bis_fnc_taskhandler","bis_fnc_taskhint","bis_fnc_taskparent","bis_fnc_taskpatrol","bis_fnc_taskreal","bis_fnc_tasksetcurrent", - "bis_fnc_tasksetdescription","bis_fnc_tasksetdestination","bis_fnc_tasksetstate","bis_fnc_taskstate","bis_fnc_tasksunit","bis_fnc_taskvar","bis_fnc_teamcolor","bis_fnc_terraingradangle","bis_fnc_texttiles","bis_fnc_texturemarker","bis_fnc_texturevehicleicon","bis_fnc_threat","bis_fnc_timetostring","bis_fnc_titlecard","bis_fnc_titletext","bis_fnc_togglecuratorvisionmode", - "bis_fnc_toupperdisplaytexts","bis_fnc_tracebullets","bis_fnc_trackmissiontime","bis_fnc_transportservice","bis_fnc_tridentclient","bis_fnc_tridentexecute","bis_fnc_tridentgetrelationship","bis_fnc_tridenthandledamage","bis_fnc_tridentsetrelationship","bis_fnc_triggertomarker","bis_fnc_trimstring","bis_fnc_twowingdoornohandleclose","bis_fnc_twowingdoornohandleopen", - "bis_fnc_twowingdooronehandleclose","bis_fnc_twowingdooronehandleopen","bis_fnc_twowingdoortwohandleclose","bis_fnc_twowingdoortwohandleopen","bis_fnc_twowingslidedoorclose","bis_fnc_twowingslidedooropen","bis_fnc_typetext2","bis_fnc_typetext","bis_fnc_uniqueclasses","bis_fnc_unitaddon","bis_fnc_unitcapture","bis_fnc_unitcapturefiring","bis_fnc_unitcapturesimple", - "bis_fnc_unitheadgear","bis_fnc_unitplay","bis_fnc_unitplayfiring","bis_fnc_unitplaysimple","bis_fnc_unitvector","bis_fnc_unpackstaticweapon","bis_fnc_updateplayerarray","bis_fnc_validateparametersoo","bis_fnc_variablespaceadd","bis_fnc_variablespaceremove","bis_fnc_vectoradd","bis_fnc_vectordiff","bis_fnc_vectordiranduprelative","bis_fnc_vectorfromxtoy", - "bis_fnc_vectormultiply","bis_fnc_vehicleroles","bis_fnc_version","bis_fnc_versioninfo","bis_fnc_vrcourseballistics1","bis_fnc_vrcourseballistics2","bis_fnc_vrcourseballistics3","bis_fnc_vrcourseballistics4","bis_fnc_vrcoursecommandingactions1","bis_fnc_vrcoursecommandingactions2","bis_fnc_vrcoursecommandingactions3","bis_fnc_vrcoursecommandingbehaviour1", - "bis_fnc_vrcoursecommandingbehaviour2","bis_fnc_vrcoursecommandingbehaviour3","bis_fnc_vrcoursecommandingmovement1","bis_fnc_vrcoursecommandingmovement2","bis_fnc_vrcoursecommandingvehicles1","bis_fnc_vrcoursecommandingvehicles2","bis_fnc_vrcoursecommandingvehicles3","bis_fnc_vrcourseheliadvanced1","bis_fnc_vrcourseheliadvanced2","bis_fnc_vrcourseheliadvanced3", - "bis_fnc_vrcourseheliadvanced4","bis_fnc_vrcourseheliadvanced5","bis_fnc_vrcourseheliadvanced6","bis_fnc_vrcoursehelibasics1","bis_fnc_vrcoursehelibasics2","bis_fnc_vrcoursehelibasics3","bis_fnc_vrcoursehelislingload1","bis_fnc_vrcourseheliweapons1","bis_fnc_vrcourseheliweapons2","bis_fnc_vrcourseheliweapons3","bis_fnc_vrcourseheliweapons4","bis_fnc_vrcourselaunchers1", - "bis_fnc_vrcourselaunchers2","bis_fnc_vrcourselaunchers3","bis_fnc_vrcourseplaceables1","bis_fnc_vrcourseplaceables2","bis_fnc_vrcourseplaceables3","bis_fnc_vrcoursetargetdesignation1","bis_fnc_vrcoursetargetdesignation2","bis_fnc_vrcoursetargetdesignation3","bis_fnc_vrcourseweaponhandlinga1","bis_fnc_vrcourseweaponhandlinga2","bis_fnc_vrcourseweaponhandlinga3", - "bis_fnc_vrcourseweaponhandlingb1","bis_fnc_vrcourseweaponhandlingb2","bis_fnc_vrcourseweaponhandlingb3","bis_fnc_vrcourseweaponhandlingc1","bis_fnc_vrcourseweaponhandlingc2","bis_fnc_vrdrawborder","bis_fnc_vrdrawgrid","bis_fnc_vreffectkilled","bis_fnc_vrfadein","bis_fnc_vrfadeout","bis_fnc_vrhitpart","bis_fnc_vrspawneffect","bis_fnc_vrspawnselector","bis_fnc_vrtimer", - "bis_fnc_weaponaddon","bis_fnc_weaponcomponents","bis_fnc_weapondirectionrelative","bis_fnc_worldarea","bis_fnc_wpartillery","bis_fnc_wpland","bis_fnc_wppatrol","bis_fnc_wprelax","bis_fnc_wpsuppress","bis_fnc_zzrotate","bis_taskmanagement_markers2d","gui_fnc_exportdefine","life_fnc_levelcheck_meta","bis_fnc_carrier01catapultactionremove", - "bis_fnc_planeaieject","bis_fnc_carrier01edeninit","bis_fnc_ejectionseatrelease","bis_fnc_debugconsoleexec","bis_fnc_aircraftcatapultlaunch","bis_fnc_reviveehdammaged","bis_fnc_planeejectionfx","bis_fnc_admin","bis_fnc_carrier01catapultactionadd","bis_fnc_reviveehhandleheal","bis_fnc_aircraftwingstatecheck","bis_fnc_carrier01crewinanim","bis_fnc_reviveehhandledamage","bis_fnc_carrier01init", - "bis_fnc_reenablerevive","bis_fnc_carrier01edendelete","bis_fnc_carrier01catapultlockto","bis_fnc_aircrafttailhook","bis_fnc_aircraftsystemsinit","bis_fnc_carrier01catapultid","bis_fnc_weaponsentitytype","bis_fnc_isdebugconsoleallowed","bis_fnc_reviveehrespawn","bis_fnc_carrier01animatedeflectors","bis_fnc_magazinesentitytype","bis_fnc_carrier01crewplayanim","bis_fnc_reviveehkilled", - "bis_fnc_planeejection","bis_fnc_carrier01posupdate","bis_fnc_arsenal_boxes","bis_fnc_cpfindemptyposition","bis_fnc_cpsendreinforcements","bis_fnc_modulehideterrainobjects","bis_fnc_allturrets","bis_fnc_fire","bis_fnc_moduleeditterrainobject","bis_fnc_drawarrow","bis_fnc_cpwaituntil", - "bis_fnc_laptopinit","bis_fnc_cplog","bis_fnc_caralarm","bis_fnc_aircraftfoldingwings","bis_fnc_encodeflags2","bis_fnc_showaanarticle","bis_fnc_laptopplayvideo","bis_fnc_setobjectshotparents", - "bis_fnc_synchronizedobjectsqueue","bis_fnc_wpdemine","bis_fnc_cpsafeazimuths","bis_fnc_smoothstep","bis_fnc_createruin","bis_fnc_cpdummy","bis_fnc_cpspawngarrisongrp","bis_fnc_initleaflet","bis_fnc_3denattributedoorstates", - "fnc_compilablestring","bis_fnc_firedbombdemine","bis_fnc_cpinit","bis_fnc_decodeflags2","bis_fnc_initinspectable","bis_fnc_getcloudletparams","bis_fnc_aircrafttailhookai","bis_fnc_cppicksafedir","bis_fnc_easeout","bis_fnc_richcurve_setorientationmode","bis_fnc_scaleandtranslate","bis_fnc_timeline_getcurrenttime","bis_fnc_richcurve_getpreviouskey","bis_fnc_richcurve_edencomputenearestsegment", - "bis_fnc_timeline_cleanup","bis_fnc_timeline_isplaying","bis_fnc_key_getleavecontrolpoint","bis_fnc_camera_getfov","bis_fnc_timeline_gettimeleft","bis_fnc_zoomlock","bis_fnc_vectordivide","bis_fnc_timeline_edenconnectionchanged","bis_fnc_controlpoint_edenconnectionchanged","bis_fnc_bounceinout","bis_fnc_richcurve_edendrawcurve3d","bis_fnc_clerp","bis_fnc_controlpoint_edenregisteredtoworld", - "bis_fnc_changecolormarker","bis_fnc_modulecivilianpresencesafespot","bis_fnc_key_edenconnectionchanged","bis_fnc_3den_init","bis_fnc_key_setvalue","bis_fnc_controlpoint_edendragged","bis_fnc_quinticout","bis_fnc_key_edenregisteredtoworld","bis_fnc_camera_edenattributeschanged","bis_fnc_3den_onselectionchange","bis_fnc_key_getownercurve","bis_fnc_timeline_getstoptime","bis_fnc_zoomunlock", - "bis_fnc_key_isvector","bis_fnc_timeline_edendeleted","bis_fnc_camera_edeninit","bis_fnc_richcurve_getkeysattime","bis_fnc_key_setarrivetangentweight","bis_fnc_zoomonarea","bis_fnc_isequalvector","bis_fnc_richcurve_edendrawcontrolpoints3d","bis_fnc_bounceout","bis_fnc_quinticinoutvector","bis_fnc_3den_onmissionload","bis_fnc_rotatemarker","bis_fnc_timeline_edenisselected","bis_fnc_timeline_setloop", - "bis_fnc_timeline_edeninit","bis_fnc_timeline_isfinished","bis_fnc_timeline_setlength","bis_fnc_richcurve_edentick","bis_fnc_interpolatevectorconstant","bis_fnc_mapanimdone","bis_fnc_richcurve_computecurvearclength","bis_fnc_timeline_getposition","bis_fnc_richcurve_getnextkey","bis_fnc_key_setarrivetangent","bis_fnc_camera_sethudenabled","bis_fnc_controlpoint_isarrive","bis_fnc_timeline_isreverse", - "bis_fnc_timeline_finish","bis_fnc_controlpoint_setisarrive","bis_fnc_key_getconfigtime","bis_fnc_key_getleavetangent","bis_fnc_richcurve_getcurvelength","bis_fnc_deltatime","bis_fnc_mapanimclear","bis_fnc_hermite","bis_fnc_bezierinterpolatevector","bis_fnc_key_setinterpmode","bis_fnc_key_getleavetangentweight","bis_fnc_camera_edenunregisteredfromworld","bis_fnc_timeline_setreverse","bis_fnc_keyframeanimation_init", - "bis_fnc_timeline_stop","bis_fnc_key_isfloat","bis_fnc_timeline_deleted","bis_fnc_controlpoint_compute","bis_fnc_simplemovemarker","bis_fnc_timeline_simulatecurves","bis_fnc_camera_setvisionmode","bis_fnc_berpvector","bis_fnc_hidemarker","bis_fnc_encodeflags4","bis_fnc_camera_setcinemabordersenabled","bis_fnc_clamp","bis_fnc_encodeflags8","bis_fnc_timeline_setposition","bis_fnc_richcurve_gettimerange", - "bis_fnc_richcurve_edenattributeschanged","bis_fnc_initmodules_ambient","bis_fnc_quinticin","bis_fnc_controlpoint_computeownerkey","bis_fnc_timeline_islooping","bis_fnc_camera_getcam","bis_fnc_berp","bis_fnc_camera_edenselectionchanged","bis_fnc_clampvector","bis_fnc_timeline_getplayrate","bis_fnc_richcurve_edenisselected","bis_fnc_resizemarker","bis_fnc_findlookat","bis_fnc_key_getvalue","bis_fnc_3den_onkeyup", - "bis_fnc_richcurve_edenbakecurve3d","bis_fnc_zoomlockeh","bis_fnc_pow","bis_fnc_eventtimeline","bis_fnc_modulecivilianpresenceunit","bis_fnc_movemarker","bis_fnc_timeline_ispaused","bis_fnc_interpolateconstant","bis_fnc_key_setleavetangent","bis_fnc_hidemarkerarray","bis_fnc_key_setleavetangentweight","bis_fnc_interpolate","bis_fnc_richcurve_computeownertimeline","bis_fnc_richcurve_compute", - "bis_fnc_richcurve_getkeytime","bis_fnc_shakemap","bis_fnc_controlpoint_edenattributeschanged","bis_fnc_timeline_getplaytime","bis_fnc_timeline_edenattributeschanged","bis_fnc_key_computetime","bis_fnc_lookatarray","bis_fnc_timeline_setplayrate","bis_fnc_easeinout","bis_fnc_animatepicture","bis_fnc_key_edenattributeschanged","bis_fnc_blinkmarker","bis_fnc_bounceoutvector","bis_fnc_camera_gethudenabled", - "bis_fnc_mapanimadd","bis_fnc_timeline_play","bis_fnc_timeline_getlength","bis_fnc_easeinoutvector","bis_fnc_camera_setfov","bis_fnc_colormarker","bis_fnc_timeline_getplayfromstart","bis_fnc_key_compute","bis_fnc_showmarkerarray","bis_fnc_createtooltip","bis_fnc_camera_setfocus","bis_fnc_timeline_getalpha","bis_fnc_key_getinterpmode","bis_fnc_camera_deleted","bis_fnc_camera_init","bis_fnc_richcurve_getsimulatedobjects", - "bis_fnc_timeline_init","bis_fnc_richcurve_getcurvevaluefloat","bis_fnc_key_gettime","bis_fnc_richcurve_getfirstkey","bis_fnc_getmarkerstate","bis_fnc_key_edenunregisteredfromworld","bis_fnc_timeline_setinterpmode","bis_fnc_camera_getvisionmode","bis_fnc_key_getarrivetangentweight","bis_fnc_richcurve_getorientationmode","bis_fnc_camera_edenconnectionchanged","bis_fnc_richcurve_computekeys","bis_fnc_camera_tick", - "bis_fnc_nearestpoint","bis_fnc_camera_edenreset","bis_fnc_key_edenarecontrolpointslocked","bis_fnc_richcurve_getlookatposition","bis_fnc_timeline_tick","bis_fnc_key_computeownercurve","bis_fnc_bezierinterpolate","bis_fnc_camera_edenregisteredtoworld","bis_fnc_shakemapeh","bis_fnc_quinticinout","bis_fnc_richcurve_getkeys","bis_fnc_key_edenisselected","bis_fnc_3den_onmissionpreviewend","bis_fnc_missionselector", - "bis_fnc_richcurve_resetkeyseventstate","bis_fnc_richcurve_getkeyindex","bis_fnc_richcurve_computesimulatedobjects","bis_fnc_easeoutvector","bis_fnc_getbordermarkers","bis_fnc_animatedscreen","bis_fnc_richcurve_getcurvepoints","bis_fnc_timeline_edendragged","bis_fnc_richcurve_getownertimeline","bis_fnc_lookatarrayeh","bis_fnc_inverselerp","bis_fnc_3den_onkeydown","bis_fnc_richcurve_getlastkey", - "bis_fnc_timeline_getsimulatedcurves","bis_fnc_easein","bis_fnc_slerp","bis_fnc_controlpoint_edenunregisteredfromworld","bis_fnc_richcurve_istimeinseconds","bis_fnc_quinticinvector","bis_fnc_getmarkers","bis_fnc_key_getarrivetangent","bis_fnc_key_getfov","bis_fnc_bounceinoutvector","bis_fnc_bouncein","bis_fnc_cancelmarker","bis_fnc_decodeflags4","bis_fnc_lerpvector","bis_fnc_richcurve_edenmarkstatedirty","bis_fnc_holdkey", - "bis_fnc_richcurve_edendragged","bis_fnc_decodeflags8","bis_fnc_quinticoutvector","bis_fnc_showmarker","bis_fnc_key_edendragged","bis_fnc_key_settime","bis_fnc_controlpoint_edenisselected","bis_fnc_camera_edenisselected","bis_fnc_pulsate","bis_fnc_key_getarrivecontrolpoint","bis_fnc_richcurve_getkeyfromindex","bis_fnc_easeinvector","bis_fnc_modulecivilianpresence","bis_fnc_hermitevector","bis_fnc_richcurve_edenconnectionchanged", - "bis_fnc_controlpoint_getownerkey","bis_fnc_richcurve_getcurvevaluevector","bis_fnc_interpolatevector","bis_fnc_camera_getfocus","bis_fnc_bounceinvector","bis_fnc_richcurve_reset","bis_fnc_timeline_setpause","bis_fnc_camera_setcam","bis_fnc_3den_onmissionnew","bis_fnc_richcurve_setkeys","bis_fnc_camera_getcinemabordersenabled","bis_fnc_richcurve_numkeys","bis_fnc_bezierlength","bis_fnc_camera_edendeleted", - "bis_fnc_keyframeanimation_deltatime","bis_fnc_timeline_getinterpmode","bis_fnc_initmodules_keyframeanimation","bis_fnc_revivesecureunit","bis_fnc_modulevanguardscorepersistence","bis_fnc_wlsectorlisting","bis_fnc_wlinsectorarea","bis_fnc_wlsubroutine_purchasemenugetuiscale", - "bis_fnc_wlrequestfasttravel","bis_fnc_wlsectorhandle","bis_fnc_wlsectorselectionhandle","bis_fnc_wldroppurchase","bis_fnc_priorityqueue_isempty","bis_fnc_wlplayerstrackingserver","bis_fnc_wlsidetofaction","bis_fnc_initmodules_warlords","bis_fnc_wlsectoriconupdate","bis_fnc_wlsubroutine_purchasemenuassetavailability","bis_fnc_wldefencesetup","bis_fnc_wlloadoutapply","bis_fnc_isdatetimenewer", - "bis_fnc_wlaircraftarrival","bis_fnc_priorityqueue_pushitem","bis_fnc_wlosd","bis_fnc_priorityqueue_popitem","bis_fnc_wlaipurchases","bis_fnc_wlsynctime","bis_fnc_priorityqueue_gethighestpriority","bis_fnc_wlreputation","bis_fnc_wlsubroutine_purchasemenusetitemslist","bis_fnc_wlvehiclehandle","bis_fnc_wlsectorinit","bis_fnc_priorityqueue_isfull","bis_fnc_wlcalculatesectorconnections", - "bis_fnc_wlsubroutine_purchasemenusetassetdetails","bis_fnc_wlupdateao","bis_fnc_wlvarsinit","bis_fnc_wloutlineicons","bis_fnc_wlsubroutine_purchasemenurefresh","bis_fnc_wlsectorpopulate","bis_fnc_wlloadoutgrab","bis_fnc_wlsendresponseteam","bis_fnc_wlopenarsenal","bis_fnc_wlsectorfundspayoff","bis_fnc_priorityqueue_getlowestpriority","bis_fnc_wlsmoothtext","bis_fnc_wlrecalculateservices", - "bis_fnc_wlshowinfo","bis_fnc_priorityqueue_init","bis_fnc_multiplysquarematrixbyvector","bis_fnc_wlnavalarrival","bis_fnc_wlgarrisonretreat","bis_fnc_wlclientinit","bis_fnc_wlsectorscommoninit","bis_fnc_wlrequestfundstransfer","bis_fnc_comparedatetimes","bis_fnc_wlcalculateincome","bis_fnc_wlsectorscanhandle","bis_fnc_wlplayerstracking","bis_fnc_wlrequestsectorscan","bis_fnc_wlrandomposrect","bis_fnc_wlaicore", - "bis_fnc_wldebug","bis_fnc_wlsectorselectionhandleserver","bis_fnc_wlmostvotedsector","bis_fnc_wlfundsinfo","bis_fnc_wlpurchasemenu","bis_fnc_wlremovalhandle","bis_fnc_wlinit","bis_fnc_wlrequestvotingreset","bis_fnc_calculatedatetime","bis_fnc_wlairdrop","bis_fnc_wlsectorhandleserver","bis_fnc_wlrequestpurchase","bis_fnc_rotatevector3d","bis_fnc_wlaipathsegmentation","bis_fnc_wlsectorssetup", - "bis_fnc_wlsectorupdate","bis_fnc_wlsectortaskhandle","bis_fnc_wlsectorselectionstart","bis_fnc_wlvotingbarhandle","bis_fnc_wlsoundmsg","bis_fnc_wlseizingbarhandle","bis_fnc_wlaisectorscan","bis_fnc_wlsubroutine_purchasemenuhandledlc","bis_fnc_wlsectorselectionend", "bis_fnc_compatiblemagazines", "bis_fnc_stringtomarkerlocal", "bis_fnc_stringtomarker", "bis_fnc_markertostring", "bis_fnc_respawnbackpack", - "bis_fnc_mapgridsize", "bis_fnc_wlparseassetlist", "bis_fnc_setcustomsoundcontroller", "bis_fnc_wlsyncedtime" - }; - - BIS_UI_Functions[] = { - "bis_displayinterrupt_isoptionsexpanded","bis_fnc_3dcredits_meta","bis_fnc_aan_meta","bis_fnc_absspeed_meta","bis_fnc_activateaddons_meta","bis_fnc_addclassoo_meta","bis_fnc_addcommmenuitem_meta","bis_fnc_addcuratorareafromtrigger_meta","bis_fnc_addcuratorchallenge_meta","bis_fnc_addcuratoricon_meta","bis_fnc_addevidence_meta","bis_fnc_addrespawninventory_meta", - "bis_fnc_addrespawnposition_meta","bis_fnc_addscore_meta","bis_fnc_addscriptedeventhandler_meta","bis_fnc_addstackedeventhandler_meta","bis_fnc_addsupportlink_meta","bis_fnc_addtopairs_meta","bis_fnc_addvirtualbackpackcargo_meta","bis_fnc_addvirtualitemcargo_meta","bis_fnc_addvirtualmagazinecargo_meta","bis_fnc_addvirtualweaponcargo_meta","bis_fnc_addweapon_meta", - "bis_fnc_advhint_hinthandlers","bis_fnc_advhint_meta","bis_fnc_advhintarg_meta","bis_fnc_advhintcall_meta","bis_fnc_advhintcredits_meta","bis_fnc_aligntabs_meta","bis_fnc_allsynchronizedobjects_meta","bis_fnc_ambientanim_meta","bis_fnc_ambientanimcombat_meta","bis_fnc_ambientanimgetparams_meta","bis_fnc_ambientblacklist_meta","bis_fnc_ambientblacklistadd_meta", - "bis_fnc_ambientboats_meta","bis_fnc_ambientflyby_meta","bis_fnc_ambienthelicopters_meta","bis_fnc_ambientplanes_meta","bis_fnc_ambientpostprocess_meta","bis_fnc_animalbehaviour_meta","bis_fnc_animalsitespawn_meta","bis_fnc_animatetaskwaypoint_meta","bis_fnc_animtype_meta","bis_fnc_animviewer_meta","bis_fnc_areequal_meta","bis_fnc_arefriendly_meta", - "bis_fnc_arithmeticmean_meta","bis_fnc_arraycompare_meta","bis_fnc_arrayfinddeep_meta","bis_fnc_arrayinsert_meta","bis_fnc_arraypop_meta","bis_fnc_arraypush_meta","bis_fnc_arraypushstack_meta","bis_fnc_arrayshift_meta","bis_fnc_arrayshuffle_meta","bis_fnc_arrayunshift_meta","bis_fnc_arsenal_meta","bis_fnc_assignplayerrole_meta","bis_fnc_baseweapon_meta", - "bis_fnc_basicbackpack_meta","bis_fnc_basictask_meta","bis_fnc_blackin_meta","bis_fnc_blackout_meta","bis_fnc_bleedtickets_meta","bis_fnc_bloodeffect_meta","bis_fnc_boundingboxcorner_meta","bis_fnc_boundingboxdimensions_meta","bis_fnc_boundingboxmarker_meta","bis_fnc_boundingcircle_meta","bis_fnc_briefinganimate_meta","bis_fnc_briefinginit_meta", - "bis_fnc_buildingpositions_meta","bis_fnc_call_meta","bis_fnc_callscriptedeventhandler_meta","bis_fnc_camera_meta","bis_fnc_cameraold_meta","bis_fnc_camfollow_meta","bis_fnc_cargoturretindex_meta","bis_fnc_changesupportradiochannel_meta","bis_fnc_cinemaborder_meta","bis_fnc_classmagazine_meta","bis_fnc_classweapon_meta","bis_fnc_codeperformance_meta", - "bis_fnc_colorconfigtorgba_meta","bis_fnc_colorrgbatohtml_meta","bis_fnc_colorrgbatotexture_meta","bis_fnc_colorrgbtohtml_meta","bis_fnc_commsmenucreate_meta","bis_fnc_commsmenutoggleavailability_meta","bis_fnc_commsmenutogglevisibility_meta","bis_fnc_completedcuratorchallengescount_meta","bis_fnc_conditionalselect_meta","bis_fnc_configextremes_meta", - "bis_fnc_configpath_meta","bis_fnc_configviewer_meta","bis_fnc_consolidatearray_meta","bis_fnc_convertunits_meta","bis_fnc_countdown_meta","bis_fnc_counter_meta","bis_fnc_createlogrecord_meta","bis_fnc_createmenu_meta","bis_fnc_createobjectoo_meta","bis_fnc_credits_meta","bis_fnc_credits_movie_meta","bis_fnc_credits_movieconfig_meta","bis_fnc_credits_moviesupport_meta", - "bis_fnc_crewcount_meta","bis_fnc_crossproduct_meta","bis_fnc_crows_meta","bis_fnc_ctrlfittotextheight_meta","bis_fnc_ctrlsetscale_meta","bis_fnc_ctrltextheight_meta","bis_fnc_curatorattachobject_meta","bis_fnc_curatorattributes_meta","bis_fnc_curatorautomatic_meta","bis_fnc_curatorautomaticpositions_meta","bis_fnc_curatorchallengedestroyvehicle_meta", - "bis_fnc_curatorchallengefindintel_meta","bis_fnc_curatorchallengefireweapon_meta","bis_fnc_curatorchallengegetinvehicle_meta","bis_fnc_curatorchallengeilluminate_meta","bis_fnc_curatorchallengespawnlightning_meta","bis_fnc_curatorhint_meta","bis_fnc_curatorobjectedited_meta","bis_fnc_curatorobjectplaced_meta","bis_fnc_curatorobjectregistered_meta", - "bis_fnc_curatorobjectregisteredtable_meta","bis_fnc_curatorpinged_meta","bis_fnc_curatorrespawn_meta","bis_fnc_curatorsaymessage_meta","bis_fnc_curatorvisionmodes_meta","bis_fnc_curatorwaypointplaced_meta","bis_fnc_customgps_meta","bis_fnc_customgpsvideo_meta","bis_fnc_cutdecimals_meta","bis_fnc_damagechanged_meta","bis_fnc_damagepulsing_meta","bis_fnc_dbclasscheck_meta", - "bis_fnc_dbclassid_meta","bis_fnc_dbclassindex_meta","bis_fnc_dbclasslist_meta","bis_fnc_dbclassremove_meta","bis_fnc_dbclassreturn_meta","bis_fnc_dbclassset_meta","bis_fnc_dbconfigpath_meta","bis_fnc_dbimportconfig_meta","bis_fnc_dbimportxml_meta","bis_fnc_dbisclass_meta","bis_fnc_dbisvalue_meta","bis_fnc_dbprint_meta","bis_fnc_dbsymbolclass_meta","bis_fnc_dbsymbolvalue_meta", - "bis_fnc_dbvaluecheck_meta","bis_fnc_dbvalueid_meta","bis_fnc_dbvalueindex_meta","bis_fnc_dbvaluelist_meta","bis_fnc_dbvalueremove_meta","bis_fnc_dbvaluereturn_meta","bis_fnc_dbvalueset_meta","bis_fnc_deleteinventory_meta","bis_fnc_deletetask_meta","bis_fnc_deletevehiclecrew_meta","bis_fnc_destroycity_meta","bis_fnc_diagaar_meta","bis_fnc_diagaarrecord_meta","bis_fnc_diaganim_meta", - "bis_fnc_diagbulletcam_meta","bis_fnc_diagconfig_meta","bis_fnc_diagfindmissingauthors_meta","bis_fnc_diaghit_meta","bis_fnc_diagjiralink_meta","bis_fnc_diagkey_meta","bis_fnc_diagkeylayout_meta","bis_fnc_diagkeytest_meta","bis_fnc_diagknownastarget_meta","bis_fnc_diagknowntargets_meta","bis_fnc_diagloop_meta","bis_fnc_diagmacros_meta","bis_fnc_diagmacrosauthor_meta", - "bis_fnc_diagmacrosmapsize_meta","bis_fnc_diagmacrosnamesound_meta","bis_fnc_diagmacrosverify_meta","bis_fnc_diagmissionpositions_meta","bis_fnc_diagmissionweapons_meta","bis_fnc_diagpreview_meta","bis_fnc_diagpreviewcycle_meta","bis_fnc_diagpreviewvehiclecrew_meta","bis_fnc_diagradio_meta","bis_fnc_diagvehicleicons_meta","bis_fnc_diagwiki_meta","bis_fnc_diaryhints_meta", - "bis_fnc_diarymaps_meta","bis_fnc_didjip_meta","bis_fnc_dirindicator_meta","bis_fnc_dirteffect_meta","bis_fnc_dirto_meta","bis_fnc_disableloading_meta","bis_fnc_disablesaving_meta","bis_fnc_displayclouds_meta","bis_fnc_displaycolorget_meta","bis_fnc_displaycolorset_meta","bis_fnc_displaycontrols_meta","bis_fnc_displayloading_meta","bis_fnc_displaymission_meta","bis_fnc_displayname_meta", - "bis_fnc_displayresize_meta","bis_fnc_distance2d_meta","bis_fnc_distance2dsqr_meta","bis_fnc_dotproduct_meta","bis_fnc_drawao_meta","bis_fnc_drawcuratordeaths_meta","bis_fnc_drawcuratorlocations_meta","bis_fnc_drawcuratorrespawnmarkers_meta","bis_fnc_drawminefields_meta","bis_fnc_drawrespawnpositions_meta","bis_fnc_dynamictext_meta","bis_fnc_earthquake_meta","bis_fnc_effectfired_meta", - "bis_fnc_effectfiredartillery_meta","bis_fnc_effectfiredflares_meta","bis_fnc_effectfiredhelirocket_meta","bis_fnc_effectfiredlongsmoke_meta","bis_fnc_effectfiredrifle_meta","bis_fnc_effectfiredrocket_meta","bis_fnc_effectfiredsmokelauncher_boat_meta","bis_fnc_effectfiredsmokelauncher_meta","bis_fnc_effectkilled_meta","bis_fnc_effectkilledairdestruction_meta", - "bis_fnc_effectkilledairdestructionstage2_meta","bis_fnc_effectkilledsecondaries_meta","bis_fnc_effectplankton_meta","bis_fnc_enablesaving_meta","bis_fnc_endloadingscreen_meta","bis_fnc_endmission_meta","bis_fnc_endmissionserver_meta","bis_fnc_enemydetected_meta","bis_fnc_enemysides_meta","bis_fnc_enemytargets_meta","bis_fnc_error_meta","bis_fnc_errormsg_meta","bis_fnc_establishingshot_meta", - "bis_fnc_estimatedtimeleft_meta","bis_fnc_execfsm_meta","bis_fnc_executestackedeventhandler_meta","bis_fnc_exportcfggroups_meta","bis_fnc_exportcfghints_meta","bis_fnc_exportcfgmagazines_meta","bis_fnc_exportcfgpatches_meta","bis_fnc_exportcfgvehicles_meta","bis_fnc_exportcfgweapons_meta","bis_fnc_exportcuratorcosttable_meta","bis_fnc_exportfunctionstowiki_meta", - "bis_fnc_exportgroupformations_meta","bis_fnc_exportinventory_meta","bis_fnc_exportmaptobitxt_meta","bis_fnc_fadeeffect_meta","bis_fnc_fatigueeffect_meta","bis_fnc_feedbackinit_meta","bis_fnc_feedbackmain_meta","bis_fnc_ffvupdate_meta","bis_fnc_filterstring_meta","bis_fnc_findextreme_meta","bis_fnc_findinpairs_meta","bis_fnc_findnestedelement_meta","bis_fnc_findoverwatch_meta", - "bis_fnc_findsafepos_meta","bis_fnc_finishcuratorchallenge_meta","bis_fnc_fixdate_meta","bis_fnc_flameseffect_meta","bis_fnc_flies_meta","bis_fnc_forcecuratorinterface_meta","bis_fnc_forceend_meta","bis_fnc_formatcuratorchallengeobjects_meta","bis_fnc_fps_meta","bis_fnc_friendlysides_meta","bis_fnc_ftlmanager_meta","bis_fnc_functionmeta_meta","bis_fnc_functionpath_meta", - "bis_fnc_functionsdebug_meta","bis_fnc_gc_meta","bis_fnc_gcinit_meta","bis_fnc_genericsentence_meta","bis_fnc_genericsentenceinit_meta","bis_fnc_geometricmean_meta","bis_fnc_getcfgdata_meta","bis_fnc_getcfgdataarray_meta","bis_fnc_getcfgdatabool_meta","bis_fnc_getcfgdataobject_meta","bis_fnc_getcfgdatapool_meta","bis_fnc_getcfgisclass_meta","bis_fnc_getcfgsubclasses_meta", - "bis_fnc_getfactions_meta","bis_fnc_getfrompairs_meta","bis_fnc_getidc_meta","bis_fnc_getidd_meta","bis_fnc_getlinedist_meta","bis_fnc_getparamvalue_meta","bis_fnc_getpitchbank_meta","bis_fnc_getrespawninventories_meta","bis_fnc_getrespawnmarkers_meta","bis_fnc_getrespawnpositions_meta","bis_fnc_getservervariable_meta","bis_fnc_getturrets_meta","bis_fnc_getunitbyuid_meta", - "bis_fnc_getunitinsignia_meta","bis_fnc_getvirtualbackpackcargo_meta","bis_fnc_getvirtualitemcargo_meta","bis_fnc_getvirtualmagazinecargo_meta","bis_fnc_getvirtualweaponcargo_meta","bis_fnc_greatestnum_meta","bis_fnc_gridtopos_meta","bis_fnc_groupindicator_meta","bis_fnc_groupvehicles_meta","bis_fnc_guibackground_meta","bis_fnc_guieditor_meta","bis_fnc_guieffecttiles_alpha", - "bis_fnc_guieffecttiles_coef","bis_fnc_guieffecttiles_meta","bis_fnc_guigrid_meta","bis_fnc_guigridtoprofile_meta","bis_fnc_guihint_meta","bis_fnc_guimessage_meta","bis_fnc_guinewsfeed_meta","bis_fnc_halo_meta","bis_fnc_halt_meta","bis_fnc_healing_meta","bis_fnc_healtheffects_meta","bis_fnc_helicoptercanfly_meta","bis_fnc_helicopterdamage_meta","bis_fnc_helicoptergethitpoints_meta", - "bis_fnc_helicopterseat_meta","bis_fnc_helicopterseatmove_meta","bis_fnc_helicoptertype_meta","bis_fnc_help_meta","bis_fnc_hudlimits_meta","bis_fnc_importimagelinks_meta","bis_fnc_inanglesector_meta","bis_fnc_incapacitatedeffect_meta","bis_fnc_indicatebleeding_meta","bis_fnc_infotext_meta","bis_fnc_initcuratorattribute_meta","bis_fnc_initdisplay_meta","bis_fnc_initdisplays_meta", - "bis_fnc_initdisplays_prestart","bis_fnc_initexpo_meta","bis_fnc_initintelobject_meta","bis_fnc_initmodules_meta","bis_fnc_initmultiplayer_meta","bis_fnc_initparams_meta","bis_fnc_initplayable_meta","bis_fnc_initrespawn_meta","bis_fnc_initrespawnbackpack_meta","bis_fnc_initvirtualunit_meta","bis_fnc_instring_meta","bis_fnc_instructorfigure_meta","bis_fnc_interpolateweather_meta", - "bis_fnc_intrigger_meta","bis_fnc_inv_meta","bis_fnc_invadd_meta","bis_fnc_invcodetoarray_meta","bis_fnc_invremove_meta","bis_fnc_invslots_meta","bis_fnc_invslotsempty_meta","bis_fnc_invslottype_meta","bis_fnc_invstring_meta","bis_fnc_isbuildingenterable_meta","bis_fnc_iscampaign_meta","bis_fnc_iscurator_meta","bis_fnc_iscuratoreditable_meta","bis_fnc_isdemo_meta", - "bis_fnc_isforcedcuratorinterface_meta","bis_fnc_isinfrontof_meta","bis_fnc_isinsidearea_meta","bis_fnc_isinzoom_meta","bis_fnc_isleapyear_meta","bis_fnc_isloading_meta","bis_fnc_islocalized_meta","bis_fnc_isposblacklisted_meta","bis_fnc_isunitvirtual_meta","bis_fnc_itemtype_meta","bis_fnc_jukebox_meta","bis_fnc_kbcanspeak_meta","bis_fnc_kbcreatedummy_meta", - "bis_fnc_kbisspeaking_meta","bis_fnc_kbmenu_meta","bis_fnc_kbpriority_meta","bis_fnc_kbsentence_meta","bis_fnc_kbskip_meta","bis_fnc_kbtell_meta","bis_fnc_kbtelllocal_meta","bis_fnc_kbtopicconfig_meta","bis_fnc_keycode_meta","bis_fnc_keypointsexport_meta","bis_fnc_keypointsexportfromkml_meta","bis_fnc_kmlimport_meta","bis_fnc_limitsupport_meta","bis_fnc_linearconversion_meta", - "bis_fnc_listcuratorplayers_meta","bis_fnc_listplayers_meta","bis_fnc_livefeed_meta","bis_fnc_livefeedeffects_meta","bis_fnc_livefeedmoduleeffects_meta","bis_fnc_livefeedmoduleinit_meta","bis_fnc_livefeedmodulesetsource_meta","bis_fnc_livefeedmodulesettarget_meta","bis_fnc_livefeedsetsource_meta","bis_fnc_livefeedsettarget_meta","bis_fnc_livefeedterminate_meta","bis_fnc_loadclass_meta", - "bis_fnc_loadentry_meta","bis_fnc_loadfunctions_meta","bis_fnc_loadinventory_meta","bis_fnc_localize_meta","bis_fnc_locationdescription_meta","bis_fnc_locations_meta","bis_fnc_locweaponinfo_meta","bis_fnc_log_meta","bis_fnc_logformat_meta","bis_fnc_loop_meta","bis_fnc_lowestnum_meta","bis_fnc_magnitude_meta","bis_fnc_magnitudesqr_meta","bis_fnc_managecuratoraddons_meta", - "bis_fnc_managecuratorchallenges_meta","bis_fnc_mapsize_meta","bis_fnc_markercreate_meta","bis_fnc_markerparams_meta","bis_fnc_markerpath_meta","bis_fnc_markertotrigger_meta","bis_fnc_markwaypoints_meta","bis_fnc_maxdiffarray_meta","bis_fnc_mirrorcuratorsettings_meta","bis_fnc_miscanim_meta","bis_fnc_missilelaunchpositionfix_meta","bis_fnc_missionconversations_meta", - "bis_fnc_missionconversationslocal_meta","bis_fnc_missionflow_meta","bis_fnc_missionhandlers_meta","bis_fnc_missionrespawntype_meta","bis_fnc_missiontasks_meta","bis_fnc_missiontaskslocal_meta","bis_fnc_missiontimeleft_meta","bis_fnc_moduleai_meta","bis_fnc_moduleammo_meta","bis_fnc_moduleanimals_meta","bis_fnc_modulearsenal_meta","bis_fnc_modulebleedtickets_meta", - "bis_fnc_modulebootcampstage_meta","bis_fnc_modulecas_meta","bis_fnc_modulechat_meta","bis_fnc_modulecombatgetin_meta","bis_fnc_modulecountdown_meta","bis_fnc_modulecovermap_meta","bis_fnc_modulecreatediaryrecord_meta","bis_fnc_modulecreateprojectile_meta","bis_fnc_modulecurator_meta","bis_fnc_modulecuratoraddaddons_meta","bis_fnc_modulecuratoraddcameraarea_meta", - "bis_fnc_modulecuratoraddeditableobjects_meta","bis_fnc_modulecuratoraddeditingarea_meta","bis_fnc_modulecuratoraddeditingareaplayers_meta","bis_fnc_modulecuratoraddicon_meta","bis_fnc_modulecuratoraddpoints_meta","bis_fnc_modulecuratorsetattributes_meta","bis_fnc_modulecuratorsetcamera_meta","bis_fnc_modulecuratorsetcoefs_meta","bis_fnc_modulecuratorsetcostsdefault_meta", - "bis_fnc_modulecuratorsetcostsside_meta","bis_fnc_modulecuratorsetcostsvehicleclass_meta","bis_fnc_modulecuratorseteditingareatype_meta","bis_fnc_modulecuratorsetobjectcost_meta","bis_fnc_moduledamage_meta","bis_fnc_moduledate_meta","bis_fnc_modulediary_meta","bis_fnc_moduledooropen_meta","bis_fnc_moduleeffectsbubbles_meta","bis_fnc_moduleeffectsemittercreator_meta", - "bis_fnc_moduleeffectsfire_meta","bis_fnc_moduleeffectsplankton_meta","bis_fnc_moduleeffectsshells_meta","bis_fnc_moduleeffectssmoke_meta","bis_fnc_moduleendmission_meta","bis_fnc_moduleexecute_meta","bis_fnc_modulefdcpclear_meta","bis_fnc_modulefdcpin_meta","bis_fnc_modulefdcpout_meta","bis_fnc_modulefdfademarker_meta","bis_fnc_modulefdskeetdestruction_meta", - "bis_fnc_modulefdstatsclear_meta","bis_fnc_modulefiringdrill_meta","bis_fnc_modulefriendlyfire_meta","bis_fnc_modulefuel_meta","bis_fnc_modulegenericradio_meta","bis_fnc_modulegroupid_meta","bis_fnc_modulehandle_meta","bis_fnc_modulehealth_meta","bis_fnc_modulehint_meta","bis_fnc_modulehq_meta","bis_fnc_moduleinit_meta","bis_fnc_modulelightning_meta", - "bis_fnc_modulemine_meta","bis_fnc_modulemissionname_meta","bis_fnc_modulemode_meta","bis_fnc_modulemodules_meta","bis_fnc_modulemptypedefense_meta","bis_fnc_modulemptypegamemaster_meta","bis_fnc_modulemptypegroundsupport_meta","bis_fnc_modulemptypegroundsupportbase_meta","bis_fnc_modulemptypesectorcontrol_meta","bis_fnc_modulemptypeseize_meta","bis_fnc_moduleobjective_meta", - "bis_fnc_moduleobjectivefind_meta","bis_fnc_moduleobjectivegetin_meta","bis_fnc_moduleobjectivemove_meta","bis_fnc_moduleobjectiveracecp_meta","bis_fnc_moduleobjectiveracefinish_meta","bis_fnc_moduleobjectiveracestart_meta","bis_fnc_moduleobjectivesector_meta","bis_fnc_moduleobjectivetarget_meta","bis_fnc_modulepositioning_meta","bis_fnc_moduleposter_meta", - "bis_fnc_modulepostprocess_meta","bis_fnc_moduleprojectile_meta","bis_fnc_modulepunishment_meta","bis_fnc_moduleradiochannelcreate_meta","bis_fnc_modulerank_meta","bis_fnc_modulerating_meta","bis_fnc_moduleremotecontrol_meta","bis_fnc_modulerespawninventory_meta","bis_fnc_modulerespawnposition_meta","bis_fnc_modulerespawntickets_meta","bis_fnc_modulerespawnvehicle_meta", - "bis_fnc_modulesavegame_meta","bis_fnc_modulesector_meta","bis_fnc_modulesfx_meta","bis_fnc_moduleshowhide_meta","bis_fnc_modulesimulationmanager_meta","bis_fnc_moduleskill_meta","bis_fnc_moduleskiptime_meta","bis_fnc_moduleslingload_meta","bis_fnc_modulesound_meta","bis_fnc_modulespawnai_meta","bis_fnc_modulespawnaioptions_meta","bis_fnc_modulespawnaipoint_meta", - "bis_fnc_modulespawnaisectortactic_meta","bis_fnc_modulestrategicmapimage_meta","bis_fnc_modulestrategicmapinit_meta","bis_fnc_modulestrategicmapmission_meta","bis_fnc_modulestrategicmapopen_meta","bis_fnc_modulestrategicmaporbat_meta","bis_fnc_moduletaskcreate_meta","bis_fnc_moduletasksetdescription_meta","bis_fnc_moduletasksetdestination_meta","bis_fnc_moduletasksetstate_meta", - "bis_fnc_moduletimemultiplier_meta","bis_fnc_moduletimetrial_meta","bis_fnc_moduletracers_meta","bis_fnc_moduletrident_meta","bis_fnc_moduletriggers_meta","bis_fnc_modulettcpclear_meta","bis_fnc_modulettcpin_meta","bis_fnc_modulettcpout_meta","bis_fnc_modulettcptrigger_meta","bis_fnc_modulettcptriggerbehind_meta","bis_fnc_modulettstatsclear_meta","bis_fnc_moduleunits_meta", - "bis_fnc_moduleunlockarea_meta","bis_fnc_moduleunlockobject_meta","bis_fnc_modulevolume_meta","bis_fnc_moduleweather_meta","bis_fnc_modulezoneprotection_meta","bis_fnc_modulezonerestriction_meta","bis_fnc_monthdays_meta","bis_fnc_moveaction_meta","bis_fnc_movein_meta","bis_fnc_movetorespawnposition_meta","bis_fnc_mpexec_meta","bis_fnc_music_meta","bis_fnc_nearesthelipad_meta", - "bis_fnc_nearestnum_meta","bis_fnc_nearestposition_meta","bis_fnc_nearestroad_meta","bis_fnc_neutralizeunit_meta","bis_fnc_noflyzone_meta","bis_fnc_noflyzonescreate_meta","bis_fnc_noflyzonesexport_meta","bis_fnc_numberdigits_meta","bis_fnc_numbertext_meta","bis_fnc_objectheight_meta","bis_fnc_objectsgrabber_meta","bis_fnc_objectside_meta","bis_fnc_objectsmapper_meta", - "bis_fnc_objecttype_meta","bis_fnc_objectvar_meta","bis_fnc_ondiarychanged_meta","bis_fnc_onend_meta","bis_fnc_onload_meta","bis_fnc_onplayerconnected_meta","bis_fnc_openfieldmanual_meta","bis_fnc_orbataddgroupoverlay_meta","bis_fnc_orbatanimate_meta","bis_fnc_orbatconfigpreview_meta","bis_fnc_orbatgetgroupparams_meta","bis_fnc_orbatopen_meta","bis_fnc_orbatremovegroupoverlay_meta", - "bis_fnc_orbatsetgroupfade_meta","bis_fnc_orbatsetgroupparams_meta","bis_fnc_orbattooltip_meta","bis_fnc_ordinalnumber_meta","bis_fnc_overviewauthor_meta","bis_fnc_overviewdifficulty_meta","bis_fnc_overviewmission_meta","bis_fnc_overviewterrain_meta","bis_fnc_overviewtimetrial_meta","bis_fnc_packstaticweapon_meta","bis_fnc_param_meta","bis_fnc_paramcountdown_meta", - "bis_fnc_paramdaytime_meta","bis_fnc_paramguerfriendly_meta","bis_fnc_paramin_meta","bis_fnc_paramrespawntickets_meta","bis_fnc_paramviewdistance_meta","bis_fnc_paramweather_meta","bis_fnc_parsenumber_meta","bis_fnc_phoneticalword_meta","bis_fnc_pip_meta","bis_fnc_playendmusic_meta","bis_fnc_playername_meta","bis_fnc_playersidefaction_meta","bis_fnc_playmusic_meta","bis_fnc_playsound_meta", - "bis_fnc_playvideo_meta","bis_fnc_posdegtoutm_meta","bis_fnc_posdegtoworld_meta","bis_fnc_position_meta","bis_fnc_postogrid_meta","bis_fnc_posutmtodeg_meta","bis_fnc_preload_meta","bis_fnc_prepareao_meta","bis_fnc_progressloadingscreen_meta","bis_fnc_quotations_meta","bis_fnc_radialred_meta","bis_fnc_radialredout_meta","bis_fnc_radiosetchannel_meta","bis_fnc_radiosetplaylist_meta", - "bis_fnc_radiosettrack_meta","bis_fnc_randomindex_meta","bis_fnc_randomint_meta","bis_fnc_randomnum_meta","bis_fnc_randompos_meta","bis_fnc_randompostrigger_meta","bis_fnc_rankparams_meta","bis_fnc_recompile_meta","bis_fnc_refreshcommmenu_meta","bis_fnc_registercuratorobject_meta","bis_fnc_relativedirto_meta","bis_fnc_relpos_meta","bis_fnc_relposobject_meta","bis_fnc_relscaleddist_meta", - "bis_fnc_removeallscriptedeventhandlers_meta","bis_fnc_removecommmenuitem_meta","bis_fnc_removecuratoricon_meta","bis_fnc_removedestroyedcuratoreditableobjects_meta","bis_fnc_removefrompairs_meta","bis_fnc_removeindex_meta","bis_fnc_removenestedelement_meta","bis_fnc_removerespawninventory_meta","bis_fnc_removerespawnposition_meta","bis_fnc_removescriptedeventhandler_meta", - "bis_fnc_removestackedeventhandler_meta","bis_fnc_removesupportlink_meta","bis_fnc_removevirtualbackpackcargo_meta","bis_fnc_removevirtualitemcargo_meta","bis_fnc_removevirtualmagazinecargo_meta","bis_fnc_removevirtualweaponcargo_meta","bis_fnc_respawnbase_meta","bis_fnc_respawnconfirm_meta","bis_fnc_respawncounter_meta","bis_fnc_respawnendmission_meta","bis_fnc_respawngroup_meta", - "bis_fnc_respawninstant_meta","bis_fnc_respawnmanager_meta","bis_fnc_respawnmenuinventory_meta","bis_fnc_respawnmenuposition_meta","bis_fnc_respawnmenuspectator_meta","bis_fnc_respawnnone_meta","bis_fnc_respawnrounds_meta","bis_fnc_respawnseagull_meta","bis_fnc_respawnside_meta","bis_fnc_respawnspectator_meta","bis_fnc_respawntickets_meta","bis_fnc_respawntimepenalty_meta", - "bis_fnc_respawnwave_meta","bis_fnc_respect_meta","bis_fnc_returnchildren_meta","bis_fnc_returnconfigentry_meta","bis_fnc_returngroupcomposition_meta","bis_fnc_returnnestedelement_meta","bis_fnc_returnparents_meta","bis_fnc_returnvehicleturrets_meta","bis_fnc_romannumeral_meta","bis_fnc_rotatevector2d_meta","bis_fnc_rounddir_meta","bis_fnc_roundnum_meta","bis_fnc_rsclayer_meta", - "bis_fnc_runlater_meta","bis_fnc_sandstorm_meta","bis_fnc_savegame_meta","bis_fnc_saveinventory_meta","bis_fnc_saymessage_meta","bis_fnc_sceneareaclearance_meta","bis_fnc_scenecheckweapons_meta","bis_fnc_scenecreatescenetrigger_meta","bis_fnc_scenecreatesoundentities_meta","bis_fnc_scenegetobjects_meta","bis_fnc_scenegetparticipants_meta","bis_fnc_scenegetpositionbyangle_meta", - "bis_fnc_sceneintruderdetector_meta","bis_fnc_scenemiscstuff_meta","bis_fnc_scenerotate_meta","bis_fnc_scenesetanimationsforgroup_meta","bis_fnc_scenesetbehaviour_meta","bis_fnc_scenesetobjects_meta","bis_fnc_scenesetposformation_meta","bis_fnc_scriptedmove_meta","bis_fnc_scriptedwaypointtype_meta","bis_fnc_secondstostring_meta","bis_fnc_selectcrew_meta","bis_fnc_selectdiarysubject_meta", - "bis_fnc_selectrandom_meta","bis_fnc_selectrandomweighted_meta","bis_fnc_selectrespawntemplate_meta","bis_fnc_setcuratorattributes_meta","bis_fnc_setcuratorcamera_meta","bis_fnc_setcuratorvisionmodes_meta","bis_fnc_setdate_meta","bis_fnc_setfog_meta","bis_fnc_setheight_meta","bis_fnc_setidcstreamfriendly_meta","bis_fnc_setidentity_meta","bis_fnc_setmissionstatusslot_meta", - "bis_fnc_setnestedelement_meta","bis_fnc_setobjectrotation_meta","bis_fnc_setobjecttexture_meta","bis_fnc_setovercast_meta","bis_fnc_setpitchbank_meta","bis_fnc_setppeffecttemplate_meta","bis_fnc_setrank_meta","bis_fnc_setrespawndelay_meta","bis_fnc_setrespawninventory_meta","bis_fnc_setservervariable_meta","bis_fnc_settask_meta","bis_fnc_settasklocal_meta","bis_fnc_settopairs_meta", - "bis_fnc_setunitinsignia_meta","bis_fnc_shakecuratorcamera_meta","bis_fnc_shakegauges_meta","bis_fnc_showcuratorattributes_meta","bis_fnc_showcuratorfeedbackmessage_meta","bis_fnc_showmarkers_meta","bis_fnc_showmissionstatus_meta","bis_fnc_shownotification_meta","bis_fnc_showrespawnmenu_meta","bis_fnc_showtime_meta","bis_fnc_showunitinfo_meta","bis_fnc_shutdown_meta","bis_fnc_sidecolor_meta", - "bis_fnc_sideid_meta","bis_fnc_sidename_meta","bis_fnc_sidetype_meta","bis_fnc_singlemissionconfig_meta","bis_fnc_singlemissionkeys_meta","bis_fnc_singlemissionname_meta","bis_fnc_skirmishtrigger_meta","bis_fnc_sortalphabetically_meta","bis_fnc_sortby_meta","bis_fnc_sortnum_meta","bis_fnc_spawn_meta","bis_fnc_spawncrew_meta","bis_fnc_spawnenemy_meta","bis_fnc_spawngroup_meta", - "bis_fnc_spawnobjects_meta","bis_fnc_spawnvehicle_meta","bis_fnc_splitstring_meta","bis_fnc_spotter_meta","bis_fnc_startloadingscreen_meta","bis_fnc_strategicmapanimate_meta","bis_fnc_strategicmapmousebuttonclick_meta","bis_fnc_strategicmapopen_meta","bis_fnc_subclasses_meta","bis_fnc_subselect_meta","bis_fnc_supplydrop_meta","bis_fnc_supplydropservice_meta","bis_fnc_swapvars_meta", - "bis_fnc_synchronizedobjects_meta","bis_fnc_target_meta","bis_fnc_taskattack_meta","bis_fnc_taskchildren_meta","bis_fnc_taskcompleted_meta","bis_fnc_taskcreate_meta","bis_fnc_taskcurrent_meta","bis_fnc_taskdefend_meta","bis_fnc_taskdescription_meta","bis_fnc_taskdestination_meta","bis_fnc_taskexists_meta","bis_fnc_taskhandler_meta","bis_fnc_taskhint_meta","bis_fnc_taskparent_meta", - "bis_fnc_taskpatrol_meta","bis_fnc_taskreal_meta","bis_fnc_tasksetcurrent_meta","bis_fnc_tasksetdescription_meta","bis_fnc_tasksetdestination_meta","bis_fnc_tasksetstate_meta","bis_fnc_taskstate_meta","bis_fnc_tasksunit_meta","bis_fnc_taskvar_meta","bis_fnc_teamcolor_meta","bis_fnc_terraingradangle_meta","bis_fnc_texttiles_meta","bis_fnc_texturemarker_meta","bis_fnc_texturevehicleicon_meta", - "bis_fnc_threat_meta","bis_fnc_timetostring_meta","bis_fnc_titlecard_meta","bis_fnc_titletext_meta","bis_fnc_togglecuratorvisionmode_meta","bis_fnc_toupperdisplaytexts_meta","bis_fnc_tracebullets_meta","bis_fnc_trackmissiontime_meta","bis_fnc_transportservice_meta","bis_fnc_tridentclient_meta","bis_fnc_tridentexecute_meta","bis_fnc_tridentgetrelationship_meta", - "bis_fnc_tridenthandledamage_meta","bis_fnc_tridentsetrelationship_meta","bis_fnc_triggertomarker_meta","bis_fnc_trimstring_meta","bis_fnc_typetext2_meta","bis_fnc_typetext_meta","bis_fnc_uniqueclasses_meta","bis_fnc_unitaddon_meta","bis_fnc_unitcapture_meta","bis_fnc_unitcapturefiring_meta","bis_fnc_unitcapturesimple_meta","bis_fnc_unitplay_meta","bis_fnc_unitplayfiring_meta", - "bis_fnc_unitplaysimple_meta","bis_fnc_unitvector_meta","bis_fnc_unpackstaticweapon_meta","bis_fnc_updateplayerarray_meta","bis_fnc_validateparametersoo_meta","bis_fnc_variablespaceadd_meta","bis_fnc_variablespaceremove_meta","bis_fnc_vectoradd_meta","bis_fnc_vectordiff_meta","bis_fnc_vectorfromxtoy_meta","bis_fnc_vectormultiply_meta","bis_fnc_vehicleroles_meta","bis_fnc_version_meta", - "bis_fnc_vrcourseballistics1_meta","bis_fnc_vrcourseballistics2_meta","bis_fnc_vrcourseballistics3_meta","bis_fnc_vrcourseballistics4_meta","bis_fnc_vrcoursecommandingactions1_meta","bis_fnc_vrcoursecommandingactions2_meta","bis_fnc_vrcoursecommandingactions3_meta","bis_fnc_vrcoursecommandingbehaviour1_meta","bis_fnc_vrcoursecommandingbehaviour2_meta", - "bis_fnc_vrcoursecommandingbehaviour3_meta","bis_fnc_vrcoursecommandingmovement1_meta","bis_fnc_vrcoursecommandingmovement2_meta","bis_fnc_vrcoursecommandingvehicles1_meta","bis_fnc_vrcoursecommandingvehicles2_meta","bis_fnc_vrcoursecommandingvehicles3_meta","bis_fnc_vrcourseheliadvanced1_meta","bis_fnc_vrcourseheliadvanced2_meta","bis_fnc_vrcourseheliadvanced3_meta", - "bis_fnc_vrcourseheliadvanced4_meta","bis_fnc_vrcourseheliadvanced5_meta","bis_fnc_vrcourseheliadvanced6_meta","bis_fnc_vrcoursehelibasics1_meta","bis_fnc_vrcoursehelibasics2_meta","bis_fnc_vrcoursehelibasics3_meta","bis_fnc_vrcoursehelislingload1_meta","bis_fnc_vrcourseheliweapons1_meta","bis_fnc_vrcourseheliweapons2_meta","bis_fnc_vrcourseheliweapons3_meta", - "bis_fnc_vrcourseheliweapons4_meta","bis_fnc_vrcourselaunchers1_meta","bis_fnc_vrcourselaunchers2_meta","bis_fnc_vrcourselaunchers3_meta","bis_fnc_vrcourseplaceables1_meta","bis_fnc_vrcourseplaceables2_meta","bis_fnc_vrcourseplaceables3_meta","bis_fnc_vrcoursetargetdesignation1_meta","bis_fnc_vrcoursetargetdesignation2_meta","bis_fnc_vrcoursetargetdesignation3_meta", - "bis_fnc_vrdrawborder_meta","bis_fnc_vrdrawgrid_meta","bis_fnc_vreffectkilled_meta","bis_fnc_vrfadein_meta","bis_fnc_vrfadeout_meta","bis_fnc_vrspawneffect_meta","bis_fnc_vrspawnselector_meta","bis_fnc_vrtimer_meta","bis_fnc_weaponaddon_meta","bis_fnc_weaponcomponents_meta","bis_fnc_worldarea_meta","bis_fnc_wpartillery_meta","bis_fnc_wpland_meta","bis_fnc_wppatrol_meta", - "bis_fnc_wprelax_meta","bis_fnc_wpsuppress_meta","bis_fnc_zzrotate_meta","bis_functions_list","bis_functions_listpostinit","bis_functions_listpreinit","bis_functions_listrecompile","bis_initgame","bis_mainmenu_islearnexpanded","bis_mainmenu_isoptionsexpanded","bis_mainmenu_isplayexpanded","bis_rscdisplayloading_selecteddlcappid","bis_shownchat","bis_fnc_easeout", - "bis_fnc_richcurve_setorientationmode","bis_fnc_scaleandtranslate","bis_fnc_timeline_getcurrenttime","bis_fnc_richcurve_getpreviouskey","bis_fnc_richcurve_edencomputenearestsegment","bis_fnc_timeline_cleanup","bis_fnc_timeline_isplaying","bis_fnc_key_getleavecontrolpoint","bis_fnc_camera_getfov","bis_fnc_timeline_gettimeleft","bis_fnc_zoomlock","bis_fnc_vectordivide", - "bis_fnc_timeline_edenconnectionchanged","bis_fnc_controlpoint_edenconnectionchanged","bis_fnc_bounceinout","bis_fnc_richcurve_edendrawcurve3d","bis_fnc_clerp","bis_fnc_controlpoint_edenregisteredtoworld","bis_fnc_changecolormarker","bis_fnc_modulecivilianpresencesafespot","bis_fnc_key_edenconnectionchanged","bis_fnc_3den_init","bis_fnc_key_setvalue","bis_fnc_controlpoint_edendragged", - "bis_fnc_quinticout","bis_fnc_key_edenregisteredtoworld","bis_fnc_camera_edenattributeschanged","bis_fnc_3den_onselectionchange","bis_fnc_key_getownercurve","bis_fnc_timeline_getstoptime","bis_fnc_zoomunlock","bis_fnc_key_isvector","bis_fnc_timeline_edendeleted","bis_fnc_camera_edeninit","bis_fnc_richcurve_getkeysattime","bis_fnc_key_setarrivetangentweight","bis_fnc_zoomonarea","bis_fnc_isequalvector", - "bis_fnc_richcurve_edendrawcontrolpoints3d","bis_fnc_bounceout","bis_fnc_quinticinoutvector","bis_fnc_3den_onmissionload","bis_fnc_rotatemarker","bis_fnc_timeline_edenisselected","bis_fnc_timeline_setloop","bis_fnc_timeline_edeninit","bis_fnc_timeline_isfinished","bis_fnc_timeline_setlength","bis_fnc_richcurve_edentick","bis_fnc_interpolatevectorconstant","bis_fnc_mapanimdone", - "bis_fnc_richcurve_computecurvearclength","bis_fnc_timeline_getposition","bis_fnc_richcurve_getnextkey","bis_fnc_key_setarrivetangent","bis_fnc_camera_sethudenabled","bis_fnc_controlpoint_isarrive","bis_fnc_timeline_isreverse","bis_fnc_timeline_finish","bis_fnc_controlpoint_setisarrive","bis_fnc_key_getconfigtime","bis_fnc_key_getleavetangent","bis_fnc_richcurve_getcurvelength", - "bis_fnc_deltatime","bis_fnc_mapanimclear","bis_fnc_hermite","bis_fnc_bezierinterpolatevector","bis_fnc_key_setinterpmode","bis_fnc_key_getleavetangentweight","bis_fnc_camera_edenunregisteredfromworld","bis_fnc_timeline_setreverse","bis_fnc_keyframeanimation_init","bis_fnc_timeline_stop","bis_fnc_key_isfloat","bis_fnc_timeline_deleted","bis_fnc_controlpoint_compute","bis_fnc_simplemovemarker", - "bis_fnc_timeline_simulatecurves","bis_fnc_camera_setvisionmode","bis_fnc_berpvector","bis_fnc_hidemarker","bis_fnc_encodeflags4","bis_fnc_camera_setcinemabordersenabled","bis_fnc_clamp","bis_fnc_encodeflags8","bis_fnc_timeline_setposition","bis_fnc_richcurve_gettimerange","bis_fnc_richcurve_edenattributeschanged","bis_fnc_initmodules_ambient","bis_fnc_quinticin","bis_fnc_controlpoint_computeownerkey", - "bis_fnc_timeline_islooping","bis_fnc_camera_getcam","bis_fnc_berp","bis_fnc_camera_edenselectionchanged","bis_fnc_clampvector","bis_fnc_timeline_getplayrate","bis_fnc_richcurve_edenisselected","bis_fnc_resizemarker","bis_fnc_findlookat","bis_fnc_key_getvalue","bis_fnc_3den_onkeyup","bis_fnc_richcurve_edenbakecurve3d","bis_fnc_zoomlockeh","bis_fnc_pow","bis_fnc_eventtimeline", - "bis_fnc_modulecivilianpresenceunit","bis_fnc_movemarker","bis_fnc_timeline_ispaused","bis_fnc_interpolateconstant","bis_fnc_key_setleavetangent","bis_fnc_hidemarkerarray","bis_fnc_key_setleavetangentweight","bis_fnc_interpolate","bis_fnc_richcurve_computeownertimeline","bis_fnc_richcurve_compute","bis_fnc_richcurve_getkeytime","bis_fnc_shakemap","bis_fnc_controlpoint_edenattributeschanged", - "bis_fnc_timeline_getplaytime","bis_fnc_timeline_edenattributeschanged","bis_fnc_key_computetime","bis_fnc_lookatarray","bis_fnc_timeline_setplayrate","bis_fnc_easeinout","bis_fnc_animatepicture","bis_fnc_key_edenattributeschanged","bis_fnc_blinkmarker","bis_fnc_bounceoutvector","bis_fnc_camera_gethudenabled","bis_fnc_mapanimadd","bis_fnc_timeline_play","bis_fnc_timeline_getlength", - "bis_fnc_easeinoutvector","bis_fnc_camera_setfov","bis_fnc_colormarker","bis_fnc_timeline_getplayfromstart","bis_fnc_key_compute","bis_fnc_showmarkerarray","bis_fnc_createtooltip","bis_fnc_camera_setfocus","bis_fnc_timeline_getalpha","bis_fnc_key_getinterpmode","bis_fnc_camera_deleted","bis_fnc_camera_init","bis_fnc_richcurve_getsimulatedobjects","bis_fnc_timeline_init","bis_fnc_richcurve_getcurvevaluefloat", - "bis_fnc_key_gettime","bis_fnc_richcurve_getfirstkey","bis_fnc_getmarkerstate","bis_fnc_key_edenunregisteredfromworld","bis_fnc_timeline_setinterpmode","bis_fnc_camera_getvisionmode","bis_fnc_key_getarrivetangentweight","bis_fnc_richcurve_getorientationmode","bis_fnc_camera_edenconnectionchanged","bis_fnc_richcurve_computekeys","bis_fnc_camera_tick","bis_fnc_nearestpoint","bis_fnc_camera_edenreset", - "bis_fnc_key_edenarecontrolpointslocked","bis_fnc_richcurve_getlookatposition","bis_fnc_timeline_tick","bis_fnc_key_computeownercurve","bis_fnc_bezierinterpolate","bis_fnc_camera_edenregisteredtoworld","bis_fnc_shakemapeh","bis_fnc_quinticinout","bis_fnc_richcurve_getkeys","bis_fnc_key_edenisselected","bis_fnc_3den_onmissionpreviewend","bis_fnc_missionselector","bis_fnc_richcurve_resetkeyseventstate", - "bis_fnc_richcurve_getkeyindex","bis_fnc_richcurve_computesimulatedobjects","bis_fnc_easeoutvector","bis_fnc_getbordermarkers","bis_fnc_animatedscreen","bis_fnc_richcurve_getcurvepoints","bis_fnc_timeline_edendragged","bis_fnc_richcurve_getownertimeline","bis_fnc_lookatarrayeh","bis_fnc_inverselerp","bis_fnc_3den_onkeydown","bis_fnc_richcurve_getlastkey","bis_fnc_timeline_getsimulatedcurves","bis_fnc_easein", - "bis_fnc_slerp","bis_fnc_controlpoint_edenunregisteredfromworld","bis_fnc_richcurve_istimeinseconds","bis_fnc_quinticinvector","bis_fnc_getmarkers","bis_fnc_key_getarrivetangent","bis_fnc_key_getfov","bis_fnc_bounceinoutvector","bis_fnc_bouncein","bis_fnc_cancelmarker","bis_fnc_decodeflags4","bis_fnc_lerpvector","bis_fnc_richcurve_edenmarkstatedirty","bis_fnc_holdkey","bis_fnc_richcurve_edendragged", - "bis_fnc_decodeflags8","bis_fnc_quinticoutvector","bis_fnc_showmarker","bis_fnc_key_edendragged","bis_fnc_key_settime","bis_fnc_controlpoint_edenisselected","bis_fnc_camera_edenisselected","bis_fnc_pulsate","bis_fnc_key_getarrivecontrolpoint","bis_fnc_richcurve_getkeyfromindex","bis_fnc_easeinvector","bis_fnc_modulecivilianpresence","bis_fnc_hermitevector","bis_fnc_richcurve_edenconnectionchanged", - "bis_fnc_controlpoint_getownerkey","bis_fnc_richcurve_getcurvevaluevector","bis_fnc_interpolatevector","bis_fnc_camera_getfocus","bis_fnc_bounceinvector","bis_fnc_richcurve_reset","bis_fnc_timeline_setpause","bis_fnc_camera_setcam","bis_fnc_3den_onmissionnew","bis_fnc_richcurve_setkeys","bis_fnc_camera_getcinemabordersenabled","bis_fnc_richcurve_numkeys","bis_fnc_bezierlength","bis_fnc_camera_edendeleted", - "bis_fnc_keyframeanimation_deltatime","bis_fnc_timeline_getinterpmode","bis_fnc_initmodules_keyframeanimation","bis_fnc_randomposintersection","bis_fnc_modulevanguardfob","bis_fnc_animatedbriefing","bis_fnc_reviveisvalidsecure","bis_fnc_modulevanguardobjective","bis_fnc_animatedopening" - }; - - //Life Functions - LIFE_Functions[] = { - "life_fnc_aan","life_fnc_aan_meta","life_fnc_acctype","life_fnc_acctype_meta","life_fnc_actionkeyhandler","life_fnc_actionkeyhandler_meta","life_fnc_addvehicle2chain","life_fnc_addvehicle2chain_meta","life_fnc_admincompensate","life_fnc_admincompensate_meta","life_fnc_admindebugcon","life_fnc_admindebugcon_meta","life_fnc_adminfreeze","life_fnc_adminfreeze_meta", - "life_fnc_admingetid","life_fnc_admingetid_meta","life_fnc_admingodmode","life_fnc_admingodmode_meta","life_fnc_adminid","life_fnc_adminid_meta","life_fnc_admininfo","life_fnc_admininfo_meta","life_fnc_adminmarkers","life_fnc_adminmarkers_meta","life_fnc_adminmenu","life_fnc_adminmenu_meta","life_fnc_adminquery","life_fnc_adminquery_meta","life_fnc_adminspectate", - "life_fnc_adminspectate_meta","life_fnc_adminteleport","life_fnc_adminteleport_meta","life_fnc_admintphere","life_fnc_admintphere_meta","life_fnc_animsync","life_fnc_animsync_meta","life_fnc_arrestaction","life_fnc_arrestaction_meta","life_fnc_atmmenu","life_fnc_atmmenu_meta","life_fnc_bankdeposit","life_fnc_bankdeposit_meta","life_fnc_banktransfer", - "life_fnc_banktransfer_meta","life_fnc_bankwithdraw","life_fnc_bankwithdraw_meta","life_fnc_blastingcharge","life_fnc_blastingcharge_meta","life_fnc_boltcutter","life_fnc_boltcutter_meta","life_fnc_bountyreceive","life_fnc_bountyreceive_meta","life_fnc_broadcast","life_fnc_broadcast_meta","life_fnc_buyclothes","life_fnc_buyclothes_meta","life_fnc_buyhouse", - "life_fnc_buyhouse_meta","life_fnc_buyhousegarage","life_fnc_buyhousegarage_meta","life_fnc_buylicense","life_fnc_buylicense_meta","life_fnc_calweightdiff","life_fnc_calweightdiff_meta","life_fnc_capturehideout","life_fnc_capturehideout_meta","life_fnc_catchfish","life_fnc_catchfish_meta","life_fnc_catchturtle","life_fnc_catchturtle_meta","life_fnc_cellphone", - "life_fnc_cellphone_meta","life_fnc_checkmap","life_fnc_checkmap_meta","life_fnc_changeclothes","life_fnc_changeclothes_meta","life_fnc_chopshopmenu","life_fnc_chopshopmenu_meta","life_fnc_chopshopselection","life_fnc_chopshopselection_meta","life_fnc_chopshopsell","life_fnc_chopshopsell_meta","life_fnc_chopShopSold","life_fnc_chopShopSold_meta","life_fnc_civmarkers","life_fnc_civmarkers_meta", - "life_fnc_clearvehicleammo","life_fnc_clearvehicleammo_meta","life_fnc_clothingfilter","life_fnc_clothingfilter_meta","life_fnc_clothingmenu","life_fnc_clothingmenu_meta","life_fnc_colorvehicle","life_fnc_colorvehicle_meta","life_fnc_containerinvsearch","life_fnc_containerinvsearch_meta","life_fnc_containermenu","life_fnc_containermenu_meta","life_fnc_copbreakdoor", - "life_fnc_copbreakdoor_meta","life_fnc_cophouseowner","life_fnc_cophouseowner_meta","life_fnc_copinteractionmenu","life_fnc_copinteractionmenu_meta","life_fnc_coplights","life_fnc_coplights_meta","life_fnc_copmarkers","life_fnc_copmarkers_meta","life_fnc_copsearch","life_fnc_copsearch_meta","life_fnc_copsiren", - "life_fnc_copsiren_meta","life_fnc_copsplit","life_fnc_copsplit_meta","life_fnc_corpse","life_fnc_corpse_meta","life_fnc_creategang","life_fnc_creategang_meta","life_fnc_deathscreen","life_fnc_deathscreen_meta","life_fnc_defusekit","life_fnc_defusekit_meta","life_fnc_demochargetimer","life_fnc_demochargetimer_meta","life_fnc_devicemine","life_fnc_devicemine_meta", - "life_fnc_displayhandler","life_fnc_displayhandler_meta","life_fnc_dooranimate","life_fnc_dooranimate_meta","life_fnc_dpfinish","life_fnc_dpfinish_meta","life_fnc_dropfishingnet","life_fnc_dropfishingnet_meta","life_fnc_dropitems","life_fnc_dropitems_meta","life_fnc_ongameinterrupt","life_fnc_ongameinterrupt_meta","life_fnc_escortaction","life_fnc_escortaction_meta", - "life_fnc_fedcamdisplay","life_fnc_fedcamdisplay_meta","life_fnc_fetchcfgdetails","life_fnc_fetchcfgdetails_meta","life_fnc_fetchdeadgear","life_fnc_fetchdeadgear_meta","life_fnc_fetchvehinfo","life_fnc_fetchvehinfo_meta","life_fnc_flashbang","life_fnc_flashbang_meta","life_fnc_freezeplayer","life_fnc_freezeplayer_meta","life_fnc_fuellbchange","life_fnc_fuellbchange_meta", - "life_fnc_fuelrefuelcar","life_fnc_fuelrefuelcar_meta","life_fnc_fuelstatopen","life_fnc_fuelstatopen_meta","life_fnc_fuelstore","life_fnc_fuelstore_meta","life_fnc_fuelsupply","life_fnc_fuelsupply_meta","life_fnc_gangcreated","life_fnc_gangcreated_meta","life_fnc_usegangbank","life_fnc_usegangbank_meta","life_fnc_gangdisband","life_fnc_gangdisband_meta","life_fnc_gangdisbanded", - "life_fnc_gangdisbanded_meta","life_fnc_ganginvite","life_fnc_ganginvite_meta","life_fnc_ganginviteplayer","life_fnc_ganginviteplayer_meta","life_fnc_gangkick","life_fnc_gangkick_meta","life_fnc_gangleave","life_fnc_gangleave_meta","life_fnc_gangmenu","life_fnc_gangmenu_meta","life_fnc_gangnewleader","life_fnc_gangnewleader_meta","life_fnc_gangupgrade","life_fnc_gangupgrade_meta", - "life_fnc_gangbankresponse","life_fnc_gangbankresponse_meta","life_fnc_garagelbchange","life_fnc_garagelbchange_meta","life_fnc_garagerefund","life_fnc_garagerefund_meta","life_fnc_gather","life_fnc_gather_meta","life_fnc_getbuildingpositions","life_fnc_getbuildingpositions_meta","life_fnc_getdpmission","life_fnc_getdpmission_meta","life_fnc_givediff","life_fnc_givediff_meta","life_fnc_giveitem", - "life_fnc_giveitem_meta","life_fnc_givemoney","life_fnc_givemoney_meta","life_fnc_gutanimal","life_fnc_gutanimal_meta","life_fnc_handledamage","life_fnc_handledamage_meta","life_fnc_handleinv","life_fnc_handleinv_meta","life_fnc_handleitem","life_fnc_handleitem_meta","life_fnc_healhospital","life_fnc_healhospital_meta","life_fnc_hideobj","life_fnc_hideobj_meta","life_fnc_houseconfig", - "life_fnc_houseconfig_meta","life_fnc_housemenu","life_fnc_housemenu_meta","life_fnc_hudupdate","life_fnc_hudupdate_meta","life_fnc_impoundaction","life_fnc_impoundaction_meta","life_fnc_impoundmenu","life_fnc_impoundmenu_meta","life_fnc_initciv","life_fnc_initciv_meta","life_fnc_initcop","life_fnc_initcop_meta","life_fnc_initgang", - "life_fnc_initgang_meta","life_fnc_inithouses","life_fnc_inithouses_meta","life_fnc_initmedic","life_fnc_initmedic_meta","life_fnc_inventoryclosed","life_fnc_inventoryclosed_meta","life_fnc_inventoryopened","life_fnc_inventoryopened_meta","life_fnc_isdamaged","life_fnc_isdamaged_meta","life_fnc_isnumeric","life_fnc_isnumeric_meta","life_fnc_isuidactive","life_fnc_isuidactive_meta", - "life_fnc_itemweight","life_fnc_itemweight_meta","life_fnc_jail","life_fnc_jail_meta","life_fnc_jailme","life_fnc_jailme_meta","life_fnc_jailsys","life_fnc_jailsys_meta","life_fnc_jerrycanrefuel","life_fnc_jerrycanrefuel_meta","life_fnc_jerryrefuel","life_fnc_jerryrefuel_meta","life_fnc_jumpfnc","life_fnc_jumpfnc_meta","life_fnc_keydrop","life_fnc_keydrop_meta","life_fnc_keygive", - "life_fnc_keygive_meta","life_fnc_keyhandler","life_fnc_keyhandler_meta","life_fnc_keymenu","life_fnc_keymenu_meta","life_fnc_knockedout","life_fnc_knockedout_meta","life_fnc_knockoutaction","life_fnc_knockoutaction_meta","life_fnc_levelcheck","life_fnc_levelcheck_meta","life_fnc_licensecheck","life_fnc_licensecheck_meta","life_fnc_licensesread","life_fnc_licensesread_meta","life_fnc_lighthouse", - "life_fnc_lighthouse_meta","life_fnc_lighthouseaction","life_fnc_lighthouseaction_meta","life_fnc_loaddeadgear","life_fnc_loaddeadgear_meta","life_fnc_loadgear","life_fnc_loadgear_meta","life_fnc_lockhouse","life_fnc_lockhouse_meta","life_fnc_lockpick","life_fnc_lockpick_meta","life_fnc_lockuphouse","life_fnc_lockuphouse_meta","life_fnc_lockvehicle","life_fnc_lockvehicle_meta","life_fnc_mediclights", - "life_fnc_mediclights_meta","life_fnc_medicmarkers","life_fnc_medicmarkers_meta","life_fnc_medicrequest","life_fnc_medicrequest_meta","life_fnc_medicsiren","life_fnc_medicsiren_meta","life_fnc_medicsirenlights","life_fnc_medicsirenlights_meta","life_fnc_mine","life_fnc_mine_meta","life_fnc_movein","life_fnc_movein_meta","life_fnc_nearatm","life_fnc_nearatm_meta", - "life_fnc_nearestdoor","life_fnc_nearestdoor_meta","life_fnc_nearestobjects","life_fnc_nearestobjects_meta","life_fnc_nearunits","life_fnc_nearunits_meta","life_fnc_newsbroadcast","life_fnc_newsbroadcast_meta","life_fnc_numbertext","life_fnc_numbertext_meta","life_fnc_onfired","life_fnc_onfired_meta","life_fnc_onplayerkilled","life_fnc_onplayerkilled_meta","life_fnc_onplayerrespawn", - "life_fnc_onplayerrespawn_meta","life_fnc_ontakeitem","life_fnc_ontakeitem_meta","life_fnc_openinventory","life_fnc_openinventory_meta","life_fnc_p_changescreen","life_fnc_p_changescreen_meta","life_fnc_p_getscreengroupidc","life_fnc_p_getscreengroupidc_meta","life_fnc_p_handlescreenevent","life_fnc_p_handlescreenevent_meta","life_fnc_p_init","life_fnc_p_init_meta","life_fnc_p_initmainmenu", - "life_fnc_p_initmainmenu_meta","life_fnc_p_onclick","life_fnc_p_onclick_meta","life_fnc_p_oneachframe","life_fnc_p_oneachframe_meta","life_fnc_p_onload","life_fnc_p_onload_meta","life_fnc_p_onmouseenter","life_fnc_p_onmouseenter_meta","life_fnc_p_onmouseexit","life_fnc_p_onmouseexit_meta","life_fnc_p_onunload","life_fnc_p_onunload_meta","life_fnc_p_openmenu","life_fnc_p_openmenu_meta", - "life_fnc_p_updatemenu","life_fnc_p_updatemenu_meta","life_fnc_packupspikes","life_fnc_packupspikes_meta","life_fnc_pardon","life_fnc_pardon_meta","life_fnc_pickaxeuse","life_fnc_pickaxeuse_meta","life_fnc_pickupitem","life_fnc_pickupitem_meta","life_fnc_pickupmoney","life_fnc_pickupmoney_meta","life_fnc_placecontainer","life_fnc_placecontainer_meta","life_fnc_placestorage","life_fnc_placestorage_meta", - "life_fnc_playercount","life_fnc_playercount_meta","life_fnc_playerinbuilding","life_fnc_playerinbuilding_meta","life_fnc_playerskins","life_fnc_playerskins_meta","life_fnc_playertags","life_fnc_playertags_meta","life_fnc_postbail","life_fnc_postbail_meta","life_fnc_postnewsbroadcast","life_fnc_postnewsbroadcast_meta","life_fnc_processaction","life_fnc_processaction_meta","life_fnc_progressbar", - "life_fnc_progressbar_meta","life_fnc_pulloutaction","life_fnc_pulloutaction_meta","life_fnc_pulloutveh","life_fnc_pulloutveh_meta","life_fnc_pushobject","life_fnc_pushobject_meta","life_fnc_putincar","life_fnc_putincar_meta","life_fnc_questiondealer","life_fnc_questiondealer_meta","life_fnc_radar","life_fnc_radar_meta","life_fnc_raidhouse","life_fnc_raidhouse_meta","life_fnc_receiveitem", - "life_fnc_receiveitem_meta","life_fnc_receivemoney","life_fnc_receivemoney_meta","life_fnc_removecontainer","life_fnc_removecontainer_meta","life_fnc_removeitem","life_fnc_removeitem_meta","life_fnc_removelicenses","life_fnc_removelicenses_meta","life_fnc_repairdoor","life_fnc_repairdoor_meta","life_fnc_repairtruck","life_fnc_repairtruck_meta","life_fnc_requestmedic","life_fnc_requestmedic_meta", - "life_fnc_respawned","life_fnc_respawned_meta","life_fnc_restrain","life_fnc_restrain_meta","life_fnc_restrainaction","life_fnc_restrainaction_meta","life_fnc_revealobjects","life_fnc_revealobjects_meta","life_fnc_revived","life_fnc_revived_meta","life_fnc_reviveplayer","life_fnc_reviveplayer_meta","life_fnc_robaction","life_fnc_robaction_meta","life_fnc_robperson","life_fnc_robperson_meta", - "life_fnc_robreceive","life_fnc_robreceive_meta","life_fnc_s_onchar","life_fnc_s_onchar_meta","life_fnc_s_oncheckedchange","life_fnc_s_oncheckedchange_meta","life_fnc_s_onsliderchange","life_fnc_s_onsliderchange_meta","life_fnc_safefix","life_fnc_safefix_meta","life_fnc_safeinventory","life_fnc_safeinventory_meta","life_fnc_safeopen","life_fnc_safeopen_meta","life_fnc_safetake","life_fnc_safetake_meta", - "life_fnc_savegear","life_fnc_savegear_meta","life_fnc_say3d","life_fnc_say3d_meta","life_fnc_searchaction","life_fnc_searchaction_meta","life_fnc_searchclient","life_fnc_searchclient_meta","life_fnc_searchvehaction","life_fnc_searchvehaction_meta","life_fnc_seizeclient","life_fnc_seizeclient_meta","life_fnc_seizeplayeraction", - "life_fnc_seizeplayeraction_meta","life_fnc_sellgarage","life_fnc_sellgarage_meta","life_fnc_sellhouse","life_fnc_sellhouse_meta","life_fnc_sellhousegarage","life_fnc_sellhousegarage_meta","life_fnc_servicechopper","life_fnc_servicechopper_meta","life_fnc_setfuel","life_fnc_setfuel_meta","life_fnc_setmapposition","life_fnc_setmapposition_meta","life_fnc_settexture_meta","life_fnc_settingsmenu", - "life_fnc_settingsmenu_meta","life_fnc_setupactions","life_fnc_setupactions_meta","life_fnc_setupevh","life_fnc_setupevh_meta","life_fnc_simdisable","life_fnc_simdisable_meta","life_fnc_sirenlights","life_fnc_sirenlights_meta","life_fnc_sounddevice","life_fnc_sounddevice_meta","life_fnc_spawnconfirm","life_fnc_spawnconfirm_meta","life_fnc_spawnmenu","life_fnc_spawnmenu_meta","life_fnc_spawnpointcfg", - "life_fnc_spawnpointcfg_meta","life_fnc_spawnpointselected","life_fnc_spawnpointselected_meta","life_fnc_spikestrip","life_fnc_spikestrip_meta","life_fnc_spikestripeffect","life_fnc_spikestripeffect_meta","life_fnc_stopescorting","life_fnc_stopescorting_meta","life_fnc_storagebox","life_fnc_storagebox_meta","life_fnc_storevehicle","life_fnc_storevehicle_meta","life_fnc_storevehicleaction", - "life_fnc_storevehicleaction_meta","life_fnc_startLoadout","life_fnc_startLoadout_meta","life_fnc_stripdownplayer","life_fnc_stripdownplayer_meta","life_fnc_surrender","life_fnc_surrender_meta","life_fnc_survival","life_fnc_survival_meta","life_fnc_tazed","life_fnc_tazed_meta","life_fnc_teleport","life_fnc_teleport_meta","life_fnc_ticketaction","life_fnc_ticketaction_meta","life_fnc_ticketgive", - "life_fnc_ticketgive_meta","life_fnc_ticketpaid","life_fnc_ticketpaid_meta","life_fnc_ticketpay","life_fnc_ticketpay_meta","life_fnc_ticketprompt","life_fnc_ticketprompt_meta","life_fnc_unimpound","life_fnc_unimpound_meta","life_fnc_unrestrain","life_fnc_unrestrain_meta","life_fnc_updateviewdistance","life_fnc_updateviewdistance_meta","life_fnc_useitem","life_fnc_useitem_meta", - "life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta", - "life_fnc_3dpreviewdisplay","life_fnc_3dpreviewdisplay_meta","life_fnc_vehicleshopbuy","life_fnc_vehicleshopbuy_meta","life_fnc_3dpreviewexit","life_fnc_3dpreviewexit_meta","life_fnc_3dpreviewinit","life_fnc_3dpreviewinit_meta","life_fnc_vehicleshoplbchange","life_fnc_vehicleshoplbchange_meta", - "life_fnc_vehicleshopmenu","life_fnc_vehicleshopmenu_meta","life_fnc_vehicleweight","life_fnc_vehicleweight_meta","life_fnc_vehicleweightcfg","life_fnc_vehicleweightcfg_meta","life_fnc_vehinventory","life_fnc_vehinventory_meta","life_fnc_vehinvsearch","life_fnc_vehinvsearch_meta","life_fnc_vehshoplicenses","life_fnc_vehshoplicenses_meta","life_fnc_vehstoreitem","life_fnc_vehstoreitem_meta", - "life_fnc_vehtakeitem","life_fnc_vehtakeitem_meta","life_fnc_vinteractionmenu","life_fnc_vinteractionmenu_meta","life_fnc_virt_buy","life_fnc_virt_buy_meta","life_fnc_virt_menu","life_fnc_virt_menu_meta","life_fnc_virt_sell","life_fnc_virt_sell_meta","life_fnc_virt_update","life_fnc_virt_update_meta","life_fnc_wantedadd","life_fnc_wantedadd_meta","life_fnc_wantedaddp","life_fnc_wantedaddp_meta", - "life_fnc_wantedbounty","life_fnc_wantedbounty_meta","life_fnc_wantedfetch","life_fnc_wantedfetch_meta","life_fnc_wantedgrab","life_fnc_wantedgrab_meta","life_fnc_wantedinfo","life_fnc_wantedinfo_meta","life_fnc_wantedlist","life_fnc_wantedlist_meta","life_fnc_wantedmenu","life_fnc_wantedmenu_meta","life_fnc_wantedperson","life_fnc_wantedperson_meta","life_fnc_wantedpunish","life_fnc_wantedpunish_meta", - "life_fnc_wantedremove","life_fnc_wantedremove_meta","life_fnc_wantedticket","life_fnc_wantedticket_meta","life_fnc_weaponshopaccs","life_fnc_weaponshopaccs_meta","life_fnc_weaponshopbuysell","life_fnc_weaponshopbuysell_meta","life_fnc_weaponshopcfg","life_fnc_weaponshopcfg_meta","life_fnc_weaponshopfilter","life_fnc_weaponshopfilter_meta","life_fnc_weaponshopmags","life_fnc_weaponshopmags_meta", - "life_fnc_weaponshopmenu","life_fnc_weaponshopmenu_meta","life_fnc_weaponshopselection","life_fnc_weaponshopselection_meta","life_fnc_welcomenotification","life_fnc_welcomenotification_meta","life_fnc_whereami","life_fnc_whereami_meta","life_fnc_wiretransfer","life_fnc_wiretransfer_meta","life_fnc_getinman", "life_fnc_getinman_meta","life_fnc_getoutman", "life_fnc_getoutman_meta" - }; - - SERVER_Functions[] = { - "db_fnc_asynccall","db_fnc_bool","db_fnc_insertrequest","db_fnc_mresarray","db_fnc_mresstring","db_fnc_mrestoarray","db_fnc_numbersafe","db_fnc_queryrequest","db_fnc_updatepartial","db_fnc_updaterequest","ton_fnc_addhouse","ton_fnc_addhouse_meta","ton_fnc_cell_adminmsg","ton_fnc_cell_adminmsgall","ton_fnc_cell_emsrequest","ton_fnc_cell_textadmin","ton_fnc_cell_textcop", - "ton_fnc_cell_textmsg","ton_fnc_chopshopsell","ton_fnc_chopshopsell_meta","ton_fnc_cleanup","ton_fnc_cleanup_meta","ton_fnc_cleanuprequest","ton_fnc_cleanuprequest_meta","ton_fnc_clientdisconnect","ton_fnc_clientdisconnect_meta","ton_fnc_clientgangkick","ton_fnc_clientgangleader","ton_fnc_clientgangleft","TON_fnc_clientGangLeft","ton_fnc_clientgetkey","ton_fnc_clientmessage","ton_fnc_federalupdate", - "ton_fnc_federalupdate_meta","ton_fnc_fetchplayerhouses","ton_fnc_fetchplayerhouses_meta","ton_fnc_getid","ton_fnc_getid_meta","ton_fnc_getvehicles","ton_fnc_getvehicles_meta","ton_fnc_housecleanup","ton_fnc_housecleanup_meta","ton_fnc_huntingzone","ton_fnc_huntingzone_meta","ton_fnc_index","ton_fnc_inithouses","ton_fnc_inithouses_meta","ton_fnc_insertgang","ton_fnc_insertgang_meta","ton_fnc_isnumber", - "ton_fnc_keymanagement","ton_fnc_keymanagement_meta","ton_fnc_managesc","ton_fnc_managesc_meta","ton_fnc_pickupaction","ton_fnc_pickupaction_meta","ton_fnc_player_query","ton_fnc_queryplayergang","ton_fnc_queryplayergang_meta","ton_fnc_removegang","ton_fnc_removegang_meta","ton_fnc_sellhouse","ton_fnc_sellhouse_meta","ton_fnc_spawnvehicle", - "ton_fnc_spawnvehicle_meta","ton_fnc_spikestrip","ton_fnc_spikestrip_meta","ton_fnc_terrainsort","ton_fnc_terrainsort_meta","ton_fnc_updategang","ton_fnc_updategang_meta","ton_fnc_updatehousecontainers","ton_fnc_updatehousecontainers_meta","ton_fnc_updatehousetrunk","ton_fnc_updatehousetrunk_meta","ton_fnc_vehiclecreate","ton_fnc_vehiclecreate_meta","ton_fnc_vehicledead","ton_fnc_vehicledead_meta", - "ton_fnc_vehicledelete","ton_fnc_vehicledelete_meta","ton_fnc_vehiclestore","ton_fnc_vehiclestore_meta","ton_fnc_entityrespawned","ton_fnc_entityrespawned_meta","ton_fnc_vehicleanimate","ton_fnc_vehicleanimate_meta" - }; - - SOCK_Functions[] = { - "sock_fnc_dataquery","sock_fnc_dataquery_meta","sock_fnc_insertplayerinfo","sock_fnc_insertplayerinfo_meta","sock_fnc_requestreceived","sock_fnc_requestreceived_meta","sock_fnc_syncdata","sock_fnc_syncdata_meta","sock_fnc_updatepartial","sock_fnc_updatepartial_meta","sock_fnc_updaterequest","sock_fnc_updaterequest_meta" - }; - - DB_Functions[] = { - "db_fnc_asynccall","db_fnc_asynccall_meta","db_fnc_bool","db_fnc_bool_meta","db_fnc_insertrequest","db_fnc_insertrequest_meta","db_fnc_mresarray","db_fnc_mresarray_meta","db_fnc_mresstring","db_fnc_mresstring_meta","db_fnc_mrestoarray","db_fnc_mrestoarray_meta","db_fnc_numbersafe","db_fnc_numbersafe_meta","db_fnc_queryrequest","db_fnc_queryrequest_meta", - "db_fnc_updatepartial","db_fnc_updatepartial_meta","db_fnc_updaterequest","db_fnc_updaterequest_meta" - }; - - - //SpyGlass Functions - SPY_Functions[] = { - "spy_fnc_cookiejar","spy_fnc_cookiejar_meta","spy_fnc_notifyadmins","spy_fnc_notifyadmins_meta","spy_fnc_observe","spy_fnc_observe_meta" - }; - - /* - allowedVariables is a list of variables in-use and their type - When adding a new variable your format should look like this: - [variablename,TYPENAME] i.e: - ["store_shop_vendor","OBJECT"] This is for when you place a new NPC and name it in the editor - */ - allowedVariables[] = { - { "civ_air_2", "OBJECT" }, { "civ_air_1", "OBJECT" }, { "vendor_hospital_3", "OBJECT" }, { "vendor_hospital_2", "OBJECT" }, { "hospital_assis_3", "OBJECT" }, { "hospital_assis_2", "OBJECT" }, { "cop_air_3", "OBJECT" }, { "cop_air_2", "OBJECT" },{ "civ_air_2_3", "OBJECT" }, { "civ_air_2_2", "OBJECT" }, { "atm_hospital_3", "OBJECT" }, { "atm_hospital_2", "OBJECT" }, { "civ_air_1_2", "OBJECT" }, - { "ton_fnc_handleblastingcharge", "CODE" }, { "bis_egspectator_showcamerabuttons", "BOOL" }, { "bis_egspectator_allow3ppcamera", "BOOL" }, { "bis_egspectatorcamera_lights", "ARRAY" }, { "bis_egspectatorcamera_lightson", "BOOL" }, { "bis_egspectator_showcontrolshelper", "BOOL" }, { "bis_egspectator_showlists", "BOOL" }, { "bis_egspectator_viewdistance", "SCALAR" }, { "life_broadcasttimer", "SCALAR" }, - { "bis_egspectator_showheader", "BOOL" }, { "cash", "SCALAR" }, { "life_action_spikestripdeploy", "SCALAR" }, { "rscegspectator_lastticktime", "SCALAR" }, { "bis_pp_burndamage", "ARRAY" }, { "life_safeobj", "OBJECT" }, { "life_dp_point", "OBJECT" }, { "life_dp_start", "OBJECT" }, { "bis_fnc_diagmacrossimpleobject", "CODE" }, { "bis_fnc_groupfromnetid", "CODE" }, { "bis_fnc_tasktype", "CODE" }, - { "bis_fnc_tasksetalwaysvisible", "CODE" }, { "bis_fnc_tasktypeicon", "CODE" }, { "bis_fnc_tasksettype", "CODE" }, { "bis_fnc_objectfromnetid", "CODE" }, { "bis_fnc_sunrisesunsettime", "CODE" }, { "bis_fnc_netid", "CODE" }, { "bis_fnc_getarea", "CODE" }, { "bis_fnc_taskalwaysvisible", "CODE" }, { "life_markers_vehicles", "ARRAY" }, { "life_markers_players", "ARRAY" }, - { "advanced_log", "STRING" }, { "money_log", "STRING" }, { "life_markers_Vehicles", "ARRAY" }, { "life_markers_Players", "ARRAY" }, { "life_vinact_curtarget", "OBJECT" }, { "life_ticket_cop", "OBJECT" }, { "life_ticket_unit", "OBJECT" }, { "life_ticket_val", "SCALAR" }, { "life_ticket_paid", "BOOL" }, { "life_boltcutter_uses", "SCALAR" }, { "life_pinact_container", "OBJECT" }, - { "luce_1", "SCRIPT" }, { "life_bail_amount", "SCALAR" }, { "life_canpay_bail", "BOOL" }, { "hc_life", "SCALAR" }, { "life_fnc_requestclientid", "OBJECT" }, { "life_hc_isactive", "BOOL" }, { "ton_fnc_playtime_values", "ARRAY" }, { "ton_fnc_playtime_values_request", "ARRAY" }, { "hc_1", "OBJECT" }, { "hc_life", "BOOL" }, { "rscdisplaympinterrupt_respawntime", "SCALAR" }, { "bis_dynamictext_spawn_8", "SCRIPT" }, - { "life_my_gang", "OBJECT" }, {"am_exit","SCALAR"}, { "life_garage_sp", "ARRAY" }, { "life_garage_sp", "STRING" }, { "0", "ARRAY" }, { "life_oldvestitems", "ARRAY" }, { "life_shop_cam", "OBJECT" }, { "life_oldclothes", "STRING" }, { "life_cmenu_lock", "BOOL" }, { "life_oldhat", "STRING" }, { "life_oldvest", "STRING" }, { "life_oldglasses", "STRING" }, { "life_oldbackpackitems","ARRAY"}, - {"life_oldbackpack","STRING"}, { "rscnotification_data", "ARRAY" }, { "life_curwep_h", "STRING" }, { "carshop_lux_1", "OBJECT" }, { "life_olduniformitems", "ARRAY" }, { "bis_fnc_setvehiclemass_fsm", "SCALAR" }, { "life_3dPreview_light", "OBJECT" }, { "life_3dPreview_camera", "OBJECT" }, { "life_3dPreview_object", "OBJECT" }, - { "life_pos_attach", "ARRAY" }, { "life_inv_", "SCALAR" }, { "life_markers", "BOOL" }, { "life_markers_active", "BOOL" }, { "life_frozen", "BOOL" }, { "life_inv_rooster", "SCALAR" }, { "station_shop_09", "OBJECT" }, { "station_shop_08", "OBJECT" }, { "station_shop_07", "OBJECT" }, { "station_shop_06", "OBJECT" }, { "station_shop_04", "OBJECT" }, { "life_disable_getout", "BOOL" }, - { "bis_taskenhancements_3d", "BOOL" }, { "life_settings_enablenewsbroadcast", "BOOL" }, { "life_settings_enablesidechannel", "BOOL" }, { "life_isknocked", "BOOL" }, { "life_settings_viewdistancecar", "SCALAR" }, { "life_save_gear", "ARRAY" }, { "life_settings_viewdistanceair", "SCALAR" }, { "life_disable_getin", "BOOL" }, { "life_god", "BOOL" }, { "station_shop_3", "OBJECT" }, { "station_shop_2", "OBJECT" }, - { "station_shop_1", "OBJECT" }, { "station_shop_24", "OBJECT" }, { "station_shop_23", "OBJECT" }, { "station_shop_22", "OBJECT" }, { "station_shop_21", "OBJECT" }, { "station_shop_20", "OBJECT" }, { "life_settings_viewdistancefoot", "SCALAR" }, { "life_settings_tagson", "BOOL" }, { "station_shop_19", "OBJECT" }, { "bis_taskenhancements_enable", "BOOL" }, { "station_shop_18", "OBJECT" }, { "station_shop_17", "OBJECT" }, - { "life_container_activeobj", "OBJECT" }, { "station_shop_16", "OBJECT" }, { "station_shop_15", "OBJECT" }, { "station_shop_14", "OBJECT" }, { "station_shop_13", "OBJECT" }, { "station_shop_12", "OBJECT" }, { "station_shop_11", "OBJECT" }, { "station_shop_10", "OBJECT" }, { "life_progress", "DISPLAY" }, { "life_veh_shop", "ARRAY" }, { "bis_fnc_feedback_deltadamage", "SCALAR" }, { "life_clothing_store", "STRING" }, - { "life_pinact_curtarget", "OBJECT" }, { "license_cop_cg", "BOOL" }, { "life_blacklisted", "BOOL" }, { "bis_hitarray", "ARRAY" }, { "life_session_time", "BOOL" }, { "jumpactiontime", "SCALAR" }, { "life_paycheck", "SCALAR" }, { "life_adminlevel", "SCALAR" }, { "life_coplevel", "SCALAR" }, { "life_mediclevel", "SCALAR" }, { "rscdisplayloading_progressmission", "BOOL" }, { "dp_missions", "OBJECT" }, - { "life_inv_diamonduncut", "SCALAR" }, { "master_group", "OBJECT" }, { "bis_oldbleedremaining", "SCALAR" }, { "license_civ_marijuana", "BOOL" }, { "life_server_extdb_notloaded", "BOOL" }, { "life_inv_marijuana", "SCALAR" }, { "life_is_arrested", "BOOL" }, { "life_inv_copperunrefined", "SCALAR" }, { "jjjj_mmmm___eeeeeee_spawn_weapon", "CODE" }, { "life_actions", "ARRAY" }, - { "life_firstspawn", "BOOL" }, { "life_action_gathering", "BOOL" }, { "license_civ_trucking", "BOOL" }, { "bis_oldoxygen", "SCALAR" }, { "license_shop", "OBJECT" }, { "bis_pptype", "STRING" }, { "life_inv_redgull", "SCALAR" }, { "bis_deathblur", "SCALAR" }, { "life_inv_roosterraw", "SCALAR" }, { "w_o_o_k_i_e_anti_anti_hax", "CODE" }, { "jxmxe_spunkveh", "CODE" }, - { "life_session_tries", "SCALAR" }, { "life_paycheck", "CODE" }, { "bis_suffcc", "SCALAR" }, { "bis_bleedcc", "SCALAR" }, { "bis_performingdustpp", "BOOL" }, { "e_x_t_a_s_y_car_re", "CODE" }, { "bis_functions_mainscope", "OBJECT" }, { "bis_deathradialblur", "SCALAR" }, { "life_inv_goldbar", "SCALAR" }, { "bis_washit", "BOOL" }, { "life_action_delay", "SCALAR" }, { "reb_1_1", "OBJECT" }, { "jxmxe_spunkair", "CODE" }, - { "life_knockout", "BOOL" }, { "reb_1_2", "OBJECT" }, { "do_nuke", "CODE" }, { "life_inv_salema", "SCALAR" }, { "reb_1_3", "OBJECT" }, { "life_inv_sand", "SCALAR" }, { "life_inv_sheep", "SCALAR" }, { "bis_hitcc", "SCALAR" }, { "bis_add", "BOOL" }, { "life_inv_saltrefined", "SCALAR" }, { "life_inv_tbacon", "SCALAR" }, { "life_adminlevel", "CODE" }, { "life_sidechat", "BOOL" }, { "bis_pulsingfreq", "SCALAR" }, - { "bis_burnwet", "SCALAR" }, { "bis_olddmg", "SCALAR" }, { "w_o_o_k_i_e_fud_anti_anti_hax", "CODE" }, { "bis_alfa", "SCALAR" }, { "license_civ_cement", "BOOL" }, { "life_inv_pickaxe", "SCALAR" }, { "life_inv_hen", "SCALAR" }, { "bis_oldwasburning", "BOOL" }, { "bis_pp_burning", "BOOL" }, { "bis_counter", "SCALAR" }, { "license_civ_cocaine", "BOOL" }, - { "license_civ_sand", "BOOL" }, { "dp_10", "OBJECT" }, { "dp_11", "OBJECT" }, { "life_inv_fuelempty", "SCALAR" }, { "life_inv_defusekit", "SCALAR" }, { "life_garage_sell", "CODE" }, { "dp_12", "OBJECT" }, { "bis_damagefromexplosion", "SCALAR" }, { "life_inv_goatraw", "SCALAR" }, { "dp_13", "OBJECT" }, { "life_coplevel", "CODE" }, { "life_inv_boltcutter", "SCALAR" }, - { "life_inv_henraw", "SCALAR" }, { "dp_14", "OBJECT" }, { "jxmxe_publishvehicle", "CODE" }, { "life_garage_store", "BOOL" }, { "dp_15", "OBJECT" }, { "license_civ_rebel", "BOOL" }, { "life_houses", "ARRAY" }, { "dp_1", "OBJECT" }, { "dp_16", "OBJECT" }, { "life_respawned", "BOOL" }, { "life_inv_oilprocessed", "SCALAR" }, { "life_inv_goat", "SCALAR" }, { "license_civ_diamond", "BOOL" }, { "life_gangdata", "ARRAY" }, - { "dp_2", "OBJECT" }, { "dp_17", "OBJECT" }, { "life_inv_tuna", "SCALAR" }, { "life_donorlevel", "SCALAR" }, { "life_donorlevel", "CODE" }, { "dp_3", "OBJECT" }, { "dp_18", "OBJECT" }, { "bis_respawninprogress", "BOOL" }, { "life_vdfoot", "SCALAR" }, { "dp_4", "OBJECT" }, { "dp_19", "OBJECT" }, { "life_action_inuse", "BOOL" }, { "houses_76561198060146341", "ARRAY" }, { "dp_5", "OBJECT" }, { "bis_helper", "SCALAR" }, - { "jxmxe_spunkveh2", "CODE" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re", "CODE" }, { "life_atmbank", "SCALAR" }, { "life_inv_saltunrefined", "SCALAR" }, { "dp_6", "OBJECT" }, { "mari_processor", "OBJECT" }, { "life_wanted_list", "ARRAY" }, { "dp_7", "OBJECT" }, { "h1_3_1", "OBJECT" }, { "license_med_mair", "BOOL" }, { "dp_8", "OBJECT" }, { "h1_3_2", "OBJECT" }, { "bis_canstartred", "BOOL" }, { "dp_9", "OBJECT" }, - { "h1_3_3", "OBJECT" }, { "coke_processor", "OBJECT" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re_old", "CODE" }, { "life_inv_peach", "SCALAR" }, { "life_hunger", "SCALAR" }, { "cheat0", "BOOL" }, { "bis_engineppreset", "BOOL" }, { "life_use_atm", "BOOL" }, { "license_civ_home", "BOOL" }, { "cheat1", "BOOL" }, { "gang_flag_1", "OBJECT" }, { "life_inv_lockpick", "SCALAR" }, { "life_inv_heroinunprocessed", "SCALAR" }, - { "cheat2", "BOOL" }, { "gang_flag_2", "OBJECT" }, { "life_interrupted", "BOOL" }, { "license_civ_dive", "BOOL" }, { "cheat3", "BOOL" }, { "bank_obj", "OBJECT" }, { "gang_flag_3", "OBJECT" }, { "life_inv_cocaineprocessed", "SCALAR" }, { "cheat4", "BOOL" }, { "paramsarray", "ARRAY" }, { "life_maxweight", "SCALAR" }, { "life_cash", "SCALAR" }, { "life_inv_salemaraw", "SCALAR" }, - { "cheat5", "BOOL" }, { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "cheat7", "BOOL" }, { "life_trunk_vehicle", "OBJECT" }, - { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, - { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, - { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, - { "reb_car_1", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, - { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, - { "bis_applypp7", "BOOL" }, { "life_inv_blastingcharge", "SCALAR" }, { "bis_applypp8", "BOOL" }, { "life_siren_active", "BOOL" }, { "life_spikestrip", "OBJECT" }, { "license_civ_pilot", "BOOL" }, { "bis_deltadmg", "SCALAR" }, { "license_civ_iron", "BOOL" }, { "gang_76561198060146341", "ARRAY" }, { "license_civ_copper", "BOOL" }, { "life_inv_cement", "SCALAR" }, - { "carshop1", "OBJECT" }, { "bis_disttofire", "SCALAR" }, { "life_inv_storagesmall", "SCALAR" }, { "life_inv_storagebig", "SCALAR" }, { "civ_spawn_1", "ARRAY" }, { "life_inv_copperrefined", "SCALAR" }, { "civ_spawn_2", "ARRAY" }, { "bis_unccc", "SCALAR" }, { "life_inv_cannabis", "SCALAR" }, { "license_cop_", "BOOL" }, { "civ_spawn_3", "ARRAY" }, { "carshop4", "OBJECT" }, - { "civ_spawn_4", "ARRAY" }, { "reb_1_3_1", "OBJECT" }, { "reb_1", "OBJECT" }, { "dealer_1", "OBJECT" }, { "dealer_2", "OBJECT" }, { "life_is_processing", "BOOL" }, { "life_inv_glass", "SCALAR" }, { "life_garage_type", "STRING" }, { "dealer_3", "OBJECT" }, { "life_inv_donuts", "SCALAR" }, { "life_bail_paid", "BOOL" }, { "life_inv_ironrefined", "SCALAR" }, { "life_inv_mackerel", "SCALAR" }, - { "db_async_active", "BOOL" }, { "life_removewanted", "BOOL" }, { "life_redgull_effect", "SCALAR" }, { "life_id_playertags", "STRING" }, { "life_delivery_in_progress", "BOOL" }, { "life_inv_ornate", "SCALAR" }, { "fed_bank", "OBJECT" }, { "bis_uncblur", "SCALAR" }, { "life_inv_tunaraw", "SCALAR" }, { "license_civ_medmarijuana", "BOOL" }, { "life_inv_mullet", "SCALAR" }, { "life_vdair", "SCALAR" }, - { "life_inv_diamondcut", "SCALAR" }, { "bis_suffblur", "SCALAR" }, { "license_civ_salt", "BOOL" }, { "life_carryweight", "SCALAR" }, { "life_server_isready", "BOOL" }, { "hq_lt_1", "OBJECT" }, { "life_inv_catsharkraw", "SCALAR" }, { "heroin_processor", "OBJECT" }, { "life_respawn_timer", "SCALAR" }, { "carshop1_2", "OBJECT" }, { "hq_desk_1", "OBJECT" }, { "carshop1_3", "OBJECT" }, - { "bis_blendcoloralpha", "SCALAR" }, { "life_vdcar", "SCALAR" }, { "db_async_extralock", "BOOL" }, { "life_clothing_purchase", "ARRAY" }, { "license_civ_driver", "BOOL" }, { "license_civ_ggst1", "BOOL" }, { "license_civ_ggst2", "BOOL" }, { "license_civ_ggst3", "BOOL" }, { "vhe_fnc_grua", "CODE" }, { "vhe_fnc_initgrua", "CODE" }, { "vhe_fnc_sirenasems", "CODE" }, { "vhe_fnc_sirenas", "CODE" }, { "reb_1_4", "OBJECT" }, - { "ggs_shop", "OBJECT" }, { "reb_helicopter_1", "OBJECT" }, { "reb_helicopter_2", "OBJECT" }, { "life_inv_spikestrip", "SCALAR" }, { "license_civ_heroin", "BOOL" }, { "life_inv_waterbottle", "SCALAR" }, { "bis_oldlifestate", "STRING" }, { "life_inv_ornateraw", "SCALAR" }, { "life_id_revealobjects", "SCALAR" }, { "life_id_playertags", "SCALAR" }, { "h1_3", "OBJECT" }, { "bis_pp_burnparams", "ARRAY" }, - { "life_session_completed", "BOOL" }, { "license_civ_gun", "BOOL" }, { "license_cop_cair", "BOOL" }, { "bis_stackedeventhandlers_oneachframe", "ARRAY" }, { "bis_teamswitched", "BOOL" }, { "life_inv_rabbitraw", "SCALAR" }, { "life_inv_defibrillator", "SCALAR" }, { "life_inv_toolkit", "SCALAR" }, { "life_gear", "ARRAY" }, { "life_istazed", "BOOL" }, { "life_net_dropped", "BOOL"}, - { "life_shop_npc", "OBJECT" }, { "life_shop_type", "STRING" }, { "life_deathcamera", "OBJECT" }, { "life_corpse", "OBJECT" }, { "life_admin_debug", "BOOL" }, { "bis_fnc_camera_target", "OBJECT" }, { "bis_fnc_camera_cam", "OBJECT" }, { "bis_fnc_camera_acctime", "SCALAR" }, { "bis_fnc_shownotification_process", "SCRIPT" }, { "bis_fnc_shownotification_counter", "SCALAR" }, { "bis_fnc_shownotification_queue", "ARRAY" }, - { "life_action_spikestrippickup", "SCALAR" }, { "life_container_active", "BOOL" }, { "life_cur_task", "TASK" }, { "life_cur_task", "OBJECT" }, { "life_enablenewsbroadcast", "BOOL" }, { "life_enablesidechannel", "BOOL" }, { "life_fed_scam", "OBJECT" }, { "life_coprecieve", "OBJECT" }, { "life_chopshop", "STRING" }, {"life_civ_position","ARRAY"}, {"life_is_alive","BOOL"}, {"finishedloop","BOOL"}, {"life_fnc_wantedcrimes","CODE"}, - {"ton_fnc_vehicleupdate","CODE"}, {"ton_fnc_recupkeyforhc","CODE"}, {"ton_fnc_getplaytime","CODE"}, {"ton_fnc_sellhousecontainer","CODE"}, {"ton_fnc_setplaytime","CODE"}, {"life_fnc_wantedprofupdate","CODE"}, {"ton_fnc_deletedbcontainer","CODE"}, {"life_save_civilian_position","BOOL"}, {"ton_fnc_addcontainer","CODE"}, {"ton_fnc_requestclientid","CODE"}, {"life_hideoutbuildings","ARRAY"},{"bis_fnc_initmodules_combatpatrol","GROUP"}, - {"deltatime","SCALAR"}, {"bis_deltatime","SCALAR"}, {"life_storageplacing", "SCRIPT"}, {"bis_fnc_randomposintersection","CODE"}, {"bis_fnc_modulevanguardfob","CODE"}, {"bis_fnc_animatedbriefing","CODE"}, {"bis_fnc_reviveisvalidsecure","CODE"}, {"bis_fnc_modulevanguardobjective","CODE"}, {"bis_fnc_animatedopening","CODE"}, {"bis_fnc_modulevanguardscorepersistence","CODE"}, {"bis_fnc_revivesecureunit","CODE"} - }; - - allowedVariables_UI[] = { - {"rscdisplayinsertmarker","DISPLAY"},{"rscdisplayinventory","DISPLAY"},{"life_oldbackpack","STRING"},{"rscdisplayarcadeunit","DISPLAY"},{"rscstatic_display","DISPLAY"},{"rscdisplayarcademap_layout_2_isidson","BOOL"},{"rscdisplaygameoptions_listtags","CONTROL"},{"rscdisplaygameoptions_showdifficultygroup","CODE"},{"rscdisplaygameoptions_currentvalues","ARRAY"},{"rscdisplaygameoptions_valuecolora","CONTROL"}, - {"rscdisplaygameoptions_valuecolorb","CONTROL"},{"rscdisplaygameoptions_valuecolorg","CONTROL"},{"rscdisplaygameoptions_valuecolorr","CONTROL"},{"rscdisplaygameoptions_buttoncancel","CONTROL"},{"rscdisplaygameoptions_listvariables_lbselchanged","CODE"},{"rscdisplaygameoptions_listpresets_lbselchanged","CODE"},{"rscdisplaygameoptions_display","DISPLAY"},{"rscdisplaygameoptions_buttonok","CONTROL"}, - {"rscdisplayoptionslayout_data","ARRAY"},{"rscdisplaygameoptions_currentnames","ARRAY"},{"rscdisplayconfigure_selectedtab","STRING"},{"rscdisplaygameoptions_preview","CONTROL"},{"rscdisplaycontrolschemes","DISPLAY"},{"rscdisplaygameoptions_sliderposchanged","CODE"},{"rscdisplaygameoptions_buttonok_activated","BOOL"},{"rscdisplaygameoptions_listtags_lbselchanged","CODE"},{"rscdisplayoptionsaudio","DISPLAY"}, - {"rscdisplaygameoptions_buttonok_action","CODE"},{"rscdisplaygameoptions_listpresets","CONTROL"},{"rscdisplaygameoptions_listvariables","CONTROL"},{"rscdisplaygameoptions_previewbackground","CONTROL"},{"rscdisplaygameoptions_slidercolora","CONTROL"},{"rscdisplaygameoptions_slidercolorb","CONTROL"},{"rscdisplaygameoptions_slidercolorg","CONTROL"},{"rscdisplaygameoptions_slidercolorr","CONTROL"}, - {"rscdisplaygameoptions_previewpath","STRING"},{"rscdisplaygameoptions_slidercolorr","CONTROL"},{"rscdisplaygameoptions","DISPLAY"},{"rscdisplayoptionslayout","DISPLAY"},{"rscdisplayconfigureaction","DISPLAY"},{"rscdisplayconfigurecontrollers","DISPLAY"},{"rscdisplaymicsensitivityoptions","DISPLAY"},{"rscdisplayconfigure","DISPLAY"},{"rscdisplayoptionsvideo","DISPLAY"},{"rscdisplayoptionsvideouisize","SCALAR"}, - {"rscmsgbox","DISPLAY"},{"rscdisplaymission_script","CODE"},{"rscdisplayorbat_script","CODE"},{"rscdisplaychooseeditorlayout_script","CODE"},{"rscrespawncounter_script","CODE"},{"rscdisplayteamswitch_script","CODE"},{"rscdisplayremotemissions","DISPLAY"},{"rscdisplayfilter_script","CODE"},{"rscdisplayloading_progress","CONTROL"},{"rscdisplayjoystickschemes_script","CODE"},{"rscdisplayfieldmanual_script","CODE"}, - {"rscdebugconsole_watchsave","ARRAY"},{"rscdisplaymultiplayersetupparameter_script","CODE"},{"rscstanceinfo_script","CODE"},{"rscdebugconsole_execute","CODE"},{"rscdisplaytemplateload_script","CODE"},{"rscdisplaymissionend_script","CODE"},{"rscdiary_playerpos","ARRAY"},{"rscdisplaycustomizecontroller_script","CODE"},{"rscdisplayloading_display","DISPLAY"},{"rscdisplaygameoptions_script","CODE"}, - {"rscdisplaydedicatedserversettings_script","CODE"},{"rscdisplayarcademap_layout_2_script","CODE"},{"rscdisplayfileselectimage_script","CODE"},{"rscdisplaycommunityguide_script","CODE"},{"rscdisplaygarage_script","CODE"},{"rscdisplaypublishmissionselecttags_script","CODE"},{"rscdisplayinterrupt_script","CODE"},{"rscdisplaymultiplayer","DISPLAY"},{"rscdisplaymain_script","CODE"},{"rscdisplayarcademarker_script","CODE"}, - {"rscdisplayinsertmarker_script","CODE"},{"rscdisplayconfigureaction_script","CODE"},{"rscdisplayremotemissions_script","CODE"},{"rscdisplaymovieinterrupt_script","CODE"},{"rscunitinfo_script","CODE"},{"rscdisplayfileselect_script","CODE"},{"life_hud_nametags","DISPLAY"},{"rscdisplaydebriefing_script","CODE"},{"rscslingloadassistant_script","CODE"},{"rscdisplaycampaignselect_script","CODE"}, - {"rsctestcontrolstyles_script","CODE"},{"igui_displays","ARRAY"},{"rscdisplayoptions_script","CODE"},{"rscdisplayhostsettings_script","CODE"},{"rscdisplayoptionslayout_script","CODE"},{"rscdisplaycreatejiraissue_script","CODE"},{"rscadvancedhint_script","CODE"},{"bis_functions_listpreinit","CODE"},{"rscdisplayanimviewer_script","CODE"},{"rscdisplayloading","DISPLAY"},{"rscfiringdrilltime_script","CODE"}, - {"rscdisplayintel_script","CODE"},{"rscdiary_script","CODE"},{"rscdisplayarcadeunit_script","CODE"},{"rscdisplayavterminal_script","CODE"},{"rscdisplayrespawn_script","CODE"},{"loading_classes","ARRAY"},{"rscdebugconsole_watch","CODE"},{"rscdisplaylogin_script","CODE"},{"rscunitinfo","DISPLAY"},{"bis_functions_list","CODE"},{"rscminimap_script","CODE"},{"rscstatic_script","CODE"},{"rscdisplayloading_ran","SCALAR"}, - {"rscdiary","DISPLAY"},{"rscdisplayoptionsvideo_script","CODE"},{"rscdisplayconfigurecontrollers_script","CODE"},{"rscdisplayselectisland_script","CODE"},{"rscdisplayvehiclemsgbox_script","CODE"},{"rscdisplaybootcampmsgbox_script","CODE"},{"rscdisplayarcadeeffects_script","CODE"},{"rscdisplaynone_script","CODE"},{"bis_mainmenu_isplayexpanded","BOOL"},{"rscprocedurevisualization_script","CODE"}, - {"bis_functions_listpostinit","CODE"},{"rscdisplaywelcome_script","CODE"},{"igui_classes","ARRAY"},{"rscdisplaympinterrupt_script","CODE"},{"rscdisplaytemplatesave_script","CODE"},{"gui_classes","ARRAY"},{"rscdisplayremotemissionvoted_script","CODE"},{"rscdisplayhostsettings","DISPLAY"},{"rscdisplayarcadegroup_script","CODE"},{"rscdisplaymultiplayersetupparams_script","CODE"},{"rscdisplayoptionsaudio_script","CODE"}, - {"rscavcamera_script","CODE"},{"rscdisplayscriptinghelp_script","CODE"},{"rscdisplaymultiplayer_script","CODE"},{"rscspectator_script","CODE"},{"rscdisplayarcadesensor_script","CODE"},{"rscfunctionsviewer_script","CODE"},{"bis_mainmenu_isoptionsexpanded","BOOL"},{"bis_displayinterrupt_isoptionsexpanded","BOOL"},{"rscdisplaypassword_script","CODE"},{"rscdisplaymultiplayersetup_script","CODE"}, - {"rscdisplayipaddress_script","CODE"},{"rscfiringdrillcheckpoint_script","CODE"},{"rscdisplaycommon_script","CODE"},{"rscmsgbox3_script","CODE"},{"rscdisplaymissionfail_script","CODE"},{"rscdisplaymultiplayersetup","DISPLAY"},{"playerhud","DISPLAY"},{"rscdisplaympinterrupt","DISPLAY"},{"loading_displays","ARRAY"},{"rscdisplayloading_worldtype","STRING"},{"rscdisplaydlccontentbrowser_script","CODE"}, - {"rscdisplaymain","DISPLAY"},{"rscdisplayfunctionsviewer_script","CODE"},{"rscunitinfo_loop","SCRIPT"},{"rscdisplaypublishmission_script","CODE"},{"rscdisplayinventory_script","CODE"},{"rscdisplaylocweaponinfo_script","CODE"},{"rscestablishingshot_script","CODE"},{"bis_mainmenu_islearnexpanded","BOOL"},{"rscdisplayarcademap_layout_6_script","CODE"},{"rscdisplaymodlauncher_script","CODE"},{"rscdisplayarsenal_script","CODE"}, - {"rscmsgbox_script","CODE"},{"rscdisplayaar_script","CODE"},{"rsctestcontroltypes_script","CODE"},{"rscdisplaycamera_script","CODE"},{"rscdisplayselectsave_script","CODE"},{"bis_shownchat","BOOL"},{"rscdisplaycustomarcade_script","CODE"},{"rsctilesgroup_script","CODE"},{"rscdisplayloading_script","CODE"},{"rscdisplaypurchasenotification_script","CODE"},{"rscstanceinfo","DISPLAY"},{"bis_initgame","BOOL"}, - {"rscdisplaystrategicmap_script","CODE"},{"bis_rscdisplayloading_selecteddlcappid","SCALAR"},{"rscnoise_script","CODE"},{"rscnotification_script","CODE"},{"rscmissionstatus_script","CODE"},{"rscdisplayconfigviewer_script","CODE"},{"rscdisplaydebugpublic_script","CODE"},{"rscdiary_playerpostime","SCALAR"},{"rscdisplayarcademodules_script","CODE"},{"rsccommmenuitems_script","CODE"},{"gui_listlayerslabels","ARRAY"}, - {"gui_displays","ARRAY"},{"rscdisplaysinglemission_script","CODE"},{"rscdisplaynewuser_script","CODE"},{"rscdisplayloading_last","ARRAY"},{"rscdisplayconfigure_script","CODE"},{"rscdisplayarcademap_script","CODE"},{"rscdisplaycontrolschemes_script","CODE"},{"rscdisplayarcadewaypoint_script","CODE"},{"rscdisplaymission","DISPLAY"},{"rscdisplayinterruptrevert_script","CODE"},{"bis_functions_listrecompile","CODE"}, - {"life_sql_id","CODE"},{"rscdisplaydebriefing","DISPLAY"},{"rscdisplaymicsensitivityoptions_script","CODE"},{"rscdiary_playeralpha","SCALAR"} - }; -}; +class SpyGlass { + civSlotNumber = 100; + copSlotNumber = 19; + medSlotNumber = 6; + + /* + Internal functions, sort by what they are. + Please note any functions you add need the functions named defined and the functions meta name which is the functions name + _meta i.e: + "life_fnc_mycoolfunction","life_fnc_mycoolfunction_meta" + */ + //ArmA 3 Functions + BIS_Functions[] = { + "bis_fnc_destroyer01handledamage","bis_fnc_destroyer01inithullnumbers","bis_fnc_effectfiredcruisemissile","bis_fnc_destroyer01playhangardoorsound","bis_fnc_boatrack01init","bis_fnc_destroyer01operatehangardoors","bis_fnc_destroyer01animatehangardoors","bis_fnc_boatrack01actionremove","bis_fnc_3denexportsqf","bis_fnc_boatrack01canexetuteaction","bis_fnc_destroyer01edeninit", + "bis_fnc_destroyer01getshippart","bis_fnc_boatrack01adjustzoffset","bis_fnc_destroyer01edendelete","bis_fnc_boatrack01actionadd","bis_fnc_boatrack01initadjustzoffsets","bis_fnc_destroyer01init","bis_fnc_boatrack01canprogressaction","bis_fnc_destroyer01posupdate","bis_fnc_sethitpointdamage","bis_fnc_selectrespawntemplate_loaded","bis_fnc_animateflag","bis_fnc_advhintformat", + "bis_fnc_storeparamsvalues","bis_fnc_door","bis_fnc_storeparamsvalues_data","bis_fnc_diagobjectperformance","bis_egspectator_allowaiswitch","bis_egspectator_allowfreecamera","bis_egspectator_draw3d","bis_egspectator_entityrespawned","bis_egspectator_initialized","bis_egspectator_showfocusinfo","bis_egspectator_thread","bis_egspectator_unitsiconstodraw","bis_egspectator_whitelistedsides", + "bis_egspectatorcamera_camera","bis_egspectatorcamera_cameramode","bis_egspectatorcamera_deltatime","bis_egspectatorcamera_dirtemp","bis_egspectatorcamera_dummytarget","bis_egspectatorcamera_freecamhastarget","bis_egspectatorcamera_heightmode","bis_egspectatorcamera_isveryfastspeed","bis_egspectatorcamera_lastticktime","bis_egspectatorcamera_manual","bis_egspectatorcamera_pitch", + "bis_egspectatorcamera_targetinvehicle","bis_egspectatorcamera_tick","bis_egspectatorcamera_usesurfacespeed","bis_egspectatorcamera_vision","bis_egspectatorcamera_yaw","bis_egspectatorcamera_zoom","bis_egspectatorcamera_zoomtemp","bis_egspectatordraw3d_drawlocations","bis_fnc_3dcredits","bis_fnc_3dencamera","bis_fnc_3dencontrolshint","bis_fnc_3dendiagcreatelist","bis_fnc_3dendiagfonts", + "bis_fnc_3dendiagmousecontrol","bis_fnc_3dendrawlocations","bis_fnc_3denentitymenu","bis_fnc_3denexportattributes","bis_fnc_3denexportoldsqm","bis_fnc_3denexportterrainbuilder","bis_fnc_3denflashlight","bis_fnc_3dengrid","bis_fnc_3denintel","bis_fnc_3deninterface","bis_fnc_3denlistlocations","bis_fnc_3denmissionpreview","bis_fnc_3denmoduledescription", + "bis_fnc_3dennotification","bis_fnc_3denrevivemode","bis_fnc_3denreviverequireditems","bis_fnc_3denshowmessage","bis_fnc_3denstatusbar","bis_fnc_3dentoolbar","bis_fnc_3dentutorial","bis_fnc_3denvisionmode","bis_fnc_3dmarkers","bis_fnc_aan","bis_fnc_absspeed","bis_fnc_activateaddons","bis_fnc_addclassoo","bis_fnc_addcommmenuitem","bis_fnc_addcuratorareafromtrigger", + "bis_fnc_addcuratorchallenge","bis_fnc_addcuratoricon","bis_fnc_addevidence","bis_fnc_addrespawninventory","bis_fnc_addrespawnposition","bis_fnc_addscore","bis_fnc_addscriptedeventhandler","bis_fnc_addscriptedeventhandler_egspectator_oncameramodechanged","bis_fnc_addscriptedeventhandler_rscdisplayegspectator_mapstatechanged","bis_fnc_addstackedeventhandler", + "bis_fnc_addsupportlink","bis_fnc_addtopairs","bis_fnc_addvirtualbackpackcargo","bis_fnc_addvirtualitemcargo","bis_fnc_addvirtualmagazinecargo","bis_fnc_addvirtualweaponcargo","bis_fnc_addweapon","bis_fnc_adjustsimpleobject","bis_fnc_advhint","bis_fnc_advhintarg","bis_fnc_advhintcall","bis_fnc_advhintcredits","bis_fnc_aligntabs","bis_fnc_allsynchronizedobjects", + "bis_fnc_ambientanim","bis_fnc_ambientanimcombat","bis_fnc_ambientanimgetparams","bis_fnc_ambientblacklist","bis_fnc_ambientblacklistadd","bis_fnc_ambientboats","bis_fnc_ambientflyby","bis_fnc_ambienthelicopters","bis_fnc_ambientplanes","bis_fnc_ambientpostprocess","bis_fnc_animalbehaviour","bis_fnc_animalrandomization","bis_fnc_animalsitespawn", + "bis_fnc_animatetaskwaypoint","bis_fnc_animtype","bis_fnc_animviewer","bis_fnc_areequal","bis_fnc_areequalnotnil","bis_fnc_arefriendly","bis_fnc_arithmeticmean","bis_fnc_arraycompare","bis_fnc_arrayfinddeep","bis_fnc_arrayinsert","bis_fnc_arraypop","bis_fnc_arraypush","bis_fnc_arraypushstack","bis_fnc_arrayshift","bis_fnc_arrayshuffle","bis_fnc_arrayunshift", + "bis_fnc_arsenal","bis_fnc_assignplayerrole","bis_fnc_attachtorelative","bis_fnc_basevehicle","bis_fnc_baseweapon","bis_fnc_basicbackpack","bis_fnc_basictask","bis_fnc_bitflagscheck","bis_fnc_bitflagsflip","bis_fnc_bitflagsset","bis_fnc_bitflagstoarray","bis_fnc_bitflagsunset","bis_fnc_bitwiseand","bis_fnc_bitwisenot","bis_fnc_bitwiseor","bis_fnc_bitwisexor", + "bis_fnc_blackin","bis_fnc_blackout","bis_fnc_bleedtickets","bis_fnc_bloodeffect","bis_fnc_boundingboxcorner","bis_fnc_boundingboxdimensions","bis_fnc_boundingboxmarker","bis_fnc_boundingcircle","bis_fnc_briefinganimate","bis_fnc_briefinginit","bis_fnc_buildingpositions","bis_fnc_call","bis_fnc_callscriptedeventhandler","bis_fnc_camera","bis_fnc_cameraold", + "bis_fnc_camfollow","bis_fnc_cargoturretindex","bis_fnc_changesupportradiochannel","bis_fnc_cinemaborder","bis_fnc_classmagazine","bis_fnc_classweapon","bis_fnc_codeperformance","bis_fnc_colorconfigtorgba","bis_fnc_colorrgbatohtml","bis_fnc_colorrgbatotexture","bis_fnc_colorrgbtohtml","bis_fnc_commsmenucreate","bis_fnc_commsmenutoggleavailability", + "bis_fnc_commsmenutogglevisibility","bis_fnc_compatibleitems","bis_fnc_completedcuratorchallengescount","bis_fnc_conditionalselect","bis_fnc_configextremes","bis_fnc_configpath","bis_fnc_configviewer","bis_fnc_consolidatearray","bis_fnc_controlconfigs","bis_fnc_convertunits","bis_fnc_countdown","bis_fnc_counter","bis_fnc_createlogrecord","bis_fnc_createmenu", + "bis_fnc_createobjectoo","bis_fnc_createsimpleobject","bis_fnc_credits","bis_fnc_credits_movie","bis_fnc_credits_movieconfig","bis_fnc_credits_moviesupport","bis_fnc_crewcount","bis_fnc_crossproduct","bis_fnc_crows","bis_fnc_ctrlfittotextheight","bis_fnc_ctrlsetscale","bis_fnc_ctrltextheight","bis_fnc_curatorattachobject","bis_fnc_curatorattributes", + "bis_fnc_curatorautomatic","bis_fnc_curatorautomaticpositions","bis_fnc_curatorchallengedestroyvehicle","bis_fnc_curatorchallengefindintel","bis_fnc_curatorchallengefireweapon","bis_fnc_curatorchallengegetinvehicle","bis_fnc_curatorchallengeilluminate","bis_fnc_curatorchallengespawnlightning","bis_fnc_curatorhint","bis_fnc_curatorobjectedited","bis_fnc_curatorobjectplaced", + "bis_fnc_curatorobjectregistered","bis_fnc_curatorobjectregisteredtable","bis_fnc_curatorpinged","bis_fnc_curatorrespawn","bis_fnc_curatorsaymessage","bis_fnc_curatorvisionmodes","bis_fnc_curatorwaypointplaced","bis_fnc_customgps","bis_fnc_customgpsvideo","bis_fnc_cutdecimals","bis_fnc_damagechanged","bis_fnc_damagepulsing","bis_fnc_dataterminalanimate", + "bis_fnc_dataterminalcolor","bis_fnc_dbclasscheck","bis_fnc_dbclassid","bis_fnc_dbclassindex","bis_fnc_dbclasslist","bis_fnc_dbclassremove","bis_fnc_dbclassreturn","bis_fnc_dbclassset","bis_fnc_dbconfigpath","bis_fnc_dbimportconfig","bis_fnc_dbimportxml","bis_fnc_dbisclass","bis_fnc_dbisvalue","bis_fnc_dbprint","bis_fnc_dbsymbolclass","bis_fnc_dbsymbolvalue", + "bis_fnc_dbvaluecheck","bis_fnc_dbvalueid","bis_fnc_dbvalueindex","bis_fnc_dbvaluelist","bis_fnc_dbvalueremove","bis_fnc_dbvaluereturn","bis_fnc_dbvalueset","bis_fnc_debugprofile","bis_fnc_decodeflags","bis_fnc_deletecounter","bis_fnc_deleteinventory","bis_fnc_deletetask","bis_fnc_deletevehiclecrew","bis_fnc_destroycity","bis_fnc_diagaar","bis_fnc_diagaarrecord", + "bis_fnc_diagaarrecord_fsm","bis_fnc_diaganim","bis_fnc_diagbulletcam","bis_fnc_diagconfig","bis_fnc_diagfindmissingauthors","bis_fnc_diaghit","bis_fnc_diagjiralink","bis_fnc_diagkey","bis_fnc_diagkeylayout","bis_fnc_diagkeytest","bis_fnc_diagknownastarget","bis_fnc_diagknowntargets","bis_fnc_diagloop","bis_fnc_diagmacros","bis_fnc_diagmacrosauthor", + "bis_fnc_diagmacroseditorpreview","bis_fnc_diagmacrosmapsize","bis_fnc_diagmacrosnamesound","bis_fnc_diagmacrosverify","bis_fnc_diagmissionpositions","bis_fnc_diagmissionweapons","bis_fnc_diagpreview","bis_fnc_diagpreviewcycle","bis_fnc_diagpreviewvehiclecrew","bis_fnc_diagradio","bis_fnc_diagvehicleicons","bis_fnc_diagwiki","bis_fnc_diaryhints","bis_fnc_diarymaps", + "bis_fnc_didjip","bis_fnc_dirindicator","bis_fnc_dirteffect","bis_fnc_dirto","bis_fnc_disableloading","bis_fnc_disablerevive","bis_fnc_disablesaving","bis_fnc_displayclouds","bis_fnc_displaycolorget","bis_fnc_displaycolorset","bis_fnc_displaycontrols","bis_fnc_displayloading","bis_fnc_displaymission","bis_fnc_displayname","bis_fnc_displayresize","bis_fnc_distance2d", + "bis_fnc_distance2dsqr","bis_fnc_doorclose","bis_fnc_doornohandleclose","bis_fnc_doornohandleopen","bis_fnc_dooropen","bis_fnc_dotproduct","bis_fnc_drawao","bis_fnc_drawcuratordeaths","bis_fnc_drawcuratorlocations","bis_fnc_drawcuratorrespawnmarkers","bis_fnc_drawminefields","bis_fnc_drawrespawnpositions","bis_fnc_dynamicgroups","bis_fnc_dynamictext","bis_fnc_earthquake", + "bis_fnc_effectfired","bis_fnc_effectfiredartillery","bis_fnc_effectfiredflares","bis_fnc_effectfiredhelirocket","bis_fnc_effectfiredlongsmoke","bis_fnc_effectfiredrifle","bis_fnc_effectfiredrocket","bis_fnc_effectfiredsmokelauncher","bis_fnc_effectfiredsmokelauncher_boat","bis_fnc_effectkilled","bis_fnc_effectkilledairdestruction","bis_fnc_effectkilledairdestructionstage2", + "bis_fnc_effectkilledsecondaries","bis_fnc_effectplankton","bis_fnc_egobjectivevisualizer","bis_fnc_egobjectivevisualizerdraw","bis_fnc_egspectator","bis_fnc_egspectatorcamera","bis_fnc_egspectatorcamerapreparetarget","bis_fnc_egspectatorcameraresettarget","bis_fnc_egspectatorcamerasettarget","bis_fnc_egspectatorcameratick","bis_fnc_egspectatordraw2d", + "bis_fnc_egspectatordraw3d","bis_fnc_egspectatorgetunitstodraw","bis_fnc_enablesaving","bis_fnc_encodeflags","bis_fnc_endloadingscreen","bis_fnc_endmission","bis_fnc_endmissionserver","bis_fnc_enemydetected","bis_fnc_enemysides","bis_fnc_enemytargets","bis_fnc_error","bis_fnc_errormsg","bis_fnc_errorparamstype","bis_fnc_establishingshot","bis_fnc_estimatedtimeleft", + "bis_fnc_execfsm","bis_fnc_execremote","bis_fnc_executestackedeventhandler","bis_fnc_exp_camp_addtickets","bis_fnc_exp_camp_balancegroup","bis_fnc_exp_camp_checkpoint","bis_fnc_exp_camp_dynamicaiskill","bis_fnc_exp_camp_getcinematicmode","bis_fnc_exp_camp_getplayersgroup","bis_fnc_exp_camp_guidedprojectile","bis_fnc_exp_camp_hasmissionstarted", + "bis_fnc_exp_camp_iff","bis_fnc_exp_camp_initcharacter","bis_fnc_exp_camp_initclasses","bis_fnc_exp_camp_initdifficulty","bis_fnc_exp_camp_lobby","bis_fnc_exp_camp_lobby_clearvars","bis_fnc_exp_camp_lobby_ctrlsetcolor","bis_fnc_exp_camp_lobby_findhost","bis_fnc_exp_camp_lobby_gethostsettings","bis_fnc_exp_camp_lobby_getplayersquadname","bis_fnc_exp_camp_lobby_go", + "bis_fnc_exp_camp_lobby_intro","bis_fnc_exp_camp_lobby_launch","bis_fnc_exp_camp_lobby_loop","bis_fnc_exp_camp_lobby_missioncountdown","bis_fnc_exp_camp_lobby_onload","bis_fnc_exp_camp_lobby_onunload","bis_fnc_exp_camp_lobby_playmissionvideo","bis_fnc_exp_camp_lobby_serverping","bis_fnc_exp_camp_lobby_serverupdate","bis_fnc_exp_camp_lobby_structuredtext", + "bis_fnc_exp_camp_lobby_uimilitarymanager","bis_fnc_exp_camp_lobby_uimissioncountdown","bis_fnc_exp_camp_lobby_uimissionmanager","bis_fnc_exp_camp_lobby_uioverlaymanager","bis_fnc_exp_camp_lobby_uiprogressmanager","bis_fnc_exp_camp_lobby_uisettingsmanager","bis_fnc_exp_camp_lobby_updatehostsettings","bis_fnc_exp_camp_lobby_updateintel", + "bis_fnc_exp_camp_lobby_updatemilitaryefficiency","bis_fnc_exp_camp_lobby_updateplayers","bis_fnc_exp_camp_lobby_updateplayerstatus","bis_fnc_exp_camp_manager","bis_fnc_exp_camp_manager_getstate","bis_fnc_exp_camp_manager_onplayerregistered","bis_fnc_exp_camp_manager_setstate","bis_fnc_exp_camp_manager_triggerevent", + "bis_fnc_exp_camp_playerchecklist","bis_fnc_exp_camp_playsubtitles","bis_fnc_exp_camp_playtimelinevideo","bis_fnc_exp_camp_replacevehicles","bis_fnc_exp_camp_setcinematicmode","bis_fnc_exp_camp_setskill","bis_fnc_exp_camp_sitrep","bis_fnc_exportcfggroups","bis_fnc_exportcfghints","bis_fnc_exportcfgmagazines","bis_fnc_exportcfgpatches","bis_fnc_exportcfgvehicles", + "bis_fnc_exportcfgvehiclesassetdb","bis_fnc_exportcfgweapons","bis_fnc_exportconfighierarchy","bis_fnc_exportcuratorcosttable","bis_fnc_exporteditorpreviews","bis_fnc_exportfunctionstowiki","bis_fnc_exportgroupformations","bis_fnc_exportguibaseclasses","bis_fnc_exportinventory","bis_fnc_exportmaptobitxt","bis_fnc_exportvehicle","bis_fnc_fadeeffect","bis_fnc_fatigueeffect", + "bis_fnc_feedback_allowdeathscreen","bis_fnc_feedback_allowpp","bis_fnc_feedback_blue","bis_fnc_feedback_burningtimer","bis_fnc_feedback_damageblur","bis_fnc_feedback_damagecc","bis_fnc_feedback_damagepp","bis_fnc_feedback_damageradialblur","bis_fnc_feedback_fatigueblur","bis_fnc_feedback_fatiguecc","bis_fnc_feedback_fatiguepp","bis_fnc_feedback_fatigueradialblur", + "bis_fnc_feedback_testhelper","bis_fnc_feedbackinit","bis_fnc_feedbackmain","bis_fnc_feedbackmain_fsm","bis_fnc_ffvupdate","bis_fnc_filterstring","bis_fnc_findallnestedelements","bis_fnc_findextreme","bis_fnc_findinpairs","bis_fnc_findnestedelement","bis_fnc_findoverwatch","bis_fnc_findsafepos","bis_fnc_finishcuratorchallenge","bis_fnc_firesupport", + "bis_fnc_firesupportcluster","bis_fnc_firesupportvirtual","bis_fnc_fixdate","bis_fnc_flameseffect","bis_fnc_flies","bis_fnc_forcecuratorinterface","bis_fnc_forceend","bis_fnc_formatcuratorchallengeobjects","bis_fnc_fps","bis_fnc_friendlysides","bis_fnc_ftlmanager","bis_fnc_functionmeta","bis_fnc_functionpath","bis_fnc_functionsdebug","bis_fnc_garage3den","bis_fnc_garage", + "bis_fnc_gc","bis_fnc_gcinit","bis_fnc_genericsentence","bis_fnc_genericsentenceinit","bis_fnc_geometricmean","bis_fnc_getangledelta","bis_fnc_getcfg","bis_fnc_getcfgdata","bis_fnc_getcfgdataarray","bis_fnc_getcfgdatabool","bis_fnc_getcfgdataobject","bis_fnc_getcfgdatapool","bis_fnc_getcfgisclass","bis_fnc_getcfgsubclasses","bis_fnc_getfactions","bis_fnc_getfrompairs", + "bis_fnc_getidc","bis_fnc_getidd","bis_fnc_getintersectionsundercursor","bis_fnc_getlinedist","bis_fnc_getname","bis_fnc_getnetmode","bis_fnc_getobjectbbd","bis_fnc_getparamvalue","bis_fnc_getpitchbank","bis_fnc_getrespawninventories","bis_fnc_getrespawnmarkers","bis_fnc_getrespawnpositions","bis_fnc_getservervariable","bis_fnc_getturrets","bis_fnc_getunitbyuid", + "bis_fnc_getunitinsignia","bis_fnc_getvehiclecustomization","bis_fnc_getvirtualbackpackcargo","bis_fnc_getvirtualitemcargo","bis_fnc_getvirtualmagazinecargo","bis_fnc_getvirtualweaponcargo","bis_fnc_greatestnum","bis_fnc_gridtopos","bis_fnc_groupindicator","bis_fnc_groupvehicles","bis_fnc_guibackground","bis_fnc_guieditor","bis_fnc_guieffecttiles", + "bis_fnc_guieffecttiles_ppchromaberration","bis_fnc_guigrid","bis_fnc_guigridtoprofile","bis_fnc_guihint","bis_fnc_guimessage","bis_fnc_guinewsfeed","bis_fnc_halo","bis_fnc_halt","bis_fnc_hatchclose","bis_fnc_hatchopen","bis_fnc_healing","bis_fnc_healtheffects","bis_fnc_helicoptercanfly","bis_fnc_helicopterdamage","bis_fnc_helicoptergethitpoints","bis_fnc_helicopterseat", + "bis_fnc_helicopterseatmove","bis_fnc_helicoptertype","bis_fnc_help","bis_fnc_hextorgb","bis_fnc_highlightcontrol","bis_fnc_holdactionadd","bis_fnc_holdactionremove","bis_fnc_hudlimits","bis_fnc_importimagelinks","bis_fnc_inanglesector","bis_fnc_incapacitatedeffect","bis_fnc_indicatebleeding","bis_fnc_infotext","bis_fnc_init","bis_fnc_initammobox", + "bis_fnc_initcuratorattribute","bis_fnc_initdisplay","bis_fnc_initdisplays","bis_fnc_initexpo","bis_fnc_initintelobject","bis_fnc_initlistnboxsorting","bis_fnc_initmodules","bis_fnc_initmodules_animals","bis_fnc_initmodules_audio","bis_fnc_initmodules_chemlights","bis_fnc_initmodules_curator","bis_fnc_initmodules_effects","bis_fnc_initmodules_environment", + "bis_fnc_initmodules_events","bis_fnc_initmodules_firingdrills","bis_fnc_initmodules_flares","bis_fnc_initmodules_groupmodifiers","bis_fnc_initmodules_intel","bis_fnc_initmodules_missionflow","bis_fnc_initmodules_modes","bis_fnc_initmodules_multiplayer","bis_fnc_initmodules_no_category","bis_fnc_initmodules_objectives", + "bis_fnc_initmodules_objectmodifiers","bis_fnc_initmodules_ordnance","bis_fnc_initmodules_respawn","bis_fnc_initmodules_sites","bis_fnc_initmodules_smokeshells","bis_fnc_initmodules_strategicmap","bis_fnc_initmodules_supports","bis_fnc_initmodules_training","bis_fnc_initmultiplayer","bis_fnc_initparams","bis_fnc_initpixelui","bis_fnc_initplayable","bis_fnc_initrespawn", + "bis_fnc_initrespawnbackpack","bis_fnc_initslidervalue","bis_fnc_initvehicle","bis_fnc_initvehiclecrew","bis_fnc_initvehiclekart","bis_fnc_initvirtualunit","bis_fnc_initworldscene","bis_fnc_instring","bis_fnc_instructorfigure","bis_fnc_interpolateweather","bis_fnc_intrigger","bis_fnc_inv","bis_fnc_invadd","bis_fnc_invcodetoarray","bis_fnc_inventoryexists", + "bis_fnc_invremove","bis_fnc_invslots","bis_fnc_invslotsempty","bis_fnc_invslottype","bis_fnc_invstring","bis_fnc_isbuildingenterable","bis_fnc_iscampaign","bis_fnc_iscurator","bis_fnc_iscuratoreditable","bis_fnc_isdemo","bis_fnc_isforcedcuratorinterface","bis_fnc_isinfrontof","bis_fnc_isinsidearea","bis_fnc_isinzoom","bis_fnc_isleapyear","bis_fnc_isloading", + "bis_fnc_islocalized","bis_fnc_isposblacklisted","bis_fnc_isthrowable","bis_fnc_isunitvirtual","bis_fnc_itemtype","bis_fnc_jukebox","bis_fnc_kbcanspeak","bis_fnc_kbcreatedummy","bis_fnc_kbisspeaking","bis_fnc_kbmenu","bis_fnc_kbpriority","bis_fnc_kbsentence","bis_fnc_kbskip","bis_fnc_kbtell","bis_fnc_kbtelllocal","bis_fnc_kbtopicconfig","bis_fnc_keycode","bis_fnc_keyhold", + "bis_fnc_keypointsexport","bis_fnc_keypointsexportfromkml","bis_fnc_kmlimport","bis_fnc_lerp","bis_fnc_limitammunition","bis_fnc_limititems","bis_fnc_limitsupport","bis_fnc_limitweaponitems","bis_fnc_linearconversion","bis_fnc_listcuratorplayers","bis_fnc_listplayers","bis_fnc_livefeed","bis_fnc_livefeedeffects","bis_fnc_livefeedmoduleeffects","bis_fnc_livefeedmoduleinit", + "bis_fnc_livefeedmodulesetsource","bis_fnc_livefeedmodulesettarget","bis_fnc_livefeedsetsource","bis_fnc_livefeedsettarget","bis_fnc_livefeedterminate","bis_fnc_loadclass","bis_fnc_loadentry","bis_fnc_loadfunctions","bis_fnc_loadinventory","bis_fnc_loadvehicle","bis_fnc_localize","bis_fnc_locationdescription","bis_fnc_locations","bis_fnc_lockeddoornohandleopen", + "bis_fnc_lockeddooropen","bis_fnc_locweaponinfo","bis_fnc_log","bis_fnc_logformat","bis_fnc_logformatserver","bis_fnc_loop","bis_fnc_lowestnum","bis_fnc_magnitude","bis_fnc_magnitudesqr","bis_fnc_managecuratoraddons","bis_fnc_managecuratorchallenges","bis_fnc_mapsize","bis_fnc_markercreate","bis_fnc_markerparams","bis_fnc_markerpath","bis_fnc_markertotrigger", + "bis_fnc_markwaypoints","bis_fnc_maxdiffarray","bis_fnc_mirrorcuratorsettings","bis_fnc_miscanim","bis_fnc_missilelaunchpositionfix","bis_fnc_missionconversations","bis_fnc_missionconversationslocal","bis_fnc_missionflow","bis_fnc_missionflow_fsm","bis_fnc_missionhandlers","bis_fnc_missionhandlers_reloads","bis_fnc_missionrespawntype","bis_fnc_missiontasks", + "bis_fnc_missiontaskslocal","bis_fnc_missiontimeleft","bis_fnc_moduleai","bis_fnc_moduleammo","bis_fnc_moduleanimals","bis_fnc_modulearsenal","bis_fnc_modulebleedtickets","bis_fnc_modulebootcampstage","bis_fnc_modulecas","bis_fnc_modulechat","bis_fnc_modulecombatgetin","bis_fnc_modulecountdown","bis_fnc_modulecovermap","bis_fnc_modulecreatediaryrecord", + "bis_fnc_modulecreateprojectile","bis_fnc_modulecurator","bis_fnc_modulecuratoraddaddons","bis_fnc_modulecuratoraddcameraarea","bis_fnc_modulecuratoraddeditableobjects","bis_fnc_modulecuratoraddeditingarea","bis_fnc_modulecuratoraddeditingareaplayers","bis_fnc_modulecuratoraddicon","bis_fnc_modulecuratoraddpoints","bis_fnc_modulecuratorsetattributes", + "bis_fnc_modulecuratorsetcamera","bis_fnc_modulecuratorsetcoefs","bis_fnc_modulecuratorsetcostsdefault","bis_fnc_modulecuratorsetcostsside","bis_fnc_modulecuratorsetcostsvehicleclass","bis_fnc_modulecuratorseteditingareatype","bis_fnc_modulecuratorsetobjectcost","bis_fnc_moduledamage","bis_fnc_moduledate","bis_fnc_modulediary","bis_fnc_moduledooropen", + "bis_fnc_moduleeffectsbubbles","bis_fnc_moduleeffectsemittercreator","bis_fnc_moduleeffectsfire","bis_fnc_moduleeffectsplankton","bis_fnc_moduleeffectsshells","bis_fnc_moduleeffectssmoke","bis_fnc_moduleendmission","bis_fnc_moduleexecute","bis_fnc_modulefdballoonairdestruction","bis_fnc_modulefdballoonwaterdestruction","bis_fnc_modulefdcpclear","bis_fnc_modulefdcpin", + "bis_fnc_modulefdcpout","bis_fnc_modulefdfademarker","bis_fnc_modulefdskeetdestruction","bis_fnc_modulefdstatsclear","bis_fnc_modulefiringdrill","bis_fnc_modulefriendlyfire","bis_fnc_modulefuel","bis_fnc_modulegenericradio","bis_fnc_modulegrenade","bis_fnc_modulegroupid","bis_fnc_modulehandle","bis_fnc_modulehealth","bis_fnc_modulehint","bis_fnc_modulehq", + "bis_fnc_modulehvtinit","bis_fnc_modulehvtobjective","bis_fnc_modulehvtobjectives","bis_fnc_modulehvtobjectivesinstance","bis_fnc_moduleinit","bis_fnc_modulelightning","bis_fnc_modulemine","bis_fnc_modulemissionname","bis_fnc_modulemode","bis_fnc_modulemodules","bis_fnc_modulemptypedefense","bis_fnc_modulemptypegamemaster","bis_fnc_modulemptypegroundsupport", + "bis_fnc_modulemptypegroundsupportbase","bis_fnc_modulemptypesectorcontrol","bis_fnc_modulemptypeseize","bis_fnc_modulenametags","bis_fnc_moduleobjective","bis_fnc_moduleobjectivefind","bis_fnc_moduleobjectivegetin","bis_fnc_moduleobjectivemove","bis_fnc_moduleobjectiveracecp","bis_fnc_moduleobjectiveracefinish","bis_fnc_moduleobjectiveracestart", + "bis_fnc_moduleobjectivesector","bis_fnc_moduleobjectivetarget","bis_fnc_modulepositioning","bis_fnc_moduleposter","bis_fnc_modulepostprocess","bis_fnc_moduleprojectile","bis_fnc_modulepunishment","bis_fnc_moduleradiochannelcreate","bis_fnc_modulerank","bis_fnc_modulerating","bis_fnc_moduleremotecontrol","bis_fnc_modulerespawninventory","bis_fnc_modulerespawnposition", + "bis_fnc_modulerespawntickets","bis_fnc_modulerespawnvehicle","bis_fnc_modulesavegame","bis_fnc_modulesector","bis_fnc_modulesfx","bis_fnc_moduleshowhide","bis_fnc_modulesimulationmanager","bis_fnc_modulesimulationmanager_grab","bis_fnc_modulesiteinit","bis_fnc_moduleskill","bis_fnc_moduleskiptime","bis_fnc_moduleslingload","bis_fnc_modulesound","bis_fnc_modulespawnai", + "bis_fnc_modulespawnaioptions","bis_fnc_modulespawnaipoint","bis_fnc_modulespawnaisectortactic","bis_fnc_modulestrategicmapimage","bis_fnc_modulestrategicmapinit","bis_fnc_modulestrategicmapmission","bis_fnc_modulestrategicmapopen","bis_fnc_modulestrategicmaporbat","bis_fnc_modulesupportsinitprovider","bis_fnc_modulesupportsinitprovidervirtual", + "bis_fnc_modulesupportsinitrequester","bis_fnc_moduletaskcreate","bis_fnc_moduletasksetdescription","bis_fnc_moduletasksetdestination","bis_fnc_moduletasksetstate","bis_fnc_moduletimemultiplier","bis_fnc_moduletimetrial","bis_fnc_moduletracers","bis_fnc_moduletrident","bis_fnc_moduletriggers","bis_fnc_modulettcpclear","bis_fnc_modulettcpin","bis_fnc_modulettcpout", + "bis_fnc_modulettcptrigger","bis_fnc_modulettcptriggerbehind","bis_fnc_modulettstatsclear","bis_fnc_moduleunits","bis_fnc_moduleunlockarea","bis_fnc_moduleunlockobject","bis_fnc_modulevolume","bis_fnc_moduleweather","bis_fnc_modulezoneprotection","bis_fnc_modulezonerestriction","bis_fnc_monthdays","bis_fnc_moveaction","bis_fnc_movein","bis_fnc_movetorespawnposition", + "bis_fnc_mp","bis_fnc_mp_packet","bis_fnc_mpexec","bis_fnc_music","bis_fnc_nearesthelipad","bis_fnc_nearestnum","bis_fnc_nearestposition","bis_fnc_nearestroad","bis_fnc_neutralizeunit","bis_fnc_noflyzone","bis_fnc_noflyzonescreate","bis_fnc_noflyzonesexport","bis_fnc_numberdigits","bis_fnc_numbertext","bis_fnc_objectheight","bis_fnc_objectinventoryanimatedclose", + "bis_fnc_objectinventoryanimatedopen","bis_fnc_objectsgrabber","bis_fnc_objectside","bis_fnc_objectsmapper","bis_fnc_objecttype","bis_fnc_objectvar","bis_fnc_ondiarychanged","bis_fnc_onend","bis_fnc_onload","bis_fnc_onplayerconnected","bis_fnc_openfieldmanual","bis_fnc_orbataddgroupoverlay","bis_fnc_orbatanimate","bis_fnc_orbatconfigpreview","bis_fnc_orbatgetgroupparams", + "bis_fnc_orbatopen","bis_fnc_orbatremovegroupoverlay","bis_fnc_orbatsetgroupfade","bis_fnc_orbatsetgroupparams","bis_fnc_orbattooltip","bis_fnc_ordinalnumber","bis_fnc_overviewauthor","bis_fnc_overviewdifficulty","bis_fnc_overviewmission","bis_fnc_overviewterrain","bis_fnc_overviewtimetrial","bis_fnc_packstaticweapon","bis_fnc_param","bis_fnc_paramcountdown", + "bis_fnc_paramdaytime","bis_fnc_paramguerfriendly","bis_fnc_paramin","bis_fnc_paramrespawntickets","bis_fnc_paramrevivebleedoutduration","bis_fnc_paramreviveduration","bis_fnc_paramreviveforcerespawnduration","bis_fnc_paramrevivemedicspeedmultiplier","bis_fnc_paramrevivemode","bis_fnc_paramreviverequireditems","bis_fnc_paramreviverequireditemsfakconsumed", + "bis_fnc_paramreviverequiredtrait","bis_fnc_paramreviveunconsciousstatemode","bis_fnc_paramtimeacceleration","bis_fnc_paramviewdistance","bis_fnc_paramweather","bis_fnc_parsenumber","bis_fnc_phoneticalword","bis_fnc_pip","bis_fnc_playendmusic","bis_fnc_playername","bis_fnc_playersidefaction","bis_fnc_playmusic","bis_fnc_playsound","bis_fnc_playvideo","bis_fnc_posdegtoutm", + "bis_fnc_posdegtoworld","bis_fnc_position","bis_fnc_postogrid","bis_fnc_posutmtodeg","bis_fnc_preload","bis_fnc_preload_init","bis_fnc_preload_server","bis_fnc_prepareao","bis_fnc_progressloadingscreen","bis_fnc_quotations","bis_fnc_radialred","bis_fnc_radialredout","bis_fnc_radiosetchannel","bis_fnc_radiosetplaylist","bis_fnc_radiosettrack","bis_fnc_randomindex", + "bis_fnc_randomint","bis_fnc_randomnum","bis_fnc_randompos","bis_fnc_randompostrigger","bis_fnc_rankparams","bis_fnc_recompile","bis_fnc_refreshcommmenu","bis_fnc_registercuratorobject","bis_fnc_relativedirto","bis_fnc_relpos","bis_fnc_relposobject","bis_fnc_relscaleddist","bis_fnc_removeallscriptedeventhandlers","bis_fnc_removecommmenuitem","bis_fnc_removecuratoricon", + "bis_fnc_removedestroyedcuratoreditableobjects","bis_fnc_removefrompairs","bis_fnc_removeindex","bis_fnc_removenestedelement","bis_fnc_removerespawninventory","bis_fnc_removerespawnposition","bis_fnc_removescriptedeventhandler","bis_fnc_removestackedeventhandler","bis_fnc_removesupportlink","bis_fnc_removevirtualbackpackcargo","bis_fnc_removevirtualitemcargo", + "bis_fnc_removevirtualmagazinecargo","bis_fnc_removevirtualweaponcargo","bis_fnc_replacewithsimpleobject","bis_fnc_respawnbase","bis_fnc_respawnconfirm","bis_fnc_respawncounter","bis_fnc_respawnendmission","bis_fnc_respawngroup","bis_fnc_respawninstant","bis_fnc_respawnmanager","bis_fnc_respawnmenuinventory","bis_fnc_respawnmenuposition","bis_fnc_respawnmenuspectator", + "bis_fnc_respawnnone","bis_fnc_respawnrounds","bis_fnc_respawnseagull","bis_fnc_respawnside","bis_fnc_respawnspectator","bis_fnc_respawntickets","bis_fnc_respawntimepenalty","bis_fnc_respawnwave","bis_fnc_respect","bis_fnc_returnchildren","bis_fnc_returnconfigentry","bis_fnc_returngroupcomposition","bis_fnc_returnnestedelement","bis_fnc_returnparents", + "bis_fnc_returnvehicleturrets","bis_fnc_reviveallowed","bis_fnc_reviveawarddeath","bis_fnc_reviveawardkill","bis_fnc_revivebleedout","bis_fnc_revivecontrol","bis_fnc_revivedamagerecalc","bis_fnc_revivedamagereset","bis_fnc_revivedebug","bis_fnc_reviveenabled","bis_fnc_reviveexecutetemplates","bis_fnc_reviveget3dicons","bis_fnc_revivegetactionicon", + "bis_fnc_revivehandleforcerespawnaction","bis_fnc_revivehandleincapunitdetection","bis_fnc_revivehandlekeypress","bis_fnc_revivehandlereviveaction","bis_fnc_reviveiconcontrol","bis_fnc_reviveiconmanager","bis_fnc_reviveincapacitate","bis_fnc_reviveinit","bis_fnc_reviveisvalid","bis_fnc_revivekeys","bis_fnc_reviveonbeingrevived","bis_fnc_reviveonforcingrespawn", + "bis_fnc_reviveonplayerhandledamage","bis_fnc_reviveonplayerhandledamagebasic","bis_fnc_reviveonplayerhandleheal","bis_fnc_reviveonplayerkilled","bis_fnc_reviveonplayerrespawn","bis_fnc_reviveonstate","bis_fnc_reviveonstatejip","bis_fnc_reviveprogress","bis_fnc_reviveremovehelper","bis_fnc_revivesethelper","bis_fnc_revivesetstatus","bis_fnc_romannumeral", + "bis_fnc_rotatevector2d","bis_fnc_rounddir","bis_fnc_roundnum","bis_fnc_rsclayer","bis_fnc_rsclayer_list","bis_fnc_runlater","bis_fnc_sandstorm","bis_fnc_savegame","bis_fnc_saveinventory","bis_fnc_savevehicle","bis_fnc_saymessage","bis_fnc_sceneareaclearance","bis_fnc_scenecheckweapons","bis_fnc_scenecreatescenetrigger","bis_fnc_scenecreatesoundentities", + "bis_fnc_scenegetobjects","bis_fnc_scenegetparticipants","bis_fnc_scenegetpositionbyangle","bis_fnc_sceneintruderdetector","bis_fnc_scenemiscstuff","bis_fnc_scenerotate","bis_fnc_scenesetanimationsforgroup","bis_fnc_scenesetbehaviour","bis_fnc_scenesetobjects","bis_fnc_scenesetposformation","bis_fnc_scriptedmove","bis_fnc_scriptedwaypointtype","bis_fnc_secondstostring", + "bis_fnc_selectcrew","bis_fnc_selectdiarysubject","bis_fnc_selectrandom","bis_fnc_selectrandomweighted","bis_fnc_selectrespawntemplate","bis_fnc_selectrespawntemplates_args","bis_fnc_setcuratorattributes","bis_fnc_setcuratorcamera","bis_fnc_setcuratorvisionmodes","bis_fnc_setdate","bis_fnc_setfog","bis_fnc_setheight","bis_fnc_setidcstreamfriendly","bis_fnc_setidentity", + "bis_fnc_setmissionstatusslot","bis_fnc_setnestedelement","bis_fnc_setobjectrotation","bis_fnc_setobjecttexture","bis_fnc_setovercast","bis_fnc_setpitchbank","bis_fnc_setppeffecttemplate","bis_fnc_setrank","bis_fnc_setrespawndelay","bis_fnc_setrespawninventory","bis_fnc_setservervariable","bis_fnc_settask","bis_fnc_settasklocal","bis_fnc_settopairs", + "bis_fnc_setunitinsignia","bis_fnc_setvehiclemass","bis_fnc_shakecuratorcamera","bis_fnc_shakegauges","bis_fnc_sharedobjectives","bis_fnc_showcuratorattributes","bis_fnc_showcuratorfeedbackmessage","bis_fnc_showmarkers","bis_fnc_showmissionstatus","bis_fnc_shownotification","bis_fnc_showrespawnmenu","bis_fnc_showrespawnmenudisableitem", + "bis_fnc_showrespawnmenudisableitemcheck","bis_fnc_showrespawnmenudisableitemdraw","bis_fnc_showrespawnmenuheader","bis_fnc_showrespawnmenuinventory","bis_fnc_showrespawnmenuinventorydetails","bis_fnc_showrespawnmenuinventoryitems","bis_fnc_showrespawnmenuinventorylimit","bis_fnc_showrespawnmenuinventorylimitrefresh","bis_fnc_showrespawnmenuinventorylimitrespawn", + "bis_fnc_showrespawnmenuinventorylist","bis_fnc_showrespawnmenuinventoryloadout","bis_fnc_showrespawnmenuinventorymetadata","bis_fnc_showrespawnmenuposition","bis_fnc_showrespawnmenupositionlist","bis_fnc_showrespawnmenupositionmap","bis_fnc_showrespawnmenupositionmapdraw","bis_fnc_showrespawnmenupositionmaphandle","bis_fnc_showrespawnmenupositionmetadata", + "bis_fnc_showrespawnmenupositionname","bis_fnc_showrespawnmenupositionrefresh","bis_fnc_showsubtitle","bis_fnc_showtime","bis_fnc_showunitinfo","bis_fnc_showwelcomescreen","bis_fnc_shutdown","bis_fnc_sidecolor","bis_fnc_sideid","bis_fnc_sideisenemy","bis_fnc_sideisfriendly","bis_fnc_sidename","bis_fnc_sidenameunlocalized","bis_fnc_sidetype","bis_fnc_simpleobjectdata", + "bis_fnc_singlemissionconfig","bis_fnc_singlemissionkeys","bis_fnc_singlemissionname","bis_fnc_singlewingslidedoorclose","bis_fnc_singlewingslidedooropen","bis_fnc_skirmishtrigger","bis_fnc_sortalphabetically","bis_fnc_sortby","bis_fnc_sortnum","bis_fnc_spawn","bis_fnc_spawncrew","bis_fnc_spawnenemy","bis_fnc_spawngroup","bis_fnc_spawnobjects","bis_fnc_spawnvehicle", + "bis_fnc_splitstring","bis_fnc_spotter","bis_fnc_stalk","bis_fnc_startloadingscreen","bis_fnc_startloadingscreen_ids","bis_fnc_strategicmapanimate","bis_fnc_strategicmapmousebuttonclick","bis_fnc_strategicmapopen","bis_fnc_subclasses","bis_fnc_subselect","bis_fnc_supplydrop","bis_fnc_supplydropservice","bis_fnc_swapvars","bis_fnc_switchlamp","bis_fnc_synchronizedobjects", + "bis_fnc_target","bis_fnc_taskattack","bis_fnc_taskchildren","bis_fnc_taskcompleted","bis_fnc_taskcreate","bis_fnc_taskcurrent","bis_fnc_taskdefend","bis_fnc_taskdescription","bis_fnc_taskdestination","bis_fnc_taskexists","bis_fnc_taskhandler","bis_fnc_taskhint","bis_fnc_taskparent","bis_fnc_taskpatrol","bis_fnc_taskreal","bis_fnc_tasksetcurrent", + "bis_fnc_tasksetdescription","bis_fnc_tasksetdestination","bis_fnc_tasksetstate","bis_fnc_taskstate","bis_fnc_tasksunit","bis_fnc_taskvar","bis_fnc_teamcolor","bis_fnc_terraingradangle","bis_fnc_texttiles","bis_fnc_texturemarker","bis_fnc_texturevehicleicon","bis_fnc_threat","bis_fnc_timetostring","bis_fnc_titlecard","bis_fnc_titletext","bis_fnc_togglecuratorvisionmode", + "bis_fnc_toupperdisplaytexts","bis_fnc_tracebullets","bis_fnc_trackmissiontime","bis_fnc_transportservice","bis_fnc_tridentclient","bis_fnc_tridentexecute","bis_fnc_tridentgetrelationship","bis_fnc_tridenthandledamage","bis_fnc_tridentsetrelationship","bis_fnc_triggertomarker","bis_fnc_trimstring","bis_fnc_twowingdoornohandleclose","bis_fnc_twowingdoornohandleopen", + "bis_fnc_twowingdooronehandleclose","bis_fnc_twowingdooronehandleopen","bis_fnc_twowingdoortwohandleclose","bis_fnc_twowingdoortwohandleopen","bis_fnc_twowingslidedoorclose","bis_fnc_twowingslidedooropen","bis_fnc_typetext2","bis_fnc_typetext","bis_fnc_uniqueclasses","bis_fnc_unitaddon","bis_fnc_unitcapture","bis_fnc_unitcapturefiring","bis_fnc_unitcapturesimple", + "bis_fnc_unitheadgear","bis_fnc_unitplay","bis_fnc_unitplayfiring","bis_fnc_unitplaysimple","bis_fnc_unitvector","bis_fnc_unpackstaticweapon","bis_fnc_updateplayerarray","bis_fnc_validateparametersoo","bis_fnc_variablespaceadd","bis_fnc_variablespaceremove","bis_fnc_vectoradd","bis_fnc_vectordiff","bis_fnc_vectordiranduprelative","bis_fnc_vectorfromxtoy", + "bis_fnc_vectormultiply","bis_fnc_vehicleroles","bis_fnc_version","bis_fnc_versioninfo","bis_fnc_vrcourseballistics1","bis_fnc_vrcourseballistics2","bis_fnc_vrcourseballistics3","bis_fnc_vrcourseballistics4","bis_fnc_vrcoursecommandingactions1","bis_fnc_vrcoursecommandingactions2","bis_fnc_vrcoursecommandingactions3","bis_fnc_vrcoursecommandingbehaviour1", + "bis_fnc_vrcoursecommandingbehaviour2","bis_fnc_vrcoursecommandingbehaviour3","bis_fnc_vrcoursecommandingmovement1","bis_fnc_vrcoursecommandingmovement2","bis_fnc_vrcoursecommandingvehicles1","bis_fnc_vrcoursecommandingvehicles2","bis_fnc_vrcoursecommandingvehicles3","bis_fnc_vrcourseheliadvanced1","bis_fnc_vrcourseheliadvanced2","bis_fnc_vrcourseheliadvanced3", + "bis_fnc_vrcourseheliadvanced4","bis_fnc_vrcourseheliadvanced5","bis_fnc_vrcourseheliadvanced6","bis_fnc_vrcoursehelibasics1","bis_fnc_vrcoursehelibasics2","bis_fnc_vrcoursehelibasics3","bis_fnc_vrcoursehelislingload1","bis_fnc_vrcourseheliweapons1","bis_fnc_vrcourseheliweapons2","bis_fnc_vrcourseheliweapons3","bis_fnc_vrcourseheliweapons4","bis_fnc_vrcourselaunchers1", + "bis_fnc_vrcourselaunchers2","bis_fnc_vrcourselaunchers3","bis_fnc_vrcourseplaceables1","bis_fnc_vrcourseplaceables2","bis_fnc_vrcourseplaceables3","bis_fnc_vrcoursetargetdesignation1","bis_fnc_vrcoursetargetdesignation2","bis_fnc_vrcoursetargetdesignation3","bis_fnc_vrcourseweaponhandlinga1","bis_fnc_vrcourseweaponhandlinga2","bis_fnc_vrcourseweaponhandlinga3", + "bis_fnc_vrcourseweaponhandlingb1","bis_fnc_vrcourseweaponhandlingb2","bis_fnc_vrcourseweaponhandlingb3","bis_fnc_vrcourseweaponhandlingc1","bis_fnc_vrcourseweaponhandlingc2","bis_fnc_vrdrawborder","bis_fnc_vrdrawgrid","bis_fnc_vreffectkilled","bis_fnc_vrfadein","bis_fnc_vrfadeout","bis_fnc_vrhitpart","bis_fnc_vrspawneffect","bis_fnc_vrspawnselector","bis_fnc_vrtimer", + "bis_fnc_weaponaddon","bis_fnc_weaponcomponents","bis_fnc_weapondirectionrelative","bis_fnc_worldarea","bis_fnc_wpartillery","bis_fnc_wpland","bis_fnc_wppatrol","bis_fnc_wprelax","bis_fnc_wpsuppress","bis_fnc_zzrotate","bis_taskmanagement_markers2d","gui_fnc_exportdefine","life_fnc_levelcheck_meta","bis_fnc_carrier01catapultactionremove", + "bis_fnc_planeaieject","bis_fnc_carrier01edeninit","bis_fnc_ejectionseatrelease","bis_fnc_debugconsoleexec","bis_fnc_aircraftcatapultlaunch","bis_fnc_reviveehdammaged","bis_fnc_planeejectionfx","bis_fnc_admin","bis_fnc_carrier01catapultactionadd","bis_fnc_reviveehhandleheal","bis_fnc_aircraftwingstatecheck","bis_fnc_carrier01crewinanim","bis_fnc_reviveehhandledamage","bis_fnc_carrier01init", + "bis_fnc_reenablerevive","bis_fnc_carrier01edendelete","bis_fnc_carrier01catapultlockto","bis_fnc_aircrafttailhook","bis_fnc_aircraftsystemsinit","bis_fnc_carrier01catapultid","bis_fnc_weaponsentitytype","bis_fnc_isdebugconsoleallowed","bis_fnc_reviveehrespawn","bis_fnc_carrier01animatedeflectors","bis_fnc_magazinesentitytype","bis_fnc_carrier01crewplayanim","bis_fnc_reviveehkilled", + "bis_fnc_planeejection","bis_fnc_carrier01posupdate","bis_fnc_arsenal_boxes","bis_fnc_cpfindemptyposition","bis_fnc_cpsendreinforcements","bis_fnc_modulehideterrainobjects","bis_fnc_allturrets","bis_fnc_fire","bis_fnc_moduleeditterrainobject","bis_fnc_drawarrow","bis_fnc_cpwaituntil", + "bis_fnc_laptopinit","bis_fnc_cplog","bis_fnc_caralarm","bis_fnc_aircraftfoldingwings","bis_fnc_encodeflags2","bis_fnc_showaanarticle","bis_fnc_laptopplayvideo","bis_fnc_setobjectshotparents", + "bis_fnc_synchronizedobjectsqueue","bis_fnc_wpdemine","bis_fnc_cpsafeazimuths","bis_fnc_smoothstep","bis_fnc_createruin","bis_fnc_cpdummy","bis_fnc_cpspawngarrisongrp","bis_fnc_initleaflet","bis_fnc_3denattributedoorstates", + "fnc_compilablestring","bis_fnc_firedbombdemine","bis_fnc_cpinit","bis_fnc_decodeflags2","bis_fnc_initinspectable","bis_fnc_getcloudletparams","bis_fnc_aircrafttailhookai","bis_fnc_cppicksafedir","bis_fnc_easeout","bis_fnc_richcurve_setorientationmode","bis_fnc_scaleandtranslate","bis_fnc_timeline_getcurrenttime","bis_fnc_richcurve_getpreviouskey","bis_fnc_richcurve_edencomputenearestsegment", + "bis_fnc_timeline_cleanup","bis_fnc_timeline_isplaying","bis_fnc_key_getleavecontrolpoint","bis_fnc_camera_getfov","bis_fnc_timeline_gettimeleft","bis_fnc_zoomlock","bis_fnc_vectordivide","bis_fnc_timeline_edenconnectionchanged","bis_fnc_controlpoint_edenconnectionchanged","bis_fnc_bounceinout","bis_fnc_richcurve_edendrawcurve3d","bis_fnc_clerp","bis_fnc_controlpoint_edenregisteredtoworld", + "bis_fnc_changecolormarker","bis_fnc_modulecivilianpresencesafespot","bis_fnc_key_edenconnectionchanged","bis_fnc_3den_init","bis_fnc_key_setvalue","bis_fnc_controlpoint_edendragged","bis_fnc_quinticout","bis_fnc_key_edenregisteredtoworld","bis_fnc_camera_edenattributeschanged","bis_fnc_3den_onselectionchange","bis_fnc_key_getownercurve","bis_fnc_timeline_getstoptime","bis_fnc_zoomunlock", + "bis_fnc_key_isvector","bis_fnc_timeline_edendeleted","bis_fnc_camera_edeninit","bis_fnc_richcurve_getkeysattime","bis_fnc_key_setarrivetangentweight","bis_fnc_zoomonarea","bis_fnc_isequalvector","bis_fnc_richcurve_edendrawcontrolpoints3d","bis_fnc_bounceout","bis_fnc_quinticinoutvector","bis_fnc_3den_onmissionload","bis_fnc_rotatemarker","bis_fnc_timeline_edenisselected","bis_fnc_timeline_setloop", + "bis_fnc_timeline_edeninit","bis_fnc_timeline_isfinished","bis_fnc_timeline_setlength","bis_fnc_richcurve_edentick","bis_fnc_interpolatevectorconstant","bis_fnc_mapanimdone","bis_fnc_richcurve_computecurvearclength","bis_fnc_timeline_getposition","bis_fnc_richcurve_getnextkey","bis_fnc_key_setarrivetangent","bis_fnc_camera_sethudenabled","bis_fnc_controlpoint_isarrive","bis_fnc_timeline_isreverse", + "bis_fnc_timeline_finish","bis_fnc_controlpoint_setisarrive","bis_fnc_key_getconfigtime","bis_fnc_key_getleavetangent","bis_fnc_richcurve_getcurvelength","bis_fnc_deltatime","bis_fnc_mapanimclear","bis_fnc_hermite","bis_fnc_bezierinterpolatevector","bis_fnc_key_setinterpmode","bis_fnc_key_getleavetangentweight","bis_fnc_camera_edenunregisteredfromworld","bis_fnc_timeline_setreverse","bis_fnc_keyframeanimation_init", + "bis_fnc_timeline_stop","bis_fnc_key_isfloat","bis_fnc_timeline_deleted","bis_fnc_controlpoint_compute","bis_fnc_simplemovemarker","bis_fnc_timeline_simulatecurves","bis_fnc_camera_setvisionmode","bis_fnc_berpvector","bis_fnc_hidemarker","bis_fnc_encodeflags4","bis_fnc_camera_setcinemabordersenabled","bis_fnc_clamp","bis_fnc_encodeflags8","bis_fnc_timeline_setposition","bis_fnc_richcurve_gettimerange", + "bis_fnc_richcurve_edenattributeschanged","bis_fnc_initmodules_ambient","bis_fnc_quinticin","bis_fnc_controlpoint_computeownerkey","bis_fnc_timeline_islooping","bis_fnc_camera_getcam","bis_fnc_berp","bis_fnc_camera_edenselectionchanged","bis_fnc_clampvector","bis_fnc_timeline_getplayrate","bis_fnc_richcurve_edenisselected","bis_fnc_resizemarker","bis_fnc_findlookat","bis_fnc_key_getvalue","bis_fnc_3den_onkeyup", + "bis_fnc_richcurve_edenbakecurve3d","bis_fnc_zoomlockeh","bis_fnc_pow","bis_fnc_eventtimeline","bis_fnc_modulecivilianpresenceunit","bis_fnc_movemarker","bis_fnc_timeline_ispaused","bis_fnc_interpolateconstant","bis_fnc_key_setleavetangent","bis_fnc_hidemarkerarray","bis_fnc_key_setleavetangentweight","bis_fnc_interpolate","bis_fnc_richcurve_computeownertimeline","bis_fnc_richcurve_compute", + "bis_fnc_richcurve_getkeytime","bis_fnc_shakemap","bis_fnc_controlpoint_edenattributeschanged","bis_fnc_timeline_getplaytime","bis_fnc_timeline_edenattributeschanged","bis_fnc_key_computetime","bis_fnc_lookatarray","bis_fnc_timeline_setplayrate","bis_fnc_easeinout","bis_fnc_animatepicture","bis_fnc_key_edenattributeschanged","bis_fnc_blinkmarker","bis_fnc_bounceoutvector","bis_fnc_camera_gethudenabled", + "bis_fnc_mapanimadd","bis_fnc_timeline_play","bis_fnc_timeline_getlength","bis_fnc_easeinoutvector","bis_fnc_camera_setfov","bis_fnc_colormarker","bis_fnc_timeline_getplayfromstart","bis_fnc_key_compute","bis_fnc_showmarkerarray","bis_fnc_createtooltip","bis_fnc_camera_setfocus","bis_fnc_timeline_getalpha","bis_fnc_key_getinterpmode","bis_fnc_camera_deleted","bis_fnc_camera_init","bis_fnc_richcurve_getsimulatedobjects", + "bis_fnc_timeline_init","bis_fnc_richcurve_getcurvevaluefloat","bis_fnc_key_gettime","bis_fnc_richcurve_getfirstkey","bis_fnc_getmarkerstate","bis_fnc_key_edenunregisteredfromworld","bis_fnc_timeline_setinterpmode","bis_fnc_camera_getvisionmode","bis_fnc_key_getarrivetangentweight","bis_fnc_richcurve_getorientationmode","bis_fnc_camera_edenconnectionchanged","bis_fnc_richcurve_computekeys","bis_fnc_camera_tick", + "bis_fnc_nearestpoint","bis_fnc_camera_edenreset","bis_fnc_key_edenarecontrolpointslocked","bis_fnc_richcurve_getlookatposition","bis_fnc_timeline_tick","bis_fnc_key_computeownercurve","bis_fnc_bezierinterpolate","bis_fnc_camera_edenregisteredtoworld","bis_fnc_shakemapeh","bis_fnc_quinticinout","bis_fnc_richcurve_getkeys","bis_fnc_key_edenisselected","bis_fnc_3den_onmissionpreviewend","bis_fnc_missionselector", + "bis_fnc_richcurve_resetkeyseventstate","bis_fnc_richcurve_getkeyindex","bis_fnc_richcurve_computesimulatedobjects","bis_fnc_easeoutvector","bis_fnc_getbordermarkers","bis_fnc_animatedscreen","bis_fnc_richcurve_getcurvepoints","bis_fnc_timeline_edendragged","bis_fnc_richcurve_getownertimeline","bis_fnc_lookatarrayeh","bis_fnc_inverselerp","bis_fnc_3den_onkeydown","bis_fnc_richcurve_getlastkey", + "bis_fnc_timeline_getsimulatedcurves","bis_fnc_easein","bis_fnc_slerp","bis_fnc_controlpoint_edenunregisteredfromworld","bis_fnc_richcurve_istimeinseconds","bis_fnc_quinticinvector","bis_fnc_getmarkers","bis_fnc_key_getarrivetangent","bis_fnc_key_getfov","bis_fnc_bounceinoutvector","bis_fnc_bouncein","bis_fnc_cancelmarker","bis_fnc_decodeflags4","bis_fnc_lerpvector","bis_fnc_richcurve_edenmarkstatedirty","bis_fnc_holdkey", + "bis_fnc_richcurve_edendragged","bis_fnc_decodeflags8","bis_fnc_quinticoutvector","bis_fnc_showmarker","bis_fnc_key_edendragged","bis_fnc_key_settime","bis_fnc_controlpoint_edenisselected","bis_fnc_camera_edenisselected","bis_fnc_pulsate","bis_fnc_key_getarrivecontrolpoint","bis_fnc_richcurve_getkeyfromindex","bis_fnc_easeinvector","bis_fnc_modulecivilianpresence","bis_fnc_hermitevector","bis_fnc_richcurve_edenconnectionchanged", + "bis_fnc_controlpoint_getownerkey","bis_fnc_richcurve_getcurvevaluevector","bis_fnc_interpolatevector","bis_fnc_camera_getfocus","bis_fnc_bounceinvector","bis_fnc_richcurve_reset","bis_fnc_timeline_setpause","bis_fnc_camera_setcam","bis_fnc_3den_onmissionnew","bis_fnc_richcurve_setkeys","bis_fnc_camera_getcinemabordersenabled","bis_fnc_richcurve_numkeys","bis_fnc_bezierlength","bis_fnc_camera_edendeleted", + "bis_fnc_keyframeanimation_deltatime","bis_fnc_timeline_getinterpmode","bis_fnc_initmodules_keyframeanimation","bis_fnc_revivesecureunit","bis_fnc_modulevanguardscorepersistence","bis_fnc_wlsectorlisting","bis_fnc_wlinsectorarea","bis_fnc_wlsubroutine_purchasemenugetuiscale", + "bis_fnc_wlrequestfasttravel","bis_fnc_wlsectorhandle","bis_fnc_wlsectorselectionhandle","bis_fnc_wldroppurchase","bis_fnc_priorityqueue_isempty","bis_fnc_wlplayerstrackingserver","bis_fnc_wlsidetofaction","bis_fnc_initmodules_warlords","bis_fnc_wlsectoriconupdate","bis_fnc_wlsubroutine_purchasemenuassetavailability","bis_fnc_wldefencesetup","bis_fnc_wlloadoutapply","bis_fnc_isdatetimenewer", + "bis_fnc_wlaircraftarrival","bis_fnc_priorityqueue_pushitem","bis_fnc_wlosd","bis_fnc_priorityqueue_popitem","bis_fnc_wlaipurchases","bis_fnc_wlsynctime","bis_fnc_priorityqueue_gethighestpriority","bis_fnc_wlreputation","bis_fnc_wlsubroutine_purchasemenusetitemslist","bis_fnc_wlvehiclehandle","bis_fnc_wlsectorinit","bis_fnc_priorityqueue_isfull","bis_fnc_wlcalculatesectorconnections", + "bis_fnc_wlsubroutine_purchasemenusetassetdetails","bis_fnc_wlupdateao","bis_fnc_wlvarsinit","bis_fnc_wloutlineicons","bis_fnc_wlsubroutine_purchasemenurefresh","bis_fnc_wlsectorpopulate","bis_fnc_wlloadoutgrab","bis_fnc_wlsendresponseteam","bis_fnc_wlopenarsenal","bis_fnc_wlsectorfundspayoff","bis_fnc_priorityqueue_getlowestpriority","bis_fnc_wlsmoothtext","bis_fnc_wlrecalculateservices", + "bis_fnc_wlshowinfo","bis_fnc_priorityqueue_init","bis_fnc_multiplysquarematrixbyvector","bis_fnc_wlnavalarrival","bis_fnc_wlgarrisonretreat","bis_fnc_wlclientinit","bis_fnc_wlsectorscommoninit","bis_fnc_wlrequestfundstransfer","bis_fnc_comparedatetimes","bis_fnc_wlcalculateincome","bis_fnc_wlsectorscanhandle","bis_fnc_wlplayerstracking","bis_fnc_wlrequestsectorscan","bis_fnc_wlrandomposrect","bis_fnc_wlaicore", + "bis_fnc_wldebug","bis_fnc_wlsectorselectionhandleserver","bis_fnc_wlmostvotedsector","bis_fnc_wlfundsinfo","bis_fnc_wlpurchasemenu","bis_fnc_wlremovalhandle","bis_fnc_wlinit","bis_fnc_wlrequestvotingreset","bis_fnc_calculatedatetime","bis_fnc_wlairdrop","bis_fnc_wlsectorhandleserver","bis_fnc_wlrequestpurchase","bis_fnc_rotatevector3d","bis_fnc_wlaipathsegmentation","bis_fnc_wlsectorssetup", + "bis_fnc_wlsectorupdate","bis_fnc_wlsectortaskhandle","bis_fnc_wlsectorselectionstart","bis_fnc_wlvotingbarhandle","bis_fnc_wlsoundmsg","bis_fnc_wlseizingbarhandle","bis_fnc_wlaisectorscan","bis_fnc_wlsubroutine_purchasemenuhandledlc","bis_fnc_wlsectorselectionend", "bis_fnc_compatiblemagazines", "bis_fnc_stringtomarkerlocal", "bis_fnc_stringtomarker", "bis_fnc_markertostring", "bis_fnc_respawnbackpack", + "bis_fnc_mapgridsize", "bis_fnc_wlparseassetlist", "bis_fnc_setcustomsoundcontroller", "bis_fnc_wlsyncedtime" + }; + + BIS_UI_Functions[] = { + "bis_displayinterrupt_isoptionsexpanded","bis_fnc_3dcredits_meta","bis_fnc_aan_meta","bis_fnc_absspeed_meta","bis_fnc_activateaddons_meta","bis_fnc_addclassoo_meta","bis_fnc_addcommmenuitem_meta","bis_fnc_addcuratorareafromtrigger_meta","bis_fnc_addcuratorchallenge_meta","bis_fnc_addcuratoricon_meta","bis_fnc_addevidence_meta","bis_fnc_addrespawninventory_meta", + "bis_fnc_addrespawnposition_meta","bis_fnc_addscore_meta","bis_fnc_addscriptedeventhandler_meta","bis_fnc_addstackedeventhandler_meta","bis_fnc_addsupportlink_meta","bis_fnc_addtopairs_meta","bis_fnc_addvirtualbackpackcargo_meta","bis_fnc_addvirtualitemcargo_meta","bis_fnc_addvirtualmagazinecargo_meta","bis_fnc_addvirtualweaponcargo_meta","bis_fnc_addweapon_meta", + "bis_fnc_advhint_hinthandlers","bis_fnc_advhint_meta","bis_fnc_advhintarg_meta","bis_fnc_advhintcall_meta","bis_fnc_advhintcredits_meta","bis_fnc_aligntabs_meta","bis_fnc_allsynchronizedobjects_meta","bis_fnc_ambientanim_meta","bis_fnc_ambientanimcombat_meta","bis_fnc_ambientanimgetparams_meta","bis_fnc_ambientblacklist_meta","bis_fnc_ambientblacklistadd_meta", + "bis_fnc_ambientboats_meta","bis_fnc_ambientflyby_meta","bis_fnc_ambienthelicopters_meta","bis_fnc_ambientplanes_meta","bis_fnc_ambientpostprocess_meta","bis_fnc_animalbehaviour_meta","bis_fnc_animalsitespawn_meta","bis_fnc_animatetaskwaypoint_meta","bis_fnc_animtype_meta","bis_fnc_animviewer_meta","bis_fnc_areequal_meta","bis_fnc_arefriendly_meta", + "bis_fnc_arithmeticmean_meta","bis_fnc_arraycompare_meta","bis_fnc_arrayfinddeep_meta","bis_fnc_arrayinsert_meta","bis_fnc_arraypop_meta","bis_fnc_arraypush_meta","bis_fnc_arraypushstack_meta","bis_fnc_arrayshift_meta","bis_fnc_arrayshuffle_meta","bis_fnc_arrayunshift_meta","bis_fnc_arsenal_meta","bis_fnc_assignplayerrole_meta","bis_fnc_baseweapon_meta", + "bis_fnc_basicbackpack_meta","bis_fnc_basictask_meta","bis_fnc_blackin_meta","bis_fnc_blackout_meta","bis_fnc_bleedtickets_meta","bis_fnc_bloodeffect_meta","bis_fnc_boundingboxcorner_meta","bis_fnc_boundingboxdimensions_meta","bis_fnc_boundingboxmarker_meta","bis_fnc_boundingcircle_meta","bis_fnc_briefinganimate_meta","bis_fnc_briefinginit_meta", + "bis_fnc_buildingpositions_meta","bis_fnc_call_meta","bis_fnc_callscriptedeventhandler_meta","bis_fnc_camera_meta","bis_fnc_cameraold_meta","bis_fnc_camfollow_meta","bis_fnc_cargoturretindex_meta","bis_fnc_changesupportradiochannel_meta","bis_fnc_cinemaborder_meta","bis_fnc_classmagazine_meta","bis_fnc_classweapon_meta","bis_fnc_codeperformance_meta", + "bis_fnc_colorconfigtorgba_meta","bis_fnc_colorrgbatohtml_meta","bis_fnc_colorrgbatotexture_meta","bis_fnc_colorrgbtohtml_meta","bis_fnc_commsmenucreate_meta","bis_fnc_commsmenutoggleavailability_meta","bis_fnc_commsmenutogglevisibility_meta","bis_fnc_completedcuratorchallengescount_meta","bis_fnc_conditionalselect_meta","bis_fnc_configextremes_meta", + "bis_fnc_configpath_meta","bis_fnc_configviewer_meta","bis_fnc_consolidatearray_meta","bis_fnc_convertunits_meta","bis_fnc_countdown_meta","bis_fnc_counter_meta","bis_fnc_createlogrecord_meta","bis_fnc_createmenu_meta","bis_fnc_createobjectoo_meta","bis_fnc_credits_meta","bis_fnc_credits_movie_meta","bis_fnc_credits_movieconfig_meta","bis_fnc_credits_moviesupport_meta", + "bis_fnc_crewcount_meta","bis_fnc_crossproduct_meta","bis_fnc_crows_meta","bis_fnc_ctrlfittotextheight_meta","bis_fnc_ctrlsetscale_meta","bis_fnc_ctrltextheight_meta","bis_fnc_curatorattachobject_meta","bis_fnc_curatorattributes_meta","bis_fnc_curatorautomatic_meta","bis_fnc_curatorautomaticpositions_meta","bis_fnc_curatorchallengedestroyvehicle_meta", + "bis_fnc_curatorchallengefindintel_meta","bis_fnc_curatorchallengefireweapon_meta","bis_fnc_curatorchallengegetinvehicle_meta","bis_fnc_curatorchallengeilluminate_meta","bis_fnc_curatorchallengespawnlightning_meta","bis_fnc_curatorhint_meta","bis_fnc_curatorobjectedited_meta","bis_fnc_curatorobjectplaced_meta","bis_fnc_curatorobjectregistered_meta", + "bis_fnc_curatorobjectregisteredtable_meta","bis_fnc_curatorpinged_meta","bis_fnc_curatorrespawn_meta","bis_fnc_curatorsaymessage_meta","bis_fnc_curatorvisionmodes_meta","bis_fnc_curatorwaypointplaced_meta","bis_fnc_customgps_meta","bis_fnc_customgpsvideo_meta","bis_fnc_cutdecimals_meta","bis_fnc_damagechanged_meta","bis_fnc_damagepulsing_meta","bis_fnc_dbclasscheck_meta", + "bis_fnc_dbclassid_meta","bis_fnc_dbclassindex_meta","bis_fnc_dbclasslist_meta","bis_fnc_dbclassremove_meta","bis_fnc_dbclassreturn_meta","bis_fnc_dbclassset_meta","bis_fnc_dbconfigpath_meta","bis_fnc_dbimportconfig_meta","bis_fnc_dbimportxml_meta","bis_fnc_dbisclass_meta","bis_fnc_dbisvalue_meta","bis_fnc_dbprint_meta","bis_fnc_dbsymbolclass_meta","bis_fnc_dbsymbolvalue_meta", + "bis_fnc_dbvaluecheck_meta","bis_fnc_dbvalueid_meta","bis_fnc_dbvalueindex_meta","bis_fnc_dbvaluelist_meta","bis_fnc_dbvalueremove_meta","bis_fnc_dbvaluereturn_meta","bis_fnc_dbvalueset_meta","bis_fnc_deleteinventory_meta","bis_fnc_deletetask_meta","bis_fnc_deletevehiclecrew_meta","bis_fnc_destroycity_meta","bis_fnc_diagaar_meta","bis_fnc_diagaarrecord_meta","bis_fnc_diaganim_meta", + "bis_fnc_diagbulletcam_meta","bis_fnc_diagconfig_meta","bis_fnc_diagfindmissingauthors_meta","bis_fnc_diaghit_meta","bis_fnc_diagjiralink_meta","bis_fnc_diagkey_meta","bis_fnc_diagkeylayout_meta","bis_fnc_diagkeytest_meta","bis_fnc_diagknownastarget_meta","bis_fnc_diagknowntargets_meta","bis_fnc_diagloop_meta","bis_fnc_diagmacros_meta","bis_fnc_diagmacrosauthor_meta", + "bis_fnc_diagmacrosmapsize_meta","bis_fnc_diagmacrosnamesound_meta","bis_fnc_diagmacrosverify_meta","bis_fnc_diagmissionpositions_meta","bis_fnc_diagmissionweapons_meta","bis_fnc_diagpreview_meta","bis_fnc_diagpreviewcycle_meta","bis_fnc_diagpreviewvehiclecrew_meta","bis_fnc_diagradio_meta","bis_fnc_diagvehicleicons_meta","bis_fnc_diagwiki_meta","bis_fnc_diaryhints_meta", + "bis_fnc_diarymaps_meta","bis_fnc_didjip_meta","bis_fnc_dirindicator_meta","bis_fnc_dirteffect_meta","bis_fnc_dirto_meta","bis_fnc_disableloading_meta","bis_fnc_disablesaving_meta","bis_fnc_displayclouds_meta","bis_fnc_displaycolorget_meta","bis_fnc_displaycolorset_meta","bis_fnc_displaycontrols_meta","bis_fnc_displayloading_meta","bis_fnc_displaymission_meta","bis_fnc_displayname_meta", + "bis_fnc_displayresize_meta","bis_fnc_distance2d_meta","bis_fnc_distance2dsqr_meta","bis_fnc_dotproduct_meta","bis_fnc_drawao_meta","bis_fnc_drawcuratordeaths_meta","bis_fnc_drawcuratorlocations_meta","bis_fnc_drawcuratorrespawnmarkers_meta","bis_fnc_drawminefields_meta","bis_fnc_drawrespawnpositions_meta","bis_fnc_dynamictext_meta","bis_fnc_earthquake_meta","bis_fnc_effectfired_meta", + "bis_fnc_effectfiredartillery_meta","bis_fnc_effectfiredflares_meta","bis_fnc_effectfiredhelirocket_meta","bis_fnc_effectfiredlongsmoke_meta","bis_fnc_effectfiredrifle_meta","bis_fnc_effectfiredrocket_meta","bis_fnc_effectfiredsmokelauncher_boat_meta","bis_fnc_effectfiredsmokelauncher_meta","bis_fnc_effectkilled_meta","bis_fnc_effectkilledairdestruction_meta", + "bis_fnc_effectkilledairdestructionstage2_meta","bis_fnc_effectkilledsecondaries_meta","bis_fnc_effectplankton_meta","bis_fnc_enablesaving_meta","bis_fnc_endloadingscreen_meta","bis_fnc_endmission_meta","bis_fnc_endmissionserver_meta","bis_fnc_enemydetected_meta","bis_fnc_enemysides_meta","bis_fnc_enemytargets_meta","bis_fnc_error_meta","bis_fnc_errormsg_meta","bis_fnc_establishingshot_meta", + "bis_fnc_estimatedtimeleft_meta","bis_fnc_execfsm_meta","bis_fnc_executestackedeventhandler_meta","bis_fnc_exportcfggroups_meta","bis_fnc_exportcfghints_meta","bis_fnc_exportcfgmagazines_meta","bis_fnc_exportcfgpatches_meta","bis_fnc_exportcfgvehicles_meta","bis_fnc_exportcfgweapons_meta","bis_fnc_exportcuratorcosttable_meta","bis_fnc_exportfunctionstowiki_meta", + "bis_fnc_exportgroupformations_meta","bis_fnc_exportinventory_meta","bis_fnc_exportmaptobitxt_meta","bis_fnc_fadeeffect_meta","bis_fnc_fatigueeffect_meta","bis_fnc_feedbackinit_meta","bis_fnc_feedbackmain_meta","bis_fnc_ffvupdate_meta","bis_fnc_filterstring_meta","bis_fnc_findextreme_meta","bis_fnc_findinpairs_meta","bis_fnc_findnestedelement_meta","bis_fnc_findoverwatch_meta", + "bis_fnc_findsafepos_meta","bis_fnc_finishcuratorchallenge_meta","bis_fnc_fixdate_meta","bis_fnc_flameseffect_meta","bis_fnc_flies_meta","bis_fnc_forcecuratorinterface_meta","bis_fnc_forceend_meta","bis_fnc_formatcuratorchallengeobjects_meta","bis_fnc_fps_meta","bis_fnc_friendlysides_meta","bis_fnc_ftlmanager_meta","bis_fnc_functionmeta_meta","bis_fnc_functionpath_meta", + "bis_fnc_functionsdebug_meta","bis_fnc_gc_meta","bis_fnc_gcinit_meta","bis_fnc_genericsentence_meta","bis_fnc_genericsentenceinit_meta","bis_fnc_geometricmean_meta","bis_fnc_getcfgdata_meta","bis_fnc_getcfgdataarray_meta","bis_fnc_getcfgdatabool_meta","bis_fnc_getcfgdataobject_meta","bis_fnc_getcfgdatapool_meta","bis_fnc_getcfgisclass_meta","bis_fnc_getcfgsubclasses_meta", + "bis_fnc_getfactions_meta","bis_fnc_getfrompairs_meta","bis_fnc_getidc_meta","bis_fnc_getidd_meta","bis_fnc_getlinedist_meta","bis_fnc_getparamvalue_meta","bis_fnc_getpitchbank_meta","bis_fnc_getrespawninventories_meta","bis_fnc_getrespawnmarkers_meta","bis_fnc_getrespawnpositions_meta","bis_fnc_getservervariable_meta","bis_fnc_getturrets_meta","bis_fnc_getunitbyuid_meta", + "bis_fnc_getunitinsignia_meta","bis_fnc_getvirtualbackpackcargo_meta","bis_fnc_getvirtualitemcargo_meta","bis_fnc_getvirtualmagazinecargo_meta","bis_fnc_getvirtualweaponcargo_meta","bis_fnc_greatestnum_meta","bis_fnc_gridtopos_meta","bis_fnc_groupindicator_meta","bis_fnc_groupvehicles_meta","bis_fnc_guibackground_meta","bis_fnc_guieditor_meta","bis_fnc_guieffecttiles_alpha", + "bis_fnc_guieffecttiles_coef","bis_fnc_guieffecttiles_meta","bis_fnc_guigrid_meta","bis_fnc_guigridtoprofile_meta","bis_fnc_guihint_meta","bis_fnc_guimessage_meta","bis_fnc_guinewsfeed_meta","bis_fnc_halo_meta","bis_fnc_halt_meta","bis_fnc_healing_meta","bis_fnc_healtheffects_meta","bis_fnc_helicoptercanfly_meta","bis_fnc_helicopterdamage_meta","bis_fnc_helicoptergethitpoints_meta", + "bis_fnc_helicopterseat_meta","bis_fnc_helicopterseatmove_meta","bis_fnc_helicoptertype_meta","bis_fnc_help_meta","bis_fnc_hudlimits_meta","bis_fnc_importimagelinks_meta","bis_fnc_inanglesector_meta","bis_fnc_incapacitatedeffect_meta","bis_fnc_indicatebleeding_meta","bis_fnc_infotext_meta","bis_fnc_initcuratorattribute_meta","bis_fnc_initdisplay_meta","bis_fnc_initdisplays_meta", + "bis_fnc_initdisplays_prestart","bis_fnc_initexpo_meta","bis_fnc_initintelobject_meta","bis_fnc_initmodules_meta","bis_fnc_initmultiplayer_meta","bis_fnc_initparams_meta","bis_fnc_initplayable_meta","bis_fnc_initrespawn_meta","bis_fnc_initrespawnbackpack_meta","bis_fnc_initvirtualunit_meta","bis_fnc_instring_meta","bis_fnc_instructorfigure_meta","bis_fnc_interpolateweather_meta", + "bis_fnc_intrigger_meta","bis_fnc_inv_meta","bis_fnc_invadd_meta","bis_fnc_invcodetoarray_meta","bis_fnc_invremove_meta","bis_fnc_invslots_meta","bis_fnc_invslotsempty_meta","bis_fnc_invslottype_meta","bis_fnc_invstring_meta","bis_fnc_isbuildingenterable_meta","bis_fnc_iscampaign_meta","bis_fnc_iscurator_meta","bis_fnc_iscuratoreditable_meta","bis_fnc_isdemo_meta", + "bis_fnc_isforcedcuratorinterface_meta","bis_fnc_isinfrontof_meta","bis_fnc_isinsidearea_meta","bis_fnc_isinzoom_meta","bis_fnc_isleapyear_meta","bis_fnc_isloading_meta","bis_fnc_islocalized_meta","bis_fnc_isposblacklisted_meta","bis_fnc_isunitvirtual_meta","bis_fnc_itemtype_meta","bis_fnc_jukebox_meta","bis_fnc_kbcanspeak_meta","bis_fnc_kbcreatedummy_meta", + "bis_fnc_kbisspeaking_meta","bis_fnc_kbmenu_meta","bis_fnc_kbpriority_meta","bis_fnc_kbsentence_meta","bis_fnc_kbskip_meta","bis_fnc_kbtell_meta","bis_fnc_kbtelllocal_meta","bis_fnc_kbtopicconfig_meta","bis_fnc_keycode_meta","bis_fnc_keypointsexport_meta","bis_fnc_keypointsexportfromkml_meta","bis_fnc_kmlimport_meta","bis_fnc_limitsupport_meta","bis_fnc_linearconversion_meta", + "bis_fnc_listcuratorplayers_meta","bis_fnc_listplayers_meta","bis_fnc_livefeed_meta","bis_fnc_livefeedeffects_meta","bis_fnc_livefeedmoduleeffects_meta","bis_fnc_livefeedmoduleinit_meta","bis_fnc_livefeedmodulesetsource_meta","bis_fnc_livefeedmodulesettarget_meta","bis_fnc_livefeedsetsource_meta","bis_fnc_livefeedsettarget_meta","bis_fnc_livefeedterminate_meta","bis_fnc_loadclass_meta", + "bis_fnc_loadentry_meta","bis_fnc_loadfunctions_meta","bis_fnc_loadinventory_meta","bis_fnc_localize_meta","bis_fnc_locationdescription_meta","bis_fnc_locations_meta","bis_fnc_locweaponinfo_meta","bis_fnc_log_meta","bis_fnc_logformat_meta","bis_fnc_loop_meta","bis_fnc_lowestnum_meta","bis_fnc_magnitude_meta","bis_fnc_magnitudesqr_meta","bis_fnc_managecuratoraddons_meta", + "bis_fnc_managecuratorchallenges_meta","bis_fnc_mapsize_meta","bis_fnc_markercreate_meta","bis_fnc_markerparams_meta","bis_fnc_markerpath_meta","bis_fnc_markertotrigger_meta","bis_fnc_markwaypoints_meta","bis_fnc_maxdiffarray_meta","bis_fnc_mirrorcuratorsettings_meta","bis_fnc_miscanim_meta","bis_fnc_missilelaunchpositionfix_meta","bis_fnc_missionconversations_meta", + "bis_fnc_missionconversationslocal_meta","bis_fnc_missionflow_meta","bis_fnc_missionhandlers_meta","bis_fnc_missionrespawntype_meta","bis_fnc_missiontasks_meta","bis_fnc_missiontaskslocal_meta","bis_fnc_missiontimeleft_meta","bis_fnc_moduleai_meta","bis_fnc_moduleammo_meta","bis_fnc_moduleanimals_meta","bis_fnc_modulearsenal_meta","bis_fnc_modulebleedtickets_meta", + "bis_fnc_modulebootcampstage_meta","bis_fnc_modulecas_meta","bis_fnc_modulechat_meta","bis_fnc_modulecombatgetin_meta","bis_fnc_modulecountdown_meta","bis_fnc_modulecovermap_meta","bis_fnc_modulecreatediaryrecord_meta","bis_fnc_modulecreateprojectile_meta","bis_fnc_modulecurator_meta","bis_fnc_modulecuratoraddaddons_meta","bis_fnc_modulecuratoraddcameraarea_meta", + "bis_fnc_modulecuratoraddeditableobjects_meta","bis_fnc_modulecuratoraddeditingarea_meta","bis_fnc_modulecuratoraddeditingareaplayers_meta","bis_fnc_modulecuratoraddicon_meta","bis_fnc_modulecuratoraddpoints_meta","bis_fnc_modulecuratorsetattributes_meta","bis_fnc_modulecuratorsetcamera_meta","bis_fnc_modulecuratorsetcoefs_meta","bis_fnc_modulecuratorsetcostsdefault_meta", + "bis_fnc_modulecuratorsetcostsside_meta","bis_fnc_modulecuratorsetcostsvehicleclass_meta","bis_fnc_modulecuratorseteditingareatype_meta","bis_fnc_modulecuratorsetobjectcost_meta","bis_fnc_moduledamage_meta","bis_fnc_moduledate_meta","bis_fnc_modulediary_meta","bis_fnc_moduledooropen_meta","bis_fnc_moduleeffectsbubbles_meta","bis_fnc_moduleeffectsemittercreator_meta", + "bis_fnc_moduleeffectsfire_meta","bis_fnc_moduleeffectsplankton_meta","bis_fnc_moduleeffectsshells_meta","bis_fnc_moduleeffectssmoke_meta","bis_fnc_moduleendmission_meta","bis_fnc_moduleexecute_meta","bis_fnc_modulefdcpclear_meta","bis_fnc_modulefdcpin_meta","bis_fnc_modulefdcpout_meta","bis_fnc_modulefdfademarker_meta","bis_fnc_modulefdskeetdestruction_meta", + "bis_fnc_modulefdstatsclear_meta","bis_fnc_modulefiringdrill_meta","bis_fnc_modulefriendlyfire_meta","bis_fnc_modulefuel_meta","bis_fnc_modulegenericradio_meta","bis_fnc_modulegroupid_meta","bis_fnc_modulehandle_meta","bis_fnc_modulehealth_meta","bis_fnc_modulehint_meta","bis_fnc_modulehq_meta","bis_fnc_moduleinit_meta","bis_fnc_modulelightning_meta", + "bis_fnc_modulemine_meta","bis_fnc_modulemissionname_meta","bis_fnc_modulemode_meta","bis_fnc_modulemodules_meta","bis_fnc_modulemptypedefense_meta","bis_fnc_modulemptypegamemaster_meta","bis_fnc_modulemptypegroundsupport_meta","bis_fnc_modulemptypegroundsupportbase_meta","bis_fnc_modulemptypesectorcontrol_meta","bis_fnc_modulemptypeseize_meta","bis_fnc_moduleobjective_meta", + "bis_fnc_moduleobjectivefind_meta","bis_fnc_moduleobjectivegetin_meta","bis_fnc_moduleobjectivemove_meta","bis_fnc_moduleobjectiveracecp_meta","bis_fnc_moduleobjectiveracefinish_meta","bis_fnc_moduleobjectiveracestart_meta","bis_fnc_moduleobjectivesector_meta","bis_fnc_moduleobjectivetarget_meta","bis_fnc_modulepositioning_meta","bis_fnc_moduleposter_meta", + "bis_fnc_modulepostprocess_meta","bis_fnc_moduleprojectile_meta","bis_fnc_modulepunishment_meta","bis_fnc_moduleradiochannelcreate_meta","bis_fnc_modulerank_meta","bis_fnc_modulerating_meta","bis_fnc_moduleremotecontrol_meta","bis_fnc_modulerespawninventory_meta","bis_fnc_modulerespawnposition_meta","bis_fnc_modulerespawntickets_meta","bis_fnc_modulerespawnvehicle_meta", + "bis_fnc_modulesavegame_meta","bis_fnc_modulesector_meta","bis_fnc_modulesfx_meta","bis_fnc_moduleshowhide_meta","bis_fnc_modulesimulationmanager_meta","bis_fnc_moduleskill_meta","bis_fnc_moduleskiptime_meta","bis_fnc_moduleslingload_meta","bis_fnc_modulesound_meta","bis_fnc_modulespawnai_meta","bis_fnc_modulespawnaioptions_meta","bis_fnc_modulespawnaipoint_meta", + "bis_fnc_modulespawnaisectortactic_meta","bis_fnc_modulestrategicmapimage_meta","bis_fnc_modulestrategicmapinit_meta","bis_fnc_modulestrategicmapmission_meta","bis_fnc_modulestrategicmapopen_meta","bis_fnc_modulestrategicmaporbat_meta","bis_fnc_moduletaskcreate_meta","bis_fnc_moduletasksetdescription_meta","bis_fnc_moduletasksetdestination_meta","bis_fnc_moduletasksetstate_meta", + "bis_fnc_moduletimemultiplier_meta","bis_fnc_moduletimetrial_meta","bis_fnc_moduletracers_meta","bis_fnc_moduletrident_meta","bis_fnc_moduletriggers_meta","bis_fnc_modulettcpclear_meta","bis_fnc_modulettcpin_meta","bis_fnc_modulettcpout_meta","bis_fnc_modulettcptrigger_meta","bis_fnc_modulettcptriggerbehind_meta","bis_fnc_modulettstatsclear_meta","bis_fnc_moduleunits_meta", + "bis_fnc_moduleunlockarea_meta","bis_fnc_moduleunlockobject_meta","bis_fnc_modulevolume_meta","bis_fnc_moduleweather_meta","bis_fnc_modulezoneprotection_meta","bis_fnc_modulezonerestriction_meta","bis_fnc_monthdays_meta","bis_fnc_moveaction_meta","bis_fnc_movein_meta","bis_fnc_movetorespawnposition_meta","bis_fnc_mpexec_meta","bis_fnc_music_meta","bis_fnc_nearesthelipad_meta", + "bis_fnc_nearestnum_meta","bis_fnc_nearestposition_meta","bis_fnc_nearestroad_meta","bis_fnc_neutralizeunit_meta","bis_fnc_noflyzone_meta","bis_fnc_noflyzonescreate_meta","bis_fnc_noflyzonesexport_meta","bis_fnc_numberdigits_meta","bis_fnc_numbertext_meta","bis_fnc_objectheight_meta","bis_fnc_objectsgrabber_meta","bis_fnc_objectside_meta","bis_fnc_objectsmapper_meta", + "bis_fnc_objecttype_meta","bis_fnc_objectvar_meta","bis_fnc_ondiarychanged_meta","bis_fnc_onend_meta","bis_fnc_onload_meta","bis_fnc_onplayerconnected_meta","bis_fnc_openfieldmanual_meta","bis_fnc_orbataddgroupoverlay_meta","bis_fnc_orbatanimate_meta","bis_fnc_orbatconfigpreview_meta","bis_fnc_orbatgetgroupparams_meta","bis_fnc_orbatopen_meta","bis_fnc_orbatremovegroupoverlay_meta", + "bis_fnc_orbatsetgroupfade_meta","bis_fnc_orbatsetgroupparams_meta","bis_fnc_orbattooltip_meta","bis_fnc_ordinalnumber_meta","bis_fnc_overviewauthor_meta","bis_fnc_overviewdifficulty_meta","bis_fnc_overviewmission_meta","bis_fnc_overviewterrain_meta","bis_fnc_overviewtimetrial_meta","bis_fnc_packstaticweapon_meta","bis_fnc_param_meta","bis_fnc_paramcountdown_meta", + "bis_fnc_paramdaytime_meta","bis_fnc_paramguerfriendly_meta","bis_fnc_paramin_meta","bis_fnc_paramrespawntickets_meta","bis_fnc_paramviewdistance_meta","bis_fnc_paramweather_meta","bis_fnc_parsenumber_meta","bis_fnc_phoneticalword_meta","bis_fnc_pip_meta","bis_fnc_playendmusic_meta","bis_fnc_playername_meta","bis_fnc_playersidefaction_meta","bis_fnc_playmusic_meta","bis_fnc_playsound_meta", + "bis_fnc_playvideo_meta","bis_fnc_posdegtoutm_meta","bis_fnc_posdegtoworld_meta","bis_fnc_position_meta","bis_fnc_postogrid_meta","bis_fnc_posutmtodeg_meta","bis_fnc_preload_meta","bis_fnc_prepareao_meta","bis_fnc_progressloadingscreen_meta","bis_fnc_quotations_meta","bis_fnc_radialred_meta","bis_fnc_radialredout_meta","bis_fnc_radiosetchannel_meta","bis_fnc_radiosetplaylist_meta", + "bis_fnc_radiosettrack_meta","bis_fnc_randomindex_meta","bis_fnc_randomint_meta","bis_fnc_randomnum_meta","bis_fnc_randompos_meta","bis_fnc_randompostrigger_meta","bis_fnc_rankparams_meta","bis_fnc_recompile_meta","bis_fnc_refreshcommmenu_meta","bis_fnc_registercuratorobject_meta","bis_fnc_relativedirto_meta","bis_fnc_relpos_meta","bis_fnc_relposobject_meta","bis_fnc_relscaleddist_meta", + "bis_fnc_removeallscriptedeventhandlers_meta","bis_fnc_removecommmenuitem_meta","bis_fnc_removecuratoricon_meta","bis_fnc_removedestroyedcuratoreditableobjects_meta","bis_fnc_removefrompairs_meta","bis_fnc_removeindex_meta","bis_fnc_removenestedelement_meta","bis_fnc_removerespawninventory_meta","bis_fnc_removerespawnposition_meta","bis_fnc_removescriptedeventhandler_meta", + "bis_fnc_removestackedeventhandler_meta","bis_fnc_removesupportlink_meta","bis_fnc_removevirtualbackpackcargo_meta","bis_fnc_removevirtualitemcargo_meta","bis_fnc_removevirtualmagazinecargo_meta","bis_fnc_removevirtualweaponcargo_meta","bis_fnc_respawnbase_meta","bis_fnc_respawnconfirm_meta","bis_fnc_respawncounter_meta","bis_fnc_respawnendmission_meta","bis_fnc_respawngroup_meta", + "bis_fnc_respawninstant_meta","bis_fnc_respawnmanager_meta","bis_fnc_respawnmenuinventory_meta","bis_fnc_respawnmenuposition_meta","bis_fnc_respawnmenuspectator_meta","bis_fnc_respawnnone_meta","bis_fnc_respawnrounds_meta","bis_fnc_respawnseagull_meta","bis_fnc_respawnside_meta","bis_fnc_respawnspectator_meta","bis_fnc_respawntickets_meta","bis_fnc_respawntimepenalty_meta", + "bis_fnc_respawnwave_meta","bis_fnc_respect_meta","bis_fnc_returnchildren_meta","bis_fnc_returnconfigentry_meta","bis_fnc_returngroupcomposition_meta","bis_fnc_returnnestedelement_meta","bis_fnc_returnparents_meta","bis_fnc_returnvehicleturrets_meta","bis_fnc_romannumeral_meta","bis_fnc_rotatevector2d_meta","bis_fnc_rounddir_meta","bis_fnc_roundnum_meta","bis_fnc_rsclayer_meta", + "bis_fnc_runlater_meta","bis_fnc_sandstorm_meta","bis_fnc_savegame_meta","bis_fnc_saveinventory_meta","bis_fnc_saymessage_meta","bis_fnc_sceneareaclearance_meta","bis_fnc_scenecheckweapons_meta","bis_fnc_scenecreatescenetrigger_meta","bis_fnc_scenecreatesoundentities_meta","bis_fnc_scenegetobjects_meta","bis_fnc_scenegetparticipants_meta","bis_fnc_scenegetpositionbyangle_meta", + "bis_fnc_sceneintruderdetector_meta","bis_fnc_scenemiscstuff_meta","bis_fnc_scenerotate_meta","bis_fnc_scenesetanimationsforgroup_meta","bis_fnc_scenesetbehaviour_meta","bis_fnc_scenesetobjects_meta","bis_fnc_scenesetposformation_meta","bis_fnc_scriptedmove_meta","bis_fnc_scriptedwaypointtype_meta","bis_fnc_secondstostring_meta","bis_fnc_selectcrew_meta","bis_fnc_selectdiarysubject_meta", + "bis_fnc_selectrandom_meta","bis_fnc_selectrandomweighted_meta","bis_fnc_selectrespawntemplate_meta","bis_fnc_setcuratorattributes_meta","bis_fnc_setcuratorcamera_meta","bis_fnc_setcuratorvisionmodes_meta","bis_fnc_setdate_meta","bis_fnc_setfog_meta","bis_fnc_setheight_meta","bis_fnc_setidcstreamfriendly_meta","bis_fnc_setidentity_meta","bis_fnc_setmissionstatusslot_meta", + "bis_fnc_setnestedelement_meta","bis_fnc_setobjectrotation_meta","bis_fnc_setobjecttexture_meta","bis_fnc_setovercast_meta","bis_fnc_setpitchbank_meta","bis_fnc_setppeffecttemplate_meta","bis_fnc_setrank_meta","bis_fnc_setrespawndelay_meta","bis_fnc_setrespawninventory_meta","bis_fnc_setservervariable_meta","bis_fnc_settask_meta","bis_fnc_settasklocal_meta","bis_fnc_settopairs_meta", + "bis_fnc_setunitinsignia_meta","bis_fnc_shakecuratorcamera_meta","bis_fnc_shakegauges_meta","bis_fnc_showcuratorattributes_meta","bis_fnc_showcuratorfeedbackmessage_meta","bis_fnc_showmarkers_meta","bis_fnc_showmissionstatus_meta","bis_fnc_shownotification_meta","bis_fnc_showrespawnmenu_meta","bis_fnc_showtime_meta","bis_fnc_showunitinfo_meta","bis_fnc_shutdown_meta","bis_fnc_sidecolor_meta", + "bis_fnc_sideid_meta","bis_fnc_sidename_meta","bis_fnc_sidetype_meta","bis_fnc_singlemissionconfig_meta","bis_fnc_singlemissionkeys_meta","bis_fnc_singlemissionname_meta","bis_fnc_skirmishtrigger_meta","bis_fnc_sortalphabetically_meta","bis_fnc_sortby_meta","bis_fnc_sortnum_meta","bis_fnc_spawn_meta","bis_fnc_spawncrew_meta","bis_fnc_spawnenemy_meta","bis_fnc_spawngroup_meta", + "bis_fnc_spawnobjects_meta","bis_fnc_spawnvehicle_meta","bis_fnc_splitstring_meta","bis_fnc_spotter_meta","bis_fnc_startloadingscreen_meta","bis_fnc_strategicmapanimate_meta","bis_fnc_strategicmapmousebuttonclick_meta","bis_fnc_strategicmapopen_meta","bis_fnc_subclasses_meta","bis_fnc_subselect_meta","bis_fnc_supplydrop_meta","bis_fnc_supplydropservice_meta","bis_fnc_swapvars_meta", + "bis_fnc_synchronizedobjects_meta","bis_fnc_target_meta","bis_fnc_taskattack_meta","bis_fnc_taskchildren_meta","bis_fnc_taskcompleted_meta","bis_fnc_taskcreate_meta","bis_fnc_taskcurrent_meta","bis_fnc_taskdefend_meta","bis_fnc_taskdescription_meta","bis_fnc_taskdestination_meta","bis_fnc_taskexists_meta","bis_fnc_taskhandler_meta","bis_fnc_taskhint_meta","bis_fnc_taskparent_meta", + "bis_fnc_taskpatrol_meta","bis_fnc_taskreal_meta","bis_fnc_tasksetcurrent_meta","bis_fnc_tasksetdescription_meta","bis_fnc_tasksetdestination_meta","bis_fnc_tasksetstate_meta","bis_fnc_taskstate_meta","bis_fnc_tasksunit_meta","bis_fnc_taskvar_meta","bis_fnc_teamcolor_meta","bis_fnc_terraingradangle_meta","bis_fnc_texttiles_meta","bis_fnc_texturemarker_meta","bis_fnc_texturevehicleicon_meta", + "bis_fnc_threat_meta","bis_fnc_timetostring_meta","bis_fnc_titlecard_meta","bis_fnc_titletext_meta","bis_fnc_togglecuratorvisionmode_meta","bis_fnc_toupperdisplaytexts_meta","bis_fnc_tracebullets_meta","bis_fnc_trackmissiontime_meta","bis_fnc_transportservice_meta","bis_fnc_tridentclient_meta","bis_fnc_tridentexecute_meta","bis_fnc_tridentgetrelationship_meta", + "bis_fnc_tridenthandledamage_meta","bis_fnc_tridentsetrelationship_meta","bis_fnc_triggertomarker_meta","bis_fnc_trimstring_meta","bis_fnc_typetext2_meta","bis_fnc_typetext_meta","bis_fnc_uniqueclasses_meta","bis_fnc_unitaddon_meta","bis_fnc_unitcapture_meta","bis_fnc_unitcapturefiring_meta","bis_fnc_unitcapturesimple_meta","bis_fnc_unitplay_meta","bis_fnc_unitplayfiring_meta", + "bis_fnc_unitplaysimple_meta","bis_fnc_unitvector_meta","bis_fnc_unpackstaticweapon_meta","bis_fnc_updateplayerarray_meta","bis_fnc_validateparametersoo_meta","bis_fnc_variablespaceadd_meta","bis_fnc_variablespaceremove_meta","bis_fnc_vectoradd_meta","bis_fnc_vectordiff_meta","bis_fnc_vectorfromxtoy_meta","bis_fnc_vectormultiply_meta","bis_fnc_vehicleroles_meta","bis_fnc_version_meta", + "bis_fnc_vrcourseballistics1_meta","bis_fnc_vrcourseballistics2_meta","bis_fnc_vrcourseballistics3_meta","bis_fnc_vrcourseballistics4_meta","bis_fnc_vrcoursecommandingactions1_meta","bis_fnc_vrcoursecommandingactions2_meta","bis_fnc_vrcoursecommandingactions3_meta","bis_fnc_vrcoursecommandingbehaviour1_meta","bis_fnc_vrcoursecommandingbehaviour2_meta", + "bis_fnc_vrcoursecommandingbehaviour3_meta","bis_fnc_vrcoursecommandingmovement1_meta","bis_fnc_vrcoursecommandingmovement2_meta","bis_fnc_vrcoursecommandingvehicles1_meta","bis_fnc_vrcoursecommandingvehicles2_meta","bis_fnc_vrcoursecommandingvehicles3_meta","bis_fnc_vrcourseheliadvanced1_meta","bis_fnc_vrcourseheliadvanced2_meta","bis_fnc_vrcourseheliadvanced3_meta", + "bis_fnc_vrcourseheliadvanced4_meta","bis_fnc_vrcourseheliadvanced5_meta","bis_fnc_vrcourseheliadvanced6_meta","bis_fnc_vrcoursehelibasics1_meta","bis_fnc_vrcoursehelibasics2_meta","bis_fnc_vrcoursehelibasics3_meta","bis_fnc_vrcoursehelislingload1_meta","bis_fnc_vrcourseheliweapons1_meta","bis_fnc_vrcourseheliweapons2_meta","bis_fnc_vrcourseheliweapons3_meta", + "bis_fnc_vrcourseheliweapons4_meta","bis_fnc_vrcourselaunchers1_meta","bis_fnc_vrcourselaunchers2_meta","bis_fnc_vrcourselaunchers3_meta","bis_fnc_vrcourseplaceables1_meta","bis_fnc_vrcourseplaceables2_meta","bis_fnc_vrcourseplaceables3_meta","bis_fnc_vrcoursetargetdesignation1_meta","bis_fnc_vrcoursetargetdesignation2_meta","bis_fnc_vrcoursetargetdesignation3_meta", + "bis_fnc_vrdrawborder_meta","bis_fnc_vrdrawgrid_meta","bis_fnc_vreffectkilled_meta","bis_fnc_vrfadein_meta","bis_fnc_vrfadeout_meta","bis_fnc_vrspawneffect_meta","bis_fnc_vrspawnselector_meta","bis_fnc_vrtimer_meta","bis_fnc_weaponaddon_meta","bis_fnc_weaponcomponents_meta","bis_fnc_worldarea_meta","bis_fnc_wpartillery_meta","bis_fnc_wpland_meta","bis_fnc_wppatrol_meta", + "bis_fnc_wprelax_meta","bis_fnc_wpsuppress_meta","bis_fnc_zzrotate_meta","bis_functions_list","bis_functions_listpostinit","bis_functions_listpreinit","bis_functions_listrecompile","bis_initgame","bis_mainmenu_islearnexpanded","bis_mainmenu_isoptionsexpanded","bis_mainmenu_isplayexpanded","bis_rscdisplayloading_selecteddlcappid","bis_shownchat","bis_fnc_easeout", + "bis_fnc_richcurve_setorientationmode","bis_fnc_scaleandtranslate","bis_fnc_timeline_getcurrenttime","bis_fnc_richcurve_getpreviouskey","bis_fnc_richcurve_edencomputenearestsegment","bis_fnc_timeline_cleanup","bis_fnc_timeline_isplaying","bis_fnc_key_getleavecontrolpoint","bis_fnc_camera_getfov","bis_fnc_timeline_gettimeleft","bis_fnc_zoomlock","bis_fnc_vectordivide", + "bis_fnc_timeline_edenconnectionchanged","bis_fnc_controlpoint_edenconnectionchanged","bis_fnc_bounceinout","bis_fnc_richcurve_edendrawcurve3d","bis_fnc_clerp","bis_fnc_controlpoint_edenregisteredtoworld","bis_fnc_changecolormarker","bis_fnc_modulecivilianpresencesafespot","bis_fnc_key_edenconnectionchanged","bis_fnc_3den_init","bis_fnc_key_setvalue","bis_fnc_controlpoint_edendragged", + "bis_fnc_quinticout","bis_fnc_key_edenregisteredtoworld","bis_fnc_camera_edenattributeschanged","bis_fnc_3den_onselectionchange","bis_fnc_key_getownercurve","bis_fnc_timeline_getstoptime","bis_fnc_zoomunlock","bis_fnc_key_isvector","bis_fnc_timeline_edendeleted","bis_fnc_camera_edeninit","bis_fnc_richcurve_getkeysattime","bis_fnc_key_setarrivetangentweight","bis_fnc_zoomonarea","bis_fnc_isequalvector", + "bis_fnc_richcurve_edendrawcontrolpoints3d","bis_fnc_bounceout","bis_fnc_quinticinoutvector","bis_fnc_3den_onmissionload","bis_fnc_rotatemarker","bis_fnc_timeline_edenisselected","bis_fnc_timeline_setloop","bis_fnc_timeline_edeninit","bis_fnc_timeline_isfinished","bis_fnc_timeline_setlength","bis_fnc_richcurve_edentick","bis_fnc_interpolatevectorconstant","bis_fnc_mapanimdone", + "bis_fnc_richcurve_computecurvearclength","bis_fnc_timeline_getposition","bis_fnc_richcurve_getnextkey","bis_fnc_key_setarrivetangent","bis_fnc_camera_sethudenabled","bis_fnc_controlpoint_isarrive","bis_fnc_timeline_isreverse","bis_fnc_timeline_finish","bis_fnc_controlpoint_setisarrive","bis_fnc_key_getconfigtime","bis_fnc_key_getleavetangent","bis_fnc_richcurve_getcurvelength", + "bis_fnc_deltatime","bis_fnc_mapanimclear","bis_fnc_hermite","bis_fnc_bezierinterpolatevector","bis_fnc_key_setinterpmode","bis_fnc_key_getleavetangentweight","bis_fnc_camera_edenunregisteredfromworld","bis_fnc_timeline_setreverse","bis_fnc_keyframeanimation_init","bis_fnc_timeline_stop","bis_fnc_key_isfloat","bis_fnc_timeline_deleted","bis_fnc_controlpoint_compute","bis_fnc_simplemovemarker", + "bis_fnc_timeline_simulatecurves","bis_fnc_camera_setvisionmode","bis_fnc_berpvector","bis_fnc_hidemarker","bis_fnc_encodeflags4","bis_fnc_camera_setcinemabordersenabled","bis_fnc_clamp","bis_fnc_encodeflags8","bis_fnc_timeline_setposition","bis_fnc_richcurve_gettimerange","bis_fnc_richcurve_edenattributeschanged","bis_fnc_initmodules_ambient","bis_fnc_quinticin","bis_fnc_controlpoint_computeownerkey", + "bis_fnc_timeline_islooping","bis_fnc_camera_getcam","bis_fnc_berp","bis_fnc_camera_edenselectionchanged","bis_fnc_clampvector","bis_fnc_timeline_getplayrate","bis_fnc_richcurve_edenisselected","bis_fnc_resizemarker","bis_fnc_findlookat","bis_fnc_key_getvalue","bis_fnc_3den_onkeyup","bis_fnc_richcurve_edenbakecurve3d","bis_fnc_zoomlockeh","bis_fnc_pow","bis_fnc_eventtimeline", + "bis_fnc_modulecivilianpresenceunit","bis_fnc_movemarker","bis_fnc_timeline_ispaused","bis_fnc_interpolateconstant","bis_fnc_key_setleavetangent","bis_fnc_hidemarkerarray","bis_fnc_key_setleavetangentweight","bis_fnc_interpolate","bis_fnc_richcurve_computeownertimeline","bis_fnc_richcurve_compute","bis_fnc_richcurve_getkeytime","bis_fnc_shakemap","bis_fnc_controlpoint_edenattributeschanged", + "bis_fnc_timeline_getplaytime","bis_fnc_timeline_edenattributeschanged","bis_fnc_key_computetime","bis_fnc_lookatarray","bis_fnc_timeline_setplayrate","bis_fnc_easeinout","bis_fnc_animatepicture","bis_fnc_key_edenattributeschanged","bis_fnc_blinkmarker","bis_fnc_bounceoutvector","bis_fnc_camera_gethudenabled","bis_fnc_mapanimadd","bis_fnc_timeline_play","bis_fnc_timeline_getlength", + "bis_fnc_easeinoutvector","bis_fnc_camera_setfov","bis_fnc_colormarker","bis_fnc_timeline_getplayfromstart","bis_fnc_key_compute","bis_fnc_showmarkerarray","bis_fnc_createtooltip","bis_fnc_camera_setfocus","bis_fnc_timeline_getalpha","bis_fnc_key_getinterpmode","bis_fnc_camera_deleted","bis_fnc_camera_init","bis_fnc_richcurve_getsimulatedobjects","bis_fnc_timeline_init","bis_fnc_richcurve_getcurvevaluefloat", + "bis_fnc_key_gettime","bis_fnc_richcurve_getfirstkey","bis_fnc_getmarkerstate","bis_fnc_key_edenunregisteredfromworld","bis_fnc_timeline_setinterpmode","bis_fnc_camera_getvisionmode","bis_fnc_key_getarrivetangentweight","bis_fnc_richcurve_getorientationmode","bis_fnc_camera_edenconnectionchanged","bis_fnc_richcurve_computekeys","bis_fnc_camera_tick","bis_fnc_nearestpoint","bis_fnc_camera_edenreset", + "bis_fnc_key_edenarecontrolpointslocked","bis_fnc_richcurve_getlookatposition","bis_fnc_timeline_tick","bis_fnc_key_computeownercurve","bis_fnc_bezierinterpolate","bis_fnc_camera_edenregisteredtoworld","bis_fnc_shakemapeh","bis_fnc_quinticinout","bis_fnc_richcurve_getkeys","bis_fnc_key_edenisselected","bis_fnc_3den_onmissionpreviewend","bis_fnc_missionselector","bis_fnc_richcurve_resetkeyseventstate", + "bis_fnc_richcurve_getkeyindex","bis_fnc_richcurve_computesimulatedobjects","bis_fnc_easeoutvector","bis_fnc_getbordermarkers","bis_fnc_animatedscreen","bis_fnc_richcurve_getcurvepoints","bis_fnc_timeline_edendragged","bis_fnc_richcurve_getownertimeline","bis_fnc_lookatarrayeh","bis_fnc_inverselerp","bis_fnc_3den_onkeydown","bis_fnc_richcurve_getlastkey","bis_fnc_timeline_getsimulatedcurves","bis_fnc_easein", + "bis_fnc_slerp","bis_fnc_controlpoint_edenunregisteredfromworld","bis_fnc_richcurve_istimeinseconds","bis_fnc_quinticinvector","bis_fnc_getmarkers","bis_fnc_key_getarrivetangent","bis_fnc_key_getfov","bis_fnc_bounceinoutvector","bis_fnc_bouncein","bis_fnc_cancelmarker","bis_fnc_decodeflags4","bis_fnc_lerpvector","bis_fnc_richcurve_edenmarkstatedirty","bis_fnc_holdkey","bis_fnc_richcurve_edendragged", + "bis_fnc_decodeflags8","bis_fnc_quinticoutvector","bis_fnc_showmarker","bis_fnc_key_edendragged","bis_fnc_key_settime","bis_fnc_controlpoint_edenisselected","bis_fnc_camera_edenisselected","bis_fnc_pulsate","bis_fnc_key_getarrivecontrolpoint","bis_fnc_richcurve_getkeyfromindex","bis_fnc_easeinvector","bis_fnc_modulecivilianpresence","bis_fnc_hermitevector","bis_fnc_richcurve_edenconnectionchanged", + "bis_fnc_controlpoint_getownerkey","bis_fnc_richcurve_getcurvevaluevector","bis_fnc_interpolatevector","bis_fnc_camera_getfocus","bis_fnc_bounceinvector","bis_fnc_richcurve_reset","bis_fnc_timeline_setpause","bis_fnc_camera_setcam","bis_fnc_3den_onmissionnew","bis_fnc_richcurve_setkeys","bis_fnc_camera_getcinemabordersenabled","bis_fnc_richcurve_numkeys","bis_fnc_bezierlength","bis_fnc_camera_edendeleted", + "bis_fnc_keyframeanimation_deltatime","bis_fnc_timeline_getinterpmode","bis_fnc_initmodules_keyframeanimation","bis_fnc_randomposintersection","bis_fnc_modulevanguardfob","bis_fnc_animatedbriefing","bis_fnc_reviveisvalidsecure","bis_fnc_modulevanguardobjective","bis_fnc_animatedopening" + }; + + //Life Functions + LIFE_Functions[] = { + "life_fnc_aan","life_fnc_aan_meta","life_fnc_acctype","life_fnc_acctype_meta","life_fnc_actionkeyhandler","life_fnc_actionkeyhandler_meta","life_fnc_addvehicle2chain","life_fnc_addvehicle2chain_meta","life_fnc_admincompensate","life_fnc_admincompensate_meta","life_fnc_admindebugcon","life_fnc_admindebugcon_meta","life_fnc_adminfreeze","life_fnc_adminfreeze_meta", + "life_fnc_admingetid","life_fnc_admingetid_meta","life_fnc_admingodmode","life_fnc_admingodmode_meta","life_fnc_adminid","life_fnc_adminid_meta","life_fnc_admininfo","life_fnc_admininfo_meta","life_fnc_adminmarkers","life_fnc_adminmarkers_meta","life_fnc_adminmenu","life_fnc_adminmenu_meta","life_fnc_adminquery","life_fnc_adminquery_meta","life_fnc_adminspectate", + "life_fnc_adminspectate_meta","life_fnc_adminteleport","life_fnc_adminteleport_meta","life_fnc_admintphere","life_fnc_admintphere_meta","life_fnc_animsync","life_fnc_animsync_meta","life_fnc_arrestaction","life_fnc_arrestaction_meta","life_fnc_atmmenu","life_fnc_atmmenu_meta","life_fnc_bankdeposit","life_fnc_bankdeposit_meta","life_fnc_banktransfer", + "life_fnc_banktransfer_meta","life_fnc_bankwithdraw","life_fnc_bankwithdraw_meta","life_fnc_blastingcharge","life_fnc_blastingcharge_meta","life_fnc_boltcutter","life_fnc_boltcutter_meta","life_fnc_bountyreceive","life_fnc_bountyreceive_meta","life_fnc_broadcast","life_fnc_broadcast_meta","life_fnc_buyclothes","life_fnc_buyclothes_meta","life_fnc_buyhouse", + "life_fnc_buyhouse_meta","life_fnc_buyhousegarage","life_fnc_buyhousegarage_meta","life_fnc_buylicense","life_fnc_buylicense_meta","life_fnc_calweightdiff","life_fnc_calweightdiff_meta","life_fnc_capturehideout","life_fnc_capturehideout_meta","life_fnc_catchfish","life_fnc_catchfish_meta","life_fnc_catchturtle","life_fnc_catchturtle_meta","life_fnc_cellphone", + "life_fnc_cellphone_meta","life_fnc_checkmap","life_fnc_checkmap_meta","life_fnc_changeclothes","life_fnc_changeclothes_meta","life_fnc_chopshopmenu","life_fnc_chopshopmenu_meta","life_fnc_chopshopselection","life_fnc_chopshopselection_meta","life_fnc_chopshopsell","life_fnc_chopshopsell_meta","life_fnc_chopShopSold","life_fnc_chopShopSold_meta","life_fnc_civmarkers","life_fnc_civmarkers_meta", + "life_fnc_clearvehicleammo","life_fnc_clearvehicleammo_meta","life_fnc_clothingfilter","life_fnc_clothingfilter_meta","life_fnc_clothingmenu","life_fnc_clothingmenu_meta","life_fnc_colorvehicle","life_fnc_colorvehicle_meta","life_fnc_containerinvsearch","life_fnc_containerinvsearch_meta","life_fnc_containermenu","life_fnc_containermenu_meta","life_fnc_copbreakdoor", + "life_fnc_copbreakdoor_meta","life_fnc_cophouseowner","life_fnc_cophouseowner_meta","life_fnc_copinteractionmenu","life_fnc_copinteractionmenu_meta","life_fnc_coplights","life_fnc_coplights_meta","life_fnc_copmarkers","life_fnc_copmarkers_meta","life_fnc_copsearch","life_fnc_copsearch_meta","life_fnc_copsiren", + "life_fnc_copsiren_meta","life_fnc_copsplit","life_fnc_copsplit_meta","life_fnc_corpse","life_fnc_corpse_meta","life_fnc_creategang","life_fnc_creategang_meta","life_fnc_deathscreen","life_fnc_deathscreen_meta","life_fnc_defusekit","life_fnc_defusekit_meta","life_fnc_demochargetimer","life_fnc_demochargetimer_meta","life_fnc_devicemine","life_fnc_devicemine_meta", + "life_fnc_displayhandler","life_fnc_displayhandler_meta","life_fnc_dooranimate","life_fnc_dooranimate_meta","life_fnc_dpfinish","life_fnc_dpfinish_meta","life_fnc_dropfishingnet","life_fnc_dropfishingnet_meta","life_fnc_dropitems","life_fnc_dropitems_meta","life_fnc_ongameinterrupt","life_fnc_ongameinterrupt_meta","life_fnc_escortaction","life_fnc_escortaction_meta", + "life_fnc_fedcamdisplay","life_fnc_fedcamdisplay_meta","life_fnc_fetchcfgdetails","life_fnc_fetchcfgdetails_meta","life_fnc_fetchdeadgear","life_fnc_fetchdeadgear_meta","life_fnc_fetchvehinfo","life_fnc_fetchvehinfo_meta","life_fnc_flashbang","life_fnc_flashbang_meta","life_fnc_freezeplayer","life_fnc_freezeplayer_meta","life_fnc_fuellbchange","life_fnc_fuellbchange_meta", + "life_fnc_fuelrefuelcar","life_fnc_fuelrefuelcar_meta","life_fnc_fuelstatopen","life_fnc_fuelstatopen_meta","life_fnc_fuelstore","life_fnc_fuelstore_meta","life_fnc_fuelsupply","life_fnc_fuelsupply_meta","life_fnc_gangcreated","life_fnc_gangcreated_meta","life_fnc_usegangbank","life_fnc_usegangbank_meta","life_fnc_gangdisband","life_fnc_gangdisband_meta","life_fnc_gangdisbanded", + "life_fnc_gangdisbanded_meta","life_fnc_ganginvite","life_fnc_ganginvite_meta","life_fnc_ganginviteplayer","life_fnc_ganginviteplayer_meta","life_fnc_gangkick","life_fnc_gangkick_meta","life_fnc_gangleave","life_fnc_gangleave_meta","life_fnc_gangmenu","life_fnc_gangmenu_meta","life_fnc_gangnewleader","life_fnc_gangnewleader_meta","life_fnc_gangupgrade","life_fnc_gangupgrade_meta", + "life_fnc_gangbankresponse","life_fnc_gangbankresponse_meta","life_fnc_garagelbchange","life_fnc_garagelbchange_meta","life_fnc_garagerefund","life_fnc_garagerefund_meta","life_fnc_gather","life_fnc_gather_meta","life_fnc_getbuildingpositions","life_fnc_getbuildingpositions_meta","life_fnc_getdpmission","life_fnc_getdpmission_meta","life_fnc_givediff","life_fnc_givediff_meta","life_fnc_giveitem", + "life_fnc_giveitem_meta","life_fnc_givemoney","life_fnc_givemoney_meta","life_fnc_gutanimal","life_fnc_gutanimal_meta","life_fnc_handledamage","life_fnc_handledamage_meta","life_fnc_handleinv","life_fnc_handleinv_meta","life_fnc_handleitem","life_fnc_handleitem_meta","life_fnc_healhospital","life_fnc_healhospital_meta","life_fnc_hideobj","life_fnc_hideobj_meta","life_fnc_houseconfig", + "life_fnc_houseconfig_meta","life_fnc_housemenu","life_fnc_housemenu_meta","life_fnc_hudupdate","life_fnc_hudupdate_meta","life_fnc_impoundaction","life_fnc_impoundaction_meta","life_fnc_impoundmenu","life_fnc_impoundmenu_meta","life_fnc_initciv","life_fnc_initciv_meta","life_fnc_initcop","life_fnc_initcop_meta","life_fnc_initgang", + "life_fnc_initgang_meta","life_fnc_inithouses","life_fnc_inithouses_meta","life_fnc_initmedic","life_fnc_initmedic_meta","life_fnc_inventoryclosed","life_fnc_inventoryclosed_meta","life_fnc_inventoryopened","life_fnc_inventoryopened_meta","life_fnc_isdamaged","life_fnc_isdamaged_meta","life_fnc_isnumeric","life_fnc_isnumeric_meta","life_fnc_isuidactive","life_fnc_isuidactive_meta", + "life_fnc_itemweight","life_fnc_itemweight_meta","life_fnc_jail","life_fnc_jail_meta","life_fnc_jailme","life_fnc_jailme_meta","life_fnc_jailsys","life_fnc_jailsys_meta","life_fnc_jerrycanrefuel","life_fnc_jerrycanrefuel_meta","life_fnc_jerryrefuel","life_fnc_jerryrefuel_meta","life_fnc_jumpfnc","life_fnc_jumpfnc_meta","life_fnc_keydrop","life_fnc_keydrop_meta","life_fnc_keygive", + "life_fnc_keygive_meta","life_fnc_keyhandler","life_fnc_keyhandler_meta","life_fnc_keymenu","life_fnc_keymenu_meta","life_fnc_knockedout","life_fnc_knockedout_meta","life_fnc_knockoutaction","life_fnc_knockoutaction_meta","life_fnc_levelcheck","life_fnc_levelcheck_meta","life_fnc_licensecheck","life_fnc_licensecheck_meta","life_fnc_licensesread","life_fnc_licensesread_meta","life_fnc_lighthouse", + "life_fnc_lighthouse_meta","life_fnc_lighthouseaction","life_fnc_lighthouseaction_meta","life_fnc_loaddeadgear","life_fnc_loaddeadgear_meta","life_fnc_loadgear","life_fnc_loadgear_meta","life_fnc_lockhouse","life_fnc_lockhouse_meta","life_fnc_lockpick","life_fnc_lockpick_meta","life_fnc_lockuphouse","life_fnc_lockuphouse_meta","life_fnc_lockvehicle","life_fnc_lockvehicle_meta","life_fnc_mediclights", + "life_fnc_mediclights_meta","life_fnc_medicmarkers","life_fnc_medicmarkers_meta","life_fnc_medicrequest","life_fnc_medicrequest_meta","life_fnc_medicsiren","life_fnc_medicsiren_meta","life_fnc_medicsirenlights","life_fnc_medicsirenlights_meta","life_fnc_mine","life_fnc_mine_meta","life_fnc_movein","life_fnc_movein_meta","life_fnc_nearatm","life_fnc_nearatm_meta", + "life_fnc_nearestdoor","life_fnc_nearestdoor_meta","life_fnc_nearestobjects","life_fnc_nearestobjects_meta","life_fnc_nearunits","life_fnc_nearunits_meta","life_fnc_newsbroadcast","life_fnc_newsbroadcast_meta","life_fnc_numbertext","life_fnc_numbertext_meta","life_fnc_onfired","life_fnc_onfired_meta","life_fnc_onplayerkilled","life_fnc_onplayerkilled_meta","life_fnc_onplayerrespawn", + "life_fnc_onplayerrespawn_meta","life_fnc_ontakeitem","life_fnc_ontakeitem_meta","life_fnc_openinventory","life_fnc_openinventory_meta","life_fnc_p_changescreen","life_fnc_p_changescreen_meta","life_fnc_p_getscreengroupidc","life_fnc_p_getscreengroupidc_meta","life_fnc_p_handlescreenevent","life_fnc_p_handlescreenevent_meta","life_fnc_p_init","life_fnc_p_init_meta","life_fnc_p_initmainmenu", + "life_fnc_p_initmainmenu_meta","life_fnc_p_onclick","life_fnc_p_onclick_meta","life_fnc_p_oneachframe","life_fnc_p_oneachframe_meta","life_fnc_p_onload","life_fnc_p_onload_meta","life_fnc_p_onmouseenter","life_fnc_p_onmouseenter_meta","life_fnc_p_onmouseexit","life_fnc_p_onmouseexit_meta","life_fnc_p_onunload","life_fnc_p_onunload_meta","life_fnc_p_openmenu","life_fnc_p_openmenu_meta", + "life_fnc_p_updatemenu","life_fnc_p_updatemenu_meta","life_fnc_packupspikes","life_fnc_packupspikes_meta","life_fnc_pardon","life_fnc_pardon_meta","life_fnc_pickaxeuse","life_fnc_pickaxeuse_meta","life_fnc_pickupitem","life_fnc_pickupitem_meta","life_fnc_pickupmoney","life_fnc_pickupmoney_meta","life_fnc_placecontainer","life_fnc_placecontainer_meta","life_fnc_placestorage","life_fnc_placestorage_meta", + "life_fnc_playercount","life_fnc_playercount_meta","life_fnc_playerinbuilding","life_fnc_playerinbuilding_meta","life_fnc_playerskins","life_fnc_playerskins_meta","life_fnc_playertags","life_fnc_playertags_meta","life_fnc_postbail","life_fnc_postbail_meta","life_fnc_postnewsbroadcast","life_fnc_postnewsbroadcast_meta","life_fnc_processaction","life_fnc_processaction_meta","life_fnc_progressbar", + "life_fnc_progressbar_meta","life_fnc_pulloutaction","life_fnc_pulloutaction_meta","life_fnc_pulloutveh","life_fnc_pulloutveh_meta","life_fnc_pushobject","life_fnc_pushobject_meta","life_fnc_putincar","life_fnc_putincar_meta","life_fnc_questiondealer","life_fnc_questiondealer_meta","life_fnc_radar","life_fnc_radar_meta","life_fnc_raidhouse","life_fnc_raidhouse_meta","life_fnc_receiveitem", + "life_fnc_receiveitem_meta","life_fnc_receivemoney","life_fnc_receivemoney_meta","life_fnc_removecontainer","life_fnc_removecontainer_meta","life_fnc_removeitem","life_fnc_removeitem_meta","life_fnc_removelicenses","life_fnc_removelicenses_meta","life_fnc_repairdoor","life_fnc_repairdoor_meta","life_fnc_repairtruck","life_fnc_repairtruck_meta","life_fnc_requestmedic","life_fnc_requestmedic_meta", + "life_fnc_respawned","life_fnc_respawned_meta","life_fnc_restrain","life_fnc_restrain_meta","life_fnc_restrainaction","life_fnc_restrainaction_meta","life_fnc_revealobjects","life_fnc_revealobjects_meta","life_fnc_revived","life_fnc_revived_meta","life_fnc_reviveplayer","life_fnc_reviveplayer_meta","life_fnc_robaction","life_fnc_robaction_meta","life_fnc_robperson","life_fnc_robperson_meta", + "life_fnc_robreceive","life_fnc_robreceive_meta","life_fnc_s_onchar","life_fnc_s_onchar_meta","life_fnc_s_oncheckedchange","life_fnc_s_oncheckedchange_meta","life_fnc_s_onsliderchange","life_fnc_s_onsliderchange_meta","life_fnc_safefix","life_fnc_safefix_meta","life_fnc_safeinventory","life_fnc_safeinventory_meta","life_fnc_safeopen","life_fnc_safeopen_meta","life_fnc_safetake","life_fnc_safetake_meta", + "life_fnc_savegear","life_fnc_savegear_meta","life_fnc_say3d","life_fnc_say3d_meta","life_fnc_searchaction","life_fnc_searchaction_meta","life_fnc_searchclient","life_fnc_searchclient_meta","life_fnc_searchvehaction","life_fnc_searchvehaction_meta","life_fnc_seizeclient","life_fnc_seizeclient_meta","life_fnc_seizeplayeraction", + "life_fnc_seizeplayeraction_meta","life_fnc_sellgarage","life_fnc_sellgarage_meta","life_fnc_sellhouse","life_fnc_sellhouse_meta","life_fnc_sellhousegarage","life_fnc_sellhousegarage_meta","life_fnc_servicechopper","life_fnc_servicechopper_meta","life_fnc_setfuel","life_fnc_setfuel_meta","life_fnc_setmapposition","life_fnc_setmapposition_meta","life_fnc_settexture_meta","life_fnc_settingsmenu", + "life_fnc_settingsmenu_meta","life_fnc_setupactions","life_fnc_setupactions_meta","life_fnc_setupevh","life_fnc_setupevh_meta","life_fnc_simdisable","life_fnc_simdisable_meta","life_fnc_sirenlights","life_fnc_sirenlights_meta","life_fnc_sounddevice","life_fnc_sounddevice_meta","life_fnc_spawnconfirm","life_fnc_spawnconfirm_meta","life_fnc_spawnmenu","life_fnc_spawnmenu_meta","life_fnc_spawnpointcfg", + "life_fnc_spawnpointcfg_meta","life_fnc_spawnpointselected","life_fnc_spawnpointselected_meta","life_fnc_spikestrip","life_fnc_spikestrip_meta","life_fnc_spikestripeffect","life_fnc_spikestripeffect_meta","life_fnc_stopescorting","life_fnc_stopescorting_meta","life_fnc_storagebox","life_fnc_storagebox_meta","life_fnc_storevehicle","life_fnc_storevehicle_meta","life_fnc_storevehicleaction", + "life_fnc_storevehicleaction_meta","life_fnc_startLoadout","life_fnc_startLoadout_meta","life_fnc_stripdownplayer","life_fnc_stripdownplayer_meta","life_fnc_surrender","life_fnc_surrender_meta","life_fnc_survival","life_fnc_survival_meta","life_fnc_tazed","life_fnc_tazed_meta","life_fnc_teleport","life_fnc_teleport_meta","life_fnc_ticketaction","life_fnc_ticketaction_meta","life_fnc_ticketgive", + "life_fnc_ticketgive_meta","life_fnc_ticketpaid","life_fnc_ticketpaid_meta","life_fnc_ticketpay","life_fnc_ticketpay_meta","life_fnc_ticketprompt","life_fnc_ticketprompt_meta","life_fnc_unimpound","life_fnc_unimpound_meta","life_fnc_unrestrain","life_fnc_unrestrain_meta","life_fnc_updateviewdistance","life_fnc_updateviewdistance_meta","life_fnc_useitem","life_fnc_useitem_meta", + "life_fnc_vehiclecolor3drefresh","life_fnc_vehiclecolor3drefresh_meta","life_fnc_vehiclecolorcfg","life_fnc_vehiclecolorcfg_meta","life_fnc_vehiclecolorstr","life_fnc_vehiclecolorstr_meta","life_fnc_vehiclegarage","life_fnc_vehiclegarage_meta","life_fnc_vehiclelistcfg","life_fnc_vehiclelistcfg_meta", + "life_fnc_3dpreviewdisplay","life_fnc_3dpreviewdisplay_meta","life_fnc_vehicleshopbuy","life_fnc_vehicleshopbuy_meta","life_fnc_3dpreviewexit","life_fnc_3dpreviewexit_meta","life_fnc_3dpreviewinit","life_fnc_3dpreviewinit_meta","life_fnc_vehicleshoplbchange","life_fnc_vehicleshoplbchange_meta", + "life_fnc_vehicleshopmenu","life_fnc_vehicleshopmenu_meta","life_fnc_vehicleweight","life_fnc_vehicleweight_meta","life_fnc_vehicleweightcfg","life_fnc_vehicleweightcfg_meta","life_fnc_vehinventory","life_fnc_vehinventory_meta","life_fnc_vehinvsearch","life_fnc_vehinvsearch_meta","life_fnc_vehshoplicenses","life_fnc_vehshoplicenses_meta","life_fnc_vehstoreitem","life_fnc_vehstoreitem_meta", + "life_fnc_vehtakeitem","life_fnc_vehtakeitem_meta","life_fnc_vinteractionmenu","life_fnc_vinteractionmenu_meta","life_fnc_virt_buy","life_fnc_virt_buy_meta","life_fnc_virt_menu","life_fnc_virt_menu_meta","life_fnc_virt_sell","life_fnc_virt_sell_meta","life_fnc_virt_update","life_fnc_virt_update_meta","life_fnc_wantedadd","life_fnc_wantedadd_meta","life_fnc_wantedaddp","life_fnc_wantedaddp_meta", + "life_fnc_wantedbounty","life_fnc_wantedbounty_meta","life_fnc_wantedfetch","life_fnc_wantedfetch_meta","life_fnc_wantedgrab","life_fnc_wantedgrab_meta","life_fnc_wantedinfo","life_fnc_wantedinfo_meta","life_fnc_wantedlist","life_fnc_wantedlist_meta","life_fnc_wantedmenu","life_fnc_wantedmenu_meta","life_fnc_wantedperson","life_fnc_wantedperson_meta","life_fnc_wantedpunish","life_fnc_wantedpunish_meta", + "life_fnc_wantedremove","life_fnc_wantedremove_meta","life_fnc_wantedticket","life_fnc_wantedticket_meta","life_fnc_weaponshopaccs","life_fnc_weaponshopaccs_meta","life_fnc_weaponshopbuysell","life_fnc_weaponshopbuysell_meta","life_fnc_weaponshopcfg","life_fnc_weaponshopcfg_meta","life_fnc_weaponshopfilter","life_fnc_weaponshopfilter_meta","life_fnc_weaponshopmags","life_fnc_weaponshopmags_meta", + "life_fnc_weaponshopmenu","life_fnc_weaponshopmenu_meta","life_fnc_weaponshopselection","life_fnc_weaponshopselection_meta","life_fnc_welcomenotification","life_fnc_welcomenotification_meta","life_fnc_whereami","life_fnc_whereami_meta","life_fnc_wiretransfer","life_fnc_wiretransfer_meta","life_fnc_getinman", "life_fnc_getinman_meta","life_fnc_getoutman", "life_fnc_getoutman_meta" + }; + + SERVER_Functions[] = { + "db_fnc_asynccall","db_fnc_bool","db_fnc_insertrequest","db_fnc_mresarray","db_fnc_mresstring","db_fnc_mrestoarray","db_fnc_numbersafe","db_fnc_queryrequest","db_fnc_updatepartial","db_fnc_updaterequest","ton_fnc_addhouse","ton_fnc_addhouse_meta","ton_fnc_cell_adminmsg","ton_fnc_cell_adminmsgall","ton_fnc_cell_emsrequest","ton_fnc_cell_textadmin","ton_fnc_cell_textcop", + "ton_fnc_cell_textmsg","ton_fnc_chopshopsell","ton_fnc_chopshopsell_meta","ton_fnc_cleanup","ton_fnc_cleanup_meta","ton_fnc_cleanuprequest","ton_fnc_cleanuprequest_meta","ton_fnc_clientdisconnect","ton_fnc_clientdisconnect_meta","ton_fnc_clientgangkick","ton_fnc_clientgangleader","ton_fnc_clientgangleft","TON_fnc_clientGangLeft","ton_fnc_clientgetkey","ton_fnc_clientmessage","ton_fnc_federalupdate", + "ton_fnc_federalupdate_meta","ton_fnc_fetchplayerhouses","ton_fnc_fetchplayerhouses_meta","ton_fnc_getid","ton_fnc_getid_meta","ton_fnc_getvehicles","ton_fnc_getvehicles_meta","ton_fnc_housecleanup","ton_fnc_housecleanup_meta","ton_fnc_huntingzone","ton_fnc_huntingzone_meta","ton_fnc_index","ton_fnc_inithouses","ton_fnc_inithouses_meta","ton_fnc_insertgang","ton_fnc_insertgang_meta","ton_fnc_isnumber", + "ton_fnc_keymanagement","ton_fnc_keymanagement_meta","ton_fnc_managesc","ton_fnc_managesc_meta","ton_fnc_pickupaction","ton_fnc_pickupaction_meta","ton_fnc_player_query","ton_fnc_queryplayergang","ton_fnc_queryplayergang_meta","ton_fnc_removegang","ton_fnc_removegang_meta","ton_fnc_sellhouse","ton_fnc_sellhouse_meta","ton_fnc_spawnvehicle", + "ton_fnc_spawnvehicle_meta","ton_fnc_spikestrip","ton_fnc_spikestrip_meta","ton_fnc_terrainsort","ton_fnc_terrainsort_meta","ton_fnc_updategang","ton_fnc_updategang_meta","ton_fnc_updatehousecontainers","ton_fnc_updatehousecontainers_meta","ton_fnc_updatehousetrunk","ton_fnc_updatehousetrunk_meta","ton_fnc_vehiclecreate","ton_fnc_vehiclecreate_meta","ton_fnc_vehicledead","ton_fnc_vehicledead_meta", + "ton_fnc_vehicledelete","ton_fnc_vehicledelete_meta","ton_fnc_vehiclestore","ton_fnc_vehiclestore_meta","ton_fnc_entityrespawned","ton_fnc_entityrespawned_meta","ton_fnc_vehicleanimate","ton_fnc_vehicleanimate_meta" + }; + + SOCK_Functions[] = { + "sock_fnc_dataquery","sock_fnc_dataquery_meta","sock_fnc_insertplayerinfo","sock_fnc_insertplayerinfo_meta","sock_fnc_requestreceived","sock_fnc_requestreceived_meta","sock_fnc_syncdata","sock_fnc_syncdata_meta","sock_fnc_updatepartial","sock_fnc_updatepartial_meta","sock_fnc_updaterequest","sock_fnc_updaterequest_meta" + }; + + DB_Functions[] = { + "db_fnc_asynccall","db_fnc_asynccall_meta","db_fnc_bool","db_fnc_bool_meta","db_fnc_insertrequest","db_fnc_insertrequest_meta","db_fnc_mresarray","db_fnc_mresarray_meta","db_fnc_mresstring","db_fnc_mresstring_meta","db_fnc_mrestoarray","db_fnc_mrestoarray_meta","db_fnc_numbersafe","db_fnc_numbersafe_meta","db_fnc_queryrequest","db_fnc_queryrequest_meta", + "db_fnc_updatepartial","db_fnc_updatepartial_meta","db_fnc_updaterequest","db_fnc_updaterequest_meta" + }; + + + //SpyGlass Functions + SPY_Functions[] = { + "spy_fnc_cookiejar","spy_fnc_cookiejar_meta","spy_fnc_notifyadmins","spy_fnc_notifyadmins_meta","spy_fnc_observe","spy_fnc_observe_meta" + }; + + /* + allowedVariables is a list of variables in-use and their type + When adding a new variable your format should look like this: + [variablename,TYPENAME] i.e: + ["store_shop_vendor","OBJECT"] This is for when you place a new NPC and name it in the editor + */ + allowedVariables[] = { + { "civ_air_2", "OBJECT" }, { "civ_air_1", "OBJECT" }, { "vendor_hospital_3", "OBJECT" }, { "vendor_hospital_2", "OBJECT" }, { "hospital_assis_3", "OBJECT" }, { "hospital_assis_2", "OBJECT" }, { "cop_air_3", "OBJECT" }, { "cop_air_2", "OBJECT" },{ "civ_air_2_3", "OBJECT" }, { "civ_air_2_2", "OBJECT" }, { "atm_hospital_3", "OBJECT" }, { "atm_hospital_2", "OBJECT" }, { "civ_air_1_2", "OBJECT" }, + { "ton_fnc_handleblastingcharge", "CODE" }, { "bis_egspectator_showcamerabuttons", "BOOL" }, { "bis_egspectator_allow3ppcamera", "BOOL" }, { "bis_egspectatorcamera_lights", "ARRAY" }, { "bis_egspectatorcamera_lightson", "BOOL" }, { "bis_egspectator_showcontrolshelper", "BOOL" }, { "bis_egspectator_showlists", "BOOL" }, { "bis_egspectator_viewdistance", "SCALAR" }, { "life_broadcasttimer", "SCALAR" }, + { "bis_egspectator_showheader", "BOOL" }, { "cash", "SCALAR" }, { "life_action_spikestripdeploy", "SCALAR" }, { "rscegspectator_lastticktime", "SCALAR" }, { "bis_pp_burndamage", "ARRAY" }, { "life_safeobj", "OBJECT" }, { "life_dp_point", "OBJECT" }, { "life_dp_start", "OBJECT" }, { "bis_fnc_diagmacrossimpleobject", "CODE" }, { "bis_fnc_groupfromnetid", "CODE" }, { "bis_fnc_tasktype", "CODE" }, + { "bis_fnc_tasksetalwaysvisible", "CODE" }, { "bis_fnc_tasktypeicon", "CODE" }, { "bis_fnc_tasksettype", "CODE" }, { "bis_fnc_objectfromnetid", "CODE" }, { "bis_fnc_sunrisesunsettime", "CODE" }, { "bis_fnc_netid", "CODE" }, { "bis_fnc_getarea", "CODE" }, { "bis_fnc_taskalwaysvisible", "CODE" }, { "life_markers_vehicles", "ARRAY" }, { "life_markers_players", "ARRAY" }, + { "advanced_log", "STRING" }, { "money_log", "STRING" }, { "life_markers_Vehicles", "ARRAY" }, { "life_markers_Players", "ARRAY" }, { "life_vinact_curtarget", "OBJECT" }, { "life_ticket_cop", "OBJECT" }, { "life_ticket_unit", "OBJECT" }, { "life_ticket_val", "SCALAR" }, { "life_ticket_paid", "BOOL" }, { "life_boltcutter_uses", "SCALAR" }, { "life_pinact_container", "OBJECT" }, + { "luce_1", "SCRIPT" }, { "life_bail_amount", "SCALAR" }, { "life_canpay_bail", "BOOL" }, { "hc_life", "SCALAR" }, { "life_hc_isactive", "BOOL" }, { "ton_fnc_playtime_values", "ARRAY" }, { "ton_fnc_playtime_values_request", "ARRAY" }, { "hc_1", "OBJECT" }, { "hc_life", "BOOL" }, { "rscdisplaympinterrupt_respawntime", "SCALAR" }, { "bis_dynamictext_spawn_8", "SCRIPT" }, + { "life_my_gang", "OBJECT" }, {"am_exit","SCALAR"}, { "life_garage_sp", "ARRAY" }, { "life_garage_sp", "STRING" }, { "0", "ARRAY" }, { "life_oldvestitems", "ARRAY" }, { "life_shop_cam", "OBJECT" }, { "life_oldclothes", "STRING" }, { "life_cmenu_lock", "BOOL" }, { "life_oldhat", "STRING" }, { "life_oldvest", "STRING" }, { "life_oldglasses", "STRING" }, { "life_oldbackpackitems","ARRAY"}, + {"life_oldbackpack","STRING"}, { "rscnotification_data", "ARRAY" }, { "life_curwep_h", "STRING" }, { "carshop_lux_1", "OBJECT" }, { "life_olduniformitems", "ARRAY" }, { "bis_fnc_setvehiclemass_fsm", "SCALAR" }, { "life_3dPreview_light", "OBJECT" }, { "life_3dPreview_camera", "OBJECT" }, { "life_3dPreview_object", "OBJECT" }, + { "life_pos_attach", "ARRAY" }, { "life_inv_", "SCALAR" }, { "life_markers", "BOOL" }, { "life_markers_active", "BOOL" }, { "life_frozen", "BOOL" }, { "life_inv_rooster", "SCALAR" }, { "station_shop_09", "OBJECT" }, { "station_shop_08", "OBJECT" }, { "station_shop_07", "OBJECT" }, { "station_shop_06", "OBJECT" }, { "station_shop_04", "OBJECT" }, { "life_disable_getout", "BOOL" }, + { "bis_taskenhancements_3d", "BOOL" }, { "life_settings_enablenewsbroadcast", "BOOL" }, { "life_settings_enablesidechannel", "BOOL" }, { "life_isknocked", "BOOL" }, { "life_settings_viewdistancecar", "SCALAR" }, { "life_save_gear", "ARRAY" }, { "life_settings_viewdistanceair", "SCALAR" }, { "life_disable_getin", "BOOL" }, { "life_god", "BOOL" }, { "station_shop_3", "OBJECT" }, { "station_shop_2", "OBJECT" }, + { "station_shop_1", "OBJECT" }, { "station_shop_24", "OBJECT" }, { "station_shop_23", "OBJECT" }, { "station_shop_22", "OBJECT" }, { "station_shop_21", "OBJECT" }, { "station_shop_20", "OBJECT" }, { "life_settings_viewdistancefoot", "SCALAR" }, { "life_settings_tagson", "BOOL" }, { "station_shop_19", "OBJECT" }, { "bis_taskenhancements_enable", "BOOL" }, { "station_shop_18", "OBJECT" }, { "station_shop_17", "OBJECT" }, + { "life_container_activeobj", "OBJECT" }, { "station_shop_16", "OBJECT" }, { "station_shop_15", "OBJECT" }, { "station_shop_14", "OBJECT" }, { "station_shop_13", "OBJECT" }, { "station_shop_12", "OBJECT" }, { "station_shop_11", "OBJECT" }, { "station_shop_10", "OBJECT" }, { "life_progress", "DISPLAY" }, { "life_veh_shop", "ARRAY" }, { "bis_fnc_feedback_deltadamage", "SCALAR" }, { "life_clothing_store", "STRING" }, + { "life_pinact_curtarget", "OBJECT" }, { "license_cop_cg", "BOOL" }, { "life_blacklisted", "BOOL" }, { "bis_hitarray", "ARRAY" }, { "life_session_time", "BOOL" }, { "jumpactiontime", "SCALAR" }, { "life_paycheck", "SCALAR" }, { "life_adminlevel", "SCALAR" }, { "life_coplevel", "SCALAR" }, { "life_mediclevel", "SCALAR" }, { "rscdisplayloading_progressmission", "BOOL" }, { "dp_missions", "OBJECT" }, + { "life_inv_diamonduncut", "SCALAR" }, { "master_group", "OBJECT" }, { "bis_oldbleedremaining", "SCALAR" }, { "license_civ_marijuana", "BOOL" }, { "life_server_extdb_notloaded", "BOOL" }, { "life_inv_marijuana", "SCALAR" }, { "life_is_arrested", "BOOL" }, { "life_inv_copperunrefined", "SCALAR" }, { "jjjj_mmmm___eeeeeee_spawn_weapon", "CODE" }, { "life_actions", "ARRAY" }, + { "life_firstspawn", "BOOL" }, { "life_action_gathering", "BOOL" }, { "license_civ_trucking", "BOOL" }, { "bis_oldoxygen", "SCALAR" }, { "license_shop", "OBJECT" }, { "bis_pptype", "STRING" }, { "life_inv_redgull", "SCALAR" }, { "bis_deathblur", "SCALAR" }, { "life_inv_roosterraw", "SCALAR" }, { "w_o_o_k_i_e_anti_anti_hax", "CODE" }, { "jxmxe_spunkveh", "CODE" }, + { "life_session_tries", "SCALAR" }, { "life_paycheck", "CODE" }, { "bis_suffcc", "SCALAR" }, { "bis_bleedcc", "SCALAR" }, { "bis_performingdustpp", "BOOL" }, { "e_x_t_a_s_y_car_re", "CODE" }, { "bis_functions_mainscope", "OBJECT" }, { "bis_deathradialblur", "SCALAR" }, { "life_inv_goldbar", "SCALAR" }, { "bis_washit", "BOOL" }, { "life_action_delay", "SCALAR" }, { "reb_1_1", "OBJECT" }, { "jxmxe_spunkair", "CODE" }, + { "life_knockout", "BOOL" }, { "reb_1_2", "OBJECT" }, { "do_nuke", "CODE" }, { "life_inv_salema", "SCALAR" }, { "reb_1_3", "OBJECT" }, { "life_inv_sand", "SCALAR" }, { "life_inv_sheep", "SCALAR" }, { "bis_hitcc", "SCALAR" }, { "bis_add", "BOOL" }, { "life_inv_saltrefined", "SCALAR" }, { "life_inv_tbacon", "SCALAR" }, { "life_adminlevel", "CODE" }, { "life_sidechat", "BOOL" }, { "bis_pulsingfreq", "SCALAR" }, + { "bis_burnwet", "SCALAR" }, { "bis_olddmg", "SCALAR" }, { "w_o_o_k_i_e_fud_anti_anti_hax", "CODE" }, { "bis_alfa", "SCALAR" }, { "license_civ_cement", "BOOL" }, { "life_inv_pickaxe", "SCALAR" }, { "life_inv_hen", "SCALAR" }, { "bis_oldwasburning", "BOOL" }, { "bis_pp_burning", "BOOL" }, { "bis_counter", "SCALAR" }, { "license_civ_cocaine", "BOOL" }, + { "license_civ_sand", "BOOL" }, { "dp_10", "OBJECT" }, { "dp_11", "OBJECT" }, { "life_inv_fuelempty", "SCALAR" }, { "life_inv_defusekit", "SCALAR" }, { "life_garage_sell", "CODE" }, { "dp_12", "OBJECT" }, { "bis_damagefromexplosion", "SCALAR" }, { "life_inv_goatraw", "SCALAR" }, { "dp_13", "OBJECT" }, { "life_coplevel", "CODE" }, { "life_inv_boltcutter", "SCALAR" }, + { "life_inv_henraw", "SCALAR" }, { "dp_14", "OBJECT" }, { "jxmxe_publishvehicle", "CODE" }, { "life_garage_store", "BOOL" }, { "dp_15", "OBJECT" }, { "license_civ_rebel", "BOOL" }, { "life_houses", "ARRAY" }, { "dp_1", "OBJECT" }, { "dp_16", "OBJECT" }, { "life_respawned", "BOOL" }, { "life_inv_oilprocessed", "SCALAR" }, { "life_inv_goat", "SCALAR" }, { "license_civ_diamond", "BOOL" }, { "life_gangdata", "ARRAY" }, + { "dp_2", "OBJECT" }, { "dp_17", "OBJECT" }, { "life_inv_tuna", "SCALAR" }, { "life_donorlevel", "SCALAR" }, { "life_donorlevel", "CODE" }, { "dp_3", "OBJECT" }, { "dp_18", "OBJECT" }, { "bis_respawninprogress", "BOOL" }, { "life_vdfoot", "SCALAR" }, { "dp_4", "OBJECT" }, { "dp_19", "OBJECT" }, { "life_action_inuse", "BOOL" }, { "houses_76561198060146341", "ARRAY" }, { "dp_5", "OBJECT" }, { "bis_helper", "SCALAR" }, + { "jxmxe_spunkveh2", "CODE" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re", "CODE" }, { "life_atmbank", "SCALAR" }, { "life_inv_saltunrefined", "SCALAR" }, { "dp_6", "OBJECT" }, { "mari_processor", "OBJECT" }, { "life_wanted_list", "ARRAY" }, { "dp_7", "OBJECT" }, { "h1_3_1", "OBJECT" }, { "license_med_mair", "BOOL" }, { "dp_8", "OBJECT" }, { "h1_3_2", "OBJECT" }, { "bis_canstartred", "BOOL" }, { "dp_9", "OBJECT" }, + { "h1_3_3", "OBJECT" }, { "coke_processor", "OBJECT" }, { "jjjj_mmmm___eeeeeee_llyyssttiiccc_shit_re_old", "CODE" }, { "life_inv_peach", "SCALAR" }, { "life_hunger", "SCALAR" }, { "cheat0", "BOOL" }, { "bis_engineppreset", "BOOL" }, { "life_use_atm", "BOOL" }, { "license_civ_home", "BOOL" }, { "cheat1", "BOOL" }, { "gang_flag_1", "OBJECT" }, { "life_inv_lockpick", "SCALAR" }, { "life_inv_heroinunprocessed", "SCALAR" }, + { "cheat2", "BOOL" }, { "gang_flag_2", "OBJECT" }, { "life_interrupted", "BOOL" }, { "license_civ_dive", "BOOL" }, { "cheat3", "BOOL" }, { "bank_obj", "OBJECT" }, { "gang_flag_3", "OBJECT" }, { "life_inv_cocaineprocessed", "SCALAR" }, { "cheat4", "BOOL" }, { "paramsarray", "ARRAY" }, { "life_maxweight", "SCALAR" }, { "life_cash", "SCALAR" }, { "life_inv_salemaraw", "SCALAR" }, + { "cheat5", "BOOL" }, { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "cheat7", "BOOL" }, { "life_trunk_vehicle", "OBJECT" }, + { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, + { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, + { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, + { "reb_car_1", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, + { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, + { "bis_applypp7", "BOOL" }, { "life_inv_blastingcharge", "SCALAR" }, { "bis_applypp8", "BOOL" }, { "life_siren_active", "BOOL" }, { "life_spikestrip", "OBJECT" }, { "license_civ_pilot", "BOOL" }, { "bis_deltadmg", "SCALAR" }, { "license_civ_iron", "BOOL" }, { "gang_76561198060146341", "ARRAY" }, { "license_civ_copper", "BOOL" }, { "life_inv_cement", "SCALAR" }, + { "carshop1", "OBJECT" }, { "bis_disttofire", "SCALAR" }, { "life_inv_storagesmall", "SCALAR" }, { "life_inv_storagebig", "SCALAR" }, { "civ_spawn_1", "ARRAY" }, { "life_inv_copperrefined", "SCALAR" }, { "civ_spawn_2", "ARRAY" }, { "bis_unccc", "SCALAR" }, { "life_inv_cannabis", "SCALAR" }, { "license_cop_", "BOOL" }, { "civ_spawn_3", "ARRAY" }, { "carshop4", "OBJECT" }, + { "civ_spawn_4", "ARRAY" }, { "reb_1_3_1", "OBJECT" }, { "reb_1", "OBJECT" }, { "dealer_1", "OBJECT" }, { "dealer_2", "OBJECT" }, { "life_is_processing", "BOOL" }, { "life_inv_glass", "SCALAR" }, { "life_garage_type", "STRING" }, { "dealer_3", "OBJECT" }, { "life_inv_donuts", "SCALAR" }, { "life_bail_paid", "BOOL" }, { "life_inv_ironrefined", "SCALAR" }, { "life_inv_mackerel", "SCALAR" }, + { "db_async_active", "BOOL" }, { "life_removewanted", "BOOL" }, { "life_redgull_effect", "SCALAR" }, { "life_id_playertags", "STRING" }, { "life_delivery_in_progress", "BOOL" }, { "life_inv_ornate", "SCALAR" }, { "fed_bank", "OBJECT" }, { "bis_uncblur", "SCALAR" }, { "life_inv_tunaraw", "SCALAR" }, { "license_civ_medmarijuana", "BOOL" }, { "life_inv_mullet", "SCALAR" }, { "life_vdair", "SCALAR" }, + { "life_inv_diamondcut", "SCALAR" }, { "bis_suffblur", "SCALAR" }, { "license_civ_salt", "BOOL" }, { "life_carryweight", "SCALAR" }, { "life_server_isready", "BOOL" }, { "hq_lt_1", "OBJECT" }, { "life_inv_catsharkraw", "SCALAR" }, { "heroin_processor", "OBJECT" }, { "life_respawn_timer", "SCALAR" }, { "carshop1_2", "OBJECT" }, { "hq_desk_1", "OBJECT" }, { "carshop1_3", "OBJECT" }, + { "bis_blendcoloralpha", "SCALAR" }, { "life_vdcar", "SCALAR" }, { "db_async_extralock", "BOOL" }, { "life_clothing_purchase", "ARRAY" }, { "license_civ_driver", "BOOL" }, { "license_civ_ggst1", "BOOL" }, { "license_civ_ggst2", "BOOL" }, { "license_civ_ggst3", "BOOL" }, { "vhe_fnc_grua", "CODE" }, { "vhe_fnc_initgrua", "CODE" }, { "vhe_fnc_sirenasems", "CODE" }, { "vhe_fnc_sirenas", "CODE" }, { "reb_1_4", "OBJECT" }, + { "ggs_shop", "OBJECT" }, { "reb_helicopter_1", "OBJECT" }, { "reb_helicopter_2", "OBJECT" }, { "life_inv_spikestrip", "SCALAR" }, { "license_civ_heroin", "BOOL" }, { "life_inv_waterbottle", "SCALAR" }, { "bis_oldlifestate", "STRING" }, { "life_inv_ornateraw", "SCALAR" }, { "life_id_revealobjects", "SCALAR" }, { "life_id_playertags", "SCALAR" }, { "h1_3", "OBJECT" }, { "bis_pp_burnparams", "ARRAY" }, + { "life_session_completed", "BOOL" }, { "license_civ_gun", "BOOL" }, { "license_cop_cair", "BOOL" }, { "bis_stackedeventhandlers_oneachframe", "ARRAY" }, { "bis_teamswitched", "BOOL" }, { "life_inv_rabbitraw", "SCALAR" }, { "life_inv_defibrillator", "SCALAR" }, { "life_inv_toolkit", "SCALAR" }, { "life_gear", "ARRAY" }, { "life_istazed", "BOOL" }, { "life_net_dropped", "BOOL"}, + { "life_shop_npc", "OBJECT" }, { "life_shop_type", "STRING" }, { "life_deathcamera", "OBJECT" }, { "life_corpse", "OBJECT" }, { "life_admin_debug", "BOOL" }, { "bis_fnc_camera_target", "OBJECT" }, { "bis_fnc_camera_cam", "OBJECT" }, { "bis_fnc_camera_acctime", "SCALAR" }, { "bis_fnc_shownotification_process", "SCRIPT" }, { "bis_fnc_shownotification_counter", "SCALAR" }, { "bis_fnc_shownotification_queue", "ARRAY" }, + { "life_action_spikestrippickup", "SCALAR" }, { "life_container_active", "BOOL" }, { "life_cur_task", "TASK" }, { "life_cur_task", "OBJECT" }, { "life_enablenewsbroadcast", "BOOL" }, { "life_enablesidechannel", "BOOL" }, { "life_fed_scam", "OBJECT" }, { "life_coprecieve", "OBJECT" }, { "life_chopshop", "STRING" }, {"life_civ_position","ARRAY"}, {"life_is_alive","BOOL"}, {"finishedloop","BOOL"}, {"life_fnc_wantedcrimes","CODE"}, + {"ton_fnc_vehicleupdate","CODE"}, {"ton_fnc_recupkeyforhc","CODE"}, {"ton_fnc_getplaytime","CODE"}, {"ton_fnc_sellhousecontainer","CODE"}, {"ton_fnc_setplaytime","CODE"}, {"life_fnc_wantedprofupdate","CODE"}, {"ton_fnc_deletedbcontainer","CODE"}, {"life_save_civilian_position","BOOL"}, {"ton_fnc_addcontainer","CODE"}, {"life_hideoutbuildings","ARRAY"},{"bis_fnc_initmodules_combatpatrol","GROUP"}, + {"deltatime","SCALAR"}, {"bis_deltatime","SCALAR"}, {"life_storageplacing", "SCRIPT"}, {"bis_fnc_randomposintersection","CODE"}, {"bis_fnc_modulevanguardfob","CODE"}, {"bis_fnc_animatedbriefing","CODE"}, {"bis_fnc_reviveisvalidsecure","CODE"}, {"bis_fnc_modulevanguardobjective","CODE"}, {"bis_fnc_animatedopening","CODE"}, {"bis_fnc_modulevanguardscorepersistence","CODE"}, {"bis_fnc_revivesecureunit","CODE"} + }; + + allowedVariables_UI[] = { + {"rscdisplayinsertmarker","DISPLAY"},{"rscdisplayinventory","DISPLAY"},{"life_oldbackpack","STRING"},{"rscdisplayarcadeunit","DISPLAY"},{"rscstatic_display","DISPLAY"},{"rscdisplayarcademap_layout_2_isidson","BOOL"},{"rscdisplaygameoptions_listtags","CONTROL"},{"rscdisplaygameoptions_showdifficultygroup","CODE"},{"rscdisplaygameoptions_currentvalues","ARRAY"},{"rscdisplaygameoptions_valuecolora","CONTROL"}, + {"rscdisplaygameoptions_valuecolorb","CONTROL"},{"rscdisplaygameoptions_valuecolorg","CONTROL"},{"rscdisplaygameoptions_valuecolorr","CONTROL"},{"rscdisplaygameoptions_buttoncancel","CONTROL"},{"rscdisplaygameoptions_listvariables_lbselchanged","CODE"},{"rscdisplaygameoptions_listpresets_lbselchanged","CODE"},{"rscdisplaygameoptions_display","DISPLAY"},{"rscdisplaygameoptions_buttonok","CONTROL"}, + {"rscdisplayoptionslayout_data","ARRAY"},{"rscdisplaygameoptions_currentnames","ARRAY"},{"rscdisplayconfigure_selectedtab","STRING"},{"rscdisplaygameoptions_preview","CONTROL"},{"rscdisplaycontrolschemes","DISPLAY"},{"rscdisplaygameoptions_sliderposchanged","CODE"},{"rscdisplaygameoptions_buttonok_activated","BOOL"},{"rscdisplaygameoptions_listtags_lbselchanged","CODE"},{"rscdisplayoptionsaudio","DISPLAY"}, + {"rscdisplaygameoptions_buttonok_action","CODE"},{"rscdisplaygameoptions_listpresets","CONTROL"},{"rscdisplaygameoptions_listvariables","CONTROL"},{"rscdisplaygameoptions_previewbackground","CONTROL"},{"rscdisplaygameoptions_slidercolora","CONTROL"},{"rscdisplaygameoptions_slidercolorb","CONTROL"},{"rscdisplaygameoptions_slidercolorg","CONTROL"},{"rscdisplaygameoptions_slidercolorr","CONTROL"}, + {"rscdisplaygameoptions_previewpath","STRING"},{"rscdisplaygameoptions_slidercolorr","CONTROL"},{"rscdisplaygameoptions","DISPLAY"},{"rscdisplayoptionslayout","DISPLAY"},{"rscdisplayconfigureaction","DISPLAY"},{"rscdisplayconfigurecontrollers","DISPLAY"},{"rscdisplaymicsensitivityoptions","DISPLAY"},{"rscdisplayconfigure","DISPLAY"},{"rscdisplayoptionsvideo","DISPLAY"},{"rscdisplayoptionsvideouisize","SCALAR"}, + {"rscmsgbox","DISPLAY"},{"rscdisplaymission_script","CODE"},{"rscdisplayorbat_script","CODE"},{"rscdisplaychooseeditorlayout_script","CODE"},{"rscrespawncounter_script","CODE"},{"rscdisplayteamswitch_script","CODE"},{"rscdisplayremotemissions","DISPLAY"},{"rscdisplayfilter_script","CODE"},{"rscdisplayloading_progress","CONTROL"},{"rscdisplayjoystickschemes_script","CODE"},{"rscdisplayfieldmanual_script","CODE"}, + {"rscdebugconsole_watchsave","ARRAY"},{"rscdisplaymultiplayersetupparameter_script","CODE"},{"rscstanceinfo_script","CODE"},{"rscdebugconsole_execute","CODE"},{"rscdisplaytemplateload_script","CODE"},{"rscdisplaymissionend_script","CODE"},{"rscdiary_playerpos","ARRAY"},{"rscdisplaycustomizecontroller_script","CODE"},{"rscdisplayloading_display","DISPLAY"},{"rscdisplaygameoptions_script","CODE"}, + {"rscdisplaydedicatedserversettings_script","CODE"},{"rscdisplayarcademap_layout_2_script","CODE"},{"rscdisplayfileselectimage_script","CODE"},{"rscdisplaycommunityguide_script","CODE"},{"rscdisplaygarage_script","CODE"},{"rscdisplaypublishmissionselecttags_script","CODE"},{"rscdisplayinterrupt_script","CODE"},{"rscdisplaymultiplayer","DISPLAY"},{"rscdisplaymain_script","CODE"},{"rscdisplayarcademarker_script","CODE"}, + {"rscdisplayinsertmarker_script","CODE"},{"rscdisplayconfigureaction_script","CODE"},{"rscdisplayremotemissions_script","CODE"},{"rscdisplaymovieinterrupt_script","CODE"},{"rscunitinfo_script","CODE"},{"rscdisplayfileselect_script","CODE"},{"life_hud_nametags","DISPLAY"},{"rscdisplaydebriefing_script","CODE"},{"rscslingloadassistant_script","CODE"},{"rscdisplaycampaignselect_script","CODE"}, + {"rsctestcontrolstyles_script","CODE"},{"igui_displays","ARRAY"},{"rscdisplayoptions_script","CODE"},{"rscdisplayhostsettings_script","CODE"},{"rscdisplayoptionslayout_script","CODE"},{"rscdisplaycreatejiraissue_script","CODE"},{"rscadvancedhint_script","CODE"},{"bis_functions_listpreinit","CODE"},{"rscdisplayanimviewer_script","CODE"},{"rscdisplayloading","DISPLAY"},{"rscfiringdrilltime_script","CODE"}, + {"rscdisplayintel_script","CODE"},{"rscdiary_script","CODE"},{"rscdisplayarcadeunit_script","CODE"},{"rscdisplayavterminal_script","CODE"},{"rscdisplayrespawn_script","CODE"},{"loading_classes","ARRAY"},{"rscdebugconsole_watch","CODE"},{"rscdisplaylogin_script","CODE"},{"rscunitinfo","DISPLAY"},{"bis_functions_list","CODE"},{"rscminimap_script","CODE"},{"rscstatic_script","CODE"},{"rscdisplayloading_ran","SCALAR"}, + {"rscdiary","DISPLAY"},{"rscdisplayoptionsvideo_script","CODE"},{"rscdisplayconfigurecontrollers_script","CODE"},{"rscdisplayselectisland_script","CODE"},{"rscdisplayvehiclemsgbox_script","CODE"},{"rscdisplaybootcampmsgbox_script","CODE"},{"rscdisplayarcadeeffects_script","CODE"},{"rscdisplaynone_script","CODE"},{"bis_mainmenu_isplayexpanded","BOOL"},{"rscprocedurevisualization_script","CODE"}, + {"bis_functions_listpostinit","CODE"},{"rscdisplaywelcome_script","CODE"},{"igui_classes","ARRAY"},{"rscdisplaympinterrupt_script","CODE"},{"rscdisplaytemplatesave_script","CODE"},{"gui_classes","ARRAY"},{"rscdisplayremotemissionvoted_script","CODE"},{"rscdisplayhostsettings","DISPLAY"},{"rscdisplayarcadegroup_script","CODE"},{"rscdisplaymultiplayersetupparams_script","CODE"},{"rscdisplayoptionsaudio_script","CODE"}, + {"rscavcamera_script","CODE"},{"rscdisplayscriptinghelp_script","CODE"},{"rscdisplaymultiplayer_script","CODE"},{"rscspectator_script","CODE"},{"rscdisplayarcadesensor_script","CODE"},{"rscfunctionsviewer_script","CODE"},{"bis_mainmenu_isoptionsexpanded","BOOL"},{"bis_displayinterrupt_isoptionsexpanded","BOOL"},{"rscdisplaypassword_script","CODE"},{"rscdisplaymultiplayersetup_script","CODE"}, + {"rscdisplayipaddress_script","CODE"},{"rscfiringdrillcheckpoint_script","CODE"},{"rscdisplaycommon_script","CODE"},{"rscmsgbox3_script","CODE"},{"rscdisplaymissionfail_script","CODE"},{"rscdisplaymultiplayersetup","DISPLAY"},{"playerhud","DISPLAY"},{"rscdisplaympinterrupt","DISPLAY"},{"loading_displays","ARRAY"},{"rscdisplayloading_worldtype","STRING"},{"rscdisplaydlccontentbrowser_script","CODE"}, + {"rscdisplaymain","DISPLAY"},{"rscdisplayfunctionsviewer_script","CODE"},{"rscunitinfo_loop","SCRIPT"},{"rscdisplaypublishmission_script","CODE"},{"rscdisplayinventory_script","CODE"},{"rscdisplaylocweaponinfo_script","CODE"},{"rscestablishingshot_script","CODE"},{"bis_mainmenu_islearnexpanded","BOOL"},{"rscdisplayarcademap_layout_6_script","CODE"},{"rscdisplaymodlauncher_script","CODE"},{"rscdisplayarsenal_script","CODE"}, + {"rscmsgbox_script","CODE"},{"rscdisplayaar_script","CODE"},{"rsctestcontroltypes_script","CODE"},{"rscdisplaycamera_script","CODE"},{"rscdisplayselectsave_script","CODE"},{"bis_shownchat","BOOL"},{"rscdisplaycustomarcade_script","CODE"},{"rsctilesgroup_script","CODE"},{"rscdisplayloading_script","CODE"},{"rscdisplaypurchasenotification_script","CODE"},{"rscstanceinfo","DISPLAY"},{"bis_initgame","BOOL"}, + {"rscdisplaystrategicmap_script","CODE"},{"bis_rscdisplayloading_selecteddlcappid","SCALAR"},{"rscnoise_script","CODE"},{"rscnotification_script","CODE"},{"rscmissionstatus_script","CODE"},{"rscdisplayconfigviewer_script","CODE"},{"rscdisplaydebugpublic_script","CODE"},{"rscdiary_playerpostime","SCALAR"},{"rscdisplayarcademodules_script","CODE"},{"rsccommmenuitems_script","CODE"},{"gui_listlayerslabels","ARRAY"}, + {"gui_displays","ARRAY"},{"rscdisplaysinglemission_script","CODE"},{"rscdisplaynewuser_script","CODE"},{"rscdisplayloading_last","ARRAY"},{"rscdisplayconfigure_script","CODE"},{"rscdisplayarcademap_script","CODE"},{"rscdisplaycontrolschemes_script","CODE"},{"rscdisplayarcadewaypoint_script","CODE"},{"rscdisplaymission","DISPLAY"},{"rscdisplayinterruptrevert_script","CODE"},{"bis_functions_listrecompile","CODE"}, + {"life_sql_id","CODE"},{"rscdisplaydebriefing","DISPLAY"},{"rscdisplaymicsensitivityoptions_script","CODE"},{"rscdiary_playeralpha","SCALAR"} + }; +}; diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf index 72c1e26e7..05d95d123 100644 --- a/Altis_Life.Altis/core/init.sqf +++ b/Altis_Life.Altis/core/init.sqf @@ -1,119 +1,116 @@ -#include "..\script_macros.hpp" -/* - File: init.sqf - Author: Bryan "Tonic" Boardwine - Description: - Master client initialization file -*/ -diag_log "----------------------------------------------------------------------------------------------------"; -diag_log "--------------------------------- Starting Altis Life Client Init ----------------------------------"; -diag_log format["------------------------------------------ Version %1 -------------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; -diag_log "----------------------------------------------------------------------------------------------------"; - -0 cutText[localize "STR_Init_ClientSetup","BLACK FADED",99999999]; -_timeStamp = diag_tickTime; - -waitUntil {!isNull (findDisplay 46)}; -[] call compile preprocessFileLineNumbers "core\clientValidator.sqf"; -enableSentences false; - -diag_log "[Life Client] Initialization Variables"; -[] call compile preprocessFileLineNumbers "core\configuration.sqf"; -diag_log "[Life Client] Variables initialized"; - -diag_log "[Life Client] Setting up Eventhandlers"; -[] call life_fnc_setupEVH; -diag_log "[Life Client] Eventhandlers completed"; - -diag_log "[Life Client] Setting up user actions"; -[] call life_fnc_setupActions; -diag_log "[Life Client] User actions completed"; - -diag_log "[Life Client] Waiting for the server to be ready..."; -waitUntil {!isNil "life_server_isReady" && {!isNil "life_server_extDB_notLoaded"}}; - -if (life_server_extDB_notLoaded) exitWith { - 0 cutText [localize "STR_Init_ExtdbFail","BLACK FADED",99999999]; -}; - -waitUntil {life_server_isReady}; -diag_log "[Life Client] Server loading completed "; -0 cutText [localize "STR_Init_ServerReady","BLACK FADED",99999999]; - -[] call SOCK_fnc_dataQuery; -waitUntil {life_session_completed}; -0 cutText[localize "STR_Init_ClientFinish","BLACK FADED",99999999]; - -switch (playerSide) do { - case west: { - life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_cop"); - [] call life_fnc_initCop; - }; - case civilian: { - life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_civ"); - [] call life_fnc_initCiv; - (group player) deleteGroupWhenEmpty true; - }; - case independent: { - life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_med"); - [] call life_fnc_initMedic; - }; -}; -CONSTVAR(life_paycheck); - -player setVariable ["restrained", false, true]; -player setVariable ["Escorting", false, true]; -player setVariable ["transporting", false, true]; -player setVariable ["playerSurrender", false, true]; -player setVariable ["realname", profileName, true]; - -diag_log "[Life Client] Past Settings Init"; - -(findDisplay 46) displayAddEventHandler ["KeyDown", "_this call life_fnc_keyHandler"]; -[player, life_settings_enableSidechannel, playerSide] remoteExecCall ["TON_fnc_manageSC", RSERV]; - -[] spawn life_fnc_survival; - -0 cutText ["","BLACK IN"]; - -if (profileNamespace getVariable ["life_settings_revealObjects",true]) then { - LIFE_ID_PlayerTags = addMissionEventHandler ["EachFrame", life_fnc_playerTags]; -}; -if (profileNamespace getVariable ["life_settings_revealObjects",true]) then { - LIFE_ID_RevealObjects = addMissionEventHandler ["EachFrame", life_fnc_revealObjects]; -}; - -if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 0) then {player enableFatigue false;}; -if (LIFE_SETTINGS(getNumber,"pump_service") isEqualTo 1) then { - [] execVM "core\fn_setupStationService.sqf"; -}; - -life_fnc_RequestClientId = player; -publicVariableServer "life_fnc_RequestClientId"; - -/* - https://feedback.bistudio.com/T117205 - disableChannels settings cease to work when leaving/rejoining mission - Universal workaround for usage in a preInit function. - AgentRev - Remove if Bohemia actually fixes the issue. -*/ -{ - _x params [["_chan",-1,[0]], ["_noText","false",[""]], ["_noVoice","false",[""]]]; - - _noText = [false,true] select ((["false","true"] find toLower _noText) max 0); - _noVoice = [false,true] select ((["false","true"] find toLower _noVoice) max 0); - - _chan enableChannel [!_noText, !_noVoice]; - -} forEach getArray (missionConfigFile >> "disableChannels"); - -if (life_HC_isActive) then { - [getPlayerUID player, player getVariable ["realname", name player]] remoteExec ["HC_fnc_wantedProfUpdate", HC_Life]; -} else { - [getPlayerUID player, player getVariable ["realname", name player]] remoteExec ["life_fnc_wantedProfUpdate", RSERV]; -}; - -[] call life_fnc_hudUpdate; - -diag_log "----------------------------------------------------------------------------------------------------"; -diag_log format [" End of Altis Life Client Init :: Total Execution Time %1 seconds ",(diag_tickTime - _timeStamp)]; -diag_log "----------------------------------------------------------------------------------------------------"; +#include "..\script_macros.hpp" +/* + File: init.sqf + Author: Bryan "Tonic" Boardwine + Description: + Master client initialization file +*/ +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log "--------------------------------- Starting Altis Life Client Init ----------------------------------"; +diag_log format["------------------------------------------ Version %1 -------------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; +diag_log "----------------------------------------------------------------------------------------------------"; + +0 cutText[localize "STR_Init_ClientSetup","BLACK FADED",99999999]; +_timeStamp = diag_tickTime; + +waitUntil {!isNull (findDisplay 46)}; +[] call compile preprocessFileLineNumbers "core\clientValidator.sqf"; +enableSentences false; + +diag_log "[Life Client] Initialization Variables"; +[] call compile preprocessFileLineNumbers "core\configuration.sqf"; +diag_log "[Life Client] Variables initialized"; + +diag_log "[Life Client] Setting up Eventhandlers"; +[] call life_fnc_setupEVH; +diag_log "[Life Client] Eventhandlers completed"; + +diag_log "[Life Client] Setting up user actions"; +[] call life_fnc_setupActions; +diag_log "[Life Client] User actions completed"; + +diag_log "[Life Client] Waiting for the server to be ready..."; +waitUntil {!isNil "life_server_isReady" && {!isNil "life_server_extDB_notLoaded"}}; + +if (life_server_extDB_notLoaded) exitWith { + 0 cutText [localize "STR_Init_ExtdbFail","BLACK FADED",99999999]; +}; + +waitUntil {life_server_isReady}; +diag_log "[Life Client] Server loading completed "; +0 cutText [localize "STR_Init_ServerReady","BLACK FADED",99999999]; + +[] call SOCK_fnc_dataQuery; +waitUntil {life_session_completed}; +0 cutText[localize "STR_Init_ClientFinish","BLACK FADED",99999999]; + +switch (playerSide) do { + case west: { + life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_cop"); + [] call life_fnc_initCop; + }; + case civilian: { + life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_civ"); + [] call life_fnc_initCiv; + (group player) deleteGroupWhenEmpty true; + }; + case independent: { + life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_med"); + [] call life_fnc_initMedic; + }; +}; +CONSTVAR(life_paycheck); + +player setVariable ["restrained", false, true]; +player setVariable ["Escorting", false, true]; +player setVariable ["transporting", false, true]; +player setVariable ["playerSurrender", false, true]; +player setVariable ["realname", profileName, true]; + +diag_log "[Life Client] Past Settings Init"; + +(findDisplay 46) displayAddEventHandler ["KeyDown", "_this call life_fnc_keyHandler"]; +[player, life_settings_enableSidechannel, playerSide] remoteExecCall ["TON_fnc_manageSC", RSERV]; + +[] spawn life_fnc_survival; + +0 cutText ["","BLACK IN"]; + +if (profileNamespace getVariable ["life_settings_revealObjects",true]) then { + LIFE_ID_PlayerTags = addMissionEventHandler ["EachFrame", life_fnc_playerTags]; +}; +if (profileNamespace getVariable ["life_settings_revealObjects",true]) then { + LIFE_ID_RevealObjects = addMissionEventHandler ["EachFrame", life_fnc_revealObjects]; +}; + +if (LIFE_SETTINGS(getNumber,"enable_fatigue") isEqualTo 0) then {player enableFatigue false;}; +if (LIFE_SETTINGS(getNumber,"pump_service") isEqualTo 1) then { + [] execVM "core\fn_setupStationService.sqf"; +}; + +/* + https://feedback.bistudio.com/T117205 - disableChannels settings cease to work when leaving/rejoining mission + Universal workaround for usage in a preInit function. - AgentRev + Remove if Bohemia actually fixes the issue. +*/ +{ + _x params [["_chan",-1,[0]], ["_noText","false",[""]], ["_noVoice","false",[""]]]; + + _noText = [false,true] select ((["false","true"] find toLower _noText) max 0); + _noVoice = [false,true] select ((["false","true"] find toLower _noVoice) max 0); + + _chan enableChannel [!_noText, !_noVoice]; + +} forEach getArray (missionConfigFile >> "disableChannels"); + +if (life_HC_isActive) then { + [getPlayerUID player, player getVariable ["realname", name player]] remoteExec ["HC_fnc_wantedProfUpdate", HC_Life]; +} else { + [getPlayerUID player, player getVariable ["realname", name player]] remoteExec ["life_fnc_wantedProfUpdate", RSERV]; +}; + +[] call life_fnc_hudUpdate; + +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log format [" End of Altis Life Client Init :: Total Execution Time %1 seconds ",(diag_tickTime - _timeStamp)]; +diag_log "----------------------------------------------------------------------------------------------------"; diff --git a/BEFilters/publicvariable.txt b/BEFilters/publicvariable.txt index 7718bb24e..8bf19c74e 100644 --- a/BEFilters/publicvariable.txt +++ b/BEFilters/publicvariable.txt @@ -1,3 +1,3 @@ -//regex -1 "" -5 "" !=life_fnc_RequestClientId !=money_log !=advanced_log !=(cop|civ)_[\d]{1,3} !=medic_[1-6] !=life_broadcastTimer +//regex +1 "" +5 "" !=money_log !=advanced_log !=(cop|civ)_[\d]{1,3} !=medic_[1-6] !=life_broadcastTimer diff --git a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf index 9f27bba11..59a56da9d 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf @@ -1,167 +1,167 @@ -#include "\life_hc\hc_macros.hpp" -/* - File: fn_vehicleStore.sqf - Author: Bryan "Tonic" Boardwine - Description: - Stores the vehicle in the 'Garage' -*/ - -params [ - ["_vehicle", objNull, [objNull]], - ["_impound", false, [true]], - ["_unit", objNull, [objNull]], - ["_storetext", "", [""]] -]; - -private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); -private _ownerID = _unit getVariable ["life_clientID",-1]; - -if (isNull _vehicle || {isNull _unit}) exitWith {life_impound_inuse = false; _ownerID publicVariableClient "life_impound_inuse";life_garage_store = false;_ownerID publicVariableClient "life_garage_store";}; //Bad data passed. -private _vInfo = _vehicle getVariable ["dbInfo", []]; -private "_plate"; -private "_uid"; - -if !(_vInfo isEqualTo []) then { - _plate = _vInfo select 1; - _uid = _vInfo select 0; -}; - -// save damage. -private "_damage"; -if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { - _damage = getAllHitPointsDamage _vehicle; - _damage = _damage select 2; -} else { - _damage = []; -}; - -// because fuel price! -private "_fuel"; -if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _fuel = (fuel _vehicle); -} else { - _fuel = 1; -}; - -private "_query"; -private "_thread"; -if (_impound) exitWith { - if (_vInfo isEqualTo []) then { - life_impound_inuse = false; - _ownerID publicVariableClient "life_impound_inuse"; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - } else { // no free repairs! - _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; - _thread = [_query,1] call HC_fnc_asyncCall; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - - life_impound_inuse = false; - _ownerID publicVariableClient "life_impound_inuse"; - }; -}; - -// not persistent so just do this! -if (_vInfo isEqualTo []) exitWith { - if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { - [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - } else { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; - }; - life_garage_store = false; - _ownerID publicVariableClient "life_garage_store"; -}; - -if !(_uid isEqualTo getPlayerUID _unit) exitWith { - [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; - life_garage_store = false; - _ownerID publicVariableClient "life_garage_store"; -}; - -// sort out whitelisted items! -private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; -private _itemList = _trunk select 0; -private _totalweight = 0; -private "_weight"; -_items = []; -if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { - if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { - private _blacklist = false; - _profileQuery = format ["selectName:%1", _uid]; - _profileName = [_profileQuery, 2] call HC_fnc_asyncCall; - _profileName = _profileName select 0; - - { - private _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); - - _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; - - if (((_x select 0) in _resourceItems) || (_isIllegal)) then { - _items pushBack[(_x select 0),(_x select 1)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); - _totalweight = _weight + _totalweight; - }; - if (_isIllegal) then { - _blacklist = true; - }; - - } - foreach _itemList; - - if (_blacklist) then { - [_uid, _profileName, "481"] remoteExecCall["life_fnc_wantedAdd", RSERV]; - _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; - _thread = [_query, 1] call HC_fnc_asyncCall; - }; - - } - else { - { - if ((_x select 0) in _resourceItems) then { - _items pushBack[(_x select 0),(_x select 1)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); - _totalweight = _weight + _totalweight; - }; - } - forEach _itemList; - }; - - _trunk = [_items, _totalweight]; -} -else { - _trunk = [[], 0]; -}; - -private "_cargo"; - -if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { - private _vehItems = getItemCargo _vehicle; - private _vehMags = getMagazineCargo _vehicle; - private _vehWeapons = getWeaponCargo _vehicle; - private _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; - // no items? clean the array so the database looks pretty - if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; - } else { - _cargo = []; -}; - -// update -_query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; -_thread = [_query,1] call HC_fnc_asyncCall; - -if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; -}; - -life_garage_store = false; -_ownerID publicVariableClient "life_garage_store"; -[1, _storetext] remoteExecCall ["life_fnc_broadcast", _ownerID]; +#include "\life_hc\hc_macros.hpp" +/* + File: fn_vehicleStore.sqf + Author: Bryan "Tonic" Boardwine + Description: + Stores the vehicle in the 'Garage' +*/ + +params [ + ["_vehicle", objNull, [objNull]], + ["_impound", false, [true]], + ["_unit", objNull, [objNull]], + ["_storetext", "", [""]] +]; + +private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); +private _ownerID = remoteExecutedOwner; + +if (isNull _vehicle || {isNull _unit}) exitWith {life_impound_inuse = false; _ownerID publicVariableClient "life_impound_inuse";life_garage_store = false;_ownerID publicVariableClient "life_garage_store";}; //Bad data passed. +private _vInfo = _vehicle getVariable ["dbInfo", []]; +private "_plate"; +private "_uid"; + +if !(_vInfo isEqualTo []) then { + _plate = _vInfo select 1; + _uid = _vInfo select 0; +}; + +// save damage. +private "_damage"; +if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { + _damage = getAllHitPointsDamage _vehicle; + _damage = _damage select 2; +} else { + _damage = []; +}; + +// because fuel price! +private "_fuel"; +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _fuel = (fuel _vehicle); +} else { + _fuel = 1; +}; + +private "_query"; +private "_thread"; +if (_impound) exitWith { + if (_vInfo isEqualTo []) then { + life_impound_inuse = false; + _ownerID publicVariableClient "life_impound_inuse"; + + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + } else { // no free repairs! + _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; + _thread = [_query,1] call HC_fnc_asyncCall; + + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + + life_impound_inuse = false; + _ownerID publicVariableClient "life_impound_inuse"; + }; +}; + +// not persistent so just do this! +if (_vInfo isEqualTo []) exitWith { + if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { + [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + } else { + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + }; + life_garage_store = false; + _ownerID publicVariableClient "life_garage_store"; +}; + +if !(_uid isEqualTo getPlayerUID _unit) exitWith { + [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + life_garage_store = false; + _ownerID publicVariableClient "life_garage_store"; +}; + +// sort out whitelisted items! +private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; +private _itemList = _trunk select 0; +private _totalweight = 0; +private "_weight"; +_items = []; +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { + private _blacklist = false; + _profileQuery = format ["selectName:%1", _uid]; + _profileName = [_profileQuery, 2] call HC_fnc_asyncCall; + _profileName = _profileName select 0; + + { + private _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); + + _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; + + if (((_x select 0) in _resourceItems) || (_isIllegal)) then { + _items pushBack[(_x select 0),(_x select 1)]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + if (_isIllegal) then { + _blacklist = true; + }; + + } + foreach _itemList; + + if (_blacklist) then { + [_uid, _profileName, "481"] remoteExecCall["life_fnc_wantedAdd", RSERV]; + _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; + _thread = [_query, 1] call HC_fnc_asyncCall; + }; + + } + else { + { + if ((_x select 0) in _resourceItems) then { + _items pushBack[(_x select 0),(_x select 1)]; + _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _totalweight = _weight + _totalweight; + }; + } + forEach _itemList; + }; + + _trunk = [_items, _totalweight]; +} +else { + _trunk = [[], 0]; +}; + +private "_cargo"; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { + private _vehItems = getItemCargo _vehicle; + private _vehMags = getMagazineCargo _vehicle; + private _vehWeapons = getWeaponCargo _vehicle; + private _vehBackpacks = getBackpackCargo _vehicle; + _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; + // no items? clean the array so the database looks pretty + if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; + } else { + _cargo = []; +}; + +// update +_query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; +_thread = [_query,1] call HC_fnc_asyncCall; + +if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; +}; + +life_garage_store = false; +_ownerID publicVariableClient "life_garage_store"; +[1, _storetext] remoteExecCall ["life_fnc_broadcast", _ownerID]; diff --git a/life_server/Functions/Systems/fn_vehicleAnimate.sqf b/life_server/Functions/Systems/fn_vehicleAnimate.sqf index f56619018..8fd087e70 100644 --- a/life_server/Functions/Systems/fn_vehicleAnimate.sqf +++ b/life_server/Functions/Systems/fn_vehicleAnimate.sqf @@ -1,48 +1,48 @@ -/* - File: fn_vehicleAnimate.sqf - Author: DomT602 - Description: - Animates various aspects of the vehicle - moved to server. -*/ -params [ - ["_vehicle",objNull,[objNull]], - ["_animate","",["",[]]], - ["_preset",false,[false]] -]; -if (isNull _vehicle) exitWith {}; - -if !(_preset) then { - { - _x params ["_selection","_value"]; - _vehicle animate [_selection,_value]; - } forEach _animate; -} else { - switch _animate do { - case "civ_littlebird": { - _vehicle animate ["addDoors",1]; - _vehicle animate ["addBenches",0]; - _vehicle animate ["addTread",0]; - _vehicle animate ["AddCivilian_hide",1]; - _vehicle lockCargo [2,true]; - _vehicle lockCargo [3,true]; - _vehicle lockCargo [4,true]; - _vehicle lockCargo [5,true]; - }; - - case "service_truck": { - _vehicle animate ["HideServices", 0]; - _vehicle animate ["HideDoor3", 1]; - }; - - case "med_offroad": { - _vehicle animate ["HidePolice", 0]; - _vehicle setVariable ["lights",false,true]; - }; - - case "cop_offroad": { - _vehicle animate ["HidePolice", 0]; - _vehicle animate ["HideBumper1", 0]; - _vehicle setVariable ["lights",false,true]; - }; - }; -}; \ No newline at end of file +/* + File: fn_vehicleAnimate.sqf + Author: DomT602 + Description: + Animates various aspects of the vehicle - moved to server. +*/ +params [ + ["_vehicle",objNull,[objNull]], + ["_animate",[],[[]]], + ["_preset",false,[false]] +]; +if (isNull _vehicle) exitWith {}; + +if !(_preset) then { + { + _x params ["_selection","_value"]; + _vehicle animate [_selection,_value]; + } forEach _animate; +} else { + switch _animate do { + case "civ_littlebird": { + _vehicle animate ["addDoors",1]; + _vehicle animate ["addBenches",0]; + _vehicle animate ["addTread",0]; + _vehicle animate ["AddCivilian_hide",1]; + _vehicle lockCargo [2,true]; + _vehicle lockCargo [3,true]; + _vehicle lockCargo [4,true]; + _vehicle lockCargo [5,true]; + }; + + case "service_truck": { + _vehicle animate ["HideServices", 0]; + _vehicle animate ["HideDoor3", 1]; + }; + + case "med_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle setVariable ["lights",false,true]; + }; + + case "cop_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle animate ["HideBumper1", 0]; + _vehicle setVariable ["lights",false,true]; + }; + }; +}; diff --git a/life_server/init.sqf b/life_server/init.sqf index 5764547a5..62150dc7e 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -1,210 +1,203 @@ -#include "script_macros.hpp" -/* - File: init.sqf - Author: Bryan "Tonic" Boardwine - - Edit: Nanou for HeadlessClient optimization. - Please read support for more informations. - - Description: - Initialize the server and required systems. -*/ -private ["_dome","_rsb","_timeStamp","_extDBNotLoaded"]; -DB_Async_Active = false; -DB_Async_ExtraLock = false; -life_server_isReady = false; -_extDBNotLoaded = ""; -publicVariable "life_server_isReady"; -life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; - -/* - Prepare the headless client. -*/ -life_HC_isActive = false; -publicVariable "life_HC_isActive"; -HC_Life = false; -publicVariable "HC_Life"; - -if (EXTDB_SETTING(getNumber,"HeadlessSupport") isEqualTo 1) then { - [] execVM "\life_server\initHC.sqf"; -}; - -/* - Prepare extDB before starting the initialization process - for the server. -*/ - -if (isNil {uiNamespace getVariable "life_sql_id"}) then { - life_sql_id = round(random(9999)); - CONSTVAR(life_sql_id); - uiNamespace setVariable ["life_sql_id",life_sql_id]; - try { - _result = EXTDB format ["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; - if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; - _result = EXTDB format ["9:ADD_DATABASE_PROTOCOL:%2:SQL_CUSTOM:%1:AL.ini",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; - if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; - } catch { - diag_log _exception; - _extDBNotLoaded = [true, _exception]; - }; - if (_extDBNotLoaded isEqualType []) exitWith {}; - EXTDB "9:LOCK"; - diag_log "extDB3: Connected to Database"; -} else { - life_sql_id = uiNamespace getVariable "life_sql_id"; - CONSTVAR(life_sql_id); - diag_log "extDB3: Still Connected to Database"; -}; - - -if (_extDBNotLoaded isEqualType []) exitWith { - life_server_extDB_notLoaded = true; - publicVariable "life_server_extDB_notLoaded"; -}; -life_server_extDB_notLoaded = false; -publicVariable "life_server_extDB_notLoaded"; - -/* Run stored procedures for SQL side cleanup */ -["resetLifeVehicles", 1] call DB_fnc_asyncCall; -["deleteDeadVehicles", 1] call DB_fnc_asyncCall; -["deleteOldHouses", 1] call DB_fnc_asyncCall; -["deleteOldGangs", 1] call DB_fnc_asyncCall; - -_timeStamp = diag_tickTime; -diag_log "----------------------------------------------------------------------------------------------------"; -diag_log "---------------------------------- Starting Altis Life Server Init ---------------------------------"; -diag_log format["------------------------------------------ Version %1 -------------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; -diag_log "----------------------------------------------------------------------------------------------------"; - -if (LIFE_SETTINGS(getNumber,"save_civilian_position_restart") isEqualTo 1) then { - [] spawn { - ["updateCivAlive", 1] call DB_fnc_asyncCall; - [_query,1] call DB_fnc_asyncCall; - }; -}; - -/* Map-based server side initialization. */ -master_group attachTo[bank_obj,[0,0,0]]; - -{ - _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"]; - _hs setDir (markerDir _x); - _hs setPosATL (getMarkerPos _x); - _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"]; - _var attachTo [_hs, [4.69775,32.6045,-0.1125]]; - detach _var; - _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"]; - _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]]; - detach _var; - if (worldName isEqualTo "Tanoa") then { - if (_forEachIndex isEqualTo 0) then { - atm_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - vendor_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - "medic_spawn_3" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); - "med_car_2" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); - hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); - } else { - atm_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - vendor_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - "medic_spawn_1" setMarkerPos (_var modelToWorld [-1.85181,-6.07715,-8.24944]); - "med_car_1" setMarkerPos (_var modelToWorld [5.9624,11.8799,-8.28493]); - hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); - }; - }; -} forEach ["hospital_2","hospital_3"]; - -{ - if (!isPlayer _x) then { - _npc = _x; - { - if (_x != "") then { - _npc removeWeapon _x; - }; - } forEach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc]; - }; -} forEach allUnits; - -[8,true,12] execFSM "\life_server\FSM\timeModule.fsm"; - -life_adminLevel = 0; -life_medicLevel = 0; -life_copLevel = 0; -CONST(JxMxE_PublishVehicle,"false"); - -/* Setup radio channels for west/independent/civilian */ -life_radio_west = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; -life_radio_civ = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; -life_radio_indep = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; - -/* Set the amount of gold in the federal reserve at mission start */ -fed_bank setVariable ["safe",count playableUnits,true]; -[] spawn TON_fnc_federalUpdate; - -/* Event handler for disconnecting players */ -addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; -[] call compile preprocessFileLineNumbers "\life_server\functions.sqf"; - -/* Set OwnerID players for Headless Client */ -TON_fnc_requestClientID = -{ - (_this select 1) setVariable ["life_clientID", owner (_this select 1), true]; -}; -"life_fnc_RequestClientId" addPublicVariableEventHandler TON_fnc_requestClientID; - -/* Event handler for logs */ -"money_log" addPublicVariableEventHandler {diag_log (_this select 1)}; -"advanced_log" addPublicVariableEventHandler {diag_log (_this select 1)}; - -/* Miscellaneous mission-required stuff */ -life_wanted_list = []; - -[] spawn { - for "_i" from 0 to 1 step 0 do { - uiSleep (30 * 60); - { - _x setVariable ["sellers",[],true]; - } forEach [Dealer_1,Dealer_2,Dealer_3]; - }; -}; - -[] spawn TON_fnc_initHouses; -cleanup = [] spawn TON_fnc_cleanup; - -TON_fnc_playtime_values = []; -TON_fnc_playtime_values_request = []; - -//Just incase the Headless Client connects before anyone else -publicVariable "TON_fnc_playtime_values"; -publicVariable "TON_fnc_playtime_values_request"; - - -/* Setup the federal reserve building(s) */ -private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call TON_fnc_terrainSort; -private _altisArray = [16019.5,16952.9,0]; -private _tanoaArray = [11074.2,11501.5,0.00137329]; -private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; - -_dome = nearestObject [_pos,"Land_Dome_Big_F"]; -_rsb = nearestObject [_pos,_vaultHouse]; - -for "_i" from 1 to 3 do {_dome setVariable [format ["bis_disabled_Door_%1",_i],1,true]; _dome animateSource [format ["Door_%1_source", _i], 0];}; -_dome setVariable ["locked",true,true]; -_rsb setVariable ["locked",true,true]; -_rsb setVariable ["bis_disabled_Door_1",1,true]; -_dome allowDamage false; -_rsb allowDamage false; - -/* Tell clients that the server is ready and is accepting queries */ -life_server_isReady = true; -publicVariable "life_server_isReady"; - -/* Initialize hunting zone(s) */ -aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; - -server_corpses = []; -addMissionEventHandler ["EntityRespawned", {_this call TON_fnc_entityRespawned}]; -addMissionEventHandler ["EntityKilled", {_this call TON_fnc_entityKilled}]; - -diag_log "----------------------------------------------------------------------------------------------------"; -diag_log format [" End of Altis Life Server Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; -diag_log "----------------------------------------------------------------------------------------------------"; +#include "script_macros.hpp" +/* + File: init.sqf + Author: Bryan "Tonic" Boardwine + + Edit: Nanou for HeadlessClient optimization. + Please read support for more informations. + + Description: + Initialize the server and required systems. +*/ +private ["_dome","_rsb","_timeStamp","_extDBNotLoaded"]; +DB_Async_Active = false; +DB_Async_ExtraLock = false; +life_server_isReady = false; +_extDBNotLoaded = ""; +publicVariable "life_server_isReady"; +life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; + +/* + Prepare the headless client. +*/ +life_HC_isActive = false; +publicVariable "life_HC_isActive"; +HC_Life = false; +publicVariable "HC_Life"; + +if (EXTDB_SETTING(getNumber,"HeadlessSupport") isEqualTo 1) then { + [] execVM "\life_server\initHC.sqf"; +}; + +/* + Prepare extDB before starting the initialization process + for the server. +*/ + +if (isNil {uiNamespace getVariable "life_sql_id"}) then { + life_sql_id = round(random(9999)); + CONSTVAR(life_sql_id); + uiNamespace setVariable ["life_sql_id",life_sql_id]; + try { + _result = EXTDB format ["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; + _result = EXTDB format ["9:ADD_DATABASE_PROTOCOL:%2:SQL_CUSTOM:%1:AL.ini",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; + } catch { + diag_log _exception; + _extDBNotLoaded = [true, _exception]; + }; + if (_extDBNotLoaded isEqualType []) exitWith {}; + EXTDB "9:LOCK"; + diag_log "extDB3: Connected to Database"; +} else { + life_sql_id = uiNamespace getVariable "life_sql_id"; + CONSTVAR(life_sql_id); + diag_log "extDB3: Still Connected to Database"; +}; + + +if (_extDBNotLoaded isEqualType []) exitWith { + life_server_extDB_notLoaded = true; + publicVariable "life_server_extDB_notLoaded"; +}; +life_server_extDB_notLoaded = false; +publicVariable "life_server_extDB_notLoaded"; + +/* Run stored procedures for SQL side cleanup */ +["resetLifeVehicles", 1] call DB_fnc_asyncCall; +["deleteDeadVehicles", 1] call DB_fnc_asyncCall; +["deleteOldHouses", 1] call DB_fnc_asyncCall; +["deleteOldGangs", 1] call DB_fnc_asyncCall; + +_timeStamp = diag_tickTime; +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log "---------------------------------- Starting Altis Life Server Init ---------------------------------"; +diag_log format["------------------------------------------ Version %1 -------------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; +diag_log "----------------------------------------------------------------------------------------------------"; + +if (LIFE_SETTINGS(getNumber,"save_civilian_position_restart") isEqualTo 1) then { + [] spawn { + ["updateCivAlive", 1] call DB_fnc_asyncCall; + [_query,1] call DB_fnc_asyncCall; + }; +}; + +/* Map-based server side initialization. */ +master_group attachTo[bank_obj,[0,0,0]]; + +{ + _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"]; + _hs setDir (markerDir _x); + _hs setPosATL (getMarkerPos _x); + _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"]; + _var attachTo [_hs, [4.69775,32.6045,-0.1125]]; + detach _var; + _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"]; + _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]]; + detach _var; + if (worldName isEqualTo "Tanoa") then { + if (_forEachIndex isEqualTo 0) then { + atm_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + vendor_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + "medic_spawn_3" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); + "med_car_2" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); + hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); + } else { + atm_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + vendor_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + "medic_spawn_1" setMarkerPos (_var modelToWorld [-1.85181,-6.07715,-8.24944]); + "med_car_1" setMarkerPos (_var modelToWorld [5.9624,11.8799,-8.28493]); + hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); + }; + }; +} forEach ["hospital_2","hospital_3"]; + +{ + if (!isPlayer _x) then { + _npc = _x; + { + if (_x != "") then { + _npc removeWeapon _x; + }; + } forEach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc]; + }; +} forEach allUnits; + +[8,true,12] execFSM "\life_server\FSM\timeModule.fsm"; + +life_adminLevel = 0; +life_medicLevel = 0; +life_copLevel = 0; +CONST(JxMxE_PublishVehicle,"false"); + +/* Setup radio channels for west/independent/civilian */ +life_radio_west = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; +life_radio_civ = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; +life_radio_indep = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; + +/* Set the amount of gold in the federal reserve at mission start */ +fed_bank setVariable ["safe",count playableUnits,true]; +[] spawn TON_fnc_federalUpdate; + +/* Event handler for disconnecting players */ +addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; +[] call compile preprocessFileLineNumbers "\life_server\functions.sqf"; + +/* Event handler for logs */ +"money_log" addPublicVariableEventHandler {diag_log (_this select 1)}; +"advanced_log" addPublicVariableEventHandler {diag_log (_this select 1)}; + +/* Miscellaneous mission-required stuff */ +life_wanted_list = []; + +[] spawn { + for "_i" from 0 to 1 step 0 do { + uiSleep (30 * 60); + { + _x setVariable ["sellers",[],true]; + } forEach [Dealer_1,Dealer_2,Dealer_3]; + }; +}; + +[] spawn TON_fnc_initHouses; +cleanup = [] spawn TON_fnc_cleanup; + +TON_fnc_playtime_values = []; +TON_fnc_playtime_values_request = []; + +//Just incase the Headless Client connects before anyone else +publicVariable "TON_fnc_playtime_values"; +publicVariable "TON_fnc_playtime_values_request"; + + +/* Setup the federal reserve building(s) */ +private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call TON_fnc_terrainSort; +private _altisArray = [16019.5,16952.9,0]; +private _tanoaArray = [11074.2,11501.5,0.00137329]; +private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; + +_dome = nearestObject [_pos,"Land_Dome_Big_F"]; +_rsb = nearestObject [_pos,_vaultHouse]; + +for "_i" from 1 to 3 do {_dome setVariable [format ["bis_disabled_Door_%1",_i],1,true]; _dome animateSource [format ["Door_%1_source", _i], 0];}; +_dome setVariable ["locked",true,true]; +_rsb setVariable ["locked",true,true]; +_rsb setVariable ["bis_disabled_Door_1",1,true]; +_dome allowDamage false; +_rsb allowDamage false; + +/* Tell clients that the server is ready and is accepting queries */ +life_server_isReady = true; +publicVariable "life_server_isReady"; + +/* Initialize hunting zone(s) */ +aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; + +server_corpses = []; +addMissionEventHandler ["EntityRespawned", {_this call TON_fnc_entityRespawned}]; +addMissionEventHandler ["EntityKilled", {_this call TON_fnc_entityKilled}]; + +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log format [" End of Altis Life Server Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; +diag_log "----------------------------------------------------------------------------------------------------"; From 2f9fff38df7f68bf47a9548765e1a598003114f5 Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 2 Apr 2020 17:26:56 +0100 Subject: [PATCH 20/40] Remove life_impound_inUse --- Altis_Life.Altis/config/Config_SpyGlass.hpp | 2 +- .../core/actions/fn_impoundAction.sqf | 158 +++++----- Altis_Life.Altis/core/configuration.sqf | 203 +++++++------ .../Functions/Systems/fn_vehicleStore.sqf | 273 +++++++++--------- 4 files changed, 312 insertions(+), 324 deletions(-) diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index b0b41826a..5efb6915f 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -342,7 +342,7 @@ class SpyGlass { { "cheat5", "BOOL" }, { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "cheat7", "BOOL" }, { "life_trunk_vehicle", "OBJECT" }, { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, - { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, + { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, { "reb_car_1", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, { "bis_applypp7", "BOOL" }, { "life_inv_blastingcharge", "SCALAR" }, { "bis_applypp8", "BOOL" }, { "life_siren_active", "BOOL" }, { "life_spikestrip", "OBJECT" }, { "license_civ_pilot", "BOOL" }, { "bis_deltadmg", "SCALAR" }, { "license_civ_iron", "BOOL" }, { "gang_76561198060146341", "ARRAY" }, { "license_civ_copper", "BOOL" }, { "life_inv_cement", "SCALAR" }, diff --git a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf index 1bf326fcf..8c948fb10 100644 --- a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf @@ -1,80 +1,78 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_impoundAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Impounds the vehicle -*/ -private ["_vehicle","_type","_time","_value","_vehicleData","_upp","_ui","_progress","_pgText","_cP","_filters","_impoundValue","_price","_impoundMultiplier"]; -_vehicle = param [0,objNull,[objNull]]; -_filters = ["Car","Air","Ship"]; -if (!((KINDOF_ARRAY(_vehicle,_filters)))) exitWith {}; -if (player distance cursorObject > 10) exitWith {}; -if (_vehicle getVariable "NPC") exitWith {hint localize "STR_NPC_Protected"}; - -_vehicleData = _vehicle getVariable ["vehicle_info_owners",[]]; -if (_vehicleData isEqualTo 0) exitWith {deleteVehicle _vehicle}; //Bad vehicle. -_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); -_price = M_CONFIG(getNumber,"LifeCfgVehicles",(typeOf _vehicle),"price"); -[0,"STR_NOTF_BeingImpounded",true,[((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -life_action_inUse = true; - -_upp = localize "STR_NOTF_Impounding"; -//Setup our progress bar. -disableSerialization; -"progressBar" cutRsc ["life_progress","PLAIN"]; -_ui = uiNamespace getVariable "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format ["%2 (1%1)...","%",_upp]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -for "_i" from 0 to 1 step 0 do { - uiSleep 0.09; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if (_cP >= 1) exitWith {}; - if (player distance _vehicle > 10) exitWith {}; - if (!alive player) exitWith {}; -}; - -"progressBar" cutText ["","PLAIN"]; - -if (player distance _vehicle > 10) exitWith {hint localize "STR_NOTF_ImpoundingCancelled"; life_action_inUse = false;}; -if (!alive player) exitWith {life_action_inUse = false;}; - -if (count crew _vehicle isEqualTo 0) then { - if (!(KINDOF_ARRAY(_vehicle,_filters))) exitWith {life_action_inUse = false;}; - _type = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); - - life_impound_inuse = true; - - if (life_HC_isActive) then { - [_vehicle,true,player] remoteExec ["HC_fnc_vehicleStore",HC_Life]; - } else { - [_vehicle,true,player] remoteExec ["TON_fnc_vehicleStore",RSERV]; - }; - - waitUntil {!life_impound_inuse}; - if (playerSide isEqualTo west) then { - _impoundMultiplier = LIFE_SETTINGS(getNumber,"vehicle_cop_impound_multiplier"); - _value = _price * _impoundMultiplier; - [0,"STR_NOTF_HasImpounded",true,[profileName,((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - if (_vehicle in life_vehicles) then { - hint format [localize "STR_NOTF_OwnImpounded",[_value] call life_fnc_numberText,_type]; - BANK = BANK - _value; - } else { - hint format [localize "STR_NOTF_Impounded",_type,[_value] call life_fnc_numberText]; - BANK = BANK + _value; - }; - if (BANK < 0) then {BANK = 0;}; - [1] call SOCK_fnc_updatePartial; - }; -} else { - hint localize "STR_NOTF_ImpoundingCancelled"; -}; - -life_action_inUse = false; +#include "..\..\script_macros.hpp" +/* + File: fn_impoundAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Impounds the vehicle +*/ +private ["_vehicle","_type","_time","_value","_vehicleData","_upp","_ui","_progress","_pgText","_cP","_filters","_impoundValue","_price","_impoundMultiplier"]; +_vehicle = param [0,objNull,[objNull]]; +_filters = ["Car","Air","Ship"]; +if (!((KINDOF_ARRAY(_vehicle,_filters)))) exitWith {}; +if (player distance cursorObject > 10) exitWith {}; +if (_vehicle getVariable "NPC") exitWith {hint localize "STR_NPC_Protected"}; + +_vehicleData = _vehicle getVariable ["vehicle_info_owners",[]]; +if (_vehicleData isEqualTo 0) exitWith {deleteVehicle _vehicle}; //Bad vehicle. +_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); +_price = M_CONFIG(getNumber,"LifeCfgVehicles",(typeOf _vehicle),"price"); +[0,"STR_NOTF_BeingImpounded",true,[((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +life_action_inUse = true; + +_upp = localize "STR_NOTF_Impounding"; +//Setup our progress bar. +disableSerialization; +"progressBar" cutRsc ["life_progress","PLAIN"]; +_ui = uiNamespace getVariable "life_progress"; +_progress = _ui displayCtrl 38201; +_pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format ["%2 (1%1)...","%",_upp]; +_progress progressSetPosition 0.01; +_cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + uiSleep 0.09; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (player distance _vehicle > 10) exitWith {}; + if (!alive player) exitWith {}; +}; + +"progressBar" cutText ["","PLAIN"]; + +if (player distance _vehicle > 10) exitWith {hint localize "STR_NOTF_ImpoundingCancelled"; life_action_inUse = false;}; +if (!alive player) exitWith {life_action_inUse = false;}; + +if (count crew _vehicle isEqualTo 0) then { + if (!(KINDOF_ARRAY(_vehicle,_filters))) exitWith {life_action_inUse = false;}; + _type = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); + + if (life_HC_isActive) then { + [_vehicle,true,player] remoteExec ["HC_fnc_vehicleStore",HC_Life]; + } else { + [_vehicle,true,player] remoteExec ["TON_fnc_vehicleStore",RSERV]; + }; + + waitUntil {isNull _vehicle}; + if (playerSide isEqualTo west) then { + _impoundMultiplier = LIFE_SETTINGS(getNumber,"vehicle_cop_impound_multiplier"); + _value = _price * _impoundMultiplier; + [0,"STR_NOTF_HasImpounded",true,[profileName,((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + if (_vehicle in life_vehicles) then { + hint format [localize "STR_NOTF_OwnImpounded",[_value] call life_fnc_numberText,_type]; + BANK = BANK - _value; + } else { + hint format [localize "STR_NOTF_Impounded",_type,[_value] call life_fnc_numberText]; + BANK = BANK + _value; + }; + if (BANK < 0) then {BANK = 0;}; + [1] call SOCK_fnc_updatePartial; + }; +} else { + hint localize "STR_NOTF_ImpoundingCancelled"; +}; + +life_action_inUse = false; diff --git a/Altis_Life.Altis/core/configuration.sqf b/Altis_Life.Altis/core/configuration.sqf index fa8485c9e..e7971c33f 100644 --- a/Altis_Life.Altis/core/configuration.sqf +++ b/Altis_Life.Altis/core/configuration.sqf @@ -1,102 +1,101 @@ -#include "..\script_macros.hpp" -/* - File: configuration.sqf - Author: - - Description: - Master Life Configuration File - This file is to setup variables for the client, there are still other configuration files in the system - -***************************** -****** Backend Variables ***** -***************************** -*/ -life_action_delay = time; -life_trunk_vehicle = objNull; -life_session_completed = false; -life_garage_store = false; -life_session_tries = 0; -life_siren_active = false; -life_clothing_filter = 0; -life_redgull_effect = time; -life_is_processing = false; -life_bail_paid = false; -life_impound_inuse = false; -life_action_inUse = false; -life_spikestrip = objNull; -life_knockout = false; -life_interrupted = false; -life_respawned = false; -life_removeWanted = false; -life_action_gathering = false; -life_god = false; -life_frozen = false; -life_save_gear = []; -life_container_activeObj = objNull; -life_disable_getIn = false; -life_disable_getOut = false; -life_admin_debug = false; -life_civ_position = []; -life_markers = false; -life_markers_active = false; -life_canpay_bail = true; -life_storagePlacing = scriptNull; -life_hideoutBuildings = []; -life_firstSpawn = true; - -//Settings -life_settings_enableNewsBroadcast = profileNamespace getVariable ["life_enableNewsBroadcast", true]; -life_settings_enableSidechannel = profileNamespace getVariable ["life_enableSidechannel", true]; -life_settings_viewDistanceFoot = profileNamespace getVariable ["life_viewDistanceFoot", 1250]; -life_settings_viewDistanceCar = profileNamespace getVariable ["life_viewDistanceCar", 1250]; -life_settings_viewDistanceAir = profileNamespace getVariable ["life_viewDistanceAir", 1250]; - -//Uniform price (0),Hat Price (1),Glasses Price (2),Vest Price (3),Backpack Price (4) -life_clothing_purchase = [-1, -1, -1, -1, -1]; -/* -***************************** -****** Weight Variables ***** -***************************** -*/ -life_maxWeight = LIFE_SETTINGS(getNumber, "total_maxWeight"); -life_carryWeight = 0; //Represents the players current inventory weight (MUST START AT 0). - -/* -***************************** -****** Life Variables ******* -***************************** -*/ -life_net_dropped = false; -life_use_atm = true; -life_is_arrested = false; -life_is_alive = false; -life_delivery_in_progress = false; -life_thirst = 100; -life_hunger = 100; -CASH = 0; - -life_istazed = false; -life_isknocked = false; -life_vehicles = []; - -/* - Master Array of items? -*/ -//Setup variable inv vars. -{ - missionNamespace setVariable [ITEM_VARNAME(configName _x), 0]; -} forEach ("true" configClasses (missionConfigFile >> "VirtualItems")); - -/* Setup the BLAH! */ -{ - _varName = getText(_x >> "variable"); - _sideFlag = getText(_x >> "side"); - - missionNamespace setVariable [LICENSE_VARNAME(_varName,_sideFlag), false]; -} forEach ("true" configClasses (missionConfigFile >> "Licenses")); - -/* Setup life_hideoutBuildings */ -{ - _building = nearestBuilding getMarkerPos _x; - life_hideoutBuildings pushBack _building -} forEach (LIFE_SETTINGS(getArray,"gang_area")); +#include "..\script_macros.hpp" +/* + File: configuration.sqf + Author: + + Description: + Master Life Configuration File + This file is to setup variables for the client, there are still other configuration files in the system + +***************************** +****** Backend Variables ***** +***************************** +*/ +life_action_delay = time; +life_trunk_vehicle = objNull; +life_session_completed = false; +life_garage_store = false; +life_session_tries = 0; +life_siren_active = false; +life_clothing_filter = 0; +life_redgull_effect = time; +life_is_processing = false; +life_bail_paid = false; +life_action_inUse = false; +life_spikestrip = objNull; +life_knockout = false; +life_interrupted = false; +life_respawned = false; +life_removeWanted = false; +life_action_gathering = false; +life_god = false; +life_frozen = false; +life_save_gear = []; +life_container_activeObj = objNull; +life_disable_getIn = false; +life_disable_getOut = false; +life_admin_debug = false; +life_civ_position = []; +life_markers = false; +life_markers_active = false; +life_canpay_bail = true; +life_storagePlacing = scriptNull; +life_hideoutBuildings = []; +life_firstSpawn = true; + +//Settings +life_settings_enableNewsBroadcast = profileNamespace getVariable ["life_enableNewsBroadcast", true]; +life_settings_enableSidechannel = profileNamespace getVariable ["life_enableSidechannel", true]; +life_settings_viewDistanceFoot = profileNamespace getVariable ["life_viewDistanceFoot", 1250]; +life_settings_viewDistanceCar = profileNamespace getVariable ["life_viewDistanceCar", 1250]; +life_settings_viewDistanceAir = profileNamespace getVariable ["life_viewDistanceAir", 1250]; + +//Uniform price (0),Hat Price (1),Glasses Price (2),Vest Price (3),Backpack Price (4) +life_clothing_purchase = [-1, -1, -1, -1, -1]; +/* +***************************** +****** Weight Variables ***** +***************************** +*/ +life_maxWeight = LIFE_SETTINGS(getNumber, "total_maxWeight"); +life_carryWeight = 0; //Represents the players current inventory weight (MUST START AT 0). + +/* +***************************** +****** Life Variables ******* +***************************** +*/ +life_net_dropped = false; +life_use_atm = true; +life_is_arrested = false; +life_is_alive = false; +life_delivery_in_progress = false; +life_thirst = 100; +life_hunger = 100; +CASH = 0; + +life_istazed = false; +life_isknocked = false; +life_vehicles = []; + +/* + Master Array of items? +*/ +//Setup variable inv vars. +{ + missionNamespace setVariable [ITEM_VARNAME(configName _x), 0]; +} forEach ("true" configClasses (missionConfigFile >> "VirtualItems")); + +/* Setup the BLAH! */ +{ + _varName = getText(_x >> "variable"); + _sideFlag = getText(_x >> "side"); + + missionNamespace setVariable [LICENSE_VARNAME(_varName,_sideFlag), false]; +} forEach ("true" configClasses (missionConfigFile >> "Licenses")); + +/* Setup life_hideoutBuildings */ +{ + _building = nearestBuilding getMarkerPos _x; + life_hideoutBuildings pushBack _building +} forEach (LIFE_SETTINGS(getArray,"gang_area")); diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index b02f8f230..9fcee81e5 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -1,141 +1,132 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_vehicleStore.sqf - Author: Bryan "Tonic" Boardwine - Description: - Stores the vehicle in the 'Garage' -*/ -params [ - ["_vehicle", objNull, [objNull]], - ["_impound", false, [true]], - ["_unit", objNull, [objNull]] -]; - -if (isNull _vehicle || {isNull _unit}) exitWith {life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse";life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed. - -private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; -_ownerInfo params ["_uid"]; -private _vid = _vehicle getVariable ["vehID",-1]; - -// save damage. -private _damage = []; -if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { - _damage = getAllHitPointsDamage _vehicle; - _damage = _damage select 2; -}; - -// because fuel price! -private _fuel = 1; -if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _fuel = (fuel _vehicle); -}; - -if (_impound) exitWith { - if !(_vInfo isEqualTo []) then { - private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; - [_query,1] call DB_fnc_asyncCall; - }; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - - life_impound_inuse = false; - (owner _unit) publicVariableClient "life_impound_inuse"; -}; - -// not persistent so just do this! -if (_vInfo isEqualTo []) exitWith { - if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { - [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_unit]; - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - } else { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_unit]; - }; - life_garage_store = false; - (owner _unit) publicVariableClient "life_garage_store"; -}; - -if !(_uid isEqualTo getPlayerUID _unit) exitWith { - [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_unit]; - life_garage_store = false; - (owner _unit) publicVariableClient "life_garage_store"; -}; - -// sort out whitelisted items! -private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; -private _itemList = _trunk select 0; -private _totalweight = 0; -private _items = []; -if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { - private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { - private _blacklist = false; - private _profileQuery = format ["selectName:%1", _uid]; - private _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; - _profileName = _profileName select 0; - - { - _x params ["_itemName","_itemCount"]; - private _isIllegal = M_CONFIG(getNumber,"VirtualItems",_itemName,"illegal"); - - _isIllegal = _isIllegal isEqualTo 1; - - if ((_itemName in _resourceItems) || {_isIllegal}) then { - _items pushBack [_itemName,_itemCount]; - private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; - _totalweight = _weight + _totalweight; - }; - if (_isIllegal) then { - _blacklist = true; - }; - - } forEach _itemList; - - if (_blacklist) then { - [_uid, _profileName, "481"] remoteExecCall ["life_fnc_wantedAdd", RSERV]; - private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _vid]; - [_query, 1] call DB_fnc_asyncCall; - }; - - } else { - { - _x params ["_itemName","_itemCount"]; - if (_itemName in _resourceItems) then { - _items pushBack [_itemName,_itemCount]; - private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; - _totalweight = _weight + _totalweight; - }; - } forEach _itemList; - }; - - _trunk = [_items, _totalweight]; -} else { - _trunk = [[], 0]; -}; - -private _cargo = []; -if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { - private _vehItems = getItemCargo _vehicle; - private _vehMags = getMagazineCargo _vehicle; - private _vehWeapons = getWeaponCargo _vehicle; - private _vehBackpacks = getBackpackCargo _vehicle; - - if !((_vehItems select 0) isEqualTo [] && {(_vehMags select 0) isEqualTo [] && {(_vehWeapons select 0) isEqualTo [] && {(_vehBackpacks select 0) isEqualTo []}}}) then { - _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; - }; -}; - -// update -private _query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _vid]; -[_query,1] call DB_fnc_asyncCall; - -if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; -}; - -life_garage_store = false; -(owner _unit) publicVariableClient "life_garage_store"; -[1,"STR_Garage_Store_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; +#include "\life_server\script_macros.hpp" +/* + File: fn_vehicleStore.sqf + Author: Bryan "Tonic" Boardwine + Description: + Stores the vehicle in the 'Garage' +*/ +params [ + ["_vehicle", objNull, [objNull]], + ["_impound", false, [true]], + ["_unit", objNull, [objNull]] +]; + +if (isNull _vehicle || {isNull _unit}) exitWith {life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed. + +private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; +_ownerInfo params ["_uid"]; +private _vid = _vehicle getVariable ["vehID",-1]; + +// save damage. +private _damage = []; +if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { + _damage = getAllHitPointsDamage _vehicle; + _damage = _damage select 2; +}; + +// because fuel price! +private _fuel = 1; +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _fuel = (fuel _vehicle); +}; + +if (_impound) exitWith { + if !(_vInfo isEqualTo []) then { + private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; + [_query,1] call DB_fnc_asyncCall; + }; + + deleteVehicle _vehicle; +}; + +// not persistent so just do this! +if (_vInfo isEqualTo []) exitWith { + if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { + [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_unit]; + deleteVehicle _vehicle; + } else { + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_unit]; + }; + life_garage_store = false; + (owner _unit) publicVariableClient "life_garage_store"; +}; + +if !(_uid isEqualTo getPlayerUID _unit) exitWith { + [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_unit]; + life_garage_store = false; + (owner _unit) publicVariableClient "life_garage_store"; +}; + +// sort out whitelisted items! +private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; +private _itemList = _trunk select 0; +private _totalweight = 0; +private _items = []; +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { + private _blacklist = false; + private _profileQuery = format ["selectName:%1", _uid]; + private _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; + _profileName = _profileName select 0; + + { + _x params ["_itemName","_itemCount"]; + private _isIllegal = M_CONFIG(getNumber,"VirtualItems",_itemName,"illegal"); + + _isIllegal = _isIllegal isEqualTo 1; + + if ((_itemName in _resourceItems) || {_isIllegal}) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; + _totalweight = _weight + _totalweight; + }; + if (_isIllegal) then { + _blacklist = true; + }; + + } forEach _itemList; + + if (_blacklist) then { + [_uid, _profileName, "481"] remoteExecCall ["life_fnc_wantedAdd", RSERV]; + private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _vid]; + [_query, 1] call DB_fnc_asyncCall; + }; + + } else { + { + _x params ["_itemName","_itemCount"]; + if (_itemName in _resourceItems) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; + _totalweight = _weight + _totalweight; + }; + } forEach _itemList; + }; + + _trunk = [_items, _totalweight]; +} else { + _trunk = [[], 0]; +}; + +private _cargo = []; +if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { + private _vehItems = getItemCargo _vehicle; + private _vehMags = getMagazineCargo _vehicle; + private _vehWeapons = getWeaponCargo _vehicle; + private _vehBackpacks = getBackpackCargo _vehicle; + + if !((_vehItems select 0) isEqualTo [] && {(_vehMags select 0) isEqualTo [] && {(_vehWeapons select 0) isEqualTo [] && {(_vehBackpacks select 0) isEqualTo []}}}) then { + _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; + }; +}; + +// update +private _query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _vid]; +[_query,1] call DB_fnc_asyncCall; + +deleteVehicle _vehicle; + +life_garage_store = false; +(owner _unit) publicVariableClient "life_garage_store"; +[1,"STR_Garage_Store_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; From 56d3328c5f10e58a7118b658f66033eb5f1978f9 Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 2 Apr 2020 17:59:41 +0100 Subject: [PATCH 21/40] Couple of fixes --- .../Functions/Systems/fn_spawnVehicle.sqf | 315 +++++++++--------- .../Functions/Systems/fn_vehicleCreate.sqf | 1 - .../Functions/Systems/fn_vehicleStore.sqf | 18 +- .../Functions/Systems/fn_vehicleUpdate.sqf | 115 +++---- 4 files changed, 224 insertions(+), 225 deletions(-) diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf index d72f565d2..c06146ea9 100755 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -1,158 +1,157 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_spawnVehicle.sqf - Author: Bryan "Tonic" Boardwine - Description: - Attempts to create the selected vehicle, returning error messages if required. -*/ -params [ - ["_unit",objNull,[objNull]], - ["_vid",-1,[""]], - ["_spawnPoint","",[""]], - ["_dir",-1,[0]] -]; -if (isNull _unit || {_vid isEqualTo -1}) exitWith {}; - -private _name = name _unit; -private _side = side _unit; -private _pid = getPlayerUID _unit; - -private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; - -private _tickTime = diag_tickTime; -private _queryResult = [_query, 2] call DB_fnc_asyncCall; - -if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { - diag_log "------------- Client Query Request -------------"; - diag_log format ["QUERY: %1",_query]; - diag_log format ["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; - diag_log format ["Result: %1",_queryResult]; - diag_log "------------------------------------------------"; -}; - -if (_queryResult isEqualType "" || {_queryResult isEqualTo []}) exitWith {}; -_queryResult params ["_className","_plate","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; - -if (_alive isEqualTo 0) exitWith { - [1,"STR_Garage_SQLError_Destroyed",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; -}; - -if (_active isEqualTo 1) exitWith { - [1,"STR_Garage_SQLError_Active",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; -}; - -private _nearVehicles = nearestObjects[_spawnPoint,["Car","Air","Ship"],6]; //last check for nearby vehicles - -if !(_nearVehicles isEqualTo []) exitWith { - [_price] remoteExecCall ["life_fnc_garageRefund",_unit]; -}; - -_query = format ["updateVehicle:%1:%2", _pid, _vid]; -[_query, 1] call DB_fnc_asyncCall; - -private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; -if (_dir isEqualTo -1) then { - _dir = markerDir _spawnPoint; -}; -_vehicle setDir _dir; - -clearWeaponCargoGlobal _vehicle; -clearMagazineCargoGlobal _vehicle; -clearItemCargoGlobal _vehicle; -clearBackpackCargoGlobal _vehicle; -_vehicle lock 2; -_vehicle disableTIEquipment true; - -[_vehicle,_color] call life_fnc_colorVehicle; -[_vehicle] call life_fnc_clearVehicleAmmo; - -_vehicle setVariable ["trunk_in_use",false,true]; -_vehicle setVariable ["vehicle_info_owners",[[_pid,name _unit]],true]; -_vehicle setPlateNumber _plate; -_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber -_vehicle setVariable ["vehID",_vid]; - -switch _side do { - case west: { - if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { - [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; - }; - }; - case civilian: { - if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo "Digi Green")) then { - [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; - }; - }; - case independent: { - if (_className isEqualTo "C_Offroad_01_F") then { - [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; - }; - }; -}; - -[_pid,_side,_vehicle,1] call TON_fnc_keyManagement; -[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; - -if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { - _vehicle setVariable ["Trunk",_trunk,true]; - - if (_wasIllegal isEqualTo 1) then { - private _refPoint = getMarkerPos _spawnPoint; - - private _distance = 100000; - private "_location"; - - { - private _tempLocation = nearestLocation [_refPoint, _x]; - private _tempDistance = _refPoint distance _tempLocation; - - if (_tempDistance < _distance) then { - _location = _tempLocation; - _distance = _tempDistance; - }; - false - - } count ["NameCityCapital", "NameCity", "NameVillage"]; - - _location = text _location; - [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; - - _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; - [_query, 1] call DB_fnc_asyncCall; - }; -} else { - _vehicle setVariable ["Trunk", [[], 0], true]; -}; - -if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _vehicle setFuel _fuel; -} else { - _vehicle setFuel 1; -}; - -if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { - _gear params ["_items","_mags","_weapons","_backpacks"]; - - for "_i" from 0 to ((count (_items select 0)) - 1) do { - _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; - }; - for "_i" from 0 to ((count (_mags select 0)) - 1) do { - _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; - }; - for "_i" from 0 to ((count (_weapons select 0)) - 1) do { - _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; - }; - for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { - _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; - }; -}; - -if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { - private _parts = getAllHitPointsDamage _vehicle; - - for "_i" from 0 to ((count _damage) - 1) do { - _vehicle setHitPointDamage [format ["%1",((_parts select 0) select _i)],_damage select _i]; - }; -}; - -[1,"STR_Garage_spawn_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; +#include "\life_server\script_macros.hpp" +/* + File: fn_spawnVehicle.sqf + Author: Bryan "Tonic" Boardwine + Description: + Attempts to create the selected vehicle, returning error messages if required. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_vid",-1,[""]], + ["_spawnPoint","",[""]], + ["_dir",-1,[0]] +]; +if (isNull _unit || {_vid isEqualTo -1}) exitWith {}; + +private _name = name _unit; +private _side = side _unit; +private _pid = getPlayerUID _unit; + +private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; +private _tickTime = diag_tickTime; +private _queryResult = [_query, 2] call DB_fnc_asyncCall; + +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format ["QUERY: %1",_query]; + diag_log format ["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format ["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; + +if (_queryResult isEqualType "" || {_queryResult isEqualTo []}) exitWith {}; +_queryResult params ["_className","_plate","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; + +if (_alive isEqualTo 0) exitWith { + [1,"STR_Garage_SQLError_Destroyed",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +if (_active isEqualTo 1) exitWith { + [1,"STR_Garage_SQLError_Active",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +private _nearVehicles = nearestObjects[_spawnPoint,["Car","Air","Ship"],6]; //last check for nearby vehicles + +if !(_nearVehicles isEqualTo []) exitWith { + [_price] remoteExecCall ["life_fnc_garageRefund",_unit]; +}; + +_query = format ["updateVehicle:%1:%2", _pid, _vid]; +[_query, 1] call DB_fnc_asyncCall; + +private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; +if (_dir isEqualTo -1) then { + _dir = markerDir _spawnPoint; +}; +_vehicle setDir _dir; + +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; +_vehicle lock 2; +_vehicle disableTIEquipment true; + +[_vehicle,_color] call life_fnc_colorVehicle; +[_vehicle] call life_fnc_clearVehicleAmmo; + +_vehicle setVariable ["trunk_in_use",false,true]; +_vehicle setVariable ["vehicle_info_owners",[[_pid,name _unit]],true]; +_vehicle setPlateNumber _plate; +_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber +_vehicle setVariable ["vehID",_vid]; + +switch _side do { + case west: { + if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; + }; + }; + case civilian: { + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo "Digi Green")) then { + [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; + }; + }; + case independent: { + if (_className isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; + }; + }; +}; + +[_pid,_side,_vehicle,1] call TON_fnc_keyManagement; +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + _vehicle setVariable ["Trunk",_trunk,true]; + + if (_wasIllegal isEqualTo 1) then { + private _refPoint = getMarkerPos _spawnPoint; + + private _distance = 100000; + private "_location"; + + { + private _tempLocation = nearestLocation [_refPoint, _x]; + private _tempDistance = _refPoint distance _tempLocation; + + if (_tempDistance < _distance) then { + _location = _tempLocation; + _distance = _tempDistance; + }; + false + + } count ["NameCityCapital", "NameCity", "NameVillage"]; + + _location = text _location; + [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; + + _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; + [_query, 1] call DB_fnc_asyncCall; + }; +} else { + _vehicle setVariable ["Trunk", [[], 0], true]; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _vehicle setFuel _fuel; +} else { + _vehicle setFuel 1; +}; + +if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { + _gear params ["_items","_mags","_weapons","_backpacks"]; + + for "_i" from 0 to ((count (_items select 0)) - 1) do { + _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; + }; + for "_i" from 0 to ((count (_mags select 0)) - 1) do { + _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; + }; + for "_i" from 0 to ((count (_weapons select 0)) - 1) do { + _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; + }; + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { + _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; + }; +}; + +if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { + private _parts = getAllHitPointsDamage _vehicle; + + for "_i" from 0 to ((count _damage) - 1) do { + _vehicle setHitPointDamage [format ["%1",((_parts select 0) select _i)],_damage select _i]; + }; +}; + +[1,"STR_Garage_spawn_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 0e163476f..a569d5fca 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -15,7 +15,6 @@ params [ if (isNull _unit || {_className isEqualTo "" || {_spawnPoint isEqualTo ""}}) exitWith {}; private _uid = getPlayerUID _unit; - private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); private _plateForceUnique = LIFE_SETTINGS(getNumber,"vehicle_enforceUniquePlate") isEqualTo 1; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index 9fcee81e5..738c57a74 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -27,11 +27,11 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { // because fuel price! private _fuel = 1; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _fuel = (fuel _vehicle); + _fuel = fuel _vehicle; }; if (_impound) exitWith { - if !(_vInfo isEqualTo []) then { + if (_vid isEqualTo -1) then { private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; [_query,1] call DB_fnc_asyncCall; }; @@ -40,7 +40,7 @@ if (_impound) exitWith { }; // not persistent so just do this! -if (_vInfo isEqualTo []) exitWith { +if (_vid isEqualTo -1) exitWith { if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_unit]; deleteVehicle _vehicle; @@ -59,8 +59,8 @@ if !(_uid isEqualTo getPlayerUID _unit) exitWith { // sort out whitelisted items! private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; -private _itemList = _trunk select 0; -private _totalweight = 0; +_trunk params ["_itemList"]; +private _totalWeight = 0; private _items = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); @@ -79,7 +79,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { if ((_itemName in _resourceItems) || {_isIllegal}) then { _items pushBack [_itemName,_itemCount]; private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; - _totalweight = _weight + _totalweight; + _totalWeight = _weight + _totalWeight; }; if (_isIllegal) then { _blacklist = true; @@ -88,7 +88,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { } forEach _itemList; if (_blacklist) then { - [_uid, _profileName, "481"] remoteExecCall ["life_fnc_wantedAdd", RSERV]; + [_uid, _profileName, "481"] call life_fnc_wantedAdd; private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _vid]; [_query, 1] call DB_fnc_asyncCall; }; @@ -99,12 +99,12 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { if (_itemName in _resourceItems) then { _items pushBack [_itemName,_itemCount]; private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; - _totalweight = _weight + _totalweight; + _totalWeight = _weight + _totalWeight; }; } forEach _itemList; }; - _trunk = [_items, _totalweight]; + _trunk = [_items, _totalWeight]; } else { _trunk = [[], 0]; }; diff --git a/life_server/Functions/Systems/fn_vehicleUpdate.sqf b/life_server/Functions/Systems/fn_vehicleUpdate.sqf index be31736f1..c1a26ef87 100755 --- a/life_server/Functions/Systems/fn_vehicleUpdate.sqf +++ b/life_server/Functions/Systems/fn_vehicleUpdate.sqf @@ -1,57 +1,58 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_vehicleUpdate.sqf - Author : NiiRoZz - - Description: - Tells the database that this vehicle need update inventory. -*/ -params [ - ["_vehicle", objNull, [objNull]], - ["_mode", 1, [0]] -]; - -if (isNull _vehicle) exitWith {}; //NULL - -private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; -if (_dbInfo isEqualTo []) exitWith {}; - -_ownerInfo params ["_uid"]; -private _vid = _vehicle getVariable ["vehID",-1]; - -switch _mode do { - case 1: { - private _vehItems = getItemCargo _vehicle; - private _vehMags = getMagazineCargo _vehicle; - private _vehWeapons = getWeaponCargo _vehicle; - private _vehBackpacks = getBackpackCargo _vehicle; - private _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; - - // Keep it clean! - if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { - _cargo = []; - }; - - private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _vid]; - [_query, 1] call DB_fnc_asyncCall; - }; - - case 2: { - private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - private _trunk = _vehicle getVariable ["Trunk",[[],0]]; - private _itemList = _trunk select 0; - private _totalweight = 0; - private _items = []; - { - if ((_x select 0) in _resourceItems) then { - _items pushBack [_x select 0,_x select 1]; - private _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); - _totalweight = _weight + _totalweight; - }; - } forEach _itemList; - _trunk = [_items,_totalweight]; - - private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _vid]; - [_query,1] call DB_fnc_asyncCall; - }; -}; +#include "\life_server\script_macros.hpp" +/* + File: fn_vehicleUpdate.sqf + Author : NiiRoZz + + Description: + Tells the database that this vehicle need update inventory. +*/ +params [ + ["_vehicle", objNull, [objNull]], + ["_mode", 1, [0]] +]; + +if (isNull _vehicle) exitWith {}; //NULL + +private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; +if (_ownerInfo isEqualTo []) exitWith {}; + +_ownerInfo params ["_uid"]; +private _vid = _vehicle getVariable ["vehID",-1]; + +switch _mode do { + case 1: { + private _vehItems = getItemCargo _vehicle; + private _vehMags = getMagazineCargo _vehicle; + private _vehWeapons = getWeaponCargo _vehicle; + private _vehBackpacks = getBackpackCargo _vehicle; + private _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + + // Keep it clean! + if ((_vehItems select 0) isEqualTo [] && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { + _cargo = []; + }; + + private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _vid]; + [_query, 1] call DB_fnc_asyncCall; + }; + + case 2: { + private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + private _trunk = _vehicle getVariable ["Trunk",[[],0]]; + private _itemList = _trunk select 0; + private _totalWeight = 0; + private _items = []; + { + _x params ["_itemName","_itemCount"]; + if (_itemName in _resourceItems) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; + _totalWeight = _weight + _totalWeight; + }; + } forEach _itemList; + _trunk = [_items,_totalWeight]; + + private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _vid]; + [_query,1] call DB_fnc_asyncCall; + }; +}; From 4e8c63795326939fd03e501a3cd2b85f23f244db Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 3 Apr 2020 22:18:41 +0100 Subject: [PATCH 22/40] Small changes --- .../core/vehicle/fn_colorVehicle.sqf | 80 +++++++++-------- .../Functions/Systems/fn_getVehicles.sqf | 86 +++++++++---------- .../Functions/Systems/fn_vehicleAnimate.sqf | 2 +- .../Functions/Systems/fn_vehicleStore.sqf | 2 +- 4 files changed, 84 insertions(+), 86 deletions(-) diff --git a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf index d6939646f..d547248ca 100644 --- a/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_colorVehicle.sqf @@ -1,41 +1,39 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_colorVehicle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Reskins the vehicle. -*/ -params [ - ["_vehicle",objNull,[objNull]], - ["_colorName","",[""]] -]; - -private _className = typeOf _vehicle; - -if (isNull _vehicle || {!alive _vehicle} || {_colorName isEqualTo ""}) exitWith {}; - -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; - _className = "Default"; //Use Default class if it doesn't exist -}; - -private _textureArray = M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures"); -private _colorIndex = _textureArray findIf {_x select 0 == _colorName}; -if (_colorIndex isEqualTo -1) then { - _colorIndex = 0; -}; -private _textures = (_textureArray select _colorIndex) select 2; -if (_textures isEqualTo []) exitWith {}; - -if (local _vehicle) exitWith { - { - _vehicle setObjectTexture [_forEachIndex,_x] - } forEach _textures; -}; - -_vehicle setVariable ["Life_veh_color",_index,true]; - -{ - _vehicle setObjectTextureGlobal [_forEachIndex,_x] -} forEach _textures; +#include "..\..\script_macros.hpp" +/* + File: fn_colorVehicle.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Reskins the vehicle. +*/ +params [ + ["_vehicle",objNull,[objNull]], + ["_colorName","",[""]] +]; +if (!alive _vehicle || {_colorName isEqualTo ""}) exitWith {}; + +private _className = typeOf _vehicle; +if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist +}; + +private _textureArray = M_CONFIG(getArray,"LifeCfgVehicles",_className,"textures"); +private _colorIndex = _textureArray findIf {_x select 0 == _colorName}; +if (_colorIndex isEqualTo -1) then { + _colorIndex = 0; //default to first available texture +}; +private _textures = (_textureArray select _colorIndex) select 2; +if (_textures isEqualTo []) exitWith {}; + +if (local _vehicle) exitWith { + { + _vehicle setObjectTexture [_forEachIndex,_x] + } forEach _textures; +}; + +_vehicle setVariable ["Life_veh_color",_index,true]; + +{ + _vehicle setObjectTextureGlobal [_forEachIndex,_x] +} forEach _textures; diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index 4055ee7fa..32f585be3 100755 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -1,43 +1,43 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_getVehicles.sqf - Author: Bryan "Tonic" Boardwine - Description: - Sends a request to query the database information and returns vehicles. -*/ -params [ - ["_unit", objNull, [objNull]], - ["_type", "", [""]], -]; - -//Error checks -if (isNull _unit || {_type isEqualTo ""}) exitWith { - if !(isNull _unit) then { - [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; - }; -}; - -private _side = [_unit,true] call life_util_fnc_sideToString; - -if (_side isEqualTo "Unknown") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; -}; - -private _query = format ["selectVehicles:%1:%2:%3", _pid, _side, _type]; - -private _tickTime = diag_tickTime; -private _queryResult = [_query, 2, true] call DB_fnc_asyncCall; - -if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { - diag_log "------------- Client Query Request -------------"; - diag_log format ["QUERY: %1", _query]; - diag_log format ["Time to complete: %1 (in seconds)", (diag_tickTime - _tickTime)]; - diag_log format ["Result: %1", _queryResult]; - diag_log "------------------------------------------------"; -}; - -if (_queryResult isEqualType "") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; -}; - -[_queryResult] remoteExec ["life_fnc_impoundMenu",remoteExecutedOwner]; +#include "\life_server\script_macros.hpp" +/* + File: fn_getVehicles.sqf + Author: Bryan "Tonic" Boardwine + Description: + Sends a request to query the database information and returns vehicles. +*/ +params [ + ["_unit", objNull, [objNull]], + ["_type", "", [""]], +]; + +//Error checks +if (isNull _unit || {_type isEqualTo ""}) exitWith { + if !(isNull _unit) then { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; + }; +}; + +private _side = [_unit,true] call life_util_fnc_sideToString; + +if (_side isEqualTo "Unknown") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; +}; + +private _query = format ["selectVehicles:%1:%2:%3", _pid, _side, _type]; + +private _tickTime = diag_tickTime; +private _queryResult = [_query, 2, true] call DB_fnc_asyncCall; + +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format ["QUERY: %1", _query]; + diag_log format ["Time to complete: %1 (in seconds)", (diag_tickTime - _tickTime)]; + diag_log format ["Result: %1", _queryResult]; + diag_log "------------------------------------------------"; +}; + +if (_queryResult isEqualType "") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; +}; + +[_queryResult] remoteExec ["life_fnc_impoundMenu",_unit]; diff --git a/life_server/Functions/Systems/fn_vehicleAnimate.sqf b/life_server/Functions/Systems/fn_vehicleAnimate.sqf index 8fd087e70..4f0b6c403 100644 --- a/life_server/Functions/Systems/fn_vehicleAnimate.sqf +++ b/life_server/Functions/Systems/fn_vehicleAnimate.sqf @@ -6,7 +6,7 @@ */ params [ ["_vehicle",objNull,[objNull]], - ["_animate",[],[[]]], + ["_animate","",["",[]]], ["_preset",false,[false]] ]; if (isNull _vehicle) exitWith {}; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index 738c57a74..2a7bba438 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -31,7 +31,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { }; if (_impound) exitWith { - if (_vid isEqualTo -1) then { + if (_vid isEqualTo -1) then { private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; [_query,1] call DB_fnc_asyncCall; }; From de47bbfa5d6ff4a3eaf8e4c9cd5a21ee79e6e248 Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 14 Apr 2020 11:45:09 +0100 Subject: [PATCH 23/40] Resolve conflicts --- Altis_Life.Altis/core/pmenu/fn_keyGive.sqf | 64 ++--- BEFilters/remoteexec.txt | 2 +- life_server/Functions/Systems/fn_cleanup.sqf | 122 +++++---- life_server/config.cpp | 245 +++++++++---------- life_server/init.sqf | 5 +- 5 files changed, 234 insertions(+), 204 deletions(-) diff --git a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf index c8deade98..641577668 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf @@ -1,32 +1,32 @@ -/* - File: fn_keyGive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gives a copy of the key for the selected vehicle to the selected player. -*/ -disableSerialization; - -private _dialog = findDisplay 2700; -private _list = _dialog displayCtrl 2701; -private _pList = _dialog displayCtrl 2702; - -private _vehIndex = lbCurSel _list; -if (_vehIndex isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectVehicle"}; -private _playerIndex = lbCurSel _pList; -if (_playerIndex isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectPlayer"}; - -private _vehicle = life_vehicles select (_list lbValue _vehIndex); -private _unit = call compile format ["%1", (_pList select _playerIndex)]; -if (isNil "_unit" || {isNull _unit}) exitWith {}; - -private _uid = getPlayerUID _unit; -private _owners = _vehicle getVariable "vehicle_info_owners"; -private _insertedIndex = _owners pushBackUnique [_uid,_unit getVariable ["realname",name _unit]]; - -if (_insertedIndex != -1) then { - _vehicle setVariable ["vehicle_info_owners",_owners,true]; -}; - -hint format [localize "STR_NOTF_givenKeysTo",_unit getVariable ["realname",name _unit],typeOf _vehicle]; -[_vehicle,_unit,profileName] remoteExecCall ["TON_fnc_clientGetKey",_unit]; +/* + File: fn_keyGive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gives a copy of the key for the selected vehicle to the selected player. +*/ +disableSerialization; + +private _dialog = findDisplay 2700; +private _list = _dialog displayCtrl 2701; +private _pList = _dialog displayCtrl 2702; + +private _vehIndex = lbCurSel _list; +if (_vehIndex isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectVehicle"}; +private _playerIndex = lbCurSel _pList; +if (_playerIndex isEqualTo -1) exitWith {hint localize "STR_NOTF_didNotSelectPlayer"}; + +private _vehicle = life_vehicles select (_list lbValue _vehIndex); +private _unit = call compile format ["%1", (_pList select _playerIndex)]; +if (isNil "_unit" || {isNull _unit}) exitWith {}; + +private _uid = getPlayerUID _unit; +private _owners = _vehicle getVariable "vehicle_info_owners"; +private _insertedIndex = _owners pushBackUnique [_uid,_unit getVariable ["realname",name _unit]]; + +if (_insertedIndex != -1) then { + _vehicle setVariable ["vehicle_info_owners",_owners,true]; +}; + +hint format [localize "STR_NOTF_givenKeysTo",_unit getVariable ["realname",name _unit],typeOf _vehicle]; +[_vehicle,profileName] remoteExecCall ["TON_fnc_clientGetKey",_unit]; diff --git a/BEFilters/remoteexec.txt b/BEFilters/remoteexec.txt index 9b227a16b..8e39efc11 100644 --- a/BEFilters/remoteexec.txt +++ b/BEFilters/remoteexec.txt @@ -1,3 +1,3 @@ //regex 1 "" !="_this call fn_whoDoneIt" -5 "" !BIS_fnc_(effectKilled(AirDestruction|Secondaries)|execVM) !DB_fnc_(insertRequest|queryRequest|updatePartial|updateRequest) !HC_fnc_(addContainer|addHouse|chopShopSell|deleteDBContainer|getVehicles|insertGang|insertRequest|jailSys|queryRequest|receivekeyofServer) !HC_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !HC_fnc_update(Gang|HouseContainers|HouseTrunk|Partial|Request) !HC_fnc_vehicle(Create|Delete|Store|Update) !HC_fnc_wanted(Add|Bounty|Crimes|Fetch|ProfUpdate|Remove) !life_fnc_(AAN|addVehicle2Chain|adminid|admininfo|animSync|bountyReceive|broadcast|colorVehicle|copLights) !life_fnc_(copSearch|CopSiren|corpse|demoChargeTimer|flashbang|freezePlayer|gangCreated|gangDisbanded|gangInvite) !life_fnc_(garageRefund|giveDiff|hideObj|impoundMenu|jail(Me|Sys)?) !life_fnc_(jumpFnc|knockedOut|licenseCheck|licensesRead|lightHouse|lockVehicle|medic(Lights|Request|Siren)) !life_fnc_(moveIn|pickupItem|pickupMoney|pulloutVeh|receiveItem|receiveMoney|removeLicenses|restrain|revived) !life_fnc_(robPerson|robReceive|say3D|searchClient|seizeClient|setFuel|simDisable|soundDevice|spikeStripEffect) !life_fnc_(tazeSound|ticketPaid|ticketPrompt|gangBankResponse) !life_fnc_wanted(Add|Bounty|Crimes|Fetch|Info|List|ProfUpdate|Remove) !life_fnc_wireTransfer !SOCK_fnc_(dataQuery|insertPlayerInfo|updateRequest) !SPY_fnc_(cookieJar|notifyAdmins|observe) !TON_fnc_(addContainer|addHouse|chopShopSell|cleanupRequest|handleBlastingCharge) !TON_fnc_clientGang(Kick|Leader|Left) !TON_fnc_(clientGetKey|clientMessage) !TON_fnc_(deleteDBContainer|getID|getVehicles|insertGang|keyManagement|managesc|pickupAction|player_query|recupkeyforHC) !TON_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !TON_fnc_update(Gang|HouseContainers|HouseTrunk) !TON_fnc_vehicle(Create|Delete|Store|Update) !="_this call fn_whoDoneIt" +5 "" !BIS_fnc_(effectKilled(AirDestruction|Secondaries)|execVM) !DB_fnc_(insertRequest|queryRequest|updatePartial|updateRequest) !HC_fnc_(addContainer|addHouse|chopShopSell|deleteDBContainer|getVehicles|insertGang|insertRequest|jailSys|queryRequest|receivekeyofServer) !HC_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !HC_fnc_update(Gang|HouseContainers|HouseTrunk|Partial|Request) !HC_fnc_vehicle(Create|Delete|Store|Update) !HC_fnc_wanted(Add|Bounty|Crimes|Fetch|ProfUpdate|Remove) !life_fnc_(AAN|addVehicle2Chain|adminid|admininfo|animSync|bountyReceive|broadcast|colorVehicle|copLights) !life_fnc_(copSearch|CopSiren|corpse|demoChargeTimer|flashbang|freezePlayer|gangCreated|gangDisbanded|gangInvite) !life_fnc_(garageRefund|giveDiff|hideObj|impoundMenu|jail(Me|Sys)?) !life_fnc_(jumpFnc|knockedOut|licenseCheck|licensesRead|lightHouse|lockVehicle|medic(Lights|Request|Siren)) !life_fnc_(moveIn|pickupItem|pickupMoney|pulloutVeh|receiveItem|receiveMoney|removeLicenses|restrain|revived) !life_fnc_(robPerson|robReceive|say3D|searchClient|seizeClient|setFuel|simDisable|soundDevice|spikeStripEffect) !life_fnc_(tazeSound|ticketPaid|ticketPrompt|gangBankResponse) !life_fnc_wanted(Add|Bounty|Crimes|Fetch|Info|List|ProfUpdate|Remove) !life_fnc_wireTransfer !SOCK_fnc_(dataQuery|insertPlayerInfo|updateRequest) !SPY_fnc_(cookieJar|notifyAdmins|observe) !TON_fnc_(addContainer|addHouse|chopShopSell|cleanupRequest|handleBlastingCharge) !life_fnc_clientGang(Kick|Leader|Left) !life_fnc_(clientGetKey|clientMessage) !TON_fnc_(deleteDBContainer|getID|getVehicles|insertGang|keyManagement|managesc|pickupAction|recupkeyforHC) !life_util_fnc_playerQuery !TON_fnc_(removeGang|sellHouse(Container)?|spawnVehicle|spikeStrip) !TON_fnc_update(Gang|HouseContainers|HouseTrunk) !TON_fnc_vehicle(Create|Delete|Store|Update) !="_this call fn_whoDoneIt" \ No newline at end of file diff --git a/life_server/Functions/Systems/fn_cleanup.sqf b/life_server/Functions/Systems/fn_cleanup.sqf index 64f5b5702..ce314e17b 100755 --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -1,45 +1,77 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_cleanup.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Server-side cleanup script on vehicles. -*/ -private _saveFuel = LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1; -private _minUnitDistance = LIFE_SETTINGS(getNumber,"vehicles_despawn_max_distance"); - -for "_i" from 0 to 1 step 0 do { - uiSleep (60 * 60); - { - private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _x) >> "vehicleClass"); - private _protect = _x getVariable ["NPC",false]; - - if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!(_protect)}) then { - private _noUnitsNear = ((nearestObjects [_x, ["CAManBase"], _minUnitDistance]) findIf {isPlayer _x && {alive _x}} isEqualTo -1); - - if (crew _x isEqualTo [] && {_noUnitsNear}) then { - private _fuel = if (_saveFuel) then {fuel _x} else {1}; - private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; - _ownerInfo params ["_uid"]; - private _vid = _x getVariable ["vehID",-1]; - - deleteVehicle _x; - - if (_vid isEqualTo -1) exitWith {}; - - waitUntil {uiSleep 1; isNull _x}; - - private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _vid]; - [_query, 1] call DB_fnc_asyncCall; - }; - }; - } forEach vehicles; - - { - if (!isNil {_x getVariable "item"}) then { - deleteVehicle _x; - }; - true - } count (allMissionObjects "Thing"); -}; +#include "\life_server\script_macros.hpp" +/* + File: fn_cleanup.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Server-side cleanup script on vehicles, dealers and fed reserve. +*/ +private _saveFuel = LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1; +private _minUnitDistance = LIFE_SETTINGS(getNumber,"vehicles_despawn_max_distance"); + +private _fnc_fedDealerUpdate = { + { + private _dealer = missionNamespace getVariable [_x, objNull]; + if !(isNull _dealer) then { + _x setVariable ["sellers", [], true]; + }; + } forEach ["Dealer_1", "Dealer_2", "Dealer_3"]; + + private _funds = fed_bank getVariable ["safe", 0]; + fed_bank setVariable ["safe", round(_funds + ((count playableUnits)/2)), true]; +}; + +private _fnc_cleanVehicles = { + { + private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _x) >> "vehicleClass"); + private _protect = _x getVariable ["NPC",false]; + + if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!_protect}) then { + private _noUnitsNear = (nearestObjects [_x, ["CAManBase"], _minUnitDistance]) findIf {isPlayer _x && {alive _x}} isEqualTo -1; + + if (crew _x isEqualTo [] && {_noUnitsNear}) then { + private _fuel = if (_saveFuel) then {fuel _x} else {1}; + private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; + private _vid = _x getVariable ["vehID",-1]; + + deleteVehicle _x; + + if (_vid isEqualTo -1) exitWith {}; + + waitUntil {uiSleep 1; isNull _x}; + + private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _vid]; + [_query, 1] call DB_fnc_asyncCall; + }; + }; + } forEach vehicles; + + { + if (!isNil {_x getVariable "item"}) then { + deleteVehicle _x; + }; + true + } count (allMissionObjects "Thing"); +}; + +//Array format: [parameters,function,delayTime] +private _routines = [ + [[], _fnc_fedDealerUpdate, 1800], + [[], _fnc_cleanVehicles, 3600] +]; + +{ + _x pushBack (diag_tickTime + (_x # 2)); +} forEach _routines; + +for "_i" from 0 to 1 step 0 do { + { + _x params ["_params", "_function", "_delay", "_timeToRun"]; + if (diag_tickTime > _timeToRun) then { + _params call _function; + _x set [2, diag_tickTime + _delay]; + }; + } forEach _routines; + uiSleep 1e-6; +}; diff --git a/life_server/config.cpp b/life_server/config.cpp index 10e5d7072..f9922e983 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -1,123 +1,122 @@ -class DefaultEventhandlers; -class CfgPatches { - class life_server { - units[] = {"C_man_1"}; - weapons[] = {}; - requiredAddons[] = {"A3_Data_F","A3_Soft_F","A3_Soft_F_Offroad_01","A3_Characters_F"}; - fileName = "life_server.pbo"; - author = "Tonic"; - }; -}; - -class CfgFunctions { - class MySQL_Database { - tag = "DB"; - class MySQL - { - file = "\life_server\Functions\MySQL"; - class queryRequest{}; - class asyncCall{}; - class insertRequest{}; - class updateRequest{}; - class updatePartial {}; - }; - }; - - class Life_System { - tag = "life"; - class Wanted_Sys { - file = "\life_server\Functions\WantedSystem"; - class wantedFetch {}; - class wantedPerson {}; - class wantedBounty {}; - class wantedRemove {}; - class wantedAdd {}; - class wantedCrimes {}; - class wantedProfUpdate {}; - }; - - class Jail_Sys { - file = "\life_server\Functions\Jail"; - class jailSys {}; - }; - }; - - class TON_System { - tag = "TON"; - class Systems { - file = "\life_server\Functions\Systems"; - class managesc {}; - class cleanup {}; - class huntingZone {}; - class getID {}; - class vehicleCreate {}; - class spawnVehicle {}; - class getVehicles {}; - class vehicleStore {}; - class vehicleDelete {}; - class spikeStrip {}; - class transferOwnership {}; - class federalUpdate {}; - class chopShopSell {}; - class clientDisconnect {}; - class entityRespawned {}; - class entityKilled {}; - class cleanupRequest {}; - class keyManagement {}; - class vehicleUpdate {}; - class recupkeyforHC {}; - class handleBlastingCharge {}; - class terrainSort {}; - class vehicleAnimate {}; - }; - - class Housing { - file = "\life_server\Functions\Housing"; - class addHouse {}; - class addContainer {}; - class deleteDBContainer {}; - class fetchPlayerHouses {}; - class initHouses {}; - class sellHouse {}; - class sellHouseContainer {}; - class updateHouseContainers {}; - class updateHouseTrunk {}; - class houseCleanup {}; - class houseGarage {}; - }; - - class Gangs { - file = "\life_server\Functions\Gangs"; - class insertGang {}; - class queryPlayerGang {}; - class removeGang {}; - class updateGang {}; - }; - - class Actions { - file = "\life_server\Functions\Actions"; - class pickupAction {}; - }; - - class PlayTime { - file = "\life_server\Functions\PlayTime"; - class setPlayTime {}; - class getPlayTime {}; - }; - }; -}; - -class CfgVehicles { - class Car_F; - class CAManBase; - class Civilian; - class Civilian_F : Civilian { - class EventHandlers; - }; - - class C_man_1 : Civilian_F { - class EventHandlers: EventHandlers { - init = "(_this select 0) execVM ""\life_server\fix_headgear.sqf"""; - }; - }; -}; +class DefaultEventhandlers; +class CfgPatches { + class life_server { + units[] = {"C_man_1"}; + weapons[] = {}; + requiredAddons[] = {"A3_Data_F","A3_Soft_F","A3_Soft_F_Offroad_01","A3_Characters_F"}; + fileName = "life_server.pbo"; + author = "Tonic"; + }; +}; + +class CfgFunctions { + class MySQL_Database { + tag = "DB"; + class MySQL + { + file = "\life_server\Functions\MySQL"; + class queryRequest{}; + class asyncCall{}; + class insertRequest{}; + class updateRequest{}; + class updatePartial {}; + }; + }; + + class Life_System { + tag = "life"; + class Wanted_Sys { + file = "\life_server\Functions\WantedSystem"; + class wantedFetch {}; + class wantedPerson {}; + class wantedBounty {}; + class wantedRemove {}; + class wantedAdd {}; + class wantedCrimes {}; + class wantedProfUpdate {}; + }; + + class Jail_Sys { + file = "\life_server\Functions\Jail"; + class jailSys {}; + }; + }; + + class TON_System { + tag = "TON"; + class Systems { + file = "\life_server\Functions\Systems"; + class managesc {}; + class cleanup {}; + class huntingZone {}; + class getID {}; + class vehicleCreate {}; + class spawnVehicle {}; + class getVehicles {}; + class vehicleStore {}; + class vehicleDelete {}; + class spikeStrip {}; + class transferOwnership {}; + class federalUpdate {}; + class chopShopSell {}; + class clientDisconnect {}; + class entityRespawned {}; + class entityKilled {}; + class cleanupRequest {}; + class keyManagement {}; + class vehicleUpdate {}; + class recupkeyforHC {}; + class handleBlastingCharge {}; + class vehicleAnimate {}; + }; + + class Housing { + file = "\life_server\Functions\Housing"; + class addHouse {}; + class addContainer {}; + class deleteDBContainer {}; + class fetchPlayerHouses {}; + class initHouses {}; + class sellHouse {}; + class sellHouseContainer {}; + class updateHouseContainers {}; + class updateHouseTrunk {}; + class houseCleanup {}; + class houseGarage {}; + }; + + class Gangs { + file = "\life_server\Functions\Gangs"; + class insertGang {}; + class queryPlayerGang {}; + class removeGang {}; + class updateGang {}; + }; + + class Actions { + file = "\life_server\Functions\Actions"; + class pickupAction {}; + }; + + class PlayTime { + file = "\life_server\Functions\PlayTime"; + class setPlayTime {}; + class getPlayTime {}; + }; + }; +}; + +class CfgVehicles { + class Car_F; + class CAManBase; + class Civilian; + class Civilian_F : Civilian { + class EventHandlers; + }; + + class C_man_1 : Civilian_F { + class EventHandlers: EventHandlers { + init = "(_this select 0) execVM ""\life_server\fix_headgear.sqf"""; + }; + }; +}; diff --git a/life_server/init.sqf b/life_server/init.sqf index 62150dc7e..f8e2002ca 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -142,7 +142,6 @@ fed_bank setVariable ["safe",count playableUnits,true]; /* Event handler for disconnecting players */ addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; -[] call compile preprocessFileLineNumbers "\life_server\functions.sqf"; /* Event handler for logs */ "money_log" addPublicVariableEventHandler {diag_log (_this select 1)}; @@ -172,10 +171,10 @@ publicVariable "TON_fnc_playtime_values_request"; /* Setup the federal reserve building(s) */ -private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call TON_fnc_terrainSort; +private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call life_util_fnc_terrainSort; private _altisArray = [16019.5,16952.9,0]; private _tanoaArray = [11074.2,11501.5,0.00137329]; -private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; +private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; _dome = nearestObject [_pos,"Land_Dome_Big_F"]; _rsb = nearestObject [_pos,_vaultHouse]; From 7a3b13ef478df9a638b95781eb020ac20bcb4d5a Mon Sep 17 00:00:00 2001 From: Dom Date: Tue, 14 Apr 2020 12:14:58 +0100 Subject: [PATCH 24/40] Move to utils folder --- Altis_Life.Altis/Functions.hpp | 783 +++++++++--------- .../core/{ => utils}/fn_sideToString.sqf | 0 2 files changed, 392 insertions(+), 391 deletions(-) rename Altis_Life.Altis/core/{ => utils}/fn_sideToString.sqf (100%) diff --git a/Altis_Life.Altis/Functions.hpp b/Altis_Life.Altis/Functions.hpp index 10719cec0..d56e2e1cc 100644 --- a/Altis_Life.Altis/Functions.hpp +++ b/Altis_Life.Altis/Functions.hpp @@ -1,391 +1,392 @@ -class Socket_Reciever { - tag = "SOCK"; - class SQL_Socket { - file = "core\session"; - class dataQuery {}; - class insertPlayerInfo {}; - class requestReceived {}; - class syncData {}; - class updatePartial {}; - class updateRequest {}; - }; -}; - -class SpyGlass { - tag = "SPY"; - class Functions { - file = "SpyGlass"; - class cookieJar{}; - class notifyAdmins{}; - class observe{}; - }; -}; - -class Life_Client_Utilities { - tag = "life_util"; - - class Main { - file = "core\utils"; - class isNumber {}; - class index {}; - class playerQuery {}; - class terrainSort {}; - }; -}; - -class Life_Client_Core { - tag = "life"; - - class Master_Directory { - file = "core"; - class initCiv {}; - class initCop {}; - class initMedic {}; - class setupActions {}; - class setupEVH {}; - class survival {}; - class welcomeNotification {}; - }; - - class Actions { - file = "core\actions"; - class arrestAction {}; - class buyLicense {}; - class captureHideout {}; - class catchFish {}; - class dpFinish {}; - class dropFishingNet {}; - class escortAction {}; - class gather {}; - class getDPMission {}; - class gutAnimal {}; - class healHospital {}; - class impoundAction {}; - class mine {}; - class newsBroadcast {}; - class packupSpikes {}; - class pickupItem {}; - class pickupMoney {}; - class postBail {}; - class processAction {}; - class pulloutAction {}; - class putInCar {}; - class removeContainer {}; - class repairTruck {}; - class restrainAction {}; - class robAction {}; - class searchAction {}; - class searchVehAction {}; - class seizePlayerAction {}; - class serviceChopper {}; - class stopEscorting {}; - class storeVehicle {}; - class surrender {}; - class ticketAction {}; - class unrestrain {}; - }; - - class Admin { - file = "core\admin"; - class adminCompensate {}; - class adminDebugCon {}; - class adminFreeze {}; - class admingetID {}; - class adminGodMode {}; - class adminid {}; - class admininfo {}; - class adminMarkers {}; - class adminMenu {}; - class adminQuery {}; - class adminSpectate {}; - class adminTeleport {}; - class adminTpHere {}; - }; - - class Civilian { - file = "core\civilian"; - class civMarkers {}; - class demoChargeTimer {}; - class freezePlayer {}; - class jail {}; - class jailMe {}; - class knockedOut {}; - class knockoutAction {}; - class removeLicenses {}; - class robPerson {}; - class robReceive {}; - class tazed {}; - }; - - class Config { - file = "core\config"; - class houseConfig {}; - class itemWeight {}; - class vehicleWeightCfg {}; - }; - - class Cop { - file = "core\cop"; - class bountyReceive {}; - class containerInvSearch {}; - class copInteractionMenu {}; - class copLights {}; - class copMarkers {}; - class copSearch {}; - class copSiren {}; - class doorAnimate {}; - class fedCamDisplay {}; - class licenseCheck {}; - class licensesRead {}; - class questionDealer {}; - class radar {}; - class repairDoor {}; - class restrain {}; - class searchClient {}; - class seizeClient {}; - class sirenLights {}; - class spikeStripEffect {}; - class ticketGive {}; - class ticketPaid {}; - class ticketPay {}; - class ticketPrompt {}; - class vehInvSearch {}; - class wantedGrab {}; - }; - - class Dialog_Controls { - file = "dialog\function"; - class bankDeposit {}; - class bankTransfer {}; - class bankWithdraw {}; - class displayHandler {}; - class gangBankResponse {}; - class garageLBChange {}; - class impoundMenu {}; - class progressBar {}; - class safeFix {}; - class safeInventory {}; - class safeOpen {}; - class safeTake {}; - class sellGarage {}; - class setMapPosition {}; - class spawnConfirm {}; - class spawnMenu {}; - class spawnPointCfg {}; - class spawnPointSelected {}; - class unimpound {}; - class useGangBank {}; - class vehicleGarage {}; - class wireTransfer {}; - }; - - class Functions { - file = "core\functions"; - class AAN {}; - class accType {}; - class actionKeyHandler {}; - class animSync {}; - class calWeightDiff {}; - class checkMap {}; - class clearVehicleAmmo {}; - class dropItems {}; - class onGameInterrupt {}; - class fetchCfgDetails {}; - class fetchDeadGear {}; - class fetchVehInfo {}; - class isDamaged {}; - class getInMan {}; - class getOutMan {}; - class giveDiff {}; - class handleDamage {}; - class handleInv {}; - class handleItem {}; - class hideObj {}; - class hudUpdate {}; - class inventoryClosed {}; - class inventoryOpened {}; - class isUIDActive {}; - class keyHandler {}; - class loadDeadGear {}; - class loadGear {}; - class nearATM {}; - class nearestDoor {}; - class nearUnits {}; - class numberText {}; - class onFired {}; - class onTakeItem {}; - class playerSkins {}; - class playerTags {}; - class postNewsBroadcast {}; - class pullOutVeh {}; - class pushObject {}; - class receiveItem {}; - class receiveMoney {}; - class revealObjects {}; - class saveGear {}; - class simDisable {}; - class startLoadout {}; - class stripDownPlayer {}; - class teleport {}; - class whereAmI {}; - class moveIn {}; - }; - - class Gangs { - file = "core\gangs"; - class clientGangKick {}; - class clientGangLeader {}; - class clientGangLeft {}; - class createGang {}; - class gangCreated {}; - class gangDisband {}; - class gangDisbanded {}; - class gangInvite {}; - class gangInvitePlayer {}; - class gangKick {}; - class gangLeave {}; - class gangMenu {}; - class gangNewLeader {}; - class gangUpgrade {}; - class initGang {}; - }; - - class Housing { - file = "core\housing"; - class buyHouse {}; - class buyHouseGarage {}; - class containerMenu {}; - class copBreakDoor {}; - class copHouseOwner {}; - class garageRefund {}; - class getBuildingPositions {}; - class houseMenu {}; - class initHouses {}; - class lightHouse {}; - class lightHouseAction {}; - class lockHouse {}; - class lockupHouse {}; - class placeContainer {}; - class PlayerInBuilding {}; - class raidHouse {}; - class sellHouse {}; - class sellHouseGarage {}; - }; - - class Items { - file = "core\items"; - class blastingCharge {}; - class boltcutter {}; - class defuseKit {}; - class flashbang {}; - class jerrycanRefuel {}; - class jerryRefuel {}; - class lockpick {}; - class placestorage {}; - class spikeStrip {}; - class storageBox {}; - }; - - class Medical_System { - file = "core\medical"; - class deathScreen {}; - class medicLights {}; - class medicMarkers {}; - class medicRequest {}; - class medicSiren {}; - class medicSirenLights {}; - class onPlayerKilled {}; - class onPlayerRespawn {}; - class requestMedic {}; - class respawned {}; - class revived {}; - class revivePlayer {}; - }; - - class Network { - file = "core\functions\network"; - class broadcast {}; - class corpse {}; - class jumpFnc {}; - class say3D {}; - class setFuel {}; - class soundDevice {}; - }; - - class Player_Menu { - file = "core\pmenu"; - class cellphone {}; - class clientMessage {}; - class giveItem {}; - class giveMoney {}; - class keyDrop {}; - class keyGive {}; - class keyMenu {}; - class p_openMenu {}; - class p_updateMenu {}; - class pardon {}; - class removeItem {}; - class sendMessage {}; - class s_onChar {}; - class s_onCheckedChange {}; - class s_onSliderChange {}; - class settingsMenu {}; - class updateViewDistance {}; - class useItem {}; - class wantedAddP {}; - class wantedInfo {}; - class wantedList {}; - class wantedMenu {}; - }; - - class Shops { - file = "core\shops"; - class 3dPreviewDisplay {}; - class 3dPreviewExit {}; - class 3dPreviewInit {}; - class atmMenu {}; - class buyClothes {}; - class changeClothes {}; - class chopShopMenu {}; - class chopShopSelection {}; - class chopShopSell {}; - class chopShopSold {}; - class clothingFilter {}; - class clothingMenu {}; - class fuelLBchange {}; - class fuelStatOpen {}; - class levelCheck {}; - class vehicleShopBuy {}; - class vehicleShopLBChange {}; - class vehicleShopMenu {}; - class virt_buy {}; - class virt_menu {}; - class virt_sell {}; - class virt_update {}; - class weaponShopAccs {}; - class weaponShopBuySell {}; - class weaponShopFilter {}; - class weaponShopMags {}; - class weaponShopMenu {}; - class weaponShopSelection {}; - }; - - class Vehicle { - file = "core\vehicle"; - class addVehicle2Chain {}; - class clientGetKey {}; - class colorVehicle {}; - class deviceMine {}; - class FuelRefuelcar {}; - class fuelStore {}; - class fuelSupply {}; - class lockVehicle {}; - class openInventory {}; - class vehiclecolor3DRefresh {}; - class vehicleWeight {}; - class vehInventory {}; - class vehStoreItem {}; - class vehTakeItem {}; - class vInteractionMenu {}; - }; -}; +class Socket_Reciever { + tag = "SOCK"; + class SQL_Socket { + file = "core\session"; + class dataQuery {}; + class insertPlayerInfo {}; + class requestReceived {}; + class syncData {}; + class updatePartial {}; + class updateRequest {}; + }; +}; + +class SpyGlass { + tag = "SPY"; + class Functions { + file = "SpyGlass"; + class cookieJar{}; + class notifyAdmins{}; + class observe{}; + }; +}; + +class Life_Client_Utilities { + tag = "life_util"; + + class Main { + file = "core\utils"; + class isNumber {}; + class index {}; + class playerQuery {}; + class sideToString {}; + class terrainSort {}; + }; +}; + +class Life_Client_Core { + tag = "life"; + + class Master_Directory { + file = "core"; + class initCiv {}; + class initCop {}; + class initMedic {}; + class setupActions {}; + class setupEVH {}; + class survival {}; + class welcomeNotification {}; + }; + + class Actions { + file = "core\actions"; + class arrestAction {}; + class buyLicense {}; + class captureHideout {}; + class catchFish {}; + class dpFinish {}; + class dropFishingNet {}; + class escortAction {}; + class gather {}; + class getDPMission {}; + class gutAnimal {}; + class healHospital {}; + class impoundAction {}; + class mine {}; + class newsBroadcast {}; + class packupSpikes {}; + class pickupItem {}; + class pickupMoney {}; + class postBail {}; + class processAction {}; + class pulloutAction {}; + class putInCar {}; + class removeContainer {}; + class repairTruck {}; + class restrainAction {}; + class robAction {}; + class searchAction {}; + class searchVehAction {}; + class seizePlayerAction {}; + class serviceChopper {}; + class stopEscorting {}; + class storeVehicle {}; + class surrender {}; + class ticketAction {}; + class unrestrain {}; + }; + + class Admin { + file = "core\admin"; + class adminCompensate {}; + class adminDebugCon {}; + class adminFreeze {}; + class admingetID {}; + class adminGodMode {}; + class adminid {}; + class admininfo {}; + class adminMarkers {}; + class adminMenu {}; + class adminQuery {}; + class adminSpectate {}; + class adminTeleport {}; + class adminTpHere {}; + }; + + class Civilian { + file = "core\civilian"; + class civMarkers {}; + class demoChargeTimer {}; + class freezePlayer {}; + class jail {}; + class jailMe {}; + class knockedOut {}; + class knockoutAction {}; + class removeLicenses {}; + class robPerson {}; + class robReceive {}; + class tazed {}; + }; + + class Config { + file = "core\config"; + class houseConfig {}; + class itemWeight {}; + class vehicleWeightCfg {}; + }; + + class Cop { + file = "core\cop"; + class bountyReceive {}; + class containerInvSearch {}; + class copInteractionMenu {}; + class copLights {}; + class copMarkers {}; + class copSearch {}; + class copSiren {}; + class doorAnimate {}; + class fedCamDisplay {}; + class licenseCheck {}; + class licensesRead {}; + class questionDealer {}; + class radar {}; + class repairDoor {}; + class restrain {}; + class searchClient {}; + class seizeClient {}; + class sirenLights {}; + class spikeStripEffect {}; + class ticketGive {}; + class ticketPaid {}; + class ticketPay {}; + class ticketPrompt {}; + class vehInvSearch {}; + class wantedGrab {}; + }; + + class Dialog_Controls { + file = "dialog\function"; + class bankDeposit {}; + class bankTransfer {}; + class bankWithdraw {}; + class displayHandler {}; + class gangBankResponse {}; + class garageLBChange {}; + class impoundMenu {}; + class progressBar {}; + class safeFix {}; + class safeInventory {}; + class safeOpen {}; + class safeTake {}; + class sellGarage {}; + class setMapPosition {}; + class spawnConfirm {}; + class spawnMenu {}; + class spawnPointCfg {}; + class spawnPointSelected {}; + class unimpound {}; + class useGangBank {}; + class vehicleGarage {}; + class wireTransfer {}; + }; + + class Functions { + file = "core\functions"; + class AAN {}; + class accType {}; + class actionKeyHandler {}; + class animSync {}; + class calWeightDiff {}; + class checkMap {}; + class clearVehicleAmmo {}; + class dropItems {}; + class onGameInterrupt {}; + class fetchCfgDetails {}; + class fetchDeadGear {}; + class fetchVehInfo {}; + class isDamaged {}; + class getInMan {}; + class getOutMan {}; + class giveDiff {}; + class handleDamage {}; + class handleInv {}; + class handleItem {}; + class hideObj {}; + class hudUpdate {}; + class inventoryClosed {}; + class inventoryOpened {}; + class isUIDActive {}; + class keyHandler {}; + class loadDeadGear {}; + class loadGear {}; + class nearATM {}; + class nearestDoor {}; + class nearUnits {}; + class numberText {}; + class onFired {}; + class onTakeItem {}; + class playerSkins {}; + class playerTags {}; + class postNewsBroadcast {}; + class pullOutVeh {}; + class pushObject {}; + class receiveItem {}; + class receiveMoney {}; + class revealObjects {}; + class saveGear {}; + class simDisable {}; + class startLoadout {}; + class stripDownPlayer {}; + class teleport {}; + class whereAmI {}; + class moveIn {}; + }; + + class Gangs { + file = "core\gangs"; + class clientGangKick {}; + class clientGangLeader {}; + class clientGangLeft {}; + class createGang {}; + class gangCreated {}; + class gangDisband {}; + class gangDisbanded {}; + class gangInvite {}; + class gangInvitePlayer {}; + class gangKick {}; + class gangLeave {}; + class gangMenu {}; + class gangNewLeader {}; + class gangUpgrade {}; + class initGang {}; + }; + + class Housing { + file = "core\housing"; + class buyHouse {}; + class buyHouseGarage {}; + class containerMenu {}; + class copBreakDoor {}; + class copHouseOwner {}; + class garageRefund {}; + class getBuildingPositions {}; + class houseMenu {}; + class initHouses {}; + class lightHouse {}; + class lightHouseAction {}; + class lockHouse {}; + class lockupHouse {}; + class placeContainer {}; + class PlayerInBuilding {}; + class raidHouse {}; + class sellHouse {}; + class sellHouseGarage {}; + }; + + class Items { + file = "core\items"; + class blastingCharge {}; + class boltcutter {}; + class defuseKit {}; + class flashbang {}; + class jerrycanRefuel {}; + class jerryRefuel {}; + class lockpick {}; + class placestorage {}; + class spikeStrip {}; + class storageBox {}; + }; + + class Medical_System { + file = "core\medical"; + class deathScreen {}; + class medicLights {}; + class medicMarkers {}; + class medicRequest {}; + class medicSiren {}; + class medicSirenLights {}; + class onPlayerKilled {}; + class onPlayerRespawn {}; + class requestMedic {}; + class respawned {}; + class revived {}; + class revivePlayer {}; + }; + + class Network { + file = "core\functions\network"; + class broadcast {}; + class corpse {}; + class jumpFnc {}; + class say3D {}; + class setFuel {}; + class soundDevice {}; + }; + + class Player_Menu { + file = "core\pmenu"; + class cellphone {}; + class clientMessage {}; + class giveItem {}; + class giveMoney {}; + class keyDrop {}; + class keyGive {}; + class keyMenu {}; + class p_openMenu {}; + class p_updateMenu {}; + class pardon {}; + class removeItem {}; + class sendMessage {}; + class s_onChar {}; + class s_onCheckedChange {}; + class s_onSliderChange {}; + class settingsMenu {}; + class updateViewDistance {}; + class useItem {}; + class wantedAddP {}; + class wantedInfo {}; + class wantedList {}; + class wantedMenu {}; + }; + + class Shops { + file = "core\shops"; + class 3dPreviewDisplay {}; + class 3dPreviewExit {}; + class 3dPreviewInit {}; + class atmMenu {}; + class buyClothes {}; + class changeClothes {}; + class chopShopMenu {}; + class chopShopSelection {}; + class chopShopSell {}; + class chopShopSold {}; + class clothingFilter {}; + class clothingMenu {}; + class fuelLBchange {}; + class fuelStatOpen {}; + class levelCheck {}; + class vehicleShopBuy {}; + class vehicleShopLBChange {}; + class vehicleShopMenu {}; + class virt_buy {}; + class virt_menu {}; + class virt_sell {}; + class virt_update {}; + class weaponShopAccs {}; + class weaponShopBuySell {}; + class weaponShopFilter {}; + class weaponShopMags {}; + class weaponShopMenu {}; + class weaponShopSelection {}; + }; + + class Vehicle { + file = "core\vehicle"; + class addVehicle2Chain {}; + class clientGetKey {}; + class colorVehicle {}; + class deviceMine {}; + class FuelRefuelcar {}; + class fuelStore {}; + class fuelSupply {}; + class lockVehicle {}; + class openInventory {}; + class vehiclecolor3DRefresh {}; + class vehicleWeight {}; + class vehInventory {}; + class vehStoreItem {}; + class vehTakeItem {}; + class vInteractionMenu {}; + }; +}; diff --git a/Altis_Life.Altis/core/fn_sideToString.sqf b/Altis_Life.Altis/core/utils/fn_sideToString.sqf similarity index 100% rename from Altis_Life.Altis/core/fn_sideToString.sqf rename to Altis_Life.Altis/core/utils/fn_sideToString.sqf From 259329df6c2a8b7a7cbd743483c6a2933d5c19cf Mon Sep 17 00:00:00 2001 From: Dom Date: Thu, 16 Apr 2020 17:24:16 +0100 Subject: [PATCH 25/40] Missing space --- AL.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AL.ini b/AL.ini index 67ddc8e43..31b98446a 100755 --- a/AL.ini +++ b/AL.ini @@ -258,7 +258,7 @@ OUTPUT = 1, 2-STRING, 3-STRING, 4-STRING [selectVehiclesMore] SQL1_1 = SELECT classname, plate, color, inventory, gear, fuel, damage, blacklist, active, alive FROM vehicles WHERE id = ? AND pid = ? SQL1_INPUTS = 1, 2 -OUTPUT = 1-STRING, 2-STRING, 3-STRING, 4, 5, 6, 7, 8, 9,10 +OUTPUT = 1-STRING, 2-STRING, 3-STRING, 4, 5, 6, 7, 8, 9, 10 [updateVehicle] SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND id = ? From fa9faab3b79a2c791d6c47e83a099dcb5dee5996 Mon Sep 17 00:00:00 2001 From: Dom Date: Wed, 22 Apr 2020 10:09:10 +0100 Subject: [PATCH 26/40] Resolve conflicts --- .../core/actions/fn_impoundAction.sqf | 49 +++++----- .../core/actions/fn_storeVehicle.sqf | 88 +++++++++--------- Altis_Life.Altis/core/admin/fn_adminMenu.sqf | 90 ++++++++++--------- .../core/config/fn_vehicleWeightCfg.sqf | 40 ++++----- 4 files changed, 142 insertions(+), 125 deletions(-) diff --git a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf index 8c948fb10..3bc901d3c 100644 --- a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf @@ -6,30 +6,36 @@ Description: Impounds the vehicle */ -private ["_vehicle","_type","_time","_value","_vehicleData","_upp","_ui","_progress","_pgText","_cP","_filters","_impoundValue","_price","_impoundMultiplier"]; -_vehicle = param [0,objNull,[objNull]]; -_filters = ["Car","Air","Ship"]; -if (!((KINDOF_ARRAY(_vehicle,_filters)))) exitWith {}; + +params [ + ["_vehicle", objNull, [objNull]] +]; + +private _filters = ["Car","Air","Ship"]; + +if !(KINDOF_ARRAY(_vehicle,_filters)) exitWith {}; if (player distance cursorObject > 10) exitWith {}; if (_vehicle getVariable "NPC") exitWith {hint localize "STR_NPC_Protected"}; -_vehicleData = _vehicle getVariable ["vehicle_info_owners",[]]; -if (_vehicleData isEqualTo 0) exitWith {deleteVehicle _vehicle}; //Bad vehicle. -_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); -_price = M_CONFIG(getNumber,"LifeCfgVehicles",(typeOf _vehicle),"price"); +private _vehicleData = _vehicle getVariable ["vehicle_info_owners",[]]; +if (_vehicleData isEqualTo []) exitWith {deleteVehicle _vehicle}; //Bad vehicle. + +private _vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",(typeOf _vehicle),"price"); + [0,"STR_NOTF_BeingImpounded",true,[((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; life_action_inUse = true; -_upp = localize "STR_NOTF_Impounding"; +private _upp = localize "STR_NOTF_Impounding"; //Setup our progress bar. disableSerialization; "progressBar" cutRsc ["life_progress","PLAIN"]; -_ui = uiNamespace getVariable "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; +private _ui = uiNamespace getVariable "life_progress"; +private _progress = _ui displayCtrl 38201; +private _pgText = _ui displayCtrl 38202; _pgText ctrlSetText format ["%2 (1%1)...","%",_upp]; -_progress progressSetPosition 0.01; -_cP = 0.01; +private _progress progressSetPosition 0.01; +private _cP = 0.01; for "_i" from 0 to 1 step 0 do { uiSleep 0.09; @@ -43,12 +49,15 @@ for "_i" from 0 to 1 step 0 do { "progressBar" cutText ["","PLAIN"]; -if (player distance _vehicle > 10) exitWith {hint localize "STR_NOTF_ImpoundingCancelled"; life_action_inUse = false;}; +if (player distance _vehicle > 10) exitWith { + hint localize "STR_NOTF_ImpoundingCancelled"; + life_action_inUse = false; +}; + if (!alive player) exitWith {life_action_inUse = false;}; -if (count crew _vehicle isEqualTo 0) then { - if (!(KINDOF_ARRAY(_vehicle,_filters))) exitWith {life_action_inUse = false;}; - _type = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); +if (crew _vehicle isEqualTo []) then { + private _type = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); if (life_HC_isActive) then { [_vehicle,true,player] remoteExec ["HC_fnc_vehicleStore",HC_Life]; @@ -58,8 +67,8 @@ if (count crew _vehicle isEqualTo 0) then { waitUntil {isNull _vehicle}; if (playerSide isEqualTo west) then { - _impoundMultiplier = LIFE_SETTINGS(getNumber,"vehicle_cop_impound_multiplier"); - _value = _price * _impoundMultiplier; + private _impoundMultiplier = LIFE_SETTINGS(getNumber,"vehicle_cop_impound_multiplier"); + private _value = _price * _impoundMultiplier; [0,"STR_NOTF_HasImpounded",true,[profileName,((_vehicleData select 0) select 1),_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; if (_vehicle in life_vehicles) then { hint format [localize "STR_NOTF_OwnImpounded",[_value] call life_fnc_numberText,_type]; diff --git a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf index af62e212e..39962a546 100644 --- a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf +++ b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf @@ -1,42 +1,46 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_storeVehicle.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Stores the vehicle in the garage. -*/ -params [ - ["_garage",objNull,[objNull]], - ["_unit",objNull,[objNull]] -]; - -private _vehicle = objNull; -if !(isNull objectParent player) then { - _vehicle = vehicle player; -} else { - private _nearVehicles = nearestObjects[getPos _garage,["Car","Air","Ship"],30]; //Fetch vehicles within 30m. - if !(_nearVehicles isEqualTo []) then { - { - private _vehData = _x getVariable ["vehicle_info_owners",[]]; - if !(_vehData isEqualTo []) then { - (_vehData select 0) params ["_ownerUID"]; - if ((getPlayerUID player) isEqualTo _ownerUID) exitWith { - _vehicle = _x; - }; - }; - } forEach _nearVehicles; - }; -}; - -if (isNull _vehicle) exitWith {hint localize "STR_Garage_NoNPC"}; -if (!alive _vehicle) exitWith {hint localize "STR_Garage_SQLError_Destroyed"}; - -if (life_HC_isActive) then { - [_vehicle,false,_unit] remoteExecCall ["HC_fnc_vehicleStore",HC_Life]; -} else { - [_vehicle,false,_unit] remoteExecCall ["TON_fnc_vehicleStore",RSERV]; -}; - -hint localize "STR_Garage_Store_Server"; -life_garage_store = true; +#include "..\..\script_macros.hpp" +/* + File: fn_storeVehicle.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Stores the vehicle in the garage. +*/ +params [ + ["_garage",objNull,[objNull]], + ["_unit",objNull,[objNull]] +]; + +private _vehicle = objNull; +if !(isNull objectParent player) then { + _vehicle = vehicle player; +} else { + private _nearVehicles = nearestObjects[getPos _garage,["Car","Air","Ship"],30]; //Fetch vehicles within 30m. + if !(_nearVehicles isEqualTo []) then { + { + private _vehData = _x getVariable ["vehicle_info_owners",[]]; + if !(_vehData isEqualTo []) then { + (_vehData select 0) params ["_ownerUID"]; + if ((getPlayerUID player) isEqualTo _ownerUID) exitWith { + _vehicle = _x; + }; + }; + } forEach _nearVehicles; + }; +}; + +if (isNull _vehicle) exitWith { + hint localize "STR_Garage_NoNPC" +}; +if !(alive _vehicle) exitWith { + hint localize "STR_Garage_SQLError_Destroyed" +}; + +if (life_HC_isActive) then { + [_vehicle,false,_unit] remoteExecCall ["HC_fnc_vehicleStore",HC_Life]; +} else { + [_vehicle,false,_unit] remoteExecCall ["TON_fnc_vehicleStore",RSERV]; +}; + +hint localize "STR_Garage_Store_Server"; +life_garage_store = true; diff --git a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf index 6fe81ecf6..9ced143f9 100644 --- a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf @@ -1,43 +1,47 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Opens the admin menu and hides buttons based on life_adminlevel. -*/ -private ["_display","_list","_side","_godmode","_markers"]; -if (FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; - -disableSerialization; - -waitUntil {!isNull (findDisplay 2900)}; -_list = CONTROL(2900,2902); -if (FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; - -switch (FETCH_CONST(life_adminlevel)) do -{ - case 1: {ctrlShow [2904,false];ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; - case 2: {ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; - case 3: {ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; - case 4: {ctrlShow [2911,false];}; -}; - -//Purge List -lbClear _list; - -{ - private _side = [_x] call life_util_fnc_sideToString; - _list lbAdd format ["%1 - %2", _x getVariable ["realname",name _x],_side]; - _list lbSetdata [(lbSize _list)-1,str(_x)]; -} forEach playableUnits; -if (FETCH_CONST(life_adminlevel) < 1) exitWith {closeDialog 0;}; - -if (life_god) then { - _godmode = CONTROL(2900,2908); - _godmode ctrlSetTextColor [0, 255, 0, 1]; // green -}; -if (life_markers) then { - _markers = CONTROL(2900,2910); - _markers ctrlSetTextColor [0, 255, 0, 1]; // green -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_adminMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Opens the admin menu and hides buttons based on life_adminlevel. +*/ + +if (FETCH_CONST(life_adminlevel) < 1) exitWith { + closeDialog 0; +}; + +disableSerialization; + +waitUntil {!isNull (findDisplay 2900)}; +private _list = CONTROL(2900,2902); + + +switch (FETCH_CONST(life_adminlevel)) do +{ + case 1: {ctrlShow [2904,false];ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; + case 2: {ctrlShow [2905,false];ctrlShow [2906,false];ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; + case 3: {ctrlShow [2907,false];ctrlShow [2908,false];ctrlShow [2909,false];ctrlShow [2910,false];ctrlShow [2911,false];}; + case 4: {ctrlShow [2911,false];}; +}; + +//Purge List +lbClear _list; + +{ + private _side = [_x] call life_util_fnc_sideToString; + _list lbAdd format ["%1 - %2", _x getVariable ["realname",name _x], _side]; + _list lbSetdata [(lbSize _list)-1, str _x]; + + true +} count playableUnits; + + +if (life_god) then { + private _godmode = CONTROL(2900,2908); + _godmode ctrlSetTextColor [0, 255, 0, 1]; // green +}; +if (life_markers) then { + private _markers = CONTROL(2900,2910); + _markers ctrlSetTextColor [0, 255, 0, 1]; // green +}; diff --git a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf index 505806475..992d3bde0 100644 --- a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf +++ b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf @@ -1,20 +1,20 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleWeightCfg.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master configuration for vehicle weight. -*/ -params [ - ["_className","",[""]] -]; - -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; - _className = "Default"; //Use Default class if it doesn't exist -}; - -private _weight = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"vItemSpace"); - -_weight; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_vehicleWeightCfg.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master configuration for vehicle weight. +*/ +params [ + ["_className","",[""]] +]; + +if !(isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist +}; + +private _weight = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"vItemSpace"); + +_weight; From 8347060e258ed327643e8def1b464bbbe2f41306 Mon Sep 17 00:00:00 2001 From: Dom Date: Wed, 22 Apr 2020 10:30:55 +0100 Subject: [PATCH 27/40] Further fixes --- .../core/actions/fn_impoundAction.sqf | 4 +- .../core/shops/fn_vehicleShopLBChange.sqf | 2 +- .../core/vehicle/fn_vehicleWeight.sqf | 32 +- .../dialog/function/fn_garageLBChange.sqf | 154 +++---- .../dialog/function/fn_sellGarage.sqf | 158 +++---- .../dialog/function/fn_unimpound.sqf | 104 ++--- life_server/init.sqf | 394 +++++++++--------- 7 files changed, 419 insertions(+), 429 deletions(-) diff --git a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf index 3bc901d3c..f3688fa35 100644 --- a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf @@ -34,7 +34,7 @@ private _ui = uiNamespace getVariable "life_progress"; private _progress = _ui displayCtrl 38201; private _pgText = _ui displayCtrl 38202; _pgText ctrlSetText format ["%2 (1%1)...","%",_upp]; -private _progress progressSetPosition 0.01; +_progress progressSetPosition 0.01; private _cP = 0.01; for "_i" from 0 to 1 step 0 do { @@ -54,7 +54,7 @@ if (player distance _vehicle > 10) exitWith { life_action_inUse = false; }; -if (!alive player) exitWith {life_action_inUse = false;}; +if !(alive player) exitWith {life_action_inUse = false}; if (crew _vehicle isEqualTo []) then { private _type = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName"); diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf index 545b9047d..53d622ad3 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf @@ -70,7 +70,7 @@ ctrlShow [2330,true]; private _ctrl = CONTROL(2300,2304); lbClear _ctrl; -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { +if !(isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; _className = "Default"; //Use Default class if it doesn't exist }; diff --git a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf index baa026f51..31a09cbb1 100644 --- a/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_vehicleWeight.sqf @@ -1,16 +1,16 @@ -/* - File: fn_vehicleWeight.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Calculates Vehicle Weight. -*/ -params [ - ["_vehicle",objNull,[objNull]] -]; -if (isNull _vehicle) exitWith {}; - -private _used = (_vehicle getVariable ["Trunk",[[],0]]) select 1; -private _weight = [(typeOf _vehicle)] call life_fnc_vehicleWeightCfg; - -[_weight,_used]; +/* + File: fn_vehicleWeight.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Calculates Vehicle Weight. +*/ +params [ + ["_vehicle",objNull,[objNull]] +]; +if (isNull _vehicle) exitWith {}; + +private _used = (_vehicle getVariable ["Trunk",[[],0]]) select 1; +private _weight = [typeOf _vehicle] call life_fnc_vehicleWeightCfg; + +[_weight,_used]; diff --git a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf index 2f3ad07fb..ffd4ecded 100644 --- a/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf +++ b/Altis_Life.Altis/dialog/function/fn_garageLBChange.sqf @@ -1,77 +1,77 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_garageLBChange.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Updates the information when garage selection is changed. -*/ -params [ - ["_control",controlNull,[controlNull]], - ["_index",0,[0]] -]; - -//Fetch some information. -private _dataArr = _control lbData _index; -(parseSimpleArray _dataArr) params ["","_className","_vehicleColor"]; - -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; - _className = "Default"; //Use Default class if it doesn't exist -}; - -private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; -_vehicleInfo params ["","","","","","","","","_maxSpeed","","_seats","_horsePower","_fuelCapacity"]; -private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; - -private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); -private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); - -private "_purchasePrice"; -private "_sellMultiplier"; -switch (playerSide) do { - case civilian: { - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); - _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); - }; - case west: { - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); - _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); - }; - case independent: { - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); - _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); - }; - case east: { - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); - _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); - }; -}; -_retrievePrice = _purchasePrice * _storageFee; -_sellPrice = _purchasePrice * _sellMultiplier; - -if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; -if (!(_retrievePrice isEqualType 0) || _retrievePrice < 1) then {_retrievePrice = 500;}; - -(CONTROL(2800,2803)) ctrlSetStructuredText parseText format [ - (localize "STR_Shop_Veh_UI_RetrievalP")+ " $%1
- " +(localize "STR_Shop_Veh_UI_SellP")+ " $%2
- " +(localize "STR_Shop_Veh_UI_Color")+ " %8
- " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
- " +(localize "STR_Shop_Veh_UI_HPower")+ " %4
- " +(localize "STR_Shop_Veh_UI_PSeats")+ " %5
- " +(localize "STR_Shop_Veh_UI_Trunk")+ " %6
- " +(localize "STR_Shop_Veh_UI_Fuel")+ " %7 - ", - [_retrievePrice] call life_fnc_numberText, - [_sellPrice] call life_fnc_numberText, - _maxSpeed, - _horsePower, - _seats, - if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, - _fuelCapacity, - _vehicleColor -]; - -ctrlShow [2803,true]; -ctrlShow [2830,true]; +#include "..\..\script_macros.hpp" +/* + File: fn_garageLBChange.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Updates the information when garage selection is changed. +*/ +params [ + ["_control",controlNull,[controlNull]], + ["_index",0,[0]] +]; + +//Fetch some information. +private _dataArr = _control lbData _index; +(parseSimpleArray _dataArr) params ["","_className","_vehicleColor"]; + +if !(isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist +}; + +private _vehicleInfo = [_className] call life_fnc_fetchVehInfo; +_vehicleInfo params ["","","","","","","","","_maxSpeed","","_seats","_horsePower","_fuelCapacity"]; +private _trunkSpace = [_className] call life_fnc_vehicleWeightCfg; + +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); +private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); + +private "_purchasePrice"; +private "_sellMultiplier"; +switch (playerSide) do { + case civilian: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); + }; + case west: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); + }; + case independent: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); + }; + case east: { + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + _sellMultiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); + }; +}; +_retrievePrice = _purchasePrice * _storageFee; +_sellPrice = _purchasePrice * _sellMultiplier; + +if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; +if (!(_retrievePrice isEqualType 0) || _retrievePrice < 1) then {_retrievePrice = 500;}; + +(CONTROL(2800,2803)) ctrlSetStructuredText parseText format [ + (localize "STR_Shop_Veh_UI_RetrievalP")+ " $%1
+ " +(localize "STR_Shop_Veh_UI_SellP")+ " $%2
+ " +(localize "STR_Shop_Veh_UI_Color")+ " %8
+ " +(localize "STR_Shop_Veh_UI_MaxSpeed")+ " %3 km/h
+ " +(localize "STR_Shop_Veh_UI_HPower")+ " %4
+ " +(localize "STR_Shop_Veh_UI_PSeats")+ " %5
+ " +(localize "STR_Shop_Veh_UI_Trunk")+ " %6
+ " +(localize "STR_Shop_Veh_UI_Fuel")+ " %7 + ", + [_retrievePrice] call life_fnc_numberText, + [_sellPrice] call life_fnc_numberText, + _maxSpeed, + _horsePower, + _seats, + if (_trunkSpace isEqualTo -1) then {"None"} else {_trunkSpace}, + _fuelCapacity, + _vehicleColor +]; + +ctrlShow [2803,true]; +ctrlShow [2830,true]; diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index f5585ef52..571574d50 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -1,79 +1,79 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_sellGarage.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Sells a vehicle from the garage. -*/ -private _control = CONTROL(2800,2802); -private _index = lbCurSel _control; -if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; - -private _dataArr = _control lbData _index; -(parseSimpleArray _dataArr) params ["_vid",["_className",""]]; -if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; - -if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; - _className = "Default"; //Use Default class if it doesn't exist -}; - -private "_multiplier"; -private "_purchasePrice"; -private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); -switch (playerSide) do { - case civilian: { - _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); - }; - case west: { - _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); - }; - case independent: { - _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); - }; - case east: { - _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); - _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); - }; -}; - -private _sellPrice = _purchasePrice * _multiplier; - -if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; - -closeDialog 0; -private _action = [ - format[localize "STR_Garage_SellWarn", getText(configFile >> "CfgVehicles" >> _vehicle >> "displayName"), [_sellPrice] call life_fnc_numberText], - localize "STR_Garage_SellWarnTitle", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if !(_action) exitWith {}; - -if (life_HC_isActive) then { - [player,_vid] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; -} else { - [player,_vid] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; -}; - -hint format [localize "STR_Garage_SoldCar",[_sellPrice] call life_fnc_numberText]; -BANK = BANK + _sellPrice; -[1] call SOCK_fnc_updatePartial; - -if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { - if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { - advanced_log = format [localize "STR_DL_AL_soldVehicle_BEF",_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - } else { - advanced_log = format [localize "STR_DL_AL_soldVehicle",profileName,(getPlayerUID player),_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - }; - publicVariableServer "advanced_log"; -}; - -life_action_delay = time; -closeDialog 0; +#include "..\..\script_macros.hpp" +/* + File: fn_sellGarage.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Sells a vehicle from the garage. +*/ +private _control = CONTROL(2800,2802); +private _index = lbCurSel _control; +if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; + +private _dataArr = _control lbData _index; +(parseSimpleArray _dataArr) params ["_vid",["_className",""]]; +if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; + +if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay";}; +if !(isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist +}; + +private "_multiplier"; +private "_purchasePrice"; +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +switch (playerSide) do { + case civilian: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN"); + }; + case west: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_COP"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP"); + }; + case independent: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_MEDIC"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC"); + }; + case east: { + _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_OPFOR"); + _purchasePrice = _price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR"); + }; +}; + +private _sellPrice = _purchasePrice * _multiplier; + +if (!(_sellPrice isEqualType 0) || _sellPrice < 1) then {_sellPrice = 500;}; + +closeDialog 0; +private _action = [ + format[localize "STR_Garage_SellWarn", getText(configFile >> "CfgVehicles" >> _vehicle >> "displayName"), [_sellPrice] call life_fnc_numberText], + localize "STR_Garage_SellWarnTitle", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +if !(_action) exitWith {}; + +if (life_HC_isActive) then { + [player,_vid] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; +} else { + [player,_vid] remoteExecCall ["TON_fnc_vehicleDelete",RSERV]; +}; + +hint format [localize "STR_Garage_SoldCar",[_sellPrice] call life_fnc_numberText]; +BANK = BANK + _sellPrice; +[1] call SOCK_fnc_updatePartial; + +if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + advanced_log = format [localize "STR_DL_AL_soldVehicle_BEF",_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + advanced_log = format [localize "STR_DL_AL_soldVehicle",profileName,(getPlayerUID player),_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "advanced_log"; +}; + +life_action_delay = time; +closeDialog 0; diff --git a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf index 11f438095..35b0e8fe8 100644 --- a/Altis_Life.Altis/dialog/function/fn_unimpound.sqf +++ b/Altis_Life.Altis/dialog/function/fn_unimpound.sqf @@ -1,52 +1,52 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_unimpound.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gets the vehicle from the garage. -*/ -private _control = CONTROL(2800,2802); -private _index = lbCurSel _control; -if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; - -private _dataArr = _control lbData _index; -(parseSimpleArray _dataArr) params ["_vid",["_className",""]]; -if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; - -if (!isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; - _className = "Default"; //Use Default class if it doesn't exist -}; - -private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); -private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); - -private _purchasePrice = switch (playerSide) do { - case civilian: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN")}; - case west: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP")}; - case independent: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC")}; - case east: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR")}; -}; -_price = _purchasePrice * _storageFee; - -if (!(_price isEqualType 0) || _price < 1) then {_price = 500;}; -if (BANK < _price) exitWith {hint format [(localize "STR_Garage_CashError"),[_price] call life_fnc_numberText];}; - -private _spawnPoint = life_garage_sp; -private _dir = 0; -if (_spawnPoint isEqualType []) then { - _spawnPoint = _spawnPoint select 0; - _dir = _spawnPoint select 1; -}; - -if (life_HC_isActive) then { - [player,_vid,_spawnPoint,_dir] remoteExecCall ["HC_fnc_spawnVehicle",HC_Life]; -} else { - [player,_vid,_spawnPoint,_dir] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; -}; - -hint localize "STR_Garage_SpawningVeh"; -BANK = BANK - _price; -[1] call SOCK_fnc_updatePartial; -closeDialog 0; +#include "..\..\script_macros.hpp" +/* + File: fn_unimpound.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gets the vehicle from the garage. +*/ +private _control = CONTROL(2800,2802); +private _index = lbCurSel _control; +if (_index isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection"}; + +private _dataArr = _control lbData _index; +(parseSimpleArray _dataArr) params ["_vid",["_className",""]]; +if (_className isEqualTo "") exitWith {hint localize "STR_Garage_Selection_Error"}; + +if !(isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { + diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; + _className = "Default"; //Use Default class if it doesn't exist +}; + +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); +private _storageFee = LIFE_SETTINGS(getNumber,"vehicle_storage_fee_multiplier"); + +private _purchasePrice = switch (playerSide) do { + case civilian: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_CIVILIAN")}; + case west: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_COP")}; + case independent: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_MEDIC")}; + case east: {_price * LIFE_SETTINGS(getNumber,"vehicle_purchase_multiplier_OPFOR")}; +}; +_price = _purchasePrice * _storageFee; + +if (!(_price isEqualType 0) || _price < 1) then {_price = 500;}; +if (BANK < _price) exitWith {hint format [(localize "STR_Garage_CashError"),[_price] call life_fnc_numberText];}; + +private _spawnPoint = life_garage_sp; +private _dir = 0; +if (_spawnPoint isEqualType []) then { + _spawnPoint = _spawnPoint select 0; + _dir = _spawnPoint select 1; +}; + +if (life_HC_isActive) then { + [player,_vid,_spawnPoint,_dir] remoteExecCall ["HC_fnc_spawnVehicle",HC_Life]; +} else { + [player,_vid,_spawnPoint,_dir] remoteExecCall ["TON_fnc_spawnVehicle",RSERV]; +}; + +hint localize "STR_Garage_SpawningVeh"; +BANK = BANK - _price; +[1] call SOCK_fnc_updatePartial; +closeDialog 0; diff --git a/life_server/init.sqf b/life_server/init.sqf index bb7326a80..952342d8e 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -1,202 +1,192 @@ -#include "script_macros.hpp" -/* - File: init.sqf - Author: Bryan "Tonic" Boardwine - - Edit: Nanou for HeadlessClient optimization. - Please read support for more informations. - - Description: - Initialize the server and required systems. -*/ -private ["_dome","_rsb","_timeStamp","_extDBNotLoaded"]; -DB_Async_Active = false; -DB_Async_ExtraLock = false; -life_server_isReady = false; -_extDBNotLoaded = ""; -publicVariable "life_server_isReady"; -life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; - -/* - Prepare the headless client. -*/ -life_HC_isActive = false; -publicVariable "life_HC_isActive"; -HC_Life = false; -publicVariable "HC_Life"; - -if (EXTDB_SETTING(getNumber,"HeadlessSupport") isEqualTo 1) then { - [] execVM "\life_server\initHC.sqf"; -}; - -/* - Prepare extDB before starting the initialization process - for the server. -*/ - -if (isNil {uiNamespace getVariable "life_sql_id"}) then { - life_sql_id = round(random(9999)); - CONSTVAR(life_sql_id); - uiNamespace setVariable ["life_sql_id",life_sql_id]; - try { - _result = EXTDB format ["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; - if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; - _result = EXTDB format ["9:ADD_DATABASE_PROTOCOL:%2:SQL_CUSTOM:%1:AL.ini",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; - if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; - } catch { - diag_log _exception; - _extDBNotLoaded = [true, _exception]; - }; - if (_extDBNotLoaded isEqualType []) exitWith {}; - EXTDB "9:LOCK"; - diag_log "extDB3: Connected to Database"; -} else { - life_sql_id = uiNamespace getVariable "life_sql_id"; - CONSTVAR(life_sql_id); - diag_log "extDB3: Still Connected to Database"; -}; - - -if (_extDBNotLoaded isEqualType []) exitWith { - life_server_extDB_notLoaded = true; - publicVariable "life_server_extDB_notLoaded"; -}; -life_server_extDB_notLoaded = false; -publicVariable "life_server_extDB_notLoaded"; - -/* Run stored procedures for SQL side cleanup */ -["resetLifeVehicles", 1] call DB_fnc_asyncCall; -["deleteDeadVehicles", 1] call DB_fnc_asyncCall; -["deleteOldHouses", 1] call DB_fnc_asyncCall; -["deleteOldGangs", 1] call DB_fnc_asyncCall; - -_timeStamp = diag_tickTime; -diag_log "----------------------------------------------------------------------------------------------------"; -diag_log "---------------------------------- Starting Altis Life Server Init ---------------------------------"; -diag_log format["------------------------------------------ Version %1 -------------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; -diag_log "----------------------------------------------------------------------------------------------------"; - -if (LIFE_SETTINGS(getNumber,"save_civilian_position_restart") isEqualTo 1) then { - [] spawn { - ["updateCivAlive", 1] call DB_fnc_asyncCall; - [_query,1] call DB_fnc_asyncCall; - }; -}; - -/* Map-based server side initialization. */ -master_group attachTo[bank_obj,[0,0,0]]; - -{ - _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"]; - _hs setDir (markerDir _x); - _hs setPosATL (getMarkerPos _x); - _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"]; - _var attachTo [_hs, [4.69775,32.6045,-0.1125]]; - detach _var; - _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"]; - _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]]; - detach _var; - if (worldName isEqualTo "Tanoa") then { - if (_forEachIndex isEqualTo 0) then { - atm_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - vendor_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - "medic_spawn_3" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); - "med_car_2" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); - hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); - } else { - atm_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - vendor_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); - "medic_spawn_1" setMarkerPos (_var modelToWorld [-1.85181,-6.07715,-8.24944]); - "med_car_1" setMarkerPos (_var modelToWorld [5.9624,11.8799,-8.28493]); - hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); - }; - }; -} forEach ["hospital_2","hospital_3"]; - -{ - if (!isPlayer _x) then { - _npc = _x; - { - if (_x != "") then { - _npc removeWeapon _x; - }; - } forEach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc]; - }; -} forEach allUnits; - -[8,true,12] execFSM "\life_server\FSM\timeModule.fsm"; - -life_adminLevel = 0; -life_medicLevel = 0; -life_copLevel = 0; -CONST(JxMxE_PublishVehicle,"false"); - -/* Setup radio channels for west/independent/civilian */ -life_radio_west = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; -life_radio_civ = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; -life_radio_indep = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; - -/* Set the amount of gold in the federal reserve at mission start */ -fed_bank setVariable ["safe",count playableUnits,true]; -[] spawn TON_fnc_federalUpdate; - -/* Event handler for disconnecting players */ -addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; - -/* Event handler for logs */ -"money_log" addPublicVariableEventHandler {diag_log (_this select 1)}; -"advanced_log" addPublicVariableEventHandler {diag_log (_this select 1)}; - -/* Miscellaneous mission-required stuff */ -life_wanted_list = []; - -[] spawn { - for "_i" from 0 to 1 step 0 do { - uiSleep (30 * 60); - { - _x setVariable ["sellers",[],true]; - } forEach [Dealer_1,Dealer_2,Dealer_3]; - }; -}; - -[] spawn TON_fnc_initHouses; -cleanup = [] spawn TON_fnc_cleanup; - -TON_fnc_playtime_values = []; -TON_fnc_playtime_values_request = []; - -//Just incase the Headless Client connects before anyone else -publicVariable "TON_fnc_playtime_values"; -publicVariable "TON_fnc_playtime_values_request"; - - -/* Setup the federal reserve building(s) */ -private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call life_util_fnc_terrainSort; -private _altisArray = [16019.5,16952.9,0]; -private _tanoaArray = [11074.2,11501.5,0.00137329]; -private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; - -_dome = nearestObject [_pos,"Land_Dome_Big_F"]; -_rsb = nearestObject [_pos,_vaultHouse]; - -for "_i" from 1 to 3 do {_dome setVariable [format ["bis_disabled_Door_%1",_i],1,true]; _dome animateSource [format ["Door_%1_source", _i], 0];}; -_dome setVariable ["locked",true,true]; -_rsb setVariable ["locked",true,true]; -_rsb setVariable ["bis_disabled_Door_1",1,true]; -_dome allowDamage false; -_rsb allowDamage false; - -/* Tell clients that the server is ready and is accepting queries */ -life_server_isReady = true; -publicVariable "life_server_isReady"; - -/* Initialize hunting zone(s) */ -aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; - -server_corpses = []; -addMissionEventHandler ["EntityRespawned", {_this call TON_fnc_entityRespawned}]; -addMissionEventHandler ["EntityKilled", {_this call TON_fnc_entityKilled}]; - -diag_log "----------------------------------------------------------------------------------------------------"; -diag_log format [" End of Altis Life Server Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; -diag_log "----------------------------------------------------------------------------------------------------"; \ No newline at end of file +#include "script_macros.hpp" +/* + File: init.sqf + Author: Bryan "Tonic" Boardwine + + Edit: Nanou for HeadlessClient optimization. + Please read support for more informations. + + Description: + Initialize the server and required systems. +*/ +private ["_dome","_rsb","_timeStamp","_extDBNotLoaded"]; +DB_Async_Active = false; +DB_Async_ExtraLock = false; +life_server_isReady = false; +_extDBNotLoaded = ""; +publicVariable "life_server_isReady"; +life_save_civilian_position = if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 0) then {false} else {true}; + +/* + Prepare the headless client. +*/ +life_HC_isActive = false; +publicVariable "life_HC_isActive"; +HC_Life = false; +publicVariable "HC_Life"; + +if (EXTDB_SETTING(getNumber,"HeadlessSupport") isEqualTo 1) then { + [] execVM "\life_server\initHC.sqf"; +}; + +/* + Prepare extDB before starting the initialization process + for the server. +*/ + +if (isNil {uiNamespace getVariable "life_sql_id"}) then { + life_sql_id = round(random(9999)); + CONSTVAR(life_sql_id); + uiNamespace setVariable ["life_sql_id",life_sql_id]; + try { + _result = EXTDB format ["9:ADD_DATABASE:%1",EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; + _result = EXTDB format ["9:ADD_DATABASE_PROTOCOL:%2:SQL_CUSTOM:%1:AL.ini",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; + if (!(_result isEqualTo "[1]")) then {throw "extDB3: Error with Database Connection"}; + } catch { + diag_log _exception; + _extDBNotLoaded = [true, _exception]; + }; + if (_extDBNotLoaded isEqualType []) exitWith {}; + EXTDB "9:LOCK"; + diag_log "extDB3: Connected to Database"; +} else { + life_sql_id = uiNamespace getVariable "life_sql_id"; + CONSTVAR(life_sql_id); + diag_log "extDB3: Still Connected to Database"; +}; + + +if (_extDBNotLoaded isEqualType []) exitWith { + life_server_extDB_notLoaded = true; + publicVariable "life_server_extDB_notLoaded"; +}; +life_server_extDB_notLoaded = false; +publicVariable "life_server_extDB_notLoaded"; + +/* Run stored procedures for SQL side cleanup */ +["resetLifeVehicles", 1] call DB_fnc_asyncCall; +["deleteDeadVehicles", 1] call DB_fnc_asyncCall; +["deleteOldHouses", 1] call DB_fnc_asyncCall; +["deleteOldGangs", 1] call DB_fnc_asyncCall; + +_timeStamp = diag_tickTime; +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log "---------------------------------- Starting Altis Life Server Init ---------------------------------"; +diag_log format["------------------------------------------ Version %1 -------------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; +diag_log "----------------------------------------------------------------------------------------------------"; + +if (LIFE_SETTINGS(getNumber,"save_civilian_position_restart") isEqualTo 1) then { + [] spawn { + ["updateCivAlive", 1] call DB_fnc_asyncCall; + }; +}; + +/* Map-based server side initialization. */ +master_group attachTo[bank_obj,[0,0,0]]; + +{ + _hs = createVehicle ["Land_Hospital_main_F", [0,0,0], [], 0, "NONE"]; + _hs setDir (markerDir _x); + _hs setPosATL (getMarkerPos _x); + _var = createVehicle ["Land_Hospital_side1_F", [0,0,0], [], 0, "NONE"]; + _var attachTo [_hs, [4.69775,32.6045,-0.1125]]; + detach _var; + _var = createVehicle ["Land_Hospital_side2_F", [0,0,0], [], 0, "NONE"]; + _var attachTo [_hs, [-28.0336,-10.0317,0.0889387]]; + detach _var; + if (worldName isEqualTo "Tanoa") then { + if (_forEachIndex isEqualTo 0) then { + atm_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + vendor_hospital_2 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + "medic_spawn_3" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); + "med_car_2" setMarkerPos (_var modelToWorld [8.01172,-5.47852,-8.20022]); + hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); + } else { + atm_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + vendor_hospital_3 setPos (_var modelToWorld [4.48633,0.438477,-8.25683]); + "medic_spawn_1" setMarkerPos (_var modelToWorld [-1.85181,-6.07715,-8.24944]); + "med_car_1" setMarkerPos (_var modelToWorld [5.9624,11.8799,-8.28493]); + hospital_assis_2 setPos (_hs modelToWorld [0.0175781,0.0234375,-0.231956]); + }; + }; +} forEach ["hospital_2","hospital_3"]; + +{ + if (!isPlayer _x) then { + _npc = _x; + { + if (_x != "") then { + _npc removeWeapon _x; + }; + } forEach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc]; + }; +} forEach allUnits; + +[8,true,12] execFSM "\life_server\FSM\timeModule.fsm"; + +life_adminLevel = 0; +life_medicLevel = 0; +life_copLevel = 0; +CONST(JxMxE_PublishVehicle,"false"); + +/* Setup radio channels for west/independent/civilian */ +life_radio_west = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; +life_radio_civ = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; +life_radio_indep = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []]; + +/* Set the amount of gold in the federal reserve at mission start */ +fed_bank setVariable ["safe",count playableUnits,true]; +[] spawn TON_fnc_federalUpdate; + +/* Event handler for disconnecting players */ +addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; + +/* Event handler for logs */ +"money_log" addPublicVariableEventHandler {diag_log (_this select 1)}; +"advanced_log" addPublicVariableEventHandler {diag_log (_this select 1)}; + +/* Miscellaneous mission-required stuff */ +life_wanted_list = []; + +[] spawn TON_fnc_initHouses; +cleanup = [] spawn TON_fnc_cleanup; + +TON_fnc_playtime_values = []; +TON_fnc_playtime_values_request = []; + +//Just incase the Headless Client connects before anyone else +publicVariable "TON_fnc_playtime_values"; +publicVariable "TON_fnc_playtime_values_request"; + + +/* Setup the federal reserve building(s) */ +private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call life_util_fnc_terrainSort; +private _altisArray = [16019.5,16952.9,0]; +private _tanoaArray = [11074.2,11501.5,0.00137329]; +private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; + +_dome = nearestObject [_pos,"Land_Dome_Big_F"]; +_rsb = nearestObject [_pos,_vaultHouse]; + +for "_i" from 1 to 3 do {_dome setVariable [format ["bis_disabled_Door_%1",_i],1,true]; _dome animateSource [format ["Door_%1_source", _i], 0];}; +_dome setVariable ["locked",true,true]; +_rsb setVariable ["locked",true,true]; +_rsb setVariable ["bis_disabled_Door_1",1,true]; +_dome allowDamage false; +_rsb allowDamage false; + +/* Tell clients that the server is ready and is accepting queries */ +life_server_isReady = true; +publicVariable "life_server_isReady"; + +/* Initialize hunting zone(s) */ +aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; + +server_corpses = []; +addMissionEventHandler ["EntityRespawned", {_this call TON_fnc_entityRespawned}]; +addMissionEventHandler ["EntityKilled", {_this call TON_fnc_entityKilled}]; + +diag_log "----------------------------------------------------------------------------------------------------"; +diag_log format [" End of Altis Life Server Init :: Total Execution Time %1 seconds ",(diag_tickTime) - _timeStamp]; +diag_log "----------------------------------------------------------------------------------------------------"; From a1f348f014ebe17265516b822882520676df1991 Mon Sep 17 00:00:00 2001 From: Dom Date: Wed, 22 Apr 2020 10:34:53 +0100 Subject: [PATCH 28/40] Remove old file --- life_server/init.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/life_server/init.sqf b/life_server/init.sqf index 952342d8e..dd5486ced 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -137,7 +137,6 @@ life_radio_indep = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT /* Set the amount of gold in the federal reserve at mission start */ fed_bank setVariable ["safe",count playableUnits,true]; -[] spawn TON_fnc_federalUpdate; /* Event handler for disconnecting players */ addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}]; From 30ec65fbf748fe7a17512adf64c97f75058bbcdc Mon Sep 17 00:00:00 2001 From: Dom Date: Wed, 22 Apr 2020 11:13:02 +0100 Subject: [PATCH 29/40] Final fixes --- Altis_Life.Altis/core/configuration.sqf | 1 - .../Functions/Systems/fn_getVehicles.sqf | 2 +- .../Functions/Systems/fn_vehicleCreate.sqf | 1 + life_server/config.cpp | 243 +++++++++--------- 4 files changed, 123 insertions(+), 124 deletions(-) diff --git a/Altis_Life.Altis/core/configuration.sqf b/Altis_Life.Altis/core/configuration.sqf index e7971c33f..73894ab7e 100644 --- a/Altis_Life.Altis/core/configuration.sqf +++ b/Altis_Life.Altis/core/configuration.sqf @@ -27,7 +27,6 @@ life_knockout = false; life_interrupted = false; life_respawned = false; life_removeWanted = false; -life_action_gathering = false; life_god = false; life_frozen = false; life_save_gear = []; diff --git a/life_server/Functions/Systems/fn_getVehicles.sqf b/life_server/Functions/Systems/fn_getVehicles.sqf index 32f585be3..d441f75b6 100755 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -7,7 +7,7 @@ */ params [ ["_unit", objNull, [objNull]], - ["_type", "", [""]], + ["_type", "", [""]] ]; //Error checks diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index a569d5fca..7d2904fc0 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -1,3 +1,4 @@ +#include "\life_server\script_macros.hpp" /* File: fn_vehicleCreate.sqf Author: Bryan "Tonic" Boardwine diff --git a/life_server/config.cpp b/life_server/config.cpp index ec82fe3b5..c99d9f39f 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -1,122 +1,121 @@ -class DefaultEventhandlers; -class CfgPatches { - class life_server { - units[] = {"C_man_1"}; - weapons[] = {}; - requiredAddons[] = {"A3_Data_F","A3_Soft_F","A3_Soft_F_Offroad_01","A3_Characters_F"}; - fileName = "life_server.pbo"; - author = "Tonic"; - }; -}; - -class CfgFunctions { - class MySQL_Database { - tag = "DB"; - class MySQL - { - file = "\life_server\Functions\MySQL"; - class queryRequest{}; - class asyncCall{}; - class insertRequest{}; - class updateRequest{}; - class updatePartial {}; - }; - }; - - class Life_System { - tag = "life"; - class Wanted_Sys { - file = "\life_server\Functions\WantedSystem"; - class wantedFetch {}; - class wantedPerson {}; - class wantedBounty {}; - class wantedRemove {}; - class wantedAdd {}; - class wantedCrimes {}; - class wantedProfUpdate {}; - }; - - class Jail_Sys { - file = "\life_server\Functions\Jail"; - class jailSys {}; - }; - }; - - class TON_System { - tag = "TON"; - class Systems { - file = "\life_server\Functions\Systems"; - class managesc {}; - class cleanup {}; - class huntingZone {}; - class getID {}; - class vehicleCreate {}; - class spawnVehicle {}; - class getVehicles {}; - class vehicleStore {}; - class vehicleDelete {}; - class spikeStrip {}; - class transferOwnership {}; - class federalUpdate {}; - class chopShopSell {}; - class clientDisconnect {}; - class entityRespawned {}; - class entityKilled {}; - class cleanupRequest {}; - class keyManagement {}; - class vehicleUpdate {}; - class recupkeyforHC {}; - class handleBlastingCharge {}; - class vehicleAnimate {}; - }; - - class Housing { - file = "\life_server\Functions\Housing"; - class addHouse {}; - class addContainer {}; - class deleteDBContainer {}; - class fetchPlayerHouses {}; - class initHouses {}; - class sellHouse {}; - class sellHouseContainer {}; - class updateHouseContainers {}; - class updateHouseTrunk {}; - class houseCleanup {}; - class houseGarage {}; - }; - - class Gangs { - file = "\life_server\Functions\Gangs"; - class insertGang {}; - class queryPlayerGang {}; - class removeGang {}; - class updateGang {}; - }; - - class Actions { - file = "\life_server\Functions\Actions"; - class pickupAction {}; - }; - - class PlayTime { - file = "\life_server\Functions\PlayTime"; - class setPlayTime {}; - class getPlayTime {}; - }; - }; -}; - -class CfgVehicles { - class Car_F; - class CAManBase; - class Civilian; - class Civilian_F : Civilian { - class EventHandlers; - }; - - class C_man_1 : Civilian_F { - class EventHandlers: EventHandlers { - init = "(_this select 0) execVM ""\life_server\fix_headgear.sqf"""; - }; - }; -}; +class DefaultEventhandlers; +class CfgPatches { + class life_server { + units[] = {"C_man_1"}; + weapons[] = {}; + requiredAddons[] = {"A3_Data_F","A3_Soft_F","A3_Soft_F_Offroad_01","A3_Characters_F"}; + fileName = "life_server.pbo"; + author = "Tonic"; + }; +}; + +class CfgFunctions { + class MySQL_Database { + tag = "DB"; + class MySQL + { + file = "\life_server\Functions\MySQL"; + class queryRequest{}; + class asyncCall{}; + class insertRequest{}; + class updateRequest{}; + class updatePartial {}; + }; + }; + + class Life_System { + tag = "life"; + class Wanted_Sys { + file = "\life_server\Functions\WantedSystem"; + class wantedFetch {}; + class wantedPerson {}; + class wantedBounty {}; + class wantedRemove {}; + class wantedAdd {}; + class wantedCrimes {}; + class wantedProfUpdate {}; + }; + + class Jail_Sys { + file = "\life_server\Functions\Jail"; + class jailSys {}; + }; + }; + + class TON_System { + tag = "TON"; + class Systems { + file = "\life_server\Functions\Systems"; + class managesc {}; + class cleanup {}; + class huntingZone {}; + class getID {}; + class vehicleCreate {}; + class spawnVehicle {}; + class getVehicles {}; + class vehicleStore {}; + class vehicleDelete {}; + class spikeStrip {}; + class transferOwnership {}; + class chopShopSell {}; + class clientDisconnect {}; + class entityRespawned {}; + class entityKilled {}; + class cleanupRequest {}; + class keyManagement {}; + class vehicleUpdate {}; + class recupkeyforHC {}; + class handleBlastingCharge {}; + class vehicleAnimate {}; + }; + + class Housing { + file = "\life_server\Functions\Housing"; + class addHouse {}; + class addContainer {}; + class deleteDBContainer {}; + class fetchPlayerHouses {}; + class initHouses {}; + class sellHouse {}; + class sellHouseContainer {}; + class updateHouseContainers {}; + class updateHouseTrunk {}; + class houseCleanup {}; + class houseGarage {}; + }; + + class Gangs { + file = "\life_server\Functions\Gangs"; + class insertGang {}; + class queryPlayerGang {}; + class removeGang {}; + class updateGang {}; + }; + + class Actions { + file = "\life_server\Functions\Actions"; + class pickupAction {}; + }; + + class PlayTime { + file = "\life_server\Functions\PlayTime"; + class setPlayTime {}; + class getPlayTime {}; + }; + }; +}; + +class CfgVehicles { + class Car_F; + class CAManBase; + class Civilian; + class Civilian_F : Civilian { + class EventHandlers; + }; + + class C_man_1 : Civilian_F { + class EventHandlers: EventHandlers { + init = "(_this select 0) execVM ""\life_server\fix_headgear.sqf"""; + }; + }; +}; From 298f8c5a581d0b3a8413d043853f7ea2b025b15b Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 24 Apr 2020 18:08:15 +0100 Subject: [PATCH 30/40] Update life_hc --- life_hc/MySQL/General/fn_cleanup.sqf | 11 +- life_hc/MySQL/General/fn_insertVehicle.sqf | 24 -- life_hc/MySQL/Vehicles/fn_chopShopSell.sqf | 67 ++-- life_hc/MySQL/Vehicles/fn_getVehicles.sqf | 79 ++-- life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf | 353 ++++++++---------- life_hc/MySQL/Vehicles/fn_vehicleAnimate.sqf | 50 +++ life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf | 150 ++++++-- life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf | 41 +- life_hc/MySQL/Vehicles/fn_vehicleStore.sqf | 147 +++----- life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf | 121 +++--- life_hc/config.cpp | 212 +++++------ .../Functions/Systems/fn_chopShopSell.sqf | 62 +-- .../Functions/Systems/fn_vehicleAnimate.sqf | 95 +++-- .../Functions/Systems/fn_vehicleUpdate.sqf | 2 +- 14 files changed, 716 insertions(+), 698 deletions(-) delete mode 100755 life_hc/MySQL/General/fn_insertVehicle.sqf create mode 100644 life_hc/MySQL/Vehicles/fn_vehicleAnimate.sqf diff --git a/life_hc/MySQL/General/fn_cleanup.sqf b/life_hc/MySQL/General/fn_cleanup.sqf index f28d57c7a..036645b30 100755 --- a/life_hc/MySQL/General/fn_cleanup.sqf +++ b/life_hc/MySQL/General/fn_cleanup.sqf @@ -32,19 +32,16 @@ private _fnc_cleanVehicles = { if (crew _x isEqualTo [] && {_noUnitsNear}) then { private _fuel = if (_saveFuel) then {fuel _x} else {1}; - private _dbInfo = _x getVariable "dbInfo"; + private _ownerInfo = (_x getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; + private _vid = _x getVariable ["vehID",-1]; deleteVehicle _x; - if (isNil "_dbInfo") exitWith {}; + if (_vid isEqualTo -1) exitWith {}; waitUntil {uiSleep 1; isNull _x}; - _dbInfo params [ - "_uid", - "_plate" - ]; - private _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; [_query, 1] call HC_fnc_asyncCall; }; diff --git a/life_hc/MySQL/General/fn_insertVehicle.sqf b/life_hc/MySQL/General/fn_insertVehicle.sqf deleted file mode 100755 index 0a049b5fa..000000000 --- a/life_hc/MySQL/General/fn_insertVehicle.sqf +++ /dev/null @@ -1,24 +0,0 @@ -/* - File: fn_insertVehicle.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Inserts the vehicle into the database -*/ - -params [ - "_uid", - "_side", - "_type", - "_className", - ["_color",-1,[0]], - ["_plate",-1,[0]] -]; - -//Stop bad data being passed. -if (_uid isEqualTo "" || {_side isEqualTo ""} || {_type isEqualTo ""} || {_className isEqualTo ""} || {_color isEqualTo -1} || {_plate isEqualTo -1}) exitWith {}; - -private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; -[_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf index 1628eb5ec..73c789f85 100755 --- a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf +++ b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf @@ -1,33 +1,34 @@ -#include "\life_hc\hc_macros.hpp" -/* - File: fn_chopShopSell.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Checks whether or not the vehicle is persistent or temp and sells it. -*/ -params [ - ["_unit",objNull,[objNull]], - ["_vehicle",objNull,[objNull]], - ["_price",500,[0]] -]; - -//Error checks -if (isNull _vehicle || isNull _unit) exitWith { - [] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; -}; - -private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); - -private _dbInfo = _vehicle getVariable ["dbInfo",[]]; -if (count _dbInfo > 0) then { - _dbInfo params ["_uid","_plate"]; - private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; - [_query,1] call HC_fnc_asyncCall; -}; - -deleteVehicle _vehicle; - -[_price,_displayName] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; +#include "\life_hc\hc_macros.hpp" +/* + File: fn_chopShopSell.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Checks whether or not the vehicle is persistent or temp and sells it. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_vehicle",objNull,[objNull]], + ["_price",500,[0]] +]; + +//Error checks +if (isNull _vehicle || isNull _unit) exitWith { + [] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; +}; + +private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); + +private _plate = _vehicle getVariable ["plate",""]; +if !(_plate isEqualTo "") then { + private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; + private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; + [_query,1] call HC_fnc_asyncCall; +}; + +deleteVehicle _vehicle; + +[_price,_displayName] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; diff --git a/life_hc/MySQL/Vehicles/fn_getVehicles.sqf b/life_hc/MySQL/Vehicles/fn_getVehicles.sqf index 6a742e038..821a6e1de 100755 --- a/life_hc/MySQL/Vehicles/fn_getVehicles.sqf +++ b/life_hc/MySQL/Vehicles/fn_getVehicles.sqf @@ -1,44 +1,35 @@ -#include "\life_hc\hc_macros.hpp" -/* - File: fn_getVehicles.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Sends a request to query the database information and returns vehicles. -*/ - -params [ - ["_pid", "", [""]], - ["_side", sideUnknown, [west]], - ["_type", "", [""]], - ["_unit", objNull, [objNull]] -]; - -//Error checks -if (_pid isEqualTo "" || {_side isEqualTo sideUnknown} || {_type isEqualTo ""} || {isNull _unit}) exitWith { - if (!isNull _unit) then { - [[]] remoteExec ["life_fnc_impoundMenu", _unit]; - }; -}; - -_side = switch (_side) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; -}; - -if (_side isEqualTo "Error") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu", _unit]; -}; - -private _query = format ["selectVehicles:%1:%2:%3", _pid, _side, _type]; -private _queryResult = [_query, 2, true] call HC_fnc_asyncCall; - -if (_queryResult isEqualType "") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu", _unit]; -}; - -[_queryResult] remoteExec ["life_fnc_impoundMenu", _unit]; +#include "\life_hc\hc_macros.hpp" +/* + File: fn_getVehicles.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Sends a request to query the database information and returns vehicles. +*/ +params [ + ["_unit", objNull, [objNull]], + ["_type", "", [""]] +]; + +if (isNull _unit || {_type isEqualTo ""}) exitWith { + if !(isNull _unit) then { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; + }; +}; + +private _side = [_unit,true] call life_util_fnc_sideToString; + +if (_side isEqualTo "Unknown") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu",_unit]; +}; + +private _query = format ["selectVehicles:%1:%2:%3", _pid, _side, _type]; +private _queryResult = [_query, 2, true] call HC_fnc_asyncCall; + +if (_queryResult isEqualType "") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu", _unit]; +}; + +[_queryResult] remoteExec ["life_fnc_impoundMenu", _unit]; diff --git a/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf b/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf index c6accc63a..a16075c9f 100755 --- a/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf +++ b/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf @@ -1,192 +1,161 @@ -#include "\life_hc\hc_macros.hpp" -/* - File: fn_spawnVehicle.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Sends the query request to the database, if an array is returned then it creates - the vehicle if it's not in use or dead. -*/ - -params [ - ["_vid", -1, [0]], - ["_pid", "", [""]], - ["_sp", [], [[],""]], - ["_unit", objNull, [objNull]], - ["_price", 0, [0]], - ["_dir", 0, [0]], - "_spawntext" -]; - -private _unit_return = _unit; -private _name = name _unit; -private _side = side _unit; - -if (_vid isEqualTo -1 || {_pid isEqualTo ""}) exitWith {}; -if (_vid in serv_sv_use) exitWith {}; -serv_sv_use pushBack _vid; - -private _servIndex = serv_sv_use find _vid; - -private _tickTime = diag_tickTime; -private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; -private _queryResult = [_query, 2] call HC_fnc_asyncCall; - -if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { - diag_log "------------- Client Query Request -------------"; - diag_log format ["QUERY: %1",_query]; - diag_log format ["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; - diag_log format ["Result: %1",_queryResult]; - diag_log "------------------------------------------------"; -}; - -if (_queryResult isEqualType "") exitWith {}; - -private _vInfo = _queryResult; -if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; -if (_vInfo isEqualTo []) exitWith {serv_sv_use deleteAt _servIndex;}; - -if ((_vInfo select 5) isEqualTo 0) exitWith { - serv_sv_use deleteAt _servIndex; - [1,"STR_Garage_SQLError_Destroyed",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; -}; - -if ((_vInfo select 6) isEqualTo 1) exitWith { - serv_sv_use deleteAt _servIndex; - [1,"STR_Garage_SQLError_Active",true,[_vInfo select 2]] remoteExecCall ["life_fnc_broadcast",_unit]; -}; - -private "_nearVehicles"; -if !(_sp isEqualType "") then { - _nearVehicles = nearestObjects[_sp,["Car","Air","Ship"],10]; -} else { - _nearVehicles = []; -}; - -if !(_nearVehicles isEqualTo []) exitWith { - serv_sv_use deleteAt _servIndex; - [_price,_unit_return] remoteExecCall ["life_fnc_garageRefund",_unit]; - [1,"STR_Garage_SpawnPointError",true] remoteExecCall ["life_fnc_broadcast",_unit]; -}; - -_query = format ["updateVehicle:%1:%2", _pid, _vid]; - -private _trunk = _vInfo select 9; -private _gear = _vInfo select 10; -private _damage = _vInfo select 12; -private _wasIllegal = _vInfo select 13; -_wasIllegal = _wasIllegal isEqualTo 1; - -[_query, 1] call HC_fnc_asyncCall; - -private "_vehicle"; -if (_sp isEqualType "") then { - _vehicle = createVehicle[(_vInfo select 2),[0,0,999],[],0,"NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; - _vehicle allowDamage false; - _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0; - _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); - uiSleep 0.6; -} else { - _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"]; - waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; - _vehicle allowDamage false; - _vehicle setPos _sp; - _vehicle setVectorUp (surfaceNormal _sp); - _vehicle setDir _dir; -}; -_vehicle allowDamage true; -//Send keys over the network. -[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; -[_pid,_side,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; -_vehicle lock 2; -//Reskin the vehicle -[_vehicle, _vInfo select 8] remoteExecCall ["life_fnc_colorVehicle",_unit]; -_vehicle setVariable ["vehicle_info_owners",[[_pid,_name]],true]; -_vehicle setVariable ["dbInfo",[(_vInfo select 4),(_vInfo select 7)],true]; -_vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. -[_vehicle] call life_fnc_clearVehicleAmmo; - -if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { - - _vehicle setVariable ["Trunk",_trunk,true]; - - if (_wasIllegal) then { - private _refPoint = if (_sp isEqualType "") then {getMarkerPos _sp;} else {_sp;}; - - private _distance = 100000; - private "_location"; - - { - private _tempLocation = nearestLocation [_refPoint, _x]; - private _tempDistance = _refPoint distance _tempLocation; - - if (_tempDistance < _distance) then { - _location = _tempLocation; - _distance = _tempDistance; - }; - false - - } count ["NameCityCapital", "NameCity", "NameVillage"]; - - _location = text _location; - [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; - - _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; - [_query, 1] call HC_fnc_asyncCall; - }; -} else { - _vehicle setVariable ["Trunk", [[], 0], true]; -}; - -if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _vehicle setFuel (_vInfo select 11); -} else { - _vehicle setFuel 1; -}; - -if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { - _items = _gear select 0; - _mags = _gear select 1; - _weapons = _gear select 2; - _backpacks = _gear select 3; - - for "_i" from 0 to ((count (_items select 0)) - 1) do { - _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; - }; - for "_i" from 0 to ((count (_mags select 0)) - 1) do { - _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; - }; - for "_i" from 0 to ((count (_weapons select 0)) - 1) do { - _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; - }; - for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { - _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; - }; -}; - -if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { - _parts = getAllHitPointsDamage _vehicle; - - for "_i" from 0 to ((count _damage) - 1) do { - _vehicle setHitPointDamage [format ["%1",((_parts select 0) select _i)],_damage select _i]; - }; -}; - -//Sets of animations -if ((_vInfo select 1) isEqualTo "civ" && (_vInfo select 2) isEqualTo "B_Heli_Light_01_F" && !((_vInfo select 8) isEqualTo 13)) then { - [_vehicle,"civ_littlebird",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; -}; - -if ((_vInfo select 1) isEqualTo "cop" && ((_vInfo select 2)) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { - [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; -}; - -if ((_vInfo select 1) isEqualTo "med" && (_vInfo select 2) isEqualTo "C_Offroad_01_F") then { - [_vehicle,"med_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; -}; - -[1, _spawntext] remoteExecCall ["life_fnc_broadcast",_unit]; -serv_sv_use deleteAt _servIndex; +#include "\life_hc\hc_macros.hpp" +/* + File: fn_spawnVehicle.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Sends the query request to the database, if an array is returned then it creates + the vehicle if it's not in use or dead. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_vid",-1,[""]], + ["_spawnPoint","",[""]], + ["_dir",-1,[0]] +]; +if (isNull _unit || {_vid isEqualTo -1}) exitWith {}; + +private _name = name _unit; +private _side = side _unit; +private _pid = getPlayerUID _unit; + +private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; +private _tickTime = diag_tickTime; +private _queryResult = [_query, 2] call HC_fnc_asyncCall; + +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log "------------- Client Query Request -------------"; + diag_log format ["QUERY: %1",_query]; + diag_log format ["Time to complete: %1 (in seconds)",(diag_tickTime - _tickTime)]; + diag_log format ["Result: %1",_queryResult]; + diag_log "------------------------------------------------"; +}; + +if (_queryResult isEqualType "" || {_queryResult isEqualTo []}) exitWith {}; +_queryResult params ["_className","_plate","_color","_trunk","_gear","_fuel","_damage","_wasIllegal","_active","_alive"]; + +if (_alive isEqualTo 0) exitWith { + [1,"STR_Garage_SQLError_Destroyed",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +if (_active isEqualTo 1) exitWith { + [1,"STR_Garage_SQLError_Active",true,[_className]] remoteExecCall ["life_fnc_broadcast",_unit]; +}; + +private _nearVehicles = nearestObjects[_spawnPoint,["Car","Air","Ship"],6]; //last check for nearby vehicles + +if !(_nearVehicles isEqualTo []) exitWith { + [_price] remoteExecCall ["life_fnc_garageRefund",_unit]; +}; + +_query = format ["updateVehicle:%1:%2", _pid, _vid]; +[_query, 1] call HC_fnc_asyncCall; + +private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; +if (_dir isEqualTo -1) then { + _dir = markerDir _spawnPoint; +}; +_vehicle setDir _dir; + +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; +_vehicle lock 2; +_vehicle disableTIEquipment true; + +[_vehicle,_color] call life_fnc_colorVehicle; +[_vehicle] call life_fnc_clearVehicleAmmo; + +_vehicle setVariable ["trunk_in_use",false,true]; +_vehicle setVariable ["vehicle_info_owners",[[_pid,name _unit]],true]; +_vehicle setPlateNumber _plate; +_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber +_vehicle setVariable ["vehID",_vid]; + +switch _side do { + case west: { + if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] call TON_fnc_vehicleAnimate; + }; + }; + case civilian: { + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo "Digi Green")) then { + [_vehicle,"civ_littlebird",true] call TON_fnc_vehicleAnimate; + }; + }; + case independent: { + if (_className isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] call TON_fnc_vehicleAnimate; + }; + }; +}; + +[_pid,_side,_vehicle,1] call TON_fnc_keyManagement; +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + _vehicle setVariable ["Trunk",_trunk,true]; + + if (_wasIllegal isEqualTo 1) then { + private _refPoint = getMarkerPos _spawnPoint; + + private _distance = 100000; + private "_location"; + + { + private _tempLocation = nearestLocation [_refPoint, _x]; + private _tempDistance = _refPoint distance _tempLocation; + + if (_tempDistance < _distance) then { + _location = _tempLocation; + _distance = _tempDistance; + }; + false + + } count ["NameCityCapital", "NameCity", "NameVillage"]; + + _location = text _location; + [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; + + _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; + [_query, 1] call HC_fnc_asyncCall; + }; +} else { + _vehicle setVariable ["Trunk", [[], 0], true]; +}; + +if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { + _vehicle setFuel _fuel; +} else { + _vehicle setFuel 1; +}; + +if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { + _gear params ["_items","_mags","_weapons","_backpacks"]; + + for "_i" from 0 to ((count (_items select 0)) - 1) do { + _vehicle addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; + }; + for "_i" from 0 to ((count (_mags select 0)) - 1) do { + _vehicle addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; + }; + for "_i" from 0 to ((count (_weapons select 0)) - 1) do { + _vehicle addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; + }; + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { + _vehicle addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; + }; +}; + +if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { + private _parts = getAllHitPointsDamage _vehicle; + + for "_i" from 0 to ((count _damage) - 1) do { + _vehicle setHitPointDamage [format ["%1",((_parts select 0) select _i)],_damage select _i]; + }; +}; + +[1,"STR_Garage_spawn_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleAnimate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleAnimate.sqf new file mode 100644 index 000000000..effa286b0 --- /dev/null +++ b/life_hc/MySQL/Vehicles/fn_vehicleAnimate.sqf @@ -0,0 +1,50 @@ +/* + File: fn_vehicleAnimate.sqf + Author: DomT602 + + This file is for Nanou's HeadlessClient. + + Description: + Animates various aspects of the vehicle - moved to server. +*/ +params [ + ["_vehicle",objNull,[objNull]], + ["_animate","",["",[]]], + ["_preset",false,[false]] +]; +if (isNull _vehicle) exitWith {}; + +if !(_preset) then { + { + _x params ["_selection","_value"]; + _vehicle animate [_selection,_value]; + } forEach _animate; +} else { + switch _animate do { + case "civ_littlebird": { + _vehicle animate ["addDoors",1]; + _vehicle animate ["addBenches",0]; + _vehicle animate ["addTread",0]; + _vehicle animate ["AddCivilian_hide",1]; + { + _vehicle lockCargo [_x,true]; + } forEach [2, 3, 4, 5]; + }; + + case "service_truck": { + _vehicle animate ["HideServices", 0]; + _vehicle animate ["HideDoor3", 1]; + }; + + case "med_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle setVariable ["lights",false,true]; + }; + + case "cop_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle animate ["HideBumper1", 0]; + _vehicle setVariable ["lights",false,true]; + }; + }; +}; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf index 5f2434c74..6bacdcc92 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf @@ -1,38 +1,112 @@ -/* - File: fn_vehicleCreate.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Answers the query request to create the vehicle in the database. -*/ - -params [ - ["_uid", "", [""]], - ["_side", sideUnknown, [west]], - ["_vehicle", objNull, [objNull]], - ["_color", -1, [0]] -]; - -//Error checks -if (_uid isEqualTo "" || {_side isEqualTo sideUnknown} || {isNull _vehicle}) exitWith {}; -if (!alive _vehicle) exitWith {}; -private _className = typeOf _vehicle; -private _type = switch (true) do { - case (_vehicle isKindOf "Car"): {"Car"}; - case (_vehicle isKindOf "Air"): {"Air"}; - case (_vehicle isKindOf "Ship"): {"Ship"}; -}; - -_side = switch (_side) do { - case west:{"cop"}; - case civilian: {"civ"}; - case independent: {"med"}; - default {"Error"}; -}; - -private _plate = round(random(1000000)); -[_uid, _side, _type, _classname, _color, _plate] call HC_fnc_insertVehicle; - -_vehicle setVariable ["dbInfo", [_uid, _plate], true]; +#include "\life_hc\script_macros.hpp" +/* + File: fn_vehicleCreate.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Creates the vehicle and adds a database entry if vehicle is purchased. +*/ +params [ + ["_unit", objNull, [objNull]], + ["_className","",[""]], + ["_spawnPoint","",[""]], + ["_color", "", [""]], + ["_purchase",false,[false]] +]; + +if (isNull _unit || {_className isEqualTo "" || {_spawnPoint isEqualTo ""}}) exitWith {}; + +private _uid = getPlayerUID _unit; +private _plateFormat = LIFE_SETTINGS(getText,"vehicle_plateFormat"); +private _platePrefix = LIFE_SETTINGS(getText,"vehicle_platePrefix"); +private _plateForceUnique = LIFE_SETTINGS(getNumber,"vehicle_enforceUniquePlate") isEqualTo 1; +private _plateFormatArray = _plateFormat splitString ""; +private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; + +private _plate = ""; +while {_plate isEqualTo ""} do { + private _randomPlate = []; + { + if (_x isEqualTo "$") then { + _randomPlate pushBack (selectRandom _letterArray); + } else { + if (_x isEqualTo " ") then { + _randomPlate pushBack " "; + } else { + _randomPlate pushBack (round(random 9)); + }; + }; + } forEach _plateFormatArray; + + _randomPlate = _randomPlate joinString ""; + if (_plateForceUnique) then { + private _return = [format["checkPlate:%1",_randomPlate],2] call HC_fnc_asyncCall; + if (_return isEqualTo []) exitWith {_plate = _randomPlate}; + } else { + _plate = _randomPlate; + }; +}; +_plate = format["%1%2",_platePrefix,_plate]; + +private _vid = -1; +if (_purchase) then { + private _type = call { + if (_vehicle isKindOf "Car") exitWith {"Car"}; + if (_vehicle isKindOf "Air") exitWith {"Air"}; + if (_vehicle isKindOf "Ship") exitWith {"Ship"}; + }; + + private _side = [_unit,true] call life_util_fnc_sideToString; + + private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; + private _queryResult = [_query, 2] call HC_fnc_asyncCall; + _vid = _queryResult select 0; +}; + +private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; +_vehicle setDir (markerDir _spawnPoint); + +clearWeaponCargoGlobal _vehicle; +clearMagazineCargoGlobal _vehicle; +clearItemCargoGlobal _vehicle; +clearBackpackCargoGlobal _vehicle; +_vehicle lock 2; +_vehicle disableTIEquipment true; + +[_vehicle,_color] call life_fnc_colorVehicle; +[_vehicle] call life_fnc_clearVehicleAmmo; + +_vehicle setVariable ["trunk_in_use",false,true]; +_vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; +_vehicle setPlateNumber _plate; +_vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber +if (_purchase) then { + [_vehicle,_vid] spawn { + params ["_vehicle","_vid"]; + uiSleep 0.3; + _vehicle setVariable ["vehID",_vid]; + }; +}; + +switch (side _unit) do { + case west: { + if (_className in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then { + [_vehicle,"cop_offroad",true] call HC_fnc_vehicleAnimate; + }; + }; + case civilian: { + if (_className isEqualTo "B_Heli_Light_01_F" && !(_color isEqualTo "Digi Green")) then { + [_vehicle,"civ_littlebird",true] call HC_fnc_vehicleAnimate; + }; + }; + case independent: { + if (_className isEqualTo "C_Offroad_01_F") then { + [_vehicle,"med_offroad",true] call HC_fnc_vehicleAnimate; + }; + }; +}; + +[_uid,(side _unit),_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",RSERV]; +[_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf b/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf index 218dfe874..b7e234f00 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf @@ -1,23 +1,18 @@ -/* - File: fn_vehicleDelete.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Doesn't actually delete since we don't give our DB user that type of - access so instead we set it to alive=0 so it never shows again. -*/ - -params [ - ["_vid", -1, [0]], - ["_pid", "", [""]], - ["_sp", 2500, [0]], - ["_unit", objNull, [objNull]], - ["_type", "", [""]] -]; - -if (_vid isEqualTo -1 || {_pid isEqualTo ""} || {_sp isEqualTo 0} || {isNull _unit} || {_type isEqualTo ""}) exitWith {}; - -private _query = format ["deleteVehicleID:%1:%2", _pid, _vid]; -private _thread = [_query, 1] call HC_fnc_asyncCall; +/* + File: fn_vehicleDelete.sqf + Author: Bryan "Tonic" Boardwine + + This file is for Nanou's HeadlessClient. + + Description: + Sets the vehicle to be 'dead' so it can be cleaned up later. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_vid",-1,[0]] +]; +if (isNull _unit || {_vid isEqualTo -1}) exitWith {}; + +private _pid = getPlayerUID _unit; +private _query = format ["deleteVehicle:%1:%2", _pid, _vid]; +[_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf index 59a56da9d..897579bcc 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf @@ -5,163 +5,128 @@ Description: Stores the vehicle in the 'Garage' */ - params [ ["_vehicle", objNull, [objNull]], ["_impound", false, [true]], - ["_unit", objNull, [objNull]], - ["_storetext", "", [""]] + ["_unit", objNull, [objNull]] ]; -private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); -private _ownerID = remoteExecutedOwner; - -if (isNull _vehicle || {isNull _unit}) exitWith {life_impound_inuse = false; _ownerID publicVariableClient "life_impound_inuse";life_garage_store = false;_ownerID publicVariableClient "life_garage_store";}; //Bad data passed. -private _vInfo = _vehicle getVariable ["dbInfo", []]; -private "_plate"; -private "_uid"; +if (isNull _vehicle || {isNull _unit}) exitWith {life_garage_store = false;(owner _unit) publicVariableClient "life_garage_store";}; //Bad data passed. -if !(_vInfo isEqualTo []) then { - _plate = _vInfo select 1; - _uid = _vInfo select 0; -}; +private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; +_ownerInfo params ["_uid"]; +private _vid = _vehicle getVariable ["vehID",-1]; // save damage. -private "_damage"; +private _damage = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { _damage = getAllHitPointsDamage _vehicle; _damage = _damage select 2; -} else { - _damage = []; }; // because fuel price! -private "_fuel"; +private _fuel = 1; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { - _fuel = (fuel _vehicle); -} else { - _fuel = 1; + _fuel = fuel _vehicle; }; -private "_query"; -private "_thread"; if (_impound) exitWith { - if (_vInfo isEqualTo []) then { - life_impound_inuse = false; - _ownerID publicVariableClient "life_impound_inuse"; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - } else { // no free repairs! - _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; - _thread = [_query,1] call HC_fnc_asyncCall; - - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; - - life_impound_inuse = false; - _ownerID publicVariableClient "life_impound_inuse"; + if (_vid isEqualTo -1) then { + private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; + [_query,1] call HC_fnc_asyncCall; }; + + deleteVehicle _vehicle; }; // not persistent so just do this! -if (_vInfo isEqualTo []) exitWith { +if (_vid isEqualTo -1) exitWith { if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { - [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; - if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; - }; + [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",_unit]; + deleteVehicle _vehicle; } else { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_unit]; }; life_garage_store = false; - _ownerID publicVariableClient "life_garage_store"; + (owner _unit) publicVariableClient "life_garage_store"; }; if !(_uid isEqualTo getPlayerUID _unit) exitWith { - [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + [1,"STR_Garage_Store_NoOwnership",true] remoteExecCall ["life_fnc_broadcast",_unit]; life_garage_store = false; - _ownerID publicVariableClient "life_garage_store"; + (owner _unit) publicVariableClient "life_garage_store"; }; // sort out whitelisted items! private _trunk = _vehicle getVariable ["Trunk", [[], 0]]; -private _itemList = _trunk select 0; -private _totalweight = 0; -private "_weight"; -_items = []; +_trunk params ["_itemList"]; +private _totalWeight = 0; +private _items = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { + private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); if (LIFE_SETTINGS(getNumber,"save_vehicle_illegal") isEqualTo 1) then { private _blacklist = false; - _profileQuery = format ["selectName:%1", _uid]; - _profileName = [_profileQuery, 2] call HC_fnc_asyncCall; + private _profileQuery = format ["selectName:%1", _uid]; + private _profileName = [_profileQuery, 2] call HC_fnc_asyncCall; _profileName = _profileName select 0; { - private _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); + _x params ["_itemName","_itemCount"]; + private _isIllegal = M_CONFIG(getNumber,"VirtualItems",_itemName,"illegal"); - _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; + _isIllegal = _isIllegal isEqualTo 1; - if (((_x select 0) in _resourceItems) || (_isIllegal)) then { - _items pushBack[(_x select 0),(_x select 1)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); - _totalweight = _weight + _totalweight; + if ((_itemName in _resourceItems) || {_isIllegal}) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; + _totalWeight = _weight + _totalWeight; }; if (_isIllegal) then { _blacklist = true; }; - } - foreach _itemList; + } forEach _itemList; if (_blacklist) then { - [_uid, _profileName, "481"] remoteExecCall["life_fnc_wantedAdd", RSERV]; - _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; - _thread = [_query, 1] call HC_fnc_asyncCall; + [_uid, _profileName, "481"] call life_fnc_wantedAdd; + private _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _vid]; + [_query, 1] call HC_fnc_asyncCall; }; - } - else { + } else { { - if ((_x select 0) in _resourceItems) then { - _items pushBack[(_x select 0),(_x select 1)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); - _totalweight = _weight + _totalweight; + _x params ["_itemName","_itemCount"]; + if (_itemName in _resourceItems) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; + _totalWeight = _weight + _totalWeight; }; - } - forEach _itemList; + } forEach _itemList; }; - _trunk = [_items, _totalweight]; -} -else { + _trunk = [_items, _totalWeight]; +} else { _trunk = [[], 0]; }; -private "_cargo"; - +private _cargo = []; if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { private _vehItems = getItemCargo _vehicle; private _vehMags = getMagazineCargo _vehicle; private _vehWeapons = getWeaponCargo _vehicle; private _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; - // no items? clean the array so the database looks pretty - if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; - } else { - _cargo = []; + + if !((_vehItems select 0) isEqualTo [] && {(_vehMags select 0) isEqualTo [] && {(_vehWeapons select 0) isEqualTo [] && {(_vehBackpacks select 0) isEqualTo []}}}) then { + _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; + }; }; // update -_query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; -_thread = [_query,1] call HC_fnc_asyncCall; +private _query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _vid]; +[_query,1] call HC_fnc_asyncCall; -if (!isNil "_vehicle" && {!isNull _vehicle}) then { - deleteVehicle _vehicle; -}; +deleteVehicle _vehicle; life_garage_store = false; -_ownerID publicVariableClient "life_garage_store"; -[1, _storetext] remoteExecCall ["life_fnc_broadcast", _ownerID]; +(owner _unit) publicVariableClient "life_garage_store"; +[1,"STR_Garage_Store_Success",true] remoteExecCall ["life_fnc_broadcast",_unit]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf index d623b2fef..f85472d48 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf @@ -1,60 +1,61 @@ -#include "\life_hc\hc_macros.hpp" -/* - File: fn_vehicleUpdate.sqf - Author : NiiRoZz - - This file is for Nanou's HeadlessClient. - - Description: - Tells the database that this vehicle need update inventory. -*/ - -params [ - ["_vehicle", objNull, [objNull]], - ["_mode", 1, [0]] -]; - -if (isNull _vehicle) exitWith {}; //NULL - -private _dbInfo = _vehicle getVariable ["dbInfo",[]]; -if (_dbInfo isEqualTo []) exitWith {}; - -private _uid = _dbInfo select 0; -private _plate = _dbInfo select 1; - -switch (_mode) do { - case 1: { - private _vehItems = getItemCargo _vehicle; - private _vehMags = getMagazineCargo _vehicle; - private _vehWeapons = getWeaponCargo _vehicle; - private _vehBackpacks = getBackpackCargo _vehicle; - private _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; - - // Keep it clean! - if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { - _cargo = []; - }; - - private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _plate]; - private _thread = [_query, 1] call HC_fnc_asyncCall; - }; - - case 2: { - private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - private _trunk = _vehicle getVariable ["Trunk",[[],0]]; - private _itemList = _trunk select 0; - private _totalweight = 0; - private _items = []; - { - if ((_x select 0) in _resourceItems) then { - _items pushBack [_x select 0,_x select 1]; - private _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); - _totalweight = _weight + _totalweight; - }; - } forEach _itemList; - _trunk = [_items,_totalweight]; - - private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _plate]; - private _thread = [_query,1] call HC_fnc_asyncCall; - }; -}; +#include "\life_hc\hc_macros.hpp" +/* + File: fn_vehicleUpdate.sqf + Author : NiiRoZz + + This file is for Nanou's HeadlessClient. + + Description: + Tells the database that this vehicle need update inventory. +*/ + +params [ + ["_vehicle", objNull, [objNull]], + ["_mode", 1, [0]] +]; + +if (isNull _vehicle) exitWith {}; + +private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; +if (_ownerInfo isEqualTo []) exitWith {}; + +_ownerInfo params ["_uid"]; +private _vid = _vehicle getVariable ["vehID",-1]; + +switch _mode do { + case 1: { + private _vehItems = getItemCargo _vehicle; + private _vehMags = getMagazineCargo _vehicle; + private _vehWeapons = getWeaponCargo _vehicle; + private _vehBackpacks = getBackpackCargo _vehicle; + private _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + + // Keep it clean! + if ((_vehItems select 0) isEqualTo [] && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { + _cargo = []; + }; + + private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _vid]; + [_query, 1] call HC_fnc_asyncCall; + }; + + case 2: { + private _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); + private _trunk = _vehicle getVariable ["Trunk",[[],0]]; + private _itemList = _trunk select 0; + private _totalWeight = 0; + private _items = []; + { + _x params ["_itemName","_itemCount"]; + if (_itemName in _resourceItems) then { + _items pushBack [_itemName,_itemCount]; + private _weight = (ITEM_WEIGHT(_itemName)) * _itemCount; + _totalWeight = _weight + _totalWeight; + }; + } forEach _itemList; + _trunk = [_items,_totalWeight]; + + private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _vid]; + [_query,1] call HC_fnc_asyncCall; + }; +}; diff --git a/life_hc/config.cpp b/life_hc/config.cpp index da33046a0..fd8017e5e 100755 --- a/life_hc/config.cpp +++ b/life_hc/config.cpp @@ -1,106 +1,106 @@ -#define true 1 -#define false 0 - -class DefaultEventHandler; - -class CfgPatches -{ - class life_headless_client - { - units[] = {}; - weapons[] = {}; - requiredAddons[] = {"A3_Data_F"}; - fileName = "life_hc.pbo"; - author[] = {"Nanou"}; - }; -}; - -class CfgFunctions -{ - class Headless_Client - { - tag = "HC"; - class General - { - file = "\life_hc\MySQL\General"; - class asyncCall {}; - class insertRequest {}; - class insertVehicle {}; - class queryRequest {}; - class updatePartial {}; - class updateRequest {}; - class cleanup {}; - class huntingZone {}; - class receivekeyofServer {}; - }; - - class PlayTime - { - file = "\life_hc\MySQL\PlayTime"; - class getPlayTime {}; - class setPlayTime {}; - }; - - class Housing - { - file = "\life_hc\MySQL\Housing"; - class addContainer {}; - class addHouse {}; - class deleteDBContainer {}; - class fetchPlayerHouses {}; - class sellHouse {}; - class sellHouseContainer {}; - class updateHouseContainers {}; - class updateHouseTrunk {}; - class houseGarage {}; - }; - - class Gangs - { - file = "\life_hc\MySQL\Gangs"; - class insertGang {}; - class queryPlayerGang {}; - class removeGang {}; - class updateGang {}; - }; - - class Vehicles - { - file = "\life_hc\MySQL\Vehicles"; - class chopShopSell {}; - class getVehicles {}; - class spawnVehicle {}; - class keyManagement {}; - class vehicleStore {}; - class vehicleCreate {}; - class vehicleDelete {}; - class vehicleUpdate {}; - }; - - class Wanted_Sys - { - file = "\life_hc\MySQL\WantedSystem"; - class wantedFetch {}; - class wantedPerson {}; - class wantedBounty {}; - class wantedRemove {}; - class wantedAdd {}; - class wantedCrimes {}; - class wantedProfUpdate {}; - }; - - class Jail - { - file = "\life_hc\MySQL\Jail"; - class jailSys; - }; - - class Items - { - file = "\life_hc\MySQL\Items"; - class spikeStrip {}; - }; - - }; - -}; +#define true 1 +#define false 0 + +class DefaultEventHandler; + +class CfgPatches +{ + class life_headless_client + { + units[] = {}; + weapons[] = {}; + requiredAddons[] = {"A3_Data_F"}; + fileName = "life_hc.pbo"; + author[] = {"Nanou"}; + }; +}; + +class CfgFunctions +{ + class Headless_Client + { + tag = "HC"; + class General + { + file = "\life_hc\MySQL\General"; + class asyncCall {}; + class insertRequest {}; + class queryRequest {}; + class updatePartial {}; + class updateRequest {}; + class cleanup {}; + class huntingZone {}; + class receivekeyofServer {}; + }; + + class PlayTime + { + file = "\life_hc\MySQL\PlayTime"; + class getPlayTime {}; + class setPlayTime {}; + }; + + class Housing + { + file = "\life_hc\MySQL\Housing"; + class addContainer {}; + class addHouse {}; + class deleteDBContainer {}; + class fetchPlayerHouses {}; + class sellHouse {}; + class sellHouseContainer {}; + class updateHouseContainers {}; + class updateHouseTrunk {}; + class houseGarage {}; + }; + + class Gangs + { + file = "\life_hc\MySQL\Gangs"; + class insertGang {}; + class queryPlayerGang {}; + class removeGang {}; + class updateGang {}; + }; + + class Vehicles + { + file = "\life_hc\MySQL\Vehicles"; + class chopShopSell {}; + class getVehicles {}; + class spawnVehicle {}; + class keyManagement {}; + class vehicleAnimate {}; + class vehicleStore {}; + class vehicleCreate {}; + class vehicleDelete {}; + class vehicleUpdate {}; + }; + + class Wanted_Sys + { + file = "\life_hc\MySQL\WantedSystem"; + class wantedFetch {}; + class wantedPerson {}; + class wantedBounty {}; + class wantedRemove {}; + class wantedAdd {}; + class wantedCrimes {}; + class wantedProfUpdate {}; + }; + + class Jail + { + file = "\life_hc\MySQL\Jail"; + class jailSys; + }; + + class Items + { + file = "\life_hc\MySQL\Items"; + class spikeStrip {}; + }; + + }; + +}; diff --git a/life_server/Functions/Systems/fn_chopShopSell.sqf b/life_server/Functions/Systems/fn_chopShopSell.sqf index c1758446d..8c8e3bbef 100755 --- a/life_server/Functions/Systems/fn_chopShopSell.sqf +++ b/life_server/Functions/Systems/fn_chopShopSell.sqf @@ -1,31 +1,31 @@ -#include "\life_server\script_macros.hpp" -/* - File: fn_chopShopSell.sqf - Author: Bryan "Tonic" Boardwine - Description: - Checks whether or not the vehicle is persistent or temp and sells it. -*/ -params [ - ["_unit",objNull,[objNull]], - ["_vehicle",objNull,[objNull]], - ["_price",500,[0]] -]; - -//Error checks -if (isNull _vehicle || isNull _unit) exitWith { - [] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; -}; - -private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); - -private _plate = _vehicle getVariable ["plate",""]; -if !(_plate isEqualTo "") then { - private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; - _ownerInfo params ["_uid"]; - _query = format ["deleteVehicle:%1:%2", _uid, _plate]; - [_query,1] call DB_fnc_asyncCall; -}; - -deleteVehicle _vehicle; - -[_price,_displayName] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; \ No newline at end of file +#include "\life_server\script_macros.hpp" +/* + File: fn_chopShopSell.sqf + Author: Bryan "Tonic" Boardwine + Description: + Checks whether or not the vehicle is persistent or temp and sells it. +*/ +params [ + ["_unit",objNull,[objNull]], + ["_vehicle",objNull,[objNull]], + ["_price",500,[0]] +]; + +//Error checks +if (isNull _vehicle || isNull _unit) exitWith { + [] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; +}; + +private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); + +private _plate = _vehicle getVariable ["plate",""]; +if !(_plate isEqualTo "") then { + private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; + _ownerInfo params ["_uid"]; + private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; + [_query,1] call DB_fnc_asyncCall; +}; + +deleteVehicle _vehicle; + +[_price,_displayName] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; diff --git a/life_server/Functions/Systems/fn_vehicleAnimate.sqf b/life_server/Functions/Systems/fn_vehicleAnimate.sqf index 19c9ded36..1b4f92ffb 100644 --- a/life_server/Functions/Systems/fn_vehicleAnimate.sqf +++ b/life_server/Functions/Systems/fn_vehicleAnimate.sqf @@ -1,48 +1,47 @@ -/* - File: fn_vehicleAnimate.sqf - Author: DomT602 - Description: - Animates various aspects of the vehicle - moved to server. -*/ -params [ - ["_vehicle",objNull,[objNull]], - ["_animate","",["",[]]], - ["_preset",false,[false]] -]; -if (isNull _vehicle) exitWith {}; - -if !(_preset) then { - { - _x params ["_selection","_value"]; - _vehicle animate [_selection,_value]; - } forEach _animate; -} else { - switch _animate do { - case "civ_littlebird": { - _vehicle animate ["addDoors",1]; - _vehicle animate ["addBenches",0]; - _vehicle animate ["addTread",0]; - _vehicle animate ["AddCivilian_hide",1]; - _vehicle lockCargo [2,true]; - _vehicle lockCargo [3,true]; - _vehicle lockCargo [4,true]; - _vehicle lockCargo [5,true]; - }; - - case "service_truck": { - _vehicle animate ["HideServices", 0]; - _vehicle animate ["HideDoor3", 1]; - }; - - case "med_offroad": { - _vehicle animate ["HidePolice", 0]; - _vehicle setVariable ["lights",false,true]; - }; - - case "cop_offroad": { - _vehicle animate ["HidePolice", 0]; - _vehicle animate ["HideBumper1", 0]; - _vehicle setVariable ["lights",false,true]; - }; - }; -}; +/* + File: fn_vehicleAnimate.sqf + Author: DomT602 + Description: + Animates various aspects of the vehicle - moved to server. +*/ +params [ + ["_vehicle",objNull,[objNull]], + ["_animate","",["",[]]], + ["_preset",false,[false]] +]; +if (isNull _vehicle) exitWith {}; + +if !(_preset) then { + { + _x params ["_selection","_value"]; + _vehicle animate [_selection,_value]; + } forEach _animate; +} else { + switch _animate do { + case "civ_littlebird": { + _vehicle animate ["addDoors",1]; + _vehicle animate ["addBenches",0]; + _vehicle animate ["addTread",0]; + _vehicle animate ["AddCivilian_hide",1]; + { + _vehicle lockCargo [_x,true]; + } forEach [2, 3, 4, 5]; + }; + + case "service_truck": { + _vehicle animate ["HideServices", 0]; + _vehicle animate ["HideDoor3", 1]; + }; + + case "med_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle setVariable ["lights",false,true]; + }; + + case "cop_offroad": { + _vehicle animate ["HidePolice", 0]; + _vehicle animate ["HideBumper1", 0]; + _vehicle setVariable ["lights",false,true]; + }; + }; +}; diff --git a/life_server/Functions/Systems/fn_vehicleUpdate.sqf b/life_server/Functions/Systems/fn_vehicleUpdate.sqf index c1a26ef87..7bb55fea8 100755 --- a/life_server/Functions/Systems/fn_vehicleUpdate.sqf +++ b/life_server/Functions/Systems/fn_vehicleUpdate.sqf @@ -11,7 +11,7 @@ params [ ["_mode", 1, [0]] ]; -if (isNull _vehicle) exitWith {}; //NULL +if (isNull _vehicle) exitWith {}; private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; if (_ownerInfo isEqualTo []) exitWith {}; From 607ed0019f415ade6e03e0a5a0d5dd43dacb8c4c Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 24 Apr 2020 18:19:36 +0100 Subject: [PATCH 31/40] Wrong macro path --- life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf index 6bacdcc92..ed021980e 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf @@ -1,4 +1,4 @@ -#include "\life_hc\script_macros.hpp" +#include "\life_hc\hc_macros.hpp" /* File: fn_vehicleCreate.sqf Author: Bryan "Tonic" Boardwine From e74a11b5d6d71669748fa8d81af8982052cfe246 Mon Sep 17 00:00:00 2001 From: Dom Date: Fri, 24 Apr 2020 22:14:47 +0100 Subject: [PATCH 32/40] use prefix when checking plate --- Altis_Life.Altis/config/Config_Master.hpp | 494 +++++++++--------- life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf | 3 +- .../Functions/Systems/fn_vehicleCreate.sqf | 3 +- 3 files changed, 249 insertions(+), 251 deletions(-) diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 01ac8ca33..78e5626c9 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -1,247 +1,247 @@ -#define true 1 -#define false 0 - -/* - Master settings for various features and functionality -*/ -class Life_Settings { -/* Logging and Security Settings*/ - /* Security Settings */ - spyGlass_toggle = true; //Spyglass On/Off Toggle --> True = On & False = Off - - /* Data Logging Settings */ - battlEye_friendlyLogging = false; //False [default] - Read the logs from the server.rpt. True - Read the logs from the publicVariable.log. NOTE: Due to how diag_log works it will log to both files either way and the setting is merely for beautification purposes. - player_advancedLog = false; //False [default] - No advanced logging. True - Logs house purchase and sale, vehicle purchase, sale, and chop shopping, police arrests, and gang creations. Search for: advanced_log - player_moneyLog = false; //False [default] - No money logging. True - Logs player bank deposits, withdraws, and transfers, gang bank deposits and withdraws, money picked up off of the ground, and player robbery. Search for: money_log - player_deathLog = false; //False [default] - No death logging. True - Logs victim and killer, and vehicle or weapon if used, when a player dies. Search for: death_log - -/* Performance Settings */ - /* Vehicle Wrecks */ - dead_vehicles_despawn_delay = 30; //delay in seconds before despawning dead vehicles - dead_vehicles_max_units_distance = 300; //maximum distance between wreck and nearest player before despawning (vehicle despawns anyway after specified delay!) - - /* Cleanup */ - vehicles_despawn_max_distance = 1000; //maximum distance between a vehicle and the nearest player, before server puts it back to garage - -/* Database Related Settings */ - /* Player Data Saving */ - save_virtualItems = true; //Save Virtual items (all sides)? - saved_virtualItems[] = { "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","defibrillator","toolkit" }; //Array of virtual items that can be saved on your player. - save_playerStats = true; //Save food, water and damage (all sides)? - save_civilian_weapons = false; //Allow civilians to save weapons on them? - save_civilian_position = false; //Save civilian location? - save_civilian_position_restart = false; //Save civilian location only between restarts. After a server restart you'll have to spawn again. - /* !!!TO SAVE POSITION BETWEEN RESTARTS save_civilian_position MUST BE TRUE!!! */ - save_civilian_positionStrict = false; //Strip the player if possible combat-log? WARNING: Server crashes and lack of reliable syncing can trigger this. - - /* Vehicle Data Saving */ - save_vehicle_virtualItems = false; //Save virtual items inside the vehicle (all sides)(-- See defined items on next line --) - save_vehicle_items[] = { "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","defibrillator","toolkit" }; - save_vehicle_inventory = false; //Save Arma inventory of vehicle to the database - save_vehicle_fuel = false; //Save vehicle fuel level to the database (Impounded/Garaged). - save_vehicle_damage = false; //Save vehicle damage to the database. - save_vehicle_illegal = false; //This will allow cops to be advised when a vehicle, with illegal items in it, is impounded. This will also save illegal items as proof of crime, and needs "save_vehicle_virtualItems" set as true. Illegal items don't need to be set in save_vehicle_items[] for being saved, if it's enabled. - - -/* System Settings */ - /* ATM & Federal Reserve System Configurations */ - global_ATM = true; //Allow users to access any ATM on the map (Marked & Unmarked). - noatm_timer = 10; //Time in minutes that players cannot deposit money after selling stolen gold. - minimum_cops = 5; //Minimum cops required online to rob the Federal Reserve - - /* Messaging Settings */ - message_maxlength = 400; //maximum character count allowed in text messages. Used to prevent improper message displaying. -1 to disable the limit - - /*Death settings*/ - drop_weapons_onDeath = false; //Set true to enable weapon dropping on death. False (default) will delete player weapons on death, allowing them to be revived with them instead - - /* Basic System Configurations */ - donor_level = false; //Enable the donor level set in database (var = life_donorlevel; levels = 0,1,2,3,4,5). ATTENTION! Before enabling, read: https://www.bistudio.com/community/game-content-usage-rules & https://www.bistudio.com/monetization - enable_fatigue = true; //Set to false to disable the ARMA 3 fatigue system. - total_maxWeight = 24; //Static variable for the maximum weight allowed without having a backpack - respawn_timer = 30; //How many seconds a player should wait, before being able to respawn. Minimum 5 seconds. - - /* Channel 7 News Station Configurations */ - news_broadcast_cost = 150000; //Cost for a player to send a news station broadcast. - news_broadcast_cooldown = 20; //Time in minutes that is required between news station broadcasts. (Default = 20 minutes) - news_broadcast_header_length = 60; //Number of characters that a header can consist of. Anything over this may clip. This depends on the font size and various other factors. Adjust with caution. - - /* Clothing System Configurations */ - civ_skins = false; //Enable or disable civilian skins. Before enabling, you must add all the SEVEN files to textures folder. (It must be named as: civilian_uniform_1.jpg, civilian_uniform_2.jpg...civilian_uniform_6.jpg, civilian_uniform_7.jpg) - cop_extendedSkins = false; //Enable or disable cop skins by level. Before enabling, you must add all the EIGHT files to textures folder. (It must be named as: cop_uniform.jpg + cop_uniform_1.jpg, cop_uniform_2.jpg...cop_uniform_6.jpg, cop_uniform_7.jpg; meaning cop_uniform = life_coplevel=0, cop_uniform_1 = life_coplevel=1, cop_uniform_2 = life_coplevel=2, etc...) - clothing_noTP = false; //Disable clothing preview teleport? (true = no teleport. false = teleport) - clothing_box = true; //true = teleport to a black box. false = teleport to somewhere on map. (It only affects the game if clothing_noTP is set as false) - clothing_masks[] = { "H_Shemag_olive", "H_Shemag_khk", "H_Shemag_tan", "H_Shemag_olive_hs", "H_ShemagOpen_khk", "H_ShemagOpen_tan", "G_Balaclava_blk", "G_Balaclava_combat", "G_Balaclava_lowprofile", "G_Balaclava_oli", "G_Bandanna_aviator", "G_Bandanna_beast", "G_Bandanna_blk", "G_Bandanna_khk", "G_Bandanna_oli", "G_Bandanna_shades", "G_Bandanna_sport", "G_Bandanna_tan", "U_O_GhillieSuit", "U_I_GhillieSuit", "U_B_GhillieSuit", "H_RacingHelmet_1_black_F", "H_RacingHelmet_1_red_F", "H_RacingHelmet_1_white_F", "H_RacingHelmet_1_blue_F", "H_RacingHelmet_1_yellow_F", "H_RacingHelmet_1_green_F", "H_RacingHelmet_1_F", "H_RacingHelmet_2_F", "H_RacingHelmet_3_F", "H_RacingHelmet_4_F" }; - - /* Escape Menu Configuration */ - escapeMenu_timer = 10; //Time required to pass before you can click the abort button in the escape menu. - escapeMenu_displayExtras = true; //Display the players UID & serverName specified below in the escape menu. - escapeMenu_displayText = "Thanks for playing!"; //Text displayed in the escape menu. Make it short.. around 20 characters. - - /* Fuel System Configurations */ - pump_service = false; //Allow users to use pump service on the map. Default = false - fuel_cost = 80; //Cost of fuel per liter at fuel stations (if not defined for the vehicle already). - service_chopper = 1000; //Cost to service chopper at chopper service station(Repair/Refuel). - fuelCan_refuel = 250; //Cost to refuel an empty fuel canister at the fuel station pumps. (Be wary of your buy/sell prices on fuel cans to prevent exploits...) - - /* Gang System Configurations */ - gang_price = 75000; //Gang creation price. --Remember they are persistent so keep it reasonable to avoid millions of gangs. - gang_upgradeBase = 10000; //The base cost for purchasing additional slots in a gang - gang_upgradeMultiplier = 2.5; //CURRENTLY NOT IN USE - gang_area[] = {"gang_area_1","gang_area_2","gang_area_3"}; //Variable of gang zone markers - - /* Housing System Configurations */ - house_limit = 5; //Maximum number of houses a player can own. - houseGarage_buyPrice = 1000000; - houseGarage_sellPrice = 350000; - - /* Hunting & Fishing System Configurations */ - animaltypes_fish[] = { "Salema_F", "Ornate_random_F", "Mackerel_F", "Tuna_F", "Mullet_F", "CatShark_F", "Turtle_F" }; //Classnames of fish you can catch - animaltypes_hunting[] = { "Sheep_random_F", "Goat_random_F", "Hen_random_F", "Cock_random_F", "Rabbit_F" }; //Classnames of aniamls you can hunt/gut - - /* Item-related Restrictions */ - restrict_medic_weapons = true; //Set to false to allow medics to use any weapon --true will remove ANY weapon they attempt to use (primary,secondary,launcher) - restrict_clothingPickup = true; //Set to false to allow civilians to pickup/take any uniform (ground/crates/vehicles) - restrict_weaponPickup = false; //Set to false to allow civilians to pickup/take any weapon (ground/crates/vehicles) - restricted_uniforms[] = { "U_Rangemaster", "U_B_CombatUniform_mcam_tshirt", "U_B_CombatUniform_mcam_worn", "U_B_survival_uniform" }; - restricted_weapons[] = { "hgun_P07_snds_F", "arifle_MX_F", "arifle_MXC_F" }; - - /* Jail System Configurations */ - jail_seize_vItems[] = { "spikeStrip","lockpick","goldbar","blastingcharge","boltcutter","defusekit","heroin_unprocessed","heroin_processed","cannabis","marijuana","cocaine_unprocessed","cocaine_processed","turtle_raw" }; //Define VIRTUAL items you want to be removed from players upon jailing here. Use "jail_seize_inventory" for Arma inventory items. - jail_seize_inventory = false; //Set to true to run the cop seize script on inmates. False will remove only weapons and magazines otherwise. (Basically used in case cops forget to seize items). [See Lines 127-131 below] - sendtoJail_locations[] = { "police_hq_1", "police_hq_2", "cop_spawn_3", "cop_spawn_5", "Correctional_Facility" }; //Enter the variableName from the mission.sqm here to allow cops to send a person to jail at these locations. - jail_forceWalk = true; - jail_timeMultiplier = 15; //Put in minutes how long you want your victim in jail. - - /* Medical System Configurations */ - revive_cops = true; //true to enable cops the ability to revive everyone or false for only medics/ems. - revive_civ = false; //true to enable civs the ability to revive everyone or false for only medics/ems or medic/ems/cops. - revive_east = false; //true to enable opfor the ability to revive everyone or false for only medics/ems or medic/ems/cops. - revive_fee = 1500; //Revive fee that players have to pay and medics only EMS(independent) are rewarded with this amount. - hospital_heal_fee = 100; //Fee to heal at a hospital NPC - - /* Paycheck & Bank System Configurations */ - bank_cop = 7000; //Amount of cash in bank for new cops - bank_civ = 3000; //Amount of cash in bank for new civillians - bank_med = 6500; //Amount of cash in bank for new medics - - paycheck_cop = 500; //Payment for cops - paycheck_civ = 350; //Payment for civillians - paycheck_med = 450; //Payment for medics - - paycheck_period = 5; //Scaled in minutes - bank_transferTax = .05; //Tax that player pays when transferring money from ATM. Tax = Amount * multiplier - - /* Player Job System Configurations */ - delivery_points[] = { "dp_1", "dp_2", "dp_3", "dp_4", "dp_5", "dp_6", "dp_7", "dp_8", "dp_9", "dp_10", "dp_11", "dp_12", "dp_13", "dp_14", "dp_15", "dp_15", "dp_16", "dp_17", "dp_18", "dp_19", "dp_20", "dp_21", "dp_22", "dp_23", "dp_24", "dp_25" }; - fuelTank_winMultiplier = 1; //Win Multiplier in FuelTank Missions. Increase for greater payout. Default = 1 - - /* Search & Seizure System Configurations */ - seize_exempt[] = { "Binocular", "ItemWatch", "ItemCompass", "ItemGPS", "ItemMap", "NVGoggles", "FirstAidKit", "ToolKit", "Chemlight_red", "Chemlight_yellow", "Chemlight_green", "Chemlight_blue", "optic_ACO_grn_smg" }; //Arma items that will not get seized from player inventories - seize_uniform[] = { "U_Rangemaster" }; //Any specific uniforms you want to be seized from players - seize_vest[] = { "V_TacVest_blk_POLICE" }; //Any specific vests you want to be seized from players - seize_headgear[] = { "H_Cap_police" }; //Any hats or helmets you want seized from players - seize_minimum_rank = 2; //Required minimum CopLevel to be able to seize items from players - - /* Vehicle System Configurations */ - chopShop_vehicles[] = { "Car", "Air" }; //Vehicles that can be chopped. (Can add: "Ship" and possibly more -> look at the BI wiki...) - vehicle_infiniteRepair[] = {false, false, true, false}; //Set to true for unlimited repairs with 1 toolkit. False will remove toolkit upon use. civilian, west, independent, east - vehicleShop_rentalOnly[] = { "B_MRAP_01_hmg_F", "B_G_Offroad_01_armed_F", "B_Boat_Armed_01_minigun_F" }; //Vehicles that can only be rented and not purchased. (Last only for the session) - vehicleShop_3D = false; //Add preview 3D inside Shop vehicle. Default : False - vehicle_rentalReturn = false; //Can return rental vehicles to 'Store vehicle in garage', doesn't actually store it in garage. - vehicle_plateFormat = "$$## $$$"; //Format of vehicle plates, $ representing letter, # representing number, maximum 9 characters. - vehicle_platePrefix = "AYU "; //Prefix of the plate, can be left blank, max 5 characters. - vehicle_enforceUniquePlate = false; //True to prevent vehicles having the same plates. - - /* Vehicle Purchase Prices */ - vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier - vehicle_purchase_multiplier_COP = .5; //Cop Vehicle Buy Price = Config_Vehicle price * multiplier - vehicle_purchase_multiplier_MEDIC = .75; //Medic Vehicle Buy Price = Config_Vehicle price * multiplier - vehicle_purchase_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. - - /* Vehicle Rental Prices */ - vehicle_rental_multiplier_CIVILIAN = .80; //Civilian Vehicle Rental Price = Config_Vehicle price * multiplier - vehicle_rental_multiplier_COP = .3; //Cop Vehicle Rental Price = Config_Vehicle price * multiplier - vehicle_rental_multiplier_MEDIC = .55; //Medic Vehicle Rental Price = Config_Vehicle price * multiplier - vehicle_rental_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. - - /* Vehicle Sell Prices */ - vehicle_sell_multiplier_CIVILIAN = .5; //Civilian Vehicle Garage Sell Price = Vehicle Buy Price * multiplier - vehicle_sell_multiplier_COP = .5; //Cop Vehicle Garage Sell Price = Vehicle Buy Price * multiplier - vehicle_sell_multiplier_MEDIC = .5; //Medic Vehicle Garage Sell Price = Vehicle Buy Price * multiplier - vehicle_sell_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. - - /* "Other" Vehicle Prices */ - vehicle_chopShop_multiplier = .25; //Chop Shop price for vehicles. TO AVOID EXPLOITS NEVER SET HIGHER THAN A PURCHASE/RENTAL multipler! Payout = Config_vehicle Price * multiplier - vehicle_storage_fee_multiplier = .2; //Pull from garage cost --> Cost takes the playersides Buy Price * multiplier - vehicle_cop_impound_multiplier = .1; //TO AVOID EXPLOITS NEVER SET HIGHER THAN A PURCHASE/RENTAL multipler! Payout = Config_vehicle Price * multiplier - - disableCommanderView = true; //false - Group leaders can access the commander view. true [default] - Group leaders cannot access the commander view. - //Commander/tactical view is accessed via pressing . [NUM] by default. It raises the camera significantly higher and steeper above the player in order to give a boarder tactical view of the surrounding area. - - /* Wanted System Settings * - /* crimes[] = {String, Bounty, Code} */ - crimes[] = { - {"STR_Crime_187V","650","187V"}, - {"STR_Crime_187","2000","187"}, - {"STR_Crime_901","450","901"}, - {"STR_Crime_215","200","215"}, - {"STR_Crime_213","1000","213"}, - {"STR_Crime_211","100","211"}, - {"STR_Crime_207","350","207"}, - {"STR_Crime_207A","200","207A"}, - {"STR_Crime_390","1500","390"}, - {"STR_Crime_487","150","487"}, - {"STR_Crime_488","70","488"}, - {"STR_Crime_480","100","480"}, - {"STR_Crime_481","100","481"}, - {"STR_Crime_482","500","482"}, - {"STR_Crime_483","950","483"}, - {"STR_Crime_459","650","459"}, - {"STR_Crime_666","200","666"}, - {"STR_Crime_667","4500","667"}, - {"STR_Crime_668","1500","668"}, - {"STR_Crime_1","250","1"}, - {"STR_Crime_2","200","2"}, - {"STR_Crime_3","150","3"}, - {"STR_Crime_4","250","4"}, - {"STR_Crime_5","100","5"}, - {"STR_Crime_6","80","6"}, - {"STR_Crime_7","150","7"}, - {"STR_Crime_8","5000","8"}, - {"STR_Crime_9","5000","9"}, - {"STR_Crime_10","15000","10"}, - {"STR_Crime_11","10000","11"}, - {"STR_Crime_12","2500","12"}, - {"STR_Crime_13","1500","13"}, - {"STR_Crime_14","500","14"}, - {"STR_Crime_15","2500","15"}, - {"STR_Crime_16","1500","16"}, - {"STR_Crime_17","100","17"}, - {"STR_Crime_18","1500","18"}, - {"STR_Crime_19","2500","19"}, - {"STR_Crime_20","500","20"}, - {"STR_Crime_21","500","21"}, - {"STR_Crime_22","2000","22"}, - {"STR_Crime_23","5000","23"}, - {"STR_Crime_24","10000","24"}, - {"STR_Crime_25","20000","25"} - }; - - /* ! --- Do not change --- ! */ - framework_version = "6.0.0"; - /* ------------------------- */ - -}; - -#include "Config_Clothing.hpp" -#include "Config_Licenses.hpp" -#include "Config_Vehicles.hpp" -#include "Config_vItems.hpp" -#include "Config_Weapons.hpp" -#include "Config_Gather.hpp" -#include "Config_SpawnPoints.hpp" -#include "Config_Process.hpp" -#include "Config_Housing.hpp" -#include "Config_Garages.hpp" -#include "Config_Loadouts.hpp" +#define true 1 +#define false 0 + +/* + Master settings for various features and functionality +*/ +class Life_Settings { +/* Logging and Security Settings*/ + /* Security Settings */ + spyGlass_toggle = true; //Spyglass On/Off Toggle --> True = On & False = Off + + /* Data Logging Settings */ + battlEye_friendlyLogging = false; //False [default] - Read the logs from the server.rpt. True - Read the logs from the publicVariable.log. NOTE: Due to how diag_log works it will log to both files either way and the setting is merely for beautification purposes. + player_advancedLog = false; //False [default] - No advanced logging. True - Logs house purchase and sale, vehicle purchase, sale, and chop shopping, police arrests, and gang creations. Search for: advanced_log + player_moneyLog = false; //False [default] - No money logging. True - Logs player bank deposits, withdraws, and transfers, gang bank deposits and withdraws, money picked up off of the ground, and player robbery. Search for: money_log + player_deathLog = false; //False [default] - No death logging. True - Logs victim and killer, and vehicle or weapon if used, when a player dies. Search for: death_log + +/* Performance Settings */ + /* Vehicle Wrecks */ + dead_vehicles_despawn_delay = 30; //delay in seconds before despawning dead vehicles + dead_vehicles_max_units_distance = 300; //maximum distance between wreck and nearest player before despawning (vehicle despawns anyway after specified delay!) + + /* Cleanup */ + vehicles_despawn_max_distance = 1000; //maximum distance between a vehicle and the nearest player, before server puts it back to garage + +/* Database Related Settings */ + /* Player Data Saving */ + save_virtualItems = true; //Save Virtual items (all sides)? + saved_virtualItems[] = { "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","defibrillator","toolkit" }; //Array of virtual items that can be saved on your player. + save_playerStats = true; //Save food, water and damage (all sides)? + save_civilian_weapons = false; //Allow civilians to save weapons on them? + save_civilian_position = false; //Save civilian location? + save_civilian_position_restart = false; //Save civilian location only between restarts. After a server restart you'll have to spawn again. + /* !!!TO SAVE POSITION BETWEEN RESTARTS save_civilian_position MUST BE TRUE!!! */ + save_civilian_positionStrict = false; //Strip the player if possible combat-log? WARNING: Server crashes and lack of reliable syncing can trigger this. + + /* Vehicle Data Saving */ + save_vehicle_virtualItems = false; //Save virtual items inside the vehicle (all sides)(-- See defined items on next line --) + save_vehicle_items[] = { "pickaxe","fuelEmpty","fuelFull", "spikeStrip", "lockpick", "defuseKit","storageSmall","storageBig","redgull","coffee","waterBottle","apple","peach","tbacon","donuts","rabbit","salema","ornate","mackerel","tuna","mullet","catshark","turtle_soup","hen","rooster","sheep","goat","defibrillator","toolkit" }; + save_vehicle_inventory = false; //Save Arma inventory of vehicle to the database + save_vehicle_fuel = false; //Save vehicle fuel level to the database (Impounded/Garaged). + save_vehicle_damage = false; //Save vehicle damage to the database. + save_vehicle_illegal = false; //This will allow cops to be advised when a vehicle, with illegal items in it, is impounded. This will also save illegal items as proof of crime, and needs "save_vehicle_virtualItems" set as true. Illegal items don't need to be set in save_vehicle_items[] for being saved, if it's enabled. + + +/* System Settings */ + /* ATM & Federal Reserve System Configurations */ + global_ATM = true; //Allow users to access any ATM on the map (Marked & Unmarked). + noatm_timer = 10; //Time in minutes that players cannot deposit money after selling stolen gold. + minimum_cops = 5; //Minimum cops required online to rob the Federal Reserve + + /* Messaging Settings */ + message_maxlength = 400; //maximum character count allowed in text messages. Used to prevent improper message displaying. -1 to disable the limit + + /*Death settings*/ + drop_weapons_onDeath = false; //Set true to enable weapon dropping on death. False (default) will delete player weapons on death, allowing them to be revived with them instead + + /* Basic System Configurations */ + donor_level = false; //Enable the donor level set in database (var = life_donorlevel; levels = 0,1,2,3,4,5). ATTENTION! Before enabling, read: https://www.bistudio.com/community/game-content-usage-rules & https://www.bistudio.com/monetization + enable_fatigue = true; //Set to false to disable the ARMA 3 fatigue system. + total_maxWeight = 24; //Static variable for the maximum weight allowed without having a backpack + respawn_timer = 30; //How many seconds a player should wait, before being able to respawn. Minimum 5 seconds. + + /* Channel 7 News Station Configurations */ + news_broadcast_cost = 150000; //Cost for a player to send a news station broadcast. + news_broadcast_cooldown = 20; //Time in minutes that is required between news station broadcasts. (Default = 20 minutes) + news_broadcast_header_length = 60; //Number of characters that a header can consist of. Anything over this may clip. This depends on the font size and various other factors. Adjust with caution. + + /* Clothing System Configurations */ + civ_skins = false; //Enable or disable civilian skins. Before enabling, you must add all the SEVEN files to textures folder. (It must be named as: civilian_uniform_1.jpg, civilian_uniform_2.jpg...civilian_uniform_6.jpg, civilian_uniform_7.jpg) + cop_extendedSkins = false; //Enable or disable cop skins by level. Before enabling, you must add all the EIGHT files to textures folder. (It must be named as: cop_uniform.jpg + cop_uniform_1.jpg, cop_uniform_2.jpg...cop_uniform_6.jpg, cop_uniform_7.jpg; meaning cop_uniform = life_coplevel=0, cop_uniform_1 = life_coplevel=1, cop_uniform_2 = life_coplevel=2, etc...) + clothing_noTP = false; //Disable clothing preview teleport? (true = no teleport. false = teleport) + clothing_box = true; //true = teleport to a black box. false = teleport to somewhere on map. (It only affects the game if clothing_noTP is set as false) + clothing_masks[] = { "H_Shemag_olive", "H_Shemag_khk", "H_Shemag_tan", "H_Shemag_olive_hs", "H_ShemagOpen_khk", "H_ShemagOpen_tan", "G_Balaclava_blk", "G_Balaclava_combat", "G_Balaclava_lowprofile", "G_Balaclava_oli", "G_Bandanna_aviator", "G_Bandanna_beast", "G_Bandanna_blk", "G_Bandanna_khk", "G_Bandanna_oli", "G_Bandanna_shades", "G_Bandanna_sport", "G_Bandanna_tan", "U_O_GhillieSuit", "U_I_GhillieSuit", "U_B_GhillieSuit", "H_RacingHelmet_1_black_F", "H_RacingHelmet_1_red_F", "H_RacingHelmet_1_white_F", "H_RacingHelmet_1_blue_F", "H_RacingHelmet_1_yellow_F", "H_RacingHelmet_1_green_F", "H_RacingHelmet_1_F", "H_RacingHelmet_2_F", "H_RacingHelmet_3_F", "H_RacingHelmet_4_F" }; + + /* Escape Menu Configuration */ + escapeMenu_timer = 10; //Time required to pass before you can click the abort button in the escape menu. + escapeMenu_displayExtras = true; //Display the players UID & serverName specified below in the escape menu. + escapeMenu_displayText = "Thanks for playing!"; //Text displayed in the escape menu. Make it short.. around 20 characters. + + /* Fuel System Configurations */ + pump_service = false; //Allow users to use pump service on the map. Default = false + fuel_cost = 80; //Cost of fuel per liter at fuel stations (if not defined for the vehicle already). + service_chopper = 1000; //Cost to service chopper at chopper service station(Repair/Refuel). + fuelCan_refuel = 250; //Cost to refuel an empty fuel canister at the fuel station pumps. (Be wary of your buy/sell prices on fuel cans to prevent exploits...) + + /* Gang System Configurations */ + gang_price = 75000; //Gang creation price. --Remember they are persistent so keep it reasonable to avoid millions of gangs. + gang_upgradeBase = 10000; //The base cost for purchasing additional slots in a gang + gang_upgradeMultiplier = 2.5; //CURRENTLY NOT IN USE + gang_area[] = {"gang_area_1","gang_area_2","gang_area_3"}; //Variable of gang zone markers + + /* Housing System Configurations */ + house_limit = 5; //Maximum number of houses a player can own. + houseGarage_buyPrice = 1000000; + houseGarage_sellPrice = 350000; + + /* Hunting & Fishing System Configurations */ + animaltypes_fish[] = { "Salema_F", "Ornate_random_F", "Mackerel_F", "Tuna_F", "Mullet_F", "CatShark_F", "Turtle_F" }; //Classnames of fish you can catch + animaltypes_hunting[] = { "Sheep_random_F", "Goat_random_F", "Hen_random_F", "Cock_random_F", "Rabbit_F" }; //Classnames of aniamls you can hunt/gut + + /* Item-related Restrictions */ + restrict_medic_weapons = true; //Set to false to allow medics to use any weapon --true will remove ANY weapon they attempt to use (primary,secondary,launcher) + restrict_clothingPickup = true; //Set to false to allow civilians to pickup/take any uniform (ground/crates/vehicles) + restrict_weaponPickup = false; //Set to false to allow civilians to pickup/take any weapon (ground/crates/vehicles) + restricted_uniforms[] = { "U_Rangemaster", "U_B_CombatUniform_mcam_tshirt", "U_B_CombatUniform_mcam_worn", "U_B_survival_uniform" }; + restricted_weapons[] = { "hgun_P07_snds_F", "arifle_MX_F", "arifle_MXC_F" }; + + /* Jail System Configurations */ + jail_seize_vItems[] = { "spikeStrip","lockpick","goldbar","blastingcharge","boltcutter","defusekit","heroin_unprocessed","heroin_processed","cannabis","marijuana","cocaine_unprocessed","cocaine_processed","turtle_raw" }; //Define VIRTUAL items you want to be removed from players upon jailing here. Use "jail_seize_inventory" for Arma inventory items. + jail_seize_inventory = false; //Set to true to run the cop seize script on inmates. False will remove only weapons and magazines otherwise. (Basically used in case cops forget to seize items). [See Lines 127-131 below] + sendtoJail_locations[] = { "police_hq_1", "police_hq_2", "cop_spawn_3", "cop_spawn_5", "Correctional_Facility" }; //Enter the variableName from the mission.sqm here to allow cops to send a person to jail at these locations. + jail_forceWalk = true; + jail_timeMultiplier = 15; //Put in minutes how long you want your victim in jail. + + /* Medical System Configurations */ + revive_cops = true; //true to enable cops the ability to revive everyone or false for only medics/ems. + revive_civ = false; //true to enable civs the ability to revive everyone or false for only medics/ems or medic/ems/cops. + revive_east = false; //true to enable opfor the ability to revive everyone or false for only medics/ems or medic/ems/cops. + revive_fee = 1500; //Revive fee that players have to pay and medics only EMS(independent) are rewarded with this amount. + hospital_heal_fee = 100; //Fee to heal at a hospital NPC + + /* Paycheck & Bank System Configurations */ + bank_cop = 7000; //Amount of cash in bank for new cops + bank_civ = 3000; //Amount of cash in bank for new civillians + bank_med = 6500; //Amount of cash in bank for new medics + + paycheck_cop = 500; //Payment for cops + paycheck_civ = 350; //Payment for civillians + paycheck_med = 450; //Payment for medics + + paycheck_period = 5; //Scaled in minutes + bank_transferTax = .05; //Tax that player pays when transferring money from ATM. Tax = Amount * multiplier + + /* Player Job System Configurations */ + delivery_points[] = { "dp_1", "dp_2", "dp_3", "dp_4", "dp_5", "dp_6", "dp_7", "dp_8", "dp_9", "dp_10", "dp_11", "dp_12", "dp_13", "dp_14", "dp_15", "dp_15", "dp_16", "dp_17", "dp_18", "dp_19", "dp_20", "dp_21", "dp_22", "dp_23", "dp_24", "dp_25" }; + fuelTank_winMultiplier = 1; //Win Multiplier in FuelTank Missions. Increase for greater payout. Default = 1 + + /* Search & Seizure System Configurations */ + seize_exempt[] = { "Binocular", "ItemWatch", "ItemCompass", "ItemGPS", "ItemMap", "NVGoggles", "FirstAidKit", "ToolKit", "Chemlight_red", "Chemlight_yellow", "Chemlight_green", "Chemlight_blue", "optic_ACO_grn_smg" }; //Arma items that will not get seized from player inventories + seize_uniform[] = { "U_Rangemaster" }; //Any specific uniforms you want to be seized from players + seize_vest[] = { "V_TacVest_blk_POLICE" }; //Any specific vests you want to be seized from players + seize_headgear[] = { "H_Cap_police" }; //Any hats or helmets you want seized from players + seize_minimum_rank = 2; //Required minimum CopLevel to be able to seize items from players + + /* Vehicle System Configurations */ + chopShop_vehicles[] = { "Car", "Air" }; //Vehicles that can be chopped. (Can add: "Ship" and possibly more -> look at the BI wiki...) + vehicle_infiniteRepair[] = {false, false, true, false}; //Set to true for unlimited repairs with 1 toolkit. False will remove toolkit upon use. civilian, west, independent, east + vehicleShop_rentalOnly[] = { "B_MRAP_01_hmg_F", "B_G_Offroad_01_armed_F", "B_Boat_Armed_01_minigun_F" }; //Vehicles that can only be rented and not purchased. (Last only for the session) + vehicleShop_3D = false; //Add preview 3D inside Shop vehicle. Default : False + vehicle_rentalReturn = false; //Can return rental vehicles to 'Store vehicle in garage', doesn't actually store it in garage. + vehicle_plateFormat = "$$## $$$"; //Format of vehicle plates, $ representing letter, # representing number, maximum 9 characters. + vehicle_platePrefix = "AYU "; //Prefix of the plate, can be left blank, max 5 characters, can be left blank (""). + vehicle_enforceUniquePlate = false; //True to prevent vehicles having the same plates. + + /* Vehicle Purchase Prices */ + vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier + vehicle_purchase_multiplier_COP = .5; //Cop Vehicle Buy Price = Config_Vehicle price * multiplier + vehicle_purchase_multiplier_MEDIC = .75; //Medic Vehicle Buy Price = Config_Vehicle price * multiplier + vehicle_purchase_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. + + /* Vehicle Rental Prices */ + vehicle_rental_multiplier_CIVILIAN = .80; //Civilian Vehicle Rental Price = Config_Vehicle price * multiplier + vehicle_rental_multiplier_COP = .3; //Cop Vehicle Rental Price = Config_Vehicle price * multiplier + vehicle_rental_multiplier_MEDIC = .55; //Medic Vehicle Rental Price = Config_Vehicle price * multiplier + vehicle_rental_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. + + /* Vehicle Sell Prices */ + vehicle_sell_multiplier_CIVILIAN = .5; //Civilian Vehicle Garage Sell Price = Vehicle Buy Price * multiplier + vehicle_sell_multiplier_COP = .5; //Cop Vehicle Garage Sell Price = Vehicle Buy Price * multiplier + vehicle_sell_multiplier_MEDIC = .5; //Medic Vehicle Garage Sell Price = Vehicle Buy Price * multiplier + vehicle_sell_multiplier_OPFOR = -1; // -- NOT IN USE -- Simply left in for east support. + + /* "Other" Vehicle Prices */ + vehicle_chopShop_multiplier = .25; //Chop Shop price for vehicles. TO AVOID EXPLOITS NEVER SET HIGHER THAN A PURCHASE/RENTAL multipler! Payout = Config_vehicle Price * multiplier + vehicle_storage_fee_multiplier = .2; //Pull from garage cost --> Cost takes the playersides Buy Price * multiplier + vehicle_cop_impound_multiplier = .1; //TO AVOID EXPLOITS NEVER SET HIGHER THAN A PURCHASE/RENTAL multipler! Payout = Config_vehicle Price * multiplier + + disableCommanderView = true; //false - Group leaders can access the commander view. true [default] - Group leaders cannot access the commander view. + //Commander/tactical view is accessed via pressing . [NUM] by default. It raises the camera significantly higher and steeper above the player in order to give a boarder tactical view of the surrounding area. + + /* Wanted System Settings * + /* crimes[] = {String, Bounty, Code} */ + crimes[] = { + {"STR_Crime_187V","650","187V"}, + {"STR_Crime_187","2000","187"}, + {"STR_Crime_901","450","901"}, + {"STR_Crime_215","200","215"}, + {"STR_Crime_213","1000","213"}, + {"STR_Crime_211","100","211"}, + {"STR_Crime_207","350","207"}, + {"STR_Crime_207A","200","207A"}, + {"STR_Crime_390","1500","390"}, + {"STR_Crime_487","150","487"}, + {"STR_Crime_488","70","488"}, + {"STR_Crime_480","100","480"}, + {"STR_Crime_481","100","481"}, + {"STR_Crime_482","500","482"}, + {"STR_Crime_483","950","483"}, + {"STR_Crime_459","650","459"}, + {"STR_Crime_666","200","666"}, + {"STR_Crime_667","4500","667"}, + {"STR_Crime_668","1500","668"}, + {"STR_Crime_1","250","1"}, + {"STR_Crime_2","200","2"}, + {"STR_Crime_3","150","3"}, + {"STR_Crime_4","250","4"}, + {"STR_Crime_5","100","5"}, + {"STR_Crime_6","80","6"}, + {"STR_Crime_7","150","7"}, + {"STR_Crime_8","5000","8"}, + {"STR_Crime_9","5000","9"}, + {"STR_Crime_10","15000","10"}, + {"STR_Crime_11","10000","11"}, + {"STR_Crime_12","2500","12"}, + {"STR_Crime_13","1500","13"}, + {"STR_Crime_14","500","14"}, + {"STR_Crime_15","2500","15"}, + {"STR_Crime_16","1500","16"}, + {"STR_Crime_17","100","17"}, + {"STR_Crime_18","1500","18"}, + {"STR_Crime_19","2500","19"}, + {"STR_Crime_20","500","20"}, + {"STR_Crime_21","500","21"}, + {"STR_Crime_22","2000","22"}, + {"STR_Crime_23","5000","23"}, + {"STR_Crime_24","10000","24"}, + {"STR_Crime_25","20000","25"} + }; + + /* ! --- Do not change --- ! */ + framework_version = "6.0.0"; + /* ------------------------- */ + +}; + +#include "Config_Clothing.hpp" +#include "Config_Licenses.hpp" +#include "Config_Vehicles.hpp" +#include "Config_vItems.hpp" +#include "Config_Weapons.hpp" +#include "Config_Gather.hpp" +#include "Config_SpawnPoints.hpp" +#include "Config_Process.hpp" +#include "Config_Housing.hpp" +#include "Config_Garages.hpp" +#include "Config_Loadouts.hpp" diff --git a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf index ed021980e..72094f075 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf @@ -27,7 +27,7 @@ private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N", private _plate = ""; while {_plate isEqualTo ""} do { - private _randomPlate = []; + private _randomPlate = [_platePrefix]; { if (_x isEqualTo "$") then { _randomPlate pushBack (selectRandom _letterArray); @@ -48,7 +48,6 @@ while {_plate isEqualTo ""} do { _plate = _randomPlate; }; }; -_plate = format["%1%2",_platePrefix,_plate]; private _vid = -1; if (_purchase) then { diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 7d2904fc0..91348c10f 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -24,7 +24,7 @@ private _letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N", private _plate = ""; while {_plate isEqualTo ""} do { - private _randomPlate = []; + private _randomPlate = [_platePrefix]; { if (_x isEqualTo "$") then { _randomPlate pushBack (selectRandom _letterArray); @@ -45,7 +45,6 @@ while {_plate isEqualTo ""} do { _plate = _randomPlate; }; }; -_plate = format["%1%2",_platePrefix,_plate]; private _vid = -1; if (_purchase) then { From 8957a9133e058a6f5332f50983564c8e0df94315 Mon Sep 17 00:00:00 2001 From: dom Date: Mon, 27 Dec 2021 23:16:21 +0000 Subject: [PATCH 33/40] SQM edits for garages --- SQMs/missionAltis.sqm | 8 ++++---- SQMs/missionTanoa.sqm | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/SQMs/missionAltis.sqm b/SQMs/missionAltis.sqm index 6b4b78dee..e7c7f8b8e 100644 --- a/SQMs/missionAltis.sqm +++ b/SQMs/missionAltis.sqm @@ -33210,7 +33210,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_1"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_1"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; disableSimulation=1; }; id=986; @@ -33638,7 +33638,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""cop_ship"",west,""cop_ship_1"",""cop"",""APD - Kavala District - Boat Store""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo west',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5]; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""cop_ship"",west,""cop_ship_1"",""cop"",""APD - Kavala District - Boat Store""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo west',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5]; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; disableSimulation=1; }; id=992; @@ -36639,7 +36639,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_3"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_3""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_3"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_3""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; disableSimulation=1; }; id=1033; @@ -38037,7 +38037,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_2"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_2""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_2"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_2""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; disableSimulation=1; }; id=1052; diff --git a/SQMs/missionTanoa.sqm b/SQMs/missionTanoa.sqm index 083ad2b49..93c4b769d 100644 --- a/SQMs/missionTanoa.sqm +++ b/SQMs/missionTanoa.sqm @@ -17107,7 +17107,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_1"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_1"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; disableSimulation=1; }; id=986; @@ -17535,7 +17535,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""cop_ship"",west,""cop_ship_1"",""cop"",""APD - Kavala District - Boat Store""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""cop_ship"",west,""cop_ship_1"",""cop"",""APD - Kavala District - Boat Store""]]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""cop_ship_1""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo west']; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store']; this setObjectTextureGlobal [0,""textures\cop_uniform.jpg""];"; disableSimulation=1; }; id=992; @@ -20443,7 +20443,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_3"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_3""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_3"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_3""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; disableSimulation=1; }; id=1033; @@ -21824,7 +21824,7 @@ class Mission class Attributes { skill=0.60000002; - init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_2"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [getPlayerUID player,playerSide,""Ship"",player] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_2""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; + init="this enableSimulation false; this allowDamage false; this addAction[localize""STR_MAR_Boat_Shop"",life_fnc_vehicleShopMenu,[""civ_ship"",civilian,""civ_ship_2"",""civ"",""Billy's Boat Rentals & Ownership""],1.5,true,true,"""",""true"",5]; this addAction[localize""STR_Garage_Title"", { if (life_HC_isActive) then { [player,""Ship""] remoteExecCall [""HC_fnc_getVehicles"",HC_Life]; } else { [player,""Ship""] remoteExecCall [""TON_fnc_getVehicles"",2];}; createDialog ""Life_impound_menu""; disableSerialization; ctrlSetText[2802,""Fetching Vehicles....""]; life_garage_sp = ""civ_ship_2""; life_garage_type = ""Ship""; },"""",0,false,false,"""",'playerSide isEqualTo civilian',5]; this addAction[localize""STR_MAR_Store_vehicle_in_Garage"",life_fnc_storeVehicle,"""",0,false,false,"""",'!life_garage_store',5];"; disableSimulation=1; }; id=1052; From 547b31caf8fc417a9a80fda967ba0504e97c765c Mon Sep 17 00:00:00 2001 From: dom Date: Mon, 27 Dec 2021 23:42:06 +0000 Subject: [PATCH 34/40] Fix inserting into DB --- .../Functions/Systems/fn_vehicleCreate.sqf | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 91348c10f..33f7f4268 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -46,21 +46,6 @@ while {_plate isEqualTo ""} do { }; }; -private _vid = -1; -if (_purchase) then { - private _type = call { - if (_vehicle isKindOf "Car") exitWith {"Car"}; - if (_vehicle isKindOf "Air") exitWith {"Air"}; - if (_vehicle isKindOf "Ship") exitWith {"Ship"}; - }; - - private _side = [_unit,true] call life_util_fnc_sideToString; - - private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; - private _queryResult = [_query, 2] call DB_fnc_asyncCall; - _vid = _queryResult select 0; -}; - private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; _vehicle setDir (markerDir _spawnPoint); @@ -78,7 +63,21 @@ _vehicle setVariable ["trunk_in_use",false,true]; _vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; _vehicle setPlateNumber _plate; _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber + +private _vid = -1; if (_purchase) then { + private _type = call { + if (_vehicle isKindOf "Car") exitWith {"Car"}; + if (_vehicle isKindOf "Air") exitWith {"Air"}; + if (_vehicle isKindOf "Ship") exitWith {"Ship"}; + }; + + private _side = [_unit,true] call life_util_fnc_sideToString; + + private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; + private _queryResult = [_query, 2] call DB_fnc_asyncCall; + _vid = _queryResult select 0; + [_vehicle,_vid] spawn { params ["_vehicle","_vid"]; uiSleep 0.3; From 77e6b49f0db3d04bea00fa287c49c6546a6b6b00 Mon Sep 17 00:00:00 2001 From: dom Date: Tue, 28 Dec 2021 00:19:41 +0000 Subject: [PATCH 35/40] Default value and cleanup --- Altis_Life.Altis/core/utils/fn_sideToString.sqf | 2 +- life_server/Functions/Systems/fn_vehicleCreate.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Altis_Life.Altis/core/utils/fn_sideToString.sqf b/Altis_Life.Altis/core/utils/fn_sideToString.sqf index eed94a860..fc919a898 100644 --- a/Altis_Life.Altis/core/utils/fn_sideToString.sqf +++ b/Altis_Life.Altis/core/utils/fn_sideToString.sqf @@ -3,7 +3,7 @@ Author: DomT602 Description: Translates a side to a string representing the side. - To-do - add to functions.hpp, add to spyglass, move into utils folder + To-do - add to spyglass */ params [ ["_unit",objNull,[objNull]], diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 33f7f4268..25c6de808 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -76,7 +76,7 @@ if (_purchase) then { private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; private _queryResult = [_query, 2] call DB_fnc_asyncCall; - _vid = _queryResult select 0; + _queryResult params [["_vid",-1,[0]]]; [_vehicle,_vid] spawn { params ["_vehicle","_vid"]; From d597dc8481e9ce714c68cb5492a182faac77b521 Mon Sep 17 00:00:00 2001 From: dom Date: Tue, 28 Dec 2021 01:18:11 +0000 Subject: [PATCH 36/40] Review and match HC --- life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf | 29 +++++++++---------- .../Functions/Systems/fn_vehicleCreate.sqf | 2 +- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf index 72094f075..3cff44ee3 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf @@ -49,21 +49,6 @@ while {_plate isEqualTo ""} do { }; }; -private _vid = -1; -if (_purchase) then { - private _type = call { - if (_vehicle isKindOf "Car") exitWith {"Car"}; - if (_vehicle isKindOf "Air") exitWith {"Air"}; - if (_vehicle isKindOf "Ship") exitWith {"Ship"}; - }; - - private _side = [_unit,true] call life_util_fnc_sideToString; - - private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; - private _queryResult = [_query, 2] call HC_fnc_asyncCall; - _vid = _queryResult select 0; -}; - private _vehicle = createVehicle [_className,getMarkerPos _spawnPoint,[],0]; _vehicle setDir (markerDir _spawnPoint); @@ -81,7 +66,21 @@ _vehicle setVariable ["trunk_in_use",false,true]; _vehicle setVariable ["vehicle_info_owners",[[_uid,name _unit]],true]; _vehicle setPlateNumber _plate; _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for setPlateNumber + +private _vid = -1; if (_purchase) then { + private _type = call { + if (_vehicle isKindOf "Air") exitWith {"Air"}; + if (_vehicle isKindOf "Ship") exitWith {"Ship"}; + "Car" + }; + + private _side = [_unit,true] call life_util_fnc_sideToString; + + private _query = format ["insertVehicle:%1:%2:%3:%4:%5:%6", _side, _className, _type, _uid, _color, _plate]; + private _queryResult = [_query, 2] call HC_fnc_asyncCall; + _queryResult params [["_vid",-1,[0]]]; + [_vehicle,_vid] spawn { params ["_vehicle","_vid"]; uiSleep 0.3; diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf index 25c6de808..5a1c0dca9 100755 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -67,9 +67,9 @@ _vehicle setVariable ["plate", _plate, true]; //'Air' don't work properly for se private _vid = -1; if (_purchase) then { private _type = call { - if (_vehicle isKindOf "Car") exitWith {"Car"}; if (_vehicle isKindOf "Air") exitWith {"Air"}; if (_vehicle isKindOf "Ship") exitWith {"Ship"}; + "Car" }; private _side = [_unit,true] call life_util_fnc_sideToString; From 226d6d6426ed18e1b9c371ecb1ee9800de70cb05 Mon Sep 17 00:00:00 2001 From: dom Date: Tue, 28 Dec 2021 01:36:53 +0000 Subject: [PATCH 37/40] Oops --- Altis_Life.Altis/config/Config_Master.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 06fdceb79..46f04c143 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -50,6 +50,9 @@ class Life_Settings { minimum_cops = 5; //Minimum cops required online to rob the Federal Reserve fed_chargeTime = 5; //Time in minutes for the explosive charge at the Federal Reserve to explode + /* Messaging Settings */ + message_maxlength = 400; //maximum character count allowed in text messages. Used to prevent improper message displaying. -1 to disable the limit + /*Death settings*/ drop_weapons_onDeath = false; //Set true to enable weapon dropping on death. False (default) will delete player weapons on death, allowing them to be revived with them instead From 9c4ad3ea1007a4fee4c328668bbd56fa2e33a1de Mon Sep 17 00:00:00 2001 From: dom Date: Tue, 28 Dec 2021 11:50:25 +0000 Subject: [PATCH 38/40] Final changes --- Altis_Life.Altis/config/Config_SpyGlass.hpp | 2 +- Altis_Life.Altis/core/pmenu/fn_keyGive.sqf | 2 +- life_hc/MySQL/Vehicles/fn_chopShopSell.sqf | 4 ++-- life_hc/initHC.sqf | 7 ------- life_server/Functions/Systems/fn_chopShopSell.sqf | 4 ++-- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 4dafc0978..0eb5a15fa 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -341,7 +341,7 @@ class SpyGlass { { "cheat2", "BOOL" }, { "gang_flag_2", "OBJECT" }, { "life_interrupted", "BOOL" }, { "license_civ_dive", "BOOL" }, { "cheat3", "BOOL" }, { "bank_obj", "OBJECT" }, { "gang_flag_3", "OBJECT" }, { "life_inv_cocaineprocessed", "SCALAR" }, { "cheat4", "BOOL" }, { "paramsarray", "ARRAY" }, { "life_maxweight", "SCALAR" }, { "life_cash", "SCALAR" }, { "life_inv_salemaraw", "SCALAR" }, { "cheat5", "BOOL" }, { "param1", "SCALAR" }, { "bis_deathcc", "SCALAR" }, { "life_clothing_filter", "SCALAR" }, { "life_inv_rock", "SCALAR" }, { "life_inv_turtleraw", "SCALAR" }, { "life_garage_prices", "CODE" }, { "cheat6", "BOOL" }, { "param2", "SCALAR" }, { "life_thirst", "SCALAR" }, { "life_inv_fuelfull", "SCALAR" }, { "cheat7", "BOOL" }, { "life_trunk_vehicle", "OBJECT" }, { "cheat8", "BOOL" }, { "life_inv_oilunprocessed", "SCALAR" }, { "life_inv_cocaineunprocessed", "SCALAR" }, { "life_inv_catshark", "SCALAR" }, { "license_civ_oil", "BOOL" }, { "cheat9", "BOOL" }, { "life_mediclevel", "CODE" }, { "jjjj_mmmm___eeeeeee_spawn_veh", "CODE" }, { "life_spawn_point", "ARRAY" }, { "life_inv_mackerelraw", "SCALAR" }, { "life_radio_civ", "SCALAR" }, - { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "serv_sv_use", "ARRAY" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, + { "life_inv_rabbit", "SCALAR" }, { "bis_performpp", "BOOL" }, { "bis_totdesatcc", "SCALAR" }, { "e_x_t_a_s_y_anti_anti_hax", "CODE" }, { "life_inv_mulletraw", "SCALAR" }, { "dp_20", "OBJECT" }, { "bis_fakedamage", "SCALAR" }, { "bis_respawned", "BOOL" }, { "dp_21", "OBJECT" }, { "bis_burncc", "SCALAR" }, { "bis_myoxygen", "SCALAR" }, { "dp_22", "OBJECT" }, { "bis_randomseed1", "ARRAY" }, { "dp_23", "OBJECT" }, { "bis_randomseed2", "ARRAY" }, { "life_radio_west", "SCALAR" }, { "life_radio_indep", "SCALAR" }, { "bis_suffradialblur", "SCALAR" }, { "life_impound_inuse", "BOOL" }, { "dp_24", "OBJECT" }, { "reb_plane", "OBJECT" }, { "station_shop_22_1", "OBJECT" }, { "civ_plane_1", "OBJECT" }, { "massi_1", "OBJECT" }, { "reb_car_1", "OBJECT" }, { "life_inv_apple", "SCALAR" }, { "dp_25", "OBJECT" }, { "life_inv_sheepraw", "SCALAR" }, { "license_civ_boat", "BOOL" }, { "life_vehicles", "ARRAY" }, { "a1", "OBJECT" }, { "bis_applypp1", "BOOL" }, { "life_inv_ironunrefined", "SCALAR" }, { "carshop1_3_1", "OBJECT" }, { "bis_applypp2", "BOOL" }, { "bis_ppdestroyed", "BOOL" }, { "bis_applypp3", "BOOL" }, { "license_shop_1", "OBJECT" }, { "bis_applypp4", "BOOL" }, { "life_inv_heroinprocessed", "SCALAR" }, { "license_shop_2", "OBJECT" }, { "air_sp", "OBJECT" }, { "bis_applypp5", "BOOL" }, { "bis_uncradialblur", "SCALAR" }, { "license_shop_3", "OBJECT" }, { "life_sql_id", "CODE" }, { "bis_applypp6", "BOOL" }, { "e_x_t_a_s_y_pro_re", "CODE" }, { "life_inv_coffee", "SCALAR" }, { "life_inv_turtlesoup", "SCALAR" }, diff --git a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf index 8020336a1..bd2888234 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf @@ -24,7 +24,7 @@ private _uid = getPlayerUID _unit; private _owners = _vehicle getVariable "vehicle_info_owners"; private _insertedIndex = _owners pushBackUnique [_uid,_unit getVariable ["realname",name _unit]]; -if (_insertedIndex != -1) then { +if (_insertedIndex isNotEqualTo -1) then { _vehicle setVariable ["vehicle_info_owners",_owners,true]; }; diff --git a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf index 73c789f85..c5d0ed964 100755 --- a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf +++ b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf @@ -15,14 +15,14 @@ params [ ]; //Error checks -if (isNull _vehicle || isNull _unit) exitWith { +if (isNull _vehicle || {isNull _unit}) exitWith { [] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; }; private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); private _plate = _vehicle getVariable ["plate",""]; -if !(_plate isEqualTo "") then { +if (_plate isNotEqualTo "") then { private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; _ownerInfo params ["_uid"]; private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; diff --git a/life_hc/initHC.sqf b/life_hc/initHC.sqf index 7d333a6a2..f1dd4b0d1 100644 --- a/life_hc/initHC.sqf +++ b/life_hc/initHC.sqf @@ -109,13 +109,6 @@ HC_MPAllowedFuncs = [ CONSTVAR(HC_MPAllowedFuncs); -[] spawn { - for "_i" from 0 to 1 step 0 do { - uiSleep 60; - publicVariableServer "serv_sv_use"; - }; -}; - life_HC_isActive = true; publicVariable "life_HC_isActive"; diag_log "----------------------------------------------------------------------------------------------------"; diff --git a/life_server/Functions/Systems/fn_chopShopSell.sqf b/life_server/Functions/Systems/fn_chopShopSell.sqf index 8c8e3bbef..14fd1fef1 100755 --- a/life_server/Functions/Systems/fn_chopShopSell.sqf +++ b/life_server/Functions/Systems/fn_chopShopSell.sqf @@ -12,14 +12,14 @@ params [ ]; //Error checks -if (isNull _vehicle || isNull _unit) exitWith { +if (isNull _vehicle || {isNull _unit}) exitWith { [] remoteExecCall ["life_fnc_chopShopSold", remoteExecutedOwner]; }; private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "displayName"); private _plate = _vehicle getVariable ["plate",""]; -if !(_plate isEqualTo "") then { +if (_plate isNotEqualTo "") then { private _ownerInfo = (_vehicle getVariable ["vehicle_info_owners",[]]) select 0; _ownerInfo params ["_uid"]; private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; From 1c5124be01348e7c7d636ec870c6dd9cbb659c91 Mon Sep 17 00:00:00 2001 From: dom Date: Tue, 28 Dec 2021 13:54:17 +0000 Subject: [PATCH 39/40] Swap --- life_server/Functions/Systems/fn_vehicleStore.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index 2a7bba438..89867ca77 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -31,7 +31,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { }; if (_impound) exitWith { - if (_vid isEqualTo -1) then { + if (_vid isNotEqualTo -1) then { private _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _vid]; [_query,1] call DB_fnc_asyncCall; }; From 899d2ccb68b36fd20fdeccfc375c5bdc5866fc71 Mon Sep 17 00:00:00 2001 From: dom Date: Wed, 29 Dec 2021 11:27:13 +0000 Subject: [PATCH 40/40] Var name change --- Altis_Life.Altis/dialog/function/fn_sellGarage.sqf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index 521796952..8b93bf561 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -22,7 +22,7 @@ if !(isClass (missionConfigFile >> "LifeCfgVehicles" >> _className)) then { private "_multiplier"; private "_purchasePrice"; -private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_vehicleLife,"price"); +private _price = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"price"); switch (playerSide) do { case civilian: { _multiplier = LIFE_SETTINGS(getNumber,"vehicle_sell_multiplier_CIVILIAN"); @@ -68,9 +68,9 @@ BANK = BANK + _sellPrice; if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { - advanced_log = format [localize "STR_DL_AL_soldVehicle_BEF",_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + advanced_log = format [localize "STR_DL_AL_soldVehicle_BEF",_className,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; } else { - advanced_log = format [localize "STR_DL_AL_soldVehicle",profileName,(getPlayerUID player),_vehicleLife,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + advanced_log = format [localize "STR_DL_AL_soldVehicle",profileName,(getPlayerUID player),_className,[_sellPrice] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; }; publicVariableServer "advanced_log"; };