123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /*
- Name: cTab_fnc_deleteUserMarker
-
- Author(s):
- Gundy
- Description:
- Delete user placed marker at provided index and broadcast the result. This function is called on the server.
- Parameters:
- 0: STRING - Encryption Key for this marker
- 1: INTEGER - Index position of marker to delete
- Optional:
- 2: INTEGER - Transaction ID
-
- Returns:
- BOOLEAN - TRUE
-
- Example:
- // Client requesting marker deletion and server receiving request
- ["bluefor",5] call cTab_fnc_deleteUserMarker;
-
- // Client receiving request for marker deletion (from server)
- ["bluefor",5,158] call cTab_fnc_deleteUserMarker;
- */
- private ["_encryptionKey","_markerIndex","_transactionId","_userMarkerList","_removeIndex"];
- _encryptionKey = _this select 0;
- _markerIndex = _this select 1;
- _transactionId = _this select 2; // not set when initiated from client
- call {
- // If received on the server
- if (isServer) exitWith {
- if (isNil "_transactionId") then {
- // get the marker list that corresponds to the encryption key
- _userMarkerList = [cTab_userMarkerLists,_encryptionKey] call cTab_fnc_getFromPairs;
- // try to find the marker to be removed
- _removeIndex = -1;
- {
- if (_x select 0 == _markerIndex) exitWith {_removeIndex = _forEachIndex};
- } forEach _userMarkerList;
-
- // if the marker could be found, remove it
- if (_removeIndex != -1) then {
- 0 = _userMarkerList deleteAt _removeIndex;
- [cTab_userMarkerLists,_encryptionKey,_userMarkerList] call cTab_fnc_setToPairs;
-
- // Send deleteUserMarker command to all clients
- cTab_userMarkerTransactionId = cTab_userMarkerTransactionId + 1;
- [[_encryptionKey,_markerIndex,cTab_userMarkerTransactionId],"cTab_fnc_deleteUserMarker",true,false,true] call bis_fnc_MP;
-
- // If this was run on a client-server (i.e. in single player or locally hosted), update the marker list
- if (hasInterface && {_encryptionKey == call cTab_fnc_getPlayerEncryptionKey}) then {
- call cTab_fnc_updateUserMarkerList;
- };
- };
- };
- };
- // If received on a client, sent by the server
- if (hasInterface && !isNil "_transactionId") exitWith {
- call {
- if (cTab_userMarkerTransactionId == _transactionId) exitWith {};
- if (cTab_userMarkerTransactionId != (_transactionId -1)) exitWith {
- // get full list
- ["Transaction ID check failed! Had %1, received %2. Requesting user marker list.",cTab_userMarkerTransactionId,_transactionId] call bis_fnc_error;
- [] call cTab_fnc_getUserMarkerList;
- };
- cTab_userMarkerTransactionId = _transactionId;
-
- // get the marker list that corresponds to the encryption key
- _userMarkerList = [cTab_userMarkerLists,_encryptionKey] call cTab_fnc_getFromPairs;
- // try to find the marker to be removed
- _removeIndex = -1;
- {
- if (_x select 0 == _markerIndex) exitWith {_removeIndex = _forEachIndex};
- } forEach _userMarkerList;
-
- // if the marker could be found, remove it
- if (_removeIndex != -1) then {
- 0 = _userMarkerList deleteAt _removeIndex;
- [cTab_userMarkerLists,_encryptionKey,_userMarkerList] call cTab_fnc_setToPairs;
- // only update the user marker list if the marker was deleted from the player's side
- if (_encryptionKey == call cTab_fnc_getPlayerEncryptionKey) then {
- call cTab_fnc_updateUserMarkerList;
- };
- };
- };
- };
-
- // If received on a client, to be sent to the server
- if (hasInterface) then {
- [_this,"cTab_fnc_deleteUserMarker",false,false,true] call bis_fnc_MP;
- };
- };
- true
|