hint "Загрузка началась..."; // A3_Bush A3_Plants A3_Stones A3_Trees RSPN_Assets // ["Ficus_Bush_2","Ficus_Bush_1","Cane2","Cane1","Ficus_Bush_3","Oleander1","Oleander2"."Oleander_White","Thistle_Thorn_Green_Bush"] + ["BluntRock_Apart", "BluntRock_Monolith","BluntRock_Spike","BluntRock_WallH","BluntRock_WallV","BluntStone1","BluntStone1_LC","BluntStone2","BluntStone2_LC","BluntStone3","BluntStone3_LC","BluntStone_Erosion"] + ["Paper_Mulberry","Ficus_1","Ficus_2","Fraxinus","Olive_1","Olive_2","Palm_1","Palm_2","Pine_1","Pine_2","Pine_3","Pine_4","Poplar_Dead","Poplar","Oak","Fallen_Branch1","Fallen_Branch2","Fallen_Branch3","Branch_Big"] // ["CS_End01","CB_End01","CS_End02","CB_End02","CS_Long","CB_Long","CS_Short","CB_Short","CS_Entrance01","CB_Entrance01","CS_Entrance02","CB_Entrance02","CS_Intersect01","CB_Intersect01","Cover_Sharprock","Cover_Bluntstone","Cover_Sand_Inset","Cover_Dirt_Inset","Cover_Grass_Inset","CS_H45","CB_H45","CS_H90","CB_H90","CS_Intersect02","CB_Intersect02"] zlt_units = { private "_res"; _res = []; if (typeName _this == typeName "") then {_res = getArray (configfile >> "cfgPatches" >> _this >> "Units")} else { {_res=_res + getArray (configfile >> "cfgPatches" >> _x >> "Units")} foreach _this; }; _res; }; zlt_filter = { private ["_res","_txt"]; _res = []; _code = _this select 1; {if (call _code) then { _res pushBack _x}; } foreach (_this select 0); _res }; ZltMap = { private ["_res","_txt","_fr"]; _res = []; _code = _this select 1; {_fr = _x call _code; if (!isNil _fr) then {_res pushBack _fr;};} foreach (_this select 0); }; // https://community.bistudio.com/wiki/Arma_3_CfgPatches_CfgVehicles zlt_obj_list_index = 0; zlt_obj_list_all = [ ['A3_Structures_F_Mil_Fortification','A3_Structures_F_Mil_BagBunker','A3_Structures_F_Mil_BagFence',"A3_Structures_F_Mil_Shelters"] call zlt_units ,[["A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Research"] call zlt_units, { not (["ruins", _x] call bis_fnc_instring) }] call zlt_filter ,["A3_Structures_F_Walls"] call zlt_units ,["A3_Structures_F_Training" call zlt_units, { (["shoot_house", _x] call bis_fnc_instring) or (["obstacle", _x] call bis_fnc_instring) or (["concrete", _x] call bis_fnc_instring) }] call zlt_filter ,["Land_Pallet_static_F","Land_Pallet_vertical_static_F","A3_Structures_F_Civ_Constructions","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_Civ_Camping"] call zlt_units ,(["A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","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_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics"] call zlt_units) ,[["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_AirPort' ] call zlt_units,{ not (["ruins", _x] call bis_fnc_instring) and not (["_dam_", _x] call bis_fnc_instring) and not (["_d_", _x] call bis_fnc_instring) } ] call zlt_filter ,(["A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats"] call zlt_units) ,["Land_Bench_F","Land_CashDesk_F","Land_HeatPump_F","Land_ChairPlastic_F","Land_ChairWood_F","Land_Icebox_F","Land_Metal_rack_F","Land_Metal_rack_Tall_F","Land_Metal_wooden_rack_F","Land_Rack_F","Land_ShelvesMetal_F","Land_ShelvesWooden_F","Land_TableDesk_F"] ,["A3_Structures_F_EPB_Furniture","A3_Structures_F_Furniture","A3_Structures_F_Items_Vessels", "A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPB_Items_Vessels"] call zlt_units ,["A3_Structures_F_Civ_InfoBoards","A3_Structures_F_EPC_Civ_InfoBoards","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPC_Civ_Accessories"] call zlt_units ,["Land_fort_rampart_EP1","Land_fort_rampart","Hedgehog","Misc_cargo_cont_small","TK_GUE_WarfareBUAVterminal_Base_EP1","TK_GUE_WarfareBArtilleryRadar_Base_EP1","TK_GUE_WarfareBAntiAirRadar_Base_EP1","Fort_Barricade","Land_fort_artillery_nest_EP1","Land_fort_artillery_nest","Hhedgehog_concrete","Hhedgehog_concreteBig","Barrack2","PowGen_Big","Land_Misc_Cargo1E_EP1","Land_BarGate2","Land_tent_east","CampEast_EP1","Land_GuardShed","Land_Antenna","Land_A_Villa_EP1","Land_Mil_Barracks_i_EP1"] ,["A3_Structures_F_Dominants_Hospital", "A3_Structures_F_EPC_Dominants_GhostHotel"] call zlt_units ,(["A3_Structures_F_Civ_Garbage","A3_Structures_F_EPA_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPB_Civ_Garbage"] call zlt_units)+["Submarine_01_F"] ,["Ficus_Bush_2","Ficus_Bush_1","Cane2","Cane1","Ficus_Bush_3","Oleander1","Oleander2","Oleander_White","Thistle_Thorn_Green_Bush"] + ["BluntRock_Apart", "BluntRock_Monolith","BluntRock_Spike","BluntRock_WallH","BluntRock_WallV","BluntStone1","BluntStone1_LC","BluntStone2","BluntStone2_LC","BluntStone3","BluntStone3_LC","BluntStone_Erosion"] + ["Paper_Mulberry","Ficus_1","Ficus_2","Fraxinus","Olive_1","Olive_2","Palm_1","Palm_2","Pine_1","Pine_2","Pine_3","Pine_4","Poplar_Dead","Poplar","Oak","Fallen_Branch1","Fallen_Branch2","Fallen_Branch3","Branch_Big"] ,["CS_End01","CB_End01","CS_End02","CB_End02","CS_Long","CB_Long","CS_Short","CB_Short","CS_Entrance01","CB_Entrance01","CS_Entrance02","CB_Entrance02","CS_Intersect01","CB_Intersect01","Cover_Sharprock","Cover_Bluntstone","Cover_Sand_Inset","Cover_Dirt_Inset","Cover_Grass_Inset","CS_H45","CB_H45","CS_H90","CB_H90","CS_Intersect02","CB_Intersect02"] ,(["xCam_Metal" call zlt_units, {!(["_base", _x] call bis_fnc_instring) }] call zlt_filter) ,["xcam_objects"] call zlt_units ,(["xcam_pipe" call zlt_units, {!(["_base", _x] call bis_fnc_instring) }] call zlt_filter) ,["xcam_wood"] call zlt_units ,(["xcam_woodworks" call zlt_units, {!(["_base", _x] call bis_fnc_instring) }] call zlt_filter) ,["Land_Dam_Conc_20","Land_Dam_ConcP_20","Land_Dam_Barrier_40","land_mbg_apartments_big_04","land_mbg_brickhouse_01","land_mbg_brickhouse_02","land_mbg_brickhouse_03","mbg_apartments_big_04_EO","mbg_brickhouse_01_EO","mbg_brickhouse_02_EO","mbg_brickhouse_03_EO","Fortress1","Fortress2","Shed","ShedSmall","ShedBig","Camp","CampEast","ACamp","MASH","Land_Molo_beton","Land_Molo_drevo","Land_Molo_drevo_bs","Land_Molo_drevo_end","Land_Molo_krychle","Land_Molo_krychle2","Land_Cihlovej_dum","Land_Cihlovej_Dum_in","Land_Cihlovej_Dum_mini","Land_Deutshe_mini","Land_Dulni_bs","Land_Dum_zboreny","Land_Hospoda_mesto","Land_House_y","Land_Hut_old02","Land_Podesta_1_cube","Land_Podesta_1_cube_long","Land_Podesta_1_cornl","Land_Podesta_1_cornp","Land_Podesta_1_mid_cornl","Land_Podesta_1_mid_cornp","Land_Podesta_1_mid","Land_Podesta_1_stairs","Land_Podesta_1_stairs2","Land_Podesta_1_stairs3","Land_Podesta_1_stairs4","Land_Podesta_5","Land_Podesta_10","Land_Podesta_s5","Land_Podesta_s10","Land_Ryb_domek","Land_Stodola_old_open","Land_Army_hut3_long_int","Land_Army_hut3_long","Land_Army_hut2_int","Land_Army_hut2","Land_Army_hut_int","Land_Army_hut_storrage","Land_Bouda2_vnitrek","Land_Garaz_s_tankem","Land_Hruzdum","Land_Dum_rasovna","Land_Hlaska","Land_Panelak","Land_Sara_Domek_sedy","Land_Posed","Land_Leseni4x","Land_Leseni2x","Land_Sara_domek_zluty","Land_Watertower1","Land_Sara_zluty_statek_in","Land_Panelak2","Land_Panelak3","Land_Hotel","Land_Dum_mesto2","Land_Trafostanica_mala","Land_Dum_olezlina","Land_Dum_mesto_in","Land_Hangar_2","Land_Garaz_mala","Land_Garaz_long_open","Land_Budova2","Land_Budova3","Land_Dum_olez_istan2_maly","Land_Dum_olez_istan2","Land_Dum_olez_istan2_open2","Land_Dum_olez_istan2_open_dam","Land_Dum_olez_istan2_open2_dam","Land_Dum_olez_istan1","Land_Dum_olez_istan1_open2","Land_panelak_one_floor","Land_panelak_top_floor_rooms","Land_R_Minaret","Land_jezekbeton","Barrels","Camera1","Computer","TVStudio","M113Wreck","BlackhawkWreck","Vec03","FenceWood","FenceWoodPalet","Wire","Heli_H_civil","Heli_H_rescue","Land_water_tank","Land_ladder","Land_ladder_half","snowman","snow","SeaFox_EP1","Land_A_CraneCon","Land_Barn_W_01","Land_Barn_W_02","Land_A_Castle_Stairs_A","Land_A_Office01_ruins","Land_A_Office01","Land_A_Hospital","ladder","LadderLong","Land_A_Office02","Land_a_stationhouse","Land_Shed_Ind02","Land_Vysilac_budova","Land_vodni_vez","Land_pristresek_camo","Land_MBG_GER_HUS_1","Land_MBG_GER_HUS_2","Land_MBG_GER_HUS_3","Land_MBG_GER_HUS_4","Land_MBG_GER_RHUS_1","Land_MBG_GER_RHUS_2","Land_MBG_GER_RHUS_3","Land_MBG_GER_RHUS_4","Land_MBG_GER_RHUS_5","Land_MBG_GER_ESTATE_1","Land_MBG_GER_ESTATE_2","Land_MBG_Beach_Chair_1","Land_MBG_Beach_Chair_2","Land_MBG_Beach_Chair_3","Land_MBG_GER_SUPERMARKET_1","Land_MBG_GER_SUPERMARKET_2","Land_MBG_GER_SUPERMARKET_3","Land_MBG_GER_SUPERMARKET_4","Land_MBG_GER_PUB_1","Land_MBG_GER_PUB_2","Land_MBG_HeavyShelter","Land_MBG_ATC_Segment","Land_MBG_ATC_Tower","Land_MBG_ATC_Base","Land_A_GeneralStore_01","Land_A_Pub_01","Land_Misc_Cargo1Ao","Land_Misc_Cargo1Bo","Land_Misc_Cargo1B","Misc_Cargo1B_military","Misc_Cargo1Bo_civil","Land_Misc_Cargo1C","Land_Misc_Cargo1D","Land_Misc_Cargo1E","Land_Misc_Cargo1F","Land_Misc_Cargo1G","Land_Misc_Cargo2B","Land_Misc_Cargo2C","Land_Misc_Cargo2D","Land_Misc_Cargo2E","Land_HBarrier_large","Land_HBarrier1","Land_HBarrier3","Land_HBarrier5","Land_fort_bagfence_corner","Land_fort_bagfence_long","Land_fort_bagfence_round","Land_BagFenceCorner","Land_BagFenceEnd","Land_BagFenceLong","Land_BagFenceRound","Land_BagFenceShort","Land_fort_artillery_nest","Land_fort_rampart","Fort_RazorWire","Fort_Crate_wood","WarfareBCamp","Fort_CAmp","Land_fortified_nest_small","Fort_Nest","Land_Fort_Watchtower","Fort_Barracks_USMC","Hedgehog","Hhedgehog_concrete","Hhedgehog_concreteBig","Fort_EnvelopeSmall","Fort_EnvelopeBig","Fort_Barricade","Land_Ind_Timbers","Land_Ind_BoardsPack1","Land_Ind_BoardsPack2","Haystack","Land_seno_balik","Misc_palletsfoiled_heap","Misc_palletsfoiled","Land_A_tent","Land_tent_east","Land_GuardShed","Land_Antenna","Land_CamoNet_NATO","Land_CamoNetVar_NATO","Land_CamoNetB_NATO","Land_CamoNet_EAST","Land_CamoNetVar_EAST","Land_CamoNetB_EAST","76n6ClamShell","PowGen_Big","Land_BarGate2","Land_Barrack2","Misc_cargo_cont_small","Misc_cargo_cont_small2","Misc_cargo_cont_tiny","Misc_cargo_cont_net1","Misc_cargo_cont_net2","Misc_cargo_cont_net3","Land_obstacle_get_over","Land_obstacle_prone","Land_obstacle_run_duck","Land_WoodenRamp","Land_ConcreteRamp","Land_ConcreteBlock","Land_Dirthump01","Land_Dirthump02","Land_Dirthump03","BRDMWreck","UralWreck","BMP2Wreck","HMMWVWreck","T72Wreck","WarfareBDepot","Base_WarfareBBarracks","USMC_WarfareBBarracks","RU_WarfareBBarracks","CDF_WarfareBBarracks","Ins_WarfareBBarracks","Gue_WarfareBBarracks","Base_WarfareBContructionSite","USMC_WarfareBContructionSite","USMC_WarfareBContructionSite1","RU_WarfareBContructionSite","RU_WarfareBContructionSite1","CDF_WarfareBContructionSite","CDF_WarfareBContructionSite1","Ins_WarfareBContructionSite","USMC_WarfareBLightFactory","RU_WarfareBLightFactory","USMC_WarfareBHeavyFactory","RU_WarfareBHeavyFactory","CDF_WarfareBHeavyFactory","USMC_WarfareBAircraftFactory","RU_WarfareBAircraftFactory","USMC_WarfareBFieldhHospital","RU_WarfareBFieldhHospital","CDF_WarfareBFieldhHospital","GUE_WarfareBFieldhHospital","USMC_WarfareBAntiAirRadar","RU_WarfareBAntiAirRadar","CDF_WarfareBAntiAirRadar","INS_WarfareBAntiAirRadar","GUE_WarfareBAntiAirRadar","USMC_WarfareBArtilleryRadar","RU_WarfareBArtilleryRadar","CDF_WarfareBArtilleryRadar","Ins_WarfareBArtilleryRadar","Gue_WarfareBArtilleryRadar","USMC_WarfareBUAVterminal","RU_WarfareBUAVterminal","CDF_WarfareBUAVterminal","INS_WarfareBUAVterminal","GUE_WarfareBUAVterminal","USMC_WarfareBVehicleServicePoint","RU_WarfareBVehicleServicePoint","Base_WarfareBBarrier5x","Base_WarfareBBarrier10x","Base_WarfareBBarrier10xTall","BRDM2_HQ_Gue_unfolded","BTR90_HQ_unfolded","LAV25_HQ_unfolded","BMP2_HQ_INS_unfolded","BMP2_HQ_CDF_unfolded","WarfareBunkerSign","C130J_wreck_EP1","Land_Wreck_C130J_EP1_ruins","Land_fort_artillery_nest_EP1","Land_fort_rampart_EP1","Land_fortified_nest_big_EP1","Land_fortified_nest_small_EP1","Land_Fort_Watchtower_EP1","Hedgehog_EP1","Fort_EnvelopeSmall_EP1","Fort_EnvelopeBig_EP1","Fort_Barricade_EP1","Land_CamoNet_NATO_EP1","Land_CamoNetVar_NATO_EP1","Land_CamoNetB_NATO_EP1","Land_CamoNet_EAST_EP1","Land_CamoNetVar_EAST_EP1","Land_CamoNetB_EAST_EP1","76n6ClamShell_EP1","PowGen_Big_EP1","Land_PowGen_Big_ruins_EP1","Land_Barrack2_EP1","Misc_cargo_cont_small_EP1","AmmoCrates_NoInteractive_Large","Camp_EP1","CampEast_EP1","C130J_static_EP1","Land_ladderEP1","Land_ladder_half_EP1","Land_Dirthump01_EP1","Land_Dirthump02_EP1","Land_Dirthump03_EP1","Land_Fuel_tank_stairs_ep1","Land_Misc_Cargo1Ao_EP1","Land_Misc_Cargo1Bo_EP1","Land_Misc_Cargo1Eo_EP1","Land_Misc_Cargo1E_EP1","Land_Misc_Cargo1A_EP1","Land_Misc_Cargo1B_EP1","Land_Misc_Cargo1C_EP1","Land_Misc_Cargo1D_EP1","Land_Misc_Cargo2A_EP1","Land_Misc_Cargo2B_EP1","Land_Misc_Cargo2C_EP1","Land_Misc_Cargo2D_EP1","Land_Misc_CargoMarket1a_EP1","Land_Misc_Cargo2E_EP1","Dirtmount_EP1","US_WarfareBBarracks_Base_EP1","TK_WarfareBBarracks_Base_EP1","US_WarfareBBarracks_EP1","TK_WarfareBBarracks_EP1","US_WarfareBLightFactory_base_EP1","TK_WarfareBLightFactory_base_EP1","TK_GUE_WarfareBLightFactory_base_EP1","US_WarfareBLightFactory_EP1","TK_WarfareBLightFactory_EP1","TK_GUE_WarfareBLightFactory_EP1","US_WarfareBHeavyFactory_Base_EP1","TK_WarfareBHeavyFactory_Base_EP1","TK_GUE_WarfareBHeavyFactory_Base_EP1","US_WarfareBHeavyFactory_EP1","TK_WarfareBHeavyFactory_EP1","TK_GUE_WarfareBHeavyFactory_EP1","US_WarfareBAircraftFactory_Base_EP1","TK_WarfareBAircraftFactory_Base_EP1","TK_GUE_WarfareBAircraftFactory_Base_EP1","US_WarfareBAircraftFactory_EP1","TK_WarfareBAircraftFactory_EP1","TK_GUE_WarfareBAircraftFactory_EP1","US_WarfareBFieldhHospital_Base_EP1","TK_WarfareBFieldhHospital_Base_EP1","TK_GUE_WarfareBFieldhHospital_Base_EP1","US_WarfareBFieldhHospital_EP1","TK_WarfareBFieldhHospital_EP1","TK_GUE_WarfareBFieldhHospital_EP1","US_WarfareBAntiAirRadar_Base_EP1","TK_WarfareBAntiAirRadar_Base_EP1","TK_GUE_WarfareBAntiAirRadar_Base_EP1","US_WarfareBAntiAirRadar_EP1","TK_WarfareBAntiAirRadar_EP1","TK_GUE_WarfareBAntiAirRadar_EP1","US_WarfareBArtilleryRadar_Base_EP1","TK_WarfareBArtilleryRadar_Base_EP1","TK_GUE_WarfareBArtilleryRadar_Base_EP1","US_WarfareBArtilleryRadar_EP1","TK_WarfareBArtilleryRadar_EP1","TK_GUE_WarfareBArtilleryRadar_EP1","US_WarfareBUAVterminal_Base_EP1","TK_WarfareBUAVterminal_Base_EP1","TK_GUE_WarfareBUAVterminal_Base_EP1","US_WarfareBUAVterminal_EP1","TK_WarfareBUAVterminal_EP1","TK_GUE_WarfareBUAVterminal_EP1","US_WarfareBVehicleServicePoint_Base_EP1","TK_WarfareBVehicleServicePoint_Base_EP1","TK_GUE_WarfareBVehicleServicePoint_Base_EP1","US_WarfareBVehicleServicePoint_EP1","TK_WarfareBVehicleServicePoint_EP1","TK_GUE_WarfareBVehicleServicePoint_EP1","US_WarfareBBarrier5x_EP1","US_WarfareBBarrier10x_EP1","US_WarfareBBarrier10xTall_EP1","BRDM2_HQ_TK_GUE_unfolded_Base_EP1","BRDM2_HQ_TK_GUE_unfolded_EP1","M1130_HQ_unfolded_Base_EP1","BMP2_HQ_TK_unfolded_Base_EP1","Land_A_TVTower_Base","Land_A_TVTower_Mid","Land_A_TVTower_Top","Land_A_Minaret_Porto_EP1","Land_A_Villa_EP1","Land_Misc_Coltan_Heap_EP1","Land_mbg_observation_tower","Land_mbg_companybuilding_1","FootBridge_0_ACR","FootBridge_30_ACR","Land_Device_assembled_F","Land_Device_disassembled_F","Hotze_lavicka_1","Hotze_Place_1","Hotze_Place_2","Hotze_Place_3","Hotze_Place_4","Hotze_Place_6","Hotze_SwalkA_B1","Hotze_SwalkA_B2","Hotze_SwalkA_B3","Hotze_Panelak1","Hotze_Panelak2","Hotze_Panelak3","Land_Hotze_HBridge_A","Land_ibr_most_stred30","Land_ibr_most_bez_lamp","Land_ibr_Kamenny_most30","Land_GymBench_01_F","Land_GymRack_01_F","Land_GymRack_02_F","Land_GymRack_03_F","rhs_Flag_Russia_F"] ]; zltNewObjListAllCurIndSel = []; zltNewObjListAllCurIndSel resize (count zlt_obj_list_all); zlt_obj_list = zlt_obj_list_all select zlt_obj_list_index; zlt_cur_class = zlt_obj_list select 0; zlt_new_10cmfix = ["Land_BagBunker_Large_F", "Land_BagBunker_Small_F", "Land_BagBunker_Tower_F","Land_BagFence_Corner_F", "Land_BagFence_End_F", "Land_BagFence_Long_F", "Land_BagFence_Round_F","Land_BagFence_Short_F","Land_HBarrier_1_F", "Land_HBarrier_3_F", "Land_HBarrier_5_F", "Land_HBarrierTower_F","Land_HBarrierWall_corner_F", "Land_HBarrierWall_corridor_F", "Land_HBarrierWall4_F", "Land_HBarrierWall6_F", "Land_CncWall1_F","Land_CncBarrierMedium4_F", "Land_CncWall4_F", "Land_Mil_WallBig_4m_F" ]; zlt_new_5cmfix = ["Land_CncShelter_F"]; zlt_new_15cmfix = ["Land_CncBarrierMedium4_F"]; // -------------------------------------------------- НОВОЕ ----------------------------------------------------------------------------------- // лок объекты + отключены повреждения zlt_localObjectsClasses = ([['A3_Structures_F_Mil_Fortification','A3_Structures_F_Mil_BagBunker','A3_Structures_F_Mil_BagFence'] call zlt_units, { not (["razor", _x] call bis_fnc_instring) }] call zlt_filter) +(["A3_Structures_F_Civ_Garbage","A3_Structures_F_EPA_Mil_Scrapyard","A3_Structures_F_Wrecks"] call zlt_units) +(['A3_Structures_F_Mil_Fortification','A3_Structures_F_Mil_BagBunker','A3_Structures_F_Mil_BagFence'] call zlt_units) +(["A3_Structures_F_Training" call zlt_units, { (["shoot_house", _x] call bis_fnc_instring) or (["obstacle", _x] call bis_fnc_instring) or (["concrete", _x] call bis_fnc_instring) }] call zlt_filter) +(["A3_Structures_F_Civ_Constructions","A3_Structures_F_EPA_Civ_Constructions"] call zlt_units) +['Land_CncWall1_F','Land_CncWall4_F',"Land_CncShelter_F"] +["CS_End01","CB_End01","CS_End02","CB_End02","CS_Long","CB_Long","CS_Short","CB_Short","CS_Entrance01","CB_Entrance01","CS_Entrance02","CB_Entrance02","CS_Intersect01","CB_Intersect01","Cover_Sharprock","Cover_Bluntstone","Cover_Sand_Inset","Cover_Dirt_Inset","Cover_Grass_Inset","CS_H45","CB_H45","CS_H90","CB_H90","CS_Intersect02","CB_Intersect02"] +["Hhedgehog_concreteBig","Land_Pier_small_F","Hedgehog","Hhedgehog_concrete","Land_PierLadder_F","Land_PierLadder_F","Land_fort_artillery_nest_EP1","Land_fort_rampart_EP1","Land_Bunker_F","Land_Slums02_4m"] ,(["xCam_Metal" call zlt_units, {!(["_base", _x] call bis_fnc_instring) }] call zlt_filter) ,(["xcam_objects" call zlt_units, {(["_cnc", _x] call bis_fnc_instring) || (["_wood", _x] call bis_fnc_instring)}] call zlt_filter) ,(["xcam_pipe" call zlt_units, {!(["bunker", _x] call bis_fnc_instring) }] call zlt_filter) ,["xcam_wood"] call zlt_units ,["xcam_woodworks"] call zlt_units ,["A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_EPB_Civ_Dead"] call zlt_units ; // лок. объекты + отключены повр., выключена симуляция zlt_disableSimClasses = (["A3_Structures_F_Civ_Camping" call zlt_units, { not (["toilet", _x] call bis_fnc_instring) }] call zlt_filter) +(["A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","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_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics"] call zlt_units) +(["A3_Structures_F_EPB_Furniture","A3_Structures_F_Furniture","A3_Structures_F_Items_Vessels", "A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPB_Items_Vessels"] call zlt_units) -["Land_MetalBarrel_empty_F","MetalBarrel_burning_F"] +["Land_Pallet_F", "Land_Pallet_vertical_F","Land_Obstacle_Ramp_F"] ; // нужны маркера для объекта zlt_objectsWithMarkers = ("A3_Structures_F_Mil_BagBunker" call zlt_units) + ["Land_CncWall4_F","Land_CncWall4_F","Land_HBarrierBig_F", "Land_HBarrier_Big_F", "Land_HBarrierTower_F", "Land_HBarrierWall_corner_F", "Land_HBarrierWall_corridor_F", "Land_HBarrierWall4_F", "Land_HBarrierWall6_F", "House_F"] ; // игнорировать этот тип объекта zlt_objectsIgnorePlacement = [ "Helper_Base_F" ]; zlt_new_specialFixObjs = ["Land_Pallet_F","Land_HBarrierBig_F", "Land_HBarrier_Big_F"]; // Local, disablesim, left/right, up/down, forw/backw fix zlt_new_specialFixObjsData = [[ 0.72, 0, 0.61],[0.5,0.5,0.5],[0.5,0.5,0.5]]; #define DIK_UP 200 #define DIK_DOWN 208 #define DIK_LEFT 203 #define DIK_RIGHT 205 #define DIK_HOME 199 #define DIK_END 207 #define DIK_INSERT 0xD2 /* Insert on arrow keypad */ #define DIK_PGUP 0xC9 /* PgUp on arrow keypad */ #define DIK_PGDN 0xD1 /* PgDn on arrow keypad */ #define DIK_END 0xCF /* End on arrow keypad */ #define DIK_HOME 0xC7 /* Home on arrow keypad */ #define DIK_DELETE 0xD3 /* Delete on arrow keypad */ #define DIK_DIVIDE 0xB5 #define DIK_NUM8 0x48 #define DIK_NUM2 0x50 #define DIK_1 0x02 #define DIK_2 0x03 #define DIK_3 0x04 #define DIK_4 0x05 #define DIK_5 0x06 #define DIK_6 0x07 #define DIK_7 0x08 #define DIK_8 0x09 #define DIK_9 0x0A #define DIK_0 0x0B #define DIK_X 0x2D #define DIK_C 0x2E #define DIK_V 0x2F #define DIK_W 0x11 #define DIK_S 0x1F #define DIK_A 0x1E #define DIK_D 0x20 #define DIK_Q 0x10 #define DIK_Z 0x2C #define DIK_F1 0x3B #define DIK_F2 0x3C #define DIK_F3 0x3D #define DIK_F4 0x3E #define DIK_F5 0x3F #define DIK_F6 0x40 #define DIK_F7 0x41 #define DIK_F8 0x42 #define DIK_F9 0x43 #define DIK_F10 0x44 #define DIK_1 0x02 #define DIK_2 0x03 #define DIK_3 0x04 #define DIK_4 0x05 #define DIK_5 0x06 #define DIK_6 0x07 #define DIK_7 0x08 #define DIK_8 0x09 #define DIK_9 0x0A #define DIK_0 0x0B #define DIK_RSHIFT 0x36 #define DIK_MULTIPLY 0x37 /* * on numeric keypad */ #define DIK_LSHIFT 0x2A #define DIK_LCONTROL 0x1D #define DIK_RCONTROL 0x9D #define DIK_LMENU 0x38 /* left Alt */ #define DIK_RMENU 0xB8 /* right Alt */ #define DIK_RALT DIK_RMENU /* right Alt */ #define DIK_LALT DIK_LMENU #define DIK_SPACE 0x39 #define DIK_MULTIPLY 0x37 /* * on numeric keypad */ #define DIK_NUMPADSTAR DIK_MULTIPLY #define DIK_SUBTRACT 0x4A /* - on numeric keypad */ #define DIK_SPACE 0x39 #define DIK_ADD 0x4E /* + on numeric keypad */ #define PR(x) private ['x']; x #define PARAM(X,Y,Z) private ['X']; X=[_this, Y, Z] call BIS_fnc_param; #define P_LOCAL_OBJ 0 #define P_SIM_DISABLE 1 #define P_DAMAGE_DISABLE 2 #define P_HAS_MARKER 3 #define P_IGNORE_PLACEMENT 4 zlt_objGetStdParams = { private ["_class","_islocal","_simdisable","_damdisable","_hasmarker","_ignoreplacement"]; _class = _this; _islocal = false; _simdisable = false; _damdisable = false; _hasmarker = false; _ignoreplacement = false; if ( [_class,zlt_localObjectsClasses] call zlt_fnc_cycleKindOf ) then {_islocal = true; _damdisable = true;}; if ( [_class,zlt_disableSimClasses] call zlt_fnc_cycleKindOf ) then {_islocal = true; _damdisable = true; _simdisable = true; }; if ( [_class,zlt_objectsWithMarkers] call zlt_fnc_cycleKindOf ) then { _hasmarker = true; }; if ( [_class,zlt_objectsIgnorePlacement] call zlt_fnc_cycleKindOf ) then {_ignoreplacement = true; }; [_islocal, _simdisable, _damdisable, _hasmarker, _ignoreplacement ] }; //ASLToATL ASLtoATL zlt_createcam = { PARAM(_campos, 0, asltoatl eyePos player) zlt_cameraMode = true; zlt_camera = "camera" camCreate _campos; zlt_camera cameraEffect ["internal","top"]; zlt_camera setDir (getDir player); zlt_camera camCommitPrepared 0; showcinemaborder false; zlt_cam_handler = [] spawn { while {zlt_cameraMode} do { _coeff = 1; _pos = screentoworld [0.5,0.5]; _intersectCam = getposasl zlt_camera; _intersectTarget = [_pos select 0,_pos select 1,getterrainheightasl _pos]; _objects = lineIntersectswith [ _intersectCam, _intersectTarget, objnull, objnull, true ]; _object = objnull; if (count _objects > 0) then { _object = _objects select (count _objects - 1); zlt_cameraTarget = _object; }; sleep 0.1; _campos = getPosAsl zlt_camera; if (zlt_camerakeys select DIK_LSHIFT || zlt_camerakeys select DIK_RSHIFT) then {_coeff = 0.1;}; if (zlt_camerakeys select DIK_LCONTROL || zlt_camerakeys select DIK_RCONTROL) then {_coeff = 10;}; if (zlt_camerakeys select DIK_W) then {_campos = [0,1,0,_coeff, _campos] call zlt_movecam;}; if (zlt_camerakeys select DIK_S) then { _campos=[0,-1,0,_coeff, _campos] call zlt_movecam;}; if (zlt_camerakeys select DIK_A) then { _campos=[-1,1,0,_coeff, _campos] call zlt_movecam;}; if (zlt_camerakeys select DIK_D) then { _campos=[1,1,0,_coeff, _campos] call zlt_movecam;}; if (zlt_camerakeys select DIK_Q) then { _campos=[0,0,1,_coeff, _campos] call zlt_movecam;}; if (zlt_camerakeys select DIK_Z) then { _campos=[0,0,-1,_coeff, _campos] call zlt_movecam;}; if (surfaceIsWater _campos) then { zlt_camera camSetPos _campos; } else { zlt_camera camSetPos ( ASLtoATL _campos); }; zlt_camera camCommit 0.3; comment "13"; }; }; }; zlt_removecam = { player cameraEffect ["terminate","back"]; camDestroy zlt_camera; zlt_cameraMode = false; terminate zlt_cam_handler; }; zlt_movecam = { //diag_log ["zlt_movecam",_this]; PR(_dx) = _this select 0; PR(_dy) = _this select 1; PR(_dz) = _this select 2; PR(_dl) = _this select 3; //PR(_pos) = getPosAsl zlt_camera; _pos = _this select 4; PR(_dir) = (direction zlt_camera) + _dx *90.0; PR(_newcampos) = [ (_pos select 0) + ((sin _dir) * _dl * _dy), (_pos select 1) + ((cos _dir) * _dl * _dy), (_pos select 2) + _dz * _dl ]; _newcampos set [2,(_newcampos select 2) max (getterrainheightasl _newcampos)]; //zlt_camera camSetPos (ASLtoATL _newcampos); //diag_log ["zlt_movecam",_newcampos]; _newcampos }; zlt_rotatecam = { if (isNil "zlt_camDir") then {zlt_camDir=0;}; PR(_dx) = _this select 1; PR(_dy) = _this select 2; zlt_lastCamPos = [0,_dx,_dy]; zlt_camDir= (zlt_camDir - _dy*1) max -89 min 89; zlt_camera setDir (getDir zlt_camera + _dx*1); [ zlt_camera, zlt_camDir, 0 ] call bis_fnc_setpitchbank; zlt_camera camCommitPrepared 0; }; /* * * * РИСОВАНИЕ РАМОК * */ zlt_drawBox = { PR(_obj) = _this select 0; PR(_color) = _this select 1; _bl = _this select 2; if (isNil "_obj") exitWith{}; if (_obj in _bl) exitWith {}; if (isNull _obj) exitWith {}; PR(_boxBot) = (boundingboxreal _obj) select 0; PR(_boxTop) = (boundingboxreal _obj) select 1; PR(_xB) = _boxBot select 0; PR(_xT) = _boxTop select 0; PR(_yB) = _boxBot select 1; PR(_yT) = _boxTop select 1; PR(_zB) = _boxBot select 2; PR(_zT) = _boxTop select 2; drawLine3D [ _obj modeltoworld [_xB, _yB, _zB], _obj modeltoworld [_xT, _yB, _zB], _color]; drawLine3D [ _obj modeltoworld [_xB, _yT, _zB], _obj modeltoworld [_xT, _yT, _zB], _color]; drawLine3D [ _obj modeltoworld [_xB, _yB, _zB], _obj modeltoworld [_xB, _yT, _zB], _color]; drawLine3D [ _obj modeltoworld [_xT, _yB, _zB], _obj modeltoworld [_xT, _yT, _zB], _color]; drawLine3D [ _obj modeltoworld [_xB, _yB, _zT], _obj modeltoworld [_xT, _yB, _zT], _color]; drawLine3D [ _obj modeltoworld [_xB, _yT, _zT], _obj modeltoworld [_xT, _yT, _zT], _color]; drawLine3D [ _obj modeltoworld [_xB, _yB, _zT], _obj modeltoworld [_xB, _yT, _zT], _color]; drawLine3D [ _obj modeltoworld [_xT, _yB, _zT], _obj modeltoworld [_xT, _yT, _zT], _color]; drawLine3D [ _obj modeltoworld [_xB, _yB, _zB], _obj modeltoworld [_xB, _yB, _zT], _color]; drawLine3D [ _obj modeltoworld [_xB, _yT, _zB], _obj modeltoworld [_xB, _yT, _zT], _color]; drawLine3D [ _obj modeltoworld [_xT, _yB, _zB], _obj modeltoworld [_xT, _yB, _zT], _color]; drawLine3D [ _obj modeltoworld [_xT, _yT, _zB], _obj modeltoworld [_xT, _yT, _zT], _color]; _bl pushback _obj; }; // выделять - красный - текущий блок // синий - центр текущей композиции, зеленый - доп. эл-ты текущей композиции zlt_fnc_help = { _help_data = [["F1","Справка"],["F3","Режим камеры"],["F4","Режим нормали к земле"],["F5","ATL/ASL режим"],["F6","Микро-режим"],["F7","Режим автоселекции новых блоков"],["Ctrl+Ins","Установить новый объект здесь и сделать его текущим"], ["Ctrl+PgUp,PgDn","Переключение страниц библиотеки объектов"],["Ctrl+Home","Выравнивание текущего объекта по вертикали и ландшафту"],["Home","Выравнивание текущего объекта по вертикали"], ["End","Сохрание позиций построенных объектов в буфер обмена"],["Delete","Удаление текущего объекта"],["/(цифр.)","Делает объект текущим"],["Ctrl+/(цифр.)","Выбрать объект и сделать текущим"], ["*(цифр.)","Выбрать ближайший объект"],["-(цифр.)","Выбрать класс выбранного объекта"],["+(цифр.)","Переместить камеру на выбранный объект"],["Up Down Left Right","Пермещение текущего объекта"], ["Ctrl+Up,Down,Left,Right","Вращение текущего объекта и пермещение его по вертикали"],["PgUp,PgDn","Выбор объекта на текущей странице библиотеки объектов"], ["Alt+Up,Down,Left,Right","Наклон текущего объекта(может вызвать баги)"],["Shift+клавиши перемещения объекта","Выполнение действия с меньшим шагом"],["Ins","Установить объект рядом с текущим(ждет нажатия клавиши Up,Dn,Left, Right)"], ["Space","Выделить объект под курсором"],["Ctrl+Space","Снять выделение с группы"],["Alt+Space","Добавить в выделение текущий объект"] ]; _help_txt2=""; {_help_txt2 =_help_txt2 + format["%1 - %2
", (_help_data select _foreachindex)select 0,(_help_data select _foreachindex)select 1];} foreach _help_data; _help_txt2=_help_txt2+"
"; [ _help_txt2, 0,0,5,0,0,331] spawn bis_fnc_dynamicText; }; zlt_onEachFrame = { _bl = []; // подсветка текущей [zlt_newlb, [1,0,0,1],_bl] call zlt_drawBox; if (!zlt_cameraMode && !isNull cursorTarget) then { [cursorTarget, [1,1,0,1],_bl] call zlt_drawBox; }; if (zlt_cameraMode && !isNull zlt_cameraTarget) then { [zlt_cameraTarget, [1,1,0,1],_bl] call zlt_drawBox; }; { [_x, [1,1,1,1],_bl] call zlt_drawBox; } foreach zltNewCurSel; }; zlt_fnc_getallcode = { private ["_br","_listobj","_txt","_global","_stdparm","_local","_ignore","_simdisable","_listobj2","_hasmarker"]; _br = toString [13, 10]; _listobj = +(_this); _listobj2 = +(_listobj); _listobj = []; { _stdparm = (_x call zlt_objGetStdParams); _ignore = _stdparm select P_IGNORE_PLACEMENT; if ( !_ignore ) then { _listobj pushBack _x; }; } foreach _listobj2; _listobj2 = nil; _txt = "//Generated using generator by [STELS]Zealot"+_br+'if (isnil "zlt_new_blocks") then {zlt_new_blocks = [];};'+_br; _txt = _txt + "zlt_fnc_boundingbox = " + str(zlt_fnc_boundingbox) +";"+ _br; _txt = _txt + "if(not isDedicated) then {" + _br; { _stdparm = (_x call zlt_objGetStdParams); _hasmarker = ( _stdparm select P_HAS_MARKER ); if ( _hasmarker ) then { _txt = _txt +" "+format["[%1,%2,%3] call zlt_fnc_boundingbox;",str(boundingBoxReal _x),direction _x, position _x]+_br; }; } foreach _listobj; _txt = _txt + "};" + _br; // _txt = _txt + "waituntil {time > 0};" + _br; _txt = _txt + "if (isserver) then {" + _br; { _stdparm = (_x call zlt_objGetStdParams); _local = ( _stdparm select P_LOCAL_OBJ ); _simdisable = ( _stdparm select P_SIM_DISABLE ); if (!_local) then { _txt = _txt + "_script = [] spawn {"; _txt = _txt + ([_x, _local, _simdisable] call zlt_fnc_getcode); _txt = _txt + "}; waitUntil {scriptDone _script};"; }; } foreach _listobj; _txt = _txt + "};" + _br; _txt = _txt + "if (isdedicated) exitwith {};" + _br; // _txt = _txt + "waituntil {time > 0};" + _br; { _stdparm = (_x call zlt_objGetStdParams); _local = ( _stdparm select P_LOCAL_OBJ ); _simdisable = ( _stdparm select P_SIM_DISABLE ); if not (!_local) then { _txt = _txt + ([_x, _local, _simdisable] call zlt_fnc_getcode); }; } foreach _listobj; diag_log ["zlt_fnc_getallcode", _txt]; _txt; }; zlt_fnc_getcode = { _obj = _this select 0; _local = _this select 1; _simdisable = _this select 2; _objType = typeOf _obj; if (_objType=="") exitWith{""}; _spawnType = "CAN_COLLIDE"; _pitchBank = _obj call BIS_fnc_getPitchBank; _obj setvectorup [0,0,1]; _posATL = getPosATL _obj; _posASL = getPosASL _obj; _posWorld = (getPosWorld _obj) call KK_fnc_positionToString; _dir = getDir _obj; _pitch = _pitchBank select 0; _bank = _pitchBank select 1; [_obj, _pitch, _bank] call BIS_fnc_setPitchBank; _br = toString [13, 10]; _copiedTxt = ""; private ["_txt1","_txt2"]; _txt1 = ""; _txt2 = ""; if (not _local) then { _txt1 = format ["_pos = %1; zlt_newlb = createVehicle [""%2"", _pos, [], 0, ""%3""];", _posWorld, _objType, _spawnType]; _txt2 = format ["zlt_newlb setDir %1; zlt_newlb setPosWorld _pos;[zlt_newlb, %2, %3] call BIS_fnc_setPitchBank;zlt_new_blocks pushback zlt_newlb;", _dir, _pitch, _bank]; } else { _txt1 = format ["_pos = %1; zlt_newlb = ""%2"" createVehiclelocal _pos; ", _posWorld, _objType]; _txt2 = format ["zlt_newlb setDir %1; zlt_newlb setPosWorld _pos; [zlt_newlb, %2, %3] call BIS_fnc_setPitchBank; zlt_new_blocks pushback zlt_newlb; zlt_newlb allowdamage false;", _dir, _pitch, _bank]; }; _copiedTxt = _copiedTxt + _txt1; if ( _simdisable ) then { _copiedTxt = _copiedTxt + "zlt_newlb enableSimulation false;"; }; _copiedTxt = _copiedTxt + _txt2; _decl = _obj getVariable ["zlt_new_decl",[]]; if (count (_decl) != 0 ) then { _copiedTxt=_copiedTxt+'if(not isDedicated)then{zlt_newlb setVariable ["zlt_new_decl",' + str(_decl) + '];};'; }; if (_obj getvariable ["zlt_cb", false]) then { _copiedTxt=_copiedTxt+'zlt_newlb setVariable ["zlt_cb",true];'; }; _copiedTxt = _copiedTxt + _br; _copiedTxt; }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //["Land_BagBunker_Tower_F","Land_BagFence_Long_F",[2.69531,-1.67871,-0.911802],"Land_BagFence_Long_F",[2.63086,1.33398,-0.911802]] zlt_fnc_boundingbox = { private ["_dir","_pos","_color","_alpha","_bbox","_b1","_b2","_bbx","_bby","_marker"]; if(!hasInterface)exitWith{}; _bbox = [_this, 0] call BIS_fnc_param; _dir = [_this, 1] call BIS_fnc_param; _pos = [_this, 2] call BIS_fnc_param; _color = [_this, 3, "ColorGrey"] call BIS_fnc_param; _alpha = [_this, 4, 1.0] call BIS_fnc_param; if (isnil "zlt_bb_id") then { zlt_bb_id = 0; }; _b1 = _bbox select 0; _b2 = _bbox select 1; _bbx = (abs(_b1 select 0) + abs(_b2 select 0)); _bby= (abs(_b1 select 1) + abs(_b2 select 1)); _marker = createmarkerlocal [ format [ "WMT_BundingBoxMarker_%1",zlt_bb_id ], _pos ]; zlt_bb_id = zlt_bb_id + 1; _marker setmarkerdir _dir; _marker setmarkershapelocal "rectangle"; _marker setmarkersizelocal [_bbx/2,_bby/2]; _marker setmarkercolor _color; _marker setmarkeralphalocal _alpha; _marker setMarkerBrushLocal "SolidFull"; _marker }; zlt_fnc_cycleKindOf = { _ret = false; { if ( (_this select 0) isKindOf _x ) exitWith {_ret = true; }; } foreach (_this select 1); _ret }; ////////////////////////////////////////////// zlt_fnc_modeindication = { private ["_n","_b","_txt"]; _txt = ""; if (!isNil "zltNewAutoSelect" && {zltNewAutoSelect}) then { _txt = _txt + " АВТО "; } else { _txt = _txt + " --------"; }; if (!zlt_new_vectorup) then { _txt = _txt + " НОРМ"; } else { _txt = _txt + " ВЕРТ"; }; if (zlt_new_asl) then { _txt = _txt + " ASL"; } else { _txt = _txt + " ATL"; }; if (!zlt_new_micro) then { _txt = _txt + " --------"; } else { _txt = _txt + " MICRO"; }; _txt = _txt + "
"; if (count zltNewCurSel !=0 ) then { _txt = _txt + format["Выбрано %1 блоков",count zltNewCurSel] + "
"; }; // покажем текущий блок if (!isNil "zlt_newlb" && {!isnull zlt_newlb}) then { // previous _ci = zlt_new_blocks find zlt_newlb; if (_ci < (count zlt_new_blocks -1)) then { _n = _ci + 1; _b = zlt_new_blocks select _n; if !(_b in zltNewCurSel) then { _txt = _txt + " " + str(_n) + " "+ typeOf _b + "
"; }else { _txt = _txt + " " + str(_n) + " "+ typeOf _b + "
"; }; } else { _txt=_txt + " ------------
"; }; if (_ci != -1) then { _n = _ci; _b = zlt_new_blocks select _n; if !(_b in zltNewCurSel) then { _txt = _txt + " > " + str(_n) + " "+ typeOf _b + "
"; } else { _txt = _txt + " > " + str(_n) + " "+ typeOf _b + "
"; }; } else { _txt=_txt + " ------------
"; }; if (_ci > 0) then { _n = (_ci - 1); _b = zlt_new_blocks select _n; if !(_b in zltNewCurSel) then { _txt = _txt + " " + str(_n) + " "+ typeOf _b + "
"; }else { _txt = _txt + " " + str(_n) + " "+ typeOf _b + "
"; }; } else { _txt=_txt + " ------------
"; }; }; _classTxt = ""; if (isClass (configFile >> "CfgVehicles" >> zlt_cur_class)) then { _classTxt = getText (configFile >> "CfgVehicles" >> zlt_cur_class >> "displayName"); }; if (not isNil "zlt_cur_class") then { _txt=_txt+"
КЛАСС: "+zlt_cur_class +"
"+"НАЗВАНИЕ: "+ _classTxt + "
"; }; //diag_log [_txt]; // конец показа текущего блока [ format["%1",_txt], safezonex,safezoney+0.1,1,0,0,335] spawn bis_fnc_dynamicText; }; zlt_fnc_notify = { [ format["%1",_this], 0,1,5,0,0,331] spawn bis_fnc_dynamicText; }; zlt_fnc_notifyhint = { private ["_item","_list","_txt","_k","_n"]; disableSerialization; _item = _this select 0; _list = _this select 1; _k = (_list find _item) max 0; //diag_log ['zlt_fnc_notifyhint',_k,_item,_list]; if (((uiNamespace getVariable "zlt_new_objects_lb") lbText _k) == _item) then { } else { lbClear (uiNamespace getVariable "zlt_new_objects_lb"); { (uiNamespace getVariable "zlt_new_objects_lb") lbAdd _x; } foreach _list; }; (uiNamespace getVariable "zlt_new_objects_lb") lbSetCurSel _k; (uiNamespace getVariable "zlt_new_objects_lb") ctrlShow true; (uiNamespace getVariable "zlt_new_objects_lb") ctrlCommit 0; terminate zlt_new_objects_lb_cb; zlt_new_objects_lb_cb = [] spawn { uiSleep 10; (uiNamespace getVariable "zlt_new_objects_lb") ctrlShow false; (uiNamespace getVariable "zlt_new_objects_lb") ctrlCommit 0; }; }; ZltNewSaveGroupToClipboard = { private ["_mainobj","_group","_delete","_pos","_res","_first"]; _group = _this select 0; _delete = _this select 1; if (!zlt_cameraMode) then {_pos = screentoworld [0.5,0.5];} else {_pos = getposworld zlt_camera}; _mainobj= "Sign_Sphere10cm_F" createVehicle _pos; [_mainobj,0,0] call bis_fnc_setPitchBank; _mainobj setdir 0; if (zlt_cameraMode) then {_mainobj setdir direction zlt_camera}; _mainobj setPosWorld _pos; _res = "["; _first = true; { if (!_first) then{_res=_res+","};_res=_res+"["; _res=_res+"'"+(typeOf _x)+"'"; _res=_res+","+ ( (getDir _mainobj - getDir _x) call KK_fnc_floatToString );_res=_res+","+((_mainobj worldToModel (getPosATL _x)) call KK_fnc_positionToString);_res=_res+"]"; _first=false; } foreach _group; _res=_res+"]"; if (_delete) then { {zlt_new_blocks = zlt_new_blocks - [_x]} foreach _group; if (zlt_newlb in _group)then{zlt_newlb=objNull;};{deleteVehicle _x;} foreach _group;_group=[];}; deleteVehicle _mainobj; copyToClipboard _res; _res }; ZltNewLoadGroupFromClipboard = { private ["_mainobj","_objects","_obj","_pos","_data"]; if (!zlt_cameraMode) then {_pos = screentoworld [0.5,0.5];} else {_pos = getposworld zlt_camera}; _mainobj= "Sign_Sphere10cm_F" createVehicle _pos; _mainobj setdir 0; if (zlt_cameraMode) then {_mainobj setdir direction zlt_camera}; _mainobj setPosWorld _pos; [_mainobj,0,0] call bis_fnc_setPitchBank; _data = call compile copyFromClipboard; _objects = []; { _obj = (_x select 0) createVehicle [0,0,0]; _obj setDir (getdir _mainobj + (_x select 1)); _obj setPosATL (_mainobj modeltoworld (_x select 2)); diag_log ["Place", _obj, getposWorld _obj, getposWorld _mainobj]; _objects pushback _obj; } foreach _data; zlt_new_blocks = zlt_new_blocks + _objects; zlt_newlb=(_objects select 0); deleteVehicle _mainobj; _objects }; ZltNewSaveGroupParam = { private ["_mainobj","_group","_pblb","_pbx"]; _mainobj=_this select 0; _group=_this select 1; { _x setvariable ["ZltPosDiff",_mainobj worldToModel (getPosATL _x)]; _x setvariable ["ZltDirDiff",getdir _x - getdir _mainobj]; /* _pblb=_mainobj call bis_fnc_getPitchBank; _pbx=_x call bis_fnc_getPitchBank; _x setvariable ["ZltPitchBankDiff",[(_pbx select 0) - (_pblb select 0) ,(_pbx select 1)-(_pblb select 1)]]; _x setvariable ["ZltVectorDirDiff", (vectorDir _mainobj) vectordiff (vectorDir _x) ]; _x setvariable ["ZltVectorUpDiff", (vectorUp _mainobj) vectordiff (vectorUp _x) ];*/ } foreach _group; }; ZltNewUseGroupParam = { private ["_mainobj","_group","_pblb","_pbx"]; _mainobj=_this select 0; _group=_this select 1; _group = _group - [_mainobj]; _vectors = nil; { _x setDir (getdir _mainobj + (_x getvariable "ZltDirDiff")); _x setPosATL (_mainobj modeltoworld (_x getvariable "ZltPosDiff")); if (!_vectors) then { _pblb=_mainobj call bis_fnc_getPitchBank; _pbdiff = _x getvariable "ZltPitchBankDiff"; [_x,(_pblb select 0) + (_pbdiff select 0), (_pblb select 1)+(_pbdiff select 1)] call bis_fnc_setPitchBank; } else { _x setVectorDirAndUp [(vectorDir _mainobj) vectorAdd (_x getvariable "ZltVectorDirDiff"), (vectorUp _mainobj) vectoradd ( _x getvariable "ZltVectorUpDiff") ]; }; } foreach _group; }; zlt_new_moveblock = { // "UP", "RIGHT", "ROLLZ", "FARER", "PITCH", "BANK" // VALUE - Значение на сколько private ["_class", "_pos", "_dir", "_pitch", "_bank","_obj"]; _mode = _this select 0; _val = _this select 1; PARAM(_fASL, 2, zlt_new_asl) if ( isnil "zlt_newlb" or {isNull zlt_newlb} ) exitwith {}; //для текущего выделения [zlt_newlb, zltNewCurSel] call ZltNewSaveGroupParam; //конец обработки текущего выделения _obj = zlt_newlb; //получить координаты _dir = getdir _obj; _pitchBank = _obj call BIS_fnc_getPitchBank; _pitch = _pitchBank select 0; _bank = _pitchBank select 1; if (_pitch !=0 or _bank != 0) then { _obj setvectorup [0,0,1]; }; if (_fASL) then { _pos = getPosASL _obj; } else { _pos = getPosATL _obj; }; _dir = getDir _obj; _obj setdir 0; _pdir = 0; if (zlt_cameraMode) then { _pdir = direction zlt_camera; } else { _pdir = getdir player; }; if (!_fASL) then { switch (_mode) do { case ("UP") : { _obj setposatl [_pos select 0, _pos select 1, (_pos select 2) + _val]; }; case ("RIGHT") : { _obj setposatl [(_pos select 0) + (sin (_pdir + 90) * _val ), (_pos select 1) + (cos (_pdir + 90)* _val ), (_pos select 2)]; }; case ("LEFT") : { _obj setposatl [(_pos select 0) + (sin (_pdir - 90) * _val ), (_pos select 1) + (cos (_pdir - 90)* _val ), (_pos select 2)]; }; case ("FARER") : { _obj setposatl [(_pos select 0) + (sin _pdir * _val ), (_pos select 1) + (cos _pdir * _val ), (_pos select 2)]; }; case ("ROLLZ") : { _dir = _dir + _val; }; case ("PITCHUP") : { _pitch = _pitch + _val; }; case ("BANKUP") : { _bank = _bank + _val; }; }; } else { switch (_mode) do { case ("UP") : { _obj setposasl [_pos select 0, _pos select 1, (_pos select 2) + _val]; }; case ("RIGHT") : { _obj setposasl [(_pos select 0) + (sin (_pdir + 90) * _val ), (_pos select 1) + (cos (_pdir + 90)* _val ), (_pos select 2)]; }; case ("LEFT") : { _obj setposasl [(_pos select 0) + (sin (_pdir - 90) * _val ), (_pos select 1) + (cos (_pdir - 90)* _val ), (_pos select 2)]; }; case ("FARER") : { _obj setposasl [(_pos select 0) + (sin _pdir * _val ), (_pos select 1) + (cos _pdir * _val ), (_pos select 2)]; }; case ("ROLLZ") : { _dir = _dir + _val; }; case ("PITCHUP") : { _pitch = _pitch + _val; }; case ("BANKUP") : { _bank = _bank + _val; }; }; }; _obj setdir _dir; if (_pitch !=0 or _bank != 0) then { diag_log ["SET",_obj,_pitch,_bank]; [_obj, _pitch, _bank] call BIS_fnc_setPitchBank; }; [zlt_newlb, zltNewCurSel] call ZltNewUseGroupParam; //конец обработки текущего выделения }; zlt_new_mouseMoving = { if (zlt_cameraMode) then { _this call zlt_rotatecam; }; //diag_log ["M",_x,_y]; }; zlt_new_keyup = { private ["_key","_dir"]; _ret = false; if (count _this > 1) then { _key = _this select 1; zlt_camerakeys set [_key,false]; _shift = _this select 2; _ctrl = _this select 3; _alt = _this select 4; _ret = true; }; _ret; }; ZltNewGetCameraTarget = { if (zlt_cameraMode) then {zlt_cameraTarget} else {cursortarget}; }; zlt_new_keydown = { private ["_key","_dir"]; _ret = false; if (count _this > 1) then { _key = _this select 1; zlt_camerakeys set [_key,true]; _shift = _this select 2; _ctrl = _this select 3; _alt = _this select 4; //player globalchat format ["%1 - %2",_key,_this]; _ret = true; _pos = getposatl zlt_newlb; _dir = getdir zlt_newlb; _coeff = 0.3; _angle = 5; if (_shift) then {_coeff = 0.1; _angle = 1;}; if (zlt_new_micro) then { _coeff = 0.05; _angle = 1; if (_shift) then {_coeff = 0.01; _angle = 0.2;}; }; // diag_log ["new2 kh",_this]; switch (true) do { // КАМЕРА case (!zlt_cameraMode && _key == DIK_F3) : { [] spawn zlt_createcam; }; case (zlt_cameraMode && _key == DIK_F3) : { [] spawn zlt_removecam; }; case (_key == DIK_UP && _ctrl && !_alt && !zlt_new_is_plc_mode) : { ["UP", _coeff] call zlt_new_moveblock; }; case (_key == DIK_DOWN && _ctrl && !_alt && !zlt_new_is_plc_mode) : { ["UP", -_coeff] call zlt_new_moveblock; }; case (_key == DIK_LEFT && _ctrl && !_alt) : { ["ROLLZ", -_angle] call zlt_new_moveblock; }; case (_key == DIK_RIGHT && _ctrl && !_alt) : { ["ROLLZ", _angle] call zlt_new_moveblock; }; case (_key == DIK_UP && _alt && !_ctrl) : { ["PITCHUP", -_angle] call zlt_new_moveblock; }; case (_key == DIK_DOWN && _alt && !_ctrl) : { ["PITCHUP", _angle] call zlt_new_moveblock; }; case (_key == DIK_LEFT && _alt && !_ctrl) : { ["BANKUP", _angle] call zlt_new_moveblock; }; case (_key == DIK_RIGHT && _alt && !_ctrl) : { ["BANKUP", -_angle] call zlt_new_moveblock; }; //вверх case (_key == DIK_UP && !zlt_new_is_plc_mode ) : {["FARER", _coeff] call zlt_new_moveblock;}; //вниз case (_key == DIK_DOWN && !zlt_new_is_plc_mode ) : {["FARER", -_coeff] call zlt_new_moveblock;}; //влево case (_key == DIK_LEFT && !zlt_new_is_plc_mode ) : {["LEFT", _coeff] call zlt_new_moveblock;}; //вправо case (_key == DIK_RIGHT && !zlt_new_is_plc_mode ) : {["RIGHT", _coeff] call zlt_new_moveblock;}; // вставить case (_key == DIK_INSERT && _ctrl) : {[_ctrl] call zlt_new_block}; case (_key == DIK_INSERT) : { // режим установки zlt_new_is_plc_mode = true; // handle колбека выключения режима установки zlt_new_plc_mode_cb = [] spawn { sleep 5; zlt_new_is_plc_mode = false; hint "Установка отменена!"; }; hint "Режим установки"; }; //ctrl up down case (zlt_new_is_plc_mode && _key == DIK_UP && _ctrl && !_alt) : { terminate zlt_new_plc_mode_cb;zlt_new_is_plc_mode=false; [false,"UP"] call zlt_new_block; hint "Установка";}; case (zlt_new_is_plc_mode && _key == DIK_DOWN && _ctrl && !_alt) : { terminate zlt_new_plc_mode_cb;zlt_new_is_plc_mode=false; [false,"DOWN"] call zlt_new_block; hint "Установка";}; //up down case (zlt_new_is_plc_mode && _key == DIK_DOWN && !_ctrl && !_alt) : { terminate zlt_new_plc_mode_cb;zlt_new_is_plc_mode=false; [_ctrl,"BACK"] call zlt_new_block; hint "Установка";}; case (zlt_new_is_plc_mode && _key == DIK_UP && !_ctrl && !_alt) : { terminate zlt_new_plc_mode_cb;zlt_new_is_plc_mode=false; [_ctrl,"FRONT"] call zlt_new_block; hint "Установка";}; //left right case (zlt_new_is_plc_mode && _key == DIK_LEFT && !_ctrl && !_alt) : { terminate zlt_new_plc_mode_cb;zlt_new_is_plc_mode=false; [_ctrl,"LEFT"] call zlt_new_block; hint "Установка";}; case (zlt_new_is_plc_mode && _key == DIK_RIGHT && !_ctrl && !_alt) : { terminate zlt_new_plc_mode_cb;zlt_new_is_plc_mode=false; [_ctrl,"RIGHT"] call zlt_new_block; hint "Установка";}; // // PD + ctrl case (_key == DIK_PGDN and _ctrl ) : { private "_oi"; if (zlt_obj_list_index < ( count (zlt_obj_list_all) - 1 ) ) then { zlt_obj_list_index = zlt_obj_list_index +1 ;}; zlt_obj_list = zlt_obj_list_all select zlt_obj_list_index; _oi = zltNewObjListAllCurIndSel select zlt_obj_list_index; if !(isNil "_oi") then {zlt_cur_class = zlt_obj_list select _oi;} else { zlt_cur_class = zlt_obj_list select 0; }; [zlt_cur_class, zlt_obj_list] call zlt_fnc_notifyhint; }; // PU + ctrl case (_key == DIK_PGUP and _ctrl ) : { private "_oi"; if (zlt_obj_list_index > 0 ) then { zlt_obj_list_index = zlt_obj_list_index -1 ;}; zlt_obj_list = zlt_obj_list_all select zlt_obj_list_index; _oi = zltNewObjListAllCurIndSel select zlt_obj_list_index; if !(isNil "_oi") then {zlt_cur_class = zlt_obj_list select _oi;} else { zlt_cur_class = zlt_obj_list select 0; }; [zlt_cur_class, zlt_obj_list] call zlt_fnc_notifyhint; }; // PD case (_key == DIK_PGDN ) : {_ind = (zlt_obj_list find zlt_cur_class ) max 0; _ind = _ind + (if (_shift) then {10} else {1} ); if (_ind > (count (zlt_obj_list) -1)) then {_ind = count (zlt_obj_list) -1 ;}; zlt_cur_class = zlt_obj_list select _ind; [zlt_cur_class, zlt_obj_list] call zlt_fnc_notifyhint; zltNewObjListAllCurIndSel set [zlt_obj_list_index,_ind]; }; //PU case (_key == DIK_PGUP ) : {_ind = (zlt_obj_list find zlt_cur_class ) max 0; _ind = _ind - (if (_shift) then {10} else {1} ); if (_ind < 0) then {_ind = 0 ;}; zlt_cur_class = zlt_obj_list select _ind; [zlt_cur_class, zlt_obj_list] call zlt_fnc_notifyhint; }; //end case (_key == DIK_END && !_ctrl) : { zlt_new_blocks call zlt_save_comp ; "Сохронил!" call zlt_fnc_notify; }; case (_key == DIK_END && _ctrl) : { zlt_disableSimClasses2 = zlt_disableSimClasses; zlt_disableSimClasses = []; zlt_localObjectsClasses2= zlt_localObjectsClasses; zlt_localObjectsClasses = []; zlt_new_blocks call zlt_save_comp ; "Сохронил глобально!" call zlt_fnc_notify; zlt_disableSimClasses = zlt_disableSimClasses2; zlt_disableSimClasses2 = nil; zlt_localObjectsClasses= zlt_localObjectsClasses2; zlt_localObjectsClasses2=nil; }; //delete case (_key == DIK_DELETE) : { _oldid = zlt_new_blocks find zlt_newlb; zlt_new_blocks = zlt_new_blocks - [zlt_newlb]; if (zlt_newlb in zltNewCurSel) then {zltNewCurSel=zltNewCurSel-[zlt_newlb];}; deletevehicle zlt_newlb; zlt_newlb = if (count zlt_new_blocks == 0 )then {objNull} else {if(_oldid > 0) then{ zlt_new_blocks select (_oldid - 1)} else {zlt_new_blocks select 0}}; "Удалено!" call zlt_fnc_notify; }; // home case (_key == DIK_HOME) : { if (!_ctrl) then { [zlt_newlb, zltNewCurSel] call ZltNewSaveGroupParam; zlt_newlb setposatl [ getposatl zlt_newlb select 0, getposatl zlt_newlb select 1, 0]; [zlt_newlb, zltNewCurSel] call ZltNewUseGroupParam; }else { if ( (!zlt_new_vectorup && !_alt) || (zlt_new_vectorup && _alt) ) then { [zlt_newlb, zltNewCurSel] call ZltNewSaveGroupParam; zlt_newlb setvectorup ( surfaceNormal (getpos zlt_newlb) ); [zlt_newlb, zltNewCurSel] call ZltNewUseGroupParam; "Нормаль" call zlt_fnc_notify; //zlt_new_vectorup = false; } else { [zlt_newlb, zltNewCurSel] call ZltNewSaveGroupParam; [zlt_newlb, 0,0] call bis_fnc_setpitchbank; [zlt_newlb, zltNewCurSel] call ZltNewUseGroupParam; //zlt_new_vectorup = true; "Вертикаль" call zlt_fnc_notify; }; }; }; case (_key == DIK_F1) : { [] call zlt_fnc_help; }; case (_key == DIK_F4) : { if (zlt_new_vectorup) then {zlt_new_vectorup = false; "Режим нормали" call zlt_fnc_notify;} else { zlt_new_vectorup = true; "Режим вертикали" call zlt_fnc_notify;}; }; case (_key == DIK_F5) : { if (zlt_new_asl) then {zlt_new_asl = false; "Режим ATL" call zlt_fnc_notify;} else { zlt_new_asl = true; "Режим ASL" call zlt_fnc_notify;}; }; case (_key == DIK_F6) : { if (zlt_new_micro) then {zlt_new_micro = false; "Микрорежим выключен" call zlt_fnc_notify;} else { zlt_new_micro = true; "Микрорежим" call zlt_fnc_notify;}; }; /* case (_key == DIK_F7) : { if (isNil "zltNewAutoSelect") then {zltNewAutoSelect=false;}; if (zltNewAutoSelect) then {zltNewAutoSelect = false; "Режим автовыбора выключен" call zlt_fnc_notify;} else { zltNewAutoSelect = true; "Режим автовыбора" call zlt_fnc_notify;}; }; */ case (_ctrl && _key >= 0x02 && _key <= 0x0B ) : { zltNewCurrentFastObjects set [_key-0x02,zlt_cur_class]; profilenamespace setvariable ["zltNewCurrentFastObjects",zltNewCurrentFastObjects]; }; case (!_ctrl && _key >= 0x02 && _key <= 0x0B ) : {private "_co"; _co = zltNewCurrentFastObjects select (_key-0x02); if !(isNil "_co") then {zlt_cur_class=_co;}else{"Быстрая клавиша не назначена" call zlt_fnc_notify};}; case (_ctrl && _key==DIK_C) : { [zltNewCurSel, false] call ZltNewSaveGroupToClipboard; "Скопировано в буфер" call zlt_fnc_notify; }; case (_ctrl && _key==DIK_V) : { zltNewCurSel=0 call ZltNewLoadGroupFromClipboard; "Вставлено из буфера" call zlt_fnc_notify; }; case (_ctrl && _key==DIK_X) : { [zltNewCurSel, true] call ZltNewSaveGroupToClipboard; zltNewCurSel=[]; "Вырезано из буфера" call zlt_fnc_notify; }; case (_alt && !_ctrl && _key == DIK_SPACE) : {if (zlt_newlb in zltNewCurSel) then {zltNewCurSel = zltNewCurSel-[zlt_newlb]; "Удалено" call zlt_fnc_notify} else {zltNewCurSel pushBack zlt_newlb; "Добавлено" call zlt_fnc_notify;};}; case (!_alt && _ctrl && _key == DIK_SPACE) : {zltNewCurSel=[]; "Выделение снято" call zlt_fnc_notify}; case (!_alt && !_ctrl && _key == DIK_SPACE) : { private "_target"; _target = 0 call ZltNewGetCameraTarget; if !(isnull _target) then { if (_target in zlt_new_blocks) then { if !(_target in zltNewCurSel) then { zltNewCurSel pushBack _target; "Добавлено в выделение" call zlt_fnc_notify; } else {zltNewCurSel = zltNewCurSel - [_target]; "Убрано из выделения" call zlt_fnc_notify;}; } else {"Блок нельзя выделить - он поставлен не нами" call zlt_fnc_notify;}; } else {"Блок не выбран" call zlt_fnc_notify;}; }; // "/" case (_key == DIK_DIVIDE and _ctrl) : { [] call zlt_select_block; if (not (zlt_newlb in zlt_new_blocks) and not (isnull zlt_newlb)) then {zlt_new_blocks = zlt_new_blocks + [zlt_newlb];}; }; case (_key == DIK_DIVIDE and not _ctrl) : { [] call zlt_select_block; }; case (_key == DIK_NUMPADSTAR) : { call zlt_force_selBlock; }; case (_key == DIK_SUBTRACT) : { if (not isNil "zlt_newlb") then { zlt_cur_class = typeof zlt_newlb; }; }; case (_key == DIK_ADD) : { if (zlt_cameraMode) then {zlt_camera camSetPos (getpos zlt_newlb); zlt_camera camCommit 0;}; }; // NUM 8 case (_key == DIK_NUM8 ) : {_ind = (zlt_new_blocks find zlt_newlb ) max 0; _ind = _ind + 1; if (_ind > (count (zlt_new_blocks) -1)) then {_ind = count (zlt_new_blocks) -1 ;}; zlt_newlb = zlt_new_blocks select _ind; ("Selected: "+ str [zlt_newlb, typeof zlt_newlb]) call zlt_fnc_notify;}; // NUM 2 case (_key == DIK_NUM2 ) : {_ind = (zlt_new_blocks find zlt_newlb ) max 0; _ind = _ind - 1; if (_ind < 0) then {_ind = 0 ;}; zlt_newlb = zlt_new_blocks select _ind; ("Selected: "+ str [zlt_newlb, typeof zlt_newlb]) call zlt_fnc_notify; }; default {_ret = false;}; }; }; _ret; }; zlt_exportPos = { PR(_pos) = []; { if ( [_x,["Helper_Base_F"]] call zlt_fnc_cycleKindOf ) then { _pos pushBack (getpos _x); }; } foreach zlt_new_blocks; diag_log ["zlt_exportPos",_pos]; copyToClipboard str (_pos); }; // [-1.56135,-0.255241,-0.458448],[1.56135,0.255241,0.458448]] zlt_new_block = { comment "v.1"; _class = zlt_cur_class; if (!isClass (configFile >> "CfgVehicles" >> zlt_cur_class)) exitWith { "Такого класса нет в данной сборке!" call zlt_fnc_notify}; _ctrl = [_this,0,false ] call bis_fnc_param; _placemode = [_this, 1, "UP"] call bis_fnc_param; PARAM(_fASL,2,zlt_new_asl) PR(_pos1)=[0,0,0]; _new = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; //_new = if (_class in zlt_new_globalobjs) then { createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; } else { _class createVehiclelocal [0,0,0]; }; if ( (_new call zlt_objGetStdParams) select P_SIM_DISABLE ) then { _new enableSimulation false; }; if (!zlt_cameraMode) then { _pos1 = player modeltoworld [0, ((boundingboxreal _new select 1 select 0) max (boundingboxreal _new select 1 select 1) ) +1 ,0]; } else { _pos1 = zlt_camera modeltoworld [0, ((boundingboxreal _new select 1 select 0) max (boundingboxreal _new select 1 select 1) ) +1 ,0]; // _pos1 = screentoworld [0.5,0.5]; }; if (_fASL) then { _pos1 = ATLtoASL _pos1; }; if (not _ctrl and not isNull zlt_newlb) then { _olddir = getdir zlt_newlb; _new setdir _olddir; _oldpos = [0,0,0]; if (_fASL) then { _oldpos = getposasl zlt_newlb; } else { _oldpos = getposatl zlt_newlb; }; _bboxold = boundingboxreal zlt_newlb; _bboxnew = boundingboxreal _new; _lng = 0; _cangle = 90; _specialFix = 0; if (_class in zlt_new_specialFixObjs) then { _ind2 = zlt_new_specialFixObjs find _class; _data = zlt_new_specialFixObjsData select _ind2; switch (_placemode) do { case ("RIGHT") : { _specialFix = _data select 0; }; case ("LEFT") : { _specialFix = _data select 0; }; case ("UP") : { _specialFix = _data select 1; }; case ("DOWN") : { _specialFix = _data select 1; }; case ("FRONT") : { _specialFix = _data select 2; }; case ("BACK") : { _specialFix = _data select 2; }; }; }; switch (_placemode) do { case ("RIGHT") : { _lng = abs(_bboxold select 1 select 0 ) + abs (_bboxnew select 0 select 0) - _specialFix; _cangle = 90;}; case ("LEFT") : { _lng = abs(_bboxold select 1 select 0 ) + abs (_bboxnew select 0 select 0) - _specialFix; _cangle = 270;}; case ("UP") : { _lng = abs(_bboxold select 1 select 2 ) + abs (_bboxnew select 0 select 2) - _specialFix; _cangle = 0;}; case ("DOWN") : { _lng = abs(_bboxold select 1 select 2 ) + abs (_bboxnew select 0 select 2) - _specialFix; _cangle = 0;}; case ("FRONT") : { _lng = abs(_bboxold select 1 select 1 ) + abs (_bboxnew select 0 select 1) - _specialFix; _cangle = 0;}; case ("BACK") : { _lng = abs(_bboxold select 1 select 1 ) + abs (_bboxnew select 0 select 1) - _specialFix; _cangle = 180;}; }; switch true do { case (_class in zlt_new_15cmfix) : {_lng = _lng - 0.15;}; case (_class in zlt_new_5cmfix) : {_lng = _lng - 0.05;}; case (_class in zlt_new_10cmfix) : {_lng = _lng - 0.1;}; }; if not (_placemode in ["UP","DOWN"]) then { _pos1 = [_oldpos, _lng , (_olddir + _cangle)] call BIS_fnc_relPos; } else { if (_placemode == "UP") then { _pos1 = [_oldpos select 0, _oldpos select 1, (_oldpos select 2 ) + _lng]; } else { _pos1 = [_oldpos select 0, _oldpos select 1, (_oldpos select 2 ) - _lng]; }; }; diag_log format ["NEW BLOCK %1 %2 _olddir=%3 _bboxold=%4 _bboxnew=%5 _lng=%6 _oldpos=%7 _pos1=%8", zlt_newlb, _new, _olddir, _bboxold, _bboxnew, _lng, _oldpos,_pos1 ]; ((typeof _new) + " блок установлен!") call zlt_fnc_notify; }; if (_fASL) then { _new setposasl _pos1; } else { _new setposatl _pos1; }; if (!zlt_new_vectorup) then { _new setvectorup ( surfaceNormal (getpos _new) ); } else { _new setVectorUp [0,0,1]; }; PR(_closestBlocks) = (getpos _new ) nearObjects 10; _closestBlocks = _closestBlocks - [_new]; _closestBlocks = [+_closestBlocks,[_new],{_input0 distanceSqr _x},"ASCEND"] call BIS_fnc_sortBy; if ((count zlt_new_blocks > 0) and {(_closestBlocks select 0) distance _new < 0.05} ) then { "Ошибка, слишком близко к другому блоку!" call zlt_fnc_notify; deleteVehicle _new; } else { zlt_newlb = _new; zlt_new_blocks = zlt_new_blocks + [zlt_newlb]; if (!isNil "zltNewAutoSelect" && {zltNewAutoSelect}) then {if !(_new in zltNewCurSel) then {zltNewCurSel pushBack _new};}; }; }; zlt_save_comp = { _objs = _this ; _text = (_objs call zlt_fnc_getallcode); copytoclipboard _text; }; zlt_force_selBlock = { PR(_closestBlocks)=[]; PR(_pos)=[]; if (zlt_cameraMode) then { _pos = getPos zlt_camera; } else { _pos = getpos player; }; _closestBlocks = [zlt_new_blocks,[_pos],{_input0 distanceSqr _x},"ASCEND"] call BIS_fnc_sortBy; zlt_newlb = _closestBlocks select 0; }; zlt_select_block = { if (zlt_cameraMode) then { if not (isNull zlt_cameraTarget ) then { zlt_newlb = zlt_cameraTarget; }; } else { if not (isNull cursortarget) then { zlt_newlb = cursortarget; }; }; }; zlt_placepos = { PR(_pos1)=[0,0,0]; _new = createVehicle ["Sign_Arrow_Direction_F", [0,0,0], [], 0, "CAN_COLLIDE"]; if (!zlt_cameraMode) then { _pos1 = player modeltoworld [0, ((boundingboxreal _new select 1 select 0) max (boundingboxreal _new select 1 select 1) ) +1 ,0]; } else { //_pos1 = zlt_camera modeltoworld [0, ((boundingboxreal _new select 1 select 0) max (boundingboxreal _new select 1 select 1) ) +1 ,0]; _pos1 = screentoworld [0.5,0.5]; }; _new setposatl _pos1; //zlt_positions pushBack _new; zlt_new_blocks pushBack _new; zlt_newlb = _new; }; KK_fnc_floatToString = { private "_arr"; _arr = toArray str (_this % 1); _arr set [0, 'x']; _arr = _arr - ['x']; toString (toArray str (_this - _this % 1) + _arr) }; KK_fnc_positionToString = { { _this = if (_forEachIndex == 0 and _forEachIndex != 2) then [ {_x call KK_fnc_floatToString}, {if (_forEachIndex ==1) then [{_this + "," + (_x call KK_fnc_floatToString)},{_this + "," + (str _x)}]}]; } forEach +_this; "["+_this+"]" }; KK_fnc_floatToString = { private ["_num","_rem"]; _num = str _this + "."; _rem = str (_this % 1); (_num select [0, _num find "."]) + (_rem select [_rem find "."]) }; KK_fnc_positionToString = { private ["_f2s","_num","_rem"]; _f2s = { _num = str _this + "."; _rem = str (_this % 1); (_num select [0, _num find "."]) + (_rem select [_rem find "."]) }; format [ "[%1,%2,%3]", _this select 0 call _f2s, _this select 1 call _f2s, _this select 2 call _f2s ] }; zlt_fnc_initUI = { disableSerialization; uiNamespace setVariable ["zlt_new_objects_lb", findDisplay 46 ctrlCreate ["RscListBox", -1]]; (uiNamespace getVariable "zlt_new_objects_lb") ctrlSetPosition [safeZoneX,safezoneY+0.5,0.3,0.5]; (uiNamespace getVariable "zlt_new_objects_lb") ctrlSetFade 0.25; (uiNamespace getVariable "zlt_new_objects_lb") ctrlSetFontHeight 0.03; (uiNamespace getVariable "zlt_new_objects_lb") ctrlCommit 0; zlt_new_objects_lb_cb = [] spawn { uiSleep 5; (uiNamespace getVariable "zlt_new_objects_lb") ctrlShow false; (uiNamespace getVariable "zlt_new_objects_lb") ctrlCommit 0; }; }; // zlt_new_blocks zlt_fnc_ZeusSync = { if ( count allCurators == 0 ) exitWith {}; private ['_curator','_curObjs']; _curator = allCurators select 0; _curObjs = curatorEditableObjects _curator; { if !(_x in zlt_new_blocks) then {zlt_new_blocks pushBack _x}; } foreach (_curObjs); { if !(_x in _curObjs) then { _curator addCuratorEditableObjects [[_x],false]; }; } foreach zlt_new_blocks; }; if (isNil "zlt_eh_keydown") then { waitUntil { (!isNull (findDisplay 46) || !(alive player))}; zlt_backDisplayCheck = [] spawn { while {true} do { [] spawn zlt_fnc_ZeusSync; zlt_eh_keydown = (findDisplay 46) displayAddEventHandler ["KeyDown", "_aaa=(_this call zlt_new_keydown)"]; zlt_eh_keyup = (findDisplay 46) displayAddEventHandler ["KeyUp", "_ccc=(_this call zlt_new_keyup)"]; zlt_eh_mouse = (findDisplay 46) displayAddEventHandler ["MouseMoving", "_bbb=(_this call zlt_new_mouseMoving)"]; waitUntil { !isNull(findDisplay 312) }; // сработает после запуска Zeus [] spawn zlt_fnc_ZeusSync; waitUntil { isNull(findDisplay 312) }; [] spawn zlt_fnc_ZeusSync; (findDisplay 46) displayRemoveEventHandler ["KeyDown", zlt_eh_keydown]; (findDisplay 46) displayRemoveEventHandler ["KeyUp", zlt_eh_keyup]; (findDisplay 46) displayRemoveEventHandler ["MouseMoving", zlt_eh_mouse]; }; }; /* (findDisplay 46) displayRemoveAllEventHandlers "KeyDown"; (findDisplay 46) displayRemoveAllEventHandlers "KeyUp"; */ // ВИДЖЕТ СПИСКА call zlt_fnc_initUI; zlt_cur_class = zlt_obj_list select 0; if (isnil "zlt_new_blocks") then { zlt_new_blocks = [];}; zlt_newlb = objNull; zlt_new_vectorup = true; zlt_new_asl = true; zlt_new_micro = false; zltNewCurSel=[]; //текущее выделение через пробел zltNewCurrentFastObjects=[]; zltNewCurrentFastObjects resize 10; zltNewCurrentFastObjects=profilenamespace getvariable ["zltNewCurrentFastObjects",zltNewCurrentFastObjects]; // камера zlt_cameraMode = false; zlt_camerakeys = []; _DIKcodes = true call bis_fnc_keyCode; _DIKlast = _DIKcodes select (count _DIKcodes - 1); for "_k" from 0 to (_DIKlast - 1) do { zlt_camerakeys set [_k,false]; }; zlt_cameraTarget = objNull; // режим установки zlt_new_is_plc_mode = false; // handle колбека выключения режима установки zlt_new_plc_mode_cb = nil; addMissionEventHandler ["Draw3D", "call zlt_onEachFrame"]; [] spawn { while {true} do { sleep 0.1; call zlt_fnc_modeindication; }; }; }; hint "Загрузка завершена";