b3lx 161 Posted October 30, 2017 If anyone would still like to play Avgani on Arma 3 and get rid of the black sky you can use this patch to remove it. Its just a very simple modification of Jack Ost's Black Sky global patch. You need the original Avgani map and, since it's an Arma 2 terrain, you also need CUP. To use it you install the mod and in the editor pick the Avganifix terrain instead of the regular one. Weather won't work but it's certainly better than just black sky. All credit goes to Jack Ost for the original patch, thanks! Download here: https://drive.google.com/file/d/0B4p8_jE5xz2yWHVwZEdJZVE2ajA/view 3 Share this post Link to post Share on other sites
GEORGE FLOROS GR 4207 Posted April 5, 2018 Thanks for the patch! Thanks also Jack Ost for (Black Sky Global Patch) This is a small well done map for Armed Assault , with a nice east atmosphere ! Avgani 1.5 & Afghan village 1.0 by @opteryx I remember playing there a nice mission of @jeza Downloads / Arma 3 / Scenarios / Co-op missions / Avgani Contact Co-08 (@) http://www.armaholic.com/page.php?id=30749 so maybe a mission with your new stuff there , would be Good! Thanks again! Share this post Link to post Share on other sites
b3lx 161 Posted June 27, 2018 I didn't see this. Avgani was really great, theres nothing on the same league for me except maybe Diyala. Unfortunately I had to give up on using avgani and faysh khabur because they both crash everytime, maybe some mod i'm using but i'm not really into giving up any one of them. So i've been filling CUP Shapur and Desert with RSO and OPX and is good enough for me in SP: 1 Share this post Link to post Share on other sites
GEORGE FLOROS GR 4207 Posted June 27, 2018 1 hour ago, b3lx said: So i've been filling CUP Shapur and Desert with RSO and OPX Are you using the script for replacing buildings or you just spawn them on random? If it's the replacement script can you share the code here ? ( for the classnames used etc ) Very nice pics by the way ! Spoiler 2 hours ago, b3lx said: Eastern Syria: SDF attack on ISIS positions mods: CUP Core, CUP Terrains, RSO buildings, OPX Buildings, RHS complete, Project OPFOR, VSM Accessories, Hidden Identity V2, Eden Extended Objects, ReColor and b3lx_MILITIA+SCRIPT Thanks b3lx! Share this post Link to post Share on other sites
b3lx 161 Posted June 27, 2018 No, these are 3den placed. I use the replacement script for fallujah. The results are not so good as this but it provides some surprise to the terrain and you can put down buildings on 3den anyway. So here is the script that sends the parameters to the replaceobjects.sqf script itself, it's made for fallujah: Spoiler /* Fallujahreplacer.sqf replaces many buildings in the arma 2 fallujah map with RSO CUP and OPX assets. It also replaces the tropical palms with other types of trees, as well as replaces the phone booths and dumpsters with junk, and the chernarusian billboards with empty ones. This script merely passes the appropriate parameters to replaceobjects.sqf and is intended only to give more variety and a more middle eastern feel to the old Fallujah map. Change it according to your preferences. Instructions: Launch this script by placing this line on a gamelogic init: [] execVM "Fallujahreplacer.sqf" */ rpl_init = 200; rpl_limit = 3000; notree = 20; palms = 0.03; poplar = 0.5; olives = 0.05; [player, 4000] execvm "trees.sqf"; fallujahdebug = false; //building replacement lines _bldreplace = { private ["_time0","_time1","_time2","_time3","_time4","_time5","_time6","_time7","_time8","_time9","_time10","_time11","_time12","_time13"]; _time0 = time; //yellow apartment buildings sph = [replacer, radius,["house"],["Land_Dum_istan4","Land_Dum_istan4_big"], ["rso_complex1","rso_complex2","rso_complex3","rso_complex4"], 180,false,0.1] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time1 = time; //house with arches small and hut with no interior sph = [replacer,radius,["HOUSE"],["Land_Dum_istan2","Land_Dum_olez_istan2"], ["rso_construct3","rso_complex5","rso_complex6","rso_h1","rso_h10","rso_h19","rso_shop3","rso_shop3b","rso_apartmentcomplex","rso_garages","rso_garage1","Land_villa_b","Land_villa"],0,false,1,[12,16]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time2 = time; //cubic buildings with interior sph = [replacer,radius,["BUILDING","HOUSE"],["Land_Dum_olez_istan2_maly2","Land_Dum_olez_istan2_maly"], ["rso_hut1","rso_hut2","rso_hut4","rso_stores","rso_shack"],0,false,1,[8,10]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time3 = time; //old building very large sph = [replacer,radius,["BUILDING","HOUSE"],["Land_Dum_istan2_02"], ["rso_big_f"],270,false,1] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time4 = time; //old buildings single piece and double piece [replacer, radius,["BUILDING"],["Land_Dum_istan2_01","Land_Dum_istan2_03","Land_Dum_istan2_03a"], ["Land_House_C_10_EP1","rso_stores2","rso_stores3","rso_shop1"],0,false,1] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time5 = time; //brown house small sph = [replacer, radius,["HOUSE","BUILDING"],["Land_Dum_istan3_pumpa"], ["rso_store1","Land_House_C_4_EP1","Land_Unfinished_Building_01_F"], 0,false,0.5] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time6 = time; //old house no interior sph = [replacer, radius,["BUILDING"],["dum_mesto3_istan.p3d"], ["Land_17str","Land_17strb","rso_h20","rso_h21","Land_14str","Land_Unfinished_Building_02_F"],90,false] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time7 = time; //brown house big sph = [replacer, radius,[],["Land_Dum_istan3_hromada2"], ["rso_h17","Land_5str","Land_villa","Land_6str","Land_villa3","Land_villa_b"], 0,false,0.5] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time8 = time; //house with arches big sph = [replacer, radius,["house"],["Land_Dum_istan3"], ["rso_h18","Land_16str","Land_7str","Land_22str","rso_h6","rso_h15"], 90,false,0.5,[22.7,22.9]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time9 = time; //house without classname (parasol) sph = [replacer, radius,[],["dum_olez_istan1_open.p3d"], ["Land_House_C_1_EP1","Land_House_C_1_v2_EP1","rso_cornershop1","Land_21str","Land_21str_b","Land_21str_c"]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time10 = time; //chernarusian billboards sph = [replacer, radius,[],[], ["Land_Billboard_F"],0,false,1,[6.00262,6.00264]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time11 = time; //phonebooth sph = [replacer, radius,[],["phone_box.p3d"], ["Land_GarbageHeap_02_F"]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time12 = time; //dumpster sph = [replacer, radius,[],["kontejner.p3d"], ["Land_ChairPlastic_F","Oil_Spill_F", "Land_Plank_01_4m_F","Land_CratesPlastic_F","Land_CanisterFuel_Blue_F","Land_BarrelEmpty_F","Land_BarrelTrash_grey_F","Land_MetalBarrel_empty_F"]] execVM "replaceobjects.sqf"; waituntil {scriptdone sph}; _time13 = time; if FALLUJAHDEBUG then { copytoclipboard format ["script call start; %1; times; %2; %3; %4; %5; %6; %7; %8; %9; %10; %11; %12; %13; %14",_time0,_time1,_time2,_time3,_time4,_time5,_time6,_time7,_time8,_time9,_time10,_time11,_time12,_time13]; systemchat "script times copied to clipboard"; }; }; //loop function to call _bldreplace function in expanding radius _loopfnc = { while {radius < rpl_limit} do { radius = radius + 100; if (rpldebug) then {systemchat "new loop"; systemchat str radius}; call _bldreplace; }; }; systemchat "fallujah replacement script, assets by RSO, CUP and OPX"; //define initial radius replacer = player; radius = rpl_init; call _bldreplace; sleep 3; call _loopfnc; This is the replaceobjects.sqf script itself, now it can also receive model names when an object class doesn't work, I got that idea from one of the scripts you posted Spoiler /* Replaceobjects.sqf by b3lx. This script replaces terrain objects randomly chosen out of a defined array. Good for batch changes in terrains like replacing tree types, houses or other objects. ---> FEATURES: >FOUR OPTIONS FOR SELECTING OBJECS TO REPLACE: -TYPES, such as "TREE","BUSH" or "HOUSE", can be used alone or together with the next options. -CLASSNAMES, -MODELNAMES, some objects can't be found by classname, use this method instead -SIZE, replace objects of in the same size interval >USE ONE OR MORE OBJECTS TO BE RANDOMLY SELECTED AS REPLACERS OR NONE JUST TO HIDE THEM >CAN BE USED IN A LOOP AND IT WILL NOT REPLACE PREVIOUSLY REPLACED OBJECTS (GOOD FOR LARGE AREAS) ---> OPTIONS: >OPTION TO DEFINE A SPECIFIED DIRECTION ANGLE FOR REPLACERS >OPTION TO CHOOSE IF HIDDEN OBJECTS SHOULD BE REPLACED OR NOT >OPTION TO SPECIFY A PROBABILITY FOR OBJECTS TO BE REPLACED, CAN BE USED TO MAKE SUCCESSIVE PARTIAL REPLACEMENTES OF THE SAME OBJECTS BY DIFFERENT REPLACERS. >OPTION TO APPLY CODE TO EACH REPLACER OBJECT, FOR EXAMPLE TO DISABLE ITS SIMULATION >OPTION TO USE A DIFFERENT OBJECT IF THE TERRAIN IS TOO SLOPE ---> ARGUMENTS: - _pos = the center position of the area to include. - _radius = limits the max search range - _type = (optional) lists the types of objects the script should filter for. if empty it uses classnames passed through _oldobjlist - _oldobjlist = (optional) object classes or model names (p3d) to replace; - _newobjlist = object classes for replacement - _customdir = (optional) leave empty ("") or define aditional rotation angle for new objects. - _hidden = (optional) if true replacing includes hidden objects, default is false; - _percent = (optional) random percentage of matching object to replace, default is 1; - _sizefilter = (optional) array that defines minimum and maximum size values for object to be filtered. Useful when types or classnames don't work or if you want to use diferent replacements for different sized objects. Use [0,100] if you don't want to filter. See note below. - _code = (optional) custom code to be executed on each object, default is {}; - _altreplacer = classes to use when terrain slope is greater than 18 degrees (check isflatempty below). IF empty or false its not used. If true uses classes defined below in _altreplacerdefaul, otherwise use an array with desired classes. ------------------------------------------------ NOTE: Size is measured as the space diagonal of the object's boundingBoxReal. Use this in 3den to measure the nearest object to the player: _obj = (nearestTerrainObjects [player,[],5,true]) select 0; systemchat str ((boundingBoxReal _obj select 1 select 0) - (boundingBoxReal _obj select 0 select 0));------------------------------------------------- ---> SETTINGS: - RPLmarkers = global variable that sets markers for each replacement and message with number of replacements.Default is false. It slows the process. - RPLdebug = global variable that shows some debug info. Default is false. --->EXAMPLES: Example 1: replaces all "Land_House_L_6_EP1" houses WITHIN 200 meters from player with two RSO buildings rotated 180 degrees and disables their simulation [player,200,[],["Land_House_L_6_EP1"],["rso_h21","rso_hut3"],180,true,1,[0,100], {_this disableSimulation true},false] execVM "replaceobjects.sqf"; ---------------------------- Example 2: replaces 20% of houses in the map between 0 and 10 size with two RSO buildings or rubble if the terrain is too sloped [[worldsize select 0, worldsize select 1], (worldsize select 0) / 2,["house"],[],["rso_h21","rso_hut3"],0,true,0.2,[0,10], {},["Land_Fortress_01_bricks_v1_F"]] execVM "replaceobjects.sqf"; ---------------------------- Example 3: replaces all houses in the map with two RSO buildings [[player, worldsize,["house"],[],["rso_h21","rso_hut3"]] execVM "replaceobjects.sqf"; ---------------------------- Example 4: replaces all billboards in fallujah map with empty ones [replacer, radius,[],[], ["Land_Billboard_F"],0,true,1,[6.00263,6.00264]] execVM "replaceobjects.sqf"; ---------------------------- List of types that can be filtered by, according to BIS: "TREE", "SMALL TREE", "BUSH", "object", "HOUSE", "FOREST BORDER", "FOREST TRIANGLE", "FOREST SQUARE", "CHURCH", "CHAPEL", "CROSS", "BUNKER", "FORTRESS", "FOUNTAIN", "VIEW-TOWER", "LIGHTHOUSE", "QUAY", "FUELSTATION", "HOSPITAL", "FENCE", "WALL", "HIDE","BUSSTOP", "ROAD", "FOREST", "TRANSMITTER", "STACK", "RUIN", "TOURISM", "WATERTOWER", "TRACK", "MAIN ROAD","ROCK", "ROCKS", "POWER LINES", "RAILWAY", "POWERSOLAR", "POWERWAVE", "POWERWIND", "SHIPWRECK", "TRAIL" */ private ["_objArray","_filteredArray","_probarray","_readyarray","_altreplacerdefault","_slctrl","_pos","_radius","_type","_oldobjlist","_newobjlist","_customdir","_hidden","_percent","_sizefilter","_code","_altreplacer"]; params ["_pos","_radius","_type","_oldobjlist","_newobjlist","_customdir","_hidden","_percent","_sizefilter","_code","_altreplacer","_rplcount"]; //DEFAULT DEBUG VALUES if (isNil "rpldebug") then {rpldebug = false}; if (isNil "rplmarkers") then {rplmarkers = false}; //DEBUG MESSAGES if RPLdebug then {systemchat "replaceobjects.sqf"}; if rpldebug then {systemchat format ["center = %1", _pos]}; //SETS DEFAULT VARIABLES IF UNDEFINED BY USER if (isNil "_customdir") then {_customdir = 0}; if (isNil "_hidden") then {_hidden = false}; if (isNil "_percent") then {_percent = 1}; if (isNil "_code") then {_code = {}}; if (isNil "exclusionlist") then {exclusionlist = []}; if (isNil "_rplcount") then {_rplcount = 0}; //FINDS OBJECTS ACCORDING TO TYPE AND PUTS THEM IN AN ARRAY _objArray = []; if (count _oldobjlist == 0) then { _objArray = nearestTerrainObjects [_pos, _type, _radius, false]; } else { _fullarray = nearestTerrainObjects [_pos, _type, _radius, false]; {if ((typeOf _x in _oldobjlist) or ((getModelInfo _x select 0) in _oldobjlist)) then {_objArray pushback _x}} forEach _fullarray; }; //FILTERS ARRAY ACCORDING TO MIN AND MAX SIZE DEFINED IN _SIZEFILTER if (isNil "_filteredArray") then {_filteredArray = []}; if (!isNil "_sizefilter") then { _sizeA = _sizefilter select 0; _sizeB = _sizefilter select 1; {if (((boundingboxREAL _x select 1 select 0) - (boundingboxREAL _x select 0 select 0) > _sizeA) && ((boundingboxREAL _x select 1 select 0) - (boundingboxREAL _x select 0 select 0) < _sizeB)) then { _filteredArray pushback _x}} forEach _objArray; } else { _filteredArray = _objArray; }; //HOUSES TO USE IF TERRAIN SLOPE IS TOO STEEP FOR SPECIFIED ONES. DEFAULT VALUES ARE USED IF _ALTREPLACER IS SET TO TRUE. _altreplacerdefault = [""]; _altreplacer = true; if (isNil "_altreplacer" || !_altreplacer) then {_slctrl = false} else { _slctrl = true; if _altreplacer then {_altreplacer = _altreplacerdefault}; }; //FILTERS THE ARRAY ACCORDING TO SELECTION PROBABILITY SPECIFIED IN _PERCENT if (isNil "_probArray") then {_probArray = []}; if ((isNil "_percent") or (_percent == 1)) then { _probArray = _filteredArray; } else { { if ((_percent * 100) > random 100) then { _probArray pushback _x; }; } forEach _filteredArray; }; //CREATES A NEW ARRAY BY FILTERING OUT ALREADY CHECKED OBJECTS IN CASE THE SCRIPT IS RUN IN A LOOP, SKIPPING PREVIOUSLY CHECKED OBJECTS. IF THE OBJECT WAS SELECTED FOR REPLACEMENT BY A PREVIOUS ITERATION OF THIS SCRIPT IT WILL BE EXCLUDED FORM THE NEXT ITERATIONS. if (isNil "_readyArray") then {_readyArray = []}; {if !(_x in exclusionlist) then {_readyArray pushback _x}} forEach _probArray; //FUNCTION THAT REPLACES THE OBJECT--------------------------------------- _replaceobject = { params ["_oldobject", "_replacer"]; private ["_newobject"]; _position = getPosATL _oldobject; _direction = direction _oldobject; _oldobject hideObjectGlobal true; //checks if slope filter is used and selects from which array of objects (normal or for sloped terrain) to create new object if (_replacer == "") then {} else { if (!_slctrl) then { _newobject = _replacer createVehicle _position; } else { if (position _oldobject isFlatEmpty [-1, -1, 0.4, 1, 0, false] isEqualto []) then { _newobject = (selectRandom _altreplacer) createVehicle _position; _customdir = 0; } else { _newobject = _replacer createVehicle _position; }; }; //positions new created object on floor, adding custom direction and vertical orientation _newobject setPosATL [_position select 0, _position select 1, 0]; if (_customdir isEqualto "random") then {_customdir = random 360}; _newobject setDir _direction + _customdir; _newobject setvectorUp [0,0,1]; //calls code specified in arguments _newobject call _code; }; //places debug markers if debug markers are on _rplcount = _rplcount + 1; if (rplmarkers) then { _mrk = createMarker [str _rplcount,_position]; _mrk setMarkerShape "ICON"; _mrk setMarkerType "hd_dot"; }; }; //THIS CALLS THE REPLACEMENT FUNCTION WHILE CHECKING IF HIDDEN OBJECTS ARE TO BE REPLACED OR EXLCUDED if _hidden then { {[_x, (selectRandom _newobjlist)] call _replaceobject} forEach _readyArray; } else { { if (!(isObjectHidden _x)) then {[_x, (selectRandom _newobjlist)] call _replaceobject} } forEach _readyArray; }; //ADD LIST OF OBJECTS TO REPLACE TO EXCLUSION LIST FOR NEXT ITERATIONS {exclusionlist pushback _x} forEach _readyarray; //DEBUG MESSAGE REPORTING THE NUMBER OF REPLACEMENTS if RPLdebug then {systemchat format ["script replaced %1 objects", _rplcount]}; //THIS KEEPS COUNT OF REPLACED OBJECTS ACROSS VARIOUS ITERATIONS OF THE SCRIPT if (isNil "globalrplcount") then {globalrplcount = 0}; globalrplcount = globalrplcount + _rplcount; And this is another just for the trees. This one is quite fast but the other is very very slow, so I run it a loop with increasing distance Spoiler private ["_center","_radius","_replacer","_pos","_last"]; if (isNil "olives") then {olives = 0.1}; if (isNil "poplar") then {poplar = 0.1}; if (isNil "poplars") then {poplars = 0.1}; if (isNil "palms") then {palms = 0.1}; if (isNil "palms") then {palms = 0.1}; if (isNil "notree") then {notree = 0.1}; systemchat "tree replacement script"; _center = _this select 0; _radius = _this select 1; _replacer = [ "t_oleae1s_f", olives, "CUP_str_Topol2", poplar, "CUP_t_JuniperusC2s_EP1",poplars, "t_phoenixc1s_f", palms, "t_phoenixc3s_f", palms, "", notree ]; private ["_treeArray"]; _treeArray = nearestTerrainObjects [_center,["tree"], _radius, true]; _last = (count _treearray) -1; { if !(isObjectHidden _x) then { _pos = getposATL _x; _x hideobjectglobal true; _dir = getdir _x; _newobj = createsimpleobject [(selectrandomweighted _replacer),[0,0,0]]; _newobj setposatl _pos; _newobj setdir _dir; if (_x == (_treearray select _last)) then { systemchat format ["%1 trees replaced", (count _treearray)]; } else { _x hideobjectglobal true; }; }; } forEach _treearray; private ["_busharray","_modelarray"]; _busharray = nearestTerrainObjects [_center,["bush"],_radius,true]; _modelarray = ["cype_brg_bird_1.p3d","cype_brg_bird_3.p3d"]; { if (((getModelInfo _x) select 0) in _modelarray) then { _x hideobjectglobal true; }; } forEach _busharray; I hadn't released it because it's a bit of a mess and lacks appropriate comments but if you put these scripts on the mission folder, place a player on the map and put "[] execVM "fallujahreplacer.sqf" on the init or on a game logic it should work. Here is an example with this script and just a few mosques added, only photo I have for the moment. Any advice is appreciated. Cheers! https://i.imgur.com/U6uG1nS.jpg 1 Share this post Link to post Share on other sites
GEORGE FLOROS GR 4207 Posted June 27, 2018 1 hour ago, b3lx said: fallujahreplacer.sqf Thank you very much b3lx ! 1 Share this post Link to post Share on other sites