From 7569490dc2b5d68c966fa8a543b20933b6d21c38 Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Dec 2019 13:29:31 +0000 Subject: [PATCH 01/33] Disable SpyGlass variable checks & updated patch list for release (#591) --- Altis_Life.Altis/SpyGlass/README.md | 35 ++--- Altis_Life.Altis/SpyGlass/fn_initSpy.sqf | 166 ++-------------------- Altis_Life.Altis/core/clientValidator.sqf | 10 +- 3 files changed, 34 insertions(+), 177 deletions(-) diff --git a/Altis_Life.Altis/SpyGlass/README.md b/Altis_Life.Altis/SpyGlass/README.md index 489ad3b0c..dccfa6522 100644 --- a/Altis_Life.Altis/SpyGlass/README.md +++ b/Altis_Life.Altis/SpyGlass/README.md @@ -5,6 +5,24 @@ SpyGlass Notes +If *Arma 3* has updated then it may be possible that the developers have included new files into the game. +If this is the case then launch *Arma 3* and go to the editor (you do not need to load a mission.) +Open the debug console and paste in the following code, then locally execute: + +```sqf +_cfgPatches = []; _binConfigPatches = configFile >> "CfgPatches"; for "_i" from 0 to count (_binConfigPatches)-1 do { _patchEntry = _binConfigPatches select _i; if (isClass _patchEntry) then { _cfgPatches pushBackUnique (configName _patchEntry); }; }; copyToClipboard str(_cfgPatches); +``` + +1. Paste the results into a source code editor such as [Notepad++](https://notepad-plus-plus.org/) or [Atom](https://atom.io/). +2. Open SpyGlass/[fn_initSpy.sqf](https://github.com/AsYetUntitled/Framework/blob/master/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf) and find `_patchList =` +3. Edit the result that you got from executing the code to include this at the start: `["life_server",` +4. Paste in your results and follow the existing structure. + +This should fix any issues with SpyGlass. If you continue to experience issues then please see [contact on Contributing to AsYetUntitled](https://github.com/AsYetUntitled/Framework/blob/master/.github/CONTRIBUTING.md#contact). + + +Variable checking is deprecated, the following is currently disabled + If SpyGlass is kicking on join then make sure that all functions that you have changed in the mission have been whitelisted. Check your *Arma 3* [client RPT](https://community.bistudio.com/wiki/Crash_Files) log file to find message outputs as to why you are being kicked. Example: @@ -28,19 +46,4 @@ If there are Bohemia Interactive [functions](https://community.bistudio.com/wiki BIS_Functions[] = {"",""}; ``` -... and so on. - -If *Arma 3* has updated then it may be possible that the developers have included new files into the game. -If this is the case then launch *Arma 3* and go to the editor (you do not need to load a mission.) -Open the debug console and paste in the following code, then locally execute: - -```sqf -_cfgPatches = []; _binConfigPatches = configFile >> "CfgPatches"; for "_i" from 0 to count (_binConfigPatches)-1 do { _patchEntry = _binConfigPatches select _i; if (isClass _patchEntry) then { _cfgPatches set [count _cfgPatches,(configName _patchEntry)]; }; }; copyToClipboard str(_cfgPatches); -``` - -1. Paste the results into a source code editor such as [Notepad++](https://notepad-plus-plus.org/) or [Atom](https://atom.io/). -2. Open SpyGlass/[fn_initSpy.sqf](https://github.com/AsYetUntitled/Framework/blob/master/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf) and find `_patchList =` -3. Edit the result that you got from executing the code to include this at the start: `["life_server",` -4. Paste in your results and follow the existing structure. - -This should fix any issues with SpyGlass. If you continue to experience issues then please see [contact on Contributing to AsYetUntitled](https://github.com/AsYetUntitled/Framework/blob/master/.github/CONTRIBUTING.md#contact). +... and so on. \ No newline at end of file diff --git a/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf b/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf index 9776d3189..99b869c34 100644 --- a/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf +++ b/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf @@ -41,9 +41,7 @@ CONST(JJJJ_MMMM___EEEEEEE_SPAWN_WEAPON,"false"); for "_i" from 0 to count (_binConfigPatches)-1 do { _patchEntry = _binConfigPatches select _i; if (isClass _patchEntry) then { - if (!((configName _patchEntry) in SPY_cfg_patchList)) then { - _cfgPatches set[count _cfgPatches,(configName _patchEntry)]; - }; + _cfgPatches pushBackUnique (configName _patchEntry); }; }; @@ -59,157 +57,9 @@ CONST(JJJJ_MMMM___EEEEEEE_SPAWN_WEAPON,"false"); "JSRS2_Po30_Orca","JSRS2_Strider","JSRS2_SUV","JSRS2_T100_Varsuk","JSRS2_Truck1","JSRS2_Truck2","JSRS2_UAV_1","JSRS2_UH80_GhostHawk","JSRS2_Van","JSRS2_WY55_Hellcat","JSRS2_ZSU39_Tigris","cba_xeh_a3"] */ -private _patchList = -["life_server","Core","A3Data","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Dubbing_F","A3_Dubbing_F_Beta","A3_Dubbing_F_Gamma","A3_Dubbing_Radio_F","A3_Dubbing_Radio_F_Data_ENG", -"A3_Dubbing_Radio_F_Data_ENGB","A3_Dubbing_Radio_F_Data_GRE","A3_Dubbing_Radio_F_Data_PER","A3_Dubbing_Radio_F_Data_VR","A3_Editor_F","A3_EditorPreviews_F","A3_Functions_F_Curator","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Gamma", -"A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_Data","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers", -"A3_Modules_F_Hc","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap", -"A3_Modules_F_Supports","A3_Modules_F_Uav","A3_Modules_F_Beta","A3_Modules_F_Beta_Data","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Music_F","A3_Music_F_Music","A3_Music_F_EPA","A3_Music_F_EPA_Music","A3_Music_F_EPB", -"A3_Music_F_EPB_Music","A3_Music_F_EPC","A3_Music_F_EPC_Music","A3_Plants_F","A3_Roads_F","A3_Rocks_F","A3_Rocks_F_Blunt","A3_Rocks_F_Sharp","A3_Rocks_F_Water","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ", -"A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions", -"A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices", -"A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Data","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater", -"A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households", -"A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01", -"A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small", -"A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant", -"A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed", -"A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items", -"A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Food","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military", -"A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence", -"A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar", -"A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research", -"A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_EPA","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics", -"A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB","A3_Structures_F_EPB_Civ_Accessories", -"A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents", -"A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping", -"A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_Playground","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel", -"A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_UiFonts_F","A3_Animals_F","A3_Animals_F_Animconfig", -"A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Beta","A3_Animals_F_Beta_Chicken","A3_Animals_F_Beta_Dog","A3_Animals_F_Beta_Goat", -"A3_Animals_F_Beta_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_Config_Sdr_WeaponSwitching","A3_Anims_F_Data","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Dubbing_F_EPA","A3_Dubbing_F_EPB","A3_Dubbing_F_EPC","A3_Language_F_EPA","A3_Language_F_EPB", -"A3_Language_F_EPC","A3_LanguageMissions_F_EPA","A3_LanguageMissions_F_EPB","A3_LanguageMissions_F_EPC","A3_Map_Data","A3_Map_Data_Exp","A3_Map_Stratis","A3_Map_Stratis_Data","A3_Map_Stratis_Data_Layers","A3_Map_Stratis_Scenes_F","A3_Plants_F_Bush", -"A3_Signs_F","A3_Signs_F_Signs_Ad","A3_Structures_F_Signs_Companies","A3_Ui_F","A3_Ui_F_Data","A3_Ui_F_Curator","A3_Weapons_F","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW", -"A3_Weapons_F_Launchers_RPG32","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_LongRangeRifles_DMR_01","A3_Weapons_F_LongRangeRifles_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200", -"A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_Heavy_01","A3_Weapons_F_Pistols_Pistol_Heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_MK20", -"A3_Weapons_F_Rifles_MX","A3_Weapons_F_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_SMGs_Pdw2000","A3_Weapons_F_SMGs_SMG_01","A3_Weapons_F_SMGs_SMG_02","A3_Weapons_F_Beta","A3_Weapons_F_Beta_Ammoboxes", -"A3_Weapons_F_Beta_LongRangeRifles_EBR","A3_Weapons_F_Beta_LongRangeRifles_GM6","A3_Weapons_F_Beta_LongRangeRifles_M320","A3_Weapons_F_Beta_Rifles_Khaybar","A3_Weapons_F_Beta_Rifles_MX","A3_Weapons_F_Beta_Rifles_TRG20","A3_Weapons_F_Gamma", -"A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_Gamma_LongRangeRifles_EBR","A3_Weapons_F_Gamma_Rifles_MX","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies", -"A3_Characters_F_Beta","A3_Characters_F_Beta_INDEP","A3_Characters_F_Gamma","A3_Map_Altis","A3_Map_Altis_Data","A3_Map_Altis_Data_Layers","A3_Map_Altis_Scenes_F","A3_Missions_F","A3_Missions_F_Data","A3_Missions_F_Video","A3_Missions_F_Beta", -"A3_Missions_F_Beta_Data","A3_Missions_F_Beta_Video","A3_Missions_F_Gamma","A3_Missions_F_Gamma_Data","A3_Missions_F_Gamma_Video","A3_Sounds_F","A3_Sounds_F_Arsenal","A3_Sounds_F_Characters","A3_Sounds_F_Environment","A3_Sounds_F_Sfx","A3_Sounds_F_Vehicles", -"A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc", -"A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPB_LongRangeRifles_GM6","A3_Weapons_F_EPC","A3_Weapons_F_Gamma_Acc","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02", -"A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_Gamma","A3_Air_F_Gamma_Plane_Fighter_03", -"A3_Armor_F","A3_Armor_F_Beta","A3_Armor_F_Beta_APC_Tracked_01","A3_Armor_F_Beta_APC_Tracked_02","A3_Armor_F_Gamma","A3_Armor_F_Gamma_MBT_01","A3_Armor_F_Gamma_MBT_02","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta", -"A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_Beta_SDV_01","A3_Boat_F_Gamma","A3_Boat_F_Gamma_Boat_Civil_01","A3_Boat_F_Gamma_Boat_Civil_04","A3_Boat_F_Gamma_Boat_Transport_01","A3_Characters_F_Common","A3_Characters_F_EPA", -"A3_Characters_F_EPB","A3_Characters_F_EPB_Heads","A3_Characters_F_EPC","A3_Missions_F_EPA","A3_Missions_F_EPA_Data","A3_Missions_F_EPA_Video","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01", -"A3_Soft_F_Quadbike_01","A3_Soft_F_Beta","A3_Soft_F_Beta_MRAP_03","A3_Soft_F_Beta_Quadbike_01","A3_Soft_F_Beta_Truck_01","A3_Soft_F_Beta_Truck_02","A3_Soft_F_Gamma","A3_Soft_F_Gamma_Hatchback_01","A3_Soft_F_Gamma_Offroad_01","A3_Soft_F_Gamma_Quadbike_01", -"A3_Soft_F_Gamma_SUV_01","A3_Soft_F_Gamma_Truck_01","A3_Soft_F_Gamma_Truck_02","A3_Soft_F_Gamma_Van_01","A3_Static_F_AA_01","A3_Static_F_AT_01","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Air_F_EPB", -"A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_Beta_APC_Wheeled_01","A3_Armor_F_Beta_APC_Wheeled_02","A3_Armor_F_EPB","A3_Armor_F_EPB_APC_Tracked_03", -"A3_Armor_F_EPB_MBT_03","A3_Armor_F_EPC","A3_Armor_F_EPC_MBT_01","A3_Armor_F_Gamma_APC_Wheeled_03","A3_Boat_F_EPC","A3_Boat_F_EPC_Submarine_01","A3_Cargoposes_F","A3_Drones_F","A3_Drones_F_Air_F_Gamma_UAV_01","A3_Drones_F_Air_F_Gamma_UAV_02", -"A3_Drones_F_Characters_F_Gamma","A3_Drones_F_Soft_F_Gamma_UGV_01","A3_Drones_F_Weapons_F_Gamma_Ammoboxes","A3_Drones_F_Weapons_F_Gamma_Items","A3_Soft_F_EPC","A3_Soft_F_EPC_Truck_03","A3_Data_F_Loadorder","A3_Data_F_Curator", -"A3_Data_F_Curator_Characters","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Music","A3_Data_F_Curator_Respawn","A3_Data_F_Curator_Virtual","A3_Language_F_Curator","A3_Modules_F_Curator", -"A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning", -"A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_SmokeShells","A3_Missions_F_Curator", -"A3_Modules_F_Curator_Chemlights","A3_Data_F_Curator_Loadorder","A3_Data_F_Kart","A3_Data_F_Kart_ParticleEffects","A3_Language_F_Kart","A3_LanguageMissions_F_Kart","A3_Missions_F_Kart","A3_Missions_F_Kart_Data","A3_Modules_F_Kart","A3_Modules_F_Kart_Data", -"A3_Modules_F_Kart_TimeTrials","A3_Soft_F_Kart","A3_Soft_F_Kart_Kart_01","A3_Sounds_F_Kart","A3_Structures_F_Kart","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Kart_Signs_Companies","A3_Ui_F_Kart", -"A3_Weapons_F_Kart","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Anims_F_Kart","A3_Characters_F_Kart","A3_Data_F_Kart_Loadorder","A3_Data_F_Bootcamp","A3_Dubbing_F_Bootcamp","A3_Functions_F_Bootcamp","A3_Language_F_Bootcamp", -"A3_LanguageMissions_F_Bootcamp","A3_Map_VR","A3_Map_VR_Scenes_F","A3_Missions_F_Bootcamp","A3_Missions_F_Bootcamp_Data","A3_Missions_F_Bootcamp_Video","A3_Modules_F_Bootcamp","A3_Modules_F_Bootcamp_Misc","A3_Music_F_Bootcamp", -"A3_Music_F_Bootcamp_Music","A3_Soft_F_Bootcamp","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike_01","A3_Soft_F_Bootcamp_Van_01","A3_Sounds_F_Bootcamp","A3_Structures_F_Bootcamp","A3_Structures_F_Bootcamp_Civ_Camping", -"A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System", -"A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Ui_F_Bootcamp","A3_Weapons_F_Bootcamp","A3_Weapons_F_Bootcamp_Ammoboxes", -"A3_Weapons_F_Bootcamp_LongRangeRifles_GM6_Camo","A3_Weapons_F_Bootcamp_LongRangeRifles_M320_Camo","A3_Anims_F_Bootcamp","A3_Characters_F_Bootcamp","A3_Characters_F_Bootcamp_Common","A3_Data_F_Bootcamp_Loadorder","A3_Data_F_Heli", -"A3_Dubbing_F_Heli","A3_Functions_F_Heli","A3_Language_F_Heli","A3_LanguageMissions_F_Heli","A3_Missions_F_Heli","A3_Missions_F_Heli_Data","A3_Missions_F_Heli_Video","A3_Modules_F_Heli","A3_Modules_F_Heli_Misc","A3_Music_F_Heli", -"A3_Music_F_Heli_Music","A3_Soft_F_Heli","A3_Soft_F_Heli_Hatchback_01","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike_01","A3_Soft_F_Heli_SUV_01","A3_Soft_F_Heli_UGV_01","A3_Soft_F_Heli_Van_01", -"A3_Sounds_F_Heli","A3_Structures_F_Heli","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_Airport", -"A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport", -"A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Ui_F_Heli","A3_Air_F_Heli", -"A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03", -"A3_Air_F_Heli_Heli_Transport_04","A3_Anims_F_Heli","A3_Boat_F_Heli","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Cargoposes_F_Heli","A3_Data_F_Heli_Loadorder","A3_Data_F_Mark","A3_Dubbing_F_Mark","A3_Dubbing_F_MP_Mark","A3_Functions_F_Mark", -"A3_Functions_F_MP_Mark","A3_Language_F_Mark","A3_Language_F_MP_Mark","A3_LanguageMissions_F_Mark","A3_LanguageMissions_F_MP_Mark","A3_Missions_F_Mark","A3_Missions_F_Mark_Data","A3_Missions_F_Mark_Video","A3_Missions_F_MP_Mark","A3_Missions_F_MP_Mark_Data", -"A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_MP_Mark_Objectives","A3_Music_F_Mark","A3_Music_F_Mark_Music","A3_Sounds_F_Mark","A3_Static_F_Mark","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02", -"A3_Structures_F_Mark","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes", -"A3_Structures_F_Mark_VR_Targets","A3_Supplies_F_Mark","A3_Ui_F_Mark","A3_Ui_F_MP_Mark","A3_Weapons_F_Mark","A3_Weapons_F_Mark_Acc","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03", -"A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_LongRangeRifles_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_Camo", -"A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_Camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_Weapons_F_Mark_Machineguns_Zafir", -"A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_MK20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","A3_Anims_F_Mark","A3_Anims_F_Mark_Deployment","A3_Characters_F_Mark","A3_Data_F_Mark_Loadorder", -"A3_Data_F_Exp_A","A3_Functions_F_Exp_A","A3_Language_F_Exp_A","A3_LanguageMissions_F_Exp_A","A3_Missions_F_Exp_A","A3_Missions_F_Exp_A_Data","A3_Modules_F_Exp_A","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Props_F_Exp_A_Military_Equipment", -"A3_Sounds_F_Exp_A","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Ui_F_Exp_A","A3_Anims_F_Exp_A","A3_Data_F_Exp_A_Virtual","A3_Data_F_Exp_A_Loadorder","A3_Data_F_Exp_B","A3_Language_F_Exp_B","A3_3DEN", -"A3_3DEN_Language","A3_BaseConfig_F","3DEN","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Armor_F_Panther","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_APC_Wheeled_03","A3_Armor_F_Slammer","A3_Armor_F_T100K", -"A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Characters_F_INDEP","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_UAV_F_Characters_F_Gamma","A3_Soft_F_Crusher_UGV","A3_UAV_F_Weapons_F_Gamma_Ammoboxes", -"A3_Weapons_F_gamma_Items","A3_Map_Altis_Scenes","A3_Map_Stratis_Scenes","Map_VR","A3_Map_VR_Scenes","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark_Objectives","A3_Signs_F_AD","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT", -"A3_Soft_F_TruckHeavy","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck", -"A3_Soft_F_Heli_Car","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Crusher_UGV","A3_Soft_F_Heli_Truck","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Items_Cans","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF", -"A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_EPB_Rifles_MX_Black", -"A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6", -"A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Mark_EBR","CuratorOnly_Air_F_Beta_Heli_Attack_01","CuratorOnly_Air_F_Beta_Heli_Attack_02", -"CuratorOnly_Air_F_Gamma_UAV_01","CuratorOnly_Armor_F_AMV","CuratorOnly_armor_f_beta_APC_Tracked_02","CuratorOnly_Armor_F_Marid","CuratorOnly_Armor_F_Panther","CuratorOnly_Armor_F_Slammer","CuratorOnly_Armor_F_T100K","CuratorOnly_Boat_F_Boat_Armed_01", -"CuratorOnly_Characters_F_BLUFOR","CuratorOnly_Characters_F_Common","CuratorOnly_Characters_F_OPFOR","CuratorOnly_Modules_F_Curator_Animals","CuratorOnly_Modules_F_Curator_Chemlights","CuratorOnly_Modules_F_Curator_Effects", -"CuratorOnly_Modules_F_Curator_Environment","CuratorOnly_Modules_F_Curator_Flares","CuratorOnly_Modules_F_Curator_Lightning","CuratorOnly_Modules_F_Curator_Mines","CuratorOnly_Modules_F_Curator_Objectives","CuratorOnly_Modules_F_Curator_Ordnance", -"CuratorOnly_Modules_F_Curator_Smokeshells","CuratorOnly_Signs_F","CuratorOnly_Soft_F_Crusher_UGV","CuratorOnly_Soft_F_MRAP_01","CuratorOnly_Soft_F_MRAP_02","CuratorOnly_Soft_F_Quadbike","CuratorOnly_Static_F_Gamma","CuratorOnly_Static_F_Mortar_01", -"CuratorOnly_Structures_F_Civ_Ancient","CuratorOnly_Structures_F_Civ_Camping","CuratorOnly_Structures_F_Civ_Garbage","CuratorOnly_Structures_F_EPA_Civ_Constructions","CuratorOnly_Structures_F_EPB_Civ_Dead","CuratorOnly_Structures_F_Ind_Cargo", -"CuratorOnly_Structures_F_Ind_Crane","CuratorOnly_Structures_F_Ind_ReservoirTank","CuratorOnly_Structures_F_Ind_Transmitter_Tower","CuratorOnly_Structures_F_Items_Vessels","CuratorOnly_Structures_F_Mil_BagBunker","CuratorOnly_Structures_F_Mil_BagFence", -"CuratorOnly_Structures_F_Mil_Cargo","CuratorOnly_Structures_F_Mil_Fortification","CuratorOnly_Structures_F_Mil_Radar","CuratorOnly_Structures_F_Mil_Shelters","CuratorOnly_Structures_F_Research","CuratorOnly_Structures_F_Walls", -"CuratorOnly_Structures_F_Wrecks","A3_Data_F_Exp_B_Loadorder","A3_Data_F_Mod","A3_Language_F_Mod","A3_Sounds_F_Mod","A3_Weapons_F_Mod","A3_Weapons_F_Mod_SMGs_SMG_03","A3_Anims_F_Mod","A3_Data_F_Exp","A3_Data_F_Exp_ParticleEffects", -"A3_Data_F_Mod_Loadorder","A3_Dubbing_F_Exp","A3_Dubbing_Radio_F_EXP","A3_Dubbing_Radio_F_EXP_Data_CHI","A3_Dubbing_Radio_F_EXP_Data_ENGFRE","A3_Dubbing_Radio_F_EXP_Data_FRE","A3_EditorPreviews_F_Exp","A3_Functions_F_Exp","A3_Language_F_Exp", -"A3_LanguageMissions_F_Exp","A3_Missions_F_Exp","A3_Missions_F_Exp_Data","A3_Missions_F_Exp_Video","A3_Modules_F_Exp","A3_Music_F_Exp","A3_Music_F_Exp_Music","A3_Props_F_Exp","A3_Props_F_Exp_Civilian","A3_Props_F_Exp_Civilian_Garbage", -"A3_Props_F_Exp_Commercial","A3_Props_F_Exp_Commercial_Market","A3_Props_F_Exp_Industrial","A3_Props_F_Exp_Industrial_HeavyEquipment","A3_Props_F_Exp_Infrastructure","A3_Props_F_Exp_Infrastructure_Railways","A3_Props_F_Exp_Infrastructure_Traffic", -"A3_Props_F_Exp_Military","A3_Props_F_Exp_Military_Camps","A3_Props_F_Exp_Military_OldPlaneWrecks","A3_Props_F_Exp_Naval","A3_Props_F_Exp_Naval_Boats","A3_Rocks_F_Exp","A3_Rocks_F_Exp_Cliff","A3_Rocks_F_Exp_LavaStones","A3_Soft_F_Exp", -"A3_Soft_F_Exp_LSV_01","A3_Soft_F_Exp_LSV_02","A3_Soft_F_Exp_MRAP_01","A3_Soft_F_Exp_MRAP_02","A3_Soft_F_Exp_Offroad_01","A3_Soft_F_Exp_Offroad_02","A3_Soft_F_Exp_Quadbike_01","A3_Soft_F_Exp_Truck_01","A3_Soft_F_Exp_Truck_03","A3_Soft_F_Exp_UGV_01", -"A3_Soft_F_Exp_Van_01","A3_Static_F_Exp","A3_Static_F_Exp_AA_01","A3_Static_F_Exp_AT_01","A3_Static_F_Exp_GMG_01","A3_Static_F_Exp_HMG_01","A3_Static_F_Exp_Mortar_01","A3_Structures_F_Exp","A3_Structures_F_Exp_Civilian","A3_Structures_F_Exp_Civilian_Accessories", -"A3_Structures_F_Exp_Civilian_Garages","A3_Structures_F_Exp_Civilian_House_Big_01","A3_Structures_F_Exp_Civilian_House_Big_02","A3_Structures_F_Exp_Civilian_House_Big_03","A3_Structures_F_Exp_Civilian_House_Big_04","A3_Structures_F_Exp_Civilian_House_Big_05", -"A3_Structures_F_Exp_Civilian_House_Native_01","A3_Structures_F_Exp_Civilian_House_Native_02","A3_Structures_F_Exp_Civilian_House_Small_01","A3_Structures_F_Exp_Civilian_House_Small_02","A3_Structures_F_Exp_Civilian_House_Small_03", -"A3_Structures_F_Exp_Civilian_House_Small_04","A3_Structures_F_Exp_Civilian_House_Small_05","A3_Structures_F_Exp_Civilian_House_Small_06","A3_Structures_F_Exp_Civilian_School_01","A3_Structures_F_Exp_Civilian_Sheds","A3_Structures_F_Exp_Civilian_Slum_01", -"A3_Structures_F_Exp_Civilian_Slum_02","A3_Structures_F_Exp_Civilian_Slum_03","A3_Structures_F_Exp_Civilian_Slum_04","A3_Structures_F_Exp_Civilian_Slum_05","A3_Structures_F_Exp_Civilian_SportsGrounds","A3_Structures_F_Exp_Commercial", -"A3_Structures_F_Exp_Commercial_Addons","A3_Structures_F_Exp_Commercial_Advertisements","A3_Structures_F_Exp_Commercial_FuelStation_01","A3_Structures_F_Exp_Commercial_FuelStation_02","A3_Structures_F_Exp_Commercial_Hotel_01", -"A3_Structures_F_Exp_Commercial_Hotel_02","A3_Structures_F_Exp_Commercial_Market","A3_Structures_F_Exp_Commercial_MultistoryBuilding_01","A3_Structures_F_Exp_Commercial_MultistoryBuilding_03","A3_Structures_F_Exp_Commercial_MultistoryBuilding_04", -"A3_Structures_F_Exp_Commercial_Shop_City_01","A3_Structures_F_Exp_Commercial_Shop_City_02","A3_Structures_F_Exp_Commercial_Shop_City_03","A3_Structures_F_Exp_Commercial_Shop_City_04","A3_Structures_F_Exp_Commercial_Shop_City_05", -"A3_Structures_F_Exp_Commercial_Shop_City_06","A3_Structures_F_Exp_Commercial_Shop_City_07","A3_Structures_F_Exp_Commercial_Shop_Town_01","A3_Structures_F_Exp_Commercial_Shop_Town_02","A3_Structures_F_Exp_Commercial_Shop_Town_03", -"A3_Structures_F_Exp_Commercial_Shop_Town_04","A3_Structures_F_Exp_Commercial_Shop_Town_05","A3_Structures_F_Exp_Commercial_Supermarket_01","A3_Structures_F_Exp_Commercial_Warehouses","A3_Structures_F_Exp_Cultural","A3_Structures_F_Exp_Cultural_AncientRelics", -"A3_Structures_F_Exp_Cultural_BasaltRuins","A3_Structures_F_Exp_Cultural_Cathedral_01","A3_Structures_F_Exp_Cultural_Cemeteries","A3_Structures_F_Exp_Cultural_Church_01","A3_Structures_F_Exp_Cultural_Church_02","A3_Structures_F_Exp_Cultural_Church_03", -"A3_Structures_F_Exp_Cultural_Fortress_01","A3_Structures_F_Exp_Cultural_Temple_Native_01","A3_Structures_F_Exp_Cultural_Totems","A3_Structures_F_Exp_Data","A3_Structures_F_Exp_Industrial","A3_Structures_F_Exp_Industrial_DieselPowerPlant_01", -"A3_Structures_F_Exp_Industrial_Fields","A3_Structures_F_Exp_Industrial_Materials","A3_Structures_F_Exp_Industrial_Port","A3_Structures_F_Exp_Industrial_Stockyard_01","A3_Structures_F_Exp_Industrial_SugarCaneFactory_01", -"A3_Structures_F_Exp_Industrial_SurfaceMine_01","A3_Structures_F_Exp_Infrastructure","A3_Structures_F_Exp_Infrastructure_Airports","A3_Structures_F_Exp_Infrastructure_Bridges","A3_Structures_F_Exp_Infrastructure_Pavements", -"A3_Structures_F_Exp_Infrastructure_Powerlines","A3_Structures_F_Exp_Infrastructure_Railways","A3_Structures_F_Exp_Infrastructure_Roads","A3_Structures_F_Exp_Infrastructure_Runways","A3_Structures_F_Exp_Infrastructure_WaterSupply", -"A3_Structures_F_Exp_Military","A3_Structures_F_Exp_Military_Barracks_01","A3_Structures_F_Exp_Military_Camonets","A3_Structures_F_Exp_Military_ContainerBases","A3_Structures_F_Exp_Military_Emplacements","A3_Structures_F_Exp_Military_Flags", -"A3_Structures_F_Exp_Military_Fortifications","A3_Structures_F_Exp_Military_Pillboxes","A3_Structures_F_Exp_Military_Trenches","A3_Structures_F_Exp_Naval","A3_Structures_F_Exp_Naval_Canals","A3_Structures_F_Exp_Naval_Piers","A3_Structures_F_Exp_Signs", -"A3_Structures_F_Exp_Signs_Companies","A3_Structures_F_Exp_Signs_Traffic","A3_Structures_F_Exp_Walls","A3_Structures_F_Exp_Walls_BackAlleys","A3_Structures_F_Exp_Walls_Bamboo","A3_Structures_F_Exp_Walls_Concrete","A3_Structures_F_Exp_Walls_Crashbarriers", -"A3_Structures_F_Exp_Walls_Hedges","A3_Structures_F_Exp_Walls_Net","A3_Structures_F_Exp_Walls_Pipe","A3_Structures_F_Exp_Walls_Polewalls","A3_Structures_F_Exp_Walls_Railings","A3_Structures_F_Exp_Walls_Slum","A3_Structures_F_Exp_Walls_Stone", -"A3_Structures_F_Exp_Walls_Tin","A3_Structures_F_Exp_Walls_Wired","A3_Structures_F_Exp_Walls_Wooden","A3_Supplies_F_Exp","A3_Supplies_F_Exp_Ammoboxes","A3_Ui_F_Exp","A3_Vegetation_F_Exp","A3_Weapons_F_Exp","A3_Weapons_F_Exp_Launchers_RPG32", -"A3_Weapons_F_Exp_Launchers_RPG7","A3_Weapons_F_Exp_Launchers_Titan","A3_Weapons_F_Exp_LongRangeRifles_DMR_07","A3_Weapons_F_Exp_Machineguns_LMG_03","A3_Weapons_F_Exp_Pistols_Pistol_01","A3_Weapons_F_Exp_Rifles_AK12","A3_Weapons_F_Exp_Rifles_AKM", -"A3_Weapons_F_Exp_Rifles_AKS","A3_Weapons_F_Exp_Rifles_ARX","A3_Weapons_F_Exp_Rifles_CTAR","A3_Weapons_F_Exp_Rifles_CTARS","A3_Weapons_F_Exp_Rifles_SPAR_01","A3_Weapons_F_Exp_Rifles_SPAR_02","A3_Weapons_F_Exp_Rifles_SPAR_03","A3_Weapons_F_Exp_SMGs_SMG_05", -"A3_Air_F_Exp","A3_Air_F_Exp_Heli_Light_01","A3_Air_F_Exp_Heli_Transport_01","A3_Air_F_Exp_Plane_Civil_01","A3_Air_F_Exp_UAV_03","A3_Air_F_Exp_UAV_04","A3_Air_F_Exp_VTOL_01","A3_Air_F_Exp_VTOL_02","A3_Anims_F_Exp","A3_Anims_F_Exp_Revive","A3_Armor_F_Exp", -"A3_Armor_F_Exp_APC_Tracked_01","A3_Armor_F_Exp_APC_Tracked_02","A3_Armor_F_Exp_APC_Wheeled_01","A3_Armor_F_Exp_APC_Wheeled_02","A3_Armor_F_Exp_MBT_01","A3_Armor_F_Exp_MBT_02","A3_Boat_F_Exp","A3_Boat_F_Exp_Boat_Armed_01","A3_Boat_F_Exp_Boat_Transport_01", -"A3_Boat_F_Exp_Boat_Transport_02","A3_Boat_F_Exp_Scooter_Transport_01","A3_Cargoposes_F_Exp","A3_Characters_F_Exp","A3_Characters_F_Exp_Civil","A3_Characters_F_Exp_Headgear","A3_Characters_F_Exp_Vests","A3_Sounds_F_Exp","A3_Data_F_Exp_Loadorder", -"A3_Data_F_Jets","A3_Dubbing_F_Jets","A3_EditorPreviews_F_Jets","A3_Functions_F_Destroyer","A3_Functions_F_Jets","A3_Language_F_Jets","A3_LanguageMissions_F_Jets","A3_Modules_F_Jets","A3_Music_F_Jets","A3_Props_F_Jets","A3_Props_F_Jets_Military_Tractor", -"A3_Props_F_Jets_Military_Trolley","A3_Sounds_F_Jets","A3_Static_F_Jets","A3_Static_F_Jets_AAA_System_01","A3_Static_F_Jets_SAM_System_01","A3_Static_F_Jets_SAM_System_02","A3_Ui_F_Jets","A3_Weapons_F_Jets","A3_Air_F_Jets","A3_Air_F_Jets_Plane_Fighter_01", -"A3_Air_F_Jets_Plane_Fighter_02","A3_Air_F_Jets_Plane_Fighter_04","A3_Air_F_Jets_UAV_05","A3_Anims_F_Jets","A3_Boat_F_Jets","A3_Boat_F_Jets_Carrier_01","A3_Cargoposes_F_Jets","A3_Characters_F_Jets","A3_Characters_F_Jets_Vests","A3_Missions_F_Jets", -"A3_Boat_F_Destroyer","A3_Boat_F_Destroyer_Destroyer_01","A3_Data_F_Jets_Loadorder","A3_Data_F_Argo","A3_EditorPreviews_F_Argo","A3_Language_F_Argo","A3_Map_Malden","A3_Map_Malden_Data","A3_Map_Malden_Data_Layers","A3_Map_Malden_Scenes_F","A3_Music_F_Argo", -"A3_Props_F_Argo","A3_Props_F_Argo_Civilian","A3_Props_F_Argo_Civilian_InfoBoards","A3_Props_F_Argo_Items","A3_Props_F_Argo_Items_Documents","A3_Props_F_Argo_Items_Electronics","A3_Rocks_F_Argo","A3_Rocks_F_Argo_Limestone","A3_Structures_F_Argo", -"A3_Structures_F_Argo_Civilian","A3_Structures_F_Argo_Civilian_Accessories","A3_Structures_F_Argo_Civilian_Addons","A3_Structures_F_Argo_Civilian_Garbage","A3_Structures_F_Argo_Civilian_House_Big01","A3_Structures_F_Argo_Civilian_House_Big02", -"A3_Structures_F_Argo_Civilian_House_Small01","A3_Structures_F_Argo_Civilian_House_Small02","A3_Structures_F_Argo_Civilian_Stone_House_Big_01","A3_Structures_F_Argo_Civilian_Stone_Shed_01","A3_Structures_F_Argo_Civilian_Unfinished_Building_01", -"A3_Structures_F_Argo_Commercial","A3_Structures_F_Argo_Commercial_Accessories","A3_Structures_F_Argo_Commercial_Billboards","A3_Structures_F_Argo_Commercial_FuelStation_01","A3_Structures_F_Argo_Commercial_Shop_02","A3_Structures_F_Argo_Commercial_Supermarket_01", -"A3_Structures_F_Argo_Cultural","A3_Structures_F_Argo_Cultural_Church","A3_Structures_F_Argo_Cultural_Statues","A3_Structures_F_Argo_Decals","A3_Structures_F_Argo_Decals_Horizontal","A3_Structures_F_Argo_Industrial","A3_Structures_F_Argo_Industrial_Agriculture", -"A3_Structures_F_Argo_Industrial_Materials","A3_Structures_F_Argo_Infrastructure","A3_Structures_F_Argo_Infrastructure_Runways","A3_Structures_F_Argo_Infrastructure_Seaports","A3_Structures_F_Argo_Infrastructure_WaterSupply","A3_Structures_F_Argo_Military", -"A3_Structures_F_Argo_Military_Bunkers","A3_Structures_F_Argo_Military_ContainerBases","A3_Structures_F_Argo_Military_Domes","A3_Structures_F_Argo_Military_Fortifications","A3_Structures_F_Argo_Military_Turrets","A3_Structures_F_Argo_Signs", -"A3_Structures_F_Argo_Signs_City","A3_Structures_F_Argo_Signs_Directions","A3_Structures_F_Argo_Signs_Warnings","A3_Structures_F_Argo_Walls","A3_Structures_F_Argo_Walls_City","A3_Structures_F_Argo_Walls_Concrete","A3_Structures_F_Argo_Walls_Military", -"A3_Structures_F_Argo_Walls_Net","A3_Structures_F_Argo_Walls_Pipe","A3_Structures_F_Argo_Walls_Tin","A3_Structures_F_Argo_Walls_Wooden","A3_Structures_F_Argo_Wrecks","A3_Vegetation_F_Argo","A3_Armor_F_Argo","A3_Armor_F_Argo_APC_Tracked_01", -"A3_Armor_F_Argo_APC_Wheeled_02","A3_Data_F_Argo_Loadorder","A3_Data_F_Patrol","A3_Functions_F_Patrol","A3_Language_F_Patrol","A3_LanguageMissions_F_Patrol","A3_Map_Tanoabuka","A3_Map_Tanoabuka_Data","A3_Map_Tanoabuka_Data_Layers","A3_Modules_F_Patrol", -"A3_Sounds_F_Patrol","A3_Ui_F_Patrol","A3_Weapons_F_Patrol","A3_Characters_F_Patrol","A3_Map_Tanoa_Scenes_F","A3_Missions_F_Patrol","A3_Data_F_Patrol_Loadorder","A3_Data_F_Orange","A3_Dubbing_F_Orange","A3_EditorPreviews_F_Orange","A3_Functions_F_Orange", -"A3_Language_F_Orange","A3_LanguageMissions_F_Orange","A3_Missions_F_Orange","A3_Modules_F_Orange","A3_Music_F_Orange","A3_Props_F_Orange","A3_Props_F_Orange_Civilian","A3_Props_F_Orange_Civilian_Constructions","A3_Props_F_Orange_Civilian_InfoBoards", -"A3_Props_F_Orange_Furniture","A3_Props_F_Orange_Humanitarian","A3_Props_F_Orange_Humanitarian_Camps","A3_Props_F_Orange_Humanitarian_Garbage","A3_Props_F_Orange_Humanitarian_Supplies","A3_Props_F_Orange_Items","A3_Props_F_Orange_Items_Decorative", -"A3_Props_F_Orange_Items_Documents","A3_Props_F_Orange_Items_Electronics","A3_Props_F_Orange_Items_Tools","A3_Soft_F_Orange","A3_Soft_F_Orange_Offroad_01","A3_Soft_F_Orange_Offroad_02","A3_Soft_F_Orange_Truck_02","A3_Soft_F_Orange_UGV_01","A3_Soft_F_Orange_Van_02", -"A3_Structures_F_Orange","A3_Structures_F_Orange_Humanitarian","A3_Structures_F_Orange_Humanitarian_Camps","A3_Structures_F_Orange_Humanitarian_Flags","A3_Structures_F_Orange_Industrial","A3_Structures_F_Orange_Industrial_Cargo","A3_Structures_F_Orange_Signs", -"A3_Structures_F_Orange_Signs_Mines","A3_Structures_F_Orange_Signs_Special","A3_Structures_F_Orange_VR_Helpers","A3_Structures_F_Orange_Walls","A3_Structures_F_Orange_Walls_Plastic","A3_Supplies_F_Orange","A3_Supplies_F_Orange_Ammoboxes","A3_Supplies_F_Orange_Bags", -"A3_Supplies_F_Orange_CargoNets","A3_Ui_F_Orange","A3_Weapons_F_Orange","A3_Weapons_F_Orange_Explosives","A3_Weapons_F_Orange_Items","A3_Air_F_Orange","A3_Air_F_Orange_Heli_Transport_02","A3_Air_F_Orange_UAV_01","A3_Air_F_Orange_UAV_06","A3_Cargoposes_F_Orange", -"A3_Characters_F_Orange","A3_Characters_F_Orange_Facewear","A3_Characters_F_Orange_Headgear","A3_Characters_F_Orange_Uniforms","A3_Characters_F_Orange_Vests","A3_Sounds_F_Orange","A3_Data_F_Orange_Loadorder","A3_Data_F_Tacops","A3_Dubbing_F_Tacops", -"A3_Functions_F_Tacops","A3_Language_F_Tacops","A3_LanguageMissions_F_Tacops","A3_Missions_F_Tacops","A3_Modules_F_Tacops","A3_Music_F_Tacops","A3_Sounds_F_Tacops","A3_Ui_F_Tacops","A3_Characters_F_Tacops","A3_Data_F_Tacops_Loadorder","A3_Data_F_Tank", -"A3_Data_F_Warlords","A3_Dubbing_F_Tank","A3_Dubbing_F_Warlords","A3_EditorPreviews_F_Tank","A3_Functions_F_Tank","A3_Functions_F_Warlords","A3_Language_F_Tank","A3_Language_F_Warlords","A3_LanguageMissions_F_Tank","A3_Missions_F_Tank","A3_Missions_F_Warlords", -"A3_Missions_F_Warlords_Data","A3_Modules_F_Tank","A3_Modules_F_Warlords","A3_Music_F_Tank","A3_Props_F_Tank","A3_Props_F_Tank_Military","A3_Props_F_Tank_Military_TankAcc","A3_Props_F_Tank_Military_Wrecks","A3_Sounds_F_Tank","A3_Structures_F_Tank", -"A3_Structures_F_Tank_Decals","A3_Structures_F_Tank_Decals_Horizontal","A3_Structures_F_Tank_Military","A3_Structures_F_Tank_Military_Fortifications","A3_Structures_F_Tank_Military_RepairDepot","A3_Ui_F_Tank","A3_Weapons_F_Tank","A3_Weapons_F_Tank_Bags", -"A3_Weapons_F_Tank_Launchers_MRAWS","A3_Weapons_F_Tank_Launchers_Vorona","A3_Armor_F_Tank","A3_Armor_F_Tank_AFV_Wheeled_01","A3_Armor_F_Tank_LT_01","A3_Armor_F_Tank_MBT_04","A3_Cargoposes_F_Tank","A3_Characters_F_Tank","A3_Characters_F_Tank_Headgear", -"A3_Characters_F_Tank_Uniforms","A3_Data_F_Tank_Loadorder","A3_Data_F_Warlords_Loadorder","A3_Data_F_Destroyer","A3_Data_F_Sams","A3_EditorPreviews_F_Destroyer","A3_EditorPreviews_F_Sams","A3_Language_F_Destroyer","A3_Language_F_Sams","A3_Props_F_Destroyer", -"A3_Props_F_Destroyer_Military_BriefingRoomDesk","A3_Props_F_Destroyer_Military_BriefingRoomScreen","A3_Static_F_Destroyer","A3_Static_F_Destroyer_Boat_Rack_01","A3_Static_F_Destroyer_Ship_Gun_01","A3_Static_F_Destroyer_Ship_MRLS_01","A3_Static_F_Sams", -"A3_Static_F_Sams_Radar_System_01","A3_Static_F_Sams_Radar_System_02","A3_Static_F_Sams_SAM_System_03","A3_Static_F_Sams_SAM_System_04","A3_Weapons_F_Destroyer","A3_Weapons_F_Sams","A3_Data_F_Destroyer_Loadorder","A3_Data_F_Sams_Loadorder"]; +// Last updated vers. 5.0.0 +private _patchList = ["Core","A3Data","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Dubbing_F","A3_Dubbing_F_Beta","A3_Dubbing_F_Gamma","A3_Dubbing_Radio_F","A3_Dubbing_Radio_F_Data_ENG","A3_Dubbing_Radio_F_Data_ENGB","A3_Dubbing_Radio_F_Data_GRE","A3_Dubbing_Radio_F_Data_PER","A3_Dubbing_Radio_F_Data_VR","A3_Editor_F","A3_EditorPreviews_F","A3_Functions_F_Curator","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Gamma","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_Data","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_Hc","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_Uav","A3_Modules_F_Beta","A3_Modules_F_Beta_Data","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Music_F","A3_Music_F_Music","A3_Music_F_EPA","A3_Music_F_EPA_Music","A3_Music_F_EPB","A3_Music_F_EPB_Music","A3_Music_F_EPC","A3_Music_F_EPC_Music","A3_Plants_F","A3_Roads_F","A3_Rocks_F","A3_Rocks_F_Blunt","A3_Rocks_F_Sharp","A3_Rocks_F_Water","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Data","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Food","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_EPA","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_Playground","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_UiFonts_F","A3_Animals_F","A3_Animals_F_Animconfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Beta","A3_Animals_F_Beta_Chicken","A3_Animals_F_Beta_Dog","A3_Animals_F_Beta_Goat","A3_Animals_F_Beta_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_Config_Sdr_WeaponSwitching","A3_Anims_F_Data","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Dubbing_F_EPA","A3_Dubbing_F_EPB","A3_Dubbing_F_EPC","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_LanguageMissions_F_EPA","A3_LanguageMissions_F_EPB","A3_LanguageMissions_F_EPC","A3_Map_Data","A3_Map_Data_Exp","A3_Map_Stratis","A3_Map_Stratis_Data","A3_Map_Stratis_Data_Layers","A3_Map_Stratis_Scenes_F","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_Signs_Ad","A3_Structures_F_Signs_Companies","A3_Ui_F","A3_Ui_F_Data","A3_Ui_F_Curator","A3_Weapons_F","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_RPG32","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_LongRangeRifles_DMR_01","A3_Weapons_F_LongRangeRifles_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_Heavy_01","A3_Weapons_F_Pistols_Pistol_Heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_MK20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_SMGs_Pdw2000","A3_Weapons_F_SMGs_SMG_01","A3_Weapons_F_SMGs_SMG_02","A3_Weapons_F_Beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_Beta_LongRangeRifles_EBR","A3_Weapons_F_Beta_LongRangeRifles_GM6","A3_Weapons_F_Beta_LongRangeRifles_M320","A3_Weapons_F_Beta_Rifles_Khaybar","A3_Weapons_F_Beta_Rifles_MX","A3_Weapons_F_Beta_Rifles_TRG20","A3_Weapons_F_Gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_Gamma_LongRangeRifles_EBR","A3_Weapons_F_Gamma_Rifles_MX","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_Beta_INDEP","A3_Characters_F_Gamma","A3_Map_Altis","A3_Map_Altis_Data","A3_Map_Altis_Data_Layers","A3_Map_Altis_Scenes_F","A3_Missions_F","A3_Missions_F_Data","A3_Missions_F_Video","A3_Missions_F_Beta","A3_Missions_F_Beta_Data","A3_Missions_F_Beta_Video","A3_Missions_F_Gamma","A3_Missions_F_Gamma_Data","A3_Missions_F_Gamma_Video","A3_Sounds_F","A3_Sounds_F_Arsenal","A3_Sounds_F_Characters","A3_Sounds_F_Environment","A3_Sounds_F_Sfx","A3_Sounds_F_Vehicles","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPB_LongRangeRifles_GM6","A3_Weapons_F_EPC","A3_Weapons_F_Gamma_Acc","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_Gamma","A3_Air_F_Gamma_Plane_Fighter_03","A3_Armor_F","A3_Armor_F_Beta","A3_Armor_F_Beta_APC_Tracked_01","A3_Armor_F_Beta_APC_Tracked_02","A3_Armor_F_Gamma","A3_Armor_F_Gamma_MBT_01","A3_Armor_F_Gamma_MBT_02","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_Beta_SDV_01","A3_Boat_F_Gamma","A3_Boat_F_Gamma_Boat_Civil_01","A3_Boat_F_Gamma_Boat_Civil_04","A3_Boat_F_Gamma_Boat_Transport_01","A3_Characters_F_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPB_Heads","A3_Characters_F_EPC","A3_Missions_F_EPA","A3_Missions_F_EPA_Data","A3_Missions_F_EPA_Video","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike_01","A3_Soft_F_Beta","A3_Soft_F_Beta_MRAP_03","A3_Soft_F_Beta_Quadbike_01","A3_Soft_F_Beta_Truck_01","A3_Soft_F_Beta_Truck_02","A3_Soft_F_Gamma","A3_Soft_F_Gamma_Hatchback_01","A3_Soft_F_Gamma_Offroad_01","A3_Soft_F_Gamma_Quadbike_01","A3_Soft_F_Gamma_SUV_01","A3_Soft_F_Gamma_Truck_01","A3_Soft_F_Gamma_Truck_02","A3_Soft_F_Gamma_Van_01","A3_Static_F_AA_01","A3_Static_F_AT_01","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Air_F_EPB","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_Beta_APC_Wheeled_01","A3_Armor_F_Beta_APC_Wheeled_02","A3_Armor_F_EPB","A3_Armor_F_EPB_APC_Tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_EPC","A3_Armor_F_EPC_MBT_01","A3_Armor_F_Gamma_APC_Wheeled_03","A3_Boat_F_EPC","A3_Boat_F_EPC_Submarine_01","A3_Cargoposes_F","A3_Drones_F","A3_Drones_F_Air_F_Gamma_UAV_01","A3_Drones_F_Air_F_Gamma_UAV_02","A3_Drones_F_Characters_F_Gamma","A3_Drones_F_Soft_F_Gamma_UGV_01","A3_Drones_F_Weapons_F_Gamma_Ammoboxes","A3_Drones_F_Weapons_F_Gamma_Items","A3_Soft_F_EPC","A3_Soft_F_EPC_Truck_03","A3_Data_F_Loadorder","A3_Data_F_Curator","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Music","A3_Data_F_Curator_Respawn","A3_Data_F_Curator_Virtual","A3_Language_F_Curator","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_SmokeShells","A3_Missions_F_Curator","A3_Modules_F_Curator_Chemlights","A3_Data_F_Curator_Loadorder","A3_Data_F_Kart","A3_Data_F_Kart_ParticleEffects","A3_Language_F_Kart","A3_LanguageMissions_F_Kart","A3_Missions_F_Kart","A3_Missions_F_Kart_Data","A3_Modules_F_Kart","A3_Modules_F_Kart_Data","A3_Modules_F_Kart_TimeTrials","A3_Soft_F_Kart","A3_Soft_F_Kart_Kart_01","A3_Sounds_F_Kart","A3_Structures_F_Kart","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Kart_Signs_Companies","A3_Ui_F_Kart","A3_Weapons_F_Kart","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Anims_F_Kart","A3_Characters_F_Kart","A3_Data_F_Kart_Loadorder","A3_Data_F_Bootcamp","A3_Dubbing_F_Bootcamp","A3_Functions_F_Bootcamp","A3_Language_F_Bootcamp","A3_LanguageMissions_F_Bootcamp","A3_Map_VR","A3_Map_VR_Scenes_F","A3_Missions_F_Bootcamp","A3_Missions_F_Bootcamp_Data","A3_Missions_F_Bootcamp_Video","A3_Modules_F_Bootcamp","A3_Modules_F_Bootcamp_Misc","A3_Music_F_Bootcamp","A3_Music_F_Bootcamp_Music","A3_Soft_F_Bootcamp","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike_01","A3_Soft_F_Bootcamp_Van_01","A3_Sounds_F_Bootcamp","A3_Structures_F_Bootcamp","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Ui_F_Bootcamp","A3_Weapons_F_Bootcamp","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6_Camo","A3_Weapons_F_Bootcamp_LongRangeRifles_M320_Camo","A3_Anims_F_Bootcamp","A3_Characters_F_Bootcamp","A3_Characters_F_Bootcamp_Common","A3_Data_F_Bootcamp_Loadorder","A3_Data_F_Heli","A3_Dubbing_F_Heli","A3_Functions_F_Heli","A3_Language_F_Heli","A3_LanguageMissions_F_Heli","A3_Missions_F_Heli","A3_Missions_F_Heli_Data","A3_Missions_F_Heli_Video","A3_Modules_F_Heli","A3_Modules_F_Heli_Misc","A3_Music_F_Heli","A3_Music_F_Heli_Music","A3_Soft_F_Heli","A3_Soft_F_Heli_Hatchback_01","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike_01","A3_Soft_F_Heli_SUV_01","A3_Soft_F_Heli_UGV_01","A3_Soft_F_Heli_Van_01","A3_Sounds_F_Heli","A3_Structures_F_Heli","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_Airport","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Ui_F_Heli","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Anims_F_Heli","A3_Boat_F_Heli","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Cargoposes_F_Heli","A3_Data_F_Heli_Loadorder","A3_Data_F_Mark","A3_Dubbing_F_Mark","A3_Dubbing_F_MP_Mark","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F_Mark","A3_Language_F_MP_Mark","A3_LanguageMissions_F_Mark","A3_LanguageMissions_F_MP_Mark","A3_Missions_F_Mark","A3_Missions_F_Mark_Data","A3_Missions_F_Mark_Video","A3_Missions_F_MP_Mark","A3_Missions_F_MP_Mark_Data","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_MP_Mark_Objectives","A3_Music_F_Mark","A3_Music_F_Mark_Music","A3_Sounds_F_Mark","A3_Static_F_Mark","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Structures_F_Mark","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_Supplies_F_Mark","A3_Ui_F_Mark","A3_Ui_F_MP_Mark","A3_Weapons_F_Mark","A3_Weapons_F_Mark_Acc","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_LongRangeRifles_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_Camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_Camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_MK20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","A3_Anims_F_Mark","A3_Anims_F_Mark_Deployment","A3_Characters_F_Mark","A3_Data_F_Mark_Loadorder","A3_Data_F_Exp_A","A3_Functions_F_Exp_A","A3_Language_F_Exp_A","A3_LanguageMissions_F_Exp_A","A3_Missions_F_Exp_A","A3_Missions_F_Exp_A_Data","A3_Modules_F_Exp_A","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Props_F_Exp_A_Military_Equipment","A3_Sounds_F_Exp_A","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Ui_F_Exp_A","A3_Anims_F_Exp_A","A3_Data_F_Exp_A_Virtual","A3_Data_F_Exp_A_Loadorder","A3_Data_F_Exp_B","A3_Language_F_Exp_B","A3_3DEN","A3_3DEN_Language","A3_BaseConfig_F","3DEN","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Armor_F_Panther","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_APC_Wheeled_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Characters_F_INDEP","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_UAV_F_Characters_F_Gamma","A3_Soft_F_Crusher_UGV","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis_Scenes","A3_Map_Stratis_Scenes","Map_VR","A3_Map_VR_Scenes","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark_Objectives","A3_Signs_F_AD","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Crusher_UGV","A3_Soft_F_Heli_Truck","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Items_Cans","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Mark_EBR","CuratorOnly_Air_F_Beta_Heli_Attack_01","CuratorOnly_Air_F_Beta_Heli_Attack_02","CuratorOnly_Air_F_Gamma_UAV_01","CuratorOnly_Armor_F_AMV","CuratorOnly_armor_f_beta_APC_Tracked_02","CuratorOnly_Armor_F_Marid","CuratorOnly_Armor_F_Panther","CuratorOnly_Armor_F_Slammer","CuratorOnly_Armor_F_T100K","CuratorOnly_Boat_F_Boat_Armed_01","CuratorOnly_Characters_F_BLUFOR","CuratorOnly_Characters_F_Common","CuratorOnly_Characters_F_OPFOR","CuratorOnly_Modules_F_Curator_Animals","CuratorOnly_Modules_F_Curator_Chemlights","CuratorOnly_Modules_F_Curator_Effects","CuratorOnly_Modules_F_Curator_Environment","CuratorOnly_Modules_F_Curator_Flares","CuratorOnly_Modules_F_Curator_Lightning","CuratorOnly_Modules_F_Curator_Mines","CuratorOnly_Modules_F_Curator_Objectives","CuratorOnly_Modules_F_Curator_Ordnance","CuratorOnly_Modules_F_Curator_Smokeshells","CuratorOnly_Signs_F","CuratorOnly_Soft_F_Crusher_UGV","CuratorOnly_Soft_F_MRAP_01","CuratorOnly_Soft_F_MRAP_02","CuratorOnly_Soft_F_Quadbike","CuratorOnly_Static_F_Gamma","CuratorOnly_Static_F_Mortar_01","CuratorOnly_Structures_F_Civ_Ancient","CuratorOnly_Structures_F_Civ_Camping","CuratorOnly_Structures_F_Civ_Garbage","CuratorOnly_Structures_F_EPA_Civ_Constructions","CuratorOnly_Structures_F_EPB_Civ_Dead","CuratorOnly_Structures_F_Ind_Cargo","CuratorOnly_Structures_F_Ind_Crane","CuratorOnly_Structures_F_Ind_ReservoirTank","CuratorOnly_Structures_F_Ind_Transmitter_Tower","CuratorOnly_Structures_F_Items_Vessels","CuratorOnly_Structures_F_Mil_BagBunker","CuratorOnly_Structures_F_Mil_BagFence","CuratorOnly_Structures_F_Mil_Cargo","CuratorOnly_Structures_F_Mil_Fortification","CuratorOnly_Structures_F_Mil_Radar","CuratorOnly_Structures_F_Mil_Shelters","CuratorOnly_Structures_F_Research","CuratorOnly_Structures_F_Walls","CuratorOnly_Structures_F_Wrecks","A3_Data_F_Exp_B_Loadorder","A3_Data_F_Mod","A3_Language_F_Mod","A3_Sounds_F_Mod","A3_Weapons_F_Mod","A3_Weapons_F_Mod_SMGs_SMG_03","A3_Anims_F_Mod","A3_Data_F_Exp","A3_Data_F_Exp_ParticleEffects","A3_Data_F_Mod_Loadorder","A3_Dubbing_F_Exp","A3_Dubbing_Radio_F_EXP","A3_Dubbing_Radio_F_EXP_Data_CHI","A3_Dubbing_Radio_F_EXP_Data_ENGFRE","A3_Dubbing_Radio_F_EXP_Data_FRE","A3_EditorPreviews_F_Exp","A3_Functions_F_Exp","A3_Language_F_Exp","A3_LanguageMissions_F_Exp","A3_Missions_F_Exp","A3_Missions_F_Exp_Data","A3_Missions_F_Exp_Video","A3_Modules_F_Exp","A3_Music_F_Exp","A3_Music_F_Exp_Music","A3_Props_F_Exp","A3_Props_F_Exp_Civilian","A3_Props_F_Exp_Civilian_Garbage","A3_Props_F_Exp_Commercial","A3_Props_F_Exp_Commercial_Market","A3_Props_F_Exp_Industrial","A3_Props_F_Exp_Industrial_HeavyEquipment","A3_Props_F_Exp_Infrastructure","A3_Props_F_Exp_Infrastructure_Railways","A3_Props_F_Exp_Infrastructure_Traffic","A3_Props_F_Exp_Military","A3_Props_F_Exp_Military_Camps","A3_Props_F_Exp_Military_OldPlaneWrecks","A3_Props_F_Exp_Naval","A3_Props_F_Exp_Naval_Boats","A3_Rocks_F_Exp","A3_Rocks_F_Exp_Cliff","A3_Rocks_F_Exp_LavaStones","A3_Soft_F_Exp","A3_Soft_F_Exp_LSV_01","A3_Soft_F_Exp_LSV_02","A3_Soft_F_Exp_MRAP_01","A3_Soft_F_Exp_MRAP_02","A3_Soft_F_Exp_Offroad_01","A3_Soft_F_Exp_Offroad_02","A3_Soft_F_Exp_Quadbike_01","A3_Soft_F_Exp_Truck_01","A3_Soft_F_Exp_Truck_02","A3_Soft_F_Exp_Truck_03","A3_Soft_F_Exp_UGV_01","A3_Soft_F_Exp_Van_01","A3_Static_F_Exp","A3_Static_F_Exp_AA_01","A3_Static_F_Exp_AT_01","A3_Static_F_Exp_GMG_01","A3_Static_F_Exp_HMG_01","A3_Static_F_Exp_Mortar_01","A3_Structures_F_Exp","A3_Structures_F_Exp_Civilian","A3_Structures_F_Exp_Civilian_Accessories","A3_Structures_F_Exp_Civilian_Garages","A3_Structures_F_Exp_Civilian_House_Big_01","A3_Structures_F_Exp_Civilian_House_Big_02","A3_Structures_F_Exp_Civilian_House_Big_03","A3_Structures_F_Exp_Civilian_House_Big_04","A3_Structures_F_Exp_Civilian_House_Big_05","A3_Structures_F_Exp_Civilian_House_Native_01","A3_Structures_F_Exp_Civilian_House_Native_02","A3_Structures_F_Exp_Civilian_House_Small_01","A3_Structures_F_Exp_Civilian_House_Small_02","A3_Structures_F_Exp_Civilian_House_Small_03","A3_Structures_F_Exp_Civilian_House_Small_04","A3_Structures_F_Exp_Civilian_House_Small_05","A3_Structures_F_Exp_Civilian_House_Small_06","A3_Structures_F_Exp_Civilian_School_01","A3_Structures_F_Exp_Civilian_Sheds","A3_Structures_F_Exp_Civilian_Slum_01","A3_Structures_F_Exp_Civilian_Slum_02","A3_Structures_F_Exp_Civilian_Slum_03","A3_Structures_F_Exp_Civilian_Slum_04","A3_Structures_F_Exp_Civilian_Slum_05","A3_Structures_F_Exp_Civilian_SportsGrounds","A3_Structures_F_Exp_Commercial","A3_Structures_F_Exp_Commercial_Addons","A3_Structures_F_Exp_Commercial_Advertisements","A3_Structures_F_Exp_Commercial_FuelStation_01","A3_Structures_F_Exp_Commercial_FuelStation_02","A3_Structures_F_Exp_Commercial_Hotel_01","A3_Structures_F_Exp_Commercial_Hotel_02","A3_Structures_F_Exp_Commercial_Market","A3_Structures_F_Exp_Commercial_MultistoryBuilding_01","A3_Structures_F_Exp_Commercial_MultistoryBuilding_03","A3_Structures_F_Exp_Commercial_MultistoryBuilding_04","A3_Structures_F_Exp_Commercial_Shop_City_01","A3_Structures_F_Exp_Commercial_Shop_City_02","A3_Structures_F_Exp_Commercial_Shop_City_03","A3_Structures_F_Exp_Commercial_Shop_City_04","A3_Structures_F_Exp_Commercial_Shop_City_05","A3_Structures_F_Exp_Commercial_Shop_City_06","A3_Structures_F_Exp_Commercial_Shop_City_07","A3_Structures_F_Exp_Commercial_Shop_Town_01","A3_Structures_F_Exp_Commercial_Shop_Town_02","A3_Structures_F_Exp_Commercial_Shop_Town_03","A3_Structures_F_Exp_Commercial_Shop_Town_04","A3_Structures_F_Exp_Commercial_Shop_Town_05","A3_Structures_F_Exp_Commercial_Supermarket_01","A3_Structures_F_Exp_Commercial_Warehouses","A3_Structures_F_Exp_Cultural","A3_Structures_F_Exp_Cultural_AncientRelics","A3_Structures_F_Exp_Cultural_BasaltRuins","A3_Structures_F_Exp_Cultural_Cathedral_01","A3_Structures_F_Exp_Cultural_Cemeteries","A3_Structures_F_Exp_Cultural_Church_01","A3_Structures_F_Exp_Cultural_Church_02","A3_Structures_F_Exp_Cultural_Church_03","A3_Structures_F_Exp_Cultural_Fortress_01","A3_Structures_F_Exp_Cultural_Temple_Native_01","A3_Structures_F_Exp_Cultural_Totems","A3_Structures_F_Exp_Data","A3_Structures_F_Exp_Industrial","A3_Structures_F_Exp_Industrial_DieselPowerPlant_01","A3_Structures_F_Exp_Industrial_Fields","A3_Structures_F_Exp_Industrial_Materials","A3_Structures_F_Exp_Industrial_Port","A3_Structures_F_Exp_Industrial_Stockyard_01","A3_Structures_F_Exp_Industrial_SugarCaneFactory_01","A3_Structures_F_Exp_Industrial_SurfaceMine_01","A3_Structures_F_Exp_Infrastructure","A3_Structures_F_Exp_Infrastructure_Airports","A3_Structures_F_Exp_Infrastructure_Bridges","A3_Structures_F_Exp_Infrastructure_Pavements","A3_Structures_F_Exp_Infrastructure_Powerlines","A3_Structures_F_Exp_Infrastructure_Railways","A3_Structures_F_Exp_Infrastructure_Roads","A3_Structures_F_Exp_Infrastructure_Runways","A3_Structures_F_Exp_Infrastructure_WaterSupply","A3_Structures_F_Exp_Military","A3_Structures_F_Exp_Military_Barracks_01","A3_Structures_F_Exp_Military_Camonets","A3_Structures_F_Exp_Military_ContainerBases","A3_Structures_F_Exp_Military_Emplacements","A3_Structures_F_Exp_Military_Flags","A3_Structures_F_Exp_Military_Fortifications","A3_Structures_F_Exp_Military_Pillboxes","A3_Structures_F_Exp_Military_Trenches","A3_Structures_F_Exp_Naval","A3_Structures_F_Exp_Naval_Canals","A3_Structures_F_Exp_Naval_Piers","A3_Structures_F_Exp_Signs","A3_Structures_F_Exp_Signs_Companies","A3_Structures_F_Exp_Signs_Traffic","A3_Structures_F_Exp_Walls","A3_Structures_F_Exp_Walls_BackAlleys","A3_Structures_F_Exp_Walls_Bamboo","A3_Structures_F_Exp_Walls_Concrete","A3_Structures_F_Exp_Walls_Crashbarriers","A3_Structures_F_Exp_Walls_Hedges","A3_Structures_F_Exp_Walls_Net","A3_Structures_F_Exp_Walls_Pipe","A3_Structures_F_Exp_Walls_Polewalls","A3_Structures_F_Exp_Walls_Railings","A3_Structures_F_Exp_Walls_Slum","A3_Structures_F_Exp_Walls_Stone","A3_Structures_F_Exp_Walls_Tin","A3_Structures_F_Exp_Walls_Wired","A3_Structures_F_Exp_Walls_Wooden","A3_Supplies_F_Exp","A3_Supplies_F_Exp_Ammoboxes","A3_Ui_F_Exp","A3_Vegetation_F_Exp","A3_Weapons_F_Exp","A3_Weapons_F_Exp_Launchers_RPG32","A3_Weapons_F_Exp_Launchers_RPG7","A3_Weapons_F_Exp_Launchers_Titan","A3_Weapons_F_Exp_LongRangeRifles_DMR_07","A3_Weapons_F_Exp_Machineguns_LMG_03","A3_Weapons_F_Exp_Pistols_Pistol_01","A3_Weapons_F_Exp_Rifles_AK12","A3_Weapons_F_Exp_Rifles_AKM","A3_Weapons_F_Exp_Rifles_AKS","A3_Weapons_F_Exp_Rifles_ARX","A3_Weapons_F_Exp_Rifles_CTAR","A3_Weapons_F_Exp_Rifles_CTARS","A3_Weapons_F_Exp_Rifles_SPAR_01","A3_Weapons_F_Exp_Rifles_SPAR_02","A3_Weapons_F_Exp_Rifles_SPAR_03","A3_Weapons_F_Exp_SMGs_SMG_05","A3_Air_F_Exp","A3_Air_F_Exp_Heli_Light_01","A3_Air_F_Exp_Heli_Transport_01","A3_Air_F_Exp_Plane_Civil_01","A3_Air_F_Exp_UAV_03","A3_Air_F_Exp_UAV_04","A3_Air_F_Exp_VTOL_01","A3_Air_F_Exp_VTOL_02","A3_Anims_F_Exp","A3_Anims_F_Exp_Revive","A3_Armor_F_Exp","A3_Armor_F_Exp_APC_Tracked_01","A3_Armor_F_Exp_APC_Tracked_02","A3_Armor_F_Exp_APC_Wheeled_01","A3_Armor_F_Exp_APC_Wheeled_02","A3_Armor_F_Exp_MBT_01","A3_Armor_F_Exp_MBT_02","A3_Boat_F_Exp","A3_Boat_F_Exp_Boat_Armed_01","A3_Boat_F_Exp_Boat_Transport_01","A3_Boat_F_Exp_Boat_Transport_02","A3_Boat_F_Exp_Scooter_Transport_01","A3_Cargoposes_F_Exp","A3_Characters_F_Exp","A3_Characters_F_Exp_Civil","A3_Characters_F_Exp_Headgear","A3_Characters_F_Exp_Vests","A3_Sounds_F_Exp","A3_Data_F_Exp_Loadorder","A3_Data_F_Jets","A3_Dubbing_F_Jets","A3_EditorPreviews_F_Jets","A3_Functions_F_Destroyer","A3_Functions_F_Jets","A3_Language_F_Jets","A3_LanguageMissions_F_Jets","A3_Modules_F_Jets","A3_Music_F_Jets","A3_Props_F_Jets","A3_Props_F_Jets_Military_Tractor","A3_Props_F_Jets_Military_Trolley","A3_Sounds_F_Jets","A3_Static_F_Jets","A3_Static_F_Jets_AAA_System_01","A3_Static_F_Jets_SAM_System_01","A3_Static_F_Jets_SAM_System_02","A3_Ui_F_Jets","A3_Weapons_F_Jets","A3_Air_F_Jets","A3_Air_F_Jets_Plane_Fighter_01","A3_Air_F_Jets_Plane_Fighter_02","A3_Air_F_Jets_Plane_Fighter_04","A3_Air_F_Jets_UAV_05","A3_Anims_F_Jets","A3_Boat_F_Jets","A3_Boat_F_Jets_Carrier_01","A3_Cargoposes_F_Jets","A3_Characters_F_Jets","A3_Characters_F_Jets_Vests","A3_Missions_F_Jets","A3_Boat_F_Destroyer","A3_Boat_F_Destroyer_Destroyer_01","A3_Data_F_Jets_Loadorder","A3_Data_F_Argo","A3_EditorPreviews_F_Argo","A3_Language_F_Argo","A3_Map_Malden","A3_Map_Malden_Data","A3_Map_Malden_Data_Layers","A3_Map_Malden_Scenes_F","A3_Music_F_Argo","A3_Props_F_Argo","A3_Props_F_Argo_Civilian","A3_Props_F_Argo_Civilian_InfoBoards","A3_Props_F_Argo_Items","A3_Props_F_Argo_Items_Documents","A3_Props_F_Argo_Items_Electronics","A3_Rocks_F_Argo","A3_Rocks_F_Argo_Limestone","A3_Structures_F_Argo","A3_Structures_F_Argo_Civilian","A3_Structures_F_Argo_Civilian_Accessories","A3_Structures_F_Argo_Civilian_Addons","A3_Structures_F_Argo_Civilian_Garbage","A3_Structures_F_Argo_Civilian_House_Big01","A3_Structures_F_Argo_Civilian_House_Big02","A3_Structures_F_Argo_Civilian_House_Small01","A3_Structures_F_Argo_Civilian_House_Small02","A3_Structures_F_Argo_Civilian_Stone_House_Big_01","A3_Structures_F_Argo_Civilian_Stone_Shed_01","A3_Structures_F_Argo_Civilian_Unfinished_Building_01","A3_Structures_F_Argo_Commercial","A3_Structures_F_Argo_Commercial_Accessories","A3_Structures_F_Argo_Commercial_Billboards","A3_Structures_F_Argo_Commercial_FuelStation_01","A3_Structures_F_Argo_Commercial_Shop_02","A3_Structures_F_Argo_Commercial_Supermarket_01","A3_Structures_F_Argo_Cultural","A3_Structures_F_Argo_Cultural_Church","A3_Structures_F_Argo_Cultural_Statues","A3_Structures_F_Argo_Decals","A3_Structures_F_Argo_Decals_Horizontal","A3_Structures_F_Argo_Industrial","A3_Structures_F_Argo_Industrial_Agriculture","A3_Structures_F_Argo_Industrial_Materials","A3_Structures_F_Argo_Infrastructure","A3_Structures_F_Argo_Infrastructure_Runways","A3_Structures_F_Argo_Infrastructure_Seaports","A3_Structures_F_Argo_Infrastructure_WaterSupply","A3_Structures_F_Argo_Military","A3_Structures_F_Argo_Military_Bunkers","A3_Structures_F_Argo_Military_ContainerBases","A3_Structures_F_Argo_Military_Domes","A3_Structures_F_Argo_Military_Fortifications","A3_Structures_F_Argo_Military_Turrets","A3_Structures_F_Argo_Signs","A3_Structures_F_Argo_Signs_City","A3_Structures_F_Argo_Signs_Directions","A3_Structures_F_Argo_Signs_Warnings","A3_Structures_F_Argo_Walls","A3_Structures_F_Argo_Walls_City","A3_Structures_F_Argo_Walls_Concrete","A3_Structures_F_Argo_Walls_Military","A3_Structures_F_Argo_Walls_Net","A3_Structures_F_Argo_Walls_Pipe","A3_Structures_F_Argo_Walls_Tin","A3_Structures_F_Argo_Walls_Wooden","A3_Structures_F_Argo_Wrecks","A3_Vegetation_F_Argo","A3_Armor_F_Argo","A3_Armor_F_Argo_APC_Tracked_01","A3_Armor_F_Argo_APC_Wheeled_02","A3_Data_F_Argo_Loadorder","A3_Data_F_Patrol","A3_Functions_F_Patrol","A3_Language_F_Patrol","A3_LanguageMissions_F_Patrol","A3_Map_Tanoabuka","A3_Map_Tanoabuka_Data","A3_Map_Tanoabuka_Data_Layers","A3_Modules_F_Patrol","A3_Sounds_F_Patrol","A3_Ui_F_Patrol","A3_Weapons_F_Patrol","A3_Characters_F_Patrol","A3_Map_Tanoa_Scenes_F","A3_Missions_F_Patrol","A3_Data_F_Patrol_Loadorder","A3_Data_F_Orange","A3_Dubbing_F_Orange","A3_EditorPreviews_F_Orange","A3_Functions_F_Orange","A3_Language_F_Orange","A3_LanguageMissions_F_Orange","A3_Missions_F_Orange","A3_Modules_F_Orange","A3_Music_F_Orange","A3_Props_F_Orange","A3_Props_F_Orange_Civilian","A3_Props_F_Orange_Civilian_Constructions","A3_Props_F_Orange_Civilian_InfoBoards","A3_Props_F_Orange_Furniture","A3_Props_F_Orange_Humanitarian","A3_Props_F_Orange_Humanitarian_Camps","A3_Props_F_Orange_Humanitarian_Garbage","A3_Props_F_Orange_Humanitarian_Supplies","A3_Props_F_Orange_Items","A3_Props_F_Orange_Items_Decorative","A3_Props_F_Orange_Items_Documents","A3_Props_F_Orange_Items_Electronics","A3_Props_F_Orange_Items_Tools","A3_Soft_F_Orange","A3_Soft_F_Orange_Offroad_01","A3_Soft_F_Orange_Offroad_02","A3_Soft_F_Orange_Truck_02","A3_Soft_F_Orange_UGV_01","A3_Soft_F_Orange_Van_02","A3_Structures_F_Orange","A3_Structures_F_Orange_Humanitarian","A3_Structures_F_Orange_Humanitarian_Camps","A3_Structures_F_Orange_Humanitarian_Flags","A3_Structures_F_Orange_Industrial","A3_Structures_F_Orange_Industrial_Cargo","A3_Structures_F_Orange_Signs","A3_Structures_F_Orange_Signs_Mines","A3_Structures_F_Orange_Signs_Special","A3_Structures_F_Orange_VR_Helpers","A3_Structures_F_Orange_Walls","A3_Structures_F_Orange_Walls_Plastic","A3_Supplies_F_Orange","A3_Supplies_F_Orange_Ammoboxes","A3_Supplies_F_Orange_Bags","A3_Supplies_F_Orange_CargoNets","A3_Ui_F_Orange","A3_Weapons_F_Orange","A3_Weapons_F_Orange_Explosives","A3_Weapons_F_Orange_Items","A3_Air_F_Orange","A3_Air_F_Orange_Heli_Transport_02","A3_Air_F_Orange_UAV_01","A3_Air_F_Orange_UAV_06","A3_Cargoposes_F_Orange","A3_Characters_F_Orange","A3_Characters_F_Orange_Facewear","A3_Characters_F_Orange_Headgear","A3_Characters_F_Orange_Uniforms","A3_Characters_F_Orange_Vests","A3_Sounds_F_Orange","A3_Data_F_Orange_Loadorder","A3_Data_F_Tacops","A3_Dubbing_F_Tacops","A3_Functions_F_Tacops","A3_Language_F_Tacops","A3_LanguageMissions_F_Tacops","A3_Missions_F_Tacops","A3_Modules_F_Tacops","A3_Music_F_Tacops","A3_Sounds_F_Tacops","A3_Ui_F_Tacops","A3_Characters_F_Tacops","A3_Data_F_Tacops_Loadorder","A3_Data_F_Tank","A3_Dubbing_F_Tank","A3_EditorPreviews_F_Tank","A3_Functions_F_Tank","A3_Language_F_Tank","A3_Language_F_Warlords","A3_LanguageMissions_F_Tank","A3_Missions_F_Tank","A3_Modules_F_Tank","A3_Music_F_Tank","A3_Props_F_Tank","A3_Props_F_Tank_Military","A3_Props_F_Tank_Military_TankAcc","A3_Props_F_Tank_Military_Wrecks","A3_Sounds_F_Tank","A3_Structures_F_Tank","A3_Structures_F_Tank_Decals","A3_Structures_F_Tank_Decals_Horizontal","A3_Structures_F_Tank_Military","A3_Structures_F_Tank_Military_Fortifications","A3_Structures_F_Tank_Military_RepairDepot","A3_Ui_F_Tank","A3_Weapons_F_Tank","A3_Weapons_F_Tank_Bags","A3_Weapons_F_Tank_Launchers_MRAWS","A3_Weapons_F_Tank_Launchers_Vorona","A3_Armor_F_Tank","A3_Armor_F_Tank_AFV_Wheeled_01","A3_Armor_F_Tank_LT_01","A3_Armor_F_Tank_MBT_04","A3_Cargoposes_F_Tank","A3_Characters_F_Tank","A3_Characters_F_Tank_Headgear","A3_Characters_F_Tank_Uniforms","A3_Data_F_Tank_Loadorder","A3_Data_F_Destroyer","A3_Data_F_Sams","A3_Data_F_Warlords","A3_Dubbing_F_Warlords","A3_EditorPreviews_F_Destroyer","A3_EditorPreviews_F_Sams","A3_Functions_F_Warlords","A3_Language_F_Destroyer","A3_Language_F_Sams","A3_Missions_F_Warlords","A3_Missions_F_Warlords_Data","A3_Modules_F_Warlords","A3_Props_F_Destroyer","A3_Props_F_Destroyer_Military_BriefingRoomDesk","A3_Props_F_Destroyer_Military_BriefingRoomScreen","A3_Static_F_Destroyer","A3_Static_F_Destroyer_Boat_Rack_01","A3_Static_F_Destroyer_Ship_Gun_01","A3_Static_F_Destroyer_Ship_MRLS_01","A3_Static_F_Sams","A3_Static_F_Sams_Radar_System_01","A3_Static_F_Sams_Radar_System_02","A3_Static_F_Sams_SAM_System_03","A3_Static_F_Sams_SAM_System_04","A3_Weapons_F_Destroyer","A3_Weapons_F_Sams","A3_Data_F_Destroyer_Loadorder","A3_Data_F_Sams_Loadorder","A3_Data_F_Warlords_Loadorder","A3_Data_F_Enoch","A3_Dubbing_Radio_F_Enoch","A3_EditorPreviews_F_Enoch","A3_Functions_F_Enoch","A3_Language_F_Enoch","A3_Missions_F_Enoch","A3_Music_F_Enoch","A3_Props_F_Enoch","A3_Props_F_Enoch_Civilian","A3_Props_F_Enoch_Civilian_Camping","A3_Props_F_Enoch_Civilian_Forest","A3_Props_F_Enoch_Civilian_Garbage","A3_Props_F_Enoch_Civilian_InfoBoards","A3_Props_F_Enoch_Industrial","A3_Props_F_Enoch_Industrial_Electric","A3_Props_F_Enoch_Industrial_Supplies","A3_Props_F_Enoch_Infrastructure","A3_Props_F_Enoch_Infrastructure_Traffic","A3_Props_F_Enoch_Items","A3_Props_F_Enoch_Items_Documents","A3_Props_F_Enoch_Items_AluminiumFoil","A3_Props_F_Enoch_Military","A3_Props_F_Enoch_Military_Camps","A3_Props_F_Enoch_Military_Decontamination","A3_Props_F_Enoch_Military_Equipment","A3_Props_F_Enoch_Military_Garbage","A3_Props_F_Enoch_Military_Supplies","A3_Props_F_Enoch_Military_Wrecks","A3_Rocks_F_Enoch","A3_Rocks_F_Enoch_Sinkhole","A3_Soft_F_Enoch","A3_Soft_F_Enoch_Offroad_01","A3_Soft_F_Enoch_Quadbike_01","A3_Soft_F_Enoch_Tractor_01","A3_Soft_F_Enoch_Truck_01","A3_Soft_F_Enoch_Truck_02","A3_Soft_F_Enoch_UGV_01","A3_Soft_F_Enoch_UGV_02","A3_Soft_F_Enoch_Van_02","A3_Sounds_F_Enoch","A3_Static_F_Enoch","A3_Static_F_Enoch_AA_01","A3_Static_F_Enoch_AT_01","A3_Static_F_Enoch_Designator_01","A3_Static_F_Enoch_GMG_01","A3_Static_F_Enoch_HMG_01","A3_Static_F_Enoch_Mortar_01","A3_Static_F_Enoch_Radar_System_01","A3_Static_F_Enoch_SAM_System_03","A3_Structures_F_Enoch","A3_Structures_F_Enoch_Civilian","A3_Structures_F_Enoch_Civilian_Accessories","A3_Structures_F_Enoch_Civilian_Camps","A3_Structures_F_Enoch_Civilian_Constructions","A3_Structures_F_Enoch_Civilian_Houses","A3_Structures_F_Enoch_Civilian_Medical","A3_Structures_F_Enoch_Civilian_Police","A3_Structures_F_Enoch_Civilian_Sheds","A3_Structures_F_Enoch_Commercial","A3_Structures_F_Enoch_Commercial_FuelStation_03","A3_Structures_F_Enoch_Commercial_VillageStore_01","A3_Structures_F_Enoch_Cultural","A3_Structures_F_Enoch_Cultural_Calvary_03","A3_Structures_F_Enoch_Cultural_Calvary_04","A3_Structures_F_Enoch_Cultural_CastleRuins","A3_Structures_F_Enoch_Cultural_Cemeteries","A3_Structures_F_Enoch_Cultural_Chapel_01","A3_Structures_F_Enoch_Cultural_Chapel_02","A3_Structures_F_Enoch_Cultural_Church_04","A3_Structures_F_Enoch_Cultural_Church_05","A3_Structures_F_Enoch_Cultural_OrthodoxChurches","A3_Structures_F_Enoch_Cultural_Statues","A3_Structures_F_Enoch_Data","A3_Structures_F_Enoch_Decals","A3_Structures_F_Enoch_Decals_Horizontal","A3_Structures_F_Enoch_Furniture","A3_Structures_F_Enoch_Industrial","A3_Structures_F_Enoch_Industrial_Agriculture","A3_Structures_F_Enoch_Industrial_Cargo","A3_Structures_F_Enoch_Industrial_CementWorks","A3_Structures_F_Enoch_Industrial_CoalPlant_01","A3_Structures_F_Enoch_Industrial_DieselPowerPlant_01","A3_Structures_F_Enoch_Industrial_Farms","A3_Structures_F_Enoch_Industrial_Garages","A3_Structures_F_Enoch_Industrial_Houses","A3_Structures_F_Enoch_Industrial_Materials","A3_Structures_F_Enoch_Industrial_Mines","A3_Structures_F_Enoch_Industrial_Pipes","A3_Structures_F_Enoch_Industrial_Power","A3_Structures_F_Enoch_Industrial_Sawmills","A3_Structures_F_Enoch_Industrial_Sheds","A3_Structures_F_Enoch_Industrial_Smokestacks","A3_Structures_F_Enoch_Industrial_Transmitter_Tower","A3_Structures_F_Enoch_Infrastructure","A3_Structures_F_Enoch_Infrastructure_Benchmarks","A3_Structures_F_Enoch_Infrastructure_Bridges","A3_Structures_F_Enoch_Infrastructure_Highway","A3_Structures_F_Enoch_Infrastructure_Lamps","A3_Structures_F_Enoch_Infrastructure_Pavements","A3_Structures_F_Enoch_Infrastructure_Powerlines","A3_Structures_F_Enoch_Infrastructure_Railways","A3_Structures_F_Enoch_Infrastructure_Roads","A3_Structures_F_Enoch_Military","A3_Structures_F_Enoch_Military_Airfield","A3_Structures_F_Enoch_Military_Barracks","A3_Structures_F_Enoch_Military_Bunkers","A3_Structures_F_Enoch_Military_Camonets","A3_Structures_F_Enoch_Military_Camps","A3_Structures_F_Enoch_Military_Domes","A3_Structures_F_Enoch_Military_Flags","A3_Structures_F_Enoch_Military_Radar","A3_Structures_F_Enoch_Military_Training","A3_Structures_F_Enoch_Ruins","A3_Structures_F_Enoch_Signs","A3_Structures_F_Enoch_Signs_City","A3_Structures_F_Enoch_Signs_Companies","A3_Structures_F_Enoch_Signs_Directions","A3_Structures_F_Enoch_Signs_Traffic","A3_Structures_F_Enoch_Signs_Warnings","A3_Structures_F_Enoch_VR_Helpers","A3_Structures_F_Enoch_Walls","A3_Structures_F_Enoch_Walls_Brick","A3_Structures_F_Enoch_Walls_Concrete","A3_Structures_F_Enoch_Walls_Net","A3_Structures_F_Enoch_Walls_Pipe","A3_Structures_F_Enoch_Walls_Polewalls","A3_Structures_F_Enoch_Walls_Stone","A3_Structures_F_Enoch_Walls_Wooden","A3_Structures_F_Enoch_Wrecks","A3_Supplies_F_Enoch","A3_Supplies_F_Enoch_Ammoboxes","A3_Supplies_F_Enoch_Bags","A3_Ui_F_Enoch","A3_Vegetation_F_Enoch","A3_Weapons_F_Enoch","A3_Weapons_F_Enoch_Acc","A3_Weapons_F_Enoch_Items","A3_Weapons_F_Enoch_Launchers_RPG32","A3_Weapons_F_Enoch_Launchers_Titan","A3_Weapons_F_Enoch_LongRangeRifles_DMR_06","A3_Weapons_F_Enoch_Machineguns_M200","A3_Weapons_F_Enoch_Pistols_ESD","A3_Weapons_F_Enoch_Pistols_Pistol_Heavy_01","A3_Weapons_F_Enoch_Rifles_AK12","A3_Weapons_F_Enoch_Rifles_MSBS","A3_Weapons_F_Enoch_Rifles_MX","A3_Weapons_F_Enoch_Rifles_HunterShotgun_01","A3_Air_F_Enoch","A3_Air_F_Enoch_Heli_Light_03","A3_Air_F_Enoch_UAV_01","A3_Air_F_Enoch_UAV_06","A3_Anims_F_Enoch","A3_Armor_F_Enoch","A3_Armor_F_Enoch_APC_Tracked_03","A3_Cargoposes_F_Enoch","A3_Characters_F_Enoch","A3_Characters_F_Enoch_Facewear","A3_Characters_F_Enoch_Headgear","A3_Characters_F_Enoch_Vests","A3_Map_Enoch","A3_Map_Enoch_Data","A3_Map_Enoch_Data_Layers","A3_Map_Enoch_Scenes_F","A3_Data_F_Enoch_Loadorder"]; + uiNamespace setVariable ["RscDisplayRemoteMissions",displayNull]; //for Spy-Glass uiNamespace setVariable ["RscDisplayMultiplayer",displayNull]; @@ -296,5 +146,9 @@ if (getText(configFile >> "CfgFunctions" >> "init") != "A3\functions_f\initFunct }; [] execVM "SpyGlass\fn_cmdMenuCheck.sqf"; -[] execVM "SpyGlass\fn_variableCheck.sqf"; -[] execVM "SpyGlass\fn_menuCheck.sqf"; \ No newline at end of file +[] execVM "SpyGlass\fn_menuCheck.sqf"; + +/* + Disabled at 5.0.0 +*/ +//[] execVM "SpyGlass\fn_variableCheck.sqf"; diff --git a/Altis_Life.Altis/core/clientValidator.sqf b/Altis_Life.Altis/core/clientValidator.sqf index 3428cc68e..60bba7725 100644 --- a/Altis_Life.Altis/core/clientValidator.sqf +++ b/Altis_Life.Altis/core/clientValidator.sqf @@ -1,4 +1,5 @@ #include "..\script_macros.hpp" + /* File: clientValidator.sqf Author: @@ -8,11 +9,10 @@ or not they are defined, if they are defined then trigger spyglass and kick the client to the lobby. */ -private ["_vars"]; -_vars = [ - "life_revive_fee", "life_gangPrice", "life_gangUpgradeBase", "life_enableFatigue", "life_paycheck_period", "life_vShop_rentalOnly", "sell_array", "buy_array", - "life_weapon_shop_array", "life_garage_prices", "life_garage_sell", "life_houseLimit", "life_gangUpgradeMultipler", "life_impound_car", "life_impound_boat", - "life_impound_air" + +private _vars = [ + "life_revive_fee", "life_gangPrice", "life_gangUpgradeBase", "life_enableFatigue", "life_paycheck_period", "life_vShop_rentalOnly", "life_weapon_shop_array", + "life_garage_prices", "life_garage_sell", "life_houseLimit", "life_gangUpgradeMultipler", "life_impound_car", "life_impound_boat", "life_impound_air" ]; { From da43c4e1b79d55ea40c7083f6913011c30f9f9ef Mon Sep 17 00:00:00 2001 From: Casperento <44746868+Casperento@users.noreply.github.com> Date: Tue, 31 Dec 2019 10:46:41 -0300 Subject: [PATCH 02/33] Headgear config for startLoadout (#594) * Wrong vehicle selling on chopshop FIX * Chopshop cleanup #1 * Chopshop PR requested changes #1 * PR requested changes #1 pt2 * tests fix #1 * PR requested changes pt3 #1 * Slight improvement #1 * Startup loadout enhancement * Few changes...pt1 * old file deleted.. * New headgear config.. Co-authored-by: Ollie W --- Altis_Life.Altis/config/Config_Loadouts.hpp | 9 ++++++++- Altis_Life.Altis/core/functions/fn_startLoadout.sqf | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) mode change 100755 => 100644 Altis_Life.Altis/config/Config_Loadouts.hpp diff --git a/Altis_Life.Altis/config/Config_Loadouts.hpp b/Altis_Life.Altis/config/Config_Loadouts.hpp old mode 100755 new mode 100644 index fe95238d1..835338504 --- a/Altis_Life.Altis/config/Config_Loadouts.hpp +++ b/Altis_Life.Altis/config/Config_Loadouts.hpp @@ -5,7 +5,7 @@ // if you put more than a uniform on the CIV's class, they will be selected randonly, // otherwise, for the other teams, player will get the uniform related to his level - itemType[] = { // itemType can be: uniform, vest, backpack, weapon, items or linkedItems + itemType[] = { // itemType can be: uniform, headgear, vest, backpack, weapon, items or linkedItems { "classname", "conditions" } }; }; @@ -16,6 +16,9 @@ class Loadouts { uniform[] = { {"U_Rangemaster", "call life_copLevel >= 0"} }; + headgear[] = { + {"H_Cap_blk", "call life_copLevel >= 0"} + }; vest[] = { {"V_Rangemaster_belt", "call life_copLevel >= 0"} }; @@ -45,6 +48,7 @@ class Loadouts { {"U_C_Poloshirt_redwhite", "!life_is_arrested"}, {"U_C_Commoner1_1", "!life_is_arrested"} }; + headgear[] = {}; vest[] = {}; backpack[] = {}; weapon[] = {}; @@ -62,6 +66,9 @@ class Loadouts { uniform[] = { {"U_Rangemaster", "call life_medicLevel >= 1"} }; + headgear[] = { + {"H_Cap_red", "call life_medicLevel >= 1"} + }; vest[] = {}; backpack[] = {}; weapon[] = {}; diff --git a/Altis_Life.Altis/core/functions/fn_startLoadout.sqf b/Altis_Life.Altis/core/functions/fn_startLoadout.sqf index 92819ebc1..be48dfee6 100755 --- a/Altis_Life.Altis/core/functions/fn_startLoadout.sqf +++ b/Altis_Life.Altis/core/functions/fn_startLoadout.sqf @@ -7,6 +7,7 @@ Loads a custom loadout on player when he got a new life */ private _pUniform = M_CONFIG(getArray,"Loadouts",str(playerSide),"uniform"); +private _pHeadgear = M_CONFIG(getArray,"Loadouts",str(playerSide),"headgear"); private _pVest = M_CONFIG(getArray,"Loadouts",str(playerSide),"vest"); private _pBackpack = M_CONFIG(getArray,"Loadouts",str(playerSide),"backpack"); private _pWeapon = M_CONFIG(getArray,"Loadouts",str(playerSide),"weapon"); @@ -29,6 +30,14 @@ if !(_pUniform isEqualTo []) then { }; }; +if !(_pHeadgear isEqualTo []) then { + _pHeadgear apply { + if (!(_x isEqualTo []) && {!((_x select 0) isEqualTo "") && {([(_x select 1)] call life_fnc_levelCheck)}}) then { + player addHeadgear (_x select 0); + }; + }; +}; + if !(_pVest isEqualTo []) then { _pVest apply { if (!(_x isEqualTo []) && {!((_x select 0) isEqualTo "") && {([(_x select 1)] call life_fnc_levelCheck)}}) then { From 628c4e080d8339ec09020e51bef4b140464c71ee Mon Sep 17 00:00:00 2001 From: DomT602 <32492434+DomT602@users.noreply.github.com> Date: Tue, 31 Dec 2019 13:49:30 +0000 Subject: [PATCH 03/33] Anti-dupe improvement & esc menu handler (#595) * Initial commit * Missing changes? * fixes Co-authored-by: Jason_000 --- Altis_Life.Altis/Functions.hpp | 2 +- Altis_Life.Altis/config/Config_SpyGlass.hpp | 2 +- Altis_Life.Altis/core/fn_setupEVH.sqf | 2 + .../core/functions/fn_escInterupt.sqf | 69 ------------------- .../core/functions/fn_inventoryOpened.sqf | 8 +++ .../core/functions/fn_onGameInterrupt.sqf | 46 +++++++++++++ Altis_Life.Altis/core/init.sqf | 10 --- 7 files changed, 58 insertions(+), 81 deletions(-) delete mode 100644 Altis_Life.Altis/core/functions/fn_escInterupt.sqf create mode 100644 Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf diff --git a/Altis_Life.Altis/Functions.hpp b/Altis_Life.Altis/Functions.hpp index 97aa193fd..87393ad7e 100644 --- a/Altis_Life.Altis/Functions.hpp +++ b/Altis_Life.Altis/Functions.hpp @@ -178,7 +178,7 @@ class Life_Client_Core { class checkMap {}; class clearVehicleAmmo {}; class dropItems {}; - class escInterupt {}; + class onGameInterrupt {}; class fetchCfgDetails {}; class fetchDeadGear {}; class fetchVehInfo {}; diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index da5676e2f..cbd535760 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -248,7 +248,7 @@ class SpyGlass { "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_escinterupt","life_fnc_escinterupt_meta","life_fnc_escortaction","life_fnc_escortaction_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", diff --git a/Altis_Life.Altis/core/fn_setupEVH.sqf b/Altis_Life.Altis/core/fn_setupEVH.sqf index 67707de38..2b0efbf8b 100644 --- a/Altis_Life.Altis/core/fn_setupEVH.sqf +++ b/Altis_Life.Altis/core/fn_setupEVH.sqf @@ -15,3 +15,5 @@ player addEventHandler ["InventoryOpened", {_this call life_fnc_inventoryOpened} player addEventHandler ["HandleRating", {0}]; addMissionEventHandler ["Map", {_this call life_fnc_checkMap}]; + +[missionNamespace,"OnGameInterrupt",{_this call life_fnc_onGameInterrupt}] call BIS_fnc_addScriptedEventHandler; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_escInterupt.sqf b/Altis_Life.Altis/core/functions/fn_escInterupt.sqf deleted file mode 100644 index d7bf904ad..000000000 --- a/Altis_Life.Altis/core/functions/fn_escInterupt.sqf +++ /dev/null @@ -1,69 +0,0 @@ -#include "..\..\script_macros.hpp" - -/* - File: fn_escInterupt.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Monitors when the ESC menu is pulled up and blocks off - certain controls when conditions meet. -*/ -disableSerialization; - -private _escSync = { - disableSerialization; - private _abortButton = CONTROL(49,104); - private _abortTime = LIFE_SETTINGS(getNumber,"escapeMenu_timer"); - private _timeStamp = time + _abortTime; - - waitUntil { - _abortButton ctrlSetText format [localize "STR_NOTF_AbortESC",[(_timeStamp - time),"SS.MS"] call BIS_fnc_secondsToString]; - _abortButton ctrlCommit 0; - if (dialog && {isNull (findDisplay 7300)}) then {closeDialog 0}; - - round(_timeStamp - time) <= 0 || {isNull (findDisplay 49)} - }; - - _abortButton ctrlSetText localize "STR_DISP_INT_ABORT"; - _abortButton ctrlCommit 0; - _abortButton ctrlEnable true; -}; - -private _canUseControls = { - (playerSide isEqualTo west) || {!((player getVariable ["restrained",false]) || {player getVariable ["Escorting",false]} || {player getVariable ["transporting",false]} || {life_is_arrested} || {life_istazed} || {life_isknocked})} -}; - -for "_i" from 0 to 1 step 0 do { - waitUntil {!isNull (findDisplay 49)}; - private _abortButton = CONTROL(49,104); - _abortButton buttonSetAction "call SOCK_fnc_updateRequest; [player] remoteExec [""TON_fnc_cleanupRequest"",2];"; - private _respawnButton = CONTROL(49,1010); - private _fieldManual = CONTROL(49,122); - private _saveButton = CONTROL(49,103); - _saveButton ctrlSetText ""; - - //Extras - if (LIFE_SETTINGS(getNumber,"escapeMenu_displayExtras") isEqualTo 1) then { - private _topButton = CONTROL(49,2); - _topButton ctrlEnable false; - _topButton ctrlSetText format ["%1",LIFE_SETTINGS(getText,"escapeMenu_displayText")]; - _saveButton ctrlEnable false; - _saveButton ctrlSetText format ["Player UID: %1",getPlayerUID player]; - }; - - //Block off our buttons first. - _abortButton ctrlEnable false; - _fieldManual ctrlEnable false; //Never re-enable, blocks an old script executor. - _fieldManual ctrlShow false; - - if (call _canUseControls) then { - [] spawn _escSync; - } else { - _respawnButton ctrlEnable false; - }; - - waitUntil {isNull (findDisplay 49) || {!alive player}}; - if (!isNull (findDisplay 49) && {!alive player}) then { - (findDisplay 49) closeDisplay 2; - }; -}; diff --git a/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf b/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf index c715c2d00..49b84d84b 100644 --- a/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf +++ b/Altis_Life.Altis/core/functions/fn_inventoryOpened.sqf @@ -46,3 +46,11 @@ private _list = ["LandVehicle", "Ship", "Air"]; true breakOut "main"; }; } count [_container, _secContainer]; + +[] spawn { + private _startTime = time; + waitUntil {!(isNull (findDisplay 49)) || time > (_startTime + 2.5)}; + if !(isNull (findDisplay 49)) then { + (findDisplay 49) closeDisplay 2; //close Esc dialog + }; +}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf b/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf new file mode 100644 index 000000000..4533d4c65 --- /dev/null +++ b/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf @@ -0,0 +1,46 @@ +#include "..\..\script_macros.hpp" +/* + File: fn_onGameInterrupt.sqf + Author: DomT602 + Description: Handles game interuptions - ie when esc menu is opened. +*/ +params [ + ["_display",displayNull,[displayNull]] +]; + +private _abortButton = _display displayCtrl 104; +private _respawnButton = _display displayCtrl 1010; +private _fieldManual = _display displayCtrl 122; +private _saveButton = _display displayCtrl 103; +private _topButton = _display displayCtrl 2; + +_abortButton ctrlEnable false; +_abortButton buttonSetAction "call SOCK_fnc_updateRequest; [player] remoteExec [""TON_fnc_cleanupRequest"",2];"; +_respawnButton ctrlEnable false; +_fieldManual ctrlEnable false; +_saveButton ctrlEnable false; + +if (LIFE_SETTINGS(getNumber,"escapeMenu_displayExtras") isEqualTo 1) then { + _topButton ctrlEnable false; + _topButton ctrlSetText (LIFE_SETTINGS(getText,"escapeMenu_displayText")); + _saveButton ctrlSetText format ["Player UID: %1",getPlayerUID player]; +}; + +private _conditions = playerSide isEqualTo west || {!((player getVariable ["restrained",false]) || {player getVariable ["Escorting",false]} || {player getVariable ["transporting",false]} || {life_is_arrested} || {life_istazed} || {life_isknocked})}; +if (_conditions) then { + [_display,_abortButton] spawn { + params ["_display","_abortButton"]; + private _abortTime = LIFE_SETTINGS(getNumber,"escapeMenu_timer"); + private _timeStamp = time + _abortTime; + + waitUntil { + _abortButton ctrlSetText format [localize "STR_NOTF_AbortESC",[(_timeStamp - time),"SS.MS"] call BIS_fnc_secondsToString]; + if (dialog && {isNull (findDisplay 7300)}) then {closeDialog 0}; + + (_timeStamp - time) <= 0 || {isNull _display || {!alive player}} + }; + if (!alive player) exitWith {}; + _abortButton ctrlSetText localize "STR_DISP_INT_ABORT"; + _abortButton ctrlEnable true; + }; +}; \ No newline at end of file diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf index 82cc02cf9..e62d1fd35 100644 --- a/Altis_Life.Altis/core/init.sqf +++ b/Altis_Life.Altis/core/init.sqf @@ -44,8 +44,6 @@ diag_log "[Life Client] Server loading completed "; waitUntil {life_session_completed}; 0 cutText[localize "STR_Init_ClientFinish","BLACK FADED",99999999]; -[] spawn life_fnc_escInterupt; - switch (playerSide) do { case west: { life_paycheck = LIFE_SETTINGS(getNumber,"paycheck_cop"); @@ -80,14 +78,6 @@ diag_log "[Life Client] Executing client.fsm"; 0 cutText ["","BLACK IN"]; -[] spawn { - for "_i" from 0 to 1 step 0 do { - waitUntil {(!isNull (findDisplay 49)) && {(!isNull (findDisplay 602))}}; // Check if Inventory and ESC dialogs are open - (findDisplay 49) closeDisplay 2; // Close ESC dialog - (findDisplay 602) closeDisplay 2; // Close Inventory dialog - }; -}; - addMissionEventHandler ["EachFrame", life_fnc_playerTags]; addMissionEventHandler ["EachFrame", life_fnc_revealObjects]; From 84c4f7c5e3f7dcd750a843b9f43abfbc7ea2c131 Mon Sep 17 00:00:00 2001 From: Jason_000 Date: Tue, 31 Dec 2019 18:33:36 +0000 Subject: [PATCH 04/33] Add sql-custom back (#592) * Add sql-custom back * Remove references to houseCleanup * Update SQL file to previous consistency * Add removed code for processing gang funds * Use the correct function prefix for the HC * Update houseCleanup to current standards * Add macros to updateGang files * Update chop shop files to current * Remove duplication * Fix gang disbanding and remove additional call to procedure * Remove query from ini file * Gang disband fix --- AL.ini | 352 ++++++++++++++++++ .../core/gangs/fn_gangDisbanded.sqf | 6 +- .../core/session/fn_requestReceived.sqf | 13 +- altislife.sql | 11 +- life_hc/FSM/cleanup.fsm | 4 +- life_hc/MySQL/Gangs/fn_insertGang.sqf | 61 +-- life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf | 14 +- life_hc/MySQL/Gangs/fn_removeGang.sqf | 22 +- life_hc/MySQL/Gangs/fn_updateGang.sqf | 38 +- life_hc/MySQL/General/fn_bool.sqf | 26 -- life_hc/MySQL/General/fn_cleanup.sqf | 2 +- life_hc/MySQL/General/fn_insertRequest.sqf | 33 +- life_hc/MySQL/General/fn_insertVehicle.sqf | 9 +- life_hc/MySQL/General/fn_mresArray.sqf | 27 -- life_hc/MySQL/General/fn_mresString.sqf | 21 -- life_hc/MySQL/General/fn_mresToArray.sqf | 26 -- life_hc/MySQL/General/fn_numberSafe.sqf | 28 -- life_hc/MySQL/General/fn_queryRequest.sqf | 181 +++------ life_hc/MySQL/General/fn_updatePartial.sqf | 75 ++-- life_hc/MySQL/General/fn_updateRequest.sqf | 59 ++- life_hc/MySQL/Housing/fn_addContainer.sqf | 27 +- life_hc/MySQL/Housing/fn_addHouse.sqf | 20 +- .../MySQL/Housing/fn_deleteDBContainer.sqf | 25 +- .../MySQL/Housing/fn_fetchPlayerHouses.sqf | 22 +- life_hc/MySQL/Housing/fn_houseGarage.sqf | 20 +- life_hc/MySQL/Housing/fn_sellHouse.sqf | 32 +- .../MySQL/Housing/fn_sellHouseContainer.sqf | 25 +- .../Housing/fn_updateHouseContainers.sqf | 26 +- life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf | 19 +- life_hc/MySQL/Vehicles/fn_chopShopSell.sqf | 4 +- life_hc/MySQL/Vehicles/fn_getVehicles.sqf | 30 +- life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf | 68 ++-- life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf | 25 +- life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf | 20 +- life_hc/MySQL/Vehicles/fn_vehicleStore.sqf | 118 +++--- life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf | 57 +-- life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf | 95 ++--- .../MySQL/WantedSystem/fn_wantedBounty.sqf | 29 +- .../MySQL/WantedSystem/fn_wantedCrimes.sqf | 76 +--- life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf | 40 +- .../MySQL/WantedSystem/fn_wantedPerson.sqf | 14 +- .../WantedSystem/fn_wantedProfUpdate.sqf | 19 +- .../MySQL/WantedSystem/fn_wantedRemove.sqf | 11 +- life_hc/config.cpp | 5 - life_hc/initHC.sqf | 11 +- life_server/FSM/cleanup.fsm | 4 +- life_server/Functions/Gangs/fn_insertGang.sqf | 61 +-- .../Functions/Gangs/fn_queryPlayerGang.sqf | 14 +- life_server/Functions/Gangs/fn_removeGang.sqf | 22 +- life_server/Functions/Gangs/fn_updateGang.sqf | 38 +- .../Functions/Housing/fn_addContainer.sqf | 27 +- life_server/Functions/Housing/fn_addHouse.sqf | 19 +- .../Housing/fn_deleteDBContainer.sqf | 27 +- .../Housing/fn_fetchPlayerHouses.sqf | 28 +- .../Functions/Housing/fn_houseCleanup.sqf | 3 +- .../Functions/Housing/fn_houseGarage.sqf | 17 +- .../Functions/Housing/fn_initHouses.sqf | 29 +- .../Functions/Housing/fn_sellHouse.sqf | 33 +- .../Housing/fn_sellHouseContainer.sqf | 25 +- .../Housing/fn_updateHouseContainers.sqf | 26 +- .../Functions/Housing/fn_updateHouseTrunk.sqf | 18 +- life_server/Functions/MySQL/fn_asyncCall.sqf | 24 +- life_server/Functions/MySQL/fn_bool.sqf | 26 -- .../Functions/MySQL/fn_insertRequest.sqf | 31 +- .../Functions/MySQL/fn_insertVehicle.sqf | 10 +- life_server/Functions/MySQL/fn_mresArray.sqf | 27 -- life_server/Functions/MySQL/fn_mresString.sqf | 21 -- .../Functions/MySQL/fn_mresToArray.sqf | 26 -- life_server/Functions/MySQL/fn_numberSafe.sqf | 28 -- .../Functions/MySQL/fn_queryRequest.sqf | 177 +++------ .../Functions/MySQL/fn_updatePartial.sqf | 73 ++-- .../Functions/MySQL/fn_updateRequest.sqf | 59 ++- .../Functions/Systems/fn_chopShopSell.sqf | 3 +- life_server/Functions/Systems/fn_cleanup.sqf | 7 +- .../Functions/Systems/fn_getVehicles.sqf | 35 +- .../Functions/Systems/fn_spawnVehicle.sqf | 45 +-- .../Functions/Systems/fn_vehicleCreate.sqf | 24 +- .../Functions/Systems/fn_vehicleDelete.sqf | 20 +- .../Functions/Systems/fn_vehicleStore.sqf | 73 ++-- .../Functions/Systems/fn_vehicleUpdate.sqf | 58 +-- .../Functions/WantedSystem/fn_wantedAdd.sqf | 21 +- .../WantedSystem/fn_wantedBounty.sqf | 7 +- .../WantedSystem/fn_wantedCrimes.sqf | 11 +- .../Functions/WantedSystem/fn_wantedFetch.sqf | 12 +- .../WantedSystem/fn_wantedPerson.sqf | 9 +- .../WantedSystem/fn_wantedProfUpdate.sqf | 14 +- .../WantedSystem/fn_wantedRemove.sqf | 9 +- life_server/config.cpp | 5 - life_server/init.sqf | 12 +- 89 files changed, 1489 insertions(+), 1615 deletions(-) create mode 100755 AL.ini mode change 100644 => 100755 Altis_Life.Altis/core/session/fn_requestReceived.sqf mode change 100644 => 100755 altislife.sql mode change 100644 => 100755 life_hc/FSM/cleanup.fsm mode change 100644 => 100755 life_hc/MySQL/Gangs/fn_insertGang.sqf mode change 100644 => 100755 life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf mode change 100644 => 100755 life_hc/MySQL/Gangs/fn_removeGang.sqf mode change 100644 => 100755 life_hc/MySQL/Gangs/fn_updateGang.sqf delete mode 100644 life_hc/MySQL/General/fn_bool.sqf mode change 100644 => 100755 life_hc/MySQL/General/fn_cleanup.sqf mode change 100644 => 100755 life_hc/MySQL/General/fn_insertRequest.sqf mode change 100644 => 100755 life_hc/MySQL/General/fn_insertVehicle.sqf delete mode 100644 life_hc/MySQL/General/fn_mresArray.sqf delete mode 100644 life_hc/MySQL/General/fn_mresString.sqf delete mode 100644 life_hc/MySQL/General/fn_mresToArray.sqf delete mode 100644 life_hc/MySQL/General/fn_numberSafe.sqf mode change 100644 => 100755 life_hc/MySQL/General/fn_queryRequest.sqf mode change 100644 => 100755 life_hc/MySQL/General/fn_updatePartial.sqf mode change 100644 => 100755 life_hc/MySQL/General/fn_updateRequest.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_addContainer.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_addHouse.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_deleteDBContainer.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_houseGarage.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_sellHouse.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_sellHouseContainer.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_updateHouseContainers.sqf mode change 100644 => 100755 life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_chopShopSell.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_getVehicles.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_vehicleStore.sqf mode change 100644 => 100755 life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf mode change 100644 => 100755 life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf mode change 100644 => 100755 life_hc/config.cpp mode change 100644 => 100755 life_server/FSM/cleanup.fsm mode change 100644 => 100755 life_server/Functions/Gangs/fn_insertGang.sqf mode change 100644 => 100755 life_server/Functions/Gangs/fn_queryPlayerGang.sqf mode change 100644 => 100755 life_server/Functions/Gangs/fn_removeGang.sqf mode change 100644 => 100755 life_server/Functions/Gangs/fn_updateGang.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_addContainer.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_addHouse.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_deleteDBContainer.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_fetchPlayerHouses.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_houseCleanup.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_houseGarage.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_initHouses.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_sellHouse.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_sellHouseContainer.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_updateHouseContainers.sqf mode change 100644 => 100755 life_server/Functions/Housing/fn_updateHouseTrunk.sqf mode change 100644 => 100755 life_server/Functions/MySQL/fn_asyncCall.sqf delete mode 100644 life_server/Functions/MySQL/fn_bool.sqf mode change 100644 => 100755 life_server/Functions/MySQL/fn_insertRequest.sqf mode change 100644 => 100755 life_server/Functions/MySQL/fn_insertVehicle.sqf delete mode 100644 life_server/Functions/MySQL/fn_mresArray.sqf delete mode 100644 life_server/Functions/MySQL/fn_mresString.sqf delete mode 100644 life_server/Functions/MySQL/fn_mresToArray.sqf delete mode 100644 life_server/Functions/MySQL/fn_numberSafe.sqf mode change 100644 => 100755 life_server/Functions/MySQL/fn_queryRequest.sqf mode change 100644 => 100755 life_server/Functions/MySQL/fn_updatePartial.sqf mode change 100644 => 100755 life_server/Functions/MySQL/fn_updateRequest.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_chopShopSell.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_cleanup.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_getVehicles.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_spawnVehicle.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_vehicleCreate.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_vehicleDelete.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_vehicleStore.sqf mode change 100644 => 100755 life_server/Functions/Systems/fn_vehicleUpdate.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedAdd.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedBounty.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedCrimes.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedFetch.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedPerson.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf mode change 100644 => 100755 life_server/Functions/WantedSystem/fn_wantedRemove.sqf diff --git a/AL.ini b/AL.ini new file mode 100755 index 000000000..b23904e72 --- /dev/null +++ b/AL.ini @@ -0,0 +1,352 @@ +[Default] + +Version = 1 +;; Used incase there is ever a breaking change, or to inform user in log about a new feature. + +Strip Chars = ";[]" +;; List of characters to strip out +Strip Chars Mode = 0 +;; 0 = Strip Bad Chars, 1 = Strip + Log Bad Chars, 2 = Return Error & Log Bad Chars +;; Note: Logging on works when sending data to database. + +Input SQF Parser = false +;; Expermential +;; If enabled will use SQF Array Parser instead of : seperator for values +;; i.e 0:SQL:UpdatePlayer:["Joe",[1,2,0],0.22333,"PlayerBackpack",-3] +;; Advantage is that you don't need to strip : seperator from user inputted values + +[resetLifeVehicles] +SQL1_1 = CALL resetLifeVehicles + +[deleteOldHouses] +SQL1_1 = CALL deleteOldHouses + +[deleteDeadVehicles] +SQL1_1 = CALL deleteDeadVehicles + +[deleteOldGangs] +SQL1_1 = CALL deleteOldGangs + +[deleteOldContainers] +SQL1_1 = CALL deleteOldContainers + + + +[checkPlayerExists] +SQL1_1 = SELECT pid, name FROM players WHERE pid = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING + +[selectName] +SQL1_1 = SELECT name FROM players WHERE pid = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING + +[insertNewPlayer] +SQL1_1 = INSERT INTO players (pid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear) VALUES (?, ?, ?, ?, ?,'[]','[]','[]','[]','[]','[]') +SQL1_INPUTS = 1, 2, 3, 4, 5 + +[selectWest] +SQL1_1 = SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE pid = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 + +[selectCiv] +SQL1_1 = SELECT pid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE pid = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 + +[selectIndep] +SQL1_1 = SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE pid = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING, 3, 4, 5, 6, 7, 8, 9, 10, 11 + +[updateWest] +SQL1_1 = UPDATE players SET name = ?, cash = ?, bankacc = ?, cop_gear = ?, cop_licenses = ?, cop_stats = ?, playtime = ? WHERE pid = ? +SQL1_INPUTS = 1, 2, 3, 4, 5, 6, 7, 8 + +[updateCiv] +SQL1_1 = UPDATE players SET name = ?, cash = ?, bankacc = ?, civ_licenses = ?, civ_gear = ?, arrested = ?, civ_stats = ?, civ_alive = ?, civ_position = ?, playtime = ? WHERE pid = ? +SQL1_INPUTS = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 + +[updateIndep] +SQL1_1 = UPDATE players SET name = ?, cash = ?, bankacc = ?, med_licenses = ?, med_gear = ?, med_stats = ?, playtime = ? WHERE pid = ? +SQL1_INPUTS = 1, 2, 3, 4, 5, 6, 7, 8 + +[updateCash] +SQL1_1 = UPDATE players SET cash = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateBank] +SQL1_1 = UPDATE players SET bankacc = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateWestLicenses] +SQL1_1 = UPDATE players SET cop_licenses = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateCivLicenses] +SQL1_1 = UPDATE players SET civ_licenses = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateIndepLicenses] +SQL1_1 = UPDATE players SET med_licenses = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateWestGear] +SQL1_1 = UPDATE players SET cop_gear = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateCivGear] +SQL1_1 = UPDATE players SET civ_gear = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateIndepGear] +SQL1_1 = UPDATE players SET med_gear = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateCivPosition] +SQL1_1 = UPDATE players SET civ_alive = ?, civ_position = ? WHERE pid = ? +SQL1_INPUTS = 1, 2, 3 + +[updateCivAlive] +SQL1_1 = UPDATE players SET civ_alive = '0' WHERE civ_alive = '1' + +[updateArrested] +SQL1_1 = UPDATE players SET arrested = ? WHERE pid = ? +SQL1_INPUTS = 1, 2 + +[updateCashAndBank] +SQL1_1 = UPDATE players SET cash = ?, bankacc = ? WHERE pid = ? +SQL1_INPUTS = 1, 2, 3 + + + +[selectPlayerGang] +SQL1_1 = SELECT id, owner, name, maxmembers, bank, members FROM gangs WHERE active = '1' AND members LIKE ? +SQL1_INPUTS = 1 +OUTPUT = 1, 2-STRING, 3-STRING, 4, 5, 6 + +[selectGangID] +SQL1_1 = SELECT id FROM gangs WHERE name = ? AND active = '1' +SQL1_INPUTS = 1 + +[selectGangIDFromMembers] +SQL1_1 = SELECT id FROM gangs WHERE members LIKE ? AND active = '1' +SQL1_INPUTS = 1 + +[selectGangIDFromOwner] +SQL1_1 = SELECT id FROM gangs WHERE owner = ? AND active = '1' +SQL1_INPUTS = 1 + +[selectInactiveGang] +SQL1_1 = SELECT id, active FROM gangs WHERE name = ? AND active = '0' +SQL1_INPUTS = 1 + +[updateGang] +SQL1_1 = UPDATE gangs SET active = '1', owner = ?, members = ? WHERE id = ? +SQL1_INPUTS = 1, 2, 3 + +[updateGang1] +SQL1_1 = UPDATE gangs SET bank = ?, maxmembers = ?, owner = ? WHERE id = ? +SQL1_INPUTS = 1, 2, 3, 4 + +[updateGangBank] +SQL1_1 = UPDATE gangs SET bank = ? WHERE id = ? +SQL1_INPUTS = 1, 2 + +[updateGangMembers] +SQL1_1 = UPDATE gangs SET members = ? WHERE id = ? +SQL1_INPUTS = 1, 2 + +[updateGangMaxmembers] +SQL1_1 = UPDATE gangs SET maxmembers = ? WHERE id = ? +SQL1_INPUTS = 1, 2 + +[updateGangOwner] +SQL1_1 = UPDATE gangs SET owner = ? WHERE id = ? +SQL1_INPUTS = 1, 2 + +[insertGang] +SQL1_1 = INSERT INTO gangs (owner, name, members) VALUES (?, ?, ?) +SQL1_INPUTS = 1, 2, 3 + +[deleteGang] +SQL1_1 = UPDATE gangs SET active = '0' WHERE id = ? +SQL1_INPUTS = 1 + + + +[insertHouse] +SQL1_1 = INSERT INTO houses (pid, pos, owned) VALUES (?, ?, '1') +SQL1_INPUTS = 1, 2 + +[selectHouseID] +SQL1_1 = SELECT id FROM houses WHERE pos = ? AND pid = ? AND owned = '1' +SQL1_INPUTS = 1, 2 + +[selectAllHouses] +SQL1_1 = SELECT COUNT(*) FROM houses WHERE owned = '1' + +[selectPlayerHouses] +SQL1_1 = SELECT houses.id, houses.pid, houses.pos, players.name, houses.garage FROM houses INNER JOIN players WHERE houses.owned = '1' AND houses.pid = players.pid LIMIT ?, 10 +SQL1_INPUTS = 1 +OUTPUT = 1, 2-STRING, 3, 4-STRING, 5 + +[selectHousePositions] +SQL1_1 = SELECT pid, pos FROM houses WHERE pid = ? AND owned = '1' +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2 + +[updateHouseTrunk] +SQL1_1 = UPDATE containers SET inventory = ? WHERE id = ? +SQL1_INPUTS = 1, 2 + +[deleteHouse] +SQL1_1 = UPDATE houses SET owned = '0', pos = '[]' WHERE pid = ? AND pos = ? AND owned = '1' +SQL1_INPUTS = 1, 2 + +[deleteHouse1] +SQL1_1 = UPDATE houses SET owned = '0', pos = '[]' WHERE id = ? +SQL1_INPUTS = 1 + +[updateGarage] +SQL1_1 = UPDATE houses SET garage = ? WHERE pid = ? AND pos = ? +SQL1_INPUTS = 1, 2, 3 + +[selectContainerPositions] +SQL1_1 = SELECT pid, pos FROM containers WHERE pid = ? AND owned = '1' +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2 + +[selectContainers] +SQL1_1 = SELECT pid, pos, classname, inventory, gear, dir, id FROM containers WHERE pid = ? AND owned = '1' +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2, 3-STRING, 4, 5, 6, 7 + +[selectContainerID] +SQL1_1 = SELECT id FROM containers WHERE pos = ? AND pid = ? AND owned = '1' +SQL1_INPUTS = 1, 2 + +[insertContainer] +SQL1_1 = INSERT INTO containers (pid, pos, classname, inventory, gear, owned, dir) VALUES (?, ?, ?, '[[],0]', '[]', '1', ?) +SQL1_INPUTS = 1, 2, 3, 4 + +[updateContainer] +SQL1_1 = UPDATE containers SET gear = ? WHERE id = ? +SQL1_INPUTS = 1, 2 + +[deleteContainer] +SQL1_1 = UPDATE containers SET owned = '0', pos = '[]' WHERE pid = ? AND pos = ? AND owned = '1' +SQL1_INPUTS = 1, 2 + +[deleteContainer1] +SQL1_1 = UPDATE containers SET owned = '0', pos = '[]' WHERE id = ? +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_INPUTS = 1, 2, 3 +OUTPUT = 1, 2-STRING, 3-STRING, 4-STRING, 5-STRING, 6, 7, 8, 9 + +[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_INPUTS = 1, 2 +OUTPUT = 1, 2-STRING, 3-STRING, 4-STRING, 5-STRING, 6, 7, 8, 9, 10, 11, 12, 13, 14 + +[updateVehicle] +SQL1_1 = UPDATE vehicles SET active = '1' WHERE pid = ? AND id = ? +SQL1_INPUTS = 1, 2 + +[updateVehicleBlacklist] +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_INPUTS = 1, 2 + +[updateVehicleFuel] +SQL1_1 = UPDATE vehicles SET active = '0', fuel = ?, damage = ? WHERE pid = ? AND plate = ? +SQL1_INPUTS = 1, 2, 3, 4 + +[updateVehicleAll] +SQL1_1 = UPDATE vehicles SET active = '0', inventory = ?, gear = ?, fuel = ?, damage = ? WHERE pid = ? AND plate = ? +SQL1_INPUTS = 1, 2, 3, 4, 5, 6 + +[updateVehicleGear] +SQL1_1 = UPDATE vehicles SET gear = ? WHERE pid = ? AND plate = ? +SQL1_INPUTS = 1, 2, 3 + +[updateVehicleTrunk] +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_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 + + +[selectWanted] +SQL1_1 = SELECT wantedID, wantedName, wantedCrimes, wantedBounty FROM wanted WHERE active = '1' AND wantedID = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING, 3, 4 + +[selectWantedID] +SQL1_1 = SELECT wantedID FROM wanted WHERE wantedID = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING + +[selectWantedCrimes] +SQL1_1 = SELECT wantedCrimes, wantedBounty FROM wanted WHERE wantedID = ? +SQL1_INPUTS = 1 + +[selectWantedActive] +SQL1_1 = SELECT wantedCrimes, wantedBounty FROM wanted WHERE active = '1' AND wantedID = ? +SQL1_INPUTS = 1 + +[selectWantedActiveID] +SQL1_1 = SELECT wantedID, wantedName FROM wanted WHERE active = '1' AND wantedID in (?) +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING + +[selectWantedBounty] +SQL1_1 = SELECT wantedID, wantedName, wantedBounty FROM wanted WHERE active = '1' AND wantedID = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING, 2-STRING, 3 + +[selectWantedName] +SQL1_1 = SELECT wantedName FROM wanted WHERE wantedID = ? +SQL1_INPUTS = 1 +OUTPUT = 1-STRING + +[insertWanted] +SQL1_1 = INSERT INTO wanted (wantedID, wantedName, wantedCrimes, wantedBounty, active) VALUES (?, ?, ?, ?, '1') +SQL1_INPUTS = 1, 2, 3, 4 + +[updateWanted] +SQL1_1 = UPDATE wanted SET wantedCrimes = ?, wantedBounty = wantedBounty + ?, active = '1' WHERE wantedID = ? +SQL1_INPUTS = 1, 2, 3 + +[updateWantedName] +SQL1_1 = UPDATE wanted SET wantedName = ? WHERE wantedID = ? +SQL1_INPUTS = 1, 2 + +[deleteWanted] +SQL1_1 = UPDATE wanted SET active = '0', wantedCrimes = '[]', wantedBounty = 0 WHERE wantedID = ? +SQL1_INPUTS = 1 diff --git a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf index 5dfef7638..7d1765ad4 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf @@ -11,8 +11,4 @@ if (isNull _group) exitWith {}; //Fail horn please. if (!isNull (findDisplay 2620)) then {closeDialog 2620}; hint localize "STR_GNOTF_DisbandWarn_2"; -[player] joinSilent (createGroup civilian); - -if (units _group isEqualTo []) then { - deleteGroup _group; -}; +[player] joinSilent (createGroup civilian); \ No newline at end of file diff --git a/Altis_Life.Altis/core/session/fn_requestReceived.sqf b/Altis_Life.Altis/core/session/fn_requestReceived.sqf old mode 100644 new mode 100755 index 08e7b211d..8a349d3c0 --- a/Altis_Life.Altis/core/session/fn_requestReceived.sqf +++ b/Altis_Life.Altis/core/session/fn_requestReceived.sqf @@ -8,6 +8,7 @@ sort through the information, validate it and if all valid set the client up. */ + private _count = count _this; life_session_tries = life_session_tries + 1; if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? Fucking arma... @@ -32,8 +33,8 @@ if (!isServer && (!isNil "life_adminlevel" || !isNil "life_coplevel" || !isNil " }; //Parse basic player information. -CASH = parseNumber (_this select 2); -BANK = parseNumber (_this select 3); +CASH = _this select 2; +BANK = _this select 3; CONST(life_adminlevel,(_this select 4)); if (LIFE_SETTINGS(getNumber,"donor_level") isEqualTo 1) then { CONST(life_donorlevel,(_this select 5)); @@ -42,7 +43,7 @@ if (LIFE_SETTINGS(getNumber,"donor_level") isEqualTo 1) then { }; //Loop through licenses -if (count (_this select 6) > 0) then { +if !((_this select 6) isEqualTo []) then { {missionNamespace setVariable [(_x select 0),(_x select 1)];} forEach (_this select 6); }; @@ -86,7 +87,7 @@ switch (playerSide) do { } forEach life_houses; life_gangData = _this select (_count - 2); - if !(count life_gangData isEqualTo 0) then { + if !(life_gangData isEqualTo []) then { [] spawn life_fnc_initGang; }; [] spawn life_fnc_initHouses; @@ -104,9 +105,9 @@ switch (playerSide) do { }; life_gear = _this select 8; -call life_fnc_loadGear; +[true] call life_fnc_loadGear; -if (count (_this select (_count - 1)) > 0) then { +if !((_this select (_count - 1)) isEqualTo []) then { {life_vehicles pushBack _x;} forEach (_this select (_count - 1)); }; diff --git a/altislife.sql b/altislife.sql old mode 100644 new mode 100755 index 1bcb7b96b..810f3e74e --- a/altislife.sql +++ b/altislife.sql @@ -87,16 +87,16 @@ CREATE TABLE IF NOT EXISTS `players` ( `civ_gear` TEXT NOT NULL, `cop_gear` TEXT NOT NULL, `med_gear` TEXT NOT NULL, - `civ_stats` VARCHAR(25) NOT NULL DEFAULT '"[100,100,0]"', - `cop_stats` VARCHAR(25) NOT NULL DEFAULT '"[100,100,0]"', - `med_stats` VARCHAR(25) NOT NULL DEFAULT '"[100,100,0]"', + `civ_stats` VARCHAR(25) NOT NULL DEFAULT '[100,100,0]', + `cop_stats` VARCHAR(25) NOT NULL DEFAULT '[100,100,0]', + `med_stats` VARCHAR(25) NOT NULL DEFAULT '[100,100,0]', `arrested` TINYINT NOT NULL DEFAULT 0, `adminlevel` ENUM('0','1','2','3','4','5') NOT NULL DEFAULT '0', `donorlevel` ENUM('0','1','2','3','4','5') NOT NULL DEFAULT '0', `blacklist` TINYINT NOT NULL DEFAULT 0, `civ_alive` TINYINT NOT NULL DEFAULT 0, - `civ_position` VARCHAR(32) NOT NULL DEFAULT '"[]"', - `playtime` VARCHAR(32) NOT NULL DEFAULT '"[0,0,0]"', + `civ_position` VARCHAR(32) NOT NULL DEFAULT '[]', + `playtime` VARCHAR(32) NOT NULL DEFAULT '[0,0,0]', `insert_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `last_seen` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, @@ -106,6 +106,7 @@ CREATE TABLE IF NOT EXISTS `players` ( INDEX `index_blacklist` (`blacklist`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + -- -------------------------------------------------------- -- diff --git a/life_hc/FSM/cleanup.fsm b/life_hc/FSM/cleanup.fsm old mode 100644 new mode 100755 index 9bcecd41d..04fea7c81 --- a/life_hc/FSM/cleanup.fsm +++ b/life_hc/FSM/cleanup.fsm @@ -81,7 +81,7 @@ class FSM " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n "" \n - " _query = format [""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n " _query spawn {" \n " " \n " _thread = [_this,1] call HC_fnc_asyncCall;" \n @@ -100,7 +100,7 @@ class FSM " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n "" \n - " _query = format [""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n " _query spawn {" \n " " \n " _thread = [_this,1] call HC_fnc_asyncCall;" \n diff --git a/life_hc/MySQL/Gangs/fn_insertGang.sqf b/life_hc/MySQL/Gangs/fn_insertGang.sqf old mode 100644 new mode 100755 index 951187662..bc4f48424 --- a/life_hc/MySQL/Gangs/fn_insertGang.sqf +++ b/life_hc/MySQL/Gangs/fn_insertGang.sqf @@ -8,31 +8,32 @@ Description: Inserts the gang into the database. */ -private ["_query","_queryResult","_gangMembers","_group"]; + params [ - ["_ownerID",objNull,[objNull]], - ["_uid","",[""]], - ["_gangName","",[""]] + ["_ownerID", objNull, [objNull]], + ["_uid", "", [""]], + ["_gangName", "", [""]] ]; -_group = group _ownerID; -if (isNull _ownerID || _uid isEqualTo "" || _gangName isEqualTo "") exitWith {}; //Fail +private _group = group _ownerID; + +if (isNull _ownerID || {_uid isEqualTo ""} || {_gangName isEqualTo ""}) exitWith {}; -_gangName = [_gangName] call HC_fnc_mresString; -_query = format ["SELECT id FROM gangs WHERE name='%1' AND active='1'",_gangName]; +private _query = format ["selectGangID:%1", _gangName]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +private _queryResult = [_query, 2] call HC_fnc_asyncCall; //Check to see if the gang name already exists. -if (!(count _queryResult isEqualTo 0)) exitWith { - [1,"There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast",_ownerID]; +if !(_queryResult isEqualTo []) exitWith { + [1, "There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast",_ownerID]; life_action_gangInUse = nil; _ownerID publicVariableClient "life_action_gangInUse"; }; -_query = format ["SELECT id FROM gangs WHERE members LIKE '%2%1%2' AND active='1'",_uid,"%"]; +private _uidLike = format["%2%1%2", _uid, "%"]; +_query = format ["selectGangIDFromMembers:%1", _uidLike]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +_queryResult = [_query, 2] call HC_fnc_asyncCall; //Check to see if this person already owns or belongs to a gang. if (!(count _queryResult isEqualTo 0)) exitWith { @@ -42,29 +43,29 @@ if (!(count _queryResult isEqualTo 0)) exitWith { }; //Check to see if a gang with that name already exists but is inactive. -_query = format ["SELECT id, active FROM gangs WHERE name='%1' AND active='0'",_gangName]; +_query = format ["selectInactiveGang:%1", _gangName]; -_queryResult = [_query,2] call HC_fnc_asyncCall; -_gangMembers = [[_uid]] call HC_fnc_mresArray; +_queryResult = [_query, 2] call HC_fnc_asyncCall; +private _gangMembers = [_uid]; -if (!(count _queryResult isEqualTo 0)) then { - _query = format ["UPDATE gangs SET active='1', owner='%1',members='%2' WHERE id='%3'",_uid,_gangMembers,(_queryResult select 0)]; +if !(_queryResult isEqualTo []) then { + _query = format ["updateGang:%1:%2:%3", (_queryResult select 0), _gangMembers, _uid]; } else { - _query = format ["INSERT INTO gangs (owner, name, members) VALUES('%1','%2','%3')",_uid,_gangName,_gangMembers]; + _query = format ["insertGang:%1:%2:%3", _uid, _gangName, _gangMembers]; }; -_queryResult = [_query,1] call HC_fnc_asyncCall; +_queryResult = [_query, 1] call HC_fnc_asyncCall; -_group setVariable ["gang_name",_gangName,true]; -_group setVariable ["gang_owner",_uid,true]; -_group setVariable ["gang_bank",0,true]; -_group setVariable ["gang_maxMembers",8,true]; -_group setVariable ["gang_members",[_uid],true]; -[_group] remoteExecCall ["life_fnc_gangCreated",_ownerID]; +_group setVariable ["gang_name", _gangName, true]; +_group setVariable ["gang_owner", _uid, true]; +_group setVariable ["gang_bank", 0, true]; +_group setVariable ["gang_maxMembers", 8, true]; +_group setVariable ["gang_members", [_uid], true]; +[_group] remoteExecCall ["life_fnc_gangCreated", _ownerID]; -sleep 0.35; -_query = format ["SELECT id FROM gangs WHERE owner='%1' AND active='1'",_uid]; +uiSleep 0.35; +_query = format ["selectGangIDFromOwner:%1", _uid]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +_queryResult = [_query, 2] call HC_fnc_asyncCall; -_group setVariable ["gang_id",(_queryResult select 0),true]; +_group setVariable ["gang_id", (_queryResult select 0), true]; diff --git a/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf b/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf old mode 100644 new mode 100755 index e4492417f..ee9f00f82 --- a/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf +++ b/life_hc/MySQL/Gangs/fn_queryPlayerGang.sqf @@ -7,15 +7,9 @@ Description: Queries to see if the player belongs to any gang. */ -private ["_query","_queryResult"]; -_query = format ["SELECT id, owner, name, maxmembers, bank, members FROM gangs WHERE active='1' AND members LIKE '%2%1%2'",_this,"%"]; +private _pid = format ["%2%1%2", _this, "%"]; +private _query = format ["selectPlayerGang:%1", _pid]; +private _queryResult = [_query,2] call HC_fnc_asyncCall; -_queryResult = [_query,2] call HC_fnc_asyncCall; - -if !(count _queryResult isEqualTo 0) then { - _tmp = [_queryResult select 5] call HC_fnc_mresToArray; - if (_tmp isEqualType "") then {_tmp = call compile format ["%1",_tmp];}; - _queryResult set[5, _tmp]; -}; -missionNamespace setVariable [format ["gang_%1",_this],_queryResult]; +missionNamespace setVariable [format ["gang_%1", _this], _queryResult]; diff --git a/life_hc/MySQL/Gangs/fn_removeGang.sqf b/life_hc/MySQL/Gangs/fn_removeGang.sqf old mode 100644 new mode 100755 index 537e22808..6b24e7988 --- a/life_hc/MySQL/Gangs/fn_removeGang.sqf +++ b/life_hc/MySQL/Gangs/fn_removeGang.sqf @@ -8,19 +8,19 @@ Description: Blah */ -private ["_group","_groupID"]; -_group = param [0,grpNull,[grpNull]]; + +params [ + ["_group", grpNull, [grpNull]] +]; + if (isNull _group) exitWith {}; -_groupID = _group getVariable ["gang_id",-1]; +private _groupID = _group getVariable ["gang_id",-1]; if (_groupID isEqualTo -1) exitWith {}; -[format ["UPDATE gangs SET active='0' WHERE id='%1'",_groupID],1] call HC_fnc_asyncCall; +_group setVariable ["gang_owner",nil,true]; +[format ["deleteGang:%1", _groupID], 1] call HC_fnc_asyncCall; -_result = [format ["SELECT id FROM gangs WHERE active='1' AND id='%1'",_groupID],2] call HC_fnc_asyncCall; -if (count _result isEqualTo 0) then { - [_group] remoteExecCall ["life_fnc_gangDisbanded",(units _group)]; - sleep 5; - deleteGroup _group; -}; -["CALL deleteOldGangs",1] call DB_fnc_asyncCall; +[_group] remoteExecCall ["life_fnc_gangDisbanded",(units _group)]; +uiSleep 5; +deleteGroup _group; \ No newline at end of file diff --git a/life_hc/MySQL/Gangs/fn_updateGang.sqf b/life_hc/MySQL/Gangs/fn_updateGang.sqf old mode 100644 new mode 100755 index eef95d891..e6bb5c245 --- a/life_hc/MySQL/Gangs/fn_updateGang.sqf +++ b/life_hc/MySQL/Gangs/fn_updateGang.sqf @@ -8,26 +8,28 @@ Description: Updates the gang information? */ -private ["_groupID","_bank","_maxMembers","_members","_membersFinal","_query","_owner"]; + params [ - ["_mode",0,[0]], - ["_group",grpNull,[grpNull]] + ["_mode", 0, [0]], + ["_group", grpNull, [grpNull]] ]; if (isNull _group) exitWith {}; //FAIL -_groupID = _group getVariable ["gang_id",-1]; +private _groupID = _group getVariable ["gang_id", -1]; if (_groupID isEqualTo -1) exitWith {}; +private "_query"; + switch (_mode) do { case 0: { - _bank = [(_group getVariable ["gang_bank",0])] call HC_fnc_numberSafe; - _maxMembers = _group getVariable ["gang_maxMembers",8]; - _members = [(_group getVariable "gang_members")] call HC_fnc_mresArray; - _owner = _group getVariable ["gang_owner",""]; + private _bank = _group getVariable ["gang_bank", 0]; + private _maxMembers = _group getVariable ["gang_maxMembers", 8]; + private _members = _group getVariable "gang_members"; + private _owner = _group getVariable ["gang_owner", ""]; if (_owner isEqualTo "") exitWith {}; - _query = format ["UPDATE gangs SET bank='%1', maxmembers='%2', owner='%3' WHERE id='%4'",_bank,_maxMembers,_owner,_groupID]; + _query = format ["updateGang1:%1:%2:%3:%4", _bank, _maxMembers, _owner, _groupID]; }; case 1: { @@ -63,23 +65,24 @@ switch (_mode) do { diag_log (format [localize "STR_DL_ML_withdrewGang",name _unit,(getPlayerUID _unit),_value,[_funds] call life_fnc_numberText,[0] call life_fnc_numberText,[_cash] call life_fnc_numberText]); }; }; - _query = format ["UPDATE gangs SET bank='%1' WHERE id='%2'",([_funds] call HC_fnc_numberSafe),_groupID]; [getPlayerUID _unit,side _unit,_cash,0] call HC_fnc_updatePartial; + _query = format ["updateGangBank:%1:%2", _group getVariable ["gang_bank", 0], _groupID]; }; case 2: { - _query = format ["UPDATE gangs SET maxmembers='%1' WHERE id='%2'",(_group getVariable ["gang_maxMembers",8]),_groupID]; + _query = format ["updateGangMaxmembers:%1:%2", (_group getVariable ["gang_maxMembers", 8]), _groupID]; }; case 3: { - _owner = _group getVariable ["gang_owner",""]; + private _owner = _group getVariable ["gang_owner", ""]; if (_owner isEqualTo "") exitWith {}; - _query = format ["UPDATE gangs SET owner='%1' WHERE id='%2'",_owner,_groupID]; + _query = format ["updateGangOwner:%1:%2", _owner, _groupID]; }; case 4: { - _members = _group getVariable "gang_members"; - if (count _members > (_group getVariable ["gang_maxMembers",8])) then { + private _members = _group getVariable "gang_members"; + private "_membersFinal"; + if (count _members > (_group getVariable ["gang_maxMembers", 8])) then { _membersFinal = []; for "_i" from 0 to _maxMembers -1 do { _membersFinal pushBack (_members select _i); @@ -87,11 +90,10 @@ switch (_mode) do { } else { _membersFinal = _group getVariable "gang_members"; }; - _membersFinal = [_membersFinal] call HC_fnc_mresArray; - _query = format ["UPDATE gangs SET members='%1' WHERE id='%2'",_membersFinal,_groupID]; + _query = format ["updateGangMembers:%1:%2", _membersFinal, _groupID]; }; }; if (!isNil "_query") then { - [_query,1] call HC_fnc_asyncCall; + [_query, 1] call HC_fnc_asyncCall; }; diff --git a/life_hc/MySQL/General/fn_bool.sqf b/life_hc/MySQL/General/fn_bool.sqf deleted file mode 100644 index 2d9a70f23..000000000 --- a/life_hc/MySQL/General/fn_bool.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - File: fn_bool.sqf - Author: TAW_Tonic - - Description: - Handles bool conversion for MySQL since MySQL doesn't support 'true' or 'false' - instead MySQL uses Tinyint for BOOLEAN (0 = false, 1 = true) -*/ -private ["_bool","_mode"]; -_bool = [_this,0,0,[false,0]] call BIS_fnc_param; -_mode = [_this,1,0,[0]] call BIS_fnc_param; - -switch (_mode) do { - case 0: { - if (_bool isEqualType 0) exitWith {0}; - if (_bool) then {1} else {0}; - }; - - case 1: { - if (!(_bool isEqualType 0)) exitWith {false}; - switch (_bool) do { - case 0: {false}; - case 1: {true}; - }; - }; -}; diff --git a/life_hc/MySQL/General/fn_cleanup.sqf b/life_hc/MySQL/General/fn_cleanup.sqf old mode 100644 new mode 100755 index 6afd87668..fb3735c71 --- a/life_hc/MySQL/General/fn_cleanup.sqf +++ b/life_hc/MySQL/General/fn_cleanup.sqf @@ -47,7 +47,7 @@ for "_i" from 0 to 1 step 0 do { _uid = _dbInfo select 0; _plate = _dbInfo select 1; - _query = format ["UPDATE vehicles SET active='0', fuel='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_fuel]; + _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; [_query,1] call HC_fnc_asyncCall; }; diff --git a/life_hc/MySQL/General/fn_insertRequest.sqf b/life_hc/MySQL/General/fn_insertRequest.sqf old mode 100644 new mode 100755 index 73d9422b7..0869f5a00 --- a/life_hc/MySQL/General/fn_insertRequest.sqf +++ b/life_hc/MySQL/General/fn_insertRequest.sqf @@ -6,10 +6,10 @@ This file is for Nanou's HeadlessClient. Description: - Does something with inserting... Don't have time for - descriptions... Need to write it... + Adds a player to the database upon first joining of the server. + Recieves information from core\sesison\fn_insertPlayerInfo.sqf */ -private ["_queryResult","_query","_alias"]; + params [ "_uid", "_name", @@ -19,26 +19,21 @@ params [ ]; //Error checks -if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {}; -if (isNull _returnToSender) exitWith {}; - -_query = format ["SELECT pid, name FROM players WHERE pid='%1'",_uid]; +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {systemChat "Bad UID or name";}; //Let the client be 'lost' in 'transaction' +if (isNull _returnToSender) exitWith {systemChat "ReturnToSender is Null!";}; //No one to send this to! -_tickTime = diag_tickTime; -_queryResult = [_query,2] call HC_fnc_asyncCall; +private _query = format ["checkPlayerExists:%1", _uid]; +private _queryResult = [_query, 2] call HC_fnc_asyncCall; //Double check to make sure the client isn't in the database... -if (_queryResult isEqualType "") exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",_returnToSender];}; //There was an entry! -if !(count _queryResult isEqualTo 0) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",_returnToSender];}; +if (_queryResult isEqualType "" || {!(_queryResult isEqualTo [])}) exitWith { + [] remoteExecCall ["SOCK_fnc_dataQuery", _returnToSender]; +}; -//Clense and prepare some information. -_name = [_name] call HC_fnc_mresString; //Clense the name of bad chars. -_alias = [[_name]] call HC_fnc_mresArray; -_money = [_money] call HC_fnc_numberSafe; -_bank = [_bank] call HC_fnc_numberSafe; +private _alias = [_name]; //Prepare the query statement.. -_query = format ["INSERT INTO players (pid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')", +_query = format ["insertNewPlayer:%1:%2:%3:%4:%5", _uid, _name, _money, @@ -46,5 +41,5 @@ _query = format ["INSERT INTO players (pid, name, cash, bankacc, aliases, cop_li _alias ]; -[_query,1] call HC_fnc_asyncCall; -[] remoteExecCall ["SOCK_fnc_dataQuery",_returnToSender]; +[_query, 1] call HC_fnc_asyncCall; +[] remoteExecCall ["SOCK_fnc_dataQuery", _returnToSender]; diff --git a/life_hc/MySQL/General/fn_insertVehicle.sqf b/life_hc/MySQL/General/fn_insertVehicle.sqf old mode 100644 new mode 100755 index 8706d734a..0a049b5fa --- a/life_hc/MySQL/General/fn_insertVehicle.sqf +++ b/life_hc/MySQL/General/fn_insertVehicle.sqf @@ -7,7 +7,7 @@ Description: Inserts the vehicle into the database */ -private ["_query","_sql"]; + params [ "_uid", "_side", @@ -18,8 +18,7 @@ params [ ]; //Stop bad data being passed. -if (_uid isEqualTo "" || _side isEqualTo "" || _type isEqualTo "" || _className isEqualTo "" || _color isEqualTo -1 || _plate isEqualTo -1) exitWith {}; - -_query = format ["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage) VALUES ('%1', '%2', '%3', '%4', '1','1','""[[],0]""', '%5', '%6','""[]""','""[]""')",_side,_className,_type,_uid,_color,_plate]; +if (_uid isEqualTo "" || {_side isEqualTo ""} || {_type isEqualTo ""} || {_className isEqualTo ""} || {_color isEqualTo -1} || {_plate isEqualTo -1}) exitWith {}; -[_query,1] call HC_fnc_asyncCall; +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/General/fn_mresArray.sqf b/life_hc/MySQL/General/fn_mresArray.sqf deleted file mode 100644 index d8433f26a..000000000 --- a/life_hc/MySQL/General/fn_mresArray.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - File: fn_mresArray.sqf - Author: Bryan "Tonic" Boardwine"; - - Description: - Acts as a mres (MySQL Real Escape) for arrays so they - can be properly inserted into the database without causing - any problems. The return method is 'hacky' but it's effective. -*/ -private ["_array"]; -_array = [_this,0,[],[[]]] call BIS_fnc_param; -_array = str _array; -_array = toArray(_array); - -for "_i" from 0 to (count _array)-1 do -{ - _sel = _array select _i; - if (!(_i isEqualTo 0) && !(_i isEqualTo ((count _array)-1))) then - { - if (_sel isEqualTo 34) then - { - _array set[_i,96]; - }; - }; -}; - -str(toString(_array)); diff --git a/life_hc/MySQL/General/fn_mresString.sqf b/life_hc/MySQL/General/fn_mresString.sqf deleted file mode 100644 index 584a8e7bd..000000000 --- a/life_hc/MySQL/General/fn_mresString.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - File: fn_mresString.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Makes the string safe to be passed to MySQL (strips various stuff). -*/ -private ["_string","_filter"]; -_string = [_this,0,"",[""]] call BIS_fnc_param; -_filter = "'/\`:|;,{}-""<>"; - -_string = toArray _string; //Blow it up to an array -_filter = toArray _filter; //Blow it up to an array - -{ - if (_x in _filter) then { - _string deleteAt _forEachIndex; - }; -} forEach _string; - -toString _string; diff --git a/life_hc/MySQL/General/fn_mresToArray.sqf b/life_hc/MySQL/General/fn_mresToArray.sqf deleted file mode 100644 index e93e75d67..000000000 --- a/life_hc/MySQL/General/fn_mresToArray.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - File: fn_mresToArray.sqf - Author: Bryan "Tonic" Boardwine"; - - Description: - Acts as a mres (MySQL Real Escape) for arrays so they - can be properly inserted into the database without causing - any problems. The return method is 'hacky' but it's effective. -*/ -private ["_array"]; -_array = [_this,0,"",[""]] call BIS_fnc_param; -if (_array isEqualTo "") exitWith {[]}; -_array = toArray(_array); - -for "_i" from 0 to (count _array)-1 do -{ - _sel = _array select _i; - if (_sel == 96) then - { - _array set[_i,39]; - }; -}; - -_array = toString(_array); -_array = call compile format ["%1", _array]; -_array; \ No newline at end of file diff --git a/life_hc/MySQL/General/fn_numberSafe.sqf b/life_hc/MySQL/General/fn_numberSafe.sqf deleted file mode 100644 index 0fc534d88..000000000 --- a/life_hc/MySQL/General/fn_numberSafe.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/* - File: fn_numberSafe.sqf - Author: Karel Moricky - - Description: - Convert a number into string (avoiding scientific notation) - - Parameter(s): - _this: NUMBER - - Returns: - STRING -*/ -private ["_number","_mod","_digots","_digitsCount","_modBase","_numberText"]; - -_number = [_this,0,0,[0]] call bis_fnc_param; -_mod = [_this,1,3,[0]] call bis_fnc_param; - -_digits = _number call bis_fnc_numberDigits; -_digitsCount = count _digits - 1; - -_modBase = _digitsCount % _mod; -_numberText = ""; -{ - _numberText = _numberText + str _x; - if ((_foreachindex - _modBase) % (_mod) isEqualTo 0 && !(_foreachindex isEqualTo _digitsCount)) then {_numberText = _numberText + "";}; -} forEach _digits; -_numberText diff --git a/life_hc/MySQL/General/fn_queryRequest.sqf b/life_hc/MySQL/General/fn_queryRequest.sqf old mode 100644 new mode 100755 index 1ce62f7b5..b70224edd --- a/life_hc/MySQL/General/fn_queryRequest.sqf +++ b/life_hc/MySQL/General/fn_queryRequest.sqf @@ -2,7 +2,7 @@ /* File: fn_queryRequest.sqf Author: Bryan "Tonic" Boardwine - + This file is for Nanou's HeadlessClient. Description: @@ -13,149 +13,90 @@ ARRAY - If array has 0 elements it should be handled as an error in client-side files. STRING - The request had invalid handles or an unknown error and is logged to the RPT. */ -private ["_uid","_side","_query","_queryResult","_tickTime","_tmp"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param; -_ownerID = [_this,2,objNull,[objNull]] call BIS_fnc_param; -if (isNull _ownerID) exitWith {}; +params [ + ["_uid", "", [""]], + ["_side", sideUnknown, [civilian]], + ["_ownerID", objNull, [objNull]] +]; -if (LIFE_SETTINGS(getNumber,"player_deathLog") isEqualTo 1) then { - _ownerID addMPEventHandler ["MPKilled", {_this call fn_whoDoneIt}]; -}; +if (isNull _ownerID) exitWith {}; -_query = switch (_side) do { +private _query = switch (_side) do { // West - 11 entries returned - case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE pid='%1'",_uid];}; + case west: {format ["selectWest:%1", _uid];}; // Civilian - 12 entries returned - case civilian: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE pid='%1'",_uid];}; + case civilian: {format ["selectCiv:%1", _uid];}; // Independent - 10 entries returned - case independent: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE pid='%1'",_uid];}; + case independent: {format ["selectIndep:%1",_uid];}; }; +private _tickTime = diag_tickTime; +private _queryResult = [_query,2] call DB_fnc_asyncCall; -_tickTime = diag_tickTime; -_queryResult = [_query,2] call HC_fnc_asyncCall; - -if (_queryResult isEqualType "") exitWith { - [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; +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 isEqualTo []) exitWith { +if (_queryResult isEqualType "" || _queryResult isEqualTo []) exitWith { [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; }; -//Blah conversion thing from a2net->extdb -_tmp = _queryResult select 2; -_queryResult set[2,[_tmp] call HC_fnc_numberSafe]; -_tmp = _queryResult select 3; -_queryResult set[3,[_tmp] call HC_fnc_numberSafe]; - -//Parse licenses (Always index 6) -_new = [(_queryResult select 6)] call HC_fnc_mresToArray; -if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; -_queryResult set[6,_new]; - -//Convert tinyint to boolean -_old = _queryResult select 6; -for "_i" from 0 to (count _old)-1 do { - _data = _old select _i; - _old set[_i,[_data select 0, ([_data select 1,1] call HC_fnc_bool)]]; +private _licenses = _queryResult select 6; + +for "_i" from 0 to (count _licenses) -1 do { + (_licenses select _i) params ["_license", "_owned"]; + _licenses set[_i, [_license, [false, true] select _owned]]; }; -_queryResult set[6,_old]; +private "_playTimes"; -_new = [(_queryResult select 8)] call HC_fnc_mresToArray; -if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; -_queryResult set[8,_new]; -//Parse data for specific side. switch (_side) do { - case west: { - _queryResult set[9,([_queryResult select 9,1] call HC_fnc_bool)]; - - //Parse Stats - _new = [(_queryResult select 10)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[10,_new]; - - //Playtime - _new = [(_queryResult select 11)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _index = TON_fnc_playtime_values_request find [_uid, _new]; - if !(_index isEqualTo -1) then { - TON_fnc_playtime_values_request set[_index,-1]; - TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; - TON_fnc_playtime_values_request pushBack [_uid, _new]; - } else { - TON_fnc_playtime_values_request pushBack [_uid, _new]; - }; - _new = _new select 0; - [_uid, _new] call HC_fnc_setPlayTime; - }; - - case civilian: { - _queryResult set[7,([_queryResult select 7,1] call HC_fnc_bool)]; - - //Parse Stats - _new = [(_queryResult select 9)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[9,_new]; - - //Position - _queryResult set[10,([_queryResult select 10,1] call HC_fnc_bool)]; - _new = [(_queryResult select 11)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[11,_new]; - - //Playtime - _new = [(_queryResult select 12)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _index = TON_fnc_playtime_values_request find [_uid, _new]; - if !(_index isEqualTo -1) then { - TON_fnc_playtime_values_request set[_index,-1]; - TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; - TON_fnc_playtime_values_request pushBack [_uid, _new]; - } else { - TON_fnc_playtime_values_request pushBack [_uid, _new]; - }; - _new = _new select 2; - [_uid, _new] call HC_fnc_setPlayTime; - - _houseData = _uid spawn HC_fnc_fetchPlayerHouses; - waitUntil {scriptDone _houseData}; - _queryResult pushBack (missionNamespace getVariable [format ["houses_%1",_uid],[]]); - _gangData = _uid spawn HC_fnc_queryPlayerGang; - waitUntil{scriptDone _gangData}; - _queryResult pushBack (missionNamespace getVariable [format ["gang_%1",_uid],[]]); - }; - - case independent: { - //Parse Stats - _new = [(_queryResult select 9)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[9,_new]; - - //Playtime - _new = [(_queryResult select 10)] call HC_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _index = TON_fnc_playtime_values_request find [_uid, _new]; - if !(_index isEqualTo -1) then { - TON_fnc_playtime_values_request set[_index,-1]; - TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; - TON_fnc_playtime_values_request pushBack [_uid, _new]; - } else { - TON_fnc_playtime_values_request pushBack [_uid, _new]; - }; - _new = _new select 1; - [_uid, _new] call HC_fnc_setPlayTime; - }; + case civilian: { + _queryResult set[7, [false, true] select (_queryResult select 7)]; + _queryResult set[10, [false, true] select (_queryResult select 10)]; + + _playTimes = _queryResult select 12; + + /* Make sure nothing else is added under here */ + _houseData = _uid spawn TON_fnc_fetchPlayerHouses; + waitUntil {scriptDone _houseData}; + _queryResult pushBack (missionNamespace getVariable [format ["houses_%1",_uid],[]]); + _gangData = _uid spawn TON_fnc_queryPlayerGang; + waitUntil {scriptDone _gangData}; + _queryResult pushBack (missionNamespace getVariable [format ["gang_%1",_uid],[]]); + }; + + case west: { + _queryResult set[9, [false, true] select (_queryResult select 9)]; + _playTimes = _queryResult select 11; + }; + + case independent: { + _playTimes = _queryResult select 10; + }; +}; + +_index = TON_fnc_playtime_values_request find [_uid, _playTimes]; + +if (_index != -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _playTimes]; +} else { + TON_fnc_playtime_values_request pushBack [_uid, _playTimes]; }; +[_uid, _playTimes select 2] call TON_fnc_setPlayTime; publicVariable "TON_fnc_playtime_values_request"; life_keyreceived = false; life_keyreceivedvar = []; -[_uid,_side] remoteExecCall ["TON_fnc_recupKeyForHC",RSERV]; +[_uid, _side] remoteExecCall ["TON_fnc_recupKeyForHC", RSERV]; waitUntil {life_keyreceived}; _keyArr = life_keyreceivedvar; _queryResult pushBack _keyArr; diff --git a/life_hc/MySQL/General/fn_updatePartial.sqf b/life_hc/MySQL/General/fn_updatePartial.sqf old mode 100644 new mode 100755 index 494c0af4c..498f05af3 --- a/life_hc/MySQL/General/fn_updatePartial.sqf +++ b/life_hc/MySQL/General/fn_updatePartial.sqf @@ -8,81 +8,68 @@ Takes partial data of a player and updates it, this is meant to be less network intensive towards data flowing through it for updates. */ -private ["_uid","_side","_value","_value1","_value2","_mode","_query"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param; -_mode = [_this,3,-1,[0]] call BIS_fnc_param; -if (_uid isEqualTo "" || _side isEqualTo sideUnknown) exitWith {}; //Bad. -_query = ""; +params [ + ["_uid", "", [""]], + ["_side", sideUnknown, [civilian]], + "_value", + ["_mode", -1, [0]], + "_value1" +]; + +if (_uid isEqualTo "" || {_side isEqualTo sideUnknown}) exitWith {}; //Bad. +private _query = ""; switch (_mode) do { case 0: { - _value = [_this,2,0,[0]] call BIS_fnc_param; - _value = [_value] call HC_fnc_numberSafe; - _query = format ["UPDATE players SET cash='%1' WHERE pid='%2'",_value,_uid]; + _query = format ["updateCash:%1:%2", _value, _uid]; }; case 1: { - _value = [_this,2,0,[0]] call BIS_fnc_param; - _value = [_value] call HC_fnc_numberSafe; - _query = format ["UPDATE players SET bankacc='%1' WHERE pid='%2'",_value,_uid]; + _query = format ["updateBank:%1:%2",_value,_uid]; }; case 2: { - _value = [_this,2,[],[[]]] call BIS_fnc_param; - //Does something license related but I can't remember I only know it's important? - for "_i" from 0 to count(_value)-1 do { - _bool = [(_value select _i) select 1] call HC_fnc_bool; - _value set[_i,[(_value select _i) select 0,_bool]]; - }; - _value = [_value] call HC_fnc_mresArray; + for "_i" from 0 to (count _value) -1 do { + (_value select _i) params ["_license", "_owned"]; + _value set[_i, [_license, [0, 1] select _owned]]; + }; + switch (_side) do { - case west: {_query = format ["UPDATE players SET cop_licenses='%1' WHERE pid='%2'",_value,_uid];}; - case civilian: {_query = format ["UPDATE players SET civ_licenses='%1' WHERE pid='%2'",_value,_uid];}; - case independent: {_query = format ["UPDATE players SET med_licenses='%1' WHERE pid='%2'",_value,_uid];}; + case west: {_query = format ["updateWestLicenses:%1:%2", _value, _uid];}; + case civilian: {_query = format ["updateCivLicenses:%1:%2", _value, _uid];}; + case independent: {_query = format ["updateIndepLicenses:%1:%2", _value, _uid];}; }; }; case 3: { - _value = [_this,2,[],[[]]] call BIS_fnc_param; - _value = [_value] call HC_fnc_mresArray; switch (_side) do { - case west: {_query = format ["UPDATE players SET cop_gear='%1' WHERE pid='%2'",_value,_uid];}; - case civilian: {_query = format ["UPDATE players SET civ_gear='%1' WHERE pid='%2'",_value,_uid];}; - case independent: {_query = format ["UPDATE players SET med_gear='%1' WHERE pid='%2'",_value,_uid];}; + case west: {_query = format ["updateWestGear:%1:%2", _value, _uid];}; + case civilian: {_query = format ["updateCivGear:%1:%2", _value, _uid];}; + case independent: {_query = format ["updateIndepGear:%1:%2", _value, _uid];}; }; }; case 4: { - _value = [_this,2,false,[true]] call BIS_fnc_param; - _value = [_value] call HC_fnc_bool; - _value2 = [_this,4,[],[[]]] call BIS_fnc_param; - _value2 = if (count _value2 isEqualTo 3) then {_value2} else {[0,0,0]}; - _value2 = [_value2] call HC_fnc_mresArray; - _query = format ["UPDATE players SET civ_alive='%1', civ_position='%2' WHERE pid='%3'",_value,_value2,_uid]; + _value = [0, 1] select _value; + _value1 = if (count _value1 isEqualTo 3) then {_value1} else {[0,0,0]}; + _query = format ["updateCivPosition:%1:%2:%3", _value, _value1, _uid]; }; case 5: { - _value = [_this,2,false,[true]] call BIS_fnc_param; - _value = [_value] call HC_fnc_bool; - _query = format ["UPDATE players SET arrested='%1' WHERE pid='%2'",_value,_uid]; + _value = [0, 1] select _value; + _query = format ["updateArrested:%1:%2",_value,_uid]; }; case 6: { - _value1 = [_this,2,0,[0]] call BIS_fnc_param; - _value2 = [_this,4,0,[0]] call BIS_fnc_param; - _value1 = [_value1] call HC_fnc_numberSafe; - _value2 = [_value2] call HC_fnc_numberSafe; - _query = format ["UPDATE players SET cash='%1', bankacc='%2' WHERE pid='%3'",_value1,_value2,_uid]; + _query = format ["updateCashAndBank:%1:%2:%3", _value, _value1, _uid]; }; case 7: { - _array = [_this,2,[],[[]]] call BIS_fnc_param; - [_uid,_side,_array,0] remoteExecCall ["TON_fnc_keyManagement",RSERV]; + [_uid, _side, _value, 0] call TON_fnc_keyManagement; }; }; if (_query isEqualTo "") exitWith {}; -[_query,1] call HC_fnc_asyncCall; +[_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/General/fn_updateRequest.sqf b/life_hc/MySQL/General/fn_updateRequest.sqf old mode 100644 new mode 100755 index b3cc164fe..67292ac1e --- a/life_hc/MySQL/General/fn_updateRequest.sqf +++ b/life_hc/MySQL/General/fn_updateRequest.sqf @@ -8,37 +8,34 @@ Updates ALL player information in the database. Information gets passed here from the client side file: core\session\fn_updateRequest.sqf */ -private ["_uid","_side","_cash","_bank","_licenses","_gear","_stats","_name","_alive","_position","_query"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_name = [_this,1,"",[""]] call BIS_fnc_param; -_side = [_this,2,sideUnknown,[civilian]] call BIS_fnc_param; -_cash = [_this,3,0,[0]] call BIS_fnc_param; -_bank = [_this,4,5000,[0]] call BIS_fnc_param; -_licenses = [_this,5,[],[[]]] call BIS_fnc_param; -_gear = [_this,6,[],[[]]] call BIS_fnc_param; -_stats = [_this,7,[100,100],[[]]] call BIS_fnc_param; -_alive = [_this,9,false,[true]] call BIS_fnc_param; -_position = [_this,10,[],[[]]] call BIS_fnc_param; + +params [ + ["_uid", "", [""]], + ["_name", "", [""]], + ["_side", sideUnknown, [civilian]], + ["_cash", 0, [0]], + ["_bank", 5000, [0]], + ["_licenses", [], [[]]], + ["_gear", [], [[]]], + ["_stats", [100,100],[[]]], + ["_arrested", false, [true]], + ["_alive", false, [true]], + ["_position", [], [[]]] +]; //Get to those error checks. -if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {}; +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; -//Parse and setup some data. -_name = [_name] call HC_fnc_mresString; -_gear = [_gear] call HC_fnc_mresArray; -_stats = [_stats] call HC_fnc_mresArray; -_cash = [_cash] call HC_fnc_numberSafe; -_bank = [_bank] call HC_fnc_numberSafe; -_position = if (_side isEqualTo civilian) then {[_position] call HC_fnc_mresArray} else {[]}; +//Setup some data. +_position = if (_side isEqualTo civilian) then {_position} else {[]}; +_arrested = [0, 1] select _arrested; +_alive = [0, 1] select _alive; -//Does something license related but I can't remember I only know it's important? -for "_i" from 0 to count(_licenses)-1 do { - _bool = [(_licenses select _i) select 1] call HC_fnc_bool; - _licenses set[_i,[(_licenses select _i) select 0,_bool]]; +for "_i" from 0 to (count _licenses) -1 do { + (_licenses select _i) params ["_license", "_owned"]; + _licenses set[_i, [_license, [0, 1] select _owned]]; }; -_licenses = [_licenses] call HC_fnc_mresArray; - //PLAYTIME _playtime = [_uid] call HC_fnc_getPlayTime; _playtime_update = []; @@ -54,12 +51,12 @@ switch (_side) do { case civilian: {_playtime_update set[2,_playtime];}; case independent: {_playtime_update set[1,_playtime];}; }; -_playtime_update = [_playtime_update] call HC_fnc_mresArray; -switch (_side) do { - case west: {_query = format ["UPDATE players SET name='%1', cash='%2', bankacc='%3', cop_gear='%4', cop_licenses='%5', cop_stats='%6', playtime='%7' WHERE pid='%8'",_name,_cash,_bank,_gear,_licenses,_stats,_playtime_update,_uid];}; - case civilian: {_query = format ["UPDATE players SET name='%1', cash='%2', bankacc='%3', civ_licenses='%4', civ_gear='%5', arrested='%6', civ_stats='%7', civ_alive='%8', civ_position='%9', playtime='%10' WHERE pid='%11'",_name,_cash,_bank,_licenses,_gear,[_this select 8] call HC_fnc_bool,_stats,[_alive] call HC_fnc_bool,_position,_playtime_update,_uid];}; - case independent: {_query = format ["UPDATE players SET name='%1', cash='%2', bankacc='%3', med_licenses='%4', med_gear='%5', med_stats='%6', playtime='%7' WHERE pid='%8'",_name,_cash,_bank,_licenses,_gear,_stats,_playtime_update,_uid];}; +private _query = switch (_side) do { + case west: {format ["updateWest:%1:%2:%3:%4:%5:%6:%7:%8", _name, _cash, _bank, _gear, _licenses, _stats, _playtime_update, _uid];}; + case civilian: {format ["updateCiv:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11", _name, _cash, _bank, _licenses, _gear, _arrested, _stats, _alive, _position, _playtime_update, _uid];}; + case independent: {format ["updateIndep:%1:%2:%3:%4:%5:%6:%7:%8", _name, _cash, _bank, _licenses, _gear, _stats, _playtime_update, _uid];}; }; -_queryResult = [_query,1] call HC_fnc_asyncCall; + +_queryResult = [_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_addContainer.sqf b/life_hc/MySQL/Housing/fn_addContainer.sqf old mode 100644 new mode 100755 index 85f53291a..ad06651d3 --- a/life_hc/MySQL/Housing/fn_addContainer.sqf +++ b/life_hc/MySQL/Housing/fn_addContainer.sqf @@ -8,24 +8,23 @@ Description: Add container in Database. */ -private ["_containerPos","_query","_className","_dir"]; + params [ - ["_uid","",[""]], - ["_container",objNull,[objNull]] + ["_uid", "", [""]], + ["_container", objNull, [objNull]] ]; -if (isNull _container || _uid isEqualTo "") exitWith {}; - -_containerPos = getPosATL _container; -_className = typeOf _container; -_dir = [vectorDir _container, vectorUp _container]; +if (isNull _container || {_uid isEqualTo ""}) exitWith {}; -_query = format ["INSERT INTO containers (pid, pos, classname, inventory, gear, owned, dir) VALUES('%1', '%2', '%3', '""[[],0]""', '""[]""', '1', '%4')",_uid,_containerPos,_className,_dir]; -[_query,1] call HC_fnc_asyncCall; +private _containerPos = getPosATL _container; +private _className = typeOf _container; +private _dir = [vectorDir _container, vectorUp _container]; -sleep 0.3; +private _query = format ["insertContainer:%1:%2:%3:%4", _uid, _containerPos, _className, _dir]; +[_query, 1] call HC_fnc_asyncCall; -_query = format ["SELECT id FROM containers WHERE pos='%1' AND pid='%2' AND owned='1'",_containerPos,_uid]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +uiSleep 0.3; -_container setVariable ["container_id",(_queryResult select 0),true]; +_query = format ["selectContainerID:%1:%2", _containerPos, _uid]; +_queryResult = [_query, 2] call HC_fnc_asyncCall; +_container setVariable ["container_id", _queryResult select 0, true]; diff --git a/life_hc/MySQL/Housing/fn_addHouse.sqf b/life_hc/MySQL/Housing/fn_addHouse.sqf old mode 100644 new mode 100755 index fad0676ab..446a2295e --- a/life_hc/MySQL/Housing/fn_addHouse.sqf +++ b/life_hc/MySQL/Housing/fn_addHouse.sqf @@ -6,23 +6,23 @@ This file is for Nanou's HeadlessClient. Description: - Blah + Inserts the players newly bought house in the database. */ -private ["_housePos","_query"]; + params [ ["_uid","",[""]], ["_house",objNull,[objNull]] ]; -if (isNull _house || _uid isEqualTo "") exitWith {}; -_housePos = getPosATL _house; +if (isNull _house || {_uid isEqualTo ""}) exitWith {}; -_query = format ["INSERT INTO houses (pid, pos, owned) VALUES('%1', '%2', '1')",_uid,_housePos]; -[_query,1] call HC_fnc_asyncCall; +private _housePos = getPosATL _house; -sleep 0.3; +private _query = format ["insertHouse:%1:%2", _uid, _housePos]; +[_query, 1] call HC_fnc_asyncCall; -_query = format ["SELECT id FROM houses WHERE pos='%1' AND pid='%2' AND owned='1'",_housePos,_uid]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +uiSleep 0.3; -_house setVariable ["house_id",(_queryResult select 0),true]; +_query = format ["selectHouseID:%1:%2", _housePos, _uid]; +_queryResult = [_query, 2] call HC_fnc_asyncCall; +_house setVariable ["house_id", _queryResult select 0, true]; diff --git a/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf b/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf old mode 100644 new mode 100755 index 36b9b55bc..6135b7a58 --- a/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf +++ b/life_hc/MySQL/Housing/fn_deleteDBContainer.sqf @@ -7,22 +7,27 @@ Description: Delete Container and remove Container in Database */ -private ["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_container", objNull, [objNull]] +]; + if (isNull _container) exitWith {diag_log "container null";}; +_containerID = _container getVariable ["container_id", -1]; + +private "_query"; -_containerID = _container getVariable ["container_id",-1]; if (_containerID isEqualTo -1) then { _containerPos = getPosATL _container; - _ownerID = (_container getVariable "container_owner") select 0; - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; + private _ownerID = (_container getVariable "container_owner") select 0; + _query = format ["deleteContainer:%1:%2", _ownerID, _containerPos]; } else { - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; + _query = format ["deleteContainer1:%1",_containerID]; }; -_container setVariable ["container_id",nil,true]; -_container setVariable ["container_owner",nil,true]; +_container setVariable ["container_id", nil, true]; +_container setVariable ["container_owner", nil, true]; -[_query,1] call HC_fnc_asyncCall; +[_query, 1] call HC_fnc_asyncCall; -["CALL deleteOldContainers",1] call HC_fnc_asyncCall; +["deleteOldContainers", 1] call HC_fnc_asyncCall; deleteVehicle _container; diff --git a/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf b/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf old mode 100644 new mode 100755 index 08940cb8e..368060a29 --- a/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf +++ b/life_hc/MySQL/Housing/fn_fetchPlayerHouses.sqf @@ -10,30 +10,30 @@ 1. Fetches all the players houses and sets them up. 2. Fetches all the players containers and sets them up. */ -private ["_query","_containers","_containerss","_houses"]; + params [ ["_uid","",[""]] ]; + if (_uid isEqualTo "") exitWith {}; -_query = format ["SELECT pid, pos, classname, inventory, gear, dir, id FROM containers WHERE pid='%1' AND owned='1'",_uid]; -_containers = [_query,2,true] call HC_fnc_asyncCall; +private _query = format ["selectContainers:%1", _uid]; +private _containers = [_query, 2, true] call HC_fnc_asyncCall; +private _containerss = []; -_containerss = []; { _position = call compile format ["%1",_x select 1]; _house = nearestObject [_position, "House"]; _direction = call compile format ["%1",_x select 5]; - _trunk = [_x select 3] call HC_fnc_mresToArray; + _trunk = _x select 3; if (_trunk isEqualType "") then {_trunk = call compile format ["%1", _trunk];}; - _gear = [_x select 4] call HC_fnc_mresToArray; + _gear = _x select 4; if (_gear isEqualType "") then {_gear = call compile format ["%1", _gear];}; _container = createVehicle[_x select 2,[0,0,999],[],0,"NONE"]; waitUntil {!isNil "_container" && {!isNull _container}}; _containerss = _house getVariable ["containers",[]]; _containerss pushBack _container; _container allowDamage false; - _container enableRopeAttach false; _container setPosATL _position; _container setVectorDirAndUp _direction; //Fix position for more accurate positioning @@ -71,11 +71,11 @@ _containerss = []; _container addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; }; }; - _house setVariable ["containers",_containerss,true]; + _house setVariable ["containers", _containerss, true]; } forEach _containers; -_query = format ["SELECT pid, pos FROM houses WHERE pid='%1' AND owned='1'",_uid]; -_houses = [_query,2,true] call HC_fnc_asyncCall; +_query = format ["selectHousePositions:%1", _uid]; +private _houses = [_query, 2, true] call HC_fnc_asyncCall; _return = []; { @@ -85,4 +85,4 @@ _return = []; _return pushBack [_x select 1]; } forEach _houses; -missionNamespace setVariable [format ["houses_%1",_uid],_return]; +missionNamespace setVariable [format ["houses_%1", _uid], _return]; diff --git a/life_hc/MySQL/Housing/fn_houseGarage.sqf b/life_hc/MySQL/Housing/fn_houseGarage.sqf old mode 100644 new mode 100755 index 56baebfe1..56bfb6a4c --- a/life_hc/MySQL/Housing/fn_houseGarage.sqf +++ b/life_hc/MySQL/Housing/fn_houseGarage.sqf @@ -12,21 +12,9 @@ params [ ["_mode",-1,[0]] ]; -if (_uid isEqualTo "") exitWith {}; -if (isNull _house) exitWith {}; -if (_mode isEqualTo -1) exitWith {}; +if (_uid isEqualTo "" || {isNull _house} || {_mode isEqualTo -1}) exitWith {}; private _housePos = getPosATL _house; -private "_query"; - -if (_mode isEqualTo 0) then { - _query = format ["UPDATE houses SET garage='1' WHERE pid='%1' AND pos='%2'",_uid,_housePos]; -} else { - _query = format ["UPDATE houses SET garage='0' WHERE pid='%1' AND pos='%2'",_uid,_housePos]; -}; - -if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { - diag_log format ["Query: %1",_query]; -}; - -[_query,1] call DB_fnc_asyncCall; \ No newline at end of file +private _active = ["0", "1"] select (_mode isEqualTo 0); +private _query = format ["updateGarage:%1:%2:%3", _active, _uid, _housePos]; +[_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_sellHouse.sqf b/life_hc/MySQL/Housing/fn_sellHouse.sqf old mode 100644 new mode 100755 index 16fd3be32..c7bffcfee --- a/life_hc/MySQL/Housing/fn_sellHouse.sqf +++ b/life_hc/MySQL/Housing/fn_sellHouse.sqf @@ -8,22 +8,28 @@ Used in selling the house, sets the owned to 0 and will cleanup with a stored procedure on restart. */ -private ["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_house = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _house) exitWith {}; -_houseID = _house getVariable ["house_id",-1]; +params [ + ["_house", objNull, [objNull]] +]; + +if (isNull _house) exitWith {systemChat ":SERVER:sellHouse: House is null";}; +private _houseID = _house getVariable ["house_id", -1]; + +private "_query"; + if (_houseID isEqualTo -1) then { - _housePos = getPosATL _house; - _ownerID = (_house getVariable "house_owner") select 0; - _query = format ["UPDATE houses SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_housePos]; + private _housePos = getPosATL _house; + private _ownerID = (_house getVariable "house_owner") select 0; + _query = format ["deleteHouse:%1:%2", _ownerID, _housePos]; } else { - _query = format ["UPDATE houses SET owned='0', pos='[]' WHERE id='%1'",_houseID]; + _query = format ["deleteHouse1:%1", _houseID]; }; -_house setVariable ["house_id",nil,true]; -_house setVariable ["house_owner",nil,true]; +_house setVariable ["house_id", nil, true]; +_house setVariable ["house_owner", nil, true]; +_house setVariable ["garageBought", false, true]; -[_query,1] call HC_fnc_asyncCall; -_house setVariable ["house_sold",nil,true]; -["CALL deleteOldHouses",1] call HC_fnc_asyncCall; \ No newline at end of file +[_query, 1] call HC_fnc_asyncCall; +_house setVariable ["house_sold", nil, true]; +["deleteOldHouses", 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf b/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf old mode 100644 new mode 100755 index 0f6152575..a080686bb --- a/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf +++ b/life_hc/MySQL/Housing/fn_sellHouseContainer.sqf @@ -8,22 +8,27 @@ Used in selling the house, container sets the owned to 0 and will cleanup with a stored procedure on restart. */ -private ["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _container) exitWith {}; +params [ + ["_container", objNull, [objNull]] +]; + +if (isNull _container) exitWith {}; _containerID = _container getVariable ["container_id",-1]; + +private "_query"; + if (_containerID isEqualTo -1) then { _containerPos = getPosATL _container; - _ownerID = (_container getVariable "container_owner") select 0; - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; + private _ownerID = (_container getVariable "container_owner") select 0; + _query = format ["deleteContainer:%1:%2", _ownerID, _containerPos]; } else { - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; + _query = format ["deleteContainer1:%1", _containerID]; }; -_container setVariable ["container_id",nil,true]; -_container setVariable ["container_owner",nil,true]; +_container setVariable ["container_id", nil, true]; +_container setVariable ["container_owner", nil, true]; deleteVehicle _container; -[_query,1] call HC_fnc_asyncCall; -["CALL deleteOldContainers",1] call HC_fnc_asyncCall; \ No newline at end of file +[_query, 1] call HC_fnc_asyncCall; +["deleteOldContainers", 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf b/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf old mode 100644 new mode 100755 index d34158199..8aca57fe3 --- a/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf +++ b/life_hc/MySQL/Housing/fn_updateHouseContainers.sqf @@ -7,20 +7,22 @@ Description: Update inventory "i" in container */ -private ["_containerID","_containers","_query","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_container", objNull, [objNull]] +]; + if (isNull _container) exitWith {}; -_containerID = _container getVariable ["container_id",-1]; -if (_houseID isEqualTo -1) exitWith {}; -_vehItems = getItemCargo _container; -_vehMags = getMagazineCargo _container; -_vehWeapons = getWeaponCargo _container; -_vehBackpacks = getBackpackCargo _container; -_cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; +private _containerID = _container getVariable ["container_id", -1]; +if (_containerID isEqualTo -1) exitWith {}; -_cargo = [_cargo] call HC_fnc_mresArray; +private _vehItems = getItemCargo _container; +private _vehMags = getMagazineCargo _container; +private _vehWeapons = getWeaponCargo _container; +private _vehBackpacks = getBackpackCargo _container; +private _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; -_query = format ["UPDATE containers SET gear='%1' WHERE id='%2'",_cargo,_containerID]; +private _query = format ["updateContainer:%1:%2", _cargo, _containerID]; -[_query,1] call HC_fnc_asyncCall; +[_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf b/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf old mode 100644 new mode 100755 index 02f5ae6fe..c05c347e5 --- a/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf +++ b/life_hc/MySQL/Housing/fn_updateHouseTrunk.sqf @@ -7,16 +7,17 @@ Description: Update inventory "y" in container */ -private ["_house"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _container) exitWith {}; -_trunkData = _container getVariable ["Trunk",[[],0]]; -_containerID = _container getVariable ["container_id",-1]; +params [ + ["_container", objNull, [objNull]] +]; + +if (isNull _container) exitWith {}; -if (_containerID isEqualTo -1) exitWith {}; //Dafuq? +_trunkData = _container getVariable ["Trunk", [[], 0]]; +_containerID = _container getVariable ["container_id", -1]; -_trunkData = [_trunkData] call HC_fnc_mresArray; -_query = format ["UPDATE containers SET inventory='%1' WHERE id='%2'",_trunkData,_containerID]; +if (_containerID isEqualTo -1) exitWith {}; -[_query,1] call HC_fnc_asyncCall; +_query = format ["updateHouseTrunk:%1:%2", _trunkData, _containerID]; +[_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf old mode 100644 new mode 100755 index a47da9473..1628eb5ec --- a/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf +++ b/life_hc/MySQL/Vehicles/fn_chopShopSell.sqf @@ -24,10 +24,10 @@ private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "dis private _dbInfo = _vehicle getVariable ["dbInfo",[]]; if (count _dbInfo > 0) then { _dbInfo params ["_uid","_plate"]; - private _query = format ["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_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]; \ No newline at end of file +[_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 old mode 100644 new mode 100755 index 1debb7a1a..6a742e038 --- a/life_hc/MySQL/Vehicles/fn_getVehicles.sqf +++ b/life_hc/MySQL/Vehicles/fn_getVehicles.sqf @@ -8,16 +8,18 @@ Description: Sends a request to query the database information and returns vehicles. */ -private ["_pid","_side","_type","_unit","_ret","_tickTime","_queryResult"]; -_pid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param; -_type = [_this,2,"",[""]] call BIS_fnc_param; -_unit = [_this,3,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_pid", "", [""]], + ["_side", sideUnknown, [west]], + ["_type", "", [""]], + ["_unit", objNull, [objNull]] +]; //Error checks -if (_pid isEqualTo "" || _side isEqualTo sideUnknown || _type isEqualTo "" || isNull _unit) exitWith { +if (_pid isEqualTo "" || {_side isEqualTo sideUnknown} || {_type isEqualTo ""} || {isNull _unit}) exitWith { if (!isNull _unit) then { - [[]] remoteExec ["life_fnc_impoundMenu",_unit]; + [[]] remoteExec ["life_fnc_impoundMenu", _unit]; }; }; @@ -28,17 +30,15 @@ _side = switch (_side) do { default {"Error"}; }; -if (_side == "Error") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu",_unit]; +if (_side isEqualTo "Error") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu", _unit]; }; -_query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type]; - -_tickTime = diag_tickTime; -_queryResult = [_query,2,true] call HC_fnc_asyncCall; +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]; + [[]] remoteExec ["life_fnc_impoundMenu", _unit]; }; -[_queryResult] 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 old mode 100644 new mode 100755 index 48c0409fa..c6accc63a --- a/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf +++ b/life_hc/MySQL/Vehicles/fn_spawnVehicle.sqf @@ -9,6 +9,7 @@ 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", "", [""]], @@ -19,24 +20,19 @@ params [ "_spawntext" ]; - - -private _ownerID = _unit getVariable ["life_clientID",-1]; private _unit_return = _unit; private _name = name _unit; private _side = side _unit; -//_unit = owner _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 _query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; +private _servIndex = serv_sv_use find _vid; private _tickTime = diag_tickTime; -private _queryResult = [_query,2] call HC_fnc_asyncCall; +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 -------------"; @@ -48,9 +44,9 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { if (_queryResult isEqualType "") exitWith {}; -_vInfo = _queryResult; +private _vInfo = _queryResult; if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; -if (count _vInfo isEqualTo 0) 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; @@ -62,7 +58,6 @@ if ((_vInfo select 6) 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]; @@ -70,21 +65,21 @@ if !(_sp isEqualType "") then { _nearVehicles = []; }; -if (count _nearVehicles > 0) exitWith { +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 ["UPDATE vehicles SET active='1', damage='""[]""' WHERE pid='%1' AND id='%2'",_pid,_vid]; +_query = format ["updateVehicle:%1:%2", _pid, _vid]; -private _trunk = [(_vInfo select 9)] call HC_fnc_mresToArray; -private _gear = [(_vInfo select 10)] call HC_fnc_mresToArray; -private _damage = [call compile (_vInfo select 12)] call HC_fnc_mresToArray; +private _trunk = _vInfo select 9; +private _gear = _vInfo select 10; +private _damage = _vInfo select 12; private _wasIllegal = _vInfo select 13; -_wasIllegal = if (_wasIllegal isEqualTo 1) then { true } else { false }; +_wasIllegal = _wasIllegal isEqualTo 1; -[_query,1] call HC_fnc_asyncCall; +[_query, 1] call HC_fnc_asyncCall; private "_vehicle"; if (_sp isEqualType "") then { @@ -93,7 +88,7 @@ if (_sp isEqualType "") then { _vehicle allowDamage false; _hs = nearestObjects[getMarkerPos _sp,["Land_Hospital_side2_F"],50] select 0; _vehicle setPosATL (_hs modelToWorld [-0.4,-4,12.65]); - sleep 0.6; + uiSleep 0.6; } else { _vehicle = createVehicle [(_vInfo select 2),_sp,[],0,"NONE"]; waitUntil {!isNil "_vehicle" && {!isNull _vehicle}}; @@ -105,11 +100,10 @@ if (_sp isEqualType "") then { _vehicle allowDamage true; //Send keys over the network. [_vehicle] remoteExecCall ["life_fnc_addVehicle2Chain",_unit]; -/*[_pid,_side,_vehicle,1] call HC_fnc_keyManagement;*/ [_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, _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. @@ -118,42 +112,42 @@ _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. 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]; + [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; - _query = format ["UPDATE vehicles SET blacklist='0' WHERE id='%1' AND pid='%2'",_vid,_pid]; - [_query,1] call HC_fnc_asyncCall; - }; + _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; + [_query, 1] call HC_fnc_asyncCall; + }; } else { - _vehicle setVariable ["Trunk",[[],0],true]; + _vehicle setVariable ["Trunk", [[], 0], true]; }; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { _vehicle setFuel (_vInfo select 11); - } else { +} else { _vehicle setFuel 1; }; -if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { +if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { _items = _gear select 0; _mags = _gear select 1; _weapons = _gear select 2; @@ -173,7 +167,7 @@ if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqua }; }; -if (count _damage > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { +if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { _parts = getAllHitPointsDamage _vehicle; for "_i" from 0 to ((count _damage) - 1) do { @@ -182,7 +176,7 @@ if (count _damage > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqual }; //Sets of animations -if ((_vInfo select 1) isEqualTo "civ" && ((_vInfo select 2)) isEqualTo "B_Heli_Light_01_F" && !((_vInfo select 8) isEqualTo 13)) then { +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]; }; @@ -190,9 +184,9 @@ if ((_vInfo select 1) isEqualTo "cop" && ((_vInfo select 2)) in ["C_Offroad_01_F [_vehicle,"cop_offroad",true] remoteExecCall ["life_fnc_vehicleAnimate",_unit]; }; -if ((_vInfo select 1) isEqualTo "med" && ((_vInfo select 2)) isEqualTo "C_Offroad_01_F") then { +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]; +[1, _spawntext] remoteExecCall ["life_fnc_broadcast",_unit]; serv_sv_use deleteAt _servIndex; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf old mode 100644 new mode 100755 index bb64db519..5f2434c74 --- a/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleCreate.sqf @@ -7,17 +7,19 @@ Description: Answers the query request to create the vehicle in the database. */ -private ["_uid","_side","_type","_classname","_color","_plate"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param; -_vehicle = [_this,2,objNull,[objNull]] call BIS_fnc_param; -_color = [_this,3,-1,[0]] call BIS_fnc_param; + +params [ + ["_uid", "", [""]], + ["_side", sideUnknown, [west]], + ["_vehicle", objNull, [objNull]], + ["_color", -1, [0]] +]; //Error checks -if (_uid isEqualTo "" || _side isEqualTo sideUnknown || isNull _vehicle) exitWith {}; +if (_uid isEqualTo "" || {_side isEqualTo sideUnknown} || {isNull _vehicle}) exitWith {}; if (!alive _vehicle) exitWith {}; -_className = typeOf _vehicle; -_type = switch (true) do { +private _className = typeOf _vehicle; +private _type = switch (true) do { case (_vehicle isKindOf "Car"): {"Car"}; case (_vehicle isKindOf "Air"): {"Air"}; case (_vehicle isKindOf "Ship"): {"Ship"}; @@ -30,8 +32,7 @@ _side = switch (_side) do { default {"Error"}; }; -_plate = round(random(1000000)); - -[_uid,_side,_type,_classname,_color,_plate] call HC_fnc_insertVehicle; +private _plate = round(random(1000000)); +[_uid, _side, _type, _classname, _color, _plate] call HC_fnc_insertVehicle; -_vehicle setVariable ["dbInfo",[_uid,_plate],true]; +_vehicle setVariable ["dbInfo", [_uid, _plate], true]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf b/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf old mode 100644 new mode 100755 index 7c392232f..218dfe874 --- a/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleDelete.sqf @@ -8,16 +8,16 @@ 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. */ -diag_log "Script VehicleDelete HC"; -private ["_vid","_sp","_pid","_query","_sql","_type","_thread"]; -_vid = [_this,0,-1,[0]] call BIS_fnc_param; -_pid = [_this,1,"",[""]] call BIS_fnc_param; -_sp = [_this,2,2500,[0]] call BIS_fnc_param; -_unit = [_this,3,objNull,[objNull]] call BIS_fnc_param; -_type = [_this,4,"",[""]] call BIS_fnc_param; -if (_vid isEqualTo -1 || _pid isEqualTo "" || _sp isEqualTo 0 || isNull _unit || _type isEqualTo "") exitWith {}; +params [ + ["_vid", -1, [0]], + ["_pid", "", [""]], + ["_sp", 2500, [0]], + ["_unit", objNull, [objNull]], + ["_type", "", [""]] +]; -_query = format ["UPDATE vehicles SET alive='0' WHERE pid='%1' AND id='%2'",_pid,_vid]; +if (_vid isEqualTo -1 || {_pid isEqualTo ""} || {_sp isEqualTo 0} || {isNull _unit} || {_type isEqualTo ""}) exitWith {}; -_thread = [_query,1] call HC_fnc_asyncCall; +private _query = format ["deleteVehicleID:%1:%2", _pid, _vid]; +private _thread = [_query, 1] call HC_fnc_asyncCall; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf old mode 100644 new mode 100755 index f963dd9de..b90d8f176 --- a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf @@ -2,44 +2,49 @@ /* File: fn_vehicleStore.sqf Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - Description: Stores the vehicle in the 'Garage' */ -private ["_vehicle","_impound","_vInfo","_vInfo","_plate","_uid","_query","_sql","_unit","_trunk","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo","_saveItems","_storetext","_resourceItems","_fuel","_damage","_itemList","_totalweight","_weight"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_impound = [_this,1,false,[true]] call BIS_fnc_param; -_unit = [_this,2,objNull,[objNull]] call BIS_fnc_param; -_storetext = [_this,3,"",[""]] call BIS_fnc_param; -_ownerID = _unit getVariable ["life_clientID",-1]; -_resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - -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. -_vInfo = _vehicle getVariable ["dbInfo",[]]; - -if (count _vInfo > 0) then { + +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 { +} else { _damage = []; }; -_damage = [_damage] call HC_fnc_mresArray; // because fuel price! +private "_fuel"; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { _fuel = (fuel _vehicle); - } else { +} else { _fuel = 1; }; +private "_query"; +private "_thread"; if (_impound) exitWith { if (_vInfo isEqualTo []) then { life_impound_inuse = false; @@ -49,7 +54,7 @@ if (_impound) exitWith { deleteVehicle _vehicle; }; } else { // no free repairs! - _query = format ["UPDATE vehicles SET active='0', fuel='%3', damage='%4' WHERE pid='%1' AND plate='%2'",_uid , _plate, _fuel, _damage]; + _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; _thread = [_query,1] call HC_fnc_asyncCall; if (!isNil "_vehicle" && {!isNull _vehicle}) then { @@ -63,7 +68,7 @@ if (_impound) exitWith { // not persistent so just do this! if (_vInfo isEqualTo []) exitWith { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; life_garage_store = false; _ownerID publicVariableClient "life_garage_store"; }; @@ -75,23 +80,25 @@ if !(_uid isEqualTo getPlayerUID _unit) exitWith { }; // sort out whitelisted items! -_trunk = _vehicle getVariable ["Trunk", [[], 0]]; -_itemList = _trunk select 0; -_totalweight = 0; +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 { - _blacklist = false; - _profileQuery = format ["SELECT name FROM players WHERE pid='%1'", _uid]; + private _blacklist = false; + _profileQuery = format ["selectName:%1", _uid]; _profileName = [_profileQuery, 2] call HC_fnc_asyncCall; _profileName = _profileName select 0; + { - _isIllegal = M_CONFIG(getNumber,"VirtualItems",_x select 0,"illegal"); + private _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); - _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; + _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]; + 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; }; @@ -101,48 +108,47 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { } foreach _itemList; - if (_blacklist) then { - [_uid, _profileName, "481"] remoteExecCall["HC_fnc_wantedAdd", HC_Life]; - _query = format ["UPDATE vehicles SET blacklist='1' WHERE pid='%1' AND plate='%2'", _uid, _plate]; + 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; + { + 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]; - }; + _trunk = [_items, _totalweight]; +} +else { + _trunk = [[], 0]; +}; + +private "_cargo"; + if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { - _vehItems = getItemCargo _vehicle; - _vehMags = getMagazineCargo _vehicle; - _vehWeapons = getWeaponCargo _vehicle; - _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + 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 = []; }; -// prepare -_trunk = [_trunk] call HC_fnc_mresArray; -_cargo = [_cargo] call HC_fnc_mresArray; - // update -_query = format ["UPDATE vehicles SET active='0', inventory='%3', gear='%4', fuel='%5', damage='%6' WHERE pid='%1' AND plate='%2'", _uid, _plate, _trunk, _cargo, _fuel, _damage]; +_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 { @@ -151,4 +157,4 @@ if (!isNil "_vehicle" && {!isNull _vehicle}) then { life_garage_store = false; _ownerID publicVariableClient "life_garage_store"; -[1,_storetext] remoteExecCall ["life_fnc_broadcast",_ownerID]; +[1, _storetext] remoteExecCall ["life_fnc_broadcast", _ownerID]; diff --git a/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf b/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf old mode 100644 new mode 100755 index 39590e998..d623b2fef --- a/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleUpdate.sqf @@ -8,48 +8,53 @@ Description: Tells the database that this vehicle need update inventory. */ -private ["_vehicle","_plate","_uid","_query","_sql","_dbInfo","_thread","_cargo","_trunk","_resourceItems","_itemList","_totalweight","_weight"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_mode = [_this,1,1,[0]] call BIS_fnc_param; + +params [ + ["_vehicle", objNull, [objNull]], + ["_mode", 1, [0]] +]; + if (isNull _vehicle) exitWith {}; //NULL -_dbInfo = _vehicle getVariable ["dbInfo",[]]; +private _dbInfo = _vehicle getVariable ["dbInfo",[]]; if (_dbInfo isEqualTo []) exitWith {}; -_uid = _dbInfo select 0; -_plate = _dbInfo select 1; + +private _uid = _dbInfo select 0; +private _plate = _dbInfo select 1; + switch (_mode) do { case 1: { - _vehItems = getItemCargo _vehicle; - _vehMags = getMagazineCargo _vehicle; - _vehWeapons = getWeaponCargo _vehicle; - _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + 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 = [];}; - - _cargo = [_cargo] call HC_fnc_mresArray; + if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { + _cargo = []; + }; - _query = format ["UPDATE vehicles SET gear='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_cargo]; - _thread = [_query,1] call HC_fnc_asyncCall; + private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _plate]; + private _thread = [_query, 1] call HC_fnc_asyncCall; }; case 2: { - _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - _trunk = _vehicle getVariable ["Trunk",[[],0]]; - _totalweight = 0; - _items = []; + 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)]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + _items pushBack [_x select 0,_x select 1]; + private _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); _totalweight = _weight + _totalweight; }; - }forEach (_trunk select 0); + } forEach _itemList; _trunk = [_items,_totalweight]; - _trunk = [_trunk] call HC_fnc_mresArray; - _query = format ["UPDATE vehicles SET inventory='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_trunk]; - _thread = [_query,1] call HC_fnc_asyncCall; + private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _plate]; + private _thread = [_query,1] call HC_fnc_asyncCall; }; }; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf b/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf old mode 100644 new mode 100755 index c878dc3c5..5e99e944d --- a/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf @@ -10,88 +10,45 @@ Description: Adds or appends a unit to the wanted list. */ -private ["_uid","_type","_index","_data","_crime","_val","_customBounty","_name","_pastCrimes","_query","_queryResult"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_name = [_this,1,"",[""]] call BIS_fnc_param; -_type = [_this,2,"",[""]] call BIS_fnc_param; -_customBounty = [_this,3,-1,[0]] call BIS_fnc_param; -if (_uid isEqualTo "" || _type isEqualTo "" || _name isEqualTo "") exitWith {}; //Bad data passed. + +params [ + ["_uid","",[""]], + ["_name","",[""]], + ["_type","",[""]], + ["_customBounty",-1,[0]] +]; + +if (_uid isEqualTo "" || {_type isEqualTo ""} || {_name isEqualTo ""}) exitWith {}; //Bad data passed. //What is the crime? -switch (_type) do -{ - case "187V": {_type = ["187V",650]}; - case "187": {_type = ["187",2000]}; - case "901": {_type = ["901",450]}; - case "215": {_type = ["215",200]}; - case "213": {_type = ["213",1000]}; - case "211": {_type = ["211",100]}; - case "207": {_type = ["207",350]}; - case "207A": {_type = ["207A",200]}; - case "390": {_type = ["390",1500]}; - case "487": {_type = ["487",150]}; - case "488": {_type = ["488",70]}; - case "480": {_type = ["480",100]}; - case "481": {_type = ["481",100]}; - case "482": {_type = ["482",500]}; - case "483": {_type = ["483",950]}; - case "459": {_type = ["459",650]}; - case "666": {_type = ["666",200]}; - case "667": {_type = ["667",4500]}; - case "668": {_type = ["668",1500]}; +private _crimesConfig = getArray(missionConfigFile >> "Life_Settings" >> "crimes"); +private _index = [_type, _crimesConfig] call TON_fnc_index; - case "1": {_type = ["1",250]}; - case "2": {_type = ["2",100]}; - case "3": {_type = ["3",75]}; - case "4": {_type = ["4",125]}; - case "5": {_type = ["5",50]}; - case "6": {_type = ["6",40]}; - case "7": {_type = ["7",75]}; - case "8": {_type = ["8",2500]}; - case "9": {_type = ["9",2500]}; - case "10": {_type = ["10",7500]}; - case "11": {_type = ["11",5000]}; - case "12": {_type = ["12",1250]}; - case "13": {_type = ["13",750]}; - case "14": {_type = ["14",250]}; - case "15": {_type = ["15",1250]}; - case "16": {_type = ["16",750]}; - case "17": {_type = ["17",50]}; - case "18": {_type = ["18",750]}; - case "19": {_type = ["19",1250]}; - case "20": {_type = ["20",250]}; - case "21": {_type = ["21",250]}; - case "22": {_type = ["22",1000]}; - case "23": {_type = ["23",2500]}; - case "24": {_type = ["24",5000]}; - case "25": {_type = ["25",10000]}; - default {_type = [];}; -}; +if (_index isEqualTo -1) exitWith {}; + +_type = [_type, parseNumber ((_crimesConfig select _index) select 1)]; if (_type isEqualTo []) exitWith {}; //Not our information being passed... //Is there a custom bounty being sent? Set that as the pricing. if !(_customBounty isEqualTo -1) then {_type set[1,_customBounty];}; //Search the wanted list to make sure they are not on it. -_query = format ["SELECT wantedID FROM wanted WHERE wantedID='%1'",_uid]; -_queryResult = [_query,2,true] call HC_fnc_asyncCall; -_val = [_type select 1] call HC_fnc_numberSafe; -_number = _type select 0; +private _query = format ["selectWantedID:%1", _uid]; +private _queryResult = [_query,2,true] call HC_fnc_asyncCall; +private _val = _type select 1; +private _number = _type select 0; + +if !(_queryResult isEqualTo []) then { + _query = format ["selectWantedCrimes:%1", _uid]; + _queryResult = [_query,2] call HC_fnc_asyncCall; + _pastCrimes = _queryResult select 0; -if !(count _queryResult isEqualTo 0) then -{ - _crime = format ["SELECT wantedCrimes, wantedBounty FROM wanted WHERE wantedID='%1'",_uid]; - _crimeresult = [_crime,2] call HC_fnc_asyncCall; - _pastcrimess = [_crimeresult select 0] call HC_fnc_mresToArray; - if (_pastcrimess isEqualType "") then {_pastcrimess = call compile format ["%1", _pastcrimess];}; - _pastCrimes = _pastcrimess; + if (_pastCrimes isEqualType "") then {_pastCrimes = call compile format ["%1", _pastCrimes];}; _pastCrimes pushBack _number; - _pastCrimes = [_pastCrimes] call HC_fnc_mresArray; - _query = format ["UPDATE wanted SET wantedCrimes = '%1', wantedBounty = wantedBounty + '%2', active = '1' WHERE wantedID='%3'",_pastCrimes,_val,_uid]; + _query = format ["updateWanted:%1:%2:%3", _pastCrimes, _val, _uid]; [_query,1] call HC_fnc_asyncCall; } else { _crime = [_type select 0]; - _crime = [_crime] call HC_fnc_mresArray; - _query = format ["INSERT INTO wanted (wantedID, wantedName, wantedCrimes, wantedBounty, active) VALUES('%1', '%2', '%3', '%4', '1')",_uid,_name,_crime,_val]; + _query = format ["insertWanted:%1:%2:%3:%4", _uid, _name, _crime, _val]; [_query,1] call HC_fnc_asyncCall; }; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf b/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf old mode 100644 new mode 100755 index 9096a2ef4..7c99d2219 --- a/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedBounty.sqf @@ -10,24 +10,27 @@ Description: Checks if the person is on the bounty list and awards the cop for killing them. */ -private ["_civ","_cop","_id","_half","_result","_queryResult","_amount"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_civ = [_this,1,objNull,[objNull]] call BIS_fnc_param; -_cop = [_this,2,objNull,[objNull]] call BIS_fnc_param; -_half = [_this,3,false,[false]] call BIS_fnc_param; -if (isNull _civ || isNull _cop) exitWith {}; -_query = format ["SELECT wantedID, wantedName, wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +params [ + ["_uid","",[""]], + ["_civ",objNull,[objNull]], + ["_cop",objNull,[objNull]], + ["_half",false,[false]] +]; -if !(count _queryResult isEqualTo 0) then -{ - _amount = _queryResult select 3; +if (isNull _civ || {isNull _cop}) exitWith {}; + +private _query = format ["selectWanted:%1", _uid]; +private _queryResult = [_query,2] call HC_fnc_asyncCall; + +private "_amount"; +if !(_queryResult isEqualTo []) then { + _amount = _queryResult param [3]; if !(_amount isEqualTo 0) then { if (_half) then { - [((_amount) / 2),_amount] remoteExecCall ["life_fnc_bountyReceive",_cop]; + [((_amount) / 2),_amount] remoteExecCall ["life_fnc_bountyReceive", _cop]; } else { - [_amount,_amount] remoteExecCall ["life_fnc_bountyReceive",_cop]; + [_amount,_amount] remoteExecCall ["life_fnc_bountyReceive", _cop]; }; }; }; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf b/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf old mode 100644 new mode 100755 index 90722f07a..212ba7341 --- a/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf @@ -10,71 +10,27 @@ Description: Grabs a list of crimes committed by a person. */ -private ["_display","_criminal","_tab","_queryResult","_result","_ret","_crimesDb","_crimesArr","_type"]; + disableSerialization; -_ret = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_criminal = [_this,1,[],[]] call BIS_fnc_param; -_query = format ["SELECT wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_criminal select 0]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +params [ + ["_ret",objNull,[objNull]], + ["_criminal",[],[]] +]; -_crimesArr = []; +private _query = format ["selectWantedActive:%1", _criminal select 0]; +private _queryResult = [_query, 2] call HC_fnc_asyncCall; -_type = [_queryResult select 0] call HC_fnc_mresToArray; +private _type = _queryResult select 0; if (_type isEqualType "") then {_type = call compile format ["%1", _type];}; + +private _crimesArr = []; { - switch (_x) do - { - case "187V": {_x = "STR_Crime_187V"}; - case "187": {_x = "STR_Crime_187"}; - case "901": {_x = "STR_Crime_901"}; - case "215": {_x = "STR_Crime_215"}; - case "213": {_x = "STR_Crime_213"}; - case "211": {_x = "STR_Crime_211"}; - case "207": {_x = "STR_Crime_207"}; - case "207A": {_x = "STR_Crime_207A"}; - case "390": {_x = "STR_Crime_390"}; - case "487": {_x = "STR_Crime_487"}; - case "488": {_x = "STR_Crime_488"}; - case "480": {_x = "STR_Crime_480"}; - case "481": {_x = "STR_Crime_481"}; - case "482": {_x = "STR_Crime_482"}; - case "483": {_x = "STR_Crime_483"}; - case "459": {_x = "STR_Crime_459"}; - case "666": {_x = "STR_Crime_666"}; - case "667": {_x = "STR_Crime_667"}; - case "668": {_x = "STR_Crime_668"}; - case "919": {_x = "STR_Crime_919"}; - case "919A": {_x = "STR_Crime_919A"}; + private _str = format ["STR_Crime_%1", _x]; + _crimesArr pushBack _str; + false +} count _type; - case "1": {_x = "STR_Crime_1"}; - case "2": {_x = "STR_Crime_2"}; - case "3": {_x = "STR_Crime_3"}; - case "4": {_x = "STR_Crime_4"}; - case "5": {_x = "STR_Crime_5"}; - case "6": {_x = "STR_Crime_6"}; - case "7": {_x = "STR_Crime_7"}; - case "8": {_x = "STR_Crime_8"}; - case "9": {_x = "STR_Crime_9"}; - case "10": {_x = "STR_Crime_10"}; - case "11": {_x = "STR_Crime_11"}; - case "12": {_x = "STR_Crime_12"}; - case "13": {_x = "STR_Crime_13"}; - case "14": {_x = "STR_Crime_14"}; - case "15": {_x = "STR_Crime_15"}; - case "16": {_x = "STR_Crime_16"}; - case "17": {_x = "STR_Crime_17"}; - case "18": {_x = "STR_Crime_18"}; - case "19": {_x = "STR_Crime_19"}; - case "20": {_x = "STR_Crime_20"}; - case "21": {_x = "STR_Crime_21"}; - case "22": {_x = "STR_Crime_22"}; - case "23": {_x = "STR_Crime_23"}; - case "24": {_x = "STR_Crime_24"}; - case "25": {_x = "STR_Crime_25"}; - }; - _crimesArr pushBack _x; -}forEach _type; -_queryResult set[0,_crimesArr]; +_queryResult set[0, _crimesArr]; -[_queryResult] remoteExec ["life_fnc_wantedInfo",_ret]; +[_queryResult] remoteExec ["life_fnc_wantedInfo", _ret]; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf b/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf old mode 100644 new mode 100755 index 40e66bdf0..8d18d4b72 --- a/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf @@ -11,39 +11,43 @@ Description: Displays wanted list information sent from the server. */ -private ["_ret","_list","_result","_queryResult","_units","_inStatement"]; -_ret = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_ret", objNull, [objNull]] +]; + if (isNull _ret) exitWith {}; -_inStatement = ""; -_list = []; -_units = []; -{if ((side _x) isEqualTo civilian) then {_units pushBack (getPlayerUID _x)};} forEach playableUnits; + +private _inStatement = ""; +private _list = []; +private _units = []; +{ + if (side _x isEqualTo civilian) then {_units pushBack (getPlayerUID _x)}; + false +} count playableUnits; if (_units isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; { if (count _units > 1) then { - if (_inStatement isEqualTo "") then { + if (_inStatement isEqualTo "") then { _inStatement = "'" + _x + "'"; } else { _inStatement = _inStatement + ", '" + _x + "'"; }; } else { - _inStatement = _x; + _inStatement = _x; }; } forEach _units; -_query = format ["SELECT wantedID, wantedName FROM wanted WHERE active='1' AND wantedID in (%1)",_inStatement]; -_queryResult = [_query,2,true] call HC_fnc_asyncCall; - -diag_log format ["Query: %1",_query]; - +private _query = format ["selectWantedActiveID:%1", _inStatement]; +private _queryResult = [_query, 2, true] call HC_fnc_asyncCall; { - _list pushBack (_x); -} -forEach _queryResult; + _list pushBack _x; + false +} count _queryResult; -if (_list isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; +if (_list isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList", _ret];}; -[_list] remoteExec ["life_fnc_wantedList",_ret]; +[_list] remoteExec ["life_fnc_wantedList", _ret]; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf b/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf old mode 100644 new mode 100755 index c1ffdf50b..383c96fa2 --- a/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedPerson.sqf @@ -10,12 +10,16 @@ Description: Fetches a specific person from the wanted array. */ -private ["_unit","_index","_queryResult","_result"]; -_unit = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_unit", objNull, [objNull]] +]; + if (isNull _unit) exitWith {[]}; -_uid = getPlayerUID player; -_query = format ["SELECT wantedID, wantedName, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; -_queryResult = [_query,2] call HC_fnc_asyncCall; +private _uid = getPlayerUID _unit; +private _query = format ["selectWantedBounty:%1", _uid]; +private _queryResult = [_query,2] call HC_fnc_asyncCall; + if (_queryResult isEqualTo []) exitWith {[]}; _queryResult; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf b/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf old mode 100644 new mode 100755 index 3daa31ea9..f74adc3ad --- a/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedProfUpdate.sqf @@ -9,19 +9,20 @@ Description: Updates name of player if they change profiles */ -private ["_uid","_name","_query","_tickTime","_wantedCheck","_wantedQuery"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_name = [_this,1,"",[""]] call BIS_fnc_param; +params [ + ["_uid","",[""]], + ["_name","",[""]] +]; + //Bad data check -if (_uid isEqualTo "" || _name isEqualTo "") exitWith {}; +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; -_wantedCheck = format ["SELECT wantedName FROM wanted WHERE wantedID='%1'",_uid]; -_wantedQuery = [_wantedCheck,2] call HC_fnc_asyncCall; +private _wantedCheck = format ["selectWantedName:%1", _uid]; +private _wantedQuery = [_wantedCheck, 2] call HC_fnc_asyncCall; if (_wantedQuery isEqualTo []) exitWith {}; -_wantedQuery = call compile format ["%1",_wantedQuery]; if !(_name isEqualTo (_wantedQuery select 0)) then { - _query = format ["UPDATE wanted SET wantedName='%1' WHERE wantedID='%2'",_name,_uid]; - [_query,2] call HC_fnc_asyncCall; + private _query = format ["updateWantedName:%1:%2", _name, _uid]; + [_query, 2] call HC_fnc_asyncCall; }; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf b/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf old mode 100644 new mode 100755 index 677047ade..4c2bca12c --- a/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedRemove.sqf @@ -10,9 +10,12 @@ Description: Removes a person from the wanted list. */ -private ["_uid","_query"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; + +params [ + ["_uid", "", [""]] +]; + if (_uid isEqualTo "") exitWith {}; //Bad data -_query = format ["UPDATE wanted SET active = '0', wantedCrimes = '[]', wantedBounty = 0 WHERE wantedID='%1'",_uid]; -[_query,2] call HC_fnc_asyncCall; +private _query = format ["deleteWanted:%1", _uid]; +[_query, 2] call HC_fnc_asyncCall; diff --git a/life_hc/config.cpp b/life_hc/config.cpp old mode 100644 new mode 100755 index 3478c4f4a..da33046a0 --- a/life_hc/config.cpp +++ b/life_hc/config.cpp @@ -24,13 +24,8 @@ class CfgFunctions { file = "\life_hc\MySQL\General"; class asyncCall {}; - class bool {}; class insertRequest {}; class insertVehicle {}; - class mresArray {}; - class mresString {}; - class mresToArray {}; - class numberSafe {}; class queryRequest {}; class updatePartial {}; class updateRequest {}; diff --git a/life_hc/initHC.sqf b/life_hc/initHC.sqf index ed820d00a..1655c96f9 100644 --- a/life_hc/initHC.sqf +++ b/life_hc/initHC.sqf @@ -21,7 +21,7 @@ if (isNil {uiNamespace getVariable "life_sql_id"}) then { 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:%1:TEXT2",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; + _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; @@ -48,10 +48,10 @@ if (_extDBNotLoaded isEqualType []) then { if (_extDBNotLoaded isEqualType []) exitWith {}; //extDB3-HC did not fully initialize so terminate the rest of the initialization process. -["CALL resetLifeVehicles",1] call HC_fnc_asyncCall; -["CALL deleteDeadVehicles",1] call HC_fnc_asyncCall; -["CALL deleteOldHouses",1] call HC_fnc_asyncCall; -["CALL deleteOldGangs",1] call HC_fnc_asyncCall; +["resetLifeVehicles", 1] call HC_fnc_asyncCall; +["deleteDeadVehicles", 1] call HC_fnc_asyncCall; +["deleteOldHouses", 1] call HC_fnc_asyncCall; +["deleteOldGangs", 1] call HC_fnc_asyncCall; _timeStamp = diag_tickTime; diag_log "----------------------------------------------------------------------------------------------------"; @@ -86,7 +86,6 @@ HC_MPAllowedFuncs = [ "hc_fnc_addhouse", "hc_fnc_deletedbcontainer", "hc_fnc_fetchplayerhouses", - "hc_fnc_housecleanup", "hc_fnc_sellhouse", "hc_fnc_sellhousecontainer", "hc_fnc_updatehousecontainers", diff --git a/life_server/FSM/cleanup.fsm b/life_server/FSM/cleanup.fsm old mode 100644 new mode 100755 index 7ea28061e..6e28987f3 --- a/life_server/FSM/cleanup.fsm +++ b/life_server/FSM/cleanup.fsm @@ -91,7 +91,7 @@ class FSM " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n "" \n - " _query = format [""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n " _query spawn {" \n " " \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n @@ -110,7 +110,7 @@ class FSM " _uid = _dbInfo select 0;" \n " _plate = _dbInfo select 1;" \n "" \n - " _query = format [""UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'"",_uid,_plate];" \n + " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n " _query spawn {" \n " " \n " _thread = [_this,1] call DB_fnc_asyncCall;" \n diff --git a/life_server/Functions/Gangs/fn_insertGang.sqf b/life_server/Functions/Gangs/fn_insertGang.sqf old mode 100644 new mode 100755 index 784b1229a..bea490774 --- a/life_server/Functions/Gangs/fn_insertGang.sqf +++ b/life_server/Functions/Gangs/fn_insertGang.sqf @@ -6,64 +6,65 @@ Description: Inserts the gang into the database. */ -private ["_query","_queryResult","_gangMembers","_group"]; + params [ - ["_ownerID",objNull,[objNull]], - ["_uid","",[""]], - ["_gangName","",[""]] + ["_ownerID", objNull, [objNull]], + ["_uid", "", [""]], + ["_gangName", "", [""]] ]; -_group = group _ownerID; -if (isNull _ownerID || _uid isEqualTo "" || _gangName isEqualTo "") exitWith {}; //Fail +private _group = group _ownerID; + +if (isNull _ownerID || {_uid isEqualTo ""} || {_gangName isEqualTo ""}) exitWith {}; _ownerID = owner _ownerID; -_gangName = [_gangName] call DB_fnc_mresString; -_query = format ["SELECT id FROM gangs WHERE name='%1' AND active='1'",_gangName]; +private _query = format ["selectGangID:%1", _gangName]; -_queryResult = [_query,2] call DB_fnc_asyncCall; +private _queryResult = [_query, 2] call DB_fnc_asyncCall; //Check to see if the gang name already exists. -if (!(count _queryResult isEqualTo 0)) exitWith { - [1,"There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast",_ownerID]; +if !(_queryResult isEqualTo []) exitWith { + [1, "There is already a gang created with that name please pick another name."] remoteExecCall ["life_fnc_broadcast", _ownerID]; life_action_gangInUse = nil; _ownerID publicVariableClient "life_action_gangInUse"; }; -_query = format ["SELECT id FROM gangs WHERE members LIKE '%2%1%2' AND active='1'",_uid,"%"]; +private _uidLike = format["%2%1%2", _uid, "%"]; +_query = format ["selectGangIDFromMembers:%1", _uidLike]; -_queryResult = [_query,2] call DB_fnc_asyncCall; +_queryResult = [_query,2 ] call DB_fnc_asyncCall; //Check to see if this person already owns or belongs to a gang. if (!(count _queryResult isEqualTo 0)) exitWith { - [1,"You are currently already active in a gang, please leave the gang first."] remoteExecCall ["life_fnc_broadcast",_ownerID]; + [1, "You are currently already active in a gang, please leave the gang first."] remoteExecCall ["life_fnc_broadcast", _ownerID]; life_action_gangInUse = nil; _ownerID publicVariableClient "life_action_gangInUse"; }; //Check to see if a gang with that name already exists but is inactive. -_query = format ["SELECT id, active FROM gangs WHERE name='%1' AND active='0'",_gangName]; +_query = format ["selectInactiveGang:%1", _gangName]; -_queryResult = [_query,2] call DB_fnc_asyncCall; -_gangMembers = [[_uid]] call DB_fnc_mresArray; +_queryResult = [_query, 2] call DB_fnc_asyncCall; +private _gangMembers = [_uid]; -if (!(count _queryResult isEqualTo 0)) then { - _query = format ["UPDATE gangs SET active='1', owner='%1',members='%2' WHERE id='%3'",_uid,_gangMembers,(_queryResult select 0)]; +if !(_queryResult isEqualTo []) then { + _query = format ["updateGang:%1:%2:%3", (_queryResult select 0), _gangMembers, _uid]; } else { - _query = format ["INSERT INTO gangs (owner, name, members) VALUES('%1','%2','%3')",_uid,_gangName,_gangMembers]; + _query = format ["insertGang:%1:%2:%3", _uid, _gangName, _gangMembers]; }; -_queryResult = [_query,1] call DB_fnc_asyncCall; +_queryResult = [_query, 1] call DB_fnc_asyncCall; -_group setVariable ["gang_name",_gangName,true]; -_group setVariable ["gang_owner",_uid,true]; -_group setVariable ["gang_bank",0,true]; -_group setVariable ["gang_maxMembers",8,true]; -_group setVariable ["gang_members",[_uid],true]; -[_group] remoteExecCall ["life_fnc_gangCreated",_ownerID]; +_group setVariable ["gang_name", _gangName, true]; +_group setVariable ["gang_owner", _uid, true]; +_group setVariable ["gang_bank", 0, true]; +_group setVariable ["gang_maxMembers", 8, true]; +_group setVariable ["gang_members", [_uid], true]; +[_group] remoteExecCall ["life_fnc_gangCreated", _ownerID]; uiSleep 0.35; -_query = format ["SELECT id FROM gangs WHERE owner='%1' AND active='1'",_uid]; +_query = format ["selectGangIDFromOwner:%1", _uid]; -_queryResult = [_query,2] call DB_fnc_asyncCall; +_queryResult = [_query, 2] call DB_fnc_asyncCall; -_group setVariable ["gang_id",(_queryResult select 0),true]; +_group setVariable ["gang_id", (_queryResult select 0), true]; diff --git a/life_server/Functions/Gangs/fn_queryPlayerGang.sqf b/life_server/Functions/Gangs/fn_queryPlayerGang.sqf old mode 100644 new mode 100755 index 36f6a7526..35313845e --- a/life_server/Functions/Gangs/fn_queryPlayerGang.sqf +++ b/life_server/Functions/Gangs/fn_queryPlayerGang.sqf @@ -5,15 +5,9 @@ Description: Queries to see if the player belongs to any gang. */ -private ["_query","_queryResult"]; -_query = format ["SELECT id, owner, name, maxmembers, bank, members FROM gangs WHERE active='1' AND members LIKE '%2%1%2'",_this,"%"]; +private _pid = format ["%2%1%2", _this, "%"]; +private _query = format ["selectPlayerGang:%1", _pid]; +private _queryResult = [_query, 2] call DB_fnc_asyncCall; -_queryResult = [_query,2] call DB_fnc_asyncCall; - -if !(count _queryResult isEqualTo 0) then { - _tmp = [_queryResult select 5] call DB_fnc_mresToArray; - if (_tmp isEqualType "") then {_tmp = call compile format ["%1", _tmp];}; - _queryResult set[5, _tmp]; -}; -missionNamespace setVariable [format ["gang_%1",_this],_queryResult]; +missionNamespace setVariable [format ["gang_%1", _this], _queryResult]; diff --git a/life_server/Functions/Gangs/fn_removeGang.sqf b/life_server/Functions/Gangs/fn_removeGang.sqf old mode 100644 new mode 100755 index fafb7a70d..cb5eb0c7a --- a/life_server/Functions/Gangs/fn_removeGang.sqf +++ b/life_server/Functions/Gangs/fn_removeGang.sqf @@ -6,19 +6,19 @@ Description: Removes gang from database */ -private ["_group","_groupID"]; -_group = param [0,grpNull,[grpNull]]; + +params [ + ["_group", grpNull, [grpNull]] +]; + if (isNull _group) exitWith {}; -_groupID = _group getVariable ["gang_id",-1]; +private _groupID = _group getVariable ["gang_id",-1]; if (_groupID isEqualTo -1) exitWith {}; -[format ["UPDATE gangs SET active='0' WHERE id='%1'",_groupID],1] call DB_fnc_asyncCall; +_group setVariable ["gang_owner",nil,true]; +[format ["deleteGang:%1", _groupID], 1] call DB_fnc_asyncCall; -_result = [format ["SELECT id FROM gangs WHERE active='1' AND id='%1'",_groupID],2] call DB_fnc_asyncCall; -if (count _result isEqualTo 0) then { - [_group] remoteExecCall ["life_fnc_gangDisbanded",(units _group)]; - uiSleep 5; - deleteGroup _group; -}; -["CALL deleteOldGangs",1] call DB_fnc_asyncCall; +[_group] remoteExecCall ["life_fnc_gangDisbanded", (units _group)]; +uiSleep 5; +deleteGroup _group; \ No newline at end of file diff --git a/life_server/Functions/Gangs/fn_updateGang.sqf b/life_server/Functions/Gangs/fn_updateGang.sqf old mode 100644 new mode 100755 index a8815996b..01c25aa42 --- a/life_server/Functions/Gangs/fn_updateGang.sqf +++ b/life_server/Functions/Gangs/fn_updateGang.sqf @@ -6,26 +6,28 @@ Description: Updates the gang information? */ -private ["_groupID","_bank","_maxMembers","_members","_membersFinal","_query","_owner"]; + params [ - ["_mode",0,[0]], - ["_group",grpNull,[grpNull]] + ["_mode", 0, [0]], + ["_group", grpNull, [grpNull]] ]; if (isNull _group) exitWith {}; //FAIL -_groupID = _group getVariable ["gang_id",-1]; +private _groupID = _group getVariable ["gang_id", -1]; if (_groupID isEqualTo -1) exitWith {}; +private "_query"; + switch (_mode) do { case 0: { - _bank = [(_group getVariable ["gang_bank",0])] call DB_fnc_numberSafe; - _maxMembers = _group getVariable ["gang_maxMembers",8]; - _members = [(_group getVariable "gang_members")] call DB_fnc_mresArray; - _owner = _group getVariable ["gang_owner",""]; + private _bank = _group getVariable ["gang_bank", 0]; + private _maxMembers = _group getVariable ["gang_maxMembers", 8]; + private _members = _group getVariable "gang_members"; + private _owner = _group getVariable ["gang_owner", ""]; if (_owner isEqualTo "") exitWith {}; - _query = format ["UPDATE gangs SET bank='%1', maxmembers='%2', owner='%3' WHERE id='%4'",_bank,_maxMembers,_owner,_groupID]; + _query = format ["updateGang1:%1:%2:%3:%4", _bank, _maxMembers, _owner, _groupID]; }; case 1: { @@ -61,23 +63,24 @@ switch (_mode) do { diag_log (format [localize "STR_DL_ML_withdrewGang",name _unit,(getPlayerUID _unit),_value,[_funds] call life_fnc_numberText,[0] call life_fnc_numberText,[_cash] call life_fnc_numberText]); }; }; - _query = format ["UPDATE gangs SET bank='%1' WHERE id='%2'",([_funds] call DB_fnc_numberSafe),_groupID]; [getPlayerUID _unit,side _unit,_cash,0] call DB_fnc_updatePartial; + _query = format ["updateGangBank:%1:%2", _group getVariable ["gang_bank", 0], _groupID]; }; case 2: { - _query = format ["UPDATE gangs SET maxmembers='%1' WHERE id='%2'",(_group getVariable ["gang_maxMembers",8]),_groupID]; + _query = format ["updateGangMaxmembers:%1:%2", (_group getVariable ["gang_maxMembers", 8]), _groupID]; }; case 3: { - _owner = _group getVariable ["gang_owner",""]; + private _owner = _group getVariable ["gang_owner", ""]; if (_owner isEqualTo "") exitWith {}; - _query = format ["UPDATE gangs SET owner='%1' WHERE id='%2'",_owner,_groupID]; + _query = format ["updateGangOwner:%1:%2", _owner, _groupID]; }; case 4: { - _members = _group getVariable "gang_members"; - if (count _members > (_group getVariable ["gang_maxMembers",8])) then { + private _members = _group getVariable "gang_members"; + private "_membersFinal"; + if (count _members > (_group getVariable ["gang_maxMembers", 8])) then { _membersFinal = []; for "_i" from 0 to _maxMembers -1 do { _membersFinal pushBack (_members select _i); @@ -85,11 +88,10 @@ switch (_mode) do { } else { _membersFinal = _group getVariable "gang_members"; }; - _membersFinal = [_membersFinal] call DB_fnc_mresArray; - _query = format ["UPDATE gangs SET members='%1' WHERE id='%2'",_membersFinal,_groupID]; + _query = format ["updateGangMembers:%1:%2", _membersFinal, _groupID]; }; }; if (!isNil "_query") then { - [_query,1] call DB_fnc_asyncCall; + [_query, 1] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/Housing/fn_addContainer.sqf b/life_server/Functions/Housing/fn_addContainer.sqf old mode 100644 new mode 100755 index e7a999ac3..a3962cece --- a/life_server/Functions/Housing/fn_addContainer.sqf +++ b/life_server/Functions/Housing/fn_addContainer.sqf @@ -6,28 +6,27 @@ Description: Add container in Database. */ -private ["_containerPos","_query","_className","_dir"]; + params [ - ["_uid","",[""]], - ["_container",objNull,[objNull]] + ["_uid", "", [""]], + ["_container", objNull, [objNull]] ]; -if (isNull _container || _uid isEqualTo "") exitWith {}; +if (isNull _container || {_uid isEqualTo ""}) exitWith {}; -_containerPos = getPosATL _container; -_className = typeOf _container; -_dir = [vectorDir _container, vectorUp _container]; +private _containerPos = getPosATL _container; +private _className = typeOf _container; +private _dir = [vectorDir _container, vectorUp _container]; -_query = format ["INSERT INTO containers (pid, pos, classname, inventory, gear, owned, dir) VALUES('%1', '%2', '%3', '""[[],0]""', '""[]""', '1', '%4')",_uid,_containerPos,_className,_dir]; +private _query = format ["insertContainer:%1:%2:%3:%4", _uid, _containerPos, _className, _dir]; if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { - diag_log format ["Query: %1",_query]; + diag_log format ["Query: %1", _query]; }; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; uiSleep 0.3; -_query = format ["SELECT id FROM containers WHERE pos='%1' AND pid='%2' AND owned='1'",_containerPos,_uid]; -_queryResult = [_query,2] call DB_fnc_asyncCall; -//systemChat format ["House ID assigned: %1",_queryResult select 0]; -_container setVariable ["container_id",(_queryResult select 0),true]; +_query = format ["selectContainerID:%1:%2", _containerPos, _uid]; +_queryResult = [_query, 2] call DB_fnc_asyncCall; +_container setVariable ["container_id", _queryResult select 0, true]; diff --git a/life_server/Functions/Housing/fn_addHouse.sqf b/life_server/Functions/Housing/fn_addHouse.sqf old mode 100644 new mode 100755 index 6c4aa62cf..de33fbb96 --- a/life_server/Functions/Housing/fn_addHouse.sqf +++ b/life_server/Functions/Housing/fn_addHouse.sqf @@ -6,25 +6,26 @@ Description: Inserts the players newly bought house in the database. */ -private ["_housePos","_query"]; + params [ ["_uid","",[""]], ["_house",objNull,[objNull]] ]; -if (isNull _house || _uid isEqualTo "") exitWith {}; -_housePos = getPosATL _house; +if (isNull _house || {_uid isEqualTo ""}) exitWith {}; + +private _housePos = getPosATL _house; -_query = format ["INSERT INTO houses (pid, pos, owned) VALUES('%1', '%2', '1')",_uid,_housePos]; +private _query = format ["insertHouse:%1:%2", _uid, _housePos]; if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { diag_log format ["Query: %1",_query]; }; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; uiSleep 0.3; -_query = format ["SELECT id FROM houses WHERE pos='%1' AND pid='%2' AND owned='1'",_housePos,_uid]; -_queryResult = [_query,2] call DB_fnc_asyncCall; -//systemChat format ["House ID assigned: %1",_queryResult select 0]; -_house setVariable ["house_id",(_queryResult select 0),true]; +_query = format ["selectHouseID:%1:%2", _housePos, _uid]; +_queryResult = [_query, 2] call DB_fnc_asyncCall; +//systemChat format ["House ID assigned: %1", _queryResult select 0]; +_house setVariable ["house_id", _queryResult select 0, true]; diff --git a/life_server/Functions/Housing/fn_deleteDBContainer.sqf b/life_server/Functions/Housing/fn_deleteDBContainer.sqf old mode 100644 new mode 100755 index df05d16b3..99aa5d9b2 --- a/life_server/Functions/Housing/fn_deleteDBContainer.sqf +++ b/life_server/Functions/Housing/fn_deleteDBContainer.sqf @@ -5,24 +5,27 @@ Description: Delete Container and remove Container in Database */ -private ["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_container", objNull, [objNull]] +]; + if (isNull _container) exitWith {diag_log "container null";}; +_containerID = _container getVariable ["container_id", -1]; + +private "_query"; -_containerID = _container getVariable ["container_id",-1]; if (_containerID isEqualTo -1) then { _containerPos = getPosATL _container; - _ownerID = (_container getVariable "container_owner") select 0; - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; - //systemChat format [":SERVER:sellHouse: container_id does not exist"]; + private _ownerID = (_container getVariable "container_owner") select 0; + _query = format ["deleteContainer:%1:%2", _ownerID, _containerPos]; } else { - //systemChat format [":SERVER:sellHouse: house_id is %1",_houseID]; - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; + _query = format ["deleteContainer1:%1",_containerID]; }; -_container setVariable ["container_id",nil,true]; -_container setVariable ["container_owner",nil,true]; +_container setVariable ["container_id", nil, true]; +_container setVariable ["container_owner", nil, true]; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; -["CALL deleteOldContainers",1] call DB_fnc_asyncCall; +["deleteOldContainers", 1] call DB_fnc_asyncCall; deleteVehicle _container; diff --git a/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf b/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf old mode 100644 new mode 100755 index 1d7f750ee..38bfd9b11 --- a/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf +++ b/life_server/Functions/Housing/fn_fetchPlayerHouses.sqf @@ -8,30 +8,30 @@ 1. Fetches all the players houses and sets them up. 2. Fetches all the players containers and sets them up. */ -private ["_query","_containers","_containerss","_houses"]; + params [ ["_uid","",[""]] ]; + if (_uid isEqualTo "") exitWith {}; -_query = format ["SELECT pid, pos, classname, inventory, gear, dir, id FROM containers WHERE pid='%1' AND owned='1'",_uid]; -_containers = [_query,2,true] call DB_fnc_asyncCall; +private _query = format ["selectContainers:%1", _uid]; +private _containers = [_query, 2, true] call DB_fnc_asyncCall; +private _containerss = []; -_containerss = []; { _position = call compile format ["%1",_x select 1]; _house = nearestObject [_position, "House"]; _direction = call compile format ["%1",_x select 5]; - _trunk = [_x select 3] call DB_fnc_mresToArray; + _trunk = _x select 3; if (_trunk isEqualType "") then {_trunk = call compile format ["%1", _trunk];}; - _gear = [_x select 4] call DB_fnc_mresToArray; + _gear = _x select 4; if (_gear isEqualType "") then {_gear = call compile format ["%1", _gear];}; _container = createVehicle[_x select 2,[0,0,999],[],0,"NONE"]; waitUntil {!isNil "_container" && {!isNull _container}}; _containerss = _house getVariable ["containers",[]]; _containerss pushBack _container; _container allowDamage false; - _container enableRopeAttach false; _container setPosATL _position; _container setVectorDirAndUp _direction; //Fix position for more accurate positioning @@ -59,21 +59,21 @@ _containerss = []; for "_i" from 0 to ((count (_items select 0)) - 1) do { _container addItemCargoGlobal [((_items select 0) select _i), ((_items select 1) select _i)]; }; - for "_i" from 0 to ((count (_mags select 0)) - 1) do{ + for "_i" from 0 to ((count (_mags select 0)) - 1) do { _container addMagazineCargoGlobal [((_mags select 0) select _i), ((_mags select 1) select _i)]; }; - for "_i" from 0 to ((count (_weapons select 0)) - 1) do{ + for "_i" from 0 to ((count (_weapons select 0)) - 1) do { _container addWeaponCargoGlobal [((_weapons select 0) select _i), ((_weapons select 1) select _i)]; }; - for "_i" from 0 to ((count (_backpacks select 0)) - 1) do{ + for "_i" from 0 to ((count (_backpacks select 0)) - 1) do { _container addBackpackCargoGlobal [((_backpacks select 0) select _i), ((_backpacks select 1) select _i)]; }; }; - _house setVariable ["containers",_containerss,true]; + _house setVariable ["containers", _containerss, true]; } forEach _containers; -_query = format ["SELECT pid, pos FROM houses WHERE pid='%1' AND owned='1'",_uid]; -_houses = [_query,2,true] call DB_fnc_asyncCall; +_query = format ["selectHousePositions:%1", _uid]; +private _houses = [_query, 2, true] call DB_fnc_asyncCall; _return = []; { @@ -83,4 +83,4 @@ _return = []; _return pushBack [_x select 1]; } forEach _houses; -missionNamespace setVariable [format ["houses_%1",_uid],_return]; +missionNamespace setVariable [format ["houses_%1", _uid], _return]; diff --git a/life_server/Functions/Housing/fn_houseCleanup.sqf b/life_server/Functions/Housing/fn_houseCleanup.sqf old mode 100644 new mode 100755 index fc835445d..177272f1a --- a/life_server/Functions/Housing/fn_houseCleanup.sqf +++ b/life_server/Functions/Housing/fn_houseCleanup.sqf @@ -1,7 +1,6 @@ /* File: fn_houseCleanup.sqf Author: NiiRoZz - Description: Cleans up containers inside in house of player. */ @@ -9,7 +8,7 @@ params [ ["_uid","",[""]] ]; -private _query = format ["SELECT pos FROM containers WHERE pid='%1' AND owned='1'",_uid]; +private _query = format ["selectContainerPositions:%1", _this]; private _containers = [_query,2,true] call DB_fnc_asyncCall; { diff --git a/life_server/Functions/Housing/fn_houseGarage.sqf b/life_server/Functions/Housing/fn_houseGarage.sqf old mode 100644 new mode 100755 index 3d2c69e0a..33393f206 --- a/life_server/Functions/Housing/fn_houseGarage.sqf +++ b/life_server/Functions/Housing/fn_houseGarage.sqf @@ -12,21 +12,14 @@ params [ ["_mode",-1,[0]] ]; -if (_uid isEqualTo "") exitWith {}; -if (isNull _house) exitWith {}; -if (_mode isEqualTo -1) exitWith {}; +if (_uid isEqualTo "" || {isNull _house} || {_mode isEqualTo -1}) exitWith {}; private _housePos = getPosATL _house; -private "_query"; - -if (_mode isEqualTo 0) then { - _query = format ["UPDATE houses SET garage='1' WHERE pid='%1' AND pos='%2'",_uid,_housePos]; -} else { - _query = format ["UPDATE houses SET garage='0' WHERE pid='%1' AND pos='%2'",_uid,_housePos]; -}; +private _active = ["0", "1"] select (_mode isEqualTo 0); +private _query = format ["updateGarage:%1:%2:%3", _active, _uid, _housePos]; if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { - diag_log format ["Query: %1",_query]; + diag_log format ["Query: %1", _query]; }; -[_query,1] call DB_fnc_asyncCall; \ No newline at end of file +[_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Housing/fn_initHouses.sqf b/life_server/Functions/Housing/fn_initHouses.sqf old mode 100644 new mode 100755 index d5d98eb50..61278a7af --- a/life_server/Functions/Housing/fn_initHouses.sqf +++ b/life_server/Functions/Housing/fn_initHouses.sqf @@ -4,31 +4,30 @@ Description: Initalizes house setup when player joins the server. */ -private ["_queryResult","_query","_count","_blacklistedHouses","_blacklistedGarages"]; -_count = (["SELECT COUNT(*) FROM houses WHERE owned='1'",2] call DB_fnc_asyncCall) select 0; +private _count = (["selectAllHouses" ,2] call DB_fnc_asyncCall) select 0; for [{_x=0},{_x<=_count},{_x=_x+10}] do { - _query = format ["SELECT houses.id, houses.pid, houses.pos, players.name, houses.garage FROM houses INNER JOIN players WHERE houses.owned='1' AND houses.pid = players.pid LIMIT %1,10",_x]; - _queryResult = [_query,2,true] call DB_fnc_asyncCall; - if (count _queryResult isEqualTo 0) exitWith {}; + private _query = format ["selectPlayerHouses:%1", _x]; + private _queryResult = [_query, 2, true] call DB_fnc_asyncCall; + if (_queryResult isEqualTo []) exitWith {}; { - _pos = call compile format ["%1",_x select 2]; + _pos = call compile format ["%1", _x select 2]; _house = nearestObject [_pos, "House"]; - _house setVariable ["house_owner",[_x select 1,_x select 3],true]; - _house setVariable ["house_id",_x select 0,true]; - _house setVariable ["locked",true,true]; //Lock up all the stuff. + _house setVariable ["house_owner",[_x select 1, _x select 3],true]; + _house setVariable ["house_id", _x select 0, true]; + _house setVariable ["locked", true, true]; //Lock up all the stuff. if (_x select 4 isEqualTo 1) then { - _house setVariable ["garageBought",true,true]; + _house setVariable ["garageBought", true, true]; }; _numOfDoors = getNumber(configFile >> "CfgVehicles" >> (typeOf _house) >> "numberOfDoors"); for "_i" from 1 to _numOfDoors do { - _house setVariable [format ["bis_disabled_Door_%1",_i],1,true]; + _house setVariable [format ["bis_disabled_Door_%1",_i], 1, true]; }; } forEach _queryResult; }; -_blacklistedHouses = "count (getArray (_x >> 'garageBlacklists')) > 0" configClasses (missionconfigFile >> "Housing" >> worldName); -_blacklistedGarages = "count (getArray (_x >> 'garageBlacklists')) > 0" configClasses (missionconfigFile >> "Garages" >> worldName); +private _blacklistedHouses = "count (getArray (_x >> 'garageBlacklists')) > 0" configClasses (missionconfigFile >> "Housing" >> worldName); +private _blacklistedGarages = "count (getArray (_x >> 'garageBlacklists')) > 0" configClasses (missionconfigFile >> "Garages" >> worldName); _blacklistedHouses = _blacklistedHouses apply {configName _x}; _blacklistedGarages = _blacklistedGarages apply {configName _x}; @@ -38,7 +37,7 @@ for "_i" from 0 to count(_blacklistedHouses)-1 do { { _obj = nearestObject [_x,_className]; if (isNull _obj) then { - _obj setVariable ["blacklistedGarage",true,true]; + _obj setVariable ["blacklistedGarage", true, true]; }; } forEach _positions; }; @@ -49,7 +48,7 @@ for "_i" from 0 to count(_blacklistedGarages)-1 do { { _obj = nearestObject [_x,_className]; if (isNull _obj) then { - _obj setVariable ["blacklistedGarage",true,true]; + _obj setVariable ["blacklistedGarage", true, true]; }; } forEach _positions; }; diff --git a/life_server/Functions/Housing/fn_sellHouse.sqf b/life_server/Functions/Housing/fn_sellHouse.sqf old mode 100644 new mode 100755 index 81b20b55d..fe94b9255 --- a/life_server/Functions/Housing/fn_sellHouse.sqf +++ b/life_server/Functions/Housing/fn_sellHouse.sqf @@ -6,25 +6,28 @@ Used in selling the house, sets the owned to 0 and will cleanup with a stored procedure on restart. */ -private ["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_house = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_house", objNull, [objNull]] +]; + if (isNull _house) exitWith {systemChat ":SERVER:sellHouse: House is null";}; +private _houseID = _house getVariable ["house_id", -1]; + +private "_query"; -_houseID = _house getVariable ["house_id",-1]; if (_houseID isEqualTo -1) then { - _housePos = getPosATL _house; - _ownerID = (_house getVariable "house_owner") select 0; - _query = format ["UPDATE houses SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_housePos]; - //systemChat format [":SERVER:sellHouse: house_id does not exist, query: %1",_query]; + private _housePos = getPosATL _house; + private _ownerID = (_house getVariable "house_owner") select 0; + _query = format ["deleteHouse:%1:%2", _ownerID, _housePos]; } else { - //systemChat format [":SERVER:sellHouse: house_id is %1",_houseID]; - _query = format ["UPDATE houses SET owned='0', pos='[]' WHERE id='%1'",_houseID]; + _query = format ["deleteHouse1:%1", _houseID]; }; -_house setVariable ["house_id",nil,true]; -_house setVariable ["house_owner",nil,true]; -_house setVariable ["garageBought",false,true]; +_house setVariable ["house_id", nil, true]; +_house setVariable ["house_owner", nil, true]; +_house setVariable ["garageBought", false, true]; -[_query,1] call DB_fnc_asyncCall; -_house setVariable ["house_sold",nil,true]; -["CALL deleteOldHouses",1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; +_house setVariable ["house_sold", nil, true]; +["deleteOldHouses", 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Housing/fn_sellHouseContainer.sqf b/life_server/Functions/Housing/fn_sellHouseContainer.sqf old mode 100644 new mode 100755 index e331f9726..e51c39c1f --- a/life_server/Functions/Housing/fn_sellHouseContainer.sqf +++ b/life_server/Functions/Housing/fn_sellHouseContainer.sqf @@ -6,22 +6,27 @@ Used in selling the house, container sets the owned to 0 and will cleanup with a stored procedure on restart. */ -private ["_house","_houseID","_ownerID","_housePos","_query","_radius","_containers"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _container) exitWith {}; +params [ + ["_container", objNull, [objNull]] +]; + +if (isNull _container) exitWith {}; _containerID = _container getVariable ["container_id",-1]; + +private "_query"; + if (_containerID isEqualTo -1) then { _containerPos = getPosATL _container; - _ownerID = (_container getVariable "container_owner") select 0; - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE pid='%1' AND pos='%2' AND owned='1'",_ownerID,_containerPos]; + private _ownerID = (_container getVariable "container_owner") select 0; + _query = format ["deleteContainer:%1:%2", _ownerID, _containerPos]; } else { - _query = format ["UPDATE containers SET owned='0', pos='[]' WHERE id='%1'",_containerID]; + _query = format ["deleteContainer1:%1", _containerID]; }; -_container setVariable ["container_id",nil,true]; -_container setVariable ["container_owner",nil,true]; +_container setVariable ["container_id", nil, true]; +_container setVariable ["container_owner", nil, true]; deleteVehicle _container; -[_query,1] call DB_fnc_asyncCall; -["CALL deleteOldContainers",1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; +["deleteOldContainers", 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Housing/fn_updateHouseContainers.sqf b/life_server/Functions/Housing/fn_updateHouseContainers.sqf old mode 100644 new mode 100755 index 8e0be88c0..99717e6ad --- a/life_server/Functions/Housing/fn_updateHouseContainers.sqf +++ b/life_server/Functions/Housing/fn_updateHouseContainers.sqf @@ -5,20 +5,22 @@ Description: Update inventory "i" in container */ -private ["_containerID","_containers","_query","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_container", objNull, [objNull]] +]; + if (isNull _container) exitWith {}; -_containerID = _container getVariable ["container_id",-1]; -if (_containerID isEqualTo -1) exitWith {}; -_vehItems = getItemCargo _container; -_vehMags = getMagazineCargo _container; -_vehWeapons = getWeaponCargo _container; -_vehBackpacks = getBackpackCargo _container; -_cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; +private _containerID = _container getVariable ["container_id", -1]; +if (_containerID isEqualTo -1) exitWith {}; -_cargo = [_cargo] call DB_fnc_mresArray; +private _vehItems = getItemCargo _container; +private _vehMags = getMagazineCargo _container; +private _vehWeapons = getWeaponCargo _container; +private _vehBackpacks = getBackpackCargo _container; +private _cargo = [_vehItems, _vehMags, _vehWeapons, _vehBackpacks]; -_query = format ["UPDATE containers SET gear='%1' WHERE id='%2'",_cargo,_containerID]; +private _query = format ["updateContainer:%1:%2", _cargo, _containerID]; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Housing/fn_updateHouseTrunk.sqf b/life_server/Functions/Housing/fn_updateHouseTrunk.sqf old mode 100644 new mode 100755 index 16e37c845..4d0fab1cb --- a/life_server/Functions/Housing/fn_updateHouseTrunk.sqf +++ b/life_server/Functions/Housing/fn_updateHouseTrunk.sqf @@ -5,16 +5,18 @@ Description: Update inventory "y" in container */ -private ["_house"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_container", objNull, [objNull]] +]; + if (isNull _container) exitWith {}; -_trunkData = _container getVariable ["Trunk",[[],0]]; -_containerID = _container getVariable ["container_id",-1]; +_trunkData = _container getVariable ["Trunk", [[], 0]]; +_containerID = _container getVariable ["container_id", -1]; -if (_containerID isEqualTo -1) exitWith {}; //Dafuq? +if (_containerID isEqualTo -1) exitWith {}; -_trunkData = [_trunkData] call DB_fnc_mresArray; -_query = format ["UPDATE containers SET inventory='%1' WHERE id='%2'",_trunkData,_containerID]; +_query = format ["updateHouseTrunk:%1:%2", _trunkData, _containerID]; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/MySQL/fn_asyncCall.sqf b/life_server/Functions/MySQL/fn_asyncCall.sqf old mode 100644 new mode 100755 index 57782bfdd..cb16a479c --- a/life_server/Functions/MySQL/fn_asyncCall.sqf +++ b/life_server/Functions/MySQL/fn_asyncCall.sqf @@ -11,18 +11,20 @@ 1: INTEGER (1 = ASYNC + not return for update/insert, 2 = ASYNC + return for query's). 3: BOOL (True to return a single array, false to return multiple entries mainly for garage). */ -private ["_queryStmt","_mode","_multiarr","_queryResult","_key","_return","_loop"]; -_queryStmt = [_this,0,"",[""]] call BIS_fnc_param; -_mode = [_this,1,1,[0]] call BIS_fnc_param; -_multiarr = [_this,2,false,[false]] call BIS_fnc_param; -_key = EXTDB format ["%1:%2:%3",_mode,FETCH_CONST(life_sql_id),_queryStmt]; +params [ + ["_queryStmt", "", [""]], + ["_mode", 1, [0]], + ["_multiarr", false, [true]] +]; + +private _key = EXTDB format ["%1:%2:%3",_mode,FETCH_CONST(life_sql_id),_queryStmt]; if (_mode isEqualTo 1) exitWith {true}; _key = call compile format ["%1",_key]; -_key = (_key select 1); -_queryResult = EXTDB format ["4:%1", _key]; +_key = _key select 1; +private _queryResult = EXTDB format ["4:%1", _key]; //Make sure the data is received if (_queryResult isEqualTo "[3]") then { @@ -33,7 +35,7 @@ if (_queryResult isEqualTo "[3]") then { }; if (_queryResult isEqualTo "[5]") then { - _loop = true; + private _loop = true; for "_i" from 0 to 1 step 0 do { // extDB3 returned that result is Multi-Part Message _queryResult = ""; for "_i" from 0 to 1 step 0 do { @@ -46,9 +48,9 @@ if (_queryResult isEqualTo "[5]") then { }; _queryResult = call compile _queryResult; if ((_queryResult select 0) isEqualTo 0) exitWith {diag_log format ["extDB3: Protocol Error: %1", _queryResult]; []}; -_return = (_queryResult select 1); -if (!_multiarr && count _return > 0) then { - _return = (_return select 0); +private _return = (_queryResult select 1); +if (!_multiarr && {!(_return isEqualTo [])}) then { + _return = _return select 0; }; _return; diff --git a/life_server/Functions/MySQL/fn_bool.sqf b/life_server/Functions/MySQL/fn_bool.sqf deleted file mode 100644 index 2d9a70f23..000000000 --- a/life_server/Functions/MySQL/fn_bool.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - File: fn_bool.sqf - Author: TAW_Tonic - - Description: - Handles bool conversion for MySQL since MySQL doesn't support 'true' or 'false' - instead MySQL uses Tinyint for BOOLEAN (0 = false, 1 = true) -*/ -private ["_bool","_mode"]; -_bool = [_this,0,0,[false,0]] call BIS_fnc_param; -_mode = [_this,1,0,[0]] call BIS_fnc_param; - -switch (_mode) do { - case 0: { - if (_bool isEqualType 0) exitWith {0}; - if (_bool) then {1} else {0}; - }; - - case 1: { - if (!(_bool isEqualType 0)) exitWith {false}; - switch (_bool) do { - case 0: {false}; - case 1: {true}; - }; - }; -}; diff --git a/life_server/Functions/MySQL/fn_insertRequest.sqf b/life_server/Functions/MySQL/fn_insertRequest.sqf old mode 100644 new mode 100755 index b8b9f9bb6..f3e7432e2 --- a/life_server/Functions/MySQL/fn_insertRequest.sqf +++ b/life_server/Functions/MySQL/fn_insertRequest.sqf @@ -7,7 +7,7 @@ Adds a player to the database upon first joining of the server. Recieves information from core\sesison\fn_insertPlayerInfo.sqf */ -private ["_queryResult","_query","_alias"]; + params [ "_uid", "_name", @@ -17,35 +17,28 @@ params [ ]; //Error checks -if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {systemChat "Bad UID or name";}; //Let the client be 'lost' in 'transaction' +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {systemChat "Bad UID or name";}; //Let the client be 'lost' in 'transaction' if (isNull _returnToSender) exitWith {systemChat "ReturnToSender is Null!";}; //No one to send this to! -_query = format ["SELECT pid, name FROM players WHERE pid='%1'",_uid]; - - +private _query = format ["checkPlayerExists:%1", _uid]; _tickTime = diag_tickTime; -_queryResult = [_query,2] call DB_fnc_asyncCall; +private _queryResult = [_query, 2] call DB_fnc_asyncCall; if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { diag_log "------------- Insert 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 format ["QUERY: %1", _query]; + diag_log format ["Time to complete: %1 (in seconds)", (diag_tickTime - _tickTime)]; + diag_log format ["Result: %1", _queryResult]; diag_log "------------------------------------------------"; }; //Double check to make sure the client isn't in the database... -if (_queryResult isEqualType "") exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; //There was an entry! -if !(count _queryResult isEqualTo 0) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)];}; +if (_queryResult isEqualType "" && !(_queryResult isEqualTo [])) exitWith {[] remoteExecCall ["SOCK_fnc_dataQuery", (owner _returnToSender)];}; -//Clense and prepare some information. -_name = [_name] call DB_fnc_mresString; //Clense the name of bad chars. -_alias = [[_name]] call DB_fnc_mresArray; -_money = [_money] call DB_fnc_numberSafe; -_bank = [_bank] call DB_fnc_numberSafe; +private _alias = [_name]; //Prepare the query statement.. -_query = format ["INSERT INTO players (pid, name, cash, bankacc, aliases, cop_licenses, med_licenses, civ_licenses, civ_gear, cop_gear, med_gear) VALUES('%1', '%2', '%3', '%4', '%5','""[]""','""[]""','""[]""','""[]""','""[]""','""[]""')", +_query = format ["insertNewPlayer:%1:%2:%3:%4:%5", _uid, _name, _money, @@ -53,5 +46,5 @@ _query = format ["INSERT INTO players (pid, name, cash, bankacc, aliases, cop_li _alias ]; -[_query,1] call DB_fnc_asyncCall; -[] remoteExecCall ["SOCK_fnc_dataQuery",(owner _returnToSender)]; +[_query, 1] call DB_fnc_asyncCall; +[] remoteExecCall ["SOCK_fnc_dataQuery", (owner _returnToSender)]; diff --git a/life_server/Functions/MySQL/fn_insertVehicle.sqf b/life_server/Functions/MySQL/fn_insertVehicle.sqf old mode 100644 new mode 100755 index 6682832a4..59532ad2e --- a/life_server/Functions/MySQL/fn_insertVehicle.sqf +++ b/life_server/Functions/MySQL/fn_insertVehicle.sqf @@ -5,7 +5,7 @@ Description: Inserts the vehicle into the database */ -private ["_query","_sql"]; + params [ "_uid", "_side", @@ -16,9 +16,7 @@ params [ ]; //Stop bad data being passed. -if (_uid isEqualTo "" || _side isEqualTo "" || _type isEqualTo "" || _className isEqualTo "" || _color isEqualTo -1 || _plate isEqualTo -1) exitWith {}; - -_query = format ["INSERT INTO vehicles (side, classname, type, pid, alive, active, inventory, color, plate, gear, damage) VALUES ('%1', '%2', '%3', '%4', '1','1','""[[],0]""', '%5', '%6','""[]""','""[]""')",_side,_className,_type,_uid,_color,_plate]; - +if (_uid isEqualTo "" || {_side isEqualTo ""} || {_type isEqualTo ""} || {_className isEqualTo ""} || {_color isEqualTo -1} || {_plate isEqualTo -1}) exitWith {}; -[_query,1] call DB_fnc_asyncCall; +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/MySQL/fn_mresArray.sqf b/life_server/Functions/MySQL/fn_mresArray.sqf deleted file mode 100644 index d8433f26a..000000000 --- a/life_server/Functions/MySQL/fn_mresArray.sqf +++ /dev/null @@ -1,27 +0,0 @@ -/* - File: fn_mresArray.sqf - Author: Bryan "Tonic" Boardwine"; - - Description: - Acts as a mres (MySQL Real Escape) for arrays so they - can be properly inserted into the database without causing - any problems. The return method is 'hacky' but it's effective. -*/ -private ["_array"]; -_array = [_this,0,[],[[]]] call BIS_fnc_param; -_array = str _array; -_array = toArray(_array); - -for "_i" from 0 to (count _array)-1 do -{ - _sel = _array select _i; - if (!(_i isEqualTo 0) && !(_i isEqualTo ((count _array)-1))) then - { - if (_sel isEqualTo 34) then - { - _array set[_i,96]; - }; - }; -}; - -str(toString(_array)); diff --git a/life_server/Functions/MySQL/fn_mresString.sqf b/life_server/Functions/MySQL/fn_mresString.sqf deleted file mode 100644 index 584a8e7bd..000000000 --- a/life_server/Functions/MySQL/fn_mresString.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - File: fn_mresString.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Makes the string safe to be passed to MySQL (strips various stuff). -*/ -private ["_string","_filter"]; -_string = [_this,0,"",[""]] call BIS_fnc_param; -_filter = "'/\`:|;,{}-""<>"; - -_string = toArray _string; //Blow it up to an array -_filter = toArray _filter; //Blow it up to an array - -{ - if (_x in _filter) then { - _string deleteAt _forEachIndex; - }; -} forEach _string; - -toString _string; diff --git a/life_server/Functions/MySQL/fn_mresToArray.sqf b/life_server/Functions/MySQL/fn_mresToArray.sqf deleted file mode 100644 index e93e75d67..000000000 --- a/life_server/Functions/MySQL/fn_mresToArray.sqf +++ /dev/null @@ -1,26 +0,0 @@ -/* - File: fn_mresToArray.sqf - Author: Bryan "Tonic" Boardwine"; - - Description: - Acts as a mres (MySQL Real Escape) for arrays so they - can be properly inserted into the database without causing - any problems. The return method is 'hacky' but it's effective. -*/ -private ["_array"]; -_array = [_this,0,"",[""]] call BIS_fnc_param; -if (_array isEqualTo "") exitWith {[]}; -_array = toArray(_array); - -for "_i" from 0 to (count _array)-1 do -{ - _sel = _array select _i; - if (_sel == 96) then - { - _array set[_i,39]; - }; -}; - -_array = toString(_array); -_array = call compile format ["%1", _array]; -_array; \ No newline at end of file diff --git a/life_server/Functions/MySQL/fn_numberSafe.sqf b/life_server/Functions/MySQL/fn_numberSafe.sqf deleted file mode 100644 index 0fc534d88..000000000 --- a/life_server/Functions/MySQL/fn_numberSafe.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/* - File: fn_numberSafe.sqf - Author: Karel Moricky - - Description: - Convert a number into string (avoiding scientific notation) - - Parameter(s): - _this: NUMBER - - Returns: - STRING -*/ -private ["_number","_mod","_digots","_digitsCount","_modBase","_numberText"]; - -_number = [_this,0,0,[0]] call bis_fnc_param; -_mod = [_this,1,3,[0]] call bis_fnc_param; - -_digits = _number call bis_fnc_numberDigits; -_digitsCount = count _digits - 1; - -_modBase = _digitsCount % _mod; -_numberText = ""; -{ - _numberText = _numberText + str _x; - if ((_foreachindex - _modBase) % (_mod) isEqualTo 0 && !(_foreachindex isEqualTo _digitsCount)) then {_numberText = _numberText + "";}; -} forEach _digits; -_numberText diff --git a/life_server/Functions/MySQL/fn_queryRequest.sqf b/life_server/Functions/MySQL/fn_queryRequest.sqf old mode 100644 new mode 100755 index 42b5587e5..de92704f0 --- a/life_server/Functions/MySQL/fn_queryRequest.sqf +++ b/life_server/Functions/MySQL/fn_queryRequest.sqf @@ -11,30 +11,27 @@ ARRAY - If array has 0 elements it should be handled as an error in client-side files. STRING - The request had invalid handles or an unknown error and is logged to the RPT. */ -private ["_uid","_side","_query","_queryResult","_tickTime","_tmp"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param; -_ownerID = [_this,2,objNull,[objNull]] call BIS_fnc_param; -if (isNull _ownerID) exitWith {}; - -if (LIFE_SETTINGS(getNumber,"player_deathLog") isEqualTo 1) then { - _ownerID addMPEventHandler ["MPKilled", {_this call fn_whoDoneIt}]; -}; +params [ + ["_uid", "", [""]], + ["_side", sideUnknown, [civilian]], + ["_ownerID", objNull, [objNull]] +]; +if (isNull _ownerID) exitWith {}; _ownerID = owner _ownerID; -_query = switch (_side) do { +private _query = switch (_side) do { // West - 11 entries returned - case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, cop_stats, playtime FROM players WHERE pid='%1'",_uid];}; + case west: {format ["selectWest:%1", _uid];}; // Civilian - 12 entries returned - case civilian: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime FROM players WHERE pid='%1'",_uid];}; + case civilian: {format ["selectCiv:%1", _uid];}; // Independent - 10 entries returned - case independent: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, med_stats, playtime FROM players WHERE pid='%1'",_uid];}; + case independent: {format ["selectIndep:%1",_uid];}; }; -_tickTime = diag_tickTime; -_queryResult = [_query,2] call DB_fnc_asyncCall; +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 -------------"; @@ -44,122 +41,60 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { diag_log "------------------------------------------------"; }; -if (_queryResult isEqualType "") exitWith { +if (_queryResult isEqualType "" || _queryResult isEqualTo []) exitWith { [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; }; -if (count _queryResult isEqualTo 0) exitWith { - [] remoteExecCall ["SOCK_fnc_insertPlayerInfo",_ownerID]; -}; +private _licenses = (_queryResult select 6); -//Blah conversion thing from a2net->extdb -_tmp = _queryResult select 2; -_queryResult set[2,[_tmp] call DB_fnc_numberSafe]; -_tmp = _queryResult select 3; -_queryResult set[3,[_tmp] call DB_fnc_numberSafe]; - -//Parse licenses (Always index 6) -_new = [(_queryResult select 6)] call DB_fnc_mresToArray; -if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; -_queryResult set[6,_new]; - -//Convert tinyint to boolean -_old = _queryResult select 6; -for "_i" from 0 to (count _old)-1 do { - _data = _old select _i; - _old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]]; +for "_i" from 0 to (count _licenses) -1 do { + (_licenses select _i) params ["_license", "_owned"]; + _licenses set[_i, [_license, [false, true] select _owned]]; }; -_queryResult set[6,_old]; +private "_playTimes"; -_new = [(_queryResult select 8)] call DB_fnc_mresToArray; -if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; -_queryResult set[8,_new]; -//Parse data for specific side. switch (_side) do { - case west: { - _queryResult set[9,([_queryResult select 9,1] call DB_fnc_bool)]; - - //Parse Stats - _new = [(_queryResult select 10)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[10,_new]; - - //Playtime - _new = [(_queryResult select 11)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _index = TON_fnc_playtime_values_request find [_uid, _new]; - if (_index != -1) then { - TON_fnc_playtime_values_request set[_index,-1]; - TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; - TON_fnc_playtime_values_request pushBack [_uid, _new]; - } else { - TON_fnc_playtime_values_request pushBack [_uid, _new]; - }; - [_uid,_new select 0] call TON_fnc_setPlayTime; - }; - - case civilian: { - _queryResult set[7,([_queryResult select 7,1] call DB_fnc_bool)]; - - //Parse Stats - _new = [(_queryResult select 9)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[9,_new]; - - //Position - _queryResult set[10,([_queryResult select 10,1] call DB_fnc_bool)]; - _new = [(_queryResult select 11)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[11,_new]; - - //Playtime - _new = [(_queryResult select 12)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _index = TON_fnc_playtime_values_request find [_uid, _new]; - if (_index != -1) then { - TON_fnc_playtime_values_request set[_index,-1]; - TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; - TON_fnc_playtime_values_request pushBack [_uid, _new]; - } else { - TON_fnc_playtime_values_request pushBack [_uid, _new]; - }; - [_uid,_new select 2] call TON_fnc_setPlayTime; - - /* Make sure nothing else is added under here */ - _houseData = _uid spawn TON_fnc_fetchPlayerHouses; - waitUntil {scriptDone _houseData}; - _queryResult pushBack (missionNamespace getVariable [format ["houses_%1",_uid],[]]); - _gangData = _uid spawn TON_fnc_queryPlayerGang; - waitUntil{scriptDone _gangData}; - _queryResult pushBack (missionNamespace getVariable [format ["gang_%1",_uid],[]]); - - }; - - case independent: { - //Parse Stats - _new = [(_queryResult select 9)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _queryResult set[9,_new]; - - //Playtime - _new = [(_queryResult select 10)] call DB_fnc_mresToArray; - if (_new isEqualType "") then {_new = call compile format ["%1", _new];}; - _index = TON_fnc_playtime_values_request find [_uid, _new]; - if !(_index isEqualTo -1) then { - TON_fnc_playtime_values_request set[_index,-1]; - TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; - TON_fnc_playtime_values_request pushBack [_uid, _new]; - } else { - TON_fnc_playtime_values_request pushBack [_uid, _new]; - }; - [_uid,_new select 1] call TON_fnc_setPlayTime; - }; + case civilian: { + _queryResult set[7, [false, true] select (_queryResult select 7)]; + _queryResult set[10, [false, true] select (_queryResult select 10)]; + + _playTimes = _queryResult select 12; + [_uid, _playTimes select 2] call TON_fnc_setPlayTime; + + /* Make sure nothing else is added under here */ + _houseData = _uid spawn TON_fnc_fetchPlayerHouses; + waitUntil {scriptDone _houseData}; + _queryResult pushBack (missionNamespace getVariable [format ["houses_%1",_uid],[]]); + _gangData = _uid spawn TON_fnc_queryPlayerGang; + waitUntil {scriptDone _gangData}; + _queryResult pushBack (missionNamespace getVariable [format ["gang_%1",_uid],[]]); + }; + + case west: { + _queryResult set[9, [false, true] select (_queryResult select 9)]; + _playTimes = _queryResult select 11; + [_uid, _playTimes select 0] call TON_fnc_setPlayTime; + }; + + case independent: { + _playTimes = _queryResult select 10; + [_uid, _playTimes select 1] call TON_fnc_setPlayTime; + }; +}; + +_index = TON_fnc_playtime_values_request find [_uid, _playTimes]; + +if !(_index isEqualTo -1) then { + TON_fnc_playtime_values_request set[_index,-1]; + TON_fnc_playtime_values_request = TON_fnc_playtime_values_request - [-1]; + TON_fnc_playtime_values_request pushBack [_uid, _playTimes]; +} else { + TON_fnc_playtime_values_request pushBack [_uid, _playTimes]; }; publicVariable "TON_fnc_playtime_values_request"; -_keyArr = missionNamespace getVariable [format ["%1_KEYS_%2",_uid,_side],[]]; +_keyArr = missionNamespace getVariable [format ["%1_KEYS_%2",_uid,_side], []]; _queryResult pushBack _keyArr; - -_queryResult remoteExec ["SOCK_fnc_requestReceived",_ownerID]; +_queryResult remoteExec ["SOCK_fnc_requestReceived", _ownerID]; diff --git a/life_server/Functions/MySQL/fn_updatePartial.sqf b/life_server/Functions/MySQL/fn_updatePartial.sqf old mode 100644 new mode 100755 index 58f161bce..4c573ca66 --- a/life_server/Functions/MySQL/fn_updatePartial.sqf +++ b/life_server/Functions/MySQL/fn_updatePartial.sqf @@ -6,81 +6,68 @@ Takes partial data of a player and updates it, this is meant to be less network intensive towards data flowing through it for updates. */ -private ["_uid","_side","_value","_value1","_value2","_mode","_query"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[civilian]] call BIS_fnc_param; -_mode = [_this,3,-1,[0]] call BIS_fnc_param; -if (_uid isEqualTo "" || _side isEqualTo sideUnknown) exitWith {}; //Bad. -_query = ""; +params [ + ["_uid", "", [""]], + ["_side", sideUnknown, [civilian]], + "_value", + ["_mode", -1, [0]], + "_value1" +]; + +if (_uid isEqualTo "" || {_side isEqualTo sideUnknown}) exitWith {}; //Bad. +private _query = ""; switch (_mode) do { case 0: { - _value = [_this,2,0,[0]] call BIS_fnc_param; - _value = [_value] call DB_fnc_numberSafe; - _query = format ["UPDATE players SET cash='%1' WHERE pid='%2'",_value,_uid]; + _query = format ["updateCash:%1:%2", _value, _uid]; }; case 1: { - _value = [_this,2,0,[0]] call BIS_fnc_param; - _value = [_value] call DB_fnc_numberSafe; - _query = format ["UPDATE players SET bankacc='%1' WHERE pid='%2'",_value,_uid]; + _query = format ["updateBank:%1:%2",_value,_uid]; }; case 2: { - _value = [_this,2,[],[[]]] call BIS_fnc_param; - //Does something license related but I can't remember I only know it's important? - for "_i" from 0 to count(_value)-1 do { - _bool = [(_value select _i) select 1] call DB_fnc_bool; - _value set[_i,[(_value select _i) select 0,_bool]]; + for "_i" from 0 to (count _value) -1 do { + (_value select _i) params ["_license", "_owned"]; + _value set[_i, [_license, [0, 1] select _owned]]; }; - _value = [_value] call DB_fnc_mresArray; + switch (_side) do { - case west: {_query = format ["UPDATE players SET cop_licenses='%1' WHERE pid='%2'",_value,_uid];}; - case civilian: {_query = format ["UPDATE players SET civ_licenses='%1' WHERE pid='%2'",_value,_uid];}; - case independent: {_query = format ["UPDATE players SET med_licenses='%1' WHERE pid='%2'",_value,_uid];}; + case west: {_query = format ["updateWestLicenses:%1:%2", _value, _uid];}; + case civilian: {_query = format ["updateCivLicenses:%1:%2", _value, _uid];}; + case independent: {_query = format ["updateIndepLicenses:%1:%2", _value, _uid];}; }; }; case 3: { - _value = [_this,2,[],[[]]] call BIS_fnc_param; - _value = [_value] call DB_fnc_mresArray; switch (_side) do { - case west: {_query = format ["UPDATE players SET cop_gear='%1' WHERE pid='%2'",_value,_uid];}; - case civilian: {_query = format ["UPDATE players SET civ_gear='%1' WHERE pid='%2'",_value,_uid];}; - case independent: {_query = format ["UPDATE players SET med_gear='%1' WHERE pid='%2'",_value,_uid];}; + case west: {_query = format ["updateWestGear:%1:%2", _value, _uid];}; + case civilian: {_query = format ["updateCivGear:%1:%2", _value, _uid];}; + case independent: {_query = format ["updateIndepGear:%1:%2", _value, _uid];}; }; }; case 4: { - _value = [_this,2,false,[true]] call BIS_fnc_param; - _value = [_value] call DB_fnc_bool; - _value2 = [_this,4,[],[[]]] call BIS_fnc_param; - _value2 = if (count _value2 isEqualTo 3) then {_value2} else {[0,0,0]}; - _value2 = [_value2] call DB_fnc_mresArray; - _query = format ["UPDATE players SET civ_alive='%1', civ_position='%2' WHERE pid='%3'",_value,_value2,_uid]; + _value = [0, 1] select _value; + _value1 = if (count _value1 isEqualTo 3) then {_value1} else {[0,0,0]}; + _query = format ["updateCivPosition:%1:%2:%3", _value, _value1, _uid]; }; case 5: { - _value = [_this,2,false,[true]] call BIS_fnc_param; - _value = [_value] call DB_fnc_bool; - _query = format ["UPDATE players SET arrested='%1' WHERE pid='%2'",_value,_uid]; + _value = [0, 1] select _value; + _query = format ["updateArrested:%1:%2",_value,_uid]; }; case 6: { - _value1 = [_this,2,0,[0]] call BIS_fnc_param; - _value2 = [_this,4,0,[0]] call BIS_fnc_param; - _value1 = [_value1] call DB_fnc_numberSafe; - _value2 = [_value2] call DB_fnc_numberSafe; - _query = format ["UPDATE players SET cash='%1', bankacc='%2' WHERE pid='%3'",_value1,_value2,_uid]; + _query = format ["updateCashAndBank:%1:%2:%3", _value, _value1, _uid]; }; case 7: { - _array = [_this,2,[],[[]]] call BIS_fnc_param; - [_uid,_side,_array,0] call TON_fnc_keyManagement; + [_uid, _side, _value, 0] call TON_fnc_keyManagement; }; }; if (_query isEqualTo "") exitWith {}; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/MySQL/fn_updateRequest.sqf b/life_server/Functions/MySQL/fn_updateRequest.sqf old mode 100644 new mode 100755 index 884059855..7d0f11668 --- a/life_server/Functions/MySQL/fn_updateRequest.sqf +++ b/life_server/Functions/MySQL/fn_updateRequest.sqf @@ -6,37 +6,34 @@ Updates ALL player information in the database. Information gets passed here from the client side file: core\session\fn_updateRequest.sqf */ -private ["_uid","_side","_cash","_bank","_licenses","_gear","_stats","_name","_alive","_position","_query","_thread"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_name = [_this,1,"",[""]] call BIS_fnc_param; -_side = [_this,2,sideUnknown,[civilian]] call BIS_fnc_param; -_cash = [_this,3,0,[0]] call BIS_fnc_param; -_bank = [_this,4,5000,[0]] call BIS_fnc_param; -_licenses = [_this,5,[],[[]]] call BIS_fnc_param; -_gear = [_this,6,[],[[]]] call BIS_fnc_param; -_stats = [_this,7,[100,100],[[]]] call BIS_fnc_param; -_alive = [_this,9,false,[true]] call BIS_fnc_param; -_position = [_this,10,[],[[]]] call BIS_fnc_param; + +params [ + ["_uid", "", [""]], + ["_name", "", [""]], + ["_side", sideUnknown, [civilian]], + ["_cash", 0, [0]], + ["_bank", 5000, [0]], + ["_licenses", [], [[]]], + ["_gear", [], [[]]], + ["_stats", [100,100],[[]]], + ["_arrested", false, [true]], + ["_alive", false, [true]], + ["_position", [], [[]]] +]; //Get to those error checks. -if ((_uid isEqualTo "") || (_name isEqualTo "")) exitWith {}; +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; -//Parse and setup some data. -_name = [_name] call DB_fnc_mresString; -_gear = [_gear] call DB_fnc_mresArray; -_stats = [_stats] call DB_fnc_mresArray; -_cash = [_cash] call DB_fnc_numberSafe; -_bank = [_bank] call DB_fnc_numberSafe; -_position = if (_side isEqualTo civilian) then {[_position] call DB_fnc_mresArray} else {[]}; +//Setup some data. +_position = if (_side isEqualTo civilian) then {_position} else {[]}; +_arrested = [0, 1] select _arrested; +_alive = [0, 1] select _alive; -//Does something license related but I can't remember I only know it's important? -for "_i" from 0 to count(_licenses)-1 do { - _bool = [(_licenses select _i) select 1] call DB_fnc_bool; - _licenses set[_i,[(_licenses select _i) select 0,_bool]]; +for "_i" from 0 to (count _licenses) -1 do { + (_licenses select _i) params ["_license", "_owned"]; + _licenses set[_i, [_license, [0, 1] select _owned]]; }; -_licenses = [_licenses] call DB_fnc_mresArray; - //PLAYTIME _playtime = [_uid] call TON_fnc_getPlayTime; _playtime_update = []; @@ -52,13 +49,11 @@ switch (_side) do { case civilian: {_playtime_update set[2,_playtime];}; case independent: {_playtime_update set[1,_playtime];}; }; -_playtime_update = [_playtime_update] call DB_fnc_mresArray; -switch (_side) do { - case west: {_query = format ["UPDATE players SET name='%1', cash='%2', bankacc='%3', cop_gear='%4', cop_licenses='%5', cop_stats='%6', playtime='%7' WHERE pid='%8'",_name,_cash,_bank,_gear,_licenses,_stats,_playtime_update,_uid];}; - case civilian: {_query = format ["UPDATE players SET name='%1', cash='%2', bankacc='%3', civ_licenses='%4', civ_gear='%5', arrested='%6', civ_stats='%7', civ_alive='%8', civ_position='%9', playtime='%10' WHERE pid='%11'",_name,_cash,_bank,_licenses,_gear,[_this select 8] call DB_fnc_bool,_stats,[_alive] call DB_fnc_bool,_position,_playtime_update,_uid];}; - case independent: {_query = format ["UPDATE players SET name='%1', cash='%2', bankacc='%3', med_licenses='%4', med_gear='%5', med_stats='%6', playtime='%7' WHERE pid='%8'",_name,_cash,_bank,_licenses,_gear,_stats,_playtime_update,_uid];}; +private _query = switch (_side) do { + case west: {format ["updateWest:%1:%2:%3:%4:%5:%6:%7:%8", _name, _cash, _bank, _gear, _licenses, _stats, _playtime_update, _uid];}; + case civilian: {format ["updateCiv:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11", _name, _cash, _bank, _licenses, _gear, _arrested, _stats, _alive, _position, _playtime_update, _uid];}; + case independent: {format ["updateIndep:%1:%2:%3:%4:%5:%6:%7:%8", _name, _cash, _bank, _licenses, _gear, _stats, _playtime_update, _uid];}; }; - -_queryResult = [_query,1] call DB_fnc_asyncCall; +_queryResult = [_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_chopShopSell.sqf b/life_server/Functions/Systems/fn_chopShopSell.sqf old mode 100644 new mode 100755 index 100f62901..512d65394 --- a/life_server/Functions/Systems/fn_chopShopSell.sqf +++ b/life_server/Functions/Systems/fn_chopShopSell.sqf @@ -2,7 +2,6 @@ /* File: fn_chopShopSell.sqf Author: Bryan "Tonic" Boardwine - Description: Checks whether or not the vehicle is persistent or temp and sells it. */ @@ -22,7 +21,7 @@ private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",typeOf _vehicle, "dis private _dbInfo = _vehicle getVariable ["dbInfo",[]]; if (count _dbInfo > 0) then { _dbInfo params ["_uid","_plate"]; - private _query = format ["UPDATE vehicles SET alive='0' WHERE pid='%1' AND plate='%2'",_uid,_plate]; + _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 old mode 100644 new mode 100755 index f3351e81b..99612e4ea --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -41,13 +41,12 @@ for "_i" from 0 to 1 step 0 do { }; if (isNull _veh) then { - if (count _dbInfo > 0) then { + if !(_dbInfo isEqualTo []) then { _uid = _dbInfo select 0; _plate = _dbInfo select 1; - _query = format ["UPDATE vehicles SET active='0', fuel='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_fuel]; - - [_query,1] call DB_fnc_asyncCall; + _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _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 old mode 100644 new mode 100755 index 9cf95f78a..e89bf0e83 --- a/life_server/Functions/Systems/fn_getVehicles.sqf +++ b/life_server/Functions/Systems/fn_getVehicles.sqf @@ -6,14 +6,16 @@ Description: Sends a request to query the database information and returns vehicles. */ -private ["_pid","_side","_type","_unit","_ret","_tickTime","_queryResult"]; -_pid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param; -_type = [_this,2,"",[""]] call BIS_fnc_param; -_unit = [_this,3,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_pid", "", [""]], + ["_side", sideUnknown, [west]], + ["_type", "", [""]], + ["_unit", objNull, [objNull]] +]; //Error checks -if (_pid isEqualTo "" || _side isEqualTo sideUnknown || _type isEqualTo "" || isNull _unit) exitWith { +if (_pid isEqualTo "" || {_side isEqualTo sideUnknown} || {_type isEqualTo ""} || {isNull _unit}) exitWith { if (!isNull _unit) then { [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; }; @@ -27,26 +29,25 @@ _side = switch (_side) do { default {"Error"}; }; -if (_side == "Error") exitWith { - [[]] remoteExec ["life_fnc_impoundMenu",(owner _unit)]; +if (_side isEqualTo "Error") exitWith { + [[]] remoteExec ["life_fnc_impoundMenu", (owner _unit)]; }; -_query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color FROM vehicles WHERE pid='%1' AND alive='1' AND active='0' AND side='%2' AND type='%3'",_pid,_side,_type]; - +private _query = format ["selectVehicles:%1:%2:%3", _pid, _side, _type]; -_tickTime = diag_tickTime; -_queryResult = [_query,2,true] call DB_fnc_asyncCall; +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 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",(owner _unit)]; + [[]] remoteExec ["life_fnc_impoundMenu", (owner _unit)]; }; -[_queryResult] remoteExec ["life_fnc_impoundMenu",_unit]; +[_queryResult] remoteExec ["life_fnc_impoundMenu", _unit]; diff --git a/life_server/Functions/Systems/fn_spawnVehicle.sqf b/life_server/Functions/Systems/fn_spawnVehicle.sqf old mode 100644 new mode 100755 index a03cafb13..3eaddef48 --- a/life_server/Functions/Systems/fn_spawnVehicle.sqf +++ b/life_server/Functions/Systems/fn_spawnVehicle.sqf @@ -7,6 +7,7 @@ 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", "", [""]], @@ -28,10 +29,10 @@ serv_sv_use pushBack _vid; private _servIndex = serv_sv_use find _vid; -private _query = format ["SELECT id, side, classname, type, pid, alive, active, plate, color, inventory, gear, fuel, damage, blacklist FROM vehicles WHERE id='%1' AND pid='%2'",_vid,_pid]; +private _query = format ["selectVehiclesMore:%1:%2", _vid, _pid]; private _tickTime = diag_tickTime; -private _queryResult = [_query,2] call DB_fnc_asyncCall; +private _queryResult = [_query, 2] call DB_fnc_asyncCall; if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { diag_log "------------- Client Query Request -------------"; @@ -45,7 +46,7 @@ if (_queryResult isEqualType "") exitWith {}; private _vInfo = _queryResult; if (isNil "_vInfo") exitWith {serv_sv_use deleteAt _servIndex;}; -if (count _vInfo isEqualTo 0) 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; @@ -64,21 +65,21 @@ if !(_sp isEqualType "") then { _nearVehicles = []; }; -if (count _nearVehicles > 0) exitWith { +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 ["UPDATE vehicles SET active='1', damage='""[]""' WHERE pid='%1' AND id='%2'",_pid,_vid]; +_query = format ["updateVehicle:%1:%2", _pid, _vid]; -private _trunk = [(_vInfo select 9)] call DB_fnc_mresToArray; -private _gear = [(_vInfo select 10)] call DB_fnc_mresToArray; -private _damage = [call compile (_vInfo select 12)] call DB_fnc_mresToArray; +private _trunk = _vInfo select 9; +private _gear = _vInfo select 10; +private _damage = _vInfo select 12; private _wasIllegal = _vInfo select 13; -_wasIllegal = if (_wasIllegal isEqualTo 1) then { true } else { false }; +_wasIllegal = _wasIllegal isEqualTo 1; -[_query,1] call DB_fnc_asyncCall; +[_query, 1] call DB_fnc_asyncCall; private "_vehicle"; if (_sp isEqualType "") then { @@ -111,42 +112,42 @@ _vehicle disableTIEquipment true; //No Thermals.. They're cheap but addictive. 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]; + [1, "STR_NOTF_BlackListedVehicle", true, [_location, _name]] remoteExecCall ["life_fnc_broadcast", west]; - _query = format ["UPDATE vehicles SET blacklist='0' WHERE id='%1' AND pid='%2'",_vid,_pid]; - [_query,1] call DB_fnc_asyncCall; + _query = format ["updateVehicleBlacklist:%1:%2", _vid, _pid]; + [_query, 1] call DB_fnc_asyncCall; }; } else { - _vehicle setVariable ["Trunk",[[],0],true]; + _vehicle setVariable ["Trunk", [[], 0], true]; }; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { _vehicle setFuel (_vInfo select 11); - }else{ +} else { _vehicle setFuel 1; }; -if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { +if (!(_gear isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1)) then { _items = _gear select 0; _mags = _gear select 1; _weapons = _gear select 2; @@ -166,7 +167,7 @@ if (count _gear > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqua }; }; -if (count _damage > 0 && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { +if (!(_damage isEqualTo []) && (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1)) then { _parts = getAllHitPointsDamage _vehicle; for "_i" from 0 to ((count _damage) - 1) do { diff --git a/life_server/Functions/Systems/fn_vehicleCreate.sqf b/life_server/Functions/Systems/fn_vehicleCreate.sqf old mode 100644 new mode 100755 index 844ec7374..078215457 --- a/life_server/Functions/Systems/fn_vehicleCreate.sqf +++ b/life_server/Functions/Systems/fn_vehicleCreate.sqf @@ -5,17 +5,19 @@ Description: Answers the query request to create the vehicle in the database. */ -private ["_uid","_side","_type","_classname","_color","_plate"]; -_uid = [_this,0,"",[""]] call BIS_fnc_param; -_side = [_this,1,sideUnknown,[west]] call BIS_fnc_param; -_vehicle = [_this,2,objNull,[objNull]] call BIS_fnc_param; -_color = [_this,3,-1,[0]] call BIS_fnc_param; + +params [ + ["_uid", "", [""]], + ["_side", sideUnknown, [west]], + ["_vehicle", objNull, [objNull]], + ["_color", -1, [0]] +]; //Error checks -if (_uid isEqualTo "" || _side isEqualTo sideUnknown || isNull _vehicle) exitWith {}; +if (_uid isEqualTo "" || {_side isEqualTo sideUnknown} || {isNull _vehicle}) exitWith {}; if (!alive _vehicle) exitWith {}; -_className = typeOf _vehicle; -_type = switch (true) do { +private _className = typeOf _vehicle; +private _type = switch (true) do { case (_vehicle isKindOf "Car"): {"Car"}; case (_vehicle isKindOf "Air"): {"Air"}; case (_vehicle isKindOf "Ship"): {"Ship"}; @@ -28,7 +30,7 @@ _side = switch (_side) do { default {"Error"}; }; -_plate = round(random(1000000)); -[_uid,_side,_type,_classname,_color,_plate] call DB_fnc_insertVehicle; +private _plate = round(random(1000000)); +[_uid, _side, _type, _classname, _color, _plate] call DB_fnc_insertVehicle; -_vehicle setVariable ["dbInfo",[_uid,_plate],true]; +_vehicle setVariable ["dbInfo", [_uid, _plate], true]; diff --git a/life_server/Functions/Systems/fn_vehicleDelete.sqf b/life_server/Functions/Systems/fn_vehicleDelete.sqf old mode 100644 new mode 100755 index 09bd48033..a3b3622c5 --- a/life_server/Functions/Systems/fn_vehicleDelete.sqf +++ b/life_server/Functions/Systems/fn_vehicleDelete.sqf @@ -6,16 +6,16 @@ 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. */ -private ["_vid","_sp","_pid","_query","_type","_thread"]; -_vid = [_this,0,-1,[0]] call BIS_fnc_param; -_pid = [_this,1,"",[""]] call BIS_fnc_param; -_sp = [_this,2,2500,[0]] call BIS_fnc_param; -_unit = [_this,3,objNull,[objNull]] call BIS_fnc_param; -_type = [_this,4,"",[""]] call BIS_fnc_param; -if (_vid isEqualTo -1 || _pid isEqualTo "" || _sp isEqualTo 0 || isNull _unit || _type isEqualTo "") exitWith {}; -_unit = owner _unit; +params [ + ["_vid", -1, [0]], + ["_pid", "", [""]], + ["_sp", 2500, [0]], + ["_unit", objNull, [objNull]], + ["_type", "", [""]] +]; -_query = format ["UPDATE vehicles SET alive='0' WHERE pid='%1' AND id='%2'",_pid,_vid]; +if (_vid isEqualTo -1 || {_pid isEqualTo ""} || {_sp isEqualTo 0} || {isNull _unit} || {_type isEqualTo ""}) exitWith {}; -_thread = [_query,1] call DB_fnc_asyncCall; \ No newline at end of file +private _query = format ["deleteVehicleID:%1:%2", _pid, _vid]; +private _thread = [_query, 1] call DB_fnc_asyncCall; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf old mode 100644 new mode 100755 index f4963f449..b93bf8668 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -5,39 +5,47 @@ Description: Stores the vehicle in the 'Garage' */ -private ["_vehicle","_impound","_vInfo","_vInfo","_plate","_uid","_query","_sql","_unit","_trunk","_vehItems","_vehMags","_vehWeapons","_vehBackpacks","_cargo","_saveItems","_storetext","_resourceItems","_fuel","_damage","_itemList","_totalweight","_weight","_thread"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_impound = [_this,1,false,[true]] call BIS_fnc_param; -_unit = [_this,2,objNull,[objNull]] call BIS_fnc_param; -_storetext = [_this,3,"",[""]] call BIS_fnc_param; -_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. -_vInfo = _vehicle getVariable ["dbInfo",[]]; +params [ + ["_vehicle", objNull, [objNull]], + ["_impound", false, [true]], + ["_unit", objNull, [objNull]], + ["_storetext", "", [""]] +]; -if (count _vInfo > 0) then { +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; }; // save damage. +private "_damage"; if (LIFE_SETTINGS(getNumber,"save_vehicle_damage") isEqualTo 1) then { _damage = getAllHitPointsDamage _vehicle; _damage = _damage select 2; - } else { +} else { _damage = []; }; -_damage = [_damage] call DB_fnc_mresArray; // because fuel price! +private "_fuel"; if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then { _fuel = (fuel _vehicle); - } else { +} else { _fuel = 1; }; +private "_query"; +private "_thread"; if (_impound) exitWith { - if (count _vInfo isEqualTo 0) then { + if (_vInfo isEqualTo []) then { life_impound_inuse = false; (owner _unit) publicVariableClient "life_impound_inuse"; @@ -45,7 +53,7 @@ if (_impound) exitWith { deleteVehicle _vehicle; }; } else { // no free repairs! - _query = format ["UPDATE vehicles SET active='0', fuel='%3', damage='%4' WHERE pid='%1' AND plate='%2'",_uid , _plate, _fuel, _damage]; + _query = format ["updateVehicleFuel:%1:%2:%3:%4", _fuel, _damage, _uid, _plate]; _thread = [_query,1] call DB_fnc_asyncCall; if (!isNil "_vehicle" && {!isNull _vehicle}) then { @@ -58,7 +66,7 @@ if (_impound) exitWith { }; // not persistent so just do this! -if (count _vInfo isEqualTo 0) exitWith { +if (_vInfo isEqualTo []) exitWith { [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; life_garage_store = false; (owner _unit) publicVariableClient "life_garage_store"; @@ -71,20 +79,20 @@ if !(_uid isEqualTo getPlayerUID _unit) exitWith { }; // sort out whitelisted items! -_trunk = _vehicle getVariable ["Trunk", [[], 0]]; -_itemList = _trunk select 0; -_totalweight = 0; +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 ["_isIllegal", "_blacklist"]; - _blacklist = false; - _profileQuery = format ["SELECT name FROM players WHERE pid='%1'", _uid]; + private _blacklist = false; + _profileQuery = format ["selectName:%1", _uid]; _profileName = [_profileQuery, 2] call DB_fnc_asyncCall; _profileName = _profileName select 0; { - _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); + private _isIllegal = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"illegal"); _isIllegal = if (_isIllegal isEqualTo 1) then { true } else { false }; @@ -102,7 +110,7 @@ if (LIFE_SETTINGS(getNumber,"save_vehicle_virtualItems") isEqualTo 1) then { if (_blacklist) then { [_uid, _profileName, "481"] remoteExecCall["life_fnc_wantedAdd", RSERV]; - _query = format ["UPDATE vehicles SET blacklist='1' WHERE pid='%1' AND plate='%2'", _uid, _plate]; + _query = format ["updateVehicleBlacklistPlate:%1:%2", _uid, _plate]; _thread = [_query, 1] call DB_fnc_asyncCall; }; @@ -124,23 +132,22 @@ else { _trunk = [[], 0]; }; +private "_cargo"; + if (LIFE_SETTINGS(getNumber,"save_vehicle_inventory") isEqualTo 1) then { - _vehItems = getItemCargo _vehicle; - _vehMags = getMagazineCargo _vehicle; - _vehWeapons = getWeaponCargo _vehicle; - _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + 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 ((count (_vehItems select 0) isEqualTo 0) && (count (_vehMags select 0) isEqualTo 0) && (count (_vehWeapons select 0) isEqualTo 0) && (count (_vehBackpacks select 0) isEqualTo 0)) then {_cargo = [];}; + if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then {_cargo = [];}; } else { _cargo = []; }; -// prepare -_trunk = [_trunk] call DB_fnc_mresArray; -_cargo = [_cargo] call DB_fnc_mresArray; // update -_query = format ["UPDATE vehicles SET active='0', inventory='%3', gear='%4', fuel='%5', damage='%6' WHERE pid='%1' AND plate='%2'", _uid, _plate, _trunk, _cargo, _fuel, _damage]; +_query = format ["updateVehicleAll:%1:%2:%3:%4:%5:%6", _trunk, _cargo, _fuel, _damage, _uid, _plate]; _thread = [_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 old mode 100644 new mode 100755 index bf59eab04..dc685b4f9 --- a/life_server/Functions/Systems/fn_vehicleUpdate.sqf +++ b/life_server/Functions/Systems/fn_vehicleUpdate.sqf @@ -6,51 +6,53 @@ Description: Tells the database that this vehicle need update inventory. */ -private ["_vehicle","_plate","_uid","_query","_sql","_dbInfo","_thread","_cargo","_trunk","_resourceItems","_fuel","_damage","_itemList","_totalweight","_weight"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_mode = [_this,1,1,[0]] call BIS_fnc_param; + +params [ + ["_vehicle", objNull, [objNull]], + ["_mode", 1, [0]] +]; + if (isNull _vehicle) exitWith {}; //NULL -_dbInfo = _vehicle getVariable ["dbInfo",[]]; -if (count _dbInfo isEqualTo 0) exitWith {}; -_uid = _dbInfo select 0; -_plate = _dbInfo select 1; +private _dbInfo = _vehicle getVariable ["dbInfo",[]]; +if (_dbInfo isEqualTo []) exitWith {}; + +private _uid = _dbInfo select 0; +private _plate = _dbInfo select 1; + switch (_mode) do { case 1: { - _vehItems = getItemCargo _vehicle; - _vehMags = getMagazineCargo _vehicle; - _vehWeapons = getWeaponCargo _vehicle; - _vehBackpacks = getBackpackCargo _vehicle; - _cargo = [_vehItems,_vehMags,_vehWeapons,_vehBackpacks]; + 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 ((count (_vehItems select 0) isEqualTo 0) && (count (_vehMags select 0) isEqualTo 0) && (count (_vehWeapons select 0) isEqualTo 0) && (count (_vehBackpacks select 0) isEqualTo 0)) then { + if (((_vehItems select 0) isEqualTo []) && ((_vehMags select 0) isEqualTo []) && ((_vehWeapons select 0) isEqualTo []) && ((_vehBackpacks select 0) isEqualTo [])) then { _cargo = []; }; - _cargo = [_cargo] call DB_fnc_mresArray; - - _query = format ["UPDATE vehicles SET gear='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_cargo]; - _thread = [_query,1] call DB_fnc_asyncCall; + private _query = format ["updateVehicleGear:%1:%2:%3", _cargo, _uid, _plate]; + private _thread = [_query, 1] call DB_fnc_asyncCall; }; case 2: { - _resourceItems = LIFE_SETTINGS(getArray,"save_vehicle_items"); - _trunk = _vehicle getVariable ["Trunk",[[],0]]; - _itemList = _trunk select 0; - _totalweight = 0; - _items = []; + 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]; - _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); + private _weight = (ITEM_WEIGHT(_x select 0)) * (_x select 1); _totalweight = _weight + _totalweight; }; - }forEach _itemList; + } forEach _itemList; _trunk = [_items,_totalweight]; - _trunk = [_trunk] call DB_fnc_mresArray; - _query = format ["UPDATE vehicles SET inventory='%3' WHERE pid='%1' AND plate='%2'",_uid,_plate,_trunk]; - _thread = [_query,1] call DB_fnc_asyncCall; + private _query = format ["updateVehicleTrunk:%1:%2:%3", _trunk, _uid, _plate]; + private _thread = [_query,1] call DB_fnc_asyncCall; }; -}; \ No newline at end of file +}; diff --git a/life_server/Functions/WantedSystem/fn_wantedAdd.sqf b/life_server/Functions/WantedSystem/fn_wantedAdd.sqf old mode 100644 new mode 100755 index 1114c1053..000efff8d --- a/life_server/Functions/WantedSystem/fn_wantedAdd.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedAdd.sqf @@ -8,6 +8,7 @@ Description: Adds or appends a unit to the wanted list. */ + params [ ["_uid","",[""]], ["_name","",[""]], @@ -19,35 +20,33 @@ if (_uid isEqualTo "" || {_type isEqualTo ""} || {_name isEqualTo ""}) exitWith //What is the crime? private _crimesConfig = getArray(missionConfigFile >> "Life_Settings" >> "crimes"); -private _index = [_type,_crimesConfig] call TON_fnc_index; +private _index = [_type, _crimesConfig] call TON_fnc_index; if (_index isEqualTo -1) exitWith {}; _type = [_type, parseNumber ((_crimesConfig select _index) select 1)]; -if (count _type isEqualTo 0) exitWith {}; //Not our information being passed... +if (_type isEqualTo []) exitWith {}; //Not our information being passed... //Is there a custom bounty being sent? Set that as the pricing. if !(_customBounty isEqualTo -1) then {_type set[1,_customBounty];}; //Search the wanted list to make sure they are not on it. -private _query = format ["SELECT wantedID FROM wanted WHERE wantedID='%1'",_uid]; +private _query = format ["selectWantedID:%1", _uid]; private _queryResult = [_query,2,true] call DB_fnc_asyncCall; -private _val = [_type select 1] call DB_fnc_numberSafe; +private _val = _type select 1; private _number = _type select 0; -if !(count _queryResult isEqualTo 0) then { - _query = format ["SELECT wantedCrimes, wantedBounty FROM wanted WHERE wantedID='%1'",_uid]; +if !(_queryResult isEqualTo []) then { + _query = format ["selectWantedCrimes:%1", _uid]; _queryResult = [_query,2] call DB_fnc_asyncCall; - _pastCrimes = [_queryResult select 0] call DB_fnc_mresToArray; + _pastCrimes = _queryResult select 0; if (_pastCrimes isEqualType "") then {_pastCrimes = call compile format ["%1", _pastCrimes];}; _pastCrimes pushBack _number; - _pastCrimes = [_pastCrimes] call DB_fnc_mresArray; - _query = format ["UPDATE wanted SET wantedCrimes = '%1', wantedBounty = wantedBounty + '%2', active = '1' WHERE wantedID='%3'",_pastCrimes,_val,_uid]; + _query = format ["updateWanted:%1:%2:%3", _pastCrimes, _val, _uid]; [_query,1] call DB_fnc_asyncCall; } else { _crime = [_type select 0]; - _crime = [_crime] call DB_fnc_mresArray; - _query = format ["INSERT INTO wanted (wantedID, wantedName, wantedCrimes, wantedBounty, active) VALUES('%1', '%2', '%3', '%4', '1')",_uid,_name,_crime,_val]; + _query = format ["insertWanted:%1:%2:%3:%4", _uid, _name, _crime, _val]; [_query,1] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/WantedSystem/fn_wantedBounty.sqf b/life_server/Functions/WantedSystem/fn_wantedBounty.sqf old mode 100644 new mode 100755 index 3a41b0080..5cc334532 --- a/life_server/Functions/WantedSystem/fn_wantedBounty.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedBounty.sqf @@ -8,6 +8,7 @@ Description: Checks if the person is on the bounty list and awards the cop for killing them. */ + params [ ["_uid","",[""]], ["_civ",objNull,[objNull]], @@ -17,11 +18,11 @@ params [ if (isNull _civ || isNull _cop) exitWith {}; -private _query = format ["SELECT wantedID, wantedName, wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; +private _query = format ["selectWanted:%1", _uid]; private _queryResult = [_query,2] call DB_fnc_asyncCall; private "_amount"; -if !(count _queryResult isEqualTo 0) then { +if !(_queryResult isEqualTo []) then { _amount = _queryResult param [3]; if !(_amount isEqualTo 0) then { if (_half) then { @@ -30,4 +31,4 @@ if !(count _queryResult isEqualTo 0) then { [_amount,_amount] remoteExecCall ["life_fnc_bountyReceive",(owner _cop)]; }; }; -}; \ No newline at end of file +}; diff --git a/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf b/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf old mode 100644 new mode 100755 index 58668a495..176898f0f --- a/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf @@ -8,6 +8,7 @@ Description: Grabs a list of crimes committed by a person. */ + disableSerialization; params [ @@ -15,12 +16,12 @@ params [ ["_criminal",[],[]] ]; -private _query = format ["SELECT wantedCrimes, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_criminal select 0]; -private _queryResult = [_query,2] call DB_fnc_asyncCall; +private _query = format ["selectWantedActive:%1", _criminal select 0]; +private _queryResult = [_query, 2] call DB_fnc_asyncCall; _ret = owner _ret; -private _type = [_queryResult select 0] call DB_fnc_mresToArray; +private _type = _queryResult select 0; if (_type isEqualType "") then {_type = call compile format ["%1", _type];}; private _crimesArr = []; @@ -30,6 +31,6 @@ private _crimesArr = []; false } count _type; -_queryResult set[0,_crimesArr]; +_queryResult set[0, _crimesArr]; -[_queryResult] remoteExec ["life_fnc_wantedInfo",_ret]; +[_queryResult] remoteExec ["life_fnc_wantedInfo", _ret]; diff --git a/life_server/Functions/WantedSystem/fn_wantedFetch.sqf b/life_server/Functions/WantedSystem/fn_wantedFetch.sqf old mode 100644 new mode 100755 index 826cf8141..f80041657 --- a/life_server/Functions/WantedSystem/fn_wantedFetch.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedFetch.sqf @@ -9,7 +9,11 @@ Description: Displays wanted list information sent from the server. */ -private _ret = param [0,objNull,[objNull]]; + +params [ + ["_ret", objNull, [objNull]] +]; + if (isNull _ret) exitWith {}; _ret = owner _ret; private _inStatement = ""; @@ -20,7 +24,7 @@ private _units = []; false } count playableUnits; -if (count _units isEqualTo 0) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; +if (_units isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; { if (count _units > 1) then { @@ -34,7 +38,7 @@ if (count _units isEqualTo 0) exitWith {[_list] remoteExec ["life_fnc_wantedList }; } forEach _units; -private _query = format ["SELECT wantedID, wantedName FROM wanted WHERE active='1' AND wantedID in (%1)",_inStatement]; +private _query = format ["selectWantedActiveID:%1", _inStatement]; private _queryResult = [_query,2,true] call DB_fnc_asyncCall; if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { diag_log format ["Query: %1",_query]; @@ -45,6 +49,6 @@ if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { false } count _queryResult; -if (count _list isEqualTo 0) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; +if (_list isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_ret];}; [_list] remoteExec ["life_fnc_wantedList",_ret]; diff --git a/life_server/Functions/WantedSystem/fn_wantedPerson.sqf b/life_server/Functions/WantedSystem/fn_wantedPerson.sqf old mode 100644 new mode 100755 index 4c5b6e663..f057a4307 --- a/life_server/Functions/WantedSystem/fn_wantedPerson.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedPerson.sqf @@ -8,13 +8,16 @@ Description: Fetches a specific person from the wanted array. */ -private _unit = param [0,objNull,[objNull]]; + +params [ + ["_unit", objNull, [objNull]] +]; if (isNull _unit) exitWith {[]}; private _uid = getPlayerUID _unit; -private _query = format ["SELECT wantedID, wantedName, wantedBounty FROM wanted WHERE active='1' AND wantedID='%1'",_uid]; +private _query = format ["selectWantedBounty:%1", _uid]; private _queryResult = [_query,2] call DB_fnc_asyncCall; -if (count _queryResult isEqualTo 0) exitWith {[]}; +if (_queryResult isEqualTo []) exitWith {[]}; _queryResult; diff --git a/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf b/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf old mode 100644 new mode 100755 index e472a6cc9..cb89c4804 --- a/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedProfUpdate.sqf @@ -6,20 +6,20 @@ Description: Updates name of player if they change profiles */ -private ["_query","_tickTime","_wantedCheck","_wantedQuery"]; + params [ ["_uid","",[""]], ["_name","",[""]] ]; //Bad data check -if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; +if (_uid isEqualTo "" || {_name isEqualTo ""}) exitWith {}; -_wantedCheck = format ["SELECT wantedName FROM wanted WHERE wantedID='%1'",_uid]; -_wantedQuery = [_wantedCheck,2] call DB_fnc_asyncCall; -if (count _wantedQuery isEqualTo 0) exitWith {}; +private _wantedCheck = format ["selectWantedName:%1", _uid]; +private _wantedQuery = [_wantedCheck, 2] call DB_fnc_asyncCall; +if (_wantedQuery isEqualTo []) exitWith {}; if !(_name isEqualTo (_wantedQuery select 0)) then { - _query = format ["UPDATE wanted SET wantedName='%1' WHERE wantedID='%2'",_name,_uid]; - [_query,2] call DB_fnc_asyncCall; + private _query = format ["updateWantedName:%1:%2", _name, _uid]; + [_query, 2] call DB_fnc_asyncCall; }; diff --git a/life_server/Functions/WantedSystem/fn_wantedRemove.sqf b/life_server/Functions/WantedSystem/fn_wantedRemove.sqf old mode 100644 new mode 100755 index 0b1ffaacd..c5af59c5b --- a/life_server/Functions/WantedSystem/fn_wantedRemove.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedRemove.sqf @@ -8,9 +8,12 @@ Description: Removes a person from the wanted list. */ -private _uid = param [0,"",[""]]; + +params [ + ["_uid", "", [""]] +]; if (_uid isEqualTo "") exitWith {}; //Bad data -private _query = format ["UPDATE wanted SET active = '0', wantedCrimes = '[]', wantedBounty = 0 WHERE wantedID='%1'",_uid]; -[_query,2] call DB_fnc_asyncCall; \ No newline at end of file +private _query = format ["deleteWanted:%1", _uid]; +[_query, 2] call DB_fnc_asyncCall; diff --git a/life_server/config.cpp b/life_server/config.cpp index 57adf021b..3456d3693 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -15,16 +15,11 @@ class CfgFunctions { class MySQL { file = "\life_server\Functions\MySQL"; - class numberSafe {}; - class mresArray {}; class queryRequest{}; class asyncCall{}; class insertRequest{}; class updateRequest{}; - class mresToArray {}; class insertVehicle {}; - class bool {}; - class mresString {}; class updatePartial {}; }; }; diff --git a/life_server/init.sqf b/life_server/init.sqf index 73b571e22..e6303119c 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -43,7 +43,7 @@ if (isNil {uiNamespace getVariable "life_sql_id"}) then { 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:%1:TEXT2",FETCH_CONST(life_sql_id),EXTDB_SETTING(getText,"DatabaseName")]; + _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; @@ -67,10 +67,10 @@ life_server_extDB_notLoaded = false; publicVariable "life_server_extDB_notLoaded"; /* Run stored procedures for SQL side cleanup */ -["CALL resetLifeVehicles",1] call DB_fnc_asyncCall; -["CALL deleteDeadVehicles",1] call DB_fnc_asyncCall; -["CALL deleteOldHouses",1] call DB_fnc_asyncCall; -["CALL deleteOldGangs",1] call DB_fnc_asyncCall; +["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 "----------------------------------------------------------------------------------------------------"; @@ -80,7 +80,7 @@ diag_log "---------------------------------------------------------------------- if (LIFE_SETTINGS(getNumber,"save_civilian_position_restart") isEqualTo 1) then { [] spawn { - _query = "UPDATE players SET civ_alive = '0' WHERE civ_alive = '1'"; + ["updateCivAlive", 1] call DB_fnc_asyncCall; [_query,1] call DB_fnc_asyncCall; }; }; From a6783d82df72065e623bfde3fd55bd1a3589a32e Mon Sep 17 00:00:00 2001 From: DomT602 <32492434+DomT602@users.noreply.github.com> Date: Wed, 1 Jan 2020 21:53:37 +0000 Subject: [PATCH 05/33] Death log update (#596) * Death log * Cleanup * Setting * Add macros Co-authored-by: Jason_000 --- .../Functions/Systems/fn_entityKilled.sqf | 36 +++++++++++++++++ .../Functions/Systems/fn_whoDoneIt.sqf | 40 ------------------- life_server/config.cpp | 1 + life_server/init.sqf | 2 +- 4 files changed, 38 insertions(+), 41 deletions(-) create mode 100644 life_server/Functions/Systems/fn_entityKilled.sqf delete mode 100644 life_server/Functions/Systems/fn_whoDoneIt.sqf diff --git a/life_server/Functions/Systems/fn_entityKilled.sqf b/life_server/Functions/Systems/fn_entityKilled.sqf new file mode 100644 index 000000000..3f4979732 --- /dev/null +++ b/life_server/Functions/Systems/fn_entityKilled.sqf @@ -0,0 +1,36 @@ +#include "\life_server\script_macros.hpp" +/* + File: fn_entityKilled.sqf + Author: DomT602 + Description: + Called when an entity dies +*/ +params [ + ["_killed",objNull,[objNull]], + ["_killer",objNull,[objNull]] +]; + +if (isPlayer _killed) then { + if (LIFE_SETTINGS(getNumber,"player_deathLog") isEqualTo 0) exitWith {}; + private _killedName = name _killed; + private _killerName = name _killer; + private _message = format ["Death Message: %1 has killed %2", _killerName, _killedName]; + if (_killed isEqualTo _killer) then { + _message = format ["Suicide Message: %1 committed suicide (or disconnected)", _killedName]; + } else { + private _weapon = currentWeapon _killer; + if (_weapon isEqualTo "") then { + private _vehicle = vehicle _killer; + if (_vehicle isKindOf "Car") then { + _message = format ["Vehicle Death Message: %1 has knocked down %2 with a %3", _killerName, _killedName, (getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"))]; + } else { + if (_vehicle isKindOf "Air") then { + _message = format ["Aircraft Death Message: %1 has obliterated %2 with a %3", _killerName, _killedName, (getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"))]; + }; + }; + } else { + _message = format ["Weapon Death Message: %1 has killed %2 with Weapon %3 from %4 Meters", _killerName, _killedName, (getText(configFile >> "cfgWeapons" >> _weapon >> "displayName")), floor(_killer distance _killed)]; + }; + }; + diag_log format ["death_log: %1",_message]; +}; diff --git a/life_server/Functions/Systems/fn_whoDoneIt.sqf b/life_server/Functions/Systems/fn_whoDoneIt.sqf deleted file mode 100644 index fac03e6b5..000000000 --- a/life_server/Functions/Systems/fn_whoDoneIt.sqf +++ /dev/null @@ -1,40 +0,0 @@ -/* - File: fn_whoDoneIt.sqf - Description: Save log file of units killed. - Author: Å ColinM - Help of BI Wiki & Forums. - - Credits: KillzoneKid for his Debug_Console v3.0 file. Cuel from the BI Forums for his current & previous posts. -*/ -params [ - ["_victim",objNull,[objNull]], - ["_killer",objNull,[objNull]] -]; - -if (isServer) then { - private ["_killerWep","_killerVeh","_distance","_message"]; - if (isNull _victim || isNull _killer) exitWith {}; - - _killerWep = currentWeapon _killer; - _killerVeh = vehicle _killer; - _distance = _killer distance _victim; - _distance = floor(_distance); - - _message = ""; - if (_victim == _killer) then { - _message = format ["Suicide Message: %1 committed suicide (or disconnected)", (name _victim)]; - }; - if (_killerWep != "") then { - _message = format ["Weapon Death Message: %1 has killed %2 with Weapon %3 from %4 Meters", (name _killer), (name _victim), (getText(configFile >> "cfgWeapons" >> _killerWep >> "displayName")), _distance]; - }; - if (_killerVeh isKindOf "Car" && _killerWep isEqualTo "") then { - _message = format ["Vehicle Death Message: %1 has knocked down %2 with a %3", (name _killer), (name _victim), (getText(configFile >> "CfgVehicles" >> (typeOf _killerVeh) >> "displayName"))]; - }; - if (_killerVeh isKindOf "Air" && _killerWep isEqualTo "") then { - _message = format ["Aircraft Death Message: %1 has obliterated %2 with a %3", (name _killer), (name _victim), (getText(configFile >> "CfgVehicles" >> (typeOf _killerVeh) >> "displayName"))]; - }; - if (_message isEqualTo "") then { - _message = format ["Death Message: %1 has killed %2", (name _killer), (name _victim)]; - }; - - diag_log format ["death_log: %1",_message]; -}; diff --git a/life_server/config.cpp b/life_server/config.cpp index 3456d3693..c4bc04dd3 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -66,6 +66,7 @@ class CfgFunctions { class chopShopSell {}; class clientDisconnect {}; class entityRespawned {}; + class entityKilled {}; class cleanupRequest {}; class keyManagement {}; class vehicleUpdate {}; diff --git a/life_server/init.sqf b/life_server/init.sqf index e6303119c..3abb16f94 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -17,7 +17,6 @@ _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}; -fn_whoDoneIt = compile preprocessFileLineNumbers "\life_server\Functions\Systems\fn_whoDoneIt.sqf"; /* Prepare the headless client. @@ -207,6 +206,7 @@ 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]; From 6bd162a33fb65ff854976d8c9a7c93e436d2ad3b Mon Sep 17 00:00:00 2001 From: DomT602 <32492434+DomT602@users.noreply.github.com> Date: Sat, 4 Jan 2020 23:26:48 +0000 Subject: [PATCH 06/33] Respawn button on escape menu (#598) * Disable button if conditions aren't met * Illegal use of tabs --- Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf b/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf index 4533d4c65..7506a4368 100644 --- a/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf +++ b/Altis_Life.Altis/core/functions/fn_onGameInterrupt.sqf @@ -16,7 +16,6 @@ private _topButton = _display displayCtrl 2; _abortButton ctrlEnable false; _abortButton buttonSetAction "call SOCK_fnc_updateRequest; [player] remoteExec [""TON_fnc_cleanupRequest"",2];"; -_respawnButton ctrlEnable false; _fieldManual ctrlEnable false; _saveButton ctrlEnable false; @@ -43,4 +42,6 @@ if (_conditions) then { _abortButton ctrlSetText localize "STR_DISP_INT_ABORT"; _abortButton ctrlEnable true; }; +} else { + _respawnButton ctrlEnable false; }; \ No newline at end of file From 82aacba4be9c24229f7632197f50e0da54a7f70d Mon Sep 17 00:00:00 2001 From: DomT602 <32492434+DomT602@users.noreply.github.com> Date: Fri, 17 Jan 2020 21:12:38 +0000 Subject: [PATCH 07/33] Client FSM update (#600) * Client FSM update * Macros --- Altis_Life.Altis/config/Config_Master.hpp | 2 +- Altis_Life.Altis/core/fn_survival.sqf | 18 ++++ Altis_Life.Altis/core/fsm/client.fsm | 94 ------------------- Altis_Life.Altis/core/fsm/timeModule.fsm | 108 ---------------------- Altis_Life.Altis/core/init.sqf | 2 - Altis_Life.Altis/stringtable.xml | 8 +- 6 files changed, 23 insertions(+), 209 deletions(-) delete mode 100644 Altis_Life.Altis/core/fsm/client.fsm delete mode 100644 Altis_Life.Altis/core/fsm/timeModule.fsm diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 7e24641db..07b98088a 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -214,7 +214,7 @@ class Life_Settings { }; /* ! --- Do not change --- ! */ - framework_version = "5.0.0"; + framework_version = "6.0.0"; /* ------------------------- */ }; diff --git a/Altis_Life.Altis/core/fn_survival.sqf b/Altis_Life.Altis/core/fn_survival.sqf index 0b207e985..405635e08 100644 --- a/Altis_Life.Altis/core/fn_survival.sqf +++ b/Altis_Life.Altis/core/fn_survival.sqf @@ -46,9 +46,26 @@ _fnc_water = { }; }; +private _fnc_paycheck = { + if (alive player) then { + private _paycheck = call life_paycheck; + if (player distance (getMarkerPos "fed_reserve") < 120 && playerSide isEqualTo west) then { + systemChat format [localize "STR_ReceivedPay",[_paycheck + 1500] call life_fnc_numberText]; + BANK = BANK + _paycheck + 1500; + } else { + BANK = BANK + _paycheck; + systemChat format [localize "STR_ReceivedPay",[_paycheck] call life_fnc_numberText]; + }; + } else { + systemChat localize "STR_MissedPay"; + }; +}; + //Setup the time-based variables. _foodTime = time; _waterTime = time; +private _paycheckTime = time; +private _paycheckPeriod = (getNumber(missionConfigFile >> "Life_Settings" >> "paycheck_period")) * 60; _walkDis = 0; _bp = ""; _lastPos = visiblePosition player; @@ -59,6 +76,7 @@ for "_i" from 0 to 1 step 0 do { /* Thirst / Hunger adjustment that is time based */ if ((time - _waterTime) > 600 && {!life_god}) then {[] call _fnc_water; _waterTime = time;}; if ((time - _foodTime) > 850 && {!life_god}) then {[] call _fnc_food; _foodTime = time;}; + if ((time - _paycheckTime) > _paycheckPeriod) then {[] call _fnc_paycheck; _paycheckTime = time}; /* Adjustment of carrying capacity based on backpack changes */ if (backpack player isEqualTo "") then { diff --git a/Altis_Life.Altis/core/fsm/client.fsm b/Altis_Life.Altis/core/fsm/client.fsm deleted file mode 100644 index f064b1b8f..000000000 --- a/Altis_Life.Altis/core/fsm/client.fsm +++ /dev/null @@ -1,94 +0,0 @@ -/*%FSM*/ -/*%FSM*/ -/* -item0[] = {"Main_Init",0,250,-40.348839,-141.279068,49.651161,-91.279068,0.000000,"Main Init"}; -item1[] = {"true",8,218,-39.994308,-65.712906,50.005692,-15.712896,0.000000,"true"}; -item2[] = {"Split",2,4346,-39.994308,10.874098,50.005707,60.874100,0.000000,"Split"}; -item3[] = {"Time_to_pay_",4,218,-168.727005,-14.470595,-78.726974,35.529457,0.000000,"Time to pay?"}; -link0[] = {0,1}; -link1[] = {1,2}; -link2[] = {2,3}; -link3[] = {3,2}; -globals[] = {0.000000,0,0,0,0,640,480,1,26,6316128,1,-456.200378,358.065338,379.837494,-151.171021,1032,673,1}; -window[] = {0,-1,-1,-1,-1,893,75,1515,75,1,1050}; -*//*%FSM*/ -class FSM -{ - fsmName = "Life Client FSM"; - class States - { - /*%FSM*/ - class Main_Init - { - name = "Main_Init"; - init = /*%FSM*/"private [""_lastcheck"",""_food"",""_water"",""_lastsync""];" \n - "_lastcheck = time;" \n - "_food = time;" \n - "_water = time;" \n - "_lastsync = time;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Split"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Split - { - name = "Split"; - init = /*%FSM*/"systemChat format [localize ""STR_FSM_Paycheck"",(getNumber(missionConfigFile >> ""Life_Settings"" >> ""paycheck_period""))];"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Time_to_pay_ - { - priority = 0.000000; - to="Split"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(time - _lastcheck) > ((getNumber(missionConfigFile >> ""Life_Settings"" >> ""paycheck_period"")) * 60)"/*%FSM*/; - action=/*%FSM*/"if (!alive player) then {" \n - " systemChat localize ""STR_FSM_MissedPay"";" \n - "} else {" \n - " if (player distance (getMarkerPos ""fed_reserve"") < 120 && playerSide isEqualTo west) then {" \n - " systemChat format [localize ""STR_FSM_ReceivedPay"",[(call life_paycheck) + 1500] call life_fnc_numberText];" \n - " life_atmbank = life_atmbank + (call life_paycheck) + 1500;" \n - " } else {" \n - " life_atmbank = life_atmbank + (call life_paycheck);" \n - " systemChat format [localize ""STR_FSM_ReceivedPay"",[(call life_paycheck)] call life_fnc_numberText];" \n - " };" \n - "};" \n - "" \n - "_lastcheck = time;" \n - "" \n - "//Group clean (Local)" \n - "{" \n - " if (local _x && {(units _x isEqualTo [])}) then {" \n - " deleteGroup _x;" \n - " };" \n - "} forEach allGroups;" \n - "" \n - "" \n - ""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - }; - initState="Main_Init"; - finalStates[] = - { - }; -}; -/*%FSM*/ diff --git a/Altis_Life.Altis/core/fsm/timeModule.fsm b/Altis_Life.Altis/core/fsm/timeModule.fsm deleted file mode 100644 index 06e46776d..000000000 --- a/Altis_Life.Altis/core/fsm/timeModule.fsm +++ /dev/null @@ -1,108 +0,0 @@ -/*%FSM*/ -/*%FSM*/ -/* -item0[] = {"Init",0,250,375.000000,0.000000,475.000000,50.000000,0.000000,"Init"}; -item1[] = {"isServer",4,218,375.000000,75.000000,475.000000,125.000000,0.000000,"isServer"}; -item2[] = {"Apply_Time_Multi",2,250,375.000000,150.000000,475.000000,200.000000,0.000000,"Apply Time" \n "Multiplier"}; -item3[] = {"Opposite_Sunstat",4,4314,500.000000,200.000000,600.000000,250.000000,0.000000,"Opposite" \n "Sunstate"}; -item4[] = {"",7,210,421.000000,221.000000,429.000000,229.000000,0.000000,""}; -item5[] = {"",7,210,546.000000,171.000000,554.000000,179.000000,0.000000,""}; -item6[] = {"Linear_Multiplie",4,218,250.000000,150.000000,350.000000,200.000000,1.000000,"Linear" \n "Multiplier"}; -item7[] = {"Exit",1,250,125.000000,150.000000,225.000000,200.000000,0.000000,"Exit"}; -link0[] = {0,1}; -link1[] = {1,2}; -link2[] = {2,4}; -link3[] = {2,6}; -link4[] = {3,5}; -link5[] = {4,3}; -link6[] = {5,2}; -link7[] = {6,7}; -globals[] = {25.000000,1,0,0,0,640,480,1,10,6316128,1,-179.640472,752.478394,458.482788,-385.274109,1403,1270,1}; -window[] = {2,-1,-1,-1,-1,1020,260,1700,260,3,1421}; -*//*%FSM*/ -class FSM -{ - fsmName = "timeModules.fsm : Altis Life"; - class States - { - /*%FSM*/ - class Init - { - name = "Init"; - init = /*%FSM*/"private [""_skipDay"", ""_skipNight"", ""_method"", ""_fastNight"", ""_sunState""];" \n - "_skipDay = [_this,0,8,[0]] call BIS_fnc_param;" \n - "_fastNight = [_this,1,false,[true]] call BIS_fnc_param;" \n - "_skipNight = [_this,2,12,[0]] call BIS_fnc_param;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class isServer - { - priority = 0.000000; - to="Apply_Time_Multi"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"isServer"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Apply_Time_Multi - { - name = "Apply_Time_Multi"; - init = /*%FSM*/"if (_fastNight && {sunOrMoon isEqualTo 0}) then {" \n - " setTimeMultiplier _skipNight;" \n - "} else {" \n - " setTimeMultiplier _skipDay;" \n - "};" \n - "" \n - "private ""_sunState"";" \n - "_sunState = sunOrMoon;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Linear_Multiplie - { - priority = 1.000000; - to="Exit"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!_fastNight"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Opposite_Sunstat - { - priority = 0.000000; - to="Apply_Time_Multi"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"sunOrMoon isEqualTo 1 - _sunState"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Exit - { - name = "Exit"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - }; - }; - /*%FSM*/ - }; - initState="Init"; - finalStates[] = - { - "Exit", - }; -}; -/*%FSM*/ diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf index e62d1fd35..d884e233c 100644 --- a/Altis_Life.Altis/core/init.sqf +++ b/Altis_Life.Altis/core/init.sqf @@ -67,8 +67,6 @@ player setVariable ["playerSurrender", false, true]; player setVariable ["realname", profileName, true]; diag_log "[Life Client] Past Settings Init"; -[] execFSM "core\fsm\client.fsm"; -diag_log "[Life Client] Executing client.fsm"; (findDisplay 46) displayAddEventHandler ["KeyDown", "_this call life_fnc_keyHandler"]; [player, life_settings_enableSidechannel, playerSide] remoteExecCall ["TON_fnc_manageSC", RSERV]; diff --git a/Altis_Life.Altis/stringtable.xml b/Altis_Life.Altis/stringtable.xml index e5795e5b1..3a2699e27 100644 --- a/Altis_Life.Altis/stringtable.xml +++ b/Altis_Life.Altis/stringtable.xml @@ -10221,8 +10221,8 @@ 你的库存 - - + + You will receive your next paycheck in %1 minutes. Obdržíte svůj další výplatní pásku v %1 minut. Recibiras tu siguiente pago en %1 minutos @@ -10234,7 +10234,7 @@ Otrzymasz kolejną wypłatę w ciągu %1 minut. 你将在 %1 分钟后收到你的下一张薪水支票。 - + You have missed a paycheck because you were dead. Jste vynechal výplatu, protože jste byli mrtví. Te has perdido un pago por estar muerto. @@ -10246,7 +10246,7 @@ Ominęła cię wypłata ponieważ byłeś martwy. 因为你死了,你错过了薪水。 - + You have received a paycheck of $%1. Dostali jste výplatu ve výši $ %1. Has recibido un pago de $%1 From 3339bb542814a037cd8bbb1b7e415bc02cd3ca62 Mon Sep 17 00:00:00 2001 From: Blackfisch Date: Mon, 24 Feb 2020 17:31:03 +0100 Subject: [PATCH 08/33] Major Cleanup rework (#611) * move cleanup fsm vehicle stuff ton entitykilled evh * add missing brackets * fix environment and syntax * add missing parameters and proximity check * refactor cleanup.sqf & remove cleanup.fsm * remove remaining cleanup.fsm mentions * DB -> HC, add missing private declaration, remove groundweaponholder deletion * automatic group deletion with deleteGroupWhenEmpty * make sure all groups get deleted when empty * set constants before looping, set vars only if needed * remove spare brackets * _killed cannot be nil * call instead of spawn asyncCall * move var assignment into thread --- Altis_Life.Altis/config/Config_Master.hpp | 16 +- .../core/gangs/fn_gangDisbanded.sqf | 5 +- Altis_Life.Altis/core/gangs/fn_initGang.sqf | 1 + Altis_Life.Altis/core/init.sqf | 1 + life_hc/FSM/cleanup.fsm | 145 -------------- life_hc/MySQL/General/fn_cleanup.sqf | 66 +++---- life_hc/initHC.sqf | 2 - life_server/FSM/cleanup.fsm | 179 ------------------ life_server/Functions/Systems/fn_cleanup.sqf | 66 +++---- .../Functions/Systems/fn_entityKilled.sqf | 82 ++++++-- life_server/functions.sqf | 11 +- life_server/init.sqf | 2 - life_server/initHC.sqf | 7 +- 13 files changed, 138 insertions(+), 445 deletions(-) delete mode 100755 life_hc/FSM/cleanup.fsm delete mode 100755 life_server/FSM/cleanup.fsm diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index 07b98088a..ee56fada6 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -15,6 +15,14 @@ class Life_Settings { 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)? @@ -77,7 +85,7 @@ class Life_Settings { 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 + 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. @@ -212,11 +220,11 @@ class Life_Settings { {"STR_Crime_24","10000","24"}, {"STR_Crime_25","20000","25"} }; - + /* ! --- Do not change --- ! */ framework_version = "6.0.0"; /* ------------------------- */ - + }; #include "Config_Clothing.hpp" @@ -229,4 +237,4 @@ class Life_Settings { #include "Config_Process.hpp" #include "Config_Housing.hpp" #include "Config_Garages.hpp" -#include "Config_Loadouts.hpp" \ No newline at end of file +#include "Config_Loadouts.hpp" diff --git a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf index 7d1765ad4..15d3d8ba3 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf @@ -11,4 +11,7 @@ if (isNull _group) exitWith {}; //Fail horn please. if (!isNull (findDisplay 2620)) then {closeDialog 2620}; hint localize "STR_GNOTF_DisbandWarn_2"; -[player] joinSilent (createGroup civilian); \ No newline at end of file + +private _newGroup = createGroup civilian; +[player] joinSilent _newGroup; +_newGroup deleteGroupWhenEmpty true; diff --git a/Altis_Life.Altis/core/gangs/fn_initGang.sqf b/Altis_Life.Altis/core/gangs/fn_initGang.sqf index 0d559756e..300aa832a 100644 --- a/Altis_Life.Altis/core/gangs/fn_initGang.sqf +++ b/Altis_Life.Altis/core/gangs/fn_initGang.sqf @@ -34,6 +34,7 @@ if (!isNil "_group") then { }; } else { _group = group player; + _group deleteGroupWhenEmpty true; _group setVariable ["gang_id",(life_gangData select 0),true]; _group setVariable ["gang_owner",(life_gangData select 1),true]; _group setVariable ["gang_name",(life_gangData select 2),true]; diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf index d884e233c..c00f5d397 100644 --- a/Altis_Life.Altis/core/init.sqf +++ b/Altis_Life.Altis/core/init.sqf @@ -52,6 +52,7 @@ switch (playerSide) do { 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"); diff --git a/life_hc/FSM/cleanup.fsm b/life_hc/FSM/cleanup.fsm deleted file mode 100755 index 04fea7c81..000000000 --- a/life_hc/FSM/cleanup.fsm +++ /dev/null @@ -1,145 +0,0 @@ -/*%FSM*/ -/*%FSM*/ -/* -item0[] = {"init",0,250,-65.004578,-391.651611,24.995417,-341.651672,0.000000,"init"}; -item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; -item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; -item3[] = {"true",8,218,-54.709698,75.189262,35.290302,125.189262,0.000000,"true"}; -item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; -item5[] = {"Delete_Dead_Cars",2,4346,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; -item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; -item7[] = {"",7,210,-311.750000,-203.033707,-303.750000,-195.033707,0.000000,""}; -link0[] = {0,1}; -link1[] = {1,2}; -link2[] = {2,4}; -link3[] = {3,6}; -link4[] = {4,5}; -link5[] = {5,3}; -link6[] = {6,7}; -link7[] = {7,2}; -globals[] = {0.000000,0,0,0,0,640,480,1,46,6316128,1,-629.444153,611.207214,293.309357,-434.050568,1243,885,1}; -window[] = {2,-1,-1,-1,-1,985,225,1868,225,3,1261}; -*//*%FSM*/ -class FSM -{ - fsmName = "Server-Side Cleanup"; - class States - { - /*%FSM*/ - class init - { - name = "init"; - init = /*%FSM*/"private [""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n - "_impound = time;" \n - "_cars = time;" \n - "_objs = time;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Share__Work_load"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Share__Work_load - { - name = "Share__Work_load"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Time_Check - { - priority = 0.000000; - to="Delete_Dead_Cars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"((time - _cars) > (3 * 60))"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Delete_Dead_Cars - { - name = "Delete_Dead_Cars"; - init = /*%FSM*/"{" \n - " if (!alive _x) then {" \n - " _dbInfo = _x getVariable [""dbInfo"",[]];" \n - " if (count _dbInfo > 0) then {" \n - " _uid = _dbInfo select 0;" \n - " _plate = _dbInfo select 1;" \n - "" \n - " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n - " _query spawn {" \n - " " \n - " _thread = [_this,1] call HC_fnc_asyncCall;" \n - " };" \n - " };" \n - " if (!isNil ""_x"" && {!isNull _x}) then {" \n - " deleteVehicle _x;" \n - " };" \n - " };" \n - "} forEach allMissionObjects ""LandVehicle"";" \n - "" \n - "{" \n - " if (!alive _x) then {" \n - " _dbInfo = _x getVariable [""dbInfo"",[]];" \n - " if (count _dbInfo > 0) then {" \n - " _uid = _dbInfo select 0;" \n - " _plate = _dbInfo select 1;" \n - "" \n - " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n - " _query spawn {" \n - " " \n - " _thread = [_this,1] call HC_fnc_asyncCall;" \n - " };" \n - " };" \n - " if (!isNil ""_x"" && {!isNull _x}) then {" \n - " deleteVehicle _x;" \n - " };" \n - " };" \n - "} forEach allMissionObjects ""Air"";" \n - "" \n - "_cars = time;" \n - "" \n - "//Group cleanup." \n - "{" \n - " if (units _x isEqualTo [] && local _x) then {" \n - " deleteGroup _x;" \n - " };" \n - "} forEach allGroups;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Share__Work_load"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - }; - initState="init"; - finalStates[] = - { - }; -}; -/*%FSM*/ diff --git a/life_hc/MySQL/General/fn_cleanup.sqf b/life_hc/MySQL/General/fn_cleanup.sqf index fb3735c71..cf298f496 100755 --- a/life_hc/MySQL/General/fn_cleanup.sqf +++ b/life_hc/MySQL/General/fn_cleanup.sqf @@ -9,61 +9,43 @@ Server-side cleanup script on vehicles. Sort of a lame way but whatever. */ -private "_deleted"; -_deleted = false; +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 { - private ["_veh","_units","_fuel"]; - sleep (60 * 60); + uiSleep (60 * 60); { - _protect = false; - _veh = _x; - _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "vehicleClass"); - _fuel = 1; - - if (!isNil {_veh getVariable "NPC"} && {_veh getVariable "NPC"}) then {_protect = true;}; + private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _x) >> "vehicleClass"); + private _protect = _x getVariable ["NPC",false]; if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!(_protect)}) then { - if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then {_fuel = (fuel _veh);}; - _dbInfo = _veh getVariable ["dbInfo",[]]; - _units = {(_x distance _veh < 300)} count playableUnits; - if (crew _x isEqualTo []) then { - switch (true) do { - case ((_x getHitPointDamage "HitEngine") > 0.7 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitLFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitLF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitRFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitRF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case (_units isEqualTo 0): {deleteVehicle _x; _deleted = true;}; - }; - }; + private _noUnitsNear = ((nearestObjects [_x, ["CAManBase"], _minUnitDistance]) findIf {isPlayer _x && {alive _x}} isEqualTo -1); - if (_deleted) then { - waitUntil {isNull _veh}; - _deleted = false; - }; + if (crew _x isEqualTo [] && {_noUnitsNear}) then { + private _fuel = if (_saveFuel) then {fuel _x} else {1}; + private _dbInfo = _x getVariable "dbInfo"; - if (isNull _veh) then { - if (count _dbInfo > 0) then { - _uid = _dbInfo select 0; - _plate = _dbInfo select 1; + deleteVehicle _x; - _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; + if (isNil "_dbInfo") exitWith {}; - [_query,1] call HC_fnc_asyncCall; - }; + 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; }; }; } forEach vehicles; - sleep (3 * 60); //3 minute cool-down before next cycle. { - if ((typeOf _x) in ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F", "Land_Can_V3_F","Land_Money_F","Land_Suitcase_F"]) then { + if (!isNil {_x getVariable "item"}) then { deleteVehicle _x; }; - } forEach (allMissionObjects "Thing"); - - sleep (2 * 60); - { - deleteVehicle _x; - } forEach (allMissionObjects "GroundWeaponHolder"); + true + } count (allMissionObjects "Thing"); }; diff --git a/life_hc/initHC.sqf b/life_hc/initHC.sqf index 1655c96f9..7d333a6a2 100644 --- a/life_hc/initHC.sqf +++ b/life_hc/initHC.sqf @@ -59,8 +59,6 @@ diag_log "------------------------------------ Starting Altis Life HC Init ----- diag_log format["-------------------------------------------- Version %1 -----------------------------------------",(LIFE_SETTINGS(getText,"framework_version"))]; diag_log "----------------------------------------------------------------------------------------------------"; -[] execFSM "\life_hc\FSM\cleanup.fsm"; - [] spawn HC_fnc_cleanup; /* Initialize hunting zone(s) */ diff --git a/life_server/FSM/cleanup.fsm b/life_server/FSM/cleanup.fsm deleted file mode 100755 index 6e28987f3..000000000 --- a/life_server/FSM/cleanup.fsm +++ /dev/null @@ -1,179 +0,0 @@ -/*%FSM*/ -/*%FSM*/ -/* -item0[] = {"init",0,250,-62.908096,-391.651611,27.091887,-341.651672,0.000000,"init"}; -item1[] = {"true",8,218,-62.976639,-315.185364,27.023363,-265.185364,0.000000,"true"}; -item2[] = {"Share__Work_load",2,250,-64.183350,-224.681931,25.816656,-174.681931,0.000000,"Share " \n "Work-load"}; -item3[] = {"Continue__",4,4314,-220.591476,74.216980,-130.591476,124.216980,0.000000,"" \n "" \n "Continue" \n "" \n ""}; -item4[] = {"Time_Check",4,218,-219.425827,-133.310532,-129.425964,-83.310455,0.000000,"Time Check"}; -item5[] = {"Delete_Dead_Cars",2,250,-220.186951,-29.248400,-130.187195,20.751413,0.000000,"Delete" \n "Dead" \n "Cars"}; -item6[] = {"",7,210,-312.538239,95.295059,-304.538239,103.295059,0.000000,""}; -item7[] = {"",7,210,-312.798218,-204.081940,-304.798218,-196.081940,0.000000,""}; -item8[] = {"End_Cleanup_",1,250,-64.828239,87.581070,25.171984,137.581238,0.000000,"" \n "End Cleanup" \n ""}; -item9[] = {"Check_for_HC_",4,218,-65.059021,-30.047342,24.941008,19.952658,0.000000,"" \n "Check for HC" \n ""}; -link0[] = {0,1}; -link1[] = {1,2}; -link2[] = {2,4}; -link3[] = {3,6}; -link4[] = {4,5}; -link5[] = {5,3}; -link6[] = {5,9}; -link7[] = {6,7}; -link8[] = {7,2}; -link9[] = {9,8}; -globals[] = {0.000000,0,0,0,0,640,480,1,53,6316128,1,-481.887177,425.726196,554.522583,-436.926575,857,816,1}; -window[] = {0,-1,-1,-32000,-32000,1120,545,1909,159,1,875}; -*//*%FSM*/ -class FSM -{ - fsmName = "Server-Side Cleanup"; - class States - { - /*%FSM*/ - class init - { - name = "init"; - itemno = 0; - init = /*%FSM*/"private [""_impound"",""_cars"",""_objs"",""_totCars"",""_thread""];" \n - "_impound = time;" \n - "_cars = time;" \n - "_objs = time;" \n - "cleanupFSM setFSMVariable [""stopfsm"",false];"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - itemno = 1; - priority = 0.000000; - to="Share__Work_load"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Share__Work_load - { - name = "Share__Work_load"; - itemno = 2; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Time_Check - { - itemno = 4; - priority = 0.000000; - to="Delete_Dead_Cars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"((time - _cars) > (3 * 60))"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Delete_Dead_Cars - { - name = "Delete_Dead_Cars"; - itemno = 5; - init = /*%FSM*/"{" \n - " if (!alive _x) then {" \n - " _dbInfo = _x getVariable [""dbInfo"",[]];" \n - " if (count _dbInfo > 0) then {" \n - " _uid = _dbInfo select 0;" \n - " _plate = _dbInfo select 1;" \n - "" \n - " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n - " _query spawn {" \n - " " \n - " _thread = [_this,1] call DB_fnc_asyncCall;" \n - " };" \n - " };" \n - " if (!isNil ""_x"" && {!isNull _x}) then {" \n - " deleteVehicle _x;" \n - " };" \n - " };" \n - "} forEach allMissionObjects ""LandVehicle"";" \n - "" \n - "{" \n - " if (!alive _x) then {" \n - " _dbInfo = _x getVariable [""dbInfo"",[]];" \n - " if (count _dbInfo > 0) then {" \n - " _uid = _dbInfo select 0;" \n - " _plate = _dbInfo select 1;" \n - "" \n - " _query = format [""deleteVehicle:%1:%2"", _uid, _plate];" \n - " _query spawn {" \n - " " \n - " _thread = [_this,1] call DB_fnc_asyncCall;" \n - " };" \n - " };" \n - " if (!isNil ""_x"" && {!isNull _x}) then {" \n - " deleteVehicle _x;" \n - " };" \n - " };" \n - "} forEach allMissionObjects ""Air"";" \n - "_cars = time;" \n - "" \n - "//Group cleanup." \n - "{" \n - " if (units _x isEqualTo [] && local _x) then {" \n - " deleteGroup _x;" \n - " };" \n - "} forEach allGroups;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Check_for_HC_ - { - itemno = 9; - priority = 0.000000; - to="End_Cleanup_"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"cleanupFSM getFSMVariable ""stopfsm"""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Continue__ - { - itemno = 3; - priority = 0.000000; - to="Share__Work_load"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(cleanupFSM getFSMVariable ""stopfsm"")"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class End_Cleanup_ - { - name = "End_Cleanup_"; - itemno = 8; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - }; - }; - /*%FSM*/ - }; - initState="init"; - finalStates[] = - { - "End_Cleanup_", - }; -}; -/*%FSM*/ diff --git a/life_server/Functions/Systems/fn_cleanup.sqf b/life_server/Functions/Systems/fn_cleanup.sqf index 99612e4ea..48f2208bb 100755 --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -5,62 +5,44 @@ Description: Server-side cleanup script on vehicles. - Sort of a lame way but whatever. Yep someone should look at it! */ -private "_deleted"; -_deleted = false; +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 { - private ["_veh","_units","_fuel"]; uiSleep (60 * 60); { - _protect = false; - _veh = _x; - _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _veh) >> "vehicleClass"); - _fuel = 1; - - if (!isNil {_veh getVariable "NPC"} && {_veh getVariable "NPC"}) then {_protect = true;}; + private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _x) >> "vehicleClass"); + private _protect = _x getVariable ["NPC",false]; if ((_vehicleClass in ["Car","Air","Ship","Armored","Submarine"]) && {!(_protect)}) then { - if (LIFE_SETTINGS(getNumber,"save_vehicle_fuel") isEqualTo 1) then {_fuel = (fuel _veh);}; - _dbInfo = _veh getVariable ["dbInfo",[]]; - _units = {(_x distance _veh < 300)} count playableUnits; - if (count crew _x isEqualTo 0) then { - switch (true) do { - case ((_x getHitPointDamage "HitEngine") > 0.7 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitLFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitLF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitRFWheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case ((_x getHitPointDamage "HitRF2Wheel") > 0.98 && _units isEqualTo 0) : {deleteVehicle _x; _deleted = true;}; - case (_units isEqualTo 0): {deleteVehicle _x; _deleted = true;}; - }; - }; + private _noUnitsNear = ((nearestObjects [_x, ["CAManBase"], _minUnitDistance]) findIf {isPlayer _x && {alive _x}} isEqualTo -1); - if (_deleted) then { - waitUntil {isNull _veh}; - _deleted = false; - }; + if (crew _x isEqualTo [] && {_noUnitsNear}) then { + private _fuel = if (_saveFuel) then {fuel _x} else {1}; + private _dbInfo = _x getVariable "dbInfo"; + + deleteVehicle _x; - if (isNull _veh) then { - if !(_dbInfo isEqualTo []) then { - _uid = _dbInfo select 0; - _plate = _dbInfo select 1; + if (isNil "_dbInfo") exitWith {}; - _query = format ["cleanupVehicle:%1:%2:%3", _fuel, _uid, _plate]; - [_query, 1] call DB_fnc_asyncCall; - }; + 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; }; }; } forEach vehicles; - uiSleep (3 * 60); //3 minute cool-down before next cycle. { - if ((typeOf _x) in ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F", "Land_Can_V3_F","Land_Money_F","Land_Suitcase_F"]) then { + if (!isNil {_x getVariable "item"}) then { deleteVehicle _x; }; - } forEach (allMissionObjects "Thing"); - - uiSleep (2 * 60); - { - deleteVehicle _x; - } forEach (allMissionObjects "GroundWeaponHolder"); + true + } count (allMissionObjects "Thing"); }; diff --git a/life_server/Functions/Systems/fn_entityKilled.sqf b/life_server/Functions/Systems/fn_entityKilled.sqf index 3f4979732..836d8d8c9 100644 --- a/life_server/Functions/Systems/fn_entityKilled.sqf +++ b/life_server/Functions/Systems/fn_entityKilled.sqf @@ -6,31 +6,73 @@ Called when an entity dies */ params [ - ["_killed",objNull,[objNull]], - ["_killer",objNull,[objNull]] + ["_killed", objNull, [objNull]], + ["_killer", objNull, [objNull]], + ["_instigator", objNull, [objNull]], + ["_useEffects", true, [true]] ]; -if (isPlayer _killed) then { +if (isPlayer _killed) exitWith { if (LIFE_SETTINGS(getNumber,"player_deathLog") isEqualTo 0) exitWith {}; private _killedName = name _killed; - private _killerName = name _killer; - private _message = format ["Death Message: %1 has killed %2", _killerName, _killedName]; - if (_killed isEqualTo _killer) then { - _message = format ["Suicide Message: %1 committed suicide (or disconnected)", _killedName]; - } else { - private _weapon = currentWeapon _killer; - if (_weapon isEqualTo "") then { - private _vehicle = vehicle _killer; - if (_vehicle isKindOf "Car") then { - _message = format ["Vehicle Death Message: %1 has knocked down %2 with a %3", _killerName, _killedName, (getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"))]; - } else { - if (_vehicle isKindOf "Air") then { - _message = format ["Aircraft Death Message: %1 has obliterated %2 with a %3", _killerName, _killedName, (getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"))]; - }; + + if (_killed isEqualTo _killer) exitWith { + diag_log format ["death_log: Suicide Message: %1 committed suicide (or disconnected)", _killedName]; + }; + + //instigator is null -> indicated Roadkill + //reference: https://community.bistudio.com/wiki/Arma_3:_Event_Handlers/addMissionEventHandler#EntityKilled + if (isNull _instigator) exitWith { + private _vehicle = vehicle _killer; + private _vehicleName = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"); + (UAVControl _vehicle) params ["_instigator"]; + + if !(isNull _instigator) exitWith { + diag_log format ["death_log: UAV Death Message: %1 has knocked down %2 with a %3", name _instigator, _killedName, _vehicleName]; + }; + + if (_vehicle isKindOf "Air") exitWith { + diag_log format ["death_log: Aircraft Death Message: %1 has obliterated %2 with a %3", name _killer, _killedName, _vehicleName]; + }; + diag_log format ["death_log: Vehicle Death Message: %1 has knocked down %2 with a %3", name _killer, _killedName, _vehicleName]; + }; + + private _weaponName = getText(configFile >> "cfgWeapons" >> (currentWeapon _instigator) >> "displayName"); + private _distance = floor(_killer distance _killed); + + diag_log format ["death_log: Weapon Death Message: %1 has killed %2 with Weapon %3 from %4 Meters", name _instigator, _killedName, _weaponName, _distance]; +}; + +private _vehicleClass = getText(configFile >> "CfgVehicles" >> (typeOf _killed) >> "vehicleClass"); + +if (_vehicleClass in ["Air","Armored","Car","Ship","Submarine"]) exitWith { + private _dbInfo = _killed getVariable ["dbInfo",[]]; + + if (count _dbInfo > 0) then { + _dbInfo params [ + "_uid", + "_plate" + ]; + + private _query = format ["deleteVehicle:%1:%2", _uid, _plate]; + [_query,1] call DB_fnc_asyncCall; + }; + + if (!isNull _killed) then { + + [_killed] spawn { + private _startTime = serverTime; + private _delay = LIFE_SETTINGS(getNumber,"dead_vehicles_despawn_delay"); + private _minUnitDistance = LIFE_SETTINGS(getNumber,"dead_vehicles_max_units_distance"); + params [ + ["_killed", objNull, [objNull]] + ]; + + waitUntil { + uiSleep 1; + ((nearestObjects [_killed, ["CAManBase"], _minUnitDistance]) findIf {isPlayer _x && {alive _x}} isEqualTo -1) || {serverTime - _startTime >= _delay} }; - } else { - _message = format ["Weapon Death Message: %1 has killed %2 with Weapon %3 from %4 Meters", _killerName, _killedName, (getText(configFile >> "cfgWeapons" >> _weapon >> "displayName")), floor(_killer distance _killed)]; + deleteVehicle _killed; }; }; - diag_log format ["death_log: %1",_message]; }; diff --git a/life_server/functions.sqf b/life_server/functions.sqf index 9892cb97b..d7e1b1f74 100644 --- a/life_server/functions.sqf +++ b/life_server/functions.sqf @@ -14,7 +14,7 @@ compileFinal " ""_item"", [""_stack"",[],[[]]] ]; - + _stack findIf {_item in _x}; "; @@ -56,7 +56,9 @@ compileFinal " if (isNil ""_unit"" || isNil ""_group"") exitWith {}; if (player isEqualTo _unit && (group player) == _group) then { life_my_gang = objNull; - [player] joinSilent (createGroup civilian); + private _newGroup = createGroup civilian; + _newGroup deleteGroupWhenEmpty true; + [player] joinSilent _newGroup; hint localize ""STR_GNOTF_KickOutGang""; }; "; @@ -103,7 +105,10 @@ compileFinal " if (isNil ""_unit"" || isNil ""_group"") exitWith {}; if (player isEqualTo _unit && (group player) == _group) then { life_my_gang = objNull; - [player] joinSilent (createGroup civilian); + + private _newGroup = createGroup civilian; + _newGroup deleteGroupWhenEmpty true; + [player] joinSilent _newGroup; hint localize ""STR_GNOTF_LeaveGang""; }; "; diff --git a/life_server/init.sqf b/life_server/init.sqf index 3abb16f94..61c6baf1d 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -159,8 +159,6 @@ TON_fnc_requestClientID = /* Miscellaneous mission-required stuff */ life_wanted_list = []; -cleanupFSM = [] execFSM "\life_server\FSM\cleanup.fsm"; - [] spawn { for "_i" from 0 to 1 step 0 do { uiSleep (30 * 60); diff --git a/life_server/initHC.sqf b/life_server/initHC.sqf index d8ae68700..733fd897c 100644 --- a/life_server/initHC.sqf +++ b/life_server/initHC.sqf @@ -15,7 +15,6 @@ HC_UID = nil; HC_Life = owner hc_1; publicVariable "HC_Life"; HC_Life publicVariableClient "serv_sv_use"; - cleanupFSM setFSMVariable ["stopfsm",true]; terminate cleanup; terminate aiSpawn; [true] call TON_fnc_transferOwnership; @@ -24,7 +23,7 @@ HC_UID = nil; }; }; -HC_DC = ["HC_Disconnected","onPlayerDisconnected", +HC_DC = addMissionEventHandler ["PlayerDisconnected", { if (!isNil "HC_UID" && {_uid == HC_UID}) then { life_HC_isActive = false; @@ -32,12 +31,10 @@ HC_DC = ["HC_Disconnected","onPlayerDisconnected", HC_Life = false; publicVariable "HC_Life"; cleanup = [] spawn TON_fnc_cleanup; - cleanupFSM = [] execFSM "\life_server\FSM\cleanup.fsm"; [false] call TON_fnc_transferOwnership; aiSpawn = ["hunting_zone",30] spawn TON_fnc_huntingZone; diag_log "Headless client disconnected! Broadcasted the vars!"; diag_log "Ready for receiving queries on the server machine."; }; } -] call BIS_fnc_addStackedEventHandler; - +]; From 11c56d04aeec4e17462b732541a20b8de06eefe1 Mon Sep 17 00:00:00 2001 From: Blackfisch Date: Thu, 27 Feb 2020 20:01:18 +0100 Subject: [PATCH 09/33] Refactor Eventhandling (#615) * handle vehicle switch with eventhandler * style conventions - single file per evh * forgot fn_setupEvh.sqf * remove fn_hudSetup.sqf & fix hud not showing on spawn * Grammar * Grammar v2 * Lowercase for Spyglass Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> --- Altis_Life.Altis/Functions.hpp | 3 ++- Altis_Life.Altis/config/Config_SpyGlass.hpp | 4 ++-- Altis_Life.Altis/core/fn_setupEVH.sqf | 5 ++++- Altis_Life.Altis/core/fn_survival.sqf | 7 ------ .../core/functions/fn_getInMan.sqf | 16 ++++++++++++++ .../core/functions/fn_getOutMan.sqf | 16 ++++++++++++++ .../core/functions/fn_hudSetup.sqf | 22 ------------------- .../core/functions/fn_hudUpdate.sqf | 4 +++- Altis_Life.Altis/core/init.sqf | 3 ++- .../dialog/function/fn_spawnConfirm.sqf | 1 - altislife.sql | 12 +++++----- 11 files changed, 51 insertions(+), 42 deletions(-) create mode 100644 Altis_Life.Altis/core/functions/fn_getInMan.sqf create mode 100644 Altis_Life.Altis/core/functions/fn_getOutMan.sqf delete mode 100644 Altis_Life.Altis/core/functions/fn_hudSetup.sqf diff --git a/Altis_Life.Altis/Functions.hpp b/Altis_Life.Altis/Functions.hpp index 87393ad7e..3345d181b 100644 --- a/Altis_Life.Altis/Functions.hpp +++ b/Altis_Life.Altis/Functions.hpp @@ -183,12 +183,13 @@ class Life_Client_Core { class fetchDeadGear {}; class fetchVehInfo {}; class isDamaged {}; + class getInMan {}; + class getOutMan {}; class giveDiff {}; class handleDamage {}; class handleInv {}; class handleItem {}; class hideObj {}; - class hudSetup {}; class hudUpdate {}; class inventoryClosed {}; class inventoryOpened {}; diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index cbd535760..5bfb756c6 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -254,7 +254,7 @@ class SpyGlass { "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_hudsetup","life_fnc_hudsetup_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_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", @@ -281,7 +281,7 @@ class SpyGlass { "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_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[] = { diff --git a/Altis_Life.Altis/core/fn_setupEVH.sqf b/Altis_Life.Altis/core/fn_setupEVH.sqf index 2b0efbf8b..ace441f9a 100644 --- a/Altis_Life.Altis/core/fn_setupEVH.sqf +++ b/Altis_Life.Altis/core/fn_setupEVH.sqf @@ -14,6 +14,9 @@ player addEventHandler ["InventoryClosed", {_this call life_fnc_inventoryClosed} player addEventHandler ["InventoryOpened", {_this call life_fnc_inventoryOpened}]; player addEventHandler ["HandleRating", {0}]; +player addEventHandler ["GetInMan", {_this call life_fnc_getInMan}]; +player addEventHandler ["GetOutMan", {_this call life_fnc_getOutMan}]; + addMissionEventHandler ["Map", {_this call life_fnc_checkMap}]; -[missionNamespace,"OnGameInterrupt",{_this call life_fnc_onGameInterrupt}] call BIS_fnc_addScriptedEventHandler; \ No newline at end of file +[missionNamespace,"OnGameInterrupt",{_this call life_fnc_onGameInterrupt}] call BIS_fnc_addScriptedEventHandler; diff --git a/Altis_Life.Altis/core/fn_survival.sqf b/Altis_Life.Altis/core/fn_survival.sqf index 405635e08..b6593723d 100644 --- a/Altis_Life.Altis/core/fn_survival.sqf +++ b/Altis_Life.Altis/core/fn_survival.sqf @@ -70,7 +70,6 @@ _walkDis = 0; _bp = ""; _lastPos = visiblePosition player; _lastPos = (_lastPos select 0) + (_lastPos select 1); -_lastState = vehicle player; for "_i" from 0 to 1 step 0 do { /* Thirst / Hunger adjustment that is time based */ @@ -89,12 +88,6 @@ for "_i" from 0 to 1 step 0 do { }; }; - /* Check if the player's state changed? */ - if (!(vehicle player isEqualTo _lastState) || {!alive player}) then { - [] call life_fnc_updateViewDistance; - _lastState = vehicle player; - }; - /* Check if the weight has changed and the player is carrying to much */ if (life_carryWeight > life_maxWeight && {!isForcedWalk player} && {!life_god}) then { player forceWalk true; diff --git a/Altis_Life.Altis/core/functions/fn_getInMan.sqf b/Altis_Life.Altis/core/functions/fn_getInMan.sqf new file mode 100644 index 000000000..21a212461 --- /dev/null +++ b/Altis_Life.Altis/core/functions/fn_getInMan.sqf @@ -0,0 +1,16 @@ +/* + File: fn_getInMan.sqf + Author: blackfisch + + Description: + Handles player entering a vehicle. +*/ +params [ + ["_unit", objNull, [objNull]], + ["_role", "", [""]], + ["_vehicle", objNull, [objNull]], + ["_turret", [], [[]]] +]; + +//update view distance settings +[] call life_fnc_updateViewDistance; diff --git a/Altis_Life.Altis/core/functions/fn_getOutMan.sqf b/Altis_Life.Altis/core/functions/fn_getOutMan.sqf new file mode 100644 index 000000000..f498fabde --- /dev/null +++ b/Altis_Life.Altis/core/functions/fn_getOutMan.sqf @@ -0,0 +1,16 @@ +/* + File: fn_getOutMan.sqf + Author: blackfisch + + Description: + Handles player leaving a vehicle. +*/ +params [ + ["_unit", objNull, [objNull]], + ["_role", "", [""]], + ["_vehicle", objNull, [objNull]], + ["_turret", [], [[]]] +]; + +//update view distance settings +[] call life_fnc_updateViewDistance; diff --git a/Altis_Life.Altis/core/functions/fn_hudSetup.sqf b/Altis_Life.Altis/core/functions/fn_hudSetup.sqf deleted file mode 100644 index 7510277e2..000000000 --- a/Altis_Life.Altis/core/functions/fn_hudSetup.sqf +++ /dev/null @@ -1,22 +0,0 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_hudSetup.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Setups the hud for the player? -*/ -disableSerialization; - -cutRsc ["playerHUD", "PLAIN", 2, false]; -[] call life_fnc_hudUpdate; - -[] spawn -{ - private ["_dam"]; - for "_i" from 0 to 1 step 0 do { - _dam = damage player; - waitUntil {!((damage player) isEqualTo _dam)}; - [] call life_fnc_hudUpdate; - }; -}; diff --git a/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf b/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf index 1590b2547..03b1e50d9 100644 --- a/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf +++ b/Altis_Life.Altis/core/functions/fn_hudUpdate.sqf @@ -8,7 +8,9 @@ */ disableSerialization; -if (isNull LIFEdisplay) then {[] call life_fnc_hudSetup;}; +if (isNull LIFEdisplay) then { + cutRsc ["playerHUD", "PLAIN", 2, false]; +}; LIFEctrl(2200) progressSetPosition (life_hunger / 100); LIFEctrl(2201) progressSetPosition (1 - (damage player)); LIFEctrl(2202) progressSetPosition (life_thirst / 100); diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf index c00f5d397..24a97d5b5 100644 --- a/Altis_Life.Altis/core/init.sqf +++ b/Altis_Life.Altis/core/init.sqf @@ -72,7 +72,6 @@ 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]; -[] call life_fnc_hudSetup; [] spawn life_fnc_survival; 0 cutText ["","BLACK IN"]; @@ -109,6 +108,8 @@ if (life_HC_isActive) then { [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/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf b/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf index 9f6dc95d7..fbe7f6b87 100644 --- a/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf +++ b/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf @@ -60,4 +60,3 @@ if (life_firstSpawn) then { [] call life_fnc_welcomeNotification; }; [] call life_fnc_playerSkins; -[] call life_fnc_hudSetup; diff --git a/altislife.sql b/altislife.sql index 810f3e74e..0d7c2997a 100755 --- a/altislife.sql +++ b/altislife.sql @@ -99,7 +99,7 @@ CREATE TABLE IF NOT EXISTS `players` ( `playtime` VARCHAR(32) NOT NULL DEFAULT '[0,0,0]', `insert_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `last_seen` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - + PRIMARY KEY (`pid`), UNIQUE KEY `unique_uid` (`uid`), INDEX `index_name` (`name`), @@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS `vehicles` ( `fuel` DOUBLE NOT NULL DEFAULT 1, `damage` VARCHAR(256) NOT NULL, `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - + PRIMARY KEY (`id`), INDEX `fkIdx_players_vehicles` (`pid`), CONSTRAINT `FK_players_vehicles` FOREIGN KEY `fkIdx_players_vehicles` (`pid`) @@ -153,7 +153,7 @@ CREATE TABLE IF NOT EXISTS `houses` ( `owned` TINYINT DEFAULT 0, `garage` TINYINT NOT NULL DEFAULT 0, `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - + PRIMARY KEY (`id`), INDEX `fkIdx_players_houses` (`pid`), CONSTRAINT `FK_players_houses` FOREIGN KEY `fkIdx_players_houses` (`pid`) @@ -177,7 +177,7 @@ CREATE TABLE IF NOT EXISTS `gangs` ( `bank` INT DEFAULT 0, `active` TINYINT NOT NULL DEFAULT 1, `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - + PRIMARY KEY (`id`), UNIQUE KEY `unique_name` (`name`), INDEX `fkIdx_players_gangs` (`owner`), @@ -204,7 +204,7 @@ CREATE TABLE IF NOT EXISTS `containers` ( `active` TINYINT NOT NULL DEFAULT 0, `owned` TINYINT NOT NULL DEFAULT 0, `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - + PRIMARY KEY (`id`), INDEX `fkIdx_players_containers` (`pid`), CONSTRAINT `FK_players_containers` FOREIGN KEY `fkIdx_players_containers` (`pid`) @@ -226,7 +226,7 @@ CREATE TABLE IF NOT EXISTS `wanted` ( `wantedBounty` INT NOT NULL, `active` TINYINT NOT NULL DEFAULT 0, `insert_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - + PRIMARY KEY (`wantedID`), CONSTRAINT `FK_players_wanted` FOREIGN KEY `fkIdx_players_wanted` (`wantedID`) REFERENCES `players` (`pid`) From 4e2a1d6cd10b4f5a299c34aa1b09252a09536702 Mon Sep 17 00:00:00 2001 From: blackfisch Date: Mon, 10 Feb 2020 12:02:31 +0100 Subject: [PATCH 10/33] put SQF validators local --- .travis.yml | 9 +- tools/config_style_checker.py | 159 ++++++++++++++++++++++++++++ tools/sqf_validator.py | 192 ++++++++++++++++++++++++++++++++++ 3 files changed, 354 insertions(+), 6 deletions(-) create mode 100644 tools/config_style_checker.py create mode 100644 tools/sqf_validator.py diff --git a/.travis.yml b/.travis.yml index 2ea664a88..d4d726af1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,7 @@ language: python python: - '3.4' -before_script: -# Credits to ACE3 for these validators -- wget https://www.dropbox.com/s/wzj5js0kc2xlanc/sqf_validator.py -- wget https://www.dropbox.com/s/jza43yuxswvx2hz/config_style_checker.py script: -- python3 sqf_validator.py -- python3 config_style_checker.py +# Credits to ACE3 for these validators +- python3 tools/sqf_validator.py +- python3 tools/config_style_checker.py diff --git a/tools/config_style_checker.py b/tools/config_style_checker.py new file mode 100644 index 000000000..7cfe79e77 --- /dev/null +++ b/tools/config_style_checker.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python3 + +#credits to ACE3: https://github.com/acemod/ACE3/blob/master/tools/sqf_validator.py + +import fnmatch +import os +import re +import ntpath +import sys +import argparse + +def check_config_style(filepath): + bad_count_file = 0 + def pushClosing(t): + closingStack.append(closing.expr) + closing << Literal( closingFor[t[0]] ) + + def popClosing(): + closing << closingStack.pop() + + with open(filepath, 'r', encoding='utf-8', errors='ignore') as file: + content = file.read() + + # Store all brackets we find in this file, so we can validate everything on the end + brackets_list = [] + + # To check if we are in a comment block + isInCommentBlock = False + checkIfInComment = False + # Used in case we are in a line comment (//) + ignoreTillEndOfLine = False + # Used in case we are in a comment block (/* */). This is true if we detect a * inside a comment block. + # If the next character is a /, it means we end our comment block. + checkIfNextIsClosingBlock = False + + # We ignore everything inside a string + isInString = False + # Used to store the starting type of a string, so we can match that to the end of a string + inStringType = ''; + + lastIsCurlyBrace = False + checkForSemiColumn = False + + # Extra information so we know what line we find errors at + lineNumber = 1 + + indexOfCharacter = 0 + # Parse all characters in the content of this file to search for potential errors + for c in content: + if (lastIsCurlyBrace): + lastIsCurlyBrace = False + if c == '\n': # Keeping track of our line numbers + lineNumber += 1 # so we can print accurate line number information when we detect a possible error + if (isInString): # while we are in a string, we can ignore everything else, except the end of the string + if (c == inStringType): + isInString = False + # if we are not in a comment block, we will check if we are at the start of one or count the () {} and [] + elif (isInCommentBlock == False): + + # This means we have encountered a /, so we are now checking if this is an inline comment or a comment block + if (checkIfInComment): + checkIfInComment = False + if c == '*': # if the next character after / is a *, we are at the start of a comment block + isInCommentBlock = True + elif (c == '/'): # Otherwise, will check if we are in an line comment + ignoreTillEndOfLine = True # and an line comment is a / followed by another / (//) We won't care about anything that comes after it + + if (isInCommentBlock == False): + if (ignoreTillEndOfLine): # we are in a line comment, just continue going through the characters until we find an end of line + if (c == '\n'): + ignoreTillEndOfLine = False + else: # validate brackets + if (c == '"' or c == "'"): + isInString = True + inStringType = c + elif (c == '/'): + checkIfInComment = True + elif (c == '('): + brackets_list.append('(') + elif (c == ')'): + if (len(brackets_list) > 0 and brackets_list[-1] in ['{', '[']): + print("ERROR: Possible missing round bracket ')' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + brackets_list.append(')') + elif (c == '['): + brackets_list.append('[') + elif (c == ']'): + if (len(brackets_list) > 0 and brackets_list[-1] in ['{', '(']): + print("ERROR: Possible missing square bracket ']' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + brackets_list.append(']') + elif (c == '{'): + brackets_list.append('{') + elif (c == '}'): + lastIsCurlyBrace = True + if (len(brackets_list) > 0 and brackets_list[-1] in ['(', '[']): + print("ERROR: Possible missing curly brace '}}' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + brackets_list.append('}') + elif (c== '\t'): + print("ERROR: Tab detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + + else: # Look for the end of our comment block + if (c == '*'): + checkIfNextIsClosingBlock = True; + elif (checkIfNextIsClosingBlock): + if (c == '/'): + isInCommentBlock = False + elif (c != '*'): + checkIfNextIsClosingBlock = False + indexOfCharacter += 1 + + if brackets_list.count('[') != brackets_list.count(']'): + print("ERROR: A possible missing square bracket [ or ] in file {0} [ = {1} ] = {2}".format(filepath,brackets_list.count('['),brackets_list.count(']'))) + bad_count_file += 1 + if brackets_list.count('(') != brackets_list.count(')'): + print("ERROR: A possible missing round bracket ( or ) in file {0} ( = {1} ) = {2}".format(filepath,brackets_list.count('('),brackets_list.count(')'))) + bad_count_file += 1 + if brackets_list.count('{') != brackets_list.count('}'): + print("ERROR: A possible missing curly brace {{ or }} in file {0} {{ = {1} }} = {2}".format(filepath,brackets_list.count('{'),brackets_list.count('}'))) + bad_count_file += 1 + return bad_count_file + +def main(): + + print("Validating Config Style") + + sqf_list = [] + bad_count = 0 + + parser = argparse.ArgumentParser() + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default="") + args = parser.parse_args() + + # Allow running from root directory as well as from inside the tools directory + rootDir = "../addons" + if (os.path.exists("addons")): + rootDir = "addons" + + for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): + for filename in fnmatch.filter(filenames, '*.cpp'): + sqf_list.append(os.path.join(root, filename)) + for filename in fnmatch.filter(filenames, '*.hpp'): + sqf_list.append(os.path.join(root, filename)) + + for filename in sqf_list: + bad_count = bad_count + check_config_style(filename) + + print("------\nChecked {0} files\nErrors detected: {1}".format(len(sqf_list), bad_count)) + if (bad_count == 0): + print("Config validation PASSED") + else: + print("Config validation FAILED") + + return bad_count + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py new file mode 100644 index 000000000..645be3a6a --- /dev/null +++ b/tools/sqf_validator.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 + +#credits to ACE3: https://github.com/acemod/ACE3/blob/master/tools/sqf_validator.py + +import fnmatch +import os +import re +import ntpath +import sys +import argparse + +def validKeyWordAfterCode(content, index): + keyWords = ["for", "do", "count", "each", "forEach", "else", "and", "not", "isEqualTo", "in", "call", "spawn", "execVM", "catch", "param", "select", "apply", "findIf", "remoteExec"]; + for word in keyWords: + try: + subWord = content.index(word, index, index+len(word)) + return True; + except: + pass + return False + +def check_sqf_syntax(filepath): + bad_count_file = 0 + def pushClosing(t): + closingStack.append(closing.expr) + closing << Literal( closingFor[t[0]] ) + + def popClosing(): + closing << closingStack.pop() + + with open(filepath, 'r', encoding='utf-8', errors='ignore') as file: + content = file.read() + + # Store all brackets we find in this file, so we can validate everything on the end + brackets_list = [] + + # To check if we are in a comment block + isInCommentBlock = False + checkIfInComment = False + # Used in case we are in a line comment (//) + ignoreTillEndOfLine = False + # Used in case we are in a comment block (/* */). This is true if we detect a * inside a comment block. + # If the next character is a /, it means we end our comment block. + checkIfNextIsClosingBlock = False + + # We ignore everything inside a string + isInString = False + # Used to store the starting type of a string, so we can match that to the end of a string + inStringType = ''; + + lastIsCurlyBrace = False + checkForSemicolon = False + onlyWhitespace = True + + # Extra information so we know what line we find errors at + lineNumber = 1 + + indexOfCharacter = 0 + # Parse all characters in the content of this file to search for potential errors + for c in content: + if (lastIsCurlyBrace): + lastIsCurlyBrace = False + # Test generates false positives with binary commands that take CODE as 2nd arg (e.g. findIf) + checkForSemicolon = not re.search('findIf', content, re.IGNORECASE) + + if c == '\n': # Keeping track of our line numbers + onlyWhitespace = True # reset so we can see if # is for a preprocessor command + lineNumber += 1 # so we can print accurate line number information when we detect a possible error + if (isInString): # while we are in a string, we can ignore everything else, except the end of the string + if (c == inStringType): + isInString = False + # if we are not in a comment block, we will check if we are at the start of one or count the () {} and [] + elif (isInCommentBlock == False): + + # This means we have encountered a /, so we are now checking if this is an inline comment or a comment block + if (checkIfInComment): + checkIfInComment = False + if c == '*': # if the next character after / is a *, we are at the start of a comment block + isInCommentBlock = True + elif (c == '/'): # Otherwise, will check if we are in an line comment + ignoreTillEndOfLine = True # and an line comment is a / followed by another / (//) We won't care about anything that comes after it + + if (isInCommentBlock == False): + if (ignoreTillEndOfLine): # we are in a line comment, just continue going through the characters until we find an end of line + if (c == '\n'): + ignoreTillEndOfLine = False + else: # validate brackets + if (c == '"' or c == "'"): + isInString = True + inStringType = c + elif (c == '#' and onlyWhitespace): + ignoreTillEndOfLine = True + elif (c == '/'): + checkIfInComment = True + elif (c == '('): + brackets_list.append('(') + elif (c == ')'): + if (brackets_list[-1] in ['{', '[']): + print("ERROR: Possible missing round bracket ')' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + brackets_list.append(')') + elif (c == '['): + brackets_list.append('[') + elif (c == ']'): + if (brackets_list[-1] in ['{', '(']): + print("ERROR: Possible missing square bracket ']' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + brackets_list.append(']') + elif (c == '{'): + brackets_list.append('{') + elif (c == '}'): + lastIsCurlyBrace = True + if (brackets_list[-1] in ['(', '[']): + print("ERROR: Possible missing curly brace '}}' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + brackets_list.append('}') + elif (c== '\t'): + print("ERROR: Tab detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + + if (c not in [' ', '\t', '\n']): + onlyWhitespace = False + + if (checkForSemicolon): + if (c not in [' ', '\t', '\n', '/']): # keep reading until no white space or comments + checkForSemicolon = False + if (c not in [']', ')', '}', ';', ',', '&', '!', '|', '='] and not validKeyWordAfterCode(content, indexOfCharacter)): # , 'f', 'd', 'c', 'e', 'a', 'n', 'i']): + print("ERROR: Possible missing semicolon ';' detected at {0} Line number: {1}".format(filepath,lineNumber)) + bad_count_file += 1 + + else: # Look for the end of our comment block + if (c == '*'): + checkIfNextIsClosingBlock = True; + elif (checkIfNextIsClosingBlock): + if (c == '/'): + isInCommentBlock = False + elif (c != '*'): + checkIfNextIsClosingBlock = False + indexOfCharacter += 1 + + if brackets_list.count('[') != brackets_list.count(']'): + print("ERROR: A possible missing square bracket [ or ] in file {0} [ = {1} ] = {2}".format(filepath,brackets_list.count('['),brackets_list.count(']'))) + bad_count_file += 1 + if brackets_list.count('(') != brackets_list.count(')'): + print("ERROR: A possible missing round bracket ( or ) in file {0} ( = {1} ) = {2}".format(filepath,brackets_list.count('('),brackets_list.count(')'))) + bad_count_file += 1 + if brackets_list.count('{') != brackets_list.count('}'): + print("ERROR: A possible missing curly brace {{ or }} in file {0} {{ = {1} }} = {2}".format(filepath,brackets_list.count('{'),brackets_list.count('}'))) + bad_count_file += 1 + pattern = re.compile('\s*(/\*[\s\S]+?\*/)\s*#include') + if pattern.match(content): + print("ERROR: A found #include after block comment in file {0}".format(filepath)) + bad_count_file += 1 + + + + return bad_count_file + +def main(): + + print("Validating SQF") + + sqf_list = [] + bad_count = 0 + + parser = argparse.ArgumentParser() + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default="") + args = parser.parse_args() + + # Allow running from root directory as well as from inside the tools directory + rootDir = "../addons" + if (os.path.exists("addons")): + rootDir = "addons" + + for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): + for filename in fnmatch.filter(filenames, '*.sqf'): + sqf_list.append(os.path.join(root, filename)) + + for filename in sqf_list: + bad_count = bad_count + check_sqf_syntax(filename) + + + print("------\nChecked {0} files\nErrors detected: {1}".format(len(sqf_list), bad_count)) + if (bad_count == 0): + print("SQF validation PASSED") + else: + print("SQF validation FAILED") + + return bad_count + +if __name__ == "__main__": + sys.exit(main()) From 990e6ca356d61b5f1bba57da67437f1fd17e78de Mon Sep 17 00:00:00 2001 From: blackfisch Date: Tue, 11 Feb 2020 17:39:37 +0100 Subject: [PATCH 11/33] add license (GPL conformity) --- tools/LICENSE | 347 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 347 insertions(+) create mode 100644 tools/LICENSE diff --git a/tools/LICENSE b/tools/LICENSE new file mode 100644 index 000000000..9ee63c844 --- /dev/null +++ b/tools/LICENSE @@ -0,0 +1,347 @@ +All work in this folder is licensed under the following license: + + +============================================================================ + Full GNU General Public License Text +============================================================================ + + +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. From 57ed268b882de4fc076fee8d20bd1441e3bb9064 Mon Sep 17 00:00:00 2001 From: BoGuu Date: Mon, 9 Mar 2020 23:17:43 +0000 Subject: [PATCH 12/33] Update validators, ignore .git --- tools/config_style_checker.py | 8 +++++--- tools/sqf_validator.py | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/config_style_checker.py b/tools/config_style_checker.py index 7cfe79e77..1ffae07ae 100644 --- a/tools/config_style_checker.py +++ b/tools/config_style_checker.py @@ -134,11 +134,13 @@ def main(): args = parser.parse_args() # Allow running from root directory as well as from inside the tools directory - rootDir = "../addons" - if (os.path.exists("addons")): - rootDir = "addons" + rootDir = "../Framework" + if (os.path.exists("Framework")): + rootDir = "Framework" for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): + if ".git" in root: + continue for filename in fnmatch.filter(filenames, '*.cpp'): sqf_list.append(os.path.join(root, filename)) for filename in fnmatch.filter(filenames, '*.hpp'): diff --git a/tools/sqf_validator.py b/tools/sqf_validator.py index 645be3a6a..6676df19b 100644 --- a/tools/sqf_validator.py +++ b/tools/sqf_validator.py @@ -168,11 +168,13 @@ def main(): args = parser.parse_args() # Allow running from root directory as well as from inside the tools directory - rootDir = "../addons" - if (os.path.exists("addons")): - rootDir = "addons" + rootDir = "../Framework" + if (os.path.exists("Framework")): + rootDir = "Framework" for root, dirnames, filenames in os.walk(rootDir + '/' + args.module): + if ".git" in root: + continue for filename in fnmatch.filter(filenames, '*.sqf'): sqf_list.append(os.path.join(root, filename)) From bf972f200f6360eb80c932c448df9b30b8a6e0b2 Mon Sep 17 00:00:00 2001 From: Ollie W Date: Tue, 17 Mar 2020 20:32:52 +0000 Subject: [PATCH 13/33] Update endoftheline.sqf --- Altis_Life.Altis/SpyGlass/endoftheline.sqf | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Altis_Life.Altis/SpyGlass/endoftheline.sqf b/Altis_Life.Altis/SpyGlass/endoftheline.sqf index 4e20bafb4..681ebffb6 100644 --- a/Altis_Life.Altis/SpyGlass/endoftheline.sqf +++ b/Altis_Life.Altis/SpyGlass/endoftheline.sqf @@ -1,8 +1 @@ -/* - File: endoftheline.sqf - Author: - - Description: - -*/ #include "Hi, it appears that your client crashed. Do not worry we will get back with you in six years." From 5255a55076cabdbc3c10e1ecb045bb69fe6a882e Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 17 Mar 2020 21:35:45 +0100 Subject: [PATCH 14/33] Removal of the icons (#616) Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> Co-authored-by: Ollie W --- Altis_Life.Altis/icons/ico_mail.paa | Bin 4237 -> 0 bytes Altis_Life.Altis/icons/ico_map.paa | Bin 4237 -> 0 bytes Altis_Life.Altis/icons/ico_settings.paa | Bin 4237 -> 0 bytes Altis_Life.Altis/icons/ico_speech.paa | Bin 4237 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Altis_Life.Altis/icons/ico_mail.paa delete mode 100644 Altis_Life.Altis/icons/ico_map.paa delete mode 100644 Altis_Life.Altis/icons/ico_settings.paa delete mode 100644 Altis_Life.Altis/icons/ico_speech.paa diff --git a/Altis_Life.Altis/icons/ico_mail.paa b/Altis_Life.Altis/icons/ico_mail.paa deleted file mode 100644 index 7ff088d75fc45c0f5c1c39ae73d1b150198b1bd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4237 zcmcgveP|nH7=L@+kfjc{DH?5&fh)R%T4bMPo$VA_3XTo8^h1_5bHavWP$nB|Sd+61 z^bc`cSvQx_82<={#PdX!n^bz43a21MM3;q1-yAH;jQx^{KK zcOE|f@989+gsfsd3ukEnY>iP(G9l&lQV`|!f_s83jfB>t*hA| zIyU*-`Lq_Fe~4G!y?dGw@O~kVJs|AY#3pkD|$S3Oj1@912eX8&1MIjSY$67L2JIOlR_B= zRKr8uuuhDi%^ubxeO5f=lQ)Kjp1s_0w*zJ&e;-c>=xNElyYOvQkEgfa^oBZ2&ug|w zM;fJr+Yq7tZGZfbG8R5I<}%+o>o|_-^=eJ3yHyk@pGn=TO-~n#6o>Uu&EaylQhciv z*2UB`%a2-;OKuyklv1UHNLdhqxLmQYTAI`&@p!@RFAy9Wq8Q`l3*`XCquO>Y7At@U zQz7y#R|11;em_0`c<^rbT!xU{K40fz{at&d{glRsqR8}5>jC}6lvQ6@4})Ip0FzM_7yOJr z=+*i1{dxHKze?p7q9f16_D>ksq=4G-bg!e1_3)pzK>>K~9Lq0b*- z{okaXk8;gf7Qab7HVM8~(0ItlElj5<9@V^>TM(Kl#`-xDBC}&Y;UFi>!jjRr~tz zYMU_MK5B1Q|2ju}8P;DTif8hQ;9&I%DNb2Pj76ya0eNZq2V|$jH8imP4naN~tpdwO zNEuOlgmX|nq4dTHf1YRY_i0B@t-KKMQ~RiX^c1uUTTfwqpB5J@Gt`c_P!V6DcoN6+ z{VbpRwDD6nivpY&W`077B(yYG^$00`WsIN6Q@bDd^0WRys=sZ?`m+LTcWl2OQJ$7y zJ*TLD$gjjX;%vQz^{ik7`&hrXtH+~PR@nHZ^>n(U;*pohTSV zIv>v?S1QZ=c{NXTc+6#scPuIvZ~EwXr*s_l15Tj&v%=E)KcsA$G=f=H&#AO$a?1*y z#hXgE$%tsYsq~1FFp7*{D1A|h!+~hoLutaL*m}K@zLbXj-!>oYBx3XLSNMo^{#X4~ zj3LY4h%y!IWATs=aanwDKPc^neyQ#Mc$(q)X09I0v+3zU=igTOe6-Gi1kD*+v7f}^ zHHx9XWLIk{Me&HzCc6{XeFyhX!nxRd+%H`21e<>`9a8M~AH??i4~{RC%S<2o<7ce% zU_jm~^N~C3{HyYdLBBJ;vq=)Ku=DRh{l8(4bl_|0U?a}M{7lW?Q;qr4MppRob;8xN z{d+c95(cqI}r;2l;cj{A>CLFdw*`+Hkzm z%l3O5A1Mce)LzvK7ha0nAUw-TqzsBRTZuUwuj+c=W3QHzk6Tr zzrO#}f3)hr`%o44HzdzV#627tfoj_E z6s%@Do`d_R9XF}}j2Dkz?2pDXhCt-HxsECy-s8Df&&PiLOn)BhJq+(hkGyeq`}Hs2 zm37ertZSJ!4Tw5zV-RDq8cEyPb?{0_@pG<2Z|2|?m|_F-_uKhAMux}j Oe5fSK*TVPW;lJxZ0B}obN3#o z(;98s$(H=_?{{~<@BMyv_g)k#E-oln7grRl0|1=+$ZiXBWx+1O2sgsT1=Y>#gTZv{PoIshF^e^&eRv$ezd|BYxM{m@er7(SE;@`X5P2G=#2+% z4*;+`O^(_&hF#pApBy7epuGx_#U;Uw@?TK{ig7|nxdR>cmEuMjp&u-O=;&yHYka`^ zMMz+5Z*2V8D!y{%iogMnV$0)O1-7_`{C+>>8ehQkF4AZo|1kefJ}w>-f1LpUtS8fb zBy=IH2Ub)HdLum_*o??5MkwIH@|pg_3m2~f zh2oT8?{i`KOn<=h^KoF9tfO{|>&IgN$mEYKo(OJgy;EG}0HCz4PPJBlQMq~F+vX;w z9|cL40cdd~+S4m(8F&8ucQ+cO7RISp`9El45q609U;NYZZ;lU* zFh=N!3tU=mcTqXI^9~B+6Te24sxjgnIbg_d2ue<_!yjTN`KRNxdn@gDceDI^7h4=+ zPW7kwG$Oki)%yVy>izjdxhz@RPz}S42$BQ&4UO|(|8a{ zEQClCC-6ONuh~I4(6A#Lg4_2fw|h^iyEkv%j3AII@aI?v>uYTM#`*^r)!x`lp`N{q zgNw5COcNbn?e{Lm;)18#?pOO`GC5|S4z~Mavbej{?hOtGLB=Sv5Bl}V&2^IoY9Ckc z&cOBh8fAoDQ76olvGvECwajSX{{TBXlaSyu4gP`@iVspUzE-lT-cm-bj9N zO2Q2nQn+&dUH)&~fCB&t`AqTlaAL0acDTUjS~lO{;`BVYE%={%aPe)V9a7MErkAU1 z;{IpceReP`_$%$Yr>|?8*?RQm>67t#bkY8M3w!f$IBb1-^SbeRfl6xE8{w8#ZEh@O zex{@`gz)*blK;1yxc>15h^YV1^=~%mjj@tgBOOm^H=D91LM(p`^S3Ng>4m-2F6C#& z0dPXfmzTEb6beN;Ws9rDF+3WYqwL|8cBI`Q$|rBt#DZFCN9cnl?LQ4Mlq((C$#7WM zkB9lOou==^F#Dsnu`anxCZqnm)oi-C|J`b;zsK}&`R_61aIwEUF)AMK*=`|Uf4ihN zzBYA)-G4V8%um%;)-wG{`_##}sHiB~zsjLE;`3QW86l^>ljuM>8kCfYX*NY0);OZ$`j89qPyDb51((}H2->I0yh$u#`ZTE zZ$pUdrsGRJ>w0T{dO=G0%+ladEp&$O5i$oqQ}=3|46yoF+M#h$_1ppKkC5IdzTe1w z^NDYf?I)!@hZCR22qkc0e}tC%#rn;rYyJ2>Izq=co1k&n-Flts&*2_Uzm4}D#OF23 zr;Y!9hnU-zMi0u@ub0#L+LoT`_})NoFXda#-|wBZ*;qZ-_>MQ-&B}68`y9@nSdY@q zTZf+fitP{Hnn3i|3I5mm#r__CtV^t4Z^X}MBK;(PpT2tUHr1c-kopt2u`Z)^+g&<8 zG%ok=%>Rg;2a@^DF1cLJ>TTS$)c(P;u8jJhn<>)OPHa!6++#YgGsXz}*TeUicIz&& z{n6*j;Q}aBP5p@-I&<0i;NhXMvbuuRhm9{gCf1+Bm95gB!!7sUKGTS({%ieTpa1MV z=K4>}FC~$ANxfNu_vcXX1RC(YtV2-B_V;Q2@XY-=ixiM#Qkl20vD&N=EZgpi{&x@9PVbVaNdymLt0_K6ON7&;yI1$ zH6)5J60b^?J%{dUTfcm?vy14fYhJtmlkoFTN6G0_GB44OHb&i)jK=R7>r#NTacOM7 zU+X`w!^5-ve#DtsFA<%$Q=hdtog*XcynOF7-LXo2XYAR&YsUg(vTrX0~PI~8Al^qGdF6*ut2AManD-_o>y8P|`@1Yz^X zxZ^Hq3FpL%A%*Y|;Swp3;P(xDTrl3XhRO4{*xu(_&An^vmG;$k-nyE}eMZJZS{!$3 zAb$d@*=d3BzRWOm^_*`T;X@h-qxZh~!`b)oE9;u}wfaRqWOc}5C4pz(OvSI1lv6VH nzv#xVz?AVr$VsvN|IJAm>HEa-Yyi!j;&`Ye8n3|QAKLx}&GpUJ diff --git a/Altis_Life.Altis/icons/ico_settings.paa b/Altis_Life.Altis/icons/ico_settings.paa deleted file mode 100644 index 28769cfcd44209827de38fbb40f2cba86fab5e01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4237 zcmcha4NO~A6vuBrjKCyxy1A$IgT^+jThNiggvg{|fM6s##-j|GFebVUXIPf%*kr9p zrV=tIDMo8$IPAu%6+@&^35a4Ukd53 z=YE|3IrpA>-)%x+VQ%RYg=M))givQ^rzgVYxy6J9{17h8eX4-44F3_{T~P3}0e`pP zzyJ0akO3hT9YYYvR|EcS?v;FX4S6R|94*T zXX?W0{FXOSQJePZrpH&gELM-mD=kDO>J5gwd)@oC7Mxz*8Agb0*ToA>>myAnC-e1k zWGRPU9efvqkZ}o^7S-i_UUAVv@^h|ZNAy$7use9jt?mDVpSR`8wp#@H>A@Klxs^;kV@RHX^ z_5EOv=GA!o3jH}gU%wpck&9f5`Hw~54qmHS4!t20nb?=7fM;UH@3rcp;vMVHwq~v7 zK*f^>3rdA)oXwmd)=%_A#NmIWz>x1ODmtUYA40?q^94C&jDBU5-d(K`y;NUg_*R9n zJzk>ESz3YkLW>&c5(i61K--8Xsqs0@c5c#r>j^3>Hi3vgrjj{UFd zmga#Q{3KrEH-U*>X+BiV%7}h}Me=0)S*!m3K(ziVClvQc#}A*-YHnO>nS=Qo!{^hG zA~6xz!++q%)s@DR<1b_(G;Rbt$4_ErS>PZ?_HRap$i3EwPoAs-Zt(AFEj5bmw>5j2 zPWxwceb@pM%yK9^4DGL+h}Pd9SX=&Wf$PcA^%@3u`VQA+4+>_m_ga-2bLC5B$iHok`WyUSMykKK&dX$9yGi}c^!-+YWa4_Z z1&Zr%B;sLyb!c;5B@PggV_kj_O%4-X_<< zClO8%%%AB~YEni_jlktTvYzAVdif~K_!74En842Acp&r~58NN9)pvIfi~_&cx2tty z``%gLKR?0id+Y|?Z*A5t=JB(GG#|FWj6H)jjX?Viju){1*uT~NU+!C*{!CwP+z=iB z#uEgs#yK(~ng2YA&l6z3T;XM;_2CD5jY^?VybbozftHe?Lx+}uKf?8LDfMR-c*cGy zE3|myAz;QgV`uqrH?Sa>T#2k0f5H|Cr#miJ;A`OyXm4_LF=p0O5Bixk>fhvv%ai6m zds5ZBRWQ^2mG0P_ckp1t{V?BslNYjBV|@bfl@qmkMZ8!KkF=gFKR@t#+|ZD?zSA9~UL(5S`UAbzyN3tqeEosAyaXh+XI(8NbAwBJ!5>op z5R$LnlX2yD9cgv!bkXq`pUL%z-qi=~GkrR}W$0KXusSrs$YhB+;03O@?s!6XCvcEc zH80GG^>2ftMuq)93HnC|{#pO_-R}M0xL;J0aY(-V7w1F5;yc19uE&PFVR~N2Q2Kn^Xy`K-YtZzn<*; zb$%z<8^ihfXNR}Y{zQLDyjV}k{R~;gX}x4!xpBwJX6bnRzy!mxBOAAegxMCWQ4=r4*o1~I(=FBZ~|}#uhih< zn6B3#SEGv8jZpURad}RsX!qdz-ASXA^YzmH9$u&Ko0ZyY_0CU44hfgCoHs@8!1w>> zB;%2IVZBJ0h{#JO=P8btWxX$F`i_sszI_ktf2Ohwzp$-5pkL&b{43s9?SE^>^J@5g z^N;gaez~{q09ikZK9;Tj3im9Q7m@u$?k}$qE|Q}?_&!zU* z_8-KIpNZ=kX)jb^zqJcFJoXRaf;g|RbbtR@IEDCIj{|&r#k)JNet}@w2IX{TDHlL>>W zA*3g@6vb(&nugVJC@3m4k$j$WWt;6fU3O`^+O7YXJ(y94>|9`*B@~9@EzUKHr0aV+ zz299;NHH5bY@?6gyWe}?_ul<}rv}aA+1vY=r*H2T#@O-8zx!jApW54ltigrs+1u?# zu7h9X{ciUYF8CaQ-~aA%F&AUo_!^pqA6@W2{nFX%{o&kHF!K=mak*;up546)%uZ;x zbcRg9|KzXRH*#r%{eR6APtWICvc{2Ptm|a^6R$l|(c|}R)MK!&&|p;Wa{b`9QwN>y zSml?~jCtREpjmrud)1{!{^BS$f$myN2j{Hi^(EqeXJZQ%6JJ-Qv}JwCOZIhbQDI&$ z=NsBu_D+oc5tILa3R0T+`uY7BFJWTLCkK4*?>pBzVR(9E#s(scfu3ENSIeJvqaJVH zQ-)qWv%B_81>2?uA4Wp`5C7{6Su3B>Y{^fy)mbcDZ;!lFa(2j*r01=<9@!~fTqlk# z1Z9iG+CeO(p&nM}1o5JBK5ZSBx&NZ_=QLxYY}kP#B4n;-i2k`^xStr;OXQ9`LyYkf zS8@VzaISkgmn(Aap57`Ya(Usdt8bUSA71lZJ;&IS0|Ty&`rW-#2j81|k?Yq=*k#6S z$@zHmt_hz1&S_iHDamDu*A4ZsIwfw$_*UmQ*K>X$IOmkhT<`e>hXl)Bp!+YYZ_H_$ z*GashbA zC(V3*%4)0JT#c(|P|-?-geXG8iI)q2CSFk=#c?3Jx>f2wWITTr)hWT_(MxuxWJ^YJ z#UsQvDId>Ogs|pimL2djze)Y`@#9ge%_-4(R+xtl)4bb~FO0x8{4Cj5)Uo)UmO7K( zWi^HA*YYo`%POkd6z9$UAAhSpD{5Elnk&NNS(DBfWA)9nz7_fh?XQr25wgYp>ec@4 z{(m|0Lewc4^PP{6jhLVJKNQ@8d|#)X;;pEeLaE=_-!kfQ*4)o!u#0k;&u^7Q?ar+E zxP7INDQID1eT*kB8Jx-51?|T5>y*!Yd@Pp8R|L|39ICS!{bR9xf?5BUBgbP7Q~xhy z&%V?I7sbmIE@VY*o#(q;n8}JTJ%)WI%c=vQcOZjy)4bn~BO(rf?q6N6qJ@buUS3Nt z5ua98U%7rmT_+wJ8IC4!KdjAvAi6pIfv7!XZSCOuTPhZSc`)|-!^&*Xe)oL}#hb~V zRvezFhtB=R;TlhyWI}B!? ze}jKdvw1#`MMbLw0`>j|V#%l`%e>#oXds%0yU9Kn9TdboJPtK~j2}tmz(v0wSunj1 zV!mGsJ|F2{_1|9q?)_8GeLOYThU?(|c%gJt(MoS?v;NN<%u-)R>o*Rq`r&;?CdTz) zKj8IvK4cGR<#nzH^MUsvetu&9vTW4r7(7qr{Seu_-wg`Duz^uLkKhTxd_#kEy`E50 zCwsj^$q)_vh?ch6S!55OCQenBCto^9~{^Lkgj9SQYo+Z(Rb zN!#|H^Y37FEf2hFUJvB*{SfLAw6u2c{S4z}ibY-zjF%GxAK5XVD@TPR+TW}CcC7k8cnm(dw$FC1ZGC_FlXIZ| z$pd}fntTXNcTzoc{q>{Uo*RDX7j5MCqrcujnRD>|Vdn3hxifF{Pr~_SzMtZ0KFGWMR%bOI_`-CvK9c&&ZwhwI z_Yk~~H2wUYpMCWqd}ZBm-B!QJ2djg{YGXfrryagh65sC#Jez^9z{C#5PMGcgZ*Fru Wc+i|rD?4=3oDWH&d=19`(De Date: Tue, 17 Mar 2020 21:44:45 +0100 Subject: [PATCH 15/33] selectRandom and selectMin (#628) * Update fn_captureHideout.sqf * selectRandom pt.2 * BIS_fnc_lowestNum > selectMin Co-authored-by: Ollie W Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> --- Altis_Life.Altis/core/actions/fn_captureHideout.sqf | 4 ++-- Altis_Life.Altis/core/actions/fn_processAction.sqf | 6 +++--- Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf | 2 +- Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf index f3e630208..4232fba43 100644 --- a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf +++ b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf @@ -80,7 +80,7 @@ if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "ST life_action_inUse = false; titleText[localize "STR_GNOTF_Captured","PLAIN"]; -private _flagTexture = [ +private _flagTexture = selectRandom [ "\A3\Data_F\Flags\Flag_red_CO.paa", "\A3\Data_F\Flags\Flag_green_CO.paa", "\A3\Data_F\Flags\Flag_blue_CO.paa", @@ -89,7 +89,7 @@ private _flagTexture = [ "\A3\Data_F\Flags\flag_fd_green_CO.paa", "\A3\Data_F\Flags\flag_fd_blue_CO.paa", "\A3\Data_F\Flags\flag_fd_orange_CO.paa" - ] call BIS_fnc_selectRandom; + ]; _this select 0 setFlagTexture _flagTexture; [[0,1],"STR_GNOTF_CaptureSuccess",true,[name player,(group player) getVariable "gang_name"]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; _hideout setVariable ["inCapture",false,true]; diff --git a/Altis_Life.Altis/core/actions/fn_processAction.sqf b/Altis_Life.Altis/core/actions/fn_processAction.sqf index e47edc0b1..a7abb756f 100644 --- a/Altis_Life.Altis/core/actions/fn_processAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_processAction.sqf @@ -54,7 +54,7 @@ if (_vendor in [mari_processor,coke_processor,heroin_processor]) then { _cost = _cost * (count _oldItem); -_minimumConversions = _totalConversions call BIS_fnc_lowestNum; +_minimumConversions = selectMin _totalConversions; _oldItemWeight = 0; { _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1); @@ -113,7 +113,7 @@ if (_hasLicense) then { } count _newItem; "progressBar" cutText ["","PLAIN"]; - if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; + if (_minimumConversions isEqualTo (selectMin _totalConversions)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; life_is_processing = false; life_action_inUse = false; } else { if (CASH < _cost) exitWith {hint format [localize "STR_Process_License",[_cost] call life_fnc_numberText]; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; @@ -139,7 +139,7 @@ if (_hasLicense) then { } count _newItem; "progressBar" cutText ["","PLAIN"]; - if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; + if (_minimumConversions isEqualTo (selectMin _totalConversions)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; CASH = CASH - _cost; [0] call SOCK_fnc_updatePartial; life_is_processing = false; diff --git a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf index c25d06063..948362f6f 100644 --- a/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf +++ b/Altis_Life.Altis/core/shops/fn_vehicleShopLBChange.sqf @@ -92,7 +92,7 @@ _numberindexcolorarray = []; for "_i" from 0 to (count(_colorArray) - 1) do { _numberindexcolorarray pushBack _i; }; -_indexrandom = _numberindexcolorarray call BIS_fnc_selectRandom; +_indexrandom = selectRandom _numberindexcolorarray; _ctrl lbSetCurSel _indexrandom; if (_className in (LIFE_SETTINGS(getArray,"vehicleShop_rentalOnly"))) then { diff --git a/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf b/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf index fbe7f6b87..603f50fcb 100644 --- a/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf +++ b/Altis_Life.Altis/dialog/function/fn_spawnConfirm.sqf @@ -17,7 +17,7 @@ if (life_spawn_point isEqualTo []) then { if (isNil {(call compile format ["%1",_sp select 0])}) then { player setPos (getMarkerPos (_sp select 0)); } else { - _spawnPos = (call compile format ["%1",_sp select 0]) call BIS_fnc_selectRandom; + _spawnPos = selectRandom (call compile format ["%1",_sp select 0]); _spawnPos = _spawnPos buildingPos 0; player setPos _spawnPos; }; @@ -39,13 +39,13 @@ if (life_spawn_point isEqualTo []) then { }; {_bPos = _bPos - [(_house buildingPos _x)];} forEach (_house getVariable ["slots",[]]); - _pos = _bPos call BIS_fnc_selectRandom; + _pos = selectRandom _bPos; player setPosATL _pos; } else { player setPos (getMarkerPos (life_spawn_point select 0)); }; } else { - _spawnPos = (call compile format ["%1", life_spawn_point select 0]) call BIS_fnc_selectRandom; + _spawnPos = selectRandom (call compile format ["%1", life_spawn_point select 0]); _spawnPos = _spawnPos buildingPos 0; player setPos _spawnPos; }; From 0149658e2c51ec649881062417d35bc71711fff2 Mon Sep 17 00:00:00 2001 From: Edward Date: Tue, 17 Mar 2020 21:46:23 +0100 Subject: [PATCH 16/33] wantedCrimes params (#629) Co-authored-by: Ollie W Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> --- life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf | 2 +- life_server/Functions/WantedSystem/fn_wantedCrimes.sqf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf b/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf index 212ba7341..562c904af 100755 --- a/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedCrimes.sqf @@ -15,7 +15,7 @@ disableSerialization; params [ ["_ret",objNull,[objNull]], - ["_criminal",[],[]] + ["_criminal",[],[[]]] ]; private _query = format ["selectWantedActive:%1", _criminal select 0]; diff --git a/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf b/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf index 176898f0f..dfdceec55 100755 --- a/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedCrimes.sqf @@ -13,7 +13,7 @@ disableSerialization; params [ ["_ret",objNull,[objNull]], - ["_criminal",[],[]] + ["_criminal",[],[[]]] ]; private _query = format ["selectWantedActive:%1", _criminal select 0]; From 4956654a94f6aabbe69f970632b674e3e4e08088 Mon Sep 17 00:00:00 2001 From: Edward Date: Wed, 18 Mar 2020 17:22:11 +0100 Subject: [PATCH 17/33] Add diag_log to life_hc, as it's in life_server (#630) Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> --- life_hc/MySQL/Housing/fn_addHouse.sqf | 4 ++++ life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf | 3 +++ 2 files changed, 7 insertions(+) diff --git a/life_hc/MySQL/Housing/fn_addHouse.sqf b/life_hc/MySQL/Housing/fn_addHouse.sqf index 446a2295e..4fc9c4e40 100755 --- a/life_hc/MySQL/Housing/fn_addHouse.sqf +++ b/life_hc/MySQL/Housing/fn_addHouse.sqf @@ -19,6 +19,10 @@ if (isNull _house || {_uid isEqualTo ""}) exitWith {}; private _housePos = getPosATL _house; private _query = format ["insertHouse:%1:%2", _uid, _housePos]; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log format ["Query: %1",_query]; +}; + [_query, 1] call HC_fnc_asyncCall; uiSleep 0.3; diff --git a/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf b/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf index 8d18d4b72..eaa133e51 100755 --- a/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedFetch.sqf @@ -42,6 +42,9 @@ if (_units isEqualTo []) exitWith {[_list] remoteExec ["life_fnc_wantedList",_re private _query = format ["selectWantedActiveID:%1", _inStatement]; private _queryResult = [_query, 2, true] call HC_fnc_asyncCall; +if (EXTDB_SETTING(getNumber,"DebugMode") isEqualTo 1) then { + diag_log format ["Query: %1",_query]; +}; { _list pushBack _x; From fee7a310f7a2908debb603633b0c248f681bfe12 Mon Sep 17 00:00:00 2001 From: DomT602 <32492434+DomT602@users.noreply.github.com> Date: Thu, 19 Mar 2020 15:01:51 +0000 Subject: [PATCH 18/33] Reveal objects rework (#603) * Initial commit * Player tag change * Remove tabs * Missing paycheck message Co-authored-by: Jason_000 --- Altis_Life.Altis/config/Config_SpyGlass.hpp | 4 ++-- Altis_Life.Altis/core/configuration.sqf | 2 -- Altis_Life.Altis/core/fn_survival.sqf | 1 + .../core/functions/fn_playerTags.sqf | 8 +++----- .../core/functions/fn_revealObjects.sqf | 2 -- Altis_Life.Altis/core/init.sqf | 8 ++++++-- .../core/pmenu/fn_s_onCheckedChange.sqf | 20 +++++++++---------- .../core/pmenu/fn_settingsMenu.sqf | 8 +++----- 8 files changed, 25 insertions(+), 28 deletions(-) diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 5bfb756c6..83105abe7 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -323,7 +323,7 @@ class SpyGlass { { "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_settings_revealobjects", "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" }, + { "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" }, @@ -351,7 +351,7 @@ class SpyGlass { { "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", "STRING" }, { "h1_3", "OBJECT" }, { "bis_pp_burnparams", "ARRAY" }, + { "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"}, diff --git a/Altis_Life.Altis/core/configuration.sqf b/Altis_Life.Altis/core/configuration.sqf index 5f70b0cc7..fa8485c9e 100644 --- a/Altis_Life.Altis/core/configuration.sqf +++ b/Altis_Life.Altis/core/configuration.sqf @@ -47,8 +47,6 @@ life_firstSpawn = true; //Settings life_settings_enableNewsBroadcast = profileNamespace getVariable ["life_enableNewsBroadcast", true]; life_settings_enableSidechannel = profileNamespace getVariable ["life_enableSidechannel", true]; -life_settings_tagson = profileNamespace getVariable ["life_settings_tagson", true]; -life_settings_revealObjects = profileNamespace getVariable ["life_settings_revealObjects", 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]; diff --git a/Altis_Life.Altis/core/fn_survival.sqf b/Altis_Life.Altis/core/fn_survival.sqf index b6593723d..cb39a1f33 100644 --- a/Altis_Life.Altis/core/fn_survival.sqf +++ b/Altis_Life.Altis/core/fn_survival.sqf @@ -59,6 +59,7 @@ private _fnc_paycheck = { } else { systemChat localize "STR_MissedPay"; }; + systemChat format [localize "STR_FSM_Paycheck",(getNumber(missionConfigFile >> "Life_Settings" >> "paycheck_period"))]; }; //Setup the time-based variables. diff --git a/Altis_Life.Altis/core/functions/fn_playerTags.sqf b/Altis_Life.Altis/core/functions/fn_playerTags.sqf index bc8bc4134..9dd15ef7b 100644 --- a/Altis_Life.Altis/core/functions/fn_playerTags.sqf +++ b/Altis_Life.Altis/core/functions/fn_playerTags.sqf @@ -6,8 +6,6 @@ Description: Adds the tags above other players heads when close and have visible range. */ -if (!life_settings_tagson) exitWith {}; -private ["_ui","_units","_masks"]; #define iconID 78000 #define scale 0.8 @@ -15,16 +13,16 @@ if (visibleMap || {!alive player} || {dialog}) exitWith { 500 cutText["","PLAIN"]; }; -_ui = uiNamespace getVariable ["Life_HUD_nameTags",displayNull]; +private _ui = uiNamespace getVariable ["Life_HUD_nameTags",displayNull]; if (isNull _ui) then { 500 cutRsc["Life_HUD_nameTags","PLAIN"]; _ui = uiNamespace getVariable ["Life_HUD_nameTags",displayNull]; }; -_units = nearestObjects[(visiblePosition player),["CAManBase","Land_Pallet_MilBoxes_F","Land_Sink_F"],50]; +private _units = nearestObjects[(visiblePosition player),["CAManBase","Land_Pallet_MilBoxes_F","Land_Sink_F"],50]; _units = _units - [player]; -_masks = LIFE_SETTINGS(getArray,"clothing_masks"); +private _masks = LIFE_SETTINGS(getArray,"clothing_masks"); private _index = -1; { diff --git a/Altis_Life.Altis/core/functions/fn_revealObjects.sqf b/Altis_Life.Altis/core/functions/fn_revealObjects.sqf index 075dfa6e5..d3f36315a 100644 --- a/Altis_Life.Altis/core/functions/fn_revealObjects.sqf +++ b/Altis_Life.Altis/core/functions/fn_revealObjects.sqf @@ -8,8 +8,6 @@ Can be taxing on low-end systems or AMD CPU users. */ -if (!life_settings_revealObjects) exitWith {}; - private _objects = nearestObjects[visiblePositionASL player, ["Land_CargoBox_V1_F","Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Money_F","Land_Suitcase_F","CAManBase"], 15]; { player reveal _x; diff --git a/Altis_Life.Altis/core/init.sqf b/Altis_Life.Altis/core/init.sqf index 24a97d5b5..72c1e26e7 100644 --- a/Altis_Life.Altis/core/init.sqf +++ b/Altis_Life.Altis/core/init.sqf @@ -76,8 +76,12 @@ diag_log "[Life Client] Past Settings Init"; 0 cutText ["","BLACK IN"]; -addMissionEventHandler ["EachFrame", life_fnc_playerTags]; -addMissionEventHandler ["EachFrame", life_fnc_revealObjects]; +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 { diff --git a/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf b/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf index 3a3269fce..dfbce176f 100644 --- a/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_s_onCheckedChange.sqf @@ -6,30 +6,30 @@ Description: Switching it up and making it prettier.. */ -private ["_option","_state"]; -_option = _this select 0; -_state = _this select 1; +params [ + ["_option","",[""]], + ["_state",0,[0]] +]; +if (_option isEqualTo "") exitWith {}; -switch (_option) do { +switch _option do { case "tags": { if (_state isEqualTo 1) then { - life_settings_tagson = true; profileNamespace setVariable ["life_settings_tagson",true]; + LIFE_ID_PlayerTags = addMissionEventHandler ["EachFrame", life_fnc_playerTags]; } else { - life_settings_tagson = false; profileNamespace setVariable ["life_settings_tagson",false]; + removeMissionEventHandler ["EachFrame",LIFE_ID_PlayerTags]; }; }; case "objects": { if (_state isEqualTo 1) then { - life_settings_revealObjects = true; profileNamespace setVariable ["life_settings_revealObjects",true]; - LIFE_ID_RevealObjects = ["LIFE_RevealObjects","onEachFrame","life_fnc_revealObjects"] call BIS_fnc_addStackedEventHandler; + LIFE_ID_RevealObjects = addMissionEventHandler ["EachFrame", life_fnc_revealObjects]; } else { - life_settings_revealObjects = false; profileNamespace setVariable ["life_settings_revealObjects",false]; - [LIFE_ID_RevealObjects,"onEachFrame"] call BIS_fnc_removeStackedEventHandler; + removeMissionEventHandler ["EachFrame",LIFE_ID_RevealObjects]; }; }; diff --git a/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf b/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf index 912b308ee..96d988b81 100644 --- a/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_settingsMenu.sqf @@ -24,14 +24,12 @@ ctrlSetText[2922, format ["%1", life_settings_viewDistanceAir]]; } forEach [[2901,life_settings_viewDistanceFoot],[2911,life_settings_viewDistanceCar],[2921,life_settings_viewDistanceAir]]; -if (isNil "life_settings_revealObjects") then { +if (isNil "life_settings_enableNewsBroadcast") then { life_settings_enableNewsBroadcast = profileNamespace setVariable ["life_enableNewsBroadcast",true]; life_settings_enableSidechannel = profileNamespace setVariable ["life_enableSidechannel",true]; - life_settings_tagson = profileNamespace setVariable ["life_settings_tagson",true]; - life_settings_revealObjects = profileNamespace setVariable ["life_settings_revealObjects",true]; }; CONTROL(2900,2971) cbSetChecked life_settings_enableSidechannel; CONTROL(2900,2973) cbSetChecked life_settings_enableNewsBroadcast; -CONTROL(2900,2970) cbSetChecked life_settings_tagson; -CONTROL(2900,2972) cbSetChecked life_settings_revealObjects; +CONTROL(2900,2970) cbSetChecked (profileNamespace getVariable ["life_settings_tagson",true]); +CONTROL(2900,2972) cbSetChecked (profileNamespace getVariable ["life_settings_revealObjects",true]); From e91e463eeba881fdd6a52c1b2a857cca5da32917 Mon Sep 17 00:00:00 2001 From: Blackfisch Date: Tue, 24 Mar 2020 22:03:40 +0100 Subject: [PATCH 19/33] vehicle sell confirmation (#634) * add confirmation to vehicle selling * spawn because of scheduled * Travis? * Apply closeDialog suggestions from code review Co-Authored-By: Ollie W Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> Co-authored-by: Ollie W --- .../dialog/function/fn_sellGarage.sqf | 12 ++++++++- Altis_Life.Altis/dialog/impound.hpp | 4 +-- Altis_Life.Altis/stringtable.xml | 26 ++++++++++++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf index f291d1192..c078be048 100644 --- a/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf +++ b/Altis_Life.Altis/dialog/function/fn_sellGarage.sqf @@ -46,6 +46,16 @@ _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 { [_vid,_pid,_sellPrice,player,life_garage_type] remoteExecCall ["HC_fnc_vehicleDelete",HC_Life]; } else { @@ -66,4 +76,4 @@ if (LIFE_SETTINGS(getNumber,"player_advancedLog") isEqualTo 1) then { }; life_action_delay = time; -closeDialog 0; \ No newline at end of file +closeDialog 0; diff --git a/Altis_Life.Altis/dialog/impound.hpp b/Altis_Life.Altis/dialog/impound.hpp index 6fcc8691a..fd58e4beb 100644 --- a/Altis_Life.Altis/dialog/impound.hpp +++ b/Altis_Life.Altis/dialog/impound.hpp @@ -76,7 +76,7 @@ class Life_impound_menu { class SellCar: Life_RscButtonMenu { idc = -1; text = "$STR_Global_Sell"; - onButtonClick = "[] call life_fnc_sellGarage; closeDialog 0;"; + onButtonClick = "closeDialog 0; [] spawn life_fnc_sellGarage;"; x = 0.26 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH)); y = 0.9 - (1 / 25); w = (6.25 / 40); @@ -126,4 +126,4 @@ class Life_impound_menu { h = (1 / 15); }; }; -}; \ No newline at end of file +}; diff --git a/Altis_Life.Altis/stringtable.xml b/Altis_Life.Altis/stringtable.xml index 3a2699e27..bc3cd7fe1 100644 --- a/Altis_Life.Altis/stringtable.xml +++ b/Altis_Life.Altis/stringtable.xml @@ -2626,6 +2626,30 @@ Nie ma pojazdu w pobliżu NPC NPC附近没有载具。 + + Are you sure you want to sell your %1 for $%2? + Opravdu chcete prodat svůj %1 za $%2? + ¿Estás seguro de que quieres vender tu %1 por $%2? + Вы уверены, что хотите продать свой %1 за $%2? + Bist du sicher, dass du deine(n) %1 für $%2 verkaufen möchtest? + Êtes-vous sûr de vouloir vendre votre %1 pour $%2 ? + Siete sicuri di voler vendere la vostra %1 per $%2? + Tem a certeza que quer vender a sua %1 por $%2? + Jesteś pewien, że chcesz sprzedać swój %1 za $%2? + 你确定要把你的%1卖给%2? + + + Sell vehicle + Prodat vozidlo + Vender el vehículo + Продать автомобиль + Fahrzeug verkaufen + Vendre un véhicule + Vendere il veicolo + Vender veículo + Sprzedaj pojazd + 出售车辆 + @@ -13391,4 +13415,4 @@ %1 - %2 将 $%3 存进他们的银行账户。银行存款余额:$%4 手上现金:$%5 - \ No newline at end of file + From 24ec1de1ce1a211cc35c27bcc1118721e34d4e79 Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:10:49 +0000 Subject: [PATCH 20/33] Move to GH Actions --- .github/workflows/validate.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .github/workflows/validate.yml diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 000000000..c70fbab43 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,21 @@ +name: Validation + +on: + push: + branches: [ master, v5.X.X ] + pull_request: + branches: [ master, v5.X.X ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: '3.4' + - name: Validate SQF + run: python ./tools/sqf_validator.py + - name: Validate Configs + run: python ./tools/config_style_checker.py From 7a2e321e72b50048b1119119d4bbc0fd390ab79c Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:11:54 +0000 Subject: [PATCH 21/33] Python -> 3.6 --- .github/workflows/validate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index c70fbab43..4b9274448 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v1 with: - python-version: '3.4' + python-version: '3.6.10' - name: Validate SQF run: python ./tools/sqf_validator.py - name: Validate Configs From e6b94e8c245a89b5d74abfd5fc2d9520a6e440e8 Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:15:34 +0000 Subject: [PATCH 22/33] Update validate.yml --- .github/workflows/validate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 4b9274448..9c55e12e4 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -7,7 +7,7 @@ on: branches: [ master, v5.X.X ] jobs: - build: + validate: runs-on: ubuntu-latest steps: From 79a059be8899c0176c40dde931f623035ba3408c Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:28:02 +0000 Subject: [PATCH 23/33] Alt. branches syntax --- .github/workflows/validate.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 9c55e12e4..3b126b7bd 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -2,9 +2,13 @@ name: Validation on: push: - branches: [ master, v5.X.X ] + branches: + - 'master' + - 'v5.X.X' pull_request: - branches: [ master, v5.X.X ] + branches: + - 'master' + - 'v5.X.X' jobs: validate: From a07ee910f60808965a8c3d7488df60f91d351e1b Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:36:05 +0000 Subject: [PATCH 24/33] Delete .travis.yml --- .travis.yml | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d4d726af1..000000000 --- a/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: python -python: -- '3.4' -script: -# Credits to ACE3 for these validators -- python3 tools/sqf_validator.py -- python3 tools/config_style_checker.py From 333c259aa52aac509539a7824679c1bf5771ccfd Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:41:22 +0000 Subject: [PATCH 25/33] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fda112d77..5b7bda3da 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ AsYetUntitled, formerly Altis Life RPG and ARMARPGLIFE is a rolepl This Github is not currently associated with any forums. +![Validation](https://github.com/AsYetUntitled/Framework/workflows/Validation/badge.svg?branch=master) + # Features: - Police, Civ and Medic roles From 941fdbe42ebbbcd132f604c87d3037b0c6db2c18 Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 25 Mar 2020 16:41:34 +0000 Subject: [PATCH 26/33] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index 5b7bda3da..97cc94022 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,7 @@ Altis Life RPG by AsYetUntitled is licensed under a [Creative Commons Attributio - Releases (Stable Builds): https://github.com/AsYetUntitled/Framework/releases

- - Build Status - - + Join the chat at https://discord.gg/ajGUDSH

From 3e36b4981cf43e7bb7cffd357a43f90425b3210c Mon Sep 17 00:00:00 2001 From: Edward Date: Wed, 25 Mar 2020 19:53:39 +0100 Subject: [PATCH 27/33] returns rental vehicles (#635) * returns rental vehicles * Config option * Fix that weird mistake * Naming conventions Co-authored-by: Jason_000 Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> --- Altis_Life.Altis/config/Config_Master.hpp | 1 + Altis_Life.Altis/stringtable.xml | 14 +++++++++++++- life_hc/MySQL/Vehicles/fn_vehicleStore.sqf | 9 ++++++++- life_server/Functions/Systems/fn_vehicleStore.sqf | 9 ++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index ee56fada6..bb50a1c53 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -145,6 +145,7 @@ class Life_Settings { 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 Purchase Prices */ vehicle_purchase_multiplier_CIVILIAN = 1; //Civilian Vehicle Buy Price = Config_Vehicle price * multiplier diff --git a/Altis_Life.Altis/stringtable.xml b/Altis_Life.Altis/stringtable.xml index bc3cd7fe1..7d45f9ba8 100644 --- a/Altis_Life.Altis/stringtable.xml +++ b/Altis_Life.Altis/stringtable.xml @@ -2552,7 +2552,19 @@ Il veicolo è in affitto e non può essere depositato in garage. Esse veículo é alugado e não pode ser armazenado na garagem. Pojazd wynajęty, nie możesz go schować w garażu. - 载具是租赁的,不能存放在你的仓库里。 + 载具是租赁的,不能存放在你的仓库里。 +
+ + Thank you for returning the rental vehicle. + Děkujeme za vrácení zapůjčeného vozidla. + Gracias por devolver el vehículo de alquiler. + Спасибо, что вернул автомобиль в аренду. + Vielen Dank für die Rückgabe des Mietwagens. + Nous vous remercions de nous avoir rendu le véhicule de location. + Grazie per aver restituito il veicolo a noleggio. + Obrigado por devolver o veículo alugado. + Dziękuję za zwrot wypożyczonego pojazdu. + 感谢您归还租车。 That vehicle doesn't belong to you therefor you cannot store it in your garage. diff --git a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf index b90d8f176..9f27bba11 100755 --- a/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf +++ b/life_hc/MySQL/Vehicles/fn_vehicleStore.sqf @@ -68,7 +68,14 @@ if (_impound) exitWith { // not persistent so just do this! if (_vInfo isEqualTo []) exitWith { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",_ownerID]; + 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"; }; diff --git a/life_server/Functions/Systems/fn_vehicleStore.sqf b/life_server/Functions/Systems/fn_vehicleStore.sqf index b93bf8668..5b56d6ab3 100755 --- a/life_server/Functions/Systems/fn_vehicleStore.sqf +++ b/life_server/Functions/Systems/fn_vehicleStore.sqf @@ -67,7 +67,14 @@ if (_impound) exitWith { // not persistent so just do this! if (_vInfo isEqualTo []) exitWith { - [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + if (LIFE_SETTINGS(getNumber,"vehicle_rentalReturn") isEqualTo 1) then { + [1,"STR_Garage_Store_NotPersistent2",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + if (!isNil "_vehicle" && {!isNull _vehicle}) then { + deleteVehicle _vehicle; + }; + } else { + [1,"STR_Garage_Store_NotPersistent",true] remoteExecCall ["life_fnc_broadcast",(owner _unit)]; + }; life_garage_store = false; (owner _unit) publicVariableClient "life_garage_store"; }; From 84f235d4fa838ebb0fdc76cdd9c1879c2b88e4cf Mon Sep 17 00:00:00 2001 From: Ollie W Date: Fri, 27 Mar 2020 13:32:12 +0000 Subject: [PATCH 28/33] Travis -> GH Actions --- .github/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e7042c2e5..0a174232d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,7 +5,7 @@ Contributing to AsYetUntitled ## Guidelines -1. **Don't break the build**: We have a simple continuous integration system setup with [Travis](https://travis-ci.org/AsYetUntitled/Framework). If your pull request does not pass then it will not be merged. Travis will only check your changes after you submit a pull request. +1. **Don't break the build**: We have a simple continuous integration system setup with [GitHub Actions](https://github.com/AsYetUntitled/Framework/actions). If your pull request does not pass then it will not be merged. GitHub Actions will only check your changes after you submit a pull request. 2. **Search before posting**: It is likely that what you have to say has already been said. Use the search function to see if someone else has already made a similar issue or pull request. 3. **Test, test, and test**: Test your changes thoroughly prior to submitting a pull request. If you were unable to test your changes then ask if someone else can test them for you in your pull request message. Take it a step further and test another person's pull request and report your result to them. 4. **Bug fixes over features**: New features may be cool, but ideally bug fixes and optimisations for existing features should be prioritised above implementing new features. From bcea8d6bedc519fbc5a5a3a90bd9ca6d08a29876 Mon Sep 17 00:00:00 2001 From: DomT602 <32492434+DomT602@users.noreply.github.com> Date: Sat, 11 Apr 2020 18:28:46 +0100 Subject: [PATCH 29/33] Merging loops and 2 bugfixes (#637) * Merging loops and 2 bugfixes * HC update * Spyglass * Change in timing * Wrong macros * Last changes * Remove extra brackets * Apply suggestions from code review Co-Authored-By: Ollie W * Check dealer exists * Apply suggestions from code review Co-Authored-By: Ollie W Co-authored-by: Ollie W --- Altis_Life.Altis/config/Config_SpyGlass.hpp | 4 +- life_hc/MySQL/Gangs/fn_updateGang.sqf | 1 - life_hc/MySQL/General/fn_cleanup.sqf | 132 +++++++++++------- life_server/Functions/Gangs/fn_updateGang.sqf | 1 - life_server/Functions/Systems/fn_cleanup.sqf | 128 ++++++++++------- .../Functions/Systems/fn_federalUpdate.sqf | 13 -- life_server/config.cpp | 1 - life_server/init.sqf | 11 -- 8 files changed, 163 insertions(+), 128 deletions(-) delete mode 100644 life_server/Functions/Systems/fn_federalUpdate.sqf diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 83105abe7..665e0b696 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -286,8 +286,8 @@ 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", - "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_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_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" diff --git a/life_hc/MySQL/Gangs/fn_updateGang.sqf b/life_hc/MySQL/Gangs/fn_updateGang.sqf index e6bb5c245..3b4d2b5f7 100755 --- a/life_hc/MySQL/Gangs/fn_updateGang.sqf +++ b/life_hc/MySQL/Gangs/fn_updateGang.sqf @@ -47,7 +47,6 @@ switch (_mode) do { _funds = _funds + _value; _group setVariable ["gang_bank",_funds,true]; [1,"STR_ATM_DepositSuccessG",true,[_value]] remoteExecCall ["life_fnc_broadcast",remoteExecutedOwner]; - _cash = _cash - _value; } else { if (_value > _funds) exitWith { [1,"STR_ATM_NotEnoughFundsG",true] remoteExecCall ["life_fnc_broadcast",remoteExecutedOwner]; diff --git a/life_hc/MySQL/General/fn_cleanup.sqf b/life_hc/MySQL/General/fn_cleanup.sqf index cf298f496..f28d57c7a 100755 --- a/life_hc/MySQL/General/fn_cleanup.sqf +++ b/life_hc/MySQL/General/fn_cleanup.sqf @@ -1,51 +1,81 @@ -#include "\life_hc\hc_macros.hpp" -/* - File: fn_cleanup.sqf - Author: Bryan "Tonic" Boardwine - - This file is for Nanou's HeadlessClient. - - Description: - Server-side cleanup script on vehicles. - Sort of a lame way but whatever. -*/ -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 _dbInfo = _x getVariable "dbInfo"; - - deleteVehicle _x; - - if (isNil "_dbInfo") 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; - }; - }; - } forEach vehicles; - - { - if (!isNil {_x getVariable "item"}) then { - deleteVehicle _x; - }; - true - } count (allMissionObjects "Thing"); -}; +#include "\life_hc\hc_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 _dbInfo = _x getVariable "dbInfo"; + + deleteVehicle _x; + + if (isNil "_dbInfo") 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; + }; + }; + } 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/Functions/Gangs/fn_updateGang.sqf b/life_server/Functions/Gangs/fn_updateGang.sqf index 01c25aa42..f985e51f7 100755 --- a/life_server/Functions/Gangs/fn_updateGang.sqf +++ b/life_server/Functions/Gangs/fn_updateGang.sqf @@ -45,7 +45,6 @@ switch (_mode) do { _funds = _funds + _value; _group setVariable ["gang_bank",_funds,true]; [1,"STR_ATM_DepositSuccessG",true,[_value]] remoteExecCall ["life_fnc_broadcast",remoteExecutedOwner]; - _cash = _cash - _value; } else { if (_value > _funds) exitWith { [1,"STR_ATM_NotEnoughFundsG",true] remoteExecCall ["life_fnc_broadcast",remoteExecutedOwner]; diff --git a/life_server/Functions/Systems/fn_cleanup.sqf b/life_server/Functions/Systems/fn_cleanup.sqf index 48f2208bb..0f822c50d 100755 --- a/life_server/Functions/Systems/fn_cleanup.sqf +++ b/life_server/Functions/Systems/fn_cleanup.sqf @@ -1,48 +1,80 @@ -#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 _dbInfo = _x getVariable "dbInfo"; - - deleteVehicle _x; - - if (isNil "_dbInfo") 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; - }; - }; - } 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 _dbInfo = _x getVariable "dbInfo"; + + deleteVehicle _x; + + if (isNil "_dbInfo") 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; + }; + }; + } 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/Functions/Systems/fn_federalUpdate.sqf b/life_server/Functions/Systems/fn_federalUpdate.sqf deleted file mode 100644 index b114cb189..000000000 --- a/life_server/Functions/Systems/fn_federalUpdate.sqf +++ /dev/null @@ -1,13 +0,0 @@ -/* - File: fn_federalUpdate.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Uhhh, adds to it? -*/ -private "_funds"; -for "_i" from 0 to 1 step 0 do { - uiSleep (30 * 60); - _funds = fed_bank getVariable ["safe",0]; - fed_bank setVariable ["safe",round(_funds+((count playableUnits)/2)),true]; -}; diff --git a/life_server/config.cpp b/life_server/config.cpp index c4bc04dd3..a87301fb7 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -62,7 +62,6 @@ class CfgFunctions { class vehicleDelete {}; class spikeStrip {}; class transferOwnership {}; - class federalUpdate {}; class chopShopSell {}; class clientDisconnect {}; class entityRespawned {}; diff --git a/life_server/init.sqf b/life_server/init.sqf index 61c6baf1d..dbef9d0c1 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -80,7 +80,6 @@ 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; }; }; @@ -139,7 +138,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;}]; @@ -159,15 +157,6 @@ TON_fnc_requestClientID = /* 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; From 9878d5ae180b68b2095d0c5f90d1eac40ae0408e Mon Sep 17 00:00:00 2001 From: Blackfisch Date: Tue, 14 Apr 2020 12:15:50 +0200 Subject: [PATCH 30/33] Remove stupid functions.sqf (#612) * move functions client side * rework all affected functions * spyglass to lowercase * Appease the new gods * rename player_query -> playerQuery * spyglass lowercase * max message length as config setting * fancy number checking * tested& fixed (prefix wrong) * centralized sendMEssage file instead of 5 single ones * params fix * remove check since EVH should be working * me stupid, only select for msg to player * spyglass for dom * ton_ to life_ * spyglass for dom #2 * move terrainsort * newlines and var renaming * Update Altis_Life.Altis/stringtable.xml Co-Authored-By: Ollie W * Update Altis_Life.Altis/stringtable.xml Co-Authored-By: Ollie W * rework clientMessage to use string parameter, warning message if no units online, RE target readability * more languages * grpnull * more grpnull * locality for gang stuff etc * stringtable * tab stuff or whatever * jip * remtoeexec -> remoteexeccall * local check since groupowner is server only * BE filters * Update Altis_Life.Altis/core/gangs/fn_gangKick.sqf Co-authored-by: BoGuu Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> --- Altis_Life.Altis/CfgRemoteExec.hpp | 10 +- Altis_Life.Altis/Functions.hpp | 18 + .../SpyGlass/fn_variableCheck.sqf | 4 +- Altis_Life.Altis/config/Config_Master.hpp | 3 + Altis_Life.Altis/config/Config_SpyGlass.hpp | 16 +- .../core/actions/fn_captureHideout.sqf | 2 +- Altis_Life.Altis/core/admin/fn_adminQuery.sqf | 2 +- Altis_Life.Altis/core/civilian/fn_jailMe.sqf | 2 +- .../core/cop/fn_fedCamDisplay.sqf | 4 +- .../core/cop/fn_questionDealer.sqf | 2 +- Altis_Life.Altis/core/cop/fn_ticketGive.sqf | 2 +- Altis_Life.Altis/core/fn_initCiv.sqf | 2 +- .../core/fn_setupStationService.sqf | 2 +- .../core/functions/fn_actionKeyHandler.sqf | 4 +- .../core/functions/fn_receiveMoney.sqf | 2 +- .../core/gangs/fn_clientGangKick.sqf | 10 + .../core/gangs/fn_clientGangLeader.sqf | 18 + .../core/gangs/fn_clientGangLeft.sqf | 10 + .../core/gangs/fn_gangCreated.sqf | 3 +- .../core/gangs/fn_gangDisband.sqf | 5 +- .../core/gangs/fn_gangDisbanded.sqf | 3 +- Altis_Life.Altis/core/gangs/fn_gangKick.sqf | 2 +- Altis_Life.Altis/core/gangs/fn_gangLeave.sqf | 2 +- .../core/gangs/fn_gangNewLeader.sqf | 7 +- Altis_Life.Altis/core/gangs/fn_initGang.sqf | 3 +- .../core/housing/fn_houseMenu.sqf | 4 +- .../core/housing/fn_sellHouse.sqf | 2 +- .../core/items/fn_blastingCharge.sqf | 4 +- Altis_Life.Altis/core/items/fn_boltcutter.sqf | 4 +- .../core/pmenu/fn_clientMessage.sqf | 75 + Altis_Life.Altis/core/pmenu/fn_giveItem.sqf | 2 +- Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf | 2 +- Altis_Life.Altis/core/pmenu/fn_keyGive.sqf | 4 +- Altis_Life.Altis/core/pmenu/fn_removeItem.sqf | 2 +- .../core/pmenu/fn_sendMessage.sqf | 77 + Altis_Life.Altis/core/shops/fn_virt_buy.sqf | 4 +- Altis_Life.Altis/core/shops/fn_virt_sell.sqf | 4 +- .../core/shops/fn_weaponShopBuySell.sqf | 2 +- .../core/shops/fn_weaponShopFilter.sqf | 2 +- .../core/shops/fn_weaponShopSelection.sqf | 2 +- Altis_Life.Altis/core/utils/fn_index.sqf | 12 + Altis_Life.Altis/core/utils/fn_isNumber.sqf | 13 + .../core/utils/fn_playerQuery.sqf | 10 + .../core/utils}/fn_terrainSort.sqf | 0 .../core/vehicle/fn_clientGetKey.sqf | 17 + .../core/vehicle/fn_deviceMine.sqf | 2 +- .../core/vehicle/fn_vehStoreItem.sqf | 6 +- .../core/vehicle/fn_vehTakeItem.sqf | 4 +- Altis_Life.Altis/dialog/cell_phone.hpp | 14 +- .../dialog/function/fn_bankDeposit.sqf | 2 +- .../dialog/function/fn_bankTransfer.sqf | 2 +- .../dialog/function/fn_bankWithdraw.sqf | 2 +- .../dialog/function/fn_safeStore.sqf | 2 +- .../dialog/function/fn_safeTake.sqf | 2 +- .../dialog/function/fn_useGangBank.sqf | 2 +- Altis_Life.Altis/stringtable.xml | 2276 +++++++++-------- BEFilters/remoteexec.txt | 2 +- life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf | 2 +- .../Functions/WantedSystem/fn_wantedAdd.sqf | 2 +- life_server/config.cpp | 1 - life_server/functions.sqf | 324 --- life_server/init.sqf | 5 +- 62 files changed, 1505 insertions(+), 1525 deletions(-) create mode 100644 Altis_Life.Altis/core/gangs/fn_clientGangKick.sqf create mode 100644 Altis_Life.Altis/core/gangs/fn_clientGangLeader.sqf create mode 100644 Altis_Life.Altis/core/gangs/fn_clientGangLeft.sqf create mode 100644 Altis_Life.Altis/core/pmenu/fn_clientMessage.sqf create mode 100644 Altis_Life.Altis/core/pmenu/fn_sendMessage.sqf create mode 100644 Altis_Life.Altis/core/utils/fn_index.sqf create mode 100644 Altis_Life.Altis/core/utils/fn_isNumber.sqf create mode 100644 Altis_Life.Altis/core/utils/fn_playerQuery.sqf rename {life_server/Functions/Systems => Altis_Life.Altis/core/utils}/fn_terrainSort.sqf (100%) create mode 100644 Altis_Life.Altis/core/vehicle/fn_clientGetKey.sqf delete mode 100644 life_server/functions.sqf diff --git a/Altis_Life.Altis/CfgRemoteExec.hpp b/Altis_Life.Altis/CfgRemoteExec.hpp index d08d6d4bb..c78e4e95b 100644 --- a/Altis_Life.Altis/CfgRemoteExec.hpp +++ b/Altis_Life.Altis/CfgRemoteExec.hpp @@ -68,12 +68,12 @@ class CfgRemoteExec { F(SOCK_fnc_insertPlayerInfo,CLIENT) F(SOCK_fnc_requestReceived,CLIENT) F(SOCK_fnc_updateRequest,CLIENT) - F(TON_fnc_clientGangKick,CLIENT) - F(TON_fnc_clientGangLeader,CLIENT) - F(TON_fnc_clientGangLeft,CLIENT) + F(life_fnc_clientGangKick,CLIENT) + JIP(life_fnc_clientGangLeader,CLIENT) + F(life_fnc_clientGangLeft,CLIENT) F(TON_fnc_clientGetKey,CLIENT) - F(TON_fnc_clientMessage,CLIENT) - F(TON_fnc_player_query,CLIENT) + F(life_fnc_clientMessage,CLIENT) + F(life_util_fnc_playerQuery,CLIENT) /* Server only functions */ F(DB_fnc_insertRequest,SERVER) diff --git a/Altis_Life.Altis/Functions.hpp b/Altis_Life.Altis/Functions.hpp index 3345d181b..a9c15ac63 100644 --- a/Altis_Life.Altis/Functions.hpp +++ b/Altis_Life.Altis/Functions.hpp @@ -21,6 +21,18 @@ class SpyGlass { }; }; +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"; @@ -222,6 +234,9 @@ class Life_Client_Core { class Gangs { file = "core\gangs"; + class clientGangKick {}; + class clientGangLeader {}; + class clientGangLeft {}; class createGang {}; class gangCreated {}; class gangDisband {}; @@ -301,6 +316,7 @@ class Life_Client_Core { class Player_Menu { file = "core\pmenu"; class cellphone {}; + class clientMessage {}; class giveItem {}; class giveMoney {}; class keyDrop {}; @@ -310,6 +326,7 @@ class Life_Client_Core { class p_updateMenu {}; class pardon {}; class removeItem {}; + class sendMessage {}; class s_onChar {}; class s_onCheckedChange {}; class s_onSliderChange {}; @@ -357,6 +374,7 @@ class Life_Client_Core { class Vehicle { file = "core\vehicle"; class addVehicle2Chain {}; + class clientGetKey {}; class colorVehicle {}; class deviceMine {}; class FuelRefuelcar {}; diff --git a/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf b/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf index 66b0fabf7..e53cde68c 100644 --- a/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf +++ b/Altis_Life.Altis/SpyGlass/fn_variableCheck.sqf @@ -98,11 +98,11 @@ for "_i" from 0 to 1 step 0 do { objNull call _checkFunction; uiSleep 10; objNull call _uiCheckFunction; - + if !((count allVariables profileNameSpace) isEqualTo _profileCount) then { failMission "SpyGlass"; }; - + if !((count allVariables parsingNamespace) isEqualTo 0) then { //We should check whether both these variables are present in parsingNS on init, and whether the order is consistent, so to remove the loop { diff --git a/Altis_Life.Altis/config/Config_Master.hpp b/Altis_Life.Altis/config/Config_Master.hpp index bb50a1c53..de540767d 100644 --- a/Altis_Life.Altis/config/Config_Master.hpp +++ b/Altis_Life.Altis/config/Config_Master.hpp @@ -49,6 +49,9 @@ class Life_Settings { 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 diff --git a/Altis_Life.Altis/config/Config_SpyGlass.hpp b/Altis_Life.Altis/config/Config_SpyGlass.hpp index 665e0b696..e19a3dcea 100644 --- a/Altis_Life.Altis/config/Config_SpyGlass.hpp +++ b/Altis_Life.Altis/config/Config_SpyGlass.hpp @@ -244,7 +244,7 @@ class SpyGlass { "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_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", @@ -273,7 +273,7 @@ class SpyGlass { "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_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_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", @@ -285,12 +285,12 @@ 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", - "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_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" + "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","life_fnc_sendmessage","life_fnc_sendmessage_meta", + "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","life_fnc_clientGangKick","life_fnc_clientGangLeader","life_fnc_clientGangLeft","life_fnc_clientGangLeft","ton_fnc_clientgetkey","life_fnc_clientmessage", + "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","life_util_fnc_index","ton_fnc_inithouses","ton_fnc_inithouses_meta","ton_fnc_insertgang","ton_fnc_insertgang_meta","life_util_fnc_isnumber", + "ton_fnc_keymanagement","ton_fnc_keymanagement_meta","ton_fnc_managesc","ton_fnc_managesc_meta","ton_fnc_pickupaction","ton_fnc_pickupaction_meta","life_util_fnc_playerquery","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","life_util_fnc_terrainsort","life_util_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" }; SOCK_Functions[] = { diff --git a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf index 4232fba43..dcc2e34a9 100644 --- a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf +++ b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf @@ -9,7 +9,7 @@ private _altisArray = ["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"]; private _tanoaArray = ["Land_School_01_F","Land_Warehouse_03_F","Land_House_Small_02_F"]; -private _hideoutObjs = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; +private _hideoutObjs = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; private _hideout = (nearestObjects[getPosATL player,_hideoutObjs,25]) select 0; private _group = _hideout getVariable ["gangOwner",grpNull]; diff --git a/Altis_Life.Altis/core/admin/fn_adminQuery.sqf b/Altis_Life.Altis/core/admin/fn_adminQuery.sqf index a3bef64e8..96816a9bd 100644 --- a/Altis_Life.Altis/core/admin/fn_adminQuery.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminQuery.sqf @@ -15,5 +15,5 @@ _info = call compile format ["%1", _info]; if (isNil "_info") exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; if (isNull _info) exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; -[player] remoteExec ["TON_fnc_player_query",_info]; +remoteExecCall ["life_util_fnc_playerQuery",_info]; _text ctrlSetText localize "STR_ANOTF_Query"; diff --git a/Altis_Life.Altis/core/civilian/fn_jailMe.sqf b/Altis_Life.Altis/core/civilian/fn_jailMe.sqf index 12749203c..01c2614c9 100644 --- a/Altis_Life.Altis/core/civilian/fn_jailMe.sqf +++ b/Altis_Life.Altis/core/civilian/fn_jailMe.sqf @@ -47,7 +47,7 @@ for "_i" from 0 to 1 step 0 do { player forceWalk true; }; - private _escDist = [[["Altis", 60], ["Tanoa", 145]]] call TON_fnc_terrainSort; + private _escDist = [[["Altis", 60], ["Tanoa", 145]]] call life_util_fnc_terrainSort; if (player distance (getMarkerPos "jail_marker") > _escDist) exitWith { _esc = true; diff --git a/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf b/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf index 6e1552bb0..2ff68c14b 100644 --- a/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf +++ b/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf @@ -16,7 +16,7 @@ params [ 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; private _dome = nearestObject [_pos,"Land_Dome_Big_F"]; @@ -37,7 +37,7 @@ private _mTwPositions = [ ["back",[28.9248,-42.0977,-3.8896],[-1.33789,-24.6035,-10.2108]] ]; -private _index = [_mode,_mTwPositions] call TON_fnc_index; +private _index = [_mode,_mTwPositions] call life_util_fnc_index; if (_index isEqualTo -1) then { //Turn off diff --git a/Altis_Life.Altis/core/cop/fn_questionDealer.sqf b/Altis_Life.Altis/core/cop/fn_questionDealer.sqf index 1a97e6c56..7ff470db0 100644 --- a/Altis_Life.Altis/core/cop/fn_questionDealer.sqf +++ b/Altis_Life.Altis/core/cop/fn_questionDealer.sqf @@ -18,7 +18,7 @@ _names = ""; if ((_x select 2) > 150000) then { _val = round((_x select 2) / 16); } else { - _val = ["483",_crimes] call TON_fnc_index; + _val = ["483",_crimes] call life_util_fnc_index; _val = ((_crimes select _val) select 1); if (_val isEqualType "") then { _val = parseNumber _val; diff --git a/Altis_Life.Altis/core/cop/fn_ticketGive.sqf b/Altis_Life.Altis/core/cop/fn_ticketGive.sqf index 1fe0d7768..6c3c77f57 100644 --- a/Altis_Life.Altis/core/cop/fn_ticketGive.sqf +++ b/Altis_Life.Altis/core/cop/fn_ticketGive.sqf @@ -11,7 +11,7 @@ if (isNull life_ticket_unit) exitWith {hint localize "STR_Cop_TicketExist"}; private _val = ctrlText 2652; -if (!([_val] call TON_fnc_isnumber)) exitWith {hint localize "STR_Cop_TicketNum"}; +if (!([_val] call life_util_fnc_isNumber)) exitWith {hint localize "STR_Cop_TicketNum"}; if ((parseNumber _val) > 200000) exitWith {hint localize "STR_Cop_TicketOver100"}; [0,"STR_Cop_TicketGive",true,[profileName,[(parseNumber _val)] call life_fnc_numberText,life_ticket_unit getVariable ["realname",name life_ticket_unit]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; diff --git a/Altis_Life.Altis/core/fn_initCiv.sqf b/Altis_Life.Altis/core/fn_initCiv.sqf index fa922a0ee..3d8ef9e55 100644 --- a/Altis_Life.Altis/core/fn_initCiv.sqf +++ b/Altis_Life.Altis/core/fn_initCiv.sqf @@ -8,7 +8,7 @@ */ private _altisArray = ["Land_i_Shop_01_V1_F","Land_i_Shop_01_V2_F","Land_i_Shop_01_V3_F","Land_i_Shop_02_V1_F","Land_i_Shop_02_V2_F","Land_i_Shop_02_V3_F"]; private _tanoaArray = ["Land_House_Small_01_F"]; -private _spawnBuildings = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; +private _spawnBuildings = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; civ_spawn_1 = nearestObjects[getMarkerPos "civ_spawn_1", _spawnBuildings,350]; civ_spawn_2 = nearestObjects[getMarkerPos "civ_spawn_2", _spawnBuildings,350]; diff --git a/Altis_Life.Altis/core/fn_setupStationService.sqf b/Altis_Life.Altis/core/fn_setupStationService.sqf index 6512588b8..ff4d2fd23 100644 --- a/Altis_Life.Altis/core/fn_setupStationService.sqf +++ b/Altis_Life.Altis/core/fn_setupStationService.sqf @@ -150,7 +150,7 @@ private _tanoaPositions = [ [11637.2,13052.8,-0.228891] ]; -private _stationPositions = [[["Altis", _altisPositions], ["Tanoa", _tanoaPositions]]] call TON_fnc_terrainSort; +private _stationPositions = [[["Altis", _altisPositions], ["Tanoa", _tanoaPositions]]] call life_util_fnc_terrainSort; { private _pump = nearestObjects [_x,["Land_fs_feed_F","Land_FuelStation_01_pump_F","Land_FuelStation_02_pump_F"],5] select 0; diff --git a/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf b/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf index 467288252..a1c0c6b0c 100644 --- a/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf +++ b/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf @@ -61,10 +61,10 @@ if ((_curObject isKindOf "B_supplyCrate_F" || _curObject isKindOf "Box_IND_Grena }; }; -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; if (_curObject isKindOf "House_F" && {player distance _curObject < 12} || ((nearestObject [_pos,"Land_Dome_Big_F"]) isEqualTo _curObject || (nearestObject [_pos,_vaultHouse]) isEqualTo _curObject)) exitWith { [_curObject] call life_fnc_houseMenu; diff --git a/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf b/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf index 68954f5c4..d9b8d968a 100644 --- a/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf +++ b/Altis_Life.Altis/core/functions/fn_receiveMoney.sqf @@ -15,7 +15,7 @@ params [ if (isNull _unit || isNull _from || _val isEqualTo "") exitWith {}; if !(player isEqualTo _unit) exitWith {}; -if (!([_val] call TON_fnc_isnumber)) exitWith {}; +if (!([_val] call life_util_fnc_isNumber)) exitWith {}; if (_unit == _from) exitWith {}; //Bad boy, trying to exploit his way to riches. hint format [localize "STR_NOTF_GivenMoney",_from getVariable ["realname",name _from],[(parseNumber (_val))] call life_fnc_numberText]; diff --git a/Altis_Life.Altis/core/gangs/fn_clientGangKick.sqf b/Altis_Life.Altis/core/gangs/fn_clientGangKick.sqf new file mode 100644 index 000000000..92d2cefb4 --- /dev/null +++ b/Altis_Life.Altis/core/gangs/fn_clientGangKick.sqf @@ -0,0 +1,10 @@ +/* + File: fn_clientGangKick.sqf + Author: Bryan "Tonic" Boardwine + + Description: handles being kicked out of a gang +*/ + +life_my_gang = grpNull; +[player] joinSilent (createGroup civilian); +hint localize "STR_GNOTF_KickOutGang"; diff --git a/Altis_Life.Altis/core/gangs/fn_clientGangLeader.sqf b/Altis_Life.Altis/core/gangs/fn_clientGangLeader.sqf new file mode 100644 index 000000000..c952885fe --- /dev/null +++ b/Altis_Life.Altis/core/gangs/fn_clientGangLeader.sqf @@ -0,0 +1,18 @@ +/* + File: fn_clientGangLeader.sqf + Author: Bryan "Tonic" Boardwine + + Description: appoints player as gang leader +*/ +params [ + ["_unit", objNull, [objNull]], + ["_group", grpNull, [grpNull]] +]; + +_unit setRank "COLONEL"; + +if !(local _group) exitWith {}; +_group selectLeader _unit; + +if !(_unit isEqualTo player) exitWith {}; +hint localize "STR_GNOTF_GaveTransfer"; diff --git a/Altis_Life.Altis/core/gangs/fn_clientGangLeft.sqf b/Altis_Life.Altis/core/gangs/fn_clientGangLeft.sqf new file mode 100644 index 000000000..6fff2479d --- /dev/null +++ b/Altis_Life.Altis/core/gangs/fn_clientGangLeft.sqf @@ -0,0 +1,10 @@ +/* + File: fn_clientGangLeft.sqf + Author: Bryan "Tonic" Boardwine + + Description: leaves the group +*/ + +life_my_gang = grpNull; +[player] joinSilent (createGroup civilian); +hint localize "STR_GNOTF_LeaveGang"; diff --git a/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf b/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf index ac5746c87..c40485775 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangCreated.sqf @@ -6,7 +6,6 @@ Description: Tells the player that the gang is created and throws him into it. */ -private "_group"; life_action_gangInUse = nil; if (BANK < (LIFE_SETTINGS(getNumber,"gang_price"))) exitWith { @@ -17,4 +16,4 @@ if (BANK < (LIFE_SETTINGS(getNumber,"gang_price"))) exitWith { BANK = BANK - LIFE_SETTINGS(getNumber,"gang_price"); [1] call SOCK_fnc_updatePartial; -hint format [localize "STR_GNOTF_CreateSuccess",(group player) getVariable "gang_name",[(LIFE_SETTINGS(getNumber,"gang_price"))] call life_fnc_numberText]; \ No newline at end of file +hint format [localize "STR_GNOTF_CreateSuccess",(group player) getVariable "gang_name",[(LIFE_SETTINGS(getNumber,"gang_price"))] call life_fnc_numberText]; diff --git a/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf b/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf index 9d8590689..4d871bdf1 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangDisband.sqf @@ -7,8 +7,7 @@ Prompts the user about disbanding the gang and if the user accepts the gang will be disbanded and removed from the database. */ -private "_action"; -_action = [ +private _action = [ localize "STR_GNOTF_DisbandWarn", localize "STR_Gang_Disband_Gang", localize "STR_Global_Yes", @@ -26,4 +25,4 @@ if (_action) then { } else { hint localize "STR_GNOTF_DisbandGangCanc"; -}; \ No newline at end of file +}; diff --git a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf index 15d3d8ba3..1c0024485 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangDisbanded.sqf @@ -5,8 +5,7 @@ Description: Notifies members that the gang has been disbanded. */ -private "_group"; -_group = param [0,grpNull,[grpNull]]; +private _group = param [0,grpNull,[grpNull]]; if (isNull _group) exitWith {}; //Fail horn please. if (!isNull (findDisplay 2620)) then {closeDialog 2620}; diff --git a/Altis_Life.Altis/core/gangs/fn_gangKick.sqf b/Altis_Life.Altis/core/gangs/fn_gangKick.sqf index 63ef0b7a1..0638ff357 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangKick.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangKick.sqf @@ -23,7 +23,7 @@ if (!(_members isEqualType [])) exitWith {}; _members = _members - [_unitID]; group player setVariable ["gang_members",_members,true]; -[_unit,group player] remoteExec ["TON_fnc_clientGangKick",_unit]; //Boot that bitch! +remoteExecCall ["life_fnc_clientGangKick",_unit]; if (life_HC_isActive) then { [4,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. diff --git a/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf b/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf index 9c7e727ba..3d6ae9e43 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangLeave.sqf @@ -17,7 +17,7 @@ if (!(_members isEqualType [])) exitWith {}; _members = _members - [_unitID]; group player setVariable ["gang_members",_members,true]; -[player,group player] remoteExec ["TON_fnc_clientGangLeft",player]; +call life_fnc_clientGangLeft; if (life_HC_isActive) then { [4,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. diff --git a/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf b/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf index d484cd744..cf1a85266 100644 --- a/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf +++ b/Altis_Life.Altis/core/gangs/fn_gangNewLeader.sqf @@ -25,16 +25,15 @@ _action = [ if (_action) then { _unitID = getPlayerUID _unit; if (_unitID isEqualTo "") exitWith {hint localize "STR_GNOTF_badUID";}; //Unlikely? - group player setVariable ["gang_owner",_unitID,true]; - group player selectLeader _unit; - [_unit,group player] remoteExec ["TON_fnc_clientGangLeader",_unit]; //Boot that bitch! + private _group = group player; + _group setVariable ["gang_owner",_unitID,true]; + [_unit, _group] remoteExecCall ["life_fnc_clientGangLeader", _group, _group]; if (life_HC_isActive) then { [3,group player] remoteExec ["HC_fnc_updateGang",HC_Life]; //Update the database. } else { [3,group player] remoteExec ["TON_fnc_updateGang",RSERV]; //Update the database. }; - } else { hint localize "STR_GNOTF_TransferCancel"; }; diff --git a/Altis_Life.Altis/core/gangs/fn_initGang.sqf b/Altis_Life.Altis/core/gangs/fn_initGang.sqf index 300aa832a..f7d036d7f 100644 --- a/Altis_Life.Altis/core/gangs/fn_initGang.sqf +++ b/Altis_Life.Altis/core/gangs/fn_initGang.sqf @@ -29,8 +29,7 @@ _exitLoop = false; if (!isNil "_group") then { [player] join _group; if ((life_gangData select 1) isEqualTo getPlayerUID player) then { - _group selectLeader player; - [player,_group] remoteExecCall ["TON_fnc_clientGangLeader",(units _group)]; + [_unit, _group] remoteExecCall ["life_fnc_clientGangLeader", _group, _group]; }; } else { _group = group player; diff --git a/Altis_Life.Altis/core/housing/fn_houseMenu.sqf b/Altis_Life.Altis/core/housing/fn_houseMenu.sqf index d1b51cb15..c197d05f5 100644 --- a/Altis_Life.Altis/core/housing/fn_houseMenu.sqf +++ b/Altis_Life.Altis/core/housing/fn_houseMenu.sqf @@ -46,10 +46,10 @@ if (_curTarget in life_hideoutBuildings) exitWith { if (_curTarget isKindOf "House_F" && playerSide isEqualTo west) exitWith { - 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; if ((nearestObject [_pos,"Land_Dome_Big_F"]) isEqualTo _curTarget || (nearestObject [_pos,_vaultHouse]) isEqualTo _curTarget) then { diff --git a/Altis_Life.Altis/core/housing/fn_sellHouse.sqf b/Altis_Life.Altis/core/housing/fn_sellHouse.sqf index 11f240a6c..b4c23752f 100644 --- a/Altis_Life.Altis/core/housing/fn_sellHouse.sqf +++ b/Altis_Life.Altis/core/housing/fn_sellHouse.sqf @@ -58,7 +58,7 @@ if (_action) then { life_vehicles deleteAt _index; }; - _index = [str(getPosATL _house),life_houses] call TON_fnc_index; + _index = [str(getPosATL _house),life_houses] call life_util_fnc_index; if !(_index isEqualTo -1) then { life_houses deleteAt _index; }; diff --git a/Altis_Life.Altis/core/items/fn_blastingCharge.sqf b/Altis_Life.Altis/core/items/fn_blastingCharge.sqf index 1119108f1..f33fb6ed9 100644 --- a/Altis_Life.Altis/core/items/fn_blastingCharge.sqf +++ b/Altis_Life.Altis/core/items/fn_blastingCharge.sqf @@ -17,10 +17,10 @@ if (west countSide playableUnits < (LIFE_SETTINGS(getNumber,"minimum_cops"))) ex hint format [localize "STR_Civ_NotEnoughCops",(LIFE_SETTINGS(getNumber,"minimum_cops"))]; }; -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; if ((nearestObject [_pos,_vaultHouse]) getVariable ["locked",true]) exitWith {hint localize "STR_ISTR_Blast_Exploit"}; if (!([false,"blastingcharge",1] call life_fnc_handleInv)) exitWith {}; //Error? diff --git a/Altis_Life.Altis/core/items/fn_boltcutter.sqf b/Altis_Life.Altis/core/items/fn_boltcutter.sqf index 255d3ad6a..e46ab0fd7 100644 --- a/Altis_Life.Altis/core/items/fn_boltcutter.sqf +++ b/Altis_Life.Altis/core/items/fn_boltcutter.sqf @@ -9,10 +9,10 @@ private ["_building","_door","_doors","_cpRate","_title","_progressBar","_titleText","_cp","_ui"]; _building = param [0,objNull,[objNull]]; -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; if (isNull _building) exitWith {}; if (!(_building isKindOf "House_F")) exitWith {hint localize "STR_ISTR_Bolt_NotNear";}; diff --git a/Altis_Life.Altis/core/pmenu/fn_clientMessage.sqf b/Altis_Life.Altis/core/pmenu/fn_clientMessage.sqf new file mode 100644 index 000000000..6d2948755 --- /dev/null +++ b/Altis_Life.Altis/core/pmenu/fn_clientMessage.sqf @@ -0,0 +1,75 @@ +/* + File: fn_clientMessage.sqf + Author: Bryan "Tonic" Boardwine + + Description: + displays a received message +*/ +params [ + ["_msg", "", [""]], + ["_from", "", [""]], + ["_type", "", [""]], + ["_loc", "Unknown", [""]] +]; + +if (_from isEqualTo "" || {_msg isEqualTo ""}) exitWith {}; +private _message = ""; + +switch (toLower _type) do { + case "cop" : { + if !(playerSide isEqualTo west) exitWith {}; + _message = format ["--- 911 DISPATCH FROM %1: %2",_from,_msg]; + + hint parseText format ["New Dispatch

To: All Officers
From: %1
Coords: %2

Message:
%3",_from,_loc,_msg]; + + ["PoliceDispatch",[format ["A New Police Report From: %1",_from]]] call bis_fnc_showNotification; + }; + + case "med": { + if !(playerSide isEqualTo independent) exitWith {}; + + _message = format ["!!! EMS REQUEST: %1",_msg]; + hint parseText format ["EMS Request

To: You
From: %1
Coords: %2

Message:
%3",_from,_loc,_msg]; + + ["TextMessage",[format ["EMS Request from %1",_from]]] call bis_fnc_showNotification; + }; + + case "admin" : { + if ((call life_adminlevel) < 1) exitWith {}; + _message = format ["!!! ADMIN REQUEST FROM %1: %2",_from,_msg]; + + hint parseText format ["Admin Request

To: Admins
From: %1
Coords: %2

Message:
%3",_from,_loc,_msg]; + + ["AdminDispatch",[format ["%1 Has Requested An Admin!",_from]]] call bis_fnc_showNotification; + }; + + case "adminall" : { + _message = format ["!!! ADMIN MESSAGE: %1",_msg]; + _admin = format ["Sent by admin: %1", _from]; + hint parseText format ["Admin Message

To: You
From: An Admin

Message:
%1",_msg]; + + ["AdminMessage",["You Have Received A Message From An Admin!"]] call bis_fnc_showNotification; + if ((call life_adminlevel) > 0) then {systemChat _admin;}; + }; + + case "admintoplayer": { + _message = format ["!!!ADMIN MESSAGE: %1",_msg]; + + hint parseText format ["Admin Message

To: All Players
From: The Admins

Message:
%1",_msg]; + + ["AdminMessage",["You Have Received A Message From An Admin!"]] call bis_fnc_showNotification; + if ((call life_adminlevel) > 0) then { + private _admin = format ["Sent by admin: %1", _from]; + systemChat _admin; + }; + }; + + default { + _message = format [">>>MESSAGE FROM %1: %2",_from,_msg]; + hint parseText format ["New Message

To: You
From: %1

Message:
%2",_from,_msg]; + + ["TextMessage",[format ["You Received A New Private Message From %1",_from]]] call bis_fnc_showNotification; + }; +}; + +systemChat _message; diff --git a/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf b/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf index 3b5746677..2ddfa9e31 100644 --- a/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_giveItem.sqf @@ -34,7 +34,7 @@ call { private _item = lbData [2005, lbCurSel 2005]; - if !([_value] call TON_fnc_isnumber) exitWith { + if !([_value] call life_util_fnc_isNumber) exitWith { hint localize "STR_NOTF_notNumberFormat"; }; if (parseNumber _value <= 0) exitWith { diff --git a/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf b/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf index 5e5fce9ab..ef8f1ed86 100644 --- a/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_giveMoney.sqf @@ -18,7 +18,7 @@ if (isNull _unit) exitWith {ctrlShow[2001,true];}; //A series of checks *ugh* if (!life_use_atm) exitWith {hint localize "STR_NOTF_recentlyRobbedBank";ctrlShow[2001,true];}; -if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";ctrlShow[2001,true];}; +if (!([_amount] call life_util_fnc_isNumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";ctrlShow[2001,true];}; if (parseNumber(_amount) <= 0) exitWith {hint localize "STR_NOTF_enterAmount";ctrlShow[2001,true];}; if (parseNumber(_amount) > CASH) exitWith {hint localize "STR_NOTF_notEnoughtToGive";ctrlShow[2001,true];}; if (isNull _unit) exitWith {ctrlShow[2001,true];}; diff --git a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf index 599a24b5c..daaf9c05a 100644 --- a/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_keyGive.sqf @@ -28,11 +28,11 @@ if (_unit == player) exitWith {}; _uid = getPlayerUID _unit; _owners = _vehicle getVariable "vehicle_info_owners"; -_index = [_uid,_owners] call TON_fnc_index; +_index = [_uid,_owners] call life_util_fnc_index; if (_index isEqualTo -1) then { _owners pushBack [_uid,_unit getVariable ["realname",name _unit]]; _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,profileName] remoteExecCall ["TON_fnc_clientGetKey",_unit]; diff --git a/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf b/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf index fd6571b5d..c2b539c78 100644 --- a/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf +++ b/Altis_Life.Altis/core/pmenu/fn_removeItem.sqf @@ -13,7 +13,7 @@ _data = lbData[2005,(lbCurSel 2005)]; _value = ctrlText 2010; if (_data isEqualTo "") exitWith {hint localize "STR_NOTF_didNotSelectToRemove";}; -if (!([_value] call TON_fnc_isnumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";}; +if (!([_value] call life_util_fnc_isNumber)) exitWith {hint localize "STR_NOTF_notNumberFormat";}; if (parseNumber(_value) <= 0) exitWith {hint localize "STR_NOTF_enterAmountRemove";}; if (ITEM_ILLEGAL(_data) isEqualTo 1 && ([west,visiblePosition player,100] call life_fnc_nearUnits)) exitWith {titleText[localize "STR_NOTF_illegalItemCannotDispose","PLAIN"]}; if !(isNull objectParent player) exitWith {titleText[localize "STR_NOTF_cannotRemoveInVeh","PLAIN"]}; diff --git a/Altis_Life.Altis/core/pmenu/fn_sendMessage.sqf b/Altis_Life.Altis/core/pmenu/fn_sendMessage.sqf new file mode 100644 index 000000000..a55c38a3f --- /dev/null +++ b/Altis_Life.Altis/core/pmenu/fn_sendMessage.sqf @@ -0,0 +1,77 @@ +#define CLIENTS -2 +/* + File: fn_sendMessage.sqf + Author: blackfisch + + Description: send message to target +*/ +params [ + ["_ehParams", [], [[]]], + ["_target", "player", [""]] +]; +_ehParams params [ + ["_control", controlNull, [controlNull]] +]; + +_control ctrlEnable false; + +if (_target isEqualTo "cop" && {(west countSide allPlayers) isEqualTo 0}) exitWith { + hint localize "STR_CELLMSG_NoCops"; + _control ctrlEnable true; +}; + +if (_target isEqualTo "med" && {(independent countSide allPlayers) isEqualTo 0}) exitWith { + hint localize "STR_CELLMSG_NoMedics"; + _control ctrlEnable true; +}; + +private _to = call compile format ["%1",(lbData[3004,(lbCurSel 3004)])]; +if ((_target in ["adminToPlayer", "player"]) && {isNil "_to" || {isNull _to}}) exitWith { + _control ctrlEnable true; +}; + +private _msg = ctrlText 3003; +if (_msg isEqualTo "") exitWith { + hint localize "STR_CELLMSG_EnterMSG"; + _control ctrlEnable true; +}; + +private _maxLength = getNumber(missionConfigFile >> "Life_Settings" >> "message_maxlength"); +if (_maxLength > -1 && {(count _msg) > _maxLength}) exitWith { + hint localize "STR_CELLMSG_LIMITEXCEEDED"; + _control ctrlEnable true; +}; + +private _remoteTarget = CLIENTS; +private _confirmMessage = (switch (toLower _target) do { + case "cop": { + _remoteTarget = west; + "STR_CELLMSG_ToPolice"; + }; + case "med": { + _remoteTarget = independent; + "STR_CELLMSG_ToEMS"; + }; + case "admin": { + "STR_CELLMSG_ToAdmin"; + }; + case "adminall": { + "STR_CELLMSG_AdminToAll"; + }; + case "admintoplayer": { + _remoteTarget = _to; + "STR_CELLMSG_AdminToPerson"; + }; + default { + _remoteTarget = _to; + "STR_CELLMSG_ToPerson"; + }; +}); + +private _sender = player getVariable ["realName", profileName]; +[_msg,_sender,_target, mapGridPosition player] remoteExecCall ["life_fnc_clientMessage",_remoteTarget]; +call life_fnc_cellphone; + +private _toName = (if (isNil "_to" || {isNull _to}) then {"ERROR"} else {_to getVariable ["realname", name _to]}); +hint format [localize _confirmMessage,_toName,_msg]; +_control ctrlEnable true; diff --git a/Altis_Life.Altis/core/shops/fn_virt_buy.sqf b/Altis_Life.Altis/core/shops/fn_virt_buy.sqf index 4ce9415fd..9f4fc0a69 100644 --- a/Altis_Life.Altis/core/shops/fn_virt_buy.sqf +++ b/Altis_Life.Altis/core/shops/fn_virt_buy.sqf @@ -11,14 +11,14 @@ if ((lbCurSel 2401) isEqualTo -1) exitWith {hint localize "STR_Shop_Virt_Nothing _type = lbData[2401,(lbCurSel 2401)]; _price = lbValue[2401,(lbCurSel 2401)]; _amount = ctrlText 2404; -if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; +if (!([_amount] call life_util_fnc_isNumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; _diff = [_type,parseNumber(_amount),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; _amount = parseNumber(_amount); if (_diff <= 0) exitWith {hint localize "STR_NOTF_NoSpace"}; _amount = _diff; private _altisArray = ["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"]; private _tanoaArray = ["Land_School_01_F","Land_Warehouse_03_F","Land_House_Small_02_F"]; -private _hideoutObjs = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; +private _hideoutObjs = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; _hideout = (nearestObjects[getPosATL player,_hideoutObjs,25]) select 0; if ((_price * _amount) > CASH && {!isNil "_hideout" && {!isNil {group player getVariable "gang_bank"}} && {(group player getVariable "gang_bank") <= _price * _amount}}) exitWith {hint localize "STR_NOTF_NotEnoughMoney"}; if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; diff --git a/Altis_Life.Altis/core/shops/fn_virt_sell.sqf b/Altis_Life.Altis/core/shops/fn_virt_sell.sqf index 90270991e..83ebacf80 100644 --- a/Altis_Life.Altis/core/shops/fn_virt_sell.sqf +++ b/Altis_Life.Altis/core/shops/fn_virt_sell.sqf @@ -13,7 +13,7 @@ _price = M_CONFIG(getNumber,"VirtualItems",_type,"sellPrice"); if (_price isEqualTo -1) exitWith {}; _amount = ctrlText 2405; -if (!([_amount] call TON_fnc_isnumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; +if (!([_amount] call life_util_fnc_isNumber)) exitWith {hint localize "STR_Shop_Virt_NoNum";}; _amount = parseNumber (_amount); if (_amount > (ITEM_VALUE(_type))) exitWith {hint localize "STR_Shop_Virt_NotEnough"}; if ((time - life_action_delay) < 0.2) exitWith {hint localize "STR_NOTF_ActionDelay";}; @@ -31,7 +31,7 @@ if ([false,_type,_amount] call life_fnc_handleInv) then { if (life_shop_type isEqualTo "drugdealer") then { private ["_array","_ind","_val"]; _array = life_shop_npc getVariable ["sellers",[]]; - _ind = [getPlayerUID player,_array] call TON_fnc_index; + _ind = [getPlayerUID player,_array] call life_util_fnc_index; if (!(_ind isEqualTo -1)) then { _val = ((_array select _ind) select 2); _val = _val + _price; diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf index abbfb7b66..d8b4f286c 100644 --- a/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf +++ b/Altis_Life.Altis/core/shops/fn_weaponShopBuySell.sqf @@ -31,7 +31,7 @@ if ((uiNamespace getVariable ["Weapon_Shop_Filter",0]) isEqualTo 1) then { } else { private _altisArray = ["Land_u_Barracks_V2_F","Land_i_Barracks_V2_F"]; private _tanoaArray = ["Land_School_01_F","Land_Warehouse_03_F","Land_House_Small_02_F"]; - private _hideoutObjs = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort; + private _hideoutObjs = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call life_util_fnc_terrainSort; private _hideout = (nearestObjects[getPosATL player,_hideoutObjs,25]) select 0; if (!isNil "_hideout" && {!isNil {group player getVariable "gang_bank"}} && {(group player getVariable "gang_bank") >= _price}) then { _action = [ diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf index ac0de74a5..21138a86d 100644 --- a/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf +++ b/Altis_Life.Altis/core/shops/fn_weaponShopFilter.sqf @@ -133,7 +133,7 @@ if ((uiNamespace getVariable ["Weapon_Magazine",0]) isEqualTo 1 || {(uiNamespace _y = _x; { if (!(_x in _listedItems) && _x != "") then { - _iS = [_x,_y] call TON_fnc_index; + _iS = [_x,_y] call life_util_fnc_index; if !(_iS isEqualTo -1) then { _z = _y select _iS; if (!((_z select 3) isEqualTo -1)) then { diff --git a/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf b/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf index 065894710..fafdb6f96 100644 --- a/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf +++ b/Altis_Life.Altis/core/shops/fn_weaponShopSelection.sqf @@ -20,7 +20,7 @@ if ((uiNamespace getVariable ["Weapon_Shop_Filter",0]) isEqualTo 1) then { _itemArray = M_CONFIG(getArray,"WeaponShops",_shop,"items"); _itemArray append M_CONFIG(getArray,"WeaponShops",_shop,"mags"); _itemArray append M_CONFIG(getArray,"WeaponShops",_shop,"accs"); - _item = [_item,_itemArray] call TON_fnc_index; + _item = [_item,_itemArray] call life_util_fnc_index; _price = ((_itemArray select _item) select 3); _priceTag ctrlSetStructuredText parseText format ["Price: $%1",[(_price)] call life_fnc_numberText]; _control lbSetValue[_index,_price]; diff --git a/Altis_Life.Altis/core/utils/fn_index.sqf b/Altis_Life.Altis/core/utils/fn_index.sqf new file mode 100644 index 000000000..9e79f271a --- /dev/null +++ b/Altis_Life.Altis/core/utils/fn_index.sqf @@ -0,0 +1,12 @@ +/* + File: fn_index.sqf + Author: Bryan "Tonic" Boardwine + + Description: return index of _item in _stack +*/ +params [ + "_item", + ["_stack",[],[[]]] +]; + +_stack findIf {_item in _x}; diff --git a/Altis_Life.Altis/core/utils/fn_isNumber.sqf b/Altis_Life.Altis/core/utils/fn_isNumber.sqf new file mode 100644 index 000000000..215649cdf --- /dev/null +++ b/Altis_Life.Altis/core/utils/fn_isNumber.sqf @@ -0,0 +1,13 @@ +/* + File: fn_isNumber.sqf + Author: Bryan "Tonic" Boardwine + + Description: determines whether or not a string represents a valid number +*/ +params [ + ["_string","",[""]] +]; +if (_string isEqualTo "") exitWith {false}; +private _array = _string splitString ""; + +(_array findIf {!(_x in ["0","1","2","3","4","5","6","7","8","9"])}) isEqualTo -1; diff --git a/Altis_Life.Altis/core/utils/fn_playerQuery.sqf b/Altis_Life.Altis/core/utils/fn_playerQuery.sqf new file mode 100644 index 000000000..3a234bc32 --- /dev/null +++ b/Altis_Life.Altis/core/utils/fn_playerQuery.sqf @@ -0,0 +1,10 @@ +/* + File: fn_playerQuery.sqf + Author: Bryan "Tonic" Boardwine + + Description: + pass local variables to admin +*/ +if (!isRemoteExecuted) exitWith {}; + +[life_atmbank,life_cash,owner player,player,profileNameSteam,getPlayerUID player,playerSide] remoteExecCall ["life_fnc_adminInfo",remoteExecutedOwner]; diff --git a/life_server/Functions/Systems/fn_terrainSort.sqf b/Altis_Life.Altis/core/utils/fn_terrainSort.sqf similarity index 100% rename from life_server/Functions/Systems/fn_terrainSort.sqf rename to Altis_Life.Altis/core/utils/fn_terrainSort.sqf diff --git a/Altis_Life.Altis/core/vehicle/fn_clientGetKey.sqf b/Altis_Life.Altis/core/vehicle/fn_clientGetKey.sqf new file mode 100644 index 000000000..16737225f --- /dev/null +++ b/Altis_Life.Altis/core/vehicle/fn_clientGetKey.sqf @@ -0,0 +1,17 @@ +/* + File: fn_clientGetKey.sqf + Author: Bryan "Tonic" Boardwine + + Description: adds key to keychain and displays a message +*/ +params [ + ["_vehicle", objNull, [objNull]], + ["_from", "", [""]] +]; + +if (_vehicle in life_vehicles) exitWith {}; + +private _name = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"); +hint format [localize "STR_NOTF_gaveKeysFrom",_from,_name]; +life_vehicles pushBack _vehicle; +[getPlayerUID player,playerSide,_vehicle,1] remoteExecCall ["TON_fnc_keyManagement",2]; diff --git a/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf b/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf index 834e627c0..fd6f6a209 100644 --- a/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_deviceMine.sqf @@ -126,7 +126,7 @@ for "_i" from 0 to 1 step 0 do { _vehicle_data = _vehicle getVariable ["Trunk",[[],0]]; _inv = +(_vehicle_data select 0); _space = (_vehicle_data select 1); - _itemIndex = [_resource,_inv] call TON_fnc_index; + _itemIndex = [_resource,_inv] call life_util_fnc_index; _weight = [_vehicle] call life_fnc_vehicleWeight; _random = 10 + round((random(10))); _sum = [_resource,_random,(_weight select 1),(_weight select 0)] call life_fnc_calWeightDiff; // Get a sum base of the remaining weight.. diff --git a/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf b/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf index 93a77f875..5a11359e5 100644 --- a/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_vehStoreItem.sqf @@ -14,7 +14,7 @@ if ((life_trunk_vehicle getVariable ["trunk_in_use_by",player]) != player) exitW _ctrl = ctrlSelData(3503); _num = ctrlText 3506; -if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +if (!([_num] call life_util_fnc_isNumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; _num = parseNumber(_num); if (_num < 1) exitWith {hint localize "STR_MISC_Under1";}; @@ -27,7 +27,7 @@ _inv = _veh_data select 0; if (_ctrl == "goldbar" && {!(life_trunk_vehicle isKindOf "LandVehicle")}) exitWith {hint localize "STR_NOTF_canOnlyStoreInLandVeh";}; if (_ctrl == "money") then { - _index = [_ctrl,_inv] call TON_fnc_index; + _index = [_ctrl,_inv] call life_util_fnc_index; if (CASH < _num) exitWith {hint localize "STR_NOTF_notEnoughCashToStoreInVeh";}; if (_index isEqualTo -1) then { _inv pushBack [_ctrl,_num]; @@ -44,7 +44,7 @@ if (_ctrl == "money") then { if (((_totalWeight select 1) + _itemWeight) > (_totalWeight select 0)) exitWith {hint localize "STR_NOTF_VehicleFullOrInsufCap";}; if (!([false,_ctrl,_num] call life_fnc_handleInv)) exitWith {hint localize "STR_CouldNotRemoveItemsToPutInVeh";}; - _index = [_ctrl,_inv] call TON_fnc_index; + _index = [_ctrl,_inv] call life_util_fnc_index; if (_index isEqualTo -1) then { _inv pushBack [_ctrl,_num]; } else { diff --git a/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf b/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf index 6c0fb418d..4c0fb3f1c 100644 --- a/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf +++ b/Altis_Life.Altis/core/vehicle/fn_vehTakeItem.sqf @@ -17,11 +17,11 @@ if ((life_trunk_vehicle getVariable ["trunk_in_use_by",player]) != player) exitW if ((lbCurSel 3502) isEqualTo -1) exitWith {hint localize "STR_Global_NoSelection";}; _ctrl = ctrlSelData(3502); _num = ctrlText 3505; -if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +if (!([_num] call life_util_fnc_isNumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; _num = parseNumber(_num); if (_num < 1) exitWith {hint localize "STR_MISC_Under1";}; -_index = [_ctrl,((life_trunk_vehicle getVariable "Trunk") select 0)] call TON_fnc_index; +_index = [_ctrl,((life_trunk_vehicle getVariable "Trunk") select 0)] call life_util_fnc_index; _data = (life_trunk_vehicle getVariable "Trunk") select 0; _old = life_trunk_vehicle getVariable "Trunk"; if (_index isEqualTo -1) exitWith {}; diff --git a/Altis_Life.Altis/dialog/cell_phone.hpp b/Altis_Life.Altis/dialog/cell_phone.hpp index f761b3082..6c238b398 100644 --- a/Altis_Life.Altis/dialog/cell_phone.hpp +++ b/Altis_Life.Altis/dialog/cell_phone.hpp @@ -60,7 +60,7 @@ class Life_cell_phone { idc = 3015; text = "$STR_CELL_TextMSGBtn"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_textmsg"; + onButtonClick = "[_this, 'player'] call life_fnc_sendMessage"; x = 0.11; y = 0.35; w = 0.2; @@ -79,7 +79,7 @@ class Life_cell_phone { idc = 3016; text = "$STR_CELL_TextPolice"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_textcop"; + onButtonClick = "[_this, 'cop'] call life_fnc_sendMessage"; x = 0.32; y = 0.35; w = 0.2; @@ -90,7 +90,7 @@ class Life_cell_phone { idc = 3017; text = "$STR_CELL_TextAdmins"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_textadmin"; + onButtonClick = "[_this, 'admin'] call life_fnc_sendMessage"; x = 0.53; y = 0.35; w = 0.2; @@ -101,7 +101,7 @@ class Life_cell_phone { idc = 3020; text = "$STR_CELL_AdminMsg"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_adminmsg"; + onButtonClick = "[_this, 'adminToPlayer'] call life_fnc_sendMessage"; x = 0.32; y = 0.4; w = 0.2; @@ -112,7 +112,7 @@ class Life_cell_phone { idc = 3021; text = "$STR_CELL_AdminMSGAll"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_adminmsgall"; + onButtonClick = "[_this, 'adminAll'] call life_fnc_sendMessage"; x = 0.53; y = 0.4; w = 0.2; @@ -123,7 +123,7 @@ class Life_cell_phone { idc = 3022; text = "$STR_CELL_EMSRequest"; colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", 0.5}; - onButtonClick = "[] call TON_fnc_cell_emsrequest"; + onButtonClick = "[_this, 'med'] call life_fnc_sendMessage"; x = 0.11; y = 0.45; w = 0.2; @@ -140,4 +140,4 @@ class Life_cell_phone { h = (1 / 25); }; }; -}; \ No newline at end of file +}; diff --git a/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf b/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf index ee09479ee..e8f584aac 100644 --- a/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf +++ b/Altis_Life.Altis/dialog/function/fn_bankDeposit.sqf @@ -12,7 +12,7 @@ _value = parseNumber(ctrlText 2702); //Series of stupid checks if (_value > 999999) exitWith {hint localize "STR_ATM_GreaterThan";}; if (_value < 0) exitWith {}; -if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (!([str(_value)] call life_util_fnc_isNumber)) exitWith {hint localize "STR_ATM_notnumeric"}; if (_value > CASH) exitWith {hint localize "STR_ATM_NotEnoughCash"}; CASH = CASH - _value; diff --git a/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf b/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf index ceed20547..1b3bdfd6c 100644 --- a/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf +++ b/Altis_Life.Altis/dialog/function/fn_bankTransfer.sqf @@ -14,7 +14,7 @@ if ((lbCurSel 2703) isEqualTo -1) exitWith {hint localize "STR_ATM_NoneSelected" if (isNil "_unit") exitWith {hint localize "STR_ATM_DoesntExist"}; if (_value > 999999) exitWith {hint localize "STR_ATM_TransferMax";}; if (_value < 0) exitWith {}; -if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (!([str(_value)] call life_util_fnc_isNumber)) exitWith {hint localize "STR_ATM_notnumeric"}; if (_value > BANK) exitWith {hint localize "STR_ATM_NotEnoughFunds"}; _tax = _value * LIFE_SETTINGS(getNumber,"bank_transferTax"); if ((_value + _tax) > BANK) exitWith {hint format [localize "STR_ATM_SentMoneyFail",_value,_tax]}; diff --git a/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf b/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf index a49cf4201..cf653d2c0 100644 --- a/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf +++ b/Altis_Life.Altis/dialog/function/fn_bankWithdraw.sqf @@ -10,7 +10,7 @@ private ["_value"]; _value = parseNumber(ctrlText 2702); if (_value > 999999) exitWith {hint localize "STR_ATM_WithdrawMax";}; if (_value < 0) exitWith {}; -if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (!([str(_value)] call life_util_fnc_isNumber)) exitWith {hint localize "STR_ATM_notnumeric"}; if (_value > BANK) exitWith {hint localize "STR_ATM_NotEnoughFunds"}; if (_value < 100 && BANK > 20000000) exitWith {hint localize "STR_ATM_WithdrawMin"}; //Temp fix for something. diff --git a/Altis_Life.Altis/dialog/function/fn_safeStore.sqf b/Altis_Life.Altis/dialog/function/fn_safeStore.sqf index b94035c54..df2709c99 100644 --- a/Altis_Life.Altis/dialog/function/fn_safeStore.sqf +++ b/Altis_Life.Altis/dialog/function/fn_safeStore.sqf @@ -12,7 +12,7 @@ _ctrl = CONTROL_DATA(3503); _num = ctrlText 3506; //Error checks -if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +if (!([_num] call life_util_fnc_isNumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; _num = parseNumber(_num); if (_num < 1) exitWith {hint localize "STR_Cop_VaultUnder1";}; if (!(_ctrl isEqualTo "goldBar")) exitWith {hint localize "STR_Cop_OnlyGold"}; diff --git a/Altis_Life.Altis/dialog/function/fn_safeTake.sqf b/Altis_Life.Altis/dialog/function/fn_safeTake.sqf index 6b1596160..fe6b3c0dd 100644 --- a/Altis_Life.Altis/dialog/function/fn_safeTake.sqf +++ b/Altis_Life.Altis/dialog/function/fn_safeTake.sqf @@ -15,7 +15,7 @@ _num = ctrlText 3505; _safeInfo = life_safeObj getVariable ["safe",0]; //Error checks -if (!([_num] call TON_fnc_isnumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; +if (!([_num] call life_util_fnc_isNumber)) exitWith {hint localize "STR_MISC_WrongNumFormat";}; _num = parseNumber(_num); if (_num < 1) exitWith {hint localize "STR_Cop_VaultUnder1";}; if (!(_ctrl isEqualTo "goldBar")) exitWith {hint localize "STR_Cop_OnlyGold"}; diff --git a/Altis_Life.Altis/dialog/function/fn_useGangBank.sqf b/Altis_Life.Altis/dialog/function/fn_useGangBank.sqf index eace99c7b..cdcac3051 100644 --- a/Altis_Life.Altis/dialog/function/fn_useGangBank.sqf +++ b/Altis_Life.Altis/dialog/function/fn_useGangBank.sqf @@ -18,7 +18,7 @@ if ((time - life_action_delay) < 0.5) exitWith {hint localize "STR_NOTF_ActionDe if (isNil {(group player) getVariable "gang_name"}) exitWith {hint localize "STR_ATM_NotInGang"}; // Checks if player isn't in a gang if (_value > 999999) exitWith {hint localize "STR_ATM_WithdrawMax";}; if (_value < 1) exitWith {}; -if (!([str(_value)] call TON_fnc_isnumber)) exitWith {hint localize "STR_ATM_notnumeric"}; +if (!([str(_value)] call life_util_fnc_isNumber)) exitWith {hint localize "STR_ATM_notnumeric"}; if (_deposit && _value > CASH) exitWith {hint localize "STR_ATM_NotEnoughCash"}; if (!_deposit && _value > _gFund) exitWith {hint localize "STR_ATM_NotEnoughFundsG"}; diff --git a/Altis_Life.Altis/stringtable.xml b/Altis_Life.Altis/stringtable.xml index 7d45f9ba8..f92de1882 100644 --- a/Altis_Life.Altis/stringtable.xml +++ b/Altis_Life.Altis/stringtable.xml @@ -11,7 +11,7 @@ Configuration du client. Patientez s'il vous plait... Configurando o cliente. Por favor, aguarde... - 配置客户端,请稍等... + 配置客户端,请稍等...
Waiting for the server to be ready... @@ -23,7 +23,7 @@ En attente du chargement du serveur... Esperando o servidor estar pronto... - 等待服务器准备就绪... + 等待服务器准备就绪... extDB failed to load, please contact an administrator. @@ -35,7 +35,7 @@ extDB ne s'est pas lancé correctement. Veuillez contacter un administrateur. O extDB falhou ao carregar, por favor, contacte um administrador. - 数据加载失败,请联系管理员。 + 数据加载失败,请联系管理员。 Finishing client setup procedure... @@ -47,7 +47,7 @@ Completando procedura d'inizializzazione Terminando o processo de configuração do cliente... - 完成客户端设置程序... + 完成客户端设置程序...
@@ -61,7 +61,7 @@ Sklep odzieżowy Emporio di Bruce Bruce's Outback Outfits - 服装商店 + 服装商店 Altis Police Department Shop @@ -73,7 +73,7 @@ Sklep Policyjny Dipartimento della Polizia di Altis Altis Polizei Department Geschäft - 警局商店 + 警局商店 Mohammed's Jihadi Shop @@ -85,7 +85,7 @@ Loja de Roupas Rebeldes Sklep samobójców AKBAR Mohammed's Ausrüstungen - 叛军商店 + 叛军商店 Steve's Diving Shop @@ -97,7 +97,7 @@ Steve's Taucherausrüstung Loja de equipamentos para Mergulho Sklep dla nurków - 潜水商店 + 潜水商店 Billy Joe's Clothing @@ -109,7 +109,7 @@ Vêtements de tir Loja de Roupa do Billy Joe Billy Joe Odzież - 服装商店 + 服装商店 Billy Joe's Firearms @@ -121,7 +121,7 @@ Armurerie de Billy Joe Loja de Armas do Billy Joe Broń palna Billy Joe - 武器商店 + 武器商店 Bobby's Kart-Racing Outfits @@ -133,7 +133,7 @@ Bobby's Gokart Rennbekleidung Loja de equipamentos para Kart Sklep Kartingowy - 卡丁车赛车服 + 卡丁车赛车服 Altis Market @@ -145,7 +145,7 @@ Marché d'Altis Mercado Market Altis - 市场 + 市场 Rebel Market @@ -157,7 +157,7 @@ Marché Rebelle Mercado Rebelde Market Rebeliantów - 叛军市场 + 叛军市场 Gang Market @@ -169,7 +169,7 @@ Marché de Gang Mercado da Gangue Market Gangu - 帮派市场 + 帮派市场 Gang Clothing @@ -181,7 +181,7 @@ Vêtements de Gang Roupa Gangue Gang Odzież - 帮派服装 + 帮派服装 Wong's Food Cart @@ -193,7 +193,7 @@ Restaurant de Wong Praça de Alimentação Przysmaki Wonga - 食品商 + 食品商 Gyro's Coffee @@ -205,7 +205,7 @@ Café de Gyro Café do Gyro Kawiarnia - 咖啡店 + 咖啡店 Tonic's Narcotics @@ -217,7 +217,7 @@ Dealeur de Drogue Traficante Sprzedawca 'Trawy' - 非法药品贸易商 + 非法药品贸易商 Oil Trader @@ -229,7 +229,7 @@ Acheteur de Pétrole Comprador de Petróleo Skup Ropy - 石油贸易商 + 石油贸易商 Local Fish Market @@ -241,7 +241,7 @@ Marché de Poissons Mercado de Peixes Sklep Rybny - 海产品市场 + 海产品市场 Glass Trader @@ -253,7 +253,7 @@ Acheteur de Verre Comprador de Vidro Skup Szkła - 玻璃贸易商 + 玻璃贸易商 Altis Industrial Trader @@ -265,7 +265,7 @@ Acheteur de minerais Comprador de Material Indústrial Skup materiałów przemysłowych - 铁/铜贸易 + 铁/铜贸易 APD Item Shop @@ -277,7 +277,7 @@ Equipement policier Equipamentos da Polícia Zbrojownia Policji - 警察物品店 + 警察物品店 Juan's Cement Laying @@ -289,7 +289,7 @@ Acheteur de Ciment Comprador de Cimento Wytwórnia cementu - 水泥贸易商 + 水泥贸易商 Cash 4 Gold @@ -301,7 +301,7 @@ Acheteur d'Or Comprador de Ouro Skup złota - 黄金贸易商 + 黄金贸易商 Diamond Dealer @@ -313,7 +313,7 @@ Acheteur de Diamant Comprador de Diamante Skup Diamentów - 钻石贸易商 + 钻石贸易商 Salt Trader @@ -325,7 +325,7 @@ Acheteur de Sel Comprador de Sal Skup soli - 食盐贸易商 + 食盐贸易商 Fuel Station Coffee @@ -337,7 +337,7 @@ Tankstellen Café Loja de Conveniência Caffe OLLEN - 加油站咖啡店 + 加油站咖啡店 @@ -351,7 +351,7 @@ Chiudi Fechar Zamknij - 关闭 + 关闭 Sell @@ -363,7 +363,7 @@ Vendi Vender Sprzedaj - 出售 + 出售 Buy @@ -375,7 +375,7 @@ Compra Comprar Kup - 购买 + 购买 Magazines @@ -387,7 +387,7 @@ Munições Magazine - 弹药 + 弹药 Accessories @@ -399,7 +399,7 @@ Acessórios Zubehör - 附件 + 附件 Weapons @@ -411,7 +411,7 @@ Armas Bewaffnung - 武器 + 武器 Give @@ -423,7 +423,7 @@ Dai Dar Daj - 给予 + 给予 Use @@ -435,7 +435,7 @@ Usa Usar Użyj - 使用 + 使用 Remove @@ -447,7 +447,7 @@ Rimuovi Remover Usuń - 删除 + 删除 Settings @@ -459,7 +459,7 @@ Impostazioni Configurar Opcje - 设置 + 设置 Rent @@ -471,7 +471,7 @@ Affitta Alugar Wynajmij - 租赁 + 租赁 Retrieve @@ -483,7 +483,7 @@ Ritira Recuperar Odzyskaj - 取回 + 取回 You did not select anything. @@ -495,7 +495,7 @@ Non hai selezionato nulla. Você não selecionou nada. Niczego nie zaznaczyłeś. - 你没有选择任何东西。 + 你没有选择任何东西。 Yes @@ -507,7 +507,7 @@ Si Sim Tak - + No @@ -519,7 +519,7 @@ No Não Nie - + Cancel @@ -531,7 +531,7 @@ Annulla Cancelar Anuluj - 取消 + 取消 @@ -545,7 +545,7 @@ Menu Admin Menu Admin Admin Menu - 管理菜单 + 管理菜单 Put the amount you want to compensate: @@ -557,7 +557,7 @@ Trage den Wert für die Entschädigung ein: Coloque a quantidade que você quer compensar: Wprowadź wartość rekompensaty - 输入赔偿金额: + 输入赔偿金额: Get ID @@ -569,7 +569,7 @@ Vedi ID Obter ID ID gracza - 获取 ID + 获取 ID Spectate @@ -581,7 +581,7 @@ Regarder Observar Obserwuj - 观看 + 观看 Teleport @@ -593,7 +593,7 @@ Téléporter Teleportar Teleport - 传送 + 传送 TP Here @@ -605,7 +605,7 @@ TP Ici TP Aqui Do Mnie - 传送到这儿 + 传送到这儿 You cannot teleport the player here because they are inside of a vehicle. @@ -617,7 +617,7 @@ Você não pode se teletransportar o jogador aqui, porque ele esta dentro de um veículo. Вы не можете телепортировать игрока здесь, потому что они находятся внутри автомобиля. Du kannst den Spieler nicht hierher teleportieren, weil dieser im Inneren eines Fahrzeugs sitzt. - 你不能将玩家传送到这里,因为他们在车内。 + 你不能将玩家传送到这里,因为他们在车内。 Debug @@ -629,7 +629,7 @@ Debug Depuração Debug - 清除BUG + 清除BUG Comp @@ -641,7 +641,7 @@ Compenser Compensar Comp - 赔偿金 + 赔偿金 GodMode @@ -653,7 +653,7 @@ God Modo Deus GodMode - 上帝模式 + 上帝模式 Freeze @@ -665,7 +665,7 @@ Freeze Congelar Zamroź - 冻结 + 冻结 Markers @@ -677,7 +677,7 @@ Marqueurs Marcações Markery - 标记 + 标记 @@ -691,7 +691,7 @@ Ricerca... Pesquisando... Wyszukuję... - 查询... + 查询... Searching Database for vehicles... @@ -703,7 +703,7 @@ Ricerca di veicoli nel Database... Buscando por veículo na base de dados... Szukam pojazdu w bazie danych... - 从数据库中搜索载具... + 从数据库中搜索载具... You are already querying a player. @@ -715,7 +715,7 @@ Stai già ispezionando un giocatore. Você já está buscando por um jogador. Przeszukujesz gracza - 你已经在查询玩家了。 + 你已经在查询玩家了。 Player no longer exists? @@ -727,7 +727,7 @@ Il giocatore non esiste più Jogador não existe mais? Gracz już nie istnieje? - 玩家不存在? + 玩家不存在? You are about to give yourself $%1 to compensate to another player <br/><br/>You must give this cash to the person you are compensating manually. @@ -739,7 +739,7 @@ Vous êtes sur le point de vous donner $%1 pour rembourser un autre joueur <br/><br/> Merci de le lui donner manuellement. Você está prestes a dar para você mesmo R$%1 para compensar outro jogador <br/><br/>Você deve dar este dinheiro para a pessoa que você está compensando manualmente. Właśnie przydzieliłeś sobie $%1 w celu rekompensaty graczowi <br/><br/>Musisz przekazać te środki osobiście osobie poszkodowanej. - 你将获得赔偿金 $%1,小心别输入错误了 <br/><br/>你只能手动操作把这笔钱给玩家。 + 你将获得赔偿金 $%1,小心别输入错误了 <br/><br/>你只能手动操作把这笔钱给玩家。 You have added $%1 to your account. @@ -751,7 +751,7 @@ Vous avez ajouté $%1 à votre compte Você adicionou R$%1 em sua conta. Przekazałeś na konto $%1 - 你已将 $%1 添加到你的账户上 。 + 你已将 $%1 添加到你的账户上 。 You can not go above $999,999 @@ -763,7 +763,7 @@ Vous ne pouvez pas aller au-dessus $999,999 ! Você não pode ir além de $999,999! Nie można obracać kwotami wyższymi niż $999,999! - 你不能处理超过 $999,999 的资金 + 你不能处理超过 $999,999 的资金 Please type in the amount to compensate. @@ -775,7 +775,7 @@ S'il vous plaît entrez le montant pour compenser. Por favor, insira a quantidade para compensar. Wprowadź kwotę rekompensaty - 请输入赔偿金额。 + 请输入赔偿金额。 You have disabled %1's input. @@ -787,7 +787,7 @@ Vous avez désactivé les contrôles de %1. Você desabilitou as entradas de %1. Zablokowałeś grę gracza $%1 - 您被禁止 %1 秒输入。 + 您被禁止 %1 秒输入。 You have enabled %1's input. @@ -799,7 +799,7 @@ Vous avez activé les contrôles de %1. Você habilitou as entradas de %1. Odblokowałeś grę gracza $%1 - 你被允许 %1 秒输入。 + 你被允许 %1 秒输入。 You can't do that dumbass. @@ -811,7 +811,7 @@ Vous ne pouvez pas le faire sur vous-même. Você não pode fazer isso, idiota. Tak nie można! - 你不可以这样做。 + 你不可以这样做。 Your Admin Level is not high enough. @@ -823,7 +823,7 @@ Votre niveau admin n'est pas suffisamment élevé. Seu nível de Admin não é alto o bastante. Nie masz wystarczających uprawnień, za niski poziom administracyjny - 您的管理等级不够高。 + 您的管理等级不够高。 Player Markers Disabled. @@ -835,7 +835,7 @@ Spieler Markierungen deaktiviert. Marcações dos jogadores desabilitada. Markery 'OFF' graczy Wyłączone - 禁用玩家标记。 + 禁用玩家标记。 Player Markers Enabled. @@ -847,7 +847,7 @@ Spieler Markierungen aktiviert. Marcações dos jogadores habilitada. Markery 'ON' graczy Włączone - 启用玩家标记。 + 启用玩家标记。 God mode enabled @@ -859,7 +859,7 @@ Modo Deus ativado Режим бога включен Gott-Modus aktiviert. - 启用上帝模式 + 启用上帝模式 God mode disabled @@ -871,7 +871,7 @@ Modo Deus desativado Режим бога отключен Gott-Modus deaktiviert. - 禁用上帝模式 + 禁用上帝模式 Action Cancelled @@ -883,7 +883,7 @@ Azione Annullata Ação Cancelada Anulowano akcję - 操作取消 + 操作取消 Commander/Tactical View Disabled @@ -895,7 +895,7 @@ Commander/Tactical View Disabled Commander/Tactical View Disabled Commander/Tactical View Disabled - 指挥官/战术视图被禁用 + 指挥官/战术视图被禁用 Hit spacebar to place the container. @@ -907,7 +907,7 @@ Pressione a barra de espaço para colocar. Хит пробел, чтобы поместить контейнер. Drücke die Leertaste, um den Container zu platzieren. - 按空格键放置物品。 + 按空格键放置物品。 Placement of container has been aborted. @@ -919,7 +919,7 @@ Placement of container has been aborted. Placement of container has been aborted. Die Platzierung des Containers wurde abgebrochen. - 物品放置已被中止. + 物品放置已被中止. Your faction is not allowed to chop vehicles! @@ -931,7 +931,7 @@ Sua facção não têm direito de usar essa loja Deiner Fraktion ist es nicht erlaubt, Fahrzeuge bei dem Schrotthändler zu verkaufen! - 你的帮派不允许出售这载具! + 你的帮派不允许出售这载具! A pickaxe is required @@ -943,7 +943,7 @@ Devi possedere un piccone! A picareta é necessária Wymagana jest kilof - 你需要一把镐 + 你需要一把镐 You are restrained @@ -955,7 +955,7 @@ Sei stato ammanettato Você está algemado Ty skrępowaniem - 你被限制 + 你被限制 You can't do this while you surrender @@ -967,7 +967,7 @@ Non puoi effettuare questa azione mentre tieni le mani in alto Você não pode fazer isso enquanto você se entrega Nie można tego zrobić, gdy się poddasz - 你投降时不能这么做 + 你投降时不能这么做 You can't gather this resource with this vehicle! @@ -979,7 +979,7 @@ Non puoi raccogliere questa risorsa con questo veicolo ! Voce não pode colher este recurso com este veiculo! You can't gather this resource with this vehicle! - 你不能用这载具收集这个资源! + 你不能用这载具收集这个资源! You have no business using this. @@ -991,7 +991,7 @@ Você não tem nenhum negócio usando isto. У вас нет бизнеса с помощью этого. Du hast hier nichts verloren! - 您无权这样做。 + 您无权这样做。 Admin %1 has opened the debug console. @@ -1003,7 +1003,7 @@ Administrador %1 abriu o console de depuração. Администратор %1 открыл консоль отладки. Admin %1 hat die Debug-Konsole geöffnet. - 管理员 %1 已打开调试控制台。 + 管理员 %1 已打开调试控制台。 You cannot drop keys to a vehicle which is locked and you are inside of. @@ -1015,7 +1015,7 @@ You cannot drop keys to a vehicle which is locked and you are inside of. You cannot drop keys to a vehicle which is locked and you are inside of. Du kannst den Schlüssel nicht wegschmeißen, weil das Auto verschlossen ist und du drin sitzt. - 你不能把钥匙掉在一辆锁着的车里,你就在车里面。 + 你不能把钥匙掉在一辆锁着的车里,你就在车里面。 Emergency lights are not set for this vehicle. @@ -1027,7 +1027,7 @@ Emergency lights are not set for this vehicle. Emergency lights are not set for this vehicle. Emergency lights are not set for this vehicle. - 此车辆没有设置应急灯。 + 此车辆没有设置应急灯。 @@ -1041,7 +1041,7 @@ Gestione Bancaria Conta Bancária Bankomat Altis - 银行账户管理 + 银行账户管理 Withdraw @@ -1053,7 +1053,7 @@ Preleva Sacar Wypłać - 取款 + 取款 Deposit @@ -1065,7 +1065,7 @@ Deposita Depositar Deopozyt - 存款 + 存款 Withdraw: Gang @@ -1077,7 +1077,7 @@ Ritira: Gang Wycofaj: Gang Abheben: Gang - 取款:帮派 + 取款:帮派 Deposit: Gang @@ -1089,7 +1089,7 @@ Deposita: Gang Depozyt: Gang Einzahlen: Gang - 存款: 帮派 + 存款: 帮派 Transfer @@ -1101,7 +1101,7 @@ Trasferisci Transferir Przelew - 转账 + 转账 You can't deposit more then $999,999 at a time @@ -1113,7 +1113,7 @@ Non puoi depositare più di €999,999 alla volta Você não pode transferir mais de R$999.999 em uma transação Możesz jednorazowo zdeponować nie więcej niż $999,999 - 您一次不能存入超过 $999,999 + 您一次不能存入超过 $999,999 The amount entered isn't a numeric value. @@ -1125,7 +1125,7 @@ Il valore inserito non è numerico. O valor digitado não é um número. Wprwadzona wartość nie jest liczbą - 输入的金额不是数值。 + 输入的金额不是数值。 You need to select someone to transfer to @@ -1137,7 +1137,7 @@ Devi selezionare qualcuno a cui trasferire l'importo Você tem que selecionar para quem deseja transferir Musisz wybrać odbiorcę przelewu - 您需要选择某人来转账 + 您需要选择某人来转账 The player selected doesn't seem to exist? @@ -1149,7 +1149,7 @@ Sembra che il giocatore selezionato non esista O jogador selecionado parece não existir! Wybrany gracz wydaje się nie występować w grze - 选定的玩家似乎不存在? + 选定的玩家似乎不存在? You can't transfer more then $999,999 @@ -1161,7 +1161,7 @@ Non puoi trasferire più di €999.000 alla volta Você pode trasferir no máximo R$999.999. Możesz jednorazowo przelać nie więcej niż $999,999 - 你转账不能超过 $999,999 + 你转账不能超过 $999,999 You don't have that much in your bank account! @@ -1173,7 +1173,7 @@ Non hai fondi sufficienti nel tuo conto in banca! Você não tem todo esse dinhero na sua conta bancária Nie masz tyle środków na koncie! - 你的银行账户里没有那么多钱! + 你的银行账户里没有那么多钱! You don't have that much in your gang bank account! @@ -1185,7 +1185,7 @@ Vous n'avez pas autant sur le compte de votre gang ! Você não tem todo esse dinhero na sua gangue! Ihr habt nicht genügend Geld auf dem Gangkonto! - 你的帮派银行账户里没有那么多钱! + 你的帮派银行账户里没有那么多钱! You do not have enough money in your bank account, to transfer $%1 you will need $%2 as a tax fee. @@ -1197,7 +1197,7 @@ Non hai fondi sufficienti nel tuo conto in banca, per trasferire €%1 necessiti di €%2 per pagare la tassa di trasferimento. Você não tem dinheiro suficiente na sua conta bancária. Para trasferir R$%1 você irá pagar R$%2 de taxa Nie masz wystarczająco dużo środków na końcie, do przelewu $%1 będziesz potrzebował jeszcze $%2 na opłatę - 你的银行账户里没有足够的钱, 要转账 $%1 你需要支付 $%2 作为手续费. + 你的银行账户里没有足够的钱, 要转账 $%1 你需要支付 $%2 作为手续费. You have transfered $%1 to %2.\n\nA tax fee of $%3 was taken for the wire transfer. @@ -1209,7 +1209,7 @@ Hai trasferito €%1 a %2.\n\nSono stati trattenuti €%3 di tassa per il trasferimento. Você trasferiu R$%1 para %2.\n\nA taxa de trasferência foi de: R$%3. Przelałeś $%1 do %2.\n\nA opłata $%3 pobrana przez WIRE TRANSFER - 你已转账 $%1 给 %2。\n\n手续费 $%3 已从你的账户扣除。 + 你已转账 $%1 给 %2。\n\n手续费 $%3 已从你的账户扣除。 %1 has wire transferred $%2 to you. @@ -1221,7 +1221,7 @@ %1 ha effettuato un bonifico sul tuo conto di €%2 %1 transferiu $%2 para a tua conta. - %1 通过电汇将 $%2 转账给你。 + %1 通过电汇将 $%2 转账给你。 You can't withdraw more then $999,999 @@ -1233,7 +1233,7 @@ Non puoi prelevare più di €999.000 in una volta Você pode sacar no máximo R$999.999 Możesz jednorazowo pobrać maks $999,999 - 你不能取款大于 $999,999 + 你不能取款大于 $999,999 You can't withdraw less then $100 @@ -1245,7 +1245,7 @@ Non puoi prelevare meno di €100 Você não pode sacar menos de $100. Nie możesz pobrać mniej niż $100 - 你不能取款小于 $100 + 你不能取款小于 $100 You have withdrawn $%1 from your bank account @@ -1257,7 +1257,7 @@ Hai prelevato €%1 dal tuo conto in banca Você sacou R$%1 de sua conta bancária. Pobrałeś z konta kwotę $%1 - 你已从你的银行账户取走 $%1 + 你已从你的银行账户取走 $%1 You have withdrawn $%1 from your gang. @@ -1269,7 +1269,7 @@ Vous avez retiré $%1 de votre gang. Você sacou R$%1 da sua gangue Du hast $%1 vom Gangkonto abgehoben. - 你已从你的帮派账户取走 $%1 . + 你已从你的帮派账户取走 $%1 . Someone is already trying to withdraw from your gang. @@ -1281,7 +1281,7 @@ Alguém já está tentando sacar da sua gangue. Jemand versucht bereits, Geld vom Gangkonto abzuheben. - 有人从你的帮派账户中取款. + 有人从你的帮派账户中取款. You do not have that much cash on you. @@ -1293,7 +1293,7 @@ Non hai abbastanza denaro con te. Você não tem todo esse dinheiro. Nie masz przy sobie tyle pieniędzy - 你身上没有那么多现金. + 你身上没有那么多现金. You have deposited $%1 into your bank account @@ -1305,7 +1305,7 @@ Hai despositato €%1 nel tuo conto bancario Você depositou R$%1 na sua conta bancária Zdeponowałeś na koncie bankowym $%1 - 你已将 $%1 存入到你的银行账户 + 你已将 $%1 存入到你的银行账户 You have deposited $%1 into your gang's bank account. @@ -1317,7 +1317,7 @@ Hai despositato €%1 nei fondi della tua gang. Você depositou R$%1 na conta da sua gangue. Zdeponowałeś na koncie gangu kwotę $%1. - 你已将 $%1 存入到你的帮派账户. + 你已将 $%1 存入到你的帮派账户. Someone is already trying to deposit into your gang's bank account. @@ -1329,7 +1329,7 @@ Alguém já está tentando depositar na conta da sua gangue. Jemand versucht bereits Geld auf das Gangkonto einzuzahlen. - 有人存款到你的帮派银行账户. + 有人存款到你的帮派银行账户. You are not in a Gang! @@ -1340,7 +1340,7 @@ Nie jesteś w gangu! Você não está em uma gangue! Du bist nicht in einer Gang! - 你没有在帮派里! + 你没有在帮派里! @@ -1354,7 +1354,7 @@ Cellulare Altis Celular Telefon - 手机 + 手机 Message To Send: @@ -1366,7 +1366,7 @@ Messaggio da inviare: Mensagem à enviar: Treść wiadomości - 发送信息: + 发送信息: Text Message: @@ -1378,7 +1378,7 @@ Msg Giocatore: Mensagem: Do: Gracz - 发短信: + 发短信: Text Police @@ -1390,7 +1390,7 @@ Msg Polizia Polícia Do: Policja - 发短信给警察 + 发短信给警察 Text Admins @@ -1402,7 +1402,7 @@ Msg Admin Msg Admins Do: Admin - 发短信给管理 + 发短信给管理 Admin Message @@ -1414,7 +1414,7 @@ Admin Msg Admin Msg AdmGracz - 管理员信息 + 管理员信息 Admin Msg All @@ -1426,7 +1426,7 @@ Admin Msg Admin Msg All SMS do Wszyscy - 管理员全服信息 + 管理员全服信息 Request EMS @@ -1438,7 +1438,7 @@ Msg medici Chamar SAMU MEDYK - 发短信给医疗 + 发短信给医疗 @@ -1452,7 +1452,7 @@ You must enter a message to send! You must enter a message to send! You must enter a message to send! - 您必须输入要发送的消息! + 您必须输入要发送的消息! Your message cannot exceed 400 characters! @@ -1464,7 +1464,7 @@ Your message cannot exceed 400 characters! Your message cannot exceed 400 characters! Your message cannot exceed 400 characters! - 您的信息不能超过400个字符! + 您的信息不能超过400个字符! You must select a player you are sending the text to! @@ -1476,7 +1476,7 @@ You must select a player you are sending the text to! You must select a player you are sending the text to! You must select a player you are sending the text to! - 当你发送信息时必须选择一个玩家! + 当你发送信息时必须选择一个玩家! You have sent a message to all EMS Units. @@ -1488,7 +1488,31 @@ You have sent a message to all EMS Units. You have sent a message to all EMS Units. You have sent a message to all EMS Units. - 你已经向所有医护人员发送了消息. + 你已经向所有医护人员发送了消息. + + + You have sent a message to all Police Units. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + Du hast eine Nachricht an alle Polizisten gesendet. + Vous avez envoyé un message à tous les Police. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + + + + You have sent a message to all Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + Du hast eine Nachricht an alle Admins gesendet. + Vous avez envoyé un message à tous les Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + You sent %1 a message: %2 @@ -1500,7 +1524,7 @@ You sent %1 a message: %2 You sent %1 a message: %2 You sent %1 a message: %2 - 你向 %1 发送了信息: %2 + 你向 %1 发送了信息: %2 You are not an admin! @@ -1512,7 +1536,7 @@ You are not an admin! You are not an admin! You are not an admin! - 你不是管理员! + 你不是管理员! Admin Message Sent To: %1 - Message: %2 @@ -1524,19 +1548,43 @@ Admin Message Sent To: %1 - Message: %2 Admin Message Sent To: %1 - Message: %2 Admin Message Sent To: %1 - Message: %2 - 管理员消息发送给: %1 - 信息: %2 + 管理员消息发送给: %1 - 信息: %2 - Admin Message Sent To All: %1 - Admin Message Sent To All: %1 - Admin Message Sent To All: %1 - Admin Message Sent To All: %1 - Admin Nachricht Gesendet an Alle: %1 - Message admin envoyé à tous les joueurs : %1 - Admin Message Sent To All: %1 - Admin Message Sent To All: %1 - Admin Message Sent To All: %1 - 管理员发送信息到全体: %1 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Nachricht Gesendet an Alle: %2 + Message admin envoyé à tous les joueurs : %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + 管理员发送信息到全体: %2 + + + There are currently no police units available! + Momentálně nejsou k dispozici žádné policejní jednotky! + ¡Actualmente no hay unidades de policía disponibles! + В настоящее время нет полицейских подразделений! + Aktuell stehen keine Polizeieinheiten zur Verfügung! + Il n'y a actuellement aucune unité de police disponible! + Al momento non ci sono unità di polizia disponibili! + Actualmente não há unidades policiais disponíveis! + Obecnie nie ma żadnych jednostek policyjnych! + 目前没有警用单位! + + + There are currently no EMS units available! + Momentálně nejsou k dispozici žádné jednotky EMS! + Actualmente no hay unidades de EMS disponibles! + В настоящее время нет доступных модулей EMS! + Aktuell stehen keine Sanitäter zur Verfügung! + Il n'y a actuellement aucune unité EMS disponible ! + Attualmente non ci sono unità EMS disponibili! + Não existem actualmente unidades EMS disponíveis! + Obecnie nie ma dostępnych jednostek EMS! + 目前没有特快专递单位! @@ -1550,7 +1598,7 @@ Ricettatore Desmanche Dziupla - 销赃盗窃的载具 + 销赃盗窃的载具 @@ -1564,7 +1612,7 @@ Gestione Gang Gerenciar Gangue Gang Menu - 帮派管理 + 帮派管理 Gang Management - Current Gangs @@ -1576,7 +1624,7 @@ Gestione Gang - Gang Attuali Gerenciar Gangue - Gangue atual Gang - zarządzaj - 帮派管理-当前帮派 + 帮派管理-当前帮派 Join @@ -1588,7 +1636,7 @@ Unisciti Entrar Dołącz - 加入 + 加入 Leave @@ -1600,7 +1648,7 @@ Abbandona Sair Opuść - 退出 + 退出 Upgrade Slots @@ -1612,7 +1660,7 @@ Aumenta Posti Aumentar o número de Slots Powiększ gang - 升级人数 + 升级人数 Kick @@ -1624,7 +1672,7 @@ Espelli Expulsar Wykop - 踢出 + 踢出 Set Leader @@ -1636,7 +1684,7 @@ Imposta Capo Passar Liderança Ustaw lidera - 设置管理者 + 设置管理者 To create a gang it costs $%1 @@ -1648,7 +1696,7 @@ Creare una gang costa $%1 Criar uma Gangue custa R$%1 Koszt ustanowienia gangu to $%1 - 创建一个帮派的成本 $%1 + 创建一个帮派的成本 $%1 Create @@ -1660,7 +1708,7 @@ Crea Criar Stwórz - 创建 + 创建 Your Gang Name @@ -1672,7 +1720,7 @@ Nome della tua Gang Nome da Gangue Nazwa gangu - 输入你要创建的帮派名字 + 输入你要创建的帮派名字 Invite Player @@ -1684,7 +1732,7 @@ Invita Giocatore Convidar Jogador Zaproś - 邀请玩家 + 邀请玩家 Disband Gang @@ -1696,7 +1744,7 @@ Sciogli Gang Desfazer Gangue Opuść gang - 解散帮派 + 解散帮派 Gang Invitation @@ -1708,7 +1756,7 @@ Invito Gang Convite para Gangue Zaproszenie do gangu - 帮派邀请 + 帮派邀请 Transfer Gang Leadership @@ -1720,7 +1768,7 @@ Trasferisci Comando Transferir Liderança Przekaż kierowanie gangiem - 移交帮派管理 + 移交帮派管理 Upgrade Maximum Allowed Gang Members @@ -1732,7 +1780,7 @@ Aumenta numero massimo membri della Gang Atualizar limite máximo de membros Zwiększ maksymalną liczbę członków gangu - 升级帮派成员人数 + 升级帮派成员人数 @@ -1746,7 +1794,7 @@ Devi creare una gang prima di catturarla! Você precisa criar uma gangue antes de tentar capturar! Przed przechwyceniem musisz stworzyć gang - 您必须先创建一个帮派然后才能建立帮派据点! + 您必须先创建一个帮派然后才能建立帮派据点! Your gang already has control over this hideout! @@ -1758,7 +1806,7 @@ La tua Gang ha già il controllo di questo Covo Sua gangue já tem controle sobre esse esconderijo! Twój gang aktualnie kontroluje tę kryjówkę ! - 你的帮派已经控制了这个帮派据点! + 你的帮派已经控制了这个帮派据点! Only one person shall capture at once! @@ -1770,7 +1818,7 @@ Può conquistare solo una persona alla volta! Somente uma pessoa pode capturar! Przejmowanie powinna przeprowadzić na raz tylko jedna osoba - 每次只能抓捕帮派据点的一个人! + 每次只能抓捕帮派据点的一个人! This hideout is controlled by %1.<br/><br/>Are you sure you want to take over their gang area? @@ -1782,7 +1830,7 @@ Questo Covo è controllato da %1.<br/><br/>Sicuro di voler prendere il controllo della loro area? Esse esconderijo é controlado por %1.<br/><br/>Você tem certeza que deseja tomar essa área? Ta kryjówka jest kontrolowana przez %1.<br/><br/>Jesteś pewny że chcesz przjąć ten rejon. - 帮派据点由 %1 控制.<br/><br/>你确定要接管他们的帮派吗? + 帮派据点由 %1 控制.<br/><br/>你确定要接管他们的帮派吗? Hideout is currently under control... @@ -1794,7 +1842,7 @@ Il Covo è già sotto controllo... Esconderijo sobre controle.... Kryjówka pod kontrolą ... - 帮派据点正在控制... + 帮派据点正在控制... Capturing cancelled @@ -1806,7 +1854,7 @@ Cattura annullata Ação concelada Przejmowanie anulowane - 帮派据点控制取消 + 帮派据点控制取消 Capturing Hideout @@ -1818,7 +1866,7 @@ Catturando il Covo Capturando Esconderijo Przejmowanie kryjówki - 控制的帮派据点 + 控制的帮派据点 Hideout has been captured. @@ -1830,7 +1878,7 @@ Hideout foi capturado. Хайдеаут был захвачен в плен. Versteck wurde eingenommen. - 帮派据点已被控制。 + 帮派据点已被控制。 %1 and his gang: %2 - have taken control of a local hideout! @@ -1842,7 +1890,7 @@ %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! %1 e sua gangue: %2 - agora têm o controle de um esconderijo! %1 i jego gang: %2 - przejął kontrolę nad kryjówką! - %1 和他的帮派: %2 - 已经控制了一个帮派据点! + %1 和他的帮派: %2 - 已经控制了一个帮派据点! You can't have a gang name longer then 32 characters. @@ -1854,7 +1902,7 @@ %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! O nome de sua gangue não pode ter mais de 32 caracteres. Nazwa gangu może posiadać maksymalnie 32 znaki - 你的帮派名称超过32个字符。 + 你的帮派名称超过32个字符。 You have invalid characters in your gang name. It can only consist of Numbers and letters with an underscore @@ -1866,7 +1914,7 @@ Hai inserito caratteri non validi nel nome della Gang. Puoi inserire solo numeri e lettere con un underscore O nome da sua gangue tem caracteres inválidos. O nome so pode conter caracteres e números separados por underline Masz nieprawidłowe znaki w nazwie gangu - tylko litery i cyfry oraz podkreślnik - 你的帮派名称中有无效字符,它只能由下划线、数字和字母组成 + 你的帮派名称中有无效字符,它只能由下划线、数字和字母组成 You do not have enough money in your bank account.\n\nYou lack: $%1 @@ -1878,7 +1926,7 @@ Non hai abbastanza fondi nel tuo conto in banca.\n\nTi mancano: $%1 Você não tem dinheiro suficiente na sua conta bancária.\n\nFaltam: R$%1 Nie masz tyle pieniędzy na koncie.\n\nYou brakuje: $%1 - 你的银行账户里没有足够的钱.\n\n你缺少: $%1 + 你的银行账户里没有足够的钱.\n\n你缺少: $%1 You have created the gang %1 for $%2 @@ -1890,7 +1938,7 @@ Hai creato la Gang %1 al costo di $%2 Você criou a gangue %1 por R$%2 Stworzyłeś gang %1 za $%2 - 你创造帮派 %1 花费了 $%2 + 你创造帮派 %1 花费了 $%2 You are about to disband the gang, by disbanding the gang it will be removed from the database and the group will be dropped. <br/><br/>Are you sure you want to disband the group? You will not be refunded the price for creating it. @@ -1902,7 +1950,7 @@ Stai per sciogliere la Gang, facendolo sarà rimossa dal Database e il gruppo verrà cancellato. <br/><br/>Sei sicuro di voler sciogliere il gruppo? Non verrai rimborsato dei fondi spesi per crearlo. Você vai desfazer a sua gangue, ela será apagada do banco de dados. <br/><br/>Você tem certeza que quer desfazer a gangue? Você não será reembolsado. Chcesz rozwiązać gang, po jego rozwiązaniu zostanie on usunięty z bazy danych i cała grupa zostanie rozwiązana. <br/><br/>Naprawdę chcesz rozwiązać grupę? Nie dostaniesz zwrotu środków za przeznaczonych na stworzenie gangu. - 你要解散帮派,帮派将从数据库中删除. <br/><br/>你确定你想解散帮派? 不会退还你创建帮派的花费. + 你要解散帮派,帮派将从数据库中删除. <br/><br/>你确定你想解散帮派? 不会退还你创建帮派的花费. Disbanding the gang... @@ -1914,7 +1962,7 @@ Sciogliendo la Gang... Desfazendo a gangue... Rozwiąż gang - 解散帮派... + 解散帮派... Disbanding cancelled @@ -1926,7 +1974,7 @@ Scioglimento annullato Desfazer gangue cancelado Rozwiązywanie gangu anulowane - 解散取消 + 解散取消 The leader has disbanded the gang. @@ -1938,7 +1986,7 @@ Il Capo ha sciolto la Gang O lider desfez a gangue. Szef rozwiązał gang - 老大解散了帮派。 + 老大解散了帮派。 %1 has invited you to a gang called %2<br/>If you accept the invitation you will be a part of their gang and will have access to the gang funds and controlled gang hideouts. @@ -1950,7 +1998,7 @@ %1 ti ha invitato nella Gang: %2<br/>Se vuoi accettarai l'invito entrerai a far parte della loro Gang ed avrai accesso ai loro fondi e ai loro Covi. %1 convidou você para a gangue %2<br/>Se você aceitar terá acesso aos recursos da gangue e os esconderijos controlados pela mesma. %1 zaprosił cię do gangu o nazwie %2<br/>Jeżeli zaakceptujesz zaproszenie będziesz członkiem gangu i uzyskasz dostęp do funduszy gangu oraz jego kryjówek - %1 邀请你加入一个叫做 %2 的帮派<br/>如果你接受了这个邀请,你将成为他们的帮派成员,并且可以获得帮派资金和使用帮派控制的帮派据点。 + %1 邀请你加入一个叫做 %2 的帮派<br/>如果你接受了这个邀请,你将成为他们的帮派成员,并且可以获得帮派资金和使用帮派控制的帮派据点。 You are about to invite %1 to your gang, if they accept the invite they will have access to the gang's funds. @@ -1962,7 +2010,7 @@ Stai per invitare %1 nella tua Gang, se accetterà l'invito avrà accesso ai fondi della Gang. Você está prestes a convidar %1 para a gangue, ele terá acesso aos recursos da gangue. Właśnie zaprosiłeś %1 do gangu, jeśli zaakceptuje zaproszenie będzie miał dostęp do funduszy gangu. - 您将邀请 %1 加入您的帮派,如果他接受邀请,他将有权使用帮派的资金。 + 您将邀请 %1 加入您的帮派,如果他接受邀请,他将有权使用帮派的资金。 You need to select a person to invite! @@ -1974,7 +2022,7 @@ Devi selezionare una persona da invitare! Você tem que selecionar um jogador para convidar! Musisz zaznaczyć osobę aby ją zaprosić - 你需要选择一个人来邀请他! + 你需要选择一个人来邀请他! You have sent a invite to your gang to %1 @@ -1986,7 +2034,7 @@ Hai mandato l'invito alla tua Gang a %1 Você enviou um convite para %1 se juntar a sua gangue Wysłałeś zaproszenie do twojego gangu do %1 - 你已经给 %1 发送了一个加入你帮派的邀请 + 你已经给 %1 发送了一个加入你帮派的邀请 Invitation Cancelled @@ -1998,7 +2046,7 @@ Invito Annullato Convite Cancelado Zaproszenie anulowane - 取消邀请 + 取消邀请 You cannot kick yourself! @@ -2010,7 +2058,7 @@ Non puoi espellerti da solo! Você não pode kickar você mesmo! Nie możesz sam się wykopać! - 你不能踢出自己! + 你不能踢出自己! Your gang has reached its maximum allowed slots, please upgrade your gangs slot limit. @@ -2022,7 +2070,7 @@ la tua Gang ha raggiungo il numero massimo di posti consentiti, aumentane il limite. Sua gangue está lotada, você deve aumentar o número máximo de jogadores. Twój gang osiągnął maksymalną pojemność, powiększ swój gang! - 你的帮派成员数已经达到了允许的最大范围, 请升级你的帮派成员数. + 你的帮派成员数已经达到了允许的最大范围, 请升级你的帮派成员数. You need to select a person to kick! @@ -2034,7 +2082,7 @@ Devi selezionare una persona da espellere! Você tem que selecionar um jogador para kickar! Musisz zaznaczyć osobę do wykopania - 你需要选择一个人来踢出! + 你需要选择一个人来踢出! You cannot leave the gang without appointing a new leader first! @@ -2046,7 +2094,7 @@ Non puoi abbandonare la Gang prima di aver selezionato un nuovo Capo! Você não pode sair da gangue sem transferir a liderança antes! Nie możesz opuścić gangu bez przekazania komuś szefostwa nad gangiem - 没有任命新的老大,你不能离开这个帮派! + 没有任命新的老大,你不能离开这个帮派! You have quit the gang. @@ -2058,7 +2106,7 @@ You have quit the gang. You have quit the gang. You have quit the gang. - 你已经退出了帮派. + 你已经退出了帮派. You are about to transfer leadership over to %1 <br/>By transferring leadership you will no longer be in control of the gang unless ownership is transferred back. @@ -2070,7 +2118,7 @@ Stai per traferire il comando a %1 <br/>Facendolo non avrai più il controllo della Gang fino a quando non ti verrà restituito il comando. Você vai transferir a liderança da gangue para %1 <br/>Você não será mais o lider, a não ser que a liderança seja transferida novamente. Przekazałeś kierowanie gangiem %1 <br/>W związku z tym nie będzesz od tej chwili kontroli nad gangiem chyba, że kierowownictwo zostanie ci powierzone ponownie. - 你将要把老大的位置移交给 %1 <br/>老大的位置移交后,你将不能再控制这个帮派,除非有人将帮派老大位置还给你. + 你将要把老大的位置移交给 %1 <br/>老大的位置移交后,你将不能再控制这个帮派,除非有人将帮派老大位置还给你. Transfer of leadership cancelled. @@ -2082,7 +2130,7 @@ Trasferimento del comando annullato. Transferencia de liderança cancelada. Przkazanie kierownictwa anulowane. - 取消帮派老大的移交。 + 取消帮派老大的移交。 You are already the leader! @@ -2094,7 +2142,7 @@ Sei già il Capo! Você já está na liderança! Jesteś już liderem! - 你已经是帮派老大了! + 你已经是帮派老大了! You need to select a person first! @@ -2106,7 +2154,7 @@ Devi selezionare una persona! Você tem que selecionar um jogador antes! Musisz najpierw zaznaczyć osobę! - 你需要先选一个人! + 你需要先选一个人! You have been made the new leader. @@ -2118,7 +2166,7 @@ You have been made the new leader. You have been made the new leader. You have been made the new leader. - 你被选为新的帮派老大. + 你被选为新的帮派老大. You are about to upgrade the maximum members allowed for your gang. @@ -2130,7 +2178,7 @@ Stai aumentando il numero massimo di membri consentiti all'interno della tua Gang Você vai atualizar o limite de membros da gangue. Chcesz zwiększyć maksymalną ilość członków w gangu. - 您将升级您的帮派所允许的最大成员数. + 您将升级您的帮派所允许的最大成员数. Current Max: %1 @@ -2142,7 +2190,7 @@ Attuali Max: %1 Número máximo atual: %1 Aktualnie Max: %1 - 目前的最大值: %1 + 目前的最大值: %1 Upgraded Max: %2 @@ -2154,7 +2202,7 @@ Aumento Max: %2 Novo número máximo: %2 Po ulepszeniu Max: %2 - 升级最大值: %2 + 升级最大值: %2 Price: @@ -2166,7 +2214,7 @@ Costo: Preço: Koszt: - 价钱: + 价钱: You do not have enough money in your bank account to upgrade the gangs maximum member limit. @@ -2178,7 +2226,7 @@ Non hai abbastanza fondi nel tuo conto in banca per aumentare il limite massimo di membri. Você não dinheiro suficiente para aumentar o limite da gangue. Nie posiadasz wystarczającej ilości środków na koncie aby powiększyć gang - 您的银行帐户没有足够的钱升级帮派最大成员限制。 + 您的银行帐户没有足够的钱升级帮派最大成员限制。 Current: @@ -2190,7 +2238,7 @@ Attuale: Atual: Aktualny: - 最近的: + 最近的: Lacking: @@ -2202,7 +2250,7 @@ Mancanza: Faltando: Brakuje: - 缺少: + 缺少: You have upgraded from %1 to %2 maximum slots for <t color='#8cff9b'>$%3</t> @@ -2214,7 +2262,7 @@ Hai aumentato i posti massimi da %1 a %2 per <t color='#8cff9b'>$%3</t> Limite de membros atualizado de %1 para %2 por <t color='#8cff9b'>R$%3</t> Zwiększyłeś ilość możliwych członków gangu z %1 do %2 for <t color='#8cff9b'>$%3</t> - 你已经从 %1 升级到 %2 最大成员数 <t color='#8cff9b'>$%3</t> + 你已经从 %1 升级到 %2 最大成员数 <t color='#8cff9b'>$%3</t> Upgrade cancelled. @@ -2226,7 +2274,7 @@ Aumento annullato. Cancelar Upgrade. Ulepszanie anulowane. - 升级取消。 + 升级取消。 Funds: @@ -2238,7 +2286,7 @@ Fondi Recursos: Środki: - 基金: + 基金: (Gang Leader) @@ -2250,7 +2298,7 @@ (Capo Gang) (Lider da Gangue) (Szef gangu) - (帮派老大) + (帮派老大) You are already in a gang. @@ -2262,7 +2310,7 @@ Sei già in una banda. Você já está em uma gangue. Jesteś już w gangu. - 你已经在帮派中了。 + 你已经在帮派中了。 Bad UID? @@ -2274,7 +2322,7 @@ Bad UID? Bad UID? Bad UID? - 错误的UID? + 错误的UID? This player is already in a gang. @@ -2286,7 +2334,7 @@ Este jogador já está em uma gangue. Этот игрок уже в банде. Dieser Spieler ist bereits in einer Gang. - 这个玩家已经在帮派中了。 + 这个玩家已经在帮派中了。 You have been kicked out of the gang. @@ -2298,7 +2346,7 @@ You have been kicked out of the gang. You have been kicked out of the gang. Du wurdest aus der Gang gekickt. - 你被踢出了帮派。 + 你被踢出了帮派。 @@ -2312,7 +2360,7 @@ - 这个仓库已经被购买了! + 这个仓库已经被购买了! You are not the owner of this house! @@ -2324,7 +2372,7 @@ - 你不是这所建筑的主人! + 你不是这所建筑的主人! This garage is available for <t color='#8cff9b'>$%1</t><br/> @@ -2336,7 +2384,7 @@ - 这个仓库花费 <t color='#8cff9b'>$%1</t><br/> + 这个仓库花费 <t color='#8cff9b'>$%1</t><br/> This building is a Gang Hideout! @@ -2348,7 +2396,7 @@ - 这个建筑是一个帮派据点! + 这个建筑是一个帮派据点! Are you sure you want to sell your garage? It will sell for: <t color='#8cff9b'>$%1</t> @@ -2360,7 +2408,7 @@ - 你确定要卖掉你的仓库吗? 它将售出: <t color='#8cff9b'>$%1</t> + 你确定要卖掉你的仓库吗? 它将售出: <t color='#8cff9b'>$%1</t> Sell Garage @@ -2372,7 +2420,7 @@ - 出售仓库 + 出售仓库 Purchase Garage @@ -2384,7 +2432,7 @@ - 购买仓库 + 购买仓库 You do not own a garage here! @@ -2396,7 +2444,7 @@ - 你在这里没有仓库! + 你在这里没有仓库! Vehicle Garage @@ -2408,7 +2456,7 @@ Garage Veicoli Garagem de Veículos Garaż - 载具仓库 + 载具仓库 Get Vehicle @@ -2420,7 +2468,7 @@ Ritira Veicolo Pegar Veículo Wyciągnij pojazd: - 获取载具 + 获取载具 Sell Vehicle @@ -2432,7 +2480,7 @@ Vendi Veicolo Vender Veículo Sprzedaj pojazd - 出售载具 + 出售载具 Sell Price @@ -2444,7 +2492,7 @@ Prezzo di vendita Preço de Venda Cena sprzedaży - 出售价格 + 出售价格 Storage Fee @@ -2456,7 +2504,7 @@ Costo ritiro Taxa de Armazenamento Opłata parkingowa - 保管费 + 保管费 No vehicles found in garage. @@ -2468,7 +2516,7 @@ Non hai veicoli nel Garage. Nenhum veiculo encontrado na garagem. Nie znaleziono pojazdów w garażu - 仓库内没有载具。 + 仓库内没有载具。 You don't have $%1 in your bank account @@ -2480,7 +2528,7 @@ Non hai $%1 nel tuo conto in banca Você não tem R$%1 na sua conta bancária Nie masz %1 na koncie bankowym: - 你的银行账户里没有 $%1 + 你的银行账户里没有 $%1 Spawning vehicle please wait... @@ -2492,7 +2540,7 @@ Creazione veicolo attendere... Obtendo veiculo, aguarde por favor... Wyciągam pojazd, proszę czekać ... - 正在提取载具请稍候... + 正在提取载具请稍候... Sorry but %1 was classified as a destroyed vehicle and was sent to the scrap yard. @@ -2504,7 +2552,7 @@ Purtroppo %1 è stato classificato come veicolo distrutto ed è stato mandato allo sfascio. O veículo %1 foi mandado para o ferro velho pois foi classificado como destroido. Przepraszamy ale %1 został sklasyfikowany jako zniszczony i został odesłany na złom. - 对不起 %1 被认定为损坏的载具并送往废弃场。 + 对不起 %1 被认定为损坏的载具并送往废弃场。 Sorry but %1 is already active somewhere in the world and cannot be spawned. @@ -2516,7 +2564,7 @@ Purtroppo %1 è già presente nella mappa e non può essere ricreato O veículo %1 já está presente no mapa e não pode ser retirado novamente Przepraszamy ale %1 jest aktywny gdzieś na mapie i nie może zostać wyciągnięty. - 对不起,%1 被归类为毁坏的载具,并被送到废弃场。 + 对不起,%1 被归类为毁坏的载具,并被送到废弃场。 There is already a vehicle on the spawn point. You will be refunded the cost of getting yours out. @@ -2528,7 +2576,7 @@ C'è già un veicolo nel punto di creazione. Verrai rimborsato della spesa appena effettuata. Existe um outro veiculo na area de spawn. Você será reembolsado. W strefie parkowania znajduje się już pojazd. Środki za parkowanie zostaną zwrócone. - 载具重生点已经被另一辆载具占据。你的花费将会返还。 + 载具重生点已经被另一辆载具占据。你的花费将会返还。 You sold that vehicle for $%1 @@ -2540,7 +2588,7 @@ Hai venduto il veicolo per $%1 Você vendeu um veículo por R$%1 Sprzedałeś pojazd za %1 - 你以 $%1 的价格出售了这辆载具 + 你以 $%1 的价格出售了这辆载具 That vehicle is a rental and cannot be stored in your garage. @@ -2576,7 +2624,7 @@ Il veicolo non ti appartiene e quindi non puoi depositarlo nel tuo garage. Você não é o proprietário desse veiculo, logo não poderá guarda-lo na garagem. Pojazd nie należy do ciebie nie możesz go schować w garażu. Ale zawsze możesz podjechać do dziupli! - 载具不属于你,所以你不能把它存放在仓库里。 + 载具不属于你,所以你不能把它存放在仓库里。 The vehicle has been stored in your garage. @@ -2588,7 +2636,7 @@ Il veicolo è stato depositato nel tuo garage. O veículo foi guardado na sua garagem. Pojazd został zaparkowany. - 载具已存放在你的仓库里. + 载具已存放在你的仓库里. Your vehicle is ready! @@ -2600,7 +2648,7 @@ Il tuo veicolo è pronto O seu veículo está pronto Pojazd jest gotowy - 你的载具准备好了! + 你的载具准备好了! The server is trying to store the vehicle... @@ -2612,7 +2660,7 @@ Il server sta cercando di depositare il veicolo... O servidor está guardando o veiculo... Serwer próbuje schować pojazd w garażu ... - 服务器正试图存储载具... + 服务器正试图存储载具... The selection had a error... @@ -2624,7 +2672,7 @@ La selezione ha avuto un errore... Erro ao selecionar.... Ten wybór powoduje błąd - 选择有错误... + 选择有错误... There isn't a vehicle near the NPC. @@ -2636,7 +2684,7 @@ Non c'è alcun veicolo vicino all'NPC. Não existe um veículo proximo ao NPC Nie ma pojazdu w pobliżu NPC - NPC附近没有载具。 + NPC附近没有载具。 Are you sure you want to sell your %1 for $%2? @@ -2674,7 +2722,7 @@ Portachiavi - Lista delle Chiavi Chaves - Atual Lista de Chaves Lista kluczyków - 钥匙 - 当前列表 + 钥匙 - 当前列表 Drop Key @@ -2686,7 +2734,7 @@ Abbandona Chiave Remover Chave Wyrzuć klucz - 丢弃钥匙 + 丢弃钥匙 Give Key @@ -2698,7 +2746,7 @@ Dai Chiave Dar Chave Daj klucz - 给予钥匙 + 给予钥匙 @@ -2712,7 +2760,7 @@ Menu Giocatore Menu Jogador Menu gracza - 玩家菜单 + 玩家菜单 Current Items @@ -2724,7 +2772,7 @@ Oggetti Attuali Items Atuais Aktualne wyposażenie: - 当前物品 + 当前物品 Licenses @@ -2736,7 +2784,7 @@ Licenze Licenças Licencje - 许可证 + 许可证 Money Stats @@ -2748,7 +2796,7 @@ Statistiche Fondi Dinheiro Twoje środki - 资产统计 + 资产统计 My Gang @@ -2760,7 +2808,7 @@ Mia Gang Gangue Gang - 我的帮派 + 我的帮派 Wanted List @@ -2772,7 +2820,7 @@ Lista Ricercati Lista de Foragidos Poszukiwani - 通缉名单 + 通缉名单 Cell Phone @@ -2784,7 +2832,7 @@ Cellulare Celular Telefon - 短消息 + 短消息 Key Chain @@ -2796,7 +2844,7 @@ Portachiavi Chaves Klucze - 钥匙 + 钥匙 Admin Menu @@ -2808,7 +2856,7 @@ Menu Admin Menu Admin Admin Menu - 管理菜单 + 管理菜单 Sync Data @@ -2820,7 +2868,7 @@ Salva Dati Sincronizar Dados Synchronizuj - 同步数据 + 同步数据 @@ -2834,7 +2882,7 @@ Menu Impostazioni Configurações Ustawienia: - 设置菜单 + 设置菜单 On Foot: @@ -2846,7 +2894,7 @@ A piedi: A Pé: Na nogach: - 步行: + 步行: In Car: @@ -2858,7 +2906,7 @@ Auto: No Carro: W aucie: - 载具: + 载具: In Air: @@ -2870,7 +2918,7 @@ Aria: No Ar: W powietrzu: - 空中: + 空中: View distance while on foot @@ -2882,7 +2930,7 @@ Distanza visiva a piedi Visualizar distância enquanto a pé Widoczność gdy na nogach - 视距 + 视距 View distance while in a land vehicle @@ -2894,7 +2942,7 @@ Distanza visiva su veicolo di terra Visualizar distância enquanto em veículos terrestres Widoczność gdy w aucie - 在陆地载具中观察距离 + 在陆地载具中观察距离 View distance while in a air vehicle @@ -2906,7 +2954,7 @@ Distanza visiva su velivolo Visualisar distância enquanto em veículos aéreos Widoczność gdy w powietrzu - 在飞行器上观察距离 + 在飞行器上观察距离 Player Tags @@ -2918,7 +2966,7 @@ Tag Giocatore Tags de Jogadores Tagi graczy - 玩家标签 + 玩家标签 Tags ON @@ -2930,7 +2978,7 @@ Tags ON Tags ON Tagi ON - 启用标签 + 启用标签 Tags OFF @@ -2942,7 +2990,7 @@ Tags OFF Tags OFF Tagi OFF - 关闭标签 + 关闭标签 Sidechat Switch @@ -2954,7 +3002,7 @@ Habilitar Sidechat Sidechat umschalten - 聊天框开关 + 聊天框开关 Reveal Nearest Objects @@ -2966,7 +3014,7 @@ Mostrar Objetos Próximos Nahe Objekte anzeigen - 显示最近的物体 + 显示最近的物体 Broadcast Switch @@ -2978,7 +3026,7 @@ Habilitar Transmissões Broadcast umschalten - 广播开关 + 广播开关 Sidechat OFF @@ -2990,7 +3038,7 @@ Chat fazione OFF Sidechat OFF Czat strony OFF - 聊天关闭 + 聊天关闭 Sidechat ON @@ -3002,7 +3050,7 @@ Chat fazione ON Sidechat ON Czat strony ON - 聊天开启 + 聊天开启 @@ -3016,7 +3064,7 @@ Inventario Negozio Loja de Inventário Oferta sklepu - 店铺库存 + 店铺库存 Your Inventory @@ -3028,7 +3076,7 @@ Inventario Personale Seu Inventário Twoje wyposażenie - 你的库存 + 你的库存 Buy Item @@ -3040,7 +3088,7 @@ Compra Oggetto Comprar Item Kup objekt - 买东西 + 买东西 Sell Item @@ -3052,7 +3100,7 @@ Vendi Oggetto Vender Item Sprzedaj obiekt - 卖东西 + 卖东西 @@ -3066,7 +3114,7 @@ Selezione Spawn Locais para Começar Wybierz punkt odrodzenia - 选择重生点 + 选择重生点 Spawn @@ -3078,7 +3126,7 @@ Spawn Começar Odradzanie - 重生 + 重生 Current Spawn Point @@ -3090,7 +3138,7 @@ Punto di Spawn corrente Ponto de início Atual Aktualny punkt odrodzenia - 目前的重生点 + 目前的重生点 You have spawned at @@ -3102,7 +3150,7 @@ Ti trovi a Você irá começar em Odrodziłeś się w - 你重生了 + 你重生了 @@ -3116,7 +3164,7 @@ Dai Multa Dar Multa Wystaw mandat - 开据罚单 + 开据罚单 Pay Ticket @@ -3128,7 +3176,7 @@ Paga Multa Pagar Multa Zapłać mandat - 支付罚款 + 支付罚款 Refuse Ticket @@ -3140,7 +3188,7 @@ Rifiuta Multa Recusar Multa Odmów przyjęcia mandatu - 拒绝缴款 + 拒绝缴款 @@ -3154,7 +3202,7 @@ Inventario Veicolo Inventário do Veículo Zawartość - 库存清单 + 库存清单 Player Inventory @@ -3166,7 +3214,7 @@ Inventario Giocatore Inventário do Jogador Wyposażenie gracza - 玩家清单 + 玩家清单 Take @@ -3178,7 +3226,7 @@ Prendi Pegar Weź - 取出 + 取出 Store @@ -3190,7 +3238,7 @@ Deposita Depositar Schowaj - 存储 + 存储 @@ -3204,7 +3252,7 @@ Lista Ricercati Lista APD Poszukiwane Lista de Procurados - 通缉名单 + 通缉名单 Pardon @@ -3216,7 +3264,7 @@ Perdona Pardon Perdão - 赦免 + 赦免 Add @@ -3228,7 +3276,7 @@ Adicionar Hinzufügen - 添加 + 添加 Wanted People @@ -3240,7 +3288,7 @@ Pessoas Procuradas Gesuchte Personen - 通缉犯 + 通缉犯 Citizens @@ -3252,7 +3300,7 @@ Cidadãos Bürger - 公民 + 公民 Crimes @@ -3264,7 +3312,7 @@ Crimes Verbrechen - 罪犯 + 罪犯 %1 has been added to the wanted list. @@ -3276,7 +3324,7 @@ %1 foi adicionado a lista de procurados. %1 wurde zur Fahndungsliste hinzugefügt. - %1 已添加到通缉名单. + %1 已添加到通缉名单. %1 count(s) of %2 @@ -3288,7 +3336,7 @@ %1 contagem(s) de %2 %1 Vergehen: %2 - %1 违法(次数) %2 + %1 违法(次数) %2 Current Bounty Price: $%1 @@ -3300,7 +3348,7 @@ Atual recompensa: R$%1 Aktuelle Prämie: $%1 - 目前的赏金: $%1 + 目前的赏金: $%1 @@ -3314,7 +3362,7 @@ Salmone Salema Salema - 加州异鳍石鲈 + 加州异鳍石鲈 Ornate @@ -3326,7 +3374,7 @@ Orata Ornamentado Dorada - 橙带蝴蝶鱼 + 橙带蝴蝶鱼 Mackerel @@ -3338,7 +3386,7 @@ Sgombro Cavalinha Makrela - 鲭鱼 + 鲭鱼 Tuna @@ -3350,7 +3398,7 @@ Tonno Atum Tuńczyk - 金枪鱼 + 金枪鱼 Mullet @@ -3362,7 +3410,7 @@ Triglia Tainha Cefal - 梭鱼 + 梭鱼 Cat Shark @@ -3374,7 +3422,7 @@ Squalo Tubarão Gato Rekin - 鲨鱼 + 鲨鱼 Rabbit @@ -3386,7 +3434,7 @@ Coniglio Coelho Zając - 兔子 + 兔子 Chicken @@ -3398,7 +3446,7 @@ Pollo Frango Kurczak - 雏鸡 + 雏鸡 Rooster @@ -3410,7 +3458,7 @@ gallo galo kogut - 公鸡 + 公鸡 Goat @@ -3422,7 +3470,7 @@ Capra Cabra Koza - 山羊 + 山羊 Sheep @@ -3434,7 +3482,7 @@ pecora ovelha Owca - 绵羊 + 绵羊 Turtle @@ -3446,7 +3494,7 @@ Tartaruga Tartaruga żółw - 乌龟 + 乌龟 @@ -3460,7 +3508,7 @@ Non hai $%1 per $2 Você não tem R$%1 para %2 Nie masz $%1 na %2 - 你没有 $%1 支付 %2 + 你没有 $%1 支付 %2 You bought a %1 for $%2 @@ -3472,7 +3520,7 @@ Hai comprato un %1 per $%2 Você comprou %1 por R$%2 Kupiłeś %1 za $%2 - 你购买 %1 花费 $%2 + 你购买 %1 花费 $%2 %1 was arrested by %2 @@ -3484,7 +3532,7 @@ %1 è stato arrestato da %2 %1 foi preso por %2 %1 został aresztowany przez %2 - %1 被 %2 逮捕 + %1 被 %2 逮捕 You caught a %1 @@ -3496,7 +3544,7 @@ Hai pescato %1 Você pegou %1 Złapałeś %1 - 你逮捕了 %1 + 你逮捕了 %1 Gutting %1 @@ -3508,7 +3556,7 @@ eviscerazione %1 evisceração %1 Patroszenie %1 - 去除 %1 的内脏 + 去除 %1 的内脏 You have collected some raw %1 meat @@ -3520,7 +3568,7 @@ You have collected some raw %1 meat You have collected some raw %1 meat You have collected some raw %1 meat - 你已经从 %1 收集生肉 + 你已经从 %1 收集生肉 You have taken some turtle meat @@ -3532,7 +3580,7 @@ Hai raccolto della carne di tartaruga Você pegou carne de tartaruga Wziąłeś trochę mięsa żółwia - 你吃了一些海龟肉 + 你吃了一些海龟肉 You have earned $%1 @@ -3544,7 +3592,7 @@ Hai guadagnato $%1 Você ganhou R$%1 Otrzymałeś $%1 - 你赚了 $%1 + 你赚了 $%1 Dropping fishing net... @@ -3556,7 +3604,7 @@ Posizionando la rete da pesca... Jogando rede de pesca... Rzucam sieć... - 撒下鱼网... + 撒下鱼网... Didn't catch any fish... @@ -3568,7 +3616,7 @@ Non hai pescato nulla... A rede voltou vazia... Nic nie złapałeś... - 没有捕到任何鱼... + 没有捕到任何鱼... Fishing net pulled up. @@ -3580,7 +3628,7 @@ Rete da pesca recuperata. A rede de pesca foi recolhida Sieć wciągnięta. - 拉起渔网。 + 拉起渔网。 Your inventory space is full. @@ -3592,7 +3640,7 @@ Il tuo inventario è pieno. Seu inventário está cheio Nie masz więcej miejsca. - 您的库存空间已满。 + 您的库存空间已满。 Gathering %1... @@ -3604,7 +3652,7 @@ Raccogliendo %1 Coletando %1... Zbierasz %1 - 采集 %1... + 采集 %1... You have sold a %1 for $%2 @@ -3616,7 +3664,7 @@ Hai venduto un %1 per %2$ Você vendeu %1 por R$%2 Sprzedałeś %1 za $%2 - 你卖掉 %1 赚了 $%2 + 你卖掉 %1 赚了 $%2 You have picked %1 %2 @@ -3628,7 +3676,7 @@ Hai trovato %1 %2 Você pegou %1 %2 Podniosłeś %1 %2 - 你采集了 %1 个 %2 + 你采集了 %1 个 %2 You have collected some %1 @@ -3640,7 +3688,7 @@ Hai raccolto %1 Você coletou %1 Wziąłeś %1 - 你采集了一些 %1 + 你采集了一些 %1 You are to deliver this package to %1. @@ -3652,7 +3700,7 @@ Devi consegnare questo pacco al %1 Você deverá entregar esse pacote para %1 Dostarcz tę przesyłkę do %1 - 你要递送这个包裹到 %1。 + 你要递送这个包裹到 %1。 Deliver this package to %1. @@ -3664,7 +3712,7 @@ Consegna questo pacco al %1 Entregue esse pacote para %1 Dostarcz przesyłkę do %1 - 把这个包裹送到 %1。 + 把这个包裹送到 %1。 You failed to deliver the package because you died. @@ -3676,7 +3724,7 @@ Compra Oggetto Você falhou na tarefa de entrega pois você morreu. Nie dostarczyłeś przesyłki z uwagi na to że zmarłeś. - 因为你死了,所以你没能投递包裹。 + 因为你死了,所以你没能投递包裹。 You do not have $%1 to be healed @@ -3688,7 +3736,7 @@ Non hai $%1 per essere curato Você não tem R$%1 para ser curado Nie masz $%1 na leczenie - 你没有 $%1 治疗费 + 你没有 $%1 治疗费 You do not need to be healed! @@ -3700,7 +3748,7 @@ Você não precisa ser curado! Вам не нужно быть исцелены! Du brauchst keine Behandlung! - 你不需要治疗! + 你不需要治疗! Spend $%1 to be fully healed? @@ -3712,7 +3760,7 @@ Gastar US $%1 para ser totalmente curado? Потратит $%1, чтобы быть полностью зажила? Willst du dich für $%1 vollständig behandeln lassen? - 花费 $%1 痊愈? + 花费 $%1 痊愈? Doctor @@ -3724,7 +3772,7 @@ Médico Врач Arzt - 医疗人员 + 医疗人员 Please stay still @@ -3736,7 +3784,7 @@ Attendi pazientemente Fique parado por favor Proszę się nie ruszać - 请不要动 + 请不要动 You need to be within 5m while the doctor is healing you @@ -3748,7 +3796,7 @@ Devi restare entro 5m dal dottore per essere curato Você tem que estar a 5m para o médico curá-lo Musisz być w pobliżu doktora gdy ten cię leczy - ok 5m - 医疗人员在治疗你的时候,你必须在5米以内 + 医疗人员在治疗你的时候,你必须在5米以内 You are now fully healed. @@ -3760,7 +3808,7 @@ Sei stato curato completamente. Sua saúde está perfeita Zostałeś wyleczony - 你现在痊愈了。 + 你现在痊愈了。 %1 your %2 is being impounded by the police. @@ -3772,7 +3820,7 @@ %1 il tuo %2 sta per essere sequestrato dalla Polizia. %1 seu %2 está sendo apreendido pela Polícia %1 twój %2 jest usuwany przez Policję - %1 的 %2 正在被警察扣留。 + %1 的 %2 正在被警察扣留。 Impounding Vehicle @@ -3784,7 +3832,7 @@ Sequestro Veicolo in corso Apreendendo veículo Usuwam pojazd - 扣留载具 + 扣留载具 Impounding has been cancelled. @@ -3796,7 +3844,7 @@ Il sequestro è stato annullato. Ação de apreender foi cancelada Przerwano usuwanie pojazdu - 扣留已被取消. + 扣留已被取消. You have impounded a %1\n\nYou have received $%2 for cleaning up the streets! @@ -3808,7 +3856,7 @@ Hai sequestrato un %1\n\nHai ricevuto $%2 per aver mantenuto l'ordine nelle strade! Você apreendeu %1\n\nVocê recebeu R$%2 por deixar as ruas mais seguras! Usunąłeś %1\n\n Otrzymujesz $%2 za oczyszczanie mapy - 你扣留了 %1\n\你收到了 $%2 扣留费! + 你扣留了 %1\n\你收到了 $%2 扣留费! %1 has impounded %2's %3 @@ -3820,7 +3868,7 @@ %1 ha sequestrato il %2 di %3 %1 apreendeu %3 de %2 %1 usunął %2's %3 - %1 扣留了 %2 的 %3 + %1 扣留了 %2 的 %3 You paid $%1 for impounding your own %2. @@ -3832,7 +3880,7 @@ Du hast $%1 bezahlt, weil du dein eigenen %2 beschlagnahmt hast. Você pagou R$%1 para guardar seu próprio %2. - 你支付 $%1 取出了被扣留的 %2. + 你支付 $%1 取出了被扣留的 %2. Abort available in %1 @@ -3844,7 +3892,7 @@ Abbandona disponibile in %1 Abortar disponível em %1 Możesz przerwać za %1 - 距离下线时间 %1 + 距离下线时间 %1 This vehicle is already mining @@ -3856,7 +3904,7 @@ Questo veicolo sta già estraendo risorse Esse veículo já está minerando Pojazd jest w trakcie wydobycia surowców - 载具已经在开采了 + 载具已经在开采了 The vehicle is full @@ -3868,7 +3916,7 @@ Il veicolo è pieno O veículo está cheio. Pojazd jest pełny - 载具库存已满 + 载具库存已满 You are not near a resource field @@ -3880,7 +3928,7 @@ Non sei vicino ad un campo risorse Você não está próximo ao recurso Nie jesteś w pobliżu pola surowców - 你不在资源区域附近 + 你不在资源区域附近 You cannot turn the vehicle on when mining @@ -3892,7 +3940,7 @@ Non puoi accendere il veicolo mentre estrae risorse Você não pode ligar o veículo enquanto minera Nie możesz poruszać pojazdem w trakcie wydobycia. - 开采时不能打开载具 + 开采时不能打开载具 The Device is mining... @@ -3904,7 +3952,7 @@ Il veicolo sta estrando risorse... A máquina está minerando... Trwa wydobycie... - 设备正在开采... + 设备正在开采... Completed cycle, the device has mined %1 %2 @@ -3916,7 +3964,7 @@ Ciclo completato, il veicolo ha raccolto %1 %2 Ciclo completo, a máquina minerou %1 %2 Urządzenie wydobyło %1 %2 - 完成一个开采周期,设备已开采 %1 %2 + 完成一个开采周期,设备已开采 %1 %2 Vehicle is out of fuel @@ -3928,7 +3976,7 @@ Il veicolo è senza carburante O veículo está sem combustível Brak paliwa w pojezdzie - 载具燃料不足 + 载具燃料不足 You have packed up the spike strip. @@ -3940,7 +3988,7 @@ Hai raccolto una striscia chiodata. Você recolheu o tapete de espinhos. Kolczatka zwinięta - 你铺设了钉刺带。 + 你铺设了钉刺带。 %1 has been placed in evidence, you have received $%2 as a reward. @@ -3952,7 +4000,7 @@ E' stata trovata della merce illegale: %1, hai ricevuto $%2 come ricompensa. %1 foi pego como evidência, você recebeu R$%2 como recompensa. %1 umieszczony w dowodach, otrzymujesz w nagrodę $%2 - %1 已经被送入监狱,你已经收到了 $%2 作为奖励. + %1 已经被送入监狱,你已经收到了 $%2 作为奖励. You have picked up $%1 @@ -3964,7 +4012,7 @@ Hai raccolto $%1 Você pegou R$%1 Podniosłeś $%1 - 你捡到了 $%1 + 你捡到了 $%1 You must wait at least 3 minutes in jail before paying a bail. @@ -3976,7 +4024,7 @@ Devi aspettare almeno 3 minuti in prigione prima di poter pagare la cauzione. Você precisa esperar pelo menos 3 minutos antes de poder pagar fiança. Musisz poczekać conajmniej 3 minuty w więzieniu zanim zapłacisz kaucję. - 在保释之前,你必须至少在监狱里呆3分钟。 + 在保释之前,你必须至少在监狱里呆3分钟。 You do not have $%1 in your bank account to pay bail. @@ -3988,7 +4036,7 @@ Non hai $%1 nel tuo conto in banca per poter pagare la cauzione. Você não tem R$%1 em sua conta bancária para pagar a fiança. Nie masz $%1 na koncie aby zapłacić kaucję. - 你的银行账户没有 $%1 的金额。 + 你的银行账户没有 $%1 的金额。 %1 has posted bail! @@ -4000,7 +4048,7 @@ %1 ha pagato la cauzione! %1 pagou a fiança! %1 wpłacił kaucję! - %1 已保释! + %1 已保释! There isn't a vehicle nearby... @@ -4012,7 +4060,7 @@ Non c'è alcun veicolo qui vicino... Não existe um veículo por perto... W pobliżu nie ma pojazdu... - 附近没有载具... + 附近没有载具... You can't chop a vehicle while a player is near! @@ -4024,7 +4072,7 @@ Você não pode usar o desmanche enquanto um jogador está próximo! Du kannst kein Fahrzeug beim Schrotthändler verschrotten, während ein Spieler in der Nähe ist! - 当玩家靠近时,你不能盗窃载具! + 当玩家靠近时,你不能盗窃载具! %1 was restrained by %2 @@ -4036,7 +4084,7 @@ %1 è stato ammanettato da %2 %1 foi imobilizado por %2 %1 został skuty przez %2 - %1 被 %2 约束 + %1 被 %2 约束 Searching... @@ -4048,7 +4096,7 @@ Ricerca... Revistando... Szukam... - 搜查... + 搜查... Couldn't search the vehicle @@ -4060,7 +4108,7 @@ Impossibile ispezionare il veicolo Você não pode revistar o veículo Nie można przeszukać pojazdu - 不能搜查载具 + 不能搜查载具 Your illegal items have been put into evidence. @@ -4072,7 +4120,7 @@ I tuoi articoli illegali sono stati messi sotto sequestro. Seus itens ilegais foram postos em evidência. Twoje nielegalne pozycje zostały wprowadzone do dowodów. - 你的非法物品被查获。 + 你的非法物品被查获。 This vehicle has no information, it was probably spawned in through cheats. \n\nDeleting vehicle. @@ -4084,7 +4132,7 @@ Il veicolo è privo di identificativi, probabilmente è stato creato mediante cheat. \n\nCancellazione veicolo. Esse veículo não tem informações, é provável que ele tenha sido criado por um cheater.\n\nDeletando veículo. Pojazd bez informacji servera, prawdopodobnie umieszczony przez hakera \n\n usuwam pojazd. - 这载具没有任何信息, 它可能是通过作弊产生的. \n\n删除载具。 + 这载具没有任何信息, 它可能是通过作弊产生的. \n\n删除载具。 You are already doing an action. Please wait for it to end. @@ -4096,7 +4144,7 @@ Stai già compiendo un'azione, attendi che finisca. Você já está executando uma ação. Por favor espere até que ela acabe. Aktualnie wykonujesz jakąś akcję poczekaj aż skończysz. - 你已经在行动了.请等待结束. + 你已经在行动了.请等待结束. %1 was unrestrained by %2 @@ -4108,7 +4156,7 @@ %2 ha tolto le manette a %1 %1 foi liberado por %2 %1 został rozkuty przez %2 - %1 摆脱了 %2 的约束 + %1 摆脱了 %2 的约束 %1 has robbed %2 for $%3 @@ -4120,7 +4168,7 @@ %1 ha rapinato %2 di $%3 %1 roubou R$%3 de %2 %1 obrabował $%2 na $%3 - %1 抢劫了 %2 金钱 $%3 + %1 抢劫了 %2 金钱 $%3 %1 doesn't have any money. @@ -4132,7 +4180,7 @@ %1 non ha alcun soldo. %1 não tem nenhum dinheiro. %1 nie ma pieniędzy. - %1 身无分文。 + %1 身无分文。 %1 was tazed by %2 @@ -4144,7 +4192,7 @@ %1 è stato taserato da %2 %1 foi eletrocutado por %2 %1 został potraktowany paralizatorem przez %2 - %1 被 %2 约束 + %1 被 %2 约束 A vehicle was searched and has $%1 worth of drugs / contraband. @@ -4156,7 +4204,7 @@ Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. O veículo foi revistado e tem R$%1 em drogas ou contrabandos Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 - 搜查载具查获价值 $%1 的毒品/违禁品。 + 搜查载具查获价值 $%1 的毒品/违禁品。 A container of house was searched and has $%1 worth of drugs / contraband. @@ -4168,7 +4216,7 @@ Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. O veículo foi revistado e tem R$%1 em drogas ou contrabandos Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 - 搜查房子存储箱查获价值 $%1 的毒品/违禁品. + 搜查房子存储箱查获价值 $%1 的毒品/违禁品. You have been pulled out of the vehicle. @@ -4180,7 +4228,7 @@ Sei stato estratto dal veicolo Você foi retirado do veículo Zostałeś wyciągnięty z pojazdu - 你从车里被拖出来了。 + 你从车里被拖出来了。 %1 has gave you %2 %3. @@ -4192,7 +4240,7 @@ %1 ti ha dato %2 %3 %1 lhe deu %2 %3 %1 dał ci %2 %3 - %1 给了你 %2 %3. + %1 给了你 %2 %3. %1 has given you $%2. @@ -4204,7 +4252,7 @@ %1 ti ha dato $%2 %1 lhe deu R$%2 %1 dał ci $%2 - %1 给了你 $%2. + %1 给了你 $%2. Sending information to server please wait..... @@ -4216,7 +4264,7 @@ Invio delle informazioni al server, attendere prego...... Enviando informações para o servidor, seja paciente..... Przesyłam informacje na server poczekaj .... - 发送信息到服务器,请稍候..... + 发送信息到服务器,请稍候..... An action is already being processed... @@ -4228,7 +4276,7 @@ Un'azione è già in corso... Você já está realizando um ação... Akcja jest w trakcie wykonywania... - 正在处理操作... + 正在处理操作... You're doing it too fast! @@ -4240,7 +4288,7 @@ Du bist ganz aus der Puste! Warte ein paar Sekunden! Você está fazendo isso muito rápido! Za szybko zwolnij ! - 你做得太快了! + 你做得太快了! You don't have enough space for that amount! @@ -4252,7 +4300,7 @@ Non hai abbastanza spazio per quel quantitativo! Você não tem espaço suficiente para guardar o item Nie masz tyle miejsca! - 你没有足够的空间存放物品! + 你没有足够的空间存放物品! You don't have that much money! @@ -4264,7 +4312,7 @@ Non hai tutti quei soldi! Você não tem todo esse dinheiro! Nie masz tyle pieniędzy! - 你没有那么多钱! + 你没有那么多钱! You are not a cop. @@ -4276,7 +4324,7 @@ Non sei un poliziotto. Você não é um Policial. Nie jesteś policjantem - 你不是警察。 + 你不是警察。 You don't have enough room for that item. @@ -4288,7 +4336,7 @@ Non hai abbastanza spazio per quell'oggetto. Você não tem espaço suficiente no seu inventário. Nie masz wystarczająco miejsca na tą rzecz. - 你没有足够的空间存放这个物品。 + 你没有足够的空间存放这个物品。 You need $%1 to process without a license! @@ -4300,7 +4348,7 @@ Vous devez payer $%1 pour traiter sans licence ! Você precisa de R$%1 para processar sem uma licença! Potrzebujesz $%1 w celu przetworzenia bez licencji - 你未取得许可需要支付 $%1 才能加工! + 你未取得许可需要支付 $%1 才能加工! You don't have enough items! @@ -4312,7 +4360,7 @@ Vous n'avez pas assez d'items ! Você não tem itens suficientes! Du hast nicht genug Materialien! - 你没有足够的物品! + 你没有足够的物品! You have processed your item(s)! @@ -4324,7 +4372,7 @@ Przetworzeniu swój przedmiot (y)! Você processou seu(s) item(s) Du hast deine Materialien verarbeitet! - 你已经加工了你的物品! + 你已经加工了你的物品! You can't rapidly use action keys! @@ -4336,7 +4384,7 @@ Non puoi riusare così rapidamente il tasto azione! Você não pode usar a tecla de ação repetidamente! Za szybko używasz przycisku akcji! - 你不能快速点击按键! + 你不能快速点击按键! You do not have enough funds in your bank account. @@ -4348,7 +4396,7 @@ Non hai abbastanza fondi nel tuo conto in banca. Você não tem todo esse dinheiro em sua conta bancária. Nie masz wystarczających środków w banku. - 你的银行账户里没有足够的资金。 + 你的银行账户里没有足够的资金。 Couldn't add it to your inventory. @@ -4360,7 +4408,7 @@ Non puoi aggiungerlo al tuo inventario. Não foi possível adicionar o item ao seu inventário Nie można dodać tego do twojego wyposażenia - 无法将其添加到你的库存中。 + 无法将其添加到你的库存中。 You haven't eaten anything in awhile, You should find something to eat soon! @@ -4372,7 +4420,7 @@ E' da tempo che non mangi qualcosa, dovresti trovare qualcosa da mettere sotto i denti in fretta! Você não come a bastante tempo. Ache algo para comer logo!. Zaczynasz być głodny, poszukaj czegoś do jedzenia! - 你有一阵子没吃东西了,你应该马上找点吃的! + 你有一阵子没吃东西了,你应该马上找点吃的! You are starting to starve, you need to find something to eat otherwise you will die. @@ -4384,7 +4432,7 @@ Ti stai indebolendo, devi trovare qualcosa da mangiare o morirai. Você está começando a ficar famindo. Se você não comer irá morrer de fome. Długo nie jadłeś, zjedz coś lub zginiesz z głodu. - 你感觉饿了,你需要找点东西吃,否则你会死的。 + 你感觉饿了,你需要找点东西吃,否则你会死的。 You are now starving to death, you will die very soon if you don't eat something. @@ -4396,7 +4444,7 @@ Stai perdendo le forze, se non mangi qualcosa in fretta morirai. Você está morrendo de fome, coma algo ou irá morrer. Zaczynasz słabnąć z głodu zjedz coś lub zginiesz !!! - 你现在很饿,如果你不吃东西,很快就会死的。 + 你现在很饿,如果你不吃东西,很快就会死的。 You have starved to death. @@ -4408,7 +4456,7 @@ Sei morto per la fame. Você morreu de fome Wygłodziłeś się na śmierć. - 你饿死了。 + 你饿死了。 You haven't drank anything in awhile, You should find something to drink soon. @@ -4420,7 +4468,7 @@ E' da parecchio tempo che non bevi qualcosa, dovresti trovare qualcosa da bere. Você não bebe nada a bastante tempo. Ache algo para beber logo. Zaczynasz być spragniony, powinienieś poszukać czegoś do picia. - 你有一阵子没喝水了,你应该马上找点喝的。 + 你有一阵子没喝水了,你应该马上找点喝的。 You haven't drank anything in along time, you should find something to drink soon or you'll start to die from dehydration. @@ -4432,7 +4480,7 @@ E' troppo tempo che non bevi qualcosa, dovresti trovare qualcosa da bere o comincerai a disitratarti. Você está ficando desidratado. Se não beber algo poderá morrer. Długo nic nie piłeś, napij się czegoś bo możesz zginąć z pragnienia. - 你在一段时间内没有喝水,你要尽快找到喝的,否则你会开始脱水而死。 + 你在一段时间内没有喝水,你要尽快找到喝的,否则你会开始脱水而死。 You are now suffering from severe dehydration find something to drink quickly! @@ -4444,7 +4492,7 @@ Stai soffrendo per una grave deidratazione, trova velocemente qualcosa da bere o morirai! Você está sofrendo de desidratação. Beba algo ou irá morrer! Zaczynasz słabnąć z pragnienia, wypij coś inaczej zginiesz!!! - 你现在正严重脱水,快找点喝的! + 你现在正严重脱水,快找点喝的! You have died from dehydration. @@ -4456,7 +4504,7 @@ Sei morto per disidratazione. Você morreu desidratado. Umarłeś z uwagi na odwodnienie organizmu - 你死于脱水. + 你死于脱水. You are over carrying your max weight! You will not be able to run or move fast till you drop some items! @@ -4468,7 +4516,7 @@ Stai trasportando oltre il tuo carico massimo! Non riuscirai a correre fino a quando non ti libererai di qualche oggetto! Você está carregando muito peso. Você não irá conseguir correr ou se mover rapidamente. Niesiesz maksymalny ciężar, nie będziesz mógł biegać ani szybko chodzić dopuki nie wyrzucisz jakiejś rzeczy - 你超过了最大负重!除非你丢弃一些物品,否则你不能跑或跑得很快! + 你超过了最大负重!除非你丢弃一些物品,否则你不能跑或跑得很快! <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 @@ -4480,7 +4528,7 @@ <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 <t color='#FF0000'><t size='2'>Info do Veículo</t></t><br/><t color='#FFD700'><t size='1.5'>Donos</t></t><br/> %1 <t color='#FF0000'><t size='2'>Informacja o pojeździe</t></t><br/><t color='#FFD700'><t size='1.5'>Właściciel</t></t><br/> %1 - <t color='#FF0000'><t size='2'>载具信息</t></t><br/><t color='#FFD700'><t size='1.5'>车主</t></t><br/> %1 + <t color='#FF0000'><t size='2'>载具信息</t></t><br/><t color='#FFD700'><t size='1.5'>车主</t></t><br/> %1 Cannot search that person. @@ -4492,7 +4540,7 @@ Impossibile perquisire quella persona. Essa pessoa não pode ser revistada. Nie możesz przeszukać tej osoby - 无法搜查此人。 + 无法搜查此人。 You couldn't effectively seize any items. Try again. @@ -4504,7 +4552,7 @@ Você não pode apreender nenhum item, efetivamente. Tente de novo. Es konnten nicht alle Gegenstände beschlagnahmt werden. Versuche es noch einmal. - 并非所有物品你都能没收。再试一次。 + 并非所有物品你都能没收。再试一次。 Repairing %1 @@ -4516,7 +4564,7 @@ Riparando %1 Reparando %1 Naprawiam %1 - 修复 %1 + 修复 %1 You can't do that from inside the vehicle! @@ -4528,7 +4576,7 @@ Du kannst das nicht tun während du in einem Fahrzeug sitzt! Você não pode fazer isso de dentro do veículo! Nie możesz tego wykonać z wntrza pojazdu! - 你在载具内不能维修! + 你在载具内不能维修! You have repaired that vehicle. @@ -4540,7 +4588,7 @@ Hai riparato il veicolo. Você reparou esse veículo. Naprawiłeś pojazd - 你修好了载具。 + 你修好了载具。 You have mined %2 %1(s). @@ -4552,7 +4600,7 @@ Du hast %2 %1 abgebaut. Você colheu %2 %1(s). Zebrałeś %2 %1 (s). - 你开采了 %2 个 %1。 + 你开采了 %2 个 %1。 You have gathered %2 %1(s). @@ -4564,7 +4612,7 @@ Du hast %2 %1 gesammelt. Você colheu %2 %1(s). Zebrałeś %2 %1 (s). - 你采集了 %2 个 %1。 + 你采集了 %2 个 %1。 You can't gather from inside a car! @@ -4576,7 +4624,7 @@ Wie soll das von hier aus gehen? Du sitzt in einem Fahrzeug! Você não pode colher de dentro do carro! Nie możesz zbierać z wnętrza samochodu - 你不能从车里搜集! + 你不能从车里搜集! You are not allowed to loot dead bodies. @@ -4588,7 +4636,7 @@ Du darfst keine Leichen durchsuchen! Você não está liberado para lootiar corpos mortos Nie możesz przeszukiwać martwych ciał - 你不能抢劫尸体。 + 你不能抢劫尸体。 You have been frozen by an administrator. @@ -4600,7 +4648,7 @@ Du wurdest von einem Admin eingefroren. Você foi congelado por um administrador Zostałeś zamrożony przez administratora - 你被管理员冻结了。 + 你被管理员冻结了。 You have teleported to your selected position. @@ -4612,7 +4660,7 @@ Você foi teleportado para a posição que você selecionou Du hast dich zu deiner gewünschten Position teleportiert. - 你已传送到选择的位置。 + 你已传送到选择的位置。 You have been unfrozen by an administrator. @@ -4624,7 +4672,7 @@ Ein Admin hat dich wieder aufgetaut. Você foi descongelado por um administrador Zostałeś odmrożony przez administratora - 你已被管理员解冻。 + 你已被管理员解冻。 No one was selected! @@ -4636,7 +4684,7 @@ Ninguém foi selecionado! Никто не был выбран! Niemand wurde ausgewählt! - 没有选中玩家! + 没有选中玩家! You didn't select an item you wanted to give. @@ -4648,7 +4696,7 @@ Você não selecionou um item que você queria dar. Вы не выбрали пункт, который вы хотели дать. Du hast keinen Gegenstand ausgewählt, um diesen weitergeben zu können. - 你没有选择你想给的东西。 + 你没有选择你想给的东西。 You didn't enter an actual number format. @@ -4660,7 +4708,7 @@ Você não inseriu um formato número real. Вы не ввели фактический формат числа. Du hast keine echte Zahl eingegeben. - 你没有输入正确的数字格式。 + 你没有输入正确的数字格式。 You need to enter an actual amount you want to give. @@ -4672,7 +4720,7 @@ É necessário introduzir uma quantidade real que você quer dar. Вам необходимо ввести фактическую сумму, которую вы хотите дать. Du musst einen tatsächlichen Wert eingeben, um diesen weitergeben zu können. - 你需要输入你想要给的正确金额。 + 你需要输入你想要给的正确金额。 You need to enter an actual amount you want to remove. @@ -4684,7 +4732,7 @@ É necessário introduzir uma quantidade real que você deseja remover. Вам необходимо ввести фактическую сумму, которую вы хотите удалить. Du musst einen tatsächlichen Wert eigeben, um diese löschen zu können. - 你需要输入你想要删除的正确金额。 + 你需要输入你想要删除的正确金额。 The selected player is not within range. @@ -4696,7 +4744,7 @@ O jogador selecionado não está dentro do alcance. Выбранный игрок не находится в пределах диапазона. Der ausgewählte Spieler ist nicht in Reichweite. - 选定的玩家不在有效范围内。 + 选定的玩家不在有效范围内。 Couldn't give that much of that item, maybe you don't have that amount? @@ -4708,7 +4756,7 @@ não poderia dar que muito desse item, talvez você não tem essa quantia? Не могу дать, что большая часть этого пункта, может быть, у вас нет этой суммы? Du konntest nicht so eine große Menge von diesem Gegenstand weitergeben. Hast du vielleicht nicht genug davon? - 不能给那么多的东西,也许你没有那么多? + 不能给那么多的东西,也许你没有那么多? You gave %1 %2 %3. @@ -4720,7 +4768,7 @@ você deu %1 %2 %3. Ты дал %1 %2 %3. Du hast %1 %2 %3 gegeben. - 你给了 %1 %2 %3。 + 你给了 %1 %2 %3。 You don't have that much to give! @@ -4732,7 +4780,7 @@ Você não tem muito para dar! Вы не так много, чтобы дать! Du hast nicht so eine große Menge von diesem Gegenstand! - 你没有这么多去给别人! + 你没有这么多去给别人! You gave $%1 to %2. @@ -4744,7 +4792,7 @@ Você deu $%1 para %2. Вы дали $%1 %2. Du hast $%1 %2 gegeben. - 你将 $%1 给了 %2。 + 你将 $%1 给了 %2。 You recently robbed the bank! You can't give money away just yet. @@ -4756,7 +4804,7 @@ Recentemente, você roubou o banco! Você não pode dar dinheiro fora ainda. Вы недавно ограбили банк! Вы не можете отдавать деньги только пока. Du hast kürzlich die Bank ausgeraubt! Du kannst deswegen kein Geld weitergeben. - 你最近抢劫了银行!你还不能现在把钱给出去。 + 你最近抢劫了银行!你还不能现在把钱给出去。 No data selected. @@ -4768,7 +4816,7 @@ Não há dados selecionado. Нет выбранных данных. Keine Daten ausgewählt. - 没有选择数据。 + 没有选择数据。 You did not select a vehicle. @@ -4780,7 +4828,7 @@ Você não selecionou um veículo. Вы не выбрали автомобиль. Du hast kein Fahrzeug ausgewählt. - 你没有选择载具。 + 你没有选择载具。 You do not own any vehicles. @@ -4792,7 +4840,7 @@ Você não possui quaisquer veículos. Вы не являетесь владельцем каких-либо транспортных средств. Du besitzt keine Fahrzeuge. - 你没有任何载具。 + 你没有任何载具。 You did not select a player. @@ -4804,7 +4852,7 @@ Você não selecionou um jogador. Вы не выбрали игрока. Du hast keinen Spieler ausgewählt. - 你没有选择玩家。 + 你没有选择玩家。 You have given %1 keys to your %2. @@ -4816,7 +4864,7 @@ Você tem dado %1 chaves de sua %2. Вы дали %1 ключи от %2. Du hast %1 die Schlüssel zu deinem %2 gegeben. - 你将 %2 的钥匙给了 %1。 + 你将 %2 的钥匙给了 %1。 %1 has gave you keys for a %2. @@ -4828,7 +4876,7 @@ %1 has gave you keys for a %2. %1 has gave you keys for a %2. %1 hat dir die Schlüssel zum %2 gegeben. - %1 给了你一把 %2 的钥匙。 + %1 给了你一把 %2 的钥匙。 You cannot remove the keys to your house! @@ -4840,7 +4888,7 @@ Você não pode remover as chaves de sua casa! Вы не можете удалить ключи к вашему дому! Du kannst die Schlüssel zu diesem Haus nicht wegwerfen! - 你不能丢弃你家的钥匙! + 你不能丢弃你家的钥匙! You did not select anything to remove. @@ -4852,7 +4900,7 @@ Você não selecionou nada para remover. Вы ничего удалить не выбрать. Du hast nichts zum Entsorgen ausgewählt. - 你没有选择要删除的任何东西。 + 你没有选择要删除的任何东西。 Could not remove that much of that item. Maybe you do not have that amount? @@ -4864,7 +4912,7 @@ Não foi possível remover que muito desse item. Talvez você não tem essa quantia? Не удалось удалить, что большая часть этого элемента. Может быть, у вас нет этой суммы? Du konntest nicht so eine große Menge von diesem Gegenstand entsorgen. Hast du vielleicht nicht so viele davon? - 不能丢弃大部分东西。也许你没有那么多数额? + 不能丢弃大部分东西。也许你没有那么多数额? You have successfully removed %1 %2 from your inventory. @@ -4876,7 +4924,7 @@ Você removeu com êxito %1 %2 do seu inventário. Вы успешно удалены %1 %2 из инвентаря. Du hast erfolgreich %1 %2 aus deinem Inventar entsorgt. - 你已成功地从库存删除 %1 %2。 + 你已成功地从库存删除 %1 %2。 Something went wrong; the menu will not open? @@ -4888,7 +4936,7 @@ Algo deu errado; o menu não vai abrir? Что-то пошло не так; меню не откроется? Etwas ist schief gelaufen. Das Menü konnte nicht geöffnet werden. - 出错了;菜单不能打开? + 出错了;菜单不能打开? Config does not exist? @@ -4900,7 +4948,7 @@ O configuração não existe? Config не существует? Einstellung nicht vorhanden? - 配置不存在? + 配置不存在? You cannot store that in anything but a land vehicle! @@ -4912,7 +4960,7 @@ Você não pode armazenar isso em qualquer coisa, mas um veículo de terra! Вы не можете хранить, что ничего, кроме наземного транспортного средства! Du kannst das nur in einem Landfahrzeug lagern! - 除了陆地载具,你不能储存它! + 除了陆地载具,你不能储存它! You don't have that much cash on you to store in the vehicle! @@ -4924,7 +4972,7 @@ Você não tem que muito dinheiro em você para armazenar no veículo! У вас не так много наличных денег на вас, чтобы хранить в автомобиле! Du hast nicht genug Geld bei dir, um die eingegeben Menge in das Fahrzeug zu lagern! - 你没有那么多现金可以存放在载具里! + 你没有那么多现金可以存放在载具里! The vehicle is either full or cannot hold that much. @@ -4936,7 +4984,7 @@ O veículo está cheio ou não pode segurar muito. Транспортное средство либо полностью или не может держать так много. Das Fahrzeug ist entweder voll oder kann nicht so viel halten. - 这载具要么是满的,要么就是装不下那么多。 + 这载具要么是满的,要么就是装不下那么多。 Couldn't remove the items from your inventory to put in the vehicle. @@ -4948,7 +4996,7 @@ O veículo está cheio ou não pode segurar muito. Транспортное средство либо полностью или не может держать так много. Das Fahrzeug ist entweder voll oder hat nicht so viel Platz. - 无法从你的库存中取出物品放入车内。 + 无法从你的库存中取出物品放入车内。 This is an illegal item and cops are near by. You cannot dispose of the evidence. @@ -4960,7 +5008,7 @@ Este é um item ilegal e policiais estão nas proximidades. Você não pode dispor das provas. Это незаконный пункт и полицейские находятся поблизости. Вы не можете избавиться от доказательств. Dies ist ein illegaler Gegenstand und Polizisten sind in der Nähe. Du kannst die Beweise nicht einfach so entsorgen. - 这是非法物品,警察就在附近。你不能把它扔掉。 + 这是非法物品,警察就在附近。你不能把它扔掉。 You cannot remove an item when you are in a vehicle. @@ -4972,7 +5020,7 @@ Você não pode remover um item quando você está em um veículo. Вы не можете удалить элемент, когда вы находитесь в автомобиле. Du kannst keinen Gegenstand entsorgen, wenn du in einem Fahrzeug sitzt. - 当你在车内时,无法扔掉物品。 + 当你在车内时,无法扔掉物品。 You are now spectating %1.\n\nPress F10 to stop spectating. @@ -4984,7 +5032,7 @@ Você agora está como espectador %1.\n\nPressione F10 para sair. Теперь вы spectating %1.\n\nНажмите F10, чтобы остановить spectating. Du beobachtest nun %1.\n\nDrücke F10, um das Beobachten zu beenden. - 你现在正在观看 %1.\n\n 按F10停止观看. + 你现在正在观看 %1.\n\n 按F10停止观看. You have stopped spectating. @@ -4996,7 +5044,7 @@ Você parou espectador. Вы остановили spectating. Du hast das Beobachten beendet. - 你已经停止了观看。 + 你已经停止了观看。 You have teleported %1 to your location. @@ -5008,7 +5056,7 @@ Você teletransportou %1 para a sua localização. Вы телепортированы %1 к вашему положению. Du hast %1 zu deiner Position teleportiert. - 传送 %1 到你的位置。 + 传送 %1 到你的位置。 <t color='#ADFF2F'>ATM</t> @@ -5032,7 +5080,7 @@ Capturar Esconderijo de Gangue Захват шайка укрытие Gangversteck einnehmen - 占领帮派藏身处 + 占领帮派藏身处 An empty array was passed to fn_levelCheck.sqf @@ -5044,7 +5092,7 @@ An empty array was passed to fn_levelCheck.sqf An empty array was passed to fn_levelCheck.sqf Ein leeres Feld wurde an fn_levelCheck.sqf übergeben. - 一个空字段传递给fn_levelCheck.sqf + 一个空字段传递给fn_levelCheck.sqf @@ -5058,7 +5106,7 @@ Estação de Transmissão de Notícias - 新闻广播 + 新闻广播 Channel 7 News Station @@ -5070,7 +5118,7 @@ Estação de Notícias do Canal 7 - 7频道新闻台 + 7频道新闻台 Message Heading: @@ -5082,7 +5130,7 @@ Titulo da Mensagem: - 消息标题: + 消息标题: Message Content: @@ -5094,7 +5142,7 @@ Conteúdo da Mensagem: - 消息内容: + 消息内容: Broadcast Message @@ -5106,7 +5154,7 @@ Transmitir Anúncio - 广播消息 + 广播消息 Broadcast Cost: %1<br />Next Broadcast Available: %2 @@ -5118,7 +5166,7 @@ Custo de Trasnmissão: %1<br />Próxima transmissão disponível em: %2 - 广播费用: %1<br />下一个广播可用于: %2 + 广播费用: %1<br />下一个广播可用于: %2 The header cannot be over %1 characters @@ -5130,7 +5178,7 @@ O cabeçalho não pode ter mais que %1 caracteres - 标题不能超过 %1 个字符 + 标题不能超过 %1 个字符 You've entered an unsupported character! @@ -5142,7 +5190,7 @@ Você inseriu um caractere inválido - 你输入了一个不支持的字符! + 你输入了一个不支持的字符! Now @@ -5154,7 +5202,7 @@ Agora - 现在 + 现在 You need $%1 to send a broadcast! @@ -5166,7 +5214,7 @@ Você precisa de $%1 para enviar uma transmissão! - 你需要支付 $%1 才能发送广播! + 你需要支付 $%1 才能发送广播! <t size='2'>%1</t><br />Broadcasted by: %2 @@ -5178,7 +5226,7 @@ <t size='2'>%1</t><br />Transmitido por: %2 - <t size='2'>%1</t><br />广播发送者: %2 + <t size='2'>%1</t><br />广播发送者: %2 @@ -5192,7 +5240,7 @@ Sei stato arrestato, sconta la tua pena. Se cercherai di rinascere o di riconnetterti il tuo tempo aumenterà! Você foi preso, cumpra sua pena. Se você tentar renascer ou reconectar seu tempo na cadeia irá aumentar! Zostałeś aresztowany, poczekaj na koniec kary. Jeśli się rozłączysz albo odrodzisz twoja kara zostanie powiększona - 你被捕了,耐心坐牢吧。如果你试图重生或重新连接坐牢时间会增加! + 你被捕了,耐心坐牢吧。如果你试图重生或重新连接坐牢时间会增加! For being arrested you have lost the following licenses if you own them\n\nFirearms License\nRebel License @@ -5204,7 +5252,7 @@ A causa del tuo arresto hai perso le seguenti licenze, se le possedevi\n\nPorto d'armi\nLicenza Ribelle Você perdeu as seguintes licenças por ter sido preso\n\nPorte de Armas\n\nTreinamento Rebelde Z uwagi na aresztowanie straciłeś następujące licencje jeśli je posiadałeś \n\nPozwolenie na broń \nTrening Rebelianta - 你如果被捕了,会失去\n\n枪支许可证\n叛军许可证 + 你如果被捕了,会失去\n\n枪支许可证\n叛军许可证 %1 has escaped from jail! @@ -5216,7 +5264,7 @@ %1 è scappato dalla prigione! %1 escapou da prisão %1 uciekł z więzienia! - %1 越狱了! + %1 越狱了! You have escaped from jail, you still retain your previous crimes and now have a count of escaping jail. @@ -5228,7 +5276,7 @@ Sei scappato di prigione, rimarrai ricercato per i crimini da te commessi in precedenza e in aggiunta per essere scappato di prigione. Você escapou da prisão, agora você é procurado por esse crime e todos os outros que havia cometido anteriormente Uciekłeś z więzienia, dalej jesteś ścigany za poprzednie przestępstwa i dodatkowo za ucieczkę. - 你已经从监狱逃跑了,你仍然保留着你以前的罪行,现在算是越狱。 + 你已经从监狱逃跑了,你仍然保留着你以前的罪行,现在算是越狱。 You have served your time in jail and have been released. @@ -5240,7 +5288,7 @@ Hai scontato la tua pena in prigione e sei stato rilasciato. Você pagou pelo seus crimes e foi libertado. Odbyłeś swoją karę zostałeś zwolniony z więzienia. - 你已经在监狱服完刑,并被释放。 + 你已经在监狱服完刑,并被释放。 Time Remaining: @@ -5252,7 +5300,7 @@ Tempo rimanente: Tempo Restante: Pozostały czas kary: - 剩余时间: + 剩余时间: Can pay bail: @@ -5264,7 +5312,7 @@ Puoi pagare la cauzione: Pode pagar fiança: Możesz wpłacić kaucję - 可以支付保释金: + 可以支付保释金: Bail Price: @@ -5276,7 +5324,7 @@ Costo cauzione: Preço da fiança: Wartość kaucji: - 保释金额: + 保释金额: You have paid your bail and are now free. @@ -5288,7 +5336,7 @@ Hai pagato la cauzione e sei libero. Você pagou a fiança e agora está livre. Zapłaciłeś kaucję jesteś wolny. - 你已经支付了保释金,现在自由了. + 你已经支付了保释金,现在自由了. @@ -5302,7 +5350,7 @@ %1 ti ha colpito stordendoti. %1 nocauteou você. zostałeś ogłuszony przez %1 - %1 把你击倒了。 + %1 把你击倒了。 You have lost all your motor vehicle licenses for vehicular manslaughter. @@ -5314,7 +5362,7 @@ Hai perso tutte le tue licenze di guida a causa di un omicidio stradale. Você não perdeu suas licenças de motorista por atropelamento. Straciłeś wszystkie uprawnienia na pojazdy z uwagi na ciągłe zabijanie ludzi pojazdami. - 你因载具过失杀人被吊销了所有机动载具驾驶许可证。 + 你因载具过失杀人被吊销了所有机动载具驾驶许可证。 You have lost your firearms license for manslaughter. @@ -5326,7 +5374,7 @@ Hai perso il tuo Porto d'Armi a causa di un omicidio Você perdeu suas licenças de porte de arma por cometer homicídio. Straciłeś pozwolenie na broń z uwagi na zabijanie ludzi z broni palnej - 你因过失杀人而丧失了枪支许可证。 + 你因过失杀人而丧失了枪支许可证。 They didn't have any cash... @@ -5338,7 +5386,7 @@ Non hai soldi... Eles não tinham nenhum dinheiro.. Nie posiadają żadnych pieniędzy ... - 他们没有现金... + 他们没有现金... You stole $%1 @@ -5350,7 +5398,7 @@ Hai rubato $%1 Você roubou R$%1 Ukradłeś %1 - 你偷了 $%1 + 你偷了 $%1 The safe is empty! @@ -5362,7 +5410,7 @@ La cassaforte è vuota! O Cofre está vazio! Sejf jest pusty! - 保险箱是空的! + 保险箱是空的! Someone is already accessing the safe.. @@ -5374,7 +5422,7 @@ Qualcuno sta già interagendo con la cassaforte.. Alguem já está acessando o cofre. Ktoś właśnie włamuje się do sejfu! - 有人已经进入保险箱了。 + 有人已经进入保险箱了。 There needs to be %1 or more cops online to continue. @@ -5386,7 +5434,7 @@ Servono almeno %1 poliziotti online per continuare. É necessário ter %1 ou mais policiais online para continuar. Potrzeba conajmniej %1 policjantów aby kontynuować - 需要有 %1 或更多的警察才能继续。 + 需要有 %1 或更多的警察才能继续。 Safe Inventory @@ -5398,7 +5446,7 @@ Inventario cassaforte Cofre Wyposażenie sejfu - 保险箱库存 + 保险箱库存 You need to select an item! @@ -5410,7 +5458,7 @@ Devi selezionare un oggetto! Você precisa selecionar um item! Musisz coś wybrać - 您需要选择一个物品! + 您需要选择一个物品! There isn't %1 gold bar(s) in the safe! @@ -5422,7 +5470,7 @@ Nella cassaforte non ci sono %1 lingotti d'oro Não existe %1 barra(s) de ouro no cofre! W sejfie nie ma % sztab złota! - 金库里没有 %1 金条! + 金库里没有 %1 金条! @@ -5436,7 +5484,7 @@ Impossibile aprire l'interfaccia per le multe Não foi possível abrir o bloco de multa Nie potrafię otworzyć interfejsu mandatów - 无法打开罚款界面 + 无法打开罚款界面 Ticketing %1 @@ -5448,7 +5496,7 @@ Multando %1 Multando %1 Mandat dla %1 - 开据罚单给 %1 + 开据罚单给 %1 %2 got back a blacklisted vehicle near %1. @@ -5460,7 +5508,7 @@ %2 retirou um veículo que se encontra na lista negra, perto de %1. %2 получить обратно в черный список автомобиль возле %1. %2 hat ein gesuchtes Fahrzeug nahe %1 ausgeparkt. - %2 在 %1 附近找回了被列入黑名单的载具。 + %2 在 %1 附近找回了被列入黑名单的载具。 Person to ticket is nil @@ -5472,7 +5520,7 @@ La persona da multare è nil Jogador a ser multado é nulo Osoba do ukarania mandatem to "nil" - 被罚款的玩家为“无” + 被罚款的玩家为“无” Person to ticket doesn't exist. @@ -5484,7 +5532,7 @@ La persona da multare non esiste. Jogador a ser multado não existe. Nie ma osoby ukaranej mandatem - nie istnieje - 被罚款的玩家不存在。 + 被罚款的玩家不存在。 You didn't enter actual number. @@ -5496,7 +5544,7 @@ Non hai inserito un numero correttamente. Você não digitou um número válido Wybrałeś zły numer - 你没有输入正确的数字. + 你没有输入正确的数字. Tickets can not be more than $200,000! @@ -5508,7 +5556,7 @@ La multa non può essere più di $200.000! A multa não pode ser maior que R$200.000! Mandat nie może być wyższy niż $200.000! - 罚单不能超过 $200,000! + 罚单不能超过 $200,000! %1 gave a ticket of $%2 to %3 @@ -5520,7 +5568,7 @@ %1 ha dato una multa di $%2 a %3 %1 deu uma multa de R$%2 para %3 %1 Wystawił mandat w wysokości %2 dla %3 - %1 开据金额 $%2 的罚单给 %3 + %1 开据金额 $%2 的罚单给 %3 You don't have enough money in your bank account or on you to pay the ticket. @@ -5532,7 +5580,7 @@ Non hai fondi sufficienti nel tuo conto in banca per pagare la multa. Você não possui dinheiro suficiente na sua conta bancária ou na sua mão para pagar o bilhete. Nie masz środków na koncie aby zapłacić mandat. - 你的银行帐户中没有足够的钱来支付罚金。 + 你的银行帐户中没有足够的钱来支付罚金。 %1 couldn't pay the ticket due to not having enough money. @@ -5544,7 +5592,7 @@ %1 non può pagare la multa perchè non ha sufficienti fondi nel suo conto in banca. %1 não pode pagar a multa pois não tem dinheiro suficiente. %1 nie może zapłacić mandatu bo nie ma tylu środków na koncie - %1 由于没有足够的钱,无法支付罚金。 + %1 由于没有足够的钱,无法支付罚金。 You have paid the ticket of $%1 @@ -5556,7 +5604,7 @@ Hai pagato la multa di $%1 Você pagou a multa de R$%1 Zapłaciłeś mandat w wysokości $%1 - 你已经支付了 $%1 的罚金 + 你已经支付了 $%1 的罚金 %1 paid the ticket of $%2 @@ -5568,7 +5616,7 @@ %1 ha pagato la multa di $%2 %1 pagou a multa de R$%2 %1 zapłacił mandat w wyskości $%2 - %1 支付了 $%2 的罚金 + %1 支付了 $%2 的罚金 %1 paid the ticket. @@ -5580,7 +5628,7 @@ %1 ha pagato la multa. %1 pagou a multa. %1 zapłacił mandat. - %1 支付了罚金。 + %1 支付了罚金。 %1 has given you a ticket for $%2 @@ -5592,7 +5640,7 @@ %1 ti ha dato una multa di $%2 %1 lhe aplicou uma multa de R$%2 %1 dał ci mandat w wysokości $%2 - %1 给你开了一张 $%2 的罚单 + %1 给你开了一张 $%2 的罚单 %1 refused to pay the ticket. @@ -5604,7 +5652,7 @@ %1 si è rifiutato di pagare la multa. %1 se recusou a pagar a multa. %1 odmówił zapłaty mandatu. - %1 拒绝支付罚金。 + %1 拒绝支付罚金。 You have collected a bounty of $%1 for arresting a criminal. @@ -5616,7 +5664,7 @@ Hai ricevuto il pagamento di una taglia di $%1 per aver arrestato un criminale ricercato. Você ganhou uma recompensa de R$%1 por prender um criminoso. Otrzymujesz nagrodę w wysokości $%1 za aresztowanie poszukiwanego kryminalisty. - 你捉拿罪犯获得 %1 赏金。 + 你捉拿罪犯获得 %1 赏金。 You have collected a bounty of $%1 for killing a wanted criminal, if you had arrested him you would of received $%2. @@ -5628,7 +5676,7 @@ Hai ricevuto il pagamento di una taglia di $%1 per aver ucciso un criminale ricercato, se lo avessi arrestato avresti ricevuto $%2. Você ganhou uma recompensa de $%1 por matar um criminoso procurado, se você tivesse o prendido ganharia R$%2. Otrzymujesz nagrodę w wysokości $%1 za zabicie poszukiwanego kryminalisty, w przypadku gdybyś go aresztował otrzymałbyć $%2. - 你杀害被通缉的罪犯获得 %1 赏金,如果你逮捕了他,你就会获得 $%2 赏金。 + 你杀害被通缉的罪犯获得 %1 赏金,如果你逮捕了他,你就会获得 $%2 赏金。 %1 has $%2 worth of contraband on them. @@ -5640,7 +5688,7 @@ %1 ha $%2 in materiali illegali con se. %1 tem R$%1 em contrabando. %1 miał przy sobie kontrabandę o wartości $%2. - %1 有价值 $%2 的非法物品。 + %1 有价值 $%2 的非法物品。 Illegal Items @@ -5652,7 +5700,7 @@ Oggetti Illegali Items Ilegais Nielegalne przedmioty / kontrabanda - 非法物品 + 非法物品 %1 was identified as the bank robber! @@ -5664,7 +5712,7 @@ %1 è stato identificato come il rapinatore della banca! %1 foi identificado como ladrão de banco! %1 zidentyfikowany jako kasairz rabujący banki! - %1 被认定为银行抢劫犯! + %1 被认定为银行抢劫犯! No illegal items @@ -5676,7 +5724,7 @@ Nessun oggetto illegale Sem items ilegais Brak kontrabandy i nielegalnych przedmiotów - 没有非法物品 + 没有非法物品 You are not near a door! @@ -5688,7 +5736,7 @@ Non sei vicno ad una porta! Você não está perto de uma porta! Nie jesteś przy drzwiach - 你不在门附近! + 你不在门附近! You need to enable Picture in Picture (PiP) through your video settings to use this! @@ -5700,7 +5748,7 @@ Devi attivare Picture in Picture (PiP) nelle tue impostazioni video per usare questa funzione! Você precisa habilitar o Picture in Picture (PiP), através das suas configurações de vídeo para usar esta opção! Musisz włączyć Obraz w obrazie (PiP) w ustawieniach graficznych aby tego używać! - 您需要通过视频设置启用画中画(PiP)才能使用此功能! + 您需要通过视频设置启用画中画(PiP)才能使用此功能! Licenses: @@ -5712,7 +5760,7 @@ Licenze: Licenças: Licencje: - 许可证: + 许可证: No Licenses @@ -5724,7 +5772,7 @@ Nessuna Licenza Sem Licenças Brak licencji - 没有许可证 + 没有许可证 Nothing illegal in this vehicle @@ -5736,7 +5784,7 @@ Niente di illegale nel veicolo Nada ilegal dentro do veículo Nie znaleziono niczego nielegalnego w pojeździe - 这载具没有非法物品 + 这载具没有非法物品 Nothing illegal in this container. @@ -5748,7 +5796,7 @@ Nada ilegal dentro do container Rien d'illégal dans ce conteneur Nichts Illegales in diesem Container. - 这个库存没有非法物品。 + 这个库存没有非法物品。 This vehicle is empty @@ -5760,7 +5808,7 @@ Questo veicolo è vuoto Esse veículo está vazio Pojazd jest pusty - 这载具是空的 + 这载具是空的 This container is empty @@ -5772,7 +5820,7 @@ Este recipiente está vazio Этот контейнер пуст Dieser Container ist leer. - 这个库存是空的 + 这个库存是空的 $%1 from the Federal Reserve robbery was returned from the robber being killed. @@ -5784,7 +5832,7 @@ $%1 della rapina alla Riserva Federale sono stati recuperati dal rapinatore ucciso. R$%1 que foi roubado da Reserva Federal retornou a ela após a morte do ladrão. $%1 z kradzieży w Banku zostało zwrócone po zabiciu włamywacza. - 由于抢劫犯被杀死,联邦储备被抢的 $%1 被归还。 + 由于抢劫犯被杀死,联邦储备被抢的 $%1 被归还。 Repairing vault... @@ -5796,7 +5844,7 @@ Riparando il Caveau Reparando Cofre... Naprawiam skarbiec... - 修理金库... + 修理金库... The vault is now fixed and re-secured. @@ -5808,7 +5856,7 @@ Il Caveau è stato riparato e messo in sicurezza. O Cofre foi consertado e está seguro. Skarbiec jest naprawiony i zabezpieczony. - 金库现在已修复并重新加固。 + 金库现在已修复并重新加固。 The vault is already locked? @@ -5820,7 +5868,7 @@ Il Caveau è già bloccato? O Cofre está trancado? Skarbiec jest zablokowany? - 金库已经锁好了? + 金库已经锁好了? You can't enter anything below 1! @@ -5832,7 +5880,7 @@ Non puoi selezionare nulla sotto l'1! Não é permitido usar valores abaixo de 1! Nie możesz wprowadzić niczego poniżej 1! - 你不能输入少于1的任何物品! + 你不能输入少于1的任何物品! You can't store anything but gold bars in the safe. @@ -5844,7 +5892,7 @@ Nella cassaforte puoi depositare solo lingotti d'oro. Você só pode guardar Barras de Ouro no cofre. Nie możesz składować niczego poza sztabami złota w sejfie. - 保险箱除了金条外,你不能存放其它物品。 + 保险箱除了金条外,你不能存放其它物品。 You don't have %1 gold bar(s) @@ -5856,7 +5904,7 @@ Non hai %1 lingotti d'oro Você não tem %1 Barra(s) de Ouro Nie masz %1 sztab(y) złota - 你没有 %1 根金条 + 你没有 %1 根金条 Couldn't remove the item(s) from your inventory to put in the safe. @@ -5868,7 +5916,7 @@ Non è stato possibile rimuovere gli oggetti dal tuo inventario per metterli nella cassaforte. Não foi possível mover o item do inventário para o cofre. Nie można usunąć rzeczy z twojego wyposażenia aby włożyć je do sejfu - 无法从你的库存中取出物品放在保险箱里。 + 无法从你的库存中取出物品放在保险箱里。 Couldn't search %1 @@ -5880,7 +5928,7 @@ Impossibile ispezionare %1 Não foi possível buscar por %1 Nie można przeszukać %1 - 无法搜索 %1 + 无法搜索 %1 Repairing Door... @@ -5892,7 +5940,7 @@ Riparando la porta... Reparando a porta.... Naprawiam drzwi... - 修理门... + 修理门... No Licenses<br/> @@ -5904,7 +5952,7 @@ Nessuna Licenza<br/> Você não tem licença<br/> Brak licencji<br/> - 没有许可证<br/> + 没有许可证<br/> No one has sold to this dealer recently. @@ -5916,7 +5964,7 @@ Non è stato visto nessuno vendere a questo spacciatore di recente. Ninguém vendeu para esse negociante recentemente Nikt nie sprzedawał ostatnio u dilera. - 最近没有人出售物品给这个经销商。 + 最近没有人出售物品给这个经销商。 The following people have been selling to this dealer recently. @@ -5928,7 +5976,7 @@ Le seguenti persone sono state viste vendere a questo spacciatore. Os seguintes jogadores venderam para esse negociante recentemente. Ostatnio u dilera sprzedawali następujący ludzie. - 以下人员最近一直在向这个经销商销售物品。 + 以下人员最近一直在向这个经销商销售物品。 Radar @@ -5940,7 +5988,7 @@ Autovelox Radar Radar - 测速雷达 + 测速雷达 Vehicle Speed %1 km/h @@ -5952,7 +6000,7 @@ Velocità veicolo %1 km/h Velocidade do Veículo %1 km/h Prędkość pojazdu %1 km/h - 载具速度 %1 km/h + 载具速度 %1 km/h You have been released automatically for excessive restrainment time @@ -5964,7 +6012,7 @@ Sei stato automaticamente liberato per essere rimasto ammanettato troppo tempo Você foi solto automaticamente, devido ao tempo limite ter expirado. Zostałeś automatycznie rozkuty z uwagi na długi upływ czasu od skucia. - 由于约束时间过长你已经被自动释放 + 由于约束时间过长你已经被自动释放 You have been restrained by %1 @@ -5976,7 +6024,7 @@ %1 ti ha messo le manette Você foi imobilizado por %1 Zostałeś rozkuty przez %1 - 你被 %1 约束了 + 你被 %1 约束了 Who do you think you are? @@ -5988,7 +6036,7 @@ Quem você pensa que é? Кто ты, по-твоему, такой? Was glaubst du wer du bist? - 你以为你是谁? + 你以为你是谁? You must select a perp. @@ -6000,7 +6048,7 @@ Você deve selecionar um criminoso. Вы должны выбрать преступника. Du musst einen Verbrecher auswählen. - 你必须选择一个罪犯。 + 你必须选择一个罪犯。 You must select a crime. @@ -6012,7 +6060,7 @@ Você deve selecionar um crime. Вы должны выбрать преступление. Du musst ein Verbrechen auswählen. - 你必须选择一种犯罪行为。 + 你必须选择一种犯罪行为。 Failed to fetch crimes. @@ -6024,7 +6072,7 @@ Falha ao buscar crimes. Не удалось получить преступления. Die Verbrechen konnten nicht heruntergeladen werden. - 无法搜索犯罪记录。 + 无法搜索犯罪记录。 @@ -6038,7 +6086,7 @@ Hai provato a dare a %1 %2 unità di %3 ma non poteva trasportarlo quindi ti sono state restituite restituite. Você tentou dar %1 %2 %3, mas não conseguiu segurar e por isso que foi devolvido. Próbowałeś dać %1 %2 %3 lecz gracz nie mógł tego unieść, przedmioty zostały zwrócone. - 你试着给 %1 %2 %3 但他们不能持有,所以物品被归还。 + 你试着给 %1 %2 %3 但他们不能持有,所以物品被归还。 %1 returned %2 %3 because they couldn't hold that amount. @@ -6050,7 +6098,7 @@ %1 ha restituito %2 %3 perchè non poteva trasportare quella quantità %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. %1 zwrócił %2 %3 ponieważ nie mógł tego unieść - %1 返还 %2 %3 因为他们拿不出这笔钱。 + %1 返还 %2 %3 因为他们拿不出这笔钱。 %1 has gave you %2 but you can only hold %3 so %4 was returned back. @@ -6062,7 +6110,7 @@ %1 ti ha dato %2 ma puoi portare solo %3 quindi %4 unità sono state restituite. %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. %1 dał ci %2 lecz możesz unieść tylko %3, w związku z tym zwróciłeś %4. - %1 已经给了你 %2 但你只能持有 %3 所以 %4 被退回. + %1 已经给了你 %2 但你只能持有 %3 所以 %4 被退回. Do you want to add this item to your weapon or inventory? If you add it to your weapon your current existing attachment will be lost! @@ -6074,7 +6122,7 @@ Vuoi aggiungere questo oggetto alla tua arma o all'inventario? Se lo aggiungerai all'arma verrà rimosso l'eventuale accessorio già presente su di essa! Você quer adicionar este item à sua arma ou inventário? Se você adicioná-lo à sua arma seu item atual existente será perdida! Chcesz dodać tę rzecz do broni lub wyposażenia? Jeśli to zrobisz twoje aktualne wyposażenie broni zostanie zmienione na nowo zakupione i przepadnie! - 你想把这个物品添加到你的武器或库存中吗?如果你把它添加到你的武器,你当前的现有附件将会丢失! + 你想把这个物品添加到你的武器或库存中吗?如果你把它添加到你的武器,你当前的现有附件将会丢失! Attachment slot taken! @@ -6086,7 +6134,7 @@ Slot Accessorio preso! Slot de acessório utilizado! Podjąłeś slot - 附件插槽! + 附件插槽! Weapon @@ -6098,7 +6146,7 @@ Arma Armas Broń - 武器 + 武器 Inventory @@ -6110,7 +6158,7 @@ Inventario Inventário Wyposażenie - 库存 + 库存 You are not allowed to look into someone's backpack! @@ -6122,7 +6170,7 @@ Non sei autorizzato a guardare negli zaini altrui! Você não é liberado para olhar a mochila dos outros! Nie możesz zaglądać do czyichś plecaków! - 你不允许看别人的背包! + 你不允许看别人的背包! You are not allowed to access this vehicle while its locked. @@ -6134,7 +6182,7 @@ Non ti è permesso l'accesso a questo veicolo mentre è bloccato. Você não pode acessar o veiculo enquanto ele estiver trancado. Nie masz dostępu do pojazdu gdy ten jest zamknięty - 你不能在锁门的情况下进入载具。 + 你不能在锁门的情况下进入载具。 This vehicle's trunk is in use, only one person can use it at a time. @@ -6146,7 +6194,7 @@ L'inventario di questo veicolo è in uso, può essere usato solo da una persona alla volta. A mala desse veículo está em uso, somente uma pessoa pode acessá-la de cada vez. Bagażnik pojazdu jest w użyciu, na raz może korzystać z niego tylko jedna osoba. - 这载具的存储箱正在使用中,一次只能一个人使用它。 + 这载具的存储箱正在使用中,一次只能一个人使用它。 Failed Creating Dialog @@ -6158,7 +6206,7 @@ Creazione dialogo fallito Falha ao criar Diálogo Nie udało się nawiązać kontaktu - 创建对话框失败 + 创建对话框失败 You have unlocked your vehicle. @@ -6170,7 +6218,7 @@ Hai sbloccato il tuo veicolo. Você destrancou o veículo. Odblokowałeś pojazd - 你已经解锁了你的载具。 + 你已经解锁了你的载具。 You have locked your vehicle. @@ -6182,7 +6230,7 @@ Hai bloccato il tuo veicolo Você trancou o veículo. Zablokowałeś pojazd - 你已经锁好你的车了。 + 你已经锁好你的车了。 This can only be done by the last driver of this vehicle. @@ -6194,7 +6242,7 @@ This can only be done by the last driver of this vehicle. This can only be done by the last driver of this vehicle. This can only be done by the last driver of this vehicle. - 这只能由该车辆的最后一个驾驶员完成。 + 这只能由该车辆的最后一个驾驶员完成。 Sirens On @@ -6206,7 +6254,7 @@ Sirene accese Sirene Ligada Syrena włączona - 开启警笛 + 开启警笛 Sirens Off @@ -6218,7 +6266,7 @@ Sirene spente Sirene Desligada Syrena wyłączona - 关闭警笛 + 关闭警笛 You need to install storage containers to have storing capabilities! @@ -6230,7 +6278,7 @@ Devi posizionare dei contenitori per aver la possibilità di depositare qualcosa! Você tem que instalar caixas para poder guardar items! Musisz zainstalować pojemniki aby uzyskać możliwość składowania rzeczy - 你需要安装存储容器才能具有存储功能! + 你需要安装存储容器才能具有存储功能! This vehicle isn't capable of storing virtual items. @@ -6242,7 +6290,7 @@ Questo veicolo non è in grado di trasportare oggetti virtuali. Esse veículo não pode armazenar items virtuais. Ten pojazd nie przechowuje wirtualnych przedmiotów - 此载具无法存储虚拟物品。 + 此载具无法存储虚拟物品。 Weight: @@ -6254,7 +6302,7 @@ Peso: Peso: Waga: - 重量: + 重量: House Storage @@ -6266,7 +6314,7 @@ Inventario Casa Cavalos de Força: Domowa skrzynka - 房子存储 + 房子存储 Vehicle Trunk @@ -6278,7 +6326,7 @@ Inventario veicolo Capacidade da mala: Bagażnik pojazdu - 载具存储箱 + 载具存储箱 The vehicle either doesn't exist or is destroyed. @@ -6290,7 +6338,7 @@ Il veicolo non esiste o è stato distrutto. Veículo não existe ou está destruido. Pojazd nie istnieje lub jest zniszczony - 载具要么不存在要么被毁坏。 + 载具要么不存在要么被毁坏。 Invalid number format @@ -6302,7 +6350,7 @@ Formato numerico non valido Formato de número inválido. Niepoprawny format liczby - 数字格式无效 + 数字格式无效 You can't enter anything below 1! @@ -6314,7 +6362,7 @@ Non puoi inserire nulla al di sotto di 1! Você não pode digitar nada abaixo de 1! Nie możesz wprowadzić niczego poniżej 1! - 你不能输入少于1的任何物品! + 你不能输入少于1的任何物品! The vehicle doesn't have that many of that item. @@ -6326,7 +6374,7 @@ Il veicolo non contiene così tanti oggetti. O veículo não tem essa quantidade de items. Pojazd nie posiada takiej ilości rzeczy. - 载具没有那么多的物品。 + 载具没有那么多的物品。 Your sound was set to normal mode! @@ -6338,7 +6386,7 @@ Die Lautstärke ist wieder normal! Seu som voltou ao normal! Dzwięk został ustawiony w tryb normalny! - 你的声音被设置为正常模式! + 你的声音被设置为正常模式! Your sound was set to fade mode! @@ -6350,7 +6398,7 @@ Deine Lautstärke wurde in den "Fade-Mode" geändert! Seu som está abafado. Dzwięk został ustawiony w tryb wyciszony! - 你的声音被设置为静音模式! + 你的声音被设置为静音模式! An RPG game mode developed by Tonic. @@ -6362,7 +6410,7 @@ Um modo de jogo RPG desenvolvido pela Tonic. Режим RPG игра, разработанная компанией Tonic. Ein RPG-Modus entwickelt von Tonic. - 由Tonic开发的RPG游戏模式。 + 由Tonic开发的RPG游戏模式。 @@ -6376,7 +6424,7 @@ Errore nel salvataggio del contenitore, impossibile trovare la cas a? Erro ao salvar a caixa, não foi possível encontrar a casa. Błąd w zapisywaniu pojemnika, nie można zlokalizować domu. - 保存库存错误,找不到房子? + 保存库存错误,找不到房子? You are not allowed to access this storage container without the owner opening it. @@ -6388,7 +6436,7 @@ Non sei autorizzato ad accedere a questo contentitore senza il permesso del proprietario. Você so pode acessar a caixa se o dono deixar ela aberta. Nie masz dostępu do pojemnika dopóki właściciel go nie otworzy. - 除非所有者打开此库存,否则不允许访问该库存。 + 除非所有者打开此库存,否则不允许访问该库存。 There are no houses near you. @@ -6400,7 +6448,7 @@ Il n'y a aucune maison près de vous. Não há casas perto de você. Es gibt keine Häuser in deiner Nähe. - 你在附近没有房子。 + 你在附近没有房子。 The storage box is over the stairs! @@ -6412,7 +6460,7 @@ A caixa de armazenamento é sobre as escadas! Ящик для хранения находится над лестницей! Der Container ist über die Treppe! - 存储箱在楼梯上! + 存储箱在楼梯上! You are not the owner of the house. @@ -6424,7 +6472,7 @@ Vous n'êtes pas le propriétaire de la maison. Você não é o dono da casa. Du bist nicht der Eigentümer des Hauses. - 你不是房子的主人。 + 你不是房子的主人。 You have unlocked the door. @@ -6436,7 +6484,7 @@ Hai sbloccato la porta. Você destrancou a porta. Odblokowałeś drzwi. - 你打开了门。 + 你打开了门。 You have locked the door. @@ -6448,7 +6496,7 @@ Hai bloccato la porta. Você trancou a porta. Zablokowałeś drzwi. - 你锁上了门。 + 你锁上了门。 You are not near a door! @@ -6460,7 +6508,7 @@ Non sei vicino ad una porta! Você não está perto de uma porta! Nie jesteś przy drzwiach! - 你不在门附近! + 你不在门附近! This house was recently sold and is still processing in the database. @@ -6472,7 +6520,7 @@ Questa casa è stata venduta di recente ed il database la sta ancora processando. Essa casa já foi vendida, estamos processando a ordem de compra Ten dom został ostatnio sprzedany i trwa jego przetwarzanie w bazie danych. - 这套房子最近已售出,目前仍在数据库中处理。 + 这套房子最近已售出,目前仍在数据库中处理。 You do not have a home owners license! @@ -6484,7 +6532,7 @@ Non hai la licenza per il possesso delle case! Você não tem um Registro Civil para comprar casas! Nie masz licencji zarządcy nieruchomości! - 你没有房产许可证! + 你没有房产许可证! You can only own %1 houses at a time. @@ -6496,7 +6544,7 @@ Puoi possedere solo %1 case Você só pode ter %1 casa(s)! Możesz posiadać maksymalnie %1 domów. - 你一次只能拥有 %1 套房子。 + 你一次只能拥有 %1 套房子。 You do not have enough money! @@ -6508,7 +6556,7 @@ Non hai fondi a sufficienza! Você não tem todo esse dinheiro! Nie masz tyle pieniędzy! - 你没有足够的钱! + 你没有足够的钱! This house is available for <t color='#8cff9b'>$%1</t><br/>It supports up to %2 storage containers @@ -6520,7 +6568,7 @@ Questa casa è disponibile per <t color='#8cff9b'>$%1</t><br/>Può supportare fino a %2 contenitori Essa casa está disponível por <t color='#8cff9b'>R$%1</t><br/>Ela suporta até %2 caixa(s) Ten dom jest dostępny za <t color='#8cff9b'>$%1</t><br/>Ma %2 miejsca na pojemniki do przechowywania wyposażenia - 这所房子可以住 <t color='#8cff9b'>$%1</t><br/>它最多支持 %2 个存储箱 + 这所房子可以住 <t color='#8cff9b'>$%1</t><br/>它最多支持 %2 个存储箱 Purchase House @@ -6532,7 +6580,7 @@ Compra Casa Comprar Casa Kup dom! - 购买房子 + 购买房子 This house doesn't belong to anyone. @@ -6544,7 +6592,7 @@ Questa casa non appartiene a nessuno. Essa casa não tem dono. Ten dom nie ma właściciela. - 这套房子不属于任何人。 + 这套房子不属于任何人。 This person is not online there for you cannot raid their house! @@ -6556,7 +6604,7 @@ Questa persona non è online quindi non puoi perquisire la sua casa! O dono da casa não está online, você não pode vasculhar a casa! Osoba nie jest na serwerze, nie możesz przeszukać domu. - 房子主人不在线,你不能搜查房子! + 房子主人不在线,你不能搜查房子! The door is already unlocked! @@ -6568,7 +6616,7 @@ La porta è già sbloccata! A porta está destrancada! Drzwi są już odblokowane! - 门已经解锁了! + 门已经解锁了! The door is already locked! @@ -6580,7 +6628,7 @@ Die Tür ist bereits verriegelt! Esta porta já está trancada! Drzwi są już zablokowane! - 门已经锁好了! + 门已经锁好了! Breaking lock on door @@ -6592,7 +6640,7 @@ Sbloccando la porta Quebrando a fechadura da porta Wyłamuje zablokowane drzwi... - 撬开门锁 + 撬开门锁 %1 your house is being raided by the cops! @@ -6604,7 +6652,7 @@ %1 la Polizia si sta introducendo in casa tua! %1 Sua casa está sendo vasculhada pela Policia! %1 twój dom jest kontrolowany przez policję! - %1 的房子被警察搜查了! + %1 的房子被警察搜查了! House Owner @@ -6616,7 +6664,7 @@ Proprietario Casa Proprietário Właściciel domu - 房子主人 + 房子主人 There is nothing in this house. @@ -6628,7 +6676,7 @@ In questa casa non c'è nulla. Essa casa está vazia. Nie znaleziono niczego nielegalnego. - 房子里什么也没有。 + 房子里什么也没有。 Searching House... @@ -6640,7 +6688,7 @@ Perquisendo la Casa... Vasculhando a casa... Przeszukuję dom... - 搜索房子... + 搜索房子... You went too far away from the house! @@ -6652,7 +6700,7 @@ Sei andato troppo distante dalla casa! Você está muito distante da casa! Jesteś za daleko od domu! - 你离房子太远了! + 你离房子太远了! A house was raided and had $%1 worth of drugs / contraband. @@ -6664,7 +6712,7 @@ Una casa è stata perquisita e sono stati trovati $%1 in materiali illegali. A casa assaltada tem R$%1 em drogas ou contrabandos. Podczas przeszukania domu znaleziono kontrabandę o wartości $%1. - 一所房子被搜查,查获价值 $%1 的毒品/违禁品。 + 一所房子被搜查,查获价值 $%1 的毒品/违禁品。 Nothing illegal in this house. @@ -6676,7 +6724,7 @@ Questa casa non contiene nulla d'illegale. Nada ilegal nessa casa. Nie znaleziono niczego nielegalnego. - 这房子没有违法物品。 + 这房子没有违法物品。 House storage unlocked @@ -6688,7 +6736,7 @@ Contenitori della casa sbloccati Armário da casa destrancado Pojemnik odblokowany - 房子存储箱解锁 + 房子存储箱解锁 House storage locked @@ -6700,7 +6748,7 @@ Contenitori della casa bloccati Armário da casa trancado Pojemnik zablokowany - 房子存储箱锁定 + 房子存储箱锁定 Locking up house please wait... @@ -6712,7 +6760,7 @@ Bloccando la casa, attendere prego... Trancando a casa, aguarde... Blokuję zamykam dom proszę czekać... - 房子锁定中请稍等... + 房子锁定中请稍等... House has been locked up. @@ -6724,7 +6772,7 @@ La casa è stata bloccata. Sua casa foi trancada! Dom został zablokowany / zamknięty! - 房子被锁定。 + 房子被锁定。 Are you sure you want to sell your house? It will sell for: <t color='#8cff9b'>$%1</t> @@ -6736,7 +6784,7 @@ Sei sicuro di voler vendere la tua casa? La venderai per: <t color='#8cff9b'>$%1</t> Você tem certeza que deseja vender a casa? O valor de venda é: <t color='#8cff9b'>R$%1</t> Jesteś pewny że chcesz sprzedać dom za <t color='#8cff9b'>$%1</t> - 你确定要卖掉你的房子吗?出售价格:<t color='#8cff9b'>$%1</t> + 你确定要卖掉你的房子吗?出售价格:<t color='#8cff9b'>$%1</t> Are you sure you want to remove it? @@ -6748,7 +6796,7 @@ Etes-vous sûr de vouloir supprimer le conteneur ? Você tem certeza que quer remover isso? Bist du sicher, dass du den Container entfernen möchtest? - 你确定要删除存储箱吗? + 你确定要删除存储箱吗? This house is already owned even though you shouldn't be seeing this hint... @@ -6760,7 +6808,7 @@ Esta casa já é de propriedade mesmo que você não deveria estar vendo essa dica ... Этот дом уже находится в собственности, даже если вы не должны видеть эту подсказку ... Dieses Haus befindet sich bereits in deinem Besitz. Diesen Hinweis solltest du eigentlich gar nicht sehen... - 尽管你不该看到这个提示,但这所房子已经有房主了... + 尽管你不该看到这个提示,但这所房子已经有房主了... There is no owner for this house. @@ -6772,7 +6820,7 @@ Não há proprietário para esta casa. Там нет владельца для этого дома. Es gibt keinen Eigentümer für dieses Haus. - 这房子没有主人. + 这房子没有主人. @@ -6786,7 +6834,7 @@ Hunger Comida - 食物 + 食物 Health @@ -6798,7 +6846,7 @@ Gesundheit Vida - 健康 + 健康 Water @@ -6810,7 +6858,7 @@ Durst Água - + @@ -6824,7 +6872,7 @@ Non c'è alcun elicottero sulla piazzola d'atterraggio Não existe uma aeronave no heliponto! W pobliżu nie ma helikoptera! - 直升机停机坪上没有直升机! + 直升机停机坪上没有直升机! You need $1,000 to service your chopper @@ -6836,7 +6884,7 @@ Necessiti di $1.000 per fare manutenzione al tuo elicottero Você precisa de R$1.000 para reparar a sua aeronave Potrzebujesz $1000 aby serwisować helikopter - 你需要 $1,000 来维修你的直升机 + 你需要 $1,000 来维修你的直升机 Servicing Chopper [%1]... @@ -6848,7 +6896,7 @@ Manutenendo Elicottero [%1]... Reparando aeronave [%1]... Serwisuję helikopter [%1]... - 维修直升机 [%1]... + 维修直升机 [%1]... The vehicle is no longer alive or on the helipad! @@ -6860,7 +6908,7 @@ Il veicolo non è più attivo sulla piazzola d'atterraggio! "A aeronave não está mais disponível no heliponto! Pojazd nie jest dłużej dostępny na lądowisku - 载具不再存在或停在停机坪上! + 载具不再存在或停在停机坪上! Your chopper is now repaired and refuelled. @@ -6872,7 +6920,7 @@ L'elicottero è stato riparato e rifornito di carburante. Sua aeronave está reparada e com o tanque cheio! Helikopter został naprawiony i natankowany - 你的直升机现在已经修好并加满油。 + 你的直升机现在已经修好并加满油。 @@ -6886,7 +6934,7 @@ Cannabis Maconha não Processada Konopie - 大麻叶 + 大麻叶 Apple @@ -6898,7 +6946,7 @@ Mela Maçã Jabłko - 苹果 + 苹果 Apples @@ -6910,7 +6958,7 @@ Mele Maçãs Jabłka - 很多苹果 + 很多苹果 Heroin @@ -6922,7 +6970,7 @@ Eroina Heroína Heroina - 海洛因 + 海洛因 Oil @@ -6934,7 +6982,7 @@ Olio Petróleo Benzyna - 石油 + 石油 Peach @@ -6946,7 +6994,7 @@ Pesca Pêssego Brzoskwinia - 桃子 + 桃子 Peaches @@ -6958,7 +7006,7 @@ Pesche Pêssegos Brzoskwinie - 很多桃子 + 很多桃子 Crude Oil @@ -6970,7 +7018,7 @@ Olio non processato Petróleo não Refinado Ropa naftowa - 原油 + 原油 Processed Oil @@ -6982,7 +7030,7 @@ Olio processato Petróleo Refinado Olej napędowy - 成品油 + 成品油 Opium Poppy @@ -6994,7 +7042,7 @@ Eroina non processata Heroína não Processada Heroina nieoczyszczona - 罂粟 + 罂粟 Heroin @@ -7006,7 +7054,7 @@ Eroina processata Heroína Processada Heroina oczyszczona - 海洛因 + 海洛因 Pot @@ -7018,7 +7066,7 @@ Marijuana Maconha Processada Marihuana - 大麻 + 大麻 Raw Rabbit @@ -7030,7 +7078,7 @@ Carne di coniglio Carne de Coelho Mięso zająca - 生兔肉 + 生兔肉 Grilled Rabbit @@ -7042,7 +7090,7 @@ Carne di coniglio alla griglia Carne de coelho grelhado Grilowany zając - 烤兔肉 + 烤兔肉 Raw Salema @@ -7054,7 +7102,7 @@ Carne di Salmone Peixe Salema Mięso salemy - 生沙丁鱼肉 + 生沙丁鱼肉 Grilled Salema @@ -7066,7 +7114,7 @@ Sardine alla griglia Sardinha Grelhada Grilowana Salema - 烤沙丁鱼肉 + 烤沙丁鱼肉 Raw Ornate @@ -7078,7 +7126,7 @@ Carne di Orata Carne Francesa Mięso Ornata - 生梭鱼肉 + 生梭鱼肉 Grilled Ornate @@ -7090,7 +7138,7 @@ Angelfish alla griglia Angelfish Grelhado Grilowany Ornat - 烤梭鱼肉 + 烤梭鱼肉 Raw Mackerel @@ -7102,7 +7150,7 @@ Carne di Sgombro Peixe Cavalinha Mięso Makreli - 生鲭鱼肉 + 生鲭鱼肉 Grilled Mackerel @@ -7114,7 +7162,7 @@ Sgombro alla griglia Cavalinha Grelhada Grilowana Makrela - 烤鲭鱼肉 + 烤鲭鱼肉 Raw Tuna @@ -7126,7 +7174,7 @@ Carne di Tonno Peixe Tuna Mięso Tuńczyka - 生金枪鱼肉 + 生金枪鱼肉 Grilled Tuna @@ -7138,7 +7186,7 @@ tonno alla griglia Atum Grelhado Grilowany Tuńczyk - 烤金枪鱼肉 + 烤金枪鱼肉 Raw Mullet @@ -7150,7 +7198,7 @@ Carne di Triglia Peixe Mullet Mięso Cefala - 生鲻鱼肉 + 生鲻鱼肉 Fried Mullet @@ -7162,7 +7210,7 @@ Triglia fritta Mullet Fritado Grilowany Cefal - 油炸鲻鱼肉 + 油炸鲻鱼肉 Raw Catshark @@ -7174,7 +7222,7 @@ Carne di Squalo Tubarão Gato Mięso Rekina - 生鲨鱼肉 + 生鲨鱼肉 Fried Catshark @@ -7186,7 +7234,7 @@ profondo palombo fritti Tubarão Gato Frito Grilowany Rekin - 油炸鲨鱼肉 + 油炸鲨鱼肉 Raw Turtle @@ -7198,7 +7246,7 @@ Carne di Tartaruga Carne de Tartaruga Mięso Żółwia - 生海龟肉 + 生海龟肉 Turtle Soup @@ -7210,7 +7258,7 @@ Zuppa di Tartaruga Sopa de Tartaruga Zupa z żółwia - 海龟肉汤 + 海龟肉汤 Raw Chicken @@ -7222,7 +7270,7 @@ pollo crudo Galinha Crua Surowy Kurczak - 生鸡肉 + 生鸡肉 Deep Fried Chicken @@ -7234,7 +7282,7 @@ Nero Fried Chicken Frango Frito Smażony Kurczak - 炸鸡肉 + 炸鸡肉 Raw Rooster @@ -7246,7 +7294,7 @@ Rooster Raw Galo Cru Surowy Kogut - 生公鸡肉 + 生公鸡肉 Grilled Rooster @@ -7258,7 +7306,7 @@ cazzo alla griglia Galo Grelhado Grilowany Kogut - 烤鸡肉 + 烤鸡肉 Raw Goat @@ -7270,7 +7318,7 @@ Carne di capra Raw Carne de Cabra Crua Surowa Koza - 生山羊肉 + 生山羊肉 Grilled Goat @@ -7282,7 +7330,7 @@ Carne di capra alla griglia Carne de Cabra Grelhada Grilowana Koza - 烤山羊肉 + 烤山羊肉 Raw Sheep @@ -7294,7 +7342,7 @@ Carne di pecora grezza Carne de Ovelha Crua Surowa Owca - 生绵羊肉 + 生绵羊肉 Grilled Sheep @@ -7306,7 +7354,7 @@ Mutton alla griglia Mutton Grelhado Grilowana Owca - 烤全羊肉 + 烤全羊肉 Fishing Pole @@ -7318,7 +7366,7 @@ Canna da pesca Vara de Pescar Wędka - 钓鱼竿 + 钓鱼竿 Water Bottle @@ -7330,7 +7378,7 @@ Bottiglia d'acqua Garrafa d'água Butelka wody - 瓶装水 + 瓶装水 Coffee @@ -7342,7 +7390,7 @@ Caffè Café Kawa - 咖啡 + 咖啡 Donuts @@ -7354,7 +7402,7 @@ Ciambelle Rosquinha Pączki - 甜甜圈 + 甜甜圈 Empty Fuel Canister @@ -7366,7 +7414,7 @@ Tanica di carburante vuota Tanque de Gasolina Vazio Pusty kanister - 空汽油桶 + 空汽油桶 Full Fuel Canister @@ -7378,7 +7426,7 @@ Tanica di carburante piena Tanque de Gasolina Cheio Pełny Kanister - 满汽油桶 + 满汽油桶 Defibrillator @@ -7390,7 +7438,7 @@ defibrillatore Desfibrilador defibrylator - 心脏除颤器 + 心脏除颤器 Toolkit @@ -7402,7 +7450,7 @@ kit di strumenti conjunto de ferramentas zestaw narzędzi - 维修包 + 维修包 Pickaxe @@ -7414,7 +7462,7 @@ Piccone Picareta Kilof - 镐子 + 镐子 Copper Ore @@ -7426,7 +7474,7 @@ Minerale di Rame Pepita de Cobre Ruda miedzi - 铜矿石 + 铜矿石 Iron Ore @@ -7438,7 +7486,7 @@ Minerale di Ferro Pepita de Ferro Ruda żelaza - 铁矿石 + 铁矿石 Iron Ingot @@ -7450,7 +7498,7 @@ Lingotto di ferro Barra de Ferro Sztabka żelaza - 铁锭 + 铁锭 Copper Ingot @@ -7462,7 +7510,7 @@ Lingotto di Rame Barra de Cobre Sztabka miedzi - 铜锭 + 铜锭 Sand @@ -7474,7 +7522,7 @@ Sabbia Areia Piasek - 沙子 + 沙子 Salt @@ -7486,7 +7534,7 @@ Sale Sal Sól kopana - 盐矿 + 盐矿 Refined Salt @@ -7498,7 +7546,7 @@ Sale raffinato Sal Refinado Sól rafinowana - 食盐 + 食盐 Glass @@ -7510,7 +7558,7 @@ Vetro Vidro Szkło - 玻璃 + 玻璃 Polished Diamond @@ -7522,7 +7570,7 @@ Diamante tagliato Diamante Lapidado Diament szlifowany - 钻石抛光 + 钻石抛光 Uncut Diamond @@ -7534,7 +7582,7 @@ Diamante grezzo Diamante Bruto Diament surowy - 未切割钻石 + 未切割钻石 Tactical Bacon @@ -7546,7 +7594,7 @@ Carne secca Bacon Tático Posiłek taktyczny - 战术培根 + 战术培根 RedGull @@ -7558,7 +7606,7 @@ RedGull RedGull RedGull - 红牛 + 红牛 Lockpick @@ -7570,7 +7618,7 @@ Grimaldello Chave Mestra Wytrych - 开锁工具 + 开锁工具 Rock @@ -7582,7 +7630,7 @@ Roccia Pedra Skała - 矿石 + 矿石 Cement Bag @@ -7594,7 +7642,7 @@ Sacco di Cemento Saco de Cimento Worek cementu - 水泥 + 水泥 Gold Bar @@ -7606,7 +7654,7 @@ Lingotto d'Oro Barra de Ouro Sztabka złota - 金条 + 金条 Blasting Charge @@ -7618,7 +7666,7 @@ Carica Esplosiva Explosivo Ładunek wybuchowy - 爆破装置 + 爆破装置 Bolt Cutter @@ -7630,7 +7678,7 @@ Tronchese Alicate Nożyce do kłódek - 螺栓切割机 + 螺栓切割机 Bomb Defuse Kit @@ -7642,7 +7690,7 @@ Attrezzi per il disinnesco Kit anti-bomba Zestaw saperski - 爆破拆除工具 + 爆破拆除工具 Small Storage Box @@ -7654,7 +7702,7 @@ Contenitore piccolo Caixa Pequena Mały pojemnik - 小储物箱 + 小储物箱 Large Storage Box @@ -7666,7 +7714,7 @@ Contenitore grande Caixa Grande Duży pojemnik - 大储物箱 + 大储物箱 Coca Leaf @@ -7678,7 +7726,7 @@ Cocaina non processata Cocaína não Refinada Nieoczyszczona kokaina - 古柯叶 + 古柯叶 Coke @@ -7690,7 +7738,7 @@ Cocaina processata Cocaína Refinada Oczyszczona kokaina - 可卡因 + 可卡因 Spike Strip @@ -7702,7 +7750,7 @@ Striscia Chiodata Tapete de Espinhos Kolczatka drogowa - 钉刺带 + 钉刺带 @@ -7716,7 +7764,7 @@ Licenza di Guida Licença de Motorista Prawo jazdy - 小车驾驶证 + 小车驾驶证 Pilot License @@ -7728,7 +7776,7 @@ Licenza da Pilota Licença de Piloto Licencja Pilota - 飞行员证 + 飞行员证 Heroin Training @@ -7740,7 +7788,7 @@ Processo Eroina Treinamento de Heroina Wytwarzanie Heroiny - 海洛因加工证 + 海洛因加工证 Oil Processing @@ -7752,7 +7800,7 @@ Processo Olio Refinamento de Petróleo Rafinacja ropy naftowej - 石油提炼证 + 石油提炼证 Diving License @@ -7764,7 +7812,7 @@ Licenza di Pesca Licença de Mergulho Licencja Nurka - 潜水证 + 潜水证 Boating License @@ -7776,7 +7824,7 @@ Licenza Nautica Licença de Barco Patent Motorowodny - 海员证 + 海员证 Firearm License @@ -7788,7 +7836,7 @@ Porto d'Armi Licença de Porte de Armas Pozwolenie na broń - 持枪证 + 持枪证 Coast Guard License @@ -7800,7 +7848,7 @@ Licenza Guardia Costiera Licença da Guarda Costeira Trening straż przybrzeżna - 海岸警卫队证 + 海岸警卫队证 Rebel Training @@ -7812,7 +7860,7 @@ Licenza da Ribelle Treinamento Rebelde Trening rebelianta - 叛军训练 + 叛军训练 Truck License @@ -7824,7 +7872,7 @@ Licenza Camion Licença de Caminhão Prawo jazdy - ciężarówki - 货车驾驶证 + 货车驾驶证 Diamond Processing @@ -7836,7 +7884,7 @@ Processo Diamanti Lapidação de Diamante Szlifierz diamentów - 钻石加工厂 + 钻石加工厂 Copper Processing @@ -7848,7 +7896,7 @@ Processo Rame Processamento de Cobre Wytapianie miedzi - 铜矿加工 + 铜矿加工 Iron Processing @@ -7860,7 +7908,7 @@ Processo Ferro Processamento de Ferro Wytapianie żelaza - 铁矿加工 + 铁矿加工 Sand Processing @@ -7872,7 +7920,7 @@ Processo Sabbia Processamento de Areia Hutnik szkła z piasku - 玻璃制造证 + 玻璃制造证 Salt Processing @@ -7884,7 +7932,7 @@ Processo Sale Processamento de Sal Warzenie soli - 食盐制造证 + 食盐制造证 Cocaine Training @@ -7896,7 +7944,7 @@ Processo Cocaina Treinamento de Cocaína Oczyszczanie kokainy - 可卡因加工证 + 可卡因加工证 Marijuana Training @@ -7908,7 +7956,7 @@ Processo Marijuana Treinamento de Maconha Suszenie konopi - 大麻加工证 + 大麻加工证 Cement Mixing License @@ -7920,7 +7968,7 @@ Processo Cemento Licença de Cimento Wytwórca cementu - 水泥制造证 + 水泥制造证 Medical Marijuana License @@ -7932,7 +7980,7 @@ Medical Marijuana Licenza Licença Medical Marijuana Medical Marijuana Licencji - 医用大麻许可证 + 医用大麻许可证 Home Owners License @@ -7944,7 +7992,7 @@ Licenza possesso Casa Licença de Casas Zarządca nieruchomości - 房产证 + 房产证 @@ -7958,7 +8006,7 @@ Può essere usata solo sulla cassaforte. Isso só pode ser usado em um cofre. Możesz tego użyć na skarbcu. - 这只能用于金库。 + 这只能用于金库。 There is already a charge placed on this vault. @@ -7970,7 +8018,7 @@ C'è già una carica piazzata sulla cassaforte. Já existe uma carga colocada sobre esse cofre. Już założono ładunek wybuchowy na skarbcu. - 这座金库已经安装爆破装置。 + 这座金库已经安装爆破装置。 The vault is already opened. @@ -7982,7 +8030,7 @@ La cassaforte è già aperta. O cofre está aberto. Skarbiec jest już otwarty. - 金库已经打开了. + 金库已经打开了. A blasting charge has been placed on the federal reserves vault, You have till the clock runs out to disarm the charge! @@ -7994,7 +8042,7 @@ Una carica esplosiva è stata piazzata sulla cassaforte della Riserva Federale, puoi cercare di disinnescarla prima che scada il tempo! O explosivo foi colocado no cofre , você tem até o tempo acabar para desarmar o explosivo. Ładunek wybuchowy został założony na skarbcu rezerw federalnych, musisz rozbroić ładunek nim wybuchnie! - 金库里已经安装了爆破装置,你必须有足够的时间解除爆破装置! + 金库里已经安装了爆破装置,你必须有足够的时间解除爆破装置! The timer is ticking! Keep the cops away from the vault! @@ -8006,7 +8054,7 @@ Il tempo sta scorrendo! Tieni la polizia lontana dalla cassaforte! O tempo está passando! Mantenha os policiais longe do cofre Zegar tyka! Trzymaj policję z dala od skarbca! - 计时器开始计时!请远离爆破点! + 计时器开始计时!请远离爆破点! The charge has been disarmed! @@ -8018,7 +8066,7 @@ La carica esplosiva è stata disinnescata! O explosivo foi desarmado! Ładunek wybuchowy rozbrojony! - 爆破装置被解除! + 爆破装置被解除! The vault is now opened @@ -8030,7 +8078,7 @@ La cassaforte è stata aperta O cofre está aberto. Skarbiec otwarty - 金库现在已经打开了 + 金库现在已经打开了 You must open the container before placing the charge! @@ -8042,7 +8090,7 @@ Você deve abrir o container antes de colocar o explosivo! Du musst den Container öffnen, bevor du die Ladung platzieren kannst! - 安装爆破装置前你必须打开金库大门! + 安装爆破装置前你必须打开金库大门! You are not looking at a house door. @@ -8054,7 +8102,7 @@ Non sei girato verso la porta di una casa. Você não esta olhando para a porta. Nie patrzysz w stronę drzwi. - 你需要靠近门才能使用。 + 你需要靠近门才能使用。 !!!!! SOMEONE IS BREAKING INTO THE FEDERAL RESERVE !!!!!! @@ -8066,7 +8114,7 @@ !!!!!! QUALCUNO STA CERCANDO DI INTRODURSI NELLA RISERVA FEDERALE !!!!!! !!!!! A RESERVA FEDERAL ESTÁ SENDO ROUBADA !!!!!! !!!!!! KTOŚ SIĘ WŁAMUJE DO BANKU REZERW FEDERALNYCH !!!!! - !!!!! 有人闯进金库 !!!!!! + !!!!! 有人闯进金库 !!!!!! %1 was seen breaking into a house. @@ -8078,7 +8126,7 @@ %1 è stato visto fare irruzione in una casa. %1 foi visto invadindo sua casa. %1 był widziany jak włamywał się do domu. - %1 闯入一所房子。 + %1 闯入一所房子。 Cutting lock on door @@ -8090,7 +8138,7 @@ Tranciando i blocchi sulla porta Quebrando o cadeado da porta Przecinam zabezpieczenia domu - 门锁被撬 + 门锁被撬 You must open the outside doors before opening it! @@ -8102,7 +8150,7 @@ Você deve abrir as portas externas antes de abrir essa! Du musst die Außentüren öffnen, bevor du weitermachen kannst! - 打开门前你必须先打开外面的门! + 打开门前你必须先打开外面的门! You are not looking at a vault. @@ -8114,7 +8162,7 @@ Você não está olhando para um cofre. Вы не смотрите на хранилище. Du siehst keinen Tresor an. - 你不是金库看守。 + 你不是金库看守。 There is no charge on the vault? @@ -8126,7 +8174,7 @@ Non c'è alcuna carica esplosiva sulla cassaforte Não há nenhum explosivo no cofre. Nie ma ładunku na skarbcu? - 爆破装置安装在了金库里? + 爆破装置安装在了金库里? Defusing charge... @@ -8138,7 +8186,7 @@ Disinnescando la carica esplosiva... Desarmando o explosivo... Rozbrajam ładunek... - 拆除爆破装置... + 拆除爆破装置... The charge has been defused @@ -8150,7 +8198,7 @@ La carica esplosiva è stata disinnescata O explosivo foi desarmado Ładunek został rozbrojony - 爆破装置已被拆除 + 爆破装置已被拆除 You need to look at the vehicle you want to refuel! @@ -8162,7 +8210,7 @@ Devi essere girato verso il veicolo che vuoi rifornire! Você precisa estar olhando para o veículo que deseja abastecer! Musisz spojrzeć w kierunku pojazdu który chcesz zatankować! - 你要看看你的载具是否加满了油! + 你要看看你的载具是否加满了油! You need to be closer to the vehicle! @@ -8174,7 +8222,7 @@ Devi stare più vicino al veicolo! Você precisa estar mais perto do veículo! Musisz być bliżej pojazdu! - 你需要离载具近一点! + 你需要离载具近一点! Refuelling Fuel Canister @@ -8186,7 +8234,7 @@ O reabastecimento de combustível vasilha Дозаправка топлива канистра Benzinkanister befüllen - 加注汽油桶 + 加注汽油桶 Fuel Station Pump @@ -8198,7 +8246,7 @@ Bomba de Combustível Station Топливная Насосная станция Zapfsäule - 燃料加油站 + 燃料加油站 Spend $%1 to refuel your Empty Fuel Canister? @@ -8210,7 +8258,7 @@ Gastar R$%1 para reabastecer a sua vasilha de combustível vazio? Потратить $%1 для дозаправки ваш Пусто баллон с горючим? Willst du deinen leeren Kraftstoffkanister für $%1 befüllen? - 花费 $%1 加满你的空汽油桶? + 花费 $%1 加满你的空汽油桶? You must be closer to the fuel pump! @@ -8222,7 +8270,7 @@ Você deve estar mais perto da bomba de combustível! Вы должны быть ближе к топливному насосу! Du musst dich näher an der Zapfsäule befinden! - 你必须靠近加油机! + 你必须靠近加油机! You have successfully refuelled the Fuel Canister! @@ -8234,7 +8282,7 @@ Você reabastecido com sucesso a vasilha de combustível! Вы успешно заправились на баллон с горючим! Der Benzinkanister wurde befüllt! - 你已加满汽油桶! + 你已加满汽油桶! Refuelling %1 @@ -8246,7 +8294,7 @@ Rifornendo %1 Abastecendo %1 Tankuję %1 - 补充油量 %1 + 补充油量 %1 You have refuelled that %1 @@ -8258,7 +8306,7 @@ Hai rifornito di carburante un %1 Você abasteceu %1 Zatankowałeś %1 - 你要补充油量 %1 + 你要补充油量 %1 This vehicle is already in your key-chain. @@ -8270,7 +8318,7 @@ Possiedi già le chiavi di questo veicolo. Você já tem a chave desse veículo. Masz już klucze do tego pojazdu. - 你已经获得载具钥匙。 + 你已经获得载具钥匙。 Lock-picking %1 @@ -8282,7 +8330,7 @@ Scassinando %1 Arrombando %1 Włamujesz się do %1 - 撬锁 %1 + 撬锁 %1 You got to far away from the target. @@ -8294,7 +8342,7 @@ Sei andato troppo lontano dall'obiettivo Voçê está muito longe do seu alvo. Jesteś za daleko od celu. - 你必须远离目标。 + 你必须远离目标。 You now have keys to this vehicle. @@ -8306,7 +8354,7 @@ Sei ora in possesso delle chiavi di questo veicolo. Agora você tem as chaves do veiculo. Masz teraz klucze do tego pojazdu - 你现在获得了载具钥匙。 + 你现在获得了载具钥匙。 The lockpick broke. @@ -8318,7 +8366,7 @@ Il grimaldello si è rotto. A Chave Mestra quebrou. Wytrych się złamał. - 撬锁工具坏了。 + 撬锁工具坏了。 %1 was seen trying to lockpick a car. @@ -8330,7 +8378,7 @@ %1 è stato visto provare a scassinare un veicolo. %1 foi visto usando uma Chave Mestra em um carro. %1 był widziany jak próbował włamać się do samochodu. - %1 试图撬开一辆载具的门锁。 + %1 试图撬开一辆载具的门锁。 You are not near a mine! @@ -8342,7 +8390,7 @@ Non ti trovi vicino ad una cava! Você não está próximo de uma mina! Nie jesteś blisko kopalni! - 你不在矿场附近! + 你不在矿场附近! You can't mine from inside a car! @@ -8354,7 +8402,7 @@ Non puoi minare da dentro un veicolo! Você não pode minerar dentro do carro! Nie możesz wydobywać z samochodu! - 你不能从车里面采集! + 你不能从车里面采集! You have mined %2 %1 @@ -8366,7 +8414,7 @@ Hai minato %2 %1 Você minerou %2 %1 Wydobyłeś %2 %1 - 你开采 %2 %1 + 你开采 %2 %1 Place Spike Strip @@ -8378,7 +8426,7 @@ Posa striscie chiodate Tapete de Espinhos armado. Rozłóż kolczatkę - 放置钉刺带 + 放置钉刺带 Pack up Spike Strip @@ -8390,7 +8438,7 @@ Recupera striscie chiodate Pegar Tapete de Espinhos. Zwiń kolczatkę - 收起钉刺带 + 收起钉刺带 You need to be inside your house to place this. @@ -8402,7 +8450,7 @@ Devi essere all'interno della tua casa per posizionarlo. Você precisa estar dentro da sua casa para colocar isso! Musisz być wewnątrz własnego domu aby to umieścić. - 你需要在你的房子里放置这个。 + 你需要在你的房子里放置这个。 You cannot place any more storage containers in your house. @@ -8414,7 +8462,7 @@ Non puoi installare altri contenitori in casa tua. Você não pode colocar mais caixas dentro da sua casa. Nie masz więcej miejsca na pojemniki w tym domu. - 你不能在你的房子里放更多的储藏存储箱。 + 你不能在你的房子里放更多的储藏存储箱。 No more free storage spaces in your house. @@ -8426,7 +8474,7 @@ I contenitori in casa tua hanno finito lo spazio disponibile. Não ha mais espaços para guardar itens em sua casa. Brak wolnych miejsc na pojemniki w domu. - 你的房子没有空闲的储藏空间。 + 你的房子没有空闲的储藏空间。 You need to select an item first! @@ -8438,7 +8486,7 @@ Devi prima selezionare un oggetto! Você precisa selecionar um item primeiro! Zaznacz najpier rzecz. - 你需要选择一个物品! + 你需要选择一个物品! You can now run farther for 3 minutes @@ -8450,7 +8498,7 @@ Puoi ora correre per 3 minuti consecutivi Você agora pode correr por 3 minutos Możesz przez 3 minuty biec bez wysiłku - 你现在可以跑3分钟 + 你现在可以跑3分钟 You already have a Spike Strip active in deployment @@ -8462,7 +8510,7 @@ Hai già una striscia chiodata piazzata Você já tem um Tapete de Espinhos ativo Aktualnie masz rozłożoną kolczatkę - 你已经部署了一个钉刺带。 + 你已经部署了一个钉刺带。 You can't refuel the vehicle while in it! @@ -8474,7 +8522,7 @@ Non puoi rifornire il veicolo di benzina mentre ci sei dentro! Você não pode abastecer o veículo enquanto dentro dele! Nie możesz zatankować pojazdu gdy w nim jesteś! - 你不能在车里加油! + 你不能在车里加油! This item isn't usable. @@ -8486,7 +8534,7 @@ Questo oggetto è inutilizzabile. Esse item não é usável. Nie można użyć tej rzeczy. - 这个物品不能使用。 + 这个物品不能使用。 @@ -8500,7 +8548,7 @@ Raffinando il Petrolio Processando Petróleo Rafinacja ropy - 加工石油 + 加工石油 Cutting Diamonds @@ -8512,7 +8560,7 @@ Rifinendo diamanti Lapidando Diamante Szlif diamentów - 切割钻石 + 切割钻石 Processing Opium @@ -8524,7 +8572,7 @@ Processando Eroina Processando Heroína Oczyszczanie heroiny - 加工海洛因 + 加工海洛因 Casting Copper Ingots @@ -8536,7 +8584,7 @@ Processando in lingotti di Rame Processando Cobre Wytop miedzi - 铸造铜锭 + 铸造铜锭 Casting Iron Ingots @@ -8548,7 +8596,7 @@ Processando Ferro Processando Ferro Wytop żelaza - 铸造铁锭 + 铸造铁锭 Processing Sand @@ -8560,7 +8608,7 @@ Processando Sabbia Processando Areia Topienie piasku - 制作玻璃 + 制作玻璃 Processing Salt @@ -8572,7 +8620,7 @@ Processando Sale Refinando Sal Warzenie soli - 制造食盐 + 制造食盐 Processing Coca Leaves @@ -8584,7 +8632,7 @@ Processando Cocaina Processando Cocaína Oczyszczanie kokainy - 加工可卡因 + 加工可卡因 Processing Marijuana @@ -8596,7 +8644,7 @@ Processando Marijuana Processando Maconha Suszenie marihuany - 加工大麻 + 加工大麻 Mixing Cement @@ -8608,7 +8656,7 @@ Processando Cemento Misturando Cimento Mielenie cementu - 制造水泥 + 制造水泥 You need to stay within 10m to process. @@ -8620,7 +8668,7 @@ Devi stare entro 10m per processare. Você precisa ficar a menos de 10m para processar. Musisz być w odległości 10 m aby przetwarzanie się odbyło. - 您需要保持10米以内的距离。 + 您需要保持10米以内的距离。 You have no inventory space to process your materials. @@ -8632,7 +8680,7 @@ Você não tem espaço no inventário para processar seus materiais. У вас нет места инвентаря для обработки ваших материалов. Du hast keinen Platz im Inventar, um die Materialien zu verarbeiten. - 你没有库存空间来处理你的物品。 + 你没有库存空间来处理你的物品。 Only part of your materials could be processed due to reaching your maximum weight. @@ -8644,7 +8692,7 @@ Apenas uma parte de seus materiais puderam ser processados, devido o peso máximo ter sido atingido. Только часть ваших материалов может быть обработан из-за достижения вашего максимального веса. Nur ein Teil der Materialien konnte verarbeitet werden, sonst würde das maximale Gewicht erreicht werden. - 只有部分材料可以加工,已达到你的最大重量。 + 只有部分材料可以加工,已达到你的最大重量。 You need $%1 to process without a license! @@ -8656,7 +8704,7 @@ Hai bisogno di $%1 per processare senza la dovuta licenza! Você precisa de R$%1 para processar sem licença! Musisz mieć $%1 aby przetworzyć bez odpowiedniej licencji - 你没有加工许可所以需要 $%1 加工! + 你没有加工许可所以需要 $%1 加工! You have processed %1 into %2 @@ -8668,7 +8716,7 @@ Hai processato %1 in %2 Você trasformou %1 em %2 Przetworzyłeś %1 na %2 - 你将 %1 加工为 %2 + 你将 %1 加工为 %2 You have processed %1 into %2 for $%3 @@ -8680,7 +8728,7 @@ Hai processato %1 in %2 al costo di $%3 Você trasformou %1 em %2 por R$%3 Przetworzyłeś %1 na % za $%3 - 你将 %1 加工为 %2 花费 $%3 + 你将 %1 加工为 %2 花费 $%3 @@ -8694,7 +8742,7 @@ Medici Online: %1 Médicos Online: %1 Medycy Online: %1 - 在线的医疗人员:%1 + 在线的医疗人员:%1 Medics Nearby: %1 @@ -8706,7 +8754,7 @@ Medici Vicini: %1 Médicos por perto: %1 Medycy w pobliżu: %1 - 附近的医疗人员:%1 + 附近的医疗人员:%1 %1 is requesting EMS Revive. @@ -8718,7 +8766,7 @@ %1 sta richiedendo l'intervento medico. %1 requisitou o resgate do SAMU %1 prosi o pomoc medyczną. - %1 要求医疗救治。 + %1 要求医疗救治。 Respawn Available in: %1 @@ -8730,7 +8778,7 @@ Respawn disponibile in: %1 Respawn Disponível em: %1 Odrodzenie możliwe za: %1 - 重生在: %1 + 重生在: %1 You can now respawn @@ -8742,7 +8790,7 @@ Puoi ora fare respawn Você pode dar respawn Możesz się odrodzić - 现在你可以重生 + 现在你可以重生 %1 has revived you and a fee of $%2 was taken from your bank account for their services. @@ -8754,7 +8802,7 @@ %1 ti ha rianimato e sono stati prelevati $%2 dal tuo conto in banca per pagare la prestazione. %1 reviveu você e uma taxa de R$%2 foi cobrada da sua conta bancária para os serviços prestados. %1 pobrał opłatę w wysokości $%2 za reanimację i przywrócenie funkcji życiowych. - %1 已经将你救治,从你的银行账户收取 $%2 的服务费。 + %1 已经将你救治,从你的银行账户收取 $%2 的服务费。 Someone else is already reviving this person @@ -8766,7 +8814,7 @@ Qualcun'altro sta già provando a rianimare questa persona Outro médico já está revivendo esse jogador Ktoś inny aktualnie reanimuje tę osobę - 其他人已经在救治这个人了 + 其他人已经在救治这个人了 Reviving %1 @@ -8778,7 +8826,7 @@ Rianimando %1 Revivendo %1 Reanimacja %1 - 救治 %1 + 救治 %1 This person either respawned or was already revived. @@ -8790,7 +8838,7 @@ Questa persona è stata già rianimata o ha fatto respawn. Esse jogador já deu respawn ou já foi reanimado. Ta osoba wcześniej się odrodziła lub została reanimowana. - 这个人重生或已经复活了。 + 这个人重生或已经复活了。 You have revived %1 and received $%2 for your services. @@ -8802,7 +8850,7 @@ Hai rianimato %1 e hai ricevuto $%2 per la tua prestazione. Você reviveu %1 e recebeu R$%2 pelo seus serviços prestados. Reanimowałeś %1 i za uratowanie życia otrzymałeś $%2. - 你已经救治了 %1 并得到 $%2 的服务费用。 + 你已经救治了 %1 并得到 $%2 的服务费用。 You got to far away from the body. @@ -8814,7 +8862,7 @@ Sei andato troppo distante dal corpo. Você está muito distante do corpo. Jesteś za daleko od ciała. - 你离尸体太远。 + 你离尸体太远。 @@ -8828,7 +8876,7 @@ La rapina è fallita per cause sconosciute O roubo falhou por uma causa desconhecida. Napad się nie udał z niewiadomych powodów. - 由于不明原因,抢劫失败了。 + 由于不明原因,抢劫失败了。 $%1 was stolen from the robbery on the federal reserve @@ -8840,7 +8888,7 @@ $%1 sono stati rubati durante la rapina alla banca R$%1 foi roubado da Reserva Federal. $%1 ukradziono z Rezerwy Federalnej - $%1 从联邦储备银行中被抢劫 + $%1 从联邦储备银行中被抢劫 This vault is already being robbed by someone else @@ -8852,7 +8900,7 @@ Questo Caveau sta venendo rapinando da qualcun'altro Esse cofre já está sendo roubado por outro jogador. Skarbiec jest aktualnie rabowany przez inną osobę. - 这个金库已经被别人抢劫了 + 这个金库已经被别人抢劫了 This vault was already robbed recently @@ -8864,7 +8912,7 @@ Questo Caveau è stato svaligiato di recente Esse cofre já foi assaltado recentemente. Skarbiec został niedawno zrabowany - 这个金库最近被抢了 + 这个金库最近被抢了 @@ -8878,7 +8926,7 @@ Garage Garagem Garaż - 载具仓库 + 载具仓库 Your Vehicles @@ -8890,7 +8938,7 @@ I tuoi Veicoli Seus Veículos Twój pojazd - 你的载具 + 你的载具 Vehicle Information @@ -8902,7 +8950,7 @@ Informazioni Veicolo Informações do Veículo Informacja o pojeździe - 载具信息 + 载具信息 Automatically reveals nearest objects within 15m, turn this setting off if you are experiencing performance issues. @@ -8914,7 +8962,7 @@ Rivela automaticamente gli oggettivi vicini entro 15m, disattiva quest'impostazione se riscontri dei problemi di perfomance di sistema. Revela objetos à 15m, desabilite essa opção se está tendo problemas de performance. Automatycznie wykrywa najbliższe obiekty w promieniu 15m, wyłącz tę opcję jeśli masz problemy z wydajnością - 自动显示1500米以内的最近对象,如果你遇到性能问题,请将此设置关闭。 + 自动显示1500米以内的最近对象,如果你遇到性能问题,请将此设置关闭。 Switch side-channel mode, turn this off if you don't want to talk with players from your side. @@ -8926,7 +8974,7 @@ Habilita/Desabilita o side-channel, desabilite caso você não queira conversar com os jogadores da sua facção. Sidechat umschalten. Ausschalten, wenn du nicht mit Spielern deiner Fraktion sprechen möchtest. - 切换侧通道模式,如果你不想和你身边的玩家交谈,关掉这个频道。 + 切换侧通道模式,如果你不想和你身边的玩家交谈,关掉这个频道。 Switch player's broadcast mode, turn this off if you don't want to see any broadcast from other players. @@ -8938,7 +8986,7 @@ Habilita/Desabilita as transmissões dos jogadores, desabilite caso você não queira ver as transmissões dos outros jogadores. Broadcast umschalten. Ausschalten, wenn du keine Broadcasts von anderen Spielern erhalten möchtest. - 切换玩家的广播模式,如果你不想看到其他玩家的广播,就关掉它。 + 切换玩家的广播模式,如果你不想看到其他玩家的广播,就关掉它。 Controls whether or not players will have name tags above their head. @@ -8950,7 +8998,7 @@ Controlla la visualizzazione delle tags sopra la testa dei giocatori Controla se os jogadores terão os nomes em suas cabeças. Kontroluje czy gracze będą mieli nad głowami swoje Tagi z nazwą - 控制球员是否有名字标签在他们的头上方。 + 控制球员是否有名字标签在他们的头上方。 Shop Stock @@ -8962,7 +9010,7 @@ Stock Negozio Estoque Sklep oferta - 商店库存 + 商店库存 @@ -8976,7 +9024,7 @@ Menu d'interazione Giocatore Menu de Interação do Jogador Menu Interakcji - 玩家互动菜单 + 玩家互动菜单 Put in vehicle @@ -8988,7 +9036,7 @@ Metti nel Veicolo Colocar no Veículo Włóż do pojazdu - 押上载具 + 押上载具 Un-Restrain @@ -9000,7 +9048,7 @@ Togli Manette Soltar Rozkuj - 解开手铐 + 解开手铐 Check Licenses @@ -9012,7 +9060,7 @@ Controlla Licenze Verificar Licenças Sprawdź licencje - 检查许可证 + 检查许可证 Search Player @@ -9024,7 +9072,7 @@ Ricerca Giocatore Revistar Jogador Przeszukaj - 搜身 + 搜身 Stop Escorting @@ -9036,7 +9084,7 @@ Ferma Scorta Parar de Escoltar Przestań eskortować - 停止押送 + 停止押送 Escort Player @@ -9048,7 +9096,7 @@ Scorta Giocatore Escoltar Jogador Eskortuj - 押送 + 押送 Ticket Player @@ -9060,7 +9108,7 @@ Multa Giocatore Multar Jogador Wystaw mandat - 开据罚单 + 开据罚单 Seize Weapons @@ -9072,7 +9120,7 @@ cogliere Armi Apreender Armas Chwytaj broń - 没收武器 + 没收武器 Send to jail @@ -9084,7 +9132,7 @@ Arresta Enviar p/ Prisão Do więzienia - 送进监狱 + 送进监狱 Repair Door @@ -9096,7 +9144,7 @@ Ripara porta Consertar Porta Napraw drzwi - 检修门 + 检修门 Open / Close @@ -9108,7 +9156,7 @@ Apri / Chiudi Abrir / Fechar Otwórz / Zamknij - 打开/关闭 + 打开/关闭 Break down door @@ -9120,7 +9168,7 @@ Sfonda Porta Quebrar Porta Wyważ drzwi - 打破门 + 打破门 Garage @@ -9132,7 +9180,7 @@ - 车库 + 车库 You can buy a garage at this house for $%1. You must first purchase the house! @@ -9144,7 +9192,7 @@ - 你可以在这所房子里买一个 $%1 的仓库。你必须先买房子! + 你可以在这所房子里买一个 $%1 的仓库。你必须先买房子! Search house @@ -9156,7 +9204,7 @@ Cerca Casa Vasculhar a Casa Przeszukaj dom - 搜索房子 + 搜索房子 Lock up house @@ -9168,7 +9216,7 @@ Chiudi Casa Trancar a Casa Zamknij dom - 锁上房子 + 锁上房子 Buy House @@ -9180,7 +9228,7 @@ Compra Casa Comprar a Casa Kup dom - 买房子 + 买房子 Buy House Garage @@ -9192,7 +9240,7 @@ - 买房子的仓库 + 买房子的仓库 Sell Garage @@ -9204,7 +9252,7 @@ Vendi Garage Vender Garagem Sprzedaj garaż - 出售仓库 + 出售仓库 Remove Container @@ -9216,7 +9264,7 @@ Supprimer le conteneur Remover Caixa Container entfernen - 删除存储箱 + 删除存储箱 Garage @@ -9228,7 +9276,7 @@ Garage Garagem Garaż - 仓库 + 仓库 Store Vehicle @@ -9240,7 +9288,7 @@ Parcheggia Veicolo Guardar Veículo Zaparkuj pojazd - 载具商店 + 载具商店 Sell House @@ -9252,7 +9300,7 @@ Vendi Casa Vender Casa Sprzedaj dom - 卖房子 + 卖房子 Unlock Storage @@ -9264,7 +9312,7 @@ Sblocca contenitori Destrancar Caixa Odblokuj pojemnik - 解锁存储 + 解锁存储 Lock Storage @@ -9276,7 +9324,7 @@ Blocca contenitori Trancar Caixa Zablokuj pojemnik - 锁定存储 + 锁定存储 Turn Lights Off @@ -9288,7 +9336,7 @@ Spegni luci Ligar as Luzes Włącz światło - 把灯关掉 + 把灯关掉 Turn Lights On @@ -9300,7 +9348,7 @@ Accendi luci Apagar as Luzes Wyłącz światło - 把灯打开 + 把灯打开 @@ -9314,7 +9362,7 @@ Menu d'interazione Veicolo Menu do Veículo Menu Interakcji pojazdu - 载具交互菜单 + 载具交互菜单 Unflip Vehicle @@ -9326,7 +9374,7 @@ Raddrizza veicolo Desvirar Veículo Ustaw pojazd - 翻转载具 + 翻转载具 Get In Vehicle @@ -9338,7 +9386,7 @@ - 进入载具 + 进入载具 Push Boat @@ -9350,7 +9398,7 @@ Spingi Barca Empurrar Barco Popchnij - 推船 + 推船 Repair Vehicle @@ -9362,7 +9410,7 @@ Ripara Veicolo Consertar Veículo Napraw - 修理载具 + 修理载具 Registration @@ -9374,7 +9422,7 @@ Registrazione Registro Zarejestruj - 登记信息 + 登记信息 Search Vehicle @@ -9386,7 +9434,7 @@ Cerca Veicolo Vasculhar Veículo Przeszukaj pojazd - 搜查载具 + 搜查载具 Search Container @@ -9398,7 +9446,7 @@ Fouiller le conteneur Vasculhar Container Container durchsuchen - 搜索容器 + 搜索容器 Pullout Players @@ -9410,7 +9458,7 @@ Estrai Giocatore Retirar Jogadores Wyciągnij graczy - 从载具拉出玩家 + 从载具拉出玩家 Impound Vehicle @@ -9422,7 +9470,7 @@ Sequestra Veicolo Apreender Veículo Usunń pojazd - 扣押载具 + 扣押载具 Mine from device @@ -9434,7 +9482,7 @@ Piazza mine dal veicolo Minerar Uruchom wydobycie - 矿山设备 + 矿山设备 Store your vehicle @@ -9446,7 +9494,7 @@ Ranger votre véhicule Guardar seu veículo Fahrzeug einparken - 存储你的载具 + 存储你的载具 Store @@ -9458,7 +9506,7 @@ Ranger Guardar Fahrzeughändler - 商场 + 商场 Clean @@ -9470,7 +9518,7 @@ Nettoyer Limpar Reinigen - 清洁 + 清洁 This vehicle is NPC protected. @@ -9482,7 +9530,7 @@ Esse veículo está protegido. Dieses Fahrzeug ist NPC-geschützt. - 这载具是NPC保护的。 + 这载具是NPC保护的。 @@ -9496,7 +9544,7 @@ Invio richiesta al server per le informazioni del giocatore UID [%1] Obtendo informações do UID [%1] no servidor Wysyłam żądanie do serwera po informację o fraczu UID [%1] - 发送请求到服务器玩家信息UID [%1] + 发送请求到服务器玩家信息UID [%1] The server didn't find any player information matching your UID, attempting to add player to system. @@ -9508,7 +9556,7 @@ Il server non ha trovato alcuna informazione sul giocatore con il tuo UID, tentativo di aggiunta del giocatore al sistema. O servidor não encontrou nenhuma informação correspondente ao seu UID, tentando adicionar jogador ao sistema. Serwer nie odnalazł informacji zgodnych z UID, dodaję gracza do bazy danych. - 服务器没有找到任何玩家信息匹配你的UID,试图添加播放器系统。 + 服务器没有找到任何玩家信息匹配你的UID,试图添加播放器系统。 There was an error in trying to setup your client. @@ -9520,7 +9568,7 @@ C'è stato qualche errore nel cercare di inizializzare il tuo client Ocorreu um erro ao tentar configurar o seu cliente. Wystąpił błąd w trakcie ustawiania klienta - 试图设置客户机时出错。 + 试图设置客户机时出错。 Received request from server... Validating... @@ -9532,7 +9580,7 @@ Ricevuta richiesta dal server... Convalida... Pedido recebido do servidor... Validando... Otrzymano żądanie serwera ... sprawdzam - 接收来自服务器的请求...验证... + 接收来自服务器的请求...验证... You have already used the sync option, you can only use this feature once every 5 minutes. @@ -9544,7 +9592,7 @@ Hai già utilizzato la funzione di salva dati, puoi usare quest'opzione solo una volta ogni 5 minuti. Você já usou a opção de sincronização, você só pode usar esse recurso uma vez a cada 5 minutos. Użyłeś niedawno opcji synchronizacji, możesz jej używać maksymalnie co 5 minut. - 你已经使用了同步数据,你只能每隔5分钟使用一次这个功能。 + 你已经使用了同步数据,你只能每隔5分钟使用一次这个功能。 Syncing player information to the server.\n\nPlease wait up to 20 seconds before leaving. @@ -9556,7 +9604,7 @@ Salvando le informazioni giocatore sul server.\n\nAttendere fino a 20 secondi prima di abbandonare. Sincronizando informação do jogador com o servidor.\n\n Por favor aguarde 20 segundos antes de sair. Synchronizuję informację z serwere, .\n\nProszę poczekać ok 20 sekund przed opuszczeniem serwera - 同步玩家数据到服务器。\n\n请等待20秒后再下线。 + 同步玩家数据到服务器。\n\n请等待20秒后再下线。 @@ -9570,7 +9618,7 @@ Avendo appena rapinato la banca non puoi utilizzare il Bancomat per %1 minuti. Você não pode usar o ATM por %1 minuto(s), pois você assaltou o banco. Z uwagi na to że okradłeś bank nie możesz korzystać z bankomatu przez najbliższe %1 minut. - 因为你抢了银行,你不能在 %1 分钟内使用自动取款机。 + 因为你抢了银行,你不能在 %1 分钟内使用自动取款机。 You didn't choose the clothes you wanted to buy. @@ -9582,7 +9630,7 @@ Non hai selezionato i vestiti che vuoi comprare. Você não selecionou a roupa que deseja comprar. Nie wybrałeś ubrań które chcesz kupić. - 你没有选择你想买的衣服。 + 你没有选择你想买的衣服。 Sorry sir, you don't have enough money to buy those clothes. @@ -9594,7 +9642,7 @@ Spiacente ma non hai fondi a sufficienza per comprare questi vestiti. Desculpe senhor, você não tem dinheiro para pagar. Volte sempre. Przepraszam, ale nie masz tyle pieniędzy aby kupić to ubranie. - 对不起,你没有足够的钱去买那些衣服。 + 对不起,你没有足够的钱去买那些衣服。 Total: @@ -9606,7 +9654,7 @@ Totale: Total: Razem: - 总额: + 总额: No Selection @@ -9618,7 +9666,7 @@ Nessuna Selezione Nada Selecionado Nie wybrano - 没有选择 + 没有选择 No Display @@ -9630,7 +9678,7 @@ No Display Sem exibir Brak widoku - 没有显示 + 没有显示 There are no vehicles near to sell. @@ -9642,7 +9690,7 @@ Nelle vicinanze non ci sono veicoli da vendere. Não existem veículos para serem vendidos. W pobliżu nie ma pojazdu do sprzedania. - 附近没有载具出售。 + 附近没有载具出售。 There was a problem opening the chop shop menu. @@ -9654,7 +9702,7 @@ C'è stato un problema aprendo il menu del ricettatore Ocorreu um problema abrindo o menu, tente novamente. Powstał problem przy otwieraniu menu dziupli - 打开黑车店菜单有问题。 + 打开黑车店菜单有问题。 Selling vehicle please wait... @@ -9666,7 +9714,7 @@ Vendendo il veicolo, attendere prego... Vendendo o veiculo, aguarde.... Sprzedaję pojazd proszę czekać ... - 出售载具请稍候... + 出售载具请稍候... You need to be a civilian to use this store! @@ -9678,7 +9726,7 @@ Devi essere un civile per utilizzare questo negozio! Você tem que ser um cívil para user essa loja! Musisz być cywilem aby móc kupować w tym sklepie! - 你需要成为平民才能使用这家商店! + 你需要成为平民才能使用这家商店! You need to be a cop to use this store! @@ -9690,7 +9738,7 @@ Devi essere un poliziotto per utilizzare questo negozio! Você tem que ser um policial para usar essa loja! Musisz być policjantem aby kupować w tym sklepie! - 你需要当警察来使用这家商店! + 你需要当警察来使用这家商店! You don't have rebel training yet! @@ -9702,7 +9750,7 @@ Devi essere ribelle per poter utilizzare questo negozio! Você não tem Treinamento Rebelde! Nie posiadasz treningu rebelianta! - 你还没有进行叛军训练! + 你还没有进行叛军训练! You need a Diving license to use this shop! @@ -9714,7 +9762,7 @@ Ti serve la licenza di pesca per usare questo negozio! Você precisa de uma Licença de Mergulho para usar essa loja! Nie posiadasz licencji nurka aby kupować w tym sklepie! - 你需要一张潜水执照才能使用这家商店! + 你需要一张潜水执照才能使用这家商店! You need a %1 to buy from this shop! @@ -9726,7 +9774,7 @@ Hai bisogno di %1 per comprare da questo negozio! Você precisa de %1 para comprar nessa loja! Potrzebujesz %1 by kupować w tym sklepie! - 你需要从这家商店买 %1! + 你需要从这家商店买 %1! Clothing @@ -9738,7 +9786,7 @@ Abiti Roupas Odzież - 服装 + 服装 Hats @@ -9750,7 +9798,7 @@ Copricapi Chapéus Czapki - 帽子 + 帽子 Glasses @@ -9762,7 +9810,7 @@ Occhiali Óculos Okulary - 眼镜 + 眼镜 Vests @@ -9774,7 +9822,7 @@ Vesti Coletes Kamizelki - 背心 + 背心 Backpack @@ -9786,7 +9834,7 @@ Zaini Mochilas Plecaki - 背包 + 背包 There is currently a car there. @@ -9798,7 +9846,7 @@ C'è già un veicolo qui. Há um veiculo atualmente no respawn. Aktualnie jest tam samochód. - 目前有一载具在那里。 + 目前有一载具在那里。 You do not have enough money on you or in your bank to get your car back. @@ -9810,7 +9858,7 @@ Non hai abbastanza fondi con te o nel tuo conto in banca per poter ritirare il tuo veicolo. Você não tem dinheiro suficiente em sua conta bancária para obter seu veiculo. Nie masz tyle pieniędzy na koncie aby wyciągnąć samochód. - 你没有足够的钱在银行或你的身上。 + 你没有足够的钱在银行或你的身上。 You have unimpounded your %1 for $%3 @@ -9822,7 +9870,7 @@ Hai ritirato dal sequestro il tuo %1 al costo di $%3 Você liberou %1 for R$%3 Przywróciłeś swój %1 za $%3 - 你为 %1 花费 $%3 + 你为 %1 花费 $%3 You did not pick a vehicle! @@ -9834,7 +9882,7 @@ Non hai selezionato un veicolo! Você não conseguiu roubar o veiculo! Nie wybrałeś pojazdu! - 你没有选择一载具! + 你没有选择一载具! You do not have enough cash to purchase this vehicle.\n\nAmount Lacking: $%1 @@ -9846,7 +9894,7 @@ Non hai fondi sufficienti per comprare questo veicolo.\n\nTi mancano: $%1 Você não tem dinheiro suficiente para comprar esse veiculo.\n\nFaltam: R$%1 Nie masz tyle pieniędzy by kupić ten pojazd.\n\nBrakuje: $%1 - 你没有足够的现金购买这载具。\n\n缺少资金: $%1 + 你没有足够的现金购买这载具。\n\n缺少资金: $%1 You do not have the required license and/or level! @@ -9858,7 +9906,7 @@ Non hai la licenza richiesta per l'acquisto! Você não tem a licença necessária! Nie posiadasz odpowiedniej licencji! - 你没有所需的许可证和/或级别! + 你没有所需的许可证和/或级别! There is a vehicle currently blocking the spawn point @@ -9870,7 +9918,7 @@ C'è già un veicolo che blocca la zona di spawn Existe um veiculo bloquenado a area de respaw Inny pojazd blokuje miejsce odrodzenia pojazdów - 目前有一载具挡住了生成点。 + 目前有一载具挡住了生成点。 You bought a %1 for $%2 @@ -9882,7 +9930,7 @@ Hai comprato un %1 al costo di $%2 Você comprou %1 por R$%2 Kupiłeś %1 za $%2 - 你买了一个 %1 花费 $%2 + 你买了一个 %1 花费 $%2 You rented a %1 for $%2 @@ -9894,7 +9942,7 @@ Hai noleggiato un %1 per $%2 Você alugou um %1 por $%2 Wypożyczyłeś %1 za $%2 - 您以 $%2 的价格租了一个 %1 + 您以 $%2 的价格租了一个 %1 Rental Price: @@ -9906,7 +9954,7 @@ Costo Noleggio: Alugar: Wypożyczenie: - 租赁价格: + 租赁价格: Ownership Price: @@ -9918,7 +9966,7 @@ Costo Acquisto: Comprar: Kupno: - 所有权价格: + 所有权价格: Max Speed: @@ -9930,7 +9978,7 @@ Velocità Max: Velocidade Máxima: Prędkość: - 最大速度: + 最大速度: Horse Power: @@ -9942,7 +9990,7 @@ Cavalli: Cavalos de Força: Moc: - 马力: + 马力: Passenger Seats: @@ -9954,7 +10002,7 @@ Sedili passeggeri: Assentos: Ilość miejsc: - 乘客座位: + 乘客座位: Trunk Capacity: @@ -9966,7 +10014,7 @@ Capacità Inventario: Capacidade do Inventário: Pojemność bagażnika: - 后备箱容积: + 后备箱容积: Fuel Capacity: @@ -9978,7 +10026,7 @@ Capacità Serbatoio: Capacidade do Reservatório: Pojemność baku: - 燃料容量: + 燃料容量: Armor Rating: @@ -9990,7 +10038,7 @@ Resistenza: Resistência: Pancerz - 护甲值: + 护甲值: Retrieval Price: @@ -10002,7 +10050,7 @@ Costo di ritiro: Preço para Recuperar: Koszt wyciągnięcia: - 检索价格: + 检索价格: Sell Price: @@ -10014,7 +10062,7 @@ Costo di vendita: Preço de Venda Cena sprzedaży: - 出售价格: + 出售价格: Color: @@ -10026,7 +10074,7 @@ Colore: Cor: Kolor - 颜色: + 颜色: You are not allowed to use this shop! @@ -10038,7 +10086,7 @@ Non sei autorizzato ad usare questo negozio! Você não está autorizado a utilizar essa loja! Nie jesteś uprawniony do używania tego sklepu! - 不许你使用这家商店! + 不许你使用这家商店! You need to select an item to buy. @@ -10050,7 +10098,7 @@ Seleziona un oggetto per poterlo comprare. Você precisa selecionar um item para comprar. Musisz zaznaczyć co chcesz kupić. - 你需要选择要购买的物品。 + 你需要选择要购买的物品。 You didn't enter an actual number @@ -10062,7 +10110,7 @@ Non hai inserito correttamente un numero Você não digitou um número válido. Nie podałeś aktualnego numeru - 你没有输入一个正确的数字 + 你没有输入一个正确的数字 You don't have that many items to sell! @@ -10074,7 +10122,7 @@ Non hai tutti quegli oggetti da vendere! Você não tem todos esse items para vender Nie masz tak dużo rzeczy do sprzedania! - 你没有那么多物品可以出售! + 你没有那么多物品可以出售! The gang has enough funds to pay for this, would you like to pay with the gangs funds or your own? @@ -10086,7 +10134,7 @@ La Gang ha fondi a sufficienza per pagare questo oggetto, vuoi usare i fondi della Gang o i tuoi personali? A Gangue tem dinheiro suficiente para pagar por isso, você gostaria de usar o dinheiro da Gangue? Gang posiada wystarczającą ilość środków aby za to zapłacić, chcesz zapłacić za to środkami gangu, czy własnymi? - 帮派有足够的钱来支付这笔钱,你愿意用帮派的钱还是自己的钱? + 帮派有足够的钱来支付这笔钱,你愿意用帮派的钱还是自己的钱? Gang Funds: @@ -10098,7 +10146,7 @@ Fondi Gang: Fundos da Gangue: Środki gangu: - 帮派资金: + 帮派资金: Your Cash: @@ -10110,7 +10158,7 @@ Tuoi Fondi: Seu Dinheiro: Twoje środki: - 你的现金: + 你的现金: Pay with cash or gang funds @@ -10122,7 +10170,7 @@ Paga con i tuoi contanti o con i fondi della Gang Pagar com a sua conta ou a da Gangue Zapłać gotówką albo środkami gangu - 用现金或帮派基金支付 + 用现金或帮派基金支付 Gang Funds @@ -10134,7 +10182,7 @@ Fondi Gang Gangue Środki gangu - 帮派资金 + 帮派资金 Your Cash @@ -10146,7 +10194,7 @@ Tuoi Fondi Seu Twoje środki - 你的现金 + 你的现金 You bought %1 %2 for $%3 with the gangs funds @@ -10158,7 +10206,7 @@ Hai comprato %1 %2 al costo di $%3 con i fondi della Gang Você comprou %1 %2 por R$%3 com o dinheiro da gangue Kupiłeś %1 %2 za $%3 ze środków gangu - 你购买 %1 %2 花费 $%3 帮派基金 + 你购买 %1 %2 花费 $%3 帮派基金 You bought %1 %2 for $%3 @@ -10170,7 +10218,7 @@ Hai comprato %1 %2 al costo di $%3 Voce comprou %1 %2 por R$%3 Kupiłeś %1 %2 za $%3 - 你购买 %1 %2 花费 $%3 + 你购买 %1 %2 花费 $%3 You sold %1 %2 for $%3 @@ -10182,7 +10230,7 @@ Hai venduto %1 %2 al prezzo di $%3 Você vendeu %1 %2 por R$%3 Sprzedałeś %1 %2 za $%3 - 你出售 %1 %2 得到 $%3 + 你出售 %1 %2 得到 $%3 You need to select an item to buy/sell. @@ -10194,7 +10242,7 @@ Devi selezionare un oggetto per comprare/vendere. Selecione um item para comprar ou vender. Musisz wybrać rzecz którą chcesz kupić/sprzedać - 你需要选择一个物品来购买/出售。 + 你需要选择一个物品来购买/出售。 You sold a %1 for <t color='#8cff9b'>$%2</t> @@ -10206,7 +10254,7 @@ Hai venduto un %1 al prezzo di <t color='#8cff9b'>$%2</t> Você vendeu %1 por <t color='#8cff9b'>R$%2</t> Sprzedałeś %1 za <t color='#8cff9b'>$%2</t> - 你出售 %1 得到 <t color='#8cff9b'>$%2</t> + 你出售 %1 得到 <t color='#8cff9b'>$%2</t> You bought a %1 for <t color='#8cff9b'>$%2</t> with the gangs funds. @@ -10218,7 +10266,7 @@ Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> con i fondi della Gang. Você comprou %1 por <t color='#8cff9b'>R$%2</t> com o dinheiro da gangue. Kupiłeś %1 za <t color='#8cff9b'>$%2</t> ze środków gangu. - 你购买 %1 花费 <t color='#8cff9b'>$%2</t> 黑帮基金。 + 你购买 %1 花费 <t color='#8cff9b'>$%2</t> 黑帮基金。 You bought a %1 for <t color='#8cff9b'>$%2</t> @@ -10230,7 +10278,7 @@ Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> Você comprou %1 por <t color='#8cff9b'>R$%2</t> Kupiłeś %1 za <t color='#8cff9b'>$%2</t> - 你购买 %1 花费 <t color='#8cff9b'>$%2</t> + 你购买 %1 花费 <t color='#8cff9b'>$%2</t> Shop Inventory @@ -10242,7 +10290,7 @@ Inventario Negozio Loja de Inventário Wyposażenie sklepu - 店铺库存 + 店铺库存 Your Inventory @@ -10254,7 +10302,7 @@ Inventario Personale Seu Inventário Twoje wyposażenie - 你的库存 + 你的库存 @@ -10268,7 +10316,7 @@ Riceverai il tuo prossimo stipendio in %1 minuti. Você irá receber seu próximo pagamento em %1 minuto(s). Otrzymasz kolejną wypłatę w ciągu %1 minut. - 你将在 %1 分钟后收到你的下一张薪水支票。 + 你将在 %1 分钟后收到你的下一张薪水支票。 You have missed a paycheck because you were dead. @@ -10280,7 +10328,7 @@ Hai perso uno stipendio . Você não recebeu seu pagamento pois estava morto. Ominęła cię wypłata ponieważ byłeś martwy. - 因为你死了,你错过了薪水。 + 因为你死了,你错过了薪水。 You have received a paycheck of $%1. @@ -10292,7 +10340,7 @@ Hai ricevuto uno stipendio di $%1. Você recebeu seu pagamento de R$%1. Otrzymałeś wypłatę w kwocie $%1. - 你收到了一张 $%1 的薪水支票。 + 你收到了一张 $%1 的薪水支票。 @@ -10306,7 +10354,7 @@ Reabastecer de combustível vasilha Заправить баллон с горючим Benzinkanister befüllen - 给汽油桶加油 + 给汽油桶加油 Refuel Vehicle @@ -10318,7 +10366,7 @@ Reabastecer Veículo Ravitailler en essence le véhicule Fahrzeug auftanken - 给车加油 + 给车加油 Price per Liter: $%1 @@ -10330,7 +10378,7 @@ Preço por Litro : R$%1 Prix au Litre : $%1 Preis pro Liter: $%1 - 每升价格:$%1 + 每升价格:$%1 Current Fuel Amount: @@ -10342,7 +10390,7 @@ Quantidade Atual de Combustível: Aktuelle Kraftstoffmenge: - 当前燃料量: + 当前燃料量: Select a vehicle @@ -10354,7 +10402,7 @@ Selecione um veículo Sélectionner un vehicule Wähle ein Fahrzeug: - 选择载具 + 选择载具 The vehicle is too far or you are in! @@ -10366,7 +10414,7 @@ O veículo está muito longe ou você está nele! Le véhicule est peut-etre trop loin, ou tu es dedans ! Das Fahrzeug ist zu weit entfernt oder du sitzt noch drin! - 载具太远了,或者你在载具里! + 载具太远了,或者你在载具里! The vehicle is full! @@ -10378,7 +10426,7 @@ O veículo está cheio! Le véhicule est plein ! Das Fahrzeug ist voll! - 载具已满! + 载具已满! @@ -10392,7 +10440,7 @@ Drop Fishing Net Jogar Rede de Pesca Zarzuć sieć - 放下渔网 + 放下渔网 Rob Person @@ -10404,7 +10452,7 @@ Deruba Roubar Jogador Obrabuj osobę - 抢劫此人 + 抢劫此人 @@ -10418,7 +10466,7 @@ Peixaria Sklep rybny Pescivendolo - 海产品市场 + 海产品市场 Hospital @@ -10430,7 +10478,7 @@ Hospital Szpital Ospedale - 医院 + 医院 Police Station @@ -10442,7 +10490,7 @@ Estação Policial Posterunek policji Questura - 警察分局 + 警察分局 Police Air HQ @@ -10454,7 +10502,7 @@ Polizei HQ Flughafen QG Aéreo Policial Baza lotnicza policji - 警察航空总部 + 警察航空总部 Iron Mine @@ -10466,7 +10514,7 @@ Mina de Ferro Kopalnia miedzi Miniera di ferro - 铁矿 + 铁矿 Salt Mine @@ -10478,7 +10526,7 @@ Mina de Sal Kopalnia soli Salina - 盐矿 + 盐矿 Salt Processing @@ -10490,7 +10538,7 @@ Processador de Sal Warzelnia soli Processo del sale - 食盐制造厂 + 食盐制造厂 Altis Corrections @@ -10502,7 +10550,7 @@ Prisão de Altis Więzienie Altis Penitenziario di Altis - 监狱 + 监狱 Tanoa Corrections @@ -10514,7 +10562,7 @@ Prisão de Tanoa Więzienie Tanoa Penitenziario di Tanoa - Tanoa更正 + Tanoa更正 Police HQ @@ -10526,7 +10574,7 @@ Polizei HQ QG Policial KG Policji Altis - 警察总部 + 警察总部 Coast Guard @@ -10538,7 +10586,7 @@ Guarda Costeira Straż przybrzeżna Guardia Costiera - 海岸警卫队 + 海岸警卫队 Rebel Outpost @@ -10550,7 +10598,7 @@ Rebellen Außenposten Base Rebelde Baza rebeliantów - 叛军前哨 + 叛军前哨 Air Shop @@ -10562,7 +10610,7 @@ Luftfahrzeug Händler Loja Aérea Sklep lotniczy - 空中载具商店 + 空中载具商店 Truck Shop @@ -10574,7 +10622,7 @@ Loja de Caminhões Salon ciężarówek Concessionaria Camion - 卡车商店 + 卡车商店 Oil Processing @@ -10586,7 +10634,7 @@ Processador de Petróleo Rafineria ropy naftowej Raffineria di Petrolio - 石油加工 + 石油加工 Iron Processing @@ -10598,7 +10646,7 @@ Eisenschmelze Processador de Ferro Huta żelaza - 铁矿加工 + 铁矿加工 Sand Mine @@ -10610,7 +10658,7 @@ Sand Mine Mina de Areia Kopalnia piasku - 采沙场 + 采沙场 Chop Shop @@ -10622,7 +10670,7 @@ Schrotthändler Desmanche Dziupla - 黑车店 + 黑车店 Cocaine Processing @@ -10634,7 +10682,7 @@ Kokain Verarbeiter Processador de Cocaína Oczyszczanie kokainy - 可卡因加工点 + 可卡因加工点 Copper Mine @@ -10646,7 +10694,7 @@ Kupfermine Mina de Cobre Kopalnia miedzi - 铜矿 + 铜矿 ATM @@ -10658,7 +10706,7 @@ Geldautomat Caixa Eletrônico Bankomat - 自动取款机 + 自动取款机 Local Bank @@ -10670,7 +10718,7 @@ Zentralbank Banco Local Bank Altis - 银行 + 银行 Car Shop @@ -10682,7 +10730,7 @@ Autohändler Loja de Carros Salon samochodowy - 小汽车店 + 小汽车店 Hospital/Clinic @@ -10694,7 +10742,7 @@ Krankenhaus Hospital/Clínica Klinika Altis - 医院/诊所 + 医院/诊所 Diamond Mine @@ -10706,7 +10754,7 @@ Diamanten Mine Mina de Diamante Kopalnia diamentów - 钻石矿场 + 钻石矿场 General Store @@ -10718,7 +10766,7 @@ Supermarkt Loja de Equipamentos Sklep techniczny - 物品商店 + 物品商店 Civilian Shops @@ -10730,7 +10778,7 @@ Geschäft für Zivilisten Lojas Civis Sklepy dla cywilów - 平民商店 + 平民商店 Boat Shop @@ -10742,7 +10790,7 @@ Boots Händler Loja de Barcos Sklep z łodziami - 船舶商店 + 船舶商店 Bruce's Outback Outfits @@ -10754,7 +10802,7 @@ Loja de Roupas Sklep odzieżowy Bruce's Outback Outfits - 服装店 + 服装店 Apple Field @@ -10766,7 +10814,7 @@ Apfel Plantage Campo de Maçãs Sad jabłkowy - 苹果树林 + 苹果树林 Peaches Field @@ -10778,7 +10826,7 @@ Pfirsich Plantage Campo de Pêras Sad brzoskwiniowy - 桃树林 + 桃树林 Market @@ -10790,7 +10838,7 @@ Markt Mercado Market spożywczy - 市场 + 市场 Air Service Station @@ -10802,7 +10850,7 @@ Werkstatt für Luftfahrzeuge Estação de Serviços Aéreos Serwis lotniczy - 航空服务站 + 航空服务站 Channel 7 News @@ -10814,7 +10862,7 @@ Kanal 7 Nachrichtensender Canal de Notícias 7 Maszt nadawczy - 新闻广播电台 + 新闻广播电台 DMV @@ -10826,7 +10874,7 @@ Loja de Licenças Urząd licencyjny Licenze - 许可证办理 + 许可证办理 Delivery Missions @@ -10838,7 +10886,7 @@ Missões de Entrega Misje kurierskie Missioni Postali - 快递任务 + 快递任务 Deliver Package @@ -10850,7 +10898,7 @@ Entregar Pacote Dostarcz przesyłkę Consegna il pacco - 完成快递任务 + 完成快递任务 Get Delivery Mission @@ -10862,7 +10910,7 @@ Pegar Missão de Entrega Pobierz przesyłkę do dostarczenia Ottieni una missione postale - 得到快递任务 + 得到快递任务 Diving Shop @@ -10874,7 +10922,7 @@ Loja de Mergulho Akcesoria do nurkowania Negozio da Sub - 潜水店 + 潜水店 Drug Dealer @@ -10886,7 +10934,7 @@ Traficante Diler narkotyków Spacciatore - 毒贩 + 毒贩 Diamond Processing @@ -10898,7 +10946,7 @@ Processador de Diamante Szlifierz diamentów Processo diamanti - 钻石加工 + 钻石加工 Oil Field @@ -10910,7 +10958,7 @@ Campo de Petróleo Szyb naftowy Giacimento di Petrolio - 油田 + 油田 Marijuana Field @@ -10922,7 +10970,7 @@ Campo de Maconha Pole marihuany Campo di Marijuana - 大麻产地 + 大麻产地 Marijuana Processing @@ -10934,7 +10982,7 @@ Processador de Maconha Suszarnia marihuany Trattamento Marijuana - 大麻加工 + 大麻加工 Boat Spawn @@ -10946,7 +10994,7 @@ Spawn de Barcos Przystań Consegna Barche - 码头 + 码头 Copper Processing @@ -10958,7 +11006,7 @@ Processador de Cobre Huta miedzi Processo Rame - 铜矿加工 + 铜矿加工 Coca Field @@ -10970,7 +11018,7 @@ Campo de Cocaína Pole kokainy Campo di Cocaina - 可卡因树林 + 可卡因树林 Oil Trader @@ -10982,7 +11030,7 @@ Comprador de Petróleo Skup benzyny Vendita Olio - 石油贸易商 + 石油贸易商 Salt Trader @@ -10994,7 +11042,7 @@ Comprador de Sal Skup soli Vendita Sale - 食盐贸易商 + 食盐贸易商 Diamond Trader @@ -11006,7 +11054,7 @@ Comprador de Diamante Skup diamentów Vendita Diamanti - 钻石贸易商 + 钻石贸易商 Glass Trader @@ -11018,7 +11066,7 @@ Comprador de Vidro Skup szkła Vendita del Vetro - 玻璃贸易商 + 玻璃贸易商 Iron / Copper Trader @@ -11030,7 +11078,7 @@ Comprador de Ferro e Cobre Skup metali Vendita del Ferro/Rame - 铁/铜交易商 + 铁/铜交易商 Sand Processing @@ -11042,7 +11090,7 @@ Processador de Areia Huta szkła Processo Sabbia - 玻璃制造厂 + 玻璃制造厂 Gun Store @@ -11054,7 +11102,7 @@ Loja de Armas Sklep z bronią Armeria - 武器商店 + 武器商店 Opium Poppy Field @@ -11066,7 +11114,7 @@ Heroin Plantage Campo de Heroína Pole heroiny - 罂粟产地 + 罂粟产地 Heroin Processing @@ -11078,7 +11126,7 @@ Heroin Verarbeitung Processador de Heroína Oczyszczanie heroiny - 海洛因加工点 + 海洛因加工点 Garage @@ -11090,7 +11138,7 @@ Garage Garagem Garaż - 载具仓库 + 载具仓库 Federal Reserve @@ -11102,7 +11150,7 @@ Reserva Federal Bank Rezerw Federalnych Banca Federale - 金库 + 金库 Highway Patrol Outpost @@ -11114,7 +11162,7 @@ Base da Polícia Rodoviária Posterunek policji drogowej Checkpoint di polizia - 公路巡逻队 + 公路巡逻队 Rock Quarry @@ -11126,7 +11174,7 @@ Pedreira Kamieniołom Cava di Roccia - 采矿石场 + 采矿石场 Rock Processing @@ -11138,7 +11186,7 @@ Processador de Pedra Wytwórnia cementu z kamienia Processo Roccia - 水泥制造厂 + 水泥制造厂 Cement Trader @@ -11150,7 +11198,7 @@ Comprador de Cimento Skup cementu Vendita del Cemento - 水泥贸易商 + 水泥贸易商 Turtle Poaching @@ -11162,7 +11210,7 @@ Wilderei für Schildkröten Área de Tartarugas Strefa występowania żółwi morskich - 海龟捕猎区 + 海龟捕猎区 Turtle Dealer @@ -11174,7 +11222,7 @@ Comprador de Tartarugas Skup żółwi Vendita Tartarughe - 海龟走私商 + 海龟走私商 Go-Kart Shop @@ -11186,7 +11234,7 @@ Loja de Karts Sklep z GoKartami Parco Go-Kart - 卡丁车店 + 卡丁车店 Gold Bars Buyer @@ -11198,7 +11246,7 @@ Comprador de Barras de Ouro Skup złota Gioielliere - 金条买家 + 金条买家 Gang Hideout 1 @@ -11210,7 +11258,7 @@ Esconderijo de Gangs 1 Kryjówka gangu 1 Covo Gang 1 - 帮派据点1 + 帮派据点1 Gang Hideout 2 @@ -11222,7 +11270,7 @@ Esconderijo de Gangs 2 Kryjówka gangu 2 Covo Gang 2 - 帮派据点2 + 帮派据点2 Gang Hideout 3 @@ -11234,7 +11282,7 @@ Esconderijo de Gangs 3 Kryjówka gangu 3 Covo Gang 3 - 帮派据点3 + 帮派据点3 Hunting Grounds @@ -11246,7 +11294,7 @@ Área de Caça Strefa polowań Riserva di Caccia - 狩猎场 + 狩猎场 Rebel Clothing Shop @@ -11258,7 +11306,7 @@ Rebellen Kleidungsgeschäft Loja de Roupas Rebeldes Magazyn rebelianta - 叛军服装店 + 叛军服装店 Rebel Weapon Shop @@ -11270,7 +11318,7 @@ Loja de Armas Rebeldes Zbrojownia rebelianta Armeria della Guerriglia - 叛军武器店 + 叛军武器店 Helicopter Shop @@ -11282,7 +11330,7 @@ Helikopter Händler Loja de Helicópteros Sklep lotniczy - 飞行载具店 + 飞行载具店 Fuel Station Store @@ -11294,7 +11342,7 @@ Tankstelle Loja de Conveniência Sklep OLLEN - 加油站商店 + 加油站商店 Rebel Market @@ -11306,7 +11354,7 @@ Rebellen Markt Mercado Rebelde Market rebelianta - 叛军市场 + 叛军市场 Question Dealer @@ -11318,7 +11366,7 @@ Perguntar ao Traficante Przesłuchaj dilera Minaccia Spacciatore - 询问经销商 + 询问经销商 Service Helicopter @@ -11330,7 +11378,7 @@ Serviço Aéreo Serwisuj pojazd lotniczy Servizio Aereo - 维修直升机 + 维修直升机 Clothing Store @@ -11342,7 +11390,7 @@ Loja de Roupas Sklep odzieżowy Vestiario - 服装店 + 服装店 Medical Assistance @@ -11354,7 +11402,7 @@ Assistência Médica Pomoc medyczna Assistenza Medica - 医疗救助 + 医疗救助 Store vehicle in Garage @@ -11366,7 +11414,7 @@ Guardar veículo na Garagem Umieść pojazd w garażu Deposita veicolo in garage - 将载具存放在仓库 + 将载具存放在仓库 Cop Item Shop @@ -11378,7 +11426,7 @@ Polizei Ausrüstung Loja de Items da Polícia Zaopatrzenie - 警察物品商店 + 警察物品商店 Cop Clothing Shop @@ -11390,7 +11438,7 @@ Polizei Uniformen Loja de Roupas da Polícia Umundurowanie - 警察服装店 + 警察服装店 Cop Weapon Shop @@ -11402,7 +11450,7 @@ Polizei Waffengeschäft Loja de Armas da Polícia Broń policji - 警察武器店 + 警察武器店 Patrol Officer Weapon Shop @@ -11414,7 +11462,7 @@ Loja de Armas de Patrulha Broń patrolowa Streifenpolizist Waffengeschäft - 巡警武器商店 + 巡警武器商店 Sergeant Weapon Shop @@ -11426,7 +11474,7 @@ Lojas de Armas de Sargento Broń sierżanta Sergeant Waffengeschäft - 警长武器商店 + 警长武器商店 Vehicle Shop @@ -11438,7 +11486,7 @@ Autohändler Loja de Carros Pojazdy - sklep - 载具商店 + 载具商店 Process Sand @@ -11450,7 +11498,7 @@ Processar Areia Przetop piasek na szkło Lavorazione Sabbia - 把沙子制造成玻璃 + 把沙子制造成玻璃 Process Rock @@ -11462,7 +11510,7 @@ Processar Pedra Zmiel skały na cement Processo Roccia - 把矿石制造成水泥 + 把矿石制造成水泥 Wong's Food Cart @@ -11474,7 +11522,7 @@ Wong's Spezialitäten Boteco do Wongs Bar u Wonga - 食品商人 + 食品商人 Open Vault @@ -11486,7 +11534,7 @@ Geöffneter Tresor Abrir Cofre Otwórz skarbiec - 打开金库 + 打开金库 Fix Vault @@ -11498,7 +11546,7 @@ Consertar Cofre Napraw skarbiec Ripara Cassaforte - 修复金库 + 修复金库 Federal Reserve - Front Entrance @@ -11510,7 +11558,7 @@ Zentralbank - Haupteingang Reserva Federal - Entrada Frontal Rezerwa federalna - wejście główne - 金库-前门 + 金库-前门 Federal Reserve - Side Entrance @@ -11522,7 +11570,7 @@ Zentralbank - Seiteneingang Reserva Federal - Entrada Lateral Rezerwa federalna - wejście boczne - 金库-侧门 + 金库-侧门 Federal Reserve - Back Entrance @@ -11534,7 +11582,7 @@ Zentralbank - Hintereingang Reserva Federal - Entrada Traseira Rezerwa federalna - wejście tylne - 金库-后门 + 金库-后门 Federal Reserve - Vault View @@ -11546,7 +11594,7 @@ Zentralbank - Tresor Reserva Federal - Visão do Cofre Rezerwa federalna - skarbiec - 金库-保险箱 + 金库-保险箱 Turn Off Display @@ -11558,7 +11606,7 @@ Bildschirm ausschalten Desligar Monitor Wyłącz wyświetlacz - 关闭显示 + 关闭显示 Armament @@ -11570,7 +11618,7 @@ Rüstkammer Armamento Zbrojownia gangu - 武器装备 + 武器装备 EMS Item Shop @@ -11582,7 +11630,7 @@ Sanitäter Ausrüstung Loja de Items Médicos Wyposażenie medyczne - 医疗物品店 + 医疗物品店 EMS Clothing Shop @@ -11594,7 +11642,7 @@ Sanitäter Kleidungsgeschäft EMS Roupa Loja Sklep odzieżowy EMS - 医疗服装店 + 医疗服装店 Helicopter Garage @@ -11606,7 +11654,7 @@ Helikopter Hangar Garagem Aérea Hangar lotniczy - 直升机库 + 直升机库 Car Garage @@ -11618,7 +11666,7 @@ Garagem de Carros Hangar lotniczy Garage Automobili - 载具仓库 + 载具仓库 Pay Bail @@ -11630,7 +11678,7 @@ Pagar Fiança Zapłać kaucję Paga cauzione - 支付保释金 + 支付保释金 @@ -11644,7 +11692,7 @@ Remove Uniform Remove Uniform Remove Uniform - 删除制服 + 删除制服 Remove Hat @@ -11656,7 +11704,7 @@ Remove Hat Remove Hat Remove Hat - 删除帽子 + 删除帽子 Remove Glasses @@ -11668,7 +11716,7 @@ Remove Glasses Remove Glasses Remove Glasses - 删除眼镜 + 删除眼镜 Remove Vest @@ -11680,7 +11728,7 @@ Remove Vest Remove Vest Remove Vest - 删除背心 + 删除背心 Remove Backpack @@ -11692,7 +11740,7 @@ Remove Backpack Remove Backpack Remove Backpack - 删除背包 + 删除背包 Casual Wears @@ -11704,7 +11752,7 @@ Casual Wears Casual Wears Casual Wears - 休闲装 + 休闲装 Hat and Bandana @@ -11716,7 +11764,7 @@ Hat and Bandana Hat and Bandana Hat and Bandana - 帽子和头巾 + 帽子和头巾 Cop Uniform @@ -11728,7 +11776,7 @@ Cop Uniform Cop Uniform Cop Uniform - 警察制服 + 警察制服 EMS Uniform @@ -11740,7 +11788,7 @@ EMS Uniform EMS Uniform EMS Uniform - 医疗制服 + 医疗制服 EMS Backpack @@ -11752,7 +11800,7 @@ EMS Backpack EMS Backpack EMS Backpack - 医疗背包 + 医疗背包 Flashbang @@ -11764,7 +11812,7 @@ Flashbang Flashbang Flashbang - 闪光弹 + 闪光弹 Stun Pistol @@ -11776,7 +11824,7 @@ Stun Pistol Stun Pistol Stun Pistol - 眩晕手枪 + 眩晕手枪 Taser Rifle @@ -11788,7 +11836,7 @@ Taser Rifle Taser Rifle Taser Rifle - 泰瑟步枪 + 泰瑟步枪 Taser Rifle Magazine @@ -11800,7 +11848,7 @@ Taser Rifle Magazine Taser Rifle Magazine Taser Rifle Magazine - 泰瑟步枪弹匣 + 泰瑟步枪弹匣 Northern Rebel Base @@ -11812,7 +11860,7 @@ Northern Rebel Base Northern Rebel Base Northern Rebel Base - 北部叛军基地 + 北部叛军基地 Southern Rebel Base @@ -11824,7 +11872,7 @@ Southern Rebel Base Southern Rebel Base Southern Rebel Base - 南部叛军基地 + 南部叛军基地 Eastern Rebel Base @@ -11836,7 +11884,7 @@ Eastern Rebel Base Eastern Rebel Base Eastern Rebel Base - 东部叛军基地 + 东部叛军基地 North Western Rebel Base @@ -11848,7 +11896,7 @@ North Western Rebel Base North Western Rebel Base North Western Rebel Base - 西北叛军基地 + 西北叛军基地 North Eastern Rebel Base @@ -11860,7 +11908,7 @@ North Eastern Rebel Base North Eastern Rebel Base North Eastern Rebel Base - 东北叛军基地 + 东北叛军基地 Kavala Hospital @@ -11872,7 +11920,7 @@ Kavala Hospital Kavala Hospital Kavala Hospital - Kavala医院 + Kavala医院 Athira Regional @@ -11884,7 +11932,7 @@ Athira Regional Athira Regional Athira Regional - Athira地区 + Athira地区 Pyrgos Hospital @@ -11896,7 +11944,7 @@ Pyrgos Hospital Pyrgos Hospital Pyrgos Hospital - Pyrgos医院 + Pyrgos医院 South East Hospital @@ -11908,7 +11956,7 @@ South East Hospital South East Hospital South East Hospital - 东南医院 + 东南医院 Tanouka Regional @@ -11920,7 +11968,7 @@ Tanouka Regional Tanouka Regional Tanouka Regional - Tanouka地区 + Tanouka地区 North East Airport Hospital @@ -11932,7 +11980,7 @@ North East Airport Hospital North East Airport Hospital North East Airport Hospital - 东北机场医院 + 东北机场医院 North Airport HQ @@ -11944,7 +11992,7 @@ North Airport HQ North Airport HQ North Airport HQ - 北部机场总部 + 北部机场总部 South Western Airport HQ @@ -11956,7 +12004,7 @@ South Western Airport HQ South Western Airport HQ South Western Airport HQ - 西南机场总部 + 西南机场总部 @@ -11970,7 +12018,7 @@ Atropelamento Fahrlässige Tötung - 载具撞人 + 载具撞人 Manslaughter @@ -11982,7 +12030,7 @@ Homicidio Involuntario Totschlag - 过失杀人 + 过失杀人 Escaping Jail @@ -11994,7 +12042,7 @@ Fuga da Prisão Ausbruch - 逃离监狱 + 逃离监狱 Attempted Auto Theft @@ -12006,7 +12054,7 @@ Tentativa de Roubo de Veiculo Versuchter Autodiebstahl - 企图盗窃载具 + 企图盗窃载具 Use of illegal explosives @@ -12018,7 +12066,7 @@ Uso de explosivos ilegais Verwendung von illegalen Sprengstoff - 使用非法爆炸物 + 使用非法爆炸物 Robbery @@ -12030,7 +12078,7 @@ Roubo Raub - 抢劫 + 抢劫 Kidnapping @@ -12042,7 +12090,7 @@ Sequestro Entführung - 绑架 + 绑架 Attempted Kidnapping @@ -12054,7 +12102,7 @@ Versuchte Entführung Tentativo di rapimento Próba porwania - 绑架未遂 + 绑架未遂 Public Intoxication @@ -12066,7 +12114,7 @@ Öffentlicher Drogenmissbrauch Uso di stupefacenti in pubblico Upojenie publiczny - 公共场合使用非法药品 + 公共场合使用非法药品 Grand Theft @@ -12078,7 +12126,7 @@ Grande Roubo Auto Diebstahl - 盗窃 + 盗窃 Petty Theft @@ -12090,7 +12138,7 @@ Pequeno Roubo Kleiner Diebstahl - 小偷小摸 + 小偷小摸 Hit and run @@ -12102,7 +12150,7 @@ Fugir de Batida Fahrerflucht - 交通肇事后逃逸 + 交通肇事后逃逸 Drug Possession @@ -12114,7 +12162,7 @@ Posse de Droga Drogenbesitz - 持有毒品 + 持有毒品 Intent to distribute @@ -12126,7 +12174,7 @@ Versuchter Drogenhandel Tentativo di spaccio Zamiarem dystrybucji - 意图散布 + 意图散布 Drug Trafficking @@ -12138,7 +12186,7 @@ Drogenhandel Vendita di droga Handel narkotykami - 贩毒 + 贩毒 Burglary @@ -12150,7 +12198,7 @@ Arrombamento Einbruch - 盗窃 + 盗窃 Tax Evasion @@ -12162,7 +12210,7 @@ Steuerhinterziehung Evasione delle tasse Unikanie podatków - 逃税 + 逃税 Terrorism @@ -12174,7 +12222,7 @@ Terrorismus Terrorismo Terroryzm - 恐怖主义 + 恐怖主义 Unlicensed Hunting @@ -12186,7 +12234,7 @@ Jagen ohne Jagdschein Caccia senza licenza Polowanie nielicencjonowane - 无证狩猎 + 无证狩猎 Organ Theft @@ -12198,7 +12246,7 @@ Roubo de Orgãos Organ Diebstahl - 盗窃公共财物 + 盗窃公共财物 Attempted Organ Theft @@ -12210,7 +12258,7 @@ Tentativa de Roubo de Orgãos Versuchter Organ Diebstahl - 盗窃公共财物未遂 + 盗窃公共财物未遂 Driving without license @@ -12222,7 +12270,7 @@ Fahren ohne Führerschein Guida senza patente Jazda bez licencji - 无证驾驶 + 无证驾驶 Driving on the wrong side of the road @@ -12234,7 +12282,7 @@ Guida Contromano Jazda po niewłaściwej stronie drogi Fahren in die falsche Richtung der Straße - 在错误的道路上驾驶 + 在错误的道路上驾驶 Not respecting the signalizations @@ -12246,7 +12294,7 @@ Nicht unter Beachtung der Signalisierungen Mancato rispetto dei segnali stradali Nie przestrzegając sygnalizacji czy - 不遵守交通灯号 + 不遵守交通灯号 Speeding @@ -12258,7 +12306,7 @@ Geschwindigkeitsüberschreitung Eccesso di velocità Przyśpieszenie - 超速 + 超速 No headlight in the night @@ -12270,7 +12318,7 @@ Fahren ohne Licht Luci spente durante la notte Brak świateł w nocy - 夜间不开车灯 + 夜间不开车灯 Driving kart without helmet @@ -12282,7 +12330,7 @@ Fahren ohne Helm Guida di Kart senza casco Jazda bez kasku gokarta - 驾驶卡丁车不戴安全头盔 + 驾驶卡丁车不戴安全头盔 Badly parked vehicle @@ -12294,7 +12342,7 @@ Parksünder Veicolo mal parcheggiato Źle zaparkowany samochód - 乱停放载具 + 乱停放载具 Rebel vehicle (Not armed) @@ -12306,7 +12354,7 @@ Rebellen Fahrzeug (nicht bewaffnet) Veicolo blindato(Non armato) Rebel pojeździe (nie czuwa) - 叛军载具(无武装) + 叛军载具(无武装) Grand Theft (Civilian Vehicle) @@ -12318,7 +12366,7 @@ Schwerer Diebstahl (Zivilfahrzeug) Furto di veicolo (Civile) Grand Theft (Cywilny Vehicle) - 盗窃载具(民用载具) + 盗窃载具(民用载具) Grand Theft (Military Vehicle) @@ -12330,7 +12378,7 @@ Schwerer Diebstahl (Dienstfahrzeug) Furto di veicolo militare Grand Theft (pojazd wojskowy) - 盗窃载具(军用载具) + 盗窃载具(军用载具) Armored Vehicle @@ -12342,7 +12390,7 @@ Panzerfahrzeug Veicolo D'assalto Opancerzony pojazd - 装甲载具 + 装甲载具 Flying over the city without authorization @@ -12354,7 +12402,7 @@ Fliegen über die Stadt ohne Genehmigung Guida di velivolo su città abitata senza autorizzazione Latające nad miastem bez zezwolenia - 未经授权飞越城市 + 未经授权飞越城市 Closing the street without authorization @@ -12366,7 +12414,7 @@ Absperren der Straße ohne Genehmigung Impedimento del traffico senza permesso Zamknięcie ulicy bez zezwolenia - 擅自堵塞街道 + 擅自堵塞街道 Open carry in city (Legal Weapon) @@ -12378,7 +12426,7 @@ Arme légale visible en ville Portar em Cidades(Arma Legal) Offenes Tragen einer legalen Waffe in der Stadt - 公开携带武器进入城市(合法武器) + 公开携带武器进入城市(合法武器) Rebel weapon @@ -12390,7 +12438,7 @@ Rebellen Waffe Arma Ribelle Rebel bronią - 叛军武器 + 叛军武器 Illegal clothing @@ -12402,7 +12450,7 @@ Vêtements illégaux Roupas Ilegais Illegale Kleidung - 非法服装 + 非法服装 Hiding face (Mask) @@ -12414,7 +12462,7 @@ Cacher son visage Esconder o Rosto(Mascara) Verstecken des Gesichts (Maske) - 隐藏面部(面具) + 隐藏面部(面具) Refuses to cooperate @@ -12426,7 +12474,7 @@ Refus d'obtempérer Recusou-se a Cooperar Behinderung der Staatsgewalt - 拒绝合作 + 拒绝合作 Hit and run @@ -12438,7 +12486,7 @@ Délit de fuite Bater e Fugir Fahrerflucht - 交通肇事逃逸 + 交通肇事逃逸 Insulting a civilian @@ -12450,7 +12498,7 @@ Beleidigung Insulto a civile Obrażanie cywilem - 侮辱平民 + 侮辱平民 Insulting a soldier @@ -12462,7 +12510,7 @@ Beamtenbeleidigung Insulto a pubblico ufficiale Znieważenie żołnierza - 侮辱士兵 + 侮辱士兵 Drug dealing @@ -12474,7 +12522,7 @@ Drogenhandel Traffico di droga Handel narkotykami - 毒品交易 + 毒品交易 Federal Reserve breaking @@ -12486,7 +12534,7 @@ Bankeinbruch Rapina alla Riserva Federale Rezerwa Federalna łamanie - 非法打开金库 + 非法打开金库 Killing of a civilian @@ -12498,7 +12546,7 @@ Meurtre d'un civil Matou um Civil Töten eines Zivilen - 杀害平民 + 杀害平民 Killing of a soldier @@ -12510,7 +12558,7 @@ Töten eines Beamten Omicidio di un agente Zabijając żołnierza - 杀害士兵 + 杀害士兵 @@ -12524,7 +12572,7 @@ Treibstofflager Posto de Combustível - 燃料储存 + 燃料储存 Supply @@ -12536,7 +12584,7 @@ Liefern Abastecer - 供应 + 供应 Store @@ -12548,7 +12596,7 @@ Lagern Guardar - 商场 + 商场 Stop @@ -12560,7 +12608,7 @@ Stoppen Parar - 停止 + 停止 Tanker is already in use. @@ -12572,7 +12620,7 @@ Tankwagen wird bereits benutzt. Os tanques já estão em uso. - 油轮已投入使用。 + 油轮已投入使用。 Gas station is in use. @@ -12584,7 +12632,7 @@ Tankstelle wird bereits beliefert. O posto já está sendo usado. - 加油站在使用中。 + 加油站在使用中。 Tanker is empty. @@ -12596,7 +12644,7 @@ Treibstofftank ist leer. Os tanques estão vazios. - 油轮是空的。 + 油轮是空的。 Tankers is full. @@ -12608,7 +12656,7 @@ Treibstofftank ist voll. Os tanques estão cheios. - 油轮已满。 + 油轮已满。 Gas station has enough fuel. @@ -12620,7 +12668,7 @@ Tankstelle hat genug Treibstoff. O posto tem combustível suficiente. - 加油站有足够的燃料。 + 加油站有足够的燃料。 This gas station is supplied through a pipeline. @@ -12632,7 +12680,7 @@ Diese Tankstelle wird über eine Pipeline versorgt. Esse posto é abastecido através de uma mangueira. - 这个加油站通过管道供给。 + 这个加油站通过管道供给。 Discontinued operation. @@ -12644,7 +12692,7 @@ Vorgang abgebrochen. Operação descontinuada. - 停止运营。 + 停止运营。 Your share is $%1. @@ -12656,7 +12704,7 @@ Dein Anteil beträgt $%1. A sua parte é de R$%1. - 你的份额为 $%1. + 你的份额为 $%1. @@ -12670,7 +12718,7 @@ Missão fracassada Миссия провалена Mission fehlgeschlagen. - 任务失败 + 任务失败 You are not white-listed to use this slot. @@ -12682,7 +12730,7 @@ Missão fracassada Миссия провалена Nicht auf der Whitelist. - 你不是白名单不能使用这个栏位。 + 你不是白名单不能使用这个栏位。 You are not allowed to use this slot because you do not have the appropriate permissions. Try another slot. @@ -12694,7 +12742,7 @@ Você não tem permissão para usar esse slot, porque você não tem as permissões apropriadas. Tente outro slot. Вы не можете использовать этот слот, потому что у вас нет соответствующих разрешений. Попробуйте использовать другой слот. Du bist nicht auf der Whitelist, deswegen kannst du diesen Platz nicht verwenden. Versuche es auf einen anderen Platz. - 你不允许使用此栏位,因为你没有适当的权限。尝试另一个栏位。 + 你不允许使用此栏位,因为你没有适当的权限。尝试另一个栏位。 @@ -12708,7 +12756,7 @@ Missão fracassada Миссия провалена Mission fehlgeschlagen - 任务失败 + 任务失败 You are blacklisted from cops. @@ -12720,7 +12768,7 @@ Você está na lista negra de policiais. Вы в черном списке от ментов. Du bist von Polizisten auf die schwarze Liste gesetzt worden. - 你被警察列入黑名单。 + 你被警察列入黑名单。 You are not allowed to be a cop due to previous actions and the admins have removed you from being a cop. @@ -12732,7 +12780,7 @@ Você não tem permissão para ser um policial devido a ações anteriores e os admins ter removido-lo de ser um policial. Вы не можете быть полицейским в связи с предыдущими действиями и админы удалили вас от того, чтобы быть полицейским. Du bist aufgrund früherer Aktion, kein Polizist mehr. Du wurdest von den Admins aus der Polizei entfernt. - 由于以前的行为,你不再是警察,警局已将你从警队中开除。 + 由于以前的行为,你不再是警察,警局已将你从警队中开除。 @@ -12746,7 +12794,7 @@ O SpyGlass te vê! SpyGlass видит, что вы! SpyGlass sieht dich! - SpyGlass正在检测你! + SpyGlass正在检测你! You were detected by the SpyGlass. @@ -12758,7 +12806,7 @@ Você foi detectado pelo SpyGlass. Вы были обнаружены с помощью SpyGlass. Du wurdest von SpyGlass erkannt. - 你被SpyGlass检测。 + 你被SpyGlass检测。 You were detected for cheating and have been reported to the server. Enjoy your day. @@ -12770,7 +12818,7 @@ Está foram detectados por engano e têm sido relatados para o servidor. Aproveite seu dia. Вы были обнаружены для мошенничества и было сообщено на сервер. Удачного дня. >Du wurdest wegen Betrug erkannt und an den Server gemeldet. Genieße deinen Tag. - 你被发现作弊,并已报告给服务器。珍惜你的生活吧。 + 你被发现作弊,并已报告给服务器。珍惜你的生活吧。 SPYGLASS-FLAG: %1 : %2 : %3 @@ -12782,7 +12830,7 @@ SPYGLASS-FLAG: %1 : %2 : %3 SPYGLASS-FLAG: %1 : %2 : %3 SPYGLASS-ERKENNUNG: %1 : %2 : %3 - SPYGLASS-标记: %1 : %2 : %3 + SPYGLASS-标记: %1 : %2 : %3 <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 @@ -12794,7 +12842,7 @@ <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Betrüger Erkannt</t><br/<br/>Name: %1<br/>Erkennung: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>作弊者被标记</t><br/<br/>姓名:%1<br/>发现:%2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>作弊者被标记</t><br/<br/>姓名:%1<br/>发现:%2 %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. @@ -12806,7 +12854,7 @@ %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. %1 wurde beobachtet durch SPY-GLASS. Er/Sie hatte versucht auf das Befehlsmenü:\n\n %2\n\n zuzugreifen, diese ist dem System aber nicht bekannt. BITTE BEACHTE! Er/Sie betrügt deshalb nicht, aber SPY-GLASS fand es trotzdem relevant es zu melden. - %1 被SPY-GLASS检测, 他/她试图访问命令菜单:\n\n %2\n\n 并且系统不知道命令菜单。请注意他/她可能不会作弊,但SPY-GLASS发现了它的报告相关。 + %1 被SPY-GLASS检测, 他/她试图访问命令菜单:\n\n %2\n\n 并且系统不知道命令菜单。请注意他/她可能不会作弊,但SPY-GLASS发现了它的报告相关。 Variable: %1 is not allowed TYPE: %2 NS: MN @@ -12818,7 +12866,7 @@ Variable: %1 is not allowed TYPE: %2 NS: MN Variable: %1 is not allowed TYPE: %2 NS: MN Variable: %1 ist nicht erlaubt. TYPE: %2 NS: MN - 变量:不允许: %1 类型: %2 NS: MN + 变量:不允许: %1 类型: %2 NS: MN Variable: %1 is not allowed TYPE: %2 NS: UI @@ -12830,7 +12878,7 @@ Variable: %1 is not allowed TYPE: %2 NS: UI Variable: %1 is not allowed TYPE: %2 NS: UI Variable: %1 ist nicht erlaubt. TYPE: %2 NS: UI - 变量:不允许: %1 类型: %2 NS: UI + 变量:不允许: %1 类型: %2 NS: UI ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 @@ -12842,7 +12890,7 @@ ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 ||SPY-GLASS Beobachtung|| Name: %1 | UID: %2 | Grund: %3 - ||SPY-GLASS 观察|| 姓名:%1 | UID:%2 | 原因:%3 + ||SPY-GLASS 观察|| 姓名:%1 | UID:%2 | 原因:%3 Variable set before client initialized: %1 @@ -12854,7 +12902,7 @@ Variable set before client initialized: %1 Variable set before client initialized: %1 Variable gesetzt bevor Client initialisiert: %1 - 客户端初始化之前的变量集:%1 + 客户端初始化之前的变量集:%1 @@ -12868,7 +12916,7 @@ EMS solicitada EMS Запрошенный Sanitäter benachrichtigt - EMS要求 + EMS要求 Delivery Job Accepted @@ -12880,7 +12928,7 @@ Entrega aceitado Job Доставка Работа Принято Lieferauftrag angenommen - 接受交货工作 + 接受交货工作 Delivery Job Failed @@ -12892,7 +12940,7 @@ Falha de entrega Job Доставка Работа Ошибка Lieferauftrag fehlgeschlagen - 交货工作失败 + 交货工作失败 Delivery Job Completed @@ -12904,7 +12952,7 @@ Concluída a entrega Job Доставка Работа Завершено Lieferauftrag abgeschlossen - 交货工作已完成 + 交货工作已完成 Received A Text Message @@ -12916,7 +12964,7 @@ Recebeu uma mensagem de texto Получено текстовое сообщение Erhielt eine Textnachricht - 收到短信 + 收到短信 911 Dispatch Center @@ -12928,7 +12976,7 @@ 911 Centro de Despacho 911 диспетчерский центр 110 Dispatch Zentrum - 911调度中心 + 911调度中心 Admin Dispatch Center @@ -12940,7 +12988,7 @@ Administrador Centro de Despacho Администратор диспетчерский центр Admin Verteilzentrum - 管理调度中心 + 管理调度中心 Admin Message @@ -12952,7 +13000,7 @@ Message Admin - 管理员信息 + 管理员信息 @@ -12966,7 +13014,7 @@ Zivilflugzeug - 民用飞机 + 民用飞机 Police HQ @@ -12978,7 +13026,7 @@ Polizei HQ - 警察总部 + 警察总部 Police Store @@ -12990,7 +13038,7 @@ Polizei Ausrüstung - 警察商店 + 警察商店 Police Car @@ -13002,7 +13050,7 @@ Dienstfahrzeuge - 警车 + 警车 Police Heli @@ -13014,7 +13062,7 @@ Polizei Helikopter - 警用直升机 + 警用直升机 Police Boat @@ -13026,7 +13074,7 @@ Polizei Boote - 警察船舶 + 警察船舶 Rebel Car @@ -13038,7 +13086,7 @@ Rebellen Fahrzeuge - 叛军载具 + 叛军载具 Rebel Heli @@ -13050,7 +13098,7 @@ Rebellen Helikopter - 叛军直升机 + 叛军直升机 Police HQ @@ -13062,7 +13110,7 @@ Polizei HQ - 警察总部 + 警察总部 @@ -13076,7 +13124,7 @@ prendeu %1 арестовано %1 hat %1 verhaftet - 逮捕 %1 + 逮捕 %1 %1 - %2 arrested %3 @@ -13088,7 +13136,7 @@ %1 - %2 prendeu %3 %1 - %2 %3 арестовано %1 - %2 hat %3 verhaftet. - %1 - %2 逮捕 %3 + %1 - %2 逮捕 %3 picked up %1 %2 @@ -13100,7 +13148,7 @@ pegou %1 %2 поднял %1 %2 hat $%1 $%2 aufgehoben. - 拿起 %1 %2 + 拿起 %1 %2 %1 - %2 picked up %3 %4 @@ -13112,7 +13160,7 @@ %1 - %2 pegou %3 %4 взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 %1 - %2 hat %3 %4 aufgehoben. - %1 - %2 捡起 %3 %4 + %1 - %2 捡起 %3 %4 picked up $%1 from the ground. Bank Balance: $%2 On Hand Balance: $%3 @@ -13124,7 +13172,7 @@ pegou R$%1 do chão. Quantia no Banco: R$%2 Quantia na Mão: R$%3 взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 hat $%1 vom Boden aufgehoben. Bankkonto: $%2 Bargeld: $%3 - 从地上捡起 $%1。银行存款余额:$%2 手上余额:$%3 + 从地上捡起 $%1。银行存款余额:$%2 手上余额:$%3 %1 - %2 picked up $%3 from the ground. Bank Balance: $%4 On Hand Balance $%5 @@ -13136,7 +13184,7 @@ %1 - %2 pegou R$%3 do chão. Quantia no Banco: R$%4 Quantia na mão: R$%5 %1 - %2 взял $%3 от земли. Банковский баланс: $%4 На Hand Баланс $%5 %1 - %2 hat $%3 vom Boden aufgehoben. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 从地上捡起 $%3。银行存款余额:$%4 手上余额 $%5 + %1 - %2 从地上捡起 $%3。银行存款余额:$%4 手上余额 $%5 robbed $%1 from %2. Bank Balance: $%3 On Hand Balance: $%4 @@ -13148,7 +13196,7 @@ roubou R$%1 de %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 ограбил $%1 из %2. Банковский баланс: $%3 на руку Баланс: $%4 hat $%1 von $%2 geraubt. Bankkonto: $%3 Bargeld: $%4 - 从 %2 抢劫 $%1。银行存款余额:$%3 手上余额:$%4 + 从 %2 抢劫 $%1。银行存款余额:$%3 手上余额:$%4 %1 - %2 robbed $%3 from %4. Bank Balance: $%5 On Hand Balance: $%6 @@ -13160,7 +13208,7 @@ %1 - %2 roubou R$%3 de %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 %1 - %2 ограбил $%3 от %4. Банковский баланс: $%5 на руку Баланс: $%6 %1 - %2 hat $%3 von %4 geraubt. Bankkonto: $%5 Bargeld: $%6 - %1 - %2 抢走了%4 $%3。银行存款余额:$%5 手上余额:$%6 + %1 - %2 抢走了%4 $%3。银行存款余额:$%5 手上余额:$%6 created a gang named: %1 for $%2 @@ -13172,7 +13220,7 @@ criou uma gangue chamada: %1 por R$%2 создали банду под названием: %1 за $%2 hat eine Gang mit dem Namen: $1 für $%2 erstellt. - 创建一个名为:%1 的帮派 花费 $%2 + 创建一个名为:%1 的帮派 花费 $%2 %1 - %2 created a gang named: %3 for $%4 @@ -13184,7 +13232,7 @@ %1 - %2 criou uma gangue chamada: %3 por R$%4 %1 - %2 создали банду под названием: %3 за $%4 %1 - %2 hat eine Gang mit dem Namen: %3 für $%4 erstellt. - %1 - %2 创建一个名为:%3 的帮派 花费 $%4 + %1 - %2 创建一个名为:%3 的帮派 花费 $%4 bought a house for $%1. Bank Balance: $%2 On Hand Cash: $%3 @@ -13196,7 +13244,7 @@ comprou uma casa por R$%1. Quantia no Banco: R$%2 Quantia na Mão: R$%3 купил дом за $%1. Банковский баланс: $%2 на руках наличные деньги: $%3 hat sich ein Haus für $%1 gekauft. Bankkonto: $%2 Bargeld: $%3 - 买了一所房子花费 $%。 银行存款余额: $%2 手头现金: $%3 + 买了一所房子花费 $%。 银行存款余额: $%2 手头现金: $%3 %1 - %2 bought a house for $%3. Bank Balance: $%4 On Hand Cash: $%5 @@ -13208,7 +13256,7 @@ %1 - %2 comprou uma casa por R$%3. Quantia no Banco: R$%4 Quantia na Mão: R$%5 %1 - %2 купил дом за $%3. Банковский баланс: $%4 на руках наличные деньги: $%5 %1 - %2 hat sich ein Haus für $%3 gekauft. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 买了一所房子花费 $%3。银行存款余额:$%4 手头现金:$%5 + %1 - %2 买了一所房子花费 $%3。银行存款余额:$%4 手头现金:$%5 sold a house for $%1. Bank Balance: $%2 @@ -13220,7 +13268,7 @@ vendeu uma casa por R$%1. Quantia no Banco: R$%2 продал дом за $%1. Банковский баланс: $%2 hat sein Haus für $%1 verkauft. Bankkonto: $%2 - 卖掉房子得到 $%1。银行存款余额:$%2 + 卖掉房子得到 $%1。银行存款余额:$%2 %1 - %2 sold a house for $%3. Bank Balance: $%4 @@ -13232,7 +13280,7 @@ %1 - %2 vendeu uma casa por R$%3. Quantia no Banco: R$%4 %1 - %2 продал дом за $%3. Банковский баланс: $%4 %1 - %2 hat sich ein Haus für $%3 verkauft. Bankkonto: $%4 - %1 - %2 卖掉房子得到 $%3。银行存款余额: $%4 + %1 - %2 卖掉房子得到 $%3。银行存款余额: $%4 chopped vehicle %1 for $%2 On Hand Cash(pre-chop): $%3 @@ -13244,7 +13292,7 @@ desmanchou um %1 por R$%2 Quantia na Mão (antes do desmanche): R$%3 нарезанного машина %1 или $%2 на руках Cash (предварительно отбивной): $%3 hat das Fahrzeug %1 für $%2 beim Schrotthändler verschrottet. Bargeld(vor Schrott): $%3 - 出售盗窃到的载具 %1 赚取 $%2 手头现金(预付):$%3 + 出售盗窃到的载具 %1 赚取 $%2 手头现金(预付):$%3 %1 - %2 chopped vehicle %3 for $%4 On Hand Cash(pre-chop): $%5 @@ -13256,7 +13304,7 @@ %1 - %2 desmanchou um %3 por R$%4 Quantia na Mão(antes do desmanche): R$%5 %1 - %2 нарезанной автомобиля %3 за $%4 на руку Cash (предварительно отбивной): $%5 %1 - %2 hat das Fahrzeug %3 für $%4 beim Schrotthändler verschrottet. Bargeld(vor Schrott): $%6 - %1 - %2 出售盗窃到的载具 %3 赚取 $%4 手头现金(预付):$%5 + %1 - %2 出售盗窃到的载具 %3 赚取 $%4 手头现金(预付):$%5 bought vehicle %1 for $%2. On Hand Cash: $%3 Bank Balance: $%4 @@ -13268,7 +13316,7 @@ comprou um %1 por R$%2. Quantia na Mão: R$%3 Quantia no Banco: R$%4 купил автомобиль %1 или $%2. На Hand Cash: $%3 банка Баланс: $%4 hat sich das Fahrzeug %1 für $%2 gekauft. Bargeld: $%3 Bankkonto: $%4 - 购买载具 %1 花费 $%2。 手头现金:$%3 银行存款余额:$%4 + 购买载具 %1 花费 $%2。 手头现金:$%3 银行存款余额:$%4 %1 - %2 bought vehicle %3 for $%4. On Hand Cash: $%5 Bank Balance $%6 @@ -13280,7 +13328,7 @@ %1 - %2 comprou um %3 por R$%4. Quantia na Mão: R$%5 Quantia no Banco: R$%6 %1 - %2 купил автомобиль за $%3 %4. На Hand наличных: $%5 баланса банка $%6 %1 - %2 hat sich das Fahrzeug %3 für $%4 gekauft. Bargeld: $%5 Bankkonto: $%6 - %1 - %2 购买载具 %3 花费 $%4。 手头现金:$%5 银行存款余额 $%6 + %1 - %2 购买载具 %3 花费 $%4。 手头现金:$%5 银行存款余额 $%6 sold vehicle %1 for $%2. Bank Balance: $%3 On Hand Balance: $%4 @@ -13292,7 +13340,7 @@ vendeu um %1 por R$%2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 продается автомобиль %1 за $%2. Банковский баланс: $%3 на руку Баланс: $%4 hat das Fahrzeug %1 für $%2 verkauft. Bankkonto: $%3 Bargeld: $%4 - 出售载具 %1 获得 $%2。 银行存款余额:$%3 手上现金:$%4 + 出售载具 %1 获得 $%2。 银行存款余额:$%3 手上现金:$%4 %1 - %2 sold vehicle %3 for $%4. Bank Balance: $%5 On Hand Balance: $%6 @@ -13304,7 +13352,7 @@ %1 - %2 vendeu um %3 por R$%4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 %1 - %2 продал автомобиль за $%3 %4. Банковский баланс: $%5 на руку Баланс: $%6 %1 - %2 hat das Fahrzeug %3 für %4 verkauft. Bankkonto: $%5 Bargeld: $%6 - %1 - %2 出售载具 %3 获得 $%4。银行存款余额:$%5 手上现金:$%6 + %1 - %2 出售载具 %3 获得 $%4。银行存款余额:$%5 手上现金:$%6 withdrew $%1 from their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 @@ -13316,7 +13364,7 @@ sacou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 снял $%1 от их банды банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 hat $%1 vom Gangkonto abgehoben. Gangkonto: $%2 Bankkonto: $%3 Bargeld: $%4 - 从他们的帮派银行账户取出 $%1。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 + 从他们的帮派银行账户取出 $%1。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 %1 - %2 withdrew $%3 from their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 @@ -13328,7 +13376,7 @@ %1 - %2 sacou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 %1 - %2 отозвала $%3 из их банды банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 %1 - %2 hat $%3 vom Bankkonto abgehoben. Gangkonto: $%4 Bankkonto: $%5 Bargeld: $%6 - %1 - %2 从他们的帮派银行账户取出 $%3。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 + %1 - %2 从他们的帮派银行账户取出 $%3。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 deposited $%1 into their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 @@ -13340,7 +13388,7 @@ depositou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 депозит в размере $%1 в их банде банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 hat $%1 auf sein Gangkonto eingezahlt. Gangkonto: $%2 Bankkonto: $%3 Bargeld: $%4 - 将 $%1 存进他们的帮派银行账户。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 + 将 $%1 存进他们的帮派银行账户。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 %1 - %2 deposited $%3 into their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 @@ -13352,7 +13400,7 @@ %1 - %2 depositou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 %1 - %2 депозит в размере $%3 в их банде банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 %1 - %2 hat $%3 auf sein Gangkonto überwiesen. Gangkonto: $%4 Bankkonto: $%5 Bargeld: $%6 - %1 - %2 将 $%3 存进他们的帮派银行账户。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 + %1 - %2 将 $%3 存进他们的帮派银行账户。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 withdrew $%1 from their bank. Bank Balance: $%2 On Hand Balance: $%3 @@ -13364,7 +13412,7 @@ sacou R$%1 do seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 снял $%1 от своего банка. Банковский баланс: $%2 на руку Баланс: $%3 hat $%1 von seinem Bankkonto abgehoben. Bankkonto: $%2 Bargeld: $%3 - 从他们的帮派银行账户取出 $%1。银行存款余额:$%2 手上现金:$%3 + 从他们的帮派银行账户取出 $%1。银行存款余额:$%2 手上现金:$%3 %1 - %2 withdrew $%3 from their bank. Bank Balance: $%4 On Hand Balance: $%5 @@ -13376,7 +13424,7 @@ %1 - %2 sacou R$%3 do seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 %1 - %2 отозвала $%3 из своего банка. Банковский баланс: $%4 на руку Баланс: $%5 %1 - %2 hat $%3 von seinem Bankkonto abgehoben. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 从他们银行账户取出 $%3。银行存款余额:$%4 手上现金:$%5 + %1 - %2 从他们银行账户取出 $%3。银行存款余额:$%4 手上现金:$%5 transferred $%1 to %2. Bank Balance: $%3 On Hand Balance: $%4 @@ -13388,7 +13436,7 @@ transferiu R$%1 para %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 перечислил $%1 %2. Банковский баланс: $%3 на руку Баланс: $%4 hat %2 $%1 überwiesen. Bankkonto: $%3 Bargeld: $%4 - 转帐 $%1 给 %2。银行存款余额:$%3 手上现金:$%4 + 转帐 $%1 给 %2。银行存款余额:$%3 手上现金:$%4 %1 - %2 transferred $%3 to %4. Bank Balance: $%5 On Hand Balance: $%6 @@ -13400,7 +13448,7 @@ %1 - %2 transferiu R$%3 para %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 %1 -%2 перевели $%3 до %4. Банковский баланс: $%5 на руку Баланс: $%6 %1 - %2 hat %4 $%3 überwiesen. Bankkonto: $%5 Bargeld: $%6 - %1 - %2 转帐 $%3 给 %4。银行存款余额:$%5 手上现金:$%6 + %1 - %2 转帐 $%3 给 %4。银行存款余额:$%5 手上现金:$%6 deposited $%1 into their bank. Bank Balance: $%2 On Hand Balance: $%3 @@ -13412,7 +13460,7 @@ depositou R$%1 no seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 депозит в размере $%1 в их банке. Банковский баланс: $%2 на руку Баланс: $%3 hat $%1 auf sein Bankkonto eingezahlt. Bankkonto: $%2 Bargeld: $%3 - 将 $%1 存进他们的银行账户。银行存款余额:$%2 手上现金:$%3 + 将 $%1 存进他们的银行账户。银行存款余额:$%2 手上现金:$%3 %1 - %2 deposited $%3 into their bank. Bank Balance: $%4 On Hand Balance: $%5 @@ -13424,7 +13472,7 @@ %1 - %2 depositou R$%3 no seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 %1 - %2 депозит в размере $%3 в свой банк. Банковский баланс: $%4 на руку Баланс: $%5 %1 - %2 hat $%3 auf sein Bankkonto eingezahlt. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 将 $%3 存进他们的银行账户。银行存款余额:$%4 手上现金:$%5 + %1 - %2 将 $%3 存进他们的银行账户。银行存款余额:$%4 手上现金:$%5 diff --git a/BEFilters/remoteexec.txt b/BEFilters/remoteexec.txt index f1aba0f4a..a1737120e 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|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) !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" diff --git a/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf b/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf index 5e99e944d..9b369a26a 100755 --- a/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf +++ b/life_hc/MySQL/WantedSystem/fn_wantedAdd.sqf @@ -22,7 +22,7 @@ if (_uid isEqualTo "" || {_type isEqualTo ""} || {_name isEqualTo ""}) exitWith //What is the crime? private _crimesConfig = getArray(missionConfigFile >> "Life_Settings" >> "crimes"); -private _index = [_type, _crimesConfig] call TON_fnc_index; +private _index = [_type, _crimesConfig] call life_util_fnc_index; if (_index isEqualTo -1) exitWith {}; diff --git a/life_server/Functions/WantedSystem/fn_wantedAdd.sqf b/life_server/Functions/WantedSystem/fn_wantedAdd.sqf index 000efff8d..f93752195 100755 --- a/life_server/Functions/WantedSystem/fn_wantedAdd.sqf +++ b/life_server/Functions/WantedSystem/fn_wantedAdd.sqf @@ -20,7 +20,7 @@ if (_uid isEqualTo "" || {_type isEqualTo ""} || {_name isEqualTo ""}) exitWith //What is the crime? private _crimesConfig = getArray(missionConfigFile >> "Life_Settings" >> "crimes"); -private _index = [_type, _crimesConfig] call TON_fnc_index; +private _index = [_type, _crimesConfig] call life_util_fnc_index; if (_index isEqualTo -1) exitWith {}; diff --git a/life_server/config.cpp b/life_server/config.cpp index a87301fb7..ab3414c5a 100644 --- a/life_server/config.cpp +++ b/life_server/config.cpp @@ -71,7 +71,6 @@ class CfgFunctions { class vehicleUpdate {}; class recupkeyforHC {}; class handleBlastingCharge {}; - class terrainSort {}; }; class Housing { diff --git a/life_server/functions.sqf b/life_server/functions.sqf deleted file mode 100644 index d7e1b1f74..000000000 --- a/life_server/functions.sqf +++ /dev/null @@ -1,324 +0,0 @@ -#include "script_macros.hpp" -/* - File: functions.sqf - Author: Bryan "Tonic" Boardwine - - Description: They are functions. -*/ - -publicVariable "TON_fnc_terrainSort"; - -TON_fnc_index = -compileFinal " - params [ - ""_item"", - [""_stack"",[],[[]]] - ]; - - _stack findIf {_item in _x}; -"; - -TON_fnc_player_query = -compileFinal " - private [""_ret""]; - _ret = _this select 0; - if (isNull _ret) exitWith {}; - if (isNil ""_ret"") exitWith {}; - - [life_atmbank,life_cash,owner player,player,profileNameSteam,getPlayerUID player,playerSide] remoteExecCall [""life_fnc_adminInfo"",_ret]; -"; -publicVariable "TON_fnc_player_query"; -publicVariable "TON_fnc_index"; - -TON_fnc_isNumber = -compileFinal " - params [ - ['_string','',['']] - ]; - if (_string isEqualTo '') exitWith {false}; - private _array = _string splitString ''; - private _return = true; - { - if !(_x in ['0','1','2','3','4','5','6','7','8','9']) exitWith { - _return = false; - }; - } forEach _array; - _return; -"; - -publicVariable "TON_fnc_isNumber"; - -TON_fnc_clientGangKick = -compileFinal " - private [""_unit"",""_group""]; - _unit = _this select 0; - _group = _this select 1; - if (isNil ""_unit"" || isNil ""_group"") exitWith {}; - if (player isEqualTo _unit && (group player) == _group) then { - life_my_gang = objNull; - private _newGroup = createGroup civilian; - _newGroup deleteGroupWhenEmpty true; - [player] joinSilent _newGroup; - hint localize ""STR_GNOTF_KickOutGang""; - }; -"; - -publicVariable "TON_fnc_clientGangKick"; - -TON_fnc_clientGetKey = -compileFinal " - private [""_vehicle"",""_unit"",""_giver""]; - _vehicle = _this select 0; - _unit = _this select 1; - _giver = _this select 2; - if (isNil ""_unit"" || isNil ""_giver"") exitWith {}; - if (player isEqualTo _unit && !(_vehicle in life_vehicles)) then { - _name = getText(configFile >> ""CfgVehicles"" >> (typeOf _vehicle) >> ""displayName""); - hint format [localize ""STR_NOTF_gaveKeysFrom"",_giver,_name]; - life_vehicles pushBack _vehicle; - [getPlayerUID player,playerSide,_vehicle,1] remoteExecCall [""TON_fnc_keyManagement"",2]; - }; -"; - -publicVariable "TON_fnc_clientGetKey"; - -TON_fnc_clientGangLeader = -compileFinal " - private [""_unit"",""_group""]; - _unit = _this select 0; - _group = _this select 1; - if (isNil ""_unit"" || isNil ""_group"") exitWith {}; - if (player isEqualTo _unit && (group player) == _group) then { - player setRank ""COLONEL""; - _group selectLeader _unit; - hint localize ""STR_GNOTF_GaveTransfer""; - }; -"; - -publicVariable "TON_fnc_clientGangLeader"; - -TON_fnc_clientGangLeft = -compileFinal " - private [""_unit"",""_group""]; - _unit = _this select 0; - _group = _this select 1; - if (isNil ""_unit"" || isNil ""_group"") exitWith {}; - if (player isEqualTo _unit && (group player) == _group) then { - life_my_gang = objNull; - - private _newGroup = createGroup civilian; - _newGroup deleteGroupWhenEmpty true; - [player] joinSilent _newGroup; - hint localize ""STR_GNOTF_LeaveGang""; - }; -"; - -publicVariable "TON_fnc_clientGangLeft"; - -//Cell Phone Messaging -/* - -fnc_cell_textmsg - -fnc_cell_textcop - -fnc_cell_textadmin - -fnc_cell_adminmsg - -fnc_cell_adminmsgall -*/ - -//To EMS -TON_fnc_cell_emsrequest = -compileFinal " -private [""_msg"",""_to""]; - ctrlShow[3022,false]; - _msg = ctrlText 3003; - _length = count (toArray(_msg)); - if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3022,true];}; - _to = ""EMS Units""; - if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3022,true];}; - - [_msg,name player,5,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",independent]; - [] call life_fnc_cellphone; - hint format [localize ""STR_CELLMSG_ToEMS"",_to,_msg]; - ctrlShow[3022,true]; -"; -//To One Person -TON_fnc_cell_textmsg = -compileFinal " - private [""_msg"",""_to""]; - ctrlShow[3015,false]; - _msg = ctrlText 3003; - - _length = count (toArray(_msg)); - if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3015,true];}; - if (lbCurSel 3004 isEqualTo -1) exitWith {hint localize ""STR_CELLMSG_SelectPerson""; ctrlShow[3015,true];}; - - _to = call compile format [""%1"",(lbData[3004,(lbCurSel 3004)])]; - if (isNull _to) exitWith {ctrlShow[3015,true];}; - if (isNil ""_to"") exitWith {ctrlShow[3015,true];}; - if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3015,true];}; - - [_msg,name player,0] remoteExecCall [""TON_fnc_clientMessage"",_to]; - [] call life_fnc_cellphone; - hint format [localize ""STR_CELLMSG_ToPerson"",name _to,_msg]; - ctrlShow[3015,true]; -"; -//To All Cops -TON_fnc_cell_textcop = -compileFinal " - private [""_msg"",""_to""]; - ctrlShow[3016,false]; - _msg = ctrlText 3003; - _to = ""The Police""; - - if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3016,true];}; - _length = count (toArray(_msg)); - if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3016,true];}; - - [_msg,name player,1,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",-2]; - [] call life_fnc_cellphone; - hint format [localize ""STR_CELLMSG_ToPerson"",_to,_msg]; - ctrlShow[3016,true]; -"; -//To All Admins -TON_fnc_cell_textadmin = -compileFinal " - private [""_msg"",""_to"",""_from""]; - ctrlShow[3017,false]; - _msg = ctrlText 3003; - _to = ""The Admins""; - - if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3017,true];}; - _length = count (toArray(_msg)); - if (_length > 400) exitWith {hint localize ""STR_CELLMSG_LIMITEXCEEDED"";ctrlShow[3017,true];}; - - [_msg,name player,2,mapGridPosition player,player] remoteExecCall [""TON_fnc_clientMessage"",-2]; - [] call life_fnc_cellphone; - hint format [localize ""STR_CELLMSG_ToPerson"",_to,_msg]; - ctrlShow[3017,true]; -"; -//Admin To One Person -TON_fnc_cell_adminmsg = -compileFinal " - if (isServer) exitWith {}; - if ((call life_adminlevel) < 1) exitWith {hint localize ""STR_CELLMSG_NoAdmin"";}; - private [""_msg"",""_to""]; - ctrlShow[3020,false]; - _msg = ctrlText 3003; - _to = call compile format [""%1"",(lbData[3004,(lbCurSel 3004)])]; - if (isNull _to) exitWith {ctrlShow[3020,true];}; - if (isNil ""_to"") exitWith {ctrlShow[3020,true];}; - if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3020,true];}; - - [_msg,name player,3] remoteExecCall [""TON_fnc_clientMessage"",_to]; - [] call life_fnc_cellphone; - hint format [localize ""STR_CELLMSG_AdminToPerson"",name _to,_msg]; - ctrlShow[3020,true]; -"; - -TON_fnc_cell_adminmsgall = -compileFinal " - if (isServer) exitWith {}; - if ((call life_adminlevel) < 1) exitWith {hint localize ""STR_CELLMSG_NoAdmin"";}; - private [""_msg"",""_from""]; - ctrlShow[3021,false]; - _msg = ctrlText 3003; - if (_msg isEqualTo """") exitWith {hint localize ""STR_CELLMSG_EnterMSG"";ctrlShow[3021,true];}; - - [_msg,name player,4] remoteExecCall [""TON_fnc_clientMessage"",-2]; - [] call life_fnc_cellphone; - hint format [localize ""STR_CELLMSG_AdminToAll"",_msg]; - ctrlShow[3021,true]; -"; - -publicVariable "TON_fnc_cell_textmsg"; -publicVariable "TON_fnc_cell_textcop"; -publicVariable "TON_fnc_cell_textadmin"; -publicVariable "TON_fnc_cell_adminmsg"; -publicVariable "TON_fnc_cell_adminmsgall"; -publicVariable "TON_fnc_cell_emsrequest"; -//Client Message -/* - 0 = private message - 1 = police message - 2 = message to admin - 3 = message from admin - 4 = admin message to all -*/ -TON_fnc_clientMessage = -compileFinal " - if (isServer) exitWith {}; - private [""_msg"",""_from"", ""_type""]; - _msg = _this select 0; - _from = _this select 1; - _type = _this select 2; - if (_from isEqualTo """") exitWith {}; - switch (_type) do { - case 0 : { - private [""_message""]; - _message = format ["">>>MESSAGE FROM %1: %2"",_from,_msg]; - hint parseText format [""New Message

To: You
From: %1

Message:
%2"",_from,_msg]; - - [""TextMessage"",[format [""You Received A New Private Message From %1"",_from]]] call bis_fnc_showNotification; - systemChat _message; - }; - - case 1 : { - if (side player != west) exitWith {}; - private [""_message"",""_loc"",""_unit""]; - _loc = _this select 3; - _unit = _this select 4; - _message = format [""--- 911 DISPATCH FROM %1: %2"",_from,_msg]; - if (isNil ""_loc"") then {_loc = ""Unknown"";}; - hint parseText format [""New Dispatch

To: All Officers
From: %1
Coords: %2

Message:
%3"",_from,_loc,_msg]; - - [""PoliceDispatch"",[format [""A New Police Report From: %1"",_from]]] call bis_fnc_showNotification; - systemChat _message; - }; - - case 2 : { - if ((call life_adminlevel) < 1) exitWith {}; - private [""_message"",""_loc"",""_unit""]; - _loc = _this select 3; - _unit = _this select 4; - _message = format [""!!! ADMIN REQUEST FROM %1: %2"",_from,_msg]; - if (isNil ""_loc"") then {_loc = ""Unknown"";}; - hint parseText format [""Admin Request

To: Admins
From: %1
Coords: %2

Message:
%3"",_from,_loc,_msg]; - - [""AdminDispatch"",[format [""%1 Has Requested An Admin!"",_from]]] call bis_fnc_showNotification; - systemChat _message; - }; - - case 3 : { - private [""_message""]; - _message = format [""!!! ADMIN MESSAGE: %1"",_msg]; - _admin = format [""Sent by admin: %1"", _from]; - hint parseText format [""Admin Message

To: You
From: An Admin

Message:
%1"",_msg]; - - [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification; - systemChat _message; - if ((call life_adminlevel) > 0) then {systemChat _admin;}; - }; - - case 4 : { - private [""_message"",""_admin""]; - _message = format [""!!!ADMIN MESSAGE: %1"",_msg]; - _admin = format [""Sent by admin: %1"", _from]; - hint parseText format [""Admin Message

To: All Players
From: The Admins

Message:
%1"",_msg]; - - [""AdminMessage"",[""You Have Received A Message From An Admin!""]] call bis_fnc_showNotification; - systemChat _message; - if ((call life_adminlevel) > 0) then {systemChat _admin;}; - }; - - case 5: { - if (side player != independent) exitWith {}; - private [""_message"",""_loc"",""_unit""]; - _loc = _this select 3; - _unit = _this select 4; - _message = format [""!!! EMS REQUEST: %1"",_msg]; - hint parseText format [""EMS Request

To: You
From: %1
Coords: %2

Message:
%3"",_from,_loc,_msg]; - - [""TextMessage"",[format [""EMS Request from %1"",_from]]] call bis_fnc_showNotification; - }; - }; -"; -publicVariable "TON_fnc_clientMessage"; diff --git a/life_server/init.sqf b/life_server/init.sqf index dbef9d0c1..7a2a63262 100644 --- a/life_server/init.sqf +++ b/life_server/init.sqf @@ -141,7 +141,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"; /* Set OwnerID players for Headless Client */ TON_fnc_requestClientID = @@ -169,10 +168,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 6a68df317a0563e643082136594777220c79f6ff Mon Sep 17 00:00:00 2001 From: Blackfisch Date: Mon, 20 Apr 2020 21:41:38 +0200 Subject: [PATCH 31/33] SpyGlass Patch Update Old Man Update (#649) * SpyGlass Patch Update Old Man Update * add missing semicolon --- Altis_Life.Altis/SpyGlass/fn_initSpy.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf b/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf index 99b869c34..520ddc923 100644 --- a/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf +++ b/Altis_Life.Altis/SpyGlass/fn_initSpy.sqf @@ -58,7 +58,7 @@ CONST(JJJJ_MMMM___EEEEEEE_SPAWN_WEAPON,"false"); */ // Last updated vers. 5.0.0 -private _patchList = ["Core","A3Data","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Dubbing_F","A3_Dubbing_F_Beta","A3_Dubbing_F_Gamma","A3_Dubbing_Radio_F","A3_Dubbing_Radio_F_Data_ENG","A3_Dubbing_Radio_F_Data_ENGB","A3_Dubbing_Radio_F_Data_GRE","A3_Dubbing_Radio_F_Data_PER","A3_Dubbing_Radio_F_Data_VR","A3_Editor_F","A3_EditorPreviews_F","A3_Functions_F_Curator","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Gamma","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_Data","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_Hc","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_Uav","A3_Modules_F_Beta","A3_Modules_F_Beta_Data","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Music_F","A3_Music_F_Music","A3_Music_F_EPA","A3_Music_F_EPA_Music","A3_Music_F_EPB","A3_Music_F_EPB_Music","A3_Music_F_EPC","A3_Music_F_EPC_Music","A3_Plants_F","A3_Roads_F","A3_Rocks_F","A3_Rocks_F_Blunt","A3_Rocks_F_Sharp","A3_Rocks_F_Water","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Data","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Food","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_EPA","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_Playground","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_UiFonts_F","A3_Animals_F","A3_Animals_F_Animconfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Beta","A3_Animals_F_Beta_Chicken","A3_Animals_F_Beta_Dog","A3_Animals_F_Beta_Goat","A3_Animals_F_Beta_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_Config_Sdr_WeaponSwitching","A3_Anims_F_Data","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Dubbing_F_EPA","A3_Dubbing_F_EPB","A3_Dubbing_F_EPC","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_LanguageMissions_F_EPA","A3_LanguageMissions_F_EPB","A3_LanguageMissions_F_EPC","A3_Map_Data","A3_Map_Data_Exp","A3_Map_Stratis","A3_Map_Stratis_Data","A3_Map_Stratis_Data_Layers","A3_Map_Stratis_Scenes_F","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_Signs_Ad","A3_Structures_F_Signs_Companies","A3_Ui_F","A3_Ui_F_Data","A3_Ui_F_Curator","A3_Weapons_F","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_RPG32","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_LongRangeRifles_DMR_01","A3_Weapons_F_LongRangeRifles_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_Heavy_01","A3_Weapons_F_Pistols_Pistol_Heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_MK20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_SMGs_Pdw2000","A3_Weapons_F_SMGs_SMG_01","A3_Weapons_F_SMGs_SMG_02","A3_Weapons_F_Beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_Beta_LongRangeRifles_EBR","A3_Weapons_F_Beta_LongRangeRifles_GM6","A3_Weapons_F_Beta_LongRangeRifles_M320","A3_Weapons_F_Beta_Rifles_Khaybar","A3_Weapons_F_Beta_Rifles_MX","A3_Weapons_F_Beta_Rifles_TRG20","A3_Weapons_F_Gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_Gamma_LongRangeRifles_EBR","A3_Weapons_F_Gamma_Rifles_MX","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_Beta_INDEP","A3_Characters_F_Gamma","A3_Map_Altis","A3_Map_Altis_Data","A3_Map_Altis_Data_Layers","A3_Map_Altis_Scenes_F","A3_Missions_F","A3_Missions_F_Data","A3_Missions_F_Video","A3_Missions_F_Beta","A3_Missions_F_Beta_Data","A3_Missions_F_Beta_Video","A3_Missions_F_Gamma","A3_Missions_F_Gamma_Data","A3_Missions_F_Gamma_Video","A3_Sounds_F","A3_Sounds_F_Arsenal","A3_Sounds_F_Characters","A3_Sounds_F_Environment","A3_Sounds_F_Sfx","A3_Sounds_F_Vehicles","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPB_LongRangeRifles_GM6","A3_Weapons_F_EPC","A3_Weapons_F_Gamma_Acc","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_Gamma","A3_Air_F_Gamma_Plane_Fighter_03","A3_Armor_F","A3_Armor_F_Beta","A3_Armor_F_Beta_APC_Tracked_01","A3_Armor_F_Beta_APC_Tracked_02","A3_Armor_F_Gamma","A3_Armor_F_Gamma_MBT_01","A3_Armor_F_Gamma_MBT_02","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_Beta_SDV_01","A3_Boat_F_Gamma","A3_Boat_F_Gamma_Boat_Civil_01","A3_Boat_F_Gamma_Boat_Civil_04","A3_Boat_F_Gamma_Boat_Transport_01","A3_Characters_F_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPB_Heads","A3_Characters_F_EPC","A3_Missions_F_EPA","A3_Missions_F_EPA_Data","A3_Missions_F_EPA_Video","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike_01","A3_Soft_F_Beta","A3_Soft_F_Beta_MRAP_03","A3_Soft_F_Beta_Quadbike_01","A3_Soft_F_Beta_Truck_01","A3_Soft_F_Beta_Truck_02","A3_Soft_F_Gamma","A3_Soft_F_Gamma_Hatchback_01","A3_Soft_F_Gamma_Offroad_01","A3_Soft_F_Gamma_Quadbike_01","A3_Soft_F_Gamma_SUV_01","A3_Soft_F_Gamma_Truck_01","A3_Soft_F_Gamma_Truck_02","A3_Soft_F_Gamma_Van_01","A3_Static_F_AA_01","A3_Static_F_AT_01","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Air_F_EPB","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_Beta_APC_Wheeled_01","A3_Armor_F_Beta_APC_Wheeled_02","A3_Armor_F_EPB","A3_Armor_F_EPB_APC_Tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_EPC","A3_Armor_F_EPC_MBT_01","A3_Armor_F_Gamma_APC_Wheeled_03","A3_Boat_F_EPC","A3_Boat_F_EPC_Submarine_01","A3_Cargoposes_F","A3_Drones_F","A3_Drones_F_Air_F_Gamma_UAV_01","A3_Drones_F_Air_F_Gamma_UAV_02","A3_Drones_F_Characters_F_Gamma","A3_Drones_F_Soft_F_Gamma_UGV_01","A3_Drones_F_Weapons_F_Gamma_Ammoboxes","A3_Drones_F_Weapons_F_Gamma_Items","A3_Soft_F_EPC","A3_Soft_F_EPC_Truck_03","A3_Data_F_Loadorder","A3_Data_F_Curator","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Music","A3_Data_F_Curator_Respawn","A3_Data_F_Curator_Virtual","A3_Language_F_Curator","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_SmokeShells","A3_Missions_F_Curator","A3_Modules_F_Curator_Chemlights","A3_Data_F_Curator_Loadorder","A3_Data_F_Kart","A3_Data_F_Kart_ParticleEffects","A3_Language_F_Kart","A3_LanguageMissions_F_Kart","A3_Missions_F_Kart","A3_Missions_F_Kart_Data","A3_Modules_F_Kart","A3_Modules_F_Kart_Data","A3_Modules_F_Kart_TimeTrials","A3_Soft_F_Kart","A3_Soft_F_Kart_Kart_01","A3_Sounds_F_Kart","A3_Structures_F_Kart","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Kart_Signs_Companies","A3_Ui_F_Kart","A3_Weapons_F_Kart","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Anims_F_Kart","A3_Characters_F_Kart","A3_Data_F_Kart_Loadorder","A3_Data_F_Bootcamp","A3_Dubbing_F_Bootcamp","A3_Functions_F_Bootcamp","A3_Language_F_Bootcamp","A3_LanguageMissions_F_Bootcamp","A3_Map_VR","A3_Map_VR_Scenes_F","A3_Missions_F_Bootcamp","A3_Missions_F_Bootcamp_Data","A3_Missions_F_Bootcamp_Video","A3_Modules_F_Bootcamp","A3_Modules_F_Bootcamp_Misc","A3_Music_F_Bootcamp","A3_Music_F_Bootcamp_Music","A3_Soft_F_Bootcamp","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike_01","A3_Soft_F_Bootcamp_Van_01","A3_Sounds_F_Bootcamp","A3_Structures_F_Bootcamp","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Ui_F_Bootcamp","A3_Weapons_F_Bootcamp","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6_Camo","A3_Weapons_F_Bootcamp_LongRangeRifles_M320_Camo","A3_Anims_F_Bootcamp","A3_Characters_F_Bootcamp","A3_Characters_F_Bootcamp_Common","A3_Data_F_Bootcamp_Loadorder","A3_Data_F_Heli","A3_Dubbing_F_Heli","A3_Functions_F_Heli","A3_Language_F_Heli","A3_LanguageMissions_F_Heli","A3_Missions_F_Heli","A3_Missions_F_Heli_Data","A3_Missions_F_Heli_Video","A3_Modules_F_Heli","A3_Modules_F_Heli_Misc","A3_Music_F_Heli","A3_Music_F_Heli_Music","A3_Soft_F_Heli","A3_Soft_F_Heli_Hatchback_01","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike_01","A3_Soft_F_Heli_SUV_01","A3_Soft_F_Heli_UGV_01","A3_Soft_F_Heli_Van_01","A3_Sounds_F_Heli","A3_Structures_F_Heli","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_Airport","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Ui_F_Heli","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Anims_F_Heli","A3_Boat_F_Heli","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Cargoposes_F_Heli","A3_Data_F_Heli_Loadorder","A3_Data_F_Mark","A3_Dubbing_F_Mark","A3_Dubbing_F_MP_Mark","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F_Mark","A3_Language_F_MP_Mark","A3_LanguageMissions_F_Mark","A3_LanguageMissions_F_MP_Mark","A3_Missions_F_Mark","A3_Missions_F_Mark_Data","A3_Missions_F_Mark_Video","A3_Missions_F_MP_Mark","A3_Missions_F_MP_Mark_Data","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_MP_Mark_Objectives","A3_Music_F_Mark","A3_Music_F_Mark_Music","A3_Sounds_F_Mark","A3_Static_F_Mark","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Structures_F_Mark","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_Supplies_F_Mark","A3_Ui_F_Mark","A3_Ui_F_MP_Mark","A3_Weapons_F_Mark","A3_Weapons_F_Mark_Acc","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_LongRangeRifles_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_Camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_Camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_MK20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","A3_Anims_F_Mark","A3_Anims_F_Mark_Deployment","A3_Characters_F_Mark","A3_Data_F_Mark_Loadorder","A3_Data_F_Exp_A","A3_Functions_F_Exp_A","A3_Language_F_Exp_A","A3_LanguageMissions_F_Exp_A","A3_Missions_F_Exp_A","A3_Missions_F_Exp_A_Data","A3_Modules_F_Exp_A","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Props_F_Exp_A_Military_Equipment","A3_Sounds_F_Exp_A","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Ui_F_Exp_A","A3_Anims_F_Exp_A","A3_Data_F_Exp_A_Virtual","A3_Data_F_Exp_A_Loadorder","A3_Data_F_Exp_B","A3_Language_F_Exp_B","A3_3DEN","A3_3DEN_Language","A3_BaseConfig_F","3DEN","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Armor_F_Panther","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_APC_Wheeled_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Characters_F_INDEP","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_UAV_F_Characters_F_Gamma","A3_Soft_F_Crusher_UGV","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis_Scenes","A3_Map_Stratis_Scenes","Map_VR","A3_Map_VR_Scenes","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark_Objectives","A3_Signs_F_AD","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Crusher_UGV","A3_Soft_F_Heli_Truck","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Items_Cans","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Mark_EBR","CuratorOnly_Air_F_Beta_Heli_Attack_01","CuratorOnly_Air_F_Beta_Heli_Attack_02","CuratorOnly_Air_F_Gamma_UAV_01","CuratorOnly_Armor_F_AMV","CuratorOnly_armor_f_beta_APC_Tracked_02","CuratorOnly_Armor_F_Marid","CuratorOnly_Armor_F_Panther","CuratorOnly_Armor_F_Slammer","CuratorOnly_Armor_F_T100K","CuratorOnly_Boat_F_Boat_Armed_01","CuratorOnly_Characters_F_BLUFOR","CuratorOnly_Characters_F_Common","CuratorOnly_Characters_F_OPFOR","CuratorOnly_Modules_F_Curator_Animals","CuratorOnly_Modules_F_Curator_Chemlights","CuratorOnly_Modules_F_Curator_Effects","CuratorOnly_Modules_F_Curator_Environment","CuratorOnly_Modules_F_Curator_Flares","CuratorOnly_Modules_F_Curator_Lightning","CuratorOnly_Modules_F_Curator_Mines","CuratorOnly_Modules_F_Curator_Objectives","CuratorOnly_Modules_F_Curator_Ordnance","CuratorOnly_Modules_F_Curator_Smokeshells","CuratorOnly_Signs_F","CuratorOnly_Soft_F_Crusher_UGV","CuratorOnly_Soft_F_MRAP_01","CuratorOnly_Soft_F_MRAP_02","CuratorOnly_Soft_F_Quadbike","CuratorOnly_Static_F_Gamma","CuratorOnly_Static_F_Mortar_01","CuratorOnly_Structures_F_Civ_Ancient","CuratorOnly_Structures_F_Civ_Camping","CuratorOnly_Structures_F_Civ_Garbage","CuratorOnly_Structures_F_EPA_Civ_Constructions","CuratorOnly_Structures_F_EPB_Civ_Dead","CuratorOnly_Structures_F_Ind_Cargo","CuratorOnly_Structures_F_Ind_Crane","CuratorOnly_Structures_F_Ind_ReservoirTank","CuratorOnly_Structures_F_Ind_Transmitter_Tower","CuratorOnly_Structures_F_Items_Vessels","CuratorOnly_Structures_F_Mil_BagBunker","CuratorOnly_Structures_F_Mil_BagFence","CuratorOnly_Structures_F_Mil_Cargo","CuratorOnly_Structures_F_Mil_Fortification","CuratorOnly_Structures_F_Mil_Radar","CuratorOnly_Structures_F_Mil_Shelters","CuratorOnly_Structures_F_Research","CuratorOnly_Structures_F_Walls","CuratorOnly_Structures_F_Wrecks","A3_Data_F_Exp_B_Loadorder","A3_Data_F_Mod","A3_Language_F_Mod","A3_Sounds_F_Mod","A3_Weapons_F_Mod","A3_Weapons_F_Mod_SMGs_SMG_03","A3_Anims_F_Mod","A3_Data_F_Exp","A3_Data_F_Exp_ParticleEffects","A3_Data_F_Mod_Loadorder","A3_Dubbing_F_Exp","A3_Dubbing_Radio_F_EXP","A3_Dubbing_Radio_F_EXP_Data_CHI","A3_Dubbing_Radio_F_EXP_Data_ENGFRE","A3_Dubbing_Radio_F_EXP_Data_FRE","A3_EditorPreviews_F_Exp","A3_Functions_F_Exp","A3_Language_F_Exp","A3_LanguageMissions_F_Exp","A3_Missions_F_Exp","A3_Missions_F_Exp_Data","A3_Missions_F_Exp_Video","A3_Modules_F_Exp","A3_Music_F_Exp","A3_Music_F_Exp_Music","A3_Props_F_Exp","A3_Props_F_Exp_Civilian","A3_Props_F_Exp_Civilian_Garbage","A3_Props_F_Exp_Commercial","A3_Props_F_Exp_Commercial_Market","A3_Props_F_Exp_Industrial","A3_Props_F_Exp_Industrial_HeavyEquipment","A3_Props_F_Exp_Infrastructure","A3_Props_F_Exp_Infrastructure_Railways","A3_Props_F_Exp_Infrastructure_Traffic","A3_Props_F_Exp_Military","A3_Props_F_Exp_Military_Camps","A3_Props_F_Exp_Military_OldPlaneWrecks","A3_Props_F_Exp_Naval","A3_Props_F_Exp_Naval_Boats","A3_Rocks_F_Exp","A3_Rocks_F_Exp_Cliff","A3_Rocks_F_Exp_LavaStones","A3_Soft_F_Exp","A3_Soft_F_Exp_LSV_01","A3_Soft_F_Exp_LSV_02","A3_Soft_F_Exp_MRAP_01","A3_Soft_F_Exp_MRAP_02","A3_Soft_F_Exp_Offroad_01","A3_Soft_F_Exp_Offroad_02","A3_Soft_F_Exp_Quadbike_01","A3_Soft_F_Exp_Truck_01","A3_Soft_F_Exp_Truck_02","A3_Soft_F_Exp_Truck_03","A3_Soft_F_Exp_UGV_01","A3_Soft_F_Exp_Van_01","A3_Static_F_Exp","A3_Static_F_Exp_AA_01","A3_Static_F_Exp_AT_01","A3_Static_F_Exp_GMG_01","A3_Static_F_Exp_HMG_01","A3_Static_F_Exp_Mortar_01","A3_Structures_F_Exp","A3_Structures_F_Exp_Civilian","A3_Structures_F_Exp_Civilian_Accessories","A3_Structures_F_Exp_Civilian_Garages","A3_Structures_F_Exp_Civilian_House_Big_01","A3_Structures_F_Exp_Civilian_House_Big_02","A3_Structures_F_Exp_Civilian_House_Big_03","A3_Structures_F_Exp_Civilian_House_Big_04","A3_Structures_F_Exp_Civilian_House_Big_05","A3_Structures_F_Exp_Civilian_House_Native_01","A3_Structures_F_Exp_Civilian_House_Native_02","A3_Structures_F_Exp_Civilian_House_Small_01","A3_Structures_F_Exp_Civilian_House_Small_02","A3_Structures_F_Exp_Civilian_House_Small_03","A3_Structures_F_Exp_Civilian_House_Small_04","A3_Structures_F_Exp_Civilian_House_Small_05","A3_Structures_F_Exp_Civilian_House_Small_06","A3_Structures_F_Exp_Civilian_School_01","A3_Structures_F_Exp_Civilian_Sheds","A3_Structures_F_Exp_Civilian_Slum_01","A3_Structures_F_Exp_Civilian_Slum_02","A3_Structures_F_Exp_Civilian_Slum_03","A3_Structures_F_Exp_Civilian_Slum_04","A3_Structures_F_Exp_Civilian_Slum_05","A3_Structures_F_Exp_Civilian_SportsGrounds","A3_Structures_F_Exp_Commercial","A3_Structures_F_Exp_Commercial_Addons","A3_Structures_F_Exp_Commercial_Advertisements","A3_Structures_F_Exp_Commercial_FuelStation_01","A3_Structures_F_Exp_Commercial_FuelStation_02","A3_Structures_F_Exp_Commercial_Hotel_01","A3_Structures_F_Exp_Commercial_Hotel_02","A3_Structures_F_Exp_Commercial_Market","A3_Structures_F_Exp_Commercial_MultistoryBuilding_01","A3_Structures_F_Exp_Commercial_MultistoryBuilding_03","A3_Structures_F_Exp_Commercial_MultistoryBuilding_04","A3_Structures_F_Exp_Commercial_Shop_City_01","A3_Structures_F_Exp_Commercial_Shop_City_02","A3_Structures_F_Exp_Commercial_Shop_City_03","A3_Structures_F_Exp_Commercial_Shop_City_04","A3_Structures_F_Exp_Commercial_Shop_City_05","A3_Structures_F_Exp_Commercial_Shop_City_06","A3_Structures_F_Exp_Commercial_Shop_City_07","A3_Structures_F_Exp_Commercial_Shop_Town_01","A3_Structures_F_Exp_Commercial_Shop_Town_02","A3_Structures_F_Exp_Commercial_Shop_Town_03","A3_Structures_F_Exp_Commercial_Shop_Town_04","A3_Structures_F_Exp_Commercial_Shop_Town_05","A3_Structures_F_Exp_Commercial_Supermarket_01","A3_Structures_F_Exp_Commercial_Warehouses","A3_Structures_F_Exp_Cultural","A3_Structures_F_Exp_Cultural_AncientRelics","A3_Structures_F_Exp_Cultural_BasaltRuins","A3_Structures_F_Exp_Cultural_Cathedral_01","A3_Structures_F_Exp_Cultural_Cemeteries","A3_Structures_F_Exp_Cultural_Church_01","A3_Structures_F_Exp_Cultural_Church_02","A3_Structures_F_Exp_Cultural_Church_03","A3_Structures_F_Exp_Cultural_Fortress_01","A3_Structures_F_Exp_Cultural_Temple_Native_01","A3_Structures_F_Exp_Cultural_Totems","A3_Structures_F_Exp_Data","A3_Structures_F_Exp_Industrial","A3_Structures_F_Exp_Industrial_DieselPowerPlant_01","A3_Structures_F_Exp_Industrial_Fields","A3_Structures_F_Exp_Industrial_Materials","A3_Structures_F_Exp_Industrial_Port","A3_Structures_F_Exp_Industrial_Stockyard_01","A3_Structures_F_Exp_Industrial_SugarCaneFactory_01","A3_Structures_F_Exp_Industrial_SurfaceMine_01","A3_Structures_F_Exp_Infrastructure","A3_Structures_F_Exp_Infrastructure_Airports","A3_Structures_F_Exp_Infrastructure_Bridges","A3_Structures_F_Exp_Infrastructure_Pavements","A3_Structures_F_Exp_Infrastructure_Powerlines","A3_Structures_F_Exp_Infrastructure_Railways","A3_Structures_F_Exp_Infrastructure_Roads","A3_Structures_F_Exp_Infrastructure_Runways","A3_Structures_F_Exp_Infrastructure_WaterSupply","A3_Structures_F_Exp_Military","A3_Structures_F_Exp_Military_Barracks_01","A3_Structures_F_Exp_Military_Camonets","A3_Structures_F_Exp_Military_ContainerBases","A3_Structures_F_Exp_Military_Emplacements","A3_Structures_F_Exp_Military_Flags","A3_Structures_F_Exp_Military_Fortifications","A3_Structures_F_Exp_Military_Pillboxes","A3_Structures_F_Exp_Military_Trenches","A3_Structures_F_Exp_Naval","A3_Structures_F_Exp_Naval_Canals","A3_Structures_F_Exp_Naval_Piers","A3_Structures_F_Exp_Signs","A3_Structures_F_Exp_Signs_Companies","A3_Structures_F_Exp_Signs_Traffic","A3_Structures_F_Exp_Walls","A3_Structures_F_Exp_Walls_BackAlleys","A3_Structures_F_Exp_Walls_Bamboo","A3_Structures_F_Exp_Walls_Concrete","A3_Structures_F_Exp_Walls_Crashbarriers","A3_Structures_F_Exp_Walls_Hedges","A3_Structures_F_Exp_Walls_Net","A3_Structures_F_Exp_Walls_Pipe","A3_Structures_F_Exp_Walls_Polewalls","A3_Structures_F_Exp_Walls_Railings","A3_Structures_F_Exp_Walls_Slum","A3_Structures_F_Exp_Walls_Stone","A3_Structures_F_Exp_Walls_Tin","A3_Structures_F_Exp_Walls_Wired","A3_Structures_F_Exp_Walls_Wooden","A3_Supplies_F_Exp","A3_Supplies_F_Exp_Ammoboxes","A3_Ui_F_Exp","A3_Vegetation_F_Exp","A3_Weapons_F_Exp","A3_Weapons_F_Exp_Launchers_RPG32","A3_Weapons_F_Exp_Launchers_RPG7","A3_Weapons_F_Exp_Launchers_Titan","A3_Weapons_F_Exp_LongRangeRifles_DMR_07","A3_Weapons_F_Exp_Machineguns_LMG_03","A3_Weapons_F_Exp_Pistols_Pistol_01","A3_Weapons_F_Exp_Rifles_AK12","A3_Weapons_F_Exp_Rifles_AKM","A3_Weapons_F_Exp_Rifles_AKS","A3_Weapons_F_Exp_Rifles_ARX","A3_Weapons_F_Exp_Rifles_CTAR","A3_Weapons_F_Exp_Rifles_CTARS","A3_Weapons_F_Exp_Rifles_SPAR_01","A3_Weapons_F_Exp_Rifles_SPAR_02","A3_Weapons_F_Exp_Rifles_SPAR_03","A3_Weapons_F_Exp_SMGs_SMG_05","A3_Air_F_Exp","A3_Air_F_Exp_Heli_Light_01","A3_Air_F_Exp_Heli_Transport_01","A3_Air_F_Exp_Plane_Civil_01","A3_Air_F_Exp_UAV_03","A3_Air_F_Exp_UAV_04","A3_Air_F_Exp_VTOL_01","A3_Air_F_Exp_VTOL_02","A3_Anims_F_Exp","A3_Anims_F_Exp_Revive","A3_Armor_F_Exp","A3_Armor_F_Exp_APC_Tracked_01","A3_Armor_F_Exp_APC_Tracked_02","A3_Armor_F_Exp_APC_Wheeled_01","A3_Armor_F_Exp_APC_Wheeled_02","A3_Armor_F_Exp_MBT_01","A3_Armor_F_Exp_MBT_02","A3_Boat_F_Exp","A3_Boat_F_Exp_Boat_Armed_01","A3_Boat_F_Exp_Boat_Transport_01","A3_Boat_F_Exp_Boat_Transport_02","A3_Boat_F_Exp_Scooter_Transport_01","A3_Cargoposes_F_Exp","A3_Characters_F_Exp","A3_Characters_F_Exp_Civil","A3_Characters_F_Exp_Headgear","A3_Characters_F_Exp_Vests","A3_Sounds_F_Exp","A3_Data_F_Exp_Loadorder","A3_Data_F_Jets","A3_Dubbing_F_Jets","A3_EditorPreviews_F_Jets","A3_Functions_F_Destroyer","A3_Functions_F_Jets","A3_Language_F_Jets","A3_LanguageMissions_F_Jets","A3_Modules_F_Jets","A3_Music_F_Jets","A3_Props_F_Jets","A3_Props_F_Jets_Military_Tractor","A3_Props_F_Jets_Military_Trolley","A3_Sounds_F_Jets","A3_Static_F_Jets","A3_Static_F_Jets_AAA_System_01","A3_Static_F_Jets_SAM_System_01","A3_Static_F_Jets_SAM_System_02","A3_Ui_F_Jets","A3_Weapons_F_Jets","A3_Air_F_Jets","A3_Air_F_Jets_Plane_Fighter_01","A3_Air_F_Jets_Plane_Fighter_02","A3_Air_F_Jets_Plane_Fighter_04","A3_Air_F_Jets_UAV_05","A3_Anims_F_Jets","A3_Boat_F_Jets","A3_Boat_F_Jets_Carrier_01","A3_Cargoposes_F_Jets","A3_Characters_F_Jets","A3_Characters_F_Jets_Vests","A3_Missions_F_Jets","A3_Boat_F_Destroyer","A3_Boat_F_Destroyer_Destroyer_01","A3_Data_F_Jets_Loadorder","A3_Data_F_Argo","A3_EditorPreviews_F_Argo","A3_Language_F_Argo","A3_Map_Malden","A3_Map_Malden_Data","A3_Map_Malden_Data_Layers","A3_Map_Malden_Scenes_F","A3_Music_F_Argo","A3_Props_F_Argo","A3_Props_F_Argo_Civilian","A3_Props_F_Argo_Civilian_InfoBoards","A3_Props_F_Argo_Items","A3_Props_F_Argo_Items_Documents","A3_Props_F_Argo_Items_Electronics","A3_Rocks_F_Argo","A3_Rocks_F_Argo_Limestone","A3_Structures_F_Argo","A3_Structures_F_Argo_Civilian","A3_Structures_F_Argo_Civilian_Accessories","A3_Structures_F_Argo_Civilian_Addons","A3_Structures_F_Argo_Civilian_Garbage","A3_Structures_F_Argo_Civilian_House_Big01","A3_Structures_F_Argo_Civilian_House_Big02","A3_Structures_F_Argo_Civilian_House_Small01","A3_Structures_F_Argo_Civilian_House_Small02","A3_Structures_F_Argo_Civilian_Stone_House_Big_01","A3_Structures_F_Argo_Civilian_Stone_Shed_01","A3_Structures_F_Argo_Civilian_Unfinished_Building_01","A3_Structures_F_Argo_Commercial","A3_Structures_F_Argo_Commercial_Accessories","A3_Structures_F_Argo_Commercial_Billboards","A3_Structures_F_Argo_Commercial_FuelStation_01","A3_Structures_F_Argo_Commercial_Shop_02","A3_Structures_F_Argo_Commercial_Supermarket_01","A3_Structures_F_Argo_Cultural","A3_Structures_F_Argo_Cultural_Church","A3_Structures_F_Argo_Cultural_Statues","A3_Structures_F_Argo_Decals","A3_Structures_F_Argo_Decals_Horizontal","A3_Structures_F_Argo_Industrial","A3_Structures_F_Argo_Industrial_Agriculture","A3_Structures_F_Argo_Industrial_Materials","A3_Structures_F_Argo_Infrastructure","A3_Structures_F_Argo_Infrastructure_Runways","A3_Structures_F_Argo_Infrastructure_Seaports","A3_Structures_F_Argo_Infrastructure_WaterSupply","A3_Structures_F_Argo_Military","A3_Structures_F_Argo_Military_Bunkers","A3_Structures_F_Argo_Military_ContainerBases","A3_Structures_F_Argo_Military_Domes","A3_Structures_F_Argo_Military_Fortifications","A3_Structures_F_Argo_Military_Turrets","A3_Structures_F_Argo_Signs","A3_Structures_F_Argo_Signs_City","A3_Structures_F_Argo_Signs_Directions","A3_Structures_F_Argo_Signs_Warnings","A3_Structures_F_Argo_Walls","A3_Structures_F_Argo_Walls_City","A3_Structures_F_Argo_Walls_Concrete","A3_Structures_F_Argo_Walls_Military","A3_Structures_F_Argo_Walls_Net","A3_Structures_F_Argo_Walls_Pipe","A3_Structures_F_Argo_Walls_Tin","A3_Structures_F_Argo_Walls_Wooden","A3_Structures_F_Argo_Wrecks","A3_Vegetation_F_Argo","A3_Armor_F_Argo","A3_Armor_F_Argo_APC_Tracked_01","A3_Armor_F_Argo_APC_Wheeled_02","A3_Data_F_Argo_Loadorder","A3_Data_F_Patrol","A3_Functions_F_Patrol","A3_Language_F_Patrol","A3_LanguageMissions_F_Patrol","A3_Map_Tanoabuka","A3_Map_Tanoabuka_Data","A3_Map_Tanoabuka_Data_Layers","A3_Modules_F_Patrol","A3_Sounds_F_Patrol","A3_Ui_F_Patrol","A3_Weapons_F_Patrol","A3_Characters_F_Patrol","A3_Map_Tanoa_Scenes_F","A3_Missions_F_Patrol","A3_Data_F_Patrol_Loadorder","A3_Data_F_Orange","A3_Dubbing_F_Orange","A3_EditorPreviews_F_Orange","A3_Functions_F_Orange","A3_Language_F_Orange","A3_LanguageMissions_F_Orange","A3_Missions_F_Orange","A3_Modules_F_Orange","A3_Music_F_Orange","A3_Props_F_Orange","A3_Props_F_Orange_Civilian","A3_Props_F_Orange_Civilian_Constructions","A3_Props_F_Orange_Civilian_InfoBoards","A3_Props_F_Orange_Furniture","A3_Props_F_Orange_Humanitarian","A3_Props_F_Orange_Humanitarian_Camps","A3_Props_F_Orange_Humanitarian_Garbage","A3_Props_F_Orange_Humanitarian_Supplies","A3_Props_F_Orange_Items","A3_Props_F_Orange_Items_Decorative","A3_Props_F_Orange_Items_Documents","A3_Props_F_Orange_Items_Electronics","A3_Props_F_Orange_Items_Tools","A3_Soft_F_Orange","A3_Soft_F_Orange_Offroad_01","A3_Soft_F_Orange_Offroad_02","A3_Soft_F_Orange_Truck_02","A3_Soft_F_Orange_UGV_01","A3_Soft_F_Orange_Van_02","A3_Structures_F_Orange","A3_Structures_F_Orange_Humanitarian","A3_Structures_F_Orange_Humanitarian_Camps","A3_Structures_F_Orange_Humanitarian_Flags","A3_Structures_F_Orange_Industrial","A3_Structures_F_Orange_Industrial_Cargo","A3_Structures_F_Orange_Signs","A3_Structures_F_Orange_Signs_Mines","A3_Structures_F_Orange_Signs_Special","A3_Structures_F_Orange_VR_Helpers","A3_Structures_F_Orange_Walls","A3_Structures_F_Orange_Walls_Plastic","A3_Supplies_F_Orange","A3_Supplies_F_Orange_Ammoboxes","A3_Supplies_F_Orange_Bags","A3_Supplies_F_Orange_CargoNets","A3_Ui_F_Orange","A3_Weapons_F_Orange","A3_Weapons_F_Orange_Explosives","A3_Weapons_F_Orange_Items","A3_Air_F_Orange","A3_Air_F_Orange_Heli_Transport_02","A3_Air_F_Orange_UAV_01","A3_Air_F_Orange_UAV_06","A3_Cargoposes_F_Orange","A3_Characters_F_Orange","A3_Characters_F_Orange_Facewear","A3_Characters_F_Orange_Headgear","A3_Characters_F_Orange_Uniforms","A3_Characters_F_Orange_Vests","A3_Sounds_F_Orange","A3_Data_F_Orange_Loadorder","A3_Data_F_Tacops","A3_Dubbing_F_Tacops","A3_Functions_F_Tacops","A3_Language_F_Tacops","A3_LanguageMissions_F_Tacops","A3_Missions_F_Tacops","A3_Modules_F_Tacops","A3_Music_F_Tacops","A3_Sounds_F_Tacops","A3_Ui_F_Tacops","A3_Characters_F_Tacops","A3_Data_F_Tacops_Loadorder","A3_Data_F_Tank","A3_Dubbing_F_Tank","A3_EditorPreviews_F_Tank","A3_Functions_F_Tank","A3_Language_F_Tank","A3_Language_F_Warlords","A3_LanguageMissions_F_Tank","A3_Missions_F_Tank","A3_Modules_F_Tank","A3_Music_F_Tank","A3_Props_F_Tank","A3_Props_F_Tank_Military","A3_Props_F_Tank_Military_TankAcc","A3_Props_F_Tank_Military_Wrecks","A3_Sounds_F_Tank","A3_Structures_F_Tank","A3_Structures_F_Tank_Decals","A3_Structures_F_Tank_Decals_Horizontal","A3_Structures_F_Tank_Military","A3_Structures_F_Tank_Military_Fortifications","A3_Structures_F_Tank_Military_RepairDepot","A3_Ui_F_Tank","A3_Weapons_F_Tank","A3_Weapons_F_Tank_Bags","A3_Weapons_F_Tank_Launchers_MRAWS","A3_Weapons_F_Tank_Launchers_Vorona","A3_Armor_F_Tank","A3_Armor_F_Tank_AFV_Wheeled_01","A3_Armor_F_Tank_LT_01","A3_Armor_F_Tank_MBT_04","A3_Cargoposes_F_Tank","A3_Characters_F_Tank","A3_Characters_F_Tank_Headgear","A3_Characters_F_Tank_Uniforms","A3_Data_F_Tank_Loadorder","A3_Data_F_Destroyer","A3_Data_F_Sams","A3_Data_F_Warlords","A3_Dubbing_F_Warlords","A3_EditorPreviews_F_Destroyer","A3_EditorPreviews_F_Sams","A3_Functions_F_Warlords","A3_Language_F_Destroyer","A3_Language_F_Sams","A3_Missions_F_Warlords","A3_Missions_F_Warlords_Data","A3_Modules_F_Warlords","A3_Props_F_Destroyer","A3_Props_F_Destroyer_Military_BriefingRoomDesk","A3_Props_F_Destroyer_Military_BriefingRoomScreen","A3_Static_F_Destroyer","A3_Static_F_Destroyer_Boat_Rack_01","A3_Static_F_Destroyer_Ship_Gun_01","A3_Static_F_Destroyer_Ship_MRLS_01","A3_Static_F_Sams","A3_Static_F_Sams_Radar_System_01","A3_Static_F_Sams_Radar_System_02","A3_Static_F_Sams_SAM_System_03","A3_Static_F_Sams_SAM_System_04","A3_Weapons_F_Destroyer","A3_Weapons_F_Sams","A3_Data_F_Destroyer_Loadorder","A3_Data_F_Sams_Loadorder","A3_Data_F_Warlords_Loadorder","A3_Data_F_Enoch","A3_Dubbing_Radio_F_Enoch","A3_EditorPreviews_F_Enoch","A3_Functions_F_Enoch","A3_Language_F_Enoch","A3_Missions_F_Enoch","A3_Music_F_Enoch","A3_Props_F_Enoch","A3_Props_F_Enoch_Civilian","A3_Props_F_Enoch_Civilian_Camping","A3_Props_F_Enoch_Civilian_Forest","A3_Props_F_Enoch_Civilian_Garbage","A3_Props_F_Enoch_Civilian_InfoBoards","A3_Props_F_Enoch_Industrial","A3_Props_F_Enoch_Industrial_Electric","A3_Props_F_Enoch_Industrial_Supplies","A3_Props_F_Enoch_Infrastructure","A3_Props_F_Enoch_Infrastructure_Traffic","A3_Props_F_Enoch_Items","A3_Props_F_Enoch_Items_Documents","A3_Props_F_Enoch_Items_AluminiumFoil","A3_Props_F_Enoch_Military","A3_Props_F_Enoch_Military_Camps","A3_Props_F_Enoch_Military_Decontamination","A3_Props_F_Enoch_Military_Equipment","A3_Props_F_Enoch_Military_Garbage","A3_Props_F_Enoch_Military_Supplies","A3_Props_F_Enoch_Military_Wrecks","A3_Rocks_F_Enoch","A3_Rocks_F_Enoch_Sinkhole","A3_Soft_F_Enoch","A3_Soft_F_Enoch_Offroad_01","A3_Soft_F_Enoch_Quadbike_01","A3_Soft_F_Enoch_Tractor_01","A3_Soft_F_Enoch_Truck_01","A3_Soft_F_Enoch_Truck_02","A3_Soft_F_Enoch_UGV_01","A3_Soft_F_Enoch_UGV_02","A3_Soft_F_Enoch_Van_02","A3_Sounds_F_Enoch","A3_Static_F_Enoch","A3_Static_F_Enoch_AA_01","A3_Static_F_Enoch_AT_01","A3_Static_F_Enoch_Designator_01","A3_Static_F_Enoch_GMG_01","A3_Static_F_Enoch_HMG_01","A3_Static_F_Enoch_Mortar_01","A3_Static_F_Enoch_Radar_System_01","A3_Static_F_Enoch_SAM_System_03","A3_Structures_F_Enoch","A3_Structures_F_Enoch_Civilian","A3_Structures_F_Enoch_Civilian_Accessories","A3_Structures_F_Enoch_Civilian_Camps","A3_Structures_F_Enoch_Civilian_Constructions","A3_Structures_F_Enoch_Civilian_Houses","A3_Structures_F_Enoch_Civilian_Medical","A3_Structures_F_Enoch_Civilian_Police","A3_Structures_F_Enoch_Civilian_Sheds","A3_Structures_F_Enoch_Commercial","A3_Structures_F_Enoch_Commercial_FuelStation_03","A3_Structures_F_Enoch_Commercial_VillageStore_01","A3_Structures_F_Enoch_Cultural","A3_Structures_F_Enoch_Cultural_Calvary_03","A3_Structures_F_Enoch_Cultural_Calvary_04","A3_Structures_F_Enoch_Cultural_CastleRuins","A3_Structures_F_Enoch_Cultural_Cemeteries","A3_Structures_F_Enoch_Cultural_Chapel_01","A3_Structures_F_Enoch_Cultural_Chapel_02","A3_Structures_F_Enoch_Cultural_Church_04","A3_Structures_F_Enoch_Cultural_Church_05","A3_Structures_F_Enoch_Cultural_OrthodoxChurches","A3_Structures_F_Enoch_Cultural_Statues","A3_Structures_F_Enoch_Data","A3_Structures_F_Enoch_Decals","A3_Structures_F_Enoch_Decals_Horizontal","A3_Structures_F_Enoch_Furniture","A3_Structures_F_Enoch_Industrial","A3_Structures_F_Enoch_Industrial_Agriculture","A3_Structures_F_Enoch_Industrial_Cargo","A3_Structures_F_Enoch_Industrial_CementWorks","A3_Structures_F_Enoch_Industrial_CoalPlant_01","A3_Structures_F_Enoch_Industrial_DieselPowerPlant_01","A3_Structures_F_Enoch_Industrial_Farms","A3_Structures_F_Enoch_Industrial_Garages","A3_Structures_F_Enoch_Industrial_Houses","A3_Structures_F_Enoch_Industrial_Materials","A3_Structures_F_Enoch_Industrial_Mines","A3_Structures_F_Enoch_Industrial_Pipes","A3_Structures_F_Enoch_Industrial_Power","A3_Structures_F_Enoch_Industrial_Sawmills","A3_Structures_F_Enoch_Industrial_Sheds","A3_Structures_F_Enoch_Industrial_Smokestacks","A3_Structures_F_Enoch_Industrial_Transmitter_Tower","A3_Structures_F_Enoch_Infrastructure","A3_Structures_F_Enoch_Infrastructure_Benchmarks","A3_Structures_F_Enoch_Infrastructure_Bridges","A3_Structures_F_Enoch_Infrastructure_Highway","A3_Structures_F_Enoch_Infrastructure_Lamps","A3_Structures_F_Enoch_Infrastructure_Pavements","A3_Structures_F_Enoch_Infrastructure_Powerlines","A3_Structures_F_Enoch_Infrastructure_Railways","A3_Structures_F_Enoch_Infrastructure_Roads","A3_Structures_F_Enoch_Military","A3_Structures_F_Enoch_Military_Airfield","A3_Structures_F_Enoch_Military_Barracks","A3_Structures_F_Enoch_Military_Bunkers","A3_Structures_F_Enoch_Military_Camonets","A3_Structures_F_Enoch_Military_Camps","A3_Structures_F_Enoch_Military_Domes","A3_Structures_F_Enoch_Military_Flags","A3_Structures_F_Enoch_Military_Radar","A3_Structures_F_Enoch_Military_Training","A3_Structures_F_Enoch_Ruins","A3_Structures_F_Enoch_Signs","A3_Structures_F_Enoch_Signs_City","A3_Structures_F_Enoch_Signs_Companies","A3_Structures_F_Enoch_Signs_Directions","A3_Structures_F_Enoch_Signs_Traffic","A3_Structures_F_Enoch_Signs_Warnings","A3_Structures_F_Enoch_VR_Helpers","A3_Structures_F_Enoch_Walls","A3_Structures_F_Enoch_Walls_Brick","A3_Structures_F_Enoch_Walls_Concrete","A3_Structures_F_Enoch_Walls_Net","A3_Structures_F_Enoch_Walls_Pipe","A3_Structures_F_Enoch_Walls_Polewalls","A3_Structures_F_Enoch_Walls_Stone","A3_Structures_F_Enoch_Walls_Wooden","A3_Structures_F_Enoch_Wrecks","A3_Supplies_F_Enoch","A3_Supplies_F_Enoch_Ammoboxes","A3_Supplies_F_Enoch_Bags","A3_Ui_F_Enoch","A3_Vegetation_F_Enoch","A3_Weapons_F_Enoch","A3_Weapons_F_Enoch_Acc","A3_Weapons_F_Enoch_Items","A3_Weapons_F_Enoch_Launchers_RPG32","A3_Weapons_F_Enoch_Launchers_Titan","A3_Weapons_F_Enoch_LongRangeRifles_DMR_06","A3_Weapons_F_Enoch_Machineguns_M200","A3_Weapons_F_Enoch_Pistols_ESD","A3_Weapons_F_Enoch_Pistols_Pistol_Heavy_01","A3_Weapons_F_Enoch_Rifles_AK12","A3_Weapons_F_Enoch_Rifles_MSBS","A3_Weapons_F_Enoch_Rifles_MX","A3_Weapons_F_Enoch_Rifles_HunterShotgun_01","A3_Air_F_Enoch","A3_Air_F_Enoch_Heli_Light_03","A3_Air_F_Enoch_UAV_01","A3_Air_F_Enoch_UAV_06","A3_Anims_F_Enoch","A3_Armor_F_Enoch","A3_Armor_F_Enoch_APC_Tracked_03","A3_Cargoposes_F_Enoch","A3_Characters_F_Enoch","A3_Characters_F_Enoch_Facewear","A3_Characters_F_Enoch_Headgear","A3_Characters_F_Enoch_Vests","A3_Map_Enoch","A3_Map_Enoch_Data","A3_Map_Enoch_Data_Layers","A3_Map_Enoch_Scenes_F","A3_Data_F_Enoch_Loadorder"]; +private _patchList = ["Core","A3Data","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Dubbing_F","A3_Dubbing_F_Beta","A3_Dubbing_F_Gamma","A3_Dubbing_Radio_F","A3_Dubbing_Radio_F_Data_ENG","A3_Dubbing_Radio_F_Data_ENGB","A3_Dubbing_Radio_F_Data_GRE","A3_Dubbing_Radio_F_Data_PER","A3_Dubbing_Radio_F_Data_VR","A3_Editor_F","A3_EditorPreviews_F","A3_Functions_F_Curator","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Gamma","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_Data","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_Hc","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_Uav","A3_Modules_F_Beta","A3_Modules_F_Beta_Data","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Music_F","A3_Music_F_Music","A3_Music_F_EPA","A3_Music_F_EPA_Music","A3_Music_F_EPB","A3_Music_F_EPB_Music","A3_Music_F_EPC","A3_Music_F_EPC_Music","A3_Plants_F","A3_Roads_F","A3_Rocks_F","A3_Rocks_F_Blunt","A3_Rocks_F_Sharp","A3_Rocks_F_Water","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Data","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Food","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_EPA","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_Playground","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_UiFonts_F","A3_Animals_F","A3_Animals_F_Animconfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Beta","A3_Animals_F_Beta_Chicken","A3_Animals_F_Beta_Dog","A3_Animals_F_Beta_Goat","A3_Animals_F_Beta_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_Config_Sdr_WeaponSwitching","A3_Anims_F_Data","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Dubbing_F_EPA","A3_Dubbing_F_EPB","A3_Dubbing_F_EPC","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_LanguageMissions_F_EPA","A3_LanguageMissions_F_EPB","A3_LanguageMissions_F_EPC","A3_Map_Data","A3_Map_Data_Exp","A3_Map_Stratis","A3_Map_Stratis_Data","A3_Map_Stratis_Data_Layers","A3_Map_Stratis_Scenes_F","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_Signs_Ad","A3_Structures_F_Signs_Companies","A3_Ui_F","A3_Ui_F_Data","A3_Ui_F_Curator","A3_Weapons_F","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_RPG32","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_LongRangeRifles_DMR_01","A3_Weapons_F_LongRangeRifles_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_Heavy_01","A3_Weapons_F_Pistols_Pistol_Heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_MK20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_SMGs_Pdw2000","A3_Weapons_F_SMGs_SMG_01","A3_Weapons_F_SMGs_SMG_02","A3_Weapons_F_Beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_Beta_LongRangeRifles_EBR","A3_Weapons_F_Beta_LongRangeRifles_GM6","A3_Weapons_F_Beta_LongRangeRifles_M320","A3_Weapons_F_Beta_Rifles_Khaybar","A3_Weapons_F_Beta_Rifles_MX","A3_Weapons_F_Beta_Rifles_TRG20","A3_Weapons_F_Gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_Gamma_LongRangeRifles_EBR","A3_Weapons_F_Gamma_Rifles_MX","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_Beta_INDEP","A3_Characters_F_Gamma","A3_Map_Altis","A3_Map_Altis_Data","A3_Map_Altis_Data_Layers","A3_Map_Altis_Scenes_F","A3_Missions_F","A3_Missions_F_Data","A3_Missions_F_Video","A3_Missions_F_Beta","A3_Missions_F_Beta_Data","A3_Missions_F_Beta_Video","A3_Missions_F_Gamma","A3_Missions_F_Gamma_Data","A3_Missions_F_Gamma_Video","A3_Sounds_F","A3_Sounds_F_Arsenal","A3_Sounds_F_Characters","A3_Sounds_F_Environment","A3_Sounds_F_Sfx","A3_Sounds_F_Vehicles","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Static_F","A3_Static_F_HMG_02","A3_Static_F_Mortar_01","A3_Static_F_Beta","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPB_LongRangeRifles_GM6","A3_Weapons_F_EPC","A3_Weapons_F_Gamma_Acc","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_Gamma","A3_Air_F_Gamma_Plane_Fighter_03","A3_Armor_F","A3_Armor_F_Beta","A3_Armor_F_Beta_APC_Tracked_01","A3_Armor_F_Beta_APC_Tracked_02","A3_Armor_F_Gamma","A3_Armor_F_Gamma_MBT_01","A3_Armor_F_Gamma_MBT_02","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_Beta_SDV_01","A3_Boat_F_Gamma","A3_Boat_F_Gamma_Boat_Civil_01","A3_Boat_F_Gamma_Boat_Civil_04","A3_Boat_F_Gamma_Boat_Transport_01","A3_Characters_F_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPB_Heads","A3_Characters_F_EPC","A3_Missions_F_EPA","A3_Missions_F_EPA_Data","A3_Missions_F_EPA_Video","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike_01","A3_Soft_F_Beta","A3_Soft_F_Beta_MRAP_03","A3_Soft_F_Beta_Quadbike_01","A3_Soft_F_Beta_Truck_01","A3_Soft_F_Beta_Truck_02","A3_Soft_F_Gamma","A3_Soft_F_Gamma_Hatchback_01","A3_Soft_F_Gamma_Offroad_01","A3_Soft_F_Gamma_Quadbike_01","A3_Soft_F_Gamma_SUV_01","A3_Soft_F_Gamma_Truck_01","A3_Soft_F_Gamma_Truck_02","A3_Soft_F_Gamma_Van_01","A3_Static_F_AA_01","A3_Static_F_AT_01","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Air_F_EPB","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_Beta_APC_Wheeled_01","A3_Armor_F_Beta_APC_Wheeled_02","A3_Armor_F_EPB","A3_Armor_F_EPB_APC_Tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_EPC","A3_Armor_F_EPC_MBT_01","A3_Armor_F_Gamma_APC_Wheeled_03","A3_Boat_F_EPC","A3_Boat_F_EPC_Submarine_01","A3_Cargoposes_F","A3_Drones_F","A3_Drones_F_Air_F_Gamma_UAV_01","A3_Drones_F_Air_F_Gamma_UAV_02","A3_Drones_F_Characters_F_Gamma","A3_Drones_F_Soft_F_Gamma_UGV_01","A3_Drones_F_Weapons_F_Gamma_Ammoboxes","A3_Drones_F_Weapons_F_Gamma_Items","A3_Soft_F_EPC","A3_Soft_F_EPC_Truck_03","A3_Data_F_Loadorder","A3_Data_F_Curator","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Music","A3_Data_F_Curator_Respawn","A3_Data_F_Curator_Virtual","A3_Language_F_Curator","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_SmokeShells","A3_Missions_F_Curator","A3_Modules_F_Curator_Chemlights","A3_Data_F_Curator_Loadorder","A3_Data_F_Kart","A3_Data_F_Kart_ParticleEffects","A3_Language_F_Kart","A3_LanguageMissions_F_Kart","A3_Missions_F_Kart","A3_Missions_F_Kart_Data","A3_Modules_F_Kart","A3_Modules_F_Kart_Data","A3_Modules_F_Kart_TimeTrials","A3_Soft_F_Kart","A3_Soft_F_Kart_Kart_01","A3_Sounds_F_Kart","A3_Structures_F_Kart","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Kart_Signs_Companies","A3_Ui_F_Kart","A3_Weapons_F_Kart","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Anims_F_Kart","A3_Characters_F_Kart","A3_Data_F_Kart_Loadorder","A3_Data_F_Bootcamp","A3_Dubbing_F_Bootcamp","A3_Functions_F_Bootcamp","A3_Language_F_Bootcamp","A3_LanguageMissions_F_Bootcamp","A3_Map_VR","A3_Map_VR_Scenes_F","A3_Missions_F_Bootcamp","A3_Missions_F_Bootcamp_Data","A3_Missions_F_Bootcamp_Video","A3_Modules_F_Bootcamp","A3_Modules_F_Bootcamp_Misc","A3_Music_F_Bootcamp","A3_Music_F_Bootcamp_Music","A3_Soft_F_Bootcamp","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike_01","A3_Soft_F_Bootcamp_Van_01","A3_Sounds_F_Bootcamp","A3_Structures_F_Bootcamp","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Ui_F_Bootcamp","A3_Weapons_F_Bootcamp","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6_Camo","A3_Weapons_F_Bootcamp_LongRangeRifles_M320_Camo","A3_Anims_F_Bootcamp","A3_Characters_F_Bootcamp","A3_Characters_F_Bootcamp_Common","A3_Data_F_Bootcamp_Loadorder","A3_Data_F_Heli","A3_Dubbing_F_Heli","A3_Functions_F_Heli","A3_Language_F_Heli","A3_LanguageMissions_F_Heli","A3_Missions_F_Heli","A3_Missions_F_Heli_Data","A3_Missions_F_Heli_Video","A3_Modules_F_Heli","A3_Modules_F_Heli_Misc","A3_Music_F_Heli","A3_Music_F_Heli_Music","A3_Soft_F_Heli","A3_Soft_F_Heli_Hatchback_01","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike_01","A3_Soft_F_Heli_SUV_01","A3_Soft_F_Heli_UGV_01","A3_Soft_F_Heli_Van_01","A3_Sounds_F_Heli","A3_Structures_F_Heli","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_Airport","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Ui_F_Heli","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Anims_F_Heli","A3_Boat_F_Heli","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Cargoposes_F_Heli","A3_Data_F_Heli_Loadorder","A3_Data_F_Mark","A3_Dubbing_F_Mark","A3_Dubbing_F_MP_Mark","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F_Mark","A3_Language_F_MP_Mark","A3_LanguageMissions_F_Mark","A3_LanguageMissions_F_MP_Mark","A3_Missions_F_Mark","A3_Missions_F_Mark_Data","A3_Missions_F_Mark_Video","A3_Missions_F_MP_Mark","A3_Missions_F_MP_Mark_Data","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_MP_Mark_Objectives","A3_Music_F_Mark","A3_Music_F_Mark_Music","A3_Sounds_F_Mark","A3_Static_F_Mark","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Structures_F_Mark","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_Supplies_F_Mark","A3_Ui_F_Mark","A3_Ui_F_MP_Mark","A3_Weapons_F_Mark","A3_Weapons_F_Mark_Acc","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_LongRangeRifles_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_Camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_Camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_MK20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","A3_Anims_F_Mark","A3_Anims_F_Mark_Deployment","A3_Characters_F_Mark","A3_Data_F_Mark_Loadorder","A3_Data_F_Exp_A","A3_Functions_F_Exp_A","A3_Language_F_Exp_A","A3_LanguageMissions_F_Exp_A","A3_Missions_F_Exp_A","A3_Missions_F_Exp_A_Data","A3_Modules_F_Exp_A","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Props_F_Exp_A_Military_Equipment","A3_Sounds_F_Exp_A","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Ui_F_Exp_A","A3_Anims_F_Exp_A","A3_Data_F_Exp_A_Virtual","A3_Data_F_Exp_A_Loadorder","A3_Data_F_Exp_B","A3_Language_F_Exp_B","A3_3DEN","A3_3DEN_Language","A3_BaseConfig_F","3DEN","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Armor_F_Panther","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_APC_Wheeled_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Characters_F_INDEP","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_UAV_F_Characters_F_Gamma","A3_Soft_F_Crusher_UGV","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis_Scenes","A3_Map_Stratis_Scenes","Map_VR","A3_Map_VR_Scenes","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark_Objectives","A3_Signs_F_AD","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Crusher_UGV","A3_Soft_F_Heli_Truck","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Items_Cans","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Mark_EBR","CuratorOnly_Air_F_Beta_Heli_Attack_01","CuratorOnly_Air_F_Beta_Heli_Attack_02","CuratorOnly_Air_F_Gamma_UAV_01","CuratorOnly_Armor_F_AMV","CuratorOnly_armor_f_beta_APC_Tracked_02","CuratorOnly_Armor_F_Marid","CuratorOnly_Armor_F_Panther","CuratorOnly_Armor_F_Slammer","CuratorOnly_Armor_F_T100K","CuratorOnly_Boat_F_Boat_Armed_01","CuratorOnly_Characters_F_BLUFOR","CuratorOnly_Characters_F_Common","CuratorOnly_Characters_F_OPFOR","CuratorOnly_Modules_F_Curator_Animals","CuratorOnly_Modules_F_Curator_Chemlights","CuratorOnly_Modules_F_Curator_Effects","CuratorOnly_Modules_F_Curator_Environment","CuratorOnly_Modules_F_Curator_Flares","CuratorOnly_Modules_F_Curator_Lightning","CuratorOnly_Modules_F_Curator_Mines","CuratorOnly_Modules_F_Curator_Objectives","CuratorOnly_Modules_F_Curator_Ordnance","CuratorOnly_Modules_F_Curator_Smokeshells","CuratorOnly_Signs_F","CuratorOnly_Soft_F_Crusher_UGV","CuratorOnly_Soft_F_MRAP_01","CuratorOnly_Soft_F_MRAP_02","CuratorOnly_Soft_F_Quadbike","CuratorOnly_Static_F_Gamma","CuratorOnly_Static_F_Mortar_01","CuratorOnly_Structures_F_Civ_Ancient","CuratorOnly_Structures_F_Civ_Camping","CuratorOnly_Structures_F_Civ_Garbage","CuratorOnly_Structures_F_EPA_Civ_Constructions","CuratorOnly_Structures_F_EPB_Civ_Dead","CuratorOnly_Structures_F_Ind_Cargo","CuratorOnly_Structures_F_Ind_Crane","CuratorOnly_Structures_F_Ind_ReservoirTank","CuratorOnly_Structures_F_Ind_Transmitter_Tower","CuratorOnly_Structures_F_Items_Vessels","CuratorOnly_Structures_F_Mil_BagBunker","CuratorOnly_Structures_F_Mil_BagFence","CuratorOnly_Structures_F_Mil_Cargo","CuratorOnly_Structures_F_Mil_Fortification","CuratorOnly_Structures_F_Mil_Radar","CuratorOnly_Structures_F_Mil_Shelters","CuratorOnly_Structures_F_Research","CuratorOnly_Structures_F_Walls","CuratorOnly_Structures_F_Wrecks","A3_Data_F_Exp_B_Loadorder","A3_Data_F_Mod","A3_Language_F_Mod","A3_Sounds_F_Mod","A3_Weapons_F_Mod","A3_Weapons_F_Mod_SMGs_SMG_03","A3_Anims_F_Mod","A3_Data_F_Exp","A3_Data_F_Exp_ParticleEffects","A3_Data_F_Mod_Loadorder","A3_Dubbing_F_Exp","A3_Dubbing_Radio_F_EXP","A3_Dubbing_Radio_F_EXP_Data_CHI","A3_Dubbing_Radio_F_EXP_Data_ENGFRE","A3_Dubbing_Radio_F_EXP_Data_FRE","A3_EditorPreviews_F_Exp","A3_Functions_F_Exp","A3_Language_F_Exp","A3_LanguageMissions_F_Exp","A3_Missions_F_Exp","A3_Missions_F_Exp_Data","A3_Missions_F_Exp_Video","A3_Modules_F_Exp","A3_Music_F_Exp","A3_Music_F_Exp_Music","A3_Props_F_Exp","A3_Props_F_Exp_Civilian","A3_Props_F_Exp_Civilian_Garbage","A3_Props_F_Exp_Commercial","A3_Props_F_Exp_Commercial_Market","A3_Props_F_Exp_Industrial","A3_Props_F_Exp_Industrial_HeavyEquipment","A3_Props_F_Exp_Infrastructure","A3_Props_F_Exp_Infrastructure_Railways","A3_Props_F_Exp_Infrastructure_Traffic","A3_Props_F_Exp_Military","A3_Props_F_Exp_Military_Camps","A3_Props_F_Exp_Military_OldPlaneWrecks","A3_Props_F_Exp_Naval","A3_Props_F_Exp_Naval_Boats","A3_Rocks_F_Exp","A3_Rocks_F_Exp_Cliff","A3_Rocks_F_Exp_LavaStones","A3_Soft_F_Exp","A3_Soft_F_Exp_LSV_01","A3_Soft_F_Exp_LSV_02","A3_Soft_F_Exp_MRAP_01","A3_Soft_F_Exp_MRAP_02","A3_Soft_F_Exp_Offroad_01","A3_Soft_F_Exp_Offroad_02","A3_Soft_F_Exp_Quadbike_01","A3_Soft_F_Exp_Truck_01","A3_Soft_F_Exp_Truck_02","A3_Soft_F_Exp_Truck_03","A3_Soft_F_Exp_UGV_01","A3_Soft_F_Exp_Van_01","A3_Static_F_Exp","A3_Static_F_Exp_AA_01","A3_Static_F_Exp_AT_01","A3_Static_F_Exp_GMG_01","A3_Static_F_Exp_HMG_01","A3_Static_F_Exp_Mortar_01","A3_Structures_F_Exp","A3_Structures_F_Exp_Civilian","A3_Structures_F_Exp_Civilian_Accessories","A3_Structures_F_Exp_Civilian_Garages","A3_Structures_F_Exp_Civilian_House_Big_01","A3_Structures_F_Exp_Civilian_House_Big_02","A3_Structures_F_Exp_Civilian_House_Big_03","A3_Structures_F_Exp_Civilian_House_Big_04","A3_Structures_F_Exp_Civilian_House_Big_05","A3_Structures_F_Exp_Civilian_House_Native_01","A3_Structures_F_Exp_Civilian_House_Native_02","A3_Structures_F_Exp_Civilian_House_Small_01","A3_Structures_F_Exp_Civilian_House_Small_02","A3_Structures_F_Exp_Civilian_House_Small_03","A3_Structures_F_Exp_Civilian_House_Small_04","A3_Structures_F_Exp_Civilian_House_Small_05","A3_Structures_F_Exp_Civilian_House_Small_06","A3_Structures_F_Exp_Civilian_School_01","A3_Structures_F_Exp_Civilian_Sheds","A3_Structures_F_Exp_Civilian_Slum_01","A3_Structures_F_Exp_Civilian_Slum_02","A3_Structures_F_Exp_Civilian_Slum_03","A3_Structures_F_Exp_Civilian_Slum_04","A3_Structures_F_Exp_Civilian_Slum_05","A3_Structures_F_Exp_Civilian_SportsGrounds","A3_Structures_F_Exp_Commercial","A3_Structures_F_Exp_Commercial_Addons","A3_Structures_F_Exp_Commercial_Advertisements","A3_Structures_F_Exp_Commercial_FuelStation_01","A3_Structures_F_Exp_Commercial_FuelStation_02","A3_Structures_F_Exp_Commercial_Hotel_01","A3_Structures_F_Exp_Commercial_Hotel_02","A3_Structures_F_Exp_Commercial_Market","A3_Structures_F_Exp_Commercial_MultistoryBuilding_01","A3_Structures_F_Exp_Commercial_MultistoryBuilding_03","A3_Structures_F_Exp_Commercial_MultistoryBuilding_04","A3_Structures_F_Exp_Commercial_Shop_City_01","A3_Structures_F_Exp_Commercial_Shop_City_02","A3_Structures_F_Exp_Commercial_Shop_City_03","A3_Structures_F_Exp_Commercial_Shop_City_04","A3_Structures_F_Exp_Commercial_Shop_City_05","A3_Structures_F_Exp_Commercial_Shop_City_06","A3_Structures_F_Exp_Commercial_Shop_City_07","A3_Structures_F_Exp_Commercial_Shop_Town_01","A3_Structures_F_Exp_Commercial_Shop_Town_02","A3_Structures_F_Exp_Commercial_Shop_Town_03","A3_Structures_F_Exp_Commercial_Shop_Town_04","A3_Structures_F_Exp_Commercial_Shop_Town_05","A3_Structures_F_Exp_Commercial_Supermarket_01","A3_Structures_F_Exp_Commercial_Warehouses","A3_Structures_F_Exp_Cultural","A3_Structures_F_Exp_Cultural_AncientRelics","A3_Structures_F_Exp_Cultural_BasaltRuins","A3_Structures_F_Exp_Cultural_Cathedral_01","A3_Structures_F_Exp_Cultural_Cemeteries","A3_Structures_F_Exp_Cultural_Church_01","A3_Structures_F_Exp_Cultural_Church_02","A3_Structures_F_Exp_Cultural_Church_03","A3_Structures_F_Exp_Cultural_Fortress_01","A3_Structures_F_Exp_Cultural_Temple_Native_01","A3_Structures_F_Exp_Cultural_Totems","A3_Structures_F_Exp_Data","A3_Structures_F_Exp_Industrial","A3_Structures_F_Exp_Industrial_DieselPowerPlant_01","A3_Structures_F_Exp_Industrial_Fields","A3_Structures_F_Exp_Industrial_Materials","A3_Structures_F_Exp_Industrial_Port","A3_Structures_F_Exp_Industrial_Stockyard_01","A3_Structures_F_Exp_Industrial_SugarCaneFactory_01","A3_Structures_F_Exp_Industrial_SurfaceMine_01","A3_Structures_F_Exp_Infrastructure","A3_Structures_F_Exp_Infrastructure_Airports","A3_Structures_F_Exp_Infrastructure_Bridges","A3_Structures_F_Exp_Infrastructure_Pavements","A3_Structures_F_Exp_Infrastructure_Powerlines","A3_Structures_F_Exp_Infrastructure_Railways","A3_Structures_F_Exp_Infrastructure_Roads","A3_Structures_F_Exp_Infrastructure_Runways","A3_Structures_F_Exp_Infrastructure_WaterSupply","A3_Structures_F_Exp_Military","A3_Structures_F_Exp_Military_Barracks_01","A3_Structures_F_Exp_Military_Camonets","A3_Structures_F_Exp_Military_ContainerBases","A3_Structures_F_Exp_Military_Emplacements","A3_Structures_F_Exp_Military_Flags","A3_Structures_F_Exp_Military_Fortifications","A3_Structures_F_Exp_Military_Pillboxes","A3_Structures_F_Exp_Military_Trenches","A3_Structures_F_Exp_Naval","A3_Structures_F_Exp_Naval_Canals","A3_Structures_F_Exp_Naval_Piers","A3_Structures_F_Exp_Signs","A3_Structures_F_Exp_Signs_Companies","A3_Structures_F_Exp_Signs_Traffic","A3_Structures_F_Exp_Walls","A3_Structures_F_Exp_Walls_BackAlleys","A3_Structures_F_Exp_Walls_Bamboo","A3_Structures_F_Exp_Walls_Concrete","A3_Structures_F_Exp_Walls_Crashbarriers","A3_Structures_F_Exp_Walls_Hedges","A3_Structures_F_Exp_Walls_Net","A3_Structures_F_Exp_Walls_Pipe","A3_Structures_F_Exp_Walls_Polewalls","A3_Structures_F_Exp_Walls_Railings","A3_Structures_F_Exp_Walls_Slum","A3_Structures_F_Exp_Walls_Stone","A3_Structures_F_Exp_Walls_Tin","A3_Structures_F_Exp_Walls_Wired","A3_Structures_F_Exp_Walls_Wooden","A3_Supplies_F_Exp","A3_Supplies_F_Exp_Ammoboxes","A3_Ui_F_Exp","A3_Vegetation_F_Exp","A3_Weapons_F_Exp","A3_Weapons_F_Exp_Launchers_RPG32","A3_Weapons_F_Exp_Launchers_RPG7","A3_Weapons_F_Exp_Launchers_Titan","A3_Weapons_F_Exp_LongRangeRifles_DMR_07","A3_Weapons_F_Exp_Machineguns_LMG_03","A3_Weapons_F_Exp_Pistols_Pistol_01","A3_Weapons_F_Exp_Rifles_AK12","A3_Weapons_F_Exp_Rifles_AKM","A3_Weapons_F_Exp_Rifles_AKS","A3_Weapons_F_Exp_Rifles_ARX","A3_Weapons_F_Exp_Rifles_CTAR","A3_Weapons_F_Exp_Rifles_CTARS","A3_Weapons_F_Exp_Rifles_SPAR_01","A3_Weapons_F_Exp_Rifles_SPAR_02","A3_Weapons_F_Exp_Rifles_SPAR_03","A3_Weapons_F_Exp_SMGs_SMG_05","A3_Air_F_Exp","A3_Air_F_Exp_Heli_Light_01","A3_Air_F_Exp_Heli_Transport_01","A3_Air_F_Exp_Plane_Civil_01","A3_Air_F_Exp_UAV_03","A3_Air_F_Exp_UAV_04","A3_Air_F_Exp_VTOL_01","A3_Air_F_Exp_VTOL_02","A3_Anims_F_Exp","A3_Anims_F_Exp_Revive","A3_Armor_F_Exp","A3_Armor_F_Exp_APC_Tracked_01","A3_Armor_F_Exp_APC_Tracked_02","A3_Armor_F_Exp_APC_Wheeled_01","A3_Armor_F_Exp_APC_Wheeled_02","A3_Armor_F_Exp_MBT_01","A3_Armor_F_Exp_MBT_02","A3_Boat_F_Exp","A3_Boat_F_Exp_Boat_Armed_01","A3_Boat_F_Exp_Boat_Transport_01","A3_Boat_F_Exp_Boat_Transport_02","A3_Boat_F_Exp_Scooter_Transport_01","A3_Cargoposes_F_Exp","A3_Characters_F_Exp","A3_Characters_F_Exp_Civil","A3_Characters_F_Exp_Headgear","A3_Characters_F_Exp_Vests","A3_Sounds_F_Exp","A3_Data_F_Exp_Loadorder","A3_Data_F_Jets","A3_Dubbing_F_Jets","A3_EditorPreviews_F_Jets","A3_Functions_F_Destroyer","A3_Functions_F_Jets","A3_Language_F_Jets","A3_LanguageMissions_F_Jets","A3_Modules_F_Jets","A3_Music_F_Jets","A3_Props_F_Jets","A3_Props_F_Jets_Military_Tractor","A3_Props_F_Jets_Military_Trolley","A3_Sounds_F_Jets","A3_Static_F_Jets","A3_Static_F_Jets_AAA_System_01","A3_Static_F_Jets_SAM_System_01","A3_Static_F_Jets_SAM_System_02","A3_Ui_F_Jets","A3_Weapons_F_Jets","A3_Air_F_Jets","A3_Air_F_Jets_Plane_Fighter_01","A3_Air_F_Jets_Plane_Fighter_02","A3_Air_F_Jets_Plane_Fighter_04","A3_Air_F_Jets_UAV_05","A3_Anims_F_Jets","A3_Boat_F_Jets","A3_Boat_F_Jets_Carrier_01","A3_Cargoposes_F_Jets","A3_Characters_F_Jets","A3_Characters_F_Jets_Vests","A3_Missions_F_Jets","A3_Boat_F_Destroyer","A3_Boat_F_Destroyer_Destroyer_01","A3_Data_F_Jets_Loadorder","A3_Data_F_Argo","A3_EditorPreviews_F_Argo","A3_Language_F_Argo","A3_Map_Malden","A3_Map_Malden_Data","A3_Map_Malden_Data_Layers","A3_Map_Malden_Scenes_F","A3_Music_F_Argo","A3_Props_F_Argo","A3_Props_F_Argo_Civilian","A3_Props_F_Argo_Civilian_InfoBoards","A3_Props_F_Argo_Items","A3_Props_F_Argo_Items_Documents","A3_Props_F_Argo_Items_Electronics","A3_Rocks_F_Argo","A3_Rocks_F_Argo_Limestone","A3_Structures_F_Argo","A3_Structures_F_Argo_Civilian","A3_Structures_F_Argo_Civilian_Accessories","A3_Structures_F_Argo_Civilian_Addons","A3_Structures_F_Argo_Civilian_Garbage","A3_Structures_F_Argo_Civilian_House_Big01","A3_Structures_F_Argo_Civilian_House_Big02","A3_Structures_F_Argo_Civilian_House_Small01","A3_Structures_F_Argo_Civilian_House_Small02","A3_Structures_F_Argo_Civilian_Stone_House_Big_01","A3_Structures_F_Argo_Civilian_Stone_Shed_01","A3_Structures_F_Argo_Civilian_Unfinished_Building_01","A3_Structures_F_Argo_Commercial","A3_Structures_F_Argo_Commercial_Accessories","A3_Structures_F_Argo_Commercial_Billboards","A3_Structures_F_Argo_Commercial_FuelStation_01","A3_Structures_F_Argo_Commercial_Shop_02","A3_Structures_F_Argo_Commercial_Supermarket_01","A3_Structures_F_Argo_Cultural","A3_Structures_F_Argo_Cultural_Church","A3_Structures_F_Argo_Cultural_Statues","A3_Structures_F_Argo_Decals","A3_Structures_F_Argo_Decals_Horizontal","A3_Structures_F_Argo_Industrial","A3_Structures_F_Argo_Industrial_Agriculture","A3_Structures_F_Argo_Industrial_Materials","A3_Structures_F_Argo_Infrastructure","A3_Structures_F_Argo_Infrastructure_Runways","A3_Structures_F_Argo_Infrastructure_Seaports","A3_Structures_F_Argo_Infrastructure_WaterSupply","A3_Structures_F_Argo_Military","A3_Structures_F_Argo_Military_Bunkers","A3_Structures_F_Argo_Military_ContainerBases","A3_Structures_F_Argo_Military_Domes","A3_Structures_F_Argo_Military_Fortifications","A3_Structures_F_Argo_Military_Turrets","A3_Structures_F_Argo_Signs","A3_Structures_F_Argo_Signs_City","A3_Structures_F_Argo_Signs_Directions","A3_Structures_F_Argo_Signs_Warnings","A3_Structures_F_Argo_Walls","A3_Structures_F_Argo_Walls_City","A3_Structures_F_Argo_Walls_Concrete","A3_Structures_F_Argo_Walls_Military","A3_Structures_F_Argo_Walls_Net","A3_Structures_F_Argo_Walls_Pipe","A3_Structures_F_Argo_Walls_Tin","A3_Structures_F_Argo_Walls_Wooden","A3_Structures_F_Argo_Wrecks","A3_Vegetation_F_Argo","A3_Armor_F_Argo","A3_Armor_F_Argo_APC_Tracked_01","A3_Armor_F_Argo_APC_Wheeled_02","A3_Data_F_Argo_Loadorder","A3_Data_F_Patrol","A3_Functions_F_Patrol","A3_Language_F_Patrol","A3_LanguageMissions_F_Patrol","A3_Map_Tanoabuka","A3_Map_Tanoabuka_Data","A3_Map_Tanoabuka_Data_Layers","A3_Modules_F_Patrol","A3_Sounds_F_Patrol","A3_Ui_F_Patrol","A3_Weapons_F_Patrol","A3_Characters_F_Patrol","A3_Map_Tanoa_Scenes_F","A3_Missions_F_Patrol","A3_Data_F_Patrol_Loadorder","A3_Data_F_Orange","A3_Dubbing_F_Orange","A3_EditorPreviews_F_Orange","A3_Functions_F_Orange","A3_Language_F_Orange","A3_LanguageMissions_F_Orange","A3_Missions_F_Orange","A3_Modules_F_Orange","A3_Music_F_Orange","A3_Props_F_Orange","A3_Props_F_Orange_Civilian","A3_Props_F_Orange_Civilian_Constructions","A3_Props_F_Orange_Civilian_InfoBoards","A3_Props_F_Orange_Furniture","A3_Props_F_Orange_Humanitarian","A3_Props_F_Orange_Humanitarian_Camps","A3_Props_F_Orange_Humanitarian_Garbage","A3_Props_F_Orange_Humanitarian_Supplies","A3_Props_F_Orange_Items","A3_Props_F_Orange_Items_Decorative","A3_Props_F_Orange_Items_Documents","A3_Props_F_Orange_Items_Electronics","A3_Props_F_Orange_Items_Tools","A3_Soft_F_Orange","A3_Soft_F_Orange_Offroad_01","A3_Soft_F_Orange_Offroad_02","A3_Soft_F_Orange_Truck_02","A3_Soft_F_Orange_UGV_01","A3_Soft_F_Orange_Van_02","A3_Structures_F_Orange","A3_Structures_F_Orange_Humanitarian","A3_Structures_F_Orange_Humanitarian_Camps","A3_Structures_F_Orange_Humanitarian_Flags","A3_Structures_F_Orange_Industrial","A3_Structures_F_Orange_Industrial_Cargo","A3_Structures_F_Orange_Signs","A3_Structures_F_Orange_Signs_Mines","A3_Structures_F_Orange_Signs_Special","A3_Structures_F_Orange_VR_Helpers","A3_Structures_F_Orange_Walls","A3_Structures_F_Orange_Walls_Plastic","A3_Supplies_F_Orange","A3_Supplies_F_Orange_Ammoboxes","A3_Supplies_F_Orange_Bags","A3_Supplies_F_Orange_CargoNets","A3_Ui_F_Orange","A3_Weapons_F_Orange","A3_Weapons_F_Orange_Explosives","A3_Weapons_F_Orange_Items","A3_Air_F_Orange","A3_Air_F_Orange_Heli_Transport_02","A3_Air_F_Orange_UAV_01","A3_Air_F_Orange_UAV_06","A3_Cargoposes_F_Orange","A3_Characters_F_Orange","A3_Characters_F_Orange_Facewear","A3_Characters_F_Orange_Headgear","A3_Characters_F_Orange_Uniforms","A3_Characters_F_Orange_Vests","A3_Sounds_F_Orange","A3_Data_F_Orange_Loadorder","A3_Data_F_Tacops","A3_Dubbing_F_Tacops","A3_Functions_F_Tacops","A3_Language_F_Tacops","A3_LanguageMissions_F_Tacops","A3_Missions_F_Tacops","A3_Modules_F_Tacops","A3_Music_F_Tacops","A3_Sounds_F_Tacops","A3_Ui_F_Tacops","A3_Characters_F_Tacops","A3_Data_F_Tacops_Loadorder","A3_Data_F_Tank","A3_Dubbing_F_Tank","A3_EditorPreviews_F_Tank","A3_Functions_F_Tank","A3_Language_F_Tank","A3_Language_F_Warlords","A3_LanguageMissions_F_Tank","A3_Missions_F_Tank","A3_Modules_F_Tank","A3_Music_F_Tank","A3_Props_F_Tank","A3_Props_F_Tank_Military","A3_Props_F_Tank_Military_TankAcc","A3_Props_F_Tank_Military_Wrecks","A3_Sounds_F_Tank","A3_Structures_F_Tank","A3_Structures_F_Tank_Decals","A3_Structures_F_Tank_Decals_Horizontal","A3_Structures_F_Tank_Military","A3_Structures_F_Tank_Military_Fortifications","A3_Structures_F_Tank_Military_RepairDepot","A3_Ui_F_Tank","A3_Weapons_F_Tank","A3_Weapons_F_Tank_Bags","A3_Weapons_F_Tank_Launchers_MRAWS","A3_Weapons_F_Tank_Launchers_Vorona","A3_Armor_F_Tank","A3_Armor_F_Tank_AFV_Wheeled_01","A3_Armor_F_Tank_LT_01","A3_Armor_F_Tank_MBT_04","A3_Cargoposes_F_Tank","A3_Characters_F_Tank","A3_Characters_F_Tank_Headgear","A3_Characters_F_Tank_Uniforms","A3_Data_F_Tank_Loadorder","A3_Language_F_Oldman","A3_Data_F_Destroyer","A3_Data_F_Sams","A3_Data_F_Warlords","A3_Dubbing_F_Warlords","A3_EditorPreviews_F_Destroyer","A3_EditorPreviews_F_Sams","A3_Functions_F_Warlords","A3_Language_F_Destroyer","A3_Language_F_Sams","A3_Missions_F_Warlords","A3_Missions_F_Warlords_Data","A3_Modules_F_Warlords","A3_Props_F_Destroyer","A3_Props_F_Destroyer_Military_BriefingRoomDesk","A3_Props_F_Destroyer_Military_BriefingRoomScreen","A3_Static_F_Destroyer","A3_Static_F_Destroyer_Boat_Rack_01","A3_Static_F_Destroyer_Ship_Gun_01","A3_Static_F_Destroyer_Ship_MRLS_01","A3_Static_F_Sams","A3_Static_F_Sams_Radar_System_01","A3_Static_F_Sams_Radar_System_02","A3_Static_F_Sams_SAM_System_03","A3_Static_F_Sams_SAM_System_04","A3_Weapons_F_Destroyer","A3_Weapons_F_Sams","A3_Data_F_Destroyer_Loadorder","A3_Data_F_Sams_Loadorder","A3_Data_F_Warlords_Loadorder","A3_Data_F_Enoch","A3_Dubbing_Radio_F_Enoch","A3_EditorPreviews_F_Enoch","A3_Functions_F_Enoch","A3_Language_F_Enoch","A3_Missions_F_Enoch","A3_Music_F_Enoch","A3_Props_F_Enoch","A3_Props_F_Enoch_Civilian","A3_Props_F_Enoch_Civilian_Camping","A3_Props_F_Enoch_Civilian_Forest","A3_Props_F_Enoch_Civilian_Garbage","A3_Props_F_Enoch_Civilian_InfoBoards","A3_Props_F_Enoch_Industrial","A3_Props_F_Enoch_Industrial_Electric","A3_Props_F_Enoch_Industrial_Supplies","A3_Props_F_Enoch_Infrastructure","A3_Props_F_Enoch_Infrastructure_Traffic","A3_Props_F_Enoch_Items","A3_Props_F_Enoch_Items_Documents","A3_Props_F_Enoch_Items_AluminiumFoil","A3_Props_F_Enoch_Military","A3_Props_F_Enoch_Military_Camps","A3_Props_F_Enoch_Military_Decontamination","A3_Props_F_Enoch_Military_Equipment","A3_Props_F_Enoch_Military_Garbage","A3_Props_F_Enoch_Military_Supplies","A3_Props_F_Enoch_Military_Wrecks","A3_Rocks_F_Enoch","A3_Rocks_F_Enoch_Sinkhole","A3_Soft_F_Enoch","A3_Soft_F_Enoch_Offroad_01","A3_Soft_F_Enoch_Quadbike_01","A3_Soft_F_Enoch_Tractor_01","A3_Soft_F_Enoch_Truck_01","A3_Soft_F_Enoch_Truck_02","A3_Soft_F_Enoch_UGV_01","A3_Soft_F_Enoch_UGV_02","A3_Soft_F_Enoch_Van_02","A3_Sounds_F_Enoch","A3_Static_F_Enoch","A3_Static_F_Enoch_AA_01","A3_Static_F_Enoch_AT_01","A3_Static_F_Enoch_Designator_01","A3_Static_F_Enoch_GMG_01","A3_Static_F_Enoch_HMG_01","A3_Static_F_Enoch_Mortar_01","A3_Static_F_Enoch_Radar_System_01","A3_Static_F_Enoch_SAM_System_03","A3_Structures_F_Enoch","A3_Structures_F_Enoch_Civilian","A3_Structures_F_Enoch_Civilian_Accessories","A3_Structures_F_Enoch_Civilian_Camps","A3_Structures_F_Enoch_Civilian_Constructions","A3_Structures_F_Enoch_Civilian_Houses","A3_Structures_F_Enoch_Civilian_Medical","A3_Structures_F_Enoch_Civilian_Police","A3_Structures_F_Enoch_Civilian_Sheds","A3_Structures_F_Enoch_Commercial","A3_Structures_F_Enoch_Commercial_FuelStation_03","A3_Structures_F_Enoch_Commercial_VillageStore_01","A3_Structures_F_Enoch_Cultural","A3_Structures_F_Enoch_Cultural_Calvary_03","A3_Structures_F_Enoch_Cultural_Calvary_04","A3_Structures_F_Enoch_Cultural_CastleRuins","A3_Structures_F_Enoch_Cultural_Cemeteries","A3_Structures_F_Enoch_Cultural_Chapel_01","A3_Structures_F_Enoch_Cultural_Chapel_02","A3_Structures_F_Enoch_Cultural_Church_04","A3_Structures_F_Enoch_Cultural_Church_05","A3_Structures_F_Enoch_Cultural_OrthodoxChurches","A3_Structures_F_Enoch_Cultural_Statues","A3_Structures_F_Enoch_Data","A3_Structures_F_Enoch_Decals","A3_Structures_F_Enoch_Decals_Horizontal","A3_Structures_F_Enoch_Furniture","A3_Structures_F_Enoch_Industrial","A3_Structures_F_Enoch_Industrial_Agriculture","A3_Structures_F_Enoch_Industrial_Cargo","A3_Structures_F_Enoch_Industrial_CementWorks","A3_Structures_F_Enoch_Industrial_CoalPlant_01","A3_Structures_F_Enoch_Industrial_DieselPowerPlant_01","A3_Structures_F_Enoch_Industrial_Farms","A3_Structures_F_Enoch_Industrial_Garages","A3_Structures_F_Enoch_Industrial_Houses","A3_Structures_F_Enoch_Industrial_Materials","A3_Structures_F_Enoch_Industrial_Mines","A3_Structures_F_Enoch_Industrial_Pipes","A3_Structures_F_Enoch_Industrial_Power","A3_Structures_F_Enoch_Industrial_Sawmills","A3_Structures_F_Enoch_Industrial_Sheds","A3_Structures_F_Enoch_Industrial_Smokestacks","A3_Structures_F_Enoch_Industrial_Transmitter_Tower","A3_Structures_F_Enoch_Infrastructure","A3_Structures_F_Enoch_Infrastructure_Benchmarks","A3_Structures_F_Enoch_Infrastructure_Bridges","A3_Structures_F_Enoch_Infrastructure_Highway","A3_Structures_F_Enoch_Infrastructure_Lamps","A3_Structures_F_Enoch_Infrastructure_Pavements","A3_Structures_F_Enoch_Infrastructure_Powerlines","A3_Structures_F_Enoch_Infrastructure_Railways","A3_Structures_F_Enoch_Infrastructure_Roads","A3_Structures_F_Enoch_Military","A3_Structures_F_Enoch_Military_Airfield","A3_Structures_F_Enoch_Military_Barracks","A3_Structures_F_Enoch_Military_Bunkers","A3_Structures_F_Enoch_Military_Camonets","A3_Structures_F_Enoch_Military_Camps","A3_Structures_F_Enoch_Military_Domes","A3_Structures_F_Enoch_Military_Flags","A3_Structures_F_Enoch_Military_Radar","A3_Structures_F_Enoch_Military_Training","A3_Structures_F_Enoch_Ruins","A3_Structures_F_Enoch_Signs","A3_Structures_F_Enoch_Signs_City","A3_Structures_F_Enoch_Signs_Companies","A3_Structures_F_Enoch_Signs_Directions","A3_Structures_F_Enoch_Signs_Traffic","A3_Structures_F_Enoch_Signs_Warnings","A3_Structures_F_Enoch_VR_Helpers","A3_Structures_F_Enoch_Walls","A3_Structures_F_Enoch_Walls_Brick","A3_Structures_F_Enoch_Walls_Concrete","A3_Structures_F_Enoch_Walls_Net","A3_Structures_F_Enoch_Walls_Pipe","A3_Structures_F_Enoch_Walls_Polewalls","A3_Structures_F_Enoch_Walls_Stone","A3_Structures_F_Enoch_Walls_Wooden","A3_Structures_F_Enoch_Wrecks","A3_Supplies_F_Enoch","A3_Supplies_F_Enoch_Ammoboxes","A3_Supplies_F_Enoch_Bags","A3_Ui_F_Enoch","A3_Vegetation_F_Enoch","A3_Weapons_F_Enoch","A3_Weapons_F_Enoch_Acc","A3_Weapons_F_Enoch_Items","A3_Weapons_F_Enoch_Launchers_RPG32","A3_Weapons_F_Enoch_Launchers_Titan","A3_Weapons_F_Enoch_LongRangeRifles_DMR_06","A3_Weapons_F_Enoch_Machineguns_M200","A3_Weapons_F_Enoch_Pistols_ESD","A3_Weapons_F_Enoch_Pistols_Pistol_Heavy_01","A3_Weapons_F_Enoch_Rifles_AK12","A3_Weapons_F_Enoch_Rifles_MSBS","A3_Weapons_F_Enoch_Rifles_MX","A3_Weapons_F_Enoch_Rifles_HunterShotgun_01","A3_Air_F_Enoch","A3_Air_F_Enoch_Heli_Light_03","A3_Air_F_Enoch_UAV_01","A3_Air_F_Enoch_UAV_06","A3_Anims_F_Enoch","A3_Armor_F_Enoch","A3_Armor_F_Enoch_APC_Tracked_03","A3_Cargoposes_F_Enoch","A3_Characters_F_Enoch","A3_Characters_F_Enoch_Facewear","A3_Characters_F_Enoch_Headgear","A3_Characters_F_Enoch_Vests","A3_Map_Enoch","A3_Map_Enoch_Data","A3_Map_Enoch_Data_Layers","A3_Map_Enoch_Scenes_F","A3_Data_F_Enoch_Loadorder","A3_Data_F_Oldman","A3_Dubbing_F_Oldman","A3_EditorPreviews_F_Oldman","A3_Functions_F_Oldman","A3_LanguageMissions_F_Oldman","A3_Missions_F_Oldman","A3_Modules_F_Oldman","A3_Music_F_Oldman","A3_Props_F_Oldman","A3_Props_F_Oldman_Items","A3_Soft_F_Oldman","A3_Soft_F_Oldman_Offroad_01","A3_Sounds_F_Oldman","A3_Static_F_Oldman","A3_Static_F_Oldman_HMG_02","A3_Structures_F_Oldman","A3_Structures_F_Oldman_Decals","A3_Structures_F_Oldman_Signs","A3_Structures_F_Oldman_Signs_Boards","A3_Structures_F_Oldman_Signs_Traffic","A3_Supplies_F_Oldman","A3_Ui_F_Oldman","A3_Characters_F_Oldman","A3_Characters_F_Oldman_Headgear","A3_Characters_F_Oldman_Heads","A3_Data_F_Oldman_Loadorder"]; uiNamespace setVariable ["RscDisplayRemoteMissions",displayNull]; //for Spy-Glass From 7d378efe94127021e35e82619761dd0222119db9 Mon Sep 17 00:00:00 2001 From: Ollie W Date: Wed, 22 Apr 2020 09:37:08 +0100 Subject: [PATCH 32/33] Cleanup P1 (6.0.0) (#346) * Begin cleanup * Cleanup - Part 2 * Cleanup - Part 3 * Pass Travis - Emma * Cleanup Part 4 * Cleanup Part 5 * Travis Pass * Cleanup Part 6 * Cleanup (#311) * UPDATE: Actionkeyhandler variable type privates instead of array type * UPDATE: Arrest Action Function * UPDATE: fn_buyLicense.sqf * UPDATE: Fish Catching function * UPDATE * Actually * UPDATED: Fish Catching * UPDATED: Fish * Some more * Cleanup fetchPlayerHouses * Resolve merge conflict * _unit cannot be nil * Update fn_processAction.sqf * Update fn_corpse.sqf * Update fn_catchFish.sqf * Update fn_dropFishingNet.sqf * Update fn_healHospital.sqf * Update fn_impoundAction.sqf * Update fn_newsBroadcast.sqf * Update fn_soundDevice.sqf * Update fn_setFuel.sqf * Update fn_repairDoor.sqf * 75/91 files reviewed * Further improvements * Last fixes * String using variable rather then constant Co-authored-by: Simon Arledal Co-authored-by: SimZor Co-authored-by: Joshua R Co-authored-by: Jason Hall Co-authored-by: Jason_000 Co-authored-by: DomT602 <32492434+DomT602@users.noreply.github.com> Co-authored-by: Dom --- .../core/actions/fn_arrestAction.sqf | 70 +- .../core/actions/fn_buyLicense.sqf | 11 +- .../core/actions/fn_captureHideout.sqf | 2 +- .../core/actions/fn_catchFish.sqf | 73 +- Altis_Life.Altis/core/actions/fn_dpFinish.sqf | 44 +- .../core/actions/fn_dropFishingNet.sqf | 38 +- .../core/actions/fn_escortAction.sqf | 57 +- Altis_Life.Altis/core/actions/fn_gather.sqf | 42 +- .../core/actions/fn_getDPMission.sqf | 6 +- .../core/actions/fn_gutAnimal.sqf | 142 +- .../core/actions/fn_healHospital.sqf | 81 +- .../core/actions/fn_impoundAction.sqf | 169 +- Altis_Life.Altis/core/actions/fn_mine.sqf | 47 +- .../core/actions/fn_newsBroadcast.sqf | 17 +- .../core/actions/fn_packupSpikes.sqf | 4 +- .../core/actions/fn_pickupItem.sqf | 133 +- .../core/actions/fn_pickupMoney.sqf | 82 +- Altis_Life.Altis/core/actions/fn_postBail.sqf | 8 +- .../core/actions/fn_processAction.sqf | 349 +- .../core/actions/fn_pulloutAction.sqf | 10 +- Altis_Life.Altis/core/actions/fn_putInCar.sqf | 42 +- .../core/actions/fn_removeContainer.sqf | 102 +- .../core/actions/fn_repairTruck.sqf | 144 +- .../core/actions/fn_restrainAction.sqf | 8 +- .../core/actions/fn_robAction.sqf | 2 +- .../core/actions/fn_searchAction.sqf | 7 +- .../core/actions/fn_searchVehAction.sqf | 9 +- .../core/actions/fn_seizePlayerAction.sqf | 3 + .../core/actions/fn_serviceChopper.sqf | 109 +- .../core/actions/fn_stopEscorting.sqf | 2 +- .../core/actions/fn_storeVehicle.sqf | 91 +- .../core/actions/fn_surrender.sqf | 19 +- .../core/actions/fn_ticketAction.sqf | 33 +- .../core/actions/fn_unrestrain.sqf | 9 +- .../core/admin/fn_adminCompensate.sqf | 23 +- .../core/admin/fn_adminDebugCon.sqf | 6 +- .../core/admin/fn_adminFreeze.sqf | 35 +- Altis_Life.Altis/core/admin/fn_adminGetID.sqf | 30 +- .../core/admin/fn_adminGodMode.sqf | 45 +- Altis_Life.Altis/core/admin/fn_adminID.sqf | 31 +- Altis_Life.Altis/core/admin/fn_adminInfo.sqf | 101 +- Altis_Life.Altis/core/admin/fn_adminMenu.sqf | 31 +- Altis_Life.Altis/core/admin/fn_adminQuery.sqf | 42 +- .../core/admin/fn_adminSpectate.sqf | 44 +- .../core/admin/fn_adminTeleport.sqf | 29 +- .../core/admin/fn_adminTpHere.sqf | 42 +- .../core/civilian/fn_civMarkers.sqf | 27 +- .../core/civilian/fn_demoChargeTimer.sqf | 13 +- .../core/civilian/fn_freezePlayer.sqf | 13 +- Altis_Life.Altis/core/civilian/fn_jail.sqf | 128 +- Altis_Life.Altis/core/civilian/fn_jailMe.sqf | 5 +- .../core/civilian/fn_knockedOut.sqf | 67 +- .../core/civilian/fn_knockoutAction.sqf | 45 +- .../core/civilian/fn_removeLicenses.sqf | 12 +- .../core/civilian/fn_robPerson.sqf | 57 +- .../core/civilian/fn_robReceive.sqf | 59 +- Altis_Life.Altis/core/civilian/fn_tazed.sqf | 127 +- .../core/config/fn_houseConfig.sqf | 4 +- .../core/config/fn_itemWeight.sqf | 7 +- .../core/config/fn_vehicleAnimate.sqf | 26 +- .../core/config/fn_vehicleWeightCfg.sqf | 44 +- Altis_Life.Altis/core/configuration.sqf | 203 +- .../core/cop/fn_bountyReceive.sqf | 8 +- .../core/cop/fn_containerInvSearch.sqf | 88 +- .../core/cop/fn_copInteractionMenu.sqf | 191 +- Altis_Life.Altis/core/cop/fn_copMarkers.sqf | 27 +- Altis_Life.Altis/core/cop/fn_copSearch.sqf | 132 +- Altis_Life.Altis/core/cop/fn_copSiren.sqf | 48 +- Altis_Life.Altis/core/cop/fn_doorAnimate.sqf | 2 +- .../core/cop/fn_fedCamDisplay.sqf | 4 +- Altis_Life.Altis/core/cop/fn_licenseCheck.sqf | 56 +- Altis_Life.Altis/core/cop/fn_licensesRead.sqf | 27 +- .../core/cop/fn_questionDealer.sqf | 77 +- Altis_Life.Altis/core/cop/fn_radar.sqf | 45 +- Altis_Life.Altis/core/cop/fn_repairDoor.sqf | 70 +- Altis_Life.Altis/core/cop/fn_restrain.sqf | 195 +- Altis_Life.Altis/core/cop/fn_searchClient.sqf | 14 +- Altis_Life.Altis/core/cop/fn_seizeClient.sqf | 51 +- Altis_Life.Altis/core/cop/fn_sirenLights.sqf | 26 +- .../core/cop/fn_spikeStripEffect.sqf | 30 +- Altis_Life.Altis/core/cop/fn_ticketGive.sqf | 48 +- Altis_Life.Altis/core/cop/fn_ticketPaid.sqf | 38 +- Altis_Life.Altis/core/cop/fn_ticketPay.sqf | 94 +- Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf | 64 +- Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf | 84 +- Altis_Life.Altis/core/cop/fn_wantedGrab.sqf | 14 +- .../core/functions/fn_actionKeyHandler.sqf | 238 +- .../core/functions/fn_stripDownPlayer.sqf | 13 +- .../core/functions/network/fn_corpse.sqf | 10 +- .../core/functions/network/fn_jumpFnc.sqf | 74 +- .../core/functions/network/fn_setFuel.sqf | 10 +- .../core/functions/network/fn_soundDevice.sqf | 14 +- Altis_Life.Altis/stringtable.xml | 26956 ++++++++-------- 93 files changed, 16194 insertions(+), 15815 deletions(-) diff --git a/Altis_Life.Altis/core/actions/fn_arrestAction.sqf b/Altis_Life.Altis/core/actions/fn_arrestAction.sqf index d246d2370..97935ed73 100644 --- a/Altis_Life.Altis/core/actions/fn_arrestAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_arrestAction.sqf @@ -1,36 +1,34 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_arrestAction.sqf - Author: - - Description: - Arrests the targeted person. -*/ -private ["_unit","_id"]; -_unit = param [0,objNull,[objNull]]; -if (isNull _unit) exitWith {}; //Not valid -if (isNil "_unit") exitWith {}; //Not Valid -if (!(_unit isKindOf "CAManBase")) exitWith {}; //Not a unit -if (!isPlayer _unit) exitWith {}; //Not a human -if (!(_unit getVariable "restrained")) exitWith {}; //He's not restrained. -if (!((side _unit) in [civilian,independent])) exitWith {}; //Not a civ - -if (life_HC_isActive) then { - [getPlayerUID _unit,_unit,player,false] remoteExecCall ["HC_fnc_wantedBounty",HC_Life]; -} else { - [getPlayerUID _unit,_unit,player,false] remoteExecCall ["life_fnc_wantedBounty",RSERV]; -}; - -if (isNull _unit) exitWith {}; //Not valid -detach _unit; -[_unit,false] remoteExecCall ["life_fnc_jail",_unit]; -[0,"STR_NOTF_Arrested_1",true, [_unit getVariable ["realname",name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - -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_Arrested_BEF",_unit getVariable ["realname",name _unit]]; - } else { - advanced_log = format [localize "STR_DL_AL_Arrested",profileName,(getPlayerUID player),_unit getVariable ["realname",name _unit]]; - }; - publicVariableServer "advanced_log"; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_arrestAction.sqf + Author: + + Description: + Arrests the targeted person. +*/ +params [ + ["_unit", objNull, [objNull]] +]; + +if (isNull _unit || {!isPlayer _unit}) exitWith {}; //Not valid +if !(_unit getVariable "restrained") exitWith {}; //He's not restrained. +if !((side _unit) in [civilian,independent]) exitWith {}; //Not a civ + +if (life_HC_isActive) then { + [getPlayerUID _unit,_unit,player,false] remoteExecCall ["HC_fnc_wantedBounty",HC_Life]; +} else { + [getPlayerUID _unit,_unit,player,false] remoteExecCall ["life_fnc_wantedBounty",RSERV]; +}; + +detach _unit; +[_unit,false] remoteExecCall ["life_fnc_jail",_unit]; +[0,"STR_NOTF_Arrested_1",true, [_unit getVariable ["realname",name _unit], profileName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + +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_Arrested_BEF",_unit getVariable ["realname",name _unit]]; + } else { + advanced_log = format [localize "STR_DL_AL_Arrested",profileName,(getPlayerUID player),_unit getVariable ["realname",name _unit]]; + }; + publicVariableServer "advanced_log"; +}; diff --git a/Altis_Life.Altis/core/actions/fn_buyLicense.sqf b/Altis_Life.Altis/core/actions/fn_buyLicense.sqf index 744bcc5ff..f3924ff6e 100644 --- a/Altis_Life.Altis/core/actions/fn_buyLicense.sqf +++ b/Altis_Life.Altis/core/actions/fn_buyLicense.sqf @@ -6,14 +6,13 @@ Description: Called when purchasing a license. May need to be revised. */ -private ["_type","_varName","_displayName","_sideFlag","_price"]; -_type = _this select 3; +params ["", "", "", "_type"]; if (!isClass (missionConfigFile >> "Licenses" >> _type)) exitWith {}; //Bad entry? -_displayName = M_CONFIG(getText,"Licenses",_type,"displayName"); -_price = M_CONFIG(getNumber,"Licenses",_type,"price"); -_sideFlag = M_CONFIG(getText,"Licenses",_type,"side"); -_varName = LICENSE_VARNAME(_type,_sideFlag); +private _displayName = M_CONFIG(getText,"Licenses",_type,"displayName"); +private _price = M_CONFIG(getNumber,"Licenses",_type,"price"); +private _sideFlag = M_CONFIG(getText,"Licenses",_type,"side"); +private _varName = LICENSE_VARNAME(_type,_sideFlag); if (CASH < _price) exitWith {hint format [localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName];}; CASH = CASH - _price; diff --git a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf index dcc2e34a9..820a98a62 100644 --- a/Altis_Life.Altis/core/actions/fn_captureHideout.sqf +++ b/Altis_Life.Altis/core/actions/fn_captureHideout.sqf @@ -15,7 +15,7 @@ private _hideout = (nearestObjects[getPosATL player,_hideoutObjs,25]) select 0; private _group = _hideout getVariable ["gangOwner",grpNull]; if (isNil {group player getVariable "gang_name"}) exitWith {titleText[localize "STR_GNOTF_CreateGang","PLAIN"];}; -if (_group == group player) exitWith {titleText[localize "STR_GNOTF_Controlled","PLAIN"]}; +if (_group isEqualTo group player) exitWith {titleText[localize "STR_GNOTF_Controlled","PLAIN"]}; if ((_hideout getVariable ["inCapture",false])) exitWith {hint localize "STR_GNOTF_onePersonAtATime";}; private "_action"; diff --git a/Altis_Life.Altis/core/actions/fn_catchFish.sqf b/Altis_Life.Altis/core/actions/fn_catchFish.sqf index f03e7c025..20df700d4 100644 --- a/Altis_Life.Altis/core/actions/fn_catchFish.sqf +++ b/Altis_Life.Altis/core/actions/fn_catchFish.sqf @@ -1,30 +1,43 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_catchFish.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Catches a fish that is near by. -*/ -private ["_fish","_type","_typeName"]; -_fish = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _fish) exitWith {}; //Object passed is null? -if (player distance _fish > 3.5) exitWith {}; - -switch (true) do { - case ((typeOf _fish) isEqualTo "Salema_F"): {_typeName = localize "STR_ANIM_Salema"; _type = "salema_raw";}; - case ((typeOf _fish) isEqualTo "Ornate_random_F") : {_typeName = localize "STR_ANIM_Ornate"; _type = "ornate_raw";}; - case ((typeOf _fish) isEqualTo "Mackerel_F") : {_typeName = localize "STR_ANIM_Mackerel"; _type = "mackerel_raw";}; - case ((typeOf _fish) isEqualTo "Tuna_F") : {_typeName = localize "STR_ANIM_Tuna"; _type = "tuna_raw";}; - case ((typeOf _fish) isEqualTo "Mullet_F") : {_typeName = localize "STR_ANIM_Mullet"; _type = "mullet_raw";}; - case ((typeOf _fish) isEqualTo "CatShark_F") : {_typeName = localize "STR_ANIM_Catshark"; _type = "catshark_raw";}; - case ((typeOf _fish) isEqualTo "Turtle_F") : {_typeName = localize "STR_ANIM_Turtle"; _type = "turtle_raw";}; - default {_type = ""}; -}; - -if (_type isEqualTo "") exitWith {}; //Couldn't get a type - -if ([true,_type,1] call life_fnc_handleInv) then { - deleteVehicle _fish; - titleText[format [(localize "STR_NOTF_Fishing"),_typeName],"PLAIN"]; -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_catchFish.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Catches a fish that is near by. +*/ +params [ + ["_fish", objNull, [objNull]] +]; + +//--- Fish is null or distance to fish is more than 3.5 metres +if (isNull _fish || {player distance _fish > 3.5}) exitWith {}; + +//--- Set Fish Information +private _fishInfo = switch typeOf _fish do { + case "Salema_F": {["STR_ANIM_Salema", "salema_raw"]}; + case "Ornate_random_F": {["STR_ANIM_Ornate", "ornate_raw"]}; + case "Mackerel_F": {["STR_ANIM_Mackerel", "mackerel_raw"]}; + case "Tuna_F": {["STR_ANIM_Tuna", "tuna_raw"]}; + case "Mullet_F": {["STR_ANIM_Mullet", "mullet_raw"]}; + case "CatShark_F": {["STR_ANIM_Catshark", "catshark_raw"]}; + case "Turtle_F": {["STR_ANIM_Turtle", "turtle_raw"]}; + default {["", ""]}; +}; + +//--- Sort out array +_fishInfo params ["_fishName", "_fishType"]; + +//--- No fishtype +if (_fishType isEqualTo "") exitWith {}; //Couldn't get a type + +//--- Localize name of fish +private _fishName = localize _fishName; + +//--- Add fish into inventory +if ([true,_type,1] call life_fnc_handleInv) then { + //--- Delete fish in water + deleteVehicle _fish; + + titleText [format [localize "STR_NOTF_Fishing", _fishName], "PLAIN"]; +}; diff --git a/Altis_Life.Altis/core/actions/fn_dpFinish.sqf b/Altis_Life.Altis/core/actions/fn_dpFinish.sqf index 54c4327f5..758799330 100644 --- a/Altis_Life.Altis/core/actions/fn_dpFinish.sqf +++ b/Altis_Life.Altis/core/actions/fn_dpFinish.sqf @@ -1,21 +1,23 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_dpFinish.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Finishes the DP Mission and calculates the money earned based - on distance between A->B -*/ -private ["_dp","_dis","_price"]; -_dp = [_this,0,objNull,[objNull]] call BIS_fnc_param; -life_delivery_in_progress = false; -life_dp_point = nil; -_dis = round((getPos life_dp_start) distance (getPos _dp)); -_price = round(1.7 * _dis); - -["DeliverySucceeded",[format [(localize "STR_NOTF_Earned_1"),[_price] call life_fnc_numberText]]] call bis_fnc_showNotification; -life_cur_task setTaskState "Succeeded"; -player removeSimpleTask life_cur_task; -CASH = CASH + _price; -[0] call SOCK_fnc_updatePartial; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_dpFinish.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Finishes the DP Mission and calculates the money earned based + on distance between A->B +*/ +params [ + ["_dp", objNull, [objNull]] +]; + +life_delivery_in_progress = false; +life_dp_point = nil; +private _dis = round((getPosATL life_dp_start) distance (getPosATL _dp)); +private _price = round(1.7 * _dis); + +["DeliverySucceeded",[format [(localize "STR_NOTF_Earned_1"),[_price] call life_fnc_numberText]]] call bis_fnc_showNotification; +life_cur_task setTaskState "Succeeded"; +player removeSimpleTask life_cur_task; +CASH = CASH + _price; +[0] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf b/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf index 7746eb82d..9a86decdb 100644 --- a/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf +++ b/Altis_Life.Altis/core/actions/fn_dropFishingNet.sqf @@ -5,33 +5,41 @@ Description: Drops a virtual fishing net from the boat. */ -private ["_fish","_type","_typeName"]; -if (!(vehicle player isKindOf "Ship")) exitWith {}; -_fish = (nearestObjects[getPos vehicle player,["Fish_Base_F"],20]); +private _vehicle = vehicle player; +if !(_vehicle isKindOf "Ship") exitWith {}; +private _fish = nearestObjects[getPosASL _vehicle,["Fish_Base_F"],20]; life_net_dropped = true; titleText[localize "STR_NOTF_NetDrop","PLAIN"]; sleep 5; -if (_fish isEqualTo []) exitWith {titleText[localize "STR_NOTF_NetDropFail","PLAIN"]; life_net_dropped = false;}; +if (_fish isEqualTo []) exitWith { + titleText[localize "STR_NOTF_NetDropFail","PLAIN"]; + life_net_dropped = false; +}; + { if (_x isKindOf "Fish_Base_F") then { - switch (true) do { - case ((typeOf _x) isEqualTo "Salema_F"): {_typeName = localize "STR_ANIM_Salema"; _type = "salema_raw";}; - case ((typeOf _x) isEqualTo "Ornate_random_F") : {_typeName = localize "STR_ANIM_Ornate"; _type = "ornate_raw";}; - case ((typeOf _x) isEqualTo "Mackerel_F") : {_typeName = localize "STR_ANIM_Mackerel"; _type = "mackerel_raw";}; - case ((typeOf _x) isEqualTo "Tuna_F") : {_typeName = localize "STR_ANIM_Tuna"; _type = "tuna_raw";}; - case ((typeOf _x) isEqualTo "Mullet_F") : {_typeName = localize "STR_ANIM_Mullet"; _type = "mullet_raw";}; - case ((typeOf _x) isEqualTo "CatShark_F") : {_typeName = localize "STR_ANIM_Catshark"; _type = "catshark_raw";}; - default {_type = "";}; + private _fishInfo = switch (typeOf _x) do { + case "Salema_F": {["STR_ANIM_Salema", "salema_raw"]}; + case "Ornate_random_F": {["STR_ANIM_Ornate", "ornate_raw"]}; + case "Mackerel_F": {["STR_ANIM_Mackerel", "mackerel_raw"]}; + case "Tuna_F": {["STR_ANIM_Tuna", "tuna_raw"]}; + case "Mullet_F": {["STR_ANIM_Mullet", "mullet_raw"]}; + case "CatShark_F": {["STR_ANIM_Catshark", "catshark_raw"]}; + default {["", ""]}; }; + _fishInfo params ["_fishName", "_fishType"]; + _fishName = localize _fishName; + sleep 3; - if ([true,_type,1] call life_fnc_handleInv) then { + if ([true, _fishType, 1] call life_fnc_handleInv) then { deleteVehicle _x; - titleText[format [(localize "STR_NOTF_Fishing"),_typeName],"PLAIN"]; + titleText[format [(localize "STR_NOTF_Fishing"),_fishName],"PLAIN"]; }; }; -} forEach (_fish); + true +} count _fish; sleep 1.5; titleText[localize "STR_NOTF_NetUp","PLAIN"]; diff --git a/Altis_Life.Altis/core/actions/fn_escortAction.sqf b/Altis_Life.Altis/core/actions/fn_escortAction.sqf index 128348bfd..e4d28ef74 100644 --- a/Altis_Life.Altis/core/actions/fn_escortAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_escortAction.sqf @@ -1,28 +1,29 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_escortAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: Attaches the desired person(_unit) to the player(player) and "escorts them". -*/ -private ["_unit"]; -_unit = [_this,0,objNull,[objNull]] call BIS_fnc_param; - -if (!isNull(player getVariable ["escortingPlayer",objNull])) exitWith {}; -if (isNil "_unit" || isNull _unit || !isPlayer _unit) exitWith {}; -if (!(side _unit in [civilian,independent])) exitWith {}; -if (player distance _unit > 3) exitWith {}; - -_unit attachTo [player,[0.1,1.1,0]]; -player setVariable ["escortingPlayer",_unit]; -player setVariable ["isEscorting",true]; -_unit setVariable ["transporting",false,true]; -_unit setVariable ["Escorting",true,true]; -player reveal _unit; - -[_unit] spawn { - _unit = _this select 0; - waitUntil {(!(_unit getVariable ["Escorting",false]))}; - player setVariable ["escortingPlayer",nil]; - player setVariable ["isEscorting",false]; -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_escortAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: Attaches the desired person(_unit) to the player(player) and "escorts them". +*/ +params [ + ["_unit", objNull, [objNull]] +]; + +if (!isNull (player getVariable ["escortingPlayer",objNull])) exitWith {}; +if (isNull _unit || {!isPlayer _unit}) exitWith {}; +if !(side _unit in [civilian,independent]) exitWith {}; +if (player distance _unit > 3) exitWith {}; + +_unit attachTo [player, [0.1,1.1,0]]; +player setVariable ["escortingPlayer", _unit]; +player setVariable ["isEscorting", true]; + +[_unit] spawn { + params [ + ["_unit", objNull, [objNull]] + ]; + waitUntil {!(_unit getVariable ["Escorting",false])}; + + player setVariable ["escortingPlayer",nil]; + player setVariable ["isEscorting",false]; +}; diff --git a/Altis_Life.Altis/core/actions/fn_gather.sqf b/Altis_Life.Altis/core/actions/fn_gather.sqf index 78fb7d42e..c8ce3bfda 100644 --- a/Altis_Life.Altis/core/actions/fn_gather.sqf +++ b/Altis_Life.Altis/core/actions/fn_gather.sqf @@ -6,19 +6,27 @@ Description: Main functionality for gathering. */ -private ["_maxGather","_resource","_amount","_maxGather","_requiredItem"]; + +scopeName "main"; + if (life_action_inUse) exitWith {}; if !(isNull objectParent player) exitWith {}; if (player getVariable "restrained") exitWith {hint localize "STR_NOTF_isrestrained";}; if (player getVariable "playerSurrender") exitWith {hint localize "STR_NOTF_surrender";}; life_action_inUse = true; -_zone = ""; -_requiredItem = ""; -_exit = false; +private _zone = ""; +private _requiredItem = ""; + +private _resourceCfg = missionConfigFile >> "CfgGather" >> "Resources"; -_resourceCfg = missionConfigFile >> "CfgGather" >> "Resources"; -for "_i" from 0 to count(_resourceCfg)-1 do { +private "_curConfig"; +private "_resource"; +private "_maxGather"; +private "_zoneSize"; +private "_resourceZones"; + +for "_i" from 0 to (count _resourceCfg)-1 do { _curConfig = _resourceCfg select _i; _resource = configName _curConfig; @@ -26,31 +34,31 @@ for "_i" from 0 to count(_resourceCfg)-1 do { _zoneSize = getNumber(_curConfig >> "zoneSize"); _resourceZones = getArray(_curConfig >> "zones"); _requiredItem = getText(_curConfig >> "item"); + { if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith {_zone = _x;}; - } forEach _resourceZones; + true + } count _resourceZones; - if (_zone != "") exitWith {}; + if !(_zone isEqualTo "") exitWith {}; }; if (_zone isEqualTo "") exitWith {life_action_inUse = false;}; -if (_requiredItem != "") then { - _valItem = missionNamespace getVariable "life_inv_" + _requiredItem; +if !(_requiredItem isEqualTo "") then { + private _valItem = missionNamespace getVariable [format["life_inv_%1", _requiredItem], 0]; if (_valItem < 1) exitWith { switch (_requiredItem) do { //Messages here }; life_action_inUse = false; - _exit = true; + breakOut "main"; }; }; -if (_exit) exitWith {life_action_inUse = false;}; - -_amount = round(random(_maxGather)) + 1; -_diff = [_resource,_amount,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +private _amount = round(random(_maxGather)) + 1; +private _diff = [_resource,_amount,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; if (_diff isEqualTo 0) exitWith { hint localize "STR_NOTF_InvFull"; life_action_inUse = false; @@ -63,12 +71,12 @@ switch (_requiredItem) do { for "_i" from 0 to 4 do { player playMoveNow "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; - waitUntil{animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";}; + waitUntil {animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";}; sleep 0.5; }; if ([true,_resource,_diff] call life_fnc_handleInv) then { - _itemName = M_CONFIG(getText,"VirtualItems",_resource,"displayName"); + private _itemName = M_CONFIG(getText,"VirtualItems",_resource,"displayName"); titleText[format [localize "STR_NOTF_Gather_Success",(localize _itemName),_diff],"PLAIN"]; }; diff --git a/Altis_Life.Altis/core/actions/fn_getDPMission.sqf b/Altis_Life.Altis/core/actions/fn_getDPMission.sqf index e38466fa9..89a518266 100644 --- a/Altis_Life.Altis/core/actions/fn_getDPMission.sqf +++ b/Altis_Life.Altis/core/actions/fn_getDPMission.sqf @@ -35,12 +35,12 @@ player setCurrentTask life_cur_task; ["DeliveryAssigned",[format [localize "STR_NOTF_DPTask",_dp]]] call bis_fnc_showNotification; [] spawn { - waitUntil {!life_delivery_in_progress || !alive player}; + waitUntil {!life_delivery_in_progress || {!alive player}}; if (!alive player) then { life_cur_task setTaskState "Failed"; player removeSimpleTask life_cur_task; - ["DeliveryFailed",[localize "STR_NOTF_DPFailed"]] call BIS_fnc_showNotification; + ["DeliveryFailed", [localize "STR_NOTF_DPFailed"]] call BIS_fnc_showNotification; life_delivery_in_progress = false; life_dp_point = nil; }; -}; \ No newline at end of file +}; diff --git a/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf b/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf index bf08325a5..746f6c6ce 100644 --- a/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf +++ b/Altis_Life.Altis/core/actions/fn_gutAnimal.sqf @@ -1,68 +1,74 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_gutAnimal.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Guts the animal? -*/ -private ["_animalCorpse","_upp","_ui","_progress","_pgText","_cP","_displayName","_item"]; -_animalCorpse = param [0,objNull,[objNull]]; -if (isNull _animalCorpse) exitWith {}; //Object passed is null? - -life_interrupted = false; -if (player distance _animalCorpse > 3.5) exitWith {}; //WTF need check with nearest objects I love Arma -life_action_inUse = true; - -switch (typeOf _animalCorpse) do { - case "Hen_random_F": {_displayName = localize "STR_ANIM_chicken"; _item = "hen_raw";}; - case "Cock_random_F": {_displayName = localize "STR_ANIM_Rooster"; _item = "rooster_raw";}; - case "Goat_random_F": {_displayName = localize "STR_ANIM_Goat"; _item = "goat_raw";}; - case "Sheep_random_F": {_displayName = localize "STR_ANIM_Sheep"; _item = "sheep_raw";}; - case "Rabbit_F": {_displayName = localize "STR_ANIM_Rabbit"; _item = "rabbit_raw";}; - default {_displayName = ""; _item = "";}; -}; - -if (_displayName isEqualTo "") exitWith {life_action_inUse = false;}; - -_upp = format [localize "STR_NOTF_Gutting",_displayName]; -//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 { - if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - uiSleep 0.15; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if (_cP >= 1) exitWith {}; - if (!alive player) exitWith {}; - if (isNull _animalCorpse) exitWith {}; - if !(isNull objectParent player) exitWith {}; - if (life_interrupted) exitWith {}; -}; - -life_action_inUse = false; -"progressBar" cutText ["","PLAIN"]; -player playActionNow "stop"; -if (isNull _animalCorpse) exitWith {life_action_inUse = false;}; -if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; -if !(isNull objectParent player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; - -if ([true,_item,1] call life_fnc_handleInv) then { - deleteVehicle _animalCorpse; - titleText[format [(localize "STR_NOTF_Guttingfinish"),_displayName],"PLAIN"]; -} else { - titleText[(localize "STR_NOTF_InvFull"),"PLAIN"]; -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_gutAnimal.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Guts the animal? +*/ + +params [ + ["_animalCorpse", objNull, [objNull]] +]; + +if (isNull _animalCorpse) exitWith {}; //Object passed is null? + +life_interrupted = false; +if (player distance _animalCorpse > 3.5) exitWith {}; +life_action_inUse = true; + +private _animalInfo = switch (typeOf _animalCorpse) do { + case "Hen_random_F": {["STR_ANIM_chicken", "hen_raw"]}; + case "Cock_random_F": {["STR_ANIM_Rooster", "rooster_raw"]}; + case "Goat_random_F": {["STR_ANIM_Goat", "goat_raw"]}; + case "Sheep_random_F": {["STR_ANIM_Sheep", "sheep_raw"]}; + case "Rabbit_F": {["STR_ANIM_Rabbit", "rabbit_raw"]}; + default {["", ""]}; +}; + +_animalInfo params ["_displayName", "_item"]; +_displayName = localize _displayName; + +if (_displayName isEqualTo "") exitWith {life_action_inUse = false;}; + +private _upp = format [localize "STR_NOTF_Gutting",_displayName]; +//Setup our progress bar. +disableSerialization; +"progressBar" cutRsc ["life_progress","PLAIN"]; +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; +private _cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + uiSleep 0.15; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (!alive player) exitWith {}; + if (isNull _animalCorpse) exitWith {}; + if !(isNull objectParent player) exitWith {}; + if (life_interrupted) exitWith {}; +}; + +life_action_inUse = false; +"progressBar" cutText ["","PLAIN"]; +player playActionNow "stop"; +if (isNull _animalCorpse) exitWith {life_action_inUse = false;}; +if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; +if !(isNull objectParent player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; + +if ([true,_item,1] call life_fnc_handleInv) then { + deleteVehicle _animalCorpse; + titleText[format [(localize "STR_NOTF_Guttingfinish"),_displayName],"PLAIN"]; +} else { + titleText[(localize "STR_NOTF_InvFull"),"PLAIN"]; +}; diff --git a/Altis_Life.Altis/core/actions/fn_healHospital.sqf b/Altis_Life.Altis/core/actions/fn_healHospital.sqf index c6367e7ea..cd7ca7d7d 100644 --- a/Altis_Life.Altis/core/actions/fn_healHospital.sqf +++ b/Altis_Life.Altis/core/actions/fn_healHospital.sqf @@ -1,39 +1,42 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_healHospital.sqf - Author: Bryan "Tonic" Boardwine - Reworked: Jesse "TKCJesse" Schultz - - Description: - Prompts user with a confirmation dialog to heal themselves. - Used at the hospitals to restore health to full. - Note: Dialog helps stop a few issues regarding money loss. -*/ -private ["_healCost","_action"]; -if (life_action_inUse) exitWith {}; -if ((damage player) < 0.01) exitWith {hint localize "STR_NOTF_HS_FullHealth"}; -_healCost = LIFE_SETTINGS(getNumber,"hospital_heal_fee"); -if (CASH < _healCost) exitWith {hint format [localize "STR_NOTF_HS_NoCash",[_healCost] call life_fnc_numberText];}; - -life_action_inUse = true; -_action = [ - format [localize "STR_NOTF_HS_PopUp",[_healCost] call life_fnc_numberText], - localize "STR_NOTF_HS_TITLE", - localize "STR_Global_Yes", - localize "STR_Global_No" -] call BIS_fnc_guiMessage; - -if (_action) then { - titleText[localize "STR_NOTF_HS_Healing","PLAIN"]; - closeDialog 0; - uiSleep 8; - if (player distance (_this select 0) > 5) exitWith {life_action_inUse = false; titleText[localize "STR_NOTF_HS_ToFar","PLAIN"]}; - titleText[localize "STR_NOTF_HS_Healed","PLAIN"]; - player setDamage 0; - CASH = CASH - _healCost; - life_action_inUse = false; -} else { - hint localize "STR_NOTF_ActionCancel"; - closeDialog 0; - life_action_inUse = false; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_healHospital.sqf + Author: Bryan "Tonic" Boardwine + Reworked: Jesse "TKCJesse" Schultz + + Description: + Prompts user with a confirmation dialog to heal themselves. + Used at the hospitals to restore health to full. + Note: Dialog helps stop a few issues regarding money loss. +*/ +params [ + ["_target", objNull, [objNull]] +]; + +if (life_action_inUse) exitWith {}; +if ((damage player) < 0.01) exitWith {hint localize "STR_NOTF_HS_FullHealth"}; + +private _healCost = LIFE_SETTINGS(getNumber,"hospital_heal_fee"); +if (CASH < _healCost) exitWith {hint format [localize "STR_NOTF_HS_NoCash",[_healCost] call life_fnc_numberText]}; + +life_action_inUse = true; + +private _action = [ + format [localize "STR_NOTF_HS_PopUp",[_healCost] call life_fnc_numberText], + localize "STR_NOTF_HS_TITLE", + localize "STR_Global_Yes", + localize "STR_Global_No" +] call BIS_fnc_guiMessage; + +closeDialog 0; +if (_action) then { + titleText [localize "STR_NOTF_HS_Healing", "PLAIN"]; + uiSleep 8; + if (player distance _target > 5) exitWith {life_action_inUse = false; titleText [localize "STR_NOTF_HS_ToFar", "PLAIN"]}; + titleText [localize "STR_NOTF_HS_Healed", "PLAIN"]; + player setDamage 0; + CASH = CASH - _healCost; +} else { + hint localize "STR_NOTF_ActionCancel"; +}; +life_action_inUse = false; diff --git a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf index 1bf326fcf..adca0ea63 100644 --- a/Altis_Life.Altis/core/actions/fn_impoundAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_impoundAction.sqf @@ -1,80 +1,89 @@ -#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 +*/ + +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"}; + +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; + +private _upp = localize "STR_NOTF_Impounding"; +//Setup our progress bar. +disableSerialization; +"progressBar" cutRsc ["life_progress","PLAIN"]; +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; +private _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 (crew _vehicle isEqualTo []) then { + private _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 { + 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]; + 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/actions/fn_mine.sqf b/Altis_Life.Altis/core/actions/fn_mine.sqf index 873f64b58..23d00d109 100644 --- a/Altis_Life.Altis/core/actions/fn_mine.sqf +++ b/Altis_Life.Altis/core/actions/fn_mine.sqf @@ -1,29 +1,42 @@ #include "..\..\script_macros.hpp" - /* - File: fn_mine.sqf - Author: Devilfloh - Editor: Dardo - - Description: - Same as fn_gather,but it allows use of probabilities for mining. - */ -private ["_maxGather", "_resource", "_amount", "_requiredItem", "_mined"]; +/* + File: fn_mine.sqf + Author: Devilfloh + Editor: Dardo + + Description: + Same as fn_gather,but it allows use of probabilities for mining. +*/ + +scopeName "main"; + if (life_action_inUse) exitWith {}; if !(isNull objectParent player) exitWith {}; if (player getVariable "restrained") exitWith { hint localize "STR_NOTF_isrestrained"; }; -_exit = false; + if (player getVariable "playerSurrender") exitWith { hint localize "STR_NOTF_surrender"; }; + life_action_inUse = true; -_zone = ""; -_requiredItem = ""; + +private _zone = ""; +private _requiredItem = ""; _resourceCfg = missionConfigFile >> "CfgGather" >> "Minerals"; _percent = (floor random 100) + 1; //Make sure it's not 0 +private "_curConfig"; +private "_resource"; +private "_resources"; +private "_maxGather"; +private "_zoneSize"; +private "_resourceZones"; +private "_mined"; + + for "_i" from 0 to count(_resourceCfg)-1 do { _curConfig = _resourceCfg select _i; _resources = getArray(_curConfig >> "mined"); @@ -73,16 +86,12 @@ if (_requiredItem != "") then { }; }; life_action_inUse = false; - _exit = true; + breakOut "main"; }; }; -if (_exit) exitWith { - life_action_inUse = false; -}; - -_amount = round(random(_maxGather)) + 1; -_diff = [_mined, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff; +private _amount = round(random(_maxGather)) + 1; +private _diff = [_mined, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff; if (_diff isEqualTo 0) exitWith { hint localize "STR_NOTF_InvFull"; life_action_inUse = false; diff --git a/Altis_Life.Altis/core/actions/fn_newsBroadcast.sqf b/Altis_Life.Altis/core/actions/fn_newsBroadcast.sqf index 74b5ebbf5..3d919e8e0 100644 --- a/Altis_Life.Altis/core/actions/fn_newsBroadcast.sqf +++ b/Altis_Life.Altis/core/actions/fn_newsBroadcast.sqf @@ -6,21 +6,19 @@ Description: Creates the dialog and handles the data in the Channel 7 News Dialog. */ -#define Confirm 100104 -private ["_msgCost","_display","_confirmBtn","_msgCooldown","_broadcastDelay"]; - -if (!dialog) then { +if !(dialog) then { createDialog "life_news_broadcast"; }; disableSerialization; -_display = findDisplay 100100; -_confirmBtn = _display displayCtrl Confirm; + +private _display = findDisplay 100100; +private _confirmBtn = _display displayCtrl 100104; _confirmBtn ctrlEnable false; -_msgCooldown = (60 * LIFE_SETTINGS(getNumber,"news_broadcast_cooldown")); -_msgCost = LIFE_SETTINGS(getNumber,"news_broadcast_cost"); +private _msgCooldown = 60 * LIFE_SETTINGS(getNumber,"news_broadcast_cooldown"); +private _msgCost = LIFE_SETTINGS(getNumber,"news_broadcast_cost"); if (CASH < _msgCost) then { hint format [localize "STR_News_NotEnough",[_msgCost] call life_fnc_numberText]; @@ -29,6 +27,7 @@ if (CASH < _msgCost) then { _confirmBtn buttonSetAction "[] call life_fnc_postNewsBroadcast; closeDialog 0;"; }; +private "_broadcastDelay"; if (isNil "life_broadcastTimer" || {(time - life_broadcastTimer) > _msgCooldown}) then { _broadcastDelay = localize "STR_News_Now"; } else { @@ -36,4 +35,4 @@ if (isNil "life_broadcastTimer" || {(time - life_broadcastTimer) > _msgCooldown} _confirmBtn ctrlEnable false; }; -CONTROL(100100,100103) ctrlSetStructuredText parseText format [ localize "STR_News_StructuredText",[_msgCost] call life_fnc_numberText,_broadcastDelay]; \ No newline at end of file +CONTROL(100100,100103) ctrlSetStructuredText parseText format [localize "STR_News_StructuredText",[_msgCost] call life_fnc_numberText,_broadcastDelay]; diff --git a/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf b/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf index 860820561..a31a51493 100644 --- a/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf +++ b/Altis_Life.Altis/core/actions/fn_packupSpikes.sqf @@ -5,8 +5,8 @@ Description: Packs up a deployed spike strip. */ -private ["_spikes"]; -_spikes = nearestObjects[getPos player,["Land_Razorwire_F"],8] select 0; + +private _spikes = nearestObjects[getPos player, ["Land_Razorwire_F"], 8] select 0; if (isNil "_spikes") exitWith {}; if ([true,"spikeStrip",1] call life_fnc_handleInv) then { diff --git a/Altis_Life.Altis/core/actions/fn_pickupItem.sqf b/Altis_Life.Altis/core/actions/fn_pickupItem.sqf index 9ed5d5af2..8d942d5d6 100644 --- a/Altis_Life.Altis/core/actions/fn_pickupItem.sqf +++ b/Altis_Life.Altis/core/actions/fn_pickupItem.sqf @@ -1,62 +1,71 @@ -#include "..\..\script_macros.hpp" -#define INUSE(ENTITY) ENTITY setVariable ["inUse",false,true] -/* - File: fn_pickupItem.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master handling for picking up an item. -*/ -private ["_itemInfo","_itemName","_illegal","_diff"]; -if ((time - life_action_delay) < 2) exitWith {hint localize "STR_NOTF_ActionDelay"; INUSE(_this);}; -if (isNull _this || {player distance _this > 3}) exitWith {INUSE(_this);}; - -_itemInfo = _this getVariable ["item",[]]; if (count _itemInfo isEqualTo 0) exitWith {deleteVehicle _this;}; -_illegal = ITEM_ILLEGAL(_itemInfo select 0); -_itemName = ITEM_NAME(_itemInfo select 0); -if (isLocalized _itemName) then { - _itemName = (localize _itemName); -}; - -if (playerSide isEqualTo west && _illegal isEqualTo 1) exitWith { - titleText[format [localize "STR_NOTF_PickedEvidence",_itemName,[round(ITEM_SELLPRICE(_itemInfo select 0) / 2)] call life_fnc_numberText],"PLAIN"]; - BANK = BANK + round(ITEM_SELLPRICE(_itemInfo select 0) / 2); - deleteVehicle _this; - [1] call SOCK_fnc_updatePartial; - life_action_delay = time; -}; - -life_action_delay = time; -_diff = [(_itemInfo select 0),(_itemInfo select 1),life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; -if (_diff <= 0) exitWith {hint localize "STR_NOTF_InvFull"; INUSE(_this);}; - -if (!(_diff isEqualTo (_itemInfo select 1))) then { - if ([true,(_itemInfo select 0),_diff] call life_fnc_handleInv) then { - player playMove "AinvPknlMstpSlayWrflDnon"; - - _this setVariable ["item",[(_itemInfo select 0),(_itemInfo select 1) - _diff],true]; - titleText[format [localize "STR_NOTF_Picked",_diff,_itemName],"PLAIN"]; - INUSE(_this); - } else { - INUSE(_this); - }; -} else { - if ([true,(_itemInfo select 0),(_itemInfo select 1)] call life_fnc_handleInv) then { - deleteVehicle _this; - //waitUntil{isNull _this}; - player playMove "AinvPknlMstpSlayWrflDnon"; - - titleText[format [localize "STR_NOTF_Picked",_diff,_itemName],"PLAIN"]; - } else { - INUSE(_this); - }; -}; - -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_pickedUp_BEF",_diff,_itemName]; - } else { - advanced_log = format [localize "STR_DL_AL_pickedUp",profileName,(getPlayerUID player),_diff,_itemName]; - }; - publicVariableServer "advanced_log"; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_pickupItem.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master handling for picking up an item. +*/ +params [ + ["_object", objNull, [objNull]] +]; + +#define RELEASE_USE(ENTITY) ENTITY setVariable ["inUse",false,true] + +if ((time - life_action_delay) < 2) exitWith {hint localize "STR_NOTF_ActionDelay"; RELEASE_USE(_object);}; +if (isNull _object || {player distance _object > 3}) exitWith {RELEASE_USE(_object);}; + +private _itemInfo = _object getVariable ["item",[]]; +if (_itemInfo isEqualTo []) exitWith {deleteVehicle _object;}; + +_itemInfo params ["_item", "_value"]; + +private _illegal = ITEM_ILLEGAL(_item); +private _itemName = ITEM_NAME(_item); + +if (isLocalized _itemName) then { + _itemName = localize _itemName; +}; + +life_action_delay = time; + +if (playerSide isEqualTo west && {_illegal isEqualTo 1}) exitWith { + private _evidencePrice = round(ITEM_SELLPRICE(_item) / 2); + titleText[format [localize "STR_NOTF_PickedEvidence",_itemName,[_evidencePrice] call life_fnc_numberText],"PLAIN"]; + BANK = BANK + _evidencePrice; + deleteVehicle _object; + [1] call SOCK_fnc_updatePartial; +}; + +private _diff = [_item,_value,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; +if (_diff <= 0) exitWith { + hint localize "STR_NOTF_InvFull"; + RELEASE_USE(_object); +}; + +if !(_diff isEqualTo _value) then { + if ([true,_item,_diff] call life_fnc_handleInv) then { + player playMove "AinvPknlMstpSlayWrflDnon"; + _object setVariable ["item",[_item,_value - _diff],true]; + + titleText[format [localize "STR_NOTF_Picked",_diff,_itemName],"PLAIN"]; + }; + RELEASE_USE(_object); +} else { + if ([true,_item,_value] call life_fnc_handleInv) then { + deleteVehicle _object; + player playMove "AinvPknlMstpSlayWrflDnon"; + titleText[format [localize "STR_NOTF_Picked",_diff,_itemName],"PLAIN"]; + } else { + RELEASE_USE(_object); + }; +}; + +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_pickedUp_BEF",_diff,_itemName]; + } else { + advanced_log = format [localize "STR_DL_AL_pickedUp",profileName,(getPlayerUID player),_diff,_itemName]; + }; + publicVariableServer "advanced_log"; +}; diff --git a/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf b/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf index 49eebc289..aa4239eab 100644 --- a/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf +++ b/Altis_Life.Altis/core/actions/fn_pickupMoney.sqf @@ -1,37 +1,45 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_pickupMoney.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Picks up money -*/ -private "_value"; -if ((time - life_action_delay) < 1.5) exitWith {hint localize "STR_NOTF_ActionDelay"; _this setVariable ["inUse",false,true];}; -if (isNull _this || {player distance _this > 3}) exitWith {_this setVariable ["inUse",false,true];}; - -_value = ((_this getVariable "item") select 1); -if (!isNil "_value") exitWith { - deleteVehicle _this; - - switch (true) do { - case (_value > 20000000) : {_value = 100000;}; //VAL>20mil->100k - case (_value > 5000000) : {_value = 250000;}; //VAL>5mil->250k - default {}; - }; - - player playMove "AinvPknlMstpSlayWrflDnon"; - titleText[format [localize "STR_NOTF_PickedMoney",[_value] call life_fnc_numberText],"PLAIN"]; - CASH = CASH + _value; - [0] call SOCK_fnc_updatePartial; - life_action_delay = time; - - if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { - if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { - money_log = format [localize "STR_DL_ML_pickedUpMoney_BEF",[_value] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - } else { - money_log = format [localize "STR_DL_ML_pickedUpMoney",profileName,(getPlayerUID player),[_value] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - }; - publicVariableServer "money_log"; - }; -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_pickupMoney.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Picks up money +*/ +params [ + ["_money", objNull, [objNull]] +]; + +if ((time - life_action_delay) < 1.5) exitWith { + hint localize "STR_NOTF_ActionDelay"; + _money setVariable ["inUse",false,true]; +}; +if (isNull _money || {player distance _money > 3}) exitWith { + _money setVariable ["inUse",false,true]; +}; + +private _value = (_money getVariable "item") select 1; +if (!isNil "_value") exitWith { + deleteVehicle _money; + + _value = switch (true) do { + case (_value > 20000000) : {100000}; //VAL>20mil->100k + case (_value > 5000000) : {250000}; //VAL>5mil->250k + default {}; + }; + + player playMove "AinvPknlMstpSlayWrflDnon"; + titleText[format [localize "STR_NOTF_PickedMoney",[_value] call life_fnc_numberText],"PLAIN"]; + CASH = CASH + _value; + [0] call SOCK_fnc_updatePartial; + life_action_delay = time; + + if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_pickedUpMoney_BEF",[_value] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_pickedUpMoney",profileName,(getPlayerUID player),[_value] call life_fnc_numberText,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; + }; +}; diff --git a/Altis_Life.Altis/core/actions/fn_postBail.sqf b/Altis_Life.Altis/core/actions/fn_postBail.sqf index 34f1cbcc5..98f355a72 100644 --- a/Altis_Life.Altis/core/actions/fn_postBail.sqf +++ b/Altis_Life.Altis/core/actions/fn_postBail.sqf @@ -7,8 +7,12 @@ Called when the player attempts to post bail. Needs to be revised. */ -private ["_unit"]; -_unit = param [1,objNull,[objNull]]; + +params [ + "", + ["_unit", objNull, [objNull]] +]; + if (life_bail_paid) exitWith {}; if (isNil "life_bail_amount") then {life_bail_amount = 3500;}; if (!life_canpay_bail) exitWith {hint localize "STR_NOTF_Bail_Post"}; diff --git a/Altis_Life.Altis/core/actions/fn_processAction.sqf b/Altis_Life.Altis/core/actions/fn_processAction.sqf index a7abb756f..81308b77c 100644 --- a/Altis_Life.Altis/core/actions/fn_processAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_processAction.sqf @@ -1,147 +1,202 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_processAction.sqf - Author: Bryan "Tonic" Boardwine - Modified : NiiRoZz - - Description: - Master handling for processing an item. - NiiRoZz : Added multiprocess -*/ -private ["_vendor","_type","_itemInfo","_oldItem","_newItemWeight","_newItem","_oldItemWeight","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui","_progress","_pgText","_cP","_materialsRequired","_materialsGiven","_noLicenseCost","_text","_filter","_totalConversions","_minimumConversions"]; -_vendor = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_type = [_this,3,"",[""]] call BIS_fnc_param; -//Error check -if (isNull _vendor || _type isEqualTo "" || (player distance _vendor > 10)) exitWith {}; -life_action_inUse = true;//Lock out other actions during processing. - -if (isClass (missionConfigFile >> "ProcessAction" >> _type)) then { - _filter = false; - _materialsRequired = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsReq"); - _materialsGiven = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsGive"); - _noLicenseCost = M_CONFIG(getNumber,"ProcessAction",_type,"NoLicenseCost"); - _text = M_CONFIG(getText,"ProcessAction",_type,"Text"); -} else {_filter = true;}; - -if (_filter) exitWith {life_action_inUse = false;}; - -_itemInfo = [_materialsRequired,_materialsGiven,_noLicenseCost,(localize format ["%1",_text])]; -if (count _itemInfo isEqualTo 0) exitWith {life_action_inUse = false;}; - -//Setup vars. -_oldItem = _itemInfo select 0; -_newItem = _itemInfo select 1; -_cost = _itemInfo select 2; -_upp = _itemInfo select 3; -_exit = false; -if (count _oldItem isEqualTo 0) exitWith {life_action_inUse = false;}; - -_totalConversions = []; -{ - _var = ITEM_VALUE(_x select 0); - if (_var isEqualTo 0) exitWith {_exit = true;}; - if (_var < (_x select 1)) exitWith {_exit = true;}; - _totalConversions pushBack (floor (_var/(_x select 1))); -} forEach _oldItem; - -if (_exit) exitWith {life_is_processing = false; hint localize "STR_NOTF_NotEnoughItemProcess"; life_action_inUse = false;}; - -if (_vendor in [mari_processor,coke_processor,heroin_processor]) then { - _hasLicense = true; -} else { - _hasLicense = LICENSE_VALUE(_type,"civ"); -}; - -_cost = _cost * (count _oldItem); - -_minimumConversions = selectMin _totalConversions; -_oldItemWeight = 0; -{ - _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1); - _oldItemWeight = _oldItemWeight + _weight; -} count _oldItem; - -_newItemWeight = 0; -{ - _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1); - _newItemWeight = _newItemWeight + _weight; -} count _newItem; - -_exit = false; - -if (_newItemWeight > _oldItemWeight) then { - _netChange = _newItemWeight - _oldItemWeight; - _freeSpace = life_maxWeight - life_carryWeight; - if (_freeSpace < _netChange) exitWith {_exit = true;}; - private _estConversions = floor(_freeSpace / _netChange); - if (_estConversions < _minimumConversions) then { - _minimumConversions = _estConversions; - }; -}; - -if (_exit) exitWith {hint localize "STR_Process_Weight"; life_is_processing = false; life_action_inUse = false;}; - -//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; - -life_is_processing = true; - -if (_hasLicense) then { - for "_i" from 0 to 1 step 0 do { - uiSleep 0.28; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if (_cP >= 1) exitWith {}; - if (player distance _vendor > 10) exitWith {}; - }; - if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; - - { - [false,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; - } count _oldItem; - - { - [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; - } count _newItem; - - "progressBar" cutText ["","PLAIN"]; - if (_minimumConversions isEqualTo (selectMin _totalConversions)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; - life_is_processing = false; life_action_inUse = false; -} else { - if (CASH < _cost) exitWith {hint format [localize "STR_Process_License",[_cost] call life_fnc_numberText]; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; - - for "_i" from 0 to 1 step 0 do { - uiSleep 0.9; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if (_cP >= 1) exitWith {}; - if (player distance _vendor > 10) exitWith {}; - }; - - if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; - if (CASH < _cost) exitWith {hint format [localize "STR_Process_License",[_cost] call life_fnc_numberText]; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;}; - - { - [false,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; - } count _oldItem; - - { - [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv; - } count _newItem; - - "progressBar" cutText ["","PLAIN"]; - if (_minimumConversions isEqualTo (selectMin _totalConversions)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";}; - CASH = CASH - _cost; - [0] call SOCK_fnc_updatePartial; - life_is_processing = false; - life_action_inUse = false; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_processAction.sqf + Author: Bryan "Tonic" Boardwine + Modified : NiiRoZz + + Description: + Master handling for processing an item. + NiiRoZz : Added multiprocess +*/ + +scopeName "main"; + +params [ + ["_vendor", objNull, [objNull]], + "", + "", + ["_type", "", [""]] + +]; + +//Error check +if (isNull _vendor || {_type isEqualTo ""} || {player distance _vendor > 10}) exitWith {}; + +if !(isClass (missionConfigFile >> "ProcessAction" >> _type)) exitWith { + diag_log format ["%1: Processor class doesn't exist",_type]; +}; + +private _materialsRequired = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsReq"); +if (_materialsRequired isEqualTo []) exitWith {}; + +life_action_inUse = true; +private _materialsGiven = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsGive"); +private _noLicenseCost = M_CONFIG(getNumber,"ProcessAction",_type,"NoLicenseCost"); +private _text = M_CONFIG(getText,"ProcessAction",_type,"Text"); + +if (isLocalized _text) then { + _text = localize _text; +}; + +private _totalConversions = []; +{ + _x params [ + "_var", + "_noRequired" + ]; + + private _var = ITEM_VALUE(_var); + + if (_var isEqualTo 0 || {_var < _noRequired}) then { + hint localize "STR_NOTF_NotEnoughItemProcess"; + life_action_inUse = false; + breakOut "main"; + }; + _totalConversions pushBack (floor (_var / _noRequired)); + + true +} count _materialsRequired; + +private _hasLicense = true; +if !(_vendor in [mari_processor,coke_processor,heroin_processor]) then { + _hasLicense = LICENSE_VALUE(_type,"civ"); +}; + +_noLicenseCost = _noLicenseCost * (count _materialsRequired); + +private _minimumConversions = selectMin _totalConversions; +private _materialsRequiredWeight = 0; +{ + _x params ["_item","_count"]; + private _weight = ([_item] call life_fnc_itemWeight) * _count; + _materialsRequiredWeight = _materialsRequiredWeight + _weight; + true +} count _materialsRequired; + +private _materialsGivenWeight = 0; +{ + _x params ["_item","_count"]; + private _weight = ([_item] call life_fnc_itemWeight) * _count; + _materialsGivenWeight = _materialsGivenWeight + _weight; + true +} count _materialsGiven; + +if (_materialsGivenWeight > _materialsRequiredWeight) then { + private _netChange = _materialsGivenWeight - _materialsRequiredWeight; + private _freeSpace = life_maxWeight - life_carryWeight; + + if (_freeSpace < _netChange) then { + hint localize "STR_Process_Weight"; + life_action_inUse = false; + breakOut "main"; + }; + + private _estConversions = floor(_freeSpace / _netChange); + if (_estConversions < _minimumConversions) then { + _minimumConversions = _estConversions; + }; +}; + +//Setup our progress bar. +disableSerialization; +"progressBar" cutRsc ["life_progress","PLAIN"]; +private _ui = uiNamespace getVariable "life_progress"; +private _progress = _ui displayCtrl 38201; +private _pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format ["%2 (1%1)...","%",_text]; +_progress progressSetPosition 0.01; +private _cP = 0.01; + +life_is_processing = true; + +if (_hasLicense) then { + for "_i" from 0 to 1 step 0 do { + uiSleep 0.28; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_text]; + if (_cP >= 1) exitWith {}; + if (player distance _vendor > 10) exitWith {}; + }; + if (player distance _vendor > 10) exitWith { + hint localize "STR_Process_Stay"; + "progressBar" cutText ["","PLAIN"]; + life_is_processing = false; + life_action_inUse = false; + }; + + { + _x params ["_item","_count"]; + [false,_item,_count * (_minimumConversions)] call life_fnc_handleInv; + true + } count _materialsRequired; + + { + _x params ["_item","_count"]; + [true,_item,_count * (_minimumConversions)] call life_fnc_handleInv; + true + } count _materialsGiven; + + "progressBar" cutText ["","PLAIN"]; + if (_minimumConversions isEqualTo (selectMin _totalConversions)) then { + hint localize "STR_NOTF_ItemProcess"; + } else { + hint localize "STR_Process_Partial"; + }; + + life_is_processing = false; + life_action_inUse = false; +} else { + if (CASH < _noLicenseCost) exitWith { + hint format [localize "STR_Process_License",[_noLicenseCost] call life_fnc_numberText]; + "progressBar" cutText ["","PLAIN"]; + life_is_processing = false; + life_action_inUse = false; + }; + + for "_i" from 0 to 1 step 0 do { + uiSleep 0.9; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_text]; + if (_cP >= 1) exitWith {}; + if (player distance _vendor > 10) exitWith {}; + }; + + if (player distance _vendor > 10) exitWith { + hint localize "STR_Process_Stay"; + "progressBar" cutText ["","PLAIN"]; + life_is_processing = false; + life_action_inUse = false; + }; + + if (CASH < _noLicenseCost) exitWith { + hint format [localize "STR_Process_License",[_noLicenseCost] call life_fnc_numberText]; + "progressBar" cutText ["","PLAIN"]; + life_is_processing = false; + life_action_inUse = false; + }; + + { + _x params ["_item","_count"]; + [false,_item,_count * (_minimumConversions)] call life_fnc_handleInv; + true + } count _materialsRequired; + + { + _x params ["_item","_count"]; + [true,_item,_count * (_minimumConversions)] call life_fnc_handleInv; + true + } count _materialsGiven; + + "progressBar" cutText ["","PLAIN"]; + if (_minimumConversions isEqualTo (selectMin _totalConversions)) then { + hint localize "STR_NOTF_ItemProcess"; + } else { + hint localize "STR_Process_Partial"; + }; + CASH = CASH - _noLicenseCost; + [0] call SOCK_fnc_updatePartial; + life_is_processing = false; + life_action_inUse = false; +}; diff --git a/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf b/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf index fc0383e9e..3a6094193 100644 --- a/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_pulloutAction.sqf @@ -6,12 +6,14 @@ Description: Pulls civilians out of a car if it's stopped. */ -private ["_crew"]; -_crew = crew cursorObject; + +private _crew = crew cursorObject; { if !(side _x isEqualTo west) then { - _x setVariable ["transporting",false,true]; _x setVariable ["Escorting",false,true]; + _x setVariable ["transporting",false,true]; + _x setVariable ["Escorting",false,true]; [_x] remoteExecCall ["life_fnc_pulloutVeh",_x]; }; -} forEach _crew; + true +} count _crew; diff --git a/Altis_Life.Altis/core/actions/fn_putInCar.sqf b/Altis_Life.Altis/core/actions/fn_putInCar.sqf index a920b480e..dd2c80c34 100644 --- a/Altis_Life.Altis/core/actions/fn_putInCar.sqf +++ b/Altis_Life.Altis/core/actions/fn_putInCar.sqf @@ -1,19 +1,23 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_putInCar.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Finds the nearest vehicle and loads the target into the vehicle. -*/ -private ["_unit"]; -_unit = param [0,objNull,[objNull]]; -if (isNull _unit || !isPlayer _unit) exitWith {}; - -_nearestVehicle = nearestObjects[getPosATL player,["Car","Ship","Submarine","Air"],10] select 0; -if (isNil "_nearestVehicle") exitWith {hint localize "STR_NOTF_VehicleNear"}; - -detach _unit; -[_nearestVehicle] remoteExecCall ["life_fnc_moveIn",_unit]; -_unit setVariable ["Escorting",false,true]; -_unit setVariable ["transporting",true,true]; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_putInCar.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Finds the nearest vehicle and loads the target into the vehicle. +*/ +params [ + ["_unit", objNull, [objNull]] +]; + +if (isNull _unit || {!isPlayer _unit}) exitWith {}; + +(nearestObjects[getPosATL player,["Car","Ship","Submarine","Air"], 10]) params [["_nearestVehicle", objNull, [objNull]]]; +if (isNull _nearestVehicle) exitWith { + hint localize "STR_NOTF_VehicleNear" +}; + +detach _unit; +[_nearestVehicle] remoteExecCall ["life_fnc_moveIn",_unit]; +_unit setVariable ["Escorting",false,true]; +_unit setVariable ["transporting",true,true]; diff --git a/Altis_Life.Altis/core/actions/fn_removeContainer.sqf b/Altis_Life.Altis/core/actions/fn_removeContainer.sqf index fbe4d75e4..2f2263dcc 100644 --- a/Altis_Life.Altis/core/actions/fn_removeContainer.sqf +++ b/Altis_Life.Altis/core/actions/fn_removeContainer.sqf @@ -1,48 +1,54 @@ -#include "..\..\script_macros.hpp" -/* - File : removeContainer.sqf - Author: NiiRoZz - - Description: - Delete Container from house storage -*/ -private ["_house","_action","_container","_containerType","_containers"]; -_container = param [0,objNull,[objNull]]; -_containerType = typeOf _container; -_house = nearestObject [player, "House"]; -if (!(_house in life_vehicles)) exitWith {hint localize "STR_ISTR_Box_NotinHouse"}; -if (isNull _container) exitWith {}; -_containers = _house getVariable ["containers",[]]; -closeDialog 0; - -_action = [ - format [localize "STR_House_DeleteContainerMSG"],localize "STR_pInAct_RemoveContainer",localize "STR_Global_Remove",localize "STR_Global_Cancel" -] call BIS_fnc_guiMessage; - -if (_action) then { - private ["_box","_diff"]; - _box = switch (_containerType) do { - case ("B_supplyCrate_F"): {"storagebig"}; - case ("Box_IND_Grenades_F"): {"storagesmall"}; - default {"None"}; - }; - if (_box == "None") exitWith {}; - - _diff = [_box,1,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; - if (_diff isEqualTo 0) exitWith {hint localize "STR_NOTF_InvFull"}; - - if (life_HC_isActive) then { - [_container] remoteExecCall ["HC_fnc_deleteDBContainer",HC_Life]; - } else { - [_container] remoteExecCall ["TON_fnc_deleteDBContainer",RSERV]; - }; - - { - if (_x == _container) then { - _containers deleteAt _forEachIndex; - }; - } forEach _containers; - _house setVariable ["containers",_containers,true]; - - [true,_box,1] call life_fnc_handleInv; -}; +#include "..\..\script_macros.hpp" +/* + File : removeContainer.sqf + Author: NiiRoZz + + Description: + Delete Container from house storage +*/ + +params [ + ["_container", objNull, [objNull]] +]; +if (isNull _container) exitWith {}; + +private _containerType = typeOf _container; +private _house = nearestObject [player, "House"]; + +if !(_house in life_vehicles) exitWith { + hint localize "STR_ISTR_Box_NotinHouse" +}; + +private _containers = _house getVariable ["containers",[]]; +closeDialog 0; + +private _action = [ + format [localize "STR_House_DeleteContainerMSG"],localize "STR_pInAct_RemoveContainer",localize "STR_Global_Remove",localize "STR_Global_Cancel" +] call BIS_fnc_guiMessage; + +if (_action) then { + private _box = switch _containerType do { + case "B_supplyCrate_F": {"storagebig"}; + case "Box_IND_Grenades_F": {"storagesmall"}; + default {"None"}; + }; + if (_box isEqualTo "None") exitWith {}; + + private _diff = [_box,1,life_carryWeight,life_maxWeight] call life_fnc_calWeightDiff; + if (_diff isEqualTo 0) exitWith {hint localize "STR_NOTF_InvFull"}; + + if (life_HC_isActive) then { + [_container] remoteExecCall ["HC_fnc_deleteDBContainer",HC_Life]; + } else { + [_container] remoteExecCall ["TON_fnc_deleteDBContainer",RSERV]; + }; + + { + if (_x isEqualTo _container) then { + _containers deleteAt _forEachIndex; + }; + } forEach _containers; + _house setVariable ["containers",_containers,true]; + + [true,_box,1] call life_fnc_handleInv; +}; diff --git a/Altis_Life.Altis/core/actions/fn_repairTruck.sqf b/Altis_Life.Altis/core/actions/fn_repairTruck.sqf index ebe562142..9a9bbdf67 100644 --- a/Altis_Life.Altis/core/actions/fn_repairTruck.sqf +++ b/Altis_Life.Altis/core/actions/fn_repairTruck.sqf @@ -1,71 +1,73 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_repairTruck.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for toolkits, to be revised in later version. -*/ -private ["_veh","_upp","_ui","_progress","_pgText","_cP","_displayName","_test","_sideRepairArray"]; -_veh = cursorObject; -life_interrupted = false; -if (isNull _veh) exitWith {}; -if ((_veh isKindOf "Car") || (_veh isKindOf "Ship") || (_veh isKindOf "Air")) then { - if (life_inv_toolkit > 0) then { - life_action_inUse = true; - _displayName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _veh),"displayName"); - _upp = format [localize "STR_NOTF_Repairing",_displayName]; - - //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 { - if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { - [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; - player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; - player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; - }; - - uiSleep 0.27; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; - if (_cP >= 1) exitWith {}; - if (!alive player) exitWith {}; - if !(isNull objectParent player) exitWith {}; - if (life_interrupted) exitWith {}; - }; - - life_action_inUse = false; - "progressBar" cutText ["","PLAIN"]; - player playActionNow "stop"; - if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; - if !(isNull objectParent player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; - - _sideRepairArray = LIFE_SETTINGS(getArray,"vehicle_infiniteRepair"); - - //Check if playerSide has infinite repair enabled - if (playerSide isEqualTo civilian && (_sideRepairArray select 0) isEqualTo 0) then { - [false,"toolkit",1] call life_fnc_handleInv; - }; - if (playerSide isEqualTo west && (_sideRepairArray select 1) isEqualTo 0) then { - [false,"toolkit",1] call life_fnc_handleInv; - }; - if (playerSide isEqualTo independent && (_sideRepairArray select 2) isEqualTo 0) then { - [false,"toolkit",1] call life_fnc_handleInv; - }; - if (playerSide isEqualTo east && (_sideRepairArray select 3) isEqualTo 0) then { - [false,"toolkit",1] call life_fnc_handleInv; - }; - - _veh setDamage 0; - titleText[localize "STR_NOTF_RepairedVehicle","PLAIN"]; - }; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_repairTruck.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main functionality for toolkits, to be revised in later version. +*/ + +private _veh = cursorObject; +life_interrupted = false; + +if (isNull _veh) exitWith {}; +if ((_veh isKindOf "Car") || (_veh isKindOf "Ship") || (_veh isKindOf "Air")) then { + if (life_inv_toolkit > 0) then { + life_action_inUse = true; + private _displayName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _veh),"displayName"); + private _upp = format [localize "STR_NOTF_Repairing",_displayName]; + + //Setup our progress bar. + disableSerialization; + "progressBar" cutRsc ["life_progress","PLAIN"]; + 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; + private _cP = 0.01; + + for "_i" from 0 to 1 step 0 do { + if (animationState player != "AinvPknlMstpSnonWnonDnon_medic_1") then { + [player,"AinvPknlMstpSnonWnonDnon_medic_1",true] remoteExecCall ["life_fnc_animSync",RCLIENT]; + player switchMove "AinvPknlMstpSnonWnonDnon_medic_1"; + player playMoveNow "AinvPknlMstpSnonWnonDnon_medic_1"; + }; + + uiSleep 0.27; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp]; + if (_cP >= 1) exitWith {}; + if (!alive player) exitWith {}; + if !(isNull objectParent player) exitWith {}; + if (life_interrupted) exitWith {}; + }; + + life_action_inUse = false; + "progressBar" cutText ["","PLAIN"]; + player playActionNow "stop"; + if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + if !(isNull objectParent player) exitWith {titleText[localize "STR_NOTF_ActionInVehicle","PLAIN"];}; + + private _sideRepairArray = LIFE_SETTINGS(getArray,"vehicle_infiniteRepair"); + + //Check if playerSide has infinite repair enabled + call { + if (playerSide isEqualTo civilian && (_sideRepairArray select 0) isEqualTo 0) exitWith { + [false,"toolkit",1] call life_fnc_handleInv; + }; + if (playerSide isEqualTo west && (_sideRepairArray select 1) isEqualTo 0) exitWith { + [false,"toolkit",1] call life_fnc_handleInv; + }; + if (playerSide isEqualTo independent && (_sideRepairArray select 2) isEqualTo 0) exitWith { + [false,"toolkit",1] call life_fnc_handleInv; + }; + if (playerSide isEqualTo east && (_sideRepairArray select 3) isEqualTo 0) exitWith { + [false,"toolkit",1] call life_fnc_handleInv; + }; + }; + _veh setDamage 0; + titleText[localize "STR_NOTF_RepairedVehicle","PLAIN"]; + }; +}; diff --git a/Altis_Life.Altis/core/actions/fn_restrainAction.sqf b/Altis_Life.Altis/core/actions/fn_restrainAction.sqf index cfc09bb96..d305128ff 100644 --- a/Altis_Life.Altis/core/actions/fn_restrainAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_restrainAction.sqf @@ -6,16 +6,16 @@ Description: Restrains the target. */ -private ["_unit"]; -_unit = cursorObject; -if (isNull _unit) exitWith {}; //Not valid + +private _unit = cursorObject; +if (isNull _unit) exitWith {}; if (player distance _unit > 3) exitWith {}; if (_unit getVariable "restrained") exitWith {}; if (side _unit isEqualTo west) exitWith {}; if (player isEqualTo _unit) exitWith {}; if (!isPlayer _unit) exitWith {}; -//Broadcast! +//Broadcast! _unit setVariable ["playerSurrender",false,true]; _unit setVariable ["restrained",true,true]; [player] remoteExec ["life_fnc_restrain",_unit]; diff --git a/Altis_Life.Altis/core/actions/fn_robAction.sqf b/Altis_Life.Altis/core/actions/fn_robAction.sqf index 29d30ebdb..1e5ad475f 100644 --- a/Altis_Life.Altis/core/actions/fn_robAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_robAction.sqf @@ -15,4 +15,4 @@ if (!isPlayer _target) exitWith {}; if (_target getVariable ["robbed",false]) exitWith {}; [player] remoteExecCall ["life_fnc_robPerson",_target]; -_target setVariable ["robbed",true,true]; +_target setVariable ["robbed",true,true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_searchAction.sqf b/Altis_Life.Altis/core/actions/fn_searchAction.sqf index da370aaad..3ed8a638d 100644 --- a/Altis_Life.Altis/core/actions/fn_searchAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_searchAction.sqf @@ -8,9 +8,14 @@ params [ ["_unit",objNull,[objNull]] ]; + if (isNull _unit) exitWith {}; + hint localize "STR_NOTF_Searching"; sleep 2; -if (player distance _unit > 5 || !alive player || !alive _unit) exitWith {hint localize "STR_NOTF_CannotSearchPerson"}; + +if (player distance _unit > 5 || {!alive player} || {!alive _unit}) exitWith { + hint localize "STR_NOTF_CannotSearchPerson" +}; [player] remoteExec ["life_fnc_searchClient",_unit]; life_action_inUse = true; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf b/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf index d0bccd4e7..0a32f3f93 100644 --- a/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_searchVehAction.sqf @@ -6,10 +6,11 @@ Description: */ -private ["_vehicle","_data"]; -_vehicle = cursorObject; -if ((_vehicle isKindOf "Car") || !(_vehicle isKindOf "Air") || !(_vehicle isKindOf "Ship")) then { - _owners = _vehicle getVariable "vehicle_info_owners"; + +private _vehicle = cursorObject; + +if (_vehicle isKindOf "Car" || {!(_vehicle isKindOf "Air")} || {!(_vehicle isKindOf "Ship")}) then { + private _owners = _vehicle getVariable "vehicle_info_owners"; if (isNil "_owners") exitWith {hint localize "STR_NOTF_VehCheat"; deleteVehicle _vehicle;}; life_action_inUse = true; diff --git a/Altis_Life.Altis/core/actions/fn_seizePlayerAction.sqf b/Altis_Life.Altis/core/actions/fn_seizePlayerAction.sqf index c8d8244de..f1eea2f43 100644 --- a/Altis_Life.Altis/core/actions/fn_seizePlayerAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_seizePlayerAction.sqf @@ -10,8 +10,11 @@ params [ ["_unit",objNull,[objNull]] ]; + if (isNull _unit) exitWith {}; + sleep 2; + if (player distance _unit > 5 || !alive player || !alive _unit) exitWith {hint localize "STR_NOTF_CannotSeizePerson"}; [player] remoteExec ["life_fnc_seizeClient",_unit]; life_action_inUse = false; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf b/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf index ffa7b16c1..c9254366c 100644 --- a/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf +++ b/Altis_Life.Altis/core/actions/fn_serviceChopper.sqf @@ -1,50 +1,59 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_serviceChopper.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Main functionality for the chopper service paid, to be replaced in later version. -*/ -private ["_serviceCost"]; -disableSerialization; -private ["_search","_ui","_progress","_cP","_pgText"]; -if (life_action_inUse) exitWith {hint localize "STR_NOTF_Action"}; - -_serviceCost = LIFE_SETTINGS(getNumber,"service_chopper"); -_search = nearestObjects[getPos air_sp, ["Air"],10]; - -if (count _search isEqualTo 0) exitWith {hint localize "STR_Service_Chopper_NoAir"}; -if (CASH < _serviceCost) exitWith {hint localize "STR_Serive_Chopper_NotEnough"}; - -life_action_inUse = true; -"progressBar" cutRsc ["life_progress","PLAIN"]; -_ui = uiNamespace getVariable "life_progress"; -_progress = _ui displayCtrl 38201; -_pgText = _ui displayCtrl 38202; -_pgText ctrlSetText format [localize "STR_Service_Chopper_Servicing","waiting..."]; -_progress progressSetPosition 0.01; -_cP = 0.01; - -for "_i" from 0 to 1 step 0 do { - uiSleep 0.2; - _cP = _cP + 0.01; - _progress progressSetPosition _cP; - _pgText ctrlSetText format [localize "STR_Service_Chopper_Servicing",round(_cP * 100)]; - if (_cP >= 1) exitWith {}; -}; - -if (!alive (_search select 0) || (_search select 0) distance air_sp > 15) exitWith {life_action_inUse = false; hint localize "STR_Service_Chopper_Missing"}; - -CASH = CASH - _serviceCost; -if (!local (_search select 0)) then { - [(_search select 0),1] remoteExecCall ["life_fnc_setFuel",(_search select 0)]; -} else { - (_search select 0) setFuel 1; -}; - -(_search select 0) setDamage 0; - -"progressBar" cutText ["","PLAIN"]; -titleText [localize "STR_Service_Chopper_Done","PLAIN"]; -life_action_inUse = false; +#include "..\..\script_macros.hpp" +/* + File: fn_serviceChopper.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Main functionality for the chopper service paid, to be replaced in later version. +*/ + +disableSerialization; + +if (life_action_inUse) exitWith {hint localize "STR_NOTF_Action"}; + +private _serviceCost = LIFE_SETTINGS(getNumber,"service_chopper"); +private _search = nearestObjects [getPos air_sp, ["Air"], 10]; + +if (_search isEqualTo []) exitWith { + hint localize "STR_Service_Chopper_NoAir" +}; +if (CASH < _serviceCost) exitWith { + hint format [localize "STR_Service_Chopper_NotEnough", _serviceCost]; +}; + +life_action_inUse = true; +"progressBar" cutRsc ["life_progress","PLAIN"]; +private _ui = uiNamespace getVariable "life_progress"; +private _progress = _ui displayCtrl 38201; +private _pgText = _ui displayCtrl 38202; +_pgText ctrlSetText format [localize "STR_Service_Chopper_Servicing","waiting..."]; +_progress progressSetPosition 0.01; +private _cP = 0.01; + +for "_i" from 0 to 1 step 0 do { + uiSleep 0.2; + _cP = _cP + 0.01; + _progress progressSetPosition _cP; + _pgText ctrlSetText format [localize "STR_Service_Chopper_Servicing",round(_cP * 100)]; + if (_cP >= 1) exitWith {}; +}; + +_search params ["_nearestChopper"]; + +if (!alive _nearestChopper || {_nearestChopper distance air_sp > 15}) exitWith { + life_action_inUse = false; + hint localize "STR_Service_Chopper_Missing" +}; + +CASH = CASH - _serviceCost; +if (!local _nearestChopper) then { + [_nearestChopper,1] remoteExecCall ["life_fnc_setFuel",_nearestChopper]; +} else { + _nearestChopper setFuel 1; +}; + +_nearestChopper setDamage 0; + +"progressBar" cutText ["","PLAIN"]; +titleText [localize "STR_Service_Chopper_Done","PLAIN"]; +life_action_inUse = false; diff --git a/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf b/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf index 791ef14d8..36d84a60c 100644 --- a/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf +++ b/Altis_Life.Altis/core/actions/fn_stopEscorting.sqf @@ -13,4 +13,4 @@ if (isNull _unit) exitWith {}; //Target not found even after using cursorTarget. if (!(_unit getVariable ["Escorting",false])) exitWith {}; //He's not being Escorted. detach _unit; _unit setVariable ["Escorting",false,true]; -player setVariable ["isEscorting",false]; +player setVariable ["isEscorting",false]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf index 5de3baf66..6f5522ea5 100644 --- a/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf +++ b/Altis_Life.Altis/core/actions/fn_storeVehicle.sqf @@ -1,41 +1,50 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_storeVehicle.sqf - Author: Bryan "Tonic" Boardwine - - 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 { - { - if (!isNil "_vehicle") exitWith {}; //Kill the loop. - _vehData = _x getVariable ["vehicle_info_owners",[]]; - if (count _vehData > 0) then { - _vehOwner = ((_vehData select 0) select 0); - if ((getPlayerUID player) == _vehOwner) exitWith { - _vehicle = _x; - }; - }; - } forEach _nearVehicles; - }; -}; - -if (isNil "_vehicle") exitWith {hint localize "STR_Garage_NoNPC"}; -if (isNull _vehicle) exitWith {}; -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]; -} else { - [_vehicle,false,(_this select 1),_storetext] remoteExec ["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 { + { + if (!isNil "_vehicle") exitWith {}; //Kill the loop. + private _vehData = _x getVariable ["vehicle_info_owners",[]]; + if (count _vehData > 0) then { + private _vehOwner = ((_vehData select 0) select 0); + if (getPlayerUID player isEqualTo _vehOwner) exitWith { + _vehicle = _x; + }; + }; + true + } count _nearVehicles; + }; +}; + +if (isNull _vehicle) exitWith { + hint localize "STR_Garage_NoNPC" +}; +if (!alive _vehicle) exitWith { + hint localize "STR_Garage_SQLError_Destroyed" +}; + +private _storetext = localize "STR_Garage_Store_Success"; + +if (life_HC_isActive) then { + [_vehicle,false,_unit,_storetext] remoteExec ["HC_fnc_vehicleStore",HC_Life]; +} else { + [_vehicle,false,_unit,_storetext] remoteExec ["TON_fnc_vehicleStore",RSERV]; +}; + +hint localize "STR_Garage_Store_Server"; +life_garage_store = true; diff --git a/Altis_Life.Altis/core/actions/fn_surrender.sqf b/Altis_Life.Altis/core/actions/fn_surrender.sqf index 731687228..cb11f11b6 100644 --- a/Altis_Life.Altis/core/actions/fn_surrender.sqf +++ b/Altis_Life.Altis/core/actions/fn_surrender.sqf @@ -5,20 +5,19 @@ Description: Causes player to put their hands on their head. */ -if ( player getVariable ["restrained",false] ) exitWith {}; -if ( player getVariable ["Escorting",false] ) exitWith {}; -if ( vehicle player != player ) exitWith {}; -if ( speed player > 1 ) exitWith {}; +if (player getVariable ["restrained",false]) exitWith {}; +if (player getVariable ["Escorting",false]) exitWith {}; +if (!isNull objectParent player) exitWith {}; +if (speed player > 1) exitWith {}; -if (player getVariable ["playerSurrender",false]) then { - player setVariable ["playerSurrender",false,true]; -} else { - player setVariable ["playerSurrender",true,true]; -}; +private _currentState = player getVariable ["playerSurrender",false]; +player setVariable ["playerSurrender", !_currentState, true]; while {player getVariable ["playerSurrender",false]} do { player playMove "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon"; - if (!alive player || !(isNull objectParent player)) then { player setVariable ["playerSurrender",false,true]; }; + if (!alive player || {!isNull objectParent player}) then { + player setVariable ["playerSurrender",false,true]; + }; }; player playMoveNow "AmovPercMstpSsurWnonDnon_AmovPercMstpSnonWnonDnon"; diff --git a/Altis_Life.Altis/core/actions/fn_ticketAction.sqf b/Altis_Life.Altis/core/actions/fn_ticketAction.sqf index 7ac77c7a4..3a4e1ccdb 100644 --- a/Altis_Life.Altis/core/actions/fn_ticketAction.sqf +++ b/Altis_Life.Altis/core/actions/fn_ticketAction.sqf @@ -1,15 +1,18 @@ -/* - File: fn_ticketAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the ticketing process. -*/ -params [ - ["_unit",objNull,[objNull]] -]; -disableSerialization; -if (!(createDialog "life_ticket_give")) exitWith {hint localize "STR_Cop_TicketFail"}; -if (isNull _unit || !isPlayer _unit) exitWith {}; -ctrlSetText[2651,format [localize "STR_Cop_Ticket",_unit getVariable ["realname",name _unit]]]; -life_ticket_unit = _unit; \ No newline at end of file +/* + File: fn_ticketAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the ticketing process. +*/ +params [ + ["_unit",objNull,[objNull]] +]; + +if !(createDialog "life_ticket_give") exitWith { + hint localize "STR_Cop_TicketFail" +}; +if (isNull _unit || {!isPlayer _unit}) exitWith {}; + +ctrlSetText [2651,format [localize "STR_Cop_Ticket",_unit getVariable ["realname",name _unit]]]; +life_ticket_unit = _unit; diff --git a/Altis_Life.Altis/core/actions/fn_unrestrain.sqf b/Altis_Life.Altis/core/actions/fn_unrestrain.sqf index 5ff967dcc..6efe98993 100644 --- a/Altis_Life.Altis/core/actions/fn_unrestrain.sqf +++ b/Altis_Life.Altis/core/actions/fn_unrestrain.sqf @@ -6,9 +6,12 @@ Description: */ -private ["_unit"]; -_unit = param [0,objNull,[objNull]]; -if (isNull _unit || !(_unit getVariable ["restrained",false])) exitWith {}; //Error check? + +params [ + ["_unit",objNull,[objNull]] +]; + +if (isNull _unit || {!(_unit getVariable ["restrained",false])}) exitWith {}; _unit setVariable ["restrained",false,true]; _unit setVariable ["Escorting",false,true]; diff --git a/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf b/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf index 2e5d74d70..48f9b0836 100644 --- a/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminCompensate.sqf @@ -4,15 +4,22 @@ Author: ColinM9991 Description: - Figure it out. + Gives compensation money to the local player */ -private ["_value","_action"]; -if (FETCH_CONST(life_adminlevel) < 2) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; -_value = parseNumber(ctrlText 9922); + +if (FETCH_CONST(life_adminlevel) < 2) exitWith { + closeDialog 0; + hint localize "STR_ANOTF_ErrorLevel"; +}; + +private _value = parseNumber(ctrlText 9922); + if (_value < 0) exitWith {}; -if (_value > 999999) exitWith {hint localize "STR_ANOTF_Fail"}; +if (_value > 999999) exitWith { + hint localize "STR_ANOTF_Fail" +}; -_action = [ +private _action = [ format [localize "STR_ANOTF_CompWarn",[_value] call life_fnc_numberText], localize "STR_Admin_Compensate", localize "STR_Global_Yes", @@ -22,8 +29,8 @@ _action = [ if (_action) then { CASH = CASH + _value; hint format [localize "STR_ANOTF_Success",[_value] call life_fnc_numberText]; - closeDialog 0; } else { hint localize "STR_NOTF_ActionCancel"; - closeDialog 0; }; + +closeDialog 0; diff --git a/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf b/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf index 248b82da1..6ef6b3651 100644 --- a/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminDebugCon.sqf @@ -6,7 +6,11 @@ Description: Opens the Debug Console. */ -if (FETCH_CONST(life_adminlevel) < 5) exitWith {closeDialog 0; hint localize "STR_NOTF_adminDebugCon";}; +if (FETCH_CONST(life_adminlevel) < 5) exitWith { + closeDialog 0; + hint localize "STR_NOTF_adminDebugCon"; +}; + life_admin_debug = true; createDialog "RscDisplayDebugPublic"; diff --git a/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf b/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf index e34c452f2..ccbece27e 100644 --- a/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminFreeze.sqf @@ -1,16 +1,19 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminFreeze.sqf - Author: ColinM9991 - - Description: Freezes selected player -*/ -if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; - -private _unit = lbData[2902,lbCurSel (2902)]; -_unit = call compile format ["%1", _unit]; -if (isNil "_unit") exitWith {}; -if (isNull _unit) exitWith {}; -if (_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; - -[player] remoteExec ["life_fnc_freezePlayer",_unit]; +#include "..\..\script_macros.hpp" +/* + File: fn_adminFreeze.sqf + Author: ColinM9991 + + Description: Freezes selected player +*/ +if (FETCH_CONST(life_adminlevel) < 4) exitWith { + closeDialog 0; + hint localize "STR_ANOTF_ErrorLevel"; +}; + +private _unit = lbData[2902,lbCurSel (2902)]; +_unit = call compile format ["%1", _unit]; + +if (isNil "_unit" || {isNull _unit}) exitWith {}; +if (_unit isEqualTo player) exitWith {hint localize "STR_ANOTF_Error";}; + +[player] remoteExecCall ["life_fnc_freezePlayer",_unit]; diff --git a/Altis_Life.Altis/core/admin/fn_adminGetID.sqf b/Altis_Life.Altis/core/admin/fn_adminGetID.sqf index 3c84c1e43..45bc9e490 100644 --- a/Altis_Life.Altis/core/admin/fn_adminGetID.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminGetID.sqf @@ -1,15 +1,15 @@ -/* - File: fn_adminGetID.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Fetches the selected ID of the player. - Used by in-game admins to issue bans/kicks. - https://community.bistudio.com/wiki/Multiplayer_Server_Commands -*/ -private _unit = lbData[2902,lbCurSel (2902)]; -_unit = call compile format ["%1", _unit]; -if (isNil "_unit") exitWith {}; -if (isNull _unit) exitWith {}; - -[_unit,player] remoteExecCall ["TON_fnc_getID",2]; \ No newline at end of file +/* + File: fn_adminGetID.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Fetches the selected ID of the player. + Used by in-game admins to issue bans/kicks. + https://community.bistudio.com/wiki/Multiplayer_Server_Commands +*/ + +private _unit = lbData[2902,lbCurSel (2902)]; +_unit = call compile format ["%1", _unit]; +if (isNil "_unit" || {isNull _unit}) exitWith {}; + +[_unit,player] remoteExecCall ["TON_fnc_getID",2]; diff --git a/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf b/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf index f77c5bcc0..a1dd686cc 100644 --- a/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminGodMode.sqf @@ -1,21 +1,24 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminGodMode.sqf - Author: Tobias 'Xetoxyc' Sittenauer - - Description: Enables God mode for Admin -*/ - -if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0; hint localize "STR_ANOTF_ErrorLevel";}; - -closeDialog 0; - -if (life_god) then { - life_god = false; - titleText [localize "STR_ANOTF_godModeOff","PLAIN"]; titleFadeOut 2; - player allowDamage true; -} else { - life_god = true; - titleText [localize "STR_ANOTF_godModeOn","PLAIN"]; titleFadeOut 2; - player allowDamage false; -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_adminGodMode.sqf + Author: Tobias 'Xetoxyc' Sittenauer + + Description: Enables God mode for Admin +*/ + +if (FETCH_CONST(life_adminlevel) < 4) exitWith { + closeDialog 0; + hint localize "STR_ANOTF_ErrorLevel"; +}; + +closeDialog 0; + +if (life_god) then { + titleText [localize "STR_ANOTF_godModeOff","PLAIN"]; +} else { + titleText [localize "STR_ANOTF_godModeOn","PLAIN"]; +}; +titleFadeOut 2; + +player allowDamage life_god; +life_god = !life_god; diff --git a/Altis_Life.Altis/core/admin/fn_adminID.sqf b/Altis_Life.Altis/core/admin/fn_adminID.sqf index 5c9201391..509ad454d 100644 --- a/Altis_Life.Altis/core/admin/fn_adminID.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminID.sqf @@ -1,14 +1,17 @@ -/* - File: fn_adminID.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Output information received to admin menu. -*/ -private ["_display","_ret","_text"]; -disableSerialization; -_ret = _this select 0; -_display = findDisplay 2900; -_text = _display displayCtrl 2903; - -_text ctrlSetStructuredText parseText format ["ID: %1",_ret]; \ No newline at end of file +/* + File: fn_adminID.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Output information received to admin menu. +*/ + +disableSerialization; + +params [ + ["_ret", -1, [0]] +]; +private _display = findDisplay 2900; +private _text = _display displayCtrl 2903; + +_text ctrlSetStructuredText parseText format ["ID: %1",_ret]; diff --git a/Altis_Life.Altis/core/admin/fn_adminInfo.sqf b/Altis_Life.Altis/core/admin/fn_adminInfo.sqf index dc28a3edf..a2f8c40bf 100644 --- a/Altis_Life.Altis/core/admin/fn_adminInfo.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminInfo.sqf @@ -1,46 +1,55 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminInfo.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Output information received to admin menu. -*/ -private ["_ret","_unit","_prim","_sec","_vest","_uni","_bp","_attach","_steamName","_secondary"]; -_ret = _this; -disableSerialization; - -_unit = _ret select 3; -_prim = if (!(primaryWeapon _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",primaryWeapon _unit,"displayName")} else {"None"}; -_sec = if (!(handgunWeapon _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",handgunWeapon _unit,"displayName")} else {"None"}; -_vest = if (!(vest _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",vest _unit,"displayName")} else {"None"}; -_uni = if (!(uniform _unit isEqualTo "")) then { FETCH_CONFIG2(getText,"CfgWeapons",uniform _unit,"displayName")} else {"None"}; -_bp = if (!(backpack _unit isEqualTo "")) then {FETCH_CONFIG2(getText,"CfgVehicles",backpack _unit,"displayName")} else {"None"}; - -_attach = []; -_secondary = []; -if (!(primaryWeapon _unit isEqualTo "")) then { - { - if (!(_x isEqualTo "")) then { - _attach pushBack (FETCH_CONFIG2(getText,"CfgWeapons",_x,"displayName")); - }; - } forEach (primaryWeaponItems _unit); -}; - -if (!(handgunItems _unit isEqualTo "")) then { - { - if (!(_x isEqualTo "")) then { - _secondary pushBack (FETCH_CONFIG2(getText,"CfgWeapons",_x,"displayName")); - }; - } forEach (handgunItems _unit); -}; - -_steamName = _ret select 4; -if (!((_ret select 4) isEqualType "")) then { - _steamName = "Not a Steam User!"; -}; - -if (count _attach isEqualTo 0) then {_attach = "None"}; -if (count _secondary isEqualTo 0) then {_secondary = "None"}; -CONTROL(2900,2903) ctrlSetStructuredText parseText format ["Name: %1
Steam Name: %10
Player UID: %11
Player Side: %12
Bank: %2
Money: %3
Uniform: %4
Vest: %5
Backpack: %6
Primary: %7
Handgun: %8
Primary Attachments
%9
Secondary Attachments
%13
", -_unit getVariable ["realname",name _unit],[(_ret select 0)] call life_fnc_numberText,[(_ret select 1)] call life_fnc_numberText, _uni,_vest,_bp,_prim,_sec,_attach,_steamName,(_ret select 5),(_ret select 6),_secondary]; +#include "..\..\script_macros.hpp" +/* + File: fn_adminInfo.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Output information received to admin menu. +*/ + +params [ + ["_bank", 0, [0]], + ["_cash", 0, [0]], + ["_owner", -1, [0]], + ["_unit", objNull, [objNull]], + ["_steamName", "", [""]], + ["_uid", "", [""]], + ["_side", sideUnknown, [civilian]] +]; + +disableSerialization; + +private _prim = if !(primaryWeapon _unit isEqualTo "") then {FETCH_CONFIG2(getText,"CfgWeapons",primaryWeapon _unit,"displayName")} else {"None"}; +private _sec = if !(handgunWeapon _unit isEqualTo "") then {FETCH_CONFIG2(getText,"CfgWeapons",handgunWeapon _unit,"displayName")} else {"None"}; +private _vest = if !(vest _unit isEqualTo "") then { FETCH_CONFIG2(getText,"CfgWeapons",vest _unit,"displayName")} else {"None"}; +private _uni = if !(uniform _unit isEqualTo "") then { FETCH_CONFIG2(getText,"CfgWeapons",uniform _unit,"displayName")} else {"None"}; +private _bp = if !(backpack _unit isEqualTo "") then {FETCH_CONFIG2(getText,"CfgVehicles",backpack _unit,"displayName")} else {"None"}; + +private _attach = []; +private _secondary = []; +if !(primaryWeapon _unit isEqualTo "") then { + { + if !(_x isEqualTo "") then { + _attach pushBack (FETCH_CONFIG2(getText,"CfgWeapons",_x,"displayName")); + }; + true + } count (primaryWeaponItems _unit); +}; + +if !(handgunItems _unit isEqualTo "") then { + { + if !(_x isEqualTo "") then { + _secondary pushBack (FETCH_CONFIG2(getText,"CfgWeapons",_x,"displayName")); + }; + true + } count (handgunItems _unit); +}; + +if !(_steamName isEqualType "") then { + _steamName = "Not a Steam User!"; +}; + +if (_attach isEqualTo []) then {_attach = "None"}; +if (_secondary isEqualTo []) then {_secondary = "None"}; +CONTROL(2900,2903) ctrlSetStructuredText parseText format ["Name: %1
Steam Name: %10
Player UID: %11
Player Side: %12
Bank: %2
Money: %3
Uniform: %4
Vest: %5
Backpack: %6
Primary: %7
Handgun: %8
Primary Attachments
%9
Secondary Attachments
%13
", +_unit getVariable ["realname",name _unit],[_bank] call life_fnc_numberText,[_cash] call life_fnc_numberText, _uni,_vest,_bp,_prim,_sec,_attach,_steamName,_uid,_side,_secondary]; diff --git a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf index f1ac50e36..a3de20f6f 100644 --- a/Altis_Life.Altis/core/admin/fn_adminMenu.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminMenu.sqf @@ -6,14 +6,16 @@ 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;}; + +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;}; +private _list = CONTROL(2900,2902); + switch (FETCH_CONST(life_adminlevel)) do { @@ -27,17 +29,24 @@ switch (FETCH_CONST(life_adminlevel)) do lbClear _list; { - _side = switch (side _x) do {case west: {"Cop"}; case civilian: {"Civ"}; case independent: {"Medic"}; default {"Unknown"};}; - _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;}; + private _side = switch (side _x) do { + case west: {"Cop"}; + case civilian: {"Civ"}; + case independent: {"Medic"}; + default {"Unknown"}; + }; + _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 { - _godmode = CONTROL(2900,2908); + private _godmode = CONTROL(2900,2908); _godmode ctrlSetTextColor [0, 255, 0, 1]; // green }; if (life_markers) then { - _markers = CONTROL(2900,2910); + private _markers = CONTROL(2900,2910); _markers ctrlSetTextColor [0, 255, 0, 1]; // green }; \ No newline at end of file diff --git a/Altis_Life.Altis/core/admin/fn_adminQuery.sqf b/Altis_Life.Altis/core/admin/fn_adminQuery.sqf index 96816a9bd..fd3a9c4e1 100644 --- a/Altis_Life.Altis/core/admin/fn_adminQuery.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminQuery.sqf @@ -1,19 +1,23 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminQuery.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the query on a player. -*/ -private ["_text","_info","_prim","_sec","_vest","_uni","_bp","_attach","_tmp"]; -disableSerialization; -if (!isNil "admin_query_ip") exitWith {hint localize "STR_ANOTF_Query_2"}; -_text = CONTROL(2900,2903); -_info = lbData[2902,lbCurSel (2902)]; -_info = call compile format ["%1", _info]; - -if (isNil "_info") exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; -if (isNull _info) exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail";}; -remoteExecCall ["life_util_fnc_playerQuery",_info]; -_text ctrlSetText localize "STR_ANOTF_Query"; +#include "..\..\script_macros.hpp" +/* + File: fn_adminQuery.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the query on a player. +*/ + +disableSerialization; + +if (!isNil "admin_query_ip") exitWith { + hint localize "STR_ANOTF_Query_2" +}; + +private _text = CONTROL(2900,2903); +private _info = lbData[2902,lbCurSel (2902)]; +_info = call compile format ["%1", _info]; + +if (isNil "_info" || {isNull _info}) exitWith {_text ctrlSetText localize "STR_ANOTF_QueryFail"}; +remoteExecCall ["life_util_fnc_playerQuery",_info]; + +_text ctrlSetText localize "STR_ANOTF_Query"; diff --git a/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf b/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf index a15ff2cf9..8098e9621 100644 --- a/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminSpectate.sqf @@ -1,21 +1,23 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminSpectate.sqf - Author: ColinM9991 - - Description: - Spectate the chosen player. -*/ -if (FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; - -private _unit = lbData[2902,lbCurSel (2902)]; -_unit = call compile format ["%1", _unit]; -if (isNil "_unit") exitWith {}; -if (isNull _unit) exitWith {}; -if (_unit == player) exitWith {hint localize "STR_ANOTF_Error";}; - -closeDialog 0; - -_unit switchCamera "INTERNAL"; -hint format [localize "STR_NOTF_nowSpectating",_unit getVariable ["realname",name _unit]]; -AM_Exit = (findDisplay 46) displayAddEventHandler ["KeyDown", "if ((_this select 1) == 68) then {(findDisplay 46) displayRemoveEventHandler ['KeyDown',AM_Exit]; player switchCamera 'INTERNAL'; hint localize 'STR_NOTF_stoppedSpectating';}; false"]; +#include "..\..\script_macros.hpp" +/* + File: fn_adminSpectate.sqf + Author: ColinM9991 + + Description: + Spectate the chosen player. +*/ + +if (FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; + +private _unit = lbData[2902,lbCurSel (2902)]; +_unit = call compile format ["%1", _unit]; +if (isNil "_unit" || {isNull _unit}) exitWith {}; +if (_unit isEqualTo player) exitWith { + hint localize "STR_ANOTF_Error"; +}; + +closeDialog 0; + +_unit switchCamera "INTERNAL"; +hint format [localize "STR_NOTF_nowSpectating",_unit getVariable ["realname",name _unit]]; +AM_Exit = (findDisplay 46) displayAddEventHandler ["KeyDown", "if ((_this select 1) == 68) then {(findDisplay 46) displayRemoveEventHandler ['KeyDown',AM_Exit]; player switchCamera 'INTERNAL'; hint localize 'STR_NOTF_stoppedSpectating';}; false"]; diff --git a/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf b/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf index 42e91e2d0..4325ad968 100644 --- a/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminTeleport.sqf @@ -1,14 +1,15 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminTeleport.sqf - Author: ColinM9991 - Credits: To original script author(s) - Description: - Teleport to chosen position. -*/ -if (FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; - -closeDialog 0; - -openMap [true, false]; -onMapSingleClick "[_pos select 0, _pos select 1, _pos select 2] call life_fnc_teleport"; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_adminTeleport.sqf + Author: ColinM9991 + Credits: To original script author(s) + Description: + Teleport to chosen position. +*/ + +if (FETCH_CONST(life_adminlevel) < 3) exitWith {closeDialog 0;}; + +closeDialog 0; + +openMap [true, false]; +onMapSingleClick "_pos call life_fnc_teleport"; diff --git a/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf b/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf index 7bf0f9872..4d580a6d7 100644 --- a/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf +++ b/Altis_Life.Altis/core/admin/fn_adminTpHere.sqf @@ -1,18 +1,24 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_adminTpHere.sqf - Author: ColinM9991 - - Description: - Teleport selected player to you. -*/ -if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0;}; - -private _target = lbData[2902,lbCurSel (2902)]; -_target = call compile format ["%1", _target]; -if (isNil "_target" || isNull _target) exitWith {}; -if (_target == player) exitWith {hint localize "STR_ANOTF_Error";}; - -if (!(vehicle _target isEqualTo _target)) exitWith {hint localize "STR_Admin_CannotTpHere"}; -_target setPos (getPos player); -hint format [localize "STR_NOTF_haveTPedToYou",_target getVariable ["realname",name _target]]; +#include "..\..\script_macros.hpp" +/* + File: fn_adminTpHere.sqf + Author: ColinM9991 + + Description: + Teleport selected player to you. +*/ + +if (FETCH_CONST(life_adminlevel) < 4) exitWith {closeDialog 0}; + +private _target = lbData[2902,lbCurSel (2902)]; +_target = call compile format ["%1", _target]; +if (isNil "_target" || {isNull _target}) exitWith {}; +if (_target isEqualTo player) exitWith { + hint localize "STR_ANOTF_Error"; +}; + +if !(vehicle _target isEqualTo _target) exitWith { + hint localize "STR_Admin_CannotTpHere" +}; + +_target setPos (getPos player); +hint format [localize "STR_NOTF_haveTPedToYou",_target getVariable ["realname",name _target]]; diff --git a/Altis_Life.Altis/core/civilian/fn_civMarkers.sqf b/Altis_Life.Altis/core/civilian/fn_civMarkers.sqf index c1dc99ed1..13d4960da 100644 --- a/Altis_Life.Altis/core/civilian/fn_civMarkers.sqf +++ b/Altis_Life.Altis/core/civilian/fn_civMarkers.sqf @@ -5,9 +5,9 @@ Description: Add markers for civilians in groups. */ -private ["_markers","_members"]; -_markers = []; -_members = []; + +private _markers = []; +private _members = []; for "_i" from 0 to 1 step 0 do { sleep 0.5; @@ -16,28 +16,33 @@ for "_i" from 0 to 1 step 0 do { _members = units (group player); { if !(_x isEqualTo player) then { - _marker = createMarkerLocal [format ["%1_marker",_x],visiblePosition _x]; + private _marker = createMarkerLocal [format ["%1_marker",_x],visiblePosition _x]; _marker setMarkerColorLocal "ColorCivilian"; _marker setMarkerTypeLocal "Mil_dot"; _marker setMarkerTextLocal format ["%1", _x getVariable ["realname",name _x]]; _markers pushBack [_marker,_x]; }; - } forEach _members; + true + } count _members; while {visibleMap} do { { - private ["_unit"]; - _unit = _x select 1; - if (!isNil "_unit" && !isNull _unit) then { - (_x select 0) setMarkerPosLocal (visiblePosition _unit); + _x params ["_marker", "_unit"]; + if (!isNil "_unit" && {!isNull _unit}) then { + _marker setMarkerPosLocal (visiblePosition _unit); }; - } forEach _markers; + true + } count _markers; if (!visibleMap) exitWith {}; sleep 0.02; }; - {deleteMarkerLocal (_x select 0);} forEach _markers; + { + deleteMarkerLocal (_x select 0); + true + } count _markers; + _markers = []; _members = []; }; diff --git a/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf b/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf index 386984718..e9c22cbcc 100644 --- a/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf +++ b/Altis_Life.Altis/core/civilian/fn_demoChargeTimer.sqf @@ -6,12 +6,14 @@ Description: Starts the "Demo" timer for the police. */ -private ["_uiDisp","_time","_timer"]; + disableSerialization; + "lifeTimer" cutRsc ["life_timer","PLAIN"]; -_uiDisp = uiNamespace getVariable "life_timer"; -_timer = _uiDisp displayCtrl 38301; -_time = time + (5 * 60); + +private _uiDisp = uiNamespace getVariable "life_timer"; +private _timer = _uiDisp displayCtrl 38301; +private _time = time + (5 * 60); for "_i" from 0 to 1 step 0 do { if (isNull _uiDisp) then { @@ -20,8 +22,9 @@ for "_i" from 0 to 1 step 0 do { _timer = _uiDisp displayCtrl 38301; }; if (round(_time - time) < 1) exitWith {}; - if (!(fed_bank getVariable ["chargeplaced",false])) exitWith {}; + if !(fed_bank getVariable ["chargeplaced",false]) exitWith {}; _timer ctrlSetText format ["%1",[(_time - time),"MM:SS.MS"] call BIS_fnc_secondsToString]; sleep 0.08; }; + "lifeTimer" cutText["","PLAIN"]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf b/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf index 32ef58d2f..0b875edeb 100644 --- a/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf +++ b/Altis_Life.Altis/core/civilian/fn_freezePlayer.sqf @@ -6,17 +6,18 @@ Description: Freezes selected player. */ -private ["_admin"]; -_admin = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_admin", objNull, [objNull]] +]; if (life_frozen) then { hint localize "STR_NOTF_Unfrozen"; [1,format [localize "STR_ANOTF_Unfrozen",profileName]] remoteExecCall ["life_fnc_broadcast",_admin]; - disableUserInput false; - life_frozen = false; } else { hint localize "STR_NOTF_Frozen"; [1,format [localize "STR_ANOTF_Frozen",profileName]] remoteExecCall ["life_fnc_broadcast",_admin]; - disableUserInput true; - life_frozen = true; }; + +life_frozen = !life_frozen; +disableUserInput life_frozen; diff --git a/Altis_Life.Altis/core/civilian/fn_jail.sqf b/Altis_Life.Altis/core/civilian/fn_jail.sqf index 1d26930ca..de4ac8e6e 100644 --- a/Altis_Life.Altis/core/civilian/fn_jail.sqf +++ b/Altis_Life.Altis/core/civilian/fn_jail.sqf @@ -1,62 +1,66 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_jail.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the initial process of jailing. -*/ -private ["_illegalItems"]; -params [ - ["_unit",objNull,[objNull]], - ["_bad",false,[false]] -]; - -if (isNull _unit) exitWith {}; //Dafuq? -if !(_unit isEqualTo player) exitWith {}; //Dafuq? -if (life_is_arrested) exitWith {}; //Dafuq i'm already arrested -_illegalItems = LIFE_SETTINGS(getArray,"jail_seize_vItems"); - -player setVariable ["restrained",false,true]; -player setVariable ["Escorting",false,true]; -player setVariable ["transporting",false,true]; - -titleText[localize "STR_Jail_Warn","PLAIN"]; -hint localize "STR_Jail_LicenseNOTF"; -player setPos (getMarkerPos "jail_marker"); - -if (_bad) then { - waitUntil {alive player}; - sleep 1; -}; - -//Check to make sure they goto check -if (player distance (getMarkerPos "jail_marker") > 40) then { - player setPos (getMarkerPos "jail_marker"); -}; - -[1] call life_fnc_removeLicenses; - -{ - _amount = ITEM_VALUE(_x); - if (_amount > 0) then { - [false,_x,_amount] call life_fnc_handleInv; - }; -} forEach _illegalItems; - -life_is_arrested = true; - -if (LIFE_SETTINGS(getNumber,"jail_seize_inventory") isEqualTo 1) then { - [] spawn life_fnc_seizeClient; -} else { - removeAllWeapons player; - {player removeMagazine _x} forEach (magazines player); -}; - -if (life_HC_isActive) then { - [player,_bad] remoteExecCall ["HC_fnc_jailSys",HC_Life]; -} else { - [player,_bad] remoteExecCall ["life_fnc_jailSys",RSERV]; -}; - -[5] call SOCK_fnc_updatePartial; +#include "..\..\script_macros.hpp" +/* + File: fn_jail.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the initial process of jailing. +*/ + +params [ + ["_unit",objNull,[objNull]], + ["_bad",false,[false]] +]; + +if (isNull _unit) exitWith {}; +if !(_unit isEqualTo player) exitWith {}; +if (life_is_arrested) exitWith {}; + +private _illegalItems = LIFE_SETTINGS(getArray,"jail_seize_vItems"); + +player setVariable ["restrained",false,true]; +player setVariable ["Escorting",false,true]; +player setVariable ["transporting",false,true]; + +titleText [localize "STR_Jail_Warn","PLAIN"]; +hint localize "STR_Jail_LicenseNOTF"; +player setPos (getMarkerPos "jail_marker"); + +if (_bad) then { + waitUntil {alive player}; + sleep 1; +}; + +//Check to make sure they goto check +if (player distance (getMarkerPos "jail_marker") > 40) then { + player setPos (getMarkerPos "jail_marker"); +}; + +[1] call life_fnc_removeLicenses; + +{ + _amount = ITEM_VALUE(_x); + if (_amount > 0) then { + [false,_x,_amount] call life_fnc_handleInv; + }; + true +} count _illegalItems; + +life_is_arrested = true; + +if (LIFE_SETTINGS(getNumber,"jail_seize_inventory") isEqualTo 1) then { + [] call life_fnc_seizeClient; +} else { + removeAllWeapons player; + { + player removeMagazine _x + } count (magazines player); +}; + +if (life_HC_isActive) then { + [player,_bad] remoteExecCall ["HC_fnc_jailSys",HC_Life]; +} else { + [player,_bad] remoteExecCall ["life_fnc_jailSys",RSERV]; +}; + +[5] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/civilian/fn_jailMe.sqf b/Altis_Life.Altis/core/civilian/fn_jailMe.sqf index 01c2614c9..d43f533ad 100644 --- a/Altis_Life.Altis/core/civilian/fn_jailMe.sqf +++ b/Altis_Life.Altis/core/civilian/fn_jailMe.sqf @@ -8,8 +8,8 @@ */ params [ - ["_ret",[],[[]]], - ["_bad",false,[false]] + ["_ret", [], [[]]], + ["_bad", false, [false]] ]; private _esc = false; @@ -37,6 +37,7 @@ if !(_ret isEqualTo []) then { life_canpay_bail = true; }; +private "_countDown"; for "_i" from 0 to 1 step 0 do { if (round(_time - time) > 0) then { _countDown = [(_time - time), "MM:SS.MS"] call BIS_fnc_secondsToString; diff --git a/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf b/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf index 7e6579a2a..558039443 100644 --- a/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf +++ b/Altis_Life.Altis/core/civilian/fn_knockedOut.sqf @@ -1,34 +1,33 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_knockedOut.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts and monitors the knocked out state. -*/ -private "_obj"; -params [ - ["_target",objNull,[objNull]], - ["_who","",[""]] -]; - -if (isNull _target) exitWith {}; -if !(_target isEqualTo player) exitWith {}; -if (_who isEqualTo "") exitWith {}; - -titleText[format [localize "STR_Civ_KnockedOut",_who],"PLAIN"]; -player playMoveNow "Incapacitated"; -disableUserInput true; - -_obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL(visiblePositionASL player); -_obj setPosATL ASLTOATL(visiblePositionASL player); - -life_isknocked = true; -player attachTo [_obj,[0,0,0]]; -sleep 15; -player playMoveNow "AmovPpneMstpSrasWrflDnon"; -disableUserInput false; -detach player; -deleteVehicle _obj; -life_isknocked = false; -player setVariable ["robbed",false,true]; +#include "..\..\script_macros.hpp" +/* + File: fn_knockedOut.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts and monitors the knocked out state. +*/ + +params [ + ["_target",objNull,[objNull]], + ["_who","",[""]] +]; + +if (isNull _target || {_who isEqualTo ""}) exitWith {}; +if !(_target isEqualTo player) exitWith {}; + +titleText [format [localize "STR_Civ_KnockedOut",_who],"PLAIN"]; +player playMoveNow "Incapacitated"; +disableUserInput true; + +private _obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL (visiblePositionASL player); +_obj setPosATL ASLTOATL (visiblePositionASL player); + +life_isknocked = true; +player attachTo [_obj,[0,0,0]]; +sleep 15; +player playMoveNow "AmovPpneMstpSrasWrflDnon"; +disableUserInput false; +detach player; +deleteVehicle _obj; +life_isknocked = false; +player setVariable ["robbed",false,true]; diff --git a/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf b/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf index 1eab0409b..ed1752e42 100644 --- a/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf +++ b/Altis_Life.Altis/core/civilian/fn_knockoutAction.sqf @@ -1,22 +1,23 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_knockoutAction.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Knocks out the target. -*/ -private "_target"; -_target = param [0,objNull,[objNull]]; - -//Error checks -if (isNull _target) exitWith {}; -if (!isPlayer _target) exitWith {}; -if (player distance _target > 4) exitWith {}; -life_knockout = true; -[player,"AwopPercMstpSgthWrflDnon_End2"] remoteExecCall ["life_fnc_animSync",RCLIENT]; -sleep 0.08; -[_target,profileName] remoteExec ["life_fnc_knockedOut",_target]; - -sleep 3; -life_knockout = false; +#include "..\..\script_macros.hpp" +/* + File: fn_knockoutAction.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Knocks out the target. +*/ + +params [ + ["_target",objNull,[objNull]] +]; + +//Error checks +if (isNull _target || {player distance _target > 4}) exitWith {}; + +life_knockout = true; +[player,"AwopPercMstpSgthWrflDnon_End2"] remoteExecCall ["life_fnc_animSync",RCLIENT]; +sleep 0.08; +[_target,profileName] remoteExec ["life_fnc_knockedOut",_target]; + +sleep 3; +life_knockout = false; diff --git a/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf b/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf index 8826fb6f5..b921e5be1 100644 --- a/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf +++ b/Altis_Life.Altis/core/civilian/fn_removeLicenses.sqf @@ -6,8 +6,10 @@ Description: Used for stripping certain licenses off of civilians as punishment. */ -private "_state"; -_state = param [0,1,[0]]; + +params [ + ["_state", 1, [0]] +]; switch (_state) do { //Death while being wanted @@ -28,7 +30,11 @@ switch (_state) do { //Remove motor vehicle licenses case 2: { - if (missionNamespace getVariable LICENSE_VARNAME("driver","civ") || missionNamespace getVariable LICENSE_VARNAME("pilot","civ") || missionNamespace getVariable LICENSE_VARNAME("trucking","civ") || missionNamespace getVariable LICENSE_VARNAME("boat","civ")) then { + if (missionNamespace getVariable LICENSE_VARNAME("driver","civ") || + {missionNamespace getVariable LICENSE_VARNAME("pilot","civ")} || + {missionNamespace getVariable LICENSE_VARNAME("trucking","civ")} || + {missionNamespace getVariable LICENSE_VARNAME("boat","civ")} + ) then { missionNamespace setVariable [LICENSE_VARNAME("pilot","civ"),false]; missionNamespace setVariable [LICENSE_VARNAME("driver","civ"),false]; missionNamespace setVariable [LICENSE_VARNAME("trucking","civ"),false]; diff --git a/Altis_Life.Altis/core/civilian/fn_robPerson.sqf b/Altis_Life.Altis/core/civilian/fn_robPerson.sqf index 254c79e1f..d5e55e86f 100644 --- a/Altis_Life.Altis/core/civilian/fn_robPerson.sqf +++ b/Altis_Life.Altis/core/civilian/fn_robPerson.sqf @@ -1,28 +1,29 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_robPerson.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Robs a person. -*/ -params [ - ["_robber",objNull,[objNull]] -]; -if (isNull _robber) exitWith {}; //No one to return it to? - -if (CASH > 0) then { - [CASH,player,_robber] remoteExecCall ["life_fnc_robReceive",_robber]; - - if (life_HC_isActive) then { - [getPlayerUID _robber,_robber getVariable ["realname",name _robber],"211"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; - } else { - [getPlayerUID _robber,_robber getVariable ["realname",name _robber],"211"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - }; - - [1,"STR_NOTF_Robbed",true,[_robber getVariable ["realname",name _robber],profileName,[CASH] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - CASH = 0; - [0] call SOCK_fnc_updatePartial; -} else { - [2,"STR_NOTF_RobFail",true,[profileName]] remoteExecCall ["life_fnc_broadcast",_robber]; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_robPerson.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Robs a person. +*/ +params [ + ["_robber",objNull,[objNull]] +]; + +if (isNull _robber) exitWith {}; + +if (CASH > 0) then { + [CASH,player] remoteExecCall ["life_fnc_robReceive",_robber]; + + if (life_HC_isActive) then { + [getPlayerUID _robber,_robber getVariable ["realname",name _robber],"211"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _robber,_robber getVariable ["realname",name _robber],"211"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + [1,"STR_NOTF_Robbed",true,[_robber getVariable ["realname",name _robber],profileName,[CASH] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + CASH = 0; + [0] call SOCK_fnc_updatePartial; +} else { + [2,"STR_NOTF_RobFail",true,[profileName]] remoteExecCall ["life_fnc_broadcast",_robber]; +}; diff --git a/Altis_Life.Altis/core/civilian/fn_robReceive.sqf b/Altis_Life.Altis/core/civilian/fn_robReceive.sqf index 2838646cc..ecf90ab06 100644 --- a/Altis_Life.Altis/core/civilian/fn_robReceive.sqf +++ b/Altis_Life.Altis/core/civilian/fn_robReceive.sqf @@ -1,29 +1,30 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_robReceive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - -*/ -params [ - ["_cash",0,[0]], - ["_victim",objNull,[objNull]], - ["_robber",objNull,[objNull]] -]; - -if (_robber == _victim) exitWith {}; -if (_cash isEqualTo 0) exitWith {titleText[localize "STR_Civ_RobFail","PLAIN"]}; - -CASH = CASH + _cash; -[0] call SOCK_fnc_updatePartial; -titleText[format [localize "STR_Civ_Robbed",[_cash] call life_fnc_numberText],"PLAIN"]; - -if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { - if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { - money_log = format [localize "STR_DL_ML_Robbed_BEF",[_cash] call life_fnc_numberText,_victim,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - } else { - money_log = format [localize "STR_DL_ML_Robbed",profileName,(getPlayerUID player),[_cash] call life_fnc_numberText,_victim,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; - }; - publicVariableServer "money_log"; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_robReceive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + +*/ +params [ + ["_cash",0,[0]], + ["_victim",objNull,[objNull]] +]; + +if (player isEqualTo _victim) exitWith {}; +if (_cash isEqualTo 0) exitWith { + titleText[localize "STR_Civ_RobFail","PLAIN"] +}; + +CASH = CASH + _cash; +[0] call SOCK_fnc_updatePartial; +titleText[format [localize "STR_Civ_Robbed",[_cash] call life_fnc_numberText],"PLAIN"]; + +if (LIFE_SETTINGS(getNumber,"player_moneyLog") isEqualTo 1) then { + if (LIFE_SETTINGS(getNumber,"battlEye_friendlyLogging") isEqualTo 1) then { + money_log = format [localize "STR_DL_ML_Robbed_BEF",[_cash] call life_fnc_numberText,_victim,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + } else { + money_log = format [localize "STR_DL_ML_Robbed",profileName,(getPlayerUID player),[_cash] call life_fnc_numberText,_victim,[BANK] call life_fnc_numberText,[CASH] call life_fnc_numberText]; + }; + publicVariableServer "money_log"; +}; diff --git a/Altis_Life.Altis/core/civilian/fn_tazed.sqf b/Altis_Life.Altis/core/civilian/fn_tazed.sqf index 38b953ddd..3a5b1d2e3 100644 --- a/Altis_Life.Altis/core/civilian/fn_tazed.sqf +++ b/Altis_Life.Altis/core/civilian/fn_tazed.sqf @@ -1,59 +1,68 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_tazed.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the tazed animation and broadcasts out what it needs to. -*/ -private ["_curWep","_curMags","_attach"]; -params [ - ["_unit",objNull,[objNull]], - ["_shooter",objNull,[objNull]] -]; - -if (isNull _unit || isNull _shooter) exitWith {player allowDamage true; life_istazed = false;}; - -if (_shooter isKindOf "CAManBase" && alive player) then { - if (!life_istazed) then { - life_istazed = true; - _curWep = currentWeapon player; - _curMags = magazines player; - _attach = if (!(primaryWeapon player isEqualTo "")) then {primaryWeaponItems player} else {[]}; - - {player removeMagazine _x} forEach _curMags; - player removeWeapon _curWep; - player addWeapon _curWep; - if (!(count _attach isEqualTo 0) && !(primaryWeapon player isEqualTo "")) then { - { - _unit addPrimaryWeaponItem _x; - } forEach _attach; - }; - - if (!(count _curMags isEqualTo 0)) then { - {player addMagazine _x;} forEach _curMags; - }; - [_unit,"tazerSound",100,1] remoteExecCall ["life_fnc_say3D",RCLIENT]; - - _obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL(visiblePositionASL player); - _obj setPosATL ASLTOATL(visiblePositionASL player); - - [player,"AinjPfalMstpSnonWnonDf_carried_fallwc"] remoteExecCall ["life_fnc_animSync",RCLIENT]; - [0,"STR_NOTF_Tazed",true,[profileName, _shooter getVariable ["realname",name _shooter]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - _unit attachTo [_obj,[0,0,0]]; - disableUserInput true; - sleep 15; - - [player,"AmovPpneMstpSrasWrflDnon"] remoteExecCall ["life_fnc_animSync",RCLIENT]; - - if (!(player getVariable ["Escorting",false])) then { - detach player; - }; - life_istazed = false; - player allowDamage true; - disableUserInput false; - }; -} else { - _unit allowDamage true; - life_istazed = false; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_tazed.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the tazed animation and broadcasts out what it needs to. +*/ + +params [ + ["_unit",objNull,[objNull]], + ["_shooter",objNull,[objNull]] +]; + +if (isNull _unit || {isNull _shooter}) exitWith { + player allowDamage true; + life_istazed = false; +}; + +if (_shooter isKindOf "Man" && {alive player}) then { + if (!life_istazed) then { + life_istazed = true; + private _curWep = currentWeapon player; + private _curMags = magazines player; + private _attach = if (!(primaryWeapon player isEqualTo "")) then {primaryWeaponItems player} else {[]}; + + { + player removeMagazine _x + } count _curMags; + + player removeWeapon _curWep; + player addWeapon _curWep; + if (!(_attach isEqualTo []) && {!(primaryWeapon player isEqualTo "")}) then { + { + _unit addPrimaryWeaponItem _x; + } count _attach; + }; + + if !(_curMags isEqualTo []) then { + { + player addMagazine _x; + } count _curMags; + }; + [_unit,"tazerSound",100,1] remoteExecCall ["life_fnc_say3D",RCLIENT]; + + private _obj = "Land_ClutterCutter_small_F" createVehicle ASLTOATL (visiblePositionASL player); + _obj setPosATL ASLTOATL (visiblePositionASL player); + + [player,"AinjPfalMstpSnonWnonDf_carried_fallwc"] remoteExecCall ["life_fnc_animSync",RCLIENT]; + [0,"STR_NOTF_Tazed",true,[profileName, _shooter getVariable ["realname",name _shooter]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + _unit attachTo [_obj,[0,0,0]]; + disableUserInput true; + sleep 15; + + [player,"AmovPpneMstpSrasWrflDnon"] remoteExecCall ["life_fnc_animSync",RCLIENT]; + + if !(player getVariable ["Escorting",false]) then { + detach player; + }; + + life_istazed = false; + player allowDamage true; + disableUserInput false; + }; +} else { + _unit allowDamage true; + life_istazed = false; +}; diff --git a/Altis_Life.Altis/core/config/fn_houseConfig.sqf b/Altis_Life.Altis/core/config/fn_houseConfig.sqf index 1e4fd7969..f5fa63b0a 100644 --- a/Altis_Life.Altis/core/config/fn_houseConfig.sqf +++ b/Altis_Life.Altis/core/config/fn_houseConfig.sqf @@ -6,7 +6,9 @@ Fetch data from Config_Housing/Garages */ -private _house = param [0,"",[""]]; +params [ + ["_house", "", [""]] +]; if (_house isEqualTo "") exitWith {[]}; diff --git a/Altis_Life.Altis/core/config/fn_itemWeight.sqf b/Altis_Life.Altis/core/config/fn_itemWeight.sqf index 0039f34d2..6e72403af 100644 --- a/Altis_Life.Altis/core/config/fn_itemWeight.sqf +++ b/Altis_Life.Altis/core/config/fn_itemWeight.sqf @@ -6,8 +6,11 @@ Description: Gets the items weight and returns it. */ -private ["_item"]; -_item = [_this,0,"",[""]] call BIS_fnc_param; + +params [ + ["_item", "", [""]] +]; + if (_item isEqualTo "") exitWith {}; M_CONFIG(getNumber,"VirtualItems",_item,"weight"); diff --git a/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf b/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf index b9c190d1f..04b034e6f 100644 --- a/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf +++ b/Altis_Life.Altis/core/config/fn_vehicleAnimate.sqf @@ -5,27 +5,25 @@ 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 -{ +params [ + ["_vehicle", objNull, [objNull]], + ["_animate", "", ["", []]], + ["_preset", false, [true]] +]; + +if (isNull _vehicle) exitWith {}; + +if (!_preset) then { if (count _animate > 1) then { { _vehicle animate[_x select 0,_x select 1]; - } forEach _animate; - } - else - { + } count _animate; + } else { _vehicle animate[_animate select 0,_animate select 1]; }; -} - else -{ +} else { switch (_animate) do { case "civ_littlebird": diff --git a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf index 413c1d565..e22131244 100644 --- a/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf +++ b/Altis_Life.Altis/core/config/fn_vehicleWeightCfg.sqf @@ -1,19 +1,25 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehicleWeightCfg.sqf - Author: Bryan "Tonic" Boardwine - - 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 - diag_log format ["%1: LifeCfgVehicles class doesn't exist",_className]; -}; -_weight = M_CONFIG(getNumber,"LifeCfgVehicles",_classNameLife,"vItemSpace"); - -if (isNil "_weight") then {_weight = -1;}; -_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 +}; + +private _weight = M_CONFIG(getNumber,"LifeCfgVehicles",_className,"vItemSpace"); + +if (isNil "_weight") then { + _weight = -1; +}; + +_weight; diff --git a/Altis_Life.Altis/core/configuration.sqf b/Altis_Life.Altis/core/configuration.sqf index fa8485c9e..3b3135219 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_impound_inuse = false; +life_action_inUse = false; +life_spikestrip = objNull; +life_knockout = false; +life_interrupted = false; +life_respawned = false; +life_removeWanted = 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/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf b/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf index 37c42bef8..ce9beddcc 100644 --- a/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf +++ b/Altis_Life.Altis/core/cop/fn_bountyReceive.sqf @@ -6,9 +6,11 @@ Description: Notifies the player he has received a bounty and gives him the cash. */ -private ["_val","_total"]; -_val = [_this,0,"",["",0]] call BIS_fnc_param; -_total = [_this,1,"",["",0]] call BIS_fnc_param; + +params [ + ["_val", "", [""]], + ["_total", "", [""]] +]; if (_val == _total) then { titleText[format [localize "STR_Cop_BountyRecieve",[_val] call life_fnc_numberText],"PLAIN"]; diff --git a/Altis_Life.Altis/core/cop/fn_containerInvSearch.sqf b/Altis_Life.Altis/core/cop/fn_containerInvSearch.sqf index ceaccab38..13ee5b4b7 100644 --- a/Altis_Life.Altis/core/cop/fn_containerInvSearch.sqf +++ b/Altis_Life.Altis/core/cop/fn_containerInvSearch.sqf @@ -1,42 +1,46 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_containerInvSearch.sqf - Author: NiiRoZz - Inspired : Bryan "Tonic" Boardwine - - Description: - Searches the container for illegal items. -*/ -private ["_container","_containerInfo","_value"]; -_container = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _container) exitWith {}; - -_containerInfo = _container getVariable ["Trunk",[]]; -if (count _containerInfo isEqualTo 0) exitWith {hint localize "STR_Cop_ContainerEmpty"}; - -_value = 0; -_illegalValue = 0; -{ - _var = _x select 0; - _val = _x select 1; - _isIllegalItem = M_CONFIG(getNumber,"VirtualItems",_var,"illegal"); - if (_isIllegalItem isEqualTo 1 ) then { - _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_var,"sellPrice"); - if (!isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { - _illegalItemProcessed = M_CONFIG(getText,"VirtualItems",_var,"processedItem"); - _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_illegalItemProcessed,"sellPrice"); - }; - - _illegalValue = _illegalValue + (round(_val * _illegalPrice / 2)); - }; -} forEach (_containerInfo select 0); -_value = _illegalValue; -if (_value > 0) then { - [0,"STR_NOTF_ContainerContraband",true,[[_value] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - BANK = BANK + _value; - [1] call SOCK_fnc_updatePartial; - _container setVariable ["Trunk",[[],0],true]; - [_container] remoteExecCall ["TON_fnc_updateHouseTrunk",2]; -} else { - hint localize "STR_Cop_NoIllegalContainer"; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_containerInvSearch.sqf + Author: NiiRoZz + Inspired : Bryan "Tonic" Boardwine + + Description: + Searches the container for illegal items. +*/ + +params [ + ["_container", objNull, [objNull]] +]; + +if (isNull _container) exitWith {}; + +private _containerInfo = _container getVariable ["Trunk",[]]; +if (_containerInfo isEqualTo []) exitWith {hint localize "STR_Cop_ContainerEmpty"}; +_containerInfo params ["_items"]; + +private _illegalValue = 0; +{ + _x params ["_var", "_val"]; + + private _isIllegalItem = M_CONFIG(getNumber,"VirtualItems",_var,"illegal"); + if (_isIllegalItem isEqualTo 1) then { + private _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_var,"sellPrice"); + if !(isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { + private _illegalItemProcessed = M_CONFIG(getText,"VirtualItems",_var,"processedItem"); + _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_illegalItemProcessed,"sellPrice"); + }; + + _illegalValue = _illegalValue + (round(_val * _illegalPrice / 2)); + }; + true +} count _items; + +if (_illegalValue > 0) then { + [0,"STR_NOTF_ContainerContraband",true,[[_illegalValue] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; + BANK = BANK + _illegalValue; + [1] call SOCK_fnc_updatePartial; + _container setVariable ["Trunk",[[],0],true]; + [_container] remoteExecCall ["TON_fnc_updateHouseTrunk",2]; +} else { + hint localize "STR_Cop_NoIllegalContainer"; +}; diff --git a/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf b/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf index 8eb9dedf6..156e624bd 100644 --- a/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf +++ b/Altis_Life.Altis/core/cop/fn_copInteractionMenu.sqf @@ -1,90 +1,101 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_copInteractionMenu.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Replaces the mass addactions for various cop actions towards another player. -*/ -#define Btn1 37450 -#define Btn2 37451 -#define Btn3 37452 -#define Btn4 37453 -#define Btn5 37454 -#define Btn6 37455 -#define Btn7 37456 -#define Btn8 37457 -#define Title 37401 - -private ["_display","_curTarget","_seizeRank","_Btn1","_Btn2","_Btn3","_Btn4","_Btn5","_Btn6","_Btn7","_Btn8"]; - -disableSerialization; -_curTarget = param [0,objNull,[objNull]]; -_seizeRank = LIFE_SETTINGS(getNumber,"seize_minimum_rank"); - -if (player getVariable ["Escorting", false]) then { - if (isNull _curTarget) exitWith {closeDialog 0;}; //Bad target - if (!isPlayer _curTarget && side _curTarget isEqualTo civilian) exitWith {closeDialog 0;}; //Bad side check? - if (player distance _curTarget > 4 ) exitWith {closeDialog 0;}; // Prevents menu accessing from far distances. -}; - -if (!dialog) then { - createDialog "pInteraction_Menu"; -}; - -_display = findDisplay 37400; -_Btn1 = _display displayCtrl Btn1; -_Btn2 = _display displayCtrl Btn2; -_Btn3 = _display displayCtrl Btn3; -_Btn4 = _display displayCtrl Btn4; -_Btn5 = _display displayCtrl Btn5; -_Btn6 = _display displayCtrl Btn6; -_Btn7 = _display displayCtrl Btn7; -_Btn8 = _display displayCtrl Btn8; -life_pInact_curTarget = _curTarget; - -if (player getVariable ["isEscorting",false]) then { - { _x ctrlShow false; } forEach [_Btn1,_Btn2,_Btn3,_Btn5,_Btn6,_Btn7,_Btn8]; -}; - -//Set Unrestrain Button -_Btn1 ctrlSetText localize "STR_pInAct_Unrestrain"; -_Btn1 buttonSetAction "[life_pInact_curTarget] call life_fnc_unrestrain; closeDialog 0;"; - -//Set Check Licenses Button -_Btn2 ctrlSetText localize "STR_pInAct_checkLicenses"; -_Btn2 buttonSetAction "[player] remoteExecCall [""life_fnc_licenseCheck"",life_pInact_curTarget]; closeDialog 0;"; - -//Set Search Button -_Btn3 ctrlSetText localize "STR_pInAct_SearchPlayer"; -_Btn3 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_searchAction; closeDialog 0;"; - -//Set Escort Button -if (player getVariable ["isEscorting",false]) then { - _Btn4 ctrlSetText localize "STR_pInAct_StopEscort"; - _Btn4 buttonSetAction "[] call life_fnc_stopEscorting; closeDialog 0;"; -} else { - _Btn4 ctrlSetText localize "STR_pInAct_Escort"; - _Btn4 buttonSetAction "[life_pInact_curTarget] call life_fnc_escortAction; closeDialog 0;"; -}; - -//Set Ticket Button -_Btn5 ctrlSetText localize "STR_pInAct_TicketBtn"; -_Btn5 buttonSetAction "[life_pInact_curTarget] call life_fnc_ticketAction;"; - -_Btn6 ctrlSetText localize "STR_pInAct_Arrest"; -_Btn6 buttonSetAction "[life_pInact_curTarget] call life_fnc_arrestAction; closeDialog 0;"; -_Btn6 ctrlEnable false; - -_Btn7 ctrlSetText localize "STR_pInAct_PutInCar"; -_Btn7 buttonSetAction "[life_pInact_curTarget] call life_fnc_putInCar; closeDialog 0;"; - -//SeizeWeapons Button -_Btn8 ctrlSetText localize "STR_pInAct_Seize"; -_Btn8 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_seizePlayerAction; closeDialog 0;"; - -if (FETCH_CONST(life_coplevel) < _seizeRank) then {_Btn8 ctrlEnable false;}; - -{ - if ((player distance (getMarkerPos _x) <30)) exitWith { _Btn6 ctrlEnable true;}; -} forEach LIFE_SETTINGS(getArray,"sendtoJail_locations"); \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_copInteractionMenu.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Replaces the mass addactions for various cop actions towards another player. +*/ + +#define BTN_1 37450 +#define BTN_2 37451 +#define BTN_3 37452 +#define BTN_4 37453 +#define BTN_5 37454 +#define BTN_6 37455 +#define BTN_7 37456 +#define BTN_8 37457 +#define TITLE 37401 + +params [ + ["_curTarget", objNull, [objNull]] +]; + +disableSerialization; + +if (player getVariable ["Escorting", false]) then { + if (isNull _curTarget || {player distance _curTarget > 4}) exitWith { + closeDialog 0; + }; + if (!isPlayer _curTarget && {side _curTarget isEqualTo civilian}) exitWith { + closeDialog 0; + }; +}; + +if (!dialog) then { + createDialog "pInteraction_Menu"; +}; + +private _display = findDisplay 37400; +private _btn1 = _display displayCtrl BTN_1; +private _btn2 = _display displayCtrl BTN_2; +private _btn3 = _display displayCtrl BTN_3; +private _btn4 = _display displayCtrl BTN_4; +private _btn5 = _display displayCtrl BTN_5; +private _btn6 = _display displayCtrl BTN_6; +private _btn7 = _display displayCtrl BTN_7; +private _btn8 = _display displayCtrl BTN_8; + +life_pInact_curTarget = _curTarget; +private _seizeRank = LIFE_SETTINGS(getNumber,"seize_minimum_rank"); + +if (player getVariable ["isEscorting",false]) then { + { + _x ctrlShow false; + } count [_btn1,_btn2,_btn3,_btn5,_btn6,_btn7,_btn8]; +}; + +//Set Unrestrain Button +_btn1 ctrlSetText localize "STR_pInAct_Unrestrain"; +_btn1 buttonSetAction "[life_pInact_curTarget] call life_fnc_unrestrain; closeDialog 0;"; + +//Set Check Licenses Button +_btn2 ctrlSetText localize "STR_pInAct_checkLicenses"; +_btn2 buttonSetAction "[player] remoteExecCall [""life_fnc_licenseCheck"",life_pInact_curTarget]; closeDialog 0;"; + +//Set Search Button +_btn3 ctrlSetText localize "STR_pInAct_SearchPlayer"; +_btn3 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_searchAction; closeDialog 0;"; + +//Set Escort Button +if (player getVariable ["isEscorting",false]) then { + _btn4 ctrlSetText localize "STR_pInAct_StopEscort"; + _btn4 buttonSetAction "[] call life_fnc_stopEscorting; closeDialog 0;"; +} else { + _btn4 ctrlSetText localize "STR_pInAct_Escort"; + _btn4 buttonSetAction "[life_pInact_curTarget] call life_fnc_escortAction; closeDialog 0;"; +}; + +//Set Ticket Button +_btn5 ctrlSetText localize "STR_pInAct_TicketBtn"; +_btn5 buttonSetAction "[life_pInact_curTarget] call life_fnc_ticketAction;"; + +_btn6 ctrlSetText localize "STR_pInAct_Arrest"; +_btn6 buttonSetAction "[life_pInact_curTarget] call life_fnc_arrestAction; closeDialog 0;"; +_btn6 ctrlEnable false; + +_btn7 ctrlSetText localize "STR_pInAct_PutInCar"; +_btn7 buttonSetAction "[life_pInact_curTarget] call life_fnc_putInCar; closeDialog 0;"; + +//SeizeWeapons Button +_btn8 ctrlSetText localize "STR_pInAct_Seize"; +_btn8 buttonSetAction "[life_pInact_curTarget] spawn life_fnc_seizePlayerAction; closeDialog 0;"; + +if (FETCH_CONST(life_coplevel) < _seizeRank) then {_btn8 ctrlEnable false;}; + +{ + if (player distance (getMarkerPos _x) < 30) exitWith { + _btn6 ctrlEnable true; + }; + true +} count LIFE_SETTINGS(getArray,"sendtoJail_locations"); diff --git a/Altis_Life.Altis/core/cop/fn_copMarkers.sqf b/Altis_Life.Altis/core/cop/fn_copMarkers.sqf index 1c6c14251..d75d63a67 100644 --- a/Altis_Life.Altis/core/cop/fn_copMarkers.sqf +++ b/Altis_Life.Altis/core/cop/fn_copMarkers.sqf @@ -5,39 +5,42 @@ Description: Marks cops on the map for other cops. Only initializes when the actual map is open. */ -private ["_markers","_cops"]; -_markers = []; -_cops = []; + +private _markers = []; +private _cops = []; sleep 0.5; if (visibleMap) then { - {if (side _x isEqualTo west) then {_cops pushBack _x;}} forEach playableUnits; //Fetch list of cops / blufor + _cops = playableUnits select {side _x isEqualTo west}; //Create markers { if !(_x isEqualTo player) then { - _marker = createMarkerLocal [format ["%1_marker",_x],visiblePosition _x]; + private _marker = createMarkerLocal [format ["%1_marker",_x],visiblePosition _x]; _marker setMarkerColorLocal "ColorBLUFOR"; _marker setMarkerTypeLocal "Mil_dot"; _marker setMarkerTextLocal format ["%1", _x getVariable ["realname",name _x]]; _markers pushBack [_marker,_x]; }; - } forEach _cops; + true + } count _cops; while {visibleMap} do { { - private ["_unit"]; - _unit = _x select 1; - if (!isNil "_unit" && !isNull _unit) then { - (_x select 0) setMarkerPosLocal (visiblePosition _unit); + _x params ["_marker","_unit"]; + if (!isNil "_unit" && {!isNull _unit}) then { + _marker setMarkerPosLocal (visiblePosition _unit); }; - } forEach _markers; + true + } count _markers; if (!visibleMap) exitWith {}; sleep 0.02; }; - {deleteMarkerLocal (_x select 0);} forEach _markers; + { + deleteMarkerLocal (_x select 0); + } count _markers; _markers = []; _cops = []; }; diff --git a/Altis_Life.Altis/core/cop/fn_copSearch.sqf b/Altis_Life.Altis/core/cop/fn_copSearch.sqf index 76ad6d2bb..c594bc18f 100644 --- a/Altis_Life.Altis/core/cop/fn_copSearch.sqf +++ b/Altis_Life.Altis/core/cop/fn_copSearch.sqf @@ -1,63 +1,69 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_copSearch.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Returns information on the search. -*/ -life_action_inUse = false; -private ["_license","_guns","_gun"]; -params [ - ["_civ",objNull,[objNull]], - ["_invs",[],[[]]], - ["_robber",false,[false]] -]; - -if (isNull _civ) exitWith {}; - -_illegal = 0; -_inv = ""; -if (count _invs > 0) then { - { - _displayName = M_CONFIG(getText,"VirtualItems",(_x select 0),"displayName"); - _inv = _inv + format ["%1 %2
",(_x select 1),(localize _displayName)]; - _price = M_CONFIG(getNumber,"VirtualItems",(_x select 0),"sellPrice"); - if (!isNull (missionConfigFile >> "VirtualItems" >> (_x select 0) >> "processedItem")) then { - _processed = M_CONFIG(getText,"VirtualItems",(_x select 0),"processedItem"); - _price = M_CONFIG(getNumber,"VirtualItems",_processed,"sellPrice"); - }; - - if (!(_price isEqualTo -1)) then { - _illegal = _illegal + ((_x select 1) * _price); - }; - } forEach _invs; - if (_illegal > 6000) then { - - if (life_HC_isActive) then { - [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"482"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; - } else { - [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"482"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - }; - - }; - - if (life_HC_isActive) then { - [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"481"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; - } else { - [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"481"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - }; - - [0,"STR_Cop_Contraband",true,[(_civ getVariable ["realname",name _civ]),[_illegal] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; -} else { - _inv = localize "STR_Cop_NoIllegal"; -}; - -if (!alive _civ || player distance _civ > 5) exitWith {hint format [localize "STR_Cop_CouldntSearch",_civ getVariable ["realname",name _civ]]}; -//hint format ["%1",_this]; -hint parseText format ["%1

" +(localize "STR_Cop_IllegalItems")+ "

%2



%3" -,(_civ getVariable ["realname",name _civ]),_inv,if (_robber) then {"Robbed the bank"} else {""}]; - -if (_robber) then { - [0,"STR_Cop_Robber",true,[(_civ getVariable ["realname",name _civ])]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_copSearch.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Returns information on the search. +*/ + +life_action_inUse = false; + +params [ + ["_civ",objNull,[objNull]], + ["_invs",[],[[]]], + ["_robber",false,[false]] +]; + +if (isNull _civ) exitWith {}; + +private _inv = ""; +if (count _invs > 0) then { + private _illegal = 0; + { + _x params ["_var", "_count"]; + + private _displayName = M_CONFIG(getText,"VirtualItems", _var, "displayName"); + _inv = _inv + format ["%1 %2
", _count, localize _displayName]; + private _price = M_CONFIG(getNumber,"VirtualItems", _var, "sellPrice"); + if (!isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { + private _processed = M_CONFIG(getText,"VirtualItems", _var, "processedItem"); + _price = M_CONFIG(getNumber,"VirtualItems", _processed, "sellPrice"); + }; + + if !(_price isEqualTo -1) then { + _illegal = _illegal + (_count * _price); + }; + true + } count _invs; + if (_illegal > 6000) then { + + if (life_HC_isActive) then { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"482"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"482"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + }; + + if (life_HC_isActive) then { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"481"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life]; + } else { + [getPlayerUID _civ,_civ getVariable ["realname",name _civ],"481"] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + }; + + [0,"STR_Cop_Contraband",true,[(_civ getVariable ["realname",name _civ]),[_illegal] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; +} else { + _inv = localize "STR_Cop_NoIllegal"; +}; + +if (!alive _civ || {player distance _civ > 5}) exitWith { + hint format [localize "STR_Cop_CouldntSearch",_civ getVariable ["realname",name _civ]] +}; + +hint parseText format ["%1

" + (localize "STR_Cop_IllegalItems")+ "

%2



%3", +(_civ getVariable ["realname",name _civ]), _inv, ["", "Robbed the bank"] select _robber]; + +if (_robber) then { + [0,"STR_Cop_Robber",true,[_civ getVariable ["realname",name _civ]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; +}; diff --git a/Altis_Life.Altis/core/cop/fn_copSiren.sqf b/Altis_Life.Altis/core/cop/fn_copSiren.sqf index 93226def6..1d747c651 100644 --- a/Altis_Life.Altis/core/cop/fn_copSiren.sqf +++ b/Altis_Life.Altis/core/cop/fn_copSiren.sqf @@ -1,23 +1,25 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_copSiren.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Starts the cop siren sound for other players. -*/ -private ["_vehicle"]; -_vehicle = param [0,objNull,[objNull]]; - -if (isNull _vehicle) exitWith {}; -if (isNil {_vehicle getVariable "siren"}) exitWith {}; - -for "_i" from 0 to 1 step 0 do { - if (!(_vehicle getVariable "siren")) exitWith {}; - if (count crew _vehicle isEqualTo 0) then {_vehicle setVariable ["siren",false,true]}; - if (!alive _vehicle) exitWith {}; - if (isNull _vehicle) exitWith {}; - _vehicle say3D ["sirenLong",500,1]; //Class name specified in description.ext, max distance & pitch - sleep 4.870;//Exactly matches the length of the audio file. - if (!(_vehicle getVariable "siren")) exitWith {}; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_copSiren.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Starts the cop siren sound for other players. +*/ + +params [ + ["_vehicle",objNull,[objNull]] +]; + +if (isNull _vehicle) exitWith {}; +if (isNil {_vehicle getVariable "siren"}) exitWith {}; + +for "_i" from 0 to 1 step 0 do { + if !(alive _vehicle) exitWith {}; //also checks for objNull + if !(_vehicle getVariable "siren") exitWith {}; + if (crew _vehicle isEqualTo []) then { + _vehicle setVariable ["siren",false,true] + }; + _vehicle say3D ["sirenLong",500,1]; //Class name specified in description.ext, max distance & pitch + uiSleep 4.870; //Exactly matches the length of the audio file. +}; diff --git a/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf b/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf index 4d87ddafc..60df077ac 100644 --- a/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf +++ b/Altis_Life.Altis/core/cop/fn_doorAnimate.sqf @@ -5,7 +5,7 @@ Author: Bryan "Tonic" Boardwine Description: - Animates a door? + Animates a door */ params [ diff --git a/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf b/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf index 2ff68c14b..ebade7236 100644 --- a/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf +++ b/Altis_Life.Altis/core/cop/fn_fedCamDisplay.sqf @@ -35,7 +35,7 @@ private _mTwPositions = [ ["vault",[19.9775,-0.0078125,-1.90735e-006],[-5.00684,0.59375,-9.57164]], ["front",[0.972656,78.8281,15.617],[-0.657227,22.9082,-10.4033]], ["back",[28.9248,-42.0977,-3.8896],[-1.33789,-24.6035,-10.2108]] -]; +]; //modelToWorld positions private _index = [_mode,_mTwPositions] call life_util_fnc_index; @@ -46,7 +46,7 @@ if (_index isEqualTo -1) then { _laptop setObjectTexture [0,""]; life_fed_scam = nil; } else { - _temp = _mTwPositions select _index; + private _temp = _mTwPositions select _index; life_fed_scam camSetPos (_dome modelToWorld (_temp select 1)); life_fed_scam camSetTarget (_dome modelToWorld (_temp select 2)); life_fed_scam camCommit 0; diff --git a/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf b/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf index 385f3b9ca..a5972f830 100644 --- a/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf +++ b/Altis_Life.Altis/core/cop/fn_licenseCheck.sqf @@ -1,25 +1,31 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_licenseCheck.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Returns the licenses to the cop. -*/ -private ["_cop","_licenses","_licensesConfigs"]; -_cop = param [0,objNull,[objNull]]; -if (isNull _cop) exitWith {}; //Bad entry - -_licenses = ""; - -//Config entries for licenses that are civilian -_licensesConfigs = "getText(_x >> 'side') isEqualTo 'civ'" configClasses (missionConfigFile >> "Licenses"); - -{ - if (LICENSE_VALUE(configName _x,"civ")) then { - _licenses = _licenses + localize getText(_x >> "displayName") + "
"; - }; -} forEach _licensesConfigs; - -if (_licenses isEqualTo "") then {_licenses = (localize "STR_Cop_NoLicensesFound");}; -[profileName,_licenses] remoteExecCall ["life_fnc_licensesRead",_cop]; +#include "..\..\script_macros.hpp" +/* + File: fn_licenseCheck.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Returns the licenses to the cop. +*/ + +params [ + ["_cop",objNull,[objNull]] +]; + +if (isNull _cop) exitWith {}; //Bad entry + +private _licenses = ""; + +//Config entries for licenses that are civilian +private _licensesConfigs = "getText(_x >> 'side') isEqualTo 'civ'" configClasses (missionConfigFile >> "Licenses"); + +{ + if (LICENSE_VALUE(configName _x, "civ")) then { + _licenses = _licenses + localize getText(_x >> "displayName") + "
"; + }; + true +} count _licensesConfigs; + +if (_licenses isEqualTo "") then { + _licenses = localize "STR_Cop_NoLicensesFound"; +}; +[profileName,_licenses] remoteExecCall ["life_fnc_licensesRead",_cop]; diff --git a/Altis_Life.Altis/core/cop/fn_licensesRead.sqf b/Altis_Life.Altis/core/cop/fn_licensesRead.sqf index 65471ff48..a7af674d5 100644 --- a/Altis_Life.Altis/core/cop/fn_licensesRead.sqf +++ b/Altis_Life.Altis/core/cop/fn_licensesRead.sqf @@ -1,13 +1,14 @@ -/* - File: fn_licensesRead.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Outprints the licenses. -*/ -params [ - ["_civ","",[""]], - ["_licenses",(localize "STR_Cop_NoLicenses"),[""]] -]; - -hint parseText format ["%1
" +(localize "STR_Cop_Licenses")+ "
%2",_civ,_licenses]; \ No newline at end of file +/* + File: fn_licensesRead.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Outprints the licenses. +*/ + +params [ + ["_civ", "", [""]], + ["_licenses", "", [""]] +]; + +hint parseText format ["%1
" + (localize "STR_Cop_Licenses")+ "
%2",_civ,_licenses]; diff --git a/Altis_Life.Altis/core/cop/fn_questionDealer.sqf b/Altis_Life.Altis/core/cop/fn_questionDealer.sqf index 7ff470db0..fc49414c2 100644 --- a/Altis_Life.Altis/core/cop/fn_questionDealer.sqf +++ b/Altis_Life.Altis/core/cop/fn_questionDealer.sqf @@ -1,33 +1,44 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_questionDealer.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Questions the drug dealer and sets the sellers wanted. -*/ -private ["_sellers","_crimes","_names"]; -_sellers = (_this select 0) getVariable ["sellers",[]]; -if (count _sellers isEqualTo 0) exitWith {hint localize "STR_Cop_DealerQuestion"}; //No data. -life_action_inUse = true; -_crimes = LIFE_SETTINGS(getArray,"crimes"); - -_names = ""; -{ - _val = 0; - if ((_x select 2) > 150000) then { - _val = round((_x select 2) / 16); - } else { - _val = ["483",_crimes] call life_util_fnc_index; - _val = ((_crimes select _val) select 1); - if (_val isEqualType "") then { - _val = parseNumber _val; - }; - }; - [(_x select 0),(_x select 1),"483",_val] remoteExecCall ["life_fnc_wantedAdd",RSERV]; - _names = _names + format ["%1
",(_x select 1)]; -} forEach _sellers; - -hint parseText format [(localize "STR_Cop_DealerMSG")+ "

%1",_names]; -(_this select 0) setVariable ["sellers",[],true]; -life_action_inUse = false; +#include "..\..\script_macros.hpp" +/* + File: fn_questionDealer.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Questions the drug dealer and sets the sellers wanted. +*/ + +params [ + ["_dealer", objNull, [objNull]] +]; + +private _sellers = _dealer getVariable ["sellers", []]; + +if (_sellers isEqualTo []) exitWith { + hint localize "STR_Cop_DealerQuestion" +}; + +life_action_inUse = true; +private _crimes = LIFE_SETTINGS(getArray,"crimes"); + +private _names = ""; +{ + _x params ["_uid","_name","_value"]; + private _val = 0; + if (_value > 150000) then { + _val = round(_value / 16); + } else { + _val = ["483",_crimes] call life_util_fnc_index; + _val = ((_crimes select _val) select 1); + if (_val isEqualType "") then { + _val = parseNumber _val; + }; + }; + [_uid,_name,"483",_val] remoteExecCall ["life_fnc_wantedAdd",RSERV]; + _names = _names + format ["%1
",_name]; + + true +} count _sellers; + +hint parseText format [(localize "STR_Cop_DealerMSG")+ "

%1",_names]; +_dealer setVariable ["sellers",[],true]; +life_action_inUse = false; diff --git a/Altis_Life.Altis/core/cop/fn_radar.sqf b/Altis_Life.Altis/core/cop/fn_radar.sqf index 1c6657b9b..844a65e2b 100644 --- a/Altis_Life.Altis/core/cop/fn_radar.sqf +++ b/Altis_Life.Altis/core/cop/fn_radar.sqf @@ -1,23 +1,22 @@ -/* - File: fn_radar.sqf - Author: Silly Aussie kid named Jaydon - - Description: - Looks like weird but radar? -*/ -if !(playerSide isEqualTo west) exitWith {}; -private ["_speed","_vehicle"]; -_vehicle = cursorObject; -_speed = round speed _vehicle; - -if ((_vehicle isKindOf "Car") && (currentWeapon player) isEqualTo "hgun_P07_snds_F") then { - switch (true) do { - case (_speed > 33 && _speed <= 80): { - hint parseText format ["" +(localize "STR_Cop_Radar")+ "
" +(localize "STR_Cop_VehSpeed"),round _speed]; - }; - - case (_speed > 80): { - hint parseText format ["" +(localize "STR_Cop_Radar")+ "
" +(localize "STR_Cop_VehSpeed"),round _speed]; - }; - }; -}; +/* + File: fn_radar.sqf + Author: Silly Aussie kid named Jaydon + + Description: + Radar +*/ + +if !(playerSide isEqualTo west) exitWith {}; + +private _vehicle = cursorObject; +if (_vehicle isKindOf "Car" && {currentWeapon player isEqualTo "hgun_P07_snds_F"}) then { + private _speed = round speed _vehicle; + + if (_speed > 80) then { + hint parseText format ["" + (localize "STR_Cop_Radar")+ "
" + (localize "STR_Cop_VehSpeed"), _speed]; + } else { + if (_speed > 33) then { + hint parseText format ["" + (localize "STR_Cop_Radar")+ "
" + (localize "STR_Cop_VehSpeed"), _speed]; + }; + }; +}; diff --git a/Altis_Life.Altis/core/cop/fn_repairDoor.sqf b/Altis_Life.Altis/core/cop/fn_repairDoor.sqf index ec858acbb..a8b20febb 100644 --- a/Altis_Life.Altis/core/cop/fn_repairDoor.sqf +++ b/Altis_Life.Altis/core/cop/fn_repairDoor.sqf @@ -6,43 +6,55 @@ Description: Re-locks the door mainly for the federal reserve structures. */ -private ["_building","_doors","_door","_cP","_cpRate","_ui","_title","_titleText","_locked"]; -_building = param [0,objNull,[objNull]]; + +params [ + ["_building", objNull, [objNull]] +]; + if (isNull _building) exitWith {}; -if (!(_building isKindOf "House_F")) exitWith {hint localize "STR_ISTR_Bolt_NotNear";}; +if !(_building isKindOf "House_F") exitWith { + hint localize "STR_ISTR_Bolt_NotNear"; +}; -_doors = 1; +private _doors = 1; _doors = FETCH_CONFIG2(getNumber,"CfgVehicles",(typeOf _building),"NumberOfDoors"); -_door = 0; +private _door = 0; + //Find the nearest door for "_i" from 1 to _doors do { - _selPos = _building selectionPosition format ["Door_%1_trigger",_i]; - _worldSpace = _building modelToWorld _selPos; - if (player distance _worldSpace < 5) exitWith {_door = _i;}; + private _selPos = _building selectionPosition format ["Door_%1_trigger",_i]; + private _worldSpace = _building modelToWorld _selPos; + if (player distance _worldSpace < 5) exitWith { + _door = _i; + }; }; -if (_door isEqualTo 0) exitWith {hint localize "STR_Cop_NotaDoor"}; //Not near a door to be broken into. -_doorN = _building getVariable [format ["bis_disabled_Door_%1",_door],0]; -if (_doorN isEqualTo 1) exitWith {hint localize "STR_House_FedDoor_Locked"}; +if (_door isEqualTo 0) exitWith { + hint localize "STR_Cop_NotaDoor" +}; //Not near a door to be broken into. +private _doorN = _building getVariable [format ["bis_disabled_Door_%1",_door],0]; +if (_doorN isEqualTo 1) exitWith { + hint localize "STR_House_FedDoor_Locked" +}; life_action_inUse = true; closeDialog 0; //Setup the progress bar disableSerialization; -_title = localize "STR_Cop_RepairingDoor"; +private _title = localize "STR_Cop_RepairingDoor"; "progressBar" cutRsc ["life_progress","PLAIN"]; -_ui = uiNamespace getVariable "life_progress"; -_progressBar = _ui displayCtrl 38201; -_titleText = _ui displayCtrl 38202; +private _ui = uiNamespace getVariable "life_progress"; +private _progressBar = _ui displayCtrl 38201; +private _titleText = _ui displayCtrl 38202; _titleText ctrlSetText format ["%2 (1%1)...","%",_title]; _progressBar progressSetPosition 0.01; -_cP = 0.01; +private _cP = 0.01; -switch (typeOf _building) do { - case "Land_Dome_Big_F": {_cpRate = 0.008;}; +private _cpRate = switch (typeOf _building) do { + case "Land_Dome_Big_F": {0.008}; case "Land_Medevac_house_V1_F"; - case "Land_Research_house_V1_F": {_cpRate = 0.005;}; - default {_cpRate = 0.08;} + case "Land_Research_house_V1_F": {0.005}; + default {0.08}; }; for "_i" from 0 to 1 step 0 do { @@ -59,23 +71,31 @@ for "_i" from 0 to 1 step 0 do { _cP = _cP + _cpRate; _progressBar progressSetPosition _cP; _titleText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_title]; - if (_cP >= 1 || !alive player) exitWith {}; + if (_cP >= 1 || {!alive player}) exitWith {}; if (life_interrupted) exitWith {}; }; //Kill the UI display and check for various states "progressBar" cutText ["","PLAIN"]; player playActionNow "stop"; -if (!alive player) exitWith {life_action_inUse = false;}; -if (life_interrupted) exitWith {life_interrupted = false; titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; life_action_inUse = false;}; + life_action_inUse = false; +if (!alive player) exitWith {}; + +if (life_interrupted) exitWith { + life_interrupted = false; + titleText[localize "STR_NOTF_ActionCancel","PLAIN"]; +}; + _building animateSource [format ["Door_%1_source", _door], 0]; _building setVariable [format ["bis_disabled_Door_%1",_door],1,true]; //Lock the door. -_locked = true; +private _locked = true; for "_i" from 1 to _doors do { - if ((_building getVariable [format ["bis_disabled_Door_%1",_i],0]) isEqualTo 0) exitWith {_locked = false}; + if (_building getVariable [format ["bis_disabled_Door_%1",_i],0] isEqualTo 0) exitWith { + _locked = false + }; }; if (_locked) then { diff --git a/Altis_Life.Altis/core/cop/fn_restrain.sqf b/Altis_Life.Altis/core/cop/fn_restrain.sqf index 655b8bc3a..2d67079b5 100644 --- a/Altis_Life.Altis/core/cop/fn_restrain.sqf +++ b/Altis_Life.Altis/core/cop/fn_restrain.sqf @@ -1,94 +1,101 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_restrain.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Restrains the client. -*/ -private ["_cop","_player","_vehicle"]; -_cop = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_player = player; -_vehicle = vehicle player; -if (isNull _cop) exitWith {}; - -//Monitor excessive restrainment -[] spawn { - private "_time"; - for "_i" from 0 to 1 step 0 do { - _time = time; - waitUntil {(time - _time) > (5 * 60)}; - - if (!(player getVariable ["restrained",false])) exitWith {}; - if (!([west,getPos player,30] call life_fnc_nearUnits) && (player getVariable ["restrained",false]) && isNull objectParent player) exitWith { - player setVariable ["restrained",false,true]; - player setVariable ["Escorting",false,true]; - player setVariable ["transporting",false,true]; - detach player; - titleText[localize "STR_Cop_ExcessiveRestrain","PLAIN"]; - }; - }; -}; - -titleText[format [localize "STR_Cop_Restrained",_cop getVariable ["realname",name _cop]],"PLAIN"]; - -life_disable_getIn = true; -life_disable_getOut = false; - -while {player getVariable "restrained"} do { - if (isNull objectParent player) then { - player playMove "AmovPercMstpSnonWnonDnon_Ease"; - }; - - _state = vehicle player; - waitUntil {animationState player != "AmovPercMstpSnonWnonDnon_Ease" || !(player getVariable "restrained") || vehicle player != _state}; - - if (!alive player) exitWith { - player setVariable ["restrained",false,true]; - player setVariable ["Escorting",false,true]; - player setVariable ["transporting",false,true]; - detach _player; - }; - - if (!alive _cop) then { - player setVariable ["Escorting",false,true]; - detach player; - }; - - if (!(isNull objectParent player) && life_disable_getIn) then { - player action["eject",vehicle player]; - }; - - if (!(isNull objectParent player) && !(vehicle player isEqualTo _vehicle)) then { - _vehicle = vehicle player; - }; - - if (isNull objectParent player && life_disable_getOut) then { - player moveInCargo _vehicle; - }; - - if (!(isNull objectParent player) && life_disable_getOut && (driver (vehicle player) isEqualTo player)) then { - player action["eject",vehicle player]; - player moveInCargo _vehicle; - }; - - if (!(isNull objectParent player) && life_disable_getOut) then { - _turrets = [[-1]] + allTurrets _vehicle; - { - if (_vehicle turretUnit [_x select 0] isEqualTo player) then { - player action["eject",vehicle player]; - sleep 1; - player moveInCargo _vehicle; - }; - }forEach _turrets; - }; -}; - -//disableUserInput false; - -if (alive player) then { - player switchMove "AmovPercMstpSlowWrflDnon_SaluteIn"; - player setVariable ["Escorting",false,true]; - player setVariable ["transporting",false,true]; - detach player; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_restrain.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Restrains the client. +*/ + +params [ + ["_cop", objNull, [objNull]] +]; + +private _vehicle = vehicle player; +if (isNull _cop) exitWith {}; + +//Monitor excessive restrainment +[] spawn { + private "_time"; + for "_i" from 0 to 1 step 0 do { + _time = time; + waitUntil {time - _time > (5 * 60)}; + + if !(player getVariable ["restrained",false]) exitWith {}; + if (!([west,getPos player,30] call life_fnc_nearUnits) && {player getVariable ["restrained",false]} && {isNull objectParent player}) exitWith { + player setVariable ["restrained",false,true]; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + detach player; + titleText[localize "STR_Cop_ExcessiveRestrain","PLAIN"]; + }; + }; +}; + +titleText[format [localize "STR_Cop_Restrained", _cop getVariable ["realname",name _cop]], "PLAIN"]; + +life_disable_getIn = true; +life_disable_getOut = false; + +while {player getVariable ["restrained", false]} do { + if (isNull objectParent player) then { + player playMove "AmovPercMstpSnonWnonDnon_Ease"; + }; + + private _state = vehicle player; + waitUntil { + animationState player != "AmovPercMstpSnonWnonDnon_Ease" || + {!(player getVariable ["restrained", false])} || + {vehicle player != _state} + }; + + if (!alive player) exitWith { + player setVariable ["restrained",false,true]; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + detach player; + }; + + if (!alive _cop) then { + player setVariable ["Escorting",false,true]; + detach player; + }; + + if (!(isNull objectParent player) && {life_disable_getIn}) then { + player action["eject",vehicle player]; + }; + + if (!(isNull objectParent player) && {!(vehicle player isEqualTo _vehicle)}) then { + _vehicle = vehicle player; + }; + + if (isNull objectParent player && {life_disable_getOut}) then { + player moveInCargo _vehicle; + }; + + if (!(isNull objectParent player) && {life_disable_getOut} && {driver (vehicle player) isEqualTo player}) then { + player action["eject",vehicle player]; + player moveInCargo _vehicle; + }; + + if (!(isNull objectParent player) && {life_disable_getOut}) then { + _turrets = [[-1]] + allTurrets _vehicle; + { + if (_vehicle turretUnit [_x select 0] isEqualTo player) then { + player action["eject",vehicle player]; + sleep 1; + player moveInCargo _vehicle; + }; + true + } count _turrets; + }; +}; + +//disableUserInput false; + +if (alive player) then { + player switchMove "AmovPercMstpSlowWrflDnon_SaluteIn"; + player setVariable ["Escorting",false,true]; + player setVariable ["transporting",false,true]; + detach player; +}; diff --git a/Altis_Life.Altis/core/cop/fn_searchClient.sqf b/Altis_Life.Altis/core/cop/fn_searchClient.sqf index afb51eae6..0ca0d898f 100644 --- a/Altis_Life.Altis/core/cop/fn_searchClient.sqf +++ b/Altis_Life.Altis/core/cop/fn_searchClient.sqf @@ -6,24 +6,26 @@ Description: Searches the player and he returns information back to the player. */ -private ["_inv","_val","_var","_robber"]; + params [ ["_cop",objNull,[objNull]] ]; + if (isNull _cop) exitWith {}; -_inv = []; -_robber = false; +private _inv = []; +private _robber = false; //Illegal items { - _var = configName(_x); - _val = ITEM_VALUE(_var); + private _var = configName(_x); + private _val = ITEM_VALUE(_var); if (_val > 0) then { _inv pushBack [_var,_val]; [false,_var,_val] call life_fnc_handleInv; }; -} forEach ("getNumber(_x >> 'illegal') isEqualTo 1" configClasses (missionConfigFile >> "VirtualItems")); + true +} count ("getNumber(_x >> 'illegal') isEqualTo 1" configClasses (missionConfigFile >> "VirtualItems")); if (!life_use_atm) then { CASH = 0; diff --git a/Altis_Life.Altis/core/cop/fn_seizeClient.sqf b/Altis_Life.Altis/core/cop/fn_seizeClient.sqf index e4d850b51..d7c3fe902 100644 --- a/Altis_Life.Altis/core/cop/fn_seizeClient.sqf +++ b/Altis_Life.Altis/core/cop/fn_seizeClient.sqf @@ -6,45 +6,56 @@ Description: Removes the players weapons client side */ -private ["_exempt","_uniform","_vest","_headgear"]; -_exempt = LIFE_SETTINGS(getArray,"seize_exempt"); -_headgear = LIFE_SETTINGS(getArray,"seize_headgear"); -_vest = LIFE_SETTINGS(getArray,"seize_vest"); -_uniform = LIFE_SETTINGS(getArray,"seize_uniform"); + +private _exempt = LIFE_SETTINGS(getArray,"seize_exempt"); +private _headgear = LIFE_SETTINGS(getArray,"seize_headgear"); +private _vest = LIFE_SETTINGS(getArray,"seize_vest"); +private _uniform = LIFE_SETTINGS(getArray,"seize_uniform"); { - if (!(_x in _exempt)) then { + if !(_x in _exempt) then { player removeWeapon _x; }; -} forEach weapons player; + true +} count weapons player; { - if (!(_x in _exempt)) then { + if !(_x in _exempt) then { player removeItemFromUniform _x; }; -} forEach uniformItems player; + true +} count uniformItems player; { - if (!(_x in _exempt)) then { + if !(_x in _exempt) then { player removeItemFromVest _x; }; -} forEach vestItems player; + true +} count vestItems player; { - if (!(_x in _exempt)) then { + if !(_x in _exempt) then { player removeItemFromBackpack _x; }; -} forEach backpackItems player; + true +} count backpackItems player; { - if (!(_x in _exempt)) then { - player removeMagazine _x; + if !(_x in _exempt) then { + player removeMagazine _x; }; -} forEach magazines player; - -if (uniform player in _uniform) then {removeUniform player;}; -if (vest player in _vest) then {removeVest player;}; -if (headgear player in _headgear) then {removeHeadgear player;}; + true +} count magazines player; + +if (uniform player in _uniform) then { + removeUniform player; +}; +if (vest player in _vest) then { + removeVest player; +}; +if (headgear player in _headgear) then { + removeHeadgear player; +}; [] call SOCK_fnc_updateRequest; titleText[localize "STR_NOTF_SeizeIllegals","PLAIN"]; diff --git a/Altis_Life.Altis/core/cop/fn_sirenLights.sqf b/Altis_Life.Altis/core/cop/fn_sirenLights.sqf index fbe4f4940..e6dae3721 100644 --- a/Altis_Life.Altis/core/cop/fn_sirenLights.sqf +++ b/Altis_Life.Altis/core/cop/fn_sirenLights.sqf @@ -4,26 +4,20 @@ Author: Bryan "Tonic" Boardwine Description: - Lets play a game! Can you guess what it does? I have faith in you, if you can't - then you have failed me and therefor I lose all faith in humanity.. No pressure. + Toggles siren lights */ + params [ ["_vehicle",objNull,[objNull]] ]; -if (isNull _vehicle) exitWith {}; //Bad entry! -if !(typeOf _vehicle 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"]) exitWith {}; //Last chance check to prevent something from defying humanity and creating a monster. -private _trueorfalse = _vehicle getVariable ["lights",false]; +if (isNull _vehicle) exitWith {}; +if !(typeOf _vehicle 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"]) exitWith {}; + +private _lightsOn = _vehicle getVariable ["lights",false]; -if (_trueorfalse) then { - _vehicle setVariable ["lights",false,true]; - if !(isNil {(_vehicle getVariable "lightsJIP")}) then { - private _jip = _vehicle getVariable "lightsJIP"; - _vehicle setVariable ["lightsJIP",nil,true]; - remoteExec ["",_jip]; //remove from JIP queue - }; -} else { - _vehicle setVariable ["lights",true,true]; - private _jip = [_vehicle,0.22] remoteExec ["life_fnc_copLights",RCLIENT,true]; - _vehicle setVariable ["lightsJIP",_jip,true]; +if (!_lightsOn) then { + [_vehicle,0.22] remoteExec ["life_fnc_copLights",RCLIENT]; }; + +_vehicle setVariable ["lights", !_lightsOn, true]; \ No newline at end of file diff --git a/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf b/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf index 16a811648..e797fbde2 100644 --- a/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf +++ b/Altis_Life.Altis/core/cop/fn_spikeStripEffect.sqf @@ -1,14 +1,16 @@ -/* - File: fn_spikeStripEffect.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Doesn't work without the server-side effect but shifted part of it clientside - so code can easily be changed. Ultimately it just pops the tires. -*/ -private ["_vehicle"]; -_vehicle = [_this,0,objNull,[objNull]] call BIS_fnc_param; -if (isNull _vehicle) exitWith {}; //Bad vehicle type - -_vehicle setHitPointDamage["HitLFWheel",1]; -_vehicle setHitPointDamage["HitRFWheel",1]; +/* + File: fn_spikeStripEffect.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pops the vehicles tyres - required due to the local arguments for setHitPointDamage being local. +*/ + +params [ + ["_vehicle",objNull,[objNull]] +]; + +if (isNull _vehicle) exitWith {}; + +_vehicle setHitPointDamage ["HitLFWheel",1]; +_vehicle setHitPointDamage ["HitRFWheel",1]; diff --git a/Altis_Life.Altis/core/cop/fn_ticketGive.sqf b/Altis_Life.Altis/core/cop/fn_ticketGive.sqf index 6c3c77f57..be8ef5193 100644 --- a/Altis_Life.Altis/core/cop/fn_ticketGive.sqf +++ b/Altis_Life.Altis/core/cop/fn_ticketGive.sqf @@ -1,19 +1,29 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketGive.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Gives a ticket to the targeted player. -*/ -if (isNil "life_ticket_unit") exitWith {hint localize "STR_Cop_TicketNil"}; -if (isNull life_ticket_unit) exitWith {hint localize "STR_Cop_TicketExist"}; - -private _val = ctrlText 2652; - -if (!([_val] call life_util_fnc_isNumber)) exitWith {hint localize "STR_Cop_TicketNum"}; -if ((parseNumber _val) > 200000) exitWith {hint localize "STR_Cop_TicketOver100"}; - -[0,"STR_Cop_TicketGive",true,[profileName,[(parseNumber _val)] call life_fnc_numberText,life_ticket_unit getVariable ["realname",name life_ticket_unit]]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; -[player,(parseNumber _val)] remoteExec ["life_fnc_ticketPrompt",life_ticket_unit]; -closeDialog 0; +#include "..\..\script_macros.hpp" +/* + File: fn_ticketGive.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Gives a ticket to the targeted player. +*/ + +if (isNil "life_ticket_unit") exitWith { + hint localize "STR_Cop_TicketNil" +}; + +if (isNull life_ticket_unit) exitWith { + hint localize "STR_Cop_TicketExist" +}; + +private _val = ctrlText 2652; +private _parsedVal = parseNumber _val; + +if !([_val] call life_util_fnc_isNumber) exitWith {hint localize "STR_Cop_TicketNum"}; + +if (_parsedVal > 200000) exitWith { + hint localize "STR_Cop_TicketOver100" +}; + +[0,"STR_Cop_TicketGive", true, [profileName, [_parsedVal] call life_fnc_numberText, life_ticket_unit getVariable ["realname", name life_ticket_unit]]] remoteExecCall ["life_fnc_broadcast", RCLIENT]; +[player, _parsedVal] remoteExecCall ["life_fnc_ticketPrompt", life_ticket_unit]; +closeDialog 0; diff --git a/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf b/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf index 714413c30..cbe500c49 100644 --- a/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf +++ b/Altis_Life.Altis/core/cop/fn_ticketPaid.sqf @@ -1,18 +1,20 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketPaid.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Verifies that the ticket was paid. -*/ -params [ - ["_value",5,[0]], - ["_unit",objNull,[objNull]], - ["_cop",objNull,[objNull]] -]; -if (isNull _unit || {!(_unit isEqualTo life_ticket_unit)}) exitWith {}; //NO -if (isNull _cop || {!(_cop isEqualTo player)}) exitWith {}; //Double NO - -BANK = BANK + _value; -[1] call SOCK_fnc_updatePartial; +#include "..\..\script_macros.hpp" +/* + File: fn_ticketPaid.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Verifies that the ticket was paid. +*/ + +params [ + ["_value", 5, [0]], + ["_unit", objNull, [objNull]] +]; + +if (isNull _unit || {!(_unit isEqualTo life_ticket_unit)}) exitWith {}; +private _name = _unit getVariable ["realname",name _unit]; + +hint format [localize "STR_Cop_Ticket_PaidNOTF_2",_name]; +BANK = BANK + _value; +[1] call SOCK_fnc_updatePartial; diff --git a/Altis_Life.Altis/core/cop/fn_ticketPay.sqf b/Altis_Life.Altis/core/cop/fn_ticketPay.sqf index 90e6fc963..4625a3b29 100644 --- a/Altis_Life.Altis/core/cop/fn_ticketPay.sqf +++ b/Altis_Life.Altis/core/cop/fn_ticketPay.sqf @@ -1,47 +1,47 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketPay.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Pays the ticket. -*/ -if (isNil "life_ticket_val" || isNil "life_ticket_cop") exitWith {}; -if (CASH < life_ticket_val) exitWith { - if (BANK < life_ticket_val) exitWith { - hint localize "STR_Cop_Ticket_NotEnough"; - [1,"STR_Cop_Ticket_NotEnoughNOTF",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; - closeDialog 0; - }; - - hint format [localize "STR_Cop_Ticket_Paid",[life_ticket_val] call life_fnc_numberText]; - BANK = BANK - life_ticket_val; - [1] call SOCK_fnc_updatePartial; - life_ticket_paid = true; - - [0,"STR_Cop_Ticket_PaidNOTF",true,[profileName,[life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; - [1,"STR_Cop_Ticket_PaidNOTF_2",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; - [life_ticket_val,player,life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid",life_ticket_cop]; - - if (life_HC_isActive) then { - [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; - } else { - [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; - }; - closeDialog 0; -}; - -CASH = CASH - life_ticket_val; -[0] call SOCK_fnc_updatePartial; -life_ticket_paid = true; - -if (life_HC_isActive) then { - [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; -} else { - [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; -}; - -[0,"STR_Cop_Ticket_PaidNOTF",true,[profileName,[life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",west]; -closeDialog 0; -[1,"STR_Cop_Ticket_PaidNOTF_2",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; -[life_ticket_val,player,life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid",life_ticket_cop]; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_ticketPay.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Pays the ticket. +*/ + +if (isNil "life_ticket_val" || {isNil "life_ticket_cop"}) exitWith {}; +if (CASH < life_ticket_val) exitWith { + if (BANK < life_ticket_val) exitWith { + hint localize "STR_Cop_Ticket_NotEnough"; + [1,"STR_Cop_Ticket_NotEnoughNOTF", true, [profileName]] remoteExecCall ["life_fnc_broadcast", life_ticket_cop]; + closeDialog 0; + }; + + hint format [localize "STR_Cop_Ticket_Paid", [life_ticket_val] call life_fnc_numberText]; + BANK = BANK - life_ticket_val; + [1] call SOCK_fnc_updatePartial; + life_ticket_paid = true; + + [0, "STR_Cop_Ticket_PaidNOTF", true, [profileName, [life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast", west]; + [1, "STR_Cop_Ticket_PaidNOTF_2", true, [profileName]] remoteExecCall ["life_fnc_broadcast", life_ticket_cop]; + [life_ticket_val, player, life_ticket_cop] remoteExecCall ["life_fnc_ticketPaid", life_ticket_cop]; + + if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove",HC_Life]; + } else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove",RSERV]; + }; + closeDialog 0; +}; + +CASH = CASH - life_ticket_val; +[0] call SOCK_fnc_updatePartial; +life_ticket_paid = true; + +if (life_HC_isActive) then { + [getPlayerUID player] remoteExecCall ["HC_fnc_wantedRemove", HC_Life]; +} else { + [getPlayerUID player] remoteExecCall ["life_fnc_wantedRemove", RSERV]; +}; + +[0, "STR_Cop_Ticket_PaidNOTF", true, [profileName, [life_ticket_val] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast", west]; +closeDialog 0; +[life_ticket_val, player] remoteExecCall ["life_fnc_ticketPaid", life_ticket_cop]; diff --git a/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf b/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf index e976f51b7..1a9bff783 100644 --- a/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf +++ b/Altis_Life.Altis/core/cop/fn_ticketPrompt.sqf @@ -1,31 +1,33 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_ticketPrompt - Author: Bryan "Tonic" Boardwine - - Description: - Prompts the player that he is being ticketed. -*/ -private ["_cop","_val"]; -if (!isNull (findDisplay 2600)) exitWith {}; //Already at the ticket menu, block for abuse? -_cop = _this select 0; -if (isNull _cop) exitWith {}; -_val = _this select 1; - -createDialog "life_ticket_pay"; -disableSerialization; -waitUntil {!isNull (findDisplay 2600)}; - -life_ticket_paid = false; -life_ticket_val = _val; -life_ticket_cop = _cop; -CONTROL(2600,2601) ctrlSetStructuredText parseText format ["" +(localize "STR_Cop_Ticket_GUI_Given"),_cop getVariable ["realname",name _cop],_val]; - -[] spawn { - disableSerialization; - waitUntil {life_ticket_paid || (isNull (findDisplay 2600))}; - if (isNull (findDisplay 2600) && !life_ticket_paid) then { - [0,"STR_Cop_Ticket_Refuse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",west]; - [1,"STR_Cop_Ticket_Refuse",true,[profileName]] remoteExecCall ["life_fnc_broadcast",life_ticket_cop]; - }; -}; \ No newline at end of file +#include "..\..\script_macros.hpp" +/* + File: fn_ticketPrompt + Author: Bryan "Tonic" Boardwine + + Description: + Prompts the player that he is being ticketed. +*/ + +if (!isNull (findDisplay 2600)) exitWith {}; + +params [ + ["_cop", objNull, [objNull]], + ["_val", -1, [0]] +]; + +if (isNull _cop || {_val isEqualTo -1}) exitWith {}; + +createDialog "life_ticket_pay"; + +life_ticket_paid = false; +life_ticket_val = _val; +life_ticket_cop = _cop; + +CONTROL(2600,2601) ctrlSetStructuredText parseText format ["" + (localize "STR_Cop_Ticket_GUI_Given"), _cop getVariable ["realname",name _cop], _val]; + +[] spawn { + waitUntil {life_ticket_paid || {isNull (findDisplay 2600)}}; + if (isNull (findDisplay 2600) && {!life_ticket_paid}) then { + [0, "STR_Cop_Ticket_Refuse", true, [profileName]] remoteExecCall ["life_fnc_broadcast", west]; + [1, "STR_Cop_Ticket_Refuse", true, [profileName]] remoteExecCall ["life_fnc_broadcast", life_ticket_cop]; + }; +}; diff --git a/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf b/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf index aaf4b08d5..a27e5b86f 100644 --- a/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf +++ b/Altis_Life.Altis/core/cop/fn_vehInvSearch.sqf @@ -1,41 +1,43 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_vehInvSearch.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Searches the vehicle for illegal items. -*/ -private ["_vehicle","_vehicleInfo","_value","_list"]; -_vehicle = cursorObject; -_list = ["Air","Ship","LandVehicle"]; -if (isNull _vehicle || {!(KINDOF_ARRAY(_vehicle,_list))}) exitWith {}; - -_vehicleInfo = _vehicle getVariable ["Trunk",[]]; -if (count _vehicleInfo isEqualTo 0) exitWith {hint localize "STR_Cop_VehEmpty"}; - -_value = 0; -_illegalValue = 0; -{ - _var = _x select 0; - _val = _x select 1; - _isIllegalItem = M_CONFIG(getNumber,"VirtualItems",_var,"illegal"); - if (_isIllegalItem isEqualTo 1 ) then{ - _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_var,"sellPrice"); - if (!isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { - _illegalItemProcessed = M_CONFIG(getText,"VirtualItems",_var,"processedItem"); - _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_illegalItemProcessed,"sellPrice"); - }; - - _illegalValue = _illegalValue + (round(_val * _illegalPrice / 2)); - }; -} forEach (_vehicleInfo select 0); -_value = _illegalValue; -if (_value > 0) then { - [0,"STR_NOTF_VehContraband",true,[[_value] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; - BANK = BANK + _value; - [1] call SOCK_fnc_updatePartial; - _vehicle setVariable ["Trunk",[[],0],true]; -} else { - hint localize "STR_Cop_NoIllegalVeh"; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_vehInvSearch.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Searches the vehicle for illegal items. +*/ + +private _vehicle = cursorObject; +private _typeList = ["Air","Ship","LandVehicle"]; + +if (isNull _vehicle || {!(KINDOF_ARRAY(_vehicle, _typeList))}) exitWith {}; + +private _vehicleInfo = _vehicle getVariable ["Trunk",[]]; +if (_vehicleInfo isEqualTo []) exitWith {hint localize "STR_Cop_VehEmpty"}; +_vehicleInfo params ["_items"]; + +private _value = 0; +private _illegalValue = 0; +{ + _x params ["_var", "_val"]; + private _isIllegalItem = M_CONFIG(getNumber,"VirtualItems",_var,"illegal"); + if (_isIllegalItem isEqualTo 1) then { + private _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_var,"sellPrice"); + if !(isNull (missionConfigFile >> "VirtualItems" >> _var >> "processedItem")) then { + private _illegalItemProcessed = M_CONFIG(getText,"VirtualItems",_var,"processedItem"); + _illegalPrice = M_CONFIG(getNumber,"VirtualItems",_illegalItemProcessed,"sellPrice"); + }; + + _illegalValue = _illegalValue + round(_val * _illegalPrice / 2); + }; + true +} count _items; + +if (_illegalValue > 0) then { + [0, "STR_NOTF_VehContraband", true, [[_illegalValue] call life_fnc_numberText]] remoteExecCall ["life_fnc_broadcast", RCLIENT]; + BANK = BANK + _illegalValue; + [1] call SOCK_fnc_updatePartial; + _vehicle setVariable ["Trunk", [[],0], true]; +} else { + hint localize "STR_Cop_NoIllegalVeh"; +}; diff --git a/Altis_Life.Altis/core/cop/fn_wantedGrab.sqf b/Altis_Life.Altis/core/cop/fn_wantedGrab.sqf index deaa3587c..f8c1a7841 100644 --- a/Altis_Life.Altis/core/cop/fn_wantedGrab.sqf +++ b/Altis_Life.Altis/core/cop/fn_wantedGrab.sqf @@ -6,16 +6,18 @@ Description: Prepare the array to query the crimes. */ -private ["_display","_tab","_criminal"]; + disableSerialization; -_display = findDisplay 2400; -_tab = _display displayCtrl 2402; -_criminal = lbData[2401,(lbCurSel 2401)]; + +private _display = findDisplay 2400; +private _tab = _display displayCtrl 2402; +private _criminal = lbData[2401,(lbCurSel 2401)]; _criminal = call compile format ["%1", _criminal]; + if (isNil "_criminal") exitWith {}; if (life_HC_isActive) then { - [player,_criminal] remoteExec ["HC_fnc_wantedCrimes",HC_Life]; + [player,_criminal] remoteExec ["HC_fnc_wantedCrimes", HC_Life]; } else { - [player,_criminal] remoteExec ["life_fnc_wantedCrimes",RSERV]; + [player,_criminal] remoteExec ["life_fnc_wantedCrimes", RSERV]; }; diff --git a/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf b/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf index a1c0c6b0c..a5b528656 100644 --- a/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf +++ b/Altis_Life.Altis/core/functions/fn_actionKeyHandler.sqf @@ -1,124 +1,114 @@ -#include "..\..\script_macros.hpp" -/* - File: fn_actionKeyHandler.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Master action key handler, handles requests for picking up various items and - interacting with other players (Cops = Cop Menu for unrestrain,escort,stop escort, arrest (if near cop hq), etc). -*/ -private ["_curObject","_isWater","_CrateModelNames","_crate","_fish","_animal","_whatIsIt","_handle"]; -_curObject = cursorObject; -if (life_action_inUse) exitWith {}; //Action is in use, exit to prevent spamming. -if (life_interrupted) exitWith {life_interrupted = false;}; -_isWater = surfaceIsWater (visiblePositionASL player); - -if (playerSide isEqualTo west && {player getVariable ["isEscorting",false]}) exitWith { - [] call life_fnc_copInteractionMenu; -}; - -if (LIFE_SETTINGS(getNumber,"global_ATM") isEqualTo 1) then{ - //Check if the player is near an ATM. - if ((call life_fnc_nearATM) && {!dialog}) exitWith { - [] call life_fnc_atmMenu; - }; -}; - -if (isNull _curObject) exitWith { - if (_isWater) then { - _fish = (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_fish")),3]) select 0; - if (!isNil "_fish") then { - if (!alive _fish) then { - [_fish] call life_fnc_catchFish; - }; - }; - } else { - _animal = (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_hunting")),3]) select 0; - if (!isNil "_animal") then { - if (!alive _animal) then { - [_animal] call life_fnc_gutAnimal; - }; - } else { - private "_handle"; - if (playerSide isEqualTo civilian && !life_action_gathering) then { - _whatIsIt = [] call life_fnc_whereAmI; - if (life_action_gathering) exitWith {}; //Action is in use, exit to prevent spamming. - switch (_whatIsIt) do { - case "mine" : { _handle = [] spawn life_fnc_mine }; - default { _handle = [] spawn life_fnc_gather }; - }; - life_action_gathering = true; - waitUntil {scriptDone _handle}; - life_action_gathering = false; - }; - }; - }; -}; - -if ((_curObject isKindOf "B_supplyCrate_F" || _curObject isKindOf "Box_IND_Grenades_F") && {player distance _curObject < 3} ) exitWith { - if (alive _curObject) then { - [_curObject] call life_fnc_containerMenu; - }; -}; - -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; - -if (_curObject isKindOf "House_F" && {player distance _curObject < 12} || ((nearestObject [_pos,"Land_Dome_Big_F"]) isEqualTo _curObject || (nearestObject [_pos,_vaultHouse]) isEqualTo _curObject)) exitWith { - [_curObject] call life_fnc_houseMenu; -}; - -if (dialog) exitWith {}; //Don't bother when a dialog is open. -if !(isNull objectParent player) exitWith {}; //He's in a vehicle, cancel! -life_action_inUse = true; - -//Temp fail safe. -[] spawn { - sleep 60; - life_action_inUse = false; -}; - -//Check if it's a dead body. -if (_curObject isKindOf "CAManBase" && {!alive _curObject}) exitWith { - //Hotfix code by ins0 - if ((playerSide isEqualTo west && {(LIFE_SETTINGS(getNumber,"revive_cops") isEqualTo 1)}) || {(playerSide isEqualTo civilian && {(LIFE_SETTINGS(getNumber,"revive_civ") isEqualTo 1)})} || {(playerSide isEqualTo east && {(LIFE_SETTINGS(getNumber,"revive_east") isEqualTo 1)})} || {playerSide isEqualTo independent}) then { - if (life_inv_defibrillator > 0) then { - [_curObject] call life_fnc_revivePlayer; - }; - }; -}; - -//If target is a player then check if we can use the cop menu. -if (isPlayer _curObject && _curObject isKindOf "CAManBase") then { - if ((_curObject getVariable ["restrained",false]) && !dialog && playerSide isEqualTo west) then { - [_curObject] call life_fnc_copInteractionMenu; - }; -} else { - //OK, it wasn't a player so what is it? - private ["_isVehicle","_miscItems","_money","_list"]; - - _list = ["landVehicle","Ship","Air"]; - _isVehicle = if (KINDOF_ARRAY(_curObject,_list)) then {true} else {false}; - _miscItems = ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Suitcase_F"]; - - //It's a vehicle! open the vehicle interaction key! - if (_isVehicle) then { - if (!dialog) then { - if (player distance _curObject < ((boundingBox _curObject select 1) select 0)+2 && (!(player getVariable ["restrained",false])) && (!(player getVariable ["playerSurrender",false])) && !life_isknocked && !life_istazed) then { - [_curObject] call life_fnc_vInteractionMenu; - }; - }; - } else { - //OK, it wasn't a vehicle so let's see what else it could be? - if ((typeOf _curObject) in _miscItems) then { - [_curObject,player,false] remoteExecCall ["TON_fnc_pickupAction",RSERV]; - } else { - //It wasn't a misc item so is it money? - if ((typeOf _curObject) isEqualTo "Land_Money_F" && {!(_curObject getVariable ["inUse",false])}) then { - [_curObject,player,true] remoteExecCall ["TON_fnc_pickupAction",RSERV]; - }; - }; - }; -}; +#include "..\..\script_macros.hpp" +/* + File: fn_actionKeyHandler.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Master action key handler, handles requests for picking up various items and + interacting with other players (Cops = Cop Menu for unrestrain,escort,stop escort, arrest (if near cop hq), etc). +*/ +private _curObject = cursorObject; +if (life_action_inUse) exitWith {}; //Action is in use, exit to prevent spamming. +if (life_interrupted) exitWith {life_interrupted = false;}; +private _isWater = surfaceIsWater (visiblePositionASL player); + +if (playerSide isEqualTo west && {player getVariable ["isEscorting",false]}) exitWith { + [] call life_fnc_copInteractionMenu; +}; + +if (LIFE_SETTINGS(getNumber,"global_ATM") isEqualTo 1) then{ + //Check if the player is near an ATM. + if ((call life_fnc_nearATM) && {!dialog}) exitWith { + [] call life_fnc_atmMenu; + }; +}; + +if (isNull _curObject) exitWith { + if (_isWater) then { + (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_fish")),3]) params [["_fish", objNull]]; + if !(alive _fish) then { //alive also checks for objNull + [_fish] call life_fnc_catchFish; + }; + } else { + (nearestObjects[player,(LIFE_SETTINGS(getArray,"animaltypes_hunting")),3]) params [["_animal", objNull]]; + if !(isNull _animal) then { + if !(alive _animal) then { + [_animal] call life_fnc_gutAnimal; + }; + } else { + if (playerSide isEqualTo civilian && !life_action_inUse) then { + private _whatIsIt = [] call life_fnc_whereAmI; + switch _whatIsIt do { + case "mine": {[] spawn life_fnc_mine}; + default {[] spawn life_fnc_gather}; + }; + }; + }; + }; +}; + +if ((_curObject isKindOf "B_supplyCrate_F" || _curObject isKindOf "Box_IND_Grenades_F") && {player distance _curObject < 3}) exitWith { + if (alive _curObject) then { + [_curObject] call life_fnc_containerMenu; + }; +}; + +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; + +if (_curObject isKindOf "House_F" && {player distance _curObject < 12} || ((nearestObject [_pos,"Land_Dome_Big_F"]) isEqualTo _curObject || (nearestObject [_pos,_vaultHouse]) isEqualTo _curObject)) exitWith { + [_curObject] call life_fnc_houseMenu; +}; + +if (dialog) exitWith {}; //Don't bother when a dialog is open. +if !(isNull objectParent player) exitWith {}; //He's in a vehicle, cancel! +life_action_inUse = true; + +//Temp fail safe. +[] spawn { + sleep 60; + life_action_inUse = false; +}; + +//Check if it's a dead body. +if (_curObject isKindOf "CAManBase" && {!alive _curObject}) exitWith { + //Hotfix code by ins0 + if ((playerSide isEqualTo west && {(LIFE_SETTINGS(getNumber,"revive_cops") isEqualTo 1)}) || {(playerSide isEqualTo civilian && {(LIFE_SETTINGS(getNumber,"revive_civ") isEqualTo 1)})} || {(playerSide isEqualTo east && {(LIFE_SETTINGS(getNumber,"revive_east") isEqualTo 1)})} || {playerSide isEqualTo independent}) then { + if (life_inv_defibrillator > 0) then { + [_curObject] call life_fnc_revivePlayer; + }; + }; +}; + +//If target is a player then check if we can use the cop menu. +if (isPlayer _curObject && _curObject isKindOf "CAManBase") then { + if ((_curObject getVariable ["restrained",false]) && !dialog && playerSide isEqualTo west) then { + [_curObject] call life_fnc_copInteractionMenu; + }; +//OK, it wasn't a player so what is it? +} else { + private _list = ["landVehicle","Ship","Air"]; + private _isVehicle = if (KINDOF_ARRAY(_curObject,_list)) then {true} else {false}; + private _miscItems = ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Suitcase_F"]; + + //It's a vehicle! open the vehicle interaction key! + if (_isVehicle) then { + if (!dialog) then { + if (player distance _curObject < ((boundingBox _curObject select 1) select 0)+2 && (!(player getVariable ["restrained",false])) && (!(player getVariable ["playerSurrender",false])) && !life_isknocked && !life_istazed) then { + [_curObject] call life_fnc_vInteractionMenu; + }; + }; + } else { + //OK, it wasn't a vehicle so let's see what else it could be? + if ((typeOf _curObject) in _miscItems) then { + [_curObject,player,false] remoteExecCall ["TON_fnc_pickupAction",RSERV]; + } else { + //It wasn't a misc item so is it money? + if ((typeOf _curObject) isEqualTo "Land_Money_F" && {!(_curObject getVariable ["inUse",false])}) then { + [_curObject,player,true] remoteExecCall ["TON_fnc_pickupAction",RSERV]; + }; + }; + }; +}; diff --git a/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf b/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf index a34d06814..dacb3058b 100644 --- a/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf +++ b/Altis_Life.Altis/core/functions/fn_stripDownPlayer.sqf @@ -4,8 +4,14 @@ Description: Strip the player down */ + removeAllWeapons player; -{player removeMagazine _x;} forEach (magazines player); + +{ + player removeMagazine _x; + true +} count (magazines player); + removeUniform player; removeVest player; removeBackpack player; @@ -15,8 +21,9 @@ removeHeadGear player; { player unassignItem _x; player removeItem _x; -} forEach (assignedItems player); + true +} count (assignedItems player); -if (hmd player != "") then { +if !(hmd player isEqualTo "") then { player unlinkItem (hmd player); }; \ No newline at end of file diff --git a/Altis_Life.Altis/core/functions/network/fn_corpse.sqf b/Altis_Life.Altis/core/functions/network/fn_corpse.sqf index d1a0ede5c..b4cc626bb 100644 --- a/Altis_Life.Altis/core/functions/network/fn_corpse.sqf +++ b/Altis_Life.Altis/core/functions/network/fn_corpse.sqf @@ -5,9 +5,11 @@ Description: Hides dead bodies. */ -private ["_corpse"]; -_corpse = [_this,0,objNull,[objNull]] call BIS_fnc_param; + +params [ + ["_corpse", objNull, [objNull]] +]; + if (isNull _corpse) exitWith {}; -if (alive _corpse) exitWith {}; //Stop script kiddies. -deleteVehicle _corpse; \ No newline at end of file +deleteVehicle _corpse; diff --git a/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf b/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf index db1815771..7252f29c2 100644 --- a/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf +++ b/Altis_Life.Altis/core/functions/network/fn_jumpFnc.sqf @@ -1,36 +1,38 @@ -/* - File: fn_jumpFnc.sqf - Author: Bryan "Tonic" Boardwine - - Description: - Makes the target jump. -*/ -private ["_unit","_vel","_dir","_v1","_v2","_anim","_oldpos"]; -_unit = [_this,0,objNull,[objNull]] call BIS_fnc_param; -_oldpos = getPosATL _unit; - -if (isNull _unit) exitWith {}; //Bad data - -if (animationState _unit == "AovrPercMrunSrasWrflDf") exitWith {}; - -if (local _unit) then { - _v1 = 3.82; - _v2 = .4; - _dir = direction player; - _vel = velocity _unit; - _unit setVelocity[(_vel select 0)+(sin _dir*_v2),(_vel select 1)+(cos _dir*_v2),(_vel select 2)+_v1]; -}; - -_anim = animationState _unit; -_unit switchMove "AovrPercMrunSrasWrflDf"; - -if (local _unit) then { - waitUntil { - if ((getPos _unit select 2) > 4) then { - _unit setposATL _oldpos; - _unit setVelocity [0, 0, 0]; - }; - animationState _unit != "AovrPercMrunSrasWrflDf" - }; - _unit switchMove _anim; -}; +/* + File: fn_jumpFnc.sqf + Author: Bryan "Tonic" Boardwine + + Description: + Makes the target jump. +*/ + +params [ + ["_unit", objNull, [objNull]] +]; + +if (isNull _unit) exitWith {}; +if (animationState _unit == "AovrPercMrunSrasWrflDf") exitWith {}; + +private _oldPos = getPosATL _unit; + +if (local _unit) then { + private _v1 = 3.82; + private _v2 = .4; + private _dir = direction _unit; + (velocity _unit) params ["_xVel","_yVel","_zVel"]; + _unit setVelocity [_xVel + (sin _dir*_v2), _yVel + (cos _dir*_v2), _zVel + _v1]; +}; + +private _anim = animationState _unit; +_unit switchMove "AovrPercMrunSrasWrflDf"; + +if (local _unit) then { + waitUntil { + if ((getPos _unit select 2) > 4) then { + _unit setPosATL _oldPos; + _unit setVelocity [0, 0, 0]; + }; + animationState _unit != "AovrPercMrunSrasWrflDf" + }; + _unit switchMove _anim; +}; diff --git a/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf b/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf index 09bbbdc4f..5aa2c68f9 100644 --- a/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf +++ b/Altis_Life.Altis/core/functions/network/fn_setFuel.sqf @@ -4,4 +4,12 @@ Description: Used to set fuel levels in vehicles. (Ex. Service Chopper) */ -(_this select 0) setFuel (_this select 1); \ No newline at end of file + +params [ + ["_object", objNull, [objNull]], + ["_value", 1, [0]] +]; + +if (isNull _object) exitWith {}; + +_object setFuel _value; diff --git a/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf b/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf index 49bc84dae..6d4bafbd1 100644 --- a/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf +++ b/Altis_Life.Altis/core/functions/network/fn_soundDevice.sqf @@ -5,12 +5,16 @@ Description: Plays a device sound for mining (Mainly Tempest device). */ -if (isNull _this) exitWith {}; -if (player distance _this > 2500) exitWith {}; //Don't run it... They're to far out.. +params [ + ["_vehicle", objNull, [objNull]] +]; + +if (isNull _vehicle) exitWith {}; +if (player distance _vehicle > 2500) exitWith {}; for "_i" from 0 to 1 step 0 do { - if (isNull _this || !alive _this) exitWith {}; - if (isNil {_this getVariable "mining"}) exitWith {}; - _this say3D ["Device_disassembled_loop",150,1]; + if !(alive _vehicle) exitWith {}; + if (isNil {_vehicle getVariable "mining"}) exitWith {}; + _vehicle say3D ["Device_disassembled_loop",150,1]; sleep 28.6; }; diff --git a/Altis_Life.Altis/stringtable.xml b/Altis_Life.Altis/stringtable.xml index f92de1882..ece51c246 100644 --- a/Altis_Life.Altis/stringtable.xml +++ b/Altis_Life.Altis/stringtable.xml @@ -1,13478 +1,13478 @@ - - - - - Setting up client, please wait... - - Configurando cliente. Por favor espere... - - Einrichten des Clients, bitte warten... - Caricamento dati, attendi... - Configuration du client. Patientez s'il vous plait... - Configurando o cliente. Por favor, aguarde... - - 配置客户端,请稍等... - - - Waiting for the server to be ready... - - Esperando a que el servidor esté listo... - - Warten, bis der Server bereit ist... - Caricamento Server, attendi... - En attente du chargement du serveur... - Esperando o servidor estar pronto... - - 等待服务器准备就绪... - - - extDB failed to load, please contact an administrator. - - extDB no se pudo cargar, por favor contacte a un administrador. - - extDB konnte nicht geladen werden, wenden Sie sich bitte an einen Administrator. - C'è stato un'errore con extDB, perfavore contatta un amministratore. - extDB ne s'est pas lancé correctement. Veuillez contacter un administrateur. - O extDB falhou ao carregar, por favor, contacte um administrador. - - 数据加载失败,请联系管理员。 - - - Finishing client setup procedure... - - Finalizando configuración del cliente... - - Finalisation de la procédure de configuration du client... - Fertigstellen der Client-Einrichtungs-Prozedur... - Completando procedura d'inizializzazione - Terminando o processo de configuração do cliente... - - 完成客户端设置程序... - - - - - Bruce's Outback Outfits - Bruceovy Outback Oblečení - Vêtements de Bruce - Tienda de Ropa - - Loja de Roupas - Sklep odzieżowy - Emporio di Bruce - Bruce's Outback Outfits - 服装商店 - - - Altis Police Department Shop - Altis policejní oddělení Shop - Vêtements policiers - Tienda del Departamento de Policía - - Loja de Roupas Policiais - Sklep Policyjny - Dipartimento della Polizia di Altis - Altis Polizei Department Geschäft - 警局商店 - - - Mohammed's Jihadi Shop - Mohamedův džihád Shop - Vêtements rebelle - Tienda Jihadi de Mohamed - Negozio della Jihad di Mohammed - - Loja de Roupas Rebeldes - Sklep samobójców AKBAR - Mohammed's Ausrüstungen - 叛军商店 - - - Steve's Diving Shop - Steve je potápění obchod - Vêtements de plongée de Steve - Tienda de Buceo - Negozio Sub di Steve - - Steve's Taucherausrüstung - Loja de equipamentos para Mergulho - Sklep dla nurków - 潜水商店 - - - Billy Joe's Clothing - Billy Joe oblečení - Tienda de Ropa de Billy Joe - - Billy Joe's Bekleidung - Emporio di Billy - Vêtements de tir - Loja de Roupa do Billy Joe - Billy Joe Odzież - 服装商店 - - - Billy Joe's Firearms - Billy Joe Střelné zbraně - Tienda de Armas de Billy Joe - - Billy Joe's Schusswaffen - Armeria di Billy Joe - Armurerie de Billy Joe - Loja de Armas do Billy Joe - Broń palna Billy Joe - 武器商店 - - - Bobby's Kart-Racing Outfits - Billy Joe Střelné zbraně - Vêtements de kart - Tienda de Trajes de Carreras - Vestiario da Pilota - - Bobby's Gokart Rennbekleidung - Loja de equipamentos para Kart - Sklep Kartingowy - 卡丁车赛车服 - - - Altis Market - Altis Market - Mercado de Altis - - Altis Markt - Mercato - Marché d'Altis - Mercado - Market Altis - 市场 - - - Rebel Market - Rebel Market - Mercado Rebelde - - Rebellen Markt - Mercato Ribelle - Marché Rebelle - Mercado Rebelde - Market Rebeliantów - 叛军市场 - - - Gang Market - gang Market - Mercado Pandillero - - Gang Markt - Mercato Gang - Marché de Gang - Mercado da Gangue - Market Gangu - 帮派市场 - - - Gang Clothing - gang Oblečení - Ropa Pandillera - - Gang Kleidung - Gang Abbigliamento - Vêtements de Gang - Roupa Gangue - Gang Odzież - 帮派服装 - - - Wong's Food Cart - Wongova Food košík - Kiosko de Wong - - Wong's Spezialitäten - Alimentari - Restaurant de Wong - Praça de Alimentação - Przysmaki Wonga - 食品商 - - - Gyro's Coffee - gyros Coffee - Cafetería de Gyro - - Gyro's Café - Caffè - Café de Gyro - Café do Gyro - Kawiarnia - 咖啡店 - - - Tonic's Narcotics - Tonic je narkotika - Narcotraficante - - Drogendealer - Spacciatore - Dealeur de Drogue - Traficante - Sprzedawca 'Trawy' - 非法药品贸易商 - - - Oil Trader - olej Trader - Comerciante de Petroleo - - Ölhändler - Vendita Petrolio - Acheteur de Pétrole - Comprador de Petróleo - Skup Ropy - 石油贸易商 - - - Local Fish Market - Místní Fish Market - Mercado Local del Pescado - - Fischmarkt - Pescivendolo - Marché de Poissons - Mercado de Peixes - Sklep Rybny - 海产品市场 - - - Glass Trader - sklo Trader - Comerciante de Vidrio - - Glashändler - Vendita Vetro - Acheteur de Verre - Comprador de Vidro - Skup Szkła - 玻璃贸易商 - - - Altis Industrial Trader - Altis Industrial Trader - Comerciante Industrial - - Altis Industriehandel - Vendita materiali industriali - Acheteur de minerais - Comprador de Material Indústrial - Skup materiałów przemysłowych - 铁/铜贸易 - - - APD Item Shop - APD Item Shop - Equipamiento Policial - - APD Ausrüstung - Negozio Polizia - Equipement policier - Equipamentos da Polícia - Zbrojownia Policji - 警察物品店 - - - Juan's Cement Laying - Juanovo Cement Pokládka - Fabrica de Cemento de Juan - - Juan's Zementleger - Vendita Cemento - Acheteur de Ciment - Comprador de Cimento - Wytwórnia cementu - 水泥贸易商 - - - Cash 4 Gold - Peněžní 4 Gold - Comprador de Oro - - Goldhändler - Vendita Oro - Acheteur d'Or - Comprador de Ouro - Skup złota - 黄金贸易商 - - - Diamond Dealer - Diamond Dealer - Comerciante de Diamantes - - Juwelier - Gioielleria - Acheteur de Diamant - Comprador de Diamante - Skup Diamentów - 钻石贸易商 - - - Salt Trader - sůl Trader - Comerciante de Sal - - Salzhändler - Vendita Sale - Acheteur de Sel - Comprador de Sal - Skup soli - 食盐贸易商 - - - Fuel Station Coffee - Palivo Coffee Station - Café de la Station service - Cafeteria de Gasolinera - Stazione di Servizio - - Tankstellen Café - Loja de Conveniência - Caffe OLLEN - 加油站咖啡店 - - - - - Close - Zavřít - Cerrar - - Schließen - Fermer - Chiudi - Fechar - Zamknij - 关闭 - - - Sell - Prodat - Vender - - Verkaufen - Vendre - Vendi - Vender - Sprzedaj - 出售 - - - Buy - Koupit - Comprar - - Kaufen - Acheter - Compra - Comprar - Kup - 购买 - - - Magazines - časopisy - Chargeurs - Cargadores - Caricatori - Magazyny - - Munições - Magazine - 弹药 - - - Accessories - Příslušenství - Accessoires - Accesorios - Accessori - Akcesoria - - Acessórios - Zubehör - 附件 - - - Weapons - Zbraně - Armes - Armas - Armi - Broń - - Armas - Bewaffnung - 武器 - - - Give - Dát - Dar - - Geben - Donner - Dai - Dar - Daj - 给予 - - - Use - Použití - Usar - - Benutzen - Utiliser - Usa - Usar - Użyj - 使用 - - - Remove - Odstranit - Remover - - Entfernen - Supprimer - Rimuovi - Remover - Usuń - 删除 - - - Settings - Nastavení - Configuración - - Einstellungen - Paramètres - Impostazioni - Configurar - Opcje - 设置 - - - Rent - Nájemné - Rentar - - Mieten - Louer - Affitta - Alugar - Wynajmij - 租赁 - - - Retrieve - získat - Recuperar - - Ausparken - Récupérer - Ritira - Recuperar - Odzyskaj - 取回 - - - You did not select anything. - Nevybrali jste nic. - No seleccionastes algo. - - Du hast nichts ausgewählt. - Vous n'avez rien sélectionné. - Non hai selezionato nulla. - Você não selecionou nada. - Niczego nie zaznaczyłeś. - 你没有选择任何东西。 - - - Yes - Ano - Si - - Ja - Oui - Si - Sim - Tak - - - - No - Ne - No - - Nein - Non - No - Não - Nie - - - - Cancel - Zrušit - Cancelar - - Abbrechen - Annuler - Annulla - Cancelar - Anuluj - 取消 - - - - - Admin Menu - Nabídka admin - Menu de Admin - - Admin Menü - Menu Admin - Menu Admin - Menu Admin - Admin Menu - 管理菜单 - - - Put the amount you want to compensate: - Vložte částku, kterou chcete kompenzovat: - Entrez le montant à rembourser - Pon la cantidad que quieres compensar: - Inserire l'importo da rimborsare: - - Trage den Wert für die Entschädigung ein: - Coloque a quantidade que você quer compensar: - Wprowadź wartość rekompensaty - 输入赔偿金额: - - - Get ID - Získat ID - Ver ID - - ID abfragen - Obtenir ID - Vedi ID - Obter ID - ID gracza - 获取 ID - - - Spectate - spectate - Observar - Osserva - - Zuschauen - Regarder - Observar - Obserwuj - 观看 - - - Teleport - Teleport - Teleport - Teleport - - Teleport - Téléporter - Teleportar - Teleport - 传送 - - - TP Here - TP Zde - TP Aquí - TP Qui - - TP Hier - TP Ici - TP Aqui - Do Mnie - 传送到这儿 - - - You cannot teleport the player here because they are inside of a vehicle. - Nelze teleportovat přehrávač zde proto, že jsou uvnitř vozidla. - Vous ne pouvez pas TP le joueur ici, car il est actuellement dans un véhicule. - No puedes teletransportar a este jugador aquí, porque está dentro de un vehículo. - Il giocatore non può essere teletrasportato perché in un veicolo. - Nie można teleportować gracza tutaj, ponieważ są one wewnątrz pojazdu. - Você não pode se teletransportar o jogador aqui, porque ele esta dentro de um veículo. - Вы не можете телепортировать игрока здесь, потому что они находятся внутри автомобиля. - Du kannst den Spieler nicht hierher teleportieren, weil dieser im Inneren eines Fahrzeugs sitzt. - 你不能将玩家传送到这里,因为他们在车内。 - - - Debug - Ladit - Debug - Debug - - Debug - Debug - Depuração - Debug - 清除BUG - - - Comp - Comp - Comp - Comp - - Entschädigen - Compenser - Compensar - Comp - 赔偿金 - - - GodMode - Božský mód - Modo Dios - GodMode - - Gott-Mod - God - Modo Deus - GodMode - 上帝模式 - - - Freeze - Zmrazit - Congelar - Congelare - - Einfrieren - Freeze - Congelar - Zamroź - 冻结 - - - Markers - markery - Marcadores - Indicatori - - Spieler Markierungen - Marqueurs - Marcações - Markery - 标记 - - - - - Querying... - Dotazování ... - Buscando... - - Abfrage läuft... - Interrogation... - Ricerca... - Pesquisando... - Wyszukuję... - 查询... - - - Searching Database for vehicles... - Vyhledávání databáze pro vozidla ... - Buscando Vehiculo en la Base de Datos - - Durchsuche Garage nach Fahrzeugen... - Recherche des véhicules dans le garage... - Ricerca di veicoli nel Database... - Buscando por veículo na base de dados... - Szukam pojazdu w bazie danych... - 从数据库中搜索载具... - - - You are already querying a player. - Již jste dotazování přehrávač. - Ya estan buscando a un jugador. - - Du fragst bereits einen Spieler ab. - Vous êtes déjà en train d'interroger ce joueur. - Stai già ispezionando un giocatore. - Você já está buscando por um jogador. - Przeszukujesz gracza - 你已经在查询玩家了。 - - - Player no longer exists? - Hráč neexistuje? - El jugador ya no existe? - - Spieler existiert nicht mehr? - Le joueur ne semble pas exister. - Il giocatore non esiste più - Jogador não existe mais? - Gracz już nie istnieje? - 玩家不存在? - - - You are about to give yourself $%1 to compensate to another player <br/><br/>You must give this cash to the person you are compensating manually. - Chystáte se dát si $%1 kompenzovat jinému hráči <br/><br/> Musíte dát tuto hotovost na osoby, které jsou kompenzačním ručně. - Estas a punto de darte $%1 para compensar a otro jugador<br/><br/> Debes darle el dinero a la persona manualmente. - Stai per donarti €%1 per rimborsare un altro giocatore <br/><br/> Dovrai donare il denaro manualmente. - - Du bist dabei dir selbst $%1 zu geben, um einen anderen Spieler zu entschädigen.<br/><br/>Gib das Geld dann an den Spieler weiter. - Vous êtes sur le point de vous donner $%1 pour rembourser un autre joueur <br/><br/> Merci de le lui donner manuellement. - Você está prestes a dar para você mesmo R$%1 para compensar outro jogador <br/><br/>Você deve dar este dinheiro para a pessoa que você está compensando manualmente. - Właśnie przydzieliłeś sobie $%1 w celu rekompensaty graczowi <br/><br/>Musisz przekazać te środki osobiście osobie poszkodowanej. - 你将获得赔偿金 $%1,小心别输入错误了 <br/><br/>你只能手动操作把这笔钱给玩家。 - - - You have added $%1 to your account. - Přidali jste $%1 se ke svému účtu. - Has agregado $%1 a tu cuenta. - €%1 ti sono stati accreditati. - - Dir wurden $%1 auf deinem Bankkonto gutgeschrieben. - Vous avez ajouté $%1 à votre compte - Você adicionou R$%1 em sua conta. - Przekazałeś na konto $%1 - 你已将 $%1 添加到你的账户上 。 - - - You can not go above $999,999 - Nemůžete jít nad $ 999999 - No te puedes dar más de $999,999 - Non puoi superare i €999.999 - - Maximaler Wert $999,999! - Vous ne pouvez pas aller au-dessus $999,999 ! - Você não pode ir além de $999,999! - Nie można obracać kwotami wyższymi niż $999,999! - 你不能处理超过 $999,999 的资金 - - - Please type in the amount to compensate. - Prosím, zadejte částku, která má kompenzovat. - Por favor pon la cantidad a compensar. - Si prega di inserire l'importo da rimborsare. - - Bitte Entschädigungsbetrag eingeben. - S'il vous plaît entrez le montant pour compenser. - Por favor, insira a quantidade para compensar. - Wprowadź kwotę rekompensaty - 请输入赔偿金额。 - - - You have disabled %1's input. - Jste zakázali vstup %1 je. - Has deshabilitado los controles de %1 - Hai disattivato l'input di %1. - - Du hast %1 eingefroren. Er kann sich nicht mehr bewegen. - Vous avez désactivé les contrôles de %1. - Você desabilitou as entradas de %1. - Zablokowałeś grę gracza $%1 - 您被禁止 %1 秒输入。 - - - You have enabled %1's input. - Jste povolili vstup %1 je. - Has habilitado los controles de %1 - Hai riabilitato l'input di %1. - - Du hast %1 wieder aufgetaut. - Vous avez activé les contrôles de %1. - Você habilitou as entradas de %1. - Odblokowałeś grę gracza $%1 - 你被允许 %1 秒输入。 - - - You can't do that dumbass. - Můžete to udělat blbec. - No puedes hacer eso, pendejo - Impossibile. - - Das geht gerade nicht. - Vous ne pouvez pas le faire sur vous-même. - Você não pode fazer isso, idiota. - Tak nie można! - 你不可以这样做。 - - - Your Admin Level is not high enough. - Váš správce úroveň není dostatečně vysoká. - No tienes suficiente nivel de Admin. - Il tuo livello amministratore non soddisfa i requisiti. - - Dein Admin Level ist nicht hoch genug. - Votre niveau admin n'est pas suffisamment élevé. - Seu nível de Admin não é alto o bastante. - Nie masz wystarczających uprawnień, za niski poziom administracyjny - 您的管理等级不够高。 - - - Player Markers Disabled. - Hráč Markers pro invalidy. - Marqueurs désactivés - Marcadores de Jugadores Deshabilitados - Indicatori Giocatori Disabilitati. - - Spieler Markierungen deaktiviert. - Marcações dos jogadores desabilitada. - Markery 'OFF' graczy Wyłączone - 禁用玩家标记。 - - - Player Markers Enabled. - Hráč Markers Povoleno. - Marqueurs activés - Marcadores de Jugadores habilitados. - Indicatori Giocatori Abilitati. - - Spieler Markierungen aktiviert. - Marcações dos jogadores habilitada. - Markery 'ON' graczy Włączone - 启用玩家标记。 - - - God mode enabled - nesmrtelnost povolen - Mode Dieu activé - Modo Dios habilitado - Godmode abilitata - God mode włączony - Modo Deus ativado - Режим бога включен - Gott-Modus aktiviert. - 启用上帝模式 - - - God mode disabled - nesmrtelnost zakázán - Mode Dieu désactivé - Modo Dios deshabilitado - Godmode disabilitata - God mode wyłączony - Modo Deus desativado - Режим бога отключен - Gott-Modus deaktiviert. - 禁用上帝模式 - - - Action Cancelled - akce byla zrušena - Acción Cancelada - - Aktion abgebrochen. - Action annulée - Azione Annullata - Ação Cancelada - Anulowano akcję - 操作取消 - - - Commander/Tactical View Disabled - Commander/Tactical View Disabled - Commander/Tactical View Disabled - Commander/Tactical View Disabled - Commander/Vue tactique désactivée - Befehlshaber-Übersicht deaktiviert. - Commander/Tactical View Disabled - Commander/Tactical View Disabled - Commander/Tactical View Disabled - 指挥官/战术视图被禁用 - - - Hit spacebar to place the container. - Hit mezerníku na místo Kontejner. - Appuyez sur espace pour placer le conteneur. - Aprieta la barra de espacio para colocar el Contenedor. - Premi barra spaziatrice per posizionare il contenitore. - Hit spacji, aby umieścić pojemnik. - Pressione a barra de espaço para colocar. - Хит пробел, чтобы поместить контейнер. - Drücke die Leertaste, um den Container zu platzieren. - 按空格键放置物品。 - - - Placement of container has been aborted. - Placement of container has been aborted. - Placement of container has been aborted. - Placement of container has been aborted. - Placement of container has been aborted. - Placement of container has been aborted. - Placement of container has been aborted. - Placement of container has been aborted. - Die Platzierung des Containers wurde abgebrochen. - 物品放置已被中止. - - - Your faction is not allowed to chop vehicles! - Váš frakce není povoleno sekat vozidla! - Votre faction ne peut pas vendre les véhicules ! - Tu facción no tiene permitido usar esta tienda! - La tua fazione non può rubare veicoli! - Twoja frakcja nie może posiekać pojazdy! - - Sua facção não têm direito de usar essa loja - Deiner Fraktion ist es nicht erlaubt, Fahrzeuge bei dem Schrotthändler zu verkaufen! - 你的帮派不允许出售这载具! - - - A pickaxe is required - Je vyžadován krumpáč - Requieres un pico - - Hier benötigst du eine Spitzhacke! - Vous avez besoin d'une pioche. - Devi possedere un piccone! - A picareta é necessária - Wymagana jest kilof - 你需要一把镐 - - - You are restrained - Ty jsou omezeny - Estas retenido - - Wie willst du mit gefesselten Händen sammeln? - Vous êtes menotté. - Sei stato ammanettato - Você está algemado - Ty skrępowaniem - 你被限制 - - - You can't do this while you surrender - Můžete to udělat, když se vzdáš - No puedes hacer esto mientras te estas rindiendo - - Mit erhobenen Händen kannst du nichts sammeln! - Vous ne pouvez pas faire cela tant que vous avez les mains sur la tête. - Non puoi effettuare questa azione mentre tieni le mani in alto - Você não pode fazer isso enquanto você se entrega - Nie można tego zrobić, gdy się poddasz - 你投降时不能这么做 - - - You can't gather this resource with this vehicle! - Nemůžete shromáždit tento prostředek s tímto vozidlem! - No puedes recolectar este recurso con este vehiculo! - - Du kannst diese Ressource nicht mit diesem Fahrzeug abbauen! - Vous ne pouvez pas récolter cette ressource avec ce véhicule. - Non puoi raccogliere questa risorsa con questo veicolo ! - Voce não pode colher este recurso com este veiculo! - You can't gather this resource with this vehicle! - 你不能用这载具收集这个资源! - - - You have no business using this. - Nemáš podnikání pomocí tohoto. - Vous n'avez pas le niveau pour utiliser la console. - No tienes permiso de usar esto. - Non hai il permesso di farlo. - Nie masz działalność z wykorzystaniem tego produktu. - Você não tem nenhum negócio usando isto. - У вас нет бизнеса с помощью этого. - Du hast hier nichts verloren! - 您无权这样做。 - - - Admin %1 has opened the debug console. - Admin %1 otevřel ladění konzoli. - Administrateur %1 a ouvert la console de debug. - Administrador %1 ha abierto la consola de depuración. - Admin %1 ha aperto la console di debug. - Administrator %1 otworzył konsoli debugowania. - Administrador %1 abriu o console de depuração. - Администратор %1 открыл консоль отладки. - Admin %1 hat die Debug-Konsole geöffnet. - 管理员 %1 已打开调试控制台。 - - - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - You cannot drop keys to a vehicle which is locked and you are inside of. - Du kannst den Schlüssel nicht wegschmeißen, weil das Auto verschlossen ist und du drin sitzt. - 你不能把钥匙掉在一辆锁着的车里,你就在车里面。 - - - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - Emergency lights are not set for this vehicle. - 此车辆没有设置应急灯。 - - - - - Bank Account Management - Vedení bankovního účtu - Cuenta Bancaria - - Bankkonto verwalten - Gestion du Compte Bancaire - Gestione Bancaria - Conta Bancária - Bankomat Altis - 银行账户管理 - - - Withdraw - ustoupit - Retirar - - Abheben - Retirer - Preleva - Sacar - Wypłać - 取款 - - - Deposit - Vklad - Depositar - - Einzahlen - Déposer - Deposita - Depositar - Deopozyt - 存款 - - - Withdraw: Gang - Odstoupit: Gang - Retirer: Gang - Retirar: Pandilla - - Sacar: gangue - Ritira: Gang - Wycofaj: Gang - Abheben: Gang - 取款:帮派 - - - Deposit: Gang - Záloha: Gang - Déposer: Gang - Depositar: Pandilla - - Depositar: Gangue - Deposita: Gang - Depozyt: Gang - Einzahlen: Gang - 存款: 帮派 - - - Transfer - Převod - Transferir - - Überweisen - Transférer - Trasferisci - Transferir - Przelew - 转账 - - - You can't deposit more then $999,999 at a time - Nemůžete vložit více než 999.999 $ najednou - No puedes depositar mas de $999,999 a la vez - - Du kannst nicht mehr als $999,999 gleichzeitig einzahlen. - Vous ne pouvez pas déposer plus de $999,999. - Non puoi depositare più di €999,999 alla volta - Você não pode transferir mais de R$999.999 em uma transação - Możesz jednorazowo zdeponować nie więcej niż $999,999 - 您一次不能存入超过 $999,999 - - - The amount entered isn't a numeric value. - Uvedená částka není číselná hodnota. - No escribistes un valor numérico. - - Die eingegebene Zahl ist keine richtige Zahl. - La valeur entrée n'est pas un nombre. - Il valore inserito non è numerico. - O valor digitado não é um número. - Wprwadzona wartość nie jest liczbą - 输入的金额不是数值。 - - - You need to select someone to transfer to - Je třeba vybrat někoho převést na - Debes seleccionar a quien transferirle el dinero - - Du hast niemanden für die Überweisung ausgewählt. - Sélectionnez une personne pour le transfert. - Devi selezionare qualcuno a cui trasferire l'importo - Você tem que selecionar para quem deseja transferir - Musisz wybrać odbiorcę przelewu - 您需要选择某人来转账 - - - The player selected doesn't seem to exist? - Hráč vybraný Nezdá se, že neexistuje? - Le joueur sélectionné ne semble pas exister - El jugador que seleccionastes no existe? - - Der Spieler scheint nicht zu existieren? - Sembra che il giocatore selezionato non esista - O jogador selecionado parece não existir! - Wybrany gracz wydaje się nie występować w grze - 选定的玩家似乎不存在? - - - You can't transfer more then $999,999 - Nemůžete přenést více než 999.999 $ - No puedes transferir más de $999,999 - - Du kannst nicht mehr als $999,999 überweisen! - Vous ne pouvez pas transférer plus de $999,999. - Non puoi trasferire più di €999.000 alla volta - Você pode trasferir no máximo R$999.999. - Możesz jednorazowo przelać nie więcej niż $999,999 - 你转账不能超过 $999,999 - - - You don't have that much in your bank account! - Nemusíte to hodně na váš bankovní účet! - No tienes tanto dinero en tu cuenta de banco! - - Du hast nicht so viel Geld auf deinem Bankkonto! - Vous n'avez pas autant dans votre compte en banque ! - Non hai fondi sufficienti nel tuo conto in banca! - Você não tem todo esse dinhero na sua conta bancária - Nie masz tyle środków na koncie! - 你的银行账户里没有那么多钱! - - - You don't have that much in your gang bank account! - Nemusíte to hodně ve svém gang bankovní účet! - No hay tanto dinero en la cuenta de tu pandilla! - Il conto della gang non ha abbastanza denaro! - Nie ma tego dużo na koncie bankowym gang! - - Vous n'avez pas autant sur le compte de votre gang ! - Você não tem todo esse dinhero na sua gangue! - Ihr habt nicht genügend Geld auf dem Gangkonto! - 你的帮派银行账户里没有那么多钱! - - - You do not have enough money in your bank account, to transfer $%1 you will need $%2 as a tax fee. - Nemáte dostatek peněz na váš bankovní účet, převést $%1 budete potřebovat $%2 jako daňový poplatek. - No tienes el dinero suficiente, para transferir $%1 necesitaras $%2 para pagar como cuota. - - Du hast nicht genug Geld auf deinem Bankkonto, es kostet $%2 um $%1 zu überweisen. - Vous n'avez pas assez d'argent dans votre compte bancaire, pour transférer $%1 vous devez payer $%2 de taxes. - Non hai fondi sufficienti nel tuo conto in banca, per trasferire €%1 necessiti di €%2 per pagare la tassa di trasferimento. - Você não tem dinheiro suficiente na sua conta bancária. Para trasferir R$%1 você irá pagar R$%2 de taxa - Nie masz wystarczająco dużo środków na końcie, do przelewu $%1 będziesz potrzebował jeszcze $%2 na opłatę - 你的银行账户里没有足够的钱, 要转账 $%1 你需要支付 $%2 作为手续费. - - - You have transfered $%1 to %2.\n\nA tax fee of $%3 was taken for the wire transfer. - Jste přenesli $%1 do %2. \n\nA daňový poplatek ve výši $%3 byla pořízena na bankovním převodem. - Has transferido $%1 a $%2 \n\nUna cuota de $%3 fue tomada de tu cuenta. - - Du hast $%1 an %2 überwiesen.\n\nEine Gebühr von $%3 wurde verrechnet. - Vous avez transféré $%1 à %2.\n\nA Une taxe de $%3 vous a été prélevée pendant le transfert. - Hai trasferito €%1 a %2.\n\nSono stati trattenuti €%3 di tassa per il trasferimento. - Você trasferiu R$%1 para %2.\n\nA taxa de trasferência foi de: R$%3. - Przelałeś $%1 do %2.\n\nA opłata $%3 pobrana przez WIRE TRANSFER - 你已转账 $%1 给 %2。\n\n手续费 $%3 已从你的账户扣除。 - - - %1 has wire transferred $%2 to you. - - %1 ha transferido $%2 a tu cuenta. - - %1 hat dir $%2 überwiesen. - %1 vous a fait un virement de $%2. - %1 ha effettuato un bonifico sul tuo conto di €%2 - %1 transferiu $%2 para a tua conta. - - %1 通过电汇将 $%2 转账给你。 - - - You can't withdraw more then $999,999 - Nemůžete zrušit více než 999.999 $ - No puedes retirar más de $999,999 - - Du kannst nicht mehr als $999,999 abheben. - Vous ne pouvez pas retirer plus de $999,999. - Non puoi prelevare più di €999.000 in una volta - Você pode sacar no máximo R$999.999 - Możesz jednorazowo pobrać maks $999,999 - 你不能取款大于 $999,999 - - - You can't withdraw less then $100 - Nemůžete odvolat méně než 100 $ - No puedes retirar menos de $100 - - Du kannst nicht weniger als $100 abheben. - Vous ne pouvez pas retirer moins de $100. - Non puoi prelevare meno di €100 - Você não pode sacar menos de $100. - Nie możesz pobrać mniej niż $100 - 你不能取款小于 $100 - - - You have withdrawn $%1 from your bank account - Jste staženy $%1 z vašeho bankovního účtu - Has retirado $%1 de tu cuenta bancaria - - Du hast $%1 von deinem Bankkonto abgehoben. - Vous avez retiré $%1 de votre compte en banque. - Hai prelevato €%1 dal tuo conto in banca - Você sacou R$%1 de sua conta bancária. - Pobrałeś z konta kwotę $%1 - 你已从你的银行账户取走 $%1 - - - You have withdrawn $%1 from your gang. - Jste staženy $%1 z naší bandy - Has retirado $%1 de tu pandilla - Hai ritirato €%1 dal nostro gruppo. - Masz %1 $ wycofane z naszego gangu. - - Vous avez retiré $%1 de votre gang. - Você sacou R$%1 da sua gangue - Du hast $%1 vom Gangkonto abgehoben. - 你已从你的帮派账户取走 $%1 . - - - Someone is already trying to withdraw from your gang. - Někdo se již snaží ustoupit od svého gangu. - Quelqu'un est déjà en train de retirer de l'argent de votre gang. - Alguien ya esta tratando de retirar dinero de tu pandilla. - Qualcuno sta già cercando di ritirare del denaro dal fondo gang. - Ktoś już próbował wycofać się ze swojego gangu. - - Alguém já está tentando sacar da sua gangue. - Jemand versucht bereits, Geld vom Gangkonto abzuheben. - 有人从你的帮派账户中取款. - - - You do not have that much cash on you. - Nemáte tolik peněz na vás. - No tienes tanto dinero contigo. - - Du hast nicht so viel Geld bei dir. - Vous n'avez pas autant d'argent sur vous. - Non hai abbastanza denaro con te. - Você não tem todo esse dinheiro. - Nie masz przy sobie tyle pieniędzy - 你身上没有那么多现金. - - - You have deposited $%1 into your bank account - Máte uloženy $%1 na váš bankovní účet - Has depositado $%1 en tu cuenta de banco. - - Du hast $%1 auf dein Bankkonto überwiesen. - Vous avez déposé $%1 dans votre compte en banque. - Hai despositato €%1 nel tuo conto bancario - Você depositou R$%1 na sua conta bancária - Zdeponowałeś na koncie bankowym $%1 - 你已将 $%1 存入到你的银行账户 - - - You have deposited $%1 into your gang's bank account. - Máte uloženy $%1 na bankovní účet svého gangu. - Has depositado $%1 en la cuenta de tu pandilla. - - Du hast $%1 auf das Gangkonto überwiesen. - Vous avez déposé $%1 sur le compte en banque de votre gang. - Hai despositato €%1 nei fondi della tua gang. - Você depositou R$%1 na conta da sua gangue. - Zdeponowałeś na koncie gangu kwotę $%1. - 你已将 $%1 存入到你的帮派账户. - - - Someone is already trying to deposit into your gang's bank account. - Někdo se již snaží vložit na bankovní účet svého gangu. - Quelqu'un est déjà en train de déposer dans le compte bancaire de votre gang. - Alguien ya esta tratando de depositar en la cuenta de banco de tu pandilla. - Qualcuno sta già cercando di depositare del denaro nel conto della Gang. - Ktoś jest już stara się o wpłatę na rachunek bankowy swojego gangu. - - Alguém já está tentando depositar na conta da sua gangue. - Jemand versucht bereits Geld auf das Gangkonto einzuzahlen. - 有人存款到你的帮派银行账户. - - - You are not in a Gang! - Nejste v gangu! - Vous n'êtes pas dans une bande! - ¡No estás en una pandilla! - Non sei in un Gang! - Nie jesteś w gangu! - Você não está em uma gangue! - Du bist nicht in einer Gang! - 你没有在帮派里! - - - - - Altis Mobile - Altis Mobile - Celular - - Altis Mobilfunk - Altis Mobile - Cellulare Altis - Celular - Telefon - 手机 - - - Message To Send: - Zpráv pro odeslání: - Mensaje a Enviar: - - Deine Nachricht: - SMS à Envoyer : - Messaggio da inviare: - Mensagem à enviar: - Treść wiadomości - 发送信息: - - - Text Message: - Textová zpráva: - Mensaje: - - Nachricht: - Message Texte : - Msg Giocatore: - Mensagem: - Do: Gracz - 发短信: - - - Text Police - Text Police - Msg Policía - - An die Polizei - Police - Msg Polizia - Polícia - Do: Policja - 发短信给警察 - - - Text Admins - textové Administrátoři - Msg Admin - - An die Admins - Requête Admin - Msg Admin - Msg Admins - Do: Admin - 发短信给管理 - - - Admin Message - admin Message - Msg de Admin - - Admin-Nachricht - Message Admin - Admin Msg - Admin Msg - AdmGracz - 管理员信息 - - - Admin Msg All - Admin zpráva Vše - Admin Msg All - - Admin-Nachricht an alle - Admin MSG ALL - Admin Msg - Admin Msg All - SMS do Wszyscy - 管理员全服信息 - - - Request EMS - žádost o EMS - Pedir Médico - - An die Sanitäter - SAMU - Msg medici - Chamar SAMU - MEDYK - 发短信给医疗 - - - - - You must enter a message to send! - You must enter a message to send! - You must enter a message to send! - You must enter a message to send! - Du musst eine Nachricht eingeben! - Vous devez entrer un message à envoyer! - You must enter a message to send! - You must enter a message to send! - You must enter a message to send! - 您必须输入要发送的消息! - - - Your message cannot exceed 400 characters! - Your message cannot exceed 400 characters! - Your message cannot exceed 400 characters! - Your message cannot exceed 400 characters! - Deine Nachricht darf maximal 400 Zeichen enthalten!! - Votre message ne peut pas excéder 400 caractères ! - Your message cannot exceed 400 characters! - Your message cannot exceed 400 characters! - Your message cannot exceed 400 characters! - 您的信息不能超过400个字符! - - - You must select a player you are sending the text to! - You must select a player you are sending the text to! - You must select a player you are sending the text to! - You must select a player you are sending the text to! - Du musst einen Spieler auswählen! - Vous devez sélectionner un joueur à qui envoyer le message ! - You must select a player you are sending the text to! - You must select a player you are sending the text to! - You must select a player you are sending the text to! - 当你发送信息时必须选择一个玩家! - - - You have sent a message to all EMS Units. - You have sent a message to all EMS Units. - You have sent a message to all EMS Units. - You have sent a message to all EMS Units. - Du hast eine Nachricht an alle Sanitäter gesendet. - Vous avez envoyé un message à tous les EMS. - You have sent a message to all EMS Units. - You have sent a message to all EMS Units. - You have sent a message to all EMS Units. - 你已经向所有医护人员发送了消息. - - - You have sent a message to all Police Units. - You have sent a message to all Police Units. - You have sent a message to all Police Units. - You have sent a message to all Police Units. - Du hast eine Nachricht an alle Polizisten gesendet. - Vous avez envoyé un message à tous les Police. - You have sent a message to all Police Units. - You have sent a message to all Police Units. - You have sent a message to all Police Units. - - - - You have sent a message to all Admins. - You have sent a message to all Admins. - You have sent a message to all Admins. - You have sent a message to all Admins. - Du hast eine Nachricht an alle Admins gesendet. - Vous avez envoyé un message à tous les Admins. - You have sent a message to all Admins. - You have sent a message to all Admins. - You have sent a message to all Admins. - - - - You sent %1 a message: %2 - You sent %1 a message: %2 - You sent %1 a message: %2 - You sent %1 a message: %2 - Du sendest %1 eine Nachricht: %2 - Vous avez envoyé à %1 le message : %2 - You sent %1 a message: %2 - You sent %1 a message: %2 - You sent %1 a message: %2 - 你向 %1 发送了信息: %2 - - - You are not an admin! - You are not an admin! - You are not an admin! - You are not an admin! - Du bist kein Admin! - Vous n'êtes pas un admin ! - You are not an admin! - You are not an admin! - You are not an admin! - 你不是管理员! - - - Admin Message Sent To: %1 - Message: %2 - Admin Message Sent To: %1 - Message: %2 - Admin Message Sent To: %1 - Message: %2 - Admin Message Sent To: %1 - Message: %2 - Admin Nachricht Gesendet an: %1 - Nachricht: %2 - Message admin envoyé à %1 - Message : %2 - Admin Message Sent To: %1 - Message: %2 - Admin Message Sent To: %1 - Message: %2 - Admin Message Sent To: %1 - Message: %2 - 管理员消息发送给: %1 - 信息: %2 - - - Admin Message Sent To All: %2 - Admin Message Sent To All: %2 - Admin Message Sent To All: %2 - Admin Message Sent To All: %2 - Admin Nachricht Gesendet an Alle: %2 - Message admin envoyé à tous les joueurs : %2 - Admin Message Sent To All: %2 - Admin Message Sent To All: %2 - Admin Message Sent To All: %2 - 管理员发送信息到全体: %2 - - - There are currently no police units available! - Momentálně nejsou k dispozici žádné policejní jednotky! - ¡Actualmente no hay unidades de policía disponibles! - В настоящее время нет полицейских подразделений! - Aktuell stehen keine Polizeieinheiten zur Verfügung! - Il n'y a actuellement aucune unité de police disponible! - Al momento non ci sono unità di polizia disponibili! - Actualmente não há unidades policiais disponíveis! - Obecnie nie ma żadnych jednostek policyjnych! - 目前没有警用单位! - - - There are currently no EMS units available! - Momentálně nejsou k dispozici žádné jednotky EMS! - Actualmente no hay unidades de EMS disponibles! - В настоящее время нет доступных модулей EMS! - Aktuell stehen keine Sanitäter zur Verfügung! - Il n'y a actuellement aucune unité EMS disponible ! - Attualmente non ci sono unità EMS disponibili! - Não existem actualmente unidades EMS disponíveis! - Obecnie nie ma dostępnych jednostek EMS! - 目前没有特快专递单位! - - - - - Local Chop Shop - Místní Chop Shop - Desguazadero - - Schrotthändler - Revendeur de véhicules volés - Ricettatore - Desmanche - Dziupla - 销赃盗窃的载具 - - - - - Gang Management - gang Vedení - Administración de Pandilla - - Gangübersicht - Gestion du Gang - Gestione Gang - Gerenciar Gangue - Gang Menu - 帮派管理 - - - Gang Management - Current Gangs - Gang Management - Současné Gangs - Administracion de Pandilla - Pandillas Actuales - - Gangübersicht - Aktuelle Gangs - Gestion de Gangs - Liste des Gangs Actuels - Gestione Gang - Gang Attuali - Gerenciar Gangue - Gangue atual - Gang - zarządzaj - 帮派管理-当前帮派 - - - Join - Připojit - Unirse - - Beitreten - Rejoindre - Unisciti - Entrar - Dołącz - 加入 - - - Leave - Dovolená - Salir - - Verlassen - Quitter - Abbandona - Sair - Opuść - 退出 - - - Upgrade Slots - upgradem Slots - Aumentar Slots - - Anzahl erhöhen - Augmenter Slots - Aumenta Posti - Aumentar o número de Slots - Powiększ gang - 升级人数 - - - Kick - Kop - Expulsar - - Kicken - Virer - Espelli - Expulsar - Wykop - 踢出 - - - Set Leader - Set Leader - Hacer Líder - - Neuer Anführer - Passer Chef - Imposta Capo - Passar Liderança - Ustaw lidera - 设置管理者 - - - To create a gang it costs $%1 - Chcete-li vytvořit gang stojí $%1 - Cuesta $%1 para crear una pandilla - - Le prix de création d'un gang est de %1$ - Eine Gang zu erstellen kostet $%1. - Creare una gang costa $%1 - Criar uma Gangue custa R$%1 - Koszt ustanowienia gangu to $%1 - 创建一个帮派的成本 $%1 - - - Create - Vytvořit - Crear - - Erstellen - Créer - Crea - Criar - Stwórz - 创建 - - - Your Gang Name - Váš Gang Jméno - Nombre de tu Pandilla - - Dein Gangname - Nom du Gang - Nome della tua Gang - Nome da Gangue - Nazwa gangu - 输入你要创建的帮派名字 - - - Invite Player - Pozvat Player - Invitar Jugador - - Spieler einladen - Inviter joueur - Invita Giocatore - Convidar Jogador - Zaproś - 邀请玩家 - - - Disband Gang - rozpustit Gang - Deshacer Pandilla - - Gang auflösen - Dissoudre Gang - Sciogli Gang - Desfazer Gangue - Opuść gang - 解散帮派 - - - Gang Invitation - gang Pozvánka - Invitación de Pandilla - - Gangeinladung - Invitation de Gang - Invito Gang - Convite para Gangue - Zaproszenie do gangu - 帮派邀请 - - - Transfer Gang Leadership - Přeneste Gang Vedení - Transferir Liderazgo de Pandilla - - Gangführung übertragen - Transfert du chef du Gang - Trasferisci Comando - Transferir Liderança - Przekaż kierowanie gangiem - 移交帮派管理 - - - Upgrade Maximum Allowed Gang Members - Inovovat Maximální povolená Gang Členové - Aumentar Cantidad Máxima de Miembros de la Pandilla - - Maximale Anzahl an Mitgliedern erhöhen - Augmentation du nombre de membre total - Aumenta numero massimo membri della Gang - Atualizar limite máximo de membros - Zwiększ maksymalną liczbę członków gangu - 升级帮派成员人数 - - - - - You must create a gang first before capturing it! - You must create a gang first before capturing it! - Debes crear una pandilla antes de capturar este escondite! - - Du musst erst in einer Gang sein, um das Versteck einnehmen zu können! - Vous devez créer un gang avant de le capturer ! - Devi creare una gang prima di catturarla! - Você precisa criar uma gangue antes de tentar capturar! - Przed przechwyceniem musisz stworzyć gang - 您必须先创建一个帮派然后才能建立帮派据点! - - - Your gang already has control over this hideout! - Naše parta už má kontrolu nad tímto úkrytu! - Tu Pandilla ya tiene control de este escondite! - - Deine Gang hat bereits die Kontrolle über dieses Versteck! - Votre gang a déjà le contrôle de cette planque ! - La tua Gang ha già il controllo di questo Covo - Sua gangue já tem controle sobre esse esconderijo! - Twój gang aktualnie kontroluje tę kryjówkę ! - 你的帮派已经控制了这个帮派据点! - - - Only one person shall capture at once! - Pouze jedna osoba musí být schopná zachytit najednou! - Solo una persona puede capturar a la vez! - - Nur eine Person kann das Versteck einnehmen! - Une seule personne à la fois peut capturer la cachette ! - Può conquistare solo una persona alla volta! - Somente uma pessoa pode capturar! - Przejmowanie powinna przeprowadzić na raz tylko jedna osoba - 每次只能抓捕帮派据点的一个人! - - - This hideout is controlled by %1.<br/><br/>Are you sure you want to take over their gang area? - Tento úkryt je řízen %1.<br/><br/>Opravdu chcete převzít svůj gang prostor? - Este escondite esta controlado por %1.<br/><br/>Estas seguro que quieres tomarlo? - - Das Versteck wird durch %1 kontrolliert.<br/><br/>Bist du sicher, dass du ihr Ganggebiet übernehmen möchtest? - Cette planque est contrôlée par %1.<br/><br/>Etes-vous sûr que vous voulez prendre leur cachette ? - Questo Covo è controllato da %1.<br/><br/>Sicuro di voler prendere il controllo della loro area? - Esse esconderijo é controlado por %1.<br/><br/>Você tem certeza que deseja tomar essa área? - Ta kryjówka jest kontrolowana przez %1.<br/><br/>Jesteś pewny że chcesz przjąć ten rejon. - 帮派据点由 %1 控制.<br/><br/>你确定要接管他们的帮派吗? - - - Hideout is currently under control... - Hideout is currently under control... - Escondite bajo control... - - Versteck ist derzeit unter Kontrolle... - La planque est actuellement sous contrôle... - Il Covo è già sotto controllo... - Esconderijo sobre controle.... - Kryjówka pod kontrolą ... - 帮派据点正在控制... - - - Capturing cancelled - zachycení zrušen - Toma de Control Cancelada - - Einnehmen abgebrochen. - Capture annulée - Cattura annullata - Ação concelada - Przejmowanie anulowane - 帮派据点控制取消 - - - Capturing Hideout - zachycení Hideout - Capturando el Escondite - - Versteck einnehmen - Capture de la planque - Catturando il Covo - Capturando Esconderijo - Przejmowanie kryjówki - 控制的帮派据点 - - - Hideout has been captured. - Úkryt byl zajat. - La cachette a été capturée. - Escondite ha sido capturado. - Hideout è stato catturato. - Hideout został schwytany. - Hideout foi capturado. - Хайдеаут был захвачен в плен. - Versteck wurde eingenommen. - 帮派据点已被控制。 - - - %1 and his gang: %2 - have taken control of a local hideout! - %1 a jeho gang: %2 - vzali kontrolu místního úkrytu! - %1 y su pandilla: %2 - han tomado control de un Escondite! - - %1 und seine Gang: %2 - haben die Kontrolle über ein lokales Versteck übernommen! - %1 et son gang: %2 ont pris le contrôle d'une cachette ! - %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! - %1 e sua gangue: %2 - agora têm o controle de um esconderijo! - %1 i jego gang: %2 - przejął kontrolę nad kryjówką! - %1 和他的帮派: %2 - 已经控制了一个帮派据点! - - - You can't have a gang name longer then 32 characters. - Nemůžete mít název gang delší než 32 znaků. - El nombre de tu Pandilla no puede tener mas de 32 caracteres. - - Dein Gangname kann nicht länger als 32 Zeichen sein. - Vous ne pouvez pas avoir un nom de gang de plus de 32 caractères. - %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! - O nome de sua gangue não pode ter mais de 32 caracteres. - Nazwa gangu może posiadać maksymalnie 32 znaki - 你的帮派名称超过32个字符。 - - - You have invalid characters in your gang name. It can only consist of Numbers and letters with an underscore - Máte neplatné znaky v názvu vaší gangu. To se může skládat pouze z číslic a písmen s podtržítkem - El nombre de tu pandilla solo puede consistir de: "Numeros, Letras y guion bajo" - - Du hast ein ungültiges Zeichen in deinem Gangnamen. Der Name darf nur aus Zahlen und Buchstaben sowie einem Unterstrich bestehen! - Vous avez des caractères non valides dans le nom de votre gang. Il ne peut être constitué que de chiffres et de lettres. - Hai inserito caratteri non validi nel nome della Gang. Puoi inserire solo numeri e lettere con un underscore - O nome da sua gangue tem caracteres inválidos. O nome so pode conter caracteres e números separados por underline - Masz nieprawidłowe znaki w nazwie gangu - tylko litery i cyfry oraz podkreślnik - 你的帮派名称中有无效字符,它只能由下划线、数字和字母组成 - - - You do not have enough money in your bank account.\n\nYou lack: $%1 - Nemáte dostatek peněz na váš bankovní účet \ ne vy balení:. $%1 - No tienes suficiente dinero en tu cuenta.\n\nTe falta: $%1 - - Du hast nicht genug Geld auf deinem Bankkonto.\n\nDir fehlen: $%1 - Vous n'avez pas assez d'argent dans votre compte en banque.\n\nIl vous manque: $%1 - Non hai abbastanza fondi nel tuo conto in banca.\n\nTi mancano: $%1 - Você não tem dinheiro suficiente na sua conta bancária.\n\nFaltam: R$%1 - Nie masz tyle pieniędzy na koncie.\n\nYou brakuje: $%1 - 你的银行账户里没有足够的钱.\n\n你缺少: $%1 - - - You have created the gang %1 for $%2 - Vytvořili jste gangu %1 pro $%2 - Has creado la Pandilla %1 por $%2 - - Du hast die Gang: %1 für $%2 erstellt. - Vous avez créé le gang %1 pour $%2. - Hai creato la Gang %1 al costo di $%2 - Você criou a gangue %1 por R$%2 - Stworzyłeś gang %1 za $%2 - 你创造帮派 %1 花费了 $%2 - - - You are about to disband the gang, by disbanding the gang it will be removed from the database and the group will be dropped. <br/><br/>Are you sure you want to disband the group? You will not be refunded the price for creating it. - Chystáte se rozpustit gang, tím, že rozpustí gang bude odstraněna z databáze a skupina bude vynechána. < br / > < br / > Opravdu chcete rozpustit skupinu? Budete nevrací cenu za jeho vytvoření. - Estas a punto de desmantelar la Pandilla, si prosiges la Pandilla se borrara de la base de datos. <br/><br/>Estas seguro de querer desmantelarla? Cualquier dinero invertido no sera devuelto. - - Du bist dabei die Gang aufzulösen. Durch Auflösung der Gang wird diese aus der Datenbank entfernt. <br/><br/>Bist du sicher, dass du die Gang auflösen willst? Du erhältst die Kosten für die Erstellung nicht zurück. - Vous vous apprêtez à dissoudre le gang. En démantelant le gang, il sera supprimé de la base de données et le groupe sera supprimé. <br/><br/>Etes-vous sûr de vouloir dissoudre le groupe? Vous ne serez pas remboursé du prix de sa création. - Stai per sciogliere la Gang, facendolo sarà rimossa dal Database e il gruppo verrà cancellato. <br/><br/>Sei sicuro di voler sciogliere il gruppo? Non verrai rimborsato dei fondi spesi per crearlo. - Você vai desfazer a sua gangue, ela será apagada do banco de dados. <br/><br/>Você tem certeza que quer desfazer a gangue? Você não será reembolsado. - Chcesz rozwiązać gang, po jego rozwiązaniu zostanie on usunięty z bazy danych i cała grupa zostanie rozwiązana. <br/><br/>Naprawdę chcesz rozwiązać grupę? Nie dostaniesz zwrotu środków za przeznaczonych na stworzenie gangu. - 你要解散帮派,帮派将从数据库中删除. <br/><br/>你确定你想解散帮派? 不会退还你创建帮派的花费. - - - Disbanding the gang... - Rozpuštění gang ... - Desmantelando la Pandilla... - - Gang wird aufgelöst... - Démantèlement du gang... - Sciogliendo la Gang... - Desfazendo a gangue... - Rozwiąż gang - 解散帮派... - - - Disbanding cancelled - rozpuštění zrušen - Desmantelamiento Cancelado - - Auflösung abgebrochen. - Démantèlement annulé - Scioglimento annullato - Desfazer gangue cancelado - Rozwiązywanie gangu anulowane - 解散取消 - - - The leader has disbanded the gang. - Vůdce se rozpustil gang. - El lider ha desmantelado la Pandilla. - - Der Anführer hat die Gang aufgelöst. - Le chef a démantelé le gang. - Il Capo ha sciolto la Gang - O lider desfez a gangue. - Szef rozwiązał gang - 老大解散了帮派。 - - - %1 has invited you to a gang called %2<br/>If you accept the invitation you will be a part of their gang and will have access to the gang funds and controlled gang hideouts. - %1 vás pozval na party s názvem %2<br/>Pokud přijmete pozvání budete součástí jejich gangu a budou mít přístup ke gangu fondů a řízených gangů úkrytů. - %1 te ha invitado a una Pandilla llamada %2<br/>Si aceptas seras parte de su pandilla, compartiras el banco de la pandilla y controlaras sus escondites. - - %1 hat dich zu der Gang: %2 eingeladen. <br/> Wenn Du die Einladung annimmst, wirst du ein Teil der Gang und bekommst Zugang zu dem Gangkonto und kontrollierten Verstecken. - %1 vous a invité dans un gang appelé %2<br/>Si vous acceptez l'invitation, vous serez dans leur gang et aurez accès à des fonds de gangs et des planques de gangs contrôlées. - %1 ti ha invitato nella Gang: %2<br/>Se vuoi accettarai l'invito entrerai a far parte della loro Gang ed avrai accesso ai loro fondi e ai loro Covi. - %1 convidou você para a gangue %2<br/>Se você aceitar terá acesso aos recursos da gangue e os esconderijos controlados pela mesma. - %1 zaprosił cię do gangu o nazwie %2<br/>Jeżeli zaakceptujesz zaproszenie będziesz członkiem gangu i uzyskasz dostęp do funduszy gangu oraz jego kryjówek - %1 邀请你加入一个叫做 %2 的帮派<br/>如果你接受了这个邀请,你将成为他们的帮派成员,并且可以获得帮派资金和使用帮派控制的帮派据点。 - - - You are about to invite %1 to your gang, if they accept the invite they will have access to the gang's funds. - Chystáte se pozvat%1 na svůj gang, pokud přijmou pozvání budou mít přístup k finančním prostředkům gangu. - Estas a putno de invitar a %1 a tu pandilla, si aceptan tendran aceso al banco de tu Pandilla. - - Du bist dabei %1 in deine Gang einzuladen. Wenn die Einladung angenommen wird, hat der Spieler Zugang zu den Gangbesitztümern. - Vous êtes sur le point d'inviter %1 dans votre gang, s'il accepte l'invitation, il aura accès aux fonds du gang. - Stai per invitare %1 nella tua Gang, se accetterà l'invito avrà accesso ai fondi della Gang. - Você está prestes a convidar %1 para a gangue, ele terá acesso aos recursos da gangue. - Właśnie zaprosiłeś %1 do gangu, jeśli zaakceptuje zaproszenie będzie miał dostęp do funduszy gangu. - 您将邀请 %1 加入您的帮派,如果他接受邀请,他将有权使用帮派的资金。 - - - You need to select a person to invite! - Musíte vybrat osobu vyzvat! - Tiense que selecionar a quien invitar! - - Du musst einen Spieler zum Einladen auswählen! - Vous devez sélectionner une personne à inviter ! - Devi selezionare una persona da invitare! - Você tem que selecionar um jogador para convidar! - Musisz zaznaczyć osobę aby ją zaprosić - 你需要选择一个人来邀请他! - - - You have sent a invite to your gang to %1 - Jste adresoval zvou na svůj gang do %1 - Has invitado a %1 a tu Pandilla - - Du hast eine Einladung in diese Gang an %1 gesendet. - Vous avez envoyé une invitation à rejoindre votre gang à %1 - Hai mandato l'invito alla tua Gang a %1 - Você enviou um convite para %1 se juntar a sua gangue - Wysłałeś zaproszenie do twojego gangu do %1 - 你已经给 %1 发送了一个加入你帮派的邀请 - - - Invitation Cancelled - Pozvánka byla zrušena - Invitación Cancelada - - Einladung abgebrochen. - Invitation annulée - Invito Annullato - Convite Cancelado - Zaproszenie anulowane - 取消邀请 - - - You cannot kick yourself! - Nemůžete kopat sami! - No te puedes expulsar a ti mismo! - - Du kannst dich nicht selbst kicken! - Vous ne pouvez pas vous éjecter vous-même ! - Non puoi espellerti da solo! - Você não pode kickar você mesmo! - Nie możesz sam się wykopać! - 你不能踢出自己! - - - Your gang has reached its maximum allowed slots, please upgrade your gangs slot limit. - Váš gang dosáhla svého maxima dovoleno sloty, proveďte upgrade hranice slotu vašeho gangu. - Tu Pandilla ha llegado a su máxima capacidad, aumenta los slots para seguir invitando. - - Deine Gang hat die maximale Anzahl an Mitgliedern erreicht, bitte erhöhe das Limit deiner Gang. - Votre gang a atteint le nombre de membre maximum, veuillez augmenter cette limite. - la tua Gang ha raggiungo il numero massimo di posti consentiti, aumentane il limite. - Sua gangue está lotada, você deve aumentar o número máximo de jogadores. - Twój gang osiągnął maksymalną pojemność, powiększ swój gang! - 你的帮派成员数已经达到了允许的最大范围, 请升级你的帮派成员数. - - - You need to select a person to kick! - Musíte vybrat osobu kopat! - Tienes que seleccionar a quien expulsar! - - Du musst einen Spieler auswählen, um ihn kicken zu können! - Vous devez choisir une personne à virer ! - Devi selezionare una persona da espellere! - Você tem que selecionar um jogador para kickar! - Musisz zaznaczyć osobę do wykopania - 你需要选择一个人来踢出! - - - You cannot leave the gang without appointing a new leader first! - Nemůžete opustit gang, aniž by o jmenování nového vůdce první! - No puedes salir de la Pandilla sin apuntar a un nuevo líder! - - Du kannst die Gang nicht verlassen, ohne vorher einen neuen Anführer zu ernennen! - Vous ne pouvez pas quitter le gang sans passer le lead à quelqu'un ! - Non puoi abbandonare la Gang prima di aver selezionato un nuovo Capo! - Você não pode sair da gangue sem transferir a liderança antes! - Nie możesz opuścić gangu bez przekazania komuś szefostwa nad gangiem - 没有任命新的老大,你不能离开这个帮派! - - - You have quit the gang. - You have quit the gang. - You have quit the gang. - You have quit the gang. - Du hast die Gang verlassen. - Vous avez quitté le gang. - You have quit the gang. - You have quit the gang. - You have quit the gang. - 你已经退出了帮派. - - - You are about to transfer leadership over to %1 <br/>By transferring leadership you will no longer be in control of the gang unless ownership is transferred back. - Chystáte se přenést vedoucí přes %1 <br/>Převedením vedení už nebude mít kontrolu nad gangu, pokud je vlastnictví převedeno zpět. - Estas a punto de transferir liderazgo a %1 <br/>Al transferir liderazgo no tendrás control de la Pandilla. - - Du bist dabei, die Gangführung an %1 zu übertragen<br/>Durch die Übertragung der Gangführung hast du keine Kontrolle mehr über die Gang. - Vous allez transférer le commandement à %1 <br/>En transférant le commandement, vous ne serez plus le chef du gang. - Stai per traferire il comando a %1 <br/>Facendolo non avrai più il controllo della Gang fino a quando non ti verrà restituito il comando. - Você vai transferir a liderança da gangue para %1 <br/>Você não será mais o lider, a não ser que a liderança seja transferida novamente. - Przekazałeś kierowanie gangiem %1 <br/>W związku z tym nie będzesz od tej chwili kontroli nad gangiem chyba, że kierowownictwo zostanie ci powierzone ponownie. - 你将要把老大的位置移交给 %1 <br/>老大的位置移交后,你将不能再控制这个帮派,除非有人将帮派老大位置还给你. - - - Transfer of leadership cancelled. - Převod vedení zrušen. - Transferencia de liderazgo cancelada. - - Übertragung der Gangführung abgebrochen. - Transfert du commandement annulé. - Trasferimento del comando annullato. - Transferencia de liderança cancelada. - Przkazanie kierownictwa anulowane. - 取消帮派老大的移交。 - - - You are already the leader! - Již jste vůdce! - Tu ya eres el líder! - - Du bist bereits der Anführer! - Vous êtes déjà chef ! - Sei già il Capo! - Você já está na liderança! - Jesteś już liderem! - 你已经是帮派老大了! - - - You need to select a person first! - Je třeba vybrat prvního člověka! - Tienes que seleccionar a alguien primero! - - Du musst erst einen Spieler auswählen! - Vous devez choisir une personne ! - Devi selezionare una persona! - Você tem que selecionar um jogador antes! - Musisz najpierw zaznaczyć osobę! - 你需要先选一个人! - - - You have been made the new leader. - You have been made the new leader. - You have been made the new leader. - You have been made the new leader. - Du wurdest zum neuen Anführer ernannt. - Vous êtes le nouveau leader. - You have been made the new leader. - You have been made the new leader. - You have been made the new leader. - 你被选为新的帮派老大. - - - You are about to upgrade the maximum members allowed for your gang. - Chystáte se aktualizovat maximální povolené členy pro svůj gang. - Estas a punto de aumentar la capacidad de tu Pandilla. - - Du bist dabei, die maximale Anzahl an Mitgliedern zu erhöhen. - Vous êtes sur le point de mettre à niveau la limite de membre maximum pour votre gang. - Stai aumentando il numero massimo di membri consentiti all'interno della tua Gang - Você vai atualizar o limite de membros da gangue. - Chcesz zwiększyć maksymalną ilość członków w gangu. - 您将升级您的帮派所允许的最大成员数. - - - Current Max: %1 - Proud Max: %1 - Límite Corriente: %1 - - Aktuelles Maximum: %1 - Max actuel: %1 - Attuali Max: %1 - Número máximo atual: %1 - Aktualnie Max: %1 - 目前的最大值: %1 - - - Upgraded Max: %2 - Modernizované Max: %2 - Nuevo Límite: %2 - - Maximum erhöhen: %2 - Après mise à niveau : %2 - Aumento Max: %2 - Novo número máximo: %2 - Po ulepszeniu Max: %2 - 升级最大值: %2 - - - Price: - Cena: - Precio: - - Preis: - Prix : - Costo: - Preço: - Koszt: - 价钱: - - - You do not have enough money in your bank account to upgrade the gangs maximum member limit. - Nemáte dostatek peněz na modernizaci gangů maximální limit člena svého bankovního účtu. - No tienes suficiente dinero como para mejorar la capacidad de tu pandilla. - - Du hast nicht genug Geld auf deinem Bankkonto, um das Mitgliederlimit deiner Gang zu erhöhen. - Vous n'avez pas assez d'argent dans votre compte en banque pour mettre à niveau la limite de membre maximale. - Non hai abbastanza fondi nel tuo conto in banca per aumentare il limite massimo di membri. - Você não dinheiro suficiente para aumentar o limite da gangue. - Nie posiadasz wystarczającej ilości środków na koncie aby powiększyć gang - 您的银行帐户没有足够的钱升级帮派最大成员限制。 - - - Current: - Aktuální - Corriente: - - Aktuell: - Actuel : - Attuale: - Atual: - Aktualny: - 最近的: - - - Lacking: - postrádat - Falta: - - Fehlend: - Manquant : - Mancanza: - Faltando: - Brakuje: - 缺少: - - - You have upgraded from %1 to %2 maximum slots for <t color='#8cff9b'>$%3</t> - Provedli jste upgrade z%1 do%2 Maximální sloty pro < k color = "# 8cff9b '> $%3 < / > - Has aumentado de %1 a %2 slots <t color='#8cff9b'>$%3</t> - - Du hast für <t color='#8cff9b'>$%3</t> die Anzahl von %1 auf %2 Mitgliedern erhöht. - Vous avez mis à niveau le nombre maximal de membres de %1 à %2 pour <t color='#8cff9b'>$%3</t> - Hai aumentato i posti massimi da %1 a %2 per <t color='#8cff9b'>$%3</t> - Limite de membros atualizado de %1 para %2 por <t color='#8cff9b'>R$%3</t> - Zwiększyłeś ilość możliwych członków gangu z %1 do %2 for <t color='#8cff9b'>$%3</t> - 你已经从 %1 升级到 %2 最大成员数 <t color='#8cff9b'>$%3</t> - - - Upgrade cancelled. - Upgrade zrušena. - Mejora Cancelada. - - Erhöhung abgebrochen. - Mise à jour annulée. - Aumento annullato. - Cancelar Upgrade. - Ulepszanie anulowane. - 升级取消。 - - - Funds: - fondy - Fondos: - - Geld: - Fonds : - Fondi - Recursos: - Środki: - 基金: - - - (Gang Leader) - (Gang Leader) - (Lider de Pandilla) - - (Gangführung) - (Chef de Gang) - (Capo Gang) - (Lider da Gangue) - (Szef gangu) - (帮派老大) - - - You are already in a gang. - Jste již v gangu. - Ya estas en una pandilla. - - Du befindest dich bereits in einer Gang. - Vous êtes déjà dans un gang. - Sei già in una banda. - Você já está em uma gangue. - Jesteś już w gangu. - 你已经在帮派中了。 - - - Bad UID? - Bad UID? - Mauvais UID ? - Bad UID? - Bad UID? - Bad UID? - Bad UID? - Bad UID? - Bad UID? - 错误的UID? - - - This player is already in a gang. - Tento hráč je již v gangu. - Ce joueur est déjà dans un gang. - Este jugador ya está en una pandilla. - Questo giocatore è già in una banda. - Ten gracz jest już w gangu. - Este jogador já está em uma gangue. - Этот игрок уже в банде. - Dieser Spieler ist bereits in einer Gang. - 这个玩家已经在帮派中了。 - - - You have been kicked out of the gang. - You have been kicked out of the gang. - Vous avez été éjecté de votre gang. - You have been kicked out of the gang. - You have been kicked out of the gang. - You have been kicked out of the gang. - You have been kicked out of the gang. - You have been kicked out of the gang. - Du wurdest aus der Gang gekickt. - 你被踢出了帮派。 - - - - - This garage has already been bought! - - - - Diese Garage wurde bereits gekauft! - Ce garage a déjà été acheté ! - - - - 这个仓库已经被购买了! - - - You are not the owner of this house! - - - - Vous n'êtes pas le propriétaire de cette maison ! - Du bist nicht der Eigentümer dieses Hauses! - - - - 你不是这所建筑的主人! - - - This garage is available for <t color='#8cff9b'>$%1</t><br/> - - - - Diese Garage steht dir für <t color='#8cff9b'>$%1</t><br/>zur Verfügung! - Ce garage est disponible pour <t color='#8cff9b'>$%1</t><br/> - - - - 这个仓库花费 <t color='#8cff9b'>$%1</t><br/> - - - This building is a Gang Hideout! - - - - Dieses Gebäude ist ein Gangversteck! - Ce bâtiment est une cachette de gang ! - - - - 这个建筑是一个帮派据点! - - - Are you sure you want to sell your garage? It will sell for: <t color='#8cff9b'>$%1</t> - - - - Bist du sicher, dass du diese Garage verkaufen willst? Sie wird verkauft für: <t color='#8cff9b'>$%1</t> - Êtes-vous sûr de vouloir vendre votre garage ? Vous le vendrez pour : <t color='#8cff9b'>$%1</t> - - - - 你确定要卖掉你的仓库吗? 它将售出: <t color='#8cff9b'>$%1</t> - - - Sell Garage - - - - Vendre le garage - Garage verkaufen - - - - 出售仓库 - - - Purchase Garage - - - - Acheter ce garage - Garage kaufen - - - - 购买仓库 - - - You do not own a garage here! - - - - Du besitzt hier keine Garage! - Vous ne possédez pas de garage ici ! - - - - 你在这里没有仓库! - - - Vehicle Garage - Garáž Vehicle - Garaje de Vehículos - - Fahrzeug Garage - Garage de Véhicules - Garage Veicoli - Garagem de Veículos - Garaż - 载具仓库 - - - Get Vehicle - Získat vozidlo - Obtener Vehículo - - Ausparken - Récupérer - Ritira Veicolo - Pegar Veículo - Wyciągnij pojazd: - 获取载具 - - - Sell Vehicle - Navrhujeme Vehicle - Vender Vehículo - - Fahrzeug verkaufen - Vendre - Vendi Veicolo - Vender Veículo - Sprzedaj pojazd - 出售载具 - - - Sell Price - Navrhujeme Cena - Precio de Venta - - Verkaufspreis - Prix de vente - Prezzo di vendita - Preço de Venda - Cena sprzedaży - 出售价格 - - - Storage Fee - skladného - Cuota de Guardado - - Parkgebühr - Frais de Stockage - Costo ritiro - Taxa de Armazenamento - Opłata parkingowa - 保管费 - - - No vehicles found in garage. - Žádná vozidla nalezený v garáži. - No se encontraron vehículos en el Garaje. - - Keine Fahrzeuge in der Garage gefunden. - Aucun véhicule trouvé dans le garage. - Non hai veicoli nel Garage. - Nenhum veiculo encontrado na garagem. - Nie znaleziono pojazdów w garażu - 仓库内没有载具。 - - - You don't have $%1 in your bank account - Nemáte $%1 z vašeho bankovního účtu - No tienes $%1 en tu cuenta de Banco - - Du hast keine $%1 auf deinem Bankkonto. - Vous n'avez pas %1$ sur ton compte en banque. - Non hai $%1 nel tuo conto in banca - Você não tem R$%1 na sua conta bancária - Nie masz %1 na koncie bankowym: - 你的银行账户里没有 $%1 - - - Spawning vehicle please wait... - Plodit vozidlo čekejte prosím ... - Creando vehículo, por favor espera... - - Fahrzeug wird bereitgestellt, bitte warten... - Mise en place du Véhicule, merci de patienter... - Creazione veicolo attendere... - Obtendo veiculo, aguarde por favor... - Wyciągam pojazd, proszę czekać ... - 正在提取载具请稍候... - - - Sorry but %1 was classified as a destroyed vehicle and was sent to the scrap yard. - Je nám líto, ale%1 byl klasifikován jako zničené vozidlo a byl poslán na šrotiště. - Lo siento, pero %1 fue clasificado como destruido y fue mandado al basurero. - - Entschuldigung, aber dein %1 wurde zerstört und auf den Schrottplatz geschickt. - Désolé, mais votre %1 a été détruit et vendu à la casse. - Purtroppo %1 è stato classificato come veicolo distrutto ed è stato mandato allo sfascio. - O veículo %1 foi mandado para o ferro velho pois foi classificado como destroido. - Przepraszamy ale %1 został sklasyfikowany jako zniszczony i został odesłany na złom. - 对不起 %1 被认定为损坏的载具并送往废弃场。 - - - Sorry but %1 is already active somewhere in the world and cannot be spawned. - Je nám líto, ale%1 je již aktivní někde ve světě a nemůže být třel. - Lo siento, pero %1 esta activo en alguna parte del mundo y no puede aparecer. - - Entschuldigung, aber dein %1 ist bereits ausgeparkt worden und kann darum nicht bereitgestellt werden. - Désolé, mais votre %1 a déjà été sorti du garage. - Purtroppo %1 è già presente nella mappa e non può essere ricreato - O veículo %1 já está presente no mapa e não pode ser retirado novamente - Przepraszamy ale %1 jest aktywny gdzieś na mapie i nie może zostać wyciągnięty. - 对不起,%1 被归类为毁坏的载具,并被送到废弃场。 - - - There is already a vehicle on the spawn point. You will be refunded the cost of getting yours out. - K dispozici je již vozidlo na spawn bodu. Ty budou vráceny náklady dostat se ven. - Ya hay un vehículo en el punto de Spawn, se te reembolsara el costo de sacar el vehículo. - - Es steht ein Fahrzeug auf dem Spawnpunkt. Die Kosten für das Bereitstellen werden dir erstattet. - Il y a déjà un véhicule sur le point de spawn. Le coût de sortie du véhicule vous a été remboursé. - C'è già un veicolo nel punto di creazione. Verrai rimborsato della spesa appena effettuata. - Existe um outro veiculo na area de spawn. Você será reembolsado. - W strefie parkowania znajduje się już pojazd. Środki za parkowanie zostaną zwrócone. - 载具重生点已经被另一辆载具占据。你的花费将会返还。 - - - You sold that vehicle for $%1 - Ty jsi prodal toto vozidlo za $%1 - Vendiste el vehículo por $%1 - - Du verkaufst dein Fahrzeug für $%1. - Vous avez vendu ce véhicule pour $%1. - Hai venduto il veicolo per $%1 - Você vendeu um veículo por R$%1 - Sprzedałeś pojazd za %1 - 你以 $%1 的价格出售了这辆载具 - - - That vehicle is a rental and cannot be stored in your garage. - Že vozidlo je půjčovna a nemohou být uloženy ve vaší garáži. - Este vehículo es rentado y no puede ser guardado. - - Mietwagen können nicht in der Garage geparkt werden. - Ce véhicule est une location et ne peut pas être stocké dans votre garage. - Il veicolo è in affitto e non può essere depositato in garage. - Esse veículo é alugado e não pode ser armazenado na garagem. - Pojazd wynajęty, nie możesz go schować w garażu. - 载具是租赁的,不能存放在你的仓库里。 - - - Thank you for returning the rental vehicle. - Děkujeme za vrácení zapůjčeného vozidla. - Gracias por devolver el vehículo de alquiler. - Спасибо, что вернул автомобиль в аренду. - Vielen Dank für die Rückgabe des Mietwagens. - Nous vous remercions de nous avoir rendu le véhicule de location. - Grazie per aver restituito il veicolo a noleggio. - Obrigado por devolver o veículo alugado. - Dziękuję za zwrot wypożyczonego pojazdu. - 感谢您归还租车。 - - - That vehicle doesn't belong to you therefor you cannot store it in your garage. - Co vozidlo nepatří k vám proto jej nelze ukládat ve vaší garáži. - Este vehículo no es tuyo! Asi que no lo puedes guardar. - - Das Fahrzeug gehört nicht dir und kann deshalb nicht in der Garage geparkt werden. - Ce véhicule ne vous appartient pas, vous ne pouvez pas le stocker dans votre garage. - Il veicolo non ti appartiene e quindi non puoi depositarlo nel tuo garage. - Você não é o proprietário desse veiculo, logo não poderá guarda-lo na garagem. - Pojazd nie należy do ciebie nie możesz go schować w garażu. Ale zawsze możesz podjechać do dziupli! - 载具不属于你,所以你不能把它存放在仓库里。 - - - The vehicle has been stored in your garage. - Vozidlo bylo uložené v garáži. - Has guardado el vehículo en el garaje. - - Das Fahrzeug wurde in die Garage eingeparkt. - Le véhicule a été entreposé dans le garage. - Il veicolo è stato depositato nel tuo garage. - O veículo foi guardado na sua garagem. - Pojazd został zaparkowany. - 载具已存放在你的仓库里. - - - Your vehicle is ready! - Vaše vozidlo je připraven! - Tu vehículo esta listo! - - Dein Fahrzeug steht bereit! - Votre véhicule est prêt. - Il tuo veicolo è pronto - O seu veículo está pronto - Pojazd jest gotowy - 你的载具准备好了! - - - The server is trying to store the vehicle... - Tento server se pokouší uložit vozidlo ... - El servidor esta tratando de guardar el vehículo... - - Der Server versucht, das Fahrzeug einzuparken... - Le serveur tente de stocker le véhicule... - Il server sta cercando di depositare il veicolo... - O servidor está guardando o veiculo... - Serwer próbuje schować pojazd w garażu ... - 服务器正试图存储载具... - - - The selection had a error... - Volba obsahuje chybu ... - Huvo un error en la selección... - - Die Auswahl hat einen Fehler... - La sélection a une erreur... - La selezione ha avuto un errore... - Erro ao selecionar.... - Ten wybór powoduje błąd - 选择有错误... - - - There isn't a vehicle near the NPC. - Není vozidla v blízkosti NPC. - No hay un vehículo cerca del NPC. - - Es befindet sich kein Fahrzeug in der Nähe des NPC. - Il n'y a pas de véhicule près du PNJ. - Non c'è alcun veicolo vicino all'NPC. - Não existe um veículo proximo ao NPC - Nie ma pojazdu w pobliżu NPC - NPC附近没有载具。 - - - Are you sure you want to sell your %1 for $%2? - Opravdu chcete prodat svůj %1 za $%2? - ¿Estás seguro de que quieres vender tu %1 por $%2? - Вы уверены, что хотите продать свой %1 за $%2? - Bist du sicher, dass du deine(n) %1 für $%2 verkaufen möchtest? - Êtes-vous sûr de vouloir vendre votre %1 pour $%2 ? - Siete sicuri di voler vendere la vostra %1 per $%2? - Tem a certeza que quer vender a sua %1 por $%2? - Jesteś pewien, że chcesz sprzedać swój %1 za $%2? - 你确定要把你的%1卖给%2? - - - Sell vehicle - Prodat vozidlo - Vender el vehículo - Продать автомобиль - Fahrzeug verkaufen - Vendre un véhicule - Vendere il veicolo - Vender veículo - Sprzedaj pojazd - 出售车辆 - - - - - Key Chain - Current List of Keys - Klíčenka - Aktuální seznam klíčů - Llavero - Lista de llaves - - Schlüsselbund - Aktuelle Liste - Porte-clés - Liste actuelle des clés - Portachiavi - Lista delle Chiavi - Chaves - Atual Lista de Chaves - Lista kluczyków - 钥匙 - 当前列表 - - - Drop Key - Drop Key - Tirar llave - - Wegwerfen - Jeter Clef - Abbandona Chiave - Remover Chave - Wyrzuć klucz - 丢弃钥匙 - - - Give Key - dát klíč - Dar Llave - - Geben - Donner Clef - Dai Chiave - Dar Chave - Daj klucz - 给予钥匙 - - - - - Player Menu - Nabídka přehrávače - Menu de Jugador - - Spieler Menü - Menu du Joueur - Menu Giocatore - Menu Jogador - Menu gracza - 玩家菜单 - - - Current Items - Aktuální položky - Objetos Actuales - - Aktuelle Gegenstände - Items Actuels - Oggetti Attuali - Items Atuais - Aktualne wyposażenie: - 当前物品 - - - Licenses - licencí - Licencias - - Lizenzen - Licences - Licenze - Licenças - Licencje - 许可证 - - - Money Stats - peníze Statistiky - Dinero - - Geld Statistik - Stats Monétaires - Statistiche Fondi - Dinheiro - Twoje środki - 资产统计 - - - My Gang - My Gang - Mi Pandilla - - Meine Gang - Mon Gang - Mia Gang - Gangue - Gang - 我的帮派 - - - Wanted List - seznamu hledaných - Lista de Busqueda - - Fahndungsliste - Interpol - Lista Ricercati - Lista de Foragidos - Poszukiwani - 通缉名单 - - - Cell Phone - Mobilní telefon - Celular - - Telefon - Téléphone - Cellulare - Celular - Telefon - 短消息 - - - Key Chain - Klíčenka - Llavero - - Schlüssel - Porte-clés - Portachiavi - Chaves - Klucze - 钥匙 - - - Admin Menu - Nabídka admin - Menu Admin - - Admin Menü - Menu Admin - Menu Admin - Menu Admin - Admin Menu - 管理菜单 - - - Sync Data - synchronizace dat - Sincronizar - - Speichern - Sync Data - Salva Dati - Sincronizar Dados - Synchronizuj - 同步数据 - - - - - Settings Menu - Nabídka Nastavení - Configuración - - Einstellungen - Menu Paramètres - Menu Impostazioni - Configurações - Ustawienia: - 设置菜单 - - - On Foot: - Pěšky: - A Pie: - - Zu Fuß: - A pied : - A piedi: - A Pé: - Na nogach: - 步行: - - - In Car: - V autě: - En Carro: - - Im Auto: - En voiture : - Auto: - No Carro: - W aucie: - 载具: - - - In Air: - Ve vzduchu: - En Aire: - - Im Himmel: - Air - Aria: - No Ar: - W powietrzu: - 空中: - - - View distance while on foot - Pohled vzdálenost, zatímco na nohy - Distancia de vista a pie - - Sichtweite zu Fuß - Distance de vue à pied - Distanza visiva a piedi - Visualizar distância enquanto a pé - Widoczność gdy na nogach - 视距 - - - View distance while in a land vehicle - Pohled vzdálenost, zatímco v pozemního vozidla - Distancia de vista en vehiculo terrestre - - Sichtweite in Landfahrzeugen - Distance de vue en véhicule terrestre - Distanza visiva su veicolo di terra - Visualizar distância enquanto em veículos terrestres - Widoczność gdy w aucie - 在陆地载具中观察距离 - - - View distance while in a air vehicle - Pohled vzdálenost, zatímco ve vzduchu vozidle - Distancia de vista en vehiculo aéreo - - Sichtweite in Luftfahrzeugen - Distance de vue en véhicule aérien - Distanza visiva su velivolo - Visualisar distância enquanto em veículos aéreos - Widoczność gdy w powietrzu - 在飞行器上观察距离 - - - Player Tags - přehrávač Tags - Marcador de Jugadores - - Spielernamen - Tags Joueurs - Tag Giocatore - Tags de Jogadores - Tagi graczy - 玩家标签 - - - Tags ON - značky na - Tags ON - - Namen AN - Tags ON - Tags ON - Tags ON - Tagi ON - 启用标签 - - - Tags OFF - Štítky OFF - Tags OFF - - Namen AUS - Tags OFF - Tags OFF - Tags OFF - Tagi OFF - 关闭标签 - - - Sidechat Switch - Sidechat Spínač - Canal Side - Habilitar Sidechat - Interruttore Sidechat - Sidechat Przełącznik - - Habilitar Sidechat - Sidechat umschalten - 聊天框开关 - - - Reveal Nearest Objects - Reveal Nejbližší objekty - Révéler les objets les plus proches - Revelar Objetos Cercanos - Rivela oggetti più vicini - Odsłonić Najbliższa Przedmioty - - Mostrar Objetos Próximos - Nahe Objekte anzeigen - 显示最近的物体 - - - Broadcast Switch - - Interrupteur de Transmission - Habilitar Transmisiones - - - - Habilitar Transmissões - Broadcast umschalten - 广播开关 - - - Sidechat OFF - Sidechat OFF - Sidechat OFF - - Sidechat AUS - Canal camp OFF - Chat fazione OFF - Sidechat OFF - Czat strony OFF - 聊天关闭 - - - Sidechat ON - Boční Chat ON - Sidechat OFF - - Sidechat AN - Canal camp ON - Chat fazione ON - Sidechat ON - Czat strony ON - 聊天开启 - - - - - Shop Inventory - Obchod Zásoby - Inventario de Tienda - - Ladeninventar - Boutique - Inventario Negozio - Loja de Inventário - Oferta sklepu - 店铺库存 - - - Your Inventory - Váš Inventory - Tu Inventario - - Eigenes Inventar - Votre Inventaire - Inventario Personale - Seu Inventário - Twoje wyposażenie - 你的库存 - - - Buy Item - Koupit Item - Comprar - - Kaufen - Acheter Objet - Compra Oggetto - Comprar Item - Kup objekt - 买东西 - - - Sell Item - Navrhujeme Item - Vender - - Verkaufen - Vendre Objet - Vendi Oggetto - Vender Item - Sprzedaj obiekt - 卖东西 - - - - - Spawn Selection - potěr Selection - Selección de Spawn - - Aufwachpunkt Auswahl - Sélection du Spawn - Selezione Spawn - Locais para Começar - Wybierz punkt odrodzenia - 选择重生点 - - - Spawn - Potěr - Spawn - - Aufwachen - Spawn - Spawn - Começar - Odradzanie - 重生 - - - Current Spawn Point - Aktuální potěr Point - Punto de Spawn Actual - - Aktueller Aufwachpunkt - Point de Spawn Actuel - Punto di Spawn corrente - Ponto de início Atual - Aktualny punkt odrodzenia - 目前的重生点 - - - You have spawned at - Jste třel - Has aparecido en - - Du bist aufgewacht in - Tu as spawn à - Ti trovi a - Você irá começar em - Odrodziłeś się w - 你重生了 - - - - - Give Ticket - Dejte Ticket - Dar Tiquete - - Ticket geben - Verbaliser - Dai Multa - Dar Multa - Wystaw mandat - 开据罚单 - - - Pay Ticket - Pay vstupenek - Pagar Tiquete - - Ticket bezahlen - Payer l'amende - Paga Multa - Pagar Multa - Zapłać mandat - 支付罚款 - - - Refuse Ticket - odmítnout Ticket - Denegar Tiquete - - Ticket ablehnen - Refuser l'amende - Rifiuta Multa - Recusar Multa - Odmów przyjęcia mandatu - 拒绝缴款 - - - - - Trunk Inventory - kufr Inventory - Inventario del Vehículo - - Kofferraum - Coffre - Inventario Veicolo - Inventário do Veículo - Zawartość - 库存清单 - - - Player Inventory - hráč Inventory - Inventario del Jugador - - Spielerinventar - Inventaire Joueur - Inventario Giocatore - Inventário do Jogador - Wyposażenie gracza - 玩家清单 - - - Take - Vzít - Sacar - - Nehmen - Récupérer - Prendi - Pegar - Weź - 取出 - - - Store - Obchod - Guardar - - Lagern - Déposer - Deposita - Depositar - Schowaj - 存储 - - - - - APD Wanted List - LAPD seznamu hledaných - Lista de Busqueda - - Fahndungsliste - Interpol - Lista Ricercati - Lista APD Poszukiwane - Lista de Procurados - 通缉名单 - - - Pardon - Pardon - Perdonar - - Erlassen - Pardonner - Perdona - Pardon - Perdão - 赦免 - - - Add - Přidat - Ajouter - Agregar - Aggiungere - Dodaj - - Adicionar - Hinzufügen - 添加 - - - Wanted People - chtěl, aby lidé - Personnes recherchées - Gente Buscada - La gente voleva - Ludzie chcieli - - Pessoas Procuradas - Gesuchte Personen - 通缉犯 - - - Citizens - občané - Citoyens - Ciudadanos - cittadini - Obywatele - - Cidadãos - Bürger - 公民 - - - Crimes - Zločiny - Crimes - Crimenes - crimini - Zbrodnie - - Crimes - Verbrechen - 罪犯 - - - %1 has been added to the wanted list. - %1 byl přidán do seznamu hledaných. - %1 a été ajouté à la liste des personnes recherchées. - %1 ha sido agregado a la Lista de Busqueda. - %1 è stato aggiunto alla lista dei ricercati. - %1 został dodany do listy pożądanego. - - %1 foi adicionado a lista de procurados. - %1 wurde zur Fahndungsliste hinzugefügt. - %1 已添加到通缉名单. - - - %1 count(s) of %2 - Počet%1 (y) z %2 - %1 chef (s) de %2 - %1 cuenta(s) de %2 - %1 count (s) del %2 - %1 count (ów) z %2 - - %1 contagem(s) de %2 - %1 Vergehen: %2 - %1 违法(次数) %2 - - - Current Bounty Price: $%1 - Aktuální Bounty Cena: $ %1 - Prix de la prime: $%1 - Recompensa Actual: $%1 - Corrente Bounty Prezzo: $%1 - Aktualny Bounty Cena: $%1 - - Atual recompensa: R$%1 - Aktuelle Prämie: $%1 - 目前的赏金: $%1 - - - - - Salema - Salema - Salema - - Sardine - Saumon - Salmone - Salema - Salema - 加州异鳍石鲈 - - - Ornate - Vyšperkovaný - Ornate - - Kaiserfisch - Doré - Orata - Ornamentado - Dorada - 橙带蝴蝶鱼 - - - Mackerel - Makrela - Verdel - - Makrele - Maquereau - Sgombro - Cavalinha - Makrela - 鲭鱼 - - - Tuna - Tuňák - Atún - - Thunfisch - Thon - Tonno - Atum - Tuńczyk - 金枪鱼 - - - Mullet - cípal - Lisas - - Meerbarbe - Mullet - Triglia - Tainha - Cefal - 梭鱼 - - - Cat Shark - Cat žralok - Pez Gato - - Katzenhai - Poisson Chat - Squalo - Tubarão Gato - Rekin - 鲨鱼 - - - Rabbit - Králičí - Conejo - - Hase - Lapin - Coniglio - Coelho - Zając - 兔子 - - - Chicken - Kuře - Gallina - - Hühnchen - Poulet - Pollo - Frango - Kurczak - 雏鸡 - - - Rooster - Kohout - Gallo - - Hähnchen - Coq - gallo - galo - kogut - 公鸡 - - - Goat - Koza - Cabra - - Ziege - Chèvre - Capra - Cabra - Koza - 山羊 - - - Sheep - Ovce - Obeja - - Schaf - Mouton - pecora - ovelha - Owca - 绵羊 - - - Turtle - Želva - Tortuga - - Schildkröte - Tortue - Tartaruga - Tartaruga - żółw - 乌龟 - - - - - You do not have $%1 for a %2 - Nemáte $%1 pro%2 - No tienes $%1 para una %2 - - Du hast keine $%1 für einen %2. - Vous n'avez pas %1$ pour cet élément : %2 - Non hai $%1 per $2 - Você não tem R$%1 para %2 - Nie masz $%1 na %2 - 你没有 $%1 支付 %2 - - - You bought a %1 for $%2 - Koupil sis%1 pro $ %2 - Comprastes una %1 por $%2 - - Du hast einen %1 für $%2 gekauft. - Vous avez acheté : %1 pour %2$ - Hai comprato un %1 per $%2 - Você comprou %1 por R$%2 - Kupiłeś %1 za $%2 - 你购买 %1 花费 $%2 - - - %1 was arrested by %2 - %1 byl zatčen%2 - %1 fue arrestado por %2 - - %1 wurde von %2 verhaftet. - %1 a été arrêté par %2 - %1 è stato arrestato da %2 - %1 foi preso por %2 - %1 został aresztowany przez %2 - %1 被 %2 逮捕 - - - You caught a %1 - chytil jste%1 - Atrapastes un %1 - - Du hast einen %1 gefangen. - Vous avez attrapé un %1 - Hai pescato %1 - Você pegou %1 - Złapałeś %1 - 你逮捕了 %1 - - - Gutting %1 - Kuchání%1 - Eviscerando %1 - - %1 ausnehmen - Eviscération de %1 - eviscerazione %1 - evisceração %1 - Patroszenie %1 - 去除 %1 的内脏 - - - You have collected some raw %1 meat - Nasbíráte nějaké syrové maso %1 - Has recolectado carne cruda de %1 - - Du hast rohes %1 Fleisch erhalten. - Vous avez récolté quelques morceaux de %1 cru - You have collected some raw %1 meat - You have collected some raw %1 meat - You have collected some raw %1 meat - 你已经从 %1 收集生肉 - - - You have taken some turtle meat - Jste si vzali nějaké želví maso - Has tomado carne de tortuga. - - Du hast etwas Schildkrötenfleisch bekommen. - Vous avez récupéré un peu de viande de tortue - Hai raccolto della carne di tartaruga - Você pegou carne de tartaruga - Wziąłeś trochę mięsa żółwia - 你吃了一些海龟肉 - - - You have earned $%1 - Jste získali $%1 - Has ganado $%1 - - Du hast $%1 verdient. - Vous avez gagné %1$ - Hai guadagnato $%1 - Você ganhou R$%1 - Otrzymałeś $%1 - 你赚了 $%1 - - - Dropping fishing net... - Pád rybářská síť ... - Tirando red de pesca... - - Fischernetz auswerfen... - Déploiement du filet de pêche... - Posizionando la rete da pesca... - Jogando rede de pesca... - Rzucam sieć... - 撒下鱼网... - - - Didn't catch any fish... - Nezachytil žádnou rybu ... - No atrapastes peces... - - Keinen Fisch gefangen... - Vous n'avez pas réussi à attraper de poisson... - Non hai pescato nulla... - A rede voltou vazia... - Nic nie złapałeś... - 没有捕到任何鱼... - - - Fishing net pulled up. - Rybářská síť vytáhl nahoru. - Recogistes la red. - - Fischernetz eingeholt. - Le filet de pêche a été entièrement relevé. - Rete da pesca recuperata. - A rede de pesca foi recolhida - Sieć wciągnięta. - 拉起渔网。 - - - Your inventory space is full. - Váš inventář prostor je plný. - No tienes espacio en tu inventorio. - - Dein Inventar ist voll. - Vous n'avez plus de place dans votre inventaire. - Il tuo inventario è pieno. - Seu inventário está cheio - Nie masz więcej miejsca. - 您的库存空间已满。 - - - Gathering %1... - Sběr%1 ... - Recolectando %1... - - Sammle %1... - Ramassage de %1... - Raccogliendo %1 - Coletando %1... - Zbierasz %1 - 采集 %1... - - - You have sold a %1 for $%2 - Jste prodal%1 pro $ %2 - Has vendido un %1 por $%2 - - Du hast einen %1 für $%2 verschrottet. - Vous avez vendu un(e) %1 pour $%2 - Hai venduto un %1 per %2$ - Você vendeu %1 por R$%2 - Sprzedałeś %1 za $%2 - 你卖掉 %1 赚了 $%2 - - - You have picked %1 %2 - Jste si vybrali% %1 2 - Has recogido %1 %2 - - Du hast %1 %2 aufgenommen. - Vous avez ramassé : %1 %2 - Hai trovato %1 %2 - Você pegou %1 %2 - Podniosłeś %1 %2 - 你采集了 %1 个 %2 - - - You have collected some %1 - Jste nasbírali řadu%1 - Has recolectado %1 - - Du hast etwas %1 gesammelt. - Vous avez récolté %1 - Hai raccolto %1 - Você coletou %1 - Wziąłeś %1 - 你采集了一些 %1 - - - You are to deliver this package to %1. - Jste doručit tento balíček %1 - Debes llevar este paquete a %1 - - Du musst dieses Paket bei %1 abliefern. - Vous avez livré ce paquet à %1 - Devi consegnare questo pacco al %1 - Você deverá entregar esse pacote para %1 - Dostarcz tę przesyłkę do %1 - 你要递送这个包裹到 %1。 - - - Deliver this package to %1. - Doručit tento balíček %1 - LLeva el paquete a: %1 - - Liefere dieses Paket bei %1 ab. - Livrer ce paquet à %1. - Consegna questo pacco al %1 - Entregue esse pacote para %1 - Dostarcz przesyłkę do %1 - 把这个包裹送到 %1。 - - - You failed to deliver the package because you died. - Nepodařilo se vám doručit balíček, protože jsi zemřela. - Fallastes la misión, porque moristes. - - Da du gestorben bist, hast du es nicht geschafft das Paket abzuliefern. - Vous êtes mort, livraison annulée. - Compra Oggetto - Você falhou na tarefa de entrega pois você morreu. - Nie dostarczyłeś przesyłki z uwagi na to że zmarłeś. - 因为你死了,所以你没能投递包裹。 - - - You do not have $%1 to be healed - Nemáte $%1, aby se léčil - No tienes $%1 para ser curado - - Du hast keine $%1, um behandelt zu werden. - Vous n'avez pas $%1 pour être soigné. - Non hai $%1 per essere curato - Você não tem R$%1 para ser curado - Nie masz $%1 na leczenie - 你没有 $%1 治疗费 - - - You do not need to be healed! - Nemusíte být uzdraven! - Vous êtes déjà en pleine forme ! - Usted no necesita ser curado! - Non è necessario essere guarito! - Nie trzeba się wyleczyć! - Você não precisa ser curado! - Вам не нужно быть исцелены! - Du brauchst keine Behandlung! - 你不需要治疗! - - - Spend $%1 to be fully healed? - Útrata $%1 musí být zcela vyléčit? - Donner $%1 pour être complètement guéri ? - Gastar $%1 para ser curado por completo? - Spendere $%1 di essere completamente guarito? - Wydać $%1 w pełni uzdrowiony? - Gastar US $%1 para ser totalmente curado? - Потратит $%1, чтобы быть полностью зажила? - Willst du dich für $%1 vollständig behandeln lassen? - 花费 $%1 痊愈? - - - Doctor - Doktor - Docteur - Médico - Medico - Lekarz - Médico - Врач - Arzt - 医疗人员 - - - Please stay still - Prosím, zůstat v klidu - Por favor, no te muevas - - Bitte bewege dich nicht! - Ne bougez pas - Attendi pazientemente - Fique parado por favor - Proszę się nie ruszać - 请不要动 - - - You need to be within 5m while the doctor is healing you - Musíte být v rámci 5m, zatímco lékař vás hojení - Debes estar a 5m mientras que te curan. - - Du musst in der Nähe vom Arzt bleiben, damit er dich behandeln kann. - Vous devez être à moins de 5m du médecin pendant qu'il vous soigne. - Devi restare entro 5m dal dottore per essere curato - Você tem que estar a 5m para o médico curá-lo - Musisz być w pobliżu doktora gdy ten cię leczy - ok 5m - 医疗人员在治疗你的时候,你必须在5米以内 - - - You are now fully healed. - Ty jsou nyní plně uzdravil. - Estas curado! - - Du wurdest behandelt. - Vous êtes completement soigné. - Sei stato curato completamente. - Sua saúde está perfeita - Zostałeś wyleczony - 你现在痊愈了。 - - - %1 your %2 is being impounded by the police. - %1 Váš%2 je zabaveno policií. - %1 tu %2 esta siendo embargado por la policía. - - %1 dein %2 wird von der Polizei beschlagnahmt! - %1, votre %2 est en train d'être envoyé à la fourrière par la police. - %1 il tuo %2 sta per essere sequestrato dalla Polizia. - %1 seu %2 está sendo apreendido pela Polícia - %1 twój %2 jest usuwany przez Policję - %1 的 %2 正在被警察扣留。 - - - Impounding Vehicle - vzdouvání Vehicle - Embargando Vehículo - - Fahrzeug wird beschlagnahmt - Mise en fourrière - Sequestro Veicolo in corso - Apreendendo veículo - Usuwam pojazd - 扣留载具 - - - Impounding has been cancelled. - Zabavení byla zrušena. - Embargo cancelado. - - Beschlagnahmung abgebrochen. - Mise en fourrière annulée. - Il sequestro è stato annullato. - Ação de apreender foi cancelada - Przerwano usuwanie pojazdu - 扣留已被取消. - - - You have impounded a %1\n\nYou have received $%2 for cleaning up the streets! - Jste zabaveno a %1 \n\n jste obdržel $%2 pro čištění ulic! - Has embargado un %1\n\nHas recibido $%2 por limpiar las calles! - - Du hast einen %1 beschlagnahmt\n\nDu hast $%2 für das Aufräumen der Straßen bekommen! - Vous avez mis en fourrière un(e) %1\n\nVous avez reçu $%2. - Hai sequestrato un %1\n\nHai ricevuto $%2 per aver mantenuto l'ordine nelle strade! - Você apreendeu %1\n\nVocê recebeu R$%2 por deixar as ruas mais seguras! - Usunąłeś %1\n\n Otrzymujesz $%2 za oczyszczanie mapy - 你扣留了 %1\n\你收到了 $%2 扣留费! - - - %1 has impounded %2's %3 - %1 byl odtažen% %2 3 je - %1 a embargado el %3 de %2 - - %1 hat %2's %3 beschlagnahmt. - %1 a mis en fourrière le %3 de %2. - %1 ha sequestrato il %2 di %3 - %1 apreendeu %3 de %2 - %1 usunął %2's %3 - %1 扣留了 %2 的 %3 - - - You paid $%1 for impounding your own %2. - Zaplatil jste $%1 pro vzdouvání vlastní %2. - Vous avez payé $%1 pour la mise en fourrière de votre propre %2. - Has pagado $%2 para embargar tu propio %1. - Hai pagato $%1 per sequestro la propria %2. - Zapłaciłeś $%1 do zatrzymywania własną %2. - - Du hast $%1 bezahlt, weil du dein eigenen %2 beschlagnahmt hast. - Você pagou R$%1 para guardar seu próprio %2. - 你支付 $%1 取出了被扣留的 %2. - - - Abort available in %1 - Přerušit k dispozici v %1 - Aborto disponible en %1 - - Déconnexion disponible dans %1 - Abbruch möglich in %1. - Abbandona disponibile in %1 - Abortar disponível em %1 - Możesz przerwać za %1 - 距离下线时间 %1 - - - This vehicle is already mining - Toto vozidlo je již dobývání - Este Vehículo ya esta minando - - Dieses Fahrzeug ist bereits am Abbauen. - Ce véhicule est déjà en train de miner - Questo veicolo sta già estraendo risorse - Esse veículo já está minerando - Pojazd jest w trakcie wydobycia surowców - 载具已经在开采了 - - - The vehicle is full - Vozidlo je plná - El vehículo esta lleno! - - Das Fahrzeug ist voll. - Le véhicule est plein. - Il veicolo è pieno - O veículo está cheio. - Pojazd jest pełny - 载具库存已满 - - - You are not near a resource field - Nejste v blízkosti oblasti zdrojů - No estas cerca de un campo de recursos. - - Du bist nicht in der Nähe eines Ressourcenfeldes. - Vous n'êtes pas à proximité d'un champ de ressources. - Non sei vicino ad un campo risorse - Você não está próximo ao recurso - Nie jesteś w pobliżu pola surowców - 你不在资源区域附近 - - - You cannot turn the vehicle on when mining - Nemůžete otočit vozidlo o tom, kdy výtěžek - No puedes girar el vehículo mientras esta minando - - Du kannst das Fahrzeug nicht starten, solange es am Abbauen ist. - Le moteur doit être arrêté pour que le véhicule puisse miner - Non puoi accendere il veicolo mentre estrae risorse - Você não pode ligar o veículo enquanto minera - Nie możesz poruszać pojazdem w trakcie wydobycia. - 开采时不能打开载具 - - - The Device is mining... - Zařízení je důlní ... - El Dispositivo esta minando... - - Das Fahrzeug baut ab... - Le véhicule est en train de miner... - Il veicolo sta estrando risorse... - A máquina está minerando... - Trwa wydobycie... - 设备正在开采... - - - Completed cycle, the device has mined %1 %2 - Dokončena cyklus, přístroj se těžil% %1 2 - Ciclo completado el dispositivo ha minado %1 %2 - - Sammeln beendet, das Fahrzeug hat %1 %2 abgebaut. - Cycle terminé, le véhicule a miné %1 %2 - Ciclo completato, il veicolo ha raccolto %1 %2 - Ciclo completo, a máquina minerou %1 %2 - Urządzenie wydobyło %1 %2 - 完成一个开采周期,设备已开采 %1 %2 - - - Vehicle is out of fuel - Vozidlo je mimo pohonné hmoty - El vehículo no tiene gasolina. - - Das Fahrzeug hat keinen Treibstoff mehr. - Le véhicule n'a plus de carburant. - Il veicolo è senza carburante - O veículo está sem combustível - Brak paliwa w pojezdzie - 载具燃料不足 - - - You have packed up the spike strip. - Jste sbalil spike proužek. - Has agarrado la Barrera de Clavos. - - Du hast das Nagelband eingepackt. - Vous avez récupéré la herse. - Hai raccolto una striscia chiodata. - Você recolheu o tapete de espinhos. - Kolczatka zwinięta - 你铺设了钉刺带。 - - - %1 has been placed in evidence, you have received $%2 as a reward. - %1 byl umístěn v důkazu, jste obdrželi $%2 jako odměnu. - %1 ha sido colocado en evidencias, has recibido $%2 como recompensa. - - %1 hat Beweise hinterlassen, als Belohnung erhälst du $%2. - Vous avez mis sous scellé la drogue de %1, vous avez reçu $%2 comme récompense. - E' stata trovata della merce illegale: %1, hai ricevuto $%2 come ricompensa. - %1 foi pego como evidência, você recebeu R$%2 como recompensa. - %1 umieszczony w dowodach, otrzymujesz w nagrodę $%2 - %1 已经被送入监狱,你已经收到了 $%2 作为奖励. - - - You have picked up $%1 - Jste zvedl $%1 - Has recogido $%1 - - Du hast $%1 aufgehoben. - Vous avez ramassé $%1 - Hai raccolto $%1 - Você pegou R$%1 - Podniosłeś $%1 - 你捡到了 $%1 - - - You must wait at least 3 minutes in jail before paying a bail. - Musíte počkat nejméně 3 minuty ve vězení předtím, než platit kauci. - Debes esperar un minimo de 3 minutos en la cárcel antes de poder pagar la fianza. - - Du musst mindestens 3 Minuten lang im Gefängnis bleiben, bevor du die Kaution beantragen kannst. - Vous devez attendre au moins 3 minutes en prison avant de pouvoir payer votre caution. - Devi aspettare almeno 3 minuti in prigione prima di poter pagare la cauzione. - Você precisa esperar pelo menos 3 minutos antes de poder pagar fiança. - Musisz poczekać conajmniej 3 minuty w więzieniu zanim zapłacisz kaucję. - 在保释之前,你必须至少在监狱里呆3分钟。 - - - You do not have $%1 in your bank account to pay bail. - Nemáte $%1 z vašeho bankovního účtu platit kauci. - No tienes $%1 en tu cuenta de banco para pagar la fianza! - - Du hast keine $%1 auf deinem Bankkonto, um die Kaution zu bezahlen. - Vous n'avez pas $%1 dans votre compte en banque pour payer la caution. - Non hai $%1 nel tuo conto in banca per poter pagare la cauzione. - Você não tem R$%1 em sua conta bancária para pagar a fiança. - Nie masz $%1 na koncie aby zapłacić kaucję. - 你的银行账户没有 $%1 的金额。 - - - %1 has posted bail! - %1 byl vyslán na kauci! - %1 a pagado la fianza! - - %1 hat die Kaution bezahlt! - %1 a payé sa caution ! - %1 ha pagato la cauzione! - %1 pagou a fiança! - %1 wpłacił kaucję! - %1 已保释! - - - There isn't a vehicle nearby... - Není vozidlo v blízkosti ... - No hay un vehículo cerca... - - Es ist kein Fahrzeug in der Nähe... - Il n'y a pas de véhicule à proximité... - Non c'è alcun veicolo qui vicino... - Não existe um veículo por perto... - W pobliżu nie ma pojazdu... - 附近没有载具... - - - You can't chop a vehicle while a player is near! - Nemůžeš sekat vozidla, zatímco hráč je blízko! - Vous ne pouvez pas vendre un véhicule alors que son propriétaire est à proximité ! - No puedes vender este vehículo mientras hay un jugador cerca! - Non si può rubare un veicolo mentre un giocatore è vicino! - Nie można posiekać pojazd podczas gdy gracz jest w pobliżu! - - Você não pode usar o desmanche enquanto um jogador está próximo! - Du kannst kein Fahrzeug beim Schrotthändler verschrotten, während ein Spieler in der Nähe ist! - 当玩家靠近时,你不能盗窃载具! - - - %1 was restrained by %2 - %1 byl omezen%2 - %1 fue retenido por %2 - - %1 wurde von %2 festgenommen - %1 a été menotté par %2 - %1 è stato ammanettato da %2 - %1 foi imobilizado por %2 - %1 został skuty przez %2 - %1 被 %2 约束 - - - Searching... - Hledám ... - Buscando... - - Durchsuche... - Recherche... - Ricerca... - Revistando... - Szukam... - 搜查... - - - Couldn't search the vehicle - Nemohli vyhledávat na vozidlo - No se pudo buscar el vehículo. - - Das Fahrzeug konnte nicht durchsucht werden! - Impossible de fouiller le véhicule. - Impossibile ispezionare il veicolo - Você não pode revistar o veículo - Nie można przeszukać pojazdu - 不能搜查载具 - - - Your illegal items have been put into evidence. - Vaše nelegálních položky byly uvedeny do důkazy. - Tus objetos ilegales fueron confiscados. - - Deine illegalen Gegenstände wurden als Beweismittel eingezogen. - Vos objets illégaux ont été mis sous scellé. - I tuoi articoli illegali sono stati messi sotto sequestro. - Seus itens ilegais foram postos em evidência. - Twoje nielegalne pozycje zostały wprowadzone do dowodów. - 你的非法物品被查获。 - - - This vehicle has no information, it was probably spawned in through cheats. \n\nDeleting vehicle. - Toto vozidlo nemá žádné informace, to bylo pravděpodobně třel dovnitř podvodníky. \ In \ Odstranění vozidla. - Este vehículo no tiene informacion, posiblemente fue creado atravez de Cheats \n\nBorrando vehículo. - - Über das Fahrzeug gibt es keine Informationen, es wurde vermutlich durch Cheats gespawnt. \n\nLösche das Fahrzeug. - Ce véhicule ne dispose d'aucune information, il a probablement été créé par un hackeur. \n\ Suppression du véhicule. - Il veicolo è privo di identificativi, probabilmente è stato creato mediante cheat. \n\nCancellazione veicolo. - Esse veículo não tem informações, é provável que ele tenha sido criado por um cheater.\n\nDeletando veículo. - Pojazd bez informacji servera, prawdopodobnie umieszczony przez hakera \n\n usuwam pojazd. - 这载具没有任何信息, 它可能是通过作弊产生的. \n\n删除载具。 - - - You are already doing an action. Please wait for it to end. - Ty jsou již dělá akci. Počkejte prosím, až to skončí. - Ya estas haciendo una acción, espera a que termine. - - Du führst bereits eine Aktion aus. Bitte warte, bis diese beendet ist. - Vous faites déjà une action. Merci d'attendre la fin de celle-ci. - Stai già compiendo un'azione, attendi che finisca. - Você já está executando uma ação. Por favor espere até que ela acabe. - Aktualnie wykonujesz jakąś akcję poczekaj aż skończysz. - 你已经在行动了.请等待结束. - - - %1 was unrestrained by %2 - %1 byl živelný%2 - %1 fue soltado por %2 - - %1 wurde von %2 freigelassen. - %1 a été démenotté par %2. - %2 ha tolto le manette a %1 - %1 foi liberado por %2 - %1 został rozkuty przez %2 - %1 摆脱了 %2 的约束 - - - %1 has robbed %2 for $%3 - %1 oloupil%2 na $ %3 - %1 le ha robado $%3 a %2 - - %1 hat $%3 von %2 geraubt. - %1 a volé %2 pour $%3. - %1 ha rapinato %2 di $%3 - %1 roubou R$%3 de %2 - %1 obrabował $%2 na $%3 - %1 抢劫了 %2 金钱 $%3 - - - %1 doesn't have any money. - %1 nemá žádné peníze. - %1 No tiene dinero. - - %1 hat kein Geld. - %1 n'a pas d'argent. - %1 non ha alcun soldo. - %1 não tem nenhum dinheiro. - %1 nie ma pieniędzy. - %1 身无分文。 - - - %1 was tazed by %2 - %1 byl tased%2 - %1 fue paralizado por %2 - - %1 wurde von %2 getazert. - %1 a été tazé par %2. - %1 è stato taserato da %2 - %1 foi eletrocutado por %2 - %1 został potraktowany paralizatorem przez %2 - %1 被 %2 约束 - - - A vehicle was searched and has $%1 worth of drugs / contraband. - Vozidlo byl prohledán a má $%1 v hodnotě drog / kontrabandu. - Un vehículo fue buscado y se econtro $%1 en drogas / contrabando. - - Ein Fahrzeug wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. - Un véhicule venant d'être fouillé avait $%1 de drogue / contrebande. - Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. - O veículo foi revistado e tem R$%1 em drogas ou contrabandos - Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 - 搜查载具查获价值 $%1 的毒品/违禁品。 - - - A container of house was searched and has $%1 worth of drugs / contraband. - Kontejner domu byl prohledán a má $%1 v hodnotě drog / kontrabandu. - Un contenedor fue buscado y se econtro $%1 en drogas / contrabando. - - Ein Container im Haus wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. - Un conteneur de maison venant d'être fouillé avait $%1 de drogue / contrebande. - Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. - O veículo foi revistado e tem R$%1 em drogas ou contrabandos - Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 - 搜查房子存储箱查获价值 $%1 的毒品/违禁品. - - - You have been pulled out of the vehicle. - Byli jste vytáhl z vozu. - Te han sacado del vehículo - - Du wurdest aus dem Fahrzeug gezogen. - Vous avez sorti les personnes du véhicule. - Sei stato estratto dal veicolo - Você foi retirado do veículo - Zostałeś wyciągnięty z pojazdu - 你从车里被拖出来了。 - - - %1 has gave you %2 %3. - %1 vám již dal% %2 3. - %1 te ha dado %2 %3 - - %1 hat dir %2 %3 gegeben. - %1 vous a donné %2 %3. - %1 ti ha dato %2 %3 - %1 lhe deu %2 %3 - %1 dał ci %2 %3 - %1 给了你 %2 %3. - - - %1 has given you $%2. - %1 vám dal $ %2. - %1 te ha dado $%2 - - %1 hat dir $%2 gegeben. - %1 vous a donné $%2. - %1 ti ha dato $%2 - %1 lhe deu R$%2 - %1 dał ci $%2 - %1 给了你 $%2. - - - Sending information to server please wait..... - Odesílání informací serveru čekejte prosím ... - Mandando información, por favor espere... - - Sende Informationen an den Server, bitte warten..... - Envoi d'informations au serveur, patientez s'il vous plait... - Invio delle informazioni al server, attendere prego...... - Enviando informações para o servidor, seja paciente..... - Przesyłam informacje na server poczekaj .... - 发送信息到服务器,请稍候..... - - - An action is already being processed... - Akce je již zpracován ... - Una acción ya esta siendo procesada... - - Es wird bereits eine Aktion ausgeführt... - Une action est déjà en cours de traitement... - Un'azione è già in corso... - Você já está realizando um ação... - Akcja jest w trakcie wykonywania... - 正在处理操作... - - - You're doing it too fast! - Děláte to příliš rychle! - Moins vite entre chaque action ! - Lo estas haciendo muy rapido! - Lo stai facendo troppo veloce! - - Du bist ganz aus der Puste! Warte ein paar Sekunden! - Você está fazendo isso muito rápido! - Za szybko zwolnij ! - 你做得太快了! - - - You don't have enough space for that amount! - Nemáte dostatek prostoru pro tuto částku! - No tienes suficiente espacio para eso! - - Du hast für diese Menge nicht genug Platz! - Vous n'avez pas assez de place pour cette quantité ! - Non hai abbastanza spazio per quel quantitativo! - Você não tem espaço suficiente para guardar o item - Nie masz tyle miejsca! - 你没有足够的空间存放物品! - - - You don't have that much money! - Nemáte tolik peněz! - No tienes tanto dinero! - - Du hast nicht so viel Geld! - Vous n'avez pas assez d'argent ! - Non hai tutti quei soldi! - Você não tem todo esse dinheiro! - Nie masz tyle pieniędzy! - 你没有那么多钱! - - - You are not a cop. - Ty nejsi polda. - No eres policía. - - Du bist kein Polizist. - Vous n'êtes pas policier. - Non sei un poliziotto. - Você não é um Policial. - Nie jesteś policjantem - 你不是警察。 - - - You don't have enough room for that item. - Nemáte dostatek prostoru pro danou položku. - No tienes el espacio suficiente. - - Du hast nicht genug Platz für den Gegenstand. - Vous n'avez pas assez de place. - Non hai abbastanza spazio per quell'oggetto. - Você não tem espaço suficiente no seu inventário. - Nie masz wystarczająco miejsca na tą rzecz. - 你没有足够的空间存放这个物品。 - - - You need $%1 to process without a license! - Musíte $%1 bez povolení ke zpracování! - Necesitas $%1 par procesar sin una licencia! - È necessario $%1 a processo senza patente! - - Du benötigst $%1, um ohne Lizenz verarbeiten zu können! - Vous devez payer $%1 pour traiter sans licence ! - Você precisa de R$%1 para processar sem uma licença! - Potrzebujesz $%1 w celu przetworzenia bez licencji - 你未取得许可需要支付 $%1 才能加工! - - - You don't have enough items! - Ty nemají dostatek položku! - No tienes suficientes objetos! - Non disponi di abbastanza materiale grezzo! - Nie masz wystarczająco dużo rzeczy! - - Vous n'avez pas assez d'items ! - Você não tem itens suficientes! - Du hast nicht genug Materialien! - 你没有足够的物品! - - - You have processed your item(s)! - Jste zpracujeme vaši položku (y)! - Has procesado tus objeto(s) - - Vous avez traité vos objet(s) ! - Hai processato i tuoi oggetti! - Przetworzeniu swój przedmiot (y)! - Você processou seu(s) item(s) - Du hast deine Materialien verarbeitet! - 你已经加工了你的物品! - - - You can't rapidly use action keys! - Nemůžete rychle využít akčních kláves! - No puedes usar Keys de Acciones tan rápido! - - Die Aktionstaste kann nicht so schnell hintereinander genutzt werden! - Vous ne pouvez pas utiliser rapidement les touches d'action ! - Non puoi riusare così rapidamente il tasto azione! - Você não pode usar a tecla de ação repetidamente! - Za szybko używasz przycisku akcji! - 你不能快速点击按键! - - - You do not have enough funds in your bank account. - Nemáte dostatek prostředků na váš bankovní účet. - No tienes tanto dinero en tu cuenta de banco. - - Du hast nicht genug Geld auf deinem Bankkonto. - Vous n'avez pas assez de fonds dans votre compte en banque. - Non hai abbastanza fondi nel tuo conto in banca. - Você não tem todo esse dinheiro em sua conta bancária. - Nie masz wystarczających środków w banku. - 你的银行账户里没有足够的资金。 - - - Couldn't add it to your inventory. - Nemohl ji přidat do svého inventáře. - No se pudo agregar a tu inventario. - - Es konnte nichts zu deinem Inventar hinzugefügt werden. - Impossible d'ajouter cela à votre inventaire. - Non puoi aggiungerlo al tuo inventario. - Não foi possível adicionar o item ao seu inventário - Nie można dodać tego do twojego wyposażenia - 无法将其添加到你的库存中。 - - - You haven't eaten anything in awhile, You should find something to eat soon! - Jste nejedli nic za čas, byste měli najít něco k jídlu brzy! - No has comido nada en un largo rato. Deberías buscar algo de comer! - - Du hast schon eine Weile nichts mehr gegessen! Du solltest langsam etwas zum Essen suchen! - Vous n'avez rien mangé depuis un certain temps, vous devriez trouver quelque chose à manger ! - E' da tempo che non mangi qualcosa, dovresti trovare qualcosa da mettere sotto i denti in fretta! - Você não come a bastante tempo. Ache algo para comer logo!. - Zaczynasz być głodny, poszukaj czegoś do jedzenia! - 你有一阵子没吃东西了,你应该马上找点吃的! - - - You are starting to starve, you need to find something to eat otherwise you will die. - Můžete se začínají hladovět, budete muset najít něco k jídlu jinak zemřete. - Te esta dando mucha, mucha hambre. Come algo o moriras! - - Du hast Hunger! Du solltest schnell etwas essen oder du wirst verhungern. - Vous commencez à mourir de faim, vous devez trouver quelque chose à manger, ou vous mourrez. - Ti stai indebolendo, devi trovare qualcosa da mangiare o morirai. - Você está começando a ficar famindo. Se você não comer irá morrer de fome. - Długo nie jadłeś, zjedz coś lub zginiesz z głodu. - 你感觉饿了,你需要找点东西吃,否则你会死的。 - - - You are now starving to death, you will die very soon if you don't eat something. - Nyní jste hladoví k smrti, zemřete velmi brzy, pokud nemáte něco jíst. - Estas a punto de morir de hambre, busca comida rápido! - - Du bist am Verhungern! Du wirst sterben, wenn du nichts zum Essen findest! - Vous êtes en train de mourir de faim, vous allez mourir très bientôt si vous ne mangez pas quelque chose. - Stai perdendo le forze, se non mangi qualcosa in fretta morirai. - Você está morrendo de fome, coma algo ou irá morrer. - Zaczynasz słabnąć z głodu zjedz coś lub zginiesz !!! - 你现在很饿,如果你不吃东西,很快就会死的。 - - - You have starved to death. - Jste hladem. - Te has muerto de hambre. - - Du bist verhungert! - Vous êtes mort de faim. - Sei morto per la fame. - Você morreu de fome - Wygłodziłeś się na śmierć. - 你饿死了。 - - - You haven't drank anything in awhile, You should find something to drink soon. - Nemáte pil nic za čas, byste měli najít něco k pití brzy. - No has tomado nada en un largo rato. Deberías buscar algo de tomar! - - Du hast schon eine Weile nichts mehr getrunken! Du solltest langsam etwas zum Trinken suchen! - Vous n'avez rien bu depuis un certain temps, vous devriez trouver quelque chose à boire ! - E' da parecchio tempo che non bevi qualcosa, dovresti trovare qualcosa da bere. - Você não bebe nada a bastante tempo. Ache algo para beber logo. - Zaczynasz być spragniony, powinienieś poszukać czegoś do picia. - 你有一阵子没喝水了,你应该马上找点喝的。 - - - You haven't drank anything in along time, you should find something to drink soon or you'll start to die from dehydration. - Vy jste nic pil na delší dobu, měli byste si najít něco k pití hned, nebo budete začnou umírat z dehydratace. - Te esta dando mucha, mucha sed. Toma algo o moriras! - - Du hast Durst! Du solltest schnell etwas trinken oder du wirst verdursten! - Vous commencez à mourir de soif, vous allez mourir de soif si vous ne buvez pas. - E' troppo tempo che non bevi qualcosa, dovresti trovare qualcosa da bere o comincerai a disitratarti. - Você está ficando desidratado. Se não beber algo poderá morrer. - Długo nic nie piłeś, napij się czegoś bo możesz zginąć z pragnienia. - 你在一段时间内没有喝水,你要尽快找到喝的,否则你会开始脱水而死。 - - - You are now suffering from severe dehydration find something to drink quickly! - Nyní trpí těžkou dehydratací najít něco k pití rychle! - Estas a punto de morir de desidratación, busca algo de tomar rapido! - - Du bist am Verdursten! Du wirst sterben, wenn du nichts zum Trinken findest! - Vous êtes en train de mourir de soif, vous allez mourir très bientôt si vous ne buvez pas. - Stai soffrendo per una grave deidratazione, trova velocemente qualcosa da bere o morirai! - Você está sofrendo de desidratação. Beba algo ou irá morrer! - Zaczynasz słabnąć z pragnienia, wypij coś inaczej zginiesz!!! - 你现在正严重脱水,快找点喝的! - - - You have died from dehydration. - Jsi zemřel na dehydrataci. - Has muerto de desidratación. - - Du bist verdurstet! - Vous êtes mort de soif. - Sei morto per disidratazione. - Você morreu desidratado. - Umarłeś z uwagi na odwodnienie organizmu - 你死于脱水. - - - You are over carrying your max weight! You will not be able to run or move fast till you drop some items! - Překročili jste přenášení maximální váhu! Nebudete moci spustit nebo přesunout rychle, dokud se kapka některé položky! - Estas cargando tu peso máximo! No puedes correr o moverte rapido hasta que botes algunos objetos! - - Du trägst zu viel bei dir! Du bist nicht in der Lage, zu rennen oder dich schnell zu bewegen, bis du einige Gegenstände abgelegt hast! - Vous êtes surchargé, vous ne pouvez plus courir ou bouger rapidement à moins de lacher quelques objets ! - Stai trasportando oltre il tuo carico massimo! Non riuscirai a correre fino a quando non ti libererai di qualche oggetto! - Você está carregando muito peso. Você não irá conseguir correr ou se mover rapidamente. - Niesiesz maksymalny ciężar, nie będziesz mógł biegać ani szybko chodzić dopuki nie wyrzucisz jakiejś rzeczy - 你超过了最大负重!除非你丢弃一些物品,否则你不能跑或跑得很快! - - - <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Informace o vozidle</t></t><br/><t color='#FFD700'><t size='1.5'>Majitelé</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Info de Vehículo</t></t><br/><t color='#FFD700'><t size='1.5'>Dueños</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Fahrzeuginfo</t></t><br/><t color='#FFD700'><t size='1.5'>Besitzer</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Info du véhicule</t></t><br/><t color='#FFD700'><t size='1.5'>Propriétaires</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Info do Veículo</t></t><br/><t color='#FFD700'><t size='1.5'>Donos</t></t><br/> %1 - <t color='#FF0000'><t size='2'>Informacja o pojeździe</t></t><br/><t color='#FFD700'><t size='1.5'>Właściciel</t></t><br/> %1 - <t color='#FF0000'><t size='2'>载具信息</t></t><br/><t color='#FFD700'><t size='1.5'>车主</t></t><br/> %1 - - - Cannot search that person. - Nelze vyhledávat tuto osobu. - No puedes buscar a esa persona. - - Diese Person kann nicht durchsucht werden! - Vous ne pouvez pas fouiller cette personne. - Impossibile perquisire quella persona. - Essa pessoa não pode ser revistada. - Nie możesz przeszukać tej osoby - 无法搜查此人。 - - - You couldn't effectively seize any items. Try again. - Dalo by se efektivně využily všech položek. Zkus to znovu. - Vous n'avez pas pu saisir les objets. Réessayez. - No pudistes efectivamente, confiscar algun objeto. Prueba de nuevo. - Impossibile perquisire la persona in maniera esaustiva. Riprova. - Nie można skutecznie wykorzystać żadnych przedmiotów. Spróbuj ponownie. - - Você não pode apreender nenhum item, efetivamente. Tente de novo. - Es konnten nicht alle Gegenstände beschlagnahmt werden. Versuche es noch einmal. - 并非所有物品你都能没收。再试一次。 - - - Repairing %1 - Dalo by se efektivně využily všech položek. Zkus to znovu.... - Reparando %1 - - Wird repariert %1... - Réparation de %1 - Riparando %1 - Reparando %1 - Naprawiam %1 - 修复 %1 - - - You can't do that from inside the vehicle! - Můžete to udělat zevnitř vozu! - Vous ne pouvez pas faire ceci à l'intérieur du véhicule ! - No puedes hacer eso desde adentro del vehículo! - Non si può fare dall'interno del veicolo! - - Du kannst das nicht tun während du in einem Fahrzeug sitzt! - Você não pode fazer isso de dentro do veículo! - Nie możesz tego wykonać z wntrza pojazdu! - 你在载具内不能维修! - - - You have repaired that vehicle. - Jste opravil, že vozidlo. - >Has reparado el vehículo. - - Du hast dieses Fahrzeug repariert. - Vous avez réparé ce véhicule. - Hai riparato il veicolo. - Você reparou esse veículo. - Naprawiłeś pojazd - 你修好了载具。 - - - You have mined %2 %1(s). - Jste shromáždili %2 %1(y). - Vous avez recueilli %2 %1(s). - Has recolectado %2 %1(s). - Hai raccolto %2 unità di %1. - - Du hast %2 %1 abgebaut. - Você colheu %2 %1(s). - Zebrałeś %2 %1 (s). - 你开采了 %2 个 %1。 - - - You have gathered %2 %1(s). - Jste shromáždili %2 %1(y). - Vous avez recueilli %2 %1(s). - Has recolectado %2 %1(s). - Hai raccolto %2 unità di %1. - - Du hast %2 %1 gesammelt. - Você colheu %2 %1(s). - Zebrałeś %2 %1 (s). - 你采集了 %2 个 %1。 - - - You can't gather from inside a car! - Nemůžete sbírat zevnitř vozu! - Vous ne pouvez pas ramasser à l'intérieur d'une voiture ! - No puedes recolectar desde adentro de un vehículo! - Non si può raccogliere da dentro una macchina! - - Wie soll das von hier aus gehen? Du sitzt in einem Fahrzeug! - Você não pode colher de dentro do carro! - Nie możesz zbierać z wnętrza samochodu - 你不能从车里搜集! - - - You are not allowed to loot dead bodies. - Ty jsou není dovoleno kořist mrtvoly. - Vous n'êtes pas autorisé à piller des cadavres. - No puedes buscar cuerpos muertos. - Non è consentito a saccheggiare cadaveri. - - Du darfst keine Leichen durchsuchen! - Você não está liberado para lootiar corpos mortos - Nie możesz przeszukiwać martwych ciał - 你不能抢劫尸体。 - - - You have been frozen by an administrator. - Vy byly zmrazeny správcem. - Vous avez été gelé par un administrateur. - Un admin te ha congelado! - Sei stato congelato da un amministratore. - - Du wurdest von einem Admin eingefroren. - Você foi congelado por um administrador - Zostałeś zamrożony przez administratora - 你被管理员冻结了。 - - - You have teleported to your selected position. - Jste teleported do vašeho zvolené poloze. - Vous avez été téléporté à la position sélectionnée. - Te has teletransportado a la posisción seleccionada. - Ti sei teletrasportaato alla posizione selezionata. - Masz teleportowany do wybranej pozycji. - - Você foi teleportado para a posição que você selecionou - Du hast dich zu deiner gewünschten Position teleportiert. - 你已传送到选择的位置。 - - - You have been unfrozen by an administrator. - Byli jste zmrzlá správcem. - Vous avez été dégelé par un administrateur. - Un admin te ha descongelado! - Sei stato scongelato da un amministratore. - - Ein Admin hat dich wieder aufgetaut. - Você foi descongelado por um administrador - Zostałeś odmrożony przez administratora - 你已被管理员解冻。 - - - No one was selected! - Nikdo byl vybrán! - Personne n'a été sélectionné ! - Nadie fue seleccionado! - Nessuno è stato selezionato! - Nikt nie został wybrany! - Ninguém foi selecionado! - Никто не был выбран! - Niemand wurde ausgewählt! - 没有选中玩家! - - - You didn't select an item you wanted to give. - Nevybrali jste položku, kterou chtěl dát. - Vous n'avez pas sélectionné l'objet que vous vouliez donner. - No ha seleccionado el objeto que quiere dar. - non è stato selezionato un elemento che si voleva dare. - Nie wybrano element, który chciał dać. - Você não selecionou um item que você queria dar. - Вы не выбрали пункт, который вы хотели дать. - Du hast keinen Gegenstand ausgewählt, um diesen weitergeben zu können. - 你没有选择你想给的东西。 - - - You didn't enter an actual number format. - Nezadal jste skutečný formát čísla. - Vous n'avez pas saisi un format de nombre réel. - No ha especificado un formato de número real. - Non hai inserito un formato di numero reale. - Nie wprowadzono rzeczywisty format liczb. - Você não inseriu um formato número real. - Вы не ввели фактический формат числа. - Du hast keine echte Zahl eingegeben. - 你没有输入正确的数字格式。 - - - You need to enter an actual amount you want to give. - Musíte zadat skutečnou částku, kterou chcete dát. - Vous devez entrer un montant réel que vous voulez donner. - Es necesario introducir una cantidad real que se desea dar. - È necessario immettere un importo effettivo si vuole dare. - Musisz podać rzeczywistą kwotę, którą chcesz dać. - É necessário introduzir uma quantidade real que você quer dar. - Вам необходимо ввести фактическую сумму, которую вы хотите дать. - Du musst einen tatsächlichen Wert eingeben, um diesen weitergeben zu können. - 你需要输入你想要给的正确金额。 - - - You need to enter an actual amount you want to remove. - Musíte zadat skutečnou částku, kterou chcete odebrat. - Vous devez entrer un montant réel que vous souhaitez supprimer. - Es necesario introducir una cantidad real que se desea eliminar. - È necessario immettere un importo effettivo che si desidera rimuovere. - Musisz podać rzeczywistą kwotę, którą chcesz usunąć. - É necessário introduzir uma quantidade real que você deseja remover. - Вам необходимо ввести фактическую сумму, которую вы хотите удалить. - Du musst einen tatsächlichen Wert eigeben, um diese löschen zu können. - 你需要输入你想要删除的正确金额。 - - - The selected player is not within range. - Zvolená Hráč není v dosahu. - Le joueur sélectionné est hors de portée. - El jugador seleccionado no está dentro del rango. - Il giocatore selezionato non è nel raggio d'azione. - Wybrany gracz nie jest w zasięgu. - O jogador selecionado não está dentro do alcance. - Выбранный игрок не находится в пределах диапазона. - Der ausgewählte Spieler ist nicht in Reichweite. - 选定的玩家不在有效范围内。 - - - Couldn't give that much of that item, maybe you don't have that amount? - Nemohl dát, že velká část této položky, možná nemáte tuto částku? - Impossible de donner cet objet, peut-être que vous n'en n'avez pas autant ? - No se pudo dar a que gran parte de ese elemento, tal vez usted no tiene esa cantidad? - Impossibile dare quella quantità di oggetti. - nie mógł dać, że wiele z tego elementu, może nie masz tej kwoty? - não poderia dar que muito desse item, talvez você não tem essa quantia? - Не могу дать, что большая часть этого пункта, может быть, у вас нет этой суммы? - Du konntest nicht so eine große Menge von diesem Gegenstand weitergeben. Hast du vielleicht nicht genug davon? - 不能给那么多的东西,也许你没有那么多? - - - You gave %1 %2 %3. - Ty jsi dal %1 %2 %3. - Vous avez donné %1 %2 %3. - Diste %1 %2 %3. - Hai dato %1 %2 %3. - Daliście %1 %2 %3. - você deu %1 %2 %3. - Ты дал %1 %2 %3. - Du hast %1 %2 %3 gegeben. - 你给了 %1 %2 %3。 - - - You don't have that much to give! - Nemusíte to hodně dát! - Vous n'avez pas autant à donner ! - Usted no tiene mucho para dar! - Non hai abbastanza oggetti da dare! - Nie ma tego dużo dać! - Você não tem muito para dar! - Вы не так много, чтобы дать! - Du hast nicht so eine große Menge von diesem Gegenstand! - 你没有这么多去给别人! - - - You gave $%1 to %2. - Dal jsi $%1 do %2. - Vous avez donné $%1 à %2. - Usted le dio $%1 a %2. - Hai dato $%1 a %2. - Dałeś $%1 do %2. - Você deu $%1 para %2. - Вы дали $%1 %2. - Du hast $%1 %2 gegeben. - 你将 $%1 给了 %2。 - - - You recently robbed the bank! You can't give money away just yet. - Nedávno jste vyloupil banku! Nemůžete dávat peníze pryč jen zatím. - Vous avez récemment volé la banque! Vous ne pouvez pas donner de l'argent pour l'instant. - Recientemente has robado el banco! No se puede dar dinero por el momento. - Recentemente hai rapinato la banca! Non puoi ancora depositare i soldi nel tuo conto bancario. - Niedawno obrabował bank! Nie można dać pieniądze w błoto jeszcze. - Recentemente, você roubou o banco! Você não pode dar dinheiro fora ainda. - Вы недавно ограбили банк! Вы не можете отдавать деньги только пока. - Du hast kürzlich die Bank ausgeraubt! Du kannst deswegen kein Geld weitergeben. - 你最近抢劫了银行!你还不能现在把钱给出去。 - - - No data selected. - vybrány žádné údaje. - Aucune donnée sélectionnée. - No hay datos seleccionados. - Non ci sono dati selezionati. - Nie wybrano danych. - Não há dados selecionado. - Нет выбранных данных. - Keine Daten ausgewählt. - 没有选择数据。 - - - You did not select a vehicle. - Nevybrali jste vozidlo. - Vous n'avez pas sélectionné de véhicule. - No ha seleccionado un vehículo. - Non hai selezionato un veicolo. - Nie wybrano pojazdu. - Você não selecionou um veículo. - Вы не выбрали автомобиль. - Du hast kein Fahrzeug ausgewählt. - 你没有选择载具。 - - - You do not own any vehicles. - Nevlastníte žádná vozidla. - Vous ne possédez pas de véhicules. - Usted no posee ningún vehículo. - Non possedete tutti i veicoli. - Nie posiada żadnych pojazdów. - Você não possui quaisquer veículos. - Вы не являетесь владельцем каких-либо транспортных средств. - Du besitzt keine Fahrzeuge. - 你没有任何载具。 - - - You did not select a player. - Nevybrali jste si přehrávač. - Vous n'avez pas sélectionné de joueur. - No ha seleccionado un jugador. - Non hai selezionato un giocatore. - Nie wybrano odtwarzacza. - Você não selecionou um jogador. - Вы не выбрали игрока. - Du hast keinen Spieler ausgewählt. - 你没有选择玩家。 - - - You have given %1 keys to your %2. - Dali jste %1 klíče ke svému %2. - Vous avez donné les clés de votre %2 à %1. - Usted ha dado %1 llaves de su %2. - Hai dato a %1 chiavi della vostra %2. - Dałeś %1 klucze do %2. - Você tem dado %1 chaves de sua %2. - Вы дали %1 ключи от %2. - Du hast %1 die Schlüssel zu deinem %2 gegeben. - 你将 %2 的钥匙给了 %1。 - - - %1 has gave you keys for a %2. - %1 has gave you keys for a %2. - %1 a vous a donné les clés de %2. - %1 has gave you keys for a %2. - %1 has gave you keys for a %2. - %1 has gave you keys for a %2. - %1 has gave you keys for a %2. - %1 has gave you keys for a %2. - %1 hat dir die Schlüssel zum %2 gegeben. - %1 给了你一把 %2 的钥匙。 - - - You cannot remove the keys to your house! - Nemůžete odstranit klíče od domu! - Vous ne pouvez pas supprimer les clés de votre maison ! - No se puede quitar las llaves de su casa! - Non è possibile rimuovere le chiavi a casa tua! - Nie można usunąć klucze do swojego domu! - Você não pode remover as chaves de sua casa! - Вы не можете удалить ключи к вашему дому! - Du kannst die Schlüssel zu diesem Haus nicht wegwerfen! - 你不能丢弃你家的钥匙! - - - You did not select anything to remove. - Nevybrali jste nic odstranit. - Vous avez rien sélectionné à supprimer. - No ha seleccionado nada que quitar. - Non hai selezionato niente da rimuovere. - Nie zrobił nic, aby usunąć wybrać. - Você não selecionou nada para remover. - Вы ничего удалить не выбрать. - Du hast nichts zum Entsorgen ausgewählt. - 你没有选择要删除的任何东西。 - - - Could not remove that much of that item. Maybe you do not have that amount? - Nepodařilo se odstranit, že velká část této položky. Možná, že nemáte tuto částku? - Impossible d'en supprimer autant. Peut-être que vous ne disposez pas de ce montant ? - No se pudo eliminar que gran parte de ese elemento. Tal vez usted no tiene esa cantidad? - Impossibile rimuovere quel quantitativo di oggetti. - Nie można usunąć, że wiele z tego elementu. Może nie masz tej kwoty? - Não foi possível remover que muito desse item. Talvez você não tem essa quantia? - Не удалось удалить, что большая часть этого элемента. Может быть, у вас нет этой суммы? - Du konntest nicht so eine große Menge von diesem Gegenstand entsorgen. Hast du vielleicht nicht so viele davon? - 不能丢弃大部分东西。也许你没有那么多数额? - - - You have successfully removed %1 %2 from your inventory. - Úspěšně jste odstraněny %1 %2 z vašeho inventáře. - Vous avez réussi à retirer %1 %2 de votre inventaire. - Has eliminado correctamente %1 %2 de su inventario. - Hai rimosso con successo %1 %2 dal tuo inventario. - Pomyślnie usunięto %1 %2 z inwentarza. - Você removeu com êxito %1 %2 do seu inventário. - Вы успешно удалены %1 %2 из инвентаря. - Du hast erfolgreich %1 %2 aus deinem Inventar entsorgt. - 你已成功地从库存删除 %1 %2。 - - - Something went wrong; the menu will not open? - Něco se pokazilo; nabídka neotevře? - Quelque chose s'est mal déroulé; le menu ne s'ouvre pas ? - Algo salió mal; el menú no se abre? - Qualcosa è andato storto; il menu non si apre? - Coś poszło nie tak; menu nie otworzy? - Algo deu errado; o menu não vai abrir? - Что-то пошло не так; меню не откроется? - Etwas ist schief gelaufen. Das Menü konnte nicht geöffnet werden. - 出错了;菜单不能打开? - - - Config does not exist? - Config neexistuje? - Config n'existe pas ? - Config no existe? - Config non esiste? - Konfiguracja nie istnieje? - O configuração não existe? - Config не существует? - Einstellung nicht vorhanden? - 配置不存在? - - - You cannot store that in anything but a land vehicle! - Nelze uložit, že v ničem jiném než pozemní vozidla! - Vous pouvez stocker cet objet seulement dans les véhicules terrestres ! - No se puede almacenar en cualquier cosa menos que un vehículo terrestre! - Non è possibile depositare questa risorsa in un veicolo che non sia terrestre! - Nie można zapisać, że w nic poza pojazdem lądowym! - Você não pode armazenar isso em qualquer coisa, mas um veículo de terra! - Вы не можете хранить, что ничего, кроме наземного транспортного средства! - Du kannst das nur in einem Landfahrzeug lagern! - 除了陆地载具,你不能储存它! - - - You don't have that much cash on you to store in the vehicle! - Nemáte tolik peněz na vás uložit do vozidla! - Vous ne disposez pas d'autant d'argent sur vous pour stocker dans le véhicule ! - Usted no tiene esa cantidad de dinero en efectivo para almacenar en el vehículo! - Non hai abbastanza denaro con te da mettere nel veicolo! - Nie ma tego dużo gotówki na ciebie do przechowywania w pojeździe! - Você não tem que muito dinheiro em você para armazenar no veículo! - У вас не так много наличных денег на вас, чтобы хранить в автомобиле! - Du hast nicht genug Geld bei dir, um die eingegeben Menge in das Fahrzeug zu lagern! - 你没有那么多现金可以存放在载具里! - - - The vehicle is either full or cannot hold that much. - Vozidlo je buď plný nebo nemůže myslet si, že mnoho. - Le véhicule est plein ou ne peut pas en contenir autant. - El vehículo está llena o no puede contener tanta. - Il veicolo è pieno o non può tenere quel quantitativo. - Pojazd jest albo w pełnym lub nie można uznać, że dużo. - O veículo está cheio ou não pode segurar muito. - Транспортное средство либо полностью или не может держать так много. - Das Fahrzeug ist entweder voll oder kann nicht so viel halten. - 这载具要么是满的,要么就是装不下那么多。 - - - Couldn't remove the items from your inventory to put in the vehicle. - Vozidlo je buď plný nebo nemůže myslet si, že mnoho. - Le véhicule est déjà plein ou ne peut pas stocker d'avantage d'objets. - El vehículo está llena o no puede contener tanta. - Impossibile rimuovere quel quantitativo di oggetti dal tuo inventario per metterlo nel veicolo. - Pojazd jest albo w pełnym lub nie można uznać, że dużo. - O veículo está cheio ou não pode segurar muito. - Транспортное средство либо полностью или не может держать так много. - Das Fahrzeug ist entweder voll oder hat nicht so viel Platz. - 无法从你的库存中取出物品放入车内。 - - - This is an illegal item and cops are near by. You cannot dispose of the evidence. - To je ilegální položky a policajti jsou v blízkosti. Nemůžete zbavit důkazů. - Ceci est un objet illégal et les policiers sont à proximité. Vous ne pouvez pas le jeter. - Este es un artículo ilegal y policías están cerca. No se puede disponer de las pruebas. - Non puoi liberarti di questo oggetto dato che è una prova evidente. - Jest to nielegalne element i policjanci są w pobliżu. Nie można pozbyć się dowodów. - Este é um item ilegal e policiais estão nas proximidades. Você não pode dispor das provas. - Это незаконный пункт и полицейские находятся поблизости. Вы не можете избавиться от доказательств. - Dies ist ein illegaler Gegenstand und Polizisten sind in der Nähe. Du kannst die Beweise nicht einfach so entsorgen. - 这是非法物品,警察就在附近。你不能把它扔掉。 - - - You cannot remove an item when you are in a vehicle. - Nemůžete-li odebrat položku, když jste ve vozidle. - Vous ne pouvez pas supprimer un objet lorsque vous êtes dans un véhicule. - No se puede eliminar un elemento cuando se está en un vehículo. - Non è possibile rimuovere un elemento quando si è in un veicolo. - Nie można usunąć element, kiedy jesteś w pojeździe. - Você não pode remover um item quando você está em um veículo. - Вы не можете удалить элемент, когда вы находитесь в автомобиле. - Du kannst keinen Gegenstand entsorgen, wenn du in einem Fahrzeug sitzt. - 当你在车内时,无法扔掉物品。 - - - You are now spectating %1.\n\nPress F10 to stop spectating. - Nyní diváck é%1.\n\nStisknutím klávesy F10 k zastavení divácké. - Vous êtes maintenant spectateur %1.\n\nAppuyez sur F10 pour arrêter le mode spectateur. - Ahora está como espectador de %1.\n\nPulse F10 para salir de modo espectador. - Si è ora spectating %1.\n\nPremere F10 per smettere di spettatori. - Grasz teraz spectating %1.\n\nNaciśnij klawisz F10, aby zatrzymać spectating. - Você agora está como espectador %1.\n\nPressione F10 para sair. - Теперь вы spectating %1.\n\nНажмите F10, чтобы остановить spectating. - Du beobachtest nun %1.\n\nDrücke F10, um das Beobachten zu beenden. - 你现在正在观看 %1.\n\n 按F10停止观看. - - - You have stopped spectating. - Přestali jste divácké úlohy. - Vous avez arrêté spectating. - Usted ha dejado de ser espectador. - Hai smesso di spettatori. - Zatrzymaniu widzem. - Você parou espectador. - Вы остановили spectating. - Du hast das Beobachten beendet. - 你已经停止了观看。 - - - You have teleported %1 to your location. - Jste teleported %1 do vaší polohy. - Vous avez téléporté %1 à votre emplacement. - Usted ha teletransportado %1 a su ubicación. - Hai teletrasportato %1 alla vostra posizione. - Masz teleportował %1 na swoim miejscu. - Você teletransportou %1 para a sua localização. - Вы телепортированы %1 к вашему положению. - Du hast %1 zu deiner Position teleportiert. - 传送 %1 到你的位置。 - - - <t color='#ADFF2F'>ATM</t> - <t color='#ADFF2F'>Bankomat</t> - <t color='#ADFF2F'>DAB</t> - <t color='#ADFF2F'>ATM</t> - <t color='#ADFF2F'>ATM</t> - <t color='#ADFF2F'>Bankomat</t> - <t color='#ADFF2F'>Caixa Eletrônico</t> - <t color='#ADFF2F'>Банкомат</t> - <t color='#ADFF2F'>Geldautomat</t> - <t color='#ADFF2F'>自动取款机</t> - - - Capture Gang Hideout - Zachyťte Gang skrýš - Capturer la cachette de gang - Capturar Escondite - Cattura Banda Nascondiglio - Przechwytywanie Banda Kryjówka - Capturar Esconderijo de Gangue - Захват шайка укрытие - Gangversteck einnehmen - 占领帮派藏身处 - - - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - An empty array was passed to fn_levelCheck.sqf - Ein leeres Feld wurde an fn_levelCheck.sqf übergeben. - 一个空字段传递给fn_levelCheck.sqf - - - - - News Station Broadcast - - Anuncio de la Estación de Noticias - - Nachrichtensender - Annonce d'informations - - Estação de Transmissão de Notícias - - 新闻广播 - - - Channel 7 News Station - - Estación del Canal de Noticias 7 - - Chaine d'infos Numéro 7 - Kanal 7 Nachrichtensender - - Estação de Notícias do Canal 7 - - 7频道新闻台 - - - Message Heading: - - Título del Mensaje - - Titre de l'annonce : - Nachrichtenüberschrift: - - Titulo da Mensagem: - - 消息标题: - - - Message Content: - - Contenido del Anuncio - - Contenu de l'annonce: - Nachrichteninhalt: - - Conteúdo da Mensagem: - - 消息内容: - - - Broadcast Message - - Transmitir Anuncio - - Diffusion de l'annonce - Nachricht übertragen - - Transmitir Anúncio - - 广播消息 - - - Broadcast Cost: %1<br />Next Broadcast Available: %2 - - Costo de Transmisión: %1<br />Siguiente Transmisión Disponible en: %2 - - Übertragungskosten: %1<br />Nächste Übertragung möglich in: %2 - Coût de Transmission : %1<br />Prochaine Transmission Disponible dans : %2. - - Custo de Trasnmissão: %1<br />Próxima transmissão disponível em: %2 - - 广播费用: %1<br />下一个广播可用于: %2 - - - The header cannot be over %1 characters - - El título no puede tener mas de %1 caracteres - - L'en-tête ne peut pas dépasser %1 caractères - Die Überschrift darf nicht über %1 Zeichen lang sein. - - O cabeçalho não pode ter mais que %1 caracteres - - 标题不能超过 %1 个字符 - - - You've entered an unsupported character! - - Has introducido un carácter inválido - - Vous avez entré un caractère non pris en charge ! - Du hast ein nicht ungültiges Zeichen eingegeben! - - Você inseriu um caractere inválido - - 你输入了一个不支持的字符! - - - Now - - Ahora - - Jetzt - Maintenant - - Agora - - 现在 - - - You need $%1 to send a broadcast! - - Necesitas %1 para transmitir un anuncio! - - Vous avez besoin de $%1 pour envoyer une diffusion ! - Du benötigst $%1, eine Nachricht senden zu können! - - Você precisa de $%1 para enviar uma transmissão! - - 你需要支付 $%1 才能发送广播! - - - <t size='2'>%1</t><br />Broadcasted by: %2 - - <t size='2'>%1</t><br />Transmitido por: %2 - - <t size='2'>%1</t><br />Diffusé par : %2 - <t size='2'>%1</t><br />Gesendet von: %2 - - <t size='2'>%1</t><br />Transmitido por: %2 - - <t size='2'>%1</t><br />广播发送者: %2 - - - - - You have been arrested, wait your time out. If you attempt to respawn or reconnect your time will increase! - Jste byli zatčeni, počkejte si na čas ven. Pokud se pokusíte respawn nebo připojit váš čas zvýší! - Te han arrestado. Si tratas de matarte o te desconectas se incrementara tu estadía en la cárcel! - - Du wurdest verhaftet. Sitze deine Zeit ab. Wenn du versuchst neu aufzuwachen oder die Verbindung zu trennen, verlängert sich deine Zeit! - Vous avez été arrêté, attendez que votre peine soit terminée. Si vous tentez de respawn ou reconnectez, le temps sera augmenté ! - Sei stato arrestato, sconta la tua pena. Se cercherai di rinascere o di riconnetterti il tuo tempo aumenterà! - Você foi preso, cumpra sua pena. Se você tentar renascer ou reconectar seu tempo na cadeia irá aumentar! - Zostałeś aresztowany, poczekaj na koniec kary. Jeśli się rozłączysz albo odrodzisz twoja kara zostanie powiększona - 你被捕了,耐心坐牢吧。如果你试图重生或重新连接坐牢时间会增加! - - - For being arrested you have lost the following licenses if you own them\n\nFirearms License\nRebel License - Za byl zatčen jste ztratili tyto licence, pokud je vlastní \ žádný zbrojní pas \ jRebel licence - Por ser arrestado se te han quitado estas licencias (si las tienes)\n\nL. de Armas \nL. Rebelde - - Bei der Verhaftung hast du folgende Lizenzen verloren, sofern du sie besessen hast:\n\nWaffenschein\nRebellenausbildung. - Après emprisonnement, vous avez perdu les licences suivantes si vous les aviez\n\nPermis de port d'arme\n LicenceRebelle - A causa del tuo arresto hai perso le seguenti licenze, se le possedevi\n\nPorto d'armi\nLicenza Ribelle - Você perdeu as seguintes licenças por ter sido preso\n\nPorte de Armas\n\nTreinamento Rebelde - Z uwagi na aresztowanie straciłeś następujące licencje jeśli je posiadałeś \n\nPozwolenie na broń \nTrening Rebelianta - 你如果被捕了,会失去\n\n枪支许可证\n叛军许可证 - - - %1 has escaped from jail! - %1 utekl z vězení! - %1 se ha escapado de la cárcel! - - %1 ist aus dem Gefängnis ausgebrochen! - %1 s'est échappé de prison ! - %1 è scappato dalla prigione! - %1 escapou da prisão - %1 uciekł z więzienia! - %1 越狱了! - - - You have escaped from jail, you still retain your previous crimes and now have a count of escaping jail. - Jste utekl z vězení, si stále zachovávají své předchozí zločiny a nyní mají počet uniknout vězení. - Te has escapado de la cárcel, retienes tus crimenes anteriores más un crimen de escapado de la cárcel. - - Vous vous êtes échappé de prison, vous conserver toujours vos crimes précédents et les autorités sont au courant de votre évasion. - Du bist aus dem Gefängnis ausgebrochen! Die Polizei sucht jetzt nach dir, wegen deiner früheren Verbrechen und dem Gefängnisausbruch. - Sei scappato di prigione, rimarrai ricercato per i crimini da te commessi in precedenza e in aggiunta per essere scappato di prigione. - Você escapou da prisão, agora você é procurado por esse crime e todos os outros que havia cometido anteriormente - Uciekłeś z więzienia, dalej jesteś ścigany za poprzednie przestępstwa i dodatkowo za ucieczkę. - 你已经从监狱逃跑了,你仍然保留着你以前的罪行,现在算是越狱。 - - - You have served your time in jail and have been released. - Sloužil jste svůj čas ve vězení a byli propuštěni. - Has pasado el tiempo en la cárcel y has sido liberado. - - Du hast deine Zeit im Gefängnis abgesessen. - Vous avez purgé votre peine, vous êtes désormais libre. - Hai scontato la tua pena in prigione e sei stato rilasciato. - Você pagou pelo seus crimes e foi libertado. - Odbyłeś swoją karę zostałeś zwolniony z więzienia. - 你已经在监狱服完刑,并被释放。 - - - Time Remaining: - Zbývající čas: - Tiempo Restante: - - Verbleibende Zeit: - Temps restant : - Tempo rimanente: - Tempo Restante: - Pozostały czas kary: - 剩余时间: - - - Can pay bail: - Může zaplatit kauci: - Puedes pagar la fianza en: - - Kann Kaution zahlen: - Peut payer la caution : - Puoi pagare la cauzione: - Pode pagar fiança: - Możesz wpłacić kaucję - 可以支付保释金: - - - Bail Price: - Bail Cena: - Precio de Fianza: - - Kaution: - Prix de la caution : - Costo cauzione: - Preço da fiança: - Wartość kaucji: - 保释金额: - - - You have paid your bail and are now free. - Jste zaplatili kauci a nyní jsou zdarma. - Has pagado tu fianza y has sido liberado. - - Du hast deine Kaution bezahlt und bist nun frei. - Vous avez payé votre caution, vous êtes désormais libre. - Hai pagato la cauzione e sei libero. - Você pagou a fiança e agora está livre. - Zapłaciłeś kaucję jesteś wolny. - 你已经支付了保释金,现在自由了. - - - - - %1 has knocked you out. - %1 zaklepal vás. - %1 te a noqueado. - - %1 hat dich niedergeschlagen. - %1 vous a assommé. - %1 ti ha colpito stordendoti. - %1 nocauteou você. - zostałeś ogłuszony przez %1 - %1 把你击倒了。 - - - You have lost all your motor vehicle licenses for vehicular manslaughter. - Jste ztratili všechny své licence motorových vozidel pro dopravní zabití. - Has perdido todas tus licencias de vehículos de motor por homicidio vehicular. - - Du hast alle deine Führerscheine durch fahrlässige Tötung mit einem Fahrzeug verloren. - Vous avez perdu tous vos permis véhicule pour avoir écrasé quelqu'un. - Hai perso tutte le tue licenze di guida a causa di un omicidio stradale. - Você não perdeu suas licenças de motorista por atropelamento. - Straciłeś wszystkie uprawnienia na pojazdy z uwagi na ciągłe zabijanie ludzi pojazdami. - 你因载具过失杀人被吊销了所有机动载具驾驶许可证。 - - - You have lost your firearms license for manslaughter. - Jste ztratili zbrojního průkazu za zabití. - Has perdido tu licencia de armas por homicidio. - - Du hast deinen Waffenschein wegen Mordes verloren. - Vous avez perdu votre permis d'armes à feu pour homicide involontaire. - Hai perso il tuo Porto d'Armi a causa di un omicidio - Você perdeu suas licenças de porte de arma por cometer homicídio. - Straciłeś pozwolenie na broń z uwagi na zabijanie ludzi z broni palnej - 你因过失杀人而丧失了枪支许可证。 - - - They didn't have any cash... - Oni neměli žádnou hotovost ... - No tenian dinero... - - Er hatte kein Geld... - Il n'a pas d'argent... - Non hai soldi... - Eles não tinham nenhum dinheiro.. - Nie posiadają żadnych pieniędzy ... - 他们没有现金... - - - You stole $%1 - Ukradl jsi $%1 - Robastes $%1 - - Du hast $%1 geraubt. - Vous avez volé $%1 - Hai rubato $%1 - Você roubou R$%1 - Ukradłeś %1 - 你偷了 $%1 - - - The safe is empty! - Bezpečné je prázdný! - La caja esta vacía! - - Der Tresor ist leer! - Le coffre est vide ! - La cassaforte è vuota! - O Cofre está vazio! - Sejf jest pusty! - 保险箱是空的! - - - Someone is already accessing the safe.. - Někdo je již přístup k bezpečné .. - Alguien ya esta entrando en la caja.. - - Jemand greift bereits auf diesen Tresor zu. - Quelqu'un accède déjà au coffre... - Qualcuno sta già interagendo con la cassaforte.. - Alguem já está acessando o cofre. - Ktoś właśnie włamuje się do sejfu! - 有人已经进入保险箱了。 - - - There needs to be %1 or more cops online to continue. - Musí existovat%1 nebo více policajtů on-line pokračovat. - Necesita haber %1 o mas policías para continuar. - - Es müssen %1 oder mehr Polizisten online sein, um fortfahren zu können. - Il faut au minimum %1 policiers pour continuer. - Servono almeno %1 poliziotti online per continuare. - É necessário ter %1 ou mais policiais online para continuar. - Potrzeba conajmniej %1 policjantów aby kontynuować - 需要有 %1 或更多的警察才能继续。 - - - Safe Inventory - Safe Inventory - Inventario de la Caja - - Tresorinventar - Coffre - Inventario cassaforte - Cofre - Wyposażenie sejfu - 保险箱库存 - - - You need to select an item! - Je třeba vybrat položku! - Debes selecionar un objeto! - - Du musst einen Gegenstand auswählen! - Vous devez sélectionner un objet ! - Devi selezionare un oggetto! - Você precisa selecionar um item! - Musisz coś wybrać - 您需要选择一个物品! - - - There isn't %1 gold bar(s) in the safe! - Není %1 zlatá bar (y) v bezpečí! - No hay %1 barra(s) de oro en la caja! - - Es sind keine %1 Goldbarren im Tresor! - Il n'y a pas %1 lingot(s) d'or dans le coffre ! - Nella cassaforte non ci sono %1 lingotti d'oro - Não existe %1 barra(s) de ouro no cofre! - W sejfie nie ma % sztab złota! - 金库里没有 %1 金条! - - - - - Couldn't open the ticketing interface - Nemohl otevřít jízdenek rozhraní - No se pudo abrir el menu de tiquetes! - - Der Bußgeldkatalog konnte nicht geöffnet werden! - Impossible d'ouvrir l'interface des amendes - Impossibile aprire l'interfaccia per le multe - Não foi possível abrir o bloco de multa - Nie potrafię otworzyć interfejsu mandatów - 无法打开罚款界面 - - - Ticketing %1 - Jízdenek%1 - Dando Tiquete a %1 - - Verrechne %1 - Verbalisation de %1 - Multando %1 - Multando %1 - Mandat dla %1 - 开据罚单给 %1 - - - %2 got back a blacklisted vehicle near %1. - %2 dostat zpět na černou listinu vozidlo nedaleko %1. - %2 a récupéré un véhicule blacklisté près de %1. - %2 volver un vehículo en la lista negra cerca de %1. - %2 ha ritirato un veicolo blacklistato vicino %1. - %2 wrócić do czarnej listy pojazd pobliżu %1. - %2 retirou um veículo que se encontra na lista negra, perto de %1. - %2 получить обратно в черный список автомобиль возле %1. - %2 hat ein gesuchtes Fahrzeug nahe %1 ausgeparkt. - %2 在 %1 附近找回了被列入黑名单的载具。 - - - Person to ticket is nil - Osoba, která má lístku je nulová - La persona a quien tiquetear es nulo - - Die Person, für das das Ticket vorgesehen war, ist verschwunden. - La personne à verbaliser n'existe pas. - La persona da multare è nil - Jogador a ser multado é nulo - Osoba do ukarania mandatem to "nil" - 被罚款的玩家为“无” - - - Person to ticket doesn't exist. - Osoba, která má letenku neexistuje. - La perosna a quien tiquetear no existe. - - Die Person, für das Ticket, gibt es nicht. - La personne à verbaliser est inexistante. - La persona da multare non esiste. - Jogador a ser multado não existe. - Nie ma osoby ukaranej mandatem - nie istnieje - 被罚款的玩家不存在。 - - - You didn't enter actual number. - Jste nezadali skutečný počet. - No escribistes un numero real. - - Du hast keine echte Zahl eingegeben. - Vous n'avez pas saisi de nombre. - Non hai inserito un numero correttamente. - Você não digitou um número válido - Wybrałeś zły numer - 你没有输入正确的数字. - - - Tickets can not be more than $200,000! - Vstupenky nemůže být více než 200.000 $! - Los tiquetes no pueden ser mas de $200,000! - - Strafzettel können nicht mehr als $200.000 betragen! - Les amendes ne peuvent pas dépasser plus de $200,000 ! - La multa non può essere più di $200.000! - A multa não pode ser maior que R$200.000! - Mandat nie może być wyższy niż $200.000! - 罚单不能超过 $200,000! - - - %1 gave a ticket of $%2 to %3 - %1 dal lístek na $% %2 3 - %1 le dio un tiquete de $%2 a %3 - - %1 hat %3 einen Strafzettel über $%2 ausgestellt. - %1 a mis une contravention de $%2 à %3. - %1 ha dato una multa di $%2 a %3 - %1 deu uma multa de R$%2 para %3 - %1 Wystawił mandat w wysokości %2 dla %3 - %1 开据金额 $%2 的罚单给 %3 - - - You don't have enough money in your bank account or on you to pay the ticket. - Nemáte dostatek peněz na váš bankovní účet, nebo na vás zaplatit letenku. - No tienes suficiente dinero para pagar el tiquete. - - Du hast nicht genug Geld auf deinem Bankkonto, um den Strafzettel bezahlen zu können. - Vous n'avez pas assez d'argent dans votre compte en banque ou sur vous pour payer l'amende. - Non hai fondi sufficienti nel tuo conto in banca per pagare la multa. - Você não possui dinheiro suficiente na sua conta bancária ou na sua mão para pagar o bilhete. - Nie masz środków na koncie aby zapłacić mandat. - 你的银行帐户中没有足够的钱来支付罚金。 - - - %1 couldn't pay the ticket due to not having enough money. - %1 nemohl zaplatit letenku z důvodu nemají dostatek peněz. - %1 No puedo pagar el tiquete porque no tiene suficiente dinero. - - %1 konnte den Strafzettel nicht bezahlen, weil er nicht genug Geld hat. - %1 ne pouvait pas payer la contravention car il n'avait pas assez d'argent. - %1 non può pagare la multa perchè non ha sufficienti fondi nel suo conto in banca. - %1 não pode pagar a multa pois não tem dinheiro suficiente. - %1 nie może zapłacić mandatu bo nie ma tylu środków na koncie - %1 由于没有足够的钱,无法支付罚金。 - - - You have paid the ticket of $%1 - Jste zaplatili letenku ve výši $%1 - Has pagado el tiquete de $%1 - - Du hast den Strafzettel von $%1 bezahlt. - Vous avez payé l'amende de $%1 - Hai pagato la multa di $%1 - Você pagou a multa de R$%1 - Zapłaciłeś mandat w wysokości $%1 - 你已经支付了 $%1 的罚金 - - - %1 paid the ticket of $%2 - %1 zaplatil letenku ve výši $ %2 - %1 a pagado el tiquete de $%2 - - %1 zahlte einen Strafzettel von $%2. - %1 payé la contravention de $%2 - %1 ha pagato la multa di $%2 - %1 pagou a multa de R$%2 - %1 zapłacił mandat w wyskości $%2 - %1 支付了 $%2 的罚金 - - - %1 paid the ticket. - %1 zaplatil jízdenku. - %1 pago el tiquete. - - %1 hat den Strafzettel bezahlt. - %1 payé la contravention. - %1 ha pagato la multa. - %1 pagou a multa. - %1 zapłacił mandat. - %1 支付了罚金。 - - - %1 has given you a ticket for $%2 - %1 vám dal lístek za $ %2 - %1 te ha dado un tiquete de $%2 - - %1 hat dir einen Strafzettel über $%2 gegeben. - %1 vous a donné une amende de $%2 - %1 ti ha dato una multa di $%2 - %1 lhe aplicou uma multa de R$%2 - %1 dał ci mandat w wysokości $%2 - %1 给你开了一张 $%2 的罚单 - - - %1 refused to pay the ticket. - %1 odmítl zaplatit letenku. - >%1 no aceptó pagar el tiquete. - - %1 weigert sich, den Strafzettel zu bezahlen. - %1 a refusé de payer l'amende. - %1 si è rifiutato di pagare la multa. - %1 se recusou a pagar a multa. - %1 odmówił zapłaty mandatu. - %1 拒绝支付罚金。 - - - You have collected a bounty of $%1 for arresting a criminal. - Nasbíráte kvantum $%1 pro aretaci zločince. - Has recolectado la recompensa de $%1 por arrestar a un criminal. - - Du hast ein Prämie von $%1 für die Festnahme eines Verbrechers bekommen. - Vous avez reçu une prime de $%1 pour avoir arrêté un criminel. - Hai ricevuto il pagamento di una taglia di $%1 per aver arrestato un criminale ricercato. - Você ganhou uma recompensa de R$%1 por prender um criminoso. - Otrzymujesz nagrodę w wysokości $%1 za aresztowanie poszukiwanego kryminalisty. - 你捉拿罪犯获得 %1 赏金。 - - - You have collected a bounty of $%1 for killing a wanted criminal, if you had arrested him you would of received $%2. - Nasbíráte kvantum $%1 za zabití hledaného zločince, pokud jste ho zatkli byste přijímaného $%2. - Has recolectado la recompensa de $%1 por matar a un criminal, si lo hubieras arrestado hubieses conseguido $%2. - - Du hast ein Prämie von $%1 für das Töten eines gesuchten Verbrechers erhalten, für seine Festnahme hättest du $%2 bekommen. - Vous avez reçu une prime de $%1 pour le meurtre d'un criminel recherché, si vous l'aviez arrêté, vous auriez reçu $%2. - Hai ricevuto il pagamento di una taglia di $%1 per aver ucciso un criminale ricercato, se lo avessi arrestato avresti ricevuto $%2. - Você ganhou uma recompensa de $%1 por matar um criminoso procurado, se você tivesse o prendido ganharia R$%2. - Otrzymujesz nagrodę w wysokości $%1 za zabicie poszukiwanego kryminalisty, w przypadku gdybyś go aresztował otrzymałbyć $%2. - 你杀害被通缉的罪犯获得 %1 赏金,如果你逮捕了他,你就会获得 $%2 赏金。 - - - %1 has $%2 worth of contraband on them. - %1 má $%2 v hodnotě kontrabandu na nich. - %1 tiene $%2 en contrabando con el. - - %1 hatte Schmuggelware im Wert von $%2 bei sich. - %1 a $%2 de contrebande sur lui. - %1 ha $%2 in materiali illegali con se. - %1 tem R$%1 em contrabando. - %1 miał przy sobie kontrabandę o wartości $%2. - %1 有价值 $%2 的非法物品。 - - - Illegal Items - nelegální položky - Objetos Ilegales - - Illegale Gegenstände - Objets illégaux - Oggetti Illegali - Items Ilegais - Nielegalne przedmioty / kontrabanda - 非法物品 - - - %1 was identified as the bank robber! - %1 byl identifikován jako bankovního lupiče! - %1 fue identificado como el ladrón del banco! - - %1 wurde als Bankräuber identifiziert! - %1 a été identifié comme un braqueur de banque ! - %1 è stato identificato come il rapinatore della banca! - %1 foi identificado como ladrão de banco! - %1 zidentyfikowany jako kasairz rabujący banki! - %1 被认定为银行抢劫犯! - - - No illegal items - Žádné ilegální položek - No objetos ilegales - - Keine illegalen Gegenstände. - Aucun objet illégal - Nessun oggetto illegale - Sem items ilegais - Brak kontrabandy i nielegalnych przedmiotów - 没有非法物品 - - - You are not near a door! - Nejste u dveří! - No estas cerca de una puerta! - - Du bist nicht in der Nähe einer Tür! - Vous n'êtes pas près d'une porte ! - Non sei vicno ad una porta! - Você não está perto de uma porta! - Nie jesteś przy drzwiach - 你不在门附近! - - - You need to enable Picture in Picture (PiP) through your video settings to use this! - Je nutné povolit obraz v obraze (PIP) pomocí nastavení videa použít tento! - Debes habilitar la opcion de "Picture in Picture"(PiP) En tus opciones de video para usar esto! - - Du musst "Bild in Bild" (PiP) in deinen Video-Einstellungen aktivieren, um dies nutzen zu können! - Vous devez activer le "Picture in Picture" (PiP) dans vos paramètres vidéo pour utilser ceci ! - Devi attivare Picture in Picture (PiP) nelle tue impostazioni video per usare questa funzione! - Você precisa habilitar o Picture in Picture (PiP), através das suas configurações de vídeo para usar esta opção! - Musisz włączyć Obraz w obrazie (PiP) w ustawieniach graficznych aby tego używać! - 您需要通过视频设置启用画中画(PiP)才能使用此功能! - - - Licenses: - licencí - Licencias: - - Lizenzen: - Licences : - Licenze: - Licenças: - Licencje: - 许可证: - - - No Licenses - žádné licence - No Licencias - - Keine Lizenzen! - Aucune licence - Nessuna Licenza - Sem Licenças - Brak licencji - 没有许可证 - - - Nothing illegal in this vehicle - Nic nezákonného v tomto vozidle - Nada ilegal en este vehículo - - Nichts Illegales in diesem Fahrzeug. - Rien d'illégal dans ce véhicule - Niente di illegale nel veicolo - Nada ilegal dentro do veículo - Nie znaleziono niczego nielegalnego w pojeździe - 这载具没有非法物品 - - - Nothing illegal in this container. - Nic nezákonného v tomto kontejneru - Nada ilegal en este contenedor - Nulla di illegale in questo contenitore - Nic nielegalnego w tym pojemniku. - - Nada ilegal dentro do container - Rien d'illégal dans ce conteneur - Nichts Illegales in diesem Container. - 这个库存没有非法物品。 - - - This vehicle is empty - Toto vozidlo je prázdná - Este vehículo esta limpio - - Dieses Fahrzeug ist leer. - Ce véhicule est vide - Questo veicolo è vuoto - Esse veículo está vazio - Pojazd jest pusty - 这载具是空的 - - - This container is empty - Tento zásobník je prázdný - Ce conteneur est vide - Este contenedor esta vacío - Questo contenitore è vuoto - Ten pojemnik jest pusty - Este recipiente está vazio - Этот контейнер пуст - Dieser Container ist leer. - 这个库存是空的 - - - $%1 from the Federal Reserve robbery was returned from the robber being killed. - $%1 z Federálního rezervního systému loupeže byla vrácena ze lupič byl zabit. - $%1 de la Reserva Federal fue devuelto, ya que mataron al ladrón. - - $%1 wurden in die Zentralbank zurückgebracht, weil der Bankräuber gestorben ist. - $%1 du vol de la Banque Fédérale ont été récupérés sur le braqueur, qui vient d'être tué. - $%1 della rapina alla Riserva Federale sono stati recuperati dal rapinatore ucciso. - R$%1 que foi roubado da Reserva Federal retornou a ela após a morte do ladrão. - $%1 z kradzieży w Banku zostało zwrócone po zabiciu włamywacza. - 由于抢劫犯被杀死,联邦储备被抢的 $%1 被归还。 - - - Repairing vault... - Oprava klenby ... - Reparando bóveda... - - Tresor wird repariert... - Réparation du coffre... - Riparando il Caveau - Reparando Cofre... - Naprawiam skarbiec... - 修理金库... - - - The vault is now fixed and re-secured. - Klenba je nyní pevně stanovena a re-zabezpečeny. - La bóveda esta reparada y segura. - - Der Tresor wurde repariert. - Le coffre est de nouveau sécurisé. - Il Caveau è stato riparato e messo in sicurezza. - O Cofre foi consertado e está seguro. - Skarbiec jest naprawiony i zabezpieczony. - 金库现在已修复并重新加固。 - - - The vault is already locked? - Klenba je již uzamčen? - La bóveda ya esta cerrada? - - Ist der Tresor abgeschlossen? - Le coffre est déjà fermé? - Il Caveau è già bloccato? - O Cofre está trancado? - Skarbiec jest zablokowany? - 金库已经锁好了? - - - You can't enter anything below 1! - Nemůžete nic zadávat menší než 1! - No puede poner nada menor que 1! - - Du kannst nichts unter 1 eingeben! - Vous ne pouvez pas prendre moins de 1 objet ! - Non puoi selezionare nulla sotto l'1! - Não é permitido usar valores abaixo de 1! - Nie możesz wprowadzić niczego poniżej 1! - 你不能输入少于1的任何物品! - - - You can't store anything but gold bars in the safe. - Nemůžete ukládat nic jiného než zlaté pruty v trezoru. - Solo puedes guardar barras de oro en la bóveda. - - Du kannst nur Goldbarren in den Tresor legen. - Vous ne pouvez rien stocker à part des lingots d'or dans le coffre. - Nella cassaforte puoi depositare solo lingotti d'oro. - Você só pode guardar Barras de Ouro no cofre. - Nie możesz składować niczego poza sztabami złota w sejfie. - 保险箱除了金条外,你不能存放其它物品。 - - - You don't have %1 gold bar(s) - Nemáte%1 zlatá tyč (y) - No tienes %1 barra(s) de oro - - Du hast keine %1 Goldbarren! - Vous n'avez pas %1 lingot(s) d'or - Non hai %1 lingotti d'oro - Você não tem %1 Barra(s) de Ouro - Nie masz %1 sztab(y) złota - 你没有 %1 根金条 - - - Couldn't remove the item(s) from your inventory to put in the safe. - Nepodařilo se odstranit položky) z inventáře dát do trezoru. - No se pudieron mover las objetos de tu inventario a la caja. - - Es konnten keine Gegenstände von deinem Inventar in den Tresor gelegt werden. - Vous ne pouvez pas supprimer les items de votre inventaire pour les mettre dans le coffre. - Non è stato possibile rimuovere gli oggetti dal tuo inventario per metterli nella cassaforte. - Não foi possível mover o item do inventário para o cofre. - Nie można usunąć rzeczy z twojego wyposażenia aby włożyć je do sejfu - 无法从你的库存中取出物品放在保险箱里。 - - - Couldn't search %1 - Nemohl hledání%1 - No se pudo buscar a %1 - - %1 konnte nicht durchsucht werden. - Impossible de fouiller %1 - Impossibile ispezionare %1 - Não foi possível buscar por %1 - Nie można przeszukać %1 - 无法搜索 %1 - - - Repairing Door... - Oprava dveří ... - Reparando Puerta... - - Tür wird repariert... - Réparation de la porte... - Riparando la porta... - Reparando a porta.... - Naprawiam drzwi... - 修理门... - - - No Licenses<br/> - Žádné Licence < br / > - No Licencias<br/> - - Keine Lizenzen!<br/> - Aucune licence<br/> - Nessuna Licenza<br/> - Você não tem licença<br/> - Brak licencji<br/> - 没有许可证<br/> - - - No one has sold to this dealer recently. - Nikdo se prodalo tohoto prodejce nedávno. - Nadie le ha vendido a este comerciante recientemente. - - Niemand hat kürzlich an diesem Dealer etwas verkauft. - Personne n'est venu vendre quelque chose ici récemment. - Non è stato visto nessuno vendere a questo spacciatore di recente. - Ninguém vendeu para esse negociante recentemente - Nikt nie sprzedawał ostatnio u dilera. - 最近没有人出售物品给这个经销商。 - - - The following people have been selling to this dealer recently. - Následující lidé byli prodeji tohoto prodejce nedávno. - Las siguientes personas le han estado vendiendo a este comerciante recientemente. - - Folgende Personen haben kürzlich an diesem Dealer etwas verkauft: - Les personnes suivantes sont venues vendre quelque chose récemment. - Le seguenti persone sono state viste vendere a questo spacciatore. - Os seguintes jogadores venderam para esse negociante recentemente. - Ostatnio u dilera sprzedawali następujący ludzie. - 以下人员最近一直在向这个经销商销售物品。 - - - Radar - Radar - Radar - - Radar - Radar - Autovelox - Radar - Radar - 测速雷达 - - - Vehicle Speed %1 km/h - Rychlost vozidla%1 km / h - Velocidad %1 km/h - - Geschwindigkeit: %1 km/h! - Vitesse du véhicule %1 km/h - Velocità veicolo %1 km/h - Velocidade do Veículo %1 km/h - Prędkość pojazdu %1 km/h - 载具速度 %1 km/h - - - You have been released automatically for excessive restrainment time - Byli jste automaticky uvolněn pro nadměrnou restrainment čas - Has sido liberado automáticamente por tiempo excesivo de estar retenido. - - Du wurdest automatisch freigelassen, da die maximale Verhaftungszeit überschritten wurde. - Vous avez été démenotté automatiquement pour un menottage excessivement long - Sei stato automaticamente liberato per essere rimasto ammanettato troppo tempo - Você foi solto automaticamente, devido ao tempo limite ter expirado. - Zostałeś automatycznie rozkuty z uwagi na długi upływ czasu od skucia. - 由于约束时间过长你已经被自动释放 - - - You have been restrained by %1 - Byli jste omezeni%1 - Has sido retenido por %1 - - Du wurdest von %1 festgenommen. - Vous avez été menotté par %1 - %1 ti ha messo le manette - Você foi imobilizado por %1 - Zostałeś rozkuty przez %1 - 你被 %1 约束了 - - - Who do you think you are? - Kdo si myslíš že jsi? - Qui pensez-vous être? - ¿Quién te crees que eres? - Chi ti credi di essere? - Za kogo Ty się masz? - Quem você pensa que é? - Кто ты, по-твоему, такой? - Was glaubst du wer du bist? - 你以为你是谁? - - - You must select a perp. - Je třeba vybrat pachatele. - Vous devez sélectionner une personne. - Debe seleccionar un asesino. - È necessario selezionare un criminale. - Musisz wybrać perp. - Você deve selecionar um criminoso. - Вы должны выбрать преступника. - Du musst einen Verbrecher auswählen. - 你必须选择一个罪犯。 - - - You must select a crime. - Je třeba vybrat trestného činu. - Vous devez sélectionner un crime. - Debe seleccionar un crimen. - È necessario selezionare un crimine. - Musisz wybrać przestępstwa. - Você deve selecionar um crime. - Вы должны выбрать преступление. - Du musst ein Verbrechen auswählen. - 你必须选择一种犯罪行为。 - - - Failed to fetch crimes. - Nepodařilo se načíst trestných činů. - Impossible de récupérer les crimes. - No se pudieron obtener los crímenes. - Impossibile recuperare i crimini. - Nie udało się pobrać przestępstw. - Falha ao buscar crimes. - Не удалось получить преступления. - Die Verbrechen konnten nicht heruntergeladen werden. - 无法搜索犯罪记录。 - - - - - You tried to give %1 %2 %3 but they couldn't hold that so it was returned. - Pokusili jste se dát% %1 %2 3, ale nemohli si myslí, že tak to bylo se vrátil. - Le tratastes de dar %1 %2 %3 pero no tenian espacio asi que se te devolvió. - - Du wolltest %1 %2 %3 geben, aber er hat keinen Platz in seinem Inventar und hat es darum zurückgegeben. - Vous avez essayé de donner %1 %2 %3 mais il n'a pas assez de place et vous a tout redonné. - Hai provato a dare a %1 %2 unità di %3 ma non poteva trasportarlo quindi ti sono state restituite restituite. - Você tentou dar %1 %2 %3, mas não conseguiu segurar e por isso que foi devolvido. - Próbowałeś dać %1 %2 %3 lecz gracz nie mógł tego unieść, przedmioty zostały zwrócone. - 你试着给 %1 %2 %3 但他们不能持有,所以物品被归还。 - - - %1 returned %2 %3 because they couldn't hold that amount. - %1 vrátila% %2 3, protože oni nemohli držet tuto částku. - %1 devolvió %2 %3 porque no tenian espacio. - - %1 hat %2 %3 zurückgegeben, weil er nicht so viel tragen kann. - %1 vous a redonné %2 %3 parce qu'il ne pouvait pas en prendre autant. - %1 ha restituito %2 %3 perchè non poteva trasportare quella quantità - %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. - %1 zwrócił %2 %3 ponieważ nie mógł tego unieść - %1 返还 %2 %3 因为他们拿不出这笔钱。 - - - %1 has gave you %2 but you can only hold %3 so %4 was returned back. - %1 vám již dal%2, ale můžete mít pouze% %3 4 tak byla vrácena zpět. - %1 te a dado %2, pero solo puedes cargar %3 asi que %4 fue devuelto. - - %1 hat dir %2 gegeben, du kannst aber nur %3 tragen, also hast du %4 zurückgegeben. - %1 vous a donné %2 mais vous ne pouvez en prendre que %3 donc %4 a été redonné. - %1 ti ha dato %2 ma puoi portare solo %3 quindi %4 unità sono state restituite. - %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. - %1 dał ci %2 lecz możesz unieść tylko %3, w związku z tym zwróciłeś %4. - %1 已经给了你 %2 但你只能持有 %3 所以 %4 被退回. - - - Do you want to add this item to your weapon or inventory? If you add it to your weapon your current existing attachment will be lost! - Chcete přidat tuto položku do zbraně nebo inventáře? Pokud si jej přidat do svého zbraň váš současný stávající příloha bude ztraceno! - Quieres agregar este Objeto/Arma a tu inventario? Si lo agregas a tu arma tu accesorio actual se perdera! - - Möchtest du den Aufsatz zu deiner Waffe oder deinem Inventar hinzufügen? Wenn du es zur Waffe hinzufügst, geht der vorhandene Aufsatz verloren! - Voulez-vous ajouter cet objet à votre arme ou le mettre dans votre inventaire? Si vous l'ajoutez à votre arme, votre accessoire actuel sera perdu! - Vuoi aggiungere questo oggetto alla tua arma o all'inventario? Se lo aggiungerai all'arma verrà rimosso l'eventuale accessorio già presente su di essa! - Você quer adicionar este item à sua arma ou inventário? Se você adicioná-lo à sua arma seu item atual existente será perdida! - Chcesz dodać tę rzecz do broni lub wyposażenia? Jeśli to zrobisz twoje aktualne wyposażenie broni zostanie zmienione na nowo zakupione i przepadnie! - 你想把这个物品添加到你的武器或库存中吗?如果你把它添加到你的武器,你当前的现有附件将会丢失! - - - Attachment slot taken! - Attachment slot vzít! - Slot de accesorio tomado! - - Aufsatz Platz belegt! - Accessoire déjà présent! - Slot Accessorio preso! - Slot de acessório utilizado! - Podjąłeś slot - 附件插槽! - - - Weapon - Zbraň - Arma - - Waffe - Armes - Arma - Armas - Broń - 武器 - - - Inventory - Inventář - Inventario - - Inventar - Inventaire - Inventario - Inventário - Wyposażenie - 库存 - - - You are not allowed to look into someone's backpack! - Nejste dovoleno dívat se do něčí batohu! - No tienes permiso de ver dentro de las mochilas de los demas! - - Du bist nicht berechtigt, in fremde Rucksäcke zu schauen! - Vous n'êtes pas autorisé à regarder dans le sac à dos de quelqu'un! - Non sei autorizzato a guardare negli zaini altrui! - Você não é liberado para olhar a mochila dos outros! - Nie możesz zaglądać do czyichś plecaków! - 你不允许看别人的背包! - - - You are not allowed to access this vehicle while its locked. - Nemáte povolen přístup k toto vozidlo zatímco jeho uzamčen. - No tienes permiso de accesar este vehículo mientras esta cerrado. - - Du bist nicht berechtigt, auf dieses Fahrzeug zuzugreifen, während es abgeschlossen ist. - Vous n'êtes pas autorisé à accéder à ce véhicule tant qu'il est verrouillé. - Non ti è permesso l'accesso a questo veicolo mentre è bloccato. - Você não pode acessar o veiculo enquanto ele estiver trancado. - Nie masz dostępu do pojazdu gdy ten jest zamknięty - 你不能在锁门的情况下进入载具。 - - - This vehicle's trunk is in use, only one person can use it at a time. - kmen toto vozidlo je v provozu, může jen jedna osoba ji použít najednou. - El maletero de este vehículo solo puede ser usado por una persona a la vez. - - Der Kofferraum dieses Fahrzeuges wird bereits benutzt, nur eine Person kann auf ihn zugreifen. - Le coffre de ce véhicule est en cours d'utilisation, une seule personne peut l'utiliser à la fois. - L'inventario di questo veicolo è in uso, può essere usato solo da una persona alla volta. - A mala desse veículo está em uso, somente uma pessoa pode acessá-la de cada vez. - Bagażnik pojazdu jest w użyciu, na raz może korzystać z niego tylko jedna osoba. - 这载具的存储箱正在使用中,一次只能一个人使用它。 - - - Failed Creating Dialog - Nepodařilo Vytvoření dialog - Falló la creación del dialogo - - Erstellen des Dialogs gescheitert! - Échec à la création de dialogue - Creazione dialogo fallito - Falha ao criar Diálogo - Nie udało się nawiązać kontaktu - 创建对话框失败 - - - You have unlocked your vehicle. - Jste odemkli své vozidlo. - Has abierto tu vehículo - - Du hast dein Fahrzeug aufgeschlossen. - Vous avez déverrouillé votre véhicule. - Hai sbloccato il tuo veicolo. - Você destrancou o veículo. - Odblokowałeś pojazd - 你已经解锁了你的载具。 - - - You have locked your vehicle. - Jste zamkli své vozidlo. - Has cerrado tu vehículo. - - Du hast dein Fahrzeug abgeschlossen. - Vous avez verrouillé votre véhicule. - Hai bloccato il tuo veicolo - Você trancou o veículo. - Zablokowałeś pojazd - 你已经锁好你的车了。 - - - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - This can only be done by the last driver of this vehicle. - 这只能由该车辆的最后一个驾驶员完成。 - - - Sirens On - Na sirény - Sirenas Prendidas - - Sirene AN - Sirènes On - Sirene accese - Sirene Ligada - Syrena włączona - 开启警笛 - - - Sirens Off - sirény Off - Sirenas Apagadas - - Sirene AUS - Sirènes Off - Sirene spente - Sirene Desligada - Syrena wyłączona - 关闭警笛 - - - You need to install storage containers to have storing capabilities! - Je třeba nainstalovat kontejnery skladovací mít skladovací kapacity! - Debes instalar contenedores para tener capabilidades de almacenamiento! - - Du musst dir Container kaufen, um etwas einlagern zu können! - Vous devez installer des conteneurs de stockage pour disposer de capacité de stockage! - Devi posizionare dei contenitori per aver la possibilità di depositare qualcosa! - Você tem que instalar caixas para poder guardar items! - Musisz zainstalować pojemniki aby uzyskać możliwość składowania rzeczy - 你需要安装存储容器才能具有存储功能! - - - This vehicle isn't capable of storing virtual items. - Toto vozidlo není schopné uchovávat virtuální položky. - Este vehiculo no puede guardar objetos virtuales. - - Dieses Fahrzeug kann keine virtuellen Gegenstände lagern. - Ce véhicule n'est pas en mesure de stocker des objets virtuels. - Questo veicolo non è in grado di trasportare oggetti virtuali. - Esse veículo não pode armazenar items virtuais. - Ten pojazd nie przechowuje wirtualnych przedmiotów - 此载具无法存储虚拟物品。 - - - Weight: - Hmotnost: - Peso: - - Gewicht: - Poids: - Peso: - Peso: - Waga: - 重量: - - - House Storage - dům Storage - Inventario de la casa - - Lagerplatz des Hauses - Conteneur de stockage - Inventario Casa - Cavalos de Força: - Domowa skrzynka - 房子存储 - - - Vehicle Trunk - vozidlo Trunk - Maletero de Vehículo - - Kofferraum - Coffre du véhicule - Inventario veicolo - Capacidade da mala: - Bagażnik pojazdu - 载具存储箱 - - - The vehicle either doesn't exist or is destroyed. - Vozidlo buď neexistuje, nebo je zničena. - El vehículo no existe o fue destruido. - - Le véhicule n'existe pas ou a été détruit. - Entweder existiert das Fahrzeug nicht oder es wurde zerstört. - Il veicolo non esiste o è stato distrutto. - Veículo não existe ou está destruido. - Pojazd nie istnieje lub jest zniszczony - 载具要么不存在要么被毁坏。 - - - Invalid number format - Neplatný formát number - Formato de numero inválido - - Ungültiges Zahlenformat! - Format de nombre invalide - Formato numerico non valido - Formato de número inválido. - Niepoprawny format liczby - 数字格式无效 - - - You can't enter anything below 1! - Nemůžete nic zadávat menší než 1! - No puedes poner nada menos que 1! - - Du kannst nichts unter 1 eingeben! - Vous ne pouvez pas prendre moins d'1 objet ! - Non puoi inserire nulla al di sotto di 1! - Você não pode digitar nada abaixo de 1! - Nie możesz wprowadzić niczego poniżej 1! - 你不能输入少于1的任何物品! - - - The vehicle doesn't have that many of that item. - Vozidlo nemá že mnohé z této položky. - El vehículo no tiene tantos de ese objeto. - - Das Fahrzeug hat nicht so viele dieser Gegenstände. - Le véhicule ne contient pas autant de cet objet. - Il veicolo non contiene così tanti oggetti. - O veículo não tem essa quantidade de items. - Pojazd nie posiada takiej ilości rzeczy. - 载具没有那么多的物品。 - - - Your sound was set to normal mode! - Váš zvuk byl nastaven do normálního režimu! - Votre son a été augmenté! - Tu sonido fue puesto en modo normal! - Il vostro sound è stato impostato in modalità normale! - - Die Lautstärke ist wieder normal! - Seu som voltou ao normal! - Dzwięk został ustawiony w tryb normalny! - 你的声音被设置为正常模式! - - - Your sound was set to fade mode! - Váš zvuk byl nastaven do režimu slábnout! - Votre son a été diminué! - Tu sonido fue puesto en modo bajo! - Il vostro sound è stato impostato in modalità a svanire! - - Deine Lautstärke wurde in den "Fade-Mode" geändert! - Seu som está abafado. - Dzwięk został ustawiony w tryb wyciszony! - 你的声音被设置为静音模式! - - - An RPG game mode developed by Tonic. - Mód RPG hra vyvinutá Tonic. - Un mode de jeu de RPG développé par Tonic. - Un modo de juego de rol desarrollado por Tonic. - Una modalità di gioco RPG sviluppato da Tonic. - Tryb gry RPG stworzona przez Tonic. - Um modo de jogo RPG desenvolvido pela Tonic. - Режим RPG игра, разработанная компанией Tonic. - Ein RPG-Modus entwickelt von Tonic. - 由Tonic开发的RPG游戏模式。 - - - - - Error saving container, couldn't locate house? - Chyba při ukládání kontejner, nemohl najít dům? - Error al salvar contenedor, no se pudo encontrar la casa? - - Fehler beim Speichern der Container: Es konnte kein Haus gefunden werden. - Erreur lors de la sauvegarde des conteneurs, impossible de localiser la maison. - Errore nel salvataggio del contenitore, impossibile trovare la cas a? - Erro ao salvar a caixa, não foi possível encontrar a casa. - Błąd w zapisywaniu pojemnika, nie można zlokalizować domu. - 保存库存错误,找不到房子? - - - You are not allowed to access this storage container without the owner opening it. - Nemáte povolen přístup k tomuto skladovacího kontejneru, aniž by majitel otevření. - No tienes permiso de acceder este contenedor, sin el dueño haberlo abierto. - - Du bist nicht berechtigt, auf diesen Container zuzugreifen, ohne dass der Besitzer ihn aufgeschlossen hat. - Vous n'êtes pas autorisé à accéder à ce conteneur de stockage sans que le propriétaire ne l'ouvre. - Non sei autorizzato ad accedere a questo contentitore senza il permesso del proprietario. - Você so pode acessar a caixa se o dono deixar ela aberta. - Nie masz dostępu do pojemnika dopóki właściciel go nie otworzy. - 除非所有者打开此库存,否则不允许访问该库存。 - - - There are no houses near you. - Nejsou žádné domy u vás. - No hay casas cerca de ti. - Non ci sono case vicino a voi. - Brak domy w pobliżu ciebie. - - Il n'y a aucune maison près de vous. - Não há casas perto de você. - Es gibt keine Häuser in deiner Nähe. - 你在附近没有房子。 - - - The storage box is over the stairs! - Úložný box je u konce schodů! - Le conteneur est dans les escaliers! - La caja de almacenamiento está sobre las escaleras! - Il contenitore è sopra le scale! - Schowek jest na schodach! - A caixa de armazenamento é sobre as escadas! - Ящик для хранения находится над лестницей! - Der Container ist über die Treppe! - 存储箱在楼梯上! - - - You are not the owner of the house. - Nejste vlastníkem domu. - No eres el dueño de la casa. - Non sei il proprietario della casa. - Nie jesteś właścicielem domu. - - Vous n'êtes pas le propriétaire de la maison. - Você não é o dono da casa. - Du bist nicht der Eigentümer des Hauses. - 你不是房子的主人。 - - - You have unlocked the door. - Jste odemkl dveře. - Has abierto la puerta. - - Du hast die Tür aufgeschlossen. - Vous avez ouvert la porte. - Hai sbloccato la porta. - Você destrancou a porta. - Odblokowałeś drzwi. - 你打开了门。 - - - You have locked the door. - Jste zamkli dveře. - Has cerrado con llave la puerta. - - Du hast die Tür abgeschlossen. - Vous avez fermé à clé la porte. - Hai bloccato la porta. - Você trancou a porta. - Zablokowałeś drzwi. - 你锁上了门。 - - - You are not near a door! - Nejste u dveří! - No estas cerca de una puerta! - - Keine Tür in der Nähe! - Vous n'êtes pas près d'une porte! - Non sei vicino ad una porta! - Você não está perto de uma porta! - Nie jesteś przy drzwiach! - 你不在门附近! - - - This house was recently sold and is still processing in the database. - Tento dům byl nedávno prodán a je stále zpracovává v databázi. - Esta casa fue vendida recientemente y esta procesando datos. - - Dieses Haus wurde vor Kurzem verkauft. - Cette maison a été récemment vendue et est en cours de traitement dans la base de données. - Questa casa è stata venduta di recente ed il database la sta ancora processando. - Essa casa já foi vendida, estamos processando a ordem de compra - Ten dom został ostatnio sprzedany i trwa jego przetwarzanie w bazie danych. - 这套房子最近已售出,目前仍在数据库中处理。 - - - You do not have a home owners license! - Nemáte majitelům licenci doma! - No tienes licencia mobiliaria! - - Du hast keine Eigentumsurkunde! - Vous n'avez pas le permis de propriétaires de maison! - Non hai la licenza per il possesso delle case! - Você não tem um Registro Civil para comprar casas! - Nie masz licencji zarządcy nieruchomości! - 你没有房产许可证! - - - You can only own %1 houses at a time. - Můžete vlastnit pouze%1 domy najednou. - Solo puedes ser dueño de %1 casas a la vez. - - Du darfst nur %1 Häuser zugleich besitzen. - Vous ne pouvez posséder que %1 maisons à la fois. - Puoi possedere solo %1 case - Você só pode ter %1 casa(s)! - Możesz posiadać maksymalnie %1 domów. - 你一次只能拥有 %1 套房子。 - - - You do not have enough money! - Nemáte dost peněz! - No tienes suficiente dinero! - - Du hast nicht genug Geld! - Vous n'avez pas assez d'argent! - Non hai fondi a sufficienza! - Você não tem todo esse dinheiro! - Nie masz tyle pieniędzy! - 你没有足够的钱! - - - This house is available for <t color='#8cff9b'>$%1</t><br/>It supports up to %2 storage containers - Tento dům je k dispozici pro <t color='#8cff9b'>$%1</t><br/> Podporuje až %2 skladovací kontejnery - Esta casa esta disponible por <t color='#8cff9b'>$%1</t><br/>Soporta hasta %2 contenedores - - Dieses Haus kostet <t color='#8cff9b'>$%1</t><br/>. Es unterstützt %2 Container. - Cette maison est disponible pour <t color='#8cff9b'>$%1</t><br/> Il prend en charge jusqu'à %2 conteneurs de stockage - Questa casa è disponibile per <t color='#8cff9b'>$%1</t><br/>Può supportare fino a %2 contenitori - Essa casa está disponível por <t color='#8cff9b'>R$%1</t><br/>Ela suporta até %2 caixa(s) - Ten dom jest dostępny za <t color='#8cff9b'>$%1</t><br/>Ma %2 miejsca na pojemniki do przechowywania wyposażenia - 这所房子可以住 <t color='#8cff9b'>$%1</t><br/>它最多支持 %2 个存储箱 - - - Purchase House - nákup domu - Comprar Casa - - Haus kaufen - Acheter la Maison - Compra Casa - Comprar Casa - Kup dom! - 购买房子 - - - This house doesn't belong to anyone. - Tento dům nepatří nikomu. - Esta casa no tiene dueño. - - Dieses Haus gehört niemandem. - Cette maison n'appartient à personne. - Questa casa non appartiene a nessuno. - Essa casa não tem dono. - Ten dom nie ma właściciela. - 这套房子不属于任何人。 - - - This person is not online there for you cannot raid their house! - Tato osoba není on-line proto nelze nájezd svůj dům! - No puedes asaltar esta casa, porque el dueño no esta en linea! - - Der Hausbesitzer ist nicht online, daher kannst du sein Haus nicht durchsuchen! - Cette personne n'est pas sur l'île, vous ne pouvez pas perquisitionner cette maison! - Questa persona non è online quindi non puoi perquisire la sua casa! - O dono da casa não está online, você não pode vasculhar a casa! - Osoba nie jest na serwerze, nie możesz przeszukać domu. - 房子主人不在线,你不能搜查房子! - - - The door is already unlocked! - Dveře jsou již odemčené! - La puerta ya esta abierta! - - Die Tür ist bereits offen! - La porte est déjà débloqué! - La porta è già sbloccata! - A porta está destrancada! - Drzwi są już odblokowane! - 门已经解锁了! - - - The door is already locked! - Dveře jsou již zamčené! - La porte est déjà fermée! - La puerta ya esta cerrada con llave! - La porta è già chiusa a chiave! - - Die Tür ist bereits verriegelt! - Esta porta já está trancada! - Drzwi są już zablokowane! - 门已经锁好了! - - - Breaking lock on door - Lámání zámek na dveřích - Rompiendo la cerradura de la puerta. - - Türschloss wird aufgebrochen... - En train de casser la serrure - Sbloccando la porta - Quebrando a fechadura da porta - Wyłamuje zablokowane drzwi... - 撬开门锁 - - - %1 your house is being raided by the cops! - %1 vašeho domu je vpadl policajti! - %1 tu casa esta siendo asaltada por los policías! - - %1 dein Haus wird von der Polizei durchsucht! - %1, votre maison est perquisitionnée par les policiers ! - %1 la Polizia si sta introducendo in casa tua! - %1 Sua casa está sendo vasculhada pela Policia! - %1 twój dom jest kontrolowany przez policję! - %1 的房子被警察搜查了! - - - House Owner - Majitel domu - Dueño de la casa - - Hauseigentümer - Propriétaire - Proprietario Casa - Proprietário - Właściciel domu - 房子主人 - - - There is nothing in this house. - Není nic v tomto domě. - Esta casa esta vacía. - - Es gibt nichts in diesem Haus. - Il n'y a rien dans cette maison - In questa casa non c'è nulla. - Essa casa está vazia. - Nie znaleziono niczego nielegalnego. - 房子里什么也没有。 - - - Searching House... - Vyhledávání dům ... - Buscando Casa... - - Haus wird durchsucht... - Perquisition de la Maison... - Perquisendo la Casa... - Vasculhando a casa... - Przeszukuję dom... - 搜索房子... - - - You went too far away from the house! - Jste zašel příliš daleko od domu! - Te alejastes mucho de la casa! - - Du hast dich zu weit vom Haus entfernt! - Vous vous êtes trop éloigné de la maison! - Sei andato troppo distante dalla casa! - Você está muito distante da casa! - Jesteś za daleko od domu! - 你离房子太远了! - - - A house was raided and had $%1 worth of drugs / contraband. - Dům byl vpadl a měl $%1 v hodnotě drog / kontrabandu. - Una casa fue asaltada y se econtraron $%1 en drogas / contrabando. - - Ein Haus wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $% gefunden. - Une maison a été perquisitionné et avait $%1 de drogue / contrebande. - Una casa è stata perquisita e sono stati trovati $%1 in materiali illegali. - A casa assaltada tem R$%1 em drogas ou contrabandos. - Podczas przeszukania domu znaleziono kontrabandę o wartości $%1. - 一所房子被搜查,查获价值 $%1 的毒品/违禁品。 - - - Nothing illegal in this house. - Nic nezákonného v tomto domě. - Nada ilegal en esta casa. - - Nichts Illegales in diesem Haus. - Rien d'illégal dans cette maison - Questa casa non contiene nulla d'illegale. - Nada ilegal nessa casa. - Nie znaleziono niczego nielegalnego. - 这房子没有违法物品。 - - - House storage unlocked - Dům skladování odemkl - Inventario de la casa abierto - - Lagerplatz des Hauses aufgeschlossen. - Stockage de la maison déverrouillé - Contenitori della casa sbloccati - Armário da casa destrancado - Pojemnik odblokowany - 房子存储箱解锁 - - - House storage locked - Dům skladování zamčené - Inventario de la casa cerrado con llave - - Lagerplatz des Hauses abgeschlossen. - Stockage de Maison verrouillé - Contenitori della casa bloccati - Armário da casa trancado - Pojemnik zablokowany - 房子存储箱锁定 - - - Locking up house please wait... - Zamykání domu čekejte prosím ... - La casa se esta cerrando con llave, por favor espere... - - Haus wird abgeschlosen, bitte warten... - Fermeture de la maison, veuillez patienter... - Bloccando la casa, attendere prego... - Trancando a casa, aguarde... - Blokuję zamykam dom proszę czekać... - 房子锁定中请稍等... - - - House has been locked up. - Dům byl zamčený. - La maison a été verrouillée. - La casa se a cerrado con llave. - - Haus wurde abgeschlossen. - La casa è stata bloccata. - Sua casa foi trancada! - Dom został zablokowany / zamknięty! - 房子被锁定。 - - - Are you sure you want to sell your house? It will sell for: <t color='#8cff9b'>$%1</t> - Jste si jisti, že chcete prodat svůj dům? To se bude prodávat za: <t color='#8cff9b'>$%1</t> - Estas seguro de que quieres vender tu casa? Se vendera por: <t color='#8cff9b'>$%1</t> - - Bist Du sicher, dass du dein Haus verkaufen möchtest? Du würdest dafür <t color='#8cff9b'>$%1</t> bekommen. - Etes-vous sûr de vouloir vendre votre maison? Elle se vendra pour: <t color='#8cff9b'>$%1</t> - Sei sicuro di voler vendere la tua casa? La venderai per: <t color='#8cff9b'>$%1</t> - Você tem certeza que deseja vender a casa? O valor de venda é: <t color='#8cff9b'>R$%1</t> - Jesteś pewny że chcesz sprzedać dom za <t color='#8cff9b'>$%1</t> - 你确定要卖掉你的房子吗?出售价格:<t color='#8cff9b'>$%1</t> - - - Are you sure you want to remove it? - Jsou si jisti, že jej chcete odstranit? - Estas seguro de que lo quieres remover? - Sei sicuro di voler rimuovere esso? - Czy na pewno chcesz go usunąć? - - Etes-vous sûr de vouloir supprimer le conteneur ? - Você tem certeza que quer remover isso? - Bist du sicher, dass du den Container entfernen möchtest? - 你确定要删除存储箱吗? - - - This house is already owned even though you shouldn't be seeing this hint... - Tento dům je již ve vlastnictví i když by nemělo být vidět tuto radu ... - Cette maison a déjà un propriétaire, même si vous ne devriez pas voir ce message ... - Esta casa es de propiedad ya pesar de que no debería estar viendo esta pista ... - Questa casa è già di proprietà, anche se non si dovrebbe essere visto questo suggerimento ... - Ten dom jest już własnością, nawet jeśli nie należy widzieć tę wskazówkę ... - Esta casa já é de propriedade mesmo que você não deveria estar vendo essa dica ... - Этот дом уже находится в собственности, даже если вы не должны видеть эту подсказку ... - Dieses Haus befindet sich bereits in deinem Besitz. Diesen Hinweis solltest du eigentlich gar nicht sehen... - 尽管你不该看到这个提示,但这所房子已经有房主了... - - - There is no owner for this house. - Neexistuje žádný majitel tohoto domu. - Il n'y a pas le propriétaire de cette maison. - No hay ningún propietario de esta casa. - Non vi è alcun proprietario per questa casa. - Nie ma właściciel tego domu. - Não há proprietário para esta casa. - Там нет владельца для этого дома. - Es gibt keinen Eigentümer für dieses Haus. - 这房子没有主人. - - - - - Food - Jídlo - Faim - Comida - Cibo - Jedzenie - - Hunger - Comida - 食物 - - - Health - Zdraví - Vie - Vida - Salute - Zdrowie - - Gesundheit - Vida - 健康 - - - Water - Voda - Soif - Agua - acqua - Woda - - Durst - Água - - - - - - There isn't a chopper on the helipad! - Není vrtulník na přistávací plocha pro vrtulník! - No hay un helicóptero en el Helipad. - - Es ist kein Helikopter auf dem Landeplatz! - Il n'y a pas d'hélicoptère sur l'héliport - Non c'è alcun elicottero sulla piazzola d'atterraggio - Não existe uma aeronave no heliponto! - W pobliżu nie ma helikoptera! - 直升机停机坪上没有直升机! - - - You need $1,000 to service your chopper - Musíte $ 1,000 servisních kontrol vrtulník - Necesitas $1,000 para reparar el helicóptero. - - Du benötigst $1,000, um deinen Helikopter zu warten. - Vous avez besoin de $1000 pour entretien de votre hélicoptère - Necessiti di $1.000 per fare manutenzione al tuo elicottero - Você precisa de R$1.000 para reparar a sua aeronave - Potrzebujesz $1000 aby serwisować helikopter - 你需要 $1,000 来维修你的直升机 - - - Servicing Chopper [%1]... - Servis Chopper [%1] ... - Reparando Helicóptero [%1]... - - Helikopter wird gewartet [%1]... - Entretien [%1]... - Manutenendo Elicottero [%1]... - Reparando aeronave [%1]... - Serwisuję helikopter [%1]... - 维修直升机 [%1]... - - - The vehicle is no longer alive or on the helipad! - Vozidlo je již nežije nebo na přistávací plocha pro vrtulník! - El vehiculo no esta vivo o en el helipad! - - Das Fahrzeug wurde zerstört oder befindest sich nicht mehr auf dem Helikopterlandeplatz! - L'hélicoptère est détruit ou n'est plus sur l'héliport! - Il veicolo non è più attivo sulla piazzola d'atterraggio! - "A aeronave não está mais disponível no heliponto! - Pojazd nie jest dłużej dostępny na lądowisku - 载具不再存在或停在停机坪上! - - - Your chopper is now repaired and refuelled. - Váš vrtulník není opraveno a tankovat. - Tu helicóptero esta reparado y lleno de combustible. - - Der Helikopter ist nun repariert und aufgetankt. - Votre hélicoptère est maintenant réparé et ravitaillé - L'elicottero è stato riparato e rifornito di carburante. - Sua aeronave está reparada e com o tanque cheio! - Helikopter został naprawiony i natankowany - 你的直升机现在已经修好并加满油。 - - - - - Marijuana leaf - marihuana list - Cannabis - - Kannabis - Cannabis - Cannabis - Maconha não Processada - Konopie - 大麻叶 - - - Apple - Jablko - Manzana - - Apfel - Pomme - Mela - Maçã - Jabłko - 苹果 - - - Apples - jablka - Manzanas - - Äpfel - Pommes - Mele - Maçãs - Jabłka - 很多苹果 - - - Heroin - Heroin - Heroina - - Heroin - Heroïne - Eroina - Heroína - Heroina - 海洛因 - - - Oil - Olej - Petróleo - - Öl - Pétrole - Olio - Petróleo - Benzyna - 石油 - - - Peach - Broskev - Melocotón - - Pfirsich - Pêche - Pesca - Pêssego - Brzoskwinia - 桃子 - - - Peaches - broskve - Melocotones - - Pfirsiche - Pêches - Pesche - Pêssegos - Brzoskwinie - 很多桃子 - - - Crude Oil - Ropa - Petróleo Crudo - - Unverarbeitetes Öl - Pétrole non raffiné - Olio non processato - Petróleo não Refinado - Ropa naftowa - 原油 - - - Processed Oil - Zpracovaný olej - Petróleo Procesado - - Verarbeitetes Öl - Pétrole raffiné - Olio processato - Petróleo Refinado - Olej napędowy - 成品油 - - - Opium Poppy - Mák setý - Planta del Opio - - Unverarbeitetes Heroin - Graine de pavot - Eroina non processata - Heroína não Processada - Heroina nieoczyszczona - 罂粟 - - - Heroin - Heroin - Heroina - - Verarbeitetes Heroin - Héroïne - Eroina processata - Heroína Processada - Heroina oczyszczona - 海洛因 - - - Pot - Hrnec - Marihuana - - Marihuana - Marijuana - Marijuana - Maconha Processada - Marihuana - 大麻 - - - Raw Rabbit - Raw Rabbit - Carne de Conejo - - Rohes Hasenfleisch - Viande de Lapin - Carne di coniglio - Carne de Coelho - Mięso zająca - 生兔肉 - - - Grilled Rabbit - grilované Rabbit - Conejo Asado - - Gegrilltes Hasenfleisch - Lapin grillé - Carne di coniglio alla griglia - Carne de coelho grelhado - Grilowany zając - 烤兔肉 - - - Raw Salema - Raw Salema - Salema Crudo - - Rohe Sardine - Filet de Saupe - Carne di Salmone - Peixe Salema - Mięso salemy - 生沙丁鱼肉 - - - Grilled Salema - Grilované Salema - Salema Cocinado - - Gegrillte Sardine - Sardine grillée - Sardine alla griglia - Sardinha Grelhada - Grilowana Salema - 烤沙丁鱼肉 - - - Raw Ornate - Raw Ozdobený - Ornate Crudo - - Roher Kaiserfisch - Filet d'Ornate - Carne di Orata - Carne Francesa - Mięso Ornata - 生梭鱼肉 - - - Grilled Ornate - grilované Ozdobený - Ornate Cocinado - - Gegrillter Kaiserfisch - Doré grillé - Angelfish alla griglia - Angelfish Grelhado - Grilowany Ornat - 烤梭鱼肉 - - - Raw Mackerel - Raw Makrela - Verdel Crudo - - Rohe Makrele - Filet de Maquereau - Carne di Sgombro - Peixe Cavalinha - Mięso Makreli - 生鲭鱼肉 - - - Grilled Mackerel - grilované makrely - Verdel Cocinado - - Gegrillte Makrele - Maquereau grillé - Sgombro alla griglia - Cavalinha Grelhada - Grilowana Makrela - 烤鲭鱼肉 - - - Raw Tuna - syrového tuňáka - Atún Crudo - - Roher Thunfisch - Filet de Thon - Carne di Tonno - Peixe Tuna - Mięso Tuńczyka - 生金枪鱼肉 - - - Grilled Tuna - grilované Tuna - Atún Cocinado - - Gegrillter Thunfisch - Thon grillé - tonno alla griglia - Atum Grelhado - Grilowany Tuńczyk - 烤金枪鱼肉 - - - Raw Mullet - Raw Mullet - Lisa Cruda - - Rohe Meerbarbe - Filet de Mulet - Carne di Triglia - Peixe Mullet - Mięso Cefala - 生鲻鱼肉 - - - Fried Mullet - Fried Mullet - Lisa Cocinada - - Frittierte Meerbarbe - Rouget frits - Triglia fritta - Mullet Fritado - Grilowany Cefal - 油炸鲻鱼肉 - - - Raw Catshark - Raw máčka - Pez Gato Crudo - - Roher Katzenhai - Filet de Poisson Chat - Carne di Squalo - Tubarão Gato - Mięso Rekina - 生鲨鱼肉 - - - Fried Catshark - Fried máčka - Pez Gato Cocinado - - Frittierter Katzenhai - Poisson-chat frit - profondo palombo fritti - Tubarão Gato Frito - Grilowany Rekin - 油炸鲨鱼肉 - - - Raw Turtle - Raw Turtle - Carne de Tortuga - - Rohes Schildkrötenfleisch - Viande de Tortue - Carne di Tartaruga - Carne de Tartaruga - Mięso Żółwia - 生海龟肉 - - - Turtle Soup - Turtle Soup - Sopa de Tortuga - - Schildkrötensuppe - Soupe à la Tortue - Zuppa di Tartaruga - Sopa de Tartaruga - Zupa z żółwia - 海龟肉汤 - - - Raw Chicken - Raw Chicken - Carne de Pollo - - Poulet cru - Rohes Hühnchenfleisch - pollo crudo - Galinha Crua - Surowy Kurczak - 生鸡肉 - - - Deep Fried Chicken - Smažené kuře - Pollo Frito - - Schwarz Frittiertes Hühnchen - Poulet frit - Nero Fried Chicken - Frango Frito - Smażony Kurczak - 炸鸡肉 - - - Raw Rooster - Raw Kohout - Carne de Gallo - - Coq cru - Rohes Hähnchenfleisch - Rooster Raw - Galo Cru - Surowy Kogut - 生公鸡肉 - - - Grilled Rooster - grilované Kohout - Gallo Asado - - Gegrilltes Hähnchen - Coq grillé - cazzo alla griglia - Galo Grelhado - Grilowany Kogut - 烤鸡肉 - - - Raw Goat - Raw Kozí - Carne de Cabra - - Rohes Ziegenfleisch - Chèvre crue - Carne di capra Raw - Carne de Cabra Crua - Surowa Koza - 生山羊肉 - - - Grilled Goat - grilovaný kozí - Cabra Asada - - Gegrilltes Ziegenfleisch - Chèvre grillée - Carne di capra alla griglia - Carne de Cabra Grelhada - Grilowana Koza - 烤山羊肉 - - - Raw Sheep - Raw Ovce - Carne de Obeja - - Rohes Schafsfleisch - Mouton cru - Carne di pecora grezza - Carne de Ovelha Crua - Surowa Owca - 生绵羊肉 - - - Grilled Sheep - grilované Ovce - Obeja Asada - - Gegrilltes Schafsfleisch - Mouton grillé - Mutton alla griglia - Mutton Grelhado - Grilowana Owca - 烤全羊肉 - - - Fishing Pole - Rybářský prut - Palo de Pesca - - Angel - Canne à pêche - Canna da pesca - Vara de Pescar - Wędka - 钓鱼竿 - - - Water Bottle - Láhev na vodu - Botella de Agua - - Wasserflasche - Bouteille d'eau - Bottiglia d'acqua - Garrafa d'água - Butelka wody - 瓶装水 - - - Coffee - Káva - Café - - Kaffee - Café - Caffè - Café - Kawa - 咖啡 - - - Donuts - koblihy - Donas - - Donuts - Donuts - Ciambelle - Rosquinha - Pączki - 甜甜圈 - - - Empty Fuel Canister - Prázdný palivo může - Bidón de Combustible Vacío - - Leerer Benzinkanister - Jerrican Vide - Tanica di carburante vuota - Tanque de Gasolina Vazio - Pusty kanister - 空汽油桶 - - - Full Fuel Canister - Plná palivo může - Bidón de Combustible Lleno - - Gefüllter Benzinkanister - Jerrican de Carburant - Tanica di carburante piena - Tanque de Gasolina Cheio - Pełny Kanister - 满汽油桶 - - - Defibrillator - defibrilátor - Desfibrilador - - Defibrillator - Défibrillateur - defibrillatore - Desfibrilador - defibrylator - 心脏除颤器 - - - Toolkit - Toolkit - Kit de Herramientas - - Werkzeugkit - Boîte à outils - kit di strumenti - conjunto de ferramentas - zestaw narzędzi - 维修包 - - - Pickaxe - Krumpáč - Pico - - Spitzhacke - Pioche - Piccone - Picareta - Kilof - 镐子 - - - Copper Ore - Měděná ruda - Cobre - - Kupfererz - Minerai de Cuivre - Minerale di Rame - Pepita de Cobre - Ruda miedzi - 铜矿石 - - - Iron Ore - Železná Ruda - Hierro - - Eisenerz - Minerai de Fer - Minerale di Ferro - Pepita de Ferro - Ruda żelaza - 铁矿石 - - - Iron Ingot - Železná cihla - Lingote de Hierro - - Eisenbarren - Lingot de Fer - Lingotto di ferro - Barra de Ferro - Sztabka żelaza - 铁锭 - - - Copper Ingot - měď ingotů - Lingote de Cobre - - Kupferbarren - Lingot de cuivre - Lingotto di Rame - Barra de Cobre - Sztabka miedzi - 铜锭 - - - Sand - Písek - Arena - - Sand - Sable - Sabbia - Areia - Piasek - 沙子 - - - Salt - Sůl - Sal - - Salz - Sel - Sale - Sal - Sól kopana - 盐矿 - - - Refined Salt - rafinovaný Salt - Sal Refinada - - Raffiniertes Salz - Sel traité - Sale raffinato - Sal Refinado - Sól rafinowana - 食盐 - - - Glass - Sklo - Vidrio - - Glas - Verre - Vetro - Vidro - Szkło - 玻璃 - - - Polished Diamond - leštěný Diamond - Diamante Pulido - - Geschliffene Diamanten - Diamant Taillé - Diamante tagliato - Diamante Lapidado - Diament szlifowany - 钻石抛光 - - - Uncut Diamond - Uncut Diamond - Diamante Bruto - - Ungeschliffene Diamanten - Diamant Brut - Diamante grezzo - Diamante Bruto - Diament surowy - 未切割钻石 - - - Tactical Bacon - Tactical Bacon - Tocino - - Taktischer Speck - Bacon tactique - Carne secca - Bacon Tático - Posiłek taktyczny - 战术培根 - - - RedGull - RedGull - RedGull - RedGull - RedGull - RedGull - RedGull - RedGull - RedGull - 红牛 - - - Lockpick - Šperhák - Ganzúa - - Dietrich - Outil de crochetage - Grimaldello - Chave Mestra - Wytrych - 开锁工具 - - - Rock - Skála - Piedra - - Stein - Pierre - Roccia - Pedra - Skała - 矿石 - - - Cement Bag - cement Bag - Bolsa de Cemento - - Zement Sack - Sac de ciment - Sacco di Cemento - Saco de Cimento - Worek cementu - 水泥 - - - Gold Bar - Gold Bar - Barra de Oro - - Goldbarren - Lingot d'or - Lingotto d'Oro - Barra de Ouro - Sztabka złota - 金条 - - - Blasting Charge - Trhací Charge - Carga Explosiva - - Sprengladung - Charge de dynamite - Carica Esplosiva - Explosivo - Ładunek wybuchowy - 爆破装置 - - - Bolt Cutter - Bolt Cutter - Cizalla - - Bolzenschneider - Outils de serrurier - Tronchese - Alicate - Nożyce do kłódek - 螺栓切割机 - - - Bomb Defuse Kit - Bomby zneškodnit Kit - Kit para Desarmar Bombas - - Bombenentschärfungskit - Outils de désamorçage - Attrezzi per il disinnesco - Kit anti-bomba - Zestaw saperski - 爆破拆除工具 - - - Small Storage Box - Malá přihrádka - Contenedor Pequeño - - Kleine Lagerbox - Petit Conteneur de stockage - Contenitore piccolo - Caixa Pequena - Mały pojemnik - 小储物箱 - - - Large Storage Box - Velký úložný box - Contenedor Grande - - Große Lagerbox - Grand Conteneur de stockage - Contenitore grande - Caixa Grande - Duży pojemnik - 大储物箱 - - - Coca Leaf - Coca Leaf - Hoja de Coca - - Unverarbeitetes Kokain - Feuille de Coca - Cocaina non processata - Cocaína não Refinada - Nieoczyszczona kokaina - 古柯叶 - - - Coke - Koks - Cocaína - - Verarbeitetes Kokain - Cocaïne - Cocaina processata - Cocaína Refinada - Oczyszczona kokaina - 可卡因 - - - Spike Strip - Spike Strip - Barrera de Clavos - - Nagelband - Herse - Striscia Chiodata - Tapete de Espinhos - Kolczatka drogowa - 钉刺带 - - - - - Driver License - Řidičský průkaz - Licencia de Conducir - - Führerschein - Permis de Conduire - Licenza di Guida - Licença de Motorista - Prawo jazdy - 小车驾驶证 - - - Pilot License - pilotní licence - Licencia de Piloto - - Pilotenschein - Licence de Pilote - Licenza da Pilota - Licença de Piloto - Licencja Pilota - 飞行员证 - - - Heroin Training - heroin Training - Entrenamiento de Heroina - - Heroinausbildung - Transformation d'Héroïne - Processo Eroina - Treinamento de Heroina - Wytwarzanie Heroiny - 海洛因加工证 - - - Oil Processing - Zpracování olej - Procesamiento de Petroleo - - Ölverarbeitung - Raffinage du pétrole - Processo Olio - Refinamento de Petróleo - Rafinacja ropy naftowej - 石油提炼证 - - - Diving License - potápěčské licence - Licencia de Buceo - - Taucherschein - Permis de Plongée - Licenza di Pesca - Licença de Mergulho - Licencja Nurka - 潜水证 - - - Boating License - Vodácký licence - Licencia de Botes - - Bootsschein - Permis Bateau - Licenza Nautica - Licença de Barco - Patent Motorowodny - 海员证 - - - Firearm License - zbrojní průkaz - Licencia de Armas - - Waffenschein - Permis de Port d'Arme - Porto d'Armi - Licença de Porte de Armas - Pozwolenie na broń - 持枪证 - - - Coast Guard License - Pobřežní stráž licence - Licencia de Guardia Costera - - Küstenwachenausbildung - Garde-Côtes - Licenza Guardia Costiera - Licença da Guarda Costeira - Trening straż przybrzeżna - 海岸警卫队证 - - - Rebel Training - Rebel Training - Entrenamiento Rebelde - - Rebellenausbildung - Entraînement rebelle - Licenza da Ribelle - Treinamento Rebelde - Trening rebelianta - 叛军训练 - - - Truck License - Truck licence - Licencia de Camiones - - LKW-Führerschein - Permis Poids Lourds - Licenza Camion - Licença de Caminhão - Prawo jazdy - ciężarówki - 货车驾驶证 - - - Diamond Processing - Diamond Processing - Procesamiento de Diamantes - - Diamantenverarbeitung - Taillage des Diamants - Processo Diamanti - Lapidação de Diamante - Szlifierz diamentów - 钻石加工厂 - - - Copper Processing - Zpracování měď - Procesamiento de Cobre - - Kupferverarbeitung - Fonte du Cuivre - Processo Rame - Processamento de Cobre - Wytapianie miedzi - 铜矿加工 - - - Iron Processing - Zpracování Iron - Procesamiento de Hierro - - Eisenverarbeitung - Fonte du Fer - Processo Ferro - Processamento de Ferro - Wytapianie żelaza - 铁矿加工 - - - Sand Processing - Zpracování písek - Procesamiento de Arena - - Sandverarbeitung - Traitement du Sable - Processo Sabbia - Processamento de Areia - Hutnik szkła z piasku - 玻璃制造证 - - - Salt Processing - sůl Processing - Procesamiento de Sal - - Salzverarbeitung - Traitement du Sel - Processo Sale - Processamento de Sal - Warzenie soli - 食盐制造证 - - - Cocaine Training - kokain Training - Entrenamiento de Cocaína - - Kokainausbildung - Transformation de la Cocaïne - Processo Cocaina - Treinamento de Cocaína - Oczyszczanie kokainy - 可卡因加工证 - - - Marijuana Training - Marihuana Training - Entrenamiento de Marihuana - - Marihuanaausbildung - Traitement du Cannabis - Processo Marijuana - Treinamento de Maconha - Suszenie konopi - 大麻加工证 - - - Cement Mixing License - Cement Mixing licence - Licencia para Mezclar Cemento - - Zementmisch-Lizenz - Fabrication du Ciment - Processo Cemento - Licença de Cimento - Wytwórca cementu - 水泥制造证 - - - Medical Marijuana License - Medical Marihuana Licence - Licencia de Marihuana Medicinal - - Medizinisches Marijuana-Lizenz - Licence de Cannabis Médical - Medical Marijuana Licenza - Licença Medical Marijuana - Medical Marijuana Licencji - 医用大麻许可证 - - - Home Owners License - Home Majitelé licence - Licencia Mobiliaria - - Eigentumsurkunde - Droit de Propriété - Licenza possesso Casa - Licença de Casas - Zarządca nieruchomości - 房产证 - - - - - This can only be used on a vault. - To lze použít pouze v trezoru. - Esto solo se puede usar en una bóveda. - - Dies kann nur an einem Tresor benutzt werden. - Cela ne peut être utilisé que sur un coffre-fort. - Può essere usata solo sulla cassaforte. - Isso só pode ser usado em um cofre. - Możesz tego użyć na skarbcu. - 这只能用于金库。 - - - There is already a charge placed on this vault. - Existuje již náboj umístěn na tomto trezoru. - Ya hay un explosivo puesto en esta bóveda - - Es gibt bereits eine Sprengladung am Tresor. - Une charge de dynamite est déjà placé sur ce coffre. - C'è già una carica piazzata sulla cassaforte. - Já existe uma carga colocada sobre esse cofre. - Już założono ładunek wybuchowy na skarbcu. - 这座金库已经安装爆破装置。 - - - The vault is already opened. - Klenba je již otevřen. - La bóveda ya esta abierta. - - Der Tresor ist bereits offen. - Le coffre est déjà ouvert. - La cassaforte è già aperta. - O cofre está aberto. - Skarbiec jest już otwarty. - 金库已经打开了. - - - A blasting charge has been placed on the federal reserves vault, You have till the clock runs out to disarm the charge! - S rozbuškami náboj byl umístěn na federální rezervy trezoru, jste až do hodiny vyčerpá odzbrojit náboj! - Una carga explosiva ha sido puesta en la bóveda de la reserva federal, tienes hasta que se acabe el tiempo para desarmar el explosivo! - - Eine Sprengladung wurde am Safe angebracht. Du hast Zeit, bis die Uhr abläuft, um die Ladung zu entschärfen! - Une charge de dynamite a été placée sur le coffre de la réserve fédérale. Vous avez jusqu'au temps imparti pour désarmorcer la charge ! - Una carica esplosiva è stata piazzata sulla cassaforte della Riserva Federale, puoi cercare di disinnescarla prima che scada il tempo! - O explosivo foi colocado no cofre , você tem até o tempo acabar para desarmar o explosivo. - Ładunek wybuchowy został założony na skarbcu rezerw federalnych, musisz rozbroić ładunek nim wybuchnie! - 金库里已经安装了爆破装置,你必须有足够的时间解除爆破装置! - - - The timer is ticking! Keep the cops away from the vault! - Časovač je tikání! Udržujte policajty od trezoru! - El tiempo esta corriendo, manten alejados a los policías! - - Der Timer läuft! Halte die Polizei von Safe fern! - La minuterie est lancée! Gardez la police loin de la bombe ! - Il tempo sta scorrendo! Tieni la polizia lontana dalla cassaforte! - O tempo está passando! Mantenha os policiais longe do cofre - Zegar tyka! Trzymaj policję z dala od skarbca! - 计时器开始计时!请远离爆破点! - - - The charge has been disarmed! - Náboj byl odzbrojen! - El explosivo ha sido desarmado! - - Die Sprengladung wurde entschärft! - La charge a été désamorcée ! - La carica esplosiva è stata disinnescata! - O explosivo foi desarmado! - Ładunek wybuchowy rozbrojony! - 爆破装置被解除! - - - The vault is now opened - Klenba je nyní otevřena - La bóveda esta abierta - - Der Tresor ist jetzt offen! - Le coffre est maintenant ouvert - La cassaforte è stata aperta - O cofre está aberto. - Skarbiec otwarty - 金库现在已经打开了 - - - You must open the container before placing the charge! - Je nutné otevřít nádobu před umístěním nabíječku! - Vous devez ouvrir le conteneur avant de placer le chargeur ! - Debes abrir el contenedor antes de poner el explosivo! - È necessario aprire il contenitore prima di mettere il caricabatterie! - Musisz otworzyć pojemnik przed wprowadzeniem opłat! - - Você deve abrir o container antes de colocar o explosivo! - Du musst den Container öffnen, bevor du die Ladung platzieren kannst! - 安装爆破装置前你必须打开金库大门! - - - You are not looking at a house door. - Nejste při pohledu na dveře domu. - No estas viendo a la puerta de una casa. - - Du siehst keine Haustür an. - Vous n'êtes pas en face de la porte. - Non sei girato verso la porta di una casa. - Você não esta olhando para a porta. - Nie patrzysz w stronę drzwi. - 你需要靠近门才能使用。 - - - !!!!! SOMEONE IS BREAKING INTO THE FEDERAL RESERVE !!!!!! - !!!!! Někdo vloupání do Federálního rezervního systému !!!!!! - !!!!! LA RESERVA FEDERAL ESTA SIENDO ASALTADA !!!!!! - - !!!!! JEMAND BRICHT IN DIE ZENTRALBANK EIN !!!!!! - !!!!! QUELQU'UN TENTE DE S'INTRODUIRE DANS LA RÉSERVE FÉDÉRALE !!!!!! - !!!!!! QUALCUNO STA CERCANDO DI INTRODURSI NELLA RISERVA FEDERALE !!!!!! - !!!!! A RESERVA FEDERAL ESTÁ SENDO ROUBADA !!!!!! - !!!!!! KTOŚ SIĘ WŁAMUJE DO BANKU REZERW FEDERALNYCH !!!!! - !!!!! 有人闯进金库 !!!!!! - - - %1 was seen breaking into a house. - %1 byl viděn vloupání do domu. - %1 ha sido visto entrando a una casa. - - %1 wurde beim Einbruch in ein Haus gesehen. - %1 a été vu rentrant dans une maison par effraction. - %1 è stato visto fare irruzione in una casa. - %1 foi visto invadindo sua casa. - %1 był widziany jak włamywał się do domu. - %1 闯入一所房子。 - - - Cutting lock on door - Řezání zámek na dveřích - Cortando la cerradura de la puerta - - Schloss wird aufgebrochen... - Crochetage de la serrure - Tranciando i blocchi sulla porta - Quebrando o cadeado da porta - Przecinam zabezpieczenia domu - 门锁被撬 - - - You must open the outside doors before opening it! - Je nutné otevřít venkovní dveře před otevřením! - Vous devez ouvrir les portes extérieures avant de l'ouvrir ! - Debes abrir las puertas de afuera antes de abrir esta! - È necessario aprire le porte esterne prima di aprirlo! - Musisz otworzyć zewnętrzne drzwi przed otwarciem! - - Você deve abrir as portas externas antes de abrir essa! - Du musst die Außentüren öffnen, bevor du weitermachen kannst! - 打开门前你必须先打开外面的门! - - - You are not looking at a vault. - Nejste při pohledu na klenbu. - Vous ne regardez pas le coffre. - No estas apuntando a la bóveda. - Non cercate in un caveau. - Nie jesteś patrząc na sklepieniu. - Você não está olhando para um cofre. - Вы не смотрите на хранилище. - Du siehst keinen Tresor an. - 你不是金库看守。 - - - There is no charge on the vault? - Neexistuje žádný poplatek na klenbě? - No hay un explosivo en la bobeda? - - Es gibt keine Sprengladung am Tresor? - Il n'y a pas de dynamite sur le coffre ? - Non c'è alcuna carica esplosiva sulla cassaforte - Não há nenhum explosivo no cofre. - Nie ma ładunku na skarbcu? - 爆破装置安装在了金库里? - - - Defusing charge... - Zneškodňovat náboj ... - Desarmando Explosivo... - - Sprengladung wird entschärft... - Désamorçage de la charge... - Disinnescando la carica esplosiva... - Desarmando o explosivo... - Rozbrajam ładunek... - 拆除爆破装置... - - - The charge has been defused - Obvinění byla zneškodněna - El explosivo ha sido desarmado - - Die Sprengladung wurde entschärft. - La charge a été désamorcée - La carica esplosiva è stata disinnescata - O explosivo foi desarmado - Ładunek został rozbrojony - 爆破装置已被拆除 - - - You need to look at the vehicle you want to refuel! - Musíte se podívat na vozidla, které chcete natankovat! - Debes mirar a el vehiculo que quieres llenar de combustible! - - Du musst das Fahrzeug ansehen, das du auftanken möchtest! - Vous avez besoin de regarder le véhicule dont vous voulez faire le plein ! - Devi essere girato verso il veicolo che vuoi rifornire! - Você precisa estar olhando para o veículo que deseja abastecer! - Musisz spojrzeć w kierunku pojazdu który chcesz zatankować! - 你要看看你的载具是否加满了油! - - - You need to be closer to the vehicle! - Musíte být blíže k vozidlu! - Debes estar más cerca del vehiculo! - - Du musst näher am Fahrzeug sein! - Vous devez être plus proche du véhicule ! - Devi stare più vicino al veicolo! - Você precisa estar mais perto do veículo! - Musisz być bliżej pojazdu! - 你需要离载具近一点! - - - Refuelling Fuel Canister - Tankování paliva kanystr - Ravitaillement en carburant de la citerne - Llenando Bidón de Combustible - Rifornimento carburante scatola metallica - Tankowanie paliwa Kanister - O reabastecimento de combustível vasilha - Дозаправка топлива канистра - Benzinkanister befüllen - 加注汽油桶 - - - Fuel Station Pump - Čerpací stanice čerpadla - Pompe à essence - Estación de bombeo de combustible - Pompa Stazione di rifornimento - Paliwo przepompowni - Bomba de Combustível Station - Топливная Насосная станция - Zapfsäule - 燃料加油站 - - - Spend $%1 to refuel your Empty Fuel Canister? - Utratit $%1 natankovat vaše prázdné palivové kanystr? - Dépenser $%1 pour faire le plein de votre réservoir ? - Gastar $%1 para llenar el Bidón de Combustible? - Spendere $%1 per rifornire di carburante la vostra scatola metallica del combustibile vuoto? - Wydać $%1 zatankować swój pustego zasobnika paliwa? - Gastar R$%1 para reabastecer a sua vasilha de combustível vazio? - Потратить $%1 для дозаправки ваш Пусто баллон с горючим? - Willst du deinen leeren Kraftstoffkanister für $%1 befüllen? - 花费 $%1 加满你的空汽油桶? - - - You must be closer to the fuel pump! - Musíte být blíže k palivovému čerpadlu! - Vous devez être plus proche de la pompe à carburant ! - Debe estar más cerca de la bomba de combustible! - È necessario essere più vicino alla pompa del carburante! - Você deve estar mais perto da bomba de combustível! - Você deve estar mais perto da bomba de combustível! - Вы должны быть ближе к топливному насосу! - Du musst dich näher an der Zapfsäule befinden! - 你必须靠近加油机! - - - You have successfully refuelled the Fuel Canister! - Úspěšně jste tankovat palivový kanystr! - Vous avez ravitaillé avec succès le réservoir d'essence ! - Usted ha llenado con exito el Bidón de Combustible! - Hai rifornimento con successo il canestro del combustibile! - Pomyślnie zatankowany kanistra paliwa! - Você reabastecido com sucesso a vasilha de combustível! - Вы успешно заправились на баллон с горючим! - Der Benzinkanister wurde befüllt! - 你已加满汽油桶! - - - Refuelling %1 - Doplňování paliva %1 - Llenado el Bidón %1 - - Wird befüllt %1... - Ravitaillement en cours de %1 - Rifornendo %1 - Abastecendo %1 - Tankuję %1 - 补充油量 %1 - - - You have refuelled that %1 - Jsi natankoval, že produkt %1 - Has llenado el %1 - - Du hast deinen %1 befüllt. - Vous avez ravitaillé %1 - Hai rifornito di carburante un %1 - Você abasteceu %1 - Zatankowałeś %1 - 你要补充油量 %1 - - - This vehicle is already in your key-chain. - Toto vozidlo je již ve vaší klíčenky. - Esta vehiculo ya esta en tu llavero. - - Du hast diesen Fahrzeugschlüssel bereits an deinem Schlüsselbund. - Ce véhicule est déjà dans votre porte-clé. - Possiedi già le chiavi di questo veicolo. - Você já tem a chave desse veículo. - Masz już klucze do tego pojazdu. - 你已经获得载具钥匙。 - - - Lock-picking %1 - Lockpicking %1 - Abriendo Cerradura %1 - - Wird aufgebrochen %1... - Crochetage de %1 - Scassinando %1 - Arrombando %1 - Włamujesz się do %1 - 撬锁 %1 - - - You got to far away from the target. - Dostal jsi příliš daleko od cíle. - Le alejastes mucho del objeto. - - Du hast dich zu weit vom Ziel entfernt. - Vous êtes trop loin de la cible. - Sei andato troppo lontano dall'obiettivo - Voçê está muito longe do seu alvo. - Jesteś za daleko od celu. - 你必须远离目标。 - - - You now have keys to this vehicle. - Nyní máte klíče k tomuto vozidlu. - Ahora tienes las llaves para este vehiculo. - - Du hast nun einen Schlüssel zu diesem Fahrzeug. - Vous avez maintenant les clés de ce véhicule - Sei ora in possesso delle chiavi di questo veicolo. - Agora você tem as chaves do veiculo. - Masz teraz klucze do tego pojazdu - 你现在获得了载具钥匙。 - - - The lockpick broke. - Paklíč zlomil. - La ganzua se rompió. - - Der Dietrich ist abgebrochen. - L'outil de crochetage s'est cassé - Il grimaldello si è rotto. - A Chave Mestra quebrou. - Wytrych się złamał. - 撬锁工具坏了。 - - - %1 was seen trying to lockpick a car. - %1 byl viděn snaží lockpick auto. - %1 ha sido visto tratando de abrir un carro. - - %1 wurde beim Aufbrechen eines Auto erwischt. - %1 a été vu essayant de crocheter une voiture - %1 è stato visto provare a scassinare un veicolo. - %1 foi visto usando uma Chave Mestra em um carro. - %1 był widziany jak próbował włamać się do samochodu. - %1 试图撬开一辆载具的门锁。 - - - You are not near a mine! - Nejste v blízkosti dolu! - No estas cerca de una mina! - - Du bist nicht in der Nähe einer Mine! - Vous n'êtes pas près d'une mine! - Non ti trovi vicino ad una cava! - Você não está próximo de uma mina! - Nie jesteś blisko kopalni! - 你不在矿场附近! - - - You can't mine from inside a car! - Nemůžete dolovat z vnitřku vozu! - No puedes minar desde adentro de un vehiculo! - - Du kannst nicht in deinem Auto abbauen! - Vous ne pouvez pas miner à l'intérieur d'une voiture! - Non puoi minare da dentro un veicolo! - Você não pode minerar dentro do carro! - Nie możesz wydobywać z samochodu! - 你不能从车里面采集! - - - You have mined %2 %1 - Jste těžil% %2 1 - Has minado %2 %1 - - Du hast %2 %1 abgebaut. - Vous avez miné %2 %1 - Hai minato %2 %1 - Você minerou %2 %1 - Wydobyłeś %2 %1 - 你开采 %2 %1 - - - Place Spike Strip - Umístěte Spike Strip - Poner Barrera de Clavos - - Nagelband platzieren - Placer la herse - Posa striscie chiodate - Tapete de Espinhos armado. - Rozłóż kolczatkę - 放置钉刺带 - - - Pack up Spike Strip - Sbalit Spike Strip - Guardar Barrera de Clavos - - Nagelband zusammenpacken - Ranger la herse - Recupera striscie chiodate - Pegar Tapete de Espinhos. - Zwiń kolczatkę - 收起钉刺带 - - - You need to be inside your house to place this. - Musíte být uvnitř svého domu na místo toto. - Debes estar dentro de tu casa para poner eso. - - Du musst in deinem Haus sein, um dies platzieren zu können. - Vous devez être à l'interieur de votre maison pour placer ceci - Devi essere all'interno della tua casa per posizionarlo. - Você precisa estar dentro da sua casa para colocar isso! - Musisz być wewnątrz własnego domu aby to umieścić. - 你需要在你的房子里放置这个。 - - - You cannot place any more storage containers in your house. - Nelze umístit žádné další skladovací kontejnery ve vašem domě. - No puedes poner mas contenedores en tu casa. - - Es können keine weiteren Container in dein Haus gestellt werden. - Vous ne pouvez pas placer d'autres conteneurs dans votre maison. - Non puoi installare altri contenitori in casa tua. - Você não pode colocar mais caixas dentro da sua casa. - Nie masz więcej miejsca na pojemniki w tym domu. - 你不能在你的房子里放更多的储藏存储箱。 - - - No more free storage spaces in your house. - Žádné další volné skladové prostory v domě. - No hay más espacio de almacenamiento en tu casa. - - Es gibt in deinem Haus keinen freien Lagerplatz mehr. - Il n'y a plus d'espace libre dans votre maison. - I contenitori in casa tua hanno finito lo spazio disponibile. - Não ha mais espaços para guardar itens em sua casa. - Brak wolnych miejsc na pojemniki w domu. - 你的房子没有空闲的储藏空间。 - - - You need to select an item first! - Je třeba vybrat položku na prvním místě! - Debes seleccionar un objeto primero! - - Du musst zuerst einen Gegenstand auswählen! - Vous devez sélectionner un objet ! - Devi prima selezionare un oggetto! - Você precisa selecionar um item primeiro! - Zaznacz najpier rzecz. - 你需要选择一个物品! - - - You can now run farther for 3 minutes - Nyní můžete spustit další 3 minuty - Ahora puedes correr mas por 3 minutos - - Vous pouvez courir pendant 3 minutes - Du kannst jetzt für 3 Minuten weiter laufen. - Puoi ora correre per 3 minuti consecutivi - Você agora pode correr por 3 minutos - Możesz przez 3 minuty biec bez wysiłku - 你现在可以跑3分钟 - - - You already have a Spike Strip active in deployment - Ty už mají Spike Strip aktivní při nasazení - Ya tienes una Barrera de Clavos activada - - Du platzierst bereits ein Nagelband! - Vous avez déjà une herse en train d'être deployée - Hai già una striscia chiodata piazzata - Você já tem um Tapete de Espinhos ativo - Aktualnie masz rozłożoną kolczatkę - 你已经部署了一个钉刺带。 - - - You can't refuel the vehicle while in it! - Nemůžete natankovat z vozidla, když v něm! - No puedes llenar tu vehiculo mientras estas adentro de él! - - Du kannst ein Fahrzeug nicht betanken während du dich darin befindest! - Vous ne pouvez pas faire le plein du véhicule tout en étant à l'intérieur ! - Non puoi rifornire il veicolo di benzina mentre ci sei dentro! - Você não pode abastecer o veículo enquanto dentro dele! - Nie możesz zatankować pojazdu gdy w nim jesteś! - 你不能在车里加油! - - - This item isn't usable. - Tato položka není použitelný. - Este objeto no es utilizable. - - Dieser Gegenstand ist nicht benutzbar. - Cet objet n'est pas utilisable. - Questo oggetto è inutilizzabile. - Esse item não é usável. - Nie można użyć tej rzeczy. - 这个物品不能使用。 - - - - - Processing Oil - zpracování ropy - Procesando Petróleo - - Öl wird verarbeitet... - Raffinage de Pétrole - Raffinando il Petrolio - Processando Petróleo - Rafinacja ropy - 加工石油 - - - Cutting Diamonds - řezání diamantů - Cortando Diamantes - - Diamanten werden geschliffen... - Taillage de diamant - Rifinendo diamanti - Lapidando Diamante - Szlif diamentów - 切割钻石 - - - Processing Opium - zpracování Opium - Procesando Opio - - Heroin wird verarbeitet... - Traitement d'Héroïne - Processando Eroina - Processando Heroína - Oczyszczanie heroiny - 加工海洛因 - - - Casting Copper Ingots - Casting měděných ingotů - Fundiendo Lingotes de Cobre - - Fonte du Cuivre - Kupfer wird verarbeitet... - Processando in lingotti di Rame - Processando Cobre - Wytop miedzi - 铸造铜锭 - - - Casting Iron Ingots - Litiny ingoty - Fundiendo Lingotes de Hierro - - Fonte du Fer - Eisen wird verarbeitet... - Processando Ferro - Processando Ferro - Wytop żelaza - 铸造铁锭 - - - Processing Sand - zpracování Písek - Procesando Arena - - Sand wird verarbeitet... - Fonte du Sable - Processando Sabbia - Processando Areia - Topienie piasku - 制作玻璃 - - - Processing Salt - zpracování Salt - Procesando Sal - - Salz wird verarbeitet... - Traitement du Sel - Processando Sale - Refinando Sal - Warzenie soli - 制造食盐 - - - Processing Coca Leaves - Zpracování listů koky - Procesando Hojas de Coca - - Kokain wird verarbeitet... - Traitement de Cocaïne - Processando Cocaina - Processando Cocaína - Oczyszczanie kokainy - 加工可卡因 - - - Processing Marijuana - zpracování Marihuana - Procesando Marihuana - - Marihuana wird verarbeitet... - Traitement de Marijuana - Processando Marijuana - Processando Maconha - Suszenie marihuany - 加工大麻 - - - Mixing Cement - Míchání Cement - Mezclando Cemento - - Zement wird gemischt... - Mélange de ciment - Processando Cemento - Misturando Cimento - Mielenie cementu - 制造水泥 - - - You need to stay within 10m to process. - Musíte zůstat v rozmezí 10 m zpracovat. - Debes estar a menos de 10m para procesar. - - Du musst innerhalb von 10m bleiben, um verarbeiten zu können. - Vous devez rester à 10m pour traiter vos objets. - Devi stare entro 10m per processare. - Você precisa ficar a menos de 10m para processar. - Musisz być w odległości 10 m aby przetwarzanie się odbyło. - 您需要保持10米以内的距离。 - - - You have no inventory space to process your materials. - Nemáš zásob prostor ke zpracování vašich materiálů. - Vous n'avez pas de place pour traiter vos matériaux. - Usted no tiene espacio en el inventario para procesar sus materiales. - Non hai spazio nell'inventario per elaborare i materiali. - Nie masz miejsca na przetwarzanie swoich zapasów materiałów. - Você não tem espaço no inventário para processar seus materiais. - У вас нет места инвентаря для обработки ваших материалов. - Du hast keinen Platz im Inventar, um die Materialien zu verarbeiten. - 你没有库存空间来处理你的物品。 - - - Only part of your materials could be processed due to reaching your maximum weight. - Pouze část svých materiálů by mohla být zpracována z důvodu dosažení maximální váhu. - Seule une partie de votre matériel pourrait être traité en raison de l'atteinte de votre poids maximum. - Sólo una parte de los materiales se han podido procesar debido a alcanzar tu peso máximo. - Solo una parte del tuo materiali possono essere trattati a causa di raggiungere il vostro peso massimo. - Tylko część swoich materiałów może być przetwarzane ze względu na osiągnięcie maksymalnej wadze. - Apenas uma parte de seus materiais puderam ser processados, devido o peso máximo ter sido atingido. - Только часть ваших материалов может быть обработан из-за достижения вашего максимального веса. - Nur ein Teil der Materialien konnte verarbeitet werden, sonst würde das maximale Gewicht erreicht werden. - 只有部分材料可以加工,已达到你的最大重量。 - - - You need $%1 to process without a license! - Musíte $%1 bez povolení ke zpracování! - Necesitas $%1 para procesar sin licencia! - - Du brauchst $%1, um ohne eine Lizenz verarbeiten zu können! - Vous avez besoin de $%1 pour traiter sans licence ! - Hai bisogno di $%1 per processare senza la dovuta licenza! - Você precisa de R$%1 para processar sem licença! - Musisz mieć $%1 aby przetworzyć bez odpowiedniej licencji - 你没有加工许可所以需要 $%1 加工! - - - You have processed %1 into %2 - Máte zpracovaný %1 do %2 - Has procesado %1 a %2 - - Du hast %1 in %2 verarbeitet. - Vous avez traité %1 en %2 - Hai processato %1 in %2 - Você trasformou %1 em %2 - Przetworzyłeś %1 na %2 - 你将 %1 加工为 %2 - - - You have processed %1 into %2 for $%3 - Máte zpracovaný %1 do %2 na $%3 - Has procesado %1 a %2 por $%3 - - Du hast %1 für $%3 in %2 verarbeitet. - Vous avez traité %1 en %2 pour $%3 - Hai processato %1 in %2 al costo di $%3 - Você trasformou %1 em %2 por R$%3 - Przetworzyłeś %1 na % za $%3 - 你将 %1 加工为 %2 花费 $%3 - - - - - Medics Online: %1 - Zdravotníci Online: %1 - Médicos en línea: %1 - - Sanitäter online: %1 - Médecin en ligne : %1 - Medici Online: %1 - Médicos Online: %1 - Medycy Online: %1 - 在线的医疗人员:%1 - - - Medics Nearby: %1 - Zdravotníci v blízkosti:%1 - Médicos Cerca: %1 - - Sanitäter in der Nähe: %1 - Médecin à proximité : %1 - Medici Vicini: %1 - Médicos por perto: %1 - Medycy w pobliżu: %1 - 附近的医疗人员:%1 - - - %1 is requesting EMS Revive. - %1 požaduje EMS oživit. - %1 esta pidiendo servicio médico. - - %1 benötigt medizinische Hilfe. - %1 demande de l'aide du SAMU. - %1 sta richiedendo l'intervento medico. - %1 requisitou o resgate do SAMU - %1 prosi o pomoc medyczną. - %1 要求医疗救治。 - - - Respawn Available in: %1 - Respawn K dispozici v:%1 - Puedes reaparecer en: %1 - - Réapparition disponible dans: %1 - Aufwachen verfügbar in: %1 - Respawn disponibile in: %1 - Respawn Disponível em: %1 - Odrodzenie możliwe za: %1 - 重生在: %1 - - - You can now respawn - Nyní lze respawn - Ya puedes reaparecer - - Du kannst jetzt aufwachen! - Vous pouvez désormais réapparaître - Puoi ora fare respawn - Você pode dar respawn - Możesz się odrodzić - 现在你可以重生 - - - %1 has revived you and a fee of $%2 was taken from your bank account for their services. - %1 oživil vy a poplatek ve výši $%2 byl převzat z bankovního účtu za své služby. - %1 te a revivido y una cuota de $%2 a sido tomada de tu cuenta por sus servicios. - - %1 hat dich wiederbelebt und dafür eine Gebühr von $%2 von deinem Bankkonto eingezogen. - %1 vous a réanimé, des frais de $%2 ont été transférés depuis votre compte en banque sur celui du médecin. - %1 ti ha rianimato e sono stati prelevati $%2 dal tuo conto in banca per pagare la prestazione. - %1 reviveu você e uma taxa de R$%2 foi cobrada da sua conta bancária para os serviços prestados. - %1 pobrał opłatę w wysokości $%2 za reanimację i przywrócenie funkcji życiowych. - %1 已经将你救治,从你的银行账户收取 $%2 的服务费。 - - - Someone else is already reviving this person - Někdo jiný již užívají tuto osobu - Alguien ya esta reviviendo a esta persona - - Jemand anderes belebt diese Person bereits wieder. - Quelqu'un d'autre s'occupe déjà de cette personne - Qualcun'altro sta già provando a rianimare questa persona - Outro médico já está revivendo esse jogador - Ktoś inny aktualnie reanimuje tę osobę - 其他人已经在救治这个人了 - - - Reviving %1 - Oživení %1 - Reviviendo %1 - - Wird wiederbelebt %1... - Réanimation de %1 - Rianimando %1 - Revivendo %1 - Reanimacja %1 - 救治 %1 - - - This person either respawned or was already revived. - Tato osoba buď respawned nebo již byl přijat. - Esta persona ya reapareció o fue revivida. - - Cette personne a peut-être fait réapparition ou a déjà été réanimée. - Diese Person ist entweder aufgewacht oder wurde bereits wiederbelebt. - Questa persona è stata già rianimata o ha fatto respawn. - Esse jogador já deu respawn ou já foi reanimado. - Ta osoba wcześniej się odrodziła lub została reanimowana. - 这个人重生或已经复活了。 - - - You have revived %1 and received $%2 for your services. - Obdrželi jste %1 a získal $%2 za vaše služby. - Has revivido a %1 y recivido $%2 por tus servicios. - - Du hast %1 wiederbelebt und $%2 für deine Dienste erhalten. - Vous avez réanimé %1, vous avez reçu $%2 pour votre aide - Hai rianimato %1 e hai ricevuto $%2 per la tua prestazione. - Você reviveu %1 e recebeu R$%2 pelo seus serviços prestados. - Reanimowałeś %1 i za uratowanie życia otrzymałeś $%2. - 你已经救治了 %1 并得到 $%2 的服务费用。 - - - You got to far away from the body. - Dostal jsi příliš daleko od těla. - Te alejastes mucho del cuerpo. - - Du bist zu weit vom Körper entfernt. - Vous êtes trop loin du corps. - Sei andato troppo distante dal corpo. - Você está muito distante do corpo. - Jesteś za daleko od ciała. - 你离尸体太远。 - - - - - The robbery has failed due to unknown reasons - Lupič selhalo kvůli neznámých důvodů - El robo fallo por razones desconocidas - - Der Raub ist aus unbekannten Gründen fehlgeschlagen. - Le vol de la réserve fédérale a échoué pour des raisons inconnues - La rapina è fallita per cause sconosciute - O roubo falhou por uma causa desconhecida. - Napad się nie udał z niewiadomych powodów. - 由于不明原因,抢劫失败了。 - - - $%1 was stolen from the robbery on the federal reserve - $%1 byl ukraden z loupeže na federální rezervy - $%1 fue robado de la reserva federal - - $%1 wurden von den Räubern aus der Zentralbank gestohlen. - $%1 a été volé à la réserve fédérale. - $%1 sono stati rubati durante la rapina alla banca - R$%1 foi roubado da Reserva Federal. - $%1 ukradziono z Rezerwy Federalnej - $%1 从联邦储备银行中被抢劫 - - - This vault is already being robbed by someone else - Tato klenba je již okraden někým jiným - La bóveda ya esta siendo robada por alguien mas - - Ce coffre est déjà en train d'être pillé par quelqu'un d'autre. - Der Tresor wird bereits von jemand anderem ausgeraubt. - Questo Caveau sta venendo rapinando da qualcun'altro - Esse cofre já está sendo roubado por outro jogador. - Skarbiec jest aktualnie rabowany przez inną osobę. - 这个金库已经被别人抢劫了 - - - This vault was already robbed recently - Tato klenba byla již nedávno okraden - La bóveda fue robada muy recientemente - - Der Tresor wurde bereits vor Kurzem ausgeraubt. - Ce coffre a déjà été pillé récemment - Questo Caveau è stato svaligiato di recente - Esse cofre já foi assaltado recentemente. - Skarbiec został niedawno zrabowany - 这个金库最近被抢了 - - - - - Garage - Garáž - Garaje - - Garage - Garage - Garage - Garagem - Garaż - 载具仓库 - - - Your Vehicles - Vaše Vozidla - Tus vehículos - - Deine Fahrzeuge - Vos véhicules - I tuoi Veicoli - Seus Veículos - Twój pojazd - 你的载具 - - - Vehicle Information - Informace o vozidle - Información de Vehículos - - Fahrzeuginformationen - Carte grise du vehicule - Informazioni Veicolo - Informações do Veículo - Informacja o pojeździe - 载具信息 - - - Automatically reveals nearest objects within 15m, turn this setting off if you are experiencing performance issues. - Automaticky odhaluje nejbližší objektů v rámci 15m, toto nastavení vypnete, pokud jste se setkali s problémy s výkonem. - Automáticamente revela los objetos más cercanos dentro de 15m, apaga esta opción si estas teniendo problemas de performación. - - Zeigt automatisch nächstgelegene Objekte innerhalb von 15m an, deaktiviere es, wenn du Leistungprobleme hast. - Révèle automatiquement les objets les plus proches au sein de 15m, désactiver ce paramètre si vous rencontrez des problèmes de performance. - Rivela automaticamente gli oggettivi vicini entro 15m, disattiva quest'impostazione se riscontri dei problemi di perfomance di sistema. - Revela objetos à 15m, desabilite essa opção se está tendo problemas de performance. - Automatycznie wykrywa najbliższe obiekty w promieniu 15m, wyłącz tę opcję jeśli masz problemy z wydajnością - 自动显示1500米以内的最近对象,如果你遇到性能问题,请将此设置关闭。 - - - Switch side-channel mode, turn this off if you don't want to talk with players from your side. - Přepnout do režimu side-channel, tuto funkci vypnout, pokud nechcete mluvit s hráči z vaší strany. - Activer le canal camp, désactiver cette fonction si vous ne voulez pas parler avec des joueurs de la même faction que vous. - Habilita/Deshabilita el SideChannel, apaga esto si no quieres hablar con jugador de tu lado. - Interruttore modalità side-channel, disattivare questa funzione se non si vuole parlare con i giocatori da parte vostra. - Przełącznik trybu side-channel, to wyłączyć, jeśli nie chce rozmawiać z graczami z boku. - - Habilita/Desabilita o side-channel, desabilite caso você não queira conversar com os jogadores da sua facção. - Sidechat umschalten. Ausschalten, wenn du nicht mit Spielern deiner Fraktion sprechen möchtest. - 切换侧通道模式,如果你不想和你身边的玩家交谈,关掉这个频道。 - - - Switch player's broadcast mode, turn this off if you don't want to see any broadcast from other players. - - Activer/Désactiver les annonces. Désactivez ceci si vous ne voulez voir aucune annonce d'autres joueurs. - Habilitar/Deshabilitar transmisiones, deshabilita esto si no quieres ver transmisiones de otros jugadores. - - - - Habilita/Desabilita as transmissões dos jogadores, desabilite caso você não queira ver as transmissões dos outros jogadores. - Broadcast umschalten. Ausschalten, wenn du keine Broadcasts von anderen Spielern erhalten möchtest. - 切换玩家的广播模式,如果你不想看到其他玩家的广播,就关掉它。 - - - Controls whether or not players will have name tags above their head. - Přepnout do režimu side-channel, tuto funkci vypnout, pokud nechcete mluvit s hráči z vaší strany. - Controla si los jugadores tienen nombres (tags) sobre sus cabezas. - - Contrôler si les joueurs auront ou non leurs noms au dessus de leur tête - Namensschilder umschalten. Ausschalten, wenn du keine Namensschilder über den Spielerköpfen sehen möchtest. - Controlla la visualizzazione delle tags sopra la testa dei giocatori - Controla se os jogadores terão os nomes em suas cabeças. - Kontroluje czy gracze będą mieli nad głowami swoje Tagi z nazwą - 控制球员是否有名字标签在他们的头上方。 - - - Shop Stock - Obchod Sklad - Inventario de la Tienda - - Lagerbestand - Boutique - Stock Negozio - Estoque - Sklep oferta - 商店库存 - - - - - Player Interaction Menu - Hráč Interakce Menu - Menu de Interacción de Jugadores - - Spielerinteraktionsmenü - Menu d'interaction du Joueur - Menu d'interazione Giocatore - Menu de Interação do Jogador - Menu Interakcji - 玩家互动菜单 - - - Put in vehicle - Vložíme do vozidla - Poner en vehículo - - Ins Fahrzeug setzen - Embarquer - Metti nel Veicolo - Colocar no Veículo - Włóż do pojazdu - 押上载具 - - - Un-Restrain - živelný - Quitar Esposas - - Freilassen - Démenotter - Togli Manette - Soltar - Rozkuj - 解开手铐 - - - Check Licenses - Zkontrolujte licence - Revisar Licencias - - Lizenzen überprüfen - Vérifier Licences - Controlla Licenze - Verificar Licenças - Sprawdź licencje - 检查许可证 - - - Search Player - Hledat hráče - Buscar Jugadores - - Spieler durchsuchen - Fouiller Joueur - Ricerca Giocatore - Revistar Jogador - Przeszukaj - 搜身 - - - Stop Escorting - Zastavit doprovázet - Parar de Escoltar - - Eskortieren stoppen - Arrêter Escorte - Ferma Scorta - Parar de Escoltar - Przestań eskortować - 停止押送 - - - Escort Player - Escort Player - Escoltar Jugador - - Spieler eskortieren - Escorter Joueur - Scorta Giocatore - Escoltar Jogador - Eskortuj - 押送 - - - Ticket Player - Ticket Player - Dar Tiquete - - Strafzettel ausstellen - Amende Joueur - Multa Giocatore - Multar Jogador - Wystaw mandat - 开据罚单 - - - Seize Weapons - zabavili zbraně - Confiscar Armas - - Waffen beschlagnahmen - Saisir les armes - cogliere Armi - Apreender Armas - Chwytaj broń - 没收武器 - - - Send to jail - Poslat do vězení - Encarcelar - - Ins Gefängnis stecken - Envoyer en prison - Arresta - Enviar p/ Prisão - Do więzienia - 送进监狱 - - - Repair Door - oprava dveří - Reparar Puerta - - Tür reparieren - Réparer la porte - Ripara porta - Consertar Porta - Napraw drzwi - 检修门 - - - Open / Close - Otevřít zavřít - Abrir / Cerrar - - Öffnen / Schließen - Ouvrir / Fermer - Apri / Chiudi - Abrir / Fechar - Otwórz / Zamknij - 打开/关闭 - - - Break down door - Rozebrat dveře - Romper Puerta - - Tür aufbrechen - Forcer la porte - Sfonda Porta - Quebrar Porta - Wyważ drzwi - 打破门 - - - Garage - - - - Garage - Garage - - - - 车库 - - - You can buy a garage at this house for $%1. You must first purchase the house! - - - - Du könntest eine Garage an diesem Haus für $%1 kaufen. Du müsstest aber zuerst das Haus kaufen! - Vous pouvez acheter un garage dans cette maison pour $%1. Vous devez d'abord acheter la maison ! - - - - 你可以在这所房子里买一个 $%1 的仓库。你必须先买房子! - - - Search house - Vyhledávání dům - Buscar casa - - Haus durchsuchen - Fouiller la maison - Cerca Casa - Vasculhar a Casa - Przeszukaj dom - 搜索房子 - - - Lock up house - Zamknout dům - Cerrar la casa con llave - - Haus abschliessen - Fermer la maison - Chiudi Casa - Trancar a Casa - Zamknij dom - 锁上房子 - - - Buy House - Koupit dům - Comprar casa - - Haus kaufen - Acheter la maison - Compra Casa - Comprar a Casa - Kup dom - 买房子 - - - Buy House Garage - - - - Garage kaufen - Acheter le Garage de cette Maison - - - - 买房子的仓库 - - - Sell Garage - Navrhujeme Garáž - Vender Garaje - - Garage verkaufen - Vendre le garage - Vendi Garage - Vender Garagem - Sprzedaj garaż - 出售仓库 - - - Remove Container - Nádobu - Remover Contenedor - rimuovere Container - Wyjąć pojemnik - - Supprimer le conteneur - Remover Caixa - Container entfernen - 删除存储箱 - - - Garage - Garáž - Garaje - - Garage - Garage - Garage - Garagem - Garaż - 仓库 - - - Store Vehicle - Store Vehicle - Guardar Vehiculo - - Fahrzeug parken - Ranger le véhicule - Parcheggia Veicolo - Guardar Veículo - Zaparkuj pojazd - 载具商店 - - - Sell House - prodat dům - Vender Casa - - Haus verkaufen - Vendre la maison - Vendi Casa - Vender Casa - Sprzedaj dom - 卖房子 - - - Unlock Storage - odemknout úložiště - Abrir Almacenamiento - - Lagerplatz aufschliessen - Déverrouiller l'inventaire - Sblocca contenitori - Destrancar Caixa - Odblokuj pojemnik - 解锁存储 - - - Lock Storage - zámek Storage - Cerrar Almacenamiento con Llave - - Lagerplatz abschliessen - Verrouiller l'inventaire - Blocca contenitori - Trancar Caixa - Zablokuj pojemnik - 锁定存储 - - - Turn Lights Off - Blinkrů Off - Apagar Luces - - Licht ausschalten - Lumières éteintes - Spegni luci - Ligar as Luzes - Włącz światło - 把灯关掉 - - - Turn Lights On - Turn zapnutá světla - Prender Luces - - Licht anschalten - Lumières allumées - Accendi luci - Apagar as Luzes - Wyłącz światło - 把灯打开 - - - - - Vehicle Interaction Menu - Interakce vozidel Menu - Menu de interacción de Vehículo - - Fahrzeuginteraktionsmenü - Menu Interaction du Véhicule - Menu d'interazione Veicolo - Menu do Veículo - Menu Interakcji pojazdu - 载具交互菜单 - - - Unflip Vehicle - Unflip Vehicle - Dar la Vuelta al Vehículo - - Fahrzeug umdrehen - Retourner Véhicule - Raddrizza veicolo - Desvirar Veículo - Ustaw pojazd - 翻转载具 - - - Get In Vehicle - - - - Monter dans le véhicule - Gehe ins Fahrzeug - - - - 进入载具 - - - Push Boat - tlačit loď - Empujar Bote - - Boot schieben - Pousser bateau - Spingi Barca - Empurrar Barco - Popchnij - 推船 - - - Repair Vehicle - opravy vozidel - Reparar Vehículo - - Fahrzeug reparieren - Réparer Véhicule - Ripara Veicolo - Consertar Veículo - Napraw - 修理载具 - - - Registration - Registrace - Registración - - Eigentümer - Enregistrement - Registrazione - Registro - Zarejestruj - 登记信息 - - - Search Vehicle - Vyhledávání Vehicle - Buscar Vehículo - - Fahrzeug durchsuchen - Fouiller Véhicule - Cerca Veicolo - Vasculhar Veículo - Przeszukaj pojazd - 搜查载具 - - - Search Container - Vyhledávání Container - Buscar Contenedor - Ricerca Container - Szukaj Kontener - - Fouiller le conteneur - Vasculhar Container - Container durchsuchen - 搜索容器 - - - Pullout Players - Pull Out Hráči - Sacar Jugadores - - Aus Fahrzeug ziehen - Sortir les passagers - Estrai Giocatore - Retirar Jogadores - Wyciągnij graczy - 从载具拉出玩家 - - - Impound Vehicle - úschovy Vehicle - Confiscar Vehículo - - Fahrzeug beschlagnahmen - Mise en fourrière - Sequestra Veicolo - Apreender Veículo - Usunń pojazd - 扣押载具 - - - Mine from device - Mine ze zařízení - Minar desde dispositivo - - Vom Fahrzeug abbauen - Dispositif de minage - Piazza mine dal veicolo - Minerar - Uruchom wydobycie - 矿山设备 - - - Store your vehicle - Ukládat vaše vozidlo - Guardar tu Vehículo - Conservare il veicolo - Przechowuj swój pojazd - - Ranger votre véhicule - Guardar seu veículo - Fahrzeug einparken - 存储你的载具 - - - Store - Obchod - Guardar - Negozio - Sklep - - Ranger - Guardar - Fahrzeughändler - 商场 - - - Clean - Čistý - Limpiar - Pulito - Czysty - - Nettoyer - Limpar - Reinigen - 清洁 - - - This vehicle is NPC protected. - Toto vozidlo je chráněno NPC. - Ce véhicule est protégé par un PNJ. - Este vehículo esta protegido. - Questo veicolo è protetto NPC. - Pojazd ten jest chroniony NPC. - - Esse veículo está protegido. - Dieses Fahrzeug ist NPC-geschützt. - 这载具是NPC保护的。 - - - - - Sending request to server for player information UID [%1] - Odesílání požadavku na server pro informační hráč UID [%1] - Pidiendo informacion del UID de [%1] del server - - Frage Spieler Informationen zu UID [%1] ab... - Envoi de la requête au serveur pour obtenir des informations lecteur UID [%1] - Invio richiesta al server per le informazioni del giocatore UID [%1] - Obtendo informações do UID [%1] no servidor - Wysyłam żądanie do serwera po informację o fraczu UID [%1] - 发送请求到服务器玩家信息UID [%1] - - - The server didn't find any player information matching your UID, attempting to add player to system. - Server nenašel žádné informace hráče nalezen.Chcete UID, pokusu o přidání hráče do systému. - No se encontro ninguna información con tu UID, se esta creando un nuevo jugador. - - Der Server hat keine Spieler Informationen zu deiner UID gefunden, versuche Spieler ins System hinzuzufügen... - Le serveur n'a pas trouvé toutes les informations de lecteur correspondant à votre UID, tentative d'ajout du joueur dans le système. - Il server non ha trovato alcuna informazione sul giocatore con il tuo UID, tentativo di aggiunta del giocatore al sistema. - O servidor não encontrou nenhuma informação correspondente ao seu UID, tentando adicionar jogador ao sistema. - Serwer nie odnalazł informacji zgodnych z UID, dodaję gracza do bazy danych. - 服务器没有找到任何玩家信息匹配你的UID,试图添加播放器系统。 - - - There was an error in trying to setup your client. - Došlo k chybě při pokusu o nastavení vašeho klienta. - Hubo un error en tratando de preparar tu cliente. - - Es gab einen Fehler beim Versuch, deinen Clienten einzurichten! - Il y avait une erreur en essayant de configurer votre client. - C'è stato qualche errore nel cercare di inizializzare il tuo client - Ocorreu um erro ao tentar configurar o seu cliente. - Wystąpił błąd w trakcie ustawiania klienta - 试图设置客户机时出错。 - - - Received request from server... Validating... - Obdržení požadavku ze serveru ... Ověřování ... - Pedido del server recibido... Validando... - - >Empfange Daten vom Server... Überprüfe... - Demande reçue du serveur... Validation... - Ricevuta richiesta dal server... Convalida... - Pedido recebido do servidor... Validando... - Otrzymano żądanie serwera ... sprawdzam - 接收来自服务器的请求...验证... - - - You have already used the sync option, you can only use this feature once every 5 minutes. - Již jste použili možnosti synchronizace, můžete použít pouze tuto funkci jednou za 5 minut. - Ya has usado la función de sincronización, solo la puedes usar una vez cada 5 minutos. - - Du hast bereits deine Daten gespeichert, diese Funktion kann nur einmal alle 5 Minuten verwendet werden. - Vous avez déjà utilisé l'option de synchronisation, vous ne pouvez utiliser cette fonction une fois toutes les 5 minutes. - Hai già utilizzato la funzione di salva dati, puoi usare quest'opzione solo una volta ogni 5 minuti. - Você já usou a opção de sincronização, você só pode usar esse recurso uma vez a cada 5 minutos. - Użyłeś niedawno opcji synchronizacji, możesz jej używać maksymalnie co 5 minut. - 你已经使用了同步数据,你只能每隔5分钟使用一次这个功能。 - - - Syncing player information to the server.\n\nPlease wait up to 20 seconds before leaving. - Synchronizace informace o hráčích na serveru. \ O \ Prosím, vyčkejte až 20 sekund před odjezdem. - Se esta sinconizando tu información con el server.\n\nPor favor espera 20 segundos antes de salir del server. - - Speichere deine Spieler-Informationen auf dem Server. \n\nBitte warte bis zu 20 Sekunden vor dem Verlassen. - Synchronisation des informations de joueur sur le serveur.\n\nS'il vous plaît, veuillez attendre 20 secondes avant de vous déconnecter. - Salvando le informazioni giocatore sul server.\n\nAttendere fino a 20 secondi prima di abbandonare. - Sincronizando informação do jogador com o servidor.\n\n Por favor aguarde 20 segundos antes de sair. - Synchronizuję informację z serwere, .\n\nProszę poczekać ok 20 sekund przed opuszczeniem serwera - 同步玩家数据到服务器。\n\n请等待20秒后再下线。 - - - - - Because you robbed the bank you can't use the ATM for %1 minutes. - Protože jste vyloupil banku nelze použít bankomat pro%1 minut. - Porque robastes el banco no puedes usar el ATM por %1 minutos. - - Da du die Zentralbank ausgeraubt hast, kannst du für %1 Minuten keinen Bankomaten benutzen. - Vous avez pillé la banque, vous ne pouvez pas utiliser de DAB pendant %1 minutes. - Avendo appena rapinato la banca non puoi utilizzare il Bancomat per %1 minuti. - Você não pode usar o ATM por %1 minuto(s), pois você assaltou o banco. - Z uwagi na to że okradłeś bank nie możesz korzystać z bankomatu przez najbliższe %1 minut. - 因为你抢了银行,你不能在 %1 分钟内使用自动取款机。 - - - You didn't choose the clothes you wanted to buy. - Vy nevybral oblečení, které chtěl koupit. - No elegistes lo que quieres comprar. - - Du hast die Kleidung, die du kaufen wolltest, nicht ausgewählt. - Vous n'avez pas choisi les vêtements que vous vouliez acheter. - Non hai selezionato i vestiti che vuoi comprare. - Você não selecionou a roupa que deseja comprar. - Nie wybrałeś ubrań które chcesz kupić. - 你没有选择你想买的衣服。 - - - Sorry sir, you don't have enough money to buy those clothes. - Je nám líto, pane, nemáte dost peněz na nákup ty šaty. - No tienes suficiente dinero. - - Entschuldigung, du hast nicht genug Geld, um diese Kleidung zu kaufen. - Désolé monsieur, vous n'avez pas assez d'argent pour acheter ces vêtements. - Spiacente ma non hai fondi a sufficienza per comprare questi vestiti. - Desculpe senhor, você não tem dinheiro para pagar. Volte sempre. - Przepraszam, ale nie masz tyle pieniędzy aby kupić to ubranie. - 对不起,你没有足够的钱去买那些衣服。 - - - Total: - Celkový: - Total: - - Gesamt: - Total : - Totale: - Total: - Razem: - 总额: - - - No Selection - žádný výběr - No Seleccionastes - - Keine Auswahl! - Aucune Sélection - Nessuna Selezione - Nada Selecionado - Nie wybrano - 没有选择 - - - No Display - Ne Displej - No Display - - Keine Anzeige! - Pas d'affichage - No Display - Sem exibir - Brak widoku - 没有显示 - - - There are no vehicles near to sell. - Nejsou žádné vozy blízko k prodeji. - No hay Vehículos cercanos para vender. - - Es ist keine Fahrzeug zum Verkaufen in der Nähe. - Il n'y a pas de véhicules à proximité à vendre - Nelle vicinanze non ci sono veicoli da vendere. - Não existem veículos para serem vendidos. - W pobliżu nie ma pojazdu do sprzedania. - 附近没有载具出售。 - - - There was a problem opening the chop shop menu. - Tam bylo otevření nabídky kotleta obchod problém. - Hubo un problema abriendo el menu de la tienda. - - Es gab ein Problem beim Öffnen des Schrotthändler Menüs. - Il y a eu un problème en ouvrant le menu de revente de véhicule. - C'è stato un problema aprendo il menu del ricettatore - Ocorreu um problema abrindo o menu, tente novamente. - Powstał problem przy otwieraniu menu dziupli - 打开黑车店菜单有问题。 - - - Selling vehicle please wait... - Prodejní vozidlo čekejte prosím ... - Vendiendo vehículo, por favor espera... - - Verschrotte Fahrzeug, bitte warten... - Vente du véhicule, veuillez patienter... - Vendendo il veicolo, attendere prego... - Vendendo o veiculo, aguarde.... - Sprzedaję pojazd proszę czekać ... - 出售载具请稍候... - - - You need to be a civilian to use this store! - Musíte být civilní použít tento obchod! - Necesitas ser un civil para usar esta tienda! - - Du musst ein Zivilist sein, um dieses Geschäft nutzen zu können! - Vous devez être un civil pour utiliser ce magasin ! - Devi essere un civile per utilizzare questo negozio! - Você tem que ser um cívil para user essa loja! - Musisz być cywilem aby móc kupować w tym sklepie! - 你需要成为平民才能使用这家商店! - - - You need to be a cop to use this store! - Musíte být policista použít tento obchod! - Necesitas ser policía para usar esta tienda! - - Du musst ein Polizist sein, um dieses Geschäft nutzen zu können! - Vous devez être policier pour utiliser ce magasin ! - Devi essere un poliziotto per utilizzare questo negozio! - Você tem que ser um policial para usar essa loja! - Musisz być policjantem aby kupować w tym sklepie! - 你需要当警察来使用这家商店! - - - You don't have rebel training yet! - Nemáte rebelů výcvik ještě! - No tienes Entrenamiento Rebelde! - - Du hast keine Rebellenausbildung absolviert! - Vous n'avez pas encore d'entraînement rebelle ! - Devi essere ribelle per poter utilizzare questo negozio! - Você não tem Treinamento Rebelde! - Nie posiadasz treningu rebelianta! - 你还没有进行叛军训练! - - - You need a Diving license to use this shop! - Potřebujete licenci potápění použít tento obchod! - Necesitas una licencia de buceo para usar esta tienda! - - Du benötigst einen Taucherschein, um dieses Tauchergeschäft nutzen zu können! - Vous devez avoir votre diplôme de plongée pour utiliser ce magasin ! - Ti serve la licenza di pesca per usare questo negozio! - Você precisa de uma Licença de Mergulho para usar essa loja! - Nie posiadasz licencji nurka aby kupować w tym sklepie! - 你需要一张潜水执照才能使用这家商店! - - - You need a %1 to buy from this shop! - Potřebujete %1 koupit od tomto obchodě! - Necesitas un %1 para comprar algo de esta tienda! - - Du benötigst eine %1, um dieses Geschäft nutzen zu können! - Vous avez besoin de %1 pour acheter dans ce magasin ! - Hai bisogno di %1 per comprare da questo negozio! - Você precisa de %1 para comprar nessa loja! - Potrzebujesz %1 by kupować w tym sklepie! - 你需要从这家商店买 %1! - - - Clothing - Oblečení - Ropa - - Kleidung - Tenues - Abiti - Roupas - Odzież - 服装 - - - Hats - klobouky - Sombreros - - Kopfbedeckungen - Chapeaux - Copricapi - Chapéus - Czapki - 帽子 - - - Glasses - Brýle - Lentes - - Brillen - Lunettes - Occhiali - Óculos - Okulary - 眼镜 - - - Vests - vesty - Chalecos - - Westen - Gilets - Vesti - Coletes - Kamizelki - 背心 - - - Backpack - Batoh - Mochillas - - Rucksack - Sacs à dos - Zaini - Mochilas - Plecaki - 背包 - - - There is currently a car there. - Tam je v současné době auto. - Actualmente hay un carro ahi. - - Es steht bereits ein Fahrzeug dort. - Il y a actuellement une voiture. - C'è già un veicolo qui. - Há um veiculo atualmente no respawn. - Aktualnie jest tam samochód. - 目前有一载具在那里。 - - - You do not have enough money on you or in your bank to get your car back. - Nemáte dostatek peněz na vás nebo ve vaší bance, aby si své auto zpátky. - No tienes suficiente dinero para recuperar tu carro. - - Du hast nicht genug Geld bei dir oder auf dem Bankkonto, um dein Auto auslösen zukönnen. - Vous n'avez pas assez d'argent sur vous ou dans votre compte en banque pour récupérer votre voiture. - Non hai abbastanza fondi con te o nel tuo conto in banca per poter ritirare il tuo veicolo. - Você não tem dinheiro suficiente em sua conta bancária para obter seu veiculo. - Nie masz tyle pieniędzy na koncie aby wyciągnąć samochód. - 你没有足够的钱在银行或你的身上。 - - - You have unimpounded your %1 for $%3 - Jste unimpounded svůj %1 na $%3 - Has desembargado tu %1 por $%3 - - Du hast deinen %1 für $%3 ausgelöst. - Vous avez sorti votre %1 pour $%3 - Hai ritirato dal sequestro il tuo %1 al costo di $%3 - Você liberou %1 for R$%3 - Przywróciłeś swój %1 za $%3 - 你为 %1 花费 $%3 - - - You did not pick a vehicle! - Vy nevybral vozidlo! - No has selecionado un vehículo! - - Du hast kein Fahrzeug ausgewählt! - Vous n'avez pas choisi de véhicule ! - Non hai selezionato un veicolo! - Você não conseguiu roubar o veiculo! - Nie wybrałeś pojazdu! - 你没有选择一载具! - - - You do not have enough cash to purchase this vehicle.\n\nAmount Lacking: $%1 - Nemáte dostatek peněz na koupi tohoto vozidla \n\nAmount Postrádat: $%1 - No tienes suficiente dinero para comprar este vehículo.\n\nFalta: $%1 - - Du hast nicht genug Geld, um das Fahrzeug zu kaufen.\n\nFehlender Betrag: $%1 - Vous n'avez pas assez d'argent pour acheter ce véhicule \n\nArgent Manquant: $%1 - Non hai fondi sufficienti per comprare questo veicolo.\n\nTi mancano: $%1 - Você não tem dinheiro suficiente para comprar esse veiculo.\n\nFaltam: R$%1 - Nie masz tyle pieniędzy by kupić ten pojazd.\n\nBrakuje: $%1 - 你没有足够的现金购买这载具。\n\n缺少资金: $%1 - - - You do not have the required license and/or level! - Nemáte požadovanou licenci! - No tienes la licencia requerida! - - Du besitzt den benötigten Führerschein / Rang nicht! - Vous n'avez pas la licence requise ! - Non hai la licenza richiesta per l'acquisto! - Você não tem a licença necessária! - Nie posiadasz odpowiedniej licencji! - 你没有所需的许可证和/或级别! - - - There is a vehicle currently blocking the spawn point - Tam je vozidlo v současné době blokuje potěr bod - Hay un vehículo bloqueando el punto de Spawn. - - Ein Fahrzeug blockiert gerade den Spawnpunkt. - Il y a actuellement un véhicule qui bloque le point de spawn - C'è già un veicolo che blocca la zona di spawn - Existe um veiculo bloquenado a area de respaw - Inny pojazd blokuje miejsce odrodzenia pojazdów - 目前有一载具挡住了生成点。 - - - You bought a %1 for $%2 - Koupil sis %1 pro $%2 - Comprastes %1 por $%2 - - Du kaufst eine(n) %1 für $%2. - Vous avez acheté un %1 pour $%2 - Hai comprato un %1 al costo di $%2 - Você comprou %1 por R$%2 - Kupiłeś %1 za $%2 - 你买了一个 %1 花费 $%2 - - - You rented a %1 for $%2 - Pronajali jste si %1 za $%2 - Alquiló un %1 por $%2 - Вы арендовали %1 за $%2 - Sie haben %1 für $%2 gemietet - Vous avez loué un %1 pour $%2 - Hai noleggiato un %1 per $%2 - Você alugou um %1 por $%2 - Wypożyczyłeś %1 za $%2 - 您以 $%2 的价格租了一个 %1 - - - Rental Price: - Pronájem Cena: - Precio de Renta: - - Mietpreis: - Prix de location : - Costo Noleggio: - Alugar: - Wypożyczenie: - 租赁价格: - - - Ownership Price: - Vlastnictví Cena: - Precio de Compra: - - Kaufpreis: - Prix d'achat : - Costo Acquisto: - Comprar: - Kupno: - 所有权价格: - - - Max Speed: - Maximální rychlost: - Máxima Velocidad: - - Max. Geschwindigkeit: - Vitesse Max : - Velocità Max: - Velocidade Máxima: - Prędkość: - 最大速度: - - - Horse Power: - Koňská síla: - Caballos de Fuerza: - - Pferdestärken: - Puissance en chevaux : - Cavalli: - Cavalos de Força: - Moc: - 马力: - - - Passenger Seats: - Sedadla pro cestující: - Asientos de Pasajeros: - - Passagierplätze: - Sièges passager : - Sedili passeggeri: - Assentos: - Ilość miejsc: - 乘客座位: - - - Trunk Capacity: - Zavazadlový prostor Kapacita: - Capacidad de Maletero: - - Kofferraumgröße: - Capacité du coffre : - Capacità Inventario: - Capacidade do Inventário: - Pojemność bagażnika: - 后备箱容积: - - - Fuel Capacity: - Palivo Kapacita: - >Capacidad de Combustible: - - Tankgröße: - Capacité du réservoir : - Capacità Serbatoio: - Capacidade do Reservatório: - Pojemność baku: - 燃料容量: - - - Armor Rating: - Armor Hodnocení: - Clasificación de Armadura: - - Panzerungsbewertung: - Blindage : - Resistenza: - Resistência: - Pancerz - 护甲值: - - - Retrieval Price: - Retrieval Cena: - Precio de Recuperación: - - Einstellpreis: - Prix de sortie : - Costo di ritiro: - Preço para Recuperar: - Koszt wyciągnięcia: - 检索价格: - - - Sell Price: - Prodejní cena: - Precio de Venta: - - Verkaufspreis: - Prix de vente : - Costo di vendita: - Preço de Venda - Cena sprzedaży: - 出售价格: - - - Color: - Barva: - Color: - - Farbe: - Couleur : - Colore: - Cor: - Kolor - 颜色: - - - You are not allowed to use this shop! - Ty jsou není dovoleno používat tento obchod! - No tienes permiso de usar esta tienda! - - Du bist nicht befugt, dieses Geschäft zu benutzen! - Vous n'êtes pas autorisé à utiliser cette boutique ! - Non sei autorizzato ad usare questo negozio! - Você não está autorizado a utilizar essa loja! - Nie jesteś uprawniony do używania tego sklepu! - 不许你使用这家商店! - - - You need to select an item to buy. - Je třeba vybrat položku, kterou chcete koupit. - Debes selecionar un objeto para comprar. - - Du musst einen Gegenstand auswählen, um ihn zu kaufen. - Vous devez sélectionner un objet pour l'acheter. - Seleziona un oggetto per poterlo comprare. - Você precisa selecionar um item para comprar. - Musisz zaznaczyć co chcesz kupić. - 你需要选择要购买的物品。 - - - You didn't enter an actual number - Nezadal jste skutečný počet - No metistes un numero real - - Du hast keine echte Zahl eingegeben. - Vous n'avez pas saisi un nombre réel - Non hai inserito correttamente un numero - Você não digitou um número válido. - Nie podałeś aktualnego numeru - 你没有输入一个正确的数字 - - - You don't have that many items to sell! - Nemusíte, že mnoho položek k prodeji! - No tienes tantos objetos! - - Du hast nicht so viele Gegenstände zum Verkaufen! - Vous n'avez pas autant d'objets à vendre ! - Non hai tutti quegli oggetti da vendere! - Você não tem todos esse items para vender - Nie masz tak dużo rzeczy do sprzedania! - 你没有那么多物品可以出售! - - - The gang has enough funds to pay for this, would you like to pay with the gangs funds or your own? - Gang má dostatek finančních prostředků na zaplacení za to, byste chtěli platit fondů bandy nebo sami? - Tu pandilla tiene suficiente dinero para pagar esto, quieres pagar con ese dinero o el tuyo? - - Die Gang hat genügend Geld, um dafür zu zahlen. Willst du mit dem Geld der Gang oder deinem Eigenem bezahlen? - Le gang a suffisamment de fonds pour payer pour cela, voulez-vous payer avec les fonds de gangs ou avec votre propre argent ? - La Gang ha fondi a sufficienza per pagare questo oggetto, vuoi usare i fondi della Gang o i tuoi personali? - A Gangue tem dinheiro suficiente para pagar por isso, você gostaria de usar o dinheiro da Gangue? - Gang posiada wystarczającą ilość środków aby za to zapłacić, chcesz zapłacić za to środkami gangu, czy własnymi? - 帮派有足够的钱来支付这笔钱,你愿意用帮派的钱还是自己的钱? - - - Gang Funds: - Gang fondy: - Fondos de Pandilla: - - Geld der Gang: - Fonds du gang : - Fondi Gang: - Fundos da Gangue: - Środki gangu: - 帮派资金: - - - Your Cash: - Váš Cash: - Tu dinero: - - Bargeld: - Votre argent : - Tuoi Fondi: - Seu Dinheiro: - Twoje środki: - 你的现金: - - - Pay with cash or gang funds - Platit v hotovosti nebo gangů fondů - Pagar con tu dinero o el de tu pandilla? - - Mit Bargeld oder Geld der Gang bezahlen? - Payez avec votre argent ou avec les fonds du gang - Paga con i tuoi contanti o con i fondi della Gang - Pagar com a sua conta ou a da Gangue - Zapłać gotówką albo środkami gangu - 用现金或帮派基金支付 - - - Gang Funds - Gang fondy - Fondos de la Pandilla - - Geld der Gang - Fonds du gang : - Fondi Gang - Gangue - Środki gangu - 帮派资金 - - - Your Cash - Váš Cash - Tu dinero - - Bargeld: - Votre argent - Tuoi Fondi - Seu - Twoje środki - 你的现金 - - - You bought %1 %2 for $%3 with the gangs funds - Koupili jste% %1 %2 za $ 3 s fondy gangů - Comprastes %1 %2 por $%3 con el dinero de la pandilla - - Du kaufst %1 %2 für $%3 mit dem Geld der Gang - Vous avez acheté %1 %2 pour $%3 avec les fonds gangs - Hai comprato %1 %2 al costo di $%3 con i fondi della Gang - Você comprou %1 %2 por R$%3 com o dinheiro da gangue - Kupiłeś %1 %2 za $%3 ze środków gangu - 你购买 %1 %2 花费 $%3 帮派基金 - - - You bought %1 %2 for $%3 - Koupili jste% %1 2 na $ %3 - Comprastes %1 %2 por $%3 - - Du hast %1 %2 für $%3 gekauft. - Vous avez acheté %1 %2 pour $%3 - Hai comprato %1 %2 al costo di $%3 - Voce comprou %1 %2 por R$%3 - Kupiłeś %1 %2 za $%3 - 你购买 %1 %2 花费 $%3 - - - You sold %1 %2 for $%3 - Prodali jste% %1 2 na $ %3 - Vendistes %1 %2 por $%3 - - Du hast %1 %2 für $%3 verkauft. - Vous avez vendu %1 %2 pour $%3 - Hai venduto %1 %2 al prezzo di $%3 - Você vendeu %1 %2 por R$%3 - Sprzedałeś %1 %2 za $%3 - 你出售 %1 %2 得到 $%3 - - - You need to select an item to buy/sell. - Je třeba vybrat položku na buy / sell. - Necesitas seleccionar un objetar para vender/comprar. - - Du musst einen Gegenstand auswählen, um ihn zu kaufen / zu verkaufen. - Vous devez sélectionner un objet à acheter/vendre. - Devi selezionare un oggetto per comprare/vendere. - Selecione um item para comprar ou vender. - Musisz wybrać rzecz którą chcesz kupić/sprzedać - 你需要选择一个物品来购买/出售。 - - - You sold a %1 for <t color='#8cff9b'>$%2</t> - prodával jsi %1 pro <t color='#8cff9b'>$%2</t> - Vendistes un %1 por <t color='#8cff9b'>$%2</t> - - Du hast eine %1 für <t color='#8cff9b'>$%2</t> verkauft. - Vous avez vendu un %1 pour <t color='#8cff9b'>$%2</t> - Hai venduto un %1 al prezzo di <t color='#8cff9b'>$%2</t> - Você vendeu %1 por <t color='#8cff9b'>R$%2</t> - Sprzedałeś %1 za <t color='#8cff9b'>$%2</t> - 你出售 %1 得到 <t color='#8cff9b'>$%2</t> - - - You bought a %1 for <t color='#8cff9b'>$%2</t> with the gangs funds. - Koupil sis %1 pro <t color='#8cff9b'>$%2</t> s peněžními prostředky gangů. - Comprastes un %1 por <t color='#8cff9b'>$%2</t> con los fondos de tu pandilla. - - Du hast mit dem Geld der Gang eine %1 für <t color='#8cff9b'>$%2</t> gekauft. - Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> avec les fonds du gang. - Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> con i fondi della Gang. - Você comprou %1 por <t color='#8cff9b'>R$%2</t> com o dinheiro da gangue. - Kupiłeś %1 za <t color='#8cff9b'>$%2</t> ze środków gangu. - 你购买 %1 花费 <t color='#8cff9b'>$%2</t> 黑帮基金。 - - - You bought a %1 for <t color='#8cff9b'>$%2</t> - Koupil sis %1 pro <t color='#8cff9b'>$%2</t> - Comprastes un %1 por <t color='#8cff9b'>$%2</t> - - Du hast eine %1 für <t color='#8cff9b'>$%2</t> gekauft. - Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> - Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> - Você comprou %1 por <t color='#8cff9b'>R$%2</t> - Kupiłeś %1 za <t color='#8cff9b'>$%2</t> - 你购买 %1 花费 <t color='#8cff9b'>$%2</t> - - - Shop Inventory - Obchod Zásoby - Inventario de la Tienda - - Ladeninventar - Inventaire de la boutique - Inventario Negozio - Loja de Inventário - Wyposażenie sklepu - 店铺库存 - - - Your Inventory - Váš Inventory - Tu inventario - - Dein Inventar - Votre inventaire - Inventario Personale - Seu Inventário - Twoje wyposażenie - 你的库存 - - - - - You will receive your next paycheck in %1 minutes. - Obdržíte svůj další výplatní pásku v %1 minut. - Recibiras tu siguiente pago en %1 minutos - - Du erhältst deinen nächsten Gehaltsscheck in %1 Minuten. - Vous recevrez votre prochaine paye dans %1 minutes. - Riceverai il tuo prossimo stipendio in %1 minuti. - Você irá receber seu próximo pagamento em %1 minuto(s). - Otrzymasz kolejną wypłatę w ciągu %1 minut. - 你将在 %1 分钟后收到你的下一张薪水支票。 - - - You have missed a paycheck because you were dead. - Jste vynechal výplatu, protože jste byli mrtví. - Te has perdido un pago por estar muerto. - - Du erhältst kein Gehaltsscheck, da du gestorben bist. - Vous n'avez pas reçu votre paye en raison de votre mort. - Hai perso uno stipendio . - Você não recebeu seu pagamento pois estava morto. - Ominęła cię wypłata ponieważ byłeś martwy. - 因为你死了,你错过了薪水。 - - - You have received a paycheck of $%1. - Dostali jste výplatu ve výši $ %1. - Has recibido un pago de $%1 - - Du hast deinen Gehaltscheck in Höhe von $%1 erhalten. - Vous avez reçu votre paye de $%1. - Hai ricevuto uno stipendio di $%1. - Você recebeu seu pagamento de R$%1. - Otrzymałeś wypłatę w kwocie $%1. - 你收到了一张 $%1 的薪水支票。 - - - - - Refuel Fuel Canister - Tankovat paliva kanystr - Ravitailler le bidon en carburant - Llenar Bidón de Combustible - Fare rifornimento di carburante scatola metallica - Tankowanie paliwa Canister - Reabastecer de combustível vasilha - Заправить баллон с горючим - Benzinkanister befüllen - 给汽油桶加油 - - - Refuel Vehicle - tankovací Vehicle - Llenar Vehículo - Fare rifornimento di veicoli - Tankowanie samochodów - - Reabastecer Veículo - Ravitailler en essence le véhicule - Fahrzeug auftanken - 给车加油 - - - Price per Liter: $%1 - Cena za litr: $ %1 - Precio por Litro: $%1 - Prezzo al litro: $%1 - Cena za litr: $%1 - - Preço por Litro : R$%1 - Prix au Litre : $%1 - Preis pro Liter: $%1 - 每升价格:$%1 - - - Current Fuel Amount: - Aktuální výše Palivo: - Quantité de carburant actuelle : - Actual cantidad de combustible: - Quantità corrente di benzina: - Aktualny Ilość paliwa: - - Quantidade Atual de Combustível: - Aktuelle Kraftstoffmenge: - 当前燃料量: - - - Select a vehicle - Vyberte si vůz - Selecciona un Vehículo - Selezionare un veicolo - Wybierz pojazd - - Selecione um veículo - Sélectionner un vehicule - Wähle ein Fahrzeug: - 选择载具 - - - The vehicle is too far or you are in! - Vozidlo je příliš daleko, nebo jste se! - El Vehículo esta muy lejos o tu estas adentro! - Il veicolo è troppo lontano o vi sei all'interno! - Pojazd jest zbyt daleko lub jesteś w! - - O veículo está muito longe ou você está nele! - Le véhicule est peut-etre trop loin, ou tu es dedans ! - Das Fahrzeug ist zu weit entfernt oder du sitzt noch drin! - 载具太远了,或者你在载具里! - - - The vehicle is full! - Vozidlo je plná! - El Vehículo esta lleno! - Il veicolo è pieno! - Pojazd jest pełna! - - O veículo está cheio! - Le véhicule est plein ! - Das Fahrzeug ist voll! - 载具已满! - - - - - Drop Fishing Net - Drop rybářská síť - Tirar Red de Pesca - - Fischernetz auswerfen - Lancer le filet de pêche - Drop Fishing Net - Jogar Rede de Pesca - Zarzuć sieć - 放下渔网 - - - Rob Person - Rob Pearson - Robar Persona - - Person ausrauben - Voler la personne - Deruba - Roubar Jogador - Obrabuj osobę - 抢劫此人 - - - - - Fish Market - Rybí trh - Marché aux poissons - Mercado de Pescado - - Fischmarkt - Peixaria - Sklep rybny - Pescivendolo - 海产品市场 - - - Hospital - Nemocnice - Hôpital - Hospital - - Krankenhaus - Hospital - Szpital - Ospedale - 医院 - - - Police Station - Policejní stanice - Poste de police - Estación de Policia - - Polizei Revier - Estação Policial - Posterunek policji - Questura - 警察分局 - - - Police Air HQ - Police Air HQ - Base aérienne de la Police - Cuartel Aéreo Policial - QG Aereo Polizia - - Polizei HQ Flughafen - QG Aéreo Policial - Baza lotnicza policji - 警察航空总部 - - - Iron Mine - Železný důl - Mine de fer - Mina de Hierro - - Eisenmine - Mina de Ferro - Kopalnia miedzi - Miniera di ferro - 铁矿 - - - Salt Mine - Solný důl - Mine de sel - Mina de Sal - - Salzmine - Mina de Sal - Kopalnia soli - Salina - 盐矿 - - - Salt Processing - sůl Processing - Traitement de sel - Procesador de Sal - - Salzverarbeitung - Processador de Sal - Warzelnia soli - Processo del sale - 食盐制造厂 - - - Altis Corrections - Altis Opravy - Prison d'Altis - Prisión de Altis - - Altis Bundesgefängnis - Prisão de Altis - Więzienie Altis - Penitenziario di Altis - 监狱 - - - Tanoa Corrections - Tanoa Opravy - Prison de Tanoa - Prisión de Tanoa - - Tanoa Bundesgefängnis - Prisão de Tanoa - Więzienie Tanoa - Penitenziario di Tanoa - Tanoa更正 - - - Police HQ - Police HQ - QG de la police - Comisaria de Policía - QG Polizia - - Polizei HQ - QG Policial - KG Policji Altis - 警察总部 - - - Coast Guard - pobřežní hlídka - Garde-côte - Guardia Costera - - Küstenwache - Guarda Costeira - Straż przybrzeżna - Guardia Costiera - 海岸警卫队 - - - Rebel Outpost - Rebel Outpost - Avant-Poste Rebelle - Base Rebelde - Avamposto Ribelle - - Rebellen Außenposten - Base Rebelde - Baza rebeliantów - 叛军前哨 - - - Air Shop - Air Shop - Concessionnaire aérien - Tienda Aérea - Negozio Aereo - - Luftfahrzeug Händler - Loja Aérea - Sklep lotniczy - 空中载具商店 - - - Truck Shop - Truck Shop - Vendeur de camion - Tienda de Camiones - - LKW Händler - Loja de Caminhões - Salon ciężarówek - Concessionaria Camion - 卡车商店 - - - Oil Processing - Zpracování olej - Traitement du Pétrole - Procesador de Petróleo - - Öl Verarbeiter - Processador de Petróleo - Rafineria ropy naftowej - Raffineria di Petrolio - 石油加工 - - - Iron Processing - Zpracování Iron - Traitement du Fer - Procesador de Hierro - Processo del ferro - - Eisenschmelze - Processador de Ferro - Huta żelaza - 铁矿加工 - - - Sand Mine - písek Mine - Mine de Sable - Mina de Arena - Miniera di sabbia - - Sand Mine - Mina de Areia - Kopalnia piasku - 采沙场 - - - Chop Shop - Chop Shop - Revendeur de véhicules volés - Desguace Clandestino - Ricettatore - - Schrotthändler - Desmanche - Dziupla - 黑车店 - - - Cocaine Processing - Zpracování kokain - Traitement de Cocaïne - Procesador de Cocaína - Trattamento cocaina - - Kokain Verarbeiter - Processador de Cocaína - Oczyszczanie kokainy - 可卡因加工点 - - - Copper Mine - měděný důl - Mine de Cuivre - Mina de Cobre - Miniera di rame - - Kupfermine - Mina de Cobre - Kopalnia miedzi - 铜矿 - - - ATM - bankomat - DAB - ATM - ATM - - Geldautomat - Caixa Eletrônico - Bankomat - 自动取款机 - - - Local Bank - místní bankovní - Banque locale - Banco Local - Banca locale - - Zentralbank - Banco Local - Bank Altis - 银行 - - - Car Shop - Auto Shop - Concessionnaire - Tienda de Coches - Concessionario d `auto - - Autohändler - Loja de Carros - Salon samochodowy - 小汽车店 - - - Hospital/Clinic - Nemocnice / Klinika - Clinique - Hospital/Clínica - Ospedale / Clinica - - Krankenhaus - Hospital/Clínica - Klinika Altis - 医院/诊所 - - - Diamond Mine - Diamond Mine - Mine de diamant - Mina de Diamantes - Miniera di diamanti - - Diamanten Mine - Mina de Diamante - Kopalnia diamentów - 钻石矿场 - - - General Store - Obchod se smíšeným zbožím - Magasin général - Tienda General - Strumenti Generali - - Supermarkt - Loja de Equipamentos - Sklep techniczny - 物品商店 - - - Civilian Shops - civilní Obchody - Magasins civils - Tiendas Civiles - Negozi civili - - Geschäft für Zivilisten - Lojas Civis - Sklepy dla cywilów - 平民商店 - - - Boat Shop - Lodní Shop - Concessionnaire de bateaux - Tienda de Barcos - Concessionaria Nautica - - Boots Händler - Loja de Barcos - Sklep z łodziami - 船舶商店 - - - Bruce's Outback Outfits - Bruceovy Outback Oblečení - Vêtements de Bruce - Tienda de Ropa - Outfit di Bruce - - Loja de Roupas - Sklep odzieżowy - Bruce's Outback Outfits - 服装店 - - - Apple Field - Apple Field - Champs de Pommes - Campo de Manzanas - Campo di Mele - - Apfel Plantage - Campo de Maçãs - Sad jabłkowy - 苹果树林 - - - Peaches Field - broskve Field - Champs de Pêches - Campo de Melocotones - Campo di Pesche - - Pfirsich Plantage - Campo de Pêras - Sad brzoskwiniowy - 桃树林 - - - Market - Trh - Marché - Mercado - Mercato - - Markt - Mercado - Market spożywczy - 市场 - - - Air Service Station - Stanice Air Service - Réparateur Aérien - Estación de Servicio Aéreo - Stazione Servizio Aereo - - Werkstatt für Luftfahrzeuge - Estação de Serviços Aéreos - Serwis lotniczy - 航空服务站 - - - Channel 7 News - Channel 7 News - Chaine d'infos Numéro 7 - Canal de Noticias 7 - Notiziario di Altis - - Kanal 7 Nachrichtensender - Canal de Notícias 7 - Maszt nadawczy - 新闻广播电台 - - - DMV - DMV - Magasin de licences - Registro de Licencias - - Zulassungstelle - Loja de Licenças - Urząd licencyjny - Licenze - 许可证办理 - - - Delivery Missions - Dodací mise - Missions de livraison - Misiones de Entrega - - Kurier Mission - Missões de Entrega - Misje kurierskie - Missioni Postali - 快递任务 - - - Deliver Package - doručit balíček - Livrer le paquet - Entregar Paquete - - Paket ausliefern - Entregar Pacote - Dostarcz przesyłkę - Consegna il pacco - 完成快递任务 - - - Get Delivery Mission - Získat Delivery mise - Obtenir Mission de livraison - Empezar Misión de Entrega - - Starte Kurier Mission - Pegar Missão de Entrega - Pobierz przesyłkę do dostarczenia - Ottieni una missione postale - 得到快递任务 - - - Diving Shop - Potápění Shop - Boutique de plongée - Tienda de Buceo - - Steve's Taucherausrüstung - Loja de Mergulho - Akcesoria do nurkowania - Negozio da Sub - 潜水店 - - - Drug Dealer - Drug prodejce - Dealeur de drogue - Narcotraficante - - Drogendealer - Traficante - Diler narkotyków - Spacciatore - 毒贩 - - - Diamond Processing - Diamond Processing - Traitement du diamant - Procesador de Diamante - - Diamantenschleifer - Processador de Diamante - Szlifierz diamentów - Processo diamanti - 钻石加工 - - - Oil Field - Ropné poles - Champ de Pétrole - Campo de Petróleo - - Öl Felder - Campo de Petróleo - Szyb naftowy - Giacimento di Petrolio - 油田 - - - Marijuana Field - Marihuana Field - Champ de Marijuana - Campo de Marihuana - - Marihuana Plantage - Campo de Maconha - Pole marihuany - Campo di Marijuana - 大麻产地 - - - Marijuana Processing - Zpracování marihuana - Traitement de la Marijuana - Procesador de Marihuana - - Marihuana Verarbeitung - Processador de Maconha - Suszarnia marihuany - Trattamento Marijuana - 大麻加工 - - - Boat Spawn - Lodní potěr - Port - Spawn de Barcos - - Boot Spawn - Spawn de Barcos - Przystań - Consegna Barche - 码头 - - - Copper Processing - Zpracování měď - Traitement du cuivre - Procesador de Cobre - - Kupferschmelze - Processador de Cobre - Huta miedzi - Processo Rame - 铜矿加工 - - - Coca Field - Coca Field - Champ de Cocaïne - Campo de Cocaína - - Kokain Plantage - Campo de Cocaína - Pole kokainy - Campo di Cocaina - 可卡因树林 - - - Oil Trader - olej Trader - Vendeur de pétrole - Comerciante de Petróleo - - Öl Händler - Comprador de Petróleo - Skup benzyny - Vendita Olio - 石油贸易商 - - - Salt Trader - sůl Trader - Vendeur de sel - Comerciante de Sal - - Salz Händler - Comprador de Sal - Skup soli - Vendita Sale - 食盐贸易商 - - - Diamond Trader - Diamond Trader - Vendeur de diamant - Comerciante de Diamantes - - Juwelier - Comprador de Diamante - Skup diamentów - Vendita Diamanti - 钻石贸易商 - - - Glass Trader - sklo Trader - Vendeur de verre - Comerciante de Vidrio - - Glasbläserei - Comprador de Vidro - Skup szkła - Vendita del Vetro - 玻璃贸易商 - - - Iron / Copper Trader - Žehlička / Měď Trader - Vendeur de minerais - Comerciante de Hierro / Cobre - - Industriehandel - Comprador de Ferro e Cobre - Skup metali - Vendita del Ferro/Rame - 铁/铜交易商 - - - Sand Processing - Zpracování písek - Traitement du sable - Procesador de Arena - - Sand Verarbeiter - Processador de Areia - Huta szkła - Processo Sabbia - 玻璃制造厂 - - - Gun Store - Gun Store - Armurerie - Tienda de Armas - - Waffengeschäft - Loja de Armas - Sklep z bronią - Armeria - 武器商店 - - - Opium Poppy Field - Opium Poppy Field - Champ d'héroïne - Campo de Opio - Opium Poppy Field - - Heroin Plantage - Campo de Heroína - Pole heroiny - 罂粟产地 - - - Heroin Processing - Zpracování heroin - Traitement d'héroïne - Procesador de Heroina - Processing eroina - - Heroin Verarbeitung - Processador de Heroína - Oczyszczanie heroiny - 海洛因加工点 - - - Garage - Garáž - Garage - Garaje - Box auto - - Garage - Garagem - Garaż - 载具仓库 - - - Federal Reserve - federální rezervní systém - Banque fédérale - Reserva Federal - - Zentralbank - Reserva Federal - Bank Rezerw Federalnych - Banca Federale - 金库 - - - Highway Patrol Outpost - Dálniční hlídka Outpost - Avant-poste de Police - Puesto de Patrulla de Carretera - - Mautstation - Base da Polícia Rodoviária - Posterunek policji drogowej - Checkpoint di polizia - 公路巡逻队 - - - Rock Quarry - kamenolomu - Mine de pierres - Mina de Piedra - - Steinbruch - Pedreira - Kamieniołom - Cava di Roccia - 采矿石场 - - - Rock Processing - rock Processing - Traitement de pierres - Procesador de Piedra - - Stein Verarbeitung - Processador de Pedra - Wytwórnia cementu z kamienia - Processo Roccia - 水泥制造厂 - - - Cement Trader - cement Trader - Vendeur de ciments - Comerciante de Cemento - - Zement Händler - Comprador de Cimento - Skup cementu - Vendita del Cemento - 水泥贸易商 - - - Turtle Poaching - Turtle pytláctví - Réserve protégée de tortues - Caza de Tortugas - Bracconaggio di Tartarughe - - Wilderei für Schildkröten - Área de Tartarugas - Strefa występowania żółwi morskich - 海龟捕猎区 - - - Turtle Dealer - Turtle prodejce - Dealeur de Tortues - Traficante de Tortugas - - Schildkröten Händler - Comprador de Tartarugas - Skup żółwi - Vendita Tartarughe - 海龟走私商 - - - Go-Kart Shop - Go-Kart Shop - Concessionnaire de karts - Tienda de Go-Kart - - Bobby's Gokarthandel - Loja de Karts - Sklep z GoKartami - Parco Go-Kart - 卡丁车店 - - - Gold Bars Buyer - Gold Bary kupujícího - Acheteur d'Or - Comprador de Oro - - Goldhändler - Comprador de Barras de Ouro - Skup złota - Gioielliere - 金条买家 - - - Gang Hideout 1 - Gang Hideout 1 - Cachette 1 - Escondite de Pandillas 1 - - Gang Versteck 1 - Esconderijo de Gangs 1 - Kryjówka gangu 1 - Covo Gang 1 - 帮派据点1 - - - Gang Hideout 2 - Gang Hideout 2 - Cachette 2 - Escondite de Pandillas 2 - - Gang Versteck 2 - Esconderijo de Gangs 2 - Kryjówka gangu 2 - Covo Gang 2 - 帮派据点2 - - - Gang Hideout 3 - Gang Hideout 3 - Cachette 3 - Escondite de Pandillas 3 - - Gang Versteck 3 - Esconderijo de Gangs 3 - Kryjówka gangu 3 - Covo Gang 3 - 帮派据点3 - - - Hunting Grounds - honební revír - Terrain de chasse - Zona de Caza - - Jagdgebiet - Área de Caça - Strefa polowań - Riserva di Caccia - 狩猎场 - - - Rebel Clothing Shop - Rebel Oblečení Shop - Vêtements rebelle - Tienda de Ropa Rebelde - Rebel negozio di abbigliamento - - Rebellen Kleidungsgeschäft - Loja de Roupas Rebeldes - Magazyn rebelianta - 叛军服装店 - - - Rebel Weapon Shop - Rebel obchodu se zbraněmi - Armurerie rebelle - Tienda de Armas Rebeldes - - Rebellen Waffenhändler - Loja de Armas Rebeldes - Zbrojownia rebelianta - Armeria della Guerriglia - 叛军武器店 - - - Helicopter Shop - vrtulník Shop - Concessionnaire aérien - Tienda de Helicópteros - Elicottero negozio - - Helikopter Händler - Loja de Helicópteros - Sklep lotniczy - 飞行载具店 - - - Fuel Station Store - Palivo Store Station - Cafet' de Station - Tienda de Gasolinera - Stazione di rifornimento Conservare - - Tankstelle - Loja de Conveniência - Sklep OLLEN - 加油站商店 - - - Rebel Market - Rebel Market - Marché Rebelle - Mercado Rebelde - mercato Rebel - - Rebellen Markt - Mercado Rebelde - Market rebelianta - 叛军市场 - - - Question Dealer - Otázka prodejce - Questionner le dealer - Informante - - Informant - Perguntar ao Traficante - Przesłuchaj dilera - Minaccia Spacciatore - 询问经销商 - - - Service Helicopter - Service Vrtulník - Service d'hélicoptère - Helicóptero de Servicio - - Helikopter Werkstatt - Serviço Aéreo - Serwisuj pojazd lotniczy - Servizio Aereo - 维修直升机 - - - Clothing Store - Obchod s oblečením - Vêtements - Tienda de Ropa - - Kleidungsgeschäft - Loja de Roupas - Sklep odzieżowy - Vestiario - 服装店 - - - Medical Assistance - lékařská pomoc - Assistance médicale - Asistencia Médica - - Medizinischer Ersthelfer - Assistência Médica - Pomoc medyczna - Assistenza Medica - 医疗救助 - - - Store vehicle in Garage - Skladovat vozidlo v garáži - Ranger le véhicule dans le garage - Guardar vehículo en el Garaje - - Fahrzeug in Garage einparken - Guardar veículo na Garagem - Umieść pojazd w garażu - Deposita veicolo in garage - 将载具存放在仓库 - - - Cop Item Shop - Cop Item Shop - Magasin de la Police - Tienda de Objetos de Policía - Strumenti - - Polizei Ausrüstung - Loja de Items da Polícia - Zaopatrzenie - 警察物品商店 - - - Cop Clothing Shop - Cop Oblečení Shop - Vêtements de policier - Tienda de Ropa de Policía - Uniformi - - Polizei Uniformen - Loja de Roupas da Polícia - Umundurowanie - 警察服装店 - - - Cop Weapon Shop - Cop obchodu se zbraněmi - Armurerie de Police - Tienda de Armas de Policía - Armeria da Agenti - - Polizei Waffengeschäft - Loja de Armas da Polícia - Broń policji - 警察武器店 - - - Patrol Officer Weapon Shop - Policistou obchodu se zbraněmi - Armurerie d'officier - Tienda de Armas de Oficial de Patrulla - Armeria da Pattuglia - - Loja de Armas de Patrulha - Broń patrolowa - Streifenpolizist Waffengeschäft - 巡警武器商店 - - - Sergeant Weapon Shop - Seržant obchodu se zbraněmi - Armurerie de sergent - Tienda de Armas de Oficial de Sargento - Armeria dei Sergenti - - Lojas de Armas de Sargento - Broń sierżanta - Sergeant Waffengeschäft - 警长武器商店 - - - Vehicle Shop - Shop Vehicle - Concessionnaire de véhicule - Tienda de Vehículos - di veicoli - - Autohändler - Loja de Carros - Pojazdy - sklep - 载具商店 - - - Process Sand - proces Písek - Traiter le sable - Procesar Arena - - Verarbeite Sand - Processar Areia - Przetop piasek na szkło - Lavorazione Sabbia - 把沙子制造成玻璃 - - - Process Rock - proces rock - Traiter la pierre - Procesar Piedra - - Verarbeite Stein - Processar Pedra - Zmiel skały na cement - Processo Roccia - 把矿石制造成水泥 - - - Wong's Food Cart - Křídla Food košík - Magasin de Wong - Kiosko de Wong - Wong Food Cart - - Wong's Spezialitäten - Boteco do Wongs - Bar u Wonga - 食品商人 - - - Open Vault - otevřená Vault - Ouvrir coffre - Abrir Bóveda - Apri Cassaforte - - Geöffneter Tresor - Abrir Cofre - Otwórz skarbiec - 打开金库 - - - Fix Vault - Fix Vault - Réparer coffre - Reparar Bóveda - - Tresor reparieren - Consertar Cofre - Napraw skarbiec - Ripara Cassaforte - 修复金库 - - - Federal Reserve - Front Entrance - Federální rezervní systém - přední vchod - Banque fédérale - Entrée avant - Reserva Federal - Entrada Principal - Riserva Federale - Entrata Frontale - - Zentralbank - Haupteingang - Reserva Federal - Entrada Frontal - Rezerwa federalna - wejście główne - 金库-前门 - - - Federal Reserve - Side Entrance - Federální rezervní systém - Boční vchod - Banque fédérale - Entrée latérale - Reserva Federal - Entrada Lateral - Riserva Federale - Ingresso laterale - - Zentralbank - Seiteneingang - Reserva Federal - Entrada Lateral - Rezerwa federalna - wejście boczne - 金库-侧门 - - - Federal Reserve - Back Entrance - Federální rezervní systém - zadní vchod - Banque fédérale - Entrée Arrière - Reserva Federal - Entrada Trasera - Riserva Federale - Ingresso sul Retro - - Zentralbank - Hintereingang - Reserva Federal - Entrada Traseira - Rezerwa federalna - wejście tylne - 金库-后门 - - - Federal Reserve - Vault View - Federální rezervní systém - Vault View - Banque fédérale - Voir Coffre - Reserva Federal - Vista a la Bóveda - Riserva Federale - Vista della Cassaforte - - Zentralbank - Tresor - Reserva Federal - Visão do Cofre - Rezerwa federalna - skarbiec - 金库-保险箱 - - - Turn Off Display - Vypnout displej - Désactiver l'affichage - Apagar el Display - Disattivare la visualizzazione - - Bildschirm ausschalten - Desligar Monitor - Wyłącz wyświetlacz - 关闭显示 - - - Armament - Vyzbrojení - Armement - Armamento - Armamento - - Rüstkammer - Armamento - Zbrojownia gangu - 武器装备 - - - EMS Item Shop - EMS Item Shop - Magasin de médecin - Tienda de Objetos de Médico - Strumenti EMS - - Sanitäter Ausrüstung - Loja de Items Médicos - Wyposażenie medyczne - 医疗物品店 - - - EMS Clothing Shop - EMS Oblečení Shop - Uniformes du SAMU - Tienda de Ropa de Médico - Uniformi EMS - - Sanitäter Kleidungsgeschäft - EMS Roupa Loja - Sklep odzieżowy EMS - 医疗服装店 - - - Helicopter Garage - vrtulník Garáž - Garage d'hélicoptère - Garaje de Helicóptero - Garage d'Elicotteri - - Helikopter Hangar - Garagem Aérea - Hangar lotniczy - 直升机库 - - - Car Garage - Car Garage - Garage de voitures - Garaje de Coches - - Fahrzeug Garage - Garagem de Carros - Hangar lotniczy - Garage Automobili - 载具仓库 - - - Pay Bail - Pay Bail - Payer la caution - Pagar Fianza - - Zahle Kaution - Pagar Fiança - Zapłać kaucję - Paga cauzione - 支付保释金 - - - - - Remove Uniform - Remove Uniform - Remove Uniform - Remove Uniform - Entferne Kleidung - Retirer uniforme - Remove Uniform - Remove Uniform - Remove Uniform - 删除制服 - - - Remove Hat - Remove Hat - Remove Hat - Remove Hat - Entferne Kopfbedeckung - Retirer chapeau - Remove Hat - Remove Hat - Remove Hat - 删除帽子 - - - Remove Glasses - Remove Glasses - Remove Glasses - Remove Glasses - Entferne Brille - Retirer lunettes - Remove Glasses - Remove Glasses - Remove Glasses - 删除眼镜 - - - Remove Vest - Remove Vest - Remove Vest - Remove Vest - Entferne Weste - Retirer gilet - Remove Vest - Remove Vest - Remove Vest - 删除背心 - - - Remove Backpack - Remove Backpack - Remove Backpack - Remove Backpack - Entferne Rucksack - Retirer sac - Remove Backpack - Remove Backpack - Remove Backpack - 删除背包 - - - Casual Wears - Casual Wears - Casual Wears - Casual Wears - Büro Kleidung - Casual Wears - Casual Wears - Casual Wears - Casual Wears - 休闲装 - - - Hat and Bandana - Hat and Bandana - Hat and Bandana - Hat and Bandana - Mütze und Kopftuch - Chapeau et bandana - Hat and Bandana - Hat and Bandana - Hat and Bandana - 帽子和头巾 - - - Cop Uniform - Cop Uniform - Cop Uniform - Cop Uniform - Polizei Uniform - Uniforme de service - Cop Uniform - Cop Uniform - Cop Uniform - 警察制服 - - - EMS Uniform - EMS Uniform - EMS Uniform - EMS Uniform - Sanitäter Uniform - Uniforme du SAMU - EMS Uniform - EMS Uniform - EMS Uniform - 医疗制服 - - - EMS Backpack - EMS Backpack - EMS Backpack - EMS Backpack - Sanitäter Rucksack - Sac à dos SAMU - EMS Backpack - EMS Backpack - EMS Backpack - 医疗背包 - - - Flashbang - Flashbang - Flashbang - Flashbang - Blendgranate - Flashbang - Flashbang - Flashbang - Flashbang - 闪光弹 - - - Stun Pistol - Stun Pistol - Stun Pistol - Stun Pistol - Betäubungs-Pistole - Taser - Stun Pistol - Stun Pistol - Stun Pistol - 眩晕手枪 - - - Taser Rifle - Taser Rifle - Taser Rifle - Taser Rifle - Betäubungs-Gewehr - Fusil taser - Taser Rifle - Taser Rifle - Taser Rifle - 泰瑟步枪 - - - Taser Rifle Magazine - Taser Rifle Magazine - Taser Rifle Magazine - Taser Rifle Magazine - Betäubungs-Gewehr-Magazine - Chargeurs de fléchettes électriques - Taser Rifle Magazine - Taser Rifle Magazine - Taser Rifle Magazine - 泰瑟步枪弹匣 - - - Northern Rebel Base - Northern Rebel Base - Northern Rebel Base - Northern Rebel Base - Nord Rebellen Basis - Base rebelle Nord - Northern Rebel Base - Northern Rebel Base - Northern Rebel Base - 北部叛军基地 - - - Southern Rebel Base - Southern Rebel Base - Southern Rebel Base - Southern Rebel Base - Süd Rebellen Basis - Base rebelle Sud - Southern Rebel Base - Southern Rebel Base - Southern Rebel Base - 南部叛军基地 - - - Eastern Rebel Base - Eastern Rebel Base - Eastern Rebel Base - Eastern Rebel Base - Ost Rebellen Basis - Base rebelle Est - Eastern Rebel Base - Eastern Rebel Base - Eastern Rebel Base - 东部叛军基地 - - - North Western Rebel Base - North Western Rebel Base - North Western Rebel Base - North Western Rebel Base - Nord-West Rebellen Basis - Base rebelle Nord-Ouest - North Western Rebel Base - North Western Rebel Base - North Western Rebel Base - 西北叛军基地 - - - North Eastern Rebel Base - North Eastern Rebel Base - North Eastern Rebel Base - North Eastern Rebel Base - Nord-Ost Rebellen Basis - Base rebelle Nord-Est - North Eastern Rebel Base - North Eastern Rebel Base - North Eastern Rebel Base - 东北叛军基地 - - - Kavala Hospital - Kavala Hospital - Kavala Hospital - Kavala Hospital - Kavala Krankenhaus - Hôpital de Kavala - Kavala Hospital - Kavala Hospital - Kavala Hospital - Kavala医院 - - - Athira Regional - Athira Regional - Athira Regional - Athira Regional - Athira Krankenhaus - Hôpital d'Athira - Athira Regional - Athira Regional - Athira Regional - Athira地区 - - - Pyrgos Hospital - Pyrgos Hospital - Pyrgos Hospital - Pyrgos Hospital - Pyrgos Krankenhaus - Hôpital de Pyrgos - Pyrgos Hospital - Pyrgos Hospital - Pyrgos Hospital - Pyrgos医院 - - - South East Hospital - South East Hospital - South East Hospital - South East Hospital - Süd-Ost Krankenhaus - Hôpital du Sud-Est - South East Hospital - South East Hospital - South East Hospital - 东南医院 - - - Tanouka Regional - Tanouka Regional - Tanouka Regional - Tanouka Regional - Tanouka Krankenhaus - Hôpital de Tanouka - Tanouka Regional - Tanouka Regional - Tanouka Regional - Tanouka地区 - - - North East Airport Hospital - North East Airport Hospital - North East Airport Hospital - North East Airport Hospital - Nord-Ost Flughafen Krankenhaus - Hôpital de l'aéroport - North East Airport Hospital - North East Airport Hospital - North East Airport Hospital - 东北机场医院 - - - North Airport HQ - North Airport HQ - North Airport HQ - North Airport HQ - Nord Flughafen HQ - Base aérienne nord - North Airport HQ - North Airport HQ - North Airport HQ - 北部机场总部 - - - South Western Airport HQ - South Western Airport HQ - South Western Airport HQ - South Western Airport HQ - Süd-Westliche HQ Flughafen - Base aérienne sud-ouest - South Western Airport HQ - South Western Airport HQ - South Western Airport HQ - 西南机场总部 - - - - - Vehicular Manslaughter - dopravní zabití - Vol de véhicule - Homicidio Vehicular - Omicidio colposo veicolare - Kołowego Manslaughter - - Atropelamento - Fahrlässige Tötung - 载具撞人 - - - Manslaughter - Zabití - Homicide involontaire - Homicidio - Omicidio colposo - Zabójstwo - - Homicidio Involuntario - Totschlag - 过失杀人 - - - Escaping Jail - Jak uniknout vězení - Evasion de prison - Escaparse de la Cárcel - Fuga dalla prigione - Uciekając Jail - - Fuga da Prisão - Ausbruch - 逃离监狱 - - - Attempted Auto Theft - Pokusili Theft Auto - Tentative de vol de véhicule - Atentado: Robo de Vehículo - Tentativo di furto d'auto - Próba Theft Auto - - Tentativa de Roubo de Veiculo - Versuchter Autodiebstahl - 企图盗窃载具 - - - Use of illegal explosives - Používání nelegálních výbušnin - Utilisation d'explosifs illégaux - Uso de Explosivos Ilegales - Uso di esplosivi illegali - Używanie nielegalnych materiałów wybuchowych - - Uso de explosivos ilegais - Verwendung von illegalen Sprengstoff - 使用非法爆炸物 - - - Robbery - Loupež - Vol - Robo - Rapina - Rozbój - - Roubo - Raub - 抢劫 - - - Kidnapping - Únos - Enlèvement - Secuestro - Rapimento - Porwanie - - Sequestro - Entführung - 绑架 - - - Attempted Kidnapping - pokus o únos - Tentative de kidnapping - Atentado: Secuestro - - Tentativa de Sequestro - Versuchte Entführung - Tentativo di rapimento - Próba porwania - 绑架未遂 - - - Public Intoxication - veřejné Intoxikace - Intoxication publique - Intoxicación Pública - - Uso de Droga em Publico - Öffentlicher Drogenmissbrauch - Uso di stupefacenti in pubblico - Upojenie publiczny - 公共场合使用非法药品 - - - Grand Theft - velká loupež - Vol de voiture - Robo Mayor - grande furto - Wielka kradzież - - Grande Roubo - Auto Diebstahl - 盗窃 - - - Petty Theft - Petty Theft - Petit vol - Robo Menor - piccoli furti - Drobnych kradzieży - - Pequeno Roubo - Kleiner Diebstahl - 小偷小摸 - - - Hit and run - Zavinit nehodu a ujet - Délit de fuite - Pega y Corre - Mordi e fuggi - Uderz i uciekaj - - Fugir de Batida - Fahrerflucht - 交通肇事后逃逸 - - - Drug Possession - držení drog - Possession de drogue - Posesión de Drogas - possesso di droga - Posiadanie narkotyków - - Posse de Droga - Drogenbesitz - 持有毒品 - - - Intent to distribute - Intent distribuovat - Intention de distribuer - Intención de Distribuir - - Tentativa de Trafico - Versuchter Drogenhandel - Tentativo di spaccio - Zamiarem dystrybucji - 意图散布 - - - Drug Trafficking - Obchodování s drogami - Trafic de drogue - Tráfico de Drogas - - Trafico de Drogas - Drogenhandel - Vendita di droga - Handel narkotykami - 贩毒 - - - Burglary - loupež - Cambriolage - Robo de Casa - furto con scasso - Włamanie - - Arrombamento - Einbruch - 盗窃 - - - Tax Evasion - Daňový únik - Évasion fiscale - Evadir Impuestos - - Evasão Fiscal - Steuerhinterziehung - Evasione delle tasse - Unikanie podatków - 逃税 - - - Terrorism - Terorismus - Terrorisme - Terrorismo - - Terrorismo - Terrorismus - Terrorismo - Terroryzm - 恐怖主义 - - - Unlicensed Hunting - Volně prodejné Hunting - Chasse sans licence - Caza sin Licencia - - Caça sem Licença - Jagen ohne Jagdschein - Caccia senza licenza - Polowanie nielicencjonowane - 无证狩猎 - - - Organ Theft - Organ Krádež - Vol d'organes - Robo de Organos - organo furto - Narząd kradzieżą - - Roubo de Orgãos - Organ Diebstahl - 盗窃公共财物 - - - Attempted Organ Theft - Pokus o krádež Organ - Tentative de vol d'organes - Atentado: Robo de Organos - Tentativo furto di organi - Próba kradzieży narządów - - Tentativa de Roubo de Orgãos - Versuchter Organ Diebstahl - 盗窃公共财物未遂 - - - Driving without license - Jízda bez povolení - Conducir sin Licencia - - Absence du permis de conduire - Dirigir sem Licença - Fahren ohne Führerschein - Guida senza patente - Jazda bez licencji - 无证驾驶 - - - Driving on the wrong side of the road - Jízda v špatným směrem do ulice - Conducir en el lado incorrecto de la calle - - Conduite sur le mauvais côté de la route - Dirigindo no sentido contrario - Guida Contromano - Jazda po niewłaściwej stronie drogi - Fahren in die falsche Richtung der Straße - 在错误的道路上驾驶 - - - Not respecting the signalizations - Nerespektování signalizací - No respetar las señales - - Non respect des signalisations - Não respeitar as sinalizações - Nicht unter Beachtung der Signalisierungen - Mancato rispetto dei segnali stradali - Nie przestrzegając sygnalizacji czy - 不遵守交通灯号 - - - Speeding - rychlá jízda - Exceso de Velocidad - - Excès de vitesse - Excesso de Velocidade - Geschwindigkeitsüberschreitung - Eccesso di velocità - Przyśpieszenie - 超速 - - - No headlight in the night - No světel v noci - Manejar sin luces en la noche - - Absence de phare la nuit - Farois Apagados Durante a Noite - Fahren ohne Licht - Luci spente durante la notte - Brak świateł w nocy - 夜间不开车灯 - - - Driving kart without helmet - Hnací motokáru bez helmy - Manejar un Kart sin casco - - Non-port du casque en Kart - Dirigindo Kart Sem Capacete - Fahren ohne Helm - Guida di Kart senza casco - Jazda bez kasku gokarta - 驾驶卡丁车不戴安全头盔 - - - Badly parked vehicle - Špatně zaparkované vozidlo - Vehículo mal estacionado - - Véhicule mal garé - Veículo Mal Estacionado - Parksünder - Veicolo mal parcheggiato - Źle zaparkowany samochód - 乱停放载具 - - - Rebel vehicle (Not armed) - Rebel vozidla (není ozbrojený) - Vehículo Rebelde (No Armado) - - Véhicule rebel non armé - Veículo Rebelde(Não Armado) - Rebellen Fahrzeug (nicht bewaffnet) - Veicolo blindato(Non armato) - Rebel pojeździe (nie czuwa) - 叛军载具(无武装) - - - Grand Theft (Civilian Vehicle) - Grand Theft (Civilian Vehicle) - Robo Mayor (Vehículo Civil) - - Vol de véhicule civil - Roubo de Veículo (Veículo Civil) - Schwerer Diebstahl (Zivilfahrzeug) - Furto di veicolo (Civile) - Grand Theft (Cywilny Vehicle) - 盗窃载具(民用载具) - - - Grand Theft (Military Vehicle) - Grand Theft (Military Vehicle) - Robo Mayor (Vehículo Militar) - - Vol de véhicule militaire - Roubo de Veículo(Militar) - Schwerer Diebstahl (Dienstfahrzeug) - Furto di veicolo militare - Grand Theft (pojazd wojskowy) - 盗窃载具(军用载具) - - - Armored Vehicle - obrněné vozidlo - Vehículo Blindado - - Véhicules blindés - Veículo Armado - Panzerfahrzeug - Veicolo D'assalto - Opancerzony pojazd - 装甲载具 - - - Flying over the city without authorization - Létání nad městem bez povolení - Volar sobre la ciudad sin autorización - - Survol de ville sans autorisation - Sobrevoando sobre a cidade sem autorização - Fliegen über die Stadt ohne Genehmigung - Guida di velivolo su città abitata senza autorizzazione - Latające nad miastem bez zezwolenia - 未经授权飞越城市 - - - Closing the street without authorization - Uzavření ulici bez povolení - Cerrar las calles sin autorización - - Interdiction de se poser sans autorisation - Fechar Rua Sem Autorização - Absperren der Straße ohne Genehmigung - Impedimento del traffico senza permesso - Zamknięcie ulicy bez zezwolenia - 擅自堵塞街道 - - - Open carry in city (Legal Weapon) - open carry ve městě (právní Weapon) - Cargar Arma Abiertamente en la Ciudad (Arma Legal) - Aprire il trasporto in città (Arma Legale) - Otwarty Carry w mieście (prawny Weapon) - - Arme légale visible en ville - Portar em Cidades(Arma Legal) - Offenes Tragen einer legalen Waffe in der Stadt - 公开携带武器进入城市(合法武器) - - - Rebel weapon - Rebel zbraň - Arma Rebelde - - Armes rebelles - Arma Rebelde - Rebellen Waffe - Arma Ribelle - Rebel bronią - 叛军武器 - - - Illegal clothing - Nelegální oblečení - Ropa Ilegal - abbigliamento illegale - Nielegalna odzież - - Vêtements illégaux - Roupas Ilegais - Illegale Kleidung - 非法服装 - - - Hiding face (Mask) - Schovává tvář (Mask) - Ocultar su Cara (Máscara) - Nascondere faccia (Mask) - Ukrywając twarz (maska) - - Cacher son visage - Esconder o Rosto(Mascara) - Verstecken des Gesichts (Maske) - 隐藏面部(面具) - - - Refuses to cooperate - Odmítá spolupracovat - Reusa a Cooperar - Si rifiuta di collaborare - Odmawia współpracy - - Refus d'obtempérer - Recusou-se a Cooperar - Behinderung der Staatsgewalt - 拒绝合作 - - - Hit and run - Zavinit nehodu a ujet - Golpea y Corre - Mordi e fuggi - Uderz i uciekaj - - Délit de fuite - Bater e Fugir - Fahrerflucht - 交通肇事逃逸 - - - Insulting a civilian - Urážky civilní - Insultar a un Civil - - Insulte envers un civil - Insulto a Civil - Beleidigung - Insulto a civile - Obrażanie cywilem - 侮辱平民 - - - Insulting a soldier - Urážky vojáka - Insultar a un Soldado - - Insulte envers un militaire - Insulto as Autoridades - Beamtenbeleidigung - Insulto a pubblico ufficiale - Znieważenie żołnierza - 侮辱士兵 - - - Drug dealing - Urážky vojáka... - Venta de Drogas - - Trafique de drogue - Trafico de Drogas - Drogenhandel - Traffico di droga - Handel narkotykami - 毒品交易 - - - Federal Reserve breaking - Federální rezervní systém lámání - Entrar a la Reserva Federal - - Intrusion dans la réserve fédérale - Invasão a Reserva Federal - Bankeinbruch - Rapina alla Riserva Federale - Rezerwa Federalna łamanie - 非法打开金库 - - - Killing of a civilian - Zabíjení civilní - Homicidio de un Civil - Uccisione di un civile - Zabójstwo cywilnej - - Meurtre d'un civil - Matou um Civil - Töten eines Zivilen - 杀害平民 - - - Killing of a soldier - Zabití vojáka - Homicidio de un Soldado - - Meurtre d'un militaire - Matou um Policial - Töten eines Beamten - Omicidio di un agente - Zabijając żołnierza - 杀害士兵 - - - - - Gas Storage - Gas Storage - Stockage de gaz - Almacenamiento de Combustible - Stoccaggio di Gas - Magazynów gazu - - Treibstofflager - Posto de Combustível - 燃料储存 - - - Supply - Zásobování - Ravitailler - Suministro - Fornitura - Dostawa - - Liefern - Abastecer - 供应 - - - Store - Obchod - Déposer - Guardar - Negozio - Sklep - - Lagern - Guardar - 商场 - - - Stop - Stop - Arrêter - Parar - Stop - Zatrzymać - - Stoppen - Parar - 停止 - - - Tanker is already in use. - Tankery je již používán. - Le camion citerne est déjà en cours d'utilisation. - El Camión Cisterna ya esta siendo usado. - La cisterna è già in uso. - Cysterna jest już w użyciu. - - Tankwagen wird bereits benutzt. - Os tanques já estão em uso. - 油轮已投入使用。 - - - Gas station is in use. - Čerpací stanice je v provozu. - La station-service est en cours de fonctionnement. - La estación ya se esta usando. - La stazione di benzina è già in uso. - Stacja benzynowa jest w użyciu. - - Tankstelle wird bereits beliefert. - O posto já está sendo usado. - 加油站在使用中。 - - - Tanker is empty. - Tankery je prázdný. - Le camion citerne est vide. - El Camión cisterna esta vacío. - La cisterna è vuota. - Cysterna jest pusta. - - Treibstofftank ist leer. - Os tanques estão vazios. - 油轮是空的。 - - - Tankers is full. - Tankery je plná. - Réservoir plein. - El Camión cisterna esta lleno. - La cisterna è piena. - Zbiornikowce jest pełna. - - Treibstofftank ist voll. - Os tanques estão cheios. - 油轮已满。 - - - Gas station has enough fuel. - Čerpací stanice má dostatek paliva. - La station service a suffisamment de carburant. - La estación tiene suficiente gasolina. - Il distributore ha abbastanza benzina. - Stacja benzynowa ma wystarczającą ilość paliwa. - - Tankstelle hat genug Treibstoff. - O posto tem combustível suficiente. - 加油站有足够的燃料。 - - - This gas station is supplied through a pipeline. - Tento Čerpací stanice se dodává potrubím. - Cette station service est fournie par un pipeline - Esta estación es suministrada por una tubería. - Questa stazione di gas è alimentata attraverso una tubatura. - Ta stacja gaz jest dostarczany rurociągiem. - - Diese Tankstelle wird über eine Pipeline versorgt. - Esse posto é abastecido através de uma mangueira. - 这个加油站通过管道供给。 - - - Discontinued operation. - Ukončená činnost. - Activité abandonnée. - Operación discontinuada. - Incarico Incompleto. - Działalność zaniechana. - - Vorgang abgebrochen. - Operação descontinuada. - 停止运营。 - - - Your share is $%1. - Váš podíl $%1. - Votre part est de $%1. - Tu ganancia es $%1. - La vostra quota è di $%1. - Twój udział jest $%1. - - Dein Anteil beträgt $%1. - A sua parte é de R$%1. - 你的份额为 $%1. - - - - - Mission Failed - Mise selhala - Mission échouée - Misión fallida - Missione fallita - Misja nie powiodła się - Missão fracassada - Миссия провалена - Mission fehlgeschlagen. - 任务失败 - - - You are not white-listed to use this slot. - Mise selhala - Vous n'êtes pas white-listé. - No tienes permiso de usar este slot. - Missione fallita - Misja nie powiodła się - Missão fracassada - Миссия провалена - Nicht auf der Whitelist. - 你不是白名单不能使用这个栏位。 - - - You are not allowed to use this slot because you do not have the appropriate permissions. Try another slot. - Ty jsou není dovoleno používat tento slot, protože nemáte příslušná oprávnění. Zkuste použít jiný slot. - Vous n'êtes pas autorisé à utiliser cet emplacement parce que vous ne disposez pas des autorisations appropriées. Essayez un autre emplacement. - No puede usar este slot porque no tiene los permisos requeridos. Por favor trate con otro slot. - Non è consentito usare questo slot, perché non si dispone delle autorizzazioni appropriate. Prova un altro slot. - Nie wolno korzystać z tego gniazda, ponieważ nie masz odpowiednich uprawnień. Spróbuj użyć innego gniazda. - Você não tem permissão para usar esse slot, porque você não tem as permissões apropriadas. Tente outro slot. - Вы не можете использовать этот слот, потому что у вас нет соответствующих разрешений. Попробуйте использовать другой слот. - Du bist nicht auf der Whitelist, deswegen kannst du diesen Platz nicht verwenden. Versuche es auf einen anderen Platz. - 你不允许使用此栏位,因为你没有适当的权限。尝试另一个栏位。 - - - - - Mission Failed - Mise selhala - Mission échouée - Misión fallida - Missione fallita - Misja nie powiodła się - Missão fracassada - Миссия провалена - Mission fehlgeschlagen - 任务失败 - - - You are blacklisted from cops. - Ty jsou na černé listině z policajtů. - Vous êtes sur blacklisté de la police. - Usted está en la lista negra de policías. - Stai lista nera da poliziotti. - Jesteś na czarnej liście od policjantów. - Você está na lista negra de policiais. - Вы в черном списке от ментов. - Du bist von Polizisten auf die schwarze Liste gesetzt worden. - 你被警察列入黑名单。 - - - You are not allowed to be a cop due to previous actions and the admins have removed you from being a cop. - Ty jsou nesmí být policajt vzhledem k předcházejícími akcemi a administrátoři vám odstraní z bytí policista. - Vous avez été blacklisté de la police en raisons d'actions précédentes allant à l'encontre des règles. Vous ne pouvez plus devenir policier. - No tiene permiso a ser policía por acciones anteriores. Los administradores han bloqueado su acceso. - Non è consentito fare il poliziotto a causa di azioni precedenti e gli amministratori di aver rimosso da essere un poliziotto. - Nie mogą być policjantem z powodu wcześniejszych działań oraz administratorzy usunęli cię od bycia policjantem. - Você não tem permissão para ser um policial devido a ações anteriores e os admins ter removido-lo de ser um policial. - Вы не можете быть полицейским в связи с предыдущими действиями и админы удалили вас от того, чтобы быть полицейским. - Du bist aufgrund früherer Aktion, kein Polizist mehr. Du wurdest von den Admins aus der Polizei entfernt. - 由于以前的行为,你不再是警察,警局已将你从警队中开除。 - - - - - The SpyGlass sees you! - Dalekohled tě vidí! - SpyGlass vous voit ! - El SpyGlass te ve! - Il cannocchiale si vede! - Lunetę widzi! - O SpyGlass te vê! - SpyGlass видит, что вы! - SpyGlass sieht dich! - SpyGlass正在检测你! - - - You were detected by the SpyGlass. - Vy byly detekovány dalekohled. - Vous avez été détecté par SpyGlass. - Fue detectado por el SpyGlass. - Lei è stato rilevato dal SpyGlass. - Ty zostały wykryte przez lunetę. - Você foi detectado pelo SpyGlass. - Вы были обнаружены с помощью SpyGlass. - Du wurdest von SpyGlass erkannt. - 你被SpyGlass检测。 - - - You were detected for cheating and have been reported to the server. Enjoy your day. - Vy byly detekovány za podvádění a byly zaznamenány na server. Užijte si svůj den. - Vous avez été détecté pour triche et avez été signalé au serveur. Profitez de votre journée. - Fue detectada por hacer trampas y se le ha informado al servidor. Disfruta tu día. - Lei è stato rilevato per truffa e sono stati segnalati per il server. Buona giornata. - Ty wykryto oszustwo i zostały zgłoszone do serwera. Miłego dnia. - Está foram detectados por engano e têm sido relatados para o servidor. Aproveite seu dia. - Вы были обнаружены для мошенничества и было сообщено на сервер. Удачного дня. - >Du wurdest wegen Betrug erkannt und an den Server gemeldet. Genieße deinen Tag. - 你被发现作弊,并已报告给服务器。珍惜你的生活吧。 - - - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-FLAG: %1 : %2 : %3 - SPYGLASS-ERKENNUNG: %1 : %2 : %3 - SPYGLASS-标记: %1 : %2 : %3 - - - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Betrüger Erkannt</t><br/<br/>Name: %1<br/>Erkennung: %2 - <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>作弊者被标记</t><br/<br/>姓名:%1<br/>发现:%2 - - - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. - %1 wurde beobachtet durch SPY-GLASS. Er/Sie hatte versucht auf das Befehlsmenü:\n\n %2\n\n zuzugreifen, diese ist dem System aber nicht bekannt. BITTE BEACHTE! Er/Sie betrügt deshalb nicht, aber SPY-GLASS fand es trotzdem relevant es zu melden. - %1 被SPY-GLASS检测, 他/她试图访问命令菜单:\n\n %2\n\n 并且系统不知道命令菜单。请注意他/她可能不会作弊,但SPY-GLASS发现了它的报告相关。 - - - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 is not allowed TYPE: %2 NS: MN - Variable: %1 ist nicht erlaubt. TYPE: %2 NS: MN - 变量:不允许: %1 类型: %2 NS: MN - - - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 is not allowed TYPE: %2 NS: UI - Variable: %1 ist nicht erlaubt. TYPE: %2 NS: UI - 变量:不允许: %1 类型: %2 NS: UI - - - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 - ||SPY-GLASS Beobachtung|| Name: %1 | UID: %2 | Grund: %3 - ||SPY-GLASS 观察|| 姓名:%1 | UID:%2 | 原因:%3 - - - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable set before client initialized: %1 - Variable gesetzt bevor Client initialisiert: %1 - 客户端初始化之前的变量集:%1 - - - - - EMS Requested - EMS Požadované - Medecin demandé - Medico Solicitado - EMS richiesto - EMS Zamówiony - EMS solicitada - EMS Запрошенный - Sanitäter benachrichtigt - EMS要求 - - - Delivery Job Accepted - Dodávka Job Accepted - Mission de livraison acceptée - Misión de Entrega Aceptada - Incarico Postale accettato - Dostawa Praca Zaakceptowany - Entrega aceitado Job - Доставка Работа Принято - Lieferauftrag angenommen - 接受交货工作 - - - Delivery Job Failed - Nepodařilo dodávka Job - Mission de livraison échouée - Misión de Entrega Fallada - Incarico Postale Fallito - Dostawa Praca Failed - Falha de entrega Job - Доставка Работа Ошибка - Lieferauftrag fehlgeschlagen - 交货工作失败 - - - Delivery Job Completed - Dokončena dodávka Job - Mission de livraison réussie - Misión de Entrega Completada - Incarico Postale Completato - Dostawa Praca Zakończony - Concluída a entrega Job - Доставка Работа Завершено - Lieferauftrag abgeschlossen - 交货工作已完成 - - - Received A Text Message - Přijetí textové zprávy - SMS reçu - Recibió un mensaje de texto - Hai ricevuto un messaggio di testo - Otrzymał wiadomość tekstową - Recebeu uma mensagem de texto - Получено текстовое сообщение - Erhielt eine Textnachricht - 收到短信 - - - 911 Dispatch Center - 911 Dispatch Center - 911 Dispatch Centre - 911 Centro de Despacho - 911 Centro Richieste - 911 Dispatch Center - 911 Centro de Despacho - 911 диспетчерский центр - 110 Dispatch Zentrum - 911调度中心 - - - Admin Dispatch Center - Admin Dispatch Center - Message Administrateur - Centro de Despacho de Administradores - Admin centro di spedizione - Administrator Dispatch Center - Administrador Centro de Despacho - Администратор диспетчерский центр - Admin Verteilzentrum - 管理调度中心 - - - Admin Message - - - - Admin Nachricht - - Message Admin - - - 管理员信息 - - - - - Civ Plane - - Avion civil - - - - - - Zivilflugzeug - 民用飞机 - - - Police HQ - - QG de Police - - - - - - Polizei HQ - 警察总部 - - - Police Store - - Magasin de la police - - - - - - Polizei Ausrüstung - 警察商店 - - - Police Car - - Concessionnaire de police - - - - - - Dienstfahrzeuge - 警车 - - - Police Heli - - Héliport de police - - - - - - Polizei Helikopter - 警用直升机 - - - Police Boat - - Vendeur de bateaux de police - - - - - - Polizei Boote - 警察船舶 - - - Rebel Car - - Concessionnaire rebelle - - - - - - Rebellen Fahrzeuge - 叛军载具 - - - Rebel Heli - - Héliport rebelle - - - - - - Rebellen Helikopter - 叛军直升机 - - - Police HQ - - QG de Police - - - - - - Polizei HQ - 警察总部 - - - - - arrested %1 - zadržen %1 - a arrêté %1 - arrestó a %1 - - - prendeu %1 - арестовано %1 - hat %1 verhaftet - 逮捕 %1 - - - %1 - %2 arrested %3 - %1 - %2 %3 zatčen - %1 - %2 a arrêté %3 - %1 - %2 arrestó a %3 - - - %1 - %2 prendeu %3 - %1 - %2 %3 арестовано - %1 - %2 hat %3 verhaftet. - %1 - %2 逮捕 %3 - - - picked up %1 %2 - vyzvednout %1 %2 - a ramassé %1 %2 - recogió %1 %2 - - - pegou %1 %2 - поднял %1 %2 - hat $%1 $%2 aufgehoben. - 拿起 %1 %2 - - - %1 - %2 picked up %3 %4 - %1 - %2 vyzvednout%3 %4 - %1 - %2 a ramassé %3 %4 - %1 - %2 recogió %3 %4 - - - %1 - %2 pegou %3 %4 - взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 - %1 - %2 hat %3 %4 aufgehoben. - %1 - %2 捡起 %3 %4 - - - picked up $%1 from the ground. Bank Balance: $%2 On Hand Balance: $%3 - zvedl $%1 ze země. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 - a récupéré $%1 par terre. Argent en banque : $%2 - Cash : $%3 - recogió $%1 del suelo. Saldo Bancario: $%2 Saldo en Efectivo: $%3 - - - pegou R$%1 do chão. Quantia no Banco: R$%2 Quantia na Mão: R$%3 - взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 - hat $%1 vom Boden aufgehoben. Bankkonto: $%2 Bargeld: $%3 - 从地上捡起 $%1。银行存款余额:$%2 手上余额:$%3 - - - %1 - %2 picked up $%3 from the ground. Bank Balance: $%4 On Hand Balance $%5 - %1 - %2 vyzvednout $%3 ze země. Banka Zůstatek: $%4 po ruce Balance $%5 - %1 - %2 a récupéré $%3 par terre. Argent en banque : $%4 Cash : $%5 - %1 - %2 recogió $%3 del suelo. Saldo Bancario: $%4 Saldo en Efectivo: $%5 - - - %1 - %2 pegou R$%3 do chão. Quantia no Banco: R$%4 Quantia na mão: R$%5 - %1 - %2 взял $%3 от земли. Банковский баланс: $%4 На Hand Баланс $%5 - %1 - %2 hat $%3 vom Boden aufgehoben. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 从地上捡起 $%3。银行存款余额:$%4 手上余额 $%5 - - - robbed $%1 from %2. Bank Balance: $%3 On Hand Balance: $%4 - oloupen $%1 z %2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 - a volé $%1 de %2. Argent en banque : $%4 Cash : $%4 - robó $%1 de $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 - - - roubou R$%1 de %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 - ограбил $%1 из %2. Банковский баланс: $%3 на руку Баланс: $%4 - hat $%1 von $%2 geraubt. Bankkonto: $%3 Bargeld: $%4 - 从 %2 抢劫 $%1。银行存款余额:$%3 手上余额:$%4 - - - %1 - %2 robbed $%3 from %4. Bank Balance: $%5 On Hand Balance: $%6 - %1 - %2 okraden $%3 z %4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 - %1 - %2 a volé $%3 de %4. Argent en banque : $%5. Cash : $%6 - %1 - %2 robó $%3 de $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 - - - %1 - %2 roubou R$%3 de %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 - %1 - %2 ограбил $%3 от %4. Банковский баланс: $%5 на руку Баланс: $%6 - %1 - %2 hat $%3 von %4 geraubt. Bankkonto: $%5 Bargeld: $%6 - %1 - %2 抢走了%4 $%3。银行存款余额:$%5 手上余额:$%6 - - - created a gang named: %1 for $%2 - Vytvořili gang s názvem: %1 za $%2 - a créé un gang nommé : %1 pour $%2 - creó una pandilla llamada: %1 por $%2 - - - criou uma gangue chamada: %1 por R$%2 - создали банду под названием: %1 за $%2 - hat eine Gang mit dem Namen: $1 für $%2 erstellt. - 创建一个名为:%1 的帮派 花费 $%2 - - - %1 - %2 created a gang named: %3 for $%4 - %1 - %2 vytvořili gang s názvem: %3 za $%4 - %1 - %2 a créé un gang nommé : %3 pour $%4 - %1 - %2 creó una pandilla llamada: %3 por $%4 - - - %1 - %2 criou uma gangue chamada: %3 por R$%4 - %1 - %2 создали банду под названием: %3 за $%4 - %1 - %2 hat eine Gang mit dem Namen: %3 für $%4 erstellt. - %1 - %2 创建一个名为:%3 的帮派 花费 $%4 - - - bought a house for $%1. Bank Balance: $%2 On Hand Cash: $%3 - koupil dům za $%1. Banka Zůstatek: $%2 On Hand Cash: $%3 - a acheté une maison pour $%1. Argent en banque : $%2 Cash : $%3 - compró una casa por $%1. Saldo Bancario: $%2 Saldo en Efectivo: $%3 - - - comprou uma casa por R$%1. Quantia no Banco: R$%2 Quantia na Mão: R$%3 - купил дом за $%1. Банковский баланс: $%2 на руках наличные деньги: $%3 - hat sich ein Haus für $%1 gekauft. Bankkonto: $%2 Bargeld: $%3 - 买了一所房子花费 $%。 银行存款余额: $%2 手头现金: $%3 - - - %1 - %2 bought a house for $%3. Bank Balance: $%4 On Hand Cash: $%5 - %1 - %2 koupil dům za $%3. Banka Zůstatek: $%4 On Hand Cash: $%5 - %1 - %2 a acheté une maison pour $%3. Argent en banque : $%4 Cash : $%5 - %1 - %2 compró una casa por $%3. Saldo Bancario: $%4 Saldo en Efectivo: $%5 - - - %1 - %2 comprou uma casa por R$%3. Quantia no Banco: R$%4 Quantia na Mão: R$%5 - %1 - %2 купил дом за $%3. Банковский баланс: $%4 на руках наличные деньги: $%5 - %1 - %2 hat sich ein Haus für $%3 gekauft. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 买了一所房子花费 $%3。银行存款余额:$%4 手头现金:$%5 - - - sold a house for $%1. Bank Balance: $%2 - prodal dům za $%1. Banka Zůstatek: $%2 - a vendu une maison pour $%1. Argent en banque : $%2 - vendió una casa por $%1. Saldo Bancario: $%2 - - - vendeu uma casa por R$%1. Quantia no Banco: R$%2 - продал дом за $%1. Банковский баланс: $%2 - hat sein Haus für $%1 verkauft. Bankkonto: $%2 - 卖掉房子得到 $%1。银行存款余额:$%2 - - - %1 - %2 sold a house for $%3. Bank Balance: $%4 - %1 - %2 prodal dům za $%3. Banka Zůstatek: $%4 - %1 - %2 a vendu une maison pour $%3. Argent en banque : $%4 - %1 - %2 vendió una casa por $%3. Saldo Bancario: $%4 - - - %1 - %2 vendeu uma casa por R$%3. Quantia no Banco: R$%4 - %1 - %2 продал дом за $%3. Банковский баланс: $%4 - %1 - %2 hat sich ein Haus für $%3 verkauft. Bankkonto: $%4 - %1 - %2 卖掉房子得到 $%3。银行存款余额: $%4 - - - chopped vehicle %1 for $%2 On Hand Cash(pre-chop): $%3 - nasekané vozidlo %1 nebo $%2 na ruce hotovosti (pre-CHOP): $%3 - a mis en pièces le véhicule %1 pour $%2. Cash (avant la vente) : $%3 - vendió el vehiculo %1 en el desguace por $%2. Saldo en Efectivo(antes de la venta): $%3 - - - desmanchou um %1 por R$%2 Quantia na Mão (antes do desmanche): R$%3 - нарезанного машина %1 или $%2 на руках Cash (предварительно отбивной): $%3 - hat das Fahrzeug %1 für $%2 beim Schrotthändler verschrottet. Bargeld(vor Schrott): $%3 - 出售盗窃到的载具 %1 赚取 $%2 手头现金(预付):$%3 - - - %1 - %2 chopped vehicle %3 for $%4 On Hand Cash(pre-chop): $%5 - %1 - %2 nasekané vozidla %3 za $%4 po ruce hotovosti (před-kotleta): $%5 - %1 - %2 a revendu le véhicule %3 pour $%4. Cash (avant la vente) : $%5 - %1 - %2 vendió el vehiculo %3 en el desguace por $%4. Saldo en Efectivo(antes de la venta): $%5 - - - %1 - %2 desmanchou um %3 por R$%4 Quantia na Mão(antes do desmanche): R$%5 - %1 - %2 нарезанной автомобиля %3 за $%4 на руку Cash (предварительно отбивной): $%5 - %1 - %2 hat das Fahrzeug %3 für $%4 beim Schrotthändler verschrottet. Bargeld(vor Schrott): $%6 - %1 - %2 出售盗窃到的载具 %3 赚取 $%4 手头现金(预付):$%5 - - - bought vehicle %1 for $%2. On Hand Cash: $%3 Bank Balance: $%4 - koupil vozidla %1 nebo $%2. On Hand Cash: $%3 bankovní konto: $%4 - a acheté le véhicule %1 pour $%2. Cash : $%3 Argent en banque : $%4 - compró el vehiculo %1 por $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 - - - comprou um %1 por R$%2. Quantia na Mão: R$%3 Quantia no Banco: R$%4 - купил автомобиль %1 или $%2. На Hand Cash: $%3 банка Баланс: $%4 - hat sich das Fahrzeug %1 für $%2 gekauft. Bargeld: $%3 Bankkonto: $%4 - 购买载具 %1 花费 $%2。 手头现金:$%3 银行存款余额:$%4 - - - %1 - %2 bought vehicle %3 for $%4. On Hand Cash: $%5 Bank Balance $%6 - %1 - %2 koupilo vozidla %3 za $%4. On Hand Cash: $%5 bankovní konto $%6 - %1 - %2 a acheté le véhicule %3 pour $%4. Cash $%5 Argent en banque : $%6 - %1 - %2 compró el vehiculo %3 por $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 - - - %1 - %2 comprou um %3 por R$%4. Quantia na Mão: R$%5 Quantia no Banco: R$%6 - %1 - %2 купил автомобиль за $%3 %4. На Hand наличных: $%5 баланса банка $%6 - %1 - %2 hat sich das Fahrzeug %3 für $%4 gekauft. Bargeld: $%5 Bankkonto: $%6 - %1 - %2 购买载具 %3 花费 $%4。 手头现金:$%5 银行存款余额 $%6 - - - sold vehicle %1 for $%2. Bank Balance: $%3 On Hand Balance: $%4 - prodával vozidla %1 pro $%2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 - a vendu le véhicule %1 pour $%2. Argent en banque : $%3 Cash : $%4 - vendió el vehiculo %1 por $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 - - - vendeu um %1 por R$%2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 - продается автомобиль %1 за $%2. Банковский баланс: $%3 на руку Баланс: $%4 - hat das Fahrzeug %1 für $%2 verkauft. Bankkonto: $%3 Bargeld: $%4 - 出售载具 %1 获得 $%2。 银行存款余额:$%3 手上现金:$%4 - - - %1 - %2 sold vehicle %3 for $%4. Bank Balance: $%5 On Hand Balance: $%6 - %1 - %2 prodával vozidla %3 za $%4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 - %1 - %2 a vendu le véhicule %3 pour $%4. Argent en banque : $%5 Cash : $%6 - %1 - %2 vendió el vehiculo %3 por $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 - - - %1 - %2 vendeu um %3 por R$%4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 - %1 - %2 продал автомобиль за $%3 %4. Банковский баланс: $%5 на руку Баланс: $%6 - %1 - %2 hat das Fahrzeug %3 für %4 verkauft. Bankkonto: $%5 Bargeld: $%6 - %1 - %2 出售载具 %3 获得 $%4。银行存款余额:$%5 手上现金:$%6 - - - withdrew $%1 from their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 - stáhl $%1 z jejich gangu banky. Gang bankovní konto: $%2 bankovní konto: $%3 po zralé úvaze rukou: $%4 - a retiré $%1 du compte bancaire du Gang. Solde bancaire du Gang : $%2 Argent en banque(perso) : $%3 Cash : $%4 - sacó $%1 de la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%2 Saldo Bancario: $%3 Saldo en Efectivo: $%4 - - - sacou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 - снял $%1 от их банды банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 - hat $%1 vom Gangkonto abgehoben. Gangkonto: $%2 Bankkonto: $%3 Bargeld: $%4 - 从他们的帮派银行账户取出 $%1。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 - - - %1 - %2 withdrew $%3 from their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 - %1 - %2 stáhl $%3 z jejich gangu banky. Gang bankovní konto: $%4 bankovní konto: $%5 po zralé úvaze rukou: $%6 - %1 - %2 a retiré $%3 du compte bancaire du Gang. Solde bancaire du Gang : $%4 Argent en banque(perso) : $%5 Cash : $%6 - %1 - %2 sacó $%3 de la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%4 Saldo Bancario: $%5 Saldo en Efectivo: $%6 - - - %1 - %2 sacou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 - %1 - %2 отозвала $%3 из их банды банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 - %1 - %2 hat $%3 vom Bankkonto abgehoben. Gangkonto: $%4 Bankkonto: $%5 Bargeld: $%6 - %1 - %2 从他们的帮派银行账户取出 $%3。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 - - - deposited $%1 into their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 - uložen $%1 do svého gangu banky. Gang bankovní konto: $%2 bankovní konto: $%3 po zralé úvaze rukou: $%4 - a déposé $%1 sur compte bancaire du Gang. Solde bancaire du Gang : $%2 Argent en banque(perso) : $%3 Cash : $%4 - depositó $%1 a la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%2 Saldo Bancario: $%3 Saldo en Efectivo: $%4 - - - depositou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 - депозит в размере $%1 в их банде банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 - hat $%1 auf sein Gangkonto eingezahlt. Gangkonto: $%2 Bankkonto: $%3 Bargeld: $%4 - 将 $%1 存进他们的帮派银行账户。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 - - - %1 - %2 deposited $%3 into their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 - %1 - %2 uloženy $%3 do jejich gangu banky. Gang bankovní konto: $%4 bankovní konto: $%5 po zralé úvaze rukou: $%6 - %1 - %2 a déposé $%3 sur compte bancaire du Gang. Solde bancaire du Gang : $%4 Argent en banque(perso) : $%5 Cash : $%6 - %1 - %2 depositó $%3 a la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%4 Saldo Bancario: $%5 Saldo en Efectivo: $%6 - - - %1 - %2 depositou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 - %1 - %2 депозит в размере $%3 в их банде банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 - %1 - %2 hat $%3 auf sein Gangkonto überwiesen. Gangkonto: $%4 Bankkonto: $%5 Bargeld: $%6 - %1 - %2 将 $%3 存进他们的帮派银行账户。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 - - - withdrew $%1 from their bank. Bank Balance: $%2 On Hand Balance: $%3 - stáhl $%1 z jejich banky. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 - a retiré $%1 de sa banque. Argent en banque : $%2 Cash : $%3 - sacó $%1 de su cuenta de banco. Saldo Bancario: $%2 Saldo en Efectivo: $%3 - - - sacou R$%1 do seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 - снял $%1 от своего банка. Банковский баланс: $%2 на руку Баланс: $%3 - hat $%1 von seinem Bankkonto abgehoben. Bankkonto: $%2 Bargeld: $%3 - 从他们的帮派银行账户取出 $%1。银行存款余额:$%2 手上现金:$%3 - - - %1 - %2 withdrew $%3 from their bank. Bank Balance: $%4 On Hand Balance: $%5 - %1 - %2 stáhl $%3 od své banky. Banka Zůstatek: $%4 po zralé úvaze rukou: $%5 - %1 - %2 a retiré $%3 de sa banque. Argent en banque : $%4 Cash : $%5 - %1 - %2 sacó $%3 de su cuenta de banco. Saldo Bancario: $%4 Saldo en Efectivo: $%5 - - - %1 - %2 sacou R$%3 do seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 - %1 - %2 отозвала $%3 из своего банка. Банковский баланс: $%4 на руку Баланс: $%5 - %1 - %2 hat $%3 von seinem Bankkonto abgehoben. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 从他们银行账户取出 $%3。银行存款余额:$%4 手上现金:$%5 - - - transferred $%1 to %2. Bank Balance: $%3 On Hand Balance: $%4 - přestoupil $%1 do %2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 - a transféré $%1 à %2. Argent en banque : $%3 Cash : $%4 - transferió $%1 a $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 - - - transferiu R$%1 para %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 - перечислил $%1 %2. Банковский баланс: $%3 на руку Баланс: $%4 - hat %2 $%1 überwiesen. Bankkonto: $%3 Bargeld: $%4 - 转帐 $%1 给 %2。银行存款余额:$%3 手上现金:$%4 - - - %1 - %2 transferred $%3 to %4. Bank Balance: $%5 On Hand Balance: $%6 - %1 - %2 převedena $%3 až %4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 - %1 - %2 a transféré $%3 à %4. Argent en banque : $%5 Cash : $%6 - %1 - %2 transferió $%3 a $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 - - - %1 - %2 transferiu R$%3 para %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 - %1 -%2 перевели $%3 до %4. Банковский баланс: $%5 на руку Баланс: $%6 - %1 - %2 hat %4 $%3 überwiesen. Bankkonto: $%5 Bargeld: $%6 - %1 - %2 转帐 $%3 给 %4。银行存款余额:$%5 手上现金:$%6 - - - deposited $%1 into their bank. Bank Balance: $%2 On Hand Balance: $%3 - uložen $%1 do své banky. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 - a déposé $%1 dans son compte. Argent en banque $%2 Cash : $%3 - depositó $%1 a su cuenta de banco. Saldo Bancario: $%2 Saldo en Efectivo: $%3 - - - depositou R$%1 no seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 - депозит в размере $%1 в их банке. Банковский баланс: $%2 на руку Баланс: $%3 - hat $%1 auf sein Bankkonto eingezahlt. Bankkonto: $%2 Bargeld: $%3 - 将 $%1 存进他们的银行账户。银行存款余额:$%2 手上现金:$%3 - - - %1 - %2 deposited $%3 into their bank. Bank Balance: $%4 On Hand Balance: $%5 - %1 - %2 uloženy $%3 do své banky. Banka Zůstatek: $%4 po zralé úvaze rukou: $%5 - %1 - %2 a déposé $%3 dans son compte. Argent en banque : $%4 Cash : $%5 - %1 - %2 depositó $%3 a su cuenta de banco. Saldo Bancario: $%4 Saldo en Efectivo: $%5 - - - %1 - %2 depositou R$%3 no seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 - %1 - %2 депозит в размере $%3 в свой банк. Банковский баланс: $%4 на руку Баланс: $%5 - %1 - %2 hat $%3 auf sein Bankkonto eingezahlt. Bankkonto: $%4 Bargeld: $%5 - %1 - %2 将 $%3 存进他们的银行账户。银行存款余额:$%4 手上现金:$%5 - - - + + + + + Setting up client, please wait... + + Configurando cliente. Por favor espere... + + Einrichten des Clients, bitte warten... + Caricamento dati, attendi... + Configuration du client. Patientez s'il vous plait... + Configurando o cliente. Por favor, aguarde... + + 配置客户端,请稍等... + + + Waiting for the server to be ready... + + Esperando a que el servidor esté listo... + + Warten, bis der Server bereit ist... + Caricamento Server, attendi... + En attente du chargement du serveur... + Esperando o servidor estar pronto... + + 等待服务器准备就绪... + + + extDB failed to load, please contact an administrator. + + extDB no se pudo cargar, por favor contacte a un administrador. + + extDB konnte nicht geladen werden, wenden Sie sich bitte an einen Administrator. + C'è stato un'errore con extDB, perfavore contatta un amministratore. + extDB ne s'est pas lancé correctement. Veuillez contacter un administrateur. + O extDB falhou ao carregar, por favor, contacte um administrador. + + 数据加载失败,请联系管理员。 + + + Finishing client setup procedure... + + Finalizando configuración del cliente... + + Finalisation de la procédure de configuration du client... + Fertigstellen der Client-Einrichtungs-Prozedur... + Completando procedura d'inizializzazione + Terminando o processo de configuração do cliente... + + 完成客户端设置程序... + + + + + Bruce's Outback Outfits + Bruceovy Outback Oblečení + Vêtements de Bruce + Tienda de Ropa + + Loja de Roupas + Sklep odzieżowy + Emporio di Bruce + Bruce's Outback Outfits + 服装商店 + + + Altis Police Department Shop + Altis policejní oddělení Shop + Vêtements policiers + Tienda del Departamento de Policía + + Loja de Roupas Policiais + Sklep Policyjny + Dipartimento della Polizia di Altis + Altis Polizei Department Geschäft + 警局商店 + + + Mohammed's Jihadi Shop + Mohamedův džihád Shop + Vêtements rebelle + Tienda Jihadi de Mohamed + Negozio della Jihad di Mohammed + + Loja de Roupas Rebeldes + Sklep samobójców AKBAR + Mohammed's Ausrüstungen + 叛军商店 + + + Steve's Diving Shop + Steve je potápění obchod + Vêtements de plongée de Steve + Tienda de Buceo + Negozio Sub di Steve + + Steve's Taucherausrüstung + Loja de equipamentos para Mergulho + Sklep dla nurków + 潜水商店 + + + Billy Joe's Clothing + Billy Joe oblečení + Tienda de Ropa de Billy Joe + + Billy Joe's Bekleidung + Emporio di Billy + Vêtements de tir + Loja de Roupa do Billy Joe + Billy Joe Odzież + 服装商店 + + + Billy Joe's Firearms + Billy Joe Střelné zbraně + Tienda de Armas de Billy Joe + + Billy Joe's Schusswaffen + Armeria di Billy Joe + Armurerie de Billy Joe + Loja de Armas do Billy Joe + Broń palna Billy Joe + 武器商店 + + + Bobby's Kart-Racing Outfits + Billy Joe Střelné zbraně + Vêtements de kart + Tienda de Trajes de Carreras + Vestiario da Pilota + + Bobby's Gokart Rennbekleidung + Loja de equipamentos para Kart + Sklep Kartingowy + 卡丁车赛车服 + + + Altis Market + Altis Market + Mercado de Altis + + Altis Markt + Mercato + Marché d'Altis + Mercado + Market Altis + 市场 + + + Rebel Market + Rebel Market + Mercado Rebelde + + Rebellen Markt + Mercato Ribelle + Marché Rebelle + Mercado Rebelde + Market Rebeliantów + 叛军市场 + + + Gang Market + gang Market + Mercado Pandillero + + Gang Markt + Mercato Gang + Marché de Gang + Mercado da Gangue + Market Gangu + 帮派市场 + + + Gang Clothing + gang Oblečení + Ropa Pandillera + + Gang Kleidung + Gang Abbigliamento + Vêtements de Gang + Roupa Gangue + Gang Odzież + 帮派服装 + + + Wong's Food Cart + Wongova Food košík + Kiosko de Wong + + Wong's Spezialitäten + Alimentari + Restaurant de Wong + Praça de Alimentação + Przysmaki Wonga + 食品商 + + + Gyro's Coffee + gyros Coffee + Cafetería de Gyro + + Gyro's Café + Caffè + Café de Gyro + Café do Gyro + Kawiarnia + 咖啡店 + + + Tonic's Narcotics + Tonic je narkotika + Narcotraficante + + Drogendealer + Spacciatore + Dealeur de Drogue + Traficante + Sprzedawca 'Trawy' + 非法药品贸易商 + + + Oil Trader + olej Trader + Comerciante de Petroleo + + Ölhändler + Vendita Petrolio + Acheteur de Pétrole + Comprador de Petróleo + Skup Ropy + 石油贸易商 + + + Local Fish Market + Místní Fish Market + Mercado Local del Pescado + + Fischmarkt + Pescivendolo + Marché de Poissons + Mercado de Peixes + Sklep Rybny + 海产品市场 + + + Glass Trader + sklo Trader + Comerciante de Vidrio + + Glashändler + Vendita Vetro + Acheteur de Verre + Comprador de Vidro + Skup Szkła + 玻璃贸易商 + + + Altis Industrial Trader + Altis Industrial Trader + Comerciante Industrial + + Altis Industriehandel + Vendita materiali industriali + Acheteur de minerais + Comprador de Material Indústrial + Skup materiałów przemysłowych + 铁/铜贸易 + + + APD Item Shop + APD Item Shop + Equipamiento Policial + + APD Ausrüstung + Negozio Polizia + Equipement policier + Equipamentos da Polícia + Zbrojownia Policji + 警察物品店 + + + Juan's Cement Laying + Juanovo Cement Pokládka + Fabrica de Cemento de Juan + + Juan's Zementleger + Vendita Cemento + Acheteur de Ciment + Comprador de Cimento + Wytwórnia cementu + 水泥贸易商 + + + Cash 4 Gold + Peněžní 4 Gold + Comprador de Oro + + Goldhändler + Vendita Oro + Acheteur d'Or + Comprador de Ouro + Skup złota + 黄金贸易商 + + + Diamond Dealer + Diamond Dealer + Comerciante de Diamantes + + Juwelier + Gioielleria + Acheteur de Diamant + Comprador de Diamante + Skup Diamentów + 钻石贸易商 + + + Salt Trader + sůl Trader + Comerciante de Sal + + Salzhändler + Vendita Sale + Acheteur de Sel + Comprador de Sal + Skup soli + 食盐贸易商 + + + Fuel Station Coffee + Palivo Coffee Station + Café de la Station service + Cafeteria de Gasolinera + Stazione di Servizio + + Tankstellen Café + Loja de Conveniência + Caffe OLLEN + 加油站咖啡店 + + + + + Close + Zavřít + Cerrar + + Schließen + Fermer + Chiudi + Fechar + Zamknij + 关闭 + + + Sell + Prodat + Vender + + Verkaufen + Vendre + Vendi + Vender + Sprzedaj + 出售 + + + Buy + Koupit + Comprar + + Kaufen + Acheter + Compra + Comprar + Kup + 购买 + + + Magazines + časopisy + Chargeurs + Cargadores + Caricatori + Magazyny + + Munições + Magazine + 弹药 + + + Accessories + Příslušenství + Accessoires + Accesorios + Accessori + Akcesoria + + Acessórios + Zubehör + 附件 + + + Weapons + Zbraně + Armes + Armas + Armi + Broń + + Armas + Bewaffnung + 武器 + + + Give + Dát + Dar + + Geben + Donner + Dai + Dar + Daj + 给予 + + + Use + Použití + Usar + + Benutzen + Utiliser + Usa + Usar + Użyj + 使用 + + + Remove + Odstranit + Remover + + Entfernen + Supprimer + Rimuovi + Remover + Usuń + 删除 + + + Settings + Nastavení + Configuración + + Einstellungen + Paramètres + Impostazioni + Configurar + Opcje + 设置 + + + Rent + Nájemné + Rentar + + Mieten + Louer + Affitta + Alugar + Wynajmij + 租赁 + + + Retrieve + získat + Recuperar + + Ausparken + Récupérer + Ritira + Recuperar + Odzyskaj + 取回 + + + You did not select anything. + Nevybrali jste nic. + No seleccionastes algo. + + Du hast nichts ausgewählt. + Vous n'avez rien sélectionné. + Non hai selezionato nulla. + Você não selecionou nada. + Niczego nie zaznaczyłeś. + 你没有选择任何东西。 + + + Yes + Ano + Si + + Ja + Oui + Si + Sim + Tak + + + + No + Ne + No + + Nein + Non + No + Não + Nie + + + + Cancel + Zrušit + Cancelar + + Abbrechen + Annuler + Annulla + Cancelar + Anuluj + 取消 + + + + + Admin Menu + Nabídka admin + Menu de Admin + + Admin Menü + Menu Admin + Menu Admin + Menu Admin + Admin Menu + 管理菜单 + + + Put the amount you want to compensate: + Vložte částku, kterou chcete kompenzovat: + Entrez le montant à rembourser + Pon la cantidad que quieres compensar: + Inserire l'importo da rimborsare: + + Trage den Wert für die Entschädigung ein: + Coloque a quantidade que você quer compensar: + Wprowadź wartość rekompensaty + 输入赔偿金额: + + + Get ID + Získat ID + Ver ID + + ID abfragen + Obtenir ID + Vedi ID + Obter ID + ID gracza + 获取 ID + + + Spectate + spectate + Observar + Osserva + + Zuschauen + Regarder + Observar + Obserwuj + 观看 + + + Teleport + Teleport + Teleport + Teleport + + Teleport + Téléporter + Teleportar + Teleport + 传送 + + + TP Here + TP Zde + TP Aquí + TP Qui + + TP Hier + TP Ici + TP Aqui + Do Mnie + 传送到这儿 + + + You cannot teleport the player here because they are inside of a vehicle. + Nelze teleportovat přehrávač zde proto, že jsou uvnitř vozidla. + Vous ne pouvez pas TP le joueur ici, car il est actuellement dans un véhicule. + No puedes teletransportar a este jugador aquí, porque está dentro de un vehículo. + Il giocatore non può essere teletrasportato perché in un veicolo. + Nie można teleportować gracza tutaj, ponieważ są one wewnątrz pojazdu. + Você não pode se teletransportar o jogador aqui, porque ele esta dentro de um veículo. + Вы не можете телепортировать игрока здесь, потому что они находятся внутри автомобиля. + Du kannst den Spieler nicht hierher teleportieren, weil dieser im Inneren eines Fahrzeugs sitzt. + 你不能将玩家传送到这里,因为他们在车内。 + + + Debug + Ladit + Debug + Debug + + Debug + Debug + Depuração + Debug + 清除BUG + + + Comp + Comp + Comp + Comp + + Entschädigen + Compenser + Compensar + Comp + 赔偿金 + + + GodMode + Božský mód + Modo Dios + GodMode + + Gott-Mod + God + Modo Deus + GodMode + 上帝模式 + + + Freeze + Zmrazit + Congelar + Congelare + + Einfrieren + Freeze + Congelar + Zamroź + 冻结 + + + Markers + markery + Marcadores + Indicatori + + Spieler Markierungen + Marqueurs + Marcações + Markery + 标记 + + + + + Querying... + Dotazování ... + Buscando... + + Abfrage läuft... + Interrogation... + Ricerca... + Pesquisando... + Wyszukuję... + 查询... + + + Searching Database for vehicles... + Vyhledávání databáze pro vozidla ... + Buscando Vehiculo en la Base de Datos + + Durchsuche Garage nach Fahrzeugen... + Recherche des véhicules dans le garage... + Ricerca di veicoli nel Database... + Buscando por veículo na base de dados... + Szukam pojazdu w bazie danych... + 从数据库中搜索载具... + + + You are already querying a player. + Již jste dotazování přehrávač. + Ya estan buscando a un jugador. + + Du fragst bereits einen Spieler ab. + Vous êtes déjà en train d'interroger ce joueur. + Stai già ispezionando un giocatore. + Você já está buscando por um jogador. + Przeszukujesz gracza + 你已经在查询玩家了。 + + + Player no longer exists? + Hráč neexistuje? + El jugador ya no existe? + + Spieler existiert nicht mehr? + Le joueur ne semble pas exister. + Il giocatore non esiste più + Jogador não existe mais? + Gracz już nie istnieje? + 玩家不存在? + + + You are about to give yourself $%1 to compensate to another player <br/><br/>You must give this cash to the person you are compensating manually. + Chystáte se dát si $%1 kompenzovat jinému hráči <br/><br/> Musíte dát tuto hotovost na osoby, které jsou kompenzačním ručně. + Estas a punto de darte $%1 para compensar a otro jugador<br/><br/> Debes darle el dinero a la persona manualmente. + Stai per donarti €%1 per rimborsare un altro giocatore <br/><br/> Dovrai donare il denaro manualmente. + + Du bist dabei dir selbst $%1 zu geben, um einen anderen Spieler zu entschädigen.<br/><br/>Gib das Geld dann an den Spieler weiter. + Vous êtes sur le point de vous donner $%1 pour rembourser un autre joueur <br/><br/> Merci de le lui donner manuellement. + Você está prestes a dar para você mesmo R$%1 para compensar outro jogador <br/><br/>Você deve dar este dinheiro para a pessoa que você está compensando manualmente. + Właśnie przydzieliłeś sobie $%1 w celu rekompensaty graczowi <br/><br/>Musisz przekazać te środki osobiście osobie poszkodowanej. + 你将获得赔偿金 $%1,小心别输入错误了 <br/><br/>你只能手动操作把这笔钱给玩家。 + + + You have added $%1 to your account. + Přidali jste $%1 se ke svému účtu. + Has agregado $%1 a tu cuenta. + €%1 ti sono stati accreditati. + + Dir wurden $%1 auf deinem Bankkonto gutgeschrieben. + Vous avez ajouté $%1 à votre compte + Você adicionou R$%1 em sua conta. + Przekazałeś na konto $%1 + 你已将 $%1 添加到你的账户上 。 + + + You can not go above $999,999 + Nemůžete jít nad $ 999999 + No te puedes dar más de $999,999 + Non puoi superare i €999.999 + + Maximaler Wert $999,999! + Vous ne pouvez pas aller au-dessus $999,999 ! + Você não pode ir além de $999,999! + Nie można obracać kwotami wyższymi niż $999,999! + 你不能处理超过 $999,999 的资金 + + + Please type in the amount to compensate. + Prosím, zadejte částku, která má kompenzovat. + Por favor pon la cantidad a compensar. + Si prega di inserire l'importo da rimborsare. + + Bitte Entschädigungsbetrag eingeben. + S'il vous plaît entrez le montant pour compenser. + Por favor, insira a quantidade para compensar. + Wprowadź kwotę rekompensaty + 请输入赔偿金额。 + + + You have disabled %1's input. + Jste zakázali vstup %1 je. + Has deshabilitado los controles de %1 + Hai disattivato l'input di %1. + + Du hast %1 eingefroren. Er kann sich nicht mehr bewegen. + Vous avez désactivé les contrôles de %1. + Você desabilitou as entradas de %1. + Zablokowałeś grę gracza $%1 + 您被禁止 %1 秒输入。 + + + You have enabled %1's input. + Jste povolili vstup %1 je. + Has habilitado los controles de %1 + Hai riabilitato l'input di %1. + + Du hast %1 wieder aufgetaut. + Vous avez activé les contrôles de %1. + Você habilitou as entradas de %1. + Odblokowałeś grę gracza $%1 + 你被允许 %1 秒输入。 + + + You can't do that dumbass. + Můžete to udělat blbec. + No puedes hacer eso, pendejo + Impossibile. + + Das geht gerade nicht. + Vous ne pouvez pas le faire sur vous-même. + Você não pode fazer isso, idiota. + Tak nie można! + 你不可以这样做。 + + + Your Admin Level is not high enough. + Váš správce úroveň není dostatečně vysoká. + No tienes suficiente nivel de Admin. + Il tuo livello amministratore non soddisfa i requisiti. + + Dein Admin Level ist nicht hoch genug. + Votre niveau admin n'est pas suffisamment élevé. + Seu nível de Admin não é alto o bastante. + Nie masz wystarczających uprawnień, za niski poziom administracyjny + 您的管理等级不够高。 + + + Player Markers Disabled. + Hráč Markers pro invalidy. + Marqueurs désactivés + Marcadores de Jugadores Deshabilitados + Indicatori Giocatori Disabilitati. + + Spieler Markierungen deaktiviert. + Marcações dos jogadores desabilitada. + Markery 'OFF' graczy Wyłączone + 禁用玩家标记。 + + + Player Markers Enabled. + Hráč Markers Povoleno. + Marqueurs activés + Marcadores de Jugadores habilitados. + Indicatori Giocatori Abilitati. + + Spieler Markierungen aktiviert. + Marcações dos jogadores habilitada. + Markery 'ON' graczy Włączone + 启用玩家标记。 + + + God mode enabled + nesmrtelnost povolen + Mode Dieu activé + Modo Dios habilitado + Godmode abilitata + God mode włączony + Modo Deus ativado + Режим бога включен + Gott-Modus aktiviert. + 启用上帝模式 + + + God mode disabled + nesmrtelnost zakázán + Mode Dieu désactivé + Modo Dios deshabilitado + Godmode disabilitata + God mode wyłączony + Modo Deus desativado + Режим бога отключен + Gott-Modus deaktiviert. + 禁用上帝模式 + + + Action Cancelled + akce byla zrušena + Acción Cancelada + + Aktion abgebrochen. + Action annulée + Azione Annullata + Ação Cancelada + Anulowano akcję + 操作取消 + + + Commander/Tactical View Disabled + Commander/Tactical View Disabled + Commander/Tactical View Disabled + Commander/Tactical View Disabled + Commander/Vue tactique désactivée + Befehlshaber-Übersicht deaktiviert. + Commander/Tactical View Disabled + Commander/Tactical View Disabled + Commander/Tactical View Disabled + 指挥官/战术视图被禁用 + + + Hit spacebar to place the container. + Hit mezerníku na místo Kontejner. + Appuyez sur espace pour placer le conteneur. + Aprieta la barra de espacio para colocar el Contenedor. + Premi barra spaziatrice per posizionare il contenitore. + Hit spacji, aby umieścić pojemnik. + Pressione a barra de espaço para colocar. + Хит пробел, чтобы поместить контейнер. + Drücke die Leertaste, um den Container zu platzieren. + 按空格键放置物品。 + + + Placement of container has been aborted. + Placement of container has been aborted. + Placement of container has been aborted. + Placement of container has been aborted. + Placement of container has been aborted. + Placement of container has been aborted. + Placement of container has been aborted. + Placement of container has been aborted. + Die Platzierung des Containers wurde abgebrochen. + 物品放置已被中止. + + + Your faction is not allowed to chop vehicles! + Váš frakce není povoleno sekat vozidla! + Votre faction ne peut pas vendre les véhicules ! + Tu facción no tiene permitido usar esta tienda! + La tua fazione non può rubare veicoli! + Twoja frakcja nie może posiekać pojazdy! + + Sua facção não têm direito de usar essa loja + Deiner Fraktion ist es nicht erlaubt, Fahrzeuge bei dem Schrotthändler zu verkaufen! + 你的帮派不允许出售这载具! + + + A pickaxe is required + Je vyžadován krumpáč + Requieres un pico + + Hier benötigst du eine Spitzhacke! + Vous avez besoin d'une pioche. + Devi possedere un piccone! + A picareta é necessária + Wymagana jest kilof + 你需要一把镐 + + + You are restrained + Ty jsou omezeny + Estas retenido + + Wie willst du mit gefesselten Händen sammeln? + Vous êtes menotté. + Sei stato ammanettato + Você está algemado + Ty skrępowaniem + 你被限制 + + + You can't do this while you surrender + Můžete to udělat, když se vzdáš + No puedes hacer esto mientras te estas rindiendo + + Mit erhobenen Händen kannst du nichts sammeln! + Vous ne pouvez pas faire cela tant que vous avez les mains sur la tête. + Non puoi effettuare questa azione mentre tieni le mani in alto + Você não pode fazer isso enquanto você se entrega + Nie można tego zrobić, gdy się poddasz + 你投降时不能这么做 + + + You can't gather this resource with this vehicle! + Nemůžete shromáždit tento prostředek s tímto vozidlem! + No puedes recolectar este recurso con este vehiculo! + + Du kannst diese Ressource nicht mit diesem Fahrzeug abbauen! + Vous ne pouvez pas récolter cette ressource avec ce véhicule. + Non puoi raccogliere questa risorsa con questo veicolo ! + Voce não pode colher este recurso com este veiculo! + You can't gather this resource with this vehicle! + 你不能用这载具收集这个资源! + + + You have no business using this. + Nemáš podnikání pomocí tohoto. + Vous n'avez pas le niveau pour utiliser la console. + No tienes permiso de usar esto. + Non hai il permesso di farlo. + Nie masz działalność z wykorzystaniem tego produktu. + Você não tem nenhum negócio usando isto. + У вас нет бизнеса с помощью этого. + Du hast hier nichts verloren! + 您无权这样做。 + + + Admin %1 has opened the debug console. + Admin %1 otevřel ladění konzoli. + Administrateur %1 a ouvert la console de debug. + Administrador %1 ha abierto la consola de depuración. + Admin %1 ha aperto la console di debug. + Administrator %1 otworzył konsoli debugowania. + Administrador %1 abriu o console de depuração. + Администратор %1 открыл консоль отладки. + Admin %1 hat die Debug-Konsole geöffnet. + 管理员 %1 已打开调试控制台。 + + + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + You cannot drop keys to a vehicle which is locked and you are inside of. + Du kannst den Schlüssel nicht wegschmeißen, weil das Auto verschlossen ist und du drin sitzt. + 你不能把钥匙掉在一辆锁着的车里,你就在车里面。 + + + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + Emergency lights are not set for this vehicle. + 此车辆没有设置应急灯。 + + + + + Bank Account Management + Vedení bankovního účtu + Cuenta Bancaria + + Bankkonto verwalten + Gestion du Compte Bancaire + Gestione Bancaria + Conta Bancária + Bankomat Altis + 银行账户管理 + + + Withdraw + ustoupit + Retirar + + Abheben + Retirer + Preleva + Sacar + Wypłać + 取款 + + + Deposit + Vklad + Depositar + + Einzahlen + Déposer + Deposita + Depositar + Deopozyt + 存款 + + + Withdraw: Gang + Odstoupit: Gang + Retirer: Gang + Retirar: Pandilla + + Sacar: gangue + Ritira: Gang + Wycofaj: Gang + Abheben: Gang + 取款:帮派 + + + Deposit: Gang + Záloha: Gang + Déposer: Gang + Depositar: Pandilla + + Depositar: Gangue + Deposita: Gang + Depozyt: Gang + Einzahlen: Gang + 存款: 帮派 + + + Transfer + Převod + Transferir + + Überweisen + Transférer + Trasferisci + Transferir + Przelew + 转账 + + + You can't deposit more then $999,999 at a time + Nemůžete vložit více než 999.999 $ najednou + No puedes depositar mas de $999,999 a la vez + + Du kannst nicht mehr als $999,999 gleichzeitig einzahlen. + Vous ne pouvez pas déposer plus de $999,999. + Non puoi depositare più di €999,999 alla volta + Você não pode transferir mais de R$999.999 em uma transação + Możesz jednorazowo zdeponować nie więcej niż $999,999 + 您一次不能存入超过 $999,999 + + + The amount entered isn't a numeric value. + Uvedená částka není číselná hodnota. + No escribistes un valor numérico. + + Die eingegebene Zahl ist keine richtige Zahl. + La valeur entrée n'est pas un nombre. + Il valore inserito non è numerico. + O valor digitado não é um número. + Wprwadzona wartość nie jest liczbą + 输入的金额不是数值。 + + + You need to select someone to transfer to + Je třeba vybrat někoho převést na + Debes seleccionar a quien transferirle el dinero + + Du hast niemanden für die Überweisung ausgewählt. + Sélectionnez une personne pour le transfert. + Devi selezionare qualcuno a cui trasferire l'importo + Você tem que selecionar para quem deseja transferir + Musisz wybrać odbiorcę przelewu + 您需要选择某人来转账 + + + The player selected doesn't seem to exist? + Hráč vybraný Nezdá se, že neexistuje? + Le joueur sélectionné ne semble pas exister + El jugador que seleccionastes no existe? + + Der Spieler scheint nicht zu existieren? + Sembra che il giocatore selezionato non esista + O jogador selecionado parece não existir! + Wybrany gracz wydaje się nie występować w grze + 选定的玩家似乎不存在? + + + You can't transfer more then $999,999 + Nemůžete přenést více než 999.999 $ + No puedes transferir más de $999,999 + + Du kannst nicht mehr als $999,999 überweisen! + Vous ne pouvez pas transférer plus de $999,999. + Non puoi trasferire più di €999.000 alla volta + Você pode trasferir no máximo R$999.999. + Możesz jednorazowo przelać nie więcej niż $999,999 + 你转账不能超过 $999,999 + + + You don't have that much in your bank account! + Nemusíte to hodně na váš bankovní účet! + No tienes tanto dinero en tu cuenta de banco! + + Du hast nicht so viel Geld auf deinem Bankkonto! + Vous n'avez pas autant dans votre compte en banque ! + Non hai fondi sufficienti nel tuo conto in banca! + Você não tem todo esse dinhero na sua conta bancária + Nie masz tyle środków na koncie! + 你的银行账户里没有那么多钱! + + + You don't have that much in your gang bank account! + Nemusíte to hodně ve svém gang bankovní účet! + No hay tanto dinero en la cuenta de tu pandilla! + Il conto della gang non ha abbastanza denaro! + Nie ma tego dużo na koncie bankowym gang! + + Vous n'avez pas autant sur le compte de votre gang ! + Você não tem todo esse dinhero na sua gangue! + Ihr habt nicht genügend Geld auf dem Gangkonto! + 你的帮派银行账户里没有那么多钱! + + + You do not have enough money in your bank account, to transfer $%1 you will need $%2 as a tax fee. + Nemáte dostatek peněz na váš bankovní účet, převést $%1 budete potřebovat $%2 jako daňový poplatek. + No tienes el dinero suficiente, para transferir $%1 necesitaras $%2 para pagar como cuota. + + Du hast nicht genug Geld auf deinem Bankkonto, es kostet $%2 um $%1 zu überweisen. + Vous n'avez pas assez d'argent dans votre compte bancaire, pour transférer $%1 vous devez payer $%2 de taxes. + Non hai fondi sufficienti nel tuo conto in banca, per trasferire €%1 necessiti di €%2 per pagare la tassa di trasferimento. + Você não tem dinheiro suficiente na sua conta bancária. Para trasferir R$%1 você irá pagar R$%2 de taxa + Nie masz wystarczająco dużo środków na końcie, do przelewu $%1 będziesz potrzebował jeszcze $%2 na opłatę + 你的银行账户里没有足够的钱, 要转账 $%1 你需要支付 $%2 作为手续费. + + + You have transfered $%1 to %2.\n\nA tax fee of $%3 was taken for the wire transfer. + Jste přenesli $%1 do %2. \n\nA daňový poplatek ve výši $%3 byla pořízena na bankovním převodem. + Has transferido $%1 a $%2 \n\nUna cuota de $%3 fue tomada de tu cuenta. + + Du hast $%1 an %2 überwiesen.\n\nEine Gebühr von $%3 wurde verrechnet. + Vous avez transféré $%1 à %2.\n\nA Une taxe de $%3 vous a été prélevée pendant le transfert. + Hai trasferito €%1 a %2.\n\nSono stati trattenuti €%3 di tassa per il trasferimento. + Você trasferiu R$%1 para %2.\n\nA taxa de trasferência foi de: R$%3. + Przelałeś $%1 do %2.\n\nA opłata $%3 pobrana przez WIRE TRANSFER + 你已转账 $%1 给 %2。\n\n手续费 $%3 已从你的账户扣除。 + + + %1 has wire transferred $%2 to you. + + %1 ha transferido $%2 a tu cuenta. + + %1 hat dir $%2 überwiesen. + %1 vous a fait un virement de $%2. + %1 ha effettuato un bonifico sul tuo conto di €%2 + %1 transferiu $%2 para a tua conta. + + %1 通过电汇将 $%2 转账给你。 + + + You can't withdraw more then $999,999 + Nemůžete zrušit více než 999.999 $ + No puedes retirar más de $999,999 + + Du kannst nicht mehr als $999,999 abheben. + Vous ne pouvez pas retirer plus de $999,999. + Non puoi prelevare più di €999.000 in una volta + Você pode sacar no máximo R$999.999 + Możesz jednorazowo pobrać maks $999,999 + 你不能取款大于 $999,999 + + + You can't withdraw less then $100 + Nemůžete odvolat méně než 100 $ + No puedes retirar menos de $100 + + Du kannst nicht weniger als $100 abheben. + Vous ne pouvez pas retirer moins de $100. + Non puoi prelevare meno di €100 + Você não pode sacar menos de $100. + Nie możesz pobrać mniej niż $100 + 你不能取款小于 $100 + + + You have withdrawn $%1 from your bank account + Jste staženy $%1 z vašeho bankovního účtu + Has retirado $%1 de tu cuenta bancaria + + Du hast $%1 von deinem Bankkonto abgehoben. + Vous avez retiré $%1 de votre compte en banque. + Hai prelevato €%1 dal tuo conto in banca + Você sacou R$%1 de sua conta bancária. + Pobrałeś z konta kwotę $%1 + 你已从你的银行账户取走 $%1 + + + You have withdrawn $%1 from your gang. + Jste staženy $%1 z naší bandy + Has retirado $%1 de tu pandilla + Hai ritirato €%1 dal nostro gruppo. + Masz %1 $ wycofane z naszego gangu. + + Vous avez retiré $%1 de votre gang. + Você sacou R$%1 da sua gangue + Du hast $%1 vom Gangkonto abgehoben. + 你已从你的帮派账户取走 $%1 . + + + Someone is already trying to withdraw from your gang. + Někdo se již snaží ustoupit od svého gangu. + Quelqu'un est déjà en train de retirer de l'argent de votre gang. + Alguien ya esta tratando de retirar dinero de tu pandilla. + Qualcuno sta già cercando di ritirare del denaro dal fondo gang. + Ktoś już próbował wycofać się ze swojego gangu. + + Alguém já está tentando sacar da sua gangue. + Jemand versucht bereits, Geld vom Gangkonto abzuheben. + 有人从你的帮派账户中取款. + + + You do not have that much cash on you. + Nemáte tolik peněz na vás. + No tienes tanto dinero contigo. + + Du hast nicht so viel Geld bei dir. + Vous n'avez pas autant d'argent sur vous. + Non hai abbastanza denaro con te. + Você não tem todo esse dinheiro. + Nie masz przy sobie tyle pieniędzy + 你身上没有那么多现金. + + + You have deposited $%1 into your bank account + Máte uloženy $%1 na váš bankovní účet + Has depositado $%1 en tu cuenta de banco. + + Du hast $%1 auf dein Bankkonto überwiesen. + Vous avez déposé $%1 dans votre compte en banque. + Hai despositato €%1 nel tuo conto bancario + Você depositou R$%1 na sua conta bancária + Zdeponowałeś na koncie bankowym $%1 + 你已将 $%1 存入到你的银行账户 + + + You have deposited $%1 into your gang's bank account. + Máte uloženy $%1 na bankovní účet svého gangu. + Has depositado $%1 en la cuenta de tu pandilla. + + Du hast $%1 auf das Gangkonto überwiesen. + Vous avez déposé $%1 sur le compte en banque de votre gang. + Hai despositato €%1 nei fondi della tua gang. + Você depositou R$%1 na conta da sua gangue. + Zdeponowałeś na koncie gangu kwotę $%1. + 你已将 $%1 存入到你的帮派账户. + + + Someone is already trying to deposit into your gang's bank account. + Někdo se již snaží vložit na bankovní účet svého gangu. + Quelqu'un est déjà en train de déposer dans le compte bancaire de votre gang. + Alguien ya esta tratando de depositar en la cuenta de banco de tu pandilla. + Qualcuno sta già cercando di depositare del denaro nel conto della Gang. + Ktoś jest już stara się o wpłatę na rachunek bankowy swojego gangu. + + Alguém já está tentando depositar na conta da sua gangue. + Jemand versucht bereits Geld auf das Gangkonto einzuzahlen. + 有人存款到你的帮派银行账户. + + + You are not in a Gang! + Nejste v gangu! + Vous n'êtes pas dans une bande! + ¡No estás en una pandilla! + Non sei in un Gang! + Nie jesteś w gangu! + Você não está em uma gangue! + Du bist nicht in einer Gang! + 你没有在帮派里! + + + + + Altis Mobile + Altis Mobile + Celular + + Altis Mobilfunk + Altis Mobile + Cellulare Altis + Celular + Telefon + 手机 + + + Message To Send: + Zpráv pro odeslání: + Mensaje a Enviar: + + Deine Nachricht: + SMS à Envoyer : + Messaggio da inviare: + Mensagem à enviar: + Treść wiadomości + 发送信息: + + + Text Message: + Textová zpráva: + Mensaje: + + Nachricht: + Message Texte : + Msg Giocatore: + Mensagem: + Do: Gracz + 发短信: + + + Text Police + Text Police + Msg Policía + + An die Polizei + Police + Msg Polizia + Polícia + Do: Policja + 发短信给警察 + + + Text Admins + textové Administrátoři + Msg Admin + + An die Admins + Requête Admin + Msg Admin + Msg Admins + Do: Admin + 发短信给管理 + + + Admin Message + admin Message + Msg de Admin + + Admin-Nachricht + Message Admin + Admin Msg + Admin Msg + AdmGracz + 管理员信息 + + + Admin Msg All + Admin zpráva Vše + Admin Msg All + + Admin-Nachricht an alle + Admin MSG ALL + Admin Msg + Admin Msg All + SMS do Wszyscy + 管理员全服信息 + + + Request EMS + žádost o EMS + Pedir Médico + + An die Sanitäter + SAMU + Msg medici + Chamar SAMU + MEDYK + 发短信给医疗 + + + + + You must enter a message to send! + You must enter a message to send! + You must enter a message to send! + You must enter a message to send! + Du musst eine Nachricht eingeben! + Vous devez entrer un message à envoyer! + You must enter a message to send! + You must enter a message to send! + You must enter a message to send! + 您必须输入要发送的消息! + + + Your message cannot exceed 400 characters! + Your message cannot exceed 400 characters! + Your message cannot exceed 400 characters! + Your message cannot exceed 400 characters! + Deine Nachricht darf maximal 400 Zeichen enthalten!! + Votre message ne peut pas excéder 400 caractères ! + Your message cannot exceed 400 characters! + Your message cannot exceed 400 characters! + Your message cannot exceed 400 characters! + 您的信息不能超过400个字符! + + + You must select a player you are sending the text to! + You must select a player you are sending the text to! + You must select a player you are sending the text to! + You must select a player you are sending the text to! + Du musst einen Spieler auswählen! + Vous devez sélectionner un joueur à qui envoyer le message ! + You must select a player you are sending the text to! + You must select a player you are sending the text to! + You must select a player you are sending the text to! + 当你发送信息时必须选择一个玩家! + + + You have sent a message to all EMS Units. + You have sent a message to all EMS Units. + You have sent a message to all EMS Units. + You have sent a message to all EMS Units. + Du hast eine Nachricht an alle Sanitäter gesendet. + Vous avez envoyé un message à tous les EMS. + You have sent a message to all EMS Units. + You have sent a message to all EMS Units. + You have sent a message to all EMS Units. + 你已经向所有医护人员发送了消息. + + + You have sent a message to all Police Units. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + Du hast eine Nachricht an alle Polizisten gesendet. + Vous avez envoyé un message à tous les Police. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + You have sent a message to all Police Units. + + + + You have sent a message to all Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + Du hast eine Nachricht an alle Admins gesendet. + Vous avez envoyé un message à tous les Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + You have sent a message to all Admins. + + + + You sent %1 a message: %2 + You sent %1 a message: %2 + You sent %1 a message: %2 + You sent %1 a message: %2 + Du sendest %1 eine Nachricht: %2 + Vous avez envoyé à %1 le message : %2 + You sent %1 a message: %2 + You sent %1 a message: %2 + You sent %1 a message: %2 + 你向 %1 发送了信息: %2 + + + You are not an admin! + You are not an admin! + You are not an admin! + You are not an admin! + Du bist kein Admin! + Vous n'êtes pas un admin ! + You are not an admin! + You are not an admin! + You are not an admin! + 你不是管理员! + + + Admin Message Sent To: %1 - Message: %2 + Admin Message Sent To: %1 - Message: %2 + Admin Message Sent To: %1 - Message: %2 + Admin Message Sent To: %1 - Message: %2 + Admin Nachricht Gesendet an: %1 - Nachricht: %2 + Message admin envoyé à %1 - Message : %2 + Admin Message Sent To: %1 - Message: %2 + Admin Message Sent To: %1 - Message: %2 + Admin Message Sent To: %1 - Message: %2 + 管理员消息发送给: %1 - 信息: %2 + + + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Nachricht Gesendet an Alle: %2 + Message admin envoyé à tous les joueurs : %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + Admin Message Sent To All: %2 + 管理员发送信息到全体: %2 + + + There are currently no police units available! + Momentálně nejsou k dispozici žádné policejní jednotky! + ¡Actualmente no hay unidades de policía disponibles! + В настоящее время нет полицейских подразделений! + Aktuell stehen keine Polizeieinheiten zur Verfügung! + Il n'y a actuellement aucune unité de police disponible! + Al momento non ci sono unità di polizia disponibili! + Actualmente não há unidades policiais disponíveis! + Obecnie nie ma żadnych jednostek policyjnych! + 目前没有警用单位! + + + There are currently no EMS units available! + Momentálně nejsou k dispozici žádné jednotky EMS! + Actualmente no hay unidades de EMS disponibles! + В настоящее время нет доступных модулей EMS! + Aktuell stehen keine Sanitäter zur Verfügung! + Il n'y a actuellement aucune unité EMS disponible ! + Attualmente non ci sono unità EMS disponibili! + Não existem actualmente unidades EMS disponíveis! + Obecnie nie ma dostępnych jednostek EMS! + 目前没有特快专递单位! + + + + + Local Chop Shop + Místní Chop Shop + Desguazadero + + Schrotthändler + Revendeur de véhicules volés + Ricettatore + Desmanche + Dziupla + 销赃盗窃的载具 + + + + + Gang Management + gang Vedení + Administración de Pandilla + + Gangübersicht + Gestion du Gang + Gestione Gang + Gerenciar Gangue + Gang Menu + 帮派管理 + + + Gang Management - Current Gangs + Gang Management - Současné Gangs + Administracion de Pandilla - Pandillas Actuales + + Gangübersicht - Aktuelle Gangs + Gestion de Gangs - Liste des Gangs Actuels + Gestione Gang - Gang Attuali + Gerenciar Gangue - Gangue atual + Gang - zarządzaj + 帮派管理-当前帮派 + + + Join + Připojit + Unirse + + Beitreten + Rejoindre + Unisciti + Entrar + Dołącz + 加入 + + + Leave + Dovolená + Salir + + Verlassen + Quitter + Abbandona + Sair + Opuść + 退出 + + + Upgrade Slots + upgradem Slots + Aumentar Slots + + Anzahl erhöhen + Augmenter Slots + Aumenta Posti + Aumentar o número de Slots + Powiększ gang + 升级人数 + + + Kick + Kop + Expulsar + + Kicken + Virer + Espelli + Expulsar + Wykop + 踢出 + + + Set Leader + Set Leader + Hacer Líder + + Neuer Anführer + Passer Chef + Imposta Capo + Passar Liderança + Ustaw lidera + 设置管理者 + + + To create a gang it costs $%1 + Chcete-li vytvořit gang stojí $%1 + Cuesta $%1 para crear una pandilla + + Le prix de création d'un gang est de %1$ + Eine Gang zu erstellen kostet $%1. + Creare una gang costa $%1 + Criar uma Gangue custa R$%1 + Koszt ustanowienia gangu to $%1 + 创建一个帮派的成本 $%1 + + + Create + Vytvořit + Crear + + Erstellen + Créer + Crea + Criar + Stwórz + 创建 + + + Your Gang Name + Váš Gang Jméno + Nombre de tu Pandilla + + Dein Gangname + Nom du Gang + Nome della tua Gang + Nome da Gangue + Nazwa gangu + 输入你要创建的帮派名字 + + + Invite Player + Pozvat Player + Invitar Jugador + + Spieler einladen + Inviter joueur + Invita Giocatore + Convidar Jogador + Zaproś + 邀请玩家 + + + Disband Gang + rozpustit Gang + Deshacer Pandilla + + Gang auflösen + Dissoudre Gang + Sciogli Gang + Desfazer Gangue + Opuść gang + 解散帮派 + + + Gang Invitation + gang Pozvánka + Invitación de Pandilla + + Gangeinladung + Invitation de Gang + Invito Gang + Convite para Gangue + Zaproszenie do gangu + 帮派邀请 + + + Transfer Gang Leadership + Přeneste Gang Vedení + Transferir Liderazgo de Pandilla + + Gangführung übertragen + Transfert du chef du Gang + Trasferisci Comando + Transferir Liderança + Przekaż kierowanie gangiem + 移交帮派管理 + + + Upgrade Maximum Allowed Gang Members + Inovovat Maximální povolená Gang Členové + Aumentar Cantidad Máxima de Miembros de la Pandilla + + Maximale Anzahl an Mitgliedern erhöhen + Augmentation du nombre de membre total + Aumenta numero massimo membri della Gang + Atualizar limite máximo de membros + Zwiększ maksymalną liczbę członków gangu + 升级帮派成员人数 + + + + + You must create a gang first before capturing it! + You must create a gang first before capturing it! + Debes crear una pandilla antes de capturar este escondite! + + Du musst erst in einer Gang sein, um das Versteck einnehmen zu können! + Vous devez créer un gang avant de le capturer ! + Devi creare una gang prima di catturarla! + Você precisa criar uma gangue antes de tentar capturar! + Przed przechwyceniem musisz stworzyć gang + 您必须先创建一个帮派然后才能建立帮派据点! + + + Your gang already has control over this hideout! + Naše parta už má kontrolu nad tímto úkrytu! + Tu Pandilla ya tiene control de este escondite! + + Deine Gang hat bereits die Kontrolle über dieses Versteck! + Votre gang a déjà le contrôle de cette planque ! + La tua Gang ha già il controllo di questo Covo + Sua gangue já tem controle sobre esse esconderijo! + Twój gang aktualnie kontroluje tę kryjówkę ! + 你的帮派已经控制了这个帮派据点! + + + Only one person shall capture at once! + Pouze jedna osoba musí být schopná zachytit najednou! + Solo una persona puede capturar a la vez! + + Nur eine Person kann das Versteck einnehmen! + Une seule personne à la fois peut capturer la cachette ! + Può conquistare solo una persona alla volta! + Somente uma pessoa pode capturar! + Przejmowanie powinna przeprowadzić na raz tylko jedna osoba + 每次只能抓捕帮派据点的一个人! + + + This hideout is controlled by %1.<br/><br/>Are you sure you want to take over their gang area? + Tento úkryt je řízen %1.<br/><br/>Opravdu chcete převzít svůj gang prostor? + Este escondite esta controlado por %1.<br/><br/>Estas seguro que quieres tomarlo? + + Das Versteck wird durch %1 kontrolliert.<br/><br/>Bist du sicher, dass du ihr Ganggebiet übernehmen möchtest? + Cette planque est contrôlée par %1.<br/><br/>Etes-vous sûr que vous voulez prendre leur cachette ? + Questo Covo è controllato da %1.<br/><br/>Sicuro di voler prendere il controllo della loro area? + Esse esconderijo é controlado por %1.<br/><br/>Você tem certeza que deseja tomar essa área? + Ta kryjówka jest kontrolowana przez %1.<br/><br/>Jesteś pewny że chcesz przjąć ten rejon. + 帮派据点由 %1 控制.<br/><br/>你确定要接管他们的帮派吗? + + + Hideout is currently under control... + Hideout is currently under control... + Escondite bajo control... + + Versteck ist derzeit unter Kontrolle... + La planque est actuellement sous contrôle... + Il Covo è già sotto controllo... + Esconderijo sobre controle.... + Kryjówka pod kontrolą ... + 帮派据点正在控制... + + + Capturing cancelled + zachycení zrušen + Toma de Control Cancelada + + Einnehmen abgebrochen. + Capture annulée + Cattura annullata + Ação concelada + Przejmowanie anulowane + 帮派据点控制取消 + + + Capturing Hideout + zachycení Hideout + Capturando el Escondite + + Versteck einnehmen + Capture de la planque + Catturando il Covo + Capturando Esconderijo + Przejmowanie kryjówki + 控制的帮派据点 + + + Hideout has been captured. + Úkryt byl zajat. + La cachette a été capturée. + Escondite ha sido capturado. + Hideout è stato catturato. + Hideout został schwytany. + Hideout foi capturado. + Хайдеаут был захвачен в плен. + Versteck wurde eingenommen. + 帮派据点已被控制。 + + + %1 and his gang: %2 - have taken control of a local hideout! + %1 a jeho gang: %2 - vzali kontrolu místního úkrytu! + %1 y su pandilla: %2 - han tomado control de un Escondite! + + %1 und seine Gang: %2 - haben die Kontrolle über ein lokales Versteck übernommen! + %1 et son gang: %2 ont pris le contrôle d'une cachette ! + %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! + %1 e sua gangue: %2 - agora têm o controle de um esconderijo! + %1 i jego gang: %2 - przejął kontrolę nad kryjówką! + %1 和他的帮派: %2 - 已经控制了一个帮派据点! + + + You can't have a gang name longer then 32 characters. + Nemůžete mít název gang delší než 32 znaků. + El nombre de tu Pandilla no puede tener mas de 32 caracteres. + + Dein Gangname kann nicht länger als 32 Zeichen sein. + Vous ne pouvez pas avoir un nom de gang de plus de 32 caractères. + %1 e la sua Gang: %2 - hanno preso il controllo di un Covo! + O nome de sua gangue não pode ter mais de 32 caracteres. + Nazwa gangu może posiadać maksymalnie 32 znaki + 你的帮派名称超过32个字符。 + + + You have invalid characters in your gang name. It can only consist of Numbers and letters with an underscore + Máte neplatné znaky v názvu vaší gangu. To se může skládat pouze z číslic a písmen s podtržítkem + El nombre de tu pandilla solo puede consistir de: "Numeros, Letras y guion bajo" + + Du hast ein ungültiges Zeichen in deinem Gangnamen. Der Name darf nur aus Zahlen und Buchstaben sowie einem Unterstrich bestehen! + Vous avez des caractères non valides dans le nom de votre gang. Il ne peut être constitué que de chiffres et de lettres. + Hai inserito caratteri non validi nel nome della Gang. Puoi inserire solo numeri e lettere con un underscore + O nome da sua gangue tem caracteres inválidos. O nome so pode conter caracteres e números separados por underline + Masz nieprawidłowe znaki w nazwie gangu - tylko litery i cyfry oraz podkreślnik + 你的帮派名称中有无效字符,它只能由下划线、数字和字母组成 + + + You do not have enough money in your bank account.\n\nYou lack: $%1 + Nemáte dostatek peněz na váš bankovní účet \ ne vy balení:. $%1 + No tienes suficiente dinero en tu cuenta.\n\nTe falta: $%1 + + Du hast nicht genug Geld auf deinem Bankkonto.\n\nDir fehlen: $%1 + Vous n'avez pas assez d'argent dans votre compte en banque.\n\nIl vous manque: $%1 + Non hai abbastanza fondi nel tuo conto in banca.\n\nTi mancano: $%1 + Você não tem dinheiro suficiente na sua conta bancária.\n\nFaltam: R$%1 + Nie masz tyle pieniędzy na koncie.\n\nYou brakuje: $%1 + 你的银行账户里没有足够的钱.\n\n你缺少: $%1 + + + You have created the gang %1 for $%2 + Vytvořili jste gangu %1 pro $%2 + Has creado la Pandilla %1 por $%2 + + Du hast die Gang: %1 für $%2 erstellt. + Vous avez créé le gang %1 pour $%2. + Hai creato la Gang %1 al costo di $%2 + Você criou a gangue %1 por R$%2 + Stworzyłeś gang %1 za $%2 + 你创造帮派 %1 花费了 $%2 + + + You are about to disband the gang, by disbanding the gang it will be removed from the database and the group will be dropped. <br/><br/>Are you sure you want to disband the group? You will not be refunded the price for creating it. + Chystáte se rozpustit gang, tím, že rozpustí gang bude odstraněna z databáze a skupina bude vynechána. < br / > < br / > Opravdu chcete rozpustit skupinu? Budete nevrací cenu za jeho vytvoření. + Estas a punto de desmantelar la Pandilla, si prosiges la Pandilla se borrara de la base de datos. <br/><br/>Estas seguro de querer desmantelarla? Cualquier dinero invertido no sera devuelto. + + Du bist dabei die Gang aufzulösen. Durch Auflösung der Gang wird diese aus der Datenbank entfernt. <br/><br/>Bist du sicher, dass du die Gang auflösen willst? Du erhältst die Kosten für die Erstellung nicht zurück. + Vous vous apprêtez à dissoudre le gang. En démantelant le gang, il sera supprimé de la base de données et le groupe sera supprimé. <br/><br/>Etes-vous sûr de vouloir dissoudre le groupe? Vous ne serez pas remboursé du prix de sa création. + Stai per sciogliere la Gang, facendolo sarà rimossa dal Database e il gruppo verrà cancellato. <br/><br/>Sei sicuro di voler sciogliere il gruppo? Non verrai rimborsato dei fondi spesi per crearlo. + Você vai desfazer a sua gangue, ela será apagada do banco de dados. <br/><br/>Você tem certeza que quer desfazer a gangue? Você não será reembolsado. + Chcesz rozwiązać gang, po jego rozwiązaniu zostanie on usunięty z bazy danych i cała grupa zostanie rozwiązana. <br/><br/>Naprawdę chcesz rozwiązać grupę? Nie dostaniesz zwrotu środków za przeznaczonych na stworzenie gangu. + 你要解散帮派,帮派将从数据库中删除. <br/><br/>你确定你想解散帮派? 不会退还你创建帮派的花费. + + + Disbanding the gang... + Rozpuštění gang ... + Desmantelando la Pandilla... + + Gang wird aufgelöst... + Démantèlement du gang... + Sciogliendo la Gang... + Desfazendo a gangue... + Rozwiąż gang + 解散帮派... + + + Disbanding cancelled + rozpuštění zrušen + Desmantelamiento Cancelado + + Auflösung abgebrochen. + Démantèlement annulé + Scioglimento annullato + Desfazer gangue cancelado + Rozwiązywanie gangu anulowane + 解散取消 + + + The leader has disbanded the gang. + Vůdce se rozpustil gang. + El lider ha desmantelado la Pandilla. + + Der Anführer hat die Gang aufgelöst. + Le chef a démantelé le gang. + Il Capo ha sciolto la Gang + O lider desfez a gangue. + Szef rozwiązał gang + 老大解散了帮派。 + + + %1 has invited you to a gang called %2<br/>If you accept the invitation you will be a part of their gang and will have access to the gang funds and controlled gang hideouts. + %1 vás pozval na party s názvem %2<br/>Pokud přijmete pozvání budete součástí jejich gangu a budou mít přístup ke gangu fondů a řízených gangů úkrytů. + %1 te ha invitado a una Pandilla llamada %2<br/>Si aceptas seras parte de su pandilla, compartiras el banco de la pandilla y controlaras sus escondites. + + %1 hat dich zu der Gang: %2 eingeladen. <br/> Wenn Du die Einladung annimmst, wirst du ein Teil der Gang und bekommst Zugang zu dem Gangkonto und kontrollierten Verstecken. + %1 vous a invité dans un gang appelé %2<br/>Si vous acceptez l'invitation, vous serez dans leur gang et aurez accès à des fonds de gangs et des planques de gangs contrôlées. + %1 ti ha invitato nella Gang: %2<br/>Se vuoi accettarai l'invito entrerai a far parte della loro Gang ed avrai accesso ai loro fondi e ai loro Covi. + %1 convidou você para a gangue %2<br/>Se você aceitar terá acesso aos recursos da gangue e os esconderijos controlados pela mesma. + %1 zaprosił cię do gangu o nazwie %2<br/>Jeżeli zaakceptujesz zaproszenie będziesz członkiem gangu i uzyskasz dostęp do funduszy gangu oraz jego kryjówek + %1 邀请你加入一个叫做 %2 的帮派<br/>如果你接受了这个邀请,你将成为他们的帮派成员,并且可以获得帮派资金和使用帮派控制的帮派据点。 + + + You are about to invite %1 to your gang, if they accept the invite they will have access to the gang's funds. + Chystáte se pozvat%1 na svůj gang, pokud přijmou pozvání budou mít přístup k finančním prostředkům gangu. + Estas a putno de invitar a %1 a tu pandilla, si aceptan tendran aceso al banco de tu Pandilla. + + Du bist dabei %1 in deine Gang einzuladen. Wenn die Einladung angenommen wird, hat der Spieler Zugang zu den Gangbesitztümern. + Vous êtes sur le point d'inviter %1 dans votre gang, s'il accepte l'invitation, il aura accès aux fonds du gang. + Stai per invitare %1 nella tua Gang, se accetterà l'invito avrà accesso ai fondi della Gang. + Você está prestes a convidar %1 para a gangue, ele terá acesso aos recursos da gangue. + Właśnie zaprosiłeś %1 do gangu, jeśli zaakceptuje zaproszenie będzie miał dostęp do funduszy gangu. + 您将邀请 %1 加入您的帮派,如果他接受邀请,他将有权使用帮派的资金。 + + + You need to select a person to invite! + Musíte vybrat osobu vyzvat! + Tiense que selecionar a quien invitar! + + Du musst einen Spieler zum Einladen auswählen! + Vous devez sélectionner une personne à inviter ! + Devi selezionare una persona da invitare! + Você tem que selecionar um jogador para convidar! + Musisz zaznaczyć osobę aby ją zaprosić + 你需要选择一个人来邀请他! + + + You have sent a invite to your gang to %1 + Jste adresoval zvou na svůj gang do %1 + Has invitado a %1 a tu Pandilla + + Du hast eine Einladung in diese Gang an %1 gesendet. + Vous avez envoyé une invitation à rejoindre votre gang à %1 + Hai mandato l'invito alla tua Gang a %1 + Você enviou um convite para %1 se juntar a sua gangue + Wysłałeś zaproszenie do twojego gangu do %1 + 你已经给 %1 发送了一个加入你帮派的邀请 + + + Invitation Cancelled + Pozvánka byla zrušena + Invitación Cancelada + + Einladung abgebrochen. + Invitation annulée + Invito Annullato + Convite Cancelado + Zaproszenie anulowane + 取消邀请 + + + You cannot kick yourself! + Nemůžete kopat sami! + No te puedes expulsar a ti mismo! + + Du kannst dich nicht selbst kicken! + Vous ne pouvez pas vous éjecter vous-même ! + Non puoi espellerti da solo! + Você não pode kickar você mesmo! + Nie możesz sam się wykopać! + 你不能踢出自己! + + + Your gang has reached its maximum allowed slots, please upgrade your gangs slot limit. + Váš gang dosáhla svého maxima dovoleno sloty, proveďte upgrade hranice slotu vašeho gangu. + Tu Pandilla ha llegado a su máxima capacidad, aumenta los slots para seguir invitando. + + Deine Gang hat die maximale Anzahl an Mitgliedern erreicht, bitte erhöhe das Limit deiner Gang. + Votre gang a atteint le nombre de membre maximum, veuillez augmenter cette limite. + la tua Gang ha raggiungo il numero massimo di posti consentiti, aumentane il limite. + Sua gangue está lotada, você deve aumentar o número máximo de jogadores. + Twój gang osiągnął maksymalną pojemność, powiększ swój gang! + 你的帮派成员数已经达到了允许的最大范围, 请升级你的帮派成员数. + + + You need to select a person to kick! + Musíte vybrat osobu kopat! + Tienes que seleccionar a quien expulsar! + + Du musst einen Spieler auswählen, um ihn kicken zu können! + Vous devez choisir une personne à virer ! + Devi selezionare una persona da espellere! + Você tem que selecionar um jogador para kickar! + Musisz zaznaczyć osobę do wykopania + 你需要选择一个人来踢出! + + + You cannot leave the gang without appointing a new leader first! + Nemůžete opustit gang, aniž by o jmenování nového vůdce první! + No puedes salir de la Pandilla sin apuntar a un nuevo líder! + + Du kannst die Gang nicht verlassen, ohne vorher einen neuen Anführer zu ernennen! + Vous ne pouvez pas quitter le gang sans passer le lead à quelqu'un ! + Non puoi abbandonare la Gang prima di aver selezionato un nuovo Capo! + Você não pode sair da gangue sem transferir a liderança antes! + Nie możesz opuścić gangu bez przekazania komuś szefostwa nad gangiem + 没有任命新的老大,你不能离开这个帮派! + + + You have quit the gang. + You have quit the gang. + You have quit the gang. + You have quit the gang. + Du hast die Gang verlassen. + Vous avez quitté le gang. + You have quit the gang. + You have quit the gang. + You have quit the gang. + 你已经退出了帮派. + + + You are about to transfer leadership over to %1 <br/>By transferring leadership you will no longer be in control of the gang unless ownership is transferred back. + Chystáte se přenést vedoucí přes %1 <br/>Převedením vedení už nebude mít kontrolu nad gangu, pokud je vlastnictví převedeno zpět. + Estas a punto de transferir liderazgo a %1 <br/>Al transferir liderazgo no tendrás control de la Pandilla. + + Du bist dabei, die Gangführung an %1 zu übertragen<br/>Durch die Übertragung der Gangführung hast du keine Kontrolle mehr über die Gang. + Vous allez transférer le commandement à %1 <br/>En transférant le commandement, vous ne serez plus le chef du gang. + Stai per traferire il comando a %1 <br/>Facendolo non avrai più il controllo della Gang fino a quando non ti verrà restituito il comando. + Você vai transferir a liderança da gangue para %1 <br/>Você não será mais o lider, a não ser que a liderança seja transferida novamente. + Przekazałeś kierowanie gangiem %1 <br/>W związku z tym nie będzesz od tej chwili kontroli nad gangiem chyba, że kierowownictwo zostanie ci powierzone ponownie. + 你将要把老大的位置移交给 %1 <br/>老大的位置移交后,你将不能再控制这个帮派,除非有人将帮派老大位置还给你. + + + Transfer of leadership cancelled. + Převod vedení zrušen. + Transferencia de liderazgo cancelada. + + Übertragung der Gangführung abgebrochen. + Transfert du commandement annulé. + Trasferimento del comando annullato. + Transferencia de liderança cancelada. + Przkazanie kierownictwa anulowane. + 取消帮派老大的移交。 + + + You are already the leader! + Již jste vůdce! + Tu ya eres el líder! + + Du bist bereits der Anführer! + Vous êtes déjà chef ! + Sei già il Capo! + Você já está na liderança! + Jesteś już liderem! + 你已经是帮派老大了! + + + You need to select a person first! + Je třeba vybrat prvního člověka! + Tienes que seleccionar a alguien primero! + + Du musst erst einen Spieler auswählen! + Vous devez choisir une personne ! + Devi selezionare una persona! + Você tem que selecionar um jogador antes! + Musisz najpierw zaznaczyć osobę! + 你需要先选一个人! + + + You have been made the new leader. + You have been made the new leader. + You have been made the new leader. + You have been made the new leader. + Du wurdest zum neuen Anführer ernannt. + Vous êtes le nouveau leader. + You have been made the new leader. + You have been made the new leader. + You have been made the new leader. + 你被选为新的帮派老大. + + + You are about to upgrade the maximum members allowed for your gang. + Chystáte se aktualizovat maximální povolené členy pro svůj gang. + Estas a punto de aumentar la capacidad de tu Pandilla. + + Du bist dabei, die maximale Anzahl an Mitgliedern zu erhöhen. + Vous êtes sur le point de mettre à niveau la limite de membre maximum pour votre gang. + Stai aumentando il numero massimo di membri consentiti all'interno della tua Gang + Você vai atualizar o limite de membros da gangue. + Chcesz zwiększyć maksymalną ilość członków w gangu. + 您将升级您的帮派所允许的最大成员数. + + + Current Max: %1 + Proud Max: %1 + Límite Corriente: %1 + + Aktuelles Maximum: %1 + Max actuel: %1 + Attuali Max: %1 + Número máximo atual: %1 + Aktualnie Max: %1 + 目前的最大值: %1 + + + Upgraded Max: %2 + Modernizované Max: %2 + Nuevo Límite: %2 + + Maximum erhöhen: %2 + Après mise à niveau : %2 + Aumento Max: %2 + Novo número máximo: %2 + Po ulepszeniu Max: %2 + 升级最大值: %2 + + + Price: + Cena: + Precio: + + Preis: + Prix : + Costo: + Preço: + Koszt: + 价钱: + + + You do not have enough money in your bank account to upgrade the gangs maximum member limit. + Nemáte dostatek peněz na modernizaci gangů maximální limit člena svého bankovního účtu. + No tienes suficiente dinero como para mejorar la capacidad de tu pandilla. + + Du hast nicht genug Geld auf deinem Bankkonto, um das Mitgliederlimit deiner Gang zu erhöhen. + Vous n'avez pas assez d'argent dans votre compte en banque pour mettre à niveau la limite de membre maximale. + Non hai abbastanza fondi nel tuo conto in banca per aumentare il limite massimo di membri. + Você não dinheiro suficiente para aumentar o limite da gangue. + Nie posiadasz wystarczającej ilości środków na koncie aby powiększyć gang + 您的银行帐户没有足够的钱升级帮派最大成员限制。 + + + Current: + Aktuální + Corriente: + + Aktuell: + Actuel : + Attuale: + Atual: + Aktualny: + 最近的: + + + Lacking: + postrádat + Falta: + + Fehlend: + Manquant : + Mancanza: + Faltando: + Brakuje: + 缺少: + + + You have upgraded from %1 to %2 maximum slots for <t color='#8cff9b'>$%3</t> + Provedli jste upgrade z%1 do%2 Maximální sloty pro < k color = "# 8cff9b '> $%3 < / > + Has aumentado de %1 a %2 slots <t color='#8cff9b'>$%3</t> + + Du hast für <t color='#8cff9b'>$%3</t> die Anzahl von %1 auf %2 Mitgliedern erhöht. + Vous avez mis à niveau le nombre maximal de membres de %1 à %2 pour <t color='#8cff9b'>$%3</t> + Hai aumentato i posti massimi da %1 a %2 per <t color='#8cff9b'>$%3</t> + Limite de membros atualizado de %1 para %2 por <t color='#8cff9b'>R$%3</t> + Zwiększyłeś ilość możliwych członków gangu z %1 do %2 for <t color='#8cff9b'>$%3</t> + 你已经从 %1 升级到 %2 最大成员数 <t color='#8cff9b'>$%3</t> + + + Upgrade cancelled. + Upgrade zrušena. + Mejora Cancelada. + + Erhöhung abgebrochen. + Mise à jour annulée. + Aumento annullato. + Cancelar Upgrade. + Ulepszanie anulowane. + 升级取消。 + + + Funds: + fondy + Fondos: + + Geld: + Fonds : + Fondi + Recursos: + Środki: + 基金: + + + (Gang Leader) + (Gang Leader) + (Lider de Pandilla) + + (Gangführung) + (Chef de Gang) + (Capo Gang) + (Lider da Gangue) + (Szef gangu) + (帮派老大) + + + You are already in a gang. + Jste již v gangu. + Ya estas en una pandilla. + + Du befindest dich bereits in einer Gang. + Vous êtes déjà dans un gang. + Sei già in una banda. + Você já está em uma gangue. + Jesteś już w gangu. + 你已经在帮派中了。 + + + Bad UID? + Bad UID? + Mauvais UID ? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + Bad UID? + 错误的UID? + + + This player is already in a gang. + Tento hráč je již v gangu. + Ce joueur est déjà dans un gang. + Este jugador ya está en una pandilla. + Questo giocatore è già in una banda. + Ten gracz jest już w gangu. + Este jogador já está em uma gangue. + Этот игрок уже в банде. + Dieser Spieler ist bereits in einer Gang. + 这个玩家已经在帮派中了。 + + + You have been kicked out of the gang. + You have been kicked out of the gang. + Vous avez été éjecté de votre gang. + You have been kicked out of the gang. + You have been kicked out of the gang. + You have been kicked out of the gang. + You have been kicked out of the gang. + You have been kicked out of the gang. + Du wurdest aus der Gang gekickt. + 你被踢出了帮派。 + + + + + This garage has already been bought! + + + + Diese Garage wurde bereits gekauft! + Ce garage a déjà été acheté ! + + + + 这个仓库已经被购买了! + + + You are not the owner of this house! + + + + Vous n'êtes pas le propriétaire de cette maison ! + Du bist nicht der Eigentümer dieses Hauses! + + + + 你不是这所建筑的主人! + + + This garage is available for <t color='#8cff9b'>$%1</t><br/> + + + + Diese Garage steht dir für <t color='#8cff9b'>$%1</t><br/>zur Verfügung! + Ce garage est disponible pour <t color='#8cff9b'>$%1</t><br/> + + + + 这个仓库花费 <t color='#8cff9b'>$%1</t><br/> + + + This building is a Gang Hideout! + + + + Dieses Gebäude ist ein Gangversteck! + Ce bâtiment est une cachette de gang ! + + + + 这个建筑是一个帮派据点! + + + Are you sure you want to sell your garage? It will sell for: <t color='#8cff9b'>$%1</t> + + + + Bist du sicher, dass du diese Garage verkaufen willst? Sie wird verkauft für: <t color='#8cff9b'>$%1</t> + Êtes-vous sûr de vouloir vendre votre garage ? Vous le vendrez pour : <t color='#8cff9b'>$%1</t> + + + + 你确定要卖掉你的仓库吗? 它将售出: <t color='#8cff9b'>$%1</t> + + + Sell Garage + + + + Vendre le garage + Garage verkaufen + + + + 出售仓库 + + + Purchase Garage + + + + Acheter ce garage + Garage kaufen + + + + 购买仓库 + + + You do not own a garage here! + + + + Du besitzt hier keine Garage! + Vous ne possédez pas de garage ici ! + + + + 你在这里没有仓库! + + + Vehicle Garage + Garáž Vehicle + Garaje de Vehículos + + Fahrzeug Garage + Garage de Véhicules + Garage Veicoli + Garagem de Veículos + Garaż + 载具仓库 + + + Get Vehicle + Získat vozidlo + Obtener Vehículo + + Ausparken + Récupérer + Ritira Veicolo + Pegar Veículo + Wyciągnij pojazd: + 获取载具 + + + Sell Vehicle + Navrhujeme Vehicle + Vender Vehículo + + Fahrzeug verkaufen + Vendre + Vendi Veicolo + Vender Veículo + Sprzedaj pojazd + 出售载具 + + + Sell Price + Navrhujeme Cena + Precio de Venta + + Verkaufspreis + Prix de vente + Prezzo di vendita + Preço de Venda + Cena sprzedaży + 出售价格 + + + Storage Fee + skladného + Cuota de Guardado + + Parkgebühr + Frais de Stockage + Costo ritiro + Taxa de Armazenamento + Opłata parkingowa + 保管费 + + + No vehicles found in garage. + Žádná vozidla nalezený v garáži. + No se encontraron vehículos en el Garaje. + + Keine Fahrzeuge in der Garage gefunden. + Aucun véhicule trouvé dans le garage. + Non hai veicoli nel Garage. + Nenhum veiculo encontrado na garagem. + Nie znaleziono pojazdów w garażu + 仓库内没有载具。 + + + You don't have $%1 in your bank account + Nemáte $%1 z vašeho bankovního účtu + No tienes $%1 en tu cuenta de Banco + + Du hast keine $%1 auf deinem Bankkonto. + Vous n'avez pas %1$ sur ton compte en banque. + Non hai $%1 nel tuo conto in banca + Você não tem R$%1 na sua conta bancária + Nie masz %1 na koncie bankowym: + 你的银行账户里没有 $%1 + + + Spawning vehicle please wait... + Plodit vozidlo čekejte prosím ... + Creando vehículo, por favor espera... + + Fahrzeug wird bereitgestellt, bitte warten... + Mise en place du Véhicule, merci de patienter... + Creazione veicolo attendere... + Obtendo veiculo, aguarde por favor... + Wyciągam pojazd, proszę czekać ... + 正在提取载具请稍候... + + + Sorry but %1 was classified as a destroyed vehicle and was sent to the scrap yard. + Je nám líto, ale%1 byl klasifikován jako zničené vozidlo a byl poslán na šrotiště. + Lo siento, pero %1 fue clasificado como destruido y fue mandado al basurero. + + Entschuldigung, aber dein %1 wurde zerstört und auf den Schrottplatz geschickt. + Désolé, mais votre %1 a été détruit et vendu à la casse. + Purtroppo %1 è stato classificato come veicolo distrutto ed è stato mandato allo sfascio. + O veículo %1 foi mandado para o ferro velho pois foi classificado como destroido. + Przepraszamy ale %1 został sklasyfikowany jako zniszczony i został odesłany na złom. + 对不起 %1 被认定为损坏的载具并送往废弃场。 + + + Sorry but %1 is already active somewhere in the world and cannot be spawned. + Je nám líto, ale%1 je již aktivní někde ve světě a nemůže být třel. + Lo siento, pero %1 esta activo en alguna parte del mundo y no puede aparecer. + + Entschuldigung, aber dein %1 ist bereits ausgeparkt worden und kann darum nicht bereitgestellt werden. + Désolé, mais votre %1 a déjà été sorti du garage. + Purtroppo %1 è già presente nella mappa e non può essere ricreato + O veículo %1 já está presente no mapa e não pode ser retirado novamente + Przepraszamy ale %1 jest aktywny gdzieś na mapie i nie może zostać wyciągnięty. + 对不起,%1 被归类为毁坏的载具,并被送到废弃场。 + + + There is already a vehicle on the spawn point. You will be refunded the cost of getting yours out. + K dispozici je již vozidlo na spawn bodu. Ty budou vráceny náklady dostat se ven. + Ya hay un vehículo en el punto de Spawn, se te reembolsara el costo de sacar el vehículo. + + Es steht ein Fahrzeug auf dem Spawnpunkt. Die Kosten für das Bereitstellen werden dir erstattet. + Il y a déjà un véhicule sur le point de spawn. Le coût de sortie du véhicule vous a été remboursé. + C'è già un veicolo nel punto di creazione. Verrai rimborsato della spesa appena effettuata. + Existe um outro veiculo na area de spawn. Você será reembolsado. + W strefie parkowania znajduje się już pojazd. Środki za parkowanie zostaną zwrócone. + 载具重生点已经被另一辆载具占据。你的花费将会返还。 + + + You sold that vehicle for $%1 + Ty jsi prodal toto vozidlo za $%1 + Vendiste el vehículo por $%1 + + Du verkaufst dein Fahrzeug für $%1. + Vous avez vendu ce véhicule pour $%1. + Hai venduto il veicolo per $%1 + Você vendeu um veículo por R$%1 + Sprzedałeś pojazd za %1 + 你以 $%1 的价格出售了这辆载具 + + + That vehicle is a rental and cannot be stored in your garage. + Že vozidlo je půjčovna a nemohou být uloženy ve vaší garáži. + Este vehículo es rentado y no puede ser guardado. + + Mietwagen können nicht in der Garage geparkt werden. + Ce véhicule est une location et ne peut pas être stocké dans votre garage. + Il veicolo è in affitto e non può essere depositato in garage. + Esse veículo é alugado e não pode ser armazenado na garagem. + Pojazd wynajęty, nie możesz go schować w garażu. + 载具是租赁的,不能存放在你的仓库里。 + + + Thank you for returning the rental vehicle. + Děkujeme za vrácení zapůjčeného vozidla. + Gracias por devolver el vehículo de alquiler. + Спасибо, что вернул автомобиль в аренду. + Vielen Dank für die Rückgabe des Mietwagens. + Nous vous remercions de nous avoir rendu le véhicule de location. + Grazie per aver restituito il veicolo a noleggio. + Obrigado por devolver o veículo alugado. + Dziękuję za zwrot wypożyczonego pojazdu. + 感谢您归还租车。 + + + That vehicle doesn't belong to you therefor you cannot store it in your garage. + Co vozidlo nepatří k vám proto jej nelze ukládat ve vaší garáži. + Este vehículo no es tuyo! Asi que no lo puedes guardar. + + Das Fahrzeug gehört nicht dir und kann deshalb nicht in der Garage geparkt werden. + Ce véhicule ne vous appartient pas, vous ne pouvez pas le stocker dans votre garage. + Il veicolo non ti appartiene e quindi non puoi depositarlo nel tuo garage. + Você não é o proprietário desse veiculo, logo não poderá guarda-lo na garagem. + Pojazd nie należy do ciebie nie możesz go schować w garażu. Ale zawsze możesz podjechać do dziupli! + 载具不属于你,所以你不能把它存放在仓库里。 + + + The vehicle has been stored in your garage. + Vozidlo bylo uložené v garáži. + Has guardado el vehículo en el garaje. + + Das Fahrzeug wurde in die Garage eingeparkt. + Le véhicule a été entreposé dans le garage. + Il veicolo è stato depositato nel tuo garage. + O veículo foi guardado na sua garagem. + Pojazd został zaparkowany. + 载具已存放在你的仓库里. + + + Your vehicle is ready! + Vaše vozidlo je připraven! + Tu vehículo esta listo! + + Dein Fahrzeug steht bereit! + Votre véhicule est prêt. + Il tuo veicolo è pronto + O seu veículo está pronto + Pojazd jest gotowy + 你的载具准备好了! + + + The server is trying to store the vehicle... + Tento server se pokouší uložit vozidlo ... + El servidor esta tratando de guardar el vehículo... + + Der Server versucht, das Fahrzeug einzuparken... + Le serveur tente de stocker le véhicule... + Il server sta cercando di depositare il veicolo... + O servidor está guardando o veiculo... + Serwer próbuje schować pojazd w garażu ... + 服务器正试图存储载具... + + + The selection had a error... + Volba obsahuje chybu ... + Huvo un error en la selección... + + Die Auswahl hat einen Fehler... + La sélection a une erreur... + La selezione ha avuto un errore... + Erro ao selecionar.... + Ten wybór powoduje błąd + 选择有错误... + + + There isn't a vehicle near the NPC. + Není vozidla v blízkosti NPC. + No hay un vehículo cerca del NPC. + + Es befindet sich kein Fahrzeug in der Nähe des NPC. + Il n'y a pas de véhicule près du PNJ. + Non c'è alcun veicolo vicino all'NPC. + Não existe um veículo proximo ao NPC + Nie ma pojazdu w pobliżu NPC + NPC附近没有载具。 + + + Are you sure you want to sell your %1 for $%2? + Opravdu chcete prodat svůj %1 za $%2? + ¿Estás seguro de que quieres vender tu %1 por $%2? + Вы уверены, что хотите продать свой %1 за $%2? + Bist du sicher, dass du deine(n) %1 für $%2 verkaufen möchtest? + Êtes-vous sûr de vouloir vendre votre %1 pour $%2 ? + Siete sicuri di voler vendere la vostra %1 per $%2? + Tem a certeza que quer vender a sua %1 por $%2? + Jesteś pewien, że chcesz sprzedać swój %1 za $%2? + 你确定要把你的%1卖给%2? + + + Sell vehicle + Prodat vozidlo + Vender el vehículo + Продать автомобиль + Fahrzeug verkaufen + Vendre un véhicule + Vendere il veicolo + Vender veículo + Sprzedaj pojazd + 出售车辆 + + + + + Key Chain - Current List of Keys + Klíčenka - Aktuální seznam klíčů + Llavero - Lista de llaves + + Schlüsselbund - Aktuelle Liste + Porte-clés - Liste actuelle des clés + Portachiavi - Lista delle Chiavi + Chaves - Atual Lista de Chaves + Lista kluczyków + 钥匙 - 当前列表 + + + Drop Key + Drop Key + Tirar llave + + Wegwerfen + Jeter Clef + Abbandona Chiave + Remover Chave + Wyrzuć klucz + 丢弃钥匙 + + + Give Key + dát klíč + Dar Llave + + Geben + Donner Clef + Dai Chiave + Dar Chave + Daj klucz + 给予钥匙 + + + + + Player Menu + Nabídka přehrávače + Menu de Jugador + + Spieler Menü + Menu du Joueur + Menu Giocatore + Menu Jogador + Menu gracza + 玩家菜单 + + + Current Items + Aktuální položky + Objetos Actuales + + Aktuelle Gegenstände + Items Actuels + Oggetti Attuali + Items Atuais + Aktualne wyposażenie: + 当前物品 + + + Licenses + licencí + Licencias + + Lizenzen + Licences + Licenze + Licenças + Licencje + 许可证 + + + Money Stats + peníze Statistiky + Dinero + + Geld Statistik + Stats Monétaires + Statistiche Fondi + Dinheiro + Twoje środki + 资产统计 + + + My Gang + My Gang + Mi Pandilla + + Meine Gang + Mon Gang + Mia Gang + Gangue + Gang + 我的帮派 + + + Wanted List + seznamu hledaných + Lista de Busqueda + + Fahndungsliste + Interpol + Lista Ricercati + Lista de Foragidos + Poszukiwani + 通缉名单 + + + Cell Phone + Mobilní telefon + Celular + + Telefon + Téléphone + Cellulare + Celular + Telefon + 短消息 + + + Key Chain + Klíčenka + Llavero + + Schlüssel + Porte-clés + Portachiavi + Chaves + Klucze + 钥匙 + + + Admin Menu + Nabídka admin + Menu Admin + + Admin Menü + Menu Admin + Menu Admin + Menu Admin + Admin Menu + 管理菜单 + + + Sync Data + synchronizace dat + Sincronizar + + Speichern + Sync Data + Salva Dati + Sincronizar Dados + Synchronizuj + 同步数据 + + + + + Settings Menu + Nabídka Nastavení + Configuración + + Einstellungen + Menu Paramètres + Menu Impostazioni + Configurações + Ustawienia: + 设置菜单 + + + On Foot: + Pěšky: + A Pie: + + Zu Fuß: + A pied : + A piedi: + A Pé: + Na nogach: + 步行: + + + In Car: + V autě: + En Carro: + + Im Auto: + En voiture : + Auto: + No Carro: + W aucie: + 载具: + + + In Air: + Ve vzduchu: + En Aire: + + Im Himmel: + Air + Aria: + No Ar: + W powietrzu: + 空中: + + + View distance while on foot + Pohled vzdálenost, zatímco na nohy + Distancia de vista a pie + + Sichtweite zu Fuß + Distance de vue à pied + Distanza visiva a piedi + Visualizar distância enquanto a pé + Widoczność gdy na nogach + 视距 + + + View distance while in a land vehicle + Pohled vzdálenost, zatímco v pozemního vozidla + Distancia de vista en vehiculo terrestre + + Sichtweite in Landfahrzeugen + Distance de vue en véhicule terrestre + Distanza visiva su veicolo di terra + Visualizar distância enquanto em veículos terrestres + Widoczność gdy w aucie + 在陆地载具中观察距离 + + + View distance while in a air vehicle + Pohled vzdálenost, zatímco ve vzduchu vozidle + Distancia de vista en vehiculo aéreo + + Sichtweite in Luftfahrzeugen + Distance de vue en véhicule aérien + Distanza visiva su velivolo + Visualisar distância enquanto em veículos aéreos + Widoczność gdy w powietrzu + 在飞行器上观察距离 + + + Player Tags + přehrávač Tags + Marcador de Jugadores + + Spielernamen + Tags Joueurs + Tag Giocatore + Tags de Jogadores + Tagi graczy + 玩家标签 + + + Tags ON + značky na + Tags ON + + Namen AN + Tags ON + Tags ON + Tags ON + Tagi ON + 启用标签 + + + Tags OFF + Štítky OFF + Tags OFF + + Namen AUS + Tags OFF + Tags OFF + Tags OFF + Tagi OFF + 关闭标签 + + + Sidechat Switch + Sidechat Spínač + Canal Side + Habilitar Sidechat + Interruttore Sidechat + Sidechat Przełącznik + + Habilitar Sidechat + Sidechat umschalten + 聊天框开关 + + + Reveal Nearest Objects + Reveal Nejbližší objekty + Révéler les objets les plus proches + Revelar Objetos Cercanos + Rivela oggetti più vicini + Odsłonić Najbliższa Przedmioty + + Mostrar Objetos Próximos + Nahe Objekte anzeigen + 显示最近的物体 + + + Broadcast Switch + + Interrupteur de Transmission + Habilitar Transmisiones + + + + Habilitar Transmissões + Broadcast umschalten + 广播开关 + + + Sidechat OFF + Sidechat OFF + Sidechat OFF + + Sidechat AUS + Canal camp OFF + Chat fazione OFF + Sidechat OFF + Czat strony OFF + 聊天关闭 + + + Sidechat ON + Boční Chat ON + Sidechat OFF + + Sidechat AN + Canal camp ON + Chat fazione ON + Sidechat ON + Czat strony ON + 聊天开启 + + + + + Shop Inventory + Obchod Zásoby + Inventario de Tienda + + Ladeninventar + Boutique + Inventario Negozio + Loja de Inventário + Oferta sklepu + 店铺库存 + + + Your Inventory + Váš Inventory + Tu Inventario + + Eigenes Inventar + Votre Inventaire + Inventario Personale + Seu Inventário + Twoje wyposażenie + 你的库存 + + + Buy Item + Koupit Item + Comprar + + Kaufen + Acheter Objet + Compra Oggetto + Comprar Item + Kup objekt + 买东西 + + + Sell Item + Navrhujeme Item + Vender + + Verkaufen + Vendre Objet + Vendi Oggetto + Vender Item + Sprzedaj obiekt + 卖东西 + + + + + Spawn Selection + potěr Selection + Selección de Spawn + + Aufwachpunkt Auswahl + Sélection du Spawn + Selezione Spawn + Locais para Começar + Wybierz punkt odrodzenia + 选择重生点 + + + Spawn + Potěr + Spawn + + Aufwachen + Spawn + Spawn + Começar + Odradzanie + 重生 + + + Current Spawn Point + Aktuální potěr Point + Punto de Spawn Actual + + Aktueller Aufwachpunkt + Point de Spawn Actuel + Punto di Spawn corrente + Ponto de início Atual + Aktualny punkt odrodzenia + 目前的重生点 + + + You have spawned at + Jste třel + Has aparecido en + + Du bist aufgewacht in + Tu as spawn à + Ti trovi a + Você irá começar em + Odrodziłeś się w + 你重生了 + + + + + Give Ticket + Dejte Ticket + Dar Tiquete + + Ticket geben + Verbaliser + Dai Multa + Dar Multa + Wystaw mandat + 开据罚单 + + + Pay Ticket + Pay vstupenek + Pagar Tiquete + + Ticket bezahlen + Payer l'amende + Paga Multa + Pagar Multa + Zapłać mandat + 支付罚款 + + + Refuse Ticket + odmítnout Ticket + Denegar Tiquete + + Ticket ablehnen + Refuser l'amende + Rifiuta Multa + Recusar Multa + Odmów przyjęcia mandatu + 拒绝缴款 + + + + + Trunk Inventory + kufr Inventory + Inventario del Vehículo + + Kofferraum + Coffre + Inventario Veicolo + Inventário do Veículo + Zawartość + 库存清单 + + + Player Inventory + hráč Inventory + Inventario del Jugador + + Spielerinventar + Inventaire Joueur + Inventario Giocatore + Inventário do Jogador + Wyposażenie gracza + 玩家清单 + + + Take + Vzít + Sacar + + Nehmen + Récupérer + Prendi + Pegar + Weź + 取出 + + + Store + Obchod + Guardar + + Lagern + Déposer + Deposita + Depositar + Schowaj + 存储 + + + + + APD Wanted List + LAPD seznamu hledaných + Lista de Busqueda + + Fahndungsliste + Interpol + Lista Ricercati + Lista APD Poszukiwane + Lista de Procurados + 通缉名单 + + + Pardon + Pardon + Perdonar + + Erlassen + Pardonner + Perdona + Pardon + Perdão + 赦免 + + + Add + Přidat + Ajouter + Agregar + Aggiungere + Dodaj + + Adicionar + Hinzufügen + 添加 + + + Wanted People + chtěl, aby lidé + Personnes recherchées + Gente Buscada + La gente voleva + Ludzie chcieli + + Pessoas Procuradas + Gesuchte Personen + 通缉犯 + + + Citizens + občané + Citoyens + Ciudadanos + cittadini + Obywatele + + Cidadãos + Bürger + 公民 + + + Crimes + Zločiny + Crimes + Crimenes + crimini + Zbrodnie + + Crimes + Verbrechen + 罪犯 + + + %1 has been added to the wanted list. + %1 byl přidán do seznamu hledaných. + %1 a été ajouté à la liste des personnes recherchées. + %1 ha sido agregado a la Lista de Busqueda. + %1 è stato aggiunto alla lista dei ricercati. + %1 został dodany do listy pożądanego. + + %1 foi adicionado a lista de procurados. + %1 wurde zur Fahndungsliste hinzugefügt. + %1 已添加到通缉名单. + + + %1 count(s) of %2 + Počet%1 (y) z %2 + %1 chef (s) de %2 + %1 cuenta(s) de %2 + %1 count (s) del %2 + %1 count (ów) z %2 + + %1 contagem(s) de %2 + %1 Vergehen: %2 + %1 违法(次数) %2 + + + Current Bounty Price: $%1 + Aktuální Bounty Cena: $ %1 + Prix de la prime: $%1 + Recompensa Actual: $%1 + Corrente Bounty Prezzo: $%1 + Aktualny Bounty Cena: $%1 + + Atual recompensa: R$%1 + Aktuelle Prämie: $%1 + 目前的赏金: $%1 + + + + + Salema + Salema + Salema + + Sardine + Saumon + Salmone + Salema + Salema + 加州异鳍石鲈 + + + Ornate + Vyšperkovaný + Ornate + + Kaiserfisch + Doré + Orata + Ornamentado + Dorada + 橙带蝴蝶鱼 + + + Mackerel + Makrela + Verdel + + Makrele + Maquereau + Sgombro + Cavalinha + Makrela + 鲭鱼 + + + Tuna + Tuňák + Atún + + Thunfisch + Thon + Tonno + Atum + Tuńczyk + 金枪鱼 + + + Mullet + cípal + Lisas + + Meerbarbe + Mullet + Triglia + Tainha + Cefal + 梭鱼 + + + Cat Shark + Cat žralok + Pez Gato + + Katzenhai + Poisson Chat + Squalo + Tubarão Gato + Rekin + 鲨鱼 + + + Rabbit + Králičí + Conejo + + Hase + Lapin + Coniglio + Coelho + Zając + 兔子 + + + Chicken + Kuře + Gallina + + Hühnchen + Poulet + Pollo + Frango + Kurczak + 雏鸡 + + + Rooster + Kohout + Gallo + + Hähnchen + Coq + gallo + galo + kogut + 公鸡 + + + Goat + Koza + Cabra + + Ziege + Chèvre + Capra + Cabra + Koza + 山羊 + + + Sheep + Ovce + Obeja + + Schaf + Mouton + pecora + ovelha + Owca + 绵羊 + + + Turtle + Želva + Tortuga + + Schildkröte + Tortue + Tartaruga + Tartaruga + żółw + 乌龟 + + + + + You do not have $%1 for a %2 + Nemáte $%1 pro%2 + No tienes $%1 para una %2 + + Du hast keine $%1 für einen %2. + Vous n'avez pas %1$ pour cet élément : %2 + Non hai $%1 per $2 + Você não tem R$%1 para %2 + Nie masz $%1 na %2 + 你没有 $%1 支付 %2 + + + You bought a %1 for $%2 + Koupil sis%1 pro $ %2 + Comprastes una %1 por $%2 + + Du hast einen %1 für $%2 gekauft. + Vous avez acheté : %1 pour %2$ + Hai comprato un %1 per $%2 + Você comprou %1 por R$%2 + Kupiłeś %1 za $%2 + 你购买 %1 花费 $%2 + + + %1 was arrested by %2 + %1 byl zatčen%2 + %1 fue arrestado por %2 + + %1 wurde von %2 verhaftet. + %1 a été arrêté par %2 + %1 è stato arrestato da %2 + %1 foi preso por %2 + %1 został aresztowany przez %2 + %1 被 %2 逮捕 + + + You caught a %1 + chytil jste%1 + Atrapastes un %1 + + Du hast einen %1 gefangen. + Vous avez attrapé un %1 + Hai pescato %1 + Você pegou %1 + Złapałeś %1 + 你逮捕了 %1 + + + Gutting %1 + Kuchání%1 + Eviscerando %1 + + %1 ausnehmen + Eviscération de %1 + eviscerazione %1 + evisceração %1 + Patroszenie %1 + 去除 %1 的内脏 + + + You have collected some raw %1 meat + Nasbíráte nějaké syrové maso %1 + Has recolectado carne cruda de %1 + + Du hast rohes %1 Fleisch erhalten. + Vous avez récolté quelques morceaux de %1 cru + You have collected some raw %1 meat + You have collected some raw %1 meat + You have collected some raw %1 meat + 你已经从 %1 收集生肉 + + + You have taken some turtle meat + Jste si vzali nějaké želví maso + Has tomado carne de tortuga. + + Du hast etwas Schildkrötenfleisch bekommen. + Vous avez récupéré un peu de viande de tortue + Hai raccolto della carne di tartaruga + Você pegou carne de tartaruga + Wziąłeś trochę mięsa żółwia + 你吃了一些海龟肉 + + + You have earned $%1 + Jste získali $%1 + Has ganado $%1 + + Du hast $%1 verdient. + Vous avez gagné %1$ + Hai guadagnato $%1 + Você ganhou R$%1 + Otrzymałeś $%1 + 你赚了 $%1 + + + Dropping fishing net... + Pád rybářská síť ... + Tirando red de pesca... + + Fischernetz auswerfen... + Déploiement du filet de pêche... + Posizionando la rete da pesca... + Jogando rede de pesca... + Rzucam sieć... + 撒下鱼网... + + + Didn't catch any fish... + Nezachytil žádnou rybu ... + No atrapastes peces... + + Keinen Fisch gefangen... + Vous n'avez pas réussi à attraper de poisson... + Non hai pescato nulla... + A rede voltou vazia... + Nic nie złapałeś... + 没有捕到任何鱼... + + + Fishing net pulled up. + Rybářská síť vytáhl nahoru. + Recogistes la red. + + Fischernetz eingeholt. + Le filet de pêche a été entièrement relevé. + Rete da pesca recuperata. + A rede de pesca foi recolhida + Sieć wciągnięta. + 拉起渔网。 + + + Your inventory space is full. + Váš inventář prostor je plný. + No tienes espacio en tu inventorio. + + Dein Inventar ist voll. + Vous n'avez plus de place dans votre inventaire. + Il tuo inventario è pieno. + Seu inventário está cheio + Nie masz więcej miejsca. + 您的库存空间已满。 + + + Gathering %1... + Sběr%1 ... + Recolectando %1... + + Sammle %1... + Ramassage de %1... + Raccogliendo %1 + Coletando %1... + Zbierasz %1 + 采集 %1... + + + You have sold a %1 for $%2 + Jste prodal%1 pro $ %2 + Has vendido un %1 por $%2 + + Du hast einen %1 für $%2 verschrottet. + Vous avez vendu un(e) %1 pour $%2 + Hai venduto un %1 per %2$ + Você vendeu %1 por R$%2 + Sprzedałeś %1 za $%2 + 你卖掉 %1 赚了 $%2 + + + You have picked %1 %2 + Jste si vybrali% %1 2 + Has recogido %1 %2 + + Du hast %1 %2 aufgenommen. + Vous avez ramassé : %1 %2 + Hai trovato %1 %2 + Você pegou %1 %2 + Podniosłeś %1 %2 + 你采集了 %1 个 %2 + + + You have collected some %1 + Jste nasbírali řadu%1 + Has recolectado %1 + + Du hast etwas %1 gesammelt. + Vous avez récolté %1 + Hai raccolto %1 + Você coletou %1 + Wziąłeś %1 + 你采集了一些 %1 + + + You are to deliver this package to %1. + Jste doručit tento balíček %1 + Debes llevar este paquete a %1 + + Du musst dieses Paket bei %1 abliefern. + Vous avez livré ce paquet à %1 + Devi consegnare questo pacco al %1 + Você deverá entregar esse pacote para %1 + Dostarcz tę przesyłkę do %1 + 你要递送这个包裹到 %1。 + + + Deliver this package to %1. + Doručit tento balíček %1 + LLeva el paquete a: %1 + + Liefere dieses Paket bei %1 ab. + Livrer ce paquet à %1. + Consegna questo pacco al %1 + Entregue esse pacote para %1 + Dostarcz przesyłkę do %1 + 把这个包裹送到 %1。 + + + You failed to deliver the package because you died. + Nepodařilo se vám doručit balíček, protože jsi zemřela. + Fallastes la misión, porque moristes. + + Da du gestorben bist, hast du es nicht geschafft das Paket abzuliefern. + Vous êtes mort, livraison annulée. + Compra Oggetto + Você falhou na tarefa de entrega pois você morreu. + Nie dostarczyłeś przesyłki z uwagi na to że zmarłeś. + 因为你死了,所以你没能投递包裹。 + + + You do not have $%1 to be healed + Nemáte $%1, aby se léčil + No tienes $%1 para ser curado + + Du hast keine $%1, um behandelt zu werden. + Vous n'avez pas $%1 pour être soigné. + Non hai $%1 per essere curato + Você não tem R$%1 para ser curado + Nie masz $%1 na leczenie + 你没有 $%1 治疗费 + + + You do not need to be healed! + Nemusíte být uzdraven! + Vous êtes déjà en pleine forme ! + Usted no necesita ser curado! + Non è necessario essere guarito! + Nie trzeba się wyleczyć! + Você não precisa ser curado! + Вам не нужно быть исцелены! + Du brauchst keine Behandlung! + 你不需要治疗! + + + Spend $%1 to be fully healed? + Útrata $%1 musí být zcela vyléčit? + Donner $%1 pour être complètement guéri ? + Gastar $%1 para ser curado por completo? + Spendere $%1 di essere completamente guarito? + Wydać $%1 w pełni uzdrowiony? + Gastar US $%1 para ser totalmente curado? + Потратит $%1, чтобы быть полностью зажила? + Willst du dich für $%1 vollständig behandeln lassen? + 花费 $%1 痊愈? + + + Doctor + Doktor + Docteur + Médico + Medico + Lekarz + Médico + Врач + Arzt + 医疗人员 + + + Please stay still + Prosím, zůstat v klidu + Por favor, no te muevas + + Bitte bewege dich nicht! + Ne bougez pas + Attendi pazientemente + Fique parado por favor + Proszę się nie ruszać + 请不要动 + + + You need to be within 5m while the doctor is healing you + Musíte být v rámci 5m, zatímco lékař vás hojení + Debes estar a 5m mientras que te curan. + + Du musst in der Nähe vom Arzt bleiben, damit er dich behandeln kann. + Vous devez être à moins de 5m du médecin pendant qu'il vous soigne. + Devi restare entro 5m dal dottore per essere curato + Você tem que estar a 5m para o médico curá-lo + Musisz być w pobliżu doktora gdy ten cię leczy - ok 5m + 医疗人员在治疗你的时候,你必须在5米以内 + + + You are now fully healed. + Ty jsou nyní plně uzdravil. + Estas curado! + + Du wurdest behandelt. + Vous êtes completement soigné. + Sei stato curato completamente. + Sua saúde está perfeita + Zostałeś wyleczony + 你现在痊愈了。 + + + %1 your %2 is being impounded by the police. + %1 Váš%2 je zabaveno policií. + %1 tu %2 esta siendo embargado por la policía. + + %1 dein %2 wird von der Polizei beschlagnahmt! + %1, votre %2 est en train d'être envoyé à la fourrière par la police. + %1 il tuo %2 sta per essere sequestrato dalla Polizia. + %1 seu %2 está sendo apreendido pela Polícia + %1 twój %2 jest usuwany przez Policję + %1 的 %2 正在被警察扣留。 + + + Impounding Vehicle + vzdouvání Vehicle + Embargando Vehículo + + Fahrzeug wird beschlagnahmt + Mise en fourrière + Sequestro Veicolo in corso + Apreendendo veículo + Usuwam pojazd + 扣留载具 + + + Impounding has been cancelled. + Zabavení byla zrušena. + Embargo cancelado. + + Beschlagnahmung abgebrochen. + Mise en fourrière annulée. + Il sequestro è stato annullato. + Ação de apreender foi cancelada + Przerwano usuwanie pojazdu + 扣留已被取消. + + + You have impounded a %1\n\nYou have received $%2 for cleaning up the streets! + Jste zabaveno a %1 \n\n jste obdržel $%2 pro čištění ulic! + Has embargado un %1\n\nHas recibido $%2 por limpiar las calles! + + Du hast einen %1 beschlagnahmt\n\nDu hast $%2 für das Aufräumen der Straßen bekommen! + Vous avez mis en fourrière un(e) %1\n\nVous avez reçu $%2. + Hai sequestrato un %1\n\nHai ricevuto $%2 per aver mantenuto l'ordine nelle strade! + Você apreendeu %1\n\nVocê recebeu R$%2 por deixar as ruas mais seguras! + Usunąłeś %1\n\n Otrzymujesz $%2 za oczyszczanie mapy + 你扣留了 %1\n\你收到了 $%2 扣留费! + + + %1 has impounded %2's %3 + %1 byl odtažen% %2 3 je + %1 a embargado el %3 de %2 + + %1 hat %2's %3 beschlagnahmt. + %1 a mis en fourrière le %3 de %2. + %1 ha sequestrato il %2 di %3 + %1 apreendeu %3 de %2 + %1 usunął %2's %3 + %1 扣留了 %2 的 %3 + + + You paid $%1 for impounding your own %2. + Zaplatil jste $%1 pro vzdouvání vlastní %2. + Vous avez payé $%1 pour la mise en fourrière de votre propre %2. + Has pagado $%2 para embargar tu propio %1. + Hai pagato $%1 per sequestro la propria %2. + Zapłaciłeś $%1 do zatrzymywania własną %2. + + Du hast $%1 bezahlt, weil du dein eigenen %2 beschlagnahmt hast. + Você pagou R$%1 para guardar seu próprio %2. + 你支付 $%1 取出了被扣留的 %2. + + + Abort available in %1 + Přerušit k dispozici v %1 + Aborto disponible en %1 + + Déconnexion disponible dans %1 + Abbruch möglich in %1. + Abbandona disponibile in %1 + Abortar disponível em %1 + Możesz przerwać za %1 + 距离下线时间 %1 + + + This vehicle is already mining + Toto vozidlo je již dobývání + Este Vehículo ya esta minando + + Dieses Fahrzeug ist bereits am Abbauen. + Ce véhicule est déjà en train de miner + Questo veicolo sta già estraendo risorse + Esse veículo já está minerando + Pojazd jest w trakcie wydobycia surowców + 载具已经在开采了 + + + The vehicle is full + Vozidlo je plná + El vehículo esta lleno! + + Das Fahrzeug ist voll. + Le véhicule est plein. + Il veicolo è pieno + O veículo está cheio. + Pojazd jest pełny + 载具库存已满 + + + You are not near a resource field + Nejste v blízkosti oblasti zdrojů + No estas cerca de un campo de recursos. + + Du bist nicht in der Nähe eines Ressourcenfeldes. + Vous n'êtes pas à proximité d'un champ de ressources. + Non sei vicino ad un campo risorse + Você não está próximo ao recurso + Nie jesteś w pobliżu pola surowców + 你不在资源区域附近 + + + You cannot turn the vehicle on when mining + Nemůžete otočit vozidlo o tom, kdy výtěžek + No puedes girar el vehículo mientras esta minando + + Du kannst das Fahrzeug nicht starten, solange es am Abbauen ist. + Le moteur doit être arrêté pour que le véhicule puisse miner + Non puoi accendere il veicolo mentre estrae risorse + Você não pode ligar o veículo enquanto minera + Nie możesz poruszać pojazdem w trakcie wydobycia. + 开采时不能打开载具 + + + The Device is mining... + Zařízení je důlní ... + El Dispositivo esta minando... + + Das Fahrzeug baut ab... + Le véhicule est en train de miner... + Il veicolo sta estrando risorse... + A máquina está minerando... + Trwa wydobycie... + 设备正在开采... + + + Completed cycle, the device has mined %1 %2 + Dokončena cyklus, přístroj se těžil% %1 2 + Ciclo completado el dispositivo ha minado %1 %2 + + Sammeln beendet, das Fahrzeug hat %1 %2 abgebaut. + Cycle terminé, le véhicule a miné %1 %2 + Ciclo completato, il veicolo ha raccolto %1 %2 + Ciclo completo, a máquina minerou %1 %2 + Urządzenie wydobyło %1 %2 + 完成一个开采周期,设备已开采 %1 %2 + + + Vehicle is out of fuel + Vozidlo je mimo pohonné hmoty + El vehículo no tiene gasolina. + + Das Fahrzeug hat keinen Treibstoff mehr. + Le véhicule n'a plus de carburant. + Il veicolo è senza carburante + O veículo está sem combustível + Brak paliwa w pojezdzie + 载具燃料不足 + + + You have packed up the spike strip. + Jste sbalil spike proužek. + Has agarrado la Barrera de Clavos. + + Du hast das Nagelband eingepackt. + Vous avez récupéré la herse. + Hai raccolto una striscia chiodata. + Você recolheu o tapete de espinhos. + Kolczatka zwinięta + 你铺设了钉刺带。 + + + %1 has been placed in evidence, you have received $%2 as a reward. + %1 byl umístěn v důkazu, jste obdrželi $%2 jako odměnu. + %1 ha sido colocado en evidencias, has recibido $%2 como recompensa. + + %1 hat Beweise hinterlassen, als Belohnung erhälst du $%2. + Vous avez mis sous scellé la drogue de %1, vous avez reçu $%2 comme récompense. + E' stata trovata della merce illegale: %1, hai ricevuto $%2 come ricompensa. + %1 foi pego como evidência, você recebeu R$%2 como recompensa. + %1 umieszczony w dowodach, otrzymujesz w nagrodę $%2 + %1 已经被送入监狱,你已经收到了 $%2 作为奖励. + + + You have picked up $%1 + Jste zvedl $%1 + Has recogido $%1 + + Du hast $%1 aufgehoben. + Vous avez ramassé $%1 + Hai raccolto $%1 + Você pegou R$%1 + Podniosłeś $%1 + 你捡到了 $%1 + + + You must wait at least 3 minutes in jail before paying a bail. + Musíte počkat nejméně 3 minuty ve vězení předtím, než platit kauci. + Debes esperar un minimo de 3 minutos en la cárcel antes de poder pagar la fianza. + + Du musst mindestens 3 Minuten lang im Gefängnis bleiben, bevor du die Kaution beantragen kannst. + Vous devez attendre au moins 3 minutes en prison avant de pouvoir payer votre caution. + Devi aspettare almeno 3 minuti in prigione prima di poter pagare la cauzione. + Você precisa esperar pelo menos 3 minutos antes de poder pagar fiança. + Musisz poczekać conajmniej 3 minuty w więzieniu zanim zapłacisz kaucję. + 在保释之前,你必须至少在监狱里呆3分钟。 + + + You do not have $%1 in your bank account to pay bail. + Nemáte $%1 z vašeho bankovního účtu platit kauci. + No tienes $%1 en tu cuenta de banco para pagar la fianza! + + Du hast keine $%1 auf deinem Bankkonto, um die Kaution zu bezahlen. + Vous n'avez pas $%1 dans votre compte en banque pour payer la caution. + Non hai $%1 nel tuo conto in banca per poter pagare la cauzione. + Você não tem R$%1 em sua conta bancária para pagar a fiança. + Nie masz $%1 na koncie aby zapłacić kaucję. + 你的银行账户没有 $%1 的金额。 + + + %1 has posted bail! + %1 byl vyslán na kauci! + %1 a pagado la fianza! + + %1 hat die Kaution bezahlt! + %1 a payé sa caution ! + %1 ha pagato la cauzione! + %1 pagou a fiança! + %1 wpłacił kaucję! + %1 已保释! + + + There isn't a vehicle nearby... + Není vozidlo v blízkosti ... + No hay un vehículo cerca... + + Es ist kein Fahrzeug in der Nähe... + Il n'y a pas de véhicule à proximité... + Non c'è alcun veicolo qui vicino... + Não existe um veículo por perto... + W pobliżu nie ma pojazdu... + 附近没有载具... + + + You can't chop a vehicle while a player is near! + Nemůžeš sekat vozidla, zatímco hráč je blízko! + Vous ne pouvez pas vendre un véhicule alors que son propriétaire est à proximité ! + No puedes vender este vehículo mientras hay un jugador cerca! + Non si può rubare un veicolo mentre un giocatore è vicino! + Nie można posiekać pojazd podczas gdy gracz jest w pobliżu! + + Você não pode usar o desmanche enquanto um jogador está próximo! + Du kannst kein Fahrzeug beim Schrotthändler verschrotten, während ein Spieler in der Nähe ist! + 当玩家靠近时,你不能盗窃载具! + + + %1 was restrained by %2 + %1 byl omezen%2 + %1 fue retenido por %2 + + %1 wurde von %2 festgenommen + %1 a été menotté par %2 + %1 è stato ammanettato da %2 + %1 foi imobilizado por %2 + %1 został skuty przez %2 + %1 被 %2 约束 + + + Searching... + Hledám ... + Buscando... + + Durchsuche... + Recherche... + Ricerca... + Revistando... + Szukam... + 搜查... + + + Couldn't search the vehicle + Nemohli vyhledávat na vozidlo + No se pudo buscar el vehículo. + + Das Fahrzeug konnte nicht durchsucht werden! + Impossible de fouiller le véhicule. + Impossibile ispezionare il veicolo + Você não pode revistar o veículo + Nie można przeszukać pojazdu + 不能搜查载具 + + + Your illegal items have been put into evidence. + Vaše nelegálních položky byly uvedeny do důkazy. + Tus objetos ilegales fueron confiscados. + + Deine illegalen Gegenstände wurden als Beweismittel eingezogen. + Vos objets illégaux ont été mis sous scellé. + I tuoi articoli illegali sono stati messi sotto sequestro. + Seus itens ilegais foram postos em evidência. + Twoje nielegalne pozycje zostały wprowadzone do dowodów. + 你的非法物品被查获。 + + + This vehicle has no information, it was probably spawned in through cheats. \n\nDeleting vehicle. + Toto vozidlo nemá žádné informace, to bylo pravděpodobně třel dovnitř podvodníky. \ In \ Odstranění vozidla. + Este vehículo no tiene informacion, posiblemente fue creado atravez de Cheats \n\nBorrando vehículo. + + Über das Fahrzeug gibt es keine Informationen, es wurde vermutlich durch Cheats gespawnt. \n\nLösche das Fahrzeug. + Ce véhicule ne dispose d'aucune information, il a probablement été créé par un hackeur. \n\ Suppression du véhicule. + Il veicolo è privo di identificativi, probabilmente è stato creato mediante cheat. \n\nCancellazione veicolo. + Esse veículo não tem informações, é provável que ele tenha sido criado por um cheater.\n\nDeletando veículo. + Pojazd bez informacji servera, prawdopodobnie umieszczony przez hakera \n\n usuwam pojazd. + 这载具没有任何信息, 它可能是通过作弊产生的. \n\n删除载具。 + + + You are already doing an action. Please wait for it to end. + Ty jsou již dělá akci. Počkejte prosím, až to skončí. + Ya estas haciendo una acción, espera a que termine. + + Du führst bereits eine Aktion aus. Bitte warte, bis diese beendet ist. + Vous faites déjà une action. Merci d'attendre la fin de celle-ci. + Stai già compiendo un'azione, attendi che finisca. + Você já está executando uma ação. Por favor espere até que ela acabe. + Aktualnie wykonujesz jakąś akcję poczekaj aż skończysz. + 你已经在行动了.请等待结束. + + + %1 was unrestrained by %2 + %1 byl živelný%2 + %1 fue soltado por %2 + + %1 wurde von %2 freigelassen. + %1 a été démenotté par %2. + %2 ha tolto le manette a %1 + %1 foi liberado por %2 + %1 został rozkuty przez %2 + %1 摆脱了 %2 的约束 + + + %1 has robbed %2 for $%3 + %1 oloupil%2 na $ %3 + %1 le ha robado $%3 a %2 + + %1 hat $%3 von %2 geraubt. + %1 a volé %2 pour $%3. + %1 ha rapinato %2 di $%3 + %1 roubou R$%3 de %2 + %1 obrabował $%2 na $%3 + %1 抢劫了 %2 金钱 $%3 + + + %1 doesn't have any money. + %1 nemá žádné peníze. + %1 No tiene dinero. + + %1 hat kein Geld. + %1 n'a pas d'argent. + %1 non ha alcun soldo. + %1 não tem nenhum dinheiro. + %1 nie ma pieniędzy. + %1 身无分文。 + + + %1 was tazed by %2 + %1 byl tased%2 + %1 fue paralizado por %2 + + %1 wurde von %2 getazert. + %1 a été tazé par %2. + %1 è stato taserato da %2 + %1 foi eletrocutado por %2 + %1 został potraktowany paralizatorem przez %2 + %1 被 %2 约束 + + + A vehicle was searched and has $%1 worth of drugs / contraband. + Vozidlo byl prohledán a má $%1 v hodnotě drog / kontrabandu. + Un vehículo fue buscado y se econtro $%1 en drogas / contrabando. + + Ein Fahrzeug wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. + Un véhicule venant d'être fouillé avait $%1 de drogue / contrebande. + Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. + O veículo foi revistado e tem R$%1 em drogas ou contrabandos + Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 + 搜查载具查获价值 $%1 的毒品/违禁品。 + + + A container of house was searched and has $%1 worth of drugs / contraband. + Kontejner domu byl prohledán a má $%1 v hodnotě drog / kontrabandu. + Un contenedor fue buscado y se econtro $%1 en drogas / contrabando. + + Ein Container im Haus wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $%1 gefunden. + Un conteneur de maison venant d'être fouillé avait $%1 de drogue / contrebande. + Un veicolo è stato ispezionato e sono stati sequestrati $%1 in materiale illegale. + O veículo foi revistado e tem R$%1 em drogas ou contrabandos + Podczas przeszukania znalezono narkotyki/kontrabandę o wartości $%1 + 搜查房子存储箱查获价值 $%1 的毒品/违禁品. + + + You have been pulled out of the vehicle. + Byli jste vytáhl z vozu. + Te han sacado del vehículo + + Du wurdest aus dem Fahrzeug gezogen. + Vous avez sorti les personnes du véhicule. + Sei stato estratto dal veicolo + Você foi retirado do veículo + Zostałeś wyciągnięty z pojazdu + 你从车里被拖出来了。 + + + %1 has gave you %2 %3. + %1 vám již dal% %2 3. + %1 te ha dado %2 %3 + + %1 hat dir %2 %3 gegeben. + %1 vous a donné %2 %3. + %1 ti ha dato %2 %3 + %1 lhe deu %2 %3 + %1 dał ci %2 %3 + %1 给了你 %2 %3. + + + %1 has given you $%2. + %1 vám dal $ %2. + %1 te ha dado $%2 + + %1 hat dir $%2 gegeben. + %1 vous a donné $%2. + %1 ti ha dato $%2 + %1 lhe deu R$%2 + %1 dał ci $%2 + %1 给了你 $%2. + + + Sending information to server please wait..... + Odesílání informací serveru čekejte prosím ... + Mandando información, por favor espere... + + Sende Informationen an den Server, bitte warten..... + Envoi d'informations au serveur, patientez s'il vous plait... + Invio delle informazioni al server, attendere prego...... + Enviando informações para o servidor, seja paciente..... + Przesyłam informacje na server poczekaj .... + 发送信息到服务器,请稍候..... + + + An action is already being processed... + Akce je již zpracován ... + Una acción ya esta siendo procesada... + + Es wird bereits eine Aktion ausgeführt... + Une action est déjà en cours de traitement... + Un'azione è già in corso... + Você já está realizando um ação... + Akcja jest w trakcie wykonywania... + 正在处理操作... + + + You're doing it too fast! + Děláte to příliš rychle! + Moins vite entre chaque action ! + Lo estas haciendo muy rapido! + Lo stai facendo troppo veloce! + + Du bist ganz aus der Puste! Warte ein paar Sekunden! + Você está fazendo isso muito rápido! + Za szybko zwolnij ! + 你做得太快了! + + + You don't have enough space for that amount! + Nemáte dostatek prostoru pro tuto částku! + No tienes suficiente espacio para eso! + + Du hast für diese Menge nicht genug Platz! + Vous n'avez pas assez de place pour cette quantité ! + Non hai abbastanza spazio per quel quantitativo! + Você não tem espaço suficiente para guardar o item + Nie masz tyle miejsca! + 你没有足够的空间存放物品! + + + You don't have that much money! + Nemáte tolik peněz! + No tienes tanto dinero! + + Du hast nicht so viel Geld! + Vous n'avez pas assez d'argent ! + Non hai tutti quei soldi! + Você não tem todo esse dinheiro! + Nie masz tyle pieniędzy! + 你没有那么多钱! + + + You are not a cop. + Ty nejsi polda. + No eres policía. + + Du bist kein Polizist. + Vous n'êtes pas policier. + Non sei un poliziotto. + Você não é um Policial. + Nie jesteś policjantem + 你不是警察。 + + + You don't have enough room for that item. + Nemáte dostatek prostoru pro danou položku. + No tienes el espacio suficiente. + + Du hast nicht genug Platz für den Gegenstand. + Vous n'avez pas assez de place. + Non hai abbastanza spazio per quell'oggetto. + Você não tem espaço suficiente no seu inventário. + Nie masz wystarczająco miejsca na tą rzecz. + 你没有足够的空间存放这个物品。 + + + You need $%1 to process without a license! + Musíte $%1 bez povolení ke zpracování! + Necesitas $%1 par procesar sin una licencia! + È necessario $%1 a processo senza patente! + + Du benötigst $%1, um ohne Lizenz verarbeiten zu können! + Vous devez payer $%1 pour traiter sans licence ! + Você precisa de R$%1 para processar sem uma licença! + Potrzebujesz $%1 w celu przetworzenia bez licencji + 你未取得许可需要支付 $%1 才能加工! + + + You don't have enough items! + Ty nemají dostatek položku! + No tienes suficientes objetos! + Non disponi di abbastanza materiale grezzo! + Nie masz wystarczająco dużo rzeczy! + + Vous n'avez pas assez d'items ! + Você não tem itens suficientes! + Du hast nicht genug Materialien! + 你没有足够的物品! + + + You have processed your item(s)! + Jste zpracujeme vaši položku (y)! + Has procesado tus objeto(s) + + Vous avez traité vos objet(s) ! + Hai processato i tuoi oggetti! + Przetworzeniu swój przedmiot (y)! + Você processou seu(s) item(s) + Du hast deine Materialien verarbeitet! + 你已经加工了你的物品! + + + You can't rapidly use action keys! + Nemůžete rychle využít akčních kláves! + No puedes usar Keys de Acciones tan rápido! + + Die Aktionstaste kann nicht so schnell hintereinander genutzt werden! + Vous ne pouvez pas utiliser rapidement les touches d'action ! + Non puoi riusare così rapidamente il tasto azione! + Você não pode usar a tecla de ação repetidamente! + Za szybko używasz przycisku akcji! + 你不能快速点击按键! + + + You do not have enough funds in your bank account. + Nemáte dostatek prostředků na váš bankovní účet. + No tienes tanto dinero en tu cuenta de banco. + + Du hast nicht genug Geld auf deinem Bankkonto. + Vous n'avez pas assez de fonds dans votre compte en banque. + Non hai abbastanza fondi nel tuo conto in banca. + Você não tem todo esse dinheiro em sua conta bancária. + Nie masz wystarczających środków w banku. + 你的银行账户里没有足够的资金。 + + + Couldn't add it to your inventory. + Nemohl ji přidat do svého inventáře. + No se pudo agregar a tu inventario. + + Es konnte nichts zu deinem Inventar hinzugefügt werden. + Impossible d'ajouter cela à votre inventaire. + Non puoi aggiungerlo al tuo inventario. + Não foi possível adicionar o item ao seu inventário + Nie można dodać tego do twojego wyposażenia + 无法将其添加到你的库存中。 + + + You haven't eaten anything in awhile, You should find something to eat soon! + Jste nejedli nic za čas, byste měli najít něco k jídlu brzy! + No has comido nada en un largo rato. Deberías buscar algo de comer! + + Du hast schon eine Weile nichts mehr gegessen! Du solltest langsam etwas zum Essen suchen! + Vous n'avez rien mangé depuis un certain temps, vous devriez trouver quelque chose à manger ! + E' da tempo che non mangi qualcosa, dovresti trovare qualcosa da mettere sotto i denti in fretta! + Você não come a bastante tempo. Ache algo para comer logo!. + Zaczynasz być głodny, poszukaj czegoś do jedzenia! + 你有一阵子没吃东西了,你应该马上找点吃的! + + + You are starting to starve, you need to find something to eat otherwise you will die. + Můžete se začínají hladovět, budete muset najít něco k jídlu jinak zemřete. + Te esta dando mucha, mucha hambre. Come algo o moriras! + + Du hast Hunger! Du solltest schnell etwas essen oder du wirst verhungern. + Vous commencez à mourir de faim, vous devez trouver quelque chose à manger, ou vous mourrez. + Ti stai indebolendo, devi trovare qualcosa da mangiare o morirai. + Você está começando a ficar famindo. Se você não comer irá morrer de fome. + Długo nie jadłeś, zjedz coś lub zginiesz z głodu. + 你感觉饿了,你需要找点东西吃,否则你会死的。 + + + You are now starving to death, you will die very soon if you don't eat something. + Nyní jste hladoví k smrti, zemřete velmi brzy, pokud nemáte něco jíst. + Estas a punto de morir de hambre, busca comida rápido! + + Du bist am Verhungern! Du wirst sterben, wenn du nichts zum Essen findest! + Vous êtes en train de mourir de faim, vous allez mourir très bientôt si vous ne mangez pas quelque chose. + Stai perdendo le forze, se non mangi qualcosa in fretta morirai. + Você está morrendo de fome, coma algo ou irá morrer. + Zaczynasz słabnąć z głodu zjedz coś lub zginiesz !!! + 你现在很饿,如果你不吃东西,很快就会死的。 + + + You have starved to death. + Jste hladem. + Te has muerto de hambre. + + Du bist verhungert! + Vous êtes mort de faim. + Sei morto per la fame. + Você morreu de fome + Wygłodziłeś się na śmierć. + 你饿死了。 + + + You haven't drank anything in awhile, You should find something to drink soon. + Nemáte pil nic za čas, byste měli najít něco k pití brzy. + No has tomado nada en un largo rato. Deberías buscar algo de tomar! + + Du hast schon eine Weile nichts mehr getrunken! Du solltest langsam etwas zum Trinken suchen! + Vous n'avez rien bu depuis un certain temps, vous devriez trouver quelque chose à boire ! + E' da parecchio tempo che non bevi qualcosa, dovresti trovare qualcosa da bere. + Você não bebe nada a bastante tempo. Ache algo para beber logo. + Zaczynasz być spragniony, powinienieś poszukać czegoś do picia. + 你有一阵子没喝水了,你应该马上找点喝的。 + + + You haven't drank anything in along time, you should find something to drink soon or you'll start to die from dehydration. + Vy jste nic pil na delší dobu, měli byste si najít něco k pití hned, nebo budete začnou umírat z dehydratace. + Te esta dando mucha, mucha sed. Toma algo o moriras! + + Du hast Durst! Du solltest schnell etwas trinken oder du wirst verdursten! + Vous commencez à mourir de soif, vous allez mourir de soif si vous ne buvez pas. + E' troppo tempo che non bevi qualcosa, dovresti trovare qualcosa da bere o comincerai a disitratarti. + Você está ficando desidratado. Se não beber algo poderá morrer. + Długo nic nie piłeś, napij się czegoś bo możesz zginąć z pragnienia. + 你在一段时间内没有喝水,你要尽快找到喝的,否则你会开始脱水而死。 + + + You are now suffering from severe dehydration find something to drink quickly! + Nyní trpí těžkou dehydratací najít něco k pití rychle! + Estas a punto de morir de desidratación, busca algo de tomar rapido! + + Du bist am Verdursten! Du wirst sterben, wenn du nichts zum Trinken findest! + Vous êtes en train de mourir de soif, vous allez mourir très bientôt si vous ne buvez pas. + Stai soffrendo per una grave deidratazione, trova velocemente qualcosa da bere o morirai! + Você está sofrendo de desidratação. Beba algo ou irá morrer! + Zaczynasz słabnąć z pragnienia, wypij coś inaczej zginiesz!!! + 你现在正严重脱水,快找点喝的! + + + You have died from dehydration. + Jsi zemřel na dehydrataci. + Has muerto de desidratación. + + Du bist verdurstet! + Vous êtes mort de soif. + Sei morto per disidratazione. + Você morreu desidratado. + Umarłeś z uwagi na odwodnienie organizmu + 你死于脱水. + + + You are over carrying your max weight! You will not be able to run or move fast till you drop some items! + Překročili jste přenášení maximální váhu! Nebudete moci spustit nebo přesunout rychle, dokud se kapka některé položky! + Estas cargando tu peso máximo! No puedes correr o moverte rapido hasta que botes algunos objetos! + + Du trägst zu viel bei dir! Du bist nicht in der Lage, zu rennen oder dich schnell zu bewegen, bis du einige Gegenstände abgelegt hast! + Vous êtes surchargé, vous ne pouvez plus courir ou bouger rapidement à moins de lacher quelques objets ! + Stai trasportando oltre il tuo carico massimo! Non riuscirai a correre fino a quando non ti libererai di qualche oggetto! + Você está carregando muito peso. Você não irá conseguir correr ou se mover rapidamente. + Niesiesz maksymalny ciężar, nie będziesz mógł biegać ani szybko chodzić dopuki nie wyrzucisz jakiejś rzeczy + 你超过了最大负重!除非你丢弃一些物品,否则你不能跑或跑得很快! + + + <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Informace o vozidle</t></t><br/><t color='#FFD700'><t size='1.5'>Majitelé</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Info de Vehículo</t></t><br/><t color='#FFD700'><t size='1.5'>Dueños</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Fahrzeuginfo</t></t><br/><t color='#FFD700'><t size='1.5'>Besitzer</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Info du véhicule</t></t><br/><t color='#FFD700'><t size='1.5'>Propriétaires</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Vehicle Info</t></t><br/><t color='#FFD700'><t size='1.5'>Owners</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Info do Veículo</t></t><br/><t color='#FFD700'><t size='1.5'>Donos</t></t><br/> %1 + <t color='#FF0000'><t size='2'>Informacja o pojeździe</t></t><br/><t color='#FFD700'><t size='1.5'>Właściciel</t></t><br/> %1 + <t color='#FF0000'><t size='2'>载具信息</t></t><br/><t color='#FFD700'><t size='1.5'>车主</t></t><br/> %1 + + + Cannot search that person. + Nelze vyhledávat tuto osobu. + No puedes buscar a esa persona. + + Diese Person kann nicht durchsucht werden! + Vous ne pouvez pas fouiller cette personne. + Impossibile perquisire quella persona. + Essa pessoa não pode ser revistada. + Nie możesz przeszukać tej osoby + 无法搜查此人。 + + + You couldn't effectively seize any items. Try again. + Dalo by se efektivně využily všech položek. Zkus to znovu. + Vous n'avez pas pu saisir les objets. Réessayez. + No pudistes efectivamente, confiscar algun objeto. Prueba de nuevo. + Impossibile perquisire la persona in maniera esaustiva. Riprova. + Nie można skutecznie wykorzystać żadnych przedmiotów. Spróbuj ponownie. + + Você não pode apreender nenhum item, efetivamente. Tente de novo. + Es konnten nicht alle Gegenstände beschlagnahmt werden. Versuche es noch einmal. + 并非所有物品你都能没收。再试一次。 + + + Repairing %1 + Dalo by se efektivně využily všech položek. Zkus to znovu.... + Reparando %1 + + Wird repariert %1... + Réparation de %1 + Riparando %1 + Reparando %1 + Naprawiam %1 + 修复 %1 + + + You can't do that from inside the vehicle! + Můžete to udělat zevnitř vozu! + Vous ne pouvez pas faire ceci à l'intérieur du véhicule ! + No puedes hacer eso desde adentro del vehículo! + Non si può fare dall'interno del veicolo! + + Du kannst das nicht tun während du in einem Fahrzeug sitzt! + Você não pode fazer isso de dentro do veículo! + Nie możesz tego wykonać z wntrza pojazdu! + 你在载具内不能维修! + + + You have repaired that vehicle. + Jste opravil, že vozidlo. + >Has reparado el vehículo. + + Du hast dieses Fahrzeug repariert. + Vous avez réparé ce véhicule. + Hai riparato il veicolo. + Você reparou esse veículo. + Naprawiłeś pojazd + 你修好了载具。 + + + You have mined %2 %1(s). + Jste shromáždili %2 %1(y). + Vous avez recueilli %2 %1(s). + Has recolectado %2 %1(s). + Hai raccolto %2 unità di %1. + + Du hast %2 %1 abgebaut. + Você colheu %2 %1(s). + Zebrałeś %2 %1 (s). + 你开采了 %2 个 %1。 + + + You have gathered %2 %1(s). + Jste shromáždili %2 %1(y). + Vous avez recueilli %2 %1(s). + Has recolectado %2 %1(s). + Hai raccolto %2 unità di %1. + + Du hast %2 %1 gesammelt. + Você colheu %2 %1(s). + Zebrałeś %2 %1 (s). + 你采集了 %2 个 %1。 + + + You can't gather from inside a car! + Nemůžete sbírat zevnitř vozu! + Vous ne pouvez pas ramasser à l'intérieur d'une voiture ! + No puedes recolectar desde adentro de un vehículo! + Non si può raccogliere da dentro una macchina! + + Wie soll das von hier aus gehen? Du sitzt in einem Fahrzeug! + Você não pode colher de dentro do carro! + Nie możesz zbierać z wnętrza samochodu + 你不能从车里搜集! + + + You are not allowed to loot dead bodies. + Ty jsou není dovoleno kořist mrtvoly. + Vous n'êtes pas autorisé à piller des cadavres. + No puedes buscar cuerpos muertos. + Non è consentito a saccheggiare cadaveri. + + Du darfst keine Leichen durchsuchen! + Você não está liberado para lootiar corpos mortos + Nie możesz przeszukiwać martwych ciał + 你不能抢劫尸体。 + + + You have been frozen by an administrator. + Vy byly zmrazeny správcem. + Vous avez été gelé par un administrateur. + Un admin te ha congelado! + Sei stato congelato da un amministratore. + + Du wurdest von einem Admin eingefroren. + Você foi congelado por um administrador + Zostałeś zamrożony przez administratora + 你被管理员冻结了。 + + + You have teleported to your selected position. + Jste teleported do vašeho zvolené poloze. + Vous avez été téléporté à la position sélectionnée. + Te has teletransportado a la posisción seleccionada. + Ti sei teletrasportaato alla posizione selezionata. + Masz teleportowany do wybranej pozycji. + + Você foi teleportado para a posição que você selecionou + Du hast dich zu deiner gewünschten Position teleportiert. + 你已传送到选择的位置。 + + + You have been unfrozen by an administrator. + Byli jste zmrzlá správcem. + Vous avez été dégelé par un administrateur. + Un admin te ha descongelado! + Sei stato scongelato da un amministratore. + + Ein Admin hat dich wieder aufgetaut. + Você foi descongelado por um administrador + Zostałeś odmrożony przez administratora + 你已被管理员解冻。 + + + No one was selected! + Nikdo byl vybrán! + Personne n'a été sélectionné ! + Nadie fue seleccionado! + Nessuno è stato selezionato! + Nikt nie został wybrany! + Ninguém foi selecionado! + Никто не был выбран! + Niemand wurde ausgewählt! + 没有选中玩家! + + + You didn't select an item you wanted to give. + Nevybrali jste položku, kterou chtěl dát. + Vous n'avez pas sélectionné l'objet que vous vouliez donner. + No ha seleccionado el objeto que quiere dar. + non è stato selezionato un elemento che si voleva dare. + Nie wybrano element, który chciał dać. + Você não selecionou um item que você queria dar. + Вы не выбрали пункт, который вы хотели дать. + Du hast keinen Gegenstand ausgewählt, um diesen weitergeben zu können. + 你没有选择你想给的东西。 + + + You didn't enter an actual number format. + Nezadal jste skutečný formát čísla. + Vous n'avez pas saisi un format de nombre réel. + No ha especificado un formato de número real. + Non hai inserito un formato di numero reale. + Nie wprowadzono rzeczywisty format liczb. + Você não inseriu um formato número real. + Вы не ввели фактический формат числа. + Du hast keine echte Zahl eingegeben. + 你没有输入正确的数字格式。 + + + You need to enter an actual amount you want to give. + Musíte zadat skutečnou částku, kterou chcete dát. + Vous devez entrer un montant réel que vous voulez donner. + Es necesario introducir una cantidad real que se desea dar. + È necessario immettere un importo effettivo si vuole dare. + Musisz podać rzeczywistą kwotę, którą chcesz dać. + É necessário introduzir uma quantidade real que você quer dar. + Вам необходимо ввести фактическую сумму, которую вы хотите дать. + Du musst einen tatsächlichen Wert eingeben, um diesen weitergeben zu können. + 你需要输入你想要给的正确金额。 + + + You need to enter an actual amount you want to remove. + Musíte zadat skutečnou částku, kterou chcete odebrat. + Vous devez entrer un montant réel que vous souhaitez supprimer. + Es necesario introducir una cantidad real que se desea eliminar. + È necessario immettere un importo effettivo che si desidera rimuovere. + Musisz podać rzeczywistą kwotę, którą chcesz usunąć. + É necessário introduzir uma quantidade real que você deseja remover. + Вам необходимо ввести фактическую сумму, которую вы хотите удалить. + Du musst einen tatsächlichen Wert eigeben, um diese löschen zu können. + 你需要输入你想要删除的正确金额。 + + + The selected player is not within range. + Zvolená Hráč není v dosahu. + Le joueur sélectionné est hors de portée. + El jugador seleccionado no está dentro del rango. + Il giocatore selezionato non è nel raggio d'azione. + Wybrany gracz nie jest w zasięgu. + O jogador selecionado não está dentro do alcance. + Выбранный игрок не находится в пределах диапазона. + Der ausgewählte Spieler ist nicht in Reichweite. + 选定的玩家不在有效范围内。 + + + Couldn't give that much of that item, maybe you don't have that amount? + Nemohl dát, že velká část této položky, možná nemáte tuto částku? + Impossible de donner cet objet, peut-être que vous n'en n'avez pas autant ? + No se pudo dar a que gran parte de ese elemento, tal vez usted no tiene esa cantidad? + Impossibile dare quella quantità di oggetti. + nie mógł dać, że wiele z tego elementu, może nie masz tej kwoty? + não poderia dar que muito desse item, talvez você não tem essa quantia? + Не могу дать, что большая часть этого пункта, может быть, у вас нет этой суммы? + Du konntest nicht so eine große Menge von diesem Gegenstand weitergeben. Hast du vielleicht nicht genug davon? + 不能给那么多的东西,也许你没有那么多? + + + You gave %1 %2 %3. + Ty jsi dal %1 %2 %3. + Vous avez donné %1 %2 %3. + Diste %1 %2 %3. + Hai dato %1 %2 %3. + Daliście %1 %2 %3. + você deu %1 %2 %3. + Ты дал %1 %2 %3. + Du hast %1 %2 %3 gegeben. + 你给了 %1 %2 %3。 + + + You don't have that much to give! + Nemusíte to hodně dát! + Vous n'avez pas autant à donner ! + Usted no tiene mucho para dar! + Non hai abbastanza oggetti da dare! + Nie ma tego dużo dać! + Você não tem muito para dar! + Вы не так много, чтобы дать! + Du hast nicht so eine große Menge von diesem Gegenstand! + 你没有这么多去给别人! + + + You gave $%1 to %2. + Dal jsi $%1 do %2. + Vous avez donné $%1 à %2. + Usted le dio $%1 a %2. + Hai dato $%1 a %2. + Dałeś $%1 do %2. + Você deu $%1 para %2. + Вы дали $%1 %2. + Du hast $%1 %2 gegeben. + 你将 $%1 给了 %2。 + + + You recently robbed the bank! You can't give money away just yet. + Nedávno jste vyloupil banku! Nemůžete dávat peníze pryč jen zatím. + Vous avez récemment volé la banque! Vous ne pouvez pas donner de l'argent pour l'instant. + Recientemente has robado el banco! No se puede dar dinero por el momento. + Recentemente hai rapinato la banca! Non puoi ancora depositare i soldi nel tuo conto bancario. + Niedawno obrabował bank! Nie można dać pieniądze w błoto jeszcze. + Recentemente, você roubou o banco! Você não pode dar dinheiro fora ainda. + Вы недавно ограбили банк! Вы не можете отдавать деньги только пока. + Du hast kürzlich die Bank ausgeraubt! Du kannst deswegen kein Geld weitergeben. + 你最近抢劫了银行!你还不能现在把钱给出去。 + + + No data selected. + vybrány žádné údaje. + Aucune donnée sélectionnée. + No hay datos seleccionados. + Non ci sono dati selezionati. + Nie wybrano danych. + Não há dados selecionado. + Нет выбранных данных. + Keine Daten ausgewählt. + 没有选择数据。 + + + You did not select a vehicle. + Nevybrali jste vozidlo. + Vous n'avez pas sélectionné de véhicule. + No ha seleccionado un vehículo. + Non hai selezionato un veicolo. + Nie wybrano pojazdu. + Você não selecionou um veículo. + Вы не выбрали автомобиль. + Du hast kein Fahrzeug ausgewählt. + 你没有选择载具。 + + + You do not own any vehicles. + Nevlastníte žádná vozidla. + Vous ne possédez pas de véhicules. + Usted no posee ningún vehículo. + Non possedete tutti i veicoli. + Nie posiada żadnych pojazdów. + Você não possui quaisquer veículos. + Вы не являетесь владельцем каких-либо транспортных средств. + Du besitzt keine Fahrzeuge. + 你没有任何载具。 + + + You did not select a player. + Nevybrali jste si přehrávač. + Vous n'avez pas sélectionné de joueur. + No ha seleccionado un jugador. + Non hai selezionato un giocatore. + Nie wybrano odtwarzacza. + Você não selecionou um jogador. + Вы не выбрали игрока. + Du hast keinen Spieler ausgewählt. + 你没有选择玩家。 + + + You have given %1 keys to your %2. + Dali jste %1 klíče ke svému %2. + Vous avez donné les clés de votre %2 à %1. + Usted ha dado %1 llaves de su %2. + Hai dato a %1 chiavi della vostra %2. + Dałeś %1 klucze do %2. + Você tem dado %1 chaves de sua %2. + Вы дали %1 ключи от %2. + Du hast %1 die Schlüssel zu deinem %2 gegeben. + 你将 %2 的钥匙给了 %1。 + + + %1 has gave you keys for a %2. + %1 has gave you keys for a %2. + %1 a vous a donné les clés de %2. + %1 has gave you keys for a %2. + %1 has gave you keys for a %2. + %1 has gave you keys for a %2. + %1 has gave you keys for a %2. + %1 has gave you keys for a %2. + %1 hat dir die Schlüssel zum %2 gegeben. + %1 给了你一把 %2 的钥匙。 + + + You cannot remove the keys to your house! + Nemůžete odstranit klíče od domu! + Vous ne pouvez pas supprimer les clés de votre maison ! + No se puede quitar las llaves de su casa! + Non è possibile rimuovere le chiavi a casa tua! + Nie można usunąć klucze do swojego domu! + Você não pode remover as chaves de sua casa! + Вы не можете удалить ключи к вашему дому! + Du kannst die Schlüssel zu diesem Haus nicht wegwerfen! + 你不能丢弃你家的钥匙! + + + You did not select anything to remove. + Nevybrali jste nic odstranit. + Vous avez rien sélectionné à supprimer. + No ha seleccionado nada que quitar. + Non hai selezionato niente da rimuovere. + Nie zrobił nic, aby usunąć wybrać. + Você não selecionou nada para remover. + Вы ничего удалить не выбрать. + Du hast nichts zum Entsorgen ausgewählt. + 你没有选择要删除的任何东西。 + + + Could not remove that much of that item. Maybe you do not have that amount? + Nepodařilo se odstranit, že velká část této položky. Možná, že nemáte tuto částku? + Impossible d'en supprimer autant. Peut-être que vous ne disposez pas de ce montant ? + No se pudo eliminar que gran parte de ese elemento. Tal vez usted no tiene esa cantidad? + Impossibile rimuovere quel quantitativo di oggetti. + Nie można usunąć, że wiele z tego elementu. Może nie masz tej kwoty? + Não foi possível remover que muito desse item. Talvez você não tem essa quantia? + Не удалось удалить, что большая часть этого элемента. Может быть, у вас нет этой суммы? + Du konntest nicht so eine große Menge von diesem Gegenstand entsorgen. Hast du vielleicht nicht so viele davon? + 不能丢弃大部分东西。也许你没有那么多数额? + + + You have successfully removed %1 %2 from your inventory. + Úspěšně jste odstraněny %1 %2 z vašeho inventáře. + Vous avez réussi à retirer %1 %2 de votre inventaire. + Has eliminado correctamente %1 %2 de su inventario. + Hai rimosso con successo %1 %2 dal tuo inventario. + Pomyślnie usunięto %1 %2 z inwentarza. + Você removeu com êxito %1 %2 do seu inventário. + Вы успешно удалены %1 %2 из инвентаря. + Du hast erfolgreich %1 %2 aus deinem Inventar entsorgt. + 你已成功地从库存删除 %1 %2。 + + + Something went wrong; the menu will not open? + Něco se pokazilo; nabídka neotevře? + Quelque chose s'est mal déroulé; le menu ne s'ouvre pas ? + Algo salió mal; el menú no se abre? + Qualcosa è andato storto; il menu non si apre? + Coś poszło nie tak; menu nie otworzy? + Algo deu errado; o menu não vai abrir? + Что-то пошло не так; меню не откроется? + Etwas ist schief gelaufen. Das Menü konnte nicht geöffnet werden. + 出错了;菜单不能打开? + + + Config does not exist? + Config neexistuje? + Config n'existe pas ? + Config no existe? + Config non esiste? + Konfiguracja nie istnieje? + O configuração não existe? + Config не существует? + Einstellung nicht vorhanden? + 配置不存在? + + + You cannot store that in anything but a land vehicle! + Nelze uložit, že v ničem jiném než pozemní vozidla! + Vous pouvez stocker cet objet seulement dans les véhicules terrestres ! + No se puede almacenar en cualquier cosa menos que un vehículo terrestre! + Non è possibile depositare questa risorsa in un veicolo che non sia terrestre! + Nie można zapisać, że w nic poza pojazdem lądowym! + Você não pode armazenar isso em qualquer coisa, mas um veículo de terra! + Вы не можете хранить, что ничего, кроме наземного транспортного средства! + Du kannst das nur in einem Landfahrzeug lagern! + 除了陆地载具,你不能储存它! + + + You don't have that much cash on you to store in the vehicle! + Nemáte tolik peněz na vás uložit do vozidla! + Vous ne disposez pas d'autant d'argent sur vous pour stocker dans le véhicule ! + Usted no tiene esa cantidad de dinero en efectivo para almacenar en el vehículo! + Non hai abbastanza denaro con te da mettere nel veicolo! + Nie ma tego dużo gotówki na ciebie do przechowywania w pojeździe! + Você não tem que muito dinheiro em você para armazenar no veículo! + У вас не так много наличных денег на вас, чтобы хранить в автомобиле! + Du hast nicht genug Geld bei dir, um die eingegeben Menge in das Fahrzeug zu lagern! + 你没有那么多现金可以存放在载具里! + + + The vehicle is either full or cannot hold that much. + Vozidlo je buď plný nebo nemůže myslet si, že mnoho. + Le véhicule est plein ou ne peut pas en contenir autant. + El vehículo está llena o no puede contener tanta. + Il veicolo è pieno o non può tenere quel quantitativo. + Pojazd jest albo w pełnym lub nie można uznać, że dużo. + O veículo está cheio ou não pode segurar muito. + Транспортное средство либо полностью или не может держать так много. + Das Fahrzeug ist entweder voll oder kann nicht so viel halten. + 这载具要么是满的,要么就是装不下那么多。 + + + Couldn't remove the items from your inventory to put in the vehicle. + Vozidlo je buď plný nebo nemůže myslet si, že mnoho. + Le véhicule est déjà plein ou ne peut pas stocker d'avantage d'objets. + El vehículo está llena o no puede contener tanta. + Impossibile rimuovere quel quantitativo di oggetti dal tuo inventario per metterlo nel veicolo. + Pojazd jest albo w pełnym lub nie można uznać, że dużo. + O veículo está cheio ou não pode segurar muito. + Транспортное средство либо полностью или не может держать так много. + Das Fahrzeug ist entweder voll oder hat nicht so viel Platz. + 无法从你的库存中取出物品放入车内。 + + + This is an illegal item and cops are near by. You cannot dispose of the evidence. + To je ilegální položky a policajti jsou v blízkosti. Nemůžete zbavit důkazů. + Ceci est un objet illégal et les policiers sont à proximité. Vous ne pouvez pas le jeter. + Este es un artículo ilegal y policías están cerca. No se puede disponer de las pruebas. + Non puoi liberarti di questo oggetto dato che è una prova evidente. + Jest to nielegalne element i policjanci są w pobliżu. Nie można pozbyć się dowodów. + Este é um item ilegal e policiais estão nas proximidades. Você não pode dispor das provas. + Это незаконный пункт и полицейские находятся поблизости. Вы не можете избавиться от доказательств. + Dies ist ein illegaler Gegenstand und Polizisten sind in der Nähe. Du kannst die Beweise nicht einfach so entsorgen. + 这是非法物品,警察就在附近。你不能把它扔掉。 + + + You cannot remove an item when you are in a vehicle. + Nemůžete-li odebrat položku, když jste ve vozidle. + Vous ne pouvez pas supprimer un objet lorsque vous êtes dans un véhicule. + No se puede eliminar un elemento cuando se está en un vehículo. + Non è possibile rimuovere un elemento quando si è in un veicolo. + Nie można usunąć element, kiedy jesteś w pojeździe. + Você não pode remover um item quando você está em um veículo. + Вы не можете удалить элемент, когда вы находитесь в автомобиле. + Du kannst keinen Gegenstand entsorgen, wenn du in einem Fahrzeug sitzt. + 当你在车内时,无法扔掉物品。 + + + You are now spectating %1.\n\nPress F10 to stop spectating. + Nyní diváck é%1.\n\nStisknutím klávesy F10 k zastavení divácké. + Vous êtes maintenant spectateur %1.\n\nAppuyez sur F10 pour arrêter le mode spectateur. + Ahora está como espectador de %1.\n\nPulse F10 para salir de modo espectador. + Si è ora spectating %1.\n\nPremere F10 per smettere di spettatori. + Grasz teraz spectating %1.\n\nNaciśnij klawisz F10, aby zatrzymać spectating. + Você agora está como espectador %1.\n\nPressione F10 para sair. + Теперь вы spectating %1.\n\nНажмите F10, чтобы остановить spectating. + Du beobachtest nun %1.\n\nDrücke F10, um das Beobachten zu beenden. + 你现在正在观看 %1.\n\n 按F10停止观看. + + + You have stopped spectating. + Přestali jste divácké úlohy. + Vous avez arrêté spectating. + Usted ha dejado de ser espectador. + Hai smesso di spettatori. + Zatrzymaniu widzem. + Você parou espectador. + Вы остановили spectating. + Du hast das Beobachten beendet. + 你已经停止了观看。 + + + You have teleported %1 to your location. + Jste teleported %1 do vaší polohy. + Vous avez téléporté %1 à votre emplacement. + Usted ha teletransportado %1 a su ubicación. + Hai teletrasportato %1 alla vostra posizione. + Masz teleportował %1 na swoim miejscu. + Você teletransportou %1 para a sua localização. + Вы телепортированы %1 к вашему положению. + Du hast %1 zu deiner Position teleportiert. + 传送 %1 到你的位置。 + + + <t color='#ADFF2F'>ATM</t> + <t color='#ADFF2F'>Bankomat</t> + <t color='#ADFF2F'>DAB</t> + <t color='#ADFF2F'>ATM</t> + <t color='#ADFF2F'>ATM</t> + <t color='#ADFF2F'>Bankomat</t> + <t color='#ADFF2F'>Caixa Eletrônico</t> + <t color='#ADFF2F'>Банкомат</t> + <t color='#ADFF2F'>Geldautomat</t> + <t color='#ADFF2F'>自动取款机</t> + + + Capture Gang Hideout + Zachyťte Gang skrýš + Capturer la cachette de gang + Capturar Escondite + Cattura Banda Nascondiglio + Przechwytywanie Banda Kryjówka + Capturar Esconderijo de Gangue + Захват шайка укрытие + Gangversteck einnehmen + 占领帮派藏身处 + + + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + An empty array was passed to fn_levelCheck.sqf + Ein leeres Feld wurde an fn_levelCheck.sqf übergeben. + 一个空字段传递给fn_levelCheck.sqf + + + + + News Station Broadcast + + Anuncio de la Estación de Noticias + + Nachrichtensender + Annonce d'informations + + Estação de Transmissão de Notícias + + 新闻广播 + + + Channel 7 News Station + + Estación del Canal de Noticias 7 + + Chaine d'infos Numéro 7 + Kanal 7 Nachrichtensender + + Estação de Notícias do Canal 7 + + 7频道新闻台 + + + Message Heading: + + Título del Mensaje + + Titre de l'annonce : + Nachrichtenüberschrift: + + Titulo da Mensagem: + + 消息标题: + + + Message Content: + + Contenido del Anuncio + + Contenu de l'annonce: + Nachrichteninhalt: + + Conteúdo da Mensagem: + + 消息内容: + + + Broadcast Message + + Transmitir Anuncio + + Diffusion de l'annonce + Nachricht übertragen + + Transmitir Anúncio + + 广播消息 + + + Broadcast Cost: %1<br />Next Broadcast Available: %2 + + Costo de Transmisión: %1<br />Siguiente Transmisión Disponible en: %2 + + Übertragungskosten: %1<br />Nächste Übertragung möglich in: %2 + Coût de Transmission : %1<br />Prochaine Transmission Disponible dans : %2. + + Custo de Trasnmissão: %1<br />Próxima transmissão disponível em: %2 + + 广播费用: %1<br />下一个广播可用于: %2 + + + The header cannot be over %1 characters + + El título no puede tener mas de %1 caracteres + + L'en-tête ne peut pas dépasser %1 caractères + Die Überschrift darf nicht über %1 Zeichen lang sein. + + O cabeçalho não pode ter mais que %1 caracteres + + 标题不能超过 %1 个字符 + + + You've entered an unsupported character! + + Has introducido un carácter inválido + + Vous avez entré un caractère non pris en charge ! + Du hast ein nicht ungültiges Zeichen eingegeben! + + Você inseriu um caractere inválido + + 你输入了一个不支持的字符! + + + Now + + Ahora + + Jetzt + Maintenant + + Agora + + 现在 + + + You need $%1 to send a broadcast! + + Necesitas %1 para transmitir un anuncio! + + Vous avez besoin de $%1 pour envoyer une diffusion ! + Du benötigst $%1, eine Nachricht senden zu können! + + Você precisa de $%1 para enviar uma transmissão! + + 你需要支付 $%1 才能发送广播! + + + <t size='2'>%1</t><br />Broadcasted by: %2 + + <t size='2'>%1</t><br />Transmitido por: %2 + + <t size='2'>%1</t><br />Diffusé par : %2 + <t size='2'>%1</t><br />Gesendet von: %2 + + <t size='2'>%1</t><br />Transmitido por: %2 + + <t size='2'>%1</t><br />广播发送者: %2 + + + + + You have been arrested, wait your time out. If you attempt to respawn or reconnect your time will increase! + Jste byli zatčeni, počkejte si na čas ven. Pokud se pokusíte respawn nebo připojit váš čas zvýší! + Te han arrestado. Si tratas de matarte o te desconectas se incrementara tu estadía en la cárcel! + + Du wurdest verhaftet. Sitze deine Zeit ab. Wenn du versuchst neu aufzuwachen oder die Verbindung zu trennen, verlängert sich deine Zeit! + Vous avez été arrêté, attendez que votre peine soit terminée. Si vous tentez de respawn ou reconnectez, le temps sera augmenté ! + Sei stato arrestato, sconta la tua pena. Se cercherai di rinascere o di riconnetterti il tuo tempo aumenterà! + Você foi preso, cumpra sua pena. Se você tentar renascer ou reconectar seu tempo na cadeia irá aumentar! + Zostałeś aresztowany, poczekaj na koniec kary. Jeśli się rozłączysz albo odrodzisz twoja kara zostanie powiększona + 你被捕了,耐心坐牢吧。如果你试图重生或重新连接坐牢时间会增加! + + + For being arrested you have lost the following licenses if you own them\n\nFirearms License\nRebel License + Za byl zatčen jste ztratili tyto licence, pokud je vlastní \ žádný zbrojní pas \ jRebel licence + Por ser arrestado se te han quitado estas licencias (si las tienes)\n\nL. de Armas \nL. Rebelde + + Bei der Verhaftung hast du folgende Lizenzen verloren, sofern du sie besessen hast:\n\nWaffenschein\nRebellenausbildung. + Après emprisonnement, vous avez perdu les licences suivantes si vous les aviez\n\nPermis de port d'arme\n LicenceRebelle + A causa del tuo arresto hai perso le seguenti licenze, se le possedevi\n\nPorto d'armi\nLicenza Ribelle + Você perdeu as seguintes licenças por ter sido preso\n\nPorte de Armas\n\nTreinamento Rebelde + Z uwagi na aresztowanie straciłeś następujące licencje jeśli je posiadałeś \n\nPozwolenie na broń \nTrening Rebelianta + 你如果被捕了,会失去\n\n枪支许可证\n叛军许可证 + + + %1 has escaped from jail! + %1 utekl z vězení! + %1 se ha escapado de la cárcel! + + %1 ist aus dem Gefängnis ausgebrochen! + %1 s'est échappé de prison ! + %1 è scappato dalla prigione! + %1 escapou da prisão + %1 uciekł z więzienia! + %1 越狱了! + + + You have escaped from jail, you still retain your previous crimes and now have a count of escaping jail. + Jste utekl z vězení, si stále zachovávají své předchozí zločiny a nyní mají počet uniknout vězení. + Te has escapado de la cárcel, retienes tus crimenes anteriores más un crimen de escapado de la cárcel. + + Vous vous êtes échappé de prison, vous conserver toujours vos crimes précédents et les autorités sont au courant de votre évasion. + Du bist aus dem Gefängnis ausgebrochen! Die Polizei sucht jetzt nach dir, wegen deiner früheren Verbrechen und dem Gefängnisausbruch. + Sei scappato di prigione, rimarrai ricercato per i crimini da te commessi in precedenza e in aggiunta per essere scappato di prigione. + Você escapou da prisão, agora você é procurado por esse crime e todos os outros que havia cometido anteriormente + Uciekłeś z więzienia, dalej jesteś ścigany za poprzednie przestępstwa i dodatkowo za ucieczkę. + 你已经从监狱逃跑了,你仍然保留着你以前的罪行,现在算是越狱。 + + + You have served your time in jail and have been released. + Sloužil jste svůj čas ve vězení a byli propuštěni. + Has pasado el tiempo en la cárcel y has sido liberado. + + Du hast deine Zeit im Gefängnis abgesessen. + Vous avez purgé votre peine, vous êtes désormais libre. + Hai scontato la tua pena in prigione e sei stato rilasciato. + Você pagou pelo seus crimes e foi libertado. + Odbyłeś swoją karę zostałeś zwolniony z więzienia. + 你已经在监狱服完刑,并被释放。 + + + Time Remaining: + Zbývající čas: + Tiempo Restante: + + Verbleibende Zeit: + Temps restant : + Tempo rimanente: + Tempo Restante: + Pozostały czas kary: + 剩余时间: + + + Can pay bail: + Může zaplatit kauci: + Puedes pagar la fianza en: + + Kann Kaution zahlen: + Peut payer la caution : + Puoi pagare la cauzione: + Pode pagar fiança: + Możesz wpłacić kaucję + 可以支付保释金: + + + Bail Price: + Bail Cena: + Precio de Fianza: + + Kaution: + Prix de la caution : + Costo cauzione: + Preço da fiança: + Wartość kaucji: + 保释金额: + + + You have paid your bail and are now free. + Jste zaplatili kauci a nyní jsou zdarma. + Has pagado tu fianza y has sido liberado. + + Du hast deine Kaution bezahlt und bist nun frei. + Vous avez payé votre caution, vous êtes désormais libre. + Hai pagato la cauzione e sei libero. + Você pagou a fiança e agora está livre. + Zapłaciłeś kaucję jesteś wolny. + 你已经支付了保释金,现在自由了. + + + + + %1 has knocked you out. + %1 zaklepal vás. + %1 te a noqueado. + + %1 hat dich niedergeschlagen. + %1 vous a assommé. + %1 ti ha colpito stordendoti. + %1 nocauteou você. + zostałeś ogłuszony przez %1 + %1 把你击倒了。 + + + You have lost all your motor vehicle licenses for vehicular manslaughter. + Jste ztratili všechny své licence motorových vozidel pro dopravní zabití. + Has perdido todas tus licencias de vehículos de motor por homicidio vehicular. + + Du hast alle deine Führerscheine durch fahrlässige Tötung mit einem Fahrzeug verloren. + Vous avez perdu tous vos permis véhicule pour avoir écrasé quelqu'un. + Hai perso tutte le tue licenze di guida a causa di un omicidio stradale. + Você não perdeu suas licenças de motorista por atropelamento. + Straciłeś wszystkie uprawnienia na pojazdy z uwagi na ciągłe zabijanie ludzi pojazdami. + 你因载具过失杀人被吊销了所有机动载具驾驶许可证。 + + + You have lost your firearms license for manslaughter. + Jste ztratili zbrojního průkazu za zabití. + Has perdido tu licencia de armas por homicidio. + + Du hast deinen Waffenschein wegen Mordes verloren. + Vous avez perdu votre permis d'armes à feu pour homicide involontaire. + Hai perso il tuo Porto d'Armi a causa di un omicidio + Você perdeu suas licenças de porte de arma por cometer homicídio. + Straciłeś pozwolenie na broń z uwagi na zabijanie ludzi z broni palnej + 你因过失杀人而丧失了枪支许可证。 + + + They didn't have any cash... + Oni neměli žádnou hotovost ... + No tenian dinero... + + Er hatte kein Geld... + Il n'a pas d'argent... + Non hai soldi... + Eles não tinham nenhum dinheiro.. + Nie posiadają żadnych pieniędzy ... + 他们没有现金... + + + You stole $%1 + Ukradl jsi $%1 + Robastes $%1 + + Du hast $%1 geraubt. + Vous avez volé $%1 + Hai rubato $%1 + Você roubou R$%1 + Ukradłeś %1 + 你偷了 $%1 + + + The safe is empty! + Bezpečné je prázdný! + La caja esta vacía! + + Der Tresor ist leer! + Le coffre est vide ! + La cassaforte è vuota! + O Cofre está vazio! + Sejf jest pusty! + 保险箱是空的! + + + Someone is already accessing the safe.. + Někdo je již přístup k bezpečné .. + Alguien ya esta entrando en la caja.. + + Jemand greift bereits auf diesen Tresor zu. + Quelqu'un accède déjà au coffre... + Qualcuno sta già interagendo con la cassaforte.. + Alguem já está acessando o cofre. + Ktoś właśnie włamuje się do sejfu! + 有人已经进入保险箱了。 + + + There needs to be %1 or more cops online to continue. + Musí existovat%1 nebo více policajtů on-line pokračovat. + Necesita haber %1 o mas policías para continuar. + + Es müssen %1 oder mehr Polizisten online sein, um fortfahren zu können. + Il faut au minimum %1 policiers pour continuer. + Servono almeno %1 poliziotti online per continuare. + É necessário ter %1 ou mais policiais online para continuar. + Potrzeba conajmniej %1 policjantów aby kontynuować + 需要有 %1 或更多的警察才能继续。 + + + Safe Inventory + Safe Inventory + Inventario de la Caja + + Tresorinventar + Coffre + Inventario cassaforte + Cofre + Wyposażenie sejfu + 保险箱库存 + + + You need to select an item! + Je třeba vybrat položku! + Debes selecionar un objeto! + + Du musst einen Gegenstand auswählen! + Vous devez sélectionner un objet ! + Devi selezionare un oggetto! + Você precisa selecionar um item! + Musisz coś wybrać + 您需要选择一个物品! + + + There isn't %1 gold bar(s) in the safe! + Není %1 zlatá bar (y) v bezpečí! + No hay %1 barra(s) de oro en la caja! + + Es sind keine %1 Goldbarren im Tresor! + Il n'y a pas %1 lingot(s) d'or dans le coffre ! + Nella cassaforte non ci sono %1 lingotti d'oro + Não existe %1 barra(s) de ouro no cofre! + W sejfie nie ma % sztab złota! + 金库里没有 %1 金条! + + + + + Couldn't open the ticketing interface + Nemohl otevřít jízdenek rozhraní + No se pudo abrir el menu de tiquetes! + + Der Bußgeldkatalog konnte nicht geöffnet werden! + Impossible d'ouvrir l'interface des amendes + Impossibile aprire l'interfaccia per le multe + Não foi possível abrir o bloco de multa + Nie potrafię otworzyć interfejsu mandatów + 无法打开罚款界面 + + + Ticketing %1 + Jízdenek%1 + Dando Tiquete a %1 + + Verrechne %1 + Verbalisation de %1 + Multando %1 + Multando %1 + Mandat dla %1 + 开据罚单给 %1 + + + %2 got back a blacklisted vehicle near %1. + %2 dostat zpět na černou listinu vozidlo nedaleko %1. + %2 a récupéré un véhicule blacklisté près de %1. + %2 volver un vehículo en la lista negra cerca de %1. + %2 ha ritirato un veicolo blacklistato vicino %1. + %2 wrócić do czarnej listy pojazd pobliżu %1. + %2 retirou um veículo que se encontra na lista negra, perto de %1. + %2 получить обратно в черный список автомобиль возле %1. + %2 hat ein gesuchtes Fahrzeug nahe %1 ausgeparkt. + %2 在 %1 附近找回了被列入黑名单的载具。 + + + Person to ticket is nil + Osoba, která má lístku je nulová + La persona a quien tiquetear es nulo + + Die Person, für das das Ticket vorgesehen war, ist verschwunden. + La personne à verbaliser n'existe pas. + La persona da multare è nil + Jogador a ser multado é nulo + Osoba do ukarania mandatem to "nil" + 被罚款的玩家为“无” + + + Person to ticket doesn't exist. + Osoba, která má letenku neexistuje. + La perosna a quien tiquetear no existe. + + Die Person, für das Ticket, gibt es nicht. + La personne à verbaliser est inexistante. + La persona da multare non esiste. + Jogador a ser multado não existe. + Nie ma osoby ukaranej mandatem - nie istnieje + 被罚款的玩家不存在。 + + + You didn't enter actual number. + Jste nezadali skutečný počet. + No escribistes un numero real. + + Du hast keine echte Zahl eingegeben. + Vous n'avez pas saisi de nombre. + Non hai inserito un numero correttamente. + Você não digitou um número válido + Wybrałeś zły numer + 你没有输入正确的数字. + + + Tickets can not be more than $200,000! + Vstupenky nemůže být více než 200.000 $! + Los tiquetes no pueden ser mas de $200,000! + + Strafzettel können nicht mehr als $200.000 betragen! + Les amendes ne peuvent pas dépasser plus de $200,000 ! + La multa non può essere più di $200.000! + A multa não pode ser maior que R$200.000! + Mandat nie może być wyższy niż $200.000! + 罚单不能超过 $200,000! + + + %1 gave a ticket of $%2 to %3 + %1 dal lístek na $% %2 3 + %1 le dio un tiquete de $%2 a %3 + + %1 hat %3 einen Strafzettel über $%2 ausgestellt. + %1 a mis une contravention de $%2 à %3. + %1 ha dato una multa di $%2 a %3 + %1 deu uma multa de R$%2 para %3 + %1 Wystawił mandat w wysokości %2 dla %3 + %1 开据金额 $%2 的罚单给 %3 + + + You don't have enough money in your bank account or on you to pay the ticket. + Nemáte dostatek peněz na váš bankovní účet, nebo na vás zaplatit letenku. + No tienes suficiente dinero para pagar el tiquete. + + Du hast nicht genug Geld auf deinem Bankkonto, um den Strafzettel bezahlen zu können. + Vous n'avez pas assez d'argent dans votre compte en banque ou sur vous pour payer l'amende. + Non hai fondi sufficienti nel tuo conto in banca per pagare la multa. + Você não possui dinheiro suficiente na sua conta bancária ou na sua mão para pagar o bilhete. + Nie masz środków na koncie aby zapłacić mandat. + 你的银行帐户中没有足够的钱来支付罚金。 + + + %1 couldn't pay the ticket due to not having enough money. + %1 nemohl zaplatit letenku z důvodu nemají dostatek peněz. + %1 No puedo pagar el tiquete porque no tiene suficiente dinero. + + %1 konnte den Strafzettel nicht bezahlen, weil er nicht genug Geld hat. + %1 ne pouvait pas payer la contravention car il n'avait pas assez d'argent. + %1 non può pagare la multa perchè non ha sufficienti fondi nel suo conto in banca. + %1 não pode pagar a multa pois não tem dinheiro suficiente. + %1 nie może zapłacić mandatu bo nie ma tylu środków na koncie + %1 由于没有足够的钱,无法支付罚金。 + + + You have paid the ticket of $%1 + Jste zaplatili letenku ve výši $%1 + Has pagado el tiquete de $%1 + + Du hast den Strafzettel von $%1 bezahlt. + Vous avez payé l'amende de $%1 + Hai pagato la multa di $%1 + Você pagou a multa de R$%1 + Zapłaciłeś mandat w wysokości $%1 + 你已经支付了 $%1 的罚金 + + + %1 paid the ticket of $%2 + %1 zaplatil letenku ve výši $ %2 + %1 a pagado el tiquete de $%2 + + %1 zahlte einen Strafzettel von $%2. + %1 payé la contravention de $%2 + %1 ha pagato la multa di $%2 + %1 pagou a multa de R$%2 + %1 zapłacił mandat w wyskości $%2 + %1 支付了 $%2 的罚金 + + + %1 paid the ticket. + %1 zaplatil jízdenku. + %1 pago el tiquete. + + %1 hat den Strafzettel bezahlt. + %1 payé la contravention. + %1 ha pagato la multa. + %1 pagou a multa. + %1 zapłacił mandat. + %1 支付了罚金。 + + + %1 has given you a ticket for $%2 + %1 vám dal lístek za $ %2 + %1 te ha dado un tiquete de $%2 + + %1 hat dir einen Strafzettel über $%2 gegeben. + %1 vous a donné une amende de $%2 + %1 ti ha dato una multa di $%2 + %1 lhe aplicou uma multa de R$%2 + %1 dał ci mandat w wysokości $%2 + %1 给你开了一张 $%2 的罚单 + + + %1 refused to pay the ticket. + %1 odmítl zaplatit letenku. + >%1 no aceptó pagar el tiquete. + + %1 weigert sich, den Strafzettel zu bezahlen. + %1 a refusé de payer l'amende. + %1 si è rifiutato di pagare la multa. + %1 se recusou a pagar a multa. + %1 odmówił zapłaty mandatu. + %1 拒绝支付罚金。 + + + You have collected a bounty of $%1 for arresting a criminal. + Nasbíráte kvantum $%1 pro aretaci zločince. + Has recolectado la recompensa de $%1 por arrestar a un criminal. + + Du hast ein Prämie von $%1 für die Festnahme eines Verbrechers bekommen. + Vous avez reçu une prime de $%1 pour avoir arrêté un criminel. + Hai ricevuto il pagamento di una taglia di $%1 per aver arrestato un criminale ricercato. + Você ganhou uma recompensa de R$%1 por prender um criminoso. + Otrzymujesz nagrodę w wysokości $%1 za aresztowanie poszukiwanego kryminalisty. + 你捉拿罪犯获得 %1 赏金。 + + + You have collected a bounty of $%1 for killing a wanted criminal, if you had arrested him you would of received $%2. + Nasbíráte kvantum $%1 za zabití hledaného zločince, pokud jste ho zatkli byste přijímaného $%2. + Has recolectado la recompensa de $%1 por matar a un criminal, si lo hubieras arrestado hubieses conseguido $%2. + + Du hast ein Prämie von $%1 für das Töten eines gesuchten Verbrechers erhalten, für seine Festnahme hättest du $%2 bekommen. + Vous avez reçu une prime de $%1 pour le meurtre d'un criminel recherché, si vous l'aviez arrêté, vous auriez reçu $%2. + Hai ricevuto il pagamento di una taglia di $%1 per aver ucciso un criminale ricercato, se lo avessi arrestato avresti ricevuto $%2. + Você ganhou uma recompensa de $%1 por matar um criminoso procurado, se você tivesse o prendido ganharia R$%2. + Otrzymujesz nagrodę w wysokości $%1 za zabicie poszukiwanego kryminalisty, w przypadku gdybyś go aresztował otrzymałbyć $%2. + 你杀害被通缉的罪犯获得 %1 赏金,如果你逮捕了他,你就会获得 $%2 赏金。 + + + %1 has $%2 worth of contraband on them. + %1 má $%2 v hodnotě kontrabandu na nich. + %1 tiene $%2 en contrabando con el. + + %1 hatte Schmuggelware im Wert von $%2 bei sich. + %1 a $%2 de contrebande sur lui. + %1 ha $%2 in materiali illegali con se. + %1 tem R$%1 em contrabando. + %1 miał przy sobie kontrabandę o wartości $%2. + %1 有价值 $%2 的非法物品。 + + + Illegal Items + nelegální položky + Objetos Ilegales + + Illegale Gegenstände + Objets illégaux + Oggetti Illegali + Items Ilegais + Nielegalne przedmioty / kontrabanda + 非法物品 + + + %1 was identified as the bank robber! + %1 byl identifikován jako bankovního lupiče! + %1 fue identificado como el ladrón del banco! + + %1 wurde als Bankräuber identifiziert! + %1 a été identifié comme un braqueur de banque ! + %1 è stato identificato come il rapinatore della banca! + %1 foi identificado como ladrão de banco! + %1 zidentyfikowany jako kasairz rabujący banki! + %1 被认定为银行抢劫犯! + + + No illegal items + Žádné ilegální položek + No objetos ilegales + + Keine illegalen Gegenstände. + Aucun objet illégal + Nessun oggetto illegale + Sem items ilegais + Brak kontrabandy i nielegalnych przedmiotów + 没有非法物品 + + + You are not near a door! + Nejste u dveří! + No estas cerca de una puerta! + + Du bist nicht in der Nähe einer Tür! + Vous n'êtes pas près d'une porte ! + Non sei vicno ad una porta! + Você não está perto de uma porta! + Nie jesteś przy drzwiach + 你不在门附近! + + + You need to enable Picture in Picture (PiP) through your video settings to use this! + Je nutné povolit obraz v obraze (PIP) pomocí nastavení videa použít tento! + Debes habilitar la opcion de "Picture in Picture"(PiP) En tus opciones de video para usar esto! + + Du musst "Bild in Bild" (PiP) in deinen Video-Einstellungen aktivieren, um dies nutzen zu können! + Vous devez activer le "Picture in Picture" (PiP) dans vos paramètres vidéo pour utilser ceci ! + Devi attivare Picture in Picture (PiP) nelle tue impostazioni video per usare questa funzione! + Você precisa habilitar o Picture in Picture (PiP), através das suas configurações de vídeo para usar esta opção! + Musisz włączyć Obraz w obrazie (PiP) w ustawieniach graficznych aby tego używać! + 您需要通过视频设置启用画中画(PiP)才能使用此功能! + + + Licenses: + licencí + Licencias: + + Lizenzen: + Licences : + Licenze: + Licenças: + Licencje: + 许可证: + + + No Licenses + žádné licence + No Licencias + + Keine Lizenzen! + Aucune licence + Nessuna Licenza + Sem Licenças + Brak licencji + 没有许可证 + + + Nothing illegal in this vehicle + Nic nezákonného v tomto vozidle + Nada ilegal en este vehículo + + Nichts Illegales in diesem Fahrzeug. + Rien d'illégal dans ce véhicule + Niente di illegale nel veicolo + Nada ilegal dentro do veículo + Nie znaleziono niczego nielegalnego w pojeździe + 这载具没有非法物品 + + + Nothing illegal in this container. + Nic nezákonného v tomto kontejneru + Nada ilegal en este contenedor + Nulla di illegale in questo contenitore + Nic nielegalnego w tym pojemniku. + + Nada ilegal dentro do container + Rien d'illégal dans ce conteneur + Nichts Illegales in diesem Container. + 这个库存没有非法物品。 + + + This vehicle is empty + Toto vozidlo je prázdná + Este vehículo esta limpio + + Dieses Fahrzeug ist leer. + Ce véhicule est vide + Questo veicolo è vuoto + Esse veículo está vazio + Pojazd jest pusty + 这载具是空的 + + + This container is empty + Tento zásobník je prázdný + Ce conteneur est vide + Este contenedor esta vacío + Questo contenitore è vuoto + Ten pojemnik jest pusty + Este recipiente está vazio + Этот контейнер пуст + Dieser Container ist leer. + 这个库存是空的 + + + $%1 from the Federal Reserve robbery was returned from the robber being killed. + $%1 z Federálního rezervního systému loupeže byla vrácena ze lupič byl zabit. + $%1 de la Reserva Federal fue devuelto, ya que mataron al ladrón. + + $%1 wurden in die Zentralbank zurückgebracht, weil der Bankräuber gestorben ist. + $%1 du vol de la Banque Fédérale ont été récupérés sur le braqueur, qui vient d'être tué. + $%1 della rapina alla Riserva Federale sono stati recuperati dal rapinatore ucciso. + R$%1 que foi roubado da Reserva Federal retornou a ela após a morte do ladrão. + $%1 z kradzieży w Banku zostało zwrócone po zabiciu włamywacza. + 由于抢劫犯被杀死,联邦储备被抢的 $%1 被归还。 + + + Repairing vault... + Oprava klenby ... + Reparando bóveda... + + Tresor wird repariert... + Réparation du coffre... + Riparando il Caveau + Reparando Cofre... + Naprawiam skarbiec... + 修理金库... + + + The vault is now fixed and re-secured. + Klenba je nyní pevně stanovena a re-zabezpečeny. + La bóveda esta reparada y segura. + + Der Tresor wurde repariert. + Le coffre est de nouveau sécurisé. + Il Caveau è stato riparato e messo in sicurezza. + O Cofre foi consertado e está seguro. + Skarbiec jest naprawiony i zabezpieczony. + 金库现在已修复并重新加固。 + + + The vault is already locked? + Klenba je již uzamčen? + La bóveda ya esta cerrada? + + Ist der Tresor abgeschlossen? + Le coffre est déjà fermé? + Il Caveau è già bloccato? + O Cofre está trancado? + Skarbiec jest zablokowany? + 金库已经锁好了? + + + You can't enter anything below 1! + Nemůžete nic zadávat menší než 1! + No puede poner nada menor que 1! + + Du kannst nichts unter 1 eingeben! + Vous ne pouvez pas prendre moins de 1 objet ! + Non puoi selezionare nulla sotto l'1! + Não é permitido usar valores abaixo de 1! + Nie możesz wprowadzić niczego poniżej 1! + 你不能输入少于1的任何物品! + + + You can't store anything but gold bars in the safe. + Nemůžete ukládat nic jiného než zlaté pruty v trezoru. + Solo puedes guardar barras de oro en la bóveda. + + Du kannst nur Goldbarren in den Tresor legen. + Vous ne pouvez rien stocker à part des lingots d'or dans le coffre. + Nella cassaforte puoi depositare solo lingotti d'oro. + Você só pode guardar Barras de Ouro no cofre. + Nie możesz składować niczego poza sztabami złota w sejfie. + 保险箱除了金条外,你不能存放其它物品。 + + + You don't have %1 gold bar(s) + Nemáte%1 zlatá tyč (y) + No tienes %1 barra(s) de oro + + Du hast keine %1 Goldbarren! + Vous n'avez pas %1 lingot(s) d'or + Non hai %1 lingotti d'oro + Você não tem %1 Barra(s) de Ouro + Nie masz %1 sztab(y) złota + 你没有 %1 根金条 + + + Couldn't remove the item(s) from your inventory to put in the safe. + Nepodařilo se odstranit položky) z inventáře dát do trezoru. + No se pudieron mover las objetos de tu inventario a la caja. + + Es konnten keine Gegenstände von deinem Inventar in den Tresor gelegt werden. + Vous ne pouvez pas supprimer les items de votre inventaire pour les mettre dans le coffre. + Non è stato possibile rimuovere gli oggetti dal tuo inventario per metterli nella cassaforte. + Não foi possível mover o item do inventário para o cofre. + Nie można usunąć rzeczy z twojego wyposażenia aby włożyć je do sejfu + 无法从你的库存中取出物品放在保险箱里。 + + + Couldn't search %1 + Nemohl hledání%1 + No se pudo buscar a %1 + + %1 konnte nicht durchsucht werden. + Impossible de fouiller %1 + Impossibile ispezionare %1 + Não foi possível buscar por %1 + Nie można przeszukać %1 + 无法搜索 %1 + + + Repairing Door... + Oprava dveří ... + Reparando Puerta... + + Tür wird repariert... + Réparation de la porte... + Riparando la porta... + Reparando a porta.... + Naprawiam drzwi... + 修理门... + + + No Licenses<br/> + Žádné Licence < br / > + No Licencias<br/> + + Keine Lizenzen!<br/> + Aucune licence<br/> + Nessuna Licenza<br/> + Você não tem licença<br/> + Brak licencji<br/> + 没有许可证<br/> + + + No one has sold to this dealer recently. + Nikdo se prodalo tohoto prodejce nedávno. + Nadie le ha vendido a este comerciante recientemente. + + Niemand hat kürzlich an diesem Dealer etwas verkauft. + Personne n'est venu vendre quelque chose ici récemment. + Non è stato visto nessuno vendere a questo spacciatore di recente. + Ninguém vendeu para esse negociante recentemente + Nikt nie sprzedawał ostatnio u dilera. + 最近没有人出售物品给这个经销商。 + + + The following people have been selling to this dealer recently. + Následující lidé byli prodeji tohoto prodejce nedávno. + Las siguientes personas le han estado vendiendo a este comerciante recientemente. + + Folgende Personen haben kürzlich an diesem Dealer etwas verkauft: + Les personnes suivantes sont venues vendre quelque chose récemment. + Le seguenti persone sono state viste vendere a questo spacciatore. + Os seguintes jogadores venderam para esse negociante recentemente. + Ostatnio u dilera sprzedawali następujący ludzie. + 以下人员最近一直在向这个经销商销售物品。 + + + Radar + Radar + Radar + + Radar + Radar + Autovelox + Radar + Radar + 测速雷达 + + + Vehicle Speed %1 km/h + Rychlost vozidla%1 km / h + Velocidad %1 km/h + + Geschwindigkeit: %1 km/h! + Vitesse du véhicule %1 km/h + Velocità veicolo %1 km/h + Velocidade do Veículo %1 km/h + Prędkość pojazdu %1 km/h + 载具速度 %1 km/h + + + You have been released automatically for excessive restrainment time + Byli jste automaticky uvolněn pro nadměrnou restrainment čas + Has sido liberado automáticamente por tiempo excesivo de estar retenido. + + Du wurdest automatisch freigelassen, da die maximale Verhaftungszeit überschritten wurde. + Vous avez été démenotté automatiquement pour un menottage excessivement long + Sei stato automaticamente liberato per essere rimasto ammanettato troppo tempo + Você foi solto automaticamente, devido ao tempo limite ter expirado. + Zostałeś automatycznie rozkuty z uwagi na długi upływ czasu od skucia. + 由于约束时间过长你已经被自动释放 + + + You have been restrained by %1 + Byli jste omezeni%1 + Has sido retenido por %1 + + Du wurdest von %1 festgenommen. + Vous avez été menotté par %1 + %1 ti ha messo le manette + Você foi imobilizado por %1 + Zostałeś rozkuty przez %1 + 你被 %1 约束了 + + + Who do you think you are? + Kdo si myslíš že jsi? + Qui pensez-vous être? + ¿Quién te crees que eres? + Chi ti credi di essere? + Za kogo Ty się masz? + Quem você pensa que é? + Кто ты, по-твоему, такой? + Was glaubst du wer du bist? + 你以为你是谁? + + + You must select a perp. + Je třeba vybrat pachatele. + Vous devez sélectionner une personne. + Debe seleccionar un asesino. + È necessario selezionare un criminale. + Musisz wybrać perp. + Você deve selecionar um criminoso. + Вы должны выбрать преступника. + Du musst einen Verbrecher auswählen. + 你必须选择一个罪犯。 + + + You must select a crime. + Je třeba vybrat trestného činu. + Vous devez sélectionner un crime. + Debe seleccionar un crimen. + È necessario selezionare un crimine. + Musisz wybrać przestępstwa. + Você deve selecionar um crime. + Вы должны выбрать преступление. + Du musst ein Verbrechen auswählen. + 你必须选择一种犯罪行为。 + + + Failed to fetch crimes. + Nepodařilo se načíst trestných činů. + Impossible de récupérer les crimes. + No se pudieron obtener los crímenes. + Impossibile recuperare i crimini. + Nie udało się pobrać przestępstw. + Falha ao buscar crimes. + Не удалось получить преступления. + Die Verbrechen konnten nicht heruntergeladen werden. + 无法搜索犯罪记录。 + + + + + You tried to give %1 %2 %3 but they couldn't hold that so it was returned. + Pokusili jste se dát% %1 %2 3, ale nemohli si myslí, že tak to bylo se vrátil. + Le tratastes de dar %1 %2 %3 pero no tenian espacio asi que se te devolvió. + + Du wolltest %1 %2 %3 geben, aber er hat keinen Platz in seinem Inventar und hat es darum zurückgegeben. + Vous avez essayé de donner %1 %2 %3 mais il n'a pas assez de place et vous a tout redonné. + Hai provato a dare a %1 %2 unità di %3 ma non poteva trasportarlo quindi ti sono state restituite restituite. + Você tentou dar %1 %2 %3, mas não conseguiu segurar e por isso que foi devolvido. + Próbowałeś dać %1 %2 %3 lecz gracz nie mógł tego unieść, przedmioty zostały zwrócone. + 你试着给 %1 %2 %3 但他们不能持有,所以物品被归还。 + + + %1 returned %2 %3 because they couldn't hold that amount. + %1 vrátila% %2 3, protože oni nemohli držet tuto částku. + %1 devolvió %2 %3 porque no tenian espacio. + + %1 hat %2 %3 zurückgegeben, weil er nicht so viel tragen kann. + %1 vous a redonné %2 %3 parce qu'il ne pouvait pas en prendre autant. + %1 ha restituito %2 %3 perchè non poteva trasportare quella quantità + %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. + %1 zwrócił %2 %3 ponieważ nie mógł tego unieść + %1 返还 %2 %3 因为他们拿不出这笔钱。 + + + %1 has gave you %2 but you can only hold %3 so %4 was returned back. + %1 vám již dal%2, ale můžete mít pouze% %3 4 tak byla vrácena zpět. + %1 te a dado %2, pero solo puedes cargar %3 asi que %4 fue devuelto. + + %1 hat dir %2 gegeben, du kannst aber nur %3 tragen, also hast du %4 zurückgegeben. + %1 vous a donné %2 mais vous ne pouvez en prendre que %3 donc %4 a été redonné. + %1 ti ha dato %2 ma puoi portare solo %3 quindi %4 unità sono state restituite. + %1 retornou %2 %3 porque não conseguiu segurar essa quantidade. + %1 dał ci %2 lecz możesz unieść tylko %3, w związku z tym zwróciłeś %4. + %1 已经给了你 %2 但你只能持有 %3 所以 %4 被退回. + + + Do you want to add this item to your weapon or inventory? If you add it to your weapon your current existing attachment will be lost! + Chcete přidat tuto položku do zbraně nebo inventáře? Pokud si jej přidat do svého zbraň váš současný stávající příloha bude ztraceno! + Quieres agregar este Objeto/Arma a tu inventario? Si lo agregas a tu arma tu accesorio actual se perdera! + + Möchtest du den Aufsatz zu deiner Waffe oder deinem Inventar hinzufügen? Wenn du es zur Waffe hinzufügst, geht der vorhandene Aufsatz verloren! + Voulez-vous ajouter cet objet à votre arme ou le mettre dans votre inventaire? Si vous l'ajoutez à votre arme, votre accessoire actuel sera perdu! + Vuoi aggiungere questo oggetto alla tua arma o all'inventario? Se lo aggiungerai all'arma verrà rimosso l'eventuale accessorio già presente su di essa! + Você quer adicionar este item à sua arma ou inventário? Se você adicioná-lo à sua arma seu item atual existente será perdida! + Chcesz dodać tę rzecz do broni lub wyposażenia? Jeśli to zrobisz twoje aktualne wyposażenie broni zostanie zmienione na nowo zakupione i przepadnie! + 你想把这个物品添加到你的武器或库存中吗?如果你把它添加到你的武器,你当前的现有附件将会丢失! + + + Attachment slot taken! + Attachment slot vzít! + Slot de accesorio tomado! + + Aufsatz Platz belegt! + Accessoire déjà présent! + Slot Accessorio preso! + Slot de acessório utilizado! + Podjąłeś slot + 附件插槽! + + + Weapon + Zbraň + Arma + + Waffe + Armes + Arma + Armas + Broń + 武器 + + + Inventory + Inventář + Inventario + + Inventar + Inventaire + Inventario + Inventário + Wyposażenie + 库存 + + + You are not allowed to look into someone's backpack! + Nejste dovoleno dívat se do něčí batohu! + No tienes permiso de ver dentro de las mochilas de los demas! + + Du bist nicht berechtigt, in fremde Rucksäcke zu schauen! + Vous n'êtes pas autorisé à regarder dans le sac à dos de quelqu'un! + Non sei autorizzato a guardare negli zaini altrui! + Você não é liberado para olhar a mochila dos outros! + Nie możesz zaglądać do czyichś plecaków! + 你不允许看别人的背包! + + + You are not allowed to access this vehicle while its locked. + Nemáte povolen přístup k toto vozidlo zatímco jeho uzamčen. + No tienes permiso de accesar este vehículo mientras esta cerrado. + + Du bist nicht berechtigt, auf dieses Fahrzeug zuzugreifen, während es abgeschlossen ist. + Vous n'êtes pas autorisé à accéder à ce véhicule tant qu'il est verrouillé. + Non ti è permesso l'accesso a questo veicolo mentre è bloccato. + Você não pode acessar o veiculo enquanto ele estiver trancado. + Nie masz dostępu do pojazdu gdy ten jest zamknięty + 你不能在锁门的情况下进入载具。 + + + This vehicle's trunk is in use, only one person can use it at a time. + kmen toto vozidlo je v provozu, může jen jedna osoba ji použít najednou. + El maletero de este vehículo solo puede ser usado por una persona a la vez. + + Der Kofferraum dieses Fahrzeuges wird bereits benutzt, nur eine Person kann auf ihn zugreifen. + Le coffre de ce véhicule est en cours d'utilisation, une seule personne peut l'utiliser à la fois. + L'inventario di questo veicolo è in uso, può essere usato solo da una persona alla volta. + A mala desse veículo está em uso, somente uma pessoa pode acessá-la de cada vez. + Bagażnik pojazdu jest w użyciu, na raz może korzystać z niego tylko jedna osoba. + 这载具的存储箱正在使用中,一次只能一个人使用它。 + + + Failed Creating Dialog + Nepodařilo Vytvoření dialog + Falló la creación del dialogo + + Erstellen des Dialogs gescheitert! + Échec à la création de dialogue + Creazione dialogo fallito + Falha ao criar Diálogo + Nie udało się nawiązać kontaktu + 创建对话框失败 + + + You have unlocked your vehicle. + Jste odemkli své vozidlo. + Has abierto tu vehículo + + Du hast dein Fahrzeug aufgeschlossen. + Vous avez déverrouillé votre véhicule. + Hai sbloccato il tuo veicolo. + Você destrancou o veículo. + Odblokowałeś pojazd + 你已经解锁了你的载具。 + + + You have locked your vehicle. + Jste zamkli své vozidlo. + Has cerrado tu vehículo. + + Du hast dein Fahrzeug abgeschlossen. + Vous avez verrouillé votre véhicule. + Hai bloccato il tuo veicolo + Você trancou o veículo. + Zablokowałeś pojazd + 你已经锁好你的车了。 + + + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + This can only be done by the last driver of this vehicle. + 这只能由该车辆的最后一个驾驶员完成。 + + + Sirens On + Na sirény + Sirenas Prendidas + + Sirene AN + Sirènes On + Sirene accese + Sirene Ligada + Syrena włączona + 开启警笛 + + + Sirens Off + sirény Off + Sirenas Apagadas + + Sirene AUS + Sirènes Off + Sirene spente + Sirene Desligada + Syrena wyłączona + 关闭警笛 + + + You need to install storage containers to have storing capabilities! + Je třeba nainstalovat kontejnery skladovací mít skladovací kapacity! + Debes instalar contenedores para tener capabilidades de almacenamiento! + + Du musst dir Container kaufen, um etwas einlagern zu können! + Vous devez installer des conteneurs de stockage pour disposer de capacité de stockage! + Devi posizionare dei contenitori per aver la possibilità di depositare qualcosa! + Você tem que instalar caixas para poder guardar items! + Musisz zainstalować pojemniki aby uzyskać możliwość składowania rzeczy + 你需要安装存储容器才能具有存储功能! + + + This vehicle isn't capable of storing virtual items. + Toto vozidlo není schopné uchovávat virtuální položky. + Este vehiculo no puede guardar objetos virtuales. + + Dieses Fahrzeug kann keine virtuellen Gegenstände lagern. + Ce véhicule n'est pas en mesure de stocker des objets virtuels. + Questo veicolo non è in grado di trasportare oggetti virtuali. + Esse veículo não pode armazenar items virtuais. + Ten pojazd nie przechowuje wirtualnych przedmiotów + 此载具无法存储虚拟物品。 + + + Weight: + Hmotnost: + Peso: + + Gewicht: + Poids: + Peso: + Peso: + Waga: + 重量: + + + House Storage + dům Storage + Inventario de la casa + + Lagerplatz des Hauses + Conteneur de stockage + Inventario Casa + Cavalos de Força: + Domowa skrzynka + 房子存储 + + + Vehicle Trunk + vozidlo Trunk + Maletero de Vehículo + + Kofferraum + Coffre du véhicule + Inventario veicolo + Capacidade da mala: + Bagażnik pojazdu + 载具存储箱 + + + The vehicle either doesn't exist or is destroyed. + Vozidlo buď neexistuje, nebo je zničena. + El vehículo no existe o fue destruido. + + Le véhicule n'existe pas ou a été détruit. + Entweder existiert das Fahrzeug nicht oder es wurde zerstört. + Il veicolo non esiste o è stato distrutto. + Veículo não existe ou está destruido. + Pojazd nie istnieje lub jest zniszczony + 载具要么不存在要么被毁坏。 + + + Invalid number format + Neplatný formát number + Formato de numero inválido + + Ungültiges Zahlenformat! + Format de nombre invalide + Formato numerico non valido + Formato de número inválido. + Niepoprawny format liczby + 数字格式无效 + + + You can't enter anything below 1! + Nemůžete nic zadávat menší než 1! + No puedes poner nada menos que 1! + + Du kannst nichts unter 1 eingeben! + Vous ne pouvez pas prendre moins d'1 objet ! + Non puoi inserire nulla al di sotto di 1! + Você não pode digitar nada abaixo de 1! + Nie możesz wprowadzić niczego poniżej 1! + 你不能输入少于1的任何物品! + + + The vehicle doesn't have that many of that item. + Vozidlo nemá že mnohé z této položky. + El vehículo no tiene tantos de ese objeto. + + Das Fahrzeug hat nicht so viele dieser Gegenstände. + Le véhicule ne contient pas autant de cet objet. + Il veicolo non contiene così tanti oggetti. + O veículo não tem essa quantidade de items. + Pojazd nie posiada takiej ilości rzeczy. + 载具没有那么多的物品。 + + + Your sound was set to normal mode! + Váš zvuk byl nastaven do normálního režimu! + Votre son a été augmenté! + Tu sonido fue puesto en modo normal! + Il vostro sound è stato impostato in modalità normale! + + Die Lautstärke ist wieder normal! + Seu som voltou ao normal! + Dzwięk został ustawiony w tryb normalny! + 你的声音被设置为正常模式! + + + Your sound was set to fade mode! + Váš zvuk byl nastaven do režimu slábnout! + Votre son a été diminué! + Tu sonido fue puesto en modo bajo! + Il vostro sound è stato impostato in modalità a svanire! + + Deine Lautstärke wurde in den "Fade-Mode" geändert! + Seu som está abafado. + Dzwięk został ustawiony w tryb wyciszony! + 你的声音被设置为静音模式! + + + An RPG game mode developed by Tonic. + Mód RPG hra vyvinutá Tonic. + Un mode de jeu de RPG développé par Tonic. + Un modo de juego de rol desarrollado por Tonic. + Una modalità di gioco RPG sviluppato da Tonic. + Tryb gry RPG stworzona przez Tonic. + Um modo de jogo RPG desenvolvido pela Tonic. + Режим RPG игра, разработанная компанией Tonic. + Ein RPG-Modus entwickelt von Tonic. + 由Tonic开发的RPG游戏模式。 + + + + + Error saving container, couldn't locate house? + Chyba při ukládání kontejner, nemohl najít dům? + Error al salvar contenedor, no se pudo encontrar la casa? + + Fehler beim Speichern der Container: Es konnte kein Haus gefunden werden. + Erreur lors de la sauvegarde des conteneurs, impossible de localiser la maison. + Errore nel salvataggio del contenitore, impossibile trovare la cas a? + Erro ao salvar a caixa, não foi possível encontrar a casa. + Błąd w zapisywaniu pojemnika, nie można zlokalizować domu. + 保存库存错误,找不到房子? + + + You are not allowed to access this storage container without the owner opening it. + Nemáte povolen přístup k tomuto skladovacího kontejneru, aniž by majitel otevření. + No tienes permiso de acceder este contenedor, sin el dueño haberlo abierto. + + Du bist nicht berechtigt, auf diesen Container zuzugreifen, ohne dass der Besitzer ihn aufgeschlossen hat. + Vous n'êtes pas autorisé à accéder à ce conteneur de stockage sans que le propriétaire ne l'ouvre. + Non sei autorizzato ad accedere a questo contentitore senza il permesso del proprietario. + Você so pode acessar a caixa se o dono deixar ela aberta. + Nie masz dostępu do pojemnika dopóki właściciel go nie otworzy. + 除非所有者打开此库存,否则不允许访问该库存。 + + + There are no houses near you. + Nejsou žádné domy u vás. + No hay casas cerca de ti. + Non ci sono case vicino a voi. + Brak domy w pobliżu ciebie. + + Il n'y a aucune maison près de vous. + Não há casas perto de você. + Es gibt keine Häuser in deiner Nähe. + 你在附近没有房子。 + + + The storage box is over the stairs! + Úložný box je u konce schodů! + Le conteneur est dans les escaliers! + La caja de almacenamiento está sobre las escaleras! + Il contenitore è sopra le scale! + Schowek jest na schodach! + A caixa de armazenamento é sobre as escadas! + Ящик для хранения находится над лестницей! + Der Container ist über die Treppe! + 存储箱在楼梯上! + + + You are not the owner of the house. + Nejste vlastníkem domu. + No eres el dueño de la casa. + Non sei il proprietario della casa. + Nie jesteś właścicielem domu. + + Vous n'êtes pas le propriétaire de la maison. + Você não é o dono da casa. + Du bist nicht der Eigentümer des Hauses. + 你不是房子的主人。 + + + You have unlocked the door. + Jste odemkl dveře. + Has abierto la puerta. + + Du hast die Tür aufgeschlossen. + Vous avez ouvert la porte. + Hai sbloccato la porta. + Você destrancou a porta. + Odblokowałeś drzwi. + 你打开了门。 + + + You have locked the door. + Jste zamkli dveře. + Has cerrado con llave la puerta. + + Du hast die Tür abgeschlossen. + Vous avez fermé à clé la porte. + Hai bloccato la porta. + Você trancou a porta. + Zablokowałeś drzwi. + 你锁上了门。 + + + You are not near a door! + Nejste u dveří! + No estas cerca de una puerta! + + Keine Tür in der Nähe! + Vous n'êtes pas près d'une porte! + Non sei vicino ad una porta! + Você não está perto de uma porta! + Nie jesteś przy drzwiach! + 你不在门附近! + + + This house was recently sold and is still processing in the database. + Tento dům byl nedávno prodán a je stále zpracovává v databázi. + Esta casa fue vendida recientemente y esta procesando datos. + + Dieses Haus wurde vor Kurzem verkauft. + Cette maison a été récemment vendue et est en cours de traitement dans la base de données. + Questa casa è stata venduta di recente ed il database la sta ancora processando. + Essa casa já foi vendida, estamos processando a ordem de compra + Ten dom został ostatnio sprzedany i trwa jego przetwarzanie w bazie danych. + 这套房子最近已售出,目前仍在数据库中处理。 + + + You do not have a home owners license! + Nemáte majitelům licenci doma! + No tienes licencia mobiliaria! + + Du hast keine Eigentumsurkunde! + Vous n'avez pas le permis de propriétaires de maison! + Non hai la licenza per il possesso delle case! + Você não tem um Registro Civil para comprar casas! + Nie masz licencji zarządcy nieruchomości! + 你没有房产许可证! + + + You can only own %1 houses at a time. + Můžete vlastnit pouze%1 domy najednou. + Solo puedes ser dueño de %1 casas a la vez. + + Du darfst nur %1 Häuser zugleich besitzen. + Vous ne pouvez posséder que %1 maisons à la fois. + Puoi possedere solo %1 case + Você só pode ter %1 casa(s)! + Możesz posiadać maksymalnie %1 domów. + 你一次只能拥有 %1 套房子。 + + + You do not have enough money! + Nemáte dost peněz! + No tienes suficiente dinero! + + Du hast nicht genug Geld! + Vous n'avez pas assez d'argent! + Non hai fondi a sufficienza! + Você não tem todo esse dinheiro! + Nie masz tyle pieniędzy! + 你没有足够的钱! + + + This house is available for <t color='#8cff9b'>$%1</t><br/>It supports up to %2 storage containers + Tento dům je k dispozici pro <t color='#8cff9b'>$%1</t><br/> Podporuje až %2 skladovací kontejnery + Esta casa esta disponible por <t color='#8cff9b'>$%1</t><br/>Soporta hasta %2 contenedores + + Dieses Haus kostet <t color='#8cff9b'>$%1</t><br/>. Es unterstützt %2 Container. + Cette maison est disponible pour <t color='#8cff9b'>$%1</t><br/> Il prend en charge jusqu'à %2 conteneurs de stockage + Questa casa è disponibile per <t color='#8cff9b'>$%1</t><br/>Può supportare fino a %2 contenitori + Essa casa está disponível por <t color='#8cff9b'>R$%1</t><br/>Ela suporta até %2 caixa(s) + Ten dom jest dostępny za <t color='#8cff9b'>$%1</t><br/>Ma %2 miejsca na pojemniki do przechowywania wyposażenia + 这所房子可以住 <t color='#8cff9b'>$%1</t><br/>它最多支持 %2 个存储箱 + + + Purchase House + nákup domu + Comprar Casa + + Haus kaufen + Acheter la Maison + Compra Casa + Comprar Casa + Kup dom! + 购买房子 + + + This house doesn't belong to anyone. + Tento dům nepatří nikomu. + Esta casa no tiene dueño. + + Dieses Haus gehört niemandem. + Cette maison n'appartient à personne. + Questa casa non appartiene a nessuno. + Essa casa não tem dono. + Ten dom nie ma właściciela. + 这套房子不属于任何人。 + + + This person is not online there for you cannot raid their house! + Tato osoba není on-line proto nelze nájezd svůj dům! + No puedes asaltar esta casa, porque el dueño no esta en linea! + + Der Hausbesitzer ist nicht online, daher kannst du sein Haus nicht durchsuchen! + Cette personne n'est pas sur l'île, vous ne pouvez pas perquisitionner cette maison! + Questa persona non è online quindi non puoi perquisire la sua casa! + O dono da casa não está online, você não pode vasculhar a casa! + Osoba nie jest na serwerze, nie możesz przeszukać domu. + 房子主人不在线,你不能搜查房子! + + + The door is already unlocked! + Dveře jsou již odemčené! + La puerta ya esta abierta! + + Die Tür ist bereits offen! + La porte est déjà débloqué! + La porta è già sbloccata! + A porta está destrancada! + Drzwi są już odblokowane! + 门已经解锁了! + + + The door is already locked! + Dveře jsou již zamčené! + La porte est déjà fermée! + La puerta ya esta cerrada con llave! + La porta è già chiusa a chiave! + + Die Tür ist bereits verriegelt! + Esta porta já está trancada! + Drzwi są już zablokowane! + 门已经锁好了! + + + Breaking lock on door + Lámání zámek na dveřích + Rompiendo la cerradura de la puerta. + + Türschloss wird aufgebrochen... + En train de casser la serrure + Sbloccando la porta + Quebrando a fechadura da porta + Wyłamuje zablokowane drzwi... + 撬开门锁 + + + %1 your house is being raided by the cops! + %1 vašeho domu je vpadl policajti! + %1 tu casa esta siendo asaltada por los policías! + + %1 dein Haus wird von der Polizei durchsucht! + %1, votre maison est perquisitionnée par les policiers ! + %1 la Polizia si sta introducendo in casa tua! + %1 Sua casa está sendo vasculhada pela Policia! + %1 twój dom jest kontrolowany przez policję! + %1 的房子被警察搜查了! + + + House Owner + Majitel domu + Dueño de la casa + + Hauseigentümer + Propriétaire + Proprietario Casa + Proprietário + Właściciel domu + 房子主人 + + + There is nothing in this house. + Není nic v tomto domě. + Esta casa esta vacía. + + Es gibt nichts in diesem Haus. + Il n'y a rien dans cette maison + In questa casa non c'è nulla. + Essa casa está vazia. + Nie znaleziono niczego nielegalnego. + 房子里什么也没有。 + + + Searching House... + Vyhledávání dům ... + Buscando Casa... + + Haus wird durchsucht... + Perquisition de la Maison... + Perquisendo la Casa... + Vasculhando a casa... + Przeszukuję dom... + 搜索房子... + + + You went too far away from the house! + Jste zašel příliš daleko od domu! + Te alejastes mucho de la casa! + + Du hast dich zu weit vom Haus entfernt! + Vous vous êtes trop éloigné de la maison! + Sei andato troppo distante dalla casa! + Você está muito distante da casa! + Jesteś za daleko od domu! + 你离房子太远了! + + + A house was raided and had $%1 worth of drugs / contraband. + Dům byl vpadl a měl $%1 v hodnotě drog / kontrabandu. + Una casa fue asaltada y se econtraron $%1 en drogas / contrabando. + + Ein Haus wurde durchsucht und es wurden Drogen / Schmuggelware im Wert von $% gefunden. + Une maison a été perquisitionné et avait $%1 de drogue / contrebande. + Una casa è stata perquisita e sono stati trovati $%1 in materiali illegali. + A casa assaltada tem R$%1 em drogas ou contrabandos. + Podczas przeszukania domu znaleziono kontrabandę o wartości $%1. + 一所房子被搜查,查获价值 $%1 的毒品/违禁品。 + + + Nothing illegal in this house. + Nic nezákonného v tomto domě. + Nada ilegal en esta casa. + + Nichts Illegales in diesem Haus. + Rien d'illégal dans cette maison + Questa casa non contiene nulla d'illegale. + Nada ilegal nessa casa. + Nie znaleziono niczego nielegalnego. + 这房子没有违法物品。 + + + House storage unlocked + Dům skladování odemkl + Inventario de la casa abierto + + Lagerplatz des Hauses aufgeschlossen. + Stockage de la maison déverrouillé + Contenitori della casa sbloccati + Armário da casa destrancado + Pojemnik odblokowany + 房子存储箱解锁 + + + House storage locked + Dům skladování zamčené + Inventario de la casa cerrado con llave + + Lagerplatz des Hauses abgeschlossen. + Stockage de Maison verrouillé + Contenitori della casa bloccati + Armário da casa trancado + Pojemnik zablokowany + 房子存储箱锁定 + + + Locking up house please wait... + Zamykání domu čekejte prosím ... + La casa se esta cerrando con llave, por favor espere... + + Haus wird abgeschlosen, bitte warten... + Fermeture de la maison, veuillez patienter... + Bloccando la casa, attendere prego... + Trancando a casa, aguarde... + Blokuję zamykam dom proszę czekać... + 房子锁定中请稍等... + + + House has been locked up. + Dům byl zamčený. + La maison a été verrouillée. + La casa se a cerrado con llave. + + Haus wurde abgeschlossen. + La casa è stata bloccata. + Sua casa foi trancada! + Dom został zablokowany / zamknięty! + 房子被锁定。 + + + Are you sure you want to sell your house? It will sell for: <t color='#8cff9b'>$%1</t> + Jste si jisti, že chcete prodat svůj dům? To se bude prodávat za: <t color='#8cff9b'>$%1</t> + Estas seguro de que quieres vender tu casa? Se vendera por: <t color='#8cff9b'>$%1</t> + + Bist Du sicher, dass du dein Haus verkaufen möchtest? Du würdest dafür <t color='#8cff9b'>$%1</t> bekommen. + Etes-vous sûr de vouloir vendre votre maison? Elle se vendra pour: <t color='#8cff9b'>$%1</t> + Sei sicuro di voler vendere la tua casa? La venderai per: <t color='#8cff9b'>$%1</t> + Você tem certeza que deseja vender a casa? O valor de venda é: <t color='#8cff9b'>R$%1</t> + Jesteś pewny że chcesz sprzedać dom za <t color='#8cff9b'>$%1</t> + 你确定要卖掉你的房子吗?出售价格:<t color='#8cff9b'>$%1</t> + + + Are you sure you want to remove it? + Jsou si jisti, že jej chcete odstranit? + Estas seguro de que lo quieres remover? + Sei sicuro di voler rimuovere esso? + Czy na pewno chcesz go usunąć? + + Etes-vous sûr de vouloir supprimer le conteneur ? + Você tem certeza que quer remover isso? + Bist du sicher, dass du den Container entfernen möchtest? + 你确定要删除存储箱吗? + + + This house is already owned even though you shouldn't be seeing this hint... + Tento dům je již ve vlastnictví i když by nemělo být vidět tuto radu ... + Cette maison a déjà un propriétaire, même si vous ne devriez pas voir ce message ... + Esta casa es de propiedad ya pesar de que no debería estar viendo esta pista ... + Questa casa è già di proprietà, anche se non si dovrebbe essere visto questo suggerimento ... + Ten dom jest już własnością, nawet jeśli nie należy widzieć tę wskazówkę ... + Esta casa já é de propriedade mesmo que você não deveria estar vendo essa dica ... + Этот дом уже находится в собственности, даже если вы не должны видеть эту подсказку ... + Dieses Haus befindet sich bereits in deinem Besitz. Diesen Hinweis solltest du eigentlich gar nicht sehen... + 尽管你不该看到这个提示,但这所房子已经有房主了... + + + There is no owner for this house. + Neexistuje žádný majitel tohoto domu. + Il n'y a pas le propriétaire de cette maison. + No hay ningún propietario de esta casa. + Non vi è alcun proprietario per questa casa. + Nie ma właściciel tego domu. + Não há proprietário para esta casa. + Там нет владельца для этого дома. + Es gibt keinen Eigentümer für dieses Haus. + 这房子没有主人. + + + + + Food + Jídlo + Faim + Comida + Cibo + Jedzenie + + Hunger + Comida + 食物 + + + Health + Zdraví + Vie + Vida + Salute + Zdrowie + + Gesundheit + Vida + 健康 + + + Water + Voda + Soif + Agua + acqua + Woda + + Durst + Água + + + + + + There isn't a chopper on the helipad! + Není vrtulník na přistávací plocha pro vrtulník! + No hay un helicóptero en el Helipad. + + Es ist kein Helikopter auf dem Landeplatz! + Il n'y a pas d'hélicoptère sur l'héliport + Non c'è alcun elicottero sulla piazzola d'atterraggio + Não existe uma aeronave no heliponto! + W pobliżu nie ma helikoptera! + 直升机停机坪上没有直升机! + + + You need $%1 to service your chopper + Musíte $%1 servisních kontrol vrtulník + Necesitas $%1 para reparar el helicóptero. + + Du benötigst $%1, um deinen Helikopter zu warten. + Vous avez besoin de $%1 pour entretien de votre hélicoptère + Necessiti di $%1 per fare manutenzione al tuo elicottero + Você precisa de R$%1 para reparar a sua aeronave + Potrzebujesz $%1 aby serwisować helikopter + 你需要 $%1 来维修你的直升机 + + + Servicing Chopper [%1]... + Servis Chopper [%1] ... + Reparando Helicóptero [%1]... + + Helikopter wird gewartet [%1]... + Entretien [%1]... + Manutenendo Elicottero [%1]... + Reparando aeronave [%1]... + Serwisuję helikopter [%1]... + 维修直升机 [%1]... + + + The vehicle is no longer alive or on the helipad! + Vozidlo je již nežije nebo na přistávací plocha pro vrtulník! + El vehiculo no esta vivo o en el helipad! + + Das Fahrzeug wurde zerstört oder befindest sich nicht mehr auf dem Helikopterlandeplatz! + L'hélicoptère est détruit ou n'est plus sur l'héliport! + Il veicolo non è più attivo sulla piazzola d'atterraggio! + "A aeronave não está mais disponível no heliponto! + Pojazd nie jest dłużej dostępny na lądowisku + 载具不再存在或停在停机坪上! + + + Your chopper is now repaired and refuelled. + Váš vrtulník není opraveno a tankovat. + Tu helicóptero esta reparado y lleno de combustible. + + Der Helikopter ist nun repariert und aufgetankt. + Votre hélicoptère est maintenant réparé et ravitaillé + L'elicottero è stato riparato e rifornito di carburante. + Sua aeronave está reparada e com o tanque cheio! + Helikopter został naprawiony i natankowany + 你的直升机现在已经修好并加满油。 + + + + + Marijuana leaf + marihuana list + Cannabis + + Kannabis + Cannabis + Cannabis + Maconha não Processada + Konopie + 大麻叶 + + + Apple + Jablko + Manzana + + Apfel + Pomme + Mela + Maçã + Jabłko + 苹果 + + + Apples + jablka + Manzanas + + Äpfel + Pommes + Mele + Maçãs + Jabłka + 很多苹果 + + + Heroin + Heroin + Heroina + + Heroin + Heroïne + Eroina + Heroína + Heroina + 海洛因 + + + Oil + Olej + Petróleo + + Öl + Pétrole + Olio + Petróleo + Benzyna + 石油 + + + Peach + Broskev + Melocotón + + Pfirsich + Pêche + Pesca + Pêssego + Brzoskwinia + 桃子 + + + Peaches + broskve + Melocotones + + Pfirsiche + Pêches + Pesche + Pêssegos + Brzoskwinie + 很多桃子 + + + Crude Oil + Ropa + Petróleo Crudo + + Unverarbeitetes Öl + Pétrole non raffiné + Olio non processato + Petróleo não Refinado + Ropa naftowa + 原油 + + + Processed Oil + Zpracovaný olej + Petróleo Procesado + + Verarbeitetes Öl + Pétrole raffiné + Olio processato + Petróleo Refinado + Olej napędowy + 成品油 + + + Opium Poppy + Mák setý + Planta del Opio + + Unverarbeitetes Heroin + Graine de pavot + Eroina non processata + Heroína não Processada + Heroina nieoczyszczona + 罂粟 + + + Heroin + Heroin + Heroina + + Verarbeitetes Heroin + Héroïne + Eroina processata + Heroína Processada + Heroina oczyszczona + 海洛因 + + + Pot + Hrnec + Marihuana + + Marihuana + Marijuana + Marijuana + Maconha Processada + Marihuana + 大麻 + + + Raw Rabbit + Raw Rabbit + Carne de Conejo + + Rohes Hasenfleisch + Viande de Lapin + Carne di coniglio + Carne de Coelho + Mięso zająca + 生兔肉 + + + Grilled Rabbit + grilované Rabbit + Conejo Asado + + Gegrilltes Hasenfleisch + Lapin grillé + Carne di coniglio alla griglia + Carne de coelho grelhado + Grilowany zając + 烤兔肉 + + + Raw Salema + Raw Salema + Salema Crudo + + Rohe Sardine + Filet de Saupe + Carne di Salmone + Peixe Salema + Mięso salemy + 生沙丁鱼肉 + + + Grilled Salema + Grilované Salema + Salema Cocinado + + Gegrillte Sardine + Sardine grillée + Sardine alla griglia + Sardinha Grelhada + Grilowana Salema + 烤沙丁鱼肉 + + + Raw Ornate + Raw Ozdobený + Ornate Crudo + + Roher Kaiserfisch + Filet d'Ornate + Carne di Orata + Carne Francesa + Mięso Ornata + 生梭鱼肉 + + + Grilled Ornate + grilované Ozdobený + Ornate Cocinado + + Gegrillter Kaiserfisch + Doré grillé + Angelfish alla griglia + Angelfish Grelhado + Grilowany Ornat + 烤梭鱼肉 + + + Raw Mackerel + Raw Makrela + Verdel Crudo + + Rohe Makrele + Filet de Maquereau + Carne di Sgombro + Peixe Cavalinha + Mięso Makreli + 生鲭鱼肉 + + + Grilled Mackerel + grilované makrely + Verdel Cocinado + + Gegrillte Makrele + Maquereau grillé + Sgombro alla griglia + Cavalinha Grelhada + Grilowana Makrela + 烤鲭鱼肉 + + + Raw Tuna + syrového tuňáka + Atún Crudo + + Roher Thunfisch + Filet de Thon + Carne di Tonno + Peixe Tuna + Mięso Tuńczyka + 生金枪鱼肉 + + + Grilled Tuna + grilované Tuna + Atún Cocinado + + Gegrillter Thunfisch + Thon grillé + tonno alla griglia + Atum Grelhado + Grilowany Tuńczyk + 烤金枪鱼肉 + + + Raw Mullet + Raw Mullet + Lisa Cruda + + Rohe Meerbarbe + Filet de Mulet + Carne di Triglia + Peixe Mullet + Mięso Cefala + 生鲻鱼肉 + + + Fried Mullet + Fried Mullet + Lisa Cocinada + + Frittierte Meerbarbe + Rouget frits + Triglia fritta + Mullet Fritado + Grilowany Cefal + 油炸鲻鱼肉 + + + Raw Catshark + Raw máčka + Pez Gato Crudo + + Roher Katzenhai + Filet de Poisson Chat + Carne di Squalo + Tubarão Gato + Mięso Rekina + 生鲨鱼肉 + + + Fried Catshark + Fried máčka + Pez Gato Cocinado + + Frittierter Katzenhai + Poisson-chat frit + profondo palombo fritti + Tubarão Gato Frito + Grilowany Rekin + 油炸鲨鱼肉 + + + Raw Turtle + Raw Turtle + Carne de Tortuga + + Rohes Schildkrötenfleisch + Viande de Tortue + Carne di Tartaruga + Carne de Tartaruga + Mięso Żółwia + 生海龟肉 + + + Turtle Soup + Turtle Soup + Sopa de Tortuga + + Schildkrötensuppe + Soupe à la Tortue + Zuppa di Tartaruga + Sopa de Tartaruga + Zupa z żółwia + 海龟肉汤 + + + Raw Chicken + Raw Chicken + Carne de Pollo + + Poulet cru + Rohes Hühnchenfleisch + pollo crudo + Galinha Crua + Surowy Kurczak + 生鸡肉 + + + Deep Fried Chicken + Smažené kuře + Pollo Frito + + Schwarz Frittiertes Hühnchen + Poulet frit + Nero Fried Chicken + Frango Frito + Smażony Kurczak + 炸鸡肉 + + + Raw Rooster + Raw Kohout + Carne de Gallo + + Coq cru + Rohes Hähnchenfleisch + Rooster Raw + Galo Cru + Surowy Kogut + 生公鸡肉 + + + Grilled Rooster + grilované Kohout + Gallo Asado + + Gegrilltes Hähnchen + Coq grillé + cazzo alla griglia + Galo Grelhado + Grilowany Kogut + 烤鸡肉 + + + Raw Goat + Raw Kozí + Carne de Cabra + + Rohes Ziegenfleisch + Chèvre crue + Carne di capra Raw + Carne de Cabra Crua + Surowa Koza + 生山羊肉 + + + Grilled Goat + grilovaný kozí + Cabra Asada + + Gegrilltes Ziegenfleisch + Chèvre grillée + Carne di capra alla griglia + Carne de Cabra Grelhada + Grilowana Koza + 烤山羊肉 + + + Raw Sheep + Raw Ovce + Carne de Obeja + + Rohes Schafsfleisch + Mouton cru + Carne di pecora grezza + Carne de Ovelha Crua + Surowa Owca + 生绵羊肉 + + + Grilled Sheep + grilované Ovce + Obeja Asada + + Gegrilltes Schafsfleisch + Mouton grillé + Mutton alla griglia + Mutton Grelhado + Grilowana Owca + 烤全羊肉 + + + Fishing Pole + Rybářský prut + Palo de Pesca + + Angel + Canne à pêche + Canna da pesca + Vara de Pescar + Wędka + 钓鱼竿 + + + Water Bottle + Láhev na vodu + Botella de Agua + + Wasserflasche + Bouteille d'eau + Bottiglia d'acqua + Garrafa d'água + Butelka wody + 瓶装水 + + + Coffee + Káva + Café + + Kaffee + Café + Caffè + Café + Kawa + 咖啡 + + + Donuts + koblihy + Donas + + Donuts + Donuts + Ciambelle + Rosquinha + Pączki + 甜甜圈 + + + Empty Fuel Canister + Prázdný palivo může + Bidón de Combustible Vacío + + Leerer Benzinkanister + Jerrican Vide + Tanica di carburante vuota + Tanque de Gasolina Vazio + Pusty kanister + 空汽油桶 + + + Full Fuel Canister + Plná palivo může + Bidón de Combustible Lleno + + Gefüllter Benzinkanister + Jerrican de Carburant + Tanica di carburante piena + Tanque de Gasolina Cheio + Pełny Kanister + 满汽油桶 + + + Defibrillator + defibrilátor + Desfibrilador + + Defibrillator + Défibrillateur + defibrillatore + Desfibrilador + defibrylator + 心脏除颤器 + + + Toolkit + Toolkit + Kit de Herramientas + + Werkzeugkit + Boîte à outils + kit di strumenti + conjunto de ferramentas + zestaw narzędzi + 维修包 + + + Pickaxe + Krumpáč + Pico + + Spitzhacke + Pioche + Piccone + Picareta + Kilof + 镐子 + + + Copper Ore + Měděná ruda + Cobre + + Kupfererz + Minerai de Cuivre + Minerale di Rame + Pepita de Cobre + Ruda miedzi + 铜矿石 + + + Iron Ore + Železná Ruda + Hierro + + Eisenerz + Minerai de Fer + Minerale di Ferro + Pepita de Ferro + Ruda żelaza + 铁矿石 + + + Iron Ingot + Železná cihla + Lingote de Hierro + + Eisenbarren + Lingot de Fer + Lingotto di ferro + Barra de Ferro + Sztabka żelaza + 铁锭 + + + Copper Ingot + měď ingotů + Lingote de Cobre + + Kupferbarren + Lingot de cuivre + Lingotto di Rame + Barra de Cobre + Sztabka miedzi + 铜锭 + + + Sand + Písek + Arena + + Sand + Sable + Sabbia + Areia + Piasek + 沙子 + + + Salt + Sůl + Sal + + Salz + Sel + Sale + Sal + Sól kopana + 盐矿 + + + Refined Salt + rafinovaný Salt + Sal Refinada + + Raffiniertes Salz + Sel traité + Sale raffinato + Sal Refinado + Sól rafinowana + 食盐 + + + Glass + Sklo + Vidrio + + Glas + Verre + Vetro + Vidro + Szkło + 玻璃 + + + Polished Diamond + leštěný Diamond + Diamante Pulido + + Geschliffene Diamanten + Diamant Taillé + Diamante tagliato + Diamante Lapidado + Diament szlifowany + 钻石抛光 + + + Uncut Diamond + Uncut Diamond + Diamante Bruto + + Ungeschliffene Diamanten + Diamant Brut + Diamante grezzo + Diamante Bruto + Diament surowy + 未切割钻石 + + + Tactical Bacon + Tactical Bacon + Tocino + + Taktischer Speck + Bacon tactique + Carne secca + Bacon Tático + Posiłek taktyczny + 战术培根 + + + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + RedGull + 红牛 + + + Lockpick + Šperhák + Ganzúa + + Dietrich + Outil de crochetage + Grimaldello + Chave Mestra + Wytrych + 开锁工具 + + + Rock + Skála + Piedra + + Stein + Pierre + Roccia + Pedra + Skała + 矿石 + + + Cement Bag + cement Bag + Bolsa de Cemento + + Zement Sack + Sac de ciment + Sacco di Cemento + Saco de Cimento + Worek cementu + 水泥 + + + Gold Bar + Gold Bar + Barra de Oro + + Goldbarren + Lingot d'or + Lingotto d'Oro + Barra de Ouro + Sztabka złota + 金条 + + + Blasting Charge + Trhací Charge + Carga Explosiva + + Sprengladung + Charge de dynamite + Carica Esplosiva + Explosivo + Ładunek wybuchowy + 爆破装置 + + + Bolt Cutter + Bolt Cutter + Cizalla + + Bolzenschneider + Outils de serrurier + Tronchese + Alicate + Nożyce do kłódek + 螺栓切割机 + + + Bomb Defuse Kit + Bomby zneškodnit Kit + Kit para Desarmar Bombas + + Bombenentschärfungskit + Outils de désamorçage + Attrezzi per il disinnesco + Kit anti-bomba + Zestaw saperski + 爆破拆除工具 + + + Small Storage Box + Malá přihrádka + Contenedor Pequeño + + Kleine Lagerbox + Petit Conteneur de stockage + Contenitore piccolo + Caixa Pequena + Mały pojemnik + 小储物箱 + + + Large Storage Box + Velký úložný box + Contenedor Grande + + Große Lagerbox + Grand Conteneur de stockage + Contenitore grande + Caixa Grande + Duży pojemnik + 大储物箱 + + + Coca Leaf + Coca Leaf + Hoja de Coca + + Unverarbeitetes Kokain + Feuille de Coca + Cocaina non processata + Cocaína não Refinada + Nieoczyszczona kokaina + 古柯叶 + + + Coke + Koks + Cocaína + + Verarbeitetes Kokain + Cocaïne + Cocaina processata + Cocaína Refinada + Oczyszczona kokaina + 可卡因 + + + Spike Strip + Spike Strip + Barrera de Clavos + + Nagelband + Herse + Striscia Chiodata + Tapete de Espinhos + Kolczatka drogowa + 钉刺带 + + + + + Driver License + Řidičský průkaz + Licencia de Conducir + + Führerschein + Permis de Conduire + Licenza di Guida + Licença de Motorista + Prawo jazdy + 小车驾驶证 + + + Pilot License + pilotní licence + Licencia de Piloto + + Pilotenschein + Licence de Pilote + Licenza da Pilota + Licença de Piloto + Licencja Pilota + 飞行员证 + + + Heroin Training + heroin Training + Entrenamiento de Heroina + + Heroinausbildung + Transformation d'Héroïne + Processo Eroina + Treinamento de Heroina + Wytwarzanie Heroiny + 海洛因加工证 + + + Oil Processing + Zpracování olej + Procesamiento de Petroleo + + Ölverarbeitung + Raffinage du pétrole + Processo Olio + Refinamento de Petróleo + Rafinacja ropy naftowej + 石油提炼证 + + + Diving License + potápěčské licence + Licencia de Buceo + + Taucherschein + Permis de Plongée + Licenza di Pesca + Licença de Mergulho + Licencja Nurka + 潜水证 + + + Boating License + Vodácký licence + Licencia de Botes + + Bootsschein + Permis Bateau + Licenza Nautica + Licença de Barco + Patent Motorowodny + 海员证 + + + Firearm License + zbrojní průkaz + Licencia de Armas + + Waffenschein + Permis de Port d'Arme + Porto d'Armi + Licença de Porte de Armas + Pozwolenie na broń + 持枪证 + + + Coast Guard License + Pobřežní stráž licence + Licencia de Guardia Costera + + Küstenwachenausbildung + Garde-Côtes + Licenza Guardia Costiera + Licença da Guarda Costeira + Trening straż przybrzeżna + 海岸警卫队证 + + + Rebel Training + Rebel Training + Entrenamiento Rebelde + + Rebellenausbildung + Entraînement rebelle + Licenza da Ribelle + Treinamento Rebelde + Trening rebelianta + 叛军训练 + + + Truck License + Truck licence + Licencia de Camiones + + LKW-Führerschein + Permis Poids Lourds + Licenza Camion + Licença de Caminhão + Prawo jazdy - ciężarówki + 货车驾驶证 + + + Diamond Processing + Diamond Processing + Procesamiento de Diamantes + + Diamantenverarbeitung + Taillage des Diamants + Processo Diamanti + Lapidação de Diamante + Szlifierz diamentów + 钻石加工厂 + + + Copper Processing + Zpracování měď + Procesamiento de Cobre + + Kupferverarbeitung + Fonte du Cuivre + Processo Rame + Processamento de Cobre + Wytapianie miedzi + 铜矿加工 + + + Iron Processing + Zpracování Iron + Procesamiento de Hierro + + Eisenverarbeitung + Fonte du Fer + Processo Ferro + Processamento de Ferro + Wytapianie żelaza + 铁矿加工 + + + Sand Processing + Zpracování písek + Procesamiento de Arena + + Sandverarbeitung + Traitement du Sable + Processo Sabbia + Processamento de Areia + Hutnik szkła z piasku + 玻璃制造证 + + + Salt Processing + sůl Processing + Procesamiento de Sal + + Salzverarbeitung + Traitement du Sel + Processo Sale + Processamento de Sal + Warzenie soli + 食盐制造证 + + + Cocaine Training + kokain Training + Entrenamiento de Cocaína + + Kokainausbildung + Transformation de la Cocaïne + Processo Cocaina + Treinamento de Cocaína + Oczyszczanie kokainy + 可卡因加工证 + + + Marijuana Training + Marihuana Training + Entrenamiento de Marihuana + + Marihuanaausbildung + Traitement du Cannabis + Processo Marijuana + Treinamento de Maconha + Suszenie konopi + 大麻加工证 + + + Cement Mixing License + Cement Mixing licence + Licencia para Mezclar Cemento + + Zementmisch-Lizenz + Fabrication du Ciment + Processo Cemento + Licença de Cimento + Wytwórca cementu + 水泥制造证 + + + Medical Marijuana License + Medical Marihuana Licence + Licencia de Marihuana Medicinal + + Medizinisches Marijuana-Lizenz + Licence de Cannabis Médical + Medical Marijuana Licenza + Licença Medical Marijuana + Medical Marijuana Licencji + 医用大麻许可证 + + + Home Owners License + Home Majitelé licence + Licencia Mobiliaria + + Eigentumsurkunde + Droit de Propriété + Licenza possesso Casa + Licença de Casas + Zarządca nieruchomości + 房产证 + + + + + This can only be used on a vault. + To lze použít pouze v trezoru. + Esto solo se puede usar en una bóveda. + + Dies kann nur an einem Tresor benutzt werden. + Cela ne peut être utilisé que sur un coffre-fort. + Può essere usata solo sulla cassaforte. + Isso só pode ser usado em um cofre. + Możesz tego użyć na skarbcu. + 这只能用于金库。 + + + There is already a charge placed on this vault. + Existuje již náboj umístěn na tomto trezoru. + Ya hay un explosivo puesto en esta bóveda + + Es gibt bereits eine Sprengladung am Tresor. + Une charge de dynamite est déjà placé sur ce coffre. + C'è già una carica piazzata sulla cassaforte. + Já existe uma carga colocada sobre esse cofre. + Już założono ładunek wybuchowy na skarbcu. + 这座金库已经安装爆破装置。 + + + The vault is already opened. + Klenba je již otevřen. + La bóveda ya esta abierta. + + Der Tresor ist bereits offen. + Le coffre est déjà ouvert. + La cassaforte è già aperta. + O cofre está aberto. + Skarbiec jest już otwarty. + 金库已经打开了. + + + A blasting charge has been placed on the federal reserves vault, You have till the clock runs out to disarm the charge! + S rozbuškami náboj byl umístěn na federální rezervy trezoru, jste až do hodiny vyčerpá odzbrojit náboj! + Una carga explosiva ha sido puesta en la bóveda de la reserva federal, tienes hasta que se acabe el tiempo para desarmar el explosivo! + + Eine Sprengladung wurde am Safe angebracht. Du hast Zeit, bis die Uhr abläuft, um die Ladung zu entschärfen! + Une charge de dynamite a été placée sur le coffre de la réserve fédérale. Vous avez jusqu'au temps imparti pour désarmorcer la charge ! + Una carica esplosiva è stata piazzata sulla cassaforte della Riserva Federale, puoi cercare di disinnescarla prima che scada il tempo! + O explosivo foi colocado no cofre , você tem até o tempo acabar para desarmar o explosivo. + Ładunek wybuchowy został założony na skarbcu rezerw federalnych, musisz rozbroić ładunek nim wybuchnie! + 金库里已经安装了爆破装置,你必须有足够的时间解除爆破装置! + + + The timer is ticking! Keep the cops away from the vault! + Časovač je tikání! Udržujte policajty od trezoru! + El tiempo esta corriendo, manten alejados a los policías! + + Der Timer läuft! Halte die Polizei von Safe fern! + La minuterie est lancée! Gardez la police loin de la bombe ! + Il tempo sta scorrendo! Tieni la polizia lontana dalla cassaforte! + O tempo está passando! Mantenha os policiais longe do cofre + Zegar tyka! Trzymaj policję z dala od skarbca! + 计时器开始计时!请远离爆破点! + + + The charge has been disarmed! + Náboj byl odzbrojen! + El explosivo ha sido desarmado! + + Die Sprengladung wurde entschärft! + La charge a été désamorcée ! + La carica esplosiva è stata disinnescata! + O explosivo foi desarmado! + Ładunek wybuchowy rozbrojony! + 爆破装置被解除! + + + The vault is now opened + Klenba je nyní otevřena + La bóveda esta abierta + + Der Tresor ist jetzt offen! + Le coffre est maintenant ouvert + La cassaforte è stata aperta + O cofre está aberto. + Skarbiec otwarty + 金库现在已经打开了 + + + You must open the container before placing the charge! + Je nutné otevřít nádobu před umístěním nabíječku! + Vous devez ouvrir le conteneur avant de placer le chargeur ! + Debes abrir el contenedor antes de poner el explosivo! + È necessario aprire il contenitore prima di mettere il caricabatterie! + Musisz otworzyć pojemnik przed wprowadzeniem opłat! + + Você deve abrir o container antes de colocar o explosivo! + Du musst den Container öffnen, bevor du die Ladung platzieren kannst! + 安装爆破装置前你必须打开金库大门! + + + You are not looking at a house door. + Nejste při pohledu na dveře domu. + No estas viendo a la puerta de una casa. + + Du siehst keine Haustür an. + Vous n'êtes pas en face de la porte. + Non sei girato verso la porta di una casa. + Você não esta olhando para a porta. + Nie patrzysz w stronę drzwi. + 你需要靠近门才能使用。 + + + !!!!! SOMEONE IS BREAKING INTO THE FEDERAL RESERVE !!!!!! + !!!!! Někdo vloupání do Federálního rezervního systému !!!!!! + !!!!! LA RESERVA FEDERAL ESTA SIENDO ASALTADA !!!!!! + + !!!!! JEMAND BRICHT IN DIE ZENTRALBANK EIN !!!!!! + !!!!! QUELQU'UN TENTE DE S'INTRODUIRE DANS LA RÉSERVE FÉDÉRALE !!!!!! + !!!!!! QUALCUNO STA CERCANDO DI INTRODURSI NELLA RISERVA FEDERALE !!!!!! + !!!!! A RESERVA FEDERAL ESTÁ SENDO ROUBADA !!!!!! + !!!!!! KTOŚ SIĘ WŁAMUJE DO BANKU REZERW FEDERALNYCH !!!!! + !!!!! 有人闯进金库 !!!!!! + + + %1 was seen breaking into a house. + %1 byl viděn vloupání do domu. + %1 ha sido visto entrando a una casa. + + %1 wurde beim Einbruch in ein Haus gesehen. + %1 a été vu rentrant dans une maison par effraction. + %1 è stato visto fare irruzione in una casa. + %1 foi visto invadindo sua casa. + %1 był widziany jak włamywał się do domu. + %1 闯入一所房子。 + + + Cutting lock on door + Řezání zámek na dveřích + Cortando la cerradura de la puerta + + Schloss wird aufgebrochen... + Crochetage de la serrure + Tranciando i blocchi sulla porta + Quebrando o cadeado da porta + Przecinam zabezpieczenia domu + 门锁被撬 + + + You must open the outside doors before opening it! + Je nutné otevřít venkovní dveře před otevřením! + Vous devez ouvrir les portes extérieures avant de l'ouvrir ! + Debes abrir las puertas de afuera antes de abrir esta! + È necessario aprire le porte esterne prima di aprirlo! + Musisz otworzyć zewnętrzne drzwi przed otwarciem! + + Você deve abrir as portas externas antes de abrir essa! + Du musst die Außentüren öffnen, bevor du weitermachen kannst! + 打开门前你必须先打开外面的门! + + + You are not looking at a vault. + Nejste při pohledu na klenbu. + Vous ne regardez pas le coffre. + No estas apuntando a la bóveda. + Non cercate in un caveau. + Nie jesteś patrząc na sklepieniu. + Você não está olhando para um cofre. + Вы не смотрите на хранилище. + Du siehst keinen Tresor an. + 你不是金库看守。 + + + There is no charge on the vault? + Neexistuje žádný poplatek na klenbě? + No hay un explosivo en la bobeda? + + Es gibt keine Sprengladung am Tresor? + Il n'y a pas de dynamite sur le coffre ? + Non c'è alcuna carica esplosiva sulla cassaforte + Não há nenhum explosivo no cofre. + Nie ma ładunku na skarbcu? + 爆破装置安装在了金库里? + + + Defusing charge... + Zneškodňovat náboj ... + Desarmando Explosivo... + + Sprengladung wird entschärft... + Désamorçage de la charge... + Disinnescando la carica esplosiva... + Desarmando o explosivo... + Rozbrajam ładunek... + 拆除爆破装置... + + + The charge has been defused + Obvinění byla zneškodněna + El explosivo ha sido desarmado + + Die Sprengladung wurde entschärft. + La charge a été désamorcée + La carica esplosiva è stata disinnescata + O explosivo foi desarmado + Ładunek został rozbrojony + 爆破装置已被拆除 + + + You need to look at the vehicle you want to refuel! + Musíte se podívat na vozidla, které chcete natankovat! + Debes mirar a el vehiculo que quieres llenar de combustible! + + Du musst das Fahrzeug ansehen, das du auftanken möchtest! + Vous avez besoin de regarder le véhicule dont vous voulez faire le plein ! + Devi essere girato verso il veicolo che vuoi rifornire! + Você precisa estar olhando para o veículo que deseja abastecer! + Musisz spojrzeć w kierunku pojazdu który chcesz zatankować! + 你要看看你的载具是否加满了油! + + + You need to be closer to the vehicle! + Musíte být blíže k vozidlu! + Debes estar más cerca del vehiculo! + + Du musst näher am Fahrzeug sein! + Vous devez être plus proche du véhicule ! + Devi stare più vicino al veicolo! + Você precisa estar mais perto do veículo! + Musisz być bliżej pojazdu! + 你需要离载具近一点! + + + Refuelling Fuel Canister + Tankování paliva kanystr + Ravitaillement en carburant de la citerne + Llenando Bidón de Combustible + Rifornimento carburante scatola metallica + Tankowanie paliwa Kanister + O reabastecimento de combustível vasilha + Дозаправка топлива канистра + Benzinkanister befüllen + 加注汽油桶 + + + Fuel Station Pump + Čerpací stanice čerpadla + Pompe à essence + Estación de bombeo de combustible + Pompa Stazione di rifornimento + Paliwo przepompowni + Bomba de Combustível Station + Топливная Насосная станция + Zapfsäule + 燃料加油站 + + + Spend $%1 to refuel your Empty Fuel Canister? + Utratit $%1 natankovat vaše prázdné palivové kanystr? + Dépenser $%1 pour faire le plein de votre réservoir ? + Gastar $%1 para llenar el Bidón de Combustible? + Spendere $%1 per rifornire di carburante la vostra scatola metallica del combustibile vuoto? + Wydać $%1 zatankować swój pustego zasobnika paliwa? + Gastar R$%1 para reabastecer a sua vasilha de combustível vazio? + Потратить $%1 для дозаправки ваш Пусто баллон с горючим? + Willst du deinen leeren Kraftstoffkanister für $%1 befüllen? + 花费 $%1 加满你的空汽油桶? + + + You must be closer to the fuel pump! + Musíte být blíže k palivovému čerpadlu! + Vous devez être plus proche de la pompe à carburant ! + Debe estar más cerca de la bomba de combustible! + È necessario essere più vicino alla pompa del carburante! + Você deve estar mais perto da bomba de combustível! + Você deve estar mais perto da bomba de combustível! + Вы должны быть ближе к топливному насосу! + Du musst dich näher an der Zapfsäule befinden! + 你必须靠近加油机! + + + You have successfully refuelled the Fuel Canister! + Úspěšně jste tankovat palivový kanystr! + Vous avez ravitaillé avec succès le réservoir d'essence ! + Usted ha llenado con exito el Bidón de Combustible! + Hai rifornimento con successo il canestro del combustibile! + Pomyślnie zatankowany kanistra paliwa! + Você reabastecido com sucesso a vasilha de combustível! + Вы успешно заправились на баллон с горючим! + Der Benzinkanister wurde befüllt! + 你已加满汽油桶! + + + Refuelling %1 + Doplňování paliva %1 + Llenado el Bidón %1 + + Wird befüllt %1... + Ravitaillement en cours de %1 + Rifornendo %1 + Abastecendo %1 + Tankuję %1 + 补充油量 %1 + + + You have refuelled that %1 + Jsi natankoval, že produkt %1 + Has llenado el %1 + + Du hast deinen %1 befüllt. + Vous avez ravitaillé %1 + Hai rifornito di carburante un %1 + Você abasteceu %1 + Zatankowałeś %1 + 你要补充油量 %1 + + + This vehicle is already in your key-chain. + Toto vozidlo je již ve vaší klíčenky. + Esta vehiculo ya esta en tu llavero. + + Du hast diesen Fahrzeugschlüssel bereits an deinem Schlüsselbund. + Ce véhicule est déjà dans votre porte-clé. + Possiedi già le chiavi di questo veicolo. + Você já tem a chave desse veículo. + Masz już klucze do tego pojazdu. + 你已经获得载具钥匙。 + + + Lock-picking %1 + Lockpicking %1 + Abriendo Cerradura %1 + + Wird aufgebrochen %1... + Crochetage de %1 + Scassinando %1 + Arrombando %1 + Włamujesz się do %1 + 撬锁 %1 + + + You got to far away from the target. + Dostal jsi příliš daleko od cíle. + Le alejastes mucho del objeto. + + Du hast dich zu weit vom Ziel entfernt. + Vous êtes trop loin de la cible. + Sei andato troppo lontano dall'obiettivo + Voçê está muito longe do seu alvo. + Jesteś za daleko od celu. + 你必须远离目标。 + + + You now have keys to this vehicle. + Nyní máte klíče k tomuto vozidlu. + Ahora tienes las llaves para este vehiculo. + + Du hast nun einen Schlüssel zu diesem Fahrzeug. + Vous avez maintenant les clés de ce véhicule + Sei ora in possesso delle chiavi di questo veicolo. + Agora você tem as chaves do veiculo. + Masz teraz klucze do tego pojazdu + 你现在获得了载具钥匙。 + + + The lockpick broke. + Paklíč zlomil. + La ganzua se rompió. + + Der Dietrich ist abgebrochen. + L'outil de crochetage s'est cassé + Il grimaldello si è rotto. + A Chave Mestra quebrou. + Wytrych się złamał. + 撬锁工具坏了。 + + + %1 was seen trying to lockpick a car. + %1 byl viděn snaží lockpick auto. + %1 ha sido visto tratando de abrir un carro. + + %1 wurde beim Aufbrechen eines Auto erwischt. + %1 a été vu essayant de crocheter une voiture + %1 è stato visto provare a scassinare un veicolo. + %1 foi visto usando uma Chave Mestra em um carro. + %1 był widziany jak próbował włamać się do samochodu. + %1 试图撬开一辆载具的门锁。 + + + You are not near a mine! + Nejste v blízkosti dolu! + No estas cerca de una mina! + + Du bist nicht in der Nähe einer Mine! + Vous n'êtes pas près d'une mine! + Non ti trovi vicino ad una cava! + Você não está próximo de uma mina! + Nie jesteś blisko kopalni! + 你不在矿场附近! + + + You can't mine from inside a car! + Nemůžete dolovat z vnitřku vozu! + No puedes minar desde adentro de un vehiculo! + + Du kannst nicht in deinem Auto abbauen! + Vous ne pouvez pas miner à l'intérieur d'une voiture! + Non puoi minare da dentro un veicolo! + Você não pode minerar dentro do carro! + Nie możesz wydobywać z samochodu! + 你不能从车里面采集! + + + You have mined %2 %1 + Jste těžil% %2 1 + Has minado %2 %1 + + Du hast %2 %1 abgebaut. + Vous avez miné %2 %1 + Hai minato %2 %1 + Você minerou %2 %1 + Wydobyłeś %2 %1 + 你开采 %2 %1 + + + Place Spike Strip + Umístěte Spike Strip + Poner Barrera de Clavos + + Nagelband platzieren + Placer la herse + Posa striscie chiodate + Tapete de Espinhos armado. + Rozłóż kolczatkę + 放置钉刺带 + + + Pack up Spike Strip + Sbalit Spike Strip + Guardar Barrera de Clavos + + Nagelband zusammenpacken + Ranger la herse + Recupera striscie chiodate + Pegar Tapete de Espinhos. + Zwiń kolczatkę + 收起钉刺带 + + + You need to be inside your house to place this. + Musíte být uvnitř svého domu na místo toto. + Debes estar dentro de tu casa para poner eso. + + Du musst in deinem Haus sein, um dies platzieren zu können. + Vous devez être à l'interieur de votre maison pour placer ceci + Devi essere all'interno della tua casa per posizionarlo. + Você precisa estar dentro da sua casa para colocar isso! + Musisz być wewnątrz własnego domu aby to umieścić. + 你需要在你的房子里放置这个。 + + + You cannot place any more storage containers in your house. + Nelze umístit žádné další skladovací kontejnery ve vašem domě. + No puedes poner mas contenedores en tu casa. + + Es können keine weiteren Container in dein Haus gestellt werden. + Vous ne pouvez pas placer d'autres conteneurs dans votre maison. + Non puoi installare altri contenitori in casa tua. + Você não pode colocar mais caixas dentro da sua casa. + Nie masz więcej miejsca na pojemniki w tym domu. + 你不能在你的房子里放更多的储藏存储箱。 + + + No more free storage spaces in your house. + Žádné další volné skladové prostory v domě. + No hay más espacio de almacenamiento en tu casa. + + Es gibt in deinem Haus keinen freien Lagerplatz mehr. + Il n'y a plus d'espace libre dans votre maison. + I contenitori in casa tua hanno finito lo spazio disponibile. + Não ha mais espaços para guardar itens em sua casa. + Brak wolnych miejsc na pojemniki w domu. + 你的房子没有空闲的储藏空间。 + + + You need to select an item first! + Je třeba vybrat položku na prvním místě! + Debes seleccionar un objeto primero! + + Du musst zuerst einen Gegenstand auswählen! + Vous devez sélectionner un objet ! + Devi prima selezionare un oggetto! + Você precisa selecionar um item primeiro! + Zaznacz najpier rzecz. + 你需要选择一个物品! + + + You can now run farther for 3 minutes + Nyní můžete spustit další 3 minuty + Ahora puedes correr mas por 3 minutos + + Vous pouvez courir pendant 3 minutes + Du kannst jetzt für 3 Minuten weiter laufen. + Puoi ora correre per 3 minuti consecutivi + Você agora pode correr por 3 minutos + Możesz przez 3 minuty biec bez wysiłku + 你现在可以跑3分钟 + + + You already have a Spike Strip active in deployment + Ty už mají Spike Strip aktivní při nasazení + Ya tienes una Barrera de Clavos activada + + Du platzierst bereits ein Nagelband! + Vous avez déjà une herse en train d'être deployée + Hai già una striscia chiodata piazzata + Você já tem um Tapete de Espinhos ativo + Aktualnie masz rozłożoną kolczatkę + 你已经部署了一个钉刺带。 + + + You can't refuel the vehicle while in it! + Nemůžete natankovat z vozidla, když v něm! + No puedes llenar tu vehiculo mientras estas adentro de él! + + Du kannst ein Fahrzeug nicht betanken während du dich darin befindest! + Vous ne pouvez pas faire le plein du véhicule tout en étant à l'intérieur ! + Non puoi rifornire il veicolo di benzina mentre ci sei dentro! + Você não pode abastecer o veículo enquanto dentro dele! + Nie możesz zatankować pojazdu gdy w nim jesteś! + 你不能在车里加油! + + + This item isn't usable. + Tato položka není použitelný. + Este objeto no es utilizable. + + Dieser Gegenstand ist nicht benutzbar. + Cet objet n'est pas utilisable. + Questo oggetto è inutilizzabile. + Esse item não é usável. + Nie można użyć tej rzeczy. + 这个物品不能使用。 + + + + + Processing Oil + zpracování ropy + Procesando Petróleo + + Öl wird verarbeitet... + Raffinage de Pétrole + Raffinando il Petrolio + Processando Petróleo + Rafinacja ropy + 加工石油 + + + Cutting Diamonds + řezání diamantů + Cortando Diamantes + + Diamanten werden geschliffen... + Taillage de diamant + Rifinendo diamanti + Lapidando Diamante + Szlif diamentów + 切割钻石 + + + Processing Opium + zpracování Opium + Procesando Opio + + Heroin wird verarbeitet... + Traitement d'Héroïne + Processando Eroina + Processando Heroína + Oczyszczanie heroiny + 加工海洛因 + + + Casting Copper Ingots + Casting měděných ingotů + Fundiendo Lingotes de Cobre + + Fonte du Cuivre + Kupfer wird verarbeitet... + Processando in lingotti di Rame + Processando Cobre + Wytop miedzi + 铸造铜锭 + + + Casting Iron Ingots + Litiny ingoty + Fundiendo Lingotes de Hierro + + Fonte du Fer + Eisen wird verarbeitet... + Processando Ferro + Processando Ferro + Wytop żelaza + 铸造铁锭 + + + Processing Sand + zpracování Písek + Procesando Arena + + Sand wird verarbeitet... + Fonte du Sable + Processando Sabbia + Processando Areia + Topienie piasku + 制作玻璃 + + + Processing Salt + zpracování Salt + Procesando Sal + + Salz wird verarbeitet... + Traitement du Sel + Processando Sale + Refinando Sal + Warzenie soli + 制造食盐 + + + Processing Coca Leaves + Zpracování listů koky + Procesando Hojas de Coca + + Kokain wird verarbeitet... + Traitement de Cocaïne + Processando Cocaina + Processando Cocaína + Oczyszczanie kokainy + 加工可卡因 + + + Processing Marijuana + zpracování Marihuana + Procesando Marihuana + + Marihuana wird verarbeitet... + Traitement de Marijuana + Processando Marijuana + Processando Maconha + Suszenie marihuany + 加工大麻 + + + Mixing Cement + Míchání Cement + Mezclando Cemento + + Zement wird gemischt... + Mélange de ciment + Processando Cemento + Misturando Cimento + Mielenie cementu + 制造水泥 + + + You need to stay within 10m to process. + Musíte zůstat v rozmezí 10 m zpracovat. + Debes estar a menos de 10m para procesar. + + Du musst innerhalb von 10m bleiben, um verarbeiten zu können. + Vous devez rester à 10m pour traiter vos objets. + Devi stare entro 10m per processare. + Você precisa ficar a menos de 10m para processar. + Musisz być w odległości 10 m aby przetwarzanie się odbyło. + 您需要保持10米以内的距离。 + + + You have no inventory space to process your materials. + Nemáš zásob prostor ke zpracování vašich materiálů. + Vous n'avez pas de place pour traiter vos matériaux. + Usted no tiene espacio en el inventario para procesar sus materiales. + Non hai spazio nell'inventario per elaborare i materiali. + Nie masz miejsca na przetwarzanie swoich zapasów materiałów. + Você não tem espaço no inventário para processar seus materiais. + У вас нет места инвентаря для обработки ваших материалов. + Du hast keinen Platz im Inventar, um die Materialien zu verarbeiten. + 你没有库存空间来处理你的物品。 + + + Only part of your materials could be processed due to reaching your maximum weight. + Pouze část svých materiálů by mohla být zpracována z důvodu dosažení maximální váhu. + Seule une partie de votre matériel pourrait être traité en raison de l'atteinte de votre poids maximum. + Sólo una parte de los materiales se han podido procesar debido a alcanzar tu peso máximo. + Solo una parte del tuo materiali possono essere trattati a causa di raggiungere il vostro peso massimo. + Tylko część swoich materiałów może być przetwarzane ze względu na osiągnięcie maksymalnej wadze. + Apenas uma parte de seus materiais puderam ser processados, devido o peso máximo ter sido atingido. + Только часть ваших материалов может быть обработан из-за достижения вашего максимального веса. + Nur ein Teil der Materialien konnte verarbeitet werden, sonst würde das maximale Gewicht erreicht werden. + 只有部分材料可以加工,已达到你的最大重量。 + + + You need $%1 to process without a license! + Musíte $%1 bez povolení ke zpracování! + Necesitas $%1 para procesar sin licencia! + + Du brauchst $%1, um ohne eine Lizenz verarbeiten zu können! + Vous avez besoin de $%1 pour traiter sans licence ! + Hai bisogno di $%1 per processare senza la dovuta licenza! + Você precisa de R$%1 para processar sem licença! + Musisz mieć $%1 aby przetworzyć bez odpowiedniej licencji + 你没有加工许可所以需要 $%1 加工! + + + You have processed %1 into %2 + Máte zpracovaný %1 do %2 + Has procesado %1 a %2 + + Du hast %1 in %2 verarbeitet. + Vous avez traité %1 en %2 + Hai processato %1 in %2 + Você trasformou %1 em %2 + Przetworzyłeś %1 na %2 + 你将 %1 加工为 %2 + + + You have processed %1 into %2 for $%3 + Máte zpracovaný %1 do %2 na $%3 + Has procesado %1 a %2 por $%3 + + Du hast %1 für $%3 in %2 verarbeitet. + Vous avez traité %1 en %2 pour $%3 + Hai processato %1 in %2 al costo di $%3 + Você trasformou %1 em %2 por R$%3 + Przetworzyłeś %1 na % za $%3 + 你将 %1 加工为 %2 花费 $%3 + + + + + Medics Online: %1 + Zdravotníci Online: %1 + Médicos en línea: %1 + + Sanitäter online: %1 + Médecin en ligne : %1 + Medici Online: %1 + Médicos Online: %1 + Medycy Online: %1 + 在线的医疗人员:%1 + + + Medics Nearby: %1 + Zdravotníci v blízkosti:%1 + Médicos Cerca: %1 + + Sanitäter in der Nähe: %1 + Médecin à proximité : %1 + Medici Vicini: %1 + Médicos por perto: %1 + Medycy w pobliżu: %1 + 附近的医疗人员:%1 + + + %1 is requesting EMS Revive. + %1 požaduje EMS oživit. + %1 esta pidiendo servicio médico. + + %1 benötigt medizinische Hilfe. + %1 demande de l'aide du SAMU. + %1 sta richiedendo l'intervento medico. + %1 requisitou o resgate do SAMU + %1 prosi o pomoc medyczną. + %1 要求医疗救治。 + + + Respawn Available in: %1 + Respawn K dispozici v:%1 + Puedes reaparecer en: %1 + + Réapparition disponible dans: %1 + Aufwachen verfügbar in: %1 + Respawn disponibile in: %1 + Respawn Disponível em: %1 + Odrodzenie możliwe za: %1 + 重生在: %1 + + + You can now respawn + Nyní lze respawn + Ya puedes reaparecer + + Du kannst jetzt aufwachen! + Vous pouvez désormais réapparaître + Puoi ora fare respawn + Você pode dar respawn + Możesz się odrodzić + 现在你可以重生 + + + %1 has revived you and a fee of $%2 was taken from your bank account for their services. + %1 oživil vy a poplatek ve výši $%2 byl převzat z bankovního účtu za své služby. + %1 te a revivido y una cuota de $%2 a sido tomada de tu cuenta por sus servicios. + + %1 hat dich wiederbelebt und dafür eine Gebühr von $%2 von deinem Bankkonto eingezogen. + %1 vous a réanimé, des frais de $%2 ont été transférés depuis votre compte en banque sur celui du médecin. + %1 ti ha rianimato e sono stati prelevati $%2 dal tuo conto in banca per pagare la prestazione. + %1 reviveu você e uma taxa de R$%2 foi cobrada da sua conta bancária para os serviços prestados. + %1 pobrał opłatę w wysokości $%2 za reanimację i przywrócenie funkcji życiowych. + %1 已经将你救治,从你的银行账户收取 $%2 的服务费。 + + + Someone else is already reviving this person + Někdo jiný již užívají tuto osobu + Alguien ya esta reviviendo a esta persona + + Jemand anderes belebt diese Person bereits wieder. + Quelqu'un d'autre s'occupe déjà de cette personne + Qualcun'altro sta già provando a rianimare questa persona + Outro médico já está revivendo esse jogador + Ktoś inny aktualnie reanimuje tę osobę + 其他人已经在救治这个人了 + + + Reviving %1 + Oživení %1 + Reviviendo %1 + + Wird wiederbelebt %1... + Réanimation de %1 + Rianimando %1 + Revivendo %1 + Reanimacja %1 + 救治 %1 + + + This person either respawned or was already revived. + Tato osoba buď respawned nebo již byl přijat. + Esta persona ya reapareció o fue revivida. + + Cette personne a peut-être fait réapparition ou a déjà été réanimée. + Diese Person ist entweder aufgewacht oder wurde bereits wiederbelebt. + Questa persona è stata già rianimata o ha fatto respawn. + Esse jogador já deu respawn ou já foi reanimado. + Ta osoba wcześniej się odrodziła lub została reanimowana. + 这个人重生或已经复活了。 + + + You have revived %1 and received $%2 for your services. + Obdrželi jste %1 a získal $%2 za vaše služby. + Has revivido a %1 y recivido $%2 por tus servicios. + + Du hast %1 wiederbelebt und $%2 für deine Dienste erhalten. + Vous avez réanimé %1, vous avez reçu $%2 pour votre aide + Hai rianimato %1 e hai ricevuto $%2 per la tua prestazione. + Você reviveu %1 e recebeu R$%2 pelo seus serviços prestados. + Reanimowałeś %1 i za uratowanie życia otrzymałeś $%2. + 你已经救治了 %1 并得到 $%2 的服务费用。 + + + You got to far away from the body. + Dostal jsi příliš daleko od těla. + Te alejastes mucho del cuerpo. + + Du bist zu weit vom Körper entfernt. + Vous êtes trop loin du corps. + Sei andato troppo distante dal corpo. + Você está muito distante do corpo. + Jesteś za daleko od ciała. + 你离尸体太远。 + + + + + The robbery has failed due to unknown reasons + Lupič selhalo kvůli neznámých důvodů + El robo fallo por razones desconocidas + + Der Raub ist aus unbekannten Gründen fehlgeschlagen. + Le vol de la réserve fédérale a échoué pour des raisons inconnues + La rapina è fallita per cause sconosciute + O roubo falhou por uma causa desconhecida. + Napad się nie udał z niewiadomych powodów. + 由于不明原因,抢劫失败了。 + + + $%1 was stolen from the robbery on the federal reserve + $%1 byl ukraden z loupeže na federální rezervy + $%1 fue robado de la reserva federal + + $%1 wurden von den Räubern aus der Zentralbank gestohlen. + $%1 a été volé à la réserve fédérale. + $%1 sono stati rubati durante la rapina alla banca + R$%1 foi roubado da Reserva Federal. + $%1 ukradziono z Rezerwy Federalnej + $%1 从联邦储备银行中被抢劫 + + + This vault is already being robbed by someone else + Tato klenba je již okraden někým jiným + La bóveda ya esta siendo robada por alguien mas + + Ce coffre est déjà en train d'être pillé par quelqu'un d'autre. + Der Tresor wird bereits von jemand anderem ausgeraubt. + Questo Caveau sta venendo rapinando da qualcun'altro + Esse cofre já está sendo roubado por outro jogador. + Skarbiec jest aktualnie rabowany przez inną osobę. + 这个金库已经被别人抢劫了 + + + This vault was already robbed recently + Tato klenba byla již nedávno okraden + La bóveda fue robada muy recientemente + + Der Tresor wurde bereits vor Kurzem ausgeraubt. + Ce coffre a déjà été pillé récemment + Questo Caveau è stato svaligiato di recente + Esse cofre já foi assaltado recentemente. + Skarbiec został niedawno zrabowany + 这个金库最近被抢了 + + + + + Garage + Garáž + Garaje + + Garage + Garage + Garage + Garagem + Garaż + 载具仓库 + + + Your Vehicles + Vaše Vozidla + Tus vehículos + + Deine Fahrzeuge + Vos véhicules + I tuoi Veicoli + Seus Veículos + Twój pojazd + 你的载具 + + + Vehicle Information + Informace o vozidle + Información de Vehículos + + Fahrzeuginformationen + Carte grise du vehicule + Informazioni Veicolo + Informações do Veículo + Informacja o pojeździe + 载具信息 + + + Automatically reveals nearest objects within 15m, turn this setting off if you are experiencing performance issues. + Automaticky odhaluje nejbližší objektů v rámci 15m, toto nastavení vypnete, pokud jste se setkali s problémy s výkonem. + Automáticamente revela los objetos más cercanos dentro de 15m, apaga esta opción si estas teniendo problemas de performación. + + Zeigt automatisch nächstgelegene Objekte innerhalb von 15m an, deaktiviere es, wenn du Leistungprobleme hast. + Révèle automatiquement les objets les plus proches au sein de 15m, désactiver ce paramètre si vous rencontrez des problèmes de performance. + Rivela automaticamente gli oggettivi vicini entro 15m, disattiva quest'impostazione se riscontri dei problemi di perfomance di sistema. + Revela objetos à 15m, desabilite essa opção se está tendo problemas de performance. + Automatycznie wykrywa najbliższe obiekty w promieniu 15m, wyłącz tę opcję jeśli masz problemy z wydajnością + 自动显示1500米以内的最近对象,如果你遇到性能问题,请将此设置关闭。 + + + Switch side-channel mode, turn this off if you don't want to talk with players from your side. + Přepnout do režimu side-channel, tuto funkci vypnout, pokud nechcete mluvit s hráči z vaší strany. + Activer le canal camp, désactiver cette fonction si vous ne voulez pas parler avec des joueurs de la même faction que vous. + Habilita/Deshabilita el SideChannel, apaga esto si no quieres hablar con jugador de tu lado. + Interruttore modalità side-channel, disattivare questa funzione se non si vuole parlare con i giocatori da parte vostra. + Przełącznik trybu side-channel, to wyłączyć, jeśli nie chce rozmawiać z graczami z boku. + + Habilita/Desabilita o side-channel, desabilite caso você não queira conversar com os jogadores da sua facção. + Sidechat umschalten. Ausschalten, wenn du nicht mit Spielern deiner Fraktion sprechen möchtest. + 切换侧通道模式,如果你不想和你身边的玩家交谈,关掉这个频道。 + + + Switch player's broadcast mode, turn this off if you don't want to see any broadcast from other players. + + Activer/Désactiver les annonces. Désactivez ceci si vous ne voulez voir aucune annonce d'autres joueurs. + Habilitar/Deshabilitar transmisiones, deshabilita esto si no quieres ver transmisiones de otros jugadores. + + + + Habilita/Desabilita as transmissões dos jogadores, desabilite caso você não queira ver as transmissões dos outros jogadores. + Broadcast umschalten. Ausschalten, wenn du keine Broadcasts von anderen Spielern erhalten möchtest. + 切换玩家的广播模式,如果你不想看到其他玩家的广播,就关掉它。 + + + Controls whether or not players will have name tags above their head. + Přepnout do režimu side-channel, tuto funkci vypnout, pokud nechcete mluvit s hráči z vaší strany. + Controla si los jugadores tienen nombres (tags) sobre sus cabezas. + + Contrôler si les joueurs auront ou non leurs noms au dessus de leur tête + Namensschilder umschalten. Ausschalten, wenn du keine Namensschilder über den Spielerköpfen sehen möchtest. + Controlla la visualizzazione delle tags sopra la testa dei giocatori + Controla se os jogadores terão os nomes em suas cabeças. + Kontroluje czy gracze będą mieli nad głowami swoje Tagi z nazwą + 控制球员是否有名字标签在他们的头上方。 + + + Shop Stock + Obchod Sklad + Inventario de la Tienda + + Lagerbestand + Boutique + Stock Negozio + Estoque + Sklep oferta + 商店库存 + + + + + Player Interaction Menu + Hráč Interakce Menu + Menu de Interacción de Jugadores + + Spielerinteraktionsmenü + Menu d'interaction du Joueur + Menu d'interazione Giocatore + Menu de Interação do Jogador + Menu Interakcji + 玩家互动菜单 + + + Put in vehicle + Vložíme do vozidla + Poner en vehículo + + Ins Fahrzeug setzen + Embarquer + Metti nel Veicolo + Colocar no Veículo + Włóż do pojazdu + 押上载具 + + + Un-Restrain + živelný + Quitar Esposas + + Freilassen + Démenotter + Togli Manette + Soltar + Rozkuj + 解开手铐 + + + Check Licenses + Zkontrolujte licence + Revisar Licencias + + Lizenzen überprüfen + Vérifier Licences + Controlla Licenze + Verificar Licenças + Sprawdź licencje + 检查许可证 + + + Search Player + Hledat hráče + Buscar Jugadores + + Spieler durchsuchen + Fouiller Joueur + Ricerca Giocatore + Revistar Jogador + Przeszukaj + 搜身 + + + Stop Escorting + Zastavit doprovázet + Parar de Escoltar + + Eskortieren stoppen + Arrêter Escorte + Ferma Scorta + Parar de Escoltar + Przestań eskortować + 停止押送 + + + Escort Player + Escort Player + Escoltar Jugador + + Spieler eskortieren + Escorter Joueur + Scorta Giocatore + Escoltar Jogador + Eskortuj + 押送 + + + Ticket Player + Ticket Player + Dar Tiquete + + Strafzettel ausstellen + Amende Joueur + Multa Giocatore + Multar Jogador + Wystaw mandat + 开据罚单 + + + Seize Weapons + zabavili zbraně + Confiscar Armas + + Waffen beschlagnahmen + Saisir les armes + cogliere Armi + Apreender Armas + Chwytaj broń + 没收武器 + + + Send to jail + Poslat do vězení + Encarcelar + + Ins Gefängnis stecken + Envoyer en prison + Arresta + Enviar p/ Prisão + Do więzienia + 送进监狱 + + + Repair Door + oprava dveří + Reparar Puerta + + Tür reparieren + Réparer la porte + Ripara porta + Consertar Porta + Napraw drzwi + 检修门 + + + Open / Close + Otevřít zavřít + Abrir / Cerrar + + Öffnen / Schließen + Ouvrir / Fermer + Apri / Chiudi + Abrir / Fechar + Otwórz / Zamknij + 打开/关闭 + + + Break down door + Rozebrat dveře + Romper Puerta + + Tür aufbrechen + Forcer la porte + Sfonda Porta + Quebrar Porta + Wyważ drzwi + 打破门 + + + Garage + + + + Garage + Garage + + + + 车库 + + + You can buy a garage at this house for $%1. You must first purchase the house! + + + + Du könntest eine Garage an diesem Haus für $%1 kaufen. Du müsstest aber zuerst das Haus kaufen! + Vous pouvez acheter un garage dans cette maison pour $%1. Vous devez d'abord acheter la maison ! + + + + 你可以在这所房子里买一个 $%1 的仓库。你必须先买房子! + + + Search house + Vyhledávání dům + Buscar casa + + Haus durchsuchen + Fouiller la maison + Cerca Casa + Vasculhar a Casa + Przeszukaj dom + 搜索房子 + + + Lock up house + Zamknout dům + Cerrar la casa con llave + + Haus abschliessen + Fermer la maison + Chiudi Casa + Trancar a Casa + Zamknij dom + 锁上房子 + + + Buy House + Koupit dům + Comprar casa + + Haus kaufen + Acheter la maison + Compra Casa + Comprar a Casa + Kup dom + 买房子 + + + Buy House Garage + + + + Garage kaufen + Acheter le Garage de cette Maison + + + + 买房子的仓库 + + + Sell Garage + Navrhujeme Garáž + Vender Garaje + + Garage verkaufen + Vendre le garage + Vendi Garage + Vender Garagem + Sprzedaj garaż + 出售仓库 + + + Remove Container + Nádobu + Remover Contenedor + rimuovere Container + Wyjąć pojemnik + + Supprimer le conteneur + Remover Caixa + Container entfernen + 删除存储箱 + + + Garage + Garáž + Garaje + + Garage + Garage + Garage + Garagem + Garaż + 仓库 + + + Store Vehicle + Store Vehicle + Guardar Vehiculo + + Fahrzeug parken + Ranger le véhicule + Parcheggia Veicolo + Guardar Veículo + Zaparkuj pojazd + 载具商店 + + + Sell House + prodat dům + Vender Casa + + Haus verkaufen + Vendre la maison + Vendi Casa + Vender Casa + Sprzedaj dom + 卖房子 + + + Unlock Storage + odemknout úložiště + Abrir Almacenamiento + + Lagerplatz aufschliessen + Déverrouiller l'inventaire + Sblocca contenitori + Destrancar Caixa + Odblokuj pojemnik + 解锁存储 + + + Lock Storage + zámek Storage + Cerrar Almacenamiento con Llave + + Lagerplatz abschliessen + Verrouiller l'inventaire + Blocca contenitori + Trancar Caixa + Zablokuj pojemnik + 锁定存储 + + + Turn Lights Off + Blinkrů Off + Apagar Luces + + Licht ausschalten + Lumières éteintes + Spegni luci + Ligar as Luzes + Włącz światło + 把灯关掉 + + + Turn Lights On + Turn zapnutá světla + Prender Luces + + Licht anschalten + Lumières allumées + Accendi luci + Apagar as Luzes + Wyłącz światło + 把灯打开 + + + + + Vehicle Interaction Menu + Interakce vozidel Menu + Menu de interacción de Vehículo + + Fahrzeuginteraktionsmenü + Menu Interaction du Véhicule + Menu d'interazione Veicolo + Menu do Veículo + Menu Interakcji pojazdu + 载具交互菜单 + + + Unflip Vehicle + Unflip Vehicle + Dar la Vuelta al Vehículo + + Fahrzeug umdrehen + Retourner Véhicule + Raddrizza veicolo + Desvirar Veículo + Ustaw pojazd + 翻转载具 + + + Get In Vehicle + + + + Monter dans le véhicule + Gehe ins Fahrzeug + + + + 进入载具 + + + Push Boat + tlačit loď + Empujar Bote + + Boot schieben + Pousser bateau + Spingi Barca + Empurrar Barco + Popchnij + 推船 + + + Repair Vehicle + opravy vozidel + Reparar Vehículo + + Fahrzeug reparieren + Réparer Véhicule + Ripara Veicolo + Consertar Veículo + Napraw + 修理载具 + + + Registration + Registrace + Registración + + Eigentümer + Enregistrement + Registrazione + Registro + Zarejestruj + 登记信息 + + + Search Vehicle + Vyhledávání Vehicle + Buscar Vehículo + + Fahrzeug durchsuchen + Fouiller Véhicule + Cerca Veicolo + Vasculhar Veículo + Przeszukaj pojazd + 搜查载具 + + + Search Container + Vyhledávání Container + Buscar Contenedor + Ricerca Container + Szukaj Kontener + + Fouiller le conteneur + Vasculhar Container + Container durchsuchen + 搜索容器 + + + Pullout Players + Pull Out Hráči + Sacar Jugadores + + Aus Fahrzeug ziehen + Sortir les passagers + Estrai Giocatore + Retirar Jogadores + Wyciągnij graczy + 从载具拉出玩家 + + + Impound Vehicle + úschovy Vehicle + Confiscar Vehículo + + Fahrzeug beschlagnahmen + Mise en fourrière + Sequestra Veicolo + Apreender Veículo + Usunń pojazd + 扣押载具 + + + Mine from device + Mine ze zařízení + Minar desde dispositivo + + Vom Fahrzeug abbauen + Dispositif de minage + Piazza mine dal veicolo + Minerar + Uruchom wydobycie + 矿山设备 + + + Store your vehicle + Ukládat vaše vozidlo + Guardar tu Vehículo + Conservare il veicolo + Przechowuj swój pojazd + + Ranger votre véhicule + Guardar seu veículo + Fahrzeug einparken + 存储你的载具 + + + Store + Obchod + Guardar + Negozio + Sklep + + Ranger + Guardar + Fahrzeughändler + 商场 + + + Clean + Čistý + Limpiar + Pulito + Czysty + + Nettoyer + Limpar + Reinigen + 清洁 + + + This vehicle is NPC protected. + Toto vozidlo je chráněno NPC. + Ce véhicule est protégé par un PNJ. + Este vehículo esta protegido. + Questo veicolo è protetto NPC. + Pojazd ten jest chroniony NPC. + + Esse veículo está protegido. + Dieses Fahrzeug ist NPC-geschützt. + 这载具是NPC保护的。 + + + + + Sending request to server for player information UID [%1] + Odesílání požadavku na server pro informační hráč UID [%1] + Pidiendo informacion del UID de [%1] del server + + Frage Spieler Informationen zu UID [%1] ab... + Envoi de la requête au serveur pour obtenir des informations lecteur UID [%1] + Invio richiesta al server per le informazioni del giocatore UID [%1] + Obtendo informações do UID [%1] no servidor + Wysyłam żądanie do serwera po informację o fraczu UID [%1] + 发送请求到服务器玩家信息UID [%1] + + + The server didn't find any player information matching your UID, attempting to add player to system. + Server nenašel žádné informace hráče nalezen.Chcete UID, pokusu o přidání hráče do systému. + No se encontro ninguna información con tu UID, se esta creando un nuevo jugador. + + Der Server hat keine Spieler Informationen zu deiner UID gefunden, versuche Spieler ins System hinzuzufügen... + Le serveur n'a pas trouvé toutes les informations de lecteur correspondant à votre UID, tentative d'ajout du joueur dans le système. + Il server non ha trovato alcuna informazione sul giocatore con il tuo UID, tentativo di aggiunta del giocatore al sistema. + O servidor não encontrou nenhuma informação correspondente ao seu UID, tentando adicionar jogador ao sistema. + Serwer nie odnalazł informacji zgodnych z UID, dodaję gracza do bazy danych. + 服务器没有找到任何玩家信息匹配你的UID,试图添加播放器系统。 + + + There was an error in trying to setup your client. + Došlo k chybě při pokusu o nastavení vašeho klienta. + Hubo un error en tratando de preparar tu cliente. + + Es gab einen Fehler beim Versuch, deinen Clienten einzurichten! + Il y avait une erreur en essayant de configurer votre client. + C'è stato qualche errore nel cercare di inizializzare il tuo client + Ocorreu um erro ao tentar configurar o seu cliente. + Wystąpił błąd w trakcie ustawiania klienta + 试图设置客户机时出错。 + + + Received request from server... Validating... + Obdržení požadavku ze serveru ... Ověřování ... + Pedido del server recibido... Validando... + + >Empfange Daten vom Server... Überprüfe... + Demande reçue du serveur... Validation... + Ricevuta richiesta dal server... Convalida... + Pedido recebido do servidor... Validando... + Otrzymano żądanie serwera ... sprawdzam + 接收来自服务器的请求...验证... + + + You have already used the sync option, you can only use this feature once every 5 minutes. + Již jste použili možnosti synchronizace, můžete použít pouze tuto funkci jednou za 5 minut. + Ya has usado la función de sincronización, solo la puedes usar una vez cada 5 minutos. + + Du hast bereits deine Daten gespeichert, diese Funktion kann nur einmal alle 5 Minuten verwendet werden. + Vous avez déjà utilisé l'option de synchronisation, vous ne pouvez utiliser cette fonction une fois toutes les 5 minutes. + Hai già utilizzato la funzione di salva dati, puoi usare quest'opzione solo una volta ogni 5 minuti. + Você já usou a opção de sincronização, você só pode usar esse recurso uma vez a cada 5 minutos. + Użyłeś niedawno opcji synchronizacji, możesz jej używać maksymalnie co 5 minut. + 你已经使用了同步数据,你只能每隔5分钟使用一次这个功能。 + + + Syncing player information to the server.\n\nPlease wait up to 20 seconds before leaving. + Synchronizace informace o hráčích na serveru. \ O \ Prosím, vyčkejte až 20 sekund před odjezdem. + Se esta sinconizando tu información con el server.\n\nPor favor espera 20 segundos antes de salir del server. + + Speichere deine Spieler-Informationen auf dem Server. \n\nBitte warte bis zu 20 Sekunden vor dem Verlassen. + Synchronisation des informations de joueur sur le serveur.\n\nS'il vous plaît, veuillez attendre 20 secondes avant de vous déconnecter. + Salvando le informazioni giocatore sul server.\n\nAttendere fino a 20 secondi prima di abbandonare. + Sincronizando informação do jogador com o servidor.\n\n Por favor aguarde 20 segundos antes de sair. + Synchronizuję informację z serwere, .\n\nProszę poczekać ok 20 sekund przed opuszczeniem serwera + 同步玩家数据到服务器。\n\n请等待20秒后再下线。 + + + + + Because you robbed the bank you can't use the ATM for %1 minutes. + Protože jste vyloupil banku nelze použít bankomat pro%1 minut. + Porque robastes el banco no puedes usar el ATM por %1 minutos. + + Da du die Zentralbank ausgeraubt hast, kannst du für %1 Minuten keinen Bankomaten benutzen. + Vous avez pillé la banque, vous ne pouvez pas utiliser de DAB pendant %1 minutes. + Avendo appena rapinato la banca non puoi utilizzare il Bancomat per %1 minuti. + Você não pode usar o ATM por %1 minuto(s), pois você assaltou o banco. + Z uwagi na to że okradłeś bank nie możesz korzystać z bankomatu przez najbliższe %1 minut. + 因为你抢了银行,你不能在 %1 分钟内使用自动取款机。 + + + You didn't choose the clothes you wanted to buy. + Vy nevybral oblečení, které chtěl koupit. + No elegistes lo que quieres comprar. + + Du hast die Kleidung, die du kaufen wolltest, nicht ausgewählt. + Vous n'avez pas choisi les vêtements que vous vouliez acheter. + Non hai selezionato i vestiti che vuoi comprare. + Você não selecionou a roupa que deseja comprar. + Nie wybrałeś ubrań które chcesz kupić. + 你没有选择你想买的衣服。 + + + Sorry sir, you don't have enough money to buy those clothes. + Je nám líto, pane, nemáte dost peněz na nákup ty šaty. + No tienes suficiente dinero. + + Entschuldigung, du hast nicht genug Geld, um diese Kleidung zu kaufen. + Désolé monsieur, vous n'avez pas assez d'argent pour acheter ces vêtements. + Spiacente ma non hai fondi a sufficienza per comprare questi vestiti. + Desculpe senhor, você não tem dinheiro para pagar. Volte sempre. + Przepraszam, ale nie masz tyle pieniędzy aby kupić to ubranie. + 对不起,你没有足够的钱去买那些衣服。 + + + Total: + Celkový: + Total: + + Gesamt: + Total : + Totale: + Total: + Razem: + 总额: + + + No Selection + žádný výběr + No Seleccionastes + + Keine Auswahl! + Aucune Sélection + Nessuna Selezione + Nada Selecionado + Nie wybrano + 没有选择 + + + No Display + Ne Displej + No Display + + Keine Anzeige! + Pas d'affichage + No Display + Sem exibir + Brak widoku + 没有显示 + + + There are no vehicles near to sell. + Nejsou žádné vozy blízko k prodeji. + No hay Vehículos cercanos para vender. + + Es ist keine Fahrzeug zum Verkaufen in der Nähe. + Il n'y a pas de véhicules à proximité à vendre + Nelle vicinanze non ci sono veicoli da vendere. + Não existem veículos para serem vendidos. + W pobliżu nie ma pojazdu do sprzedania. + 附近没有载具出售。 + + + There was a problem opening the chop shop menu. + Tam bylo otevření nabídky kotleta obchod problém. + Hubo un problema abriendo el menu de la tienda. + + Es gab ein Problem beim Öffnen des Schrotthändler Menüs. + Il y a eu un problème en ouvrant le menu de revente de véhicule. + C'è stato un problema aprendo il menu del ricettatore + Ocorreu um problema abrindo o menu, tente novamente. + Powstał problem przy otwieraniu menu dziupli + 打开黑车店菜单有问题。 + + + Selling vehicle please wait... + Prodejní vozidlo čekejte prosím ... + Vendiendo vehículo, por favor espera... + + Verschrotte Fahrzeug, bitte warten... + Vente du véhicule, veuillez patienter... + Vendendo il veicolo, attendere prego... + Vendendo o veiculo, aguarde.... + Sprzedaję pojazd proszę czekać ... + 出售载具请稍候... + + + You need to be a civilian to use this store! + Musíte být civilní použít tento obchod! + Necesitas ser un civil para usar esta tienda! + + Du musst ein Zivilist sein, um dieses Geschäft nutzen zu können! + Vous devez être un civil pour utiliser ce magasin ! + Devi essere un civile per utilizzare questo negozio! + Você tem que ser um cívil para user essa loja! + Musisz być cywilem aby móc kupować w tym sklepie! + 你需要成为平民才能使用这家商店! + + + You need to be a cop to use this store! + Musíte být policista použít tento obchod! + Necesitas ser policía para usar esta tienda! + + Du musst ein Polizist sein, um dieses Geschäft nutzen zu können! + Vous devez être policier pour utiliser ce magasin ! + Devi essere un poliziotto per utilizzare questo negozio! + Você tem que ser um policial para usar essa loja! + Musisz być policjantem aby kupować w tym sklepie! + 你需要当警察来使用这家商店! + + + You don't have rebel training yet! + Nemáte rebelů výcvik ještě! + No tienes Entrenamiento Rebelde! + + Du hast keine Rebellenausbildung absolviert! + Vous n'avez pas encore d'entraînement rebelle ! + Devi essere ribelle per poter utilizzare questo negozio! + Você não tem Treinamento Rebelde! + Nie posiadasz treningu rebelianta! + 你还没有进行叛军训练! + + + You need a Diving license to use this shop! + Potřebujete licenci potápění použít tento obchod! + Necesitas una licencia de buceo para usar esta tienda! + + Du benötigst einen Taucherschein, um dieses Tauchergeschäft nutzen zu können! + Vous devez avoir votre diplôme de plongée pour utiliser ce magasin ! + Ti serve la licenza di pesca per usare questo negozio! + Você precisa de uma Licença de Mergulho para usar essa loja! + Nie posiadasz licencji nurka aby kupować w tym sklepie! + 你需要一张潜水执照才能使用这家商店! + + + You need a %1 to buy from this shop! + Potřebujete %1 koupit od tomto obchodě! + Necesitas un %1 para comprar algo de esta tienda! + + Du benötigst eine %1, um dieses Geschäft nutzen zu können! + Vous avez besoin de %1 pour acheter dans ce magasin ! + Hai bisogno di %1 per comprare da questo negozio! + Você precisa de %1 para comprar nessa loja! + Potrzebujesz %1 by kupować w tym sklepie! + 你需要从这家商店买 %1! + + + Clothing + Oblečení + Ropa + + Kleidung + Tenues + Abiti + Roupas + Odzież + 服装 + + + Hats + klobouky + Sombreros + + Kopfbedeckungen + Chapeaux + Copricapi + Chapéus + Czapki + 帽子 + + + Glasses + Brýle + Lentes + + Brillen + Lunettes + Occhiali + Óculos + Okulary + 眼镜 + + + Vests + vesty + Chalecos + + Westen + Gilets + Vesti + Coletes + Kamizelki + 背心 + + + Backpack + Batoh + Mochillas + + Rucksack + Sacs à dos + Zaini + Mochilas + Plecaki + 背包 + + + There is currently a car there. + Tam je v současné době auto. + Actualmente hay un carro ahi. + + Es steht bereits ein Fahrzeug dort. + Il y a actuellement une voiture. + C'è già un veicolo qui. + Há um veiculo atualmente no respawn. + Aktualnie jest tam samochód. + 目前有一载具在那里。 + + + You do not have enough money on you or in your bank to get your car back. + Nemáte dostatek peněz na vás nebo ve vaší bance, aby si své auto zpátky. + No tienes suficiente dinero para recuperar tu carro. + + Du hast nicht genug Geld bei dir oder auf dem Bankkonto, um dein Auto auslösen zukönnen. + Vous n'avez pas assez d'argent sur vous ou dans votre compte en banque pour récupérer votre voiture. + Non hai abbastanza fondi con te o nel tuo conto in banca per poter ritirare il tuo veicolo. + Você não tem dinheiro suficiente em sua conta bancária para obter seu veiculo. + Nie masz tyle pieniędzy na koncie aby wyciągnąć samochód. + 你没有足够的钱在银行或你的身上。 + + + You have unimpounded your %1 for $%3 + Jste unimpounded svůj %1 na $%3 + Has desembargado tu %1 por $%3 + + Du hast deinen %1 für $%3 ausgelöst. + Vous avez sorti votre %1 pour $%3 + Hai ritirato dal sequestro il tuo %1 al costo di $%3 + Você liberou %1 for R$%3 + Przywróciłeś swój %1 za $%3 + 你为 %1 花费 $%3 + + + You did not pick a vehicle! + Vy nevybral vozidlo! + No has selecionado un vehículo! + + Du hast kein Fahrzeug ausgewählt! + Vous n'avez pas choisi de véhicule ! + Non hai selezionato un veicolo! + Você não conseguiu roubar o veiculo! + Nie wybrałeś pojazdu! + 你没有选择一载具! + + + You do not have enough cash to purchase this vehicle.\n\nAmount Lacking: $%1 + Nemáte dostatek peněz na koupi tohoto vozidla \n\nAmount Postrádat: $%1 + No tienes suficiente dinero para comprar este vehículo.\n\nFalta: $%1 + + Du hast nicht genug Geld, um das Fahrzeug zu kaufen.\n\nFehlender Betrag: $%1 + Vous n'avez pas assez d'argent pour acheter ce véhicule \n\nArgent Manquant: $%1 + Non hai fondi sufficienti per comprare questo veicolo.\n\nTi mancano: $%1 + Você não tem dinheiro suficiente para comprar esse veiculo.\n\nFaltam: R$%1 + Nie masz tyle pieniędzy by kupić ten pojazd.\n\nBrakuje: $%1 + 你没有足够的现金购买这载具。\n\n缺少资金: $%1 + + + You do not have the required license and/or level! + Nemáte požadovanou licenci! + No tienes la licencia requerida! + + Du besitzt den benötigten Führerschein / Rang nicht! + Vous n'avez pas la licence requise ! + Non hai la licenza richiesta per l'acquisto! + Você não tem a licença necessária! + Nie posiadasz odpowiedniej licencji! + 你没有所需的许可证和/或级别! + + + There is a vehicle currently blocking the spawn point + Tam je vozidlo v současné době blokuje potěr bod + Hay un vehículo bloqueando el punto de Spawn. + + Ein Fahrzeug blockiert gerade den Spawnpunkt. + Il y a actuellement un véhicule qui bloque le point de spawn + C'è già un veicolo che blocca la zona di spawn + Existe um veiculo bloquenado a area de respaw + Inny pojazd blokuje miejsce odrodzenia pojazdów + 目前有一载具挡住了生成点。 + + + You bought a %1 for $%2 + Koupil sis %1 pro $%2 + Comprastes %1 por $%2 + + Du kaufst eine(n) %1 für $%2. + Vous avez acheté un %1 pour $%2 + Hai comprato un %1 al costo di $%2 + Você comprou %1 por R$%2 + Kupiłeś %1 za $%2 + 你买了一个 %1 花费 $%2 + + + You rented a %1 for $%2 + Pronajali jste si %1 za $%2 + Alquiló un %1 por $%2 + Вы арендовали %1 за $%2 + Sie haben %1 für $%2 gemietet + Vous avez loué un %1 pour $%2 + Hai noleggiato un %1 per $%2 + Você alugou um %1 por $%2 + Wypożyczyłeś %1 za $%2 + 您以 $%2 的价格租了一个 %1 + + + Rental Price: + Pronájem Cena: + Precio de Renta: + + Mietpreis: + Prix de location : + Costo Noleggio: + Alugar: + Wypożyczenie: + 租赁价格: + + + Ownership Price: + Vlastnictví Cena: + Precio de Compra: + + Kaufpreis: + Prix d'achat : + Costo Acquisto: + Comprar: + Kupno: + 所有权价格: + + + Max Speed: + Maximální rychlost: + Máxima Velocidad: + + Max. Geschwindigkeit: + Vitesse Max : + Velocità Max: + Velocidade Máxima: + Prędkość: + 最大速度: + + + Horse Power: + Koňská síla: + Caballos de Fuerza: + + Pferdestärken: + Puissance en chevaux : + Cavalli: + Cavalos de Força: + Moc: + 马力: + + + Passenger Seats: + Sedadla pro cestující: + Asientos de Pasajeros: + + Passagierplätze: + Sièges passager : + Sedili passeggeri: + Assentos: + Ilość miejsc: + 乘客座位: + + + Trunk Capacity: + Zavazadlový prostor Kapacita: + Capacidad de Maletero: + + Kofferraumgröße: + Capacité du coffre : + Capacità Inventario: + Capacidade do Inventário: + Pojemność bagażnika: + 后备箱容积: + + + Fuel Capacity: + Palivo Kapacita: + >Capacidad de Combustible: + + Tankgröße: + Capacité du réservoir : + Capacità Serbatoio: + Capacidade do Reservatório: + Pojemność baku: + 燃料容量: + + + Armor Rating: + Armor Hodnocení: + Clasificación de Armadura: + + Panzerungsbewertung: + Blindage : + Resistenza: + Resistência: + Pancerz + 护甲值: + + + Retrieval Price: + Retrieval Cena: + Precio de Recuperación: + + Einstellpreis: + Prix de sortie : + Costo di ritiro: + Preço para Recuperar: + Koszt wyciągnięcia: + 检索价格: + + + Sell Price: + Prodejní cena: + Precio de Venta: + + Verkaufspreis: + Prix de vente : + Costo di vendita: + Preço de Venda + Cena sprzedaży: + 出售价格: + + + Color: + Barva: + Color: + + Farbe: + Couleur : + Colore: + Cor: + Kolor + 颜色: + + + You are not allowed to use this shop! + Ty jsou není dovoleno používat tento obchod! + No tienes permiso de usar esta tienda! + + Du bist nicht befugt, dieses Geschäft zu benutzen! + Vous n'êtes pas autorisé à utiliser cette boutique ! + Non sei autorizzato ad usare questo negozio! + Você não está autorizado a utilizar essa loja! + Nie jesteś uprawniony do używania tego sklepu! + 不许你使用这家商店! + + + You need to select an item to buy. + Je třeba vybrat položku, kterou chcete koupit. + Debes selecionar un objeto para comprar. + + Du musst einen Gegenstand auswählen, um ihn zu kaufen. + Vous devez sélectionner un objet pour l'acheter. + Seleziona un oggetto per poterlo comprare. + Você precisa selecionar um item para comprar. + Musisz zaznaczyć co chcesz kupić. + 你需要选择要购买的物品。 + + + You didn't enter an actual number + Nezadal jste skutečný počet + No metistes un numero real + + Du hast keine echte Zahl eingegeben. + Vous n'avez pas saisi un nombre réel + Non hai inserito correttamente un numero + Você não digitou um número válido. + Nie podałeś aktualnego numeru + 你没有输入一个正确的数字 + + + You don't have that many items to sell! + Nemusíte, že mnoho položek k prodeji! + No tienes tantos objetos! + + Du hast nicht so viele Gegenstände zum Verkaufen! + Vous n'avez pas autant d'objets à vendre ! + Non hai tutti quegli oggetti da vendere! + Você não tem todos esse items para vender + Nie masz tak dużo rzeczy do sprzedania! + 你没有那么多物品可以出售! + + + The gang has enough funds to pay for this, would you like to pay with the gangs funds or your own? + Gang má dostatek finančních prostředků na zaplacení za to, byste chtěli platit fondů bandy nebo sami? + Tu pandilla tiene suficiente dinero para pagar esto, quieres pagar con ese dinero o el tuyo? + + Die Gang hat genügend Geld, um dafür zu zahlen. Willst du mit dem Geld der Gang oder deinem Eigenem bezahlen? + Le gang a suffisamment de fonds pour payer pour cela, voulez-vous payer avec les fonds de gangs ou avec votre propre argent ? + La Gang ha fondi a sufficienza per pagare questo oggetto, vuoi usare i fondi della Gang o i tuoi personali? + A Gangue tem dinheiro suficiente para pagar por isso, você gostaria de usar o dinheiro da Gangue? + Gang posiada wystarczającą ilość środków aby za to zapłacić, chcesz zapłacić za to środkami gangu, czy własnymi? + 帮派有足够的钱来支付这笔钱,你愿意用帮派的钱还是自己的钱? + + + Gang Funds: + Gang fondy: + Fondos de Pandilla: + + Geld der Gang: + Fonds du gang : + Fondi Gang: + Fundos da Gangue: + Środki gangu: + 帮派资金: + + + Your Cash: + Váš Cash: + Tu dinero: + + Bargeld: + Votre argent : + Tuoi Fondi: + Seu Dinheiro: + Twoje środki: + 你的现金: + + + Pay with cash or gang funds + Platit v hotovosti nebo gangů fondů + Pagar con tu dinero o el de tu pandilla? + + Mit Bargeld oder Geld der Gang bezahlen? + Payez avec votre argent ou avec les fonds du gang + Paga con i tuoi contanti o con i fondi della Gang + Pagar com a sua conta ou a da Gangue + Zapłać gotówką albo środkami gangu + 用现金或帮派基金支付 + + + Gang Funds + Gang fondy + Fondos de la Pandilla + + Geld der Gang + Fonds du gang : + Fondi Gang + Gangue + Środki gangu + 帮派资金 + + + Your Cash + Váš Cash + Tu dinero + + Bargeld: + Votre argent + Tuoi Fondi + Seu + Twoje środki + 你的现金 + + + You bought %1 %2 for $%3 with the gangs funds + Koupili jste% %1 %2 za $ 3 s fondy gangů + Comprastes %1 %2 por $%3 con el dinero de la pandilla + + Du kaufst %1 %2 für $%3 mit dem Geld der Gang + Vous avez acheté %1 %2 pour $%3 avec les fonds gangs + Hai comprato %1 %2 al costo di $%3 con i fondi della Gang + Você comprou %1 %2 por R$%3 com o dinheiro da gangue + Kupiłeś %1 %2 za $%3 ze środków gangu + 你购买 %1 %2 花费 $%3 帮派基金 + + + You bought %1 %2 for $%3 + Koupili jste% %1 2 na $ %3 + Comprastes %1 %2 por $%3 + + Du hast %1 %2 für $%3 gekauft. + Vous avez acheté %1 %2 pour $%3 + Hai comprato %1 %2 al costo di $%3 + Voce comprou %1 %2 por R$%3 + Kupiłeś %1 %2 za $%3 + 你购买 %1 %2 花费 $%3 + + + You sold %1 %2 for $%3 + Prodali jste% %1 2 na $ %3 + Vendistes %1 %2 por $%3 + + Du hast %1 %2 für $%3 verkauft. + Vous avez vendu %1 %2 pour $%3 + Hai venduto %1 %2 al prezzo di $%3 + Você vendeu %1 %2 por R$%3 + Sprzedałeś %1 %2 za $%3 + 你出售 %1 %2 得到 $%3 + + + You need to select an item to buy/sell. + Je třeba vybrat položku na buy / sell. + Necesitas seleccionar un objetar para vender/comprar. + + Du musst einen Gegenstand auswählen, um ihn zu kaufen / zu verkaufen. + Vous devez sélectionner un objet à acheter/vendre. + Devi selezionare un oggetto per comprare/vendere. + Selecione um item para comprar ou vender. + Musisz wybrać rzecz którą chcesz kupić/sprzedać + 你需要选择一个物品来购买/出售。 + + + You sold a %1 for <t color='#8cff9b'>$%2</t> + prodával jsi %1 pro <t color='#8cff9b'>$%2</t> + Vendistes un %1 por <t color='#8cff9b'>$%2</t> + + Du hast eine %1 für <t color='#8cff9b'>$%2</t> verkauft. + Vous avez vendu un %1 pour <t color='#8cff9b'>$%2</t> + Hai venduto un %1 al prezzo di <t color='#8cff9b'>$%2</t> + Você vendeu %1 por <t color='#8cff9b'>R$%2</t> + Sprzedałeś %1 za <t color='#8cff9b'>$%2</t> + 你出售 %1 得到 <t color='#8cff9b'>$%2</t> + + + You bought a %1 for <t color='#8cff9b'>$%2</t> with the gangs funds. + Koupil sis %1 pro <t color='#8cff9b'>$%2</t> s peněžními prostředky gangů. + Comprastes un %1 por <t color='#8cff9b'>$%2</t> con los fondos de tu pandilla. + + Du hast mit dem Geld der Gang eine %1 für <t color='#8cff9b'>$%2</t> gekauft. + Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> avec les fonds du gang. + Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> con i fondi della Gang. + Você comprou %1 por <t color='#8cff9b'>R$%2</t> com o dinheiro da gangue. + Kupiłeś %1 za <t color='#8cff9b'>$%2</t> ze środków gangu. + 你购买 %1 花费 <t color='#8cff9b'>$%2</t> 黑帮基金。 + + + You bought a %1 for <t color='#8cff9b'>$%2</t> + Koupil sis %1 pro <t color='#8cff9b'>$%2</t> + Comprastes un %1 por <t color='#8cff9b'>$%2</t> + + Du hast eine %1 für <t color='#8cff9b'>$%2</t> gekauft. + Vous avez acheté un %1 pour <t color='#8cff9b'>$%2</t> + Hai comprato un %1 al costo di <t color='#8cff9b'>$%2</t> + Você comprou %1 por <t color='#8cff9b'>R$%2</t> + Kupiłeś %1 za <t color='#8cff9b'>$%2</t> + 你购买 %1 花费 <t color='#8cff9b'>$%2</t> + + + Shop Inventory + Obchod Zásoby + Inventario de la Tienda + + Ladeninventar + Inventaire de la boutique + Inventario Negozio + Loja de Inventário + Wyposażenie sklepu + 店铺库存 + + + Your Inventory + Váš Inventory + Tu inventario + + Dein Inventar + Votre inventaire + Inventario Personale + Seu Inventário + Twoje wyposażenie + 你的库存 + + + + + You will receive your next paycheck in %1 minutes. + Obdržíte svůj další výplatní pásku v %1 minut. + Recibiras tu siguiente pago en %1 minutos + + Du erhältst deinen nächsten Gehaltsscheck in %1 Minuten. + Vous recevrez votre prochaine paye dans %1 minutes. + Riceverai il tuo prossimo stipendio in %1 minuti. + Você irá receber seu próximo pagamento em %1 minuto(s). + Otrzymasz kolejną wypłatę w ciągu %1 minut. + 你将在 %1 分钟后收到你的下一张薪水支票。 + + + You have missed a paycheck because you were dead. + Jste vynechal výplatu, protože jste byli mrtví. + Te has perdido un pago por estar muerto. + + Du erhältst kein Gehaltsscheck, da du gestorben bist. + Vous n'avez pas reçu votre paye en raison de votre mort. + Hai perso uno stipendio . + Você não recebeu seu pagamento pois estava morto. + Ominęła cię wypłata ponieważ byłeś martwy. + 因为你死了,你错过了薪水。 + + + You have received a paycheck of $%1. + Dostali jste výplatu ve výši $ %1. + Has recibido un pago de $%1 + + Du hast deinen Gehaltscheck in Höhe von $%1 erhalten. + Vous avez reçu votre paye de $%1. + Hai ricevuto uno stipendio di $%1. + Você recebeu seu pagamento de R$%1. + Otrzymałeś wypłatę w kwocie $%1. + 你收到了一张 $%1 的薪水支票。 + + + + + Refuel Fuel Canister + Tankovat paliva kanystr + Ravitailler le bidon en carburant + Llenar Bidón de Combustible + Fare rifornimento di carburante scatola metallica + Tankowanie paliwa Canister + Reabastecer de combustível vasilha + Заправить баллон с горючим + Benzinkanister befüllen + 给汽油桶加油 + + + Refuel Vehicle + tankovací Vehicle + Llenar Vehículo + Fare rifornimento di veicoli + Tankowanie samochodów + + Reabastecer Veículo + Ravitailler en essence le véhicule + Fahrzeug auftanken + 给车加油 + + + Price per Liter: $%1 + Cena za litr: $ %1 + Precio por Litro: $%1 + Prezzo al litro: $%1 + Cena za litr: $%1 + + Preço por Litro : R$%1 + Prix au Litre : $%1 + Preis pro Liter: $%1 + 每升价格:$%1 + + + Current Fuel Amount: + Aktuální výše Palivo: + Quantité de carburant actuelle : + Actual cantidad de combustible: + Quantità corrente di benzina: + Aktualny Ilość paliwa: + + Quantidade Atual de Combustível: + Aktuelle Kraftstoffmenge: + 当前燃料量: + + + Select a vehicle + Vyberte si vůz + Selecciona un Vehículo + Selezionare un veicolo + Wybierz pojazd + + Selecione um veículo + Sélectionner un vehicule + Wähle ein Fahrzeug: + 选择载具 + + + The vehicle is too far or you are in! + Vozidlo je příliš daleko, nebo jste se! + El Vehículo esta muy lejos o tu estas adentro! + Il veicolo è troppo lontano o vi sei all'interno! + Pojazd jest zbyt daleko lub jesteś w! + + O veículo está muito longe ou você está nele! + Le véhicule est peut-etre trop loin, ou tu es dedans ! + Das Fahrzeug ist zu weit entfernt oder du sitzt noch drin! + 载具太远了,或者你在载具里! + + + The vehicle is full! + Vozidlo je plná! + El Vehículo esta lleno! + Il veicolo è pieno! + Pojazd jest pełna! + + O veículo está cheio! + Le véhicule est plein ! + Das Fahrzeug ist voll! + 载具已满! + + + + + Drop Fishing Net + Drop rybářská síť + Tirar Red de Pesca + + Fischernetz auswerfen + Lancer le filet de pêche + Drop Fishing Net + Jogar Rede de Pesca + Zarzuć sieć + 放下渔网 + + + Rob Person + Rob Pearson + Robar Persona + + Person ausrauben + Voler la personne + Deruba + Roubar Jogador + Obrabuj osobę + 抢劫此人 + + + + + Fish Market + Rybí trh + Marché aux poissons + Mercado de Pescado + + Fischmarkt + Peixaria + Sklep rybny + Pescivendolo + 海产品市场 + + + Hospital + Nemocnice + Hôpital + Hospital + + Krankenhaus + Hospital + Szpital + Ospedale + 医院 + + + Police Station + Policejní stanice + Poste de police + Estación de Policia + + Polizei Revier + Estação Policial + Posterunek policji + Questura + 警察分局 + + + Police Air HQ + Police Air HQ + Base aérienne de la Police + Cuartel Aéreo Policial + QG Aereo Polizia + + Polizei HQ Flughafen + QG Aéreo Policial + Baza lotnicza policji + 警察航空总部 + + + Iron Mine + Železný důl + Mine de fer + Mina de Hierro + + Eisenmine + Mina de Ferro + Kopalnia miedzi + Miniera di ferro + 铁矿 + + + Salt Mine + Solný důl + Mine de sel + Mina de Sal + + Salzmine + Mina de Sal + Kopalnia soli + Salina + 盐矿 + + + Salt Processing + sůl Processing + Traitement de sel + Procesador de Sal + + Salzverarbeitung + Processador de Sal + Warzelnia soli + Processo del sale + 食盐制造厂 + + + Altis Corrections + Altis Opravy + Prison d'Altis + Prisión de Altis + + Altis Bundesgefängnis + Prisão de Altis + Więzienie Altis + Penitenziario di Altis + 监狱 + + + Tanoa Corrections + Tanoa Opravy + Prison de Tanoa + Prisión de Tanoa + + Tanoa Bundesgefängnis + Prisão de Tanoa + Więzienie Tanoa + Penitenziario di Tanoa + Tanoa更正 + + + Police HQ + Police HQ + QG de la police + Comisaria de Policía + QG Polizia + + Polizei HQ + QG Policial + KG Policji Altis + 警察总部 + + + Coast Guard + pobřežní hlídka + Garde-côte + Guardia Costera + + Küstenwache + Guarda Costeira + Straż przybrzeżna + Guardia Costiera + 海岸警卫队 + + + Rebel Outpost + Rebel Outpost + Avant-Poste Rebelle + Base Rebelde + Avamposto Ribelle + + Rebellen Außenposten + Base Rebelde + Baza rebeliantów + 叛军前哨 + + + Air Shop + Air Shop + Concessionnaire aérien + Tienda Aérea + Negozio Aereo + + Luftfahrzeug Händler + Loja Aérea + Sklep lotniczy + 空中载具商店 + + + Truck Shop + Truck Shop + Vendeur de camion + Tienda de Camiones + + LKW Händler + Loja de Caminhões + Salon ciężarówek + Concessionaria Camion + 卡车商店 + + + Oil Processing + Zpracování olej + Traitement du Pétrole + Procesador de Petróleo + + Öl Verarbeiter + Processador de Petróleo + Rafineria ropy naftowej + Raffineria di Petrolio + 石油加工 + + + Iron Processing + Zpracování Iron + Traitement du Fer + Procesador de Hierro + Processo del ferro + + Eisenschmelze + Processador de Ferro + Huta żelaza + 铁矿加工 + + + Sand Mine + písek Mine + Mine de Sable + Mina de Arena + Miniera di sabbia + + Sand Mine + Mina de Areia + Kopalnia piasku + 采沙场 + + + Chop Shop + Chop Shop + Revendeur de véhicules volés + Desguace Clandestino + Ricettatore + + Schrotthändler + Desmanche + Dziupla + 黑车店 + + + Cocaine Processing + Zpracování kokain + Traitement de Cocaïne + Procesador de Cocaína + Trattamento cocaina + + Kokain Verarbeiter + Processador de Cocaína + Oczyszczanie kokainy + 可卡因加工点 + + + Copper Mine + měděný důl + Mine de Cuivre + Mina de Cobre + Miniera di rame + + Kupfermine + Mina de Cobre + Kopalnia miedzi + 铜矿 + + + ATM + bankomat + DAB + ATM + ATM + + Geldautomat + Caixa Eletrônico + Bankomat + 自动取款机 + + + Local Bank + místní bankovní + Banque locale + Banco Local + Banca locale + + Zentralbank + Banco Local + Bank Altis + 银行 + + + Car Shop + Auto Shop + Concessionnaire + Tienda de Coches + Concessionario d `auto + + Autohändler + Loja de Carros + Salon samochodowy + 小汽车店 + + + Hospital/Clinic + Nemocnice / Klinika + Clinique + Hospital/Clínica + Ospedale / Clinica + + Krankenhaus + Hospital/Clínica + Klinika Altis + 医院/诊所 + + + Diamond Mine + Diamond Mine + Mine de diamant + Mina de Diamantes + Miniera di diamanti + + Diamanten Mine + Mina de Diamante + Kopalnia diamentów + 钻石矿场 + + + General Store + Obchod se smíšeným zbožím + Magasin général + Tienda General + Strumenti Generali + + Supermarkt + Loja de Equipamentos + Sklep techniczny + 物品商店 + + + Civilian Shops + civilní Obchody + Magasins civils + Tiendas Civiles + Negozi civili + + Geschäft für Zivilisten + Lojas Civis + Sklepy dla cywilów + 平民商店 + + + Boat Shop + Lodní Shop + Concessionnaire de bateaux + Tienda de Barcos + Concessionaria Nautica + + Boots Händler + Loja de Barcos + Sklep z łodziami + 船舶商店 + + + Bruce's Outback Outfits + Bruceovy Outback Oblečení + Vêtements de Bruce + Tienda de Ropa + Outfit di Bruce + + Loja de Roupas + Sklep odzieżowy + Bruce's Outback Outfits + 服装店 + + + Apple Field + Apple Field + Champs de Pommes + Campo de Manzanas + Campo di Mele + + Apfel Plantage + Campo de Maçãs + Sad jabłkowy + 苹果树林 + + + Peaches Field + broskve Field + Champs de Pêches + Campo de Melocotones + Campo di Pesche + + Pfirsich Plantage + Campo de Pêras + Sad brzoskwiniowy + 桃树林 + + + Market + Trh + Marché + Mercado + Mercato + + Markt + Mercado + Market spożywczy + 市场 + + + Air Service Station + Stanice Air Service + Réparateur Aérien + Estación de Servicio Aéreo + Stazione Servizio Aereo + + Werkstatt für Luftfahrzeuge + Estação de Serviços Aéreos + Serwis lotniczy + 航空服务站 + + + Channel 7 News + Channel 7 News + Chaine d'infos Numéro 7 + Canal de Noticias 7 + Notiziario di Altis + + Kanal 7 Nachrichtensender + Canal de Notícias 7 + Maszt nadawczy + 新闻广播电台 + + + DMV + DMV + Magasin de licences + Registro de Licencias + + Zulassungstelle + Loja de Licenças + Urząd licencyjny + Licenze + 许可证办理 + + + Delivery Missions + Dodací mise + Missions de livraison + Misiones de Entrega + + Kurier Mission + Missões de Entrega + Misje kurierskie + Missioni Postali + 快递任务 + + + Deliver Package + doručit balíček + Livrer le paquet + Entregar Paquete + + Paket ausliefern + Entregar Pacote + Dostarcz przesyłkę + Consegna il pacco + 完成快递任务 + + + Get Delivery Mission + Získat Delivery mise + Obtenir Mission de livraison + Empezar Misión de Entrega + + Starte Kurier Mission + Pegar Missão de Entrega + Pobierz przesyłkę do dostarczenia + Ottieni una missione postale + 得到快递任务 + + + Diving Shop + Potápění Shop + Boutique de plongée + Tienda de Buceo + + Steve's Taucherausrüstung + Loja de Mergulho + Akcesoria do nurkowania + Negozio da Sub + 潜水店 + + + Drug Dealer + Drug prodejce + Dealeur de drogue + Narcotraficante + + Drogendealer + Traficante + Diler narkotyków + Spacciatore + 毒贩 + + + Diamond Processing + Diamond Processing + Traitement du diamant + Procesador de Diamante + + Diamantenschleifer + Processador de Diamante + Szlifierz diamentów + Processo diamanti + 钻石加工 + + + Oil Field + Ropné poles + Champ de Pétrole + Campo de Petróleo + + Öl Felder + Campo de Petróleo + Szyb naftowy + Giacimento di Petrolio + 油田 + + + Marijuana Field + Marihuana Field + Champ de Marijuana + Campo de Marihuana + + Marihuana Plantage + Campo de Maconha + Pole marihuany + Campo di Marijuana + 大麻产地 + + + Marijuana Processing + Zpracování marihuana + Traitement de la Marijuana + Procesador de Marihuana + + Marihuana Verarbeitung + Processador de Maconha + Suszarnia marihuany + Trattamento Marijuana + 大麻加工 + + + Boat Spawn + Lodní potěr + Port + Spawn de Barcos + + Boot Spawn + Spawn de Barcos + Przystań + Consegna Barche + 码头 + + + Copper Processing + Zpracování měď + Traitement du cuivre + Procesador de Cobre + + Kupferschmelze + Processador de Cobre + Huta miedzi + Processo Rame + 铜矿加工 + + + Coca Field + Coca Field + Champ de Cocaïne + Campo de Cocaína + + Kokain Plantage + Campo de Cocaína + Pole kokainy + Campo di Cocaina + 可卡因树林 + + + Oil Trader + olej Trader + Vendeur de pétrole + Comerciante de Petróleo + + Öl Händler + Comprador de Petróleo + Skup benzyny + Vendita Olio + 石油贸易商 + + + Salt Trader + sůl Trader + Vendeur de sel + Comerciante de Sal + + Salz Händler + Comprador de Sal + Skup soli + Vendita Sale + 食盐贸易商 + + + Diamond Trader + Diamond Trader + Vendeur de diamant + Comerciante de Diamantes + + Juwelier + Comprador de Diamante + Skup diamentów + Vendita Diamanti + 钻石贸易商 + + + Glass Trader + sklo Trader + Vendeur de verre + Comerciante de Vidrio + + Glasbläserei + Comprador de Vidro + Skup szkła + Vendita del Vetro + 玻璃贸易商 + + + Iron / Copper Trader + Žehlička / Měď Trader + Vendeur de minerais + Comerciante de Hierro / Cobre + + Industriehandel + Comprador de Ferro e Cobre + Skup metali + Vendita del Ferro/Rame + 铁/铜交易商 + + + Sand Processing + Zpracování písek + Traitement du sable + Procesador de Arena + + Sand Verarbeiter + Processador de Areia + Huta szkła + Processo Sabbia + 玻璃制造厂 + + + Gun Store + Gun Store + Armurerie + Tienda de Armas + + Waffengeschäft + Loja de Armas + Sklep z bronią + Armeria + 武器商店 + + + Opium Poppy Field + Opium Poppy Field + Champ d'héroïne + Campo de Opio + Opium Poppy Field + + Heroin Plantage + Campo de Heroína + Pole heroiny + 罂粟产地 + + + Heroin Processing + Zpracování heroin + Traitement d'héroïne + Procesador de Heroina + Processing eroina + + Heroin Verarbeitung + Processador de Heroína + Oczyszczanie heroiny + 海洛因加工点 + + + Garage + Garáž + Garage + Garaje + Box auto + + Garage + Garagem + Garaż + 载具仓库 + + + Federal Reserve + federální rezervní systém + Banque fédérale + Reserva Federal + + Zentralbank + Reserva Federal + Bank Rezerw Federalnych + Banca Federale + 金库 + + + Highway Patrol Outpost + Dálniční hlídka Outpost + Avant-poste de Police + Puesto de Patrulla de Carretera + + Mautstation + Base da Polícia Rodoviária + Posterunek policji drogowej + Checkpoint di polizia + 公路巡逻队 + + + Rock Quarry + kamenolomu + Mine de pierres + Mina de Piedra + + Steinbruch + Pedreira + Kamieniołom + Cava di Roccia + 采矿石场 + + + Rock Processing + rock Processing + Traitement de pierres + Procesador de Piedra + + Stein Verarbeitung + Processador de Pedra + Wytwórnia cementu z kamienia + Processo Roccia + 水泥制造厂 + + + Cement Trader + cement Trader + Vendeur de ciments + Comerciante de Cemento + + Zement Händler + Comprador de Cimento + Skup cementu + Vendita del Cemento + 水泥贸易商 + + + Turtle Poaching + Turtle pytláctví + Réserve protégée de tortues + Caza de Tortugas + Bracconaggio di Tartarughe + + Wilderei für Schildkröten + Área de Tartarugas + Strefa występowania żółwi morskich + 海龟捕猎区 + + + Turtle Dealer + Turtle prodejce + Dealeur de Tortues + Traficante de Tortugas + + Schildkröten Händler + Comprador de Tartarugas + Skup żółwi + Vendita Tartarughe + 海龟走私商 + + + Go-Kart Shop + Go-Kart Shop + Concessionnaire de karts + Tienda de Go-Kart + + Bobby's Gokarthandel + Loja de Karts + Sklep z GoKartami + Parco Go-Kart + 卡丁车店 + + + Gold Bars Buyer + Gold Bary kupujícího + Acheteur d'Or + Comprador de Oro + + Goldhändler + Comprador de Barras de Ouro + Skup złota + Gioielliere + 金条买家 + + + Gang Hideout 1 + Gang Hideout 1 + Cachette 1 + Escondite de Pandillas 1 + + Gang Versteck 1 + Esconderijo de Gangs 1 + Kryjówka gangu 1 + Covo Gang 1 + 帮派据点1 + + + Gang Hideout 2 + Gang Hideout 2 + Cachette 2 + Escondite de Pandillas 2 + + Gang Versteck 2 + Esconderijo de Gangs 2 + Kryjówka gangu 2 + Covo Gang 2 + 帮派据点2 + + + Gang Hideout 3 + Gang Hideout 3 + Cachette 3 + Escondite de Pandillas 3 + + Gang Versteck 3 + Esconderijo de Gangs 3 + Kryjówka gangu 3 + Covo Gang 3 + 帮派据点3 + + + Hunting Grounds + honební revír + Terrain de chasse + Zona de Caza + + Jagdgebiet + Área de Caça + Strefa polowań + Riserva di Caccia + 狩猎场 + + + Rebel Clothing Shop + Rebel Oblečení Shop + Vêtements rebelle + Tienda de Ropa Rebelde + Rebel negozio di abbigliamento + + Rebellen Kleidungsgeschäft + Loja de Roupas Rebeldes + Magazyn rebelianta + 叛军服装店 + + + Rebel Weapon Shop + Rebel obchodu se zbraněmi + Armurerie rebelle + Tienda de Armas Rebeldes + + Rebellen Waffenhändler + Loja de Armas Rebeldes + Zbrojownia rebelianta + Armeria della Guerriglia + 叛军武器店 + + + Helicopter Shop + vrtulník Shop + Concessionnaire aérien + Tienda de Helicópteros + Elicottero negozio + + Helikopter Händler + Loja de Helicópteros + Sklep lotniczy + 飞行载具店 + + + Fuel Station Store + Palivo Store Station + Cafet' de Station + Tienda de Gasolinera + Stazione di rifornimento Conservare + + Tankstelle + Loja de Conveniência + Sklep OLLEN + 加油站商店 + + + Rebel Market + Rebel Market + Marché Rebelle + Mercado Rebelde + mercato Rebel + + Rebellen Markt + Mercado Rebelde + Market rebelianta + 叛军市场 + + + Question Dealer + Otázka prodejce + Questionner le dealer + Informante + + Informant + Perguntar ao Traficante + Przesłuchaj dilera + Minaccia Spacciatore + 询问经销商 + + + Service Helicopter + Service Vrtulník + Service d'hélicoptère + Helicóptero de Servicio + + Helikopter Werkstatt + Serviço Aéreo + Serwisuj pojazd lotniczy + Servizio Aereo + 维修直升机 + + + Clothing Store + Obchod s oblečením + Vêtements + Tienda de Ropa + + Kleidungsgeschäft + Loja de Roupas + Sklep odzieżowy + Vestiario + 服装店 + + + Medical Assistance + lékařská pomoc + Assistance médicale + Asistencia Médica + + Medizinischer Ersthelfer + Assistência Médica + Pomoc medyczna + Assistenza Medica + 医疗救助 + + + Store vehicle in Garage + Skladovat vozidlo v garáži + Ranger le véhicule dans le garage + Guardar vehículo en el Garaje + + Fahrzeug in Garage einparken + Guardar veículo na Garagem + Umieść pojazd w garażu + Deposita veicolo in garage + 将载具存放在仓库 + + + Cop Item Shop + Cop Item Shop + Magasin de la Police + Tienda de Objetos de Policía + Strumenti + + Polizei Ausrüstung + Loja de Items da Polícia + Zaopatrzenie + 警察物品商店 + + + Cop Clothing Shop + Cop Oblečení Shop + Vêtements de policier + Tienda de Ropa de Policía + Uniformi + + Polizei Uniformen + Loja de Roupas da Polícia + Umundurowanie + 警察服装店 + + + Cop Weapon Shop + Cop obchodu se zbraněmi + Armurerie de Police + Tienda de Armas de Policía + Armeria da Agenti + + Polizei Waffengeschäft + Loja de Armas da Polícia + Broń policji + 警察武器店 + + + Patrol Officer Weapon Shop + Policistou obchodu se zbraněmi + Armurerie d'officier + Tienda de Armas de Oficial de Patrulla + Armeria da Pattuglia + + Loja de Armas de Patrulha + Broń patrolowa + Streifenpolizist Waffengeschäft + 巡警武器商店 + + + Sergeant Weapon Shop + Seržant obchodu se zbraněmi + Armurerie de sergent + Tienda de Armas de Oficial de Sargento + Armeria dei Sergenti + + Lojas de Armas de Sargento + Broń sierżanta + Sergeant Waffengeschäft + 警长武器商店 + + + Vehicle Shop + Shop Vehicle + Concessionnaire de véhicule + Tienda de Vehículos + di veicoli + + Autohändler + Loja de Carros + Pojazdy - sklep + 载具商店 + + + Process Sand + proces Písek + Traiter le sable + Procesar Arena + + Verarbeite Sand + Processar Areia + Przetop piasek na szkło + Lavorazione Sabbia + 把沙子制造成玻璃 + + + Process Rock + proces rock + Traiter la pierre + Procesar Piedra + + Verarbeite Stein + Processar Pedra + Zmiel skały na cement + Processo Roccia + 把矿石制造成水泥 + + + Wong's Food Cart + Křídla Food košík + Magasin de Wong + Kiosko de Wong + Wong Food Cart + + Wong's Spezialitäten + Boteco do Wongs + Bar u Wonga + 食品商人 + + + Open Vault + otevřená Vault + Ouvrir coffre + Abrir Bóveda + Apri Cassaforte + + Geöffneter Tresor + Abrir Cofre + Otwórz skarbiec + 打开金库 + + + Fix Vault + Fix Vault + Réparer coffre + Reparar Bóveda + + Tresor reparieren + Consertar Cofre + Napraw skarbiec + Ripara Cassaforte + 修复金库 + + + Federal Reserve - Front Entrance + Federální rezervní systém - přední vchod + Banque fédérale - Entrée avant + Reserva Federal - Entrada Principal + Riserva Federale - Entrata Frontale + + Zentralbank - Haupteingang + Reserva Federal - Entrada Frontal + Rezerwa federalna - wejście główne + 金库-前门 + + + Federal Reserve - Side Entrance + Federální rezervní systém - Boční vchod + Banque fédérale - Entrée latérale + Reserva Federal - Entrada Lateral + Riserva Federale - Ingresso laterale + + Zentralbank - Seiteneingang + Reserva Federal - Entrada Lateral + Rezerwa federalna - wejście boczne + 金库-侧门 + + + Federal Reserve - Back Entrance + Federální rezervní systém - zadní vchod + Banque fédérale - Entrée Arrière + Reserva Federal - Entrada Trasera + Riserva Federale - Ingresso sul Retro + + Zentralbank - Hintereingang + Reserva Federal - Entrada Traseira + Rezerwa federalna - wejście tylne + 金库-后门 + + + Federal Reserve - Vault View + Federální rezervní systém - Vault View + Banque fédérale - Voir Coffre + Reserva Federal - Vista a la Bóveda + Riserva Federale - Vista della Cassaforte + + Zentralbank - Tresor + Reserva Federal - Visão do Cofre + Rezerwa federalna - skarbiec + 金库-保险箱 + + + Turn Off Display + Vypnout displej + Désactiver l'affichage + Apagar el Display + Disattivare la visualizzazione + + Bildschirm ausschalten + Desligar Monitor + Wyłącz wyświetlacz + 关闭显示 + + + Armament + Vyzbrojení + Armement + Armamento + Armamento + + Rüstkammer + Armamento + Zbrojownia gangu + 武器装备 + + + EMS Item Shop + EMS Item Shop + Magasin de médecin + Tienda de Objetos de Médico + Strumenti EMS + + Sanitäter Ausrüstung + Loja de Items Médicos + Wyposażenie medyczne + 医疗物品店 + + + EMS Clothing Shop + EMS Oblečení Shop + Uniformes du SAMU + Tienda de Ropa de Médico + Uniformi EMS + + Sanitäter Kleidungsgeschäft + EMS Roupa Loja + Sklep odzieżowy EMS + 医疗服装店 + + + Helicopter Garage + vrtulník Garáž + Garage d'hélicoptère + Garaje de Helicóptero + Garage d'Elicotteri + + Helikopter Hangar + Garagem Aérea + Hangar lotniczy + 直升机库 + + + Car Garage + Car Garage + Garage de voitures + Garaje de Coches + + Fahrzeug Garage + Garagem de Carros + Hangar lotniczy + Garage Automobili + 载具仓库 + + + Pay Bail + Pay Bail + Payer la caution + Pagar Fianza + + Zahle Kaution + Pagar Fiança + Zapłać kaucję + Paga cauzione + 支付保释金 + + + + + Remove Uniform + Remove Uniform + Remove Uniform + Remove Uniform + Entferne Kleidung + Retirer uniforme + Remove Uniform + Remove Uniform + Remove Uniform + 删除制服 + + + Remove Hat + Remove Hat + Remove Hat + Remove Hat + Entferne Kopfbedeckung + Retirer chapeau + Remove Hat + Remove Hat + Remove Hat + 删除帽子 + + + Remove Glasses + Remove Glasses + Remove Glasses + Remove Glasses + Entferne Brille + Retirer lunettes + Remove Glasses + Remove Glasses + Remove Glasses + 删除眼镜 + + + Remove Vest + Remove Vest + Remove Vest + Remove Vest + Entferne Weste + Retirer gilet + Remove Vest + Remove Vest + Remove Vest + 删除背心 + + + Remove Backpack + Remove Backpack + Remove Backpack + Remove Backpack + Entferne Rucksack + Retirer sac + Remove Backpack + Remove Backpack + Remove Backpack + 删除背包 + + + Casual Wears + Casual Wears + Casual Wears + Casual Wears + Büro Kleidung + Casual Wears + Casual Wears + Casual Wears + Casual Wears + 休闲装 + + + Hat and Bandana + Hat and Bandana + Hat and Bandana + Hat and Bandana + Mütze und Kopftuch + Chapeau et bandana + Hat and Bandana + Hat and Bandana + Hat and Bandana + 帽子和头巾 + + + Cop Uniform + Cop Uniform + Cop Uniform + Cop Uniform + Polizei Uniform + Uniforme de service + Cop Uniform + Cop Uniform + Cop Uniform + 警察制服 + + + EMS Uniform + EMS Uniform + EMS Uniform + EMS Uniform + Sanitäter Uniform + Uniforme du SAMU + EMS Uniform + EMS Uniform + EMS Uniform + 医疗制服 + + + EMS Backpack + EMS Backpack + EMS Backpack + EMS Backpack + Sanitäter Rucksack + Sac à dos SAMU + EMS Backpack + EMS Backpack + EMS Backpack + 医疗背包 + + + Flashbang + Flashbang + Flashbang + Flashbang + Blendgranate + Flashbang + Flashbang + Flashbang + Flashbang + 闪光弹 + + + Stun Pistol + Stun Pistol + Stun Pistol + Stun Pistol + Betäubungs-Pistole + Taser + Stun Pistol + Stun Pistol + Stun Pistol + 眩晕手枪 + + + Taser Rifle + Taser Rifle + Taser Rifle + Taser Rifle + Betäubungs-Gewehr + Fusil taser + Taser Rifle + Taser Rifle + Taser Rifle + 泰瑟步枪 + + + Taser Rifle Magazine + Taser Rifle Magazine + Taser Rifle Magazine + Taser Rifle Magazine + Betäubungs-Gewehr-Magazine + Chargeurs de fléchettes électriques + Taser Rifle Magazine + Taser Rifle Magazine + Taser Rifle Magazine + 泰瑟步枪弹匣 + + + Northern Rebel Base + Northern Rebel Base + Northern Rebel Base + Northern Rebel Base + Nord Rebellen Basis + Base rebelle Nord + Northern Rebel Base + Northern Rebel Base + Northern Rebel Base + 北部叛军基地 + + + Southern Rebel Base + Southern Rebel Base + Southern Rebel Base + Southern Rebel Base + Süd Rebellen Basis + Base rebelle Sud + Southern Rebel Base + Southern Rebel Base + Southern Rebel Base + 南部叛军基地 + + + Eastern Rebel Base + Eastern Rebel Base + Eastern Rebel Base + Eastern Rebel Base + Ost Rebellen Basis + Base rebelle Est + Eastern Rebel Base + Eastern Rebel Base + Eastern Rebel Base + 东部叛军基地 + + + North Western Rebel Base + North Western Rebel Base + North Western Rebel Base + North Western Rebel Base + Nord-West Rebellen Basis + Base rebelle Nord-Ouest + North Western Rebel Base + North Western Rebel Base + North Western Rebel Base + 西北叛军基地 + + + North Eastern Rebel Base + North Eastern Rebel Base + North Eastern Rebel Base + North Eastern Rebel Base + Nord-Ost Rebellen Basis + Base rebelle Nord-Est + North Eastern Rebel Base + North Eastern Rebel Base + North Eastern Rebel Base + 东北叛军基地 + + + Kavala Hospital + Kavala Hospital + Kavala Hospital + Kavala Hospital + Kavala Krankenhaus + Hôpital de Kavala + Kavala Hospital + Kavala Hospital + Kavala Hospital + Kavala医院 + + + Athira Regional + Athira Regional + Athira Regional + Athira Regional + Athira Krankenhaus + Hôpital d'Athira + Athira Regional + Athira Regional + Athira Regional + Athira地区 + + + Pyrgos Hospital + Pyrgos Hospital + Pyrgos Hospital + Pyrgos Hospital + Pyrgos Krankenhaus + Hôpital de Pyrgos + Pyrgos Hospital + Pyrgos Hospital + Pyrgos Hospital + Pyrgos医院 + + + South East Hospital + South East Hospital + South East Hospital + South East Hospital + Süd-Ost Krankenhaus + Hôpital du Sud-Est + South East Hospital + South East Hospital + South East Hospital + 东南医院 + + + Tanouka Regional + Tanouka Regional + Tanouka Regional + Tanouka Regional + Tanouka Krankenhaus + Hôpital de Tanouka + Tanouka Regional + Tanouka Regional + Tanouka Regional + Tanouka地区 + + + North East Airport Hospital + North East Airport Hospital + North East Airport Hospital + North East Airport Hospital + Nord-Ost Flughafen Krankenhaus + Hôpital de l'aéroport + North East Airport Hospital + North East Airport Hospital + North East Airport Hospital + 东北机场医院 + + + North Airport HQ + North Airport HQ + North Airport HQ + North Airport HQ + Nord Flughafen HQ + Base aérienne nord + North Airport HQ + North Airport HQ + North Airport HQ + 北部机场总部 + + + South Western Airport HQ + South Western Airport HQ + South Western Airport HQ + South Western Airport HQ + Süd-Westliche HQ Flughafen + Base aérienne sud-ouest + South Western Airport HQ + South Western Airport HQ + South Western Airport HQ + 西南机场总部 + + + + + Vehicular Manslaughter + dopravní zabití + Vol de véhicule + Homicidio Vehicular + Omicidio colposo veicolare + Kołowego Manslaughter + + Atropelamento + Fahrlässige Tötung + 载具撞人 + + + Manslaughter + Zabití + Homicide involontaire + Homicidio + Omicidio colposo + Zabójstwo + + Homicidio Involuntario + Totschlag + 过失杀人 + + + Escaping Jail + Jak uniknout vězení + Evasion de prison + Escaparse de la Cárcel + Fuga dalla prigione + Uciekając Jail + + Fuga da Prisão + Ausbruch + 逃离监狱 + + + Attempted Auto Theft + Pokusili Theft Auto + Tentative de vol de véhicule + Atentado: Robo de Vehículo + Tentativo di furto d'auto + Próba Theft Auto + + Tentativa de Roubo de Veiculo + Versuchter Autodiebstahl + 企图盗窃载具 + + + Use of illegal explosives + Používání nelegálních výbušnin + Utilisation d'explosifs illégaux + Uso de Explosivos Ilegales + Uso di esplosivi illegali + Używanie nielegalnych materiałów wybuchowych + + Uso de explosivos ilegais + Verwendung von illegalen Sprengstoff + 使用非法爆炸物 + + + Robbery + Loupež + Vol + Robo + Rapina + Rozbój + + Roubo + Raub + 抢劫 + + + Kidnapping + Únos + Enlèvement + Secuestro + Rapimento + Porwanie + + Sequestro + Entführung + 绑架 + + + Attempted Kidnapping + pokus o únos + Tentative de kidnapping + Atentado: Secuestro + + Tentativa de Sequestro + Versuchte Entführung + Tentativo di rapimento + Próba porwania + 绑架未遂 + + + Public Intoxication + veřejné Intoxikace + Intoxication publique + Intoxicación Pública + + Uso de Droga em Publico + Öffentlicher Drogenmissbrauch + Uso di stupefacenti in pubblico + Upojenie publiczny + 公共场合使用非法药品 + + + Grand Theft + velká loupež + Vol de voiture + Robo Mayor + grande furto + Wielka kradzież + + Grande Roubo + Auto Diebstahl + 盗窃 + + + Petty Theft + Petty Theft + Petit vol + Robo Menor + piccoli furti + Drobnych kradzieży + + Pequeno Roubo + Kleiner Diebstahl + 小偷小摸 + + + Hit and run + Zavinit nehodu a ujet + Délit de fuite + Pega y Corre + Mordi e fuggi + Uderz i uciekaj + + Fugir de Batida + Fahrerflucht + 交通肇事后逃逸 + + + Drug Possession + držení drog + Possession de drogue + Posesión de Drogas + possesso di droga + Posiadanie narkotyków + + Posse de Droga + Drogenbesitz + 持有毒品 + + + Intent to distribute + Intent distribuovat + Intention de distribuer + Intención de Distribuir + + Tentativa de Trafico + Versuchter Drogenhandel + Tentativo di spaccio + Zamiarem dystrybucji + 意图散布 + + + Drug Trafficking + Obchodování s drogami + Trafic de drogue + Tráfico de Drogas + + Trafico de Drogas + Drogenhandel + Vendita di droga + Handel narkotykami + 贩毒 + + + Burglary + loupež + Cambriolage + Robo de Casa + furto con scasso + Włamanie + + Arrombamento + Einbruch + 盗窃 + + + Tax Evasion + Daňový únik + Évasion fiscale + Evadir Impuestos + + Evasão Fiscal + Steuerhinterziehung + Evasione delle tasse + Unikanie podatków + 逃税 + + + Terrorism + Terorismus + Terrorisme + Terrorismo + + Terrorismo + Terrorismus + Terrorismo + Terroryzm + 恐怖主义 + + + Unlicensed Hunting + Volně prodejné Hunting + Chasse sans licence + Caza sin Licencia + + Caça sem Licença + Jagen ohne Jagdschein + Caccia senza licenza + Polowanie nielicencjonowane + 无证狩猎 + + + Organ Theft + Organ Krádež + Vol d'organes + Robo de Organos + organo furto + Narząd kradzieżą + + Roubo de Orgãos + Organ Diebstahl + 盗窃公共财物 + + + Attempted Organ Theft + Pokus o krádež Organ + Tentative de vol d'organes + Atentado: Robo de Organos + Tentativo furto di organi + Próba kradzieży narządów + + Tentativa de Roubo de Orgãos + Versuchter Organ Diebstahl + 盗窃公共财物未遂 + + + Driving without license + Jízda bez povolení + Conducir sin Licencia + + Absence du permis de conduire + Dirigir sem Licença + Fahren ohne Führerschein + Guida senza patente + Jazda bez licencji + 无证驾驶 + + + Driving on the wrong side of the road + Jízda v špatným směrem do ulice + Conducir en el lado incorrecto de la calle + + Conduite sur le mauvais côté de la route + Dirigindo no sentido contrario + Guida Contromano + Jazda po niewłaściwej stronie drogi + Fahren in die falsche Richtung der Straße + 在错误的道路上驾驶 + + + Not respecting the signalizations + Nerespektování signalizací + No respetar las señales + + Non respect des signalisations + Não respeitar as sinalizações + Nicht unter Beachtung der Signalisierungen + Mancato rispetto dei segnali stradali + Nie przestrzegając sygnalizacji czy + 不遵守交通灯号 + + + Speeding + rychlá jízda + Exceso de Velocidad + + Excès de vitesse + Excesso de Velocidade + Geschwindigkeitsüberschreitung + Eccesso di velocità + Przyśpieszenie + 超速 + + + No headlight in the night + No světel v noci + Manejar sin luces en la noche + + Absence de phare la nuit + Farois Apagados Durante a Noite + Fahren ohne Licht + Luci spente durante la notte + Brak świateł w nocy + 夜间不开车灯 + + + Driving kart without helmet + Hnací motokáru bez helmy + Manejar un Kart sin casco + + Non-port du casque en Kart + Dirigindo Kart Sem Capacete + Fahren ohne Helm + Guida di Kart senza casco + Jazda bez kasku gokarta + 驾驶卡丁车不戴安全头盔 + + + Badly parked vehicle + Špatně zaparkované vozidlo + Vehículo mal estacionado + + Véhicule mal garé + Veículo Mal Estacionado + Parksünder + Veicolo mal parcheggiato + Źle zaparkowany samochód + 乱停放载具 + + + Rebel vehicle (Not armed) + Rebel vozidla (není ozbrojený) + Vehículo Rebelde (No Armado) + + Véhicule rebel non armé + Veículo Rebelde(Não Armado) + Rebellen Fahrzeug (nicht bewaffnet) + Veicolo blindato(Non armato) + Rebel pojeździe (nie czuwa) + 叛军载具(无武装) + + + Grand Theft (Civilian Vehicle) + Grand Theft (Civilian Vehicle) + Robo Mayor (Vehículo Civil) + + Vol de véhicule civil + Roubo de Veículo (Veículo Civil) + Schwerer Diebstahl (Zivilfahrzeug) + Furto di veicolo (Civile) + Grand Theft (Cywilny Vehicle) + 盗窃载具(民用载具) + + + Grand Theft (Military Vehicle) + Grand Theft (Military Vehicle) + Robo Mayor (Vehículo Militar) + + Vol de véhicule militaire + Roubo de Veículo(Militar) + Schwerer Diebstahl (Dienstfahrzeug) + Furto di veicolo militare + Grand Theft (pojazd wojskowy) + 盗窃载具(军用载具) + + + Armored Vehicle + obrněné vozidlo + Vehículo Blindado + + Véhicules blindés + Veículo Armado + Panzerfahrzeug + Veicolo D'assalto + Opancerzony pojazd + 装甲载具 + + + Flying over the city without authorization + Létání nad městem bez povolení + Volar sobre la ciudad sin autorización + + Survol de ville sans autorisation + Sobrevoando sobre a cidade sem autorização + Fliegen über die Stadt ohne Genehmigung + Guida di velivolo su città abitata senza autorizzazione + Latające nad miastem bez zezwolenia + 未经授权飞越城市 + + + Closing the street without authorization + Uzavření ulici bez povolení + Cerrar las calles sin autorización + + Interdiction de se poser sans autorisation + Fechar Rua Sem Autorização + Absperren der Straße ohne Genehmigung + Impedimento del traffico senza permesso + Zamknięcie ulicy bez zezwolenia + 擅自堵塞街道 + + + Open carry in city (Legal Weapon) + open carry ve městě (právní Weapon) + Cargar Arma Abiertamente en la Ciudad (Arma Legal) + Aprire il trasporto in città (Arma Legale) + Otwarty Carry w mieście (prawny Weapon) + + Arme légale visible en ville + Portar em Cidades(Arma Legal) + Offenes Tragen einer legalen Waffe in der Stadt + 公开携带武器进入城市(合法武器) + + + Rebel weapon + Rebel zbraň + Arma Rebelde + + Armes rebelles + Arma Rebelde + Rebellen Waffe + Arma Ribelle + Rebel bronią + 叛军武器 + + + Illegal clothing + Nelegální oblečení + Ropa Ilegal + abbigliamento illegale + Nielegalna odzież + + Vêtements illégaux + Roupas Ilegais + Illegale Kleidung + 非法服装 + + + Hiding face (Mask) + Schovává tvář (Mask) + Ocultar su Cara (Máscara) + Nascondere faccia (Mask) + Ukrywając twarz (maska) + + Cacher son visage + Esconder o Rosto(Mascara) + Verstecken des Gesichts (Maske) + 隐藏面部(面具) + + + Refuses to cooperate + Odmítá spolupracovat + Reusa a Cooperar + Si rifiuta di collaborare + Odmawia współpracy + + Refus d'obtempérer + Recusou-se a Cooperar + Behinderung der Staatsgewalt + 拒绝合作 + + + Hit and run + Zavinit nehodu a ujet + Golpea y Corre + Mordi e fuggi + Uderz i uciekaj + + Délit de fuite + Bater e Fugir + Fahrerflucht + 交通肇事逃逸 + + + Insulting a civilian + Urážky civilní + Insultar a un Civil + + Insulte envers un civil + Insulto a Civil + Beleidigung + Insulto a civile + Obrażanie cywilem + 侮辱平民 + + + Insulting a soldier + Urážky vojáka + Insultar a un Soldado + + Insulte envers un militaire + Insulto as Autoridades + Beamtenbeleidigung + Insulto a pubblico ufficiale + Znieważenie żołnierza + 侮辱士兵 + + + Drug dealing + Urážky vojáka... + Venta de Drogas + + Trafique de drogue + Trafico de Drogas + Drogenhandel + Traffico di droga + Handel narkotykami + 毒品交易 + + + Federal Reserve breaking + Federální rezervní systém lámání + Entrar a la Reserva Federal + + Intrusion dans la réserve fédérale + Invasão a Reserva Federal + Bankeinbruch + Rapina alla Riserva Federale + Rezerwa Federalna łamanie + 非法打开金库 + + + Killing of a civilian + Zabíjení civilní + Homicidio de un Civil + Uccisione di un civile + Zabójstwo cywilnej + + Meurtre d'un civil + Matou um Civil + Töten eines Zivilen + 杀害平民 + + + Killing of a soldier + Zabití vojáka + Homicidio de un Soldado + + Meurtre d'un militaire + Matou um Policial + Töten eines Beamten + Omicidio di un agente + Zabijając żołnierza + 杀害士兵 + + + + + Gas Storage + Gas Storage + Stockage de gaz + Almacenamiento de Combustible + Stoccaggio di Gas + Magazynów gazu + + Treibstofflager + Posto de Combustível + 燃料储存 + + + Supply + Zásobování + Ravitailler + Suministro + Fornitura + Dostawa + + Liefern + Abastecer + 供应 + + + Store + Obchod + Déposer + Guardar + Negozio + Sklep + + Lagern + Guardar + 商场 + + + Stop + Stop + Arrêter + Parar + Stop + Zatrzymać + + Stoppen + Parar + 停止 + + + Tanker is already in use. + Tankery je již používán. + Le camion citerne est déjà en cours d'utilisation. + El Camión Cisterna ya esta siendo usado. + La cisterna è già in uso. + Cysterna jest już w użyciu. + + Tankwagen wird bereits benutzt. + Os tanques já estão em uso. + 油轮已投入使用。 + + + Gas station is in use. + Čerpací stanice je v provozu. + La station-service est en cours de fonctionnement. + La estación ya se esta usando. + La stazione di benzina è già in uso. + Stacja benzynowa jest w użyciu. + + Tankstelle wird bereits beliefert. + O posto já está sendo usado. + 加油站在使用中。 + + + Tanker is empty. + Tankery je prázdný. + Le camion citerne est vide. + El Camión cisterna esta vacío. + La cisterna è vuota. + Cysterna jest pusta. + + Treibstofftank ist leer. + Os tanques estão vazios. + 油轮是空的。 + + + Tankers is full. + Tankery je plná. + Réservoir plein. + El Camión cisterna esta lleno. + La cisterna è piena. + Zbiornikowce jest pełna. + + Treibstofftank ist voll. + Os tanques estão cheios. + 油轮已满。 + + + Gas station has enough fuel. + Čerpací stanice má dostatek paliva. + La station service a suffisamment de carburant. + La estación tiene suficiente gasolina. + Il distributore ha abbastanza benzina. + Stacja benzynowa ma wystarczającą ilość paliwa. + + Tankstelle hat genug Treibstoff. + O posto tem combustível suficiente. + 加油站有足够的燃料。 + + + This gas station is supplied through a pipeline. + Tento Čerpací stanice se dodává potrubím. + Cette station service est fournie par un pipeline + Esta estación es suministrada por una tubería. + Questa stazione di gas è alimentata attraverso una tubatura. + Ta stacja gaz jest dostarczany rurociągiem. + + Diese Tankstelle wird über eine Pipeline versorgt. + Esse posto é abastecido através de uma mangueira. + 这个加油站通过管道供给。 + + + Discontinued operation. + Ukončená činnost. + Activité abandonnée. + Operación discontinuada. + Incarico Incompleto. + Działalność zaniechana. + + Vorgang abgebrochen. + Operação descontinuada. + 停止运营。 + + + Your share is $%1. + Váš podíl $%1. + Votre part est de $%1. + Tu ganancia es $%1. + La vostra quota è di $%1. + Twój udział jest $%1. + + Dein Anteil beträgt $%1. + A sua parte é de R$%1. + 你的份额为 $%1. + + + + + Mission Failed + Mise selhala + Mission échouée + Misión fallida + Missione fallita + Misja nie powiodła się + Missão fracassada + Миссия провалена + Mission fehlgeschlagen. + 任务失败 + + + You are not white-listed to use this slot. + Mise selhala + Vous n'êtes pas white-listé. + No tienes permiso de usar este slot. + Missione fallita + Misja nie powiodła się + Missão fracassada + Миссия провалена + Nicht auf der Whitelist. + 你不是白名单不能使用这个栏位。 + + + You are not allowed to use this slot because you do not have the appropriate permissions. Try another slot. + Ty jsou není dovoleno používat tento slot, protože nemáte příslušná oprávnění. Zkuste použít jiný slot. + Vous n'êtes pas autorisé à utiliser cet emplacement parce que vous ne disposez pas des autorisations appropriées. Essayez un autre emplacement. + No puede usar este slot porque no tiene los permisos requeridos. Por favor trate con otro slot. + Non è consentito usare questo slot, perché non si dispone delle autorizzazioni appropriate. Prova un altro slot. + Nie wolno korzystać z tego gniazda, ponieważ nie masz odpowiednich uprawnień. Spróbuj użyć innego gniazda. + Você não tem permissão para usar esse slot, porque você não tem as permissões apropriadas. Tente outro slot. + Вы не можете использовать этот слот, потому что у вас нет соответствующих разрешений. Попробуйте использовать другой слот. + Du bist nicht auf der Whitelist, deswegen kannst du diesen Platz nicht verwenden. Versuche es auf einen anderen Platz. + 你不允许使用此栏位,因为你没有适当的权限。尝试另一个栏位。 + + + + + Mission Failed + Mise selhala + Mission échouée + Misión fallida + Missione fallita + Misja nie powiodła się + Missão fracassada + Миссия провалена + Mission fehlgeschlagen + 任务失败 + + + You are blacklisted from cops. + Ty jsou na černé listině z policajtů. + Vous êtes sur blacklisté de la police. + Usted está en la lista negra de policías. + Stai lista nera da poliziotti. + Jesteś na czarnej liście od policjantów. + Você está na lista negra de policiais. + Вы в черном списке от ментов. + Du bist von Polizisten auf die schwarze Liste gesetzt worden. + 你被警察列入黑名单。 + + + You are not allowed to be a cop due to previous actions and the admins have removed you from being a cop. + Ty jsou nesmí být policajt vzhledem k předcházejícími akcemi a administrátoři vám odstraní z bytí policista. + Vous avez été blacklisté de la police en raisons d'actions précédentes allant à l'encontre des règles. Vous ne pouvez plus devenir policier. + No tiene permiso a ser policía por acciones anteriores. Los administradores han bloqueado su acceso. + Non è consentito fare il poliziotto a causa di azioni precedenti e gli amministratori di aver rimosso da essere un poliziotto. + Nie mogą być policjantem z powodu wcześniejszych działań oraz administratorzy usunęli cię od bycia policjantem. + Você não tem permissão para ser um policial devido a ações anteriores e os admins ter removido-lo de ser um policial. + Вы не можете быть полицейским в связи с предыдущими действиями и админы удалили вас от того, чтобы быть полицейским. + Du bist aufgrund früherer Aktion, kein Polizist mehr. Du wurdest von den Admins aus der Polizei entfernt. + 由于以前的行为,你不再是警察,警局已将你从警队中开除。 + + + + + The SpyGlass sees you! + Dalekohled tě vidí! + SpyGlass vous voit ! + El SpyGlass te ve! + Il cannocchiale si vede! + Lunetę widzi! + O SpyGlass te vê! + SpyGlass видит, что вы! + SpyGlass sieht dich! + SpyGlass正在检测你! + + + You were detected by the SpyGlass. + Vy byly detekovány dalekohled. + Vous avez été détecté par SpyGlass. + Fue detectado por el SpyGlass. + Lei è stato rilevato dal SpyGlass. + Ty zostały wykryte przez lunetę. + Você foi detectado pelo SpyGlass. + Вы были обнаружены с помощью SpyGlass. + Du wurdest von SpyGlass erkannt. + 你被SpyGlass检测。 + + + You were detected for cheating and have been reported to the server. Enjoy your day. + Vy byly detekovány za podvádění a byly zaznamenány na server. Užijte si svůj den. + Vous avez été détecté pour triche et avez été signalé au serveur. Profitez de votre journée. + Fue detectada por hacer trampas y se le ha informado al servidor. Disfruta tu día. + Lei è stato rilevato per truffa e sono stati segnalati per il server. Buona giornata. + Ty wykryto oszustwo i zostały zgłoszone do serwera. Miłego dnia. + Está foram detectados por engano e têm sido relatados para o servidor. Aproveite seu dia. + Вы были обнаружены для мошенничества и было сообщено на сервер. Удачного дня. + >Du wurdest wegen Betrug erkannt und an den Server gemeldet. Genieße deinen Tag. + 你被发现作弊,并已报告给服务器。珍惜你的生活吧。 + + + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-FLAG: %1 : %2 : %3 + SPYGLASS-ERKENNUNG: %1 : %2 : %3 + SPYGLASS-标记: %1 : %2 : %3 + + + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Cheater Flagged</t><br/<br/>Name: %1<br/>Detection: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>Betrüger Erkannt</t><br/<br/>Name: %1<br/>Erkennung: %2 + <t align='center'><t color='#FF0000'><t size='3'>SPY-GLASS</t></t><br/>作弊者被标记</t><br/<br/>姓名:%1<br/>发现:%2 + + + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 was observed by SPY-GLASS, he/she was trying to access commanding menu:\n\n %2\n\n and that commanding-menu is not known to the system. PLEASE NOTE he/she may not be cheating but the SPY-GLASS found it relevant to report in. + %1 wurde beobachtet durch SPY-GLASS. Er/Sie hatte versucht auf das Befehlsmenü:\n\n %2\n\n zuzugreifen, diese ist dem System aber nicht bekannt. BITTE BEACHTE! Er/Sie betrügt deshalb nicht, aber SPY-GLASS fand es trotzdem relevant es zu melden. + %1 被SPY-GLASS检测, 他/她试图访问命令菜单:\n\n %2\n\n 并且系统不知道命令菜单。请注意他/她可能不会作弊,但SPY-GLASS发现了它的报告相关。 + + + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 is not allowed TYPE: %2 NS: MN + Variable: %1 ist nicht erlaubt. TYPE: %2 NS: MN + 变量:不允许: %1 类型: %2 NS: MN + + + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 is not allowed TYPE: %2 NS: UI + Variable: %1 ist nicht erlaubt. TYPE: %2 NS: UI + 变量:不允许: %1 类型: %2 NS: UI + + + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Observes|| Name: %1 | UID: %2 | Reason: %3 + ||SPY-GLASS Beobachtung|| Name: %1 | UID: %2 | Grund: %3 + ||SPY-GLASS 观察|| 姓名:%1 | UID:%2 | 原因:%3 + + + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable set before client initialized: %1 + Variable gesetzt bevor Client initialisiert: %1 + 客户端初始化之前的变量集:%1 + + + + + EMS Requested + EMS Požadované + Medecin demandé + Medico Solicitado + EMS richiesto + EMS Zamówiony + EMS solicitada + EMS Запрошенный + Sanitäter benachrichtigt + EMS要求 + + + Delivery Job Accepted + Dodávka Job Accepted + Mission de livraison acceptée + Misión de Entrega Aceptada + Incarico Postale accettato + Dostawa Praca Zaakceptowany + Entrega aceitado Job + Доставка Работа Принято + Lieferauftrag angenommen + 接受交货工作 + + + Delivery Job Failed + Nepodařilo dodávka Job + Mission de livraison échouée + Misión de Entrega Fallada + Incarico Postale Fallito + Dostawa Praca Failed + Falha de entrega Job + Доставка Работа Ошибка + Lieferauftrag fehlgeschlagen + 交货工作失败 + + + Delivery Job Completed + Dokončena dodávka Job + Mission de livraison réussie + Misión de Entrega Completada + Incarico Postale Completato + Dostawa Praca Zakończony + Concluída a entrega Job + Доставка Работа Завершено + Lieferauftrag abgeschlossen + 交货工作已完成 + + + Received A Text Message + Přijetí textové zprávy + SMS reçu + Recibió un mensaje de texto + Hai ricevuto un messaggio di testo + Otrzymał wiadomość tekstową + Recebeu uma mensagem de texto + Получено текстовое сообщение + Erhielt eine Textnachricht + 收到短信 + + + 911 Dispatch Center + 911 Dispatch Center + 911 Dispatch Centre + 911 Centro de Despacho + 911 Centro Richieste + 911 Dispatch Center + 911 Centro de Despacho + 911 диспетчерский центр + 110 Dispatch Zentrum + 911调度中心 + + + Admin Dispatch Center + Admin Dispatch Center + Message Administrateur + Centro de Despacho de Administradores + Admin centro di spedizione + Administrator Dispatch Center + Administrador Centro de Despacho + Администратор диспетчерский центр + Admin Verteilzentrum + 管理调度中心 + + + Admin Message + + + + Admin Nachricht + + Message Admin + + + 管理员信息 + + + + + Civ Plane + + Avion civil + + + + + + Zivilflugzeug + 民用飞机 + + + Police HQ + + QG de Police + + + + + + Polizei HQ + 警察总部 + + + Police Store + + Magasin de la police + + + + + + Polizei Ausrüstung + 警察商店 + + + Police Car + + Concessionnaire de police + + + + + + Dienstfahrzeuge + 警车 + + + Police Heli + + Héliport de police + + + + + + Polizei Helikopter + 警用直升机 + + + Police Boat + + Vendeur de bateaux de police + + + + + + Polizei Boote + 警察船舶 + + + Rebel Car + + Concessionnaire rebelle + + + + + + Rebellen Fahrzeuge + 叛军载具 + + + Rebel Heli + + Héliport rebelle + + + + + + Rebellen Helikopter + 叛军直升机 + + + Police HQ + + QG de Police + + + + + + Polizei HQ + 警察总部 + + + + + arrested %1 + zadržen %1 + a arrêté %1 + arrestó a %1 + + + prendeu %1 + арестовано %1 + hat %1 verhaftet + 逮捕 %1 + + + %1 - %2 arrested %3 + %1 - %2 %3 zatčen + %1 - %2 a arrêté %3 + %1 - %2 arrestó a %3 + + + %1 - %2 prendeu %3 + %1 - %2 %3 арестовано + %1 - %2 hat %3 verhaftet. + %1 - %2 逮捕 %3 + + + picked up %1 %2 + vyzvednout %1 %2 + a ramassé %1 %2 + recogió %1 %2 + + + pegou %1 %2 + поднял %1 %2 + hat $%1 $%2 aufgehoben. + 拿起 %1 %2 + + + %1 - %2 picked up %3 %4 + %1 - %2 vyzvednout%3 %4 + %1 - %2 a ramassé %3 %4 + %1 - %2 recogió %3 %4 + + + %1 - %2 pegou %3 %4 + взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 + %1 - %2 hat %3 %4 aufgehoben. + %1 - %2 捡起 %3 %4 + + + picked up $%1 from the ground. Bank Balance: $%2 On Hand Balance: $%3 + zvedl $%1 ze země. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 + a récupéré $%1 par terre. Argent en banque : $%2 - Cash : $%3 + recogió $%1 del suelo. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + pegou R$%1 do chão. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + взял $%1 от земли. Банковский баланс: $%2 на руку Баланс: $%3 + hat $%1 vom Boden aufgehoben. Bankkonto: $%2 Bargeld: $%3 + 从地上捡起 $%1。银行存款余额:$%2 手上余额:$%3 + + + %1 - %2 picked up $%3 from the ground. Bank Balance: $%4 On Hand Balance $%5 + %1 - %2 vyzvednout $%3 ze země. Banka Zůstatek: $%4 po ruce Balance $%5 + %1 - %2 a récupéré $%3 par terre. Argent en banque : $%4 Cash : $%5 + %1 - %2 recogió $%3 del suelo. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 pegou R$%3 do chão. Quantia no Banco: R$%4 Quantia na mão: R$%5 + %1 - %2 взял $%3 от земли. Банковский баланс: $%4 На Hand Баланс $%5 + %1 - %2 hat $%3 vom Boden aufgehoben. Bankkonto: $%4 Bargeld: $%5 + %1 - %2 从地上捡起 $%3。银行存款余额:$%4 手上余额 $%5 + + + robbed $%1 from %2. Bank Balance: $%3 On Hand Balance: $%4 + oloupen $%1 z %2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 + a volé $%1 de %2. Argent en banque : $%4 Cash : $%4 + robó $%1 de $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + roubou R$%1 de %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 + ограбил $%1 из %2. Банковский баланс: $%3 на руку Баланс: $%4 + hat $%1 von $%2 geraubt. Bankkonto: $%3 Bargeld: $%4 + 从 %2 抢劫 $%1。银行存款余额:$%3 手上余额:$%4 + + + %1 - %2 robbed $%3 from %4. Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 okraden $%3 z %4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 + %1 - %2 a volé $%3 de %4. Argent en banque : $%5. Cash : $%6 + %1 - %2 robó $%3 de $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 roubou R$%3 de %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 ограбил $%3 от %4. Банковский баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat $%3 von %4 geraubt. Bankkonto: $%5 Bargeld: $%6 + %1 - %2 抢走了%4 $%3。银行存款余额:$%5 手上余额:$%6 + + + created a gang named: %1 for $%2 + Vytvořili gang s názvem: %1 za $%2 + a créé un gang nommé : %1 pour $%2 + creó una pandilla llamada: %1 por $%2 + + + criou uma gangue chamada: %1 por R$%2 + создали банду под названием: %1 за $%2 + hat eine Gang mit dem Namen: $1 für $%2 erstellt. + 创建一个名为:%1 的帮派 花费 $%2 + + + %1 - %2 created a gang named: %3 for $%4 + %1 - %2 vytvořili gang s názvem: %3 za $%4 + %1 - %2 a créé un gang nommé : %3 pour $%4 + %1 - %2 creó una pandilla llamada: %3 por $%4 + + + %1 - %2 criou uma gangue chamada: %3 por R$%4 + %1 - %2 создали банду под названием: %3 за $%4 + %1 - %2 hat eine Gang mit dem Namen: %3 für $%4 erstellt. + %1 - %2 创建一个名为:%3 的帮派 花费 $%4 + + + bought a house for $%1. Bank Balance: $%2 On Hand Cash: $%3 + koupil dům za $%1. Banka Zůstatek: $%2 On Hand Cash: $%3 + a acheté une maison pour $%1. Argent en banque : $%2 Cash : $%3 + compró una casa por $%1. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + comprou uma casa por R$%1. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + купил дом за $%1. Банковский баланс: $%2 на руках наличные деньги: $%3 + hat sich ein Haus für $%1 gekauft. Bankkonto: $%2 Bargeld: $%3 + 买了一所房子花费 $%。 银行存款余额: $%2 手头现金: $%3 + + + %1 - %2 bought a house for $%3. Bank Balance: $%4 On Hand Cash: $%5 + %1 - %2 koupil dům za $%3. Banka Zůstatek: $%4 On Hand Cash: $%5 + %1 - %2 a acheté une maison pour $%3. Argent en banque : $%4 Cash : $%5 + %1 - %2 compró una casa por $%3. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 comprou uma casa por R$%3. Quantia no Banco: R$%4 Quantia na Mão: R$%5 + %1 - %2 купил дом за $%3. Банковский баланс: $%4 на руках наличные деньги: $%5 + %1 - %2 hat sich ein Haus für $%3 gekauft. Bankkonto: $%4 Bargeld: $%5 + %1 - %2 买了一所房子花费 $%3。银行存款余额:$%4 手头现金:$%5 + + + sold a house for $%1. Bank Balance: $%2 + prodal dům za $%1. Banka Zůstatek: $%2 + a vendu une maison pour $%1. Argent en banque : $%2 + vendió una casa por $%1. Saldo Bancario: $%2 + + + vendeu uma casa por R$%1. Quantia no Banco: R$%2 + продал дом за $%1. Банковский баланс: $%2 + hat sein Haus für $%1 verkauft. Bankkonto: $%2 + 卖掉房子得到 $%1。银行存款余额:$%2 + + + %1 - %2 sold a house for $%3. Bank Balance: $%4 + %1 - %2 prodal dům za $%3. Banka Zůstatek: $%4 + %1 - %2 a vendu une maison pour $%3. Argent en banque : $%4 + %1 - %2 vendió una casa por $%3. Saldo Bancario: $%4 + + + %1 - %2 vendeu uma casa por R$%3. Quantia no Banco: R$%4 + %1 - %2 продал дом за $%3. Банковский баланс: $%4 + %1 - %2 hat sich ein Haus für $%3 verkauft. Bankkonto: $%4 + %1 - %2 卖掉房子得到 $%3。银行存款余额: $%4 + + + chopped vehicle %1 for $%2 On Hand Cash(pre-chop): $%3 + nasekané vozidlo %1 nebo $%2 na ruce hotovosti (pre-CHOP): $%3 + a mis en pièces le véhicule %1 pour $%2. Cash (avant la vente) : $%3 + vendió el vehiculo %1 en el desguace por $%2. Saldo en Efectivo(antes de la venta): $%3 + + + desmanchou um %1 por R$%2 Quantia na Mão (antes do desmanche): R$%3 + нарезанного машина %1 или $%2 на руках Cash (предварительно отбивной): $%3 + hat das Fahrzeug %1 für $%2 beim Schrotthändler verschrottet. Bargeld(vor Schrott): $%3 + 出售盗窃到的载具 %1 赚取 $%2 手头现金(预付):$%3 + + + %1 - %2 chopped vehicle %3 for $%4 On Hand Cash(pre-chop): $%5 + %1 - %2 nasekané vozidla %3 za $%4 po ruce hotovosti (před-kotleta): $%5 + %1 - %2 a revendu le véhicule %3 pour $%4. Cash (avant la vente) : $%5 + %1 - %2 vendió el vehiculo %3 en el desguace por $%4. Saldo en Efectivo(antes de la venta): $%5 + + + %1 - %2 desmanchou um %3 por R$%4 Quantia na Mão(antes do desmanche): R$%5 + %1 - %2 нарезанной автомобиля %3 за $%4 на руку Cash (предварительно отбивной): $%5 + %1 - %2 hat das Fahrzeug %3 für $%4 beim Schrotthändler verschrottet. Bargeld(vor Schrott): $%6 + %1 - %2 出售盗窃到的载具 %3 赚取 $%4 手头现金(预付):$%5 + + + bought vehicle %1 for $%2. On Hand Cash: $%3 Bank Balance: $%4 + koupil vozidla %1 nebo $%2. On Hand Cash: $%3 bankovní konto: $%4 + a acheté le véhicule %1 pour $%2. Cash : $%3 Argent en banque : $%4 + compró el vehiculo %1 por $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + comprou um %1 por R$%2. Quantia na Mão: R$%3 Quantia no Banco: R$%4 + купил автомобиль %1 или $%2. На Hand Cash: $%3 банка Баланс: $%4 + hat sich das Fahrzeug %1 für $%2 gekauft. Bargeld: $%3 Bankkonto: $%4 + 购买载具 %1 花费 $%2。 手头现金:$%3 银行存款余额:$%4 + + + %1 - %2 bought vehicle %3 for $%4. On Hand Cash: $%5 Bank Balance $%6 + %1 - %2 koupilo vozidla %3 za $%4. On Hand Cash: $%5 bankovní konto $%6 + %1 - %2 a acheté le véhicule %3 pour $%4. Cash $%5 Argent en banque : $%6 + %1 - %2 compró el vehiculo %3 por $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 comprou um %3 por R$%4. Quantia na Mão: R$%5 Quantia no Banco: R$%6 + %1 - %2 купил автомобиль за $%3 %4. На Hand наличных: $%5 баланса банка $%6 + %1 - %2 hat sich das Fahrzeug %3 für $%4 gekauft. Bargeld: $%5 Bankkonto: $%6 + %1 - %2 购买载具 %3 花费 $%4。 手头现金:$%5 银行存款余额 $%6 + + + sold vehicle %1 for $%2. Bank Balance: $%3 On Hand Balance: $%4 + prodával vozidla %1 pro $%2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 + a vendu le véhicule %1 pour $%2. Argent en banque : $%3 Cash : $%4 + vendió el vehiculo %1 por $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + vendeu um %1 por R$%2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 + продается автомобиль %1 за $%2. Банковский баланс: $%3 на руку Баланс: $%4 + hat das Fahrzeug %1 für $%2 verkauft. Bankkonto: $%3 Bargeld: $%4 + 出售载具 %1 获得 $%2。 银行存款余额:$%3 手上现金:$%4 + + + %1 - %2 sold vehicle %3 for $%4. Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 prodával vozidla %3 za $%4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 + %1 - %2 a vendu le véhicule %3 pour $%4. Argent en banque : $%5 Cash : $%6 + %1 - %2 vendió el vehiculo %3 por $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 vendeu um %3 por R$%4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 продал автомобиль за $%3 %4. Банковский баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat das Fahrzeug %3 für %4 verkauft. Bankkonto: $%5 Bargeld: $%6 + %1 - %2 出售载具 %3 获得 $%4。银行存款余额:$%5 手上现金:$%6 + + + withdrew $%1 from their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 + stáhl $%1 z jejich gangu banky. Gang bankovní konto: $%2 bankovní konto: $%3 po zralé úvaze rukou: $%4 + a retiré $%1 du compte bancaire du Gang. Solde bancaire du Gang : $%2 Argent en banque(perso) : $%3 Cash : $%4 + sacó $%1 de la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%2 Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + sacou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 + снял $%1 от их банды банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 + hat $%1 vom Gangkonto abgehoben. Gangkonto: $%2 Bankkonto: $%3 Bargeld: $%4 + 从他们的帮派银行账户取出 $%1。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 + + + %1 - %2 withdrew $%3 from their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 stáhl $%3 z jejich gangu banky. Gang bankovní konto: $%4 bankovní konto: $%5 po zralé úvaze rukou: $%6 + %1 - %2 a retiré $%3 du compte bancaire du Gang. Solde bancaire du Gang : $%4 Argent en banque(perso) : $%5 Cash : $%6 + %1 - %2 sacó $%3 de la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%4 Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 sacou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 отозвала $%3 из их банды банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat $%3 vom Bankkonto abgehoben. Gangkonto: $%4 Bankkonto: $%5 Bargeld: $%6 + %1 - %2 从他们的帮派银行账户取出 $%3。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 + + + deposited $%1 into their gang bank. Gang Bank Balance: $%2 Bank Balance: $%3 On Hand Balance: $%4 + uložen $%1 do svého gangu banky. Gang bankovní konto: $%2 bankovní konto: $%3 po zralé úvaze rukou: $%4 + a déposé $%1 sur compte bancaire du Gang. Solde bancaire du Gang : $%2 Argent en banque(perso) : $%3 Cash : $%4 + depositó $%1 a la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%2 Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + depositou R$%1 no banco da sua gangue. Quantia no Banco da Gangue: R$%2 Quantia no Banco: R$%3 Quantia na Mão: R$%4 + депозит в размере $%1 в их банде банка. Gang Bank Баланс: $%2 банка Баланс: $%3 на руку Баланс: $%4 + hat $%1 auf sein Gangkonto eingezahlt. Gangkonto: $%2 Bankkonto: $%3 Bargeld: $%4 + 将 $%1 存进他们的帮派银行账户。帮派银行余额:$%2 银行存款余额:$%3 手上现金:$%4 + + + %1 - %2 deposited $%3 into their gang bank. Gang Bank Balance: $%4 Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 uloženy $%3 do jejich gangu banky. Gang bankovní konto: $%4 bankovní konto: $%5 po zralé úvaze rukou: $%6 + %1 - %2 a déposé $%3 sur compte bancaire du Gang. Solde bancaire du Gang : $%4 Argent en banque(perso) : $%5 Cash : $%6 + %1 - %2 depositó $%3 a la cuenta de su pandilla. Saldo Bancario de la Pandilla: $%4 Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 depositou R$%3 no banco da sua gangue. Quantia no Banco da Gangue: R$%4 Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 - %2 депозит в размере $%3 в их банде банка. Gang Bank Баланс: $%4 банка Баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat $%3 auf sein Gangkonto überwiesen. Gangkonto: $%4 Bankkonto: $%5 Bargeld: $%6 + %1 - %2 将 $%3 存进他们的帮派银行账户。帮派银行余额:$%4 银行存款余额:$%5 手上现金:$%6 + + + withdrew $%1 from their bank. Bank Balance: $%2 On Hand Balance: $%3 + stáhl $%1 z jejich banky. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 + a retiré $%1 de sa banque. Argent en banque : $%2 Cash : $%3 + sacó $%1 de su cuenta de banco. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + sacou R$%1 do seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + снял $%1 от своего банка. Банковский баланс: $%2 на руку Баланс: $%3 + hat $%1 von seinem Bankkonto abgehoben. Bankkonto: $%2 Bargeld: $%3 + 从他们的帮派银行账户取出 $%1。银行存款余额:$%2 手上现金:$%3 + + + %1 - %2 withdrew $%3 from their bank. Bank Balance: $%4 On Hand Balance: $%5 + %1 - %2 stáhl $%3 od své banky. Banka Zůstatek: $%4 po zralé úvaze rukou: $%5 + %1 - %2 a retiré $%3 de sa banque. Argent en banque : $%4 Cash : $%5 + %1 - %2 sacó $%3 de su cuenta de banco. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 sacou R$%3 do seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 + %1 - %2 отозвала $%3 из своего банка. Банковский баланс: $%4 на руку Баланс: $%5 + %1 - %2 hat $%3 von seinem Bankkonto abgehoben. Bankkonto: $%4 Bargeld: $%5 + %1 - %2 从他们银行账户取出 $%3。银行存款余额:$%4 手上现金:$%5 + + + transferred $%1 to %2. Bank Balance: $%3 On Hand Balance: $%4 + přestoupil $%1 do %2. Banka Zůstatek: $%3 po zralé úvaze rukou: $%4 + a transféré $%1 à %2. Argent en banque : $%3 Cash : $%4 + transferió $%1 a $%2. Saldo Bancario: $%3 Saldo en Efectivo: $%4 + + + transferiu R$%1 para %2. Quantia no Banco: R$%3 Quantia na Mão: R$%4 + перечислил $%1 %2. Банковский баланс: $%3 на руку Баланс: $%4 + hat %2 $%1 überwiesen. Bankkonto: $%3 Bargeld: $%4 + 转帐 $%1 给 %2。银行存款余额:$%3 手上现金:$%4 + + + %1 - %2 transferred $%3 to %4. Bank Balance: $%5 On Hand Balance: $%6 + %1 - %2 převedena $%3 až %4. Banka Zůstatek: $%5 po zralé úvaze rukou: $%6 + %1 - %2 a transféré $%3 à %4. Argent en banque : $%5 Cash : $%6 + %1 - %2 transferió $%3 a $%4. Saldo Bancario: $%5 Saldo en Efectivo: $%6 + + + %1 - %2 transferiu R$%3 para %4. Quantia no Banco: R$%5 Quantia na Mão: R$%6 + %1 -%2 перевели $%3 до %4. Банковский баланс: $%5 на руку Баланс: $%6 + %1 - %2 hat %4 $%3 überwiesen. Bankkonto: $%5 Bargeld: $%6 + %1 - %2 转帐 $%3 给 %4。银行存款余额:$%5 手上现金:$%6 + + + deposited $%1 into their bank. Bank Balance: $%2 On Hand Balance: $%3 + uložen $%1 do své banky. Banka Zůstatek: $%2 po zralé úvaze rukou: $%3 + a déposé $%1 dans son compte. Argent en banque $%2 Cash : $%3 + depositó $%1 a su cuenta de banco. Saldo Bancario: $%2 Saldo en Efectivo: $%3 + + + depositou R$%1 no seu banco. Quantia no Banco: R$%2 Quantia na Mão: R$%3 + депозит в размере $%1 в их банке. Банковский баланс: $%2 на руку Баланс: $%3 + hat $%1 auf sein Bankkonto eingezahlt. Bankkonto: $%2 Bargeld: $%3 + 将 $%1 存进他们的银行账户。银行存款余额:$%2 手上现金:$%3 + + + %1 - %2 deposited $%3 into their bank. Bank Balance: $%4 On Hand Balance: $%5 + %1 - %2 uloženy $%3 do své banky. Banka Zůstatek: $%4 po zralé úvaze rukou: $%5 + %1 - %2 a déposé $%3 dans son compte. Argent en banque : $%4 Cash : $%5 + %1 - %2 depositó $%3 a su cuenta de banco. Saldo Bancario: $%4 Saldo en Efectivo: $%5 + + + %1 - %2 depositou R$%3 no seu banco. Quantia no Banco: R$%4 Quantia na Mão: R$%5 + %1 - %2 депозит в размере $%3 в свой банк. Банковский баланс: $%4 на руку Баланс: $%5 + %1 - %2 hat $%3 auf sein Bankkonto eingezahlt. Bankkonto: $%4 Bargeld: $%5 + %1 - %2 将 $%3 存进他们的银行账户。银行存款余额:$%4 手上现金:$%5 + + + From ab2cc2c5b40ca7b61b314b973a4cd4d7c6f7000a Mon Sep 17 00:00:00 2001 From: Jason_000 Date: Sat, 2 May 2020 19:13:33 +0100 Subject: [PATCH 33/33] Fix broken markdown for license link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97cc94022..744638318 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ This Github is not currently associated with any forums. - Many more. # License: -Altis Life RPG by AsYetUntitled is licensed under a [Creative Commons Attribution-NonCommercial-NoDerivs 4.0 International License] (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.en_US) +Altis Life RPG by AsYetUntitled is licensed under a [Creative Commons Attribution-NonCommercial-NoDerivs 4.0 International License](http://creativecommons.org/licenses/by-nc-nd/4.0/deed.en_US) # Links: - Discord: https://discord.gg/ajGUDSH