private [ "_resupply_dist", "_repair_increment", "_repair_speed", "_repair_altitude", "_veh", "_repaired", "_rearmed", "_refueled", "_average_damage", "_average_fuel", "_screenmsg", "_rearm_time", "_refuel_amount", "_rearm_ticker" ];

_repair_amount = 0.01;
_repair_speed = 2;
_repair_altitude = 2;
_resupply_dist = 30;
_rearm_time = 60;
_refuel_amount = 0.02;
_rearm_ticker = 0;

while { true } do {

	_repaired = false;
	_rearmed = false;
	_refueled = false;
	_average_damage = 0;
	_average_fuel = 0;
	_screenmsg = "";

	_veh = vehicle player;

	if ( _veh != player ) then {
		if ( effectiveCommander _veh == player ) then {
			if ( (speed _veh < _repair_speed) && (((getPosATL _veh) select 2) < _repair_altitude) ) then {

				if ( count ( (getpos _veh) nearEntities [ vehicle_repair_sources , _resupply_dist] ) > 0 ) then {
					if ( damage _veh > 0 )  then {
						_repaired = true;
						_average_damage = (damage _veh) - _repair_amount;
						if ( _average_damage < 0 ) then { _average_damage = 0 };
						_veh setDamage _average_damage;
					};
				};

				if ( ( count ( (getpos _veh) nearEntities [ vehicle_rearm_sources , _resupply_dist] ) > 0 ) && ( _rearm_ticker < _rearm_time ) ) then {
					_rearmed = true;
					_rearm_ticker = _rearm_ticker + 1;
					if ( _rearm_ticker >= _rearm_time ) then {
						[_veh] remoteExec ["F_rearmVehicle",_veh];
					};
				};

				if ( count ( (getpos _veh) nearEntities [ vehicle_refuel_sources , _resupply_dist] ) > 0 ) then {
					if ( fuel _veh < ( 1 - _refuel_amount ) )  then {
						_refueled = true;
						[_veh, (fuel _veh + _refuel_amount)] remoteExec ["F_setFuel",_veh];
					};
				};
			} else {
				_rearm_ticker = 0;
			};
		} else {
			_rearm_ticker = 0;
		};
	} else {
		_rearm_ticker = 0;
	};

	if ( _repaired ) then {
		_screenmsg =  format [ "%1 : %2%3", localize "STR_REPAIRING", round ( 100 - (_average_damage * 100) ), "%" ];
	};

	if ( _rearmed ) then {
		if ( _repaired ) then {
			_screenmsg = format [ "%1 - ", _screenmsg ];
		};
		_screenmsg = format [ "%1%2", _screenmsg, format [ localize "STR_REARMING", _rearm_time - _rearm_ticker  ] ];
	};

	if ( _refueled ) then {
		if ( _repaired || _rearmed ) then {
			_screenmsg = format [ "%1 - ", _screenmsg ];
		};
		_screenmsg = format [ "%1%2", _screenmsg, format [ "%1 : %2%3", localize "STR_REFUELING", round ( (fuel _veh) * 100 ), "%" ] ];
	};

	titleText [ _screenmsg, "PLAIN DOWN" ];

	sleep 1;
};