Jump to content

shurix

Member
  • Posts

    119
  • Joined

  • Last visited

Posts posted by shurix

  1. I found myself jumping around the map and cleaning-up abandoned vehicles with broken wheels/engine.

     

    I decided to write a script that adds a "Remove Vehicle" action to every vehicle on the map.

     

    Player needs to have a Jack for the script to work. Player comes to a vehicle (open or locked). Scroll mouse wheel to see Remove Vehicle action. Script gives 5 seconds for the player to change his mind. Vehicle is removed and change is pushed to the database. Depending on the amount of damage the script drops Vehicle Repair or Salvage Metal items instead of the vehicle. For larger vehicles like a helicopter or a support truck it also produces a Vehicle Repair Kit.

     

    Add this line into mpmissions\epoch.Altis\init.sqf

    //vehicle actions
    [] execVM "custom\vehicle_actions.sqf";
    

    Here's the contents of custom\vehicle_actions.sqf

    systemChat(format["Vehicle Actions are loading. Please wait..."]);
    {
    		_x addAction ["<t color=""#ff0000"">Remove vehicle</t>","custom\remove_vehicle.sqf",[_x],0,false,true,"",""];
    } forEach (vehicles);
    
    systemChat(format["Finished loading Vehicle Actions"]);
    

    Here's the actual file that removes the vehicle.

    custom\remove_vehicle.sqf

    private ["_vehSlot","_hasToolbox","_mags","_percent","_vehiclePosition","_remainingDamage","_damage","_part05","_part02","_part01","_vehicle","_hitpoints","_vehSlot","_vehHiveKey","_VAL","_box"];
    
    _vehicle = _this select 0;
    _vehicle_type = (typeOf _vehicle);
    _isTruck = _vehicle isKindOf "Support";
    _isHeli = _vehicle isKindOf "Helicopter";
    
    _partTruckHeli = "VehicleRepairLg";
    _part05 = "VehicleRepair";
    _part02 = "ItemCorrugatedLg";
    _part01 = "ItemCorrugated";
    
    _hasToolbox = false;
    _mags = magazines player;
    _hasToolbox = "JackKit" in _mags;
    
    _hitpoints = _vehicle call EPOCH_getHitpoints;
    _damage = damage _vehicle;
    _remainingDamage = 1 - _damage;
    _vehiclePosition = getPos _vehicle;
    
    //hint format["_damage=%1 \n _remainingDamage=%2 \n _hasToolbox=%3",_damage,_remainingDamage,_hasToolbox];
    	
    if (_hasToolbox) then {
    
    	_cnt = 5;
    	_locationPlayer = (getPosATL player);
    	for "_p" from 1 to 5 do
    	{
    		systemChat(format ["WARNING! Removing vehicle in %1s - Move to cancel",_cnt]);
    		if (player distance _locationPlayer > 0.2) then {
    			systemChat("Removing vehicle canceled");
    			breakOut "exit";
    		};
    		sleep 1;
    		_cnt = _cnt - 1;
    	};
    	
    	player playActionNow "Medic";
    	
    	//systemChat(format["b4 deleting _vehicle=%1",_vehicle]);
    	
    	_vehSlot=_vehicle getVariable["VEHICLE_SLOT","ABORT"];
    	if(_vehSlot !="ABORT") then {
    		removeFromRemainsCollector[_vehicle];
    		deleteVehicle _vehicle;
    		_vehHiveKey=format["%1:%2",(call EPOCH_fn_InstanceID),_vehSlot];
    		_VAL=[];
    		["Vehicle",_vehHiveKey,_VAL]call EPOCH_server_hiveSET;
    		EPOCH_VehicleSlots pushBack _vehSlot;
    		EPOCH_VehicleSlotCount=count EPOCH_VehicleSlots;
    		publicVariable "EPOCH_VehicleSlotCount";
    	};
    	
    	sleep 2;
    	
    	//systemChat(format["_vehiclePosition=%1",_vehiclePosition]);
    	
    	if (_remainingDamage > 0.1) then {
    		_box = createVehicle ["groundWeaponHolder",[(_vehiclePosition select 0),(_vehiclePosition select 1),0.01], [], 0, "CAN_COLLIDE"];
    		_box setVariable ["ObjectID","1",true];
    		_box setVariable ["permaLoot",true];
    	};
    
    	while {_remainingDamage > 0.1} do {
    		
    		if ((_remainingDamage >= 0.1) && (_remainingDamage < 0.2)) then {
    			_box addMagazineCargoGlobal [_part01, 1];
    			//systemChat "added ItemCorrugated";
    			_remainingDamage = _remainingDamage - ((random 3)/10);
    		};
    		
    		if ((_remainingDamage >= 0.2) && (_remainingDamage <= 0.5)) then {
    			_box addMagazineCargoGlobal [_part02, 1];
    			//systemChat "added ItemCorrugatedLg";
    			_remainingDamage = _remainingDamage - ((random 5)/10);
    		};
    		
    		if (_remainingDamage > 0.5) then {
    			if ((_isTruck) || (_isHeli)) then {
    				_box addMagazineCargoGlobal [_partTruckHeli, 1];
    				//systemChat "added VehicleRepairLg";
    			};
    			_box addMagazineCargoGlobal [_part05, 1];
    			//systemChat "added VehicleRepair";
    			_remainingDamage = _remainingDamage - ((random 10)/10);
    		};
    		
    		sleep 3;
    		//systemChat(format["_remainingDamage=%1",_remainingDamage]);
    	};
    	
    	player switchMove "";
        player playActionNow "stop";
    	
    } else {
    	systemChat(format["You need a Jack Tool Kit to remove this vehicle"]);
    };
    
    

    The script works great.

    Enjoy!

  2. I'm looking for an empty slot in the database and saving my mission vehicle there. I take no credit for this code, most of the pieces came from Epoch/Skoronator code.

     

    If there are no empty slots, I look for a boat or a kart, delete it from the map and reuse the slot in the database with the mission vehicle.

     

    This is not perfect, but I did not find a way to add a new vehicle slot in the database (yet).

    _instanceID = call EPOCH_fn_InstanceID;
    diag_log format["WAI: _instanceID:%1",_instanceID];
    diag_log format["WAI: EPOCH_VehicleSlotCount:%1",EPOCH_VehicleSlotCount];
    diag_log format["WAI: EPOCH_VehicleSlots:%1",EPOCH_VehicleSlots];
    // _allowedVehicleList = EPOCH_allowedVehiclesList;
    // diag_log format["WAI: EPOCH_allowedVehiclesList:%1",_allowedVehicleList];
    _vehObj = _this;
    _randomVehicleIndex = -1;
    
    if (EPOCH_VehicleSlotCount==0) then {
    	
    	if (!isNil "EPOCH_allowedVehiclesList") then {
    		_countAllowedVeh=count EPOCH_allowedVehiclesList;
    		_randomVehicleIndex=floor(random(_countAllowedVeh));
    		_randomVehicle=EPOCH_allowedVehiclesList select _randomVehicleIndex;
    		_vehClass=_randomVehicle select 0;
    		_velimit=_randomVehicle select 1;
    		_vehicleCount={typeOf _x==_vehClass}count vehicles;
    		if(_vehicleCount >=_velimit)then{
    			EPOCH_allowedVehiclesList deleteAt _randomVehicleIndex;
    		} else {
    			if(_vehicleCount==(_velimit-1))then{
    				EPOCH_allowedVehiclesList deleteAt _randomVehicleIndex;
    			};
    		};
    	} else {
    		// _randomVehicleIndex=floor(random(count vehicles));
    		// _randomVehicle=vehicles select _randomVehicleIndex;
    		_vehlist = nearestObjects [position _vehObj, ["C_Rubberboat_EPOCH","C_Rubberboat_02_EPOCH","C_Rubberboat_03_EPOCH","C_Rubberboat_04_EPOCH""C_Boat_Civil_01_EPOCH","K01","K02","K03","K04","jetski_epoch"], 10000];
    		diag_log format["WAI: count _vehlist:%1 | _randomVehicle:%2",count _vehlist,_vehlist select 0];
    		_vehToDelete = _vehlist select 0;
    		_randomVehicleIndex = _vehToDelete getVariable["VEHICLE_SLOT","ABORT"];
    		deleteVehicle _vehToDelete;
    	};
    
    };
    _slot = "";
    if !(EPOCH_VehicleSlots isEqualTo[]) then {
    	_slot = EPOCH_VehicleSlots select 0;
    	EPOCH_VehicleSlots = EPOCH_VehicleSlots - [_slot];
    	EPOCH_VehicleSlotCount = count EPOCH_VehicleSlots;
    	publicVariable 'EPOCH_VehicleSlotCount';
    } else {
    	diag_log format["WAI: _slot = _randomVehicleIndex:%1",_randomVehicleIndex];
    	_slot = _randomVehicleIndex;
    };
    	
    if (str(_slot) != "") then {
    	_vehObj setVariable["VEHICLE_SLOT",_slot,true];
    
    	private["_aa","_ab","_ac","_ad","_ae","_af","_ag","_ah","_ai","_aj","_ak","_al","_am","_an","_ao","_ap","_aq","_ar"];
    	if(!isNull _vehObj) then {
    		_aa=_vehObj;
    		// _ac=_vehObj getVariable["VEHICLE_SLOT","ABORT"];
    		// if(_ac !="ABORT")then{
    			_ad=format["%1:%2",(call EPOCH_fn_InstanceID),_slot];
    			_aj=[];
    			_ak=_aa call EPOCH_getHitpoints;
    			{
    				_aj pushBack(_aa getHitPointDamage _x);
    			}forEach _ak;
    			_wepsItemsCargo=weaponsItemsCargo _aa;
    			if(isNil "_wepsItemsCargo")then{
    				_wepsItemsCargo=[];
    			};
    			_magsAmmoCargo=magazinesAmmoCargo _aa;
    			if(isNil "_magsAmmoCargo")then{
    				_magsAmmoCargo=[];
    			};
    			_aq=[[],[]];
    			{
    				_ar=_aq find(_x select 0);
    				if(_ar >=0)then{
    				(_aq select 1)set[_ar,((_aq select 1)select _ar)+(_x select 1)];}
    				else{(_aq select 0)pushBack(_x select 0);(_aq select 1)pushBack(_x select 1);};
    			}forEach _magsAmmoCargo;
    			_al=[_wepsItemsCargo,_aq,getBackpackCargo _aa,getItemCargo _aa];
    			_ap=_aa getVariable["VEHICLE_TEXTURE",0];
    			_am=[typeOf _aa,[getposATL _aa,vectordir _aa,vectorup _aa],damage _aa,_aj,fuel _aa,_al,magazinesAmmo _aa,_ap];
    			["Vehicle",_ad,EPOCH_expiresVehicle,_am] call EPOCH_server_hiveSETEX;
    		//};
    	};
    
    	_vehObj call EPOCH_server_vehicleInit;
    
    };
    
  3. I noticed same behavior sometimes after server restarts and a player comes back to base. What I think happens is that Arma is trying to initialize the vehicles by setting vehicle's direction to north and then back to the direction set in the database record. I lost several HEMMIT trucks this way because they were sitting too close to each other. Nowadays, I keep my vehicles away from any buildings and other vehicles. All pointed north when parked for the night too.

  4. My problem remains. Whatever manual changes are done to the database, are not saved.
    I'm following these steps:
    I would shut down the game server. Copy dump and append file to my PC via FTP. I would mount the database by copying the files to Redis\data folder and I would start Redis service. I open the database using Redis Desktop Manager. I would execute BGREWRITEAOF command in the console first to apply all pending changes from the append file. Then I would make my changes (e.g. add constructions materials to all traders). I would then issue "shutdown save" command in the RDM console. This commits all changes and stops Redis service. I would then copy the updated database files back to the server and start the game server. Once in the game, I do not see any of the construction materials I added in trader's pockets.
    It seems to me that I may be missing a step or the database changes somehow remain uncommitted at some point.
    I appreciate any hints you can provide.
  5. My Redis service is supposedly stops when server stops. So I would upload the updated dump file and then start the server. But there is no change for traders. Maybe 250 * 3 units of construction materials is too much for them to hold? I'll try with a smaller amount...

  6. But you can easy make an script that updates the database :)

    I just made one so I could get food, drinks and building mat in the shop

     

    itsatrap, I don't have database access (yet) from my GTXGaming host. So I download dump.rdb and mount it locally to make database changes. I updated every trader with building material using the following update command: SET AI_ITEMS:8204:4 [["CinderBlocks","MortarBucket","PartPlankPack"],[255,255,255]] My problem is that when I upload the database file back on my server, my traders still have nothing in their pockets. Is there a trick I need to do to commit my changes or something?
  7.  

    then i can use your script below. so the skins that i added for bandit class will give players + humanity while the goodguy ones will give them - ?

    private ["_unit","_player","_humanity","_banditkills","_aiskin","_add_humanity_var","_goodskintest","_badskintest"];
    _unit = _this select 0;
    _player = _this select 1;
    _type = _this select 2;
    
    switch (_type) do {
    	case "ground" : {ai_ground_units = (ai_ground_units -1);};
    	case "air" : {ai_air_units = (ai_air_units -1);};
    	case "vehicle" : {ai_vehicle_units = (ai_vehicle_units -1);};
    	case "static" : {ai_emplacement_units = (ai_emplacement_units -1);};
    };
    
    _unit setVariable ["killedat", time];
    _aiskin = typeOf _unit;
    
    if (isPlayer _player) then {
    	private ["_banditkills","_humanity"];
    	_humanity = _player getVariable["humanity",0];
    	_banditkills = _player getVariable["banditKills",0];
    	if (ai_humanity_gain) then {
    		if(_aiskin in ["RU_Policeman_DZ","Pilot_EP1_DZ","Haris_Press_EP1_DZ","Functionary1_EP1_DZ","Rocker1_DZ","Rocker2_DZ","Rocker3_DZ","Rocker4_DZ","FR_OHara_DZ","Priest_DZ","FR_Rodriguez_DZ","Villager1","Doctor","gsc_scientist1"] ) then
    		{
    			diag_log format["WAI: Good Guy was killed, Humanity Lost %1",ai_add_humanity];
    			_player setVariable ["humanity",(_humanity - ai_add_humanity),true];
    		};
    		if(_aiskin in ["Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Camo1_DZ","Sniper1_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_2_DZ","Ins_Soldier_GL_DZ","GUE_Commander_DZ","TK_INS_Warlord_EP1_DZ","TK_INS_Soldier_EP1_DZ","Soldier_Sniper_PMC_DZ","Soldier_TL_PMC_DZ","CZ_Soldier_Sniper_EP1_DZ","Graves_Light_DZ","Bandit2_DZ","gsc_eco_stalker_mask_duty","gsc_military_helmet_wdl","gsc_military_helmet_grey_AT","gsc_military_head_grey","gsc_eco_stalker_head_fred","gsc_eco_stalker_head_camo1"] ) then
    		{
    			diag_log format["WAI: Bad Guy was Killed, Humanity Added %1",ai_add_humanity];
    			_player setVariable ["humanity",(_humanity + ai_add_humanity),true];
    		};
    	};
    	if (ai_banditkills_gain) then {
    		_player setVariable ["banditKills",(_banditkills + 1),true];
    	};
    	if (ai_clear_body) then {
    		{_unit removeMagazine _x;} forEach (magazines _unit);
    		{_unit removeWeapon _x;} forEach (weapons _unit);
    	};
    	if (ai_ahare_info) then {
    		{if (((position _x) distance (position _unit)) <= ai_share_distance) then {_x reveal [_player, 4.0];}} forEach allUnits;
    	};
    };
    

     

    that's correct. you will notice that in my code I have all kinds of skins. many more then I added into the arrays for you. the ones I added in the arrays for you are legit Epoch skins. the other ones like "gsc_eco_stalker_head_fred" are from addons that we run on our server. It doesn't matter though. Because as long as your GoodGuys always wear one of these: "RU_Policeman_DZ","Pilot_EP1_DZ","Haris_Press_EP1_DZ","Functionary1_EP1_DZ","Rocker1_DZ","Rocker2_DZ","Rocker3_DZ","Rocker4_DZ","FR_OHara_DZ","Priest_DZ","FR_Rodriguez_DZ","Villager1","Doctor","gsc_scientist1"

    a kill will deduct 50 humanity from the player

  8. can you help me with this? i dont have much experience in scripting.

     

    First, add these two arrays at the bottom of your AIconfig.sqf

    /// Skins used when "Bandit"  ///
    bandit_skin = [
    "Bandit1_DZ",
    "BanditW1_DZ",
    "BanditW2_DZ",
    "Camo1_DZ",
    "Sniper1_DZ",
    "CZ_Soldier_Sniper_EP1_DZ",
    "Graves_Light_DZ",
    "Bandit2_DZ"
    ];
    
    /// Skins used when "GoodGuy" ///
    goodguy_skin = [
    "RU_Policeman_DZ",
    "Pilot_EP1_DZ",
    "Haris_Press_EP1_DZ",
    "Functionary1_EP1_DZ",
    "Rocker1_DZ",
    "Rocker2_DZ",
    "Rocker3_DZ",
    "Rocker4_DZ",
    "FR_OHara_DZ",
    "FR_Rodriguez_DZ",
    "Villager1",
    "Villager2"
    ];
    

    in WAI\compiled\SpawnGroup.sqf find this section

    if (_skin == "") then {
    		_aiskin = ai_skin call BIS_fnc_selectRandom;
    	} else {
    		_aiskin = _skin
    	};
    

    and replace it with 

    	_aiskin = _skin;
    	if (_skin == "") then {
    		_aiskin = ai_skin call BIS_fnc_selectRandom;
    	};
    	if (_skin == "Bandits") then {
    		_aiskin = bandit_skin call BIS_fnc_selectRandom;
    	};
    	if (_skin == "GoodGuys") then {
    		_aiskin = goodguy_skin call BIS_fnc_selectRandom;
    	};
    

    Now when you spawn a group you can specify Bandits, GoodGuys or "" for random

  9. are the random skins defined somewhere else? if so can i create another list called Bandits and then make a list of all the bandits? like what random does?

     

    AIConfig.sqf defines an array called ai_skin

    this array is used in WAI\compiled\SpawnGroup.sqf

    	if (_skin == "") then {
    		_aiskin = ai_skin call BIS_fnc_selectRandom;
    	} else {
    		_aiskin = _skin
    	};
    

    I think you can easily define a new array called Bandits and send that into spawn_group (below). Just need to check for that value in the code above to pull from your custom array.

    [[_position select 0, _position select 1, 0],3,1,"Random",4,"","Bandits","Random",true] call spawn_group;
    
  10. how do i make it so that only 1 type of skin A.I spawns, so a civil heli mission wont have bandit skin a.i or a military heli wont have civil ai?

     

    You specify that in the mission file when spawning the group. "Villager1" instead of "Random" gives you a group of "farmers"

    [[_position select 0, _position select 1, 0],3,1,"Random",4,"","Villager1","Random",true] call spawn_group;
    
  11. I also distinguish bots wearing different skins. For example, if you come to a Civil Chopper mission where a bunch of farmers are running around with guns, you are actually killing innocent people and so you will gain -50 humanity. For killing bots wearing a military uniform you gain +50 humanity.

    This helps folks on my server maintain Hero/Bandit status without any PvP involved.

    The check is added in WAI\compiled\ai_killed.sqf by checking on unit object _type (skin),

    private ["_unit","_player","_humanity","_banditkills","_aiskin","_add_humanity_var","_goodskintest","_badskintest"];
    _unit = _this select 0;
    _player = _this select 1;
    _type = _this select 2;
    
    switch (_type) do {
    	case "ground" : {ai_ground_units = (ai_ground_units -1);};
    	case "air" : {ai_air_units = (ai_air_units -1);};
    	case "vehicle" : {ai_vehicle_units = (ai_vehicle_units -1);};
    	case "static" : {ai_emplacement_units = (ai_emplacement_units -1);};
    };
    
    _unit setVariable ["killedat", time];
    _aiskin = typeOf _unit;
    
    if (isPlayer _player) then {
    	private ["_banditkills","_humanity"];
    	_humanity = _player getVariable["humanity",0];
    	_banditkills = _player getVariable["banditKills",0];
    	if (ai_humanity_gain) then {
    		if(_aiskin in ["RU_Policeman_DZ","Pilot_EP1_DZ","Haris_Press_EP1_DZ","Functionary1_EP1_DZ","Rocker1_DZ","Rocker2_DZ","Rocker3_DZ","Rocker4_DZ","FR_OHara_DZ","Priest_DZ","FR_Rodriguez_DZ","Villager1","Doctor","gsc_scientist1"] ) then
    		{
    			diag_log format["WAI: Good Guy was killed, Humanity Lost %1",ai_add_humanity];
    			_player setVariable ["humanity",(_humanity - ai_add_humanity),true];
    		};
    		if(_aiskin in ["Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Camo1_DZ","Sniper1_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_2_DZ","Ins_Soldier_GL_DZ","GUE_Commander_DZ","TK_INS_Warlord_EP1_DZ","TK_INS_Soldier_EP1_DZ","Soldier_Sniper_PMC_DZ","Soldier_TL_PMC_DZ","CZ_Soldier_Sniper_EP1_DZ","Graves_Light_DZ","Bandit2_DZ","gsc_eco_stalker_mask_duty","gsc_military_helmet_wdl","gsc_military_helmet_grey_AT","gsc_military_head_grey","gsc_eco_stalker_head_fred","gsc_eco_stalker_head_camo1"] ) then
    		{
    			diag_log format["WAI: Bad Guy was Killed, Humanity Added %1",ai_add_humanity];
    			_player setVariable ["humanity",(_humanity + ai_add_humanity),true];
    		};
    	};
    	if (ai_banditkills_gain) then {
    		_player setVariable ["banditKills",(_banditkills + 1),true];
    	};
    	if (ai_clear_body) then {
    		{_unit removeMagazine _x;} forEach (magazines _unit);
    		{_unit removeWeapon _x;} forEach (weapons _unit);
    	};
    	if (ai_ahare_info) then {
    		{if (((position _x) distance (position _unit)) <= ai_share_distance) then {_x reveal [_player, 4.0];}} forEach allUnits;
    	};
    };
    
  12. i have a small question...  can i just change the  clean running missions setting to true for the vehicles to not save to the database?  I love the system but dont like running around everyday deleting these excess vehicles.   Just my personal preference for my server.  Thanks in advance for any help.

     

    In my scripts I do not publish the vehicle to the database until the survivors win the mission.

     

    So you create an armed vehicle:

    //Armed Land Vehicle
    _veh = createVehicle [_vehclass,[(_position select 0)+10,(_position select 1) + 10,0], [], 0, "CAN_COLLIDE"];
    _vehdir = round(random 360);
    _veh setDir _vehdir;
    _veh setVariable ["ObjectID","1",true];
    PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_veh];
    diag_log format["WAI: Mission Armed Vehicle spawned a %1",_vehname];
    

    Then when the mission is finished you'd call server_publishVeh on that vehicle. After restart, mission vehicles that are not published into the database will be gone

    if (_playerPresent) then {
    	[_veh,[_vehdir,_objPosition],_vehclass,true,"0"] call server_publishVeh;
    	waitUntil
    	{
    
  13. Is it possible to run regular dynamic missions and one static mission at the same time?

     

    We have a "bot island" with ~150 paratroopers, ground units and static gunners. On the ground, there are boxes with ammo and money. I created those using StaticAmmoBoxes.sqf. These are replenished on restart.

    I also want to be able to use server_publishVeh function on armor and armed choppers once the survivors get nearby. If I add the armor into StaticAmmoBoxes.sqf it is not written in the database and disappears once the survivor gets in.

    So, I was thinking I could re-use the existing check for _playerPresent but that is only available within the context of the mission.

    if (_playerPresent) then {
    [_veh,[_vehdir,_objPosition],_vehclass,true,"0"] call server_publishVeh;
    }
     
    Any alternatives I could use to publish the vehicles in the database and replenish them on restart?
    Thanks!
  14. Are you using DZAI also ?

    As in DZAI you can decide if other ai groups shoot each others or not.

    I had it on and was wondering this same problem. Then fixed it and now they dont kill each others.

     

    We do not run DZAI or any other AI scripts. WAI is the only one running. Still, most of the times, when I arrive to a mission with a static MG2, everyone's dead except for the static gunner.

    It does not look like he's shooting at zombies and kills his buddies in the process.

    At this point I switched:

     

    /// Allows AI on static guns to have a loadout
    ai_static_useweapon = False;
     
    Hoping that no static gunners will be spawned at the turret.
     
    Any other thoughts/solutions?
     
    Thanks!
×
×
  • Create New...