Jump to content
Sign in to follow this  
LSValmont

Cannot get SP/Server script to work the same when called by Clients!

Recommended Posts

I really need some help here guys, this script has been keeping me up for the last 6 days and nothing seems to make it work correctly when called by Clients connected the my Hosted Server (No errors thou):

 

The first part when executed on the server (host player) works perfectly, I left it in inside the If (isServer) as a reference to the simplest version that works for the server. Then under the If (!isServer) is the reworked script that I made for the clients. Lots of options that I tried are now with // just as reference to what I tried with no success.

Spoiler



if (isServer) then {

_codeName = "";
_mainBase = getMarkerPos "BASE";
_markerName = "";
// VIRTUAL HELIPAD OBJECT NAME = HHH

_nameAirTransport_1 = "SKY-RANGER (UH-80 Ghosthawk)";
_nameAirTransport_2	= "BLACKBIRD (UH-80 Ghosthawk)";
_nameAirTransport_3 = "LITTLE-BIRD (MH-6 Little Bird)";
_nameAirTransport_4	= "ANGEL-MEDEVAC (CH-49 Mohawk)";
_nameAirCAS_1 		= "REAPER (AH-99 Blackfoot)";

missionNamespace setVariable [(str Skyranger) 	+ "heliName", _nameAirTransport_1];
missionNamespace setVariable [(str Blackbird) 	+ "heliName", _nameAirTransport_2];
missionNamespace setVariable [(str Littlebird) 	+ "heliName", _nameAirTransport_3];
missionNamespace setVariable [(str Angel) 		+ "heliName", _nameAirTransport_4];
missionNamespace setVariable [(str Reaper) 		+ "heliName", _nameAirCAS_1];

if (transportHeli == Skyranger) 	then {_markerName = _nameAirTransport_1; 	_codeName = "SKY-RANGER"};
if (transportHeli == Blackbird) 	then {_markerName = _nameAirTransport_2; 	_codeName = "BLACKBIRD"};
if (transportHeli == Littlebird)	then {_markerName = _nameAirTransport_3;	_codeName = "LITTLE-BIRD"};	
if (transportHeli == Angel) 		then {_markerName = _nameAirTransport_4;	_codeName = "ANGEL-MEDEVAC"};

_transportHeli = transportHeli;

transportHeliGroup = (group _transportHeli);
publicVariable "transportHeliGroup";
transportHeliGroup setSpeedMode "FULL";

_outOfService = _codeName + " is out of service";
if (!alive _transportHeli) exitWith {hint _outOfService};

deleteMarker _codeName;
_heliMarker = createMarker [_codeName, getPos _transportHeli];
_heliMarker setMarkerColor "ColorGreen";
_heliMarker setMarkerShape "ICON";
_heliMarker setMarkerType "mil_dot";
_heliMarker setMarkerText _codeName;

if (heliOrder == 1) then {
player sidechat _codeName+" requesting a DROP OFF at... ";

};
if (heliOrder == 2) then {
player sidechat _codeName+" requesting a PICK UP at... ";

};	
if (heliOrder == 3) then {
player sidechat _codeName+" proceed to and wait for further instruction... ";

};	
if (heliOrder == 4) then {
player sidechat _codeName+" RETURN TO BASE";
	0 = [_codeName] Spawn {
		playMusic "RadioAmbient30";
		sleep 3;
		[west, "HQ"] sideChat "Copy that HunterZ, Air Transport is RTB...";
	};	
};

// SENDING TO DESTINATION
if (heliOrder != 4)	then {

	openMap true;
	MapClicked = false;
	onMapSingleClick "HHH setPos [_pos select 0,_pos select 1, 0] ;(group transportHeli) move _pos; MapClicked = true; onMapSingleClick ''; true;";

	waitUntil {sleep 1; MapClicked};
	_transportHeli setVariable ["LZ", (getPos HHH), true];
	_destination = _transportHeli getVariable "LZ";
	_heliMarker setMarkerPos _destination;
	
	if (heliOrder == 1) then {
	_heliMarker setMarkerText _codeName+" DROP POINT";
	_heliMarker setMarkerType "mil_start";
		0 = [] Spawn {
			playMusic "RadioAmbient30";
			sleep 3;
			[west, "HQ"] sideChat "Coordinates received HunterZ, buckle up for DROP OFF...";
		};	
	};
	if (heliOrder == 2) then {
	_heliMarker setMarkerText _codeName+" PICK UP";	
	_heliMarker setMarkerType "mil_pickup";
		0 = [] Spawn {
			playMusic "RadioAmbient30";
			sleep 3;
			[west, "HQ"] sideChat "Coordinates received HunterZ, Air Transport Inbound...";
		};	
	};	
	if (heliOrder == 3) then {
	_heliMarker setMarkerText _codeName+" WAIT";
		0 = [] Spawn {
			playMusic "RadioAmbient30";
			sleep 3;
			[west, "HQ"] sideChat "Coordinates received HunterZ, in route for location...";
		};	
	};	
	if (heliOrder == 4) then {

	};	

	waitUntil {sleep 1; !visibleMap}; 
	sleep 3;

	_transportHeli setBehaviour "CARELESS";
	
	waitUntil {sleep 1; (_transportHeli distance _destination) < 1200};	
	(group _transportHeli) setSpeedMode "NORMAL";		
	
	waitUntil {sleep 1; (_transportHeli distance _destination) < 800};
	(group _transportHeli) setSpeedMode "LIMITED";		
	hint format["%1 has reached destination",_codeName];

	_heliMarker setMarkerType "Empty";		
	while {((alive _transportHeli) && !(unitReady _transportHeli))} do {sleep 1};

};	
	
// IF DROP OFF REQUEST	
if (heliOrder == 1) then {
	_transportHeli land "GET OUT";
	waitUntil {sleep 1; {_x in _transportHeli} count (units (group player)) == 0};
	sleep 10; //TEST DELAY TO NOT KILL SQUAD WHILE TAKING OFF
};

// IF PICK UP REQUEST
if (heliOrder == 2) then {
	_transportHeli land "GET IN";
	waitUntil {sleep 1; {_x in _transportHeli} count (units (group player)) == count (units (group player))};
};	

//RETURN TO BASE
if (heliOrder != 3) then {
	(group _transportHeli) move _mainBase; 
	(group _transportHeli) setSpeedMode "FULL";		
	
	_heliMarker setMarkerPos _mainBase;
	_heliMarker setMarkerType "Empty";	
	
	waitUntil {sleep 1; (_transportHeli distance _mainBase) < 1200};	
	(group _transportHeli) setSpeedMode "NORMAL";		
	
	waitUntil {sleep 1; (_transportHeli distance _mainBase) < 800};
	(group _transportHeli) setSpeedMode "LIMITED";		
	while {((alive _transportHeli) && !(unitReady _transportHeli))} do {sleep 1};
	
	_transportHeli land "LAND";
	while {(count (waypoints (group _transportHeli))) > 0} do {deleteWaypoint ((waypoints (group _transportHeli)) select 0)};		
};

};

if (isServer) exitWith {};

if (!isServer) then {

_codeName = "";
mainBase = getMarkerPos "BASE";
publicVariable "mainBase";
_markerName = "";
// VIRTUAL HELIPAD OBJECT NAME = HHH

_nameAirTransport_1 = "SKY-RANGER (UH-80 Ghosthawk)";
_nameAirTransport_2	= "BLACKBIRD (UH-80 Ghosthawk)";
_nameAirTransport_3 = "LITTLE-BIRD (MH-6 Little Bird)";
_nameAirTransport_4	= "ANGEL-MEDEVAC (CH-49 Mohawk)";
_nameAirCAS_1 		= "REAPER (AH-99 Blackfoot)";

missionNamespace setVariable [(str Skyranger) 	+ "heliName", _nameAirTransport_1];
missionNamespace setVariable [(str Blackbird) 	+ "heliName", _nameAirTransport_2];
missionNamespace setVariable [(str Littlebird) 	+ "heliName", _nameAirTransport_3];
missionNamespace setVariable [(str Angel) 		+ "heliName", _nameAirTransport_4];
missionNamespace setVariable [(str Reaper) 		+ "heliName", _nameAirCAS_1];

if (transportHeli == Skyranger) 	then {_markerName = _nameAirTransport_1; 	_codeName = "SKY-RANGER"};
if (transportHeli == Blackbird) 	then {_markerName = _nameAirTransport_2; 	_codeName = "BLACKBIRD"};
if (transportHeli == Littlebird)	then {_markerName = _nameAirTransport_3;	_codeName = "LITTLE-BIRD"};	
if (transportHeli == Angel) 		then {_markerName = _nameAirTransport_4;	_codeName = "ANGEL-MEDEVAC"};

publicVariable "transportHeli";

transportHeliGroup = (group transportHeli);
publicVariable "transportHeliGroup";
transportHeliGroup setSpeedMode "FULL";
heliTransCaller = player;
publicVariable "heliTransCaller";

_outOfService = _codeName + " is out of service";
if (!alive transportHeli) exitWith {hint _outOfService};

deleteMarker _codeName;
heliMarker = createMarker [_codeName, getPos transportHeli];
heliMarker setMarkerColor "ColorGreen";
heliMarker setMarkerShape "ICON";
heliMarker setMarkerType "mil_dot";
heliMarker setMarkerText _codeName;

publicVariable "heliMarker";

if (heliOrder == 1) then {
heliTransCaller sidechat _codeName+" requesting a DROP OFF at... ";

};
if (heliOrder == 2) then {
heliTransCaller sidechat _codeName+" requesting a PICK UP at... ";

};	
if (heliOrder == 3) then {
heliTransCaller sidechat _codeName+" proceed to and wait for further instruction... ";

};	
if (heliOrder == 4) then {
heliTransCaller sidechat _codeName+" RETURN TO BASE";
	0 = [_codeName] Spawn {
		playMusic "RadioAmbient30";
		sleep 3;
		[west, "HQ"] sideChat "Copy that HunterZ, Air Transport is RTB...";
	};	
};

// SENDING TO DESTINATION
if (heliOrder == 1) then {
	if ({_x in transportHeli} count (units (group heliTransCaller)) == 0) exitWith {Hint "No one in the Transport Heli for DROP OFF"};
};

if (heliOrder != 4)	then {
	openMap true;
	MapClicked = false;
	publicVariable "MapClicked";
	onMapSingleClick "
	heliTransPos = _pos; 
	publicVariable 'heliTransPos'; 
	[HHH,[heliTransPos select 0,heliTransPos select 1, 0]] remoteExec ['setPos', 2];
	{(group transportHeli) move [getPos HHH select 0,getPos HHH select 1,0];
	LZ = (getPos HHH); 
	publicVariable 'LZ';	
	transportHeli setVariable ['LZ', (getPos HHH), true];} remoteExec ['bis_fnc_spawn', 2]; 
	MapClicked = true;
	onMapSingleClick '';
	true;	
	";
	
	waitUntil {sleep 1; MapClicked};
	destination = transportHeli getVariable "LZ";
	publicVariable "destination";
	heliMarker setMarkerPos destination;
	
	if (heliOrder == 1) then {
	heliMarker setMarkerText _codeName+" DROP POINT";
	heliMarker setMarkerType "mil_start";
		0 = [] Spawn {
			playMusic "RadioAmbient30";
			sleep 3;
			[west, "HQ"] sideChat "Coordinates received HunterZ, buckle up for DROP OFF...";
		};	
	};
	if (heliOrder == 2) then {
	heliMarker setMarkerText _codeName+" PICK UP";	
	heliMarker setMarkerType "mil_pickup";
		0 = [] Spawn {
			playMusic "RadioAmbient30";
			sleep 3;
			[west, "HQ"] sideChat "Coordinates received HunterZ, Air Transport Inbound...";
		};	
	};	
	if (heliOrder == 3) then {
	heliMarker setMarkerText _codeName+" WAIT";
		0 = [] Spawn {
			playMusic "RadioAmbient30";
			sleep 3;
			[west, "HQ"] sideChat "Coordinates received HunterZ, in route for location...";
		};	
	};

	waitUntil {sleep 1; !visibleMap};
	sleep 3;
	
	transportHeli setBehaviour "CARELESS";
	waitUntil {sleep 1; (transportHeli distance destination) < 1000};	
	(group transportHeli) setSpeedMode "NORMAL";	
	waitUntil {sleep 1; (transportHeli distance destination) < 600};
	(group transportHeli) setSpeedMode "LIMITED";	
	hint format["%1 has reached destination",_codeName];
	heliMarker setMarkerType "Empty";
	//while {((alive transportHeli) && !(unitReady transportHeli))} do {sleep 1};
	//if (!isServer) then { { while {((alive transportHeli) && !(unitReady transportHeli))} do {sleep 1}; } remoteExec ["bis_fnc_spawn", 0]; };

};
	
// IF DROP OFF REQUEST	
if (heliOrder == 1) then {
	waitUntil {sleep 1; unitready transportHeli};
	transportHeli land "GET OUT"; 
	waitUntil{sleep 1; isTouchingGround transportHeli};
	/*
	{
//	_wp1 = (group transportHeli) addWaypoint [(getPos HHH), 0];
//	_wp1 setWaypointType "MOVE";
//	_wp1 setWaypointSpeed "NORMAL";
//	_wp1 setwaypointstatements ["true", "transportHeli LAND 'GET OUT';"];
	transportHeli land "LAND";
	} remoteExec ["bis_fnc_spawn", 0];
	[transportHeli,["LAND"]] remoteExec ["LAND", 2];
	*/
	waitUntil {sleep 1; {_x in transportHeli} count (units (group heliTransCaller)) == 0};
	sleep 10; //TEST DELAY TO NOT KILL SQUAD WHILE TAKING OFF
};

// IF PICK UP REQUEST
if (heliOrder == 2) then {
	waitUntil {sleep 1; unitready transportHeli};
	transportHeli land "GET IN"; 
	waitUntil{sleep 1; isTouchingGround transportHeli};
	/*
	{
//	_wp1 = (group transportHeli) addWaypoint [(getPos HHH), 0];
//	_wp1 setWaypointType "MOVE";
//	_wp1 setWaypointSpeed "NORMAL";
//	_wp1 setwaypointstatements ["true", "transportHeli LAND 'GET IN';"];
	transportHeli land "LAND";
	} remoteExec ["bis_fnc_spawn", 0];
	[transportHeli,["LAND"]] remoteExec ["LAND", 2];
	*/
	waitUntil {sleep 1; {_x in transportHeli} count (units (group heliTransCaller)) == count (units (group heliTransCaller))};
};	

//RETURN TO BASE
if (heliOrder != 3) then {
	[(group transportHeli),["getMarkerPos mainBase"]] remoteExec ["move", transportHeli];
	//(group transportHeli) move mainBase;
	(group transportHeli) setSpeedMode "FULL";
	heliMarker setMarkerPos mainBase;
	heliMarker setMarkerType "Empty";
	waitUntil {sleep 1; (transportHeli distance mainBase) < 1000};
	(group transportHeli) setSpeedMode "NORMAL";
	waitUntil {sleep 1; (transportHeli distance mainBase) < 600};
	(group transportHeli) setSpeedMode "LIMITED";
	//while {((alive transportHeli) && !(unitReady transportHeli))} do {sleep 1};
	waitUntil {sleep 1; unitready transportHeli};
	transportHeli land "LAND"; /*
	{
	(group transportHeli) move mainBase;
	(group transportHeli) setSpeedMode "FULL";
//	_wp1 = (group transportHeli) addWaypoint [(getMarkerPos mainBase), 0];
//	_wp1 setWaypointType "MOVE";
//	_wp1 setWaypointSpeed "NORMAL";
//	_wp1 setwaypointstatements ["true", "transportHeli LAND 'LAND';"];
	transportHeli land "LAND";
	//while {sleep 1; (count (waypoints (group transportHeli))) > 0} do {deleteWaypoint ((waypoints (group transportHeli)) select 0)};
	} remoteExec ["bis_fnc_spawn", 0];
	*/
	//while {sleep 1; (count (waypoints (group transportHeli))) > 0} do {deleteWaypoint ((waypoints (group transportHeli)) select 0)};
};


};

The problem is that when called by the clients and using the heliOrders 1 or 2 (Drop of/Pick Up requests) the helicopter gets to the location but never lands on the designed location (at that point if I issue the same command transportHeli land "GET IN"; but via console the Heli lands just fine. If called by the server the whole scripts works perfectly.

 

I've been delaying the release of my mission for a week now because I can't seem to be able to solve this issue no matter what I try so if someone would be kind enough to point me in the right direction I would be most thankful.

 

 

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×