Jump to content
Sign in to follow this  
T. Miller

random time & location issue

Recommended Posts

Hi, I'm trying to (for BLUFOR and OPFOR) have a updating marker on a enemy player (the HVT), which updates every 3 to 7 minutes. Since it's a multiplayer scenario, both sides are not supposed to see their OWN marker, I managed to spawn the marker local for each player on the side using the "initPlayerLocal.sqf".

The marker that gets moved to the enemy HVT location needs to be updated every 3 to 7 minutes (a random time) and there needs to be a random offset to the marker of 50 meters to each side.

Basically, both these things are working. The marker updates at the random time, and is not exactly on the HVT's location, BUT: Both these things are random for every player, instead of the same for everyone on the same side.

SCRIPTS: (the ones that matter)

init.sqf

markers = 0;
markersOPFOR = 0;
markersBLUFOR = 0;

_nil=[]execVM "enemyMarkerInfoOPFOR.sqf";
_nil=[]execVM "enemyMarkerInfoBLUFOR.sqf";

sleep 30;
markers = 1;

initPlayerLocal.sqf

_nil=[]execVM "enemyMarkers.sqf";

enemyMarkers.sqf

_playerSideID = (side player) call BIS_fnc_sideID;

_HVT = [b_VIP, O_VIP] select _playerSideID;
_HVT_Mk_Type = ["b_unknown", "o_unknown"] select _playerSideID;
_HVT_Mk_Color = ["ColorWEST", "ColorEAST"] select _playerSideID;

_HVT_Mk = createMarkerLocal ["HVT_Mk", getMarkerPos "MarkerSpawn"];
_HVT_Mk setMarkerShapeLocal "ICON";
_HVT_Mk setMarkerTypeLocal _HVT_Mk_Type;
_HVT_Mk setMarkerColorLocal _HVT_Mk_Color;
_HVT_Mk setMarkerTextLocal "HVT";

waitUntil {markers == 1;};
while {alive _HVT} do {
_interval = [interval_O, interval_B] select _playerSideID;
_randomX = [randomX_O,randomX_B] select _playerSideID;
_randomY = [randomY_O,randomY_B] select _playerSideID;
_x = _randomX + ((getPos _HVT) select 0);
_y = _randomY + ((getPos _HVT) select 1);
_HVT_Mk setmarkerposLocal [_x,_y];
   sleep _interval;
};

enemyMarkerInfoOPFOR.sqf

while {true;} do {
interval_O = round (random 240) + 180;
randomX_O = round (random 100) - 50;
randomY_O = round (random 100) - 50;
sleep 60;
};

enemyMarkerInfoBLUFOR.sqf

while {true;} do {
interval_B = round (random 240) + 180;
randomX_B = round (random 100) - 50;
randomY_B = round (random 100) - 50;
sleep 60;
};

I must have made about 10 different changes to try and fix the issue, but whenever I tested it on the hosted server with others it stays random per player..

Edited by dyzalonius

Share this post


Link to post
Share on other sites

What you need to do is to make all the random stuff done only on server. That way there's only one set of values instead one per player. How to distribute the values from server to clients can be done in multiple ways, but here's one example. Disclaimer: I did not thoroughly test it.

All of this goes into init.sqf, no other files needed.

[color="#FF8040"][color="#006400"][i]// Initialize an array to be used for the update send from server to clients.[/i][/color]
[color="#006400"][i]// It will contain the update time and marker location adjustment for both sides.[/i][/color]
[color="#006400"][i]// [1234,[xOffsetWest,yOffsetWest],[xOffsetEast,yOffsetEast]][/i][/color]
SHK_MarkerUpdate [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]// Function to move the local marker.[/i][/color]
SHK_fnc_updateMarkerLocations [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
 [color="#006400"][i]// Calculate new location for the marker based on current location and offsets.[/i][/color]
 [color="#191970"][b]private[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_x"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_y"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_xOffset"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_yOffset"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_HVT"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]side[/b][/color] [color="#000000"]player[/color] [color="#8B3E2F"][b]=[/b][/color][color="#8B3E2F"][b]=[/b][/color] [color="#000000"]west[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
   [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
   [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
   [color="#1874CD"]_HVT[/color] [color="#8B3E2F"][b]=[/b][/color] O_VIP[color="#8B3E2F"][b];[/b][/color]
 [color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]else[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
   [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]2[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
   [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]SHK_MarkerUpdate [color="#191970"][b]select[/b][/color] [color="#FF0000"]2[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
   [color="#1874CD"]_HVT[/color] [color="#8B3E2F"][b]=[/b][/color] B_VIP[color="#8B3E2F"][b];[/b][/color]
 [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#000000"]_x[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color][color="#191970"][b]getPos[/b][/color] [color="#1874CD"]_HVT[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#1874CD"]_y[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color][color="#191970"][b]getPos[/b][/color] [color="#1874CD"]_HVT[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#7A7A7A"]"HVT_Mk"[/color] [color="#191970"][b]setMarkerPosLocal[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#000000"]_x[/color][color="#8B3E2F"][b],[/b][/color][color="#1874CD"]_y[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]// Server will do all the work.[/i][/color]
[color="#191970"][b]if[/b][/color] [color="#191970"][b]isServer[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
 [color="#8B3E2F"][b][[/b][/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]spawn[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
   [color="#191970"][b]sleep[/b][/color] [color="#FF0000"]30[/color][color="#8B3E2F"][b];[/b][/color]

   [color="#006400"][i]// Send marker location updates until one of the HVTs die.[/i][/color]
   [color="#191970"][b]while[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]alive[/b][/color] B_VIP [color="#8B3E2F"][b]&[/b][/color][color="#8B3E2F"][b]&[/b][/color] [color="#191970"][b]alive[/b][/color] O_VIP[color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
     [color="#191970"][b]private[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_time"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_xOffset"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_yOffset"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]

     [color="#006400"][i]// Pick a random value between 3 and 7 minutes, then wait that long.[/i][/color]
     [color="#1874CD"]_time[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]time[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#FF0000"]180[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#191970"][b]random[/b][/color] [color="#FF0000"]240[/color][color="#8B3E2F"][b];[/b][/color]
     SHK_MarkerUpdate [color="#191970"][b]set[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b],[/b][/color] [color="#1874CD"]_time[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
     [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]time[/color] [color="#8B3E2F"][b]>[/b][/color] [color="#1874CD"]_time[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]

     [color="#006400"][i]// Offsets for marker location. Indexes: 1 = west, 2 = east[/i][/color]
     [color="#191970"][b]for[/b][/color] [color="#7A7A7A"]"_i"[/color] [color="#191970"][b]from[/b][/color] [color="#FF0000"]1[/color] [color="#191970"][b]to[/b][/color] [color="#FF0000"]2[/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
       [color="#1874CD"]_xOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]round[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]random[/b][/color] [color="#FF0000"]100[/color][color="#8B3E2F"][b])[/b][/color] [color="#8B3E2F"][b]-[/b][/color] [color="#FF0000"]50[/color][color="#8B3E2F"][b];[/b][/color]
       [color="#1874CD"]_yOffset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]round[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]random[/b][/color] [color="#FF0000"]100[/color][color="#8B3E2F"][b])[/b][/color] [color="#8B3E2F"][b]-[/b][/color] [color="#FF0000"]50[/color][color="#8B3E2F"][b];[/b][/color]
       SHK_MarkerUpdate [color="#191970"][b]set[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#1874CD"]_i[/color][color="#8B3E2F"][b],[/b][/color][color="#8B3E2F"][b][[/b][/color][color="#1874CD"]_xOffset[/color][color="#8B3E2F"][b],[/b][/color][color="#1874CD"]_yOffset[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
     [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]

     [color="#006400"][i]// Send the new value to clients.[/i][/color]
     [color="#191970"][b]publicVariable[/b][/color] [color="#7A7A7A"]"SHK_MarkerUpdate"[/color][color="#8B3E2F"][b];[/b][/color]

     [color="#006400"][i]// This machine is the server, but if it's not dedicated, then it's a[/i][/color]
     [color="#006400"][i]// listen server, which means it's also a client, who needs to see the[/i][/color]
     [color="#006400"][i]// update as well.[/i][/color]
     [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]![/b][/color][color="#191970"][b]isDedicated[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
       [color="#191970"][b]call[/b][/color] SHK_fnc_updateMarkerLocations[color="#8B3E2F"][b];[/b][/color]
     [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
   [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]// Clients[/i][/color]
[color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]![/b][/color][color="#191970"][b]isDedicated[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
 [color="#006400"][i]// Wait for the player to load/initialize.[/i][/color]
 [color="#191970"][b]waitUntil[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#8B3E2F"][b]![/b][/color][color="#191970"][b]isNull[/b][/color] [color="#000000"]player[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]

 [color="#191970"][b]private[/b][/color][color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_marker"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_type"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_color"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#1874CD"]_marker[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]createMarkerLocal[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"HVT_Mk"[/color][color="#8B3E2F"][b],[/b][/color] [color="#191970"][b]getMarkerPos[/b][/color] [color="#7A7A7A"]"MarkerSpawn"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerShapeLocal[/b][/color] [color="#7A7A7A"]"ICON"[/color][color="#8B3E2F"][b];[/b][/color]
 [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerTextLocal[/b][/color] [color="#7A7A7A"]"HVT"[/color][color="#8B3E2F"][b];[/b][/color]

 [color="#191970"][b]if[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#191970"][b]side[/b][/color] [color="#000000"]player[/color] [color="#8B3E2F"][b]=[/b][/color][color="#8B3E2F"][b]=[/b][/color] [color="#000000"]west[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]then[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
   [color="#1874CD"]_type[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"o_unknown"[/color][color="#8B3E2F"][b];[/b][/color]
   [color="#1874CD"]_color[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"ColorEAST"[/color][color="#8B3E2F"][b];[/b][/color]
 [color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]else[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
   [color="#1874CD"]_type[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"b_unknown"[/color][color="#8B3E2F"][b];[/b][/color]
   [color="#1874CD"]_color[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#7A7A7A"]"ColorWEST"[/color][color="#8B3E2F"][b];[/b][/color]
 [color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
 [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerTypeLocal[/b][/color] [color="#1874CD"]_type[/color][color="#8B3E2F"][b];[/b][/color]
 [color="#1874CD"]_marker[/color] [color="#191970"][b]setMarkerColorLocal[/b][/color] [color="#1874CD"]_color[/color][color="#8B3E2F"][b];[/b][/color]

 [color="#006400"][i]// PublicVariable eventhandler to catch the update sent by the server.[/i][/color]
 [color="#7A7A7A"]"SHK_MarkerUpdate"[/color] [color="#191970"][b]addPublicVariableEventHandler[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]call[/b][/color] SHK_fnc_updateMarkerLocations[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color][/color]

Made with KK's SQF to BBCode Converter

Share this post


Link to post
Share on other sites

I think you can pretty much switch off global marker locally using markerXXXLocal command.

say you have global marker created on the server and moved on the server, you can make it invisible on any computer you want by making it transparent with https://community.bistudio.com/wiki/setMarkerAlphaLocal. This will not make marker local everywhere, just this computer.

Share this post


Link to post
Share on other sites
I think you can pretty much switch off global marker locally using markerXXXLocal command.

say you have global marker created on the server and moved on the server, you can make it invisible on any computer you want by making it transparent with https://community.bistudio.com/wiki/setMarkerAlphaLocal. This will not make marker local everywhere, just this computer.

Wow, I didn't even think of that. That might also actually cost way less recourses.

Share this post


Link to post
Share on other sites
Wow, I didn't even think of that. That might also actually cost way less recourses.

Try it first, since arma is changing all the time. This was one of the useful oddities of sqf I remember.

Share this post


Link to post
Share on other sites
Try it first, since arma is changing all the time. This was one of the useful oddities of sqf I remember.

Well I tried called the scripts for updating the markers over the initServer.sqf, and calling the hideMarker script over the initPlayerLocal, but that doesnt make the markers disappear..

SCRIPTS:

initServer.sqf

_nil=[]execVM "updateMarkersBLUFOR.sqf";
_nil=[]execVM "updateMarkersOPFOR.sqf";

initPlayerLocal.sqf

_nil=[]execVM "hideMarkers.sqf";

updateMarkersBLUFOR.sqf

sleep 5;

while {true;} do {

_interval = round (random 240) + 180;
_offsetX = round (random 100) - 50;
_offsetY = round (random 100) - 50;
_x = _offsetX + ((getPos B_VIP) select 0);
_y = _offsetY + ((getPos B_VIP) select 0);
if (alive B_VIP) then {"B_HVT_Mk" setmarkerpos [_x,_y];} else {"B_HVT_Mk" setmarkerpos getmarkerpos "MarkerSpawn";};
sleep _interval;

};

updateMarkersOPFOR.sqf

sleep 5;

while {true;} do {

_interval = round (random 240) + 180;
_offsetX = round (random 100) - 50;
_offsetY = round (random 100) - 50;
_x = _offsetX + ((getPos O_VIP) select 0);
_y = _offsetY + ((getPos O_VIP) select 0);
if (alive O_VIP) then {"O_HVT_Mk" setmarkerpos [_x,_y];} else {"O_HVT_Mk" setmarkerpos getmarkerpos "MarkerSpawn";};
sleep _interval;

};

hideMarkers.sqf

_playerSideID = (side player) call BIS_fnc_sideID;

_HVT_Mk = ["O_HVT_Mk", "B_HVT_Mk"] select _playerSideID;

_HVT_Mk setMarkerAlphaLocal 0;

---------- Post added at 13:57 ---------- Previous post was at 13:07 ----------

Alright. I've done a bit more research, and it seems like I'll have to get back to spawning the markers locally. I went back to basic, no offset for the marker (can't make the offset the same for the complete side) and no random time between two updates from 3 to 7 minutes (can't make it the same for the complete side). If anybody could help me by telling me how to create a global variable for the offset and the time, and implement that in what I already have now.

UPDATE: Weirdly enough, with the following setup, 'not everyone'/'only one person' can see all markers, the rest only sees the friendly VIP marker. Anybody know why? I'm desperate.

UPDATE UPDATE: Fixed the 'not everyone'/'only one person' problem, I used setMarkerColor instead of setMarkerColorLocal.

SCRIPTS:

initPlayerLocal.sqf

_nil=[]execVM "markers.sqf";
_nil=[]execVM "markersHVT.sqf";

markers.sqf

////////////////////
/* Spawn Markers  */
////////////////////

//BLUFOR MARKERS
_B_ASL_Mk = createMarkerLocal ["B_ASL_Mk", getMarkerPos "MarkerSpawn"];
_B_A1_Mk = createMarkerLocal ["B_A1_Mk", getMarkerPos "MarkerSpawn"];
_B_A2_Mk = createMarkerLocal ["B_A2_Mk", getMarkerPos "MarkerSpawn"];
_B_A3_Mk = createMarkerLocal ["B_A3_Mk", getMarkerPos "MarkerSpawn"];
_B_VIP_Mk = createMarkerLocal ["B_VIP_Mk", getMarkerPos "MarkerSpawn"];

_B_ASL_Mk setMarkerTypeLocal "b_hq";
_B_A1_Mk setMarkerTypeLocal "b_inf";
_B_A2_Mk setMarkerTypeLocal "b_inf";
_B_A3_Mk setMarkerTypeLocal "b_inf";
_B_VIP_Mk setMarkerTypeLocal "b_unknown";

_B_ASL_Mk setMarkerTextLocal "ASL";
_B_A1_Mk setMarkerTextLocal "A1";
_B_A2_Mk setMarkerTextLocal "A2";
_B_A3_Mk setMarkerTextLocal "A3";
_B_VIP_Mk setMarkerTextLocal "VIP";

_B_allMarkers = [_B_ASL_Mk, _B_A1_Mk, _B_A2_Mk, _B_A3_Mk, _B_VIP_Mk];
{
_x setMarkerShapeLocal "ICON";
_x setMarkerColorLocal "ColorWEST";
} foreach _allMarkers;



//OPFOR MARKERS
_O_ASL_Mk = createMarkerLocal ["O_ASL_Mk", getMarkerPos "MarkerSpawn"];
_O_A1_Mk = createMarkerLocal ["O_A1_Mk", getMarkerPos "MarkerSpawn"];
_O_A2_Mk = createMarkerLocal ["O_A2_Mk", getMarkerPos "MarkerSpawn"];
_O_A3_Mk = createMarkerLocal ["O_A3_Mk", getMarkerPos "MarkerSpawn"];
_O_VIP_Mk = createMarkerLocal ["O_VIP_Mk", getMarkerPos "MarkerSpawn"];

_O_ASL_Mk setMarkerTypeLocal "o_hq";
_O_A1_Mk setMarkerTypeLocal "o_inf";
_O_A2_Mk setMarkerTypeLocal "o_inf";
_O_A3_Mk setMarkerTypeLocal "o_inf";
_O_VIP_Mk setMarkerTypeLocal "o_unknown";

_O_ASL_Mk setMarkerTextLocal "ASL";
_O_A1_Mk setMarkerTextLocal "A1";
_O_A2_Mk setMarkerTextLocal "A2";
_O_A3_Mk setMarkerTextLocal "A3";
_O_VIP_Mk setMarkerTextLocal "VIP";

_O_allMarkers = [_O_ASL_Mk, _O_A1_Mk, _O_A2_Mk, _O_A3_Mk, _O_VIP_Mk];
{
_x setMarkerShapeLocal "ICON";
_x setMarkerColorLocal "ColorEAST";
} foreach _allMarkers;





////////////////////
/*  Hide Markers  */
////////////////////

//Make markers you're not supposed to see invisible
_playerSideID = (side player) call BIS_fnc_sideID;

_ASL_Mk = ["B_ASL_Mk", "O_ASL_Mk"] select _playerSideID;
_A1_Mk = ["B_A1_Mk", "O_A1_Mk"] select _playerSideID;
_A2_Mk = ["B_A2_Mk", "O_A2_Mk"] select _playerSideID;
_A3_Mk = ["B_A3_Mk", "O_A3_Mk"] select _playerSideID;
_VIP_Mk = ["B_VIP_Mk", "O_VIP_Mk"] select _playerSideID;

_ASL_Mk setMarkerAlphaLocal 0;
_A1_Mk setMarkerAlphaLocal 0;
_A2_Mk setMarkerAlphaLocal 0;
_A3_Mk setMarkerAlphaLocal 0;
_VIP_Mk setMarkerAlphaLocal 0;





////////////////////
/* Update Markers */
////////////////////

sleep 5;

while {true;} do {
if (alive B_ASL_Leader) then {_B_ASL_Mk setMarkerPosLocal (getpos B_ASL_Leader);} else {_B_ASL_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive B_A1_Leader) then {_B_A1_Mk setMarkerPosLocal (getpos B_A1_Leader);} else {_B_A1_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive B_A2_Leader) then {_B_A2_Mk setMarkerPosLocal (getpos B_A2_Leader);} else {_B_A2_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive B_A3_Leader) then {_B_A3_Mk setMarkerPosLocal (getpos B_A3_Leader);} else {_B_A3_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive B_VIP) then {_B_VIP_Mk setMarkerPosLocal (getpos B_VIP);} else {_B_VIP_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};

if (alive O_ASL_Leader) then {_O_ASL_Mk setMarkerPosLocal (getpos O_ASL_Leader);} else {_O_ASL_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive O_A1_Leader) then {_O_A1_Mk setMarkerPosLocal (getpos O_A1_Leader);} else {_O_A1_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive O_A2_Leader) then {_O_A2_Mk setMarkerPosLocal (getpos O_A2_Leader);} else {_O_A2_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive O_A3_Leader) then {_O_A3_Mk setMarkerPosLocal (getpos O_A3_Leader);} else {_O_A3_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive O_VIP) then {_O_VIP_Mk setMarkerPosLocal (getpos O_VIP);} else {_O_VIP_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};

   sleep 0.25;
};

markersHVT.sqf

////////////////////
/* Spawn Markers  */
////////////////////

//BLUFOR MARKER
_B_HVT_Mk = createMarkerLocal ["B_HVT_Mk", getMarkerPos "MarkerSpawn"];
_B_HVT_Mk setMarkerTypeLocal "b_unknown";
_B_HVT_Mk setMarkerTextLocal "HVT";
_B_HVT_Mk setMarkerShapeLocal "ICON";
_B_HVT_Mk setMarkerColor "ColorWEST";

//OPFOR MARKER
_O_HVT_Mk = createMarkerLocal ["O_HVT_Mk", getMarkerPos "MarkerSpawn"];
_O_HVT_Mk setMarkerTypeLocal "o_unknown";
_O_HVT_Mk setMarkerTextLocal "HVT";
_O_HVT_Mk setMarkerShapeLocal "ICON";
_O_HVT_Mk setMarkerColorLocal "ColorEAST";



////////////////////
/*  Hide Markers  */
////////////////////

//Make marker you're not supposed to see invisible
_playerSideID = (side player) call BIS_fnc_sideID;
_HVT_Mk = ["O_HVT_Mk", "B_HVT_Mk"] select _playerSideID;
_HVT_Mk setMarkerAlphaLocal 0;



////////////////////
/* Update Markers */
////////////////////

sleep 5;

while {true;} do {
if (alive B_VIP) then {_B_HVT_Mk setMarkerPosLocal (getpos B_VIP);} else {_B_HVT_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
if (alive O_VIP) then {_O_HVT_Mk setMarkerPosLocal (getpos O_VIP);} else {_O_HVT_Mk setmarkerposLocal getmarkerpos "MarkerSpawn";};
   sleep 300;
};

Edited by dyzalonius

Share this post


Link to post
Share on other sites

Yep just tested, you can make marker invisible on client until next position update from server where it gets resynced.

In this case I suggest to wait until remoteExec is fixed and added then you will be able to control where to display it very easily

Share this post


Link to post
Share on other sites
Alright. I've done a bit more research, and it seems like I'll have to get back to spawning the markers locally. I went back to basic, no offset for the marker (can't make the offset the same for the complete side) and no random time between two updates from 3 to 7 minutes (can't make it the same for the complete side). If anybody could help me by telling me how to create a global variable for the offset and the time, and implement that in what I already have now.

UPDATE: Weirdly enough, with the following setup, 'not everyone'/'only one person' can see all markers, the rest only sees the friendly VIP marker. Anybody know why? I'm desperate.

UPDATE UPDATE: Fixed the 'not everyone'/'only one person' problem, I used setMarkerColor instead of setMarkerColorLocal.

I already gave you an example how to do it. Even if you don't want to just copy-paste, at least take the basic idea of it. You can't have any randomization done locally on clients (=players). Instead, you need to do it on the server and then send updates to clients.

Another possible way:

1. Create two invisible/empty global markers for everyone. Lets call them MarkerHVTWest and MarkerHVTEast.

2. Create local marker for all clients. Lets call it MarkerHVT. Set it's type and color based on side.

3. On server run a loop which sleeps randomly.

4. Have that loop to do random offset for both MarkerHVTWest and East.

5. Update the West and East marker positions globally. This will sync new marker positions to clients.

6. On clients run a loop, which updates/syncs the MarkerHVT position to the West or East marker (depending on side).

This way you will have server do the random stuff. The updated info (new position) is synced to clients automatically by the game engine as the markers are global. Clients only need to keep moving their local marker on top of the (correct side's) global marker.

Share this post


Link to post
Share on other sites
I already gave you an example how to do it. Even if you don't want to just copy-paste, at least take the basic idea of it. You can't have any randomization done locally on clients (=players). Instead, you need to do it on the server and then send updates to clients.

Another possible way:

1. Create two invisible/empty global markers for everyone. Lets call them MarkerHVTWest and MarkerHVTEast.

2. Create local marker for all clients. Lets call it MarkerHVT. Set it's type and color based on side.

3. On server run a loop which sleeps randomly.

4. Have that loop to do random offset for both MarkerHVTWest and East.

5. Update the West and East marker positions globally. This will sync new marker positions to clients.

6. On clients run a loop, which updates/syncs the MarkerHVT position to the West or East marker (depending on side).

This way you will have server do the random stuff. The updated info (new position) is synced to clients automatically by the game engine as the markers are global. Clients only need to keep moving their local marker on top of the (correct side's) global marker.

Thank you, that second way seems a bit easier, I'll implement that, thanks for the help man.

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  

×