From 5f640933d9b469511e07d871e27ee00194fef78f Mon Sep 17 00:00:00 2001 From: vbawol Date: Tue, 3 Oct 2017 09:11:18 -0500 Subject: [PATCH] optimize remoteexec usage for multiple targets --- .../environment/EPOCH_client_bitePlayer.sqf | 8 ++++++-- .../epoch_group/EPOCH_server_invitePlayer.sqf | 8 ++++---- .../EPOCH_server_invitePlayerTempGroup.sqf | 8 ++++---- .../epoch_server/EPOCH_server_makeMarker.sqf | 13 ++++++------- .../epoch_server/EPOCH_server_removeMarker.sqf | 15 ++++++++------- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf index e4b05d05..8f8bc997 100644 --- a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf +++ b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf @@ -36,11 +36,12 @@ if (isNull objectParent _target) then { } else { // send attack to other player if (isPlayer _target) then { - [_unit,_target] remoteExec ["EPOCH_client_bitePlayer", _target]; + [_unit] remoteExec ["EPOCH_client_bitePlayer", _target]; }; }; } else { // target is inside a vehicle, target entire vehicle crew + private _targets = []; { if (_x isEqualTo player) then { // handle attack for local player if inside vehicle @@ -49,10 +50,13 @@ if (isNull objectParent _target) then { } else { // send attack to other players if (isPlayer _x) then { - [_unit,_x] remoteExec ["EPOCH_client_bitePlayer", _x]; + _targets pushBack _x; }; }; } forEach (crew _target); + if !(_targets isEqualTo []) then { + [_unit] remoteExec ["EPOCH_client_bitePlayer", _targets]; + }; }; if (_doAttack) then { diff --git a/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf b/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf index 562e44a9..6720031e 100644 --- a/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf +++ b/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf @@ -14,7 +14,7 @@ */ params ["_playerUID","_var1","_var2","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; - -{ - [_var1, _var2] remoteExec ['EPOCH_Group_invitePlayer',_x]; -} forEach (allPlayers select {getPlayerUID _x == _playerUID}); +private _targets = allPlayers select {getPlayerUID _x == _playerUID}; +if !(_targets isEqualTo []) then { + [_var1, _var2] remoteExec ['EPOCH_Group_invitePlayer',_targets]; +}; diff --git a/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf b/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf index 624d1526..f36fb595 100644 --- a/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf +++ b/Sources/epoch_server/compile/epoch_grouptemp/EPOCH_server_invitePlayerTempGroup.sqf @@ -14,7 +14,7 @@ */ params ["_playerUID","_var1","_var2","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; - -{ - [_var1, _var2] remoteExec ['EPOCH_tempGroup_invitePlayer',_x]; -} forEach (allPlayers select {getPlayerUID _x == _playerUID}); +private _targets = allPlayers select {getPlayerUID _x == _playerUID}; +if !(_targets isEqualTo []) then { + [_var1, _var2] remoteExec ['EPOCH_tempGroup_invitePlayer',_targets]; +}; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf index 4620194c..66731f14 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf @@ -37,9 +37,10 @@ switch _trgtType do { case 1: { if!(isNull _trgtObj)then{ - { - [_x,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_x]; - }foreach (units group _trgtObj); + private _targets = (units group _trgtObj); + if !(_targets isEqualTo []) then { + [nil,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_targets]; + }; }; }; @@ -57,10 +58,8 @@ switch _trgtType do { }; case 3: { - if(isArray _trgtObj && count _trgtObj > 0)then{ - { - [_x,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_x]; - }foreach _trgtObj; + if(_trgtObj isEqualType [] && {!(_trgtObj isEqualTo [])})then{ + [nil,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_trgtObj]; }; }; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf index 59302e34..5ee6739b 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf @@ -31,9 +31,10 @@ switch _trgtType do { case 1: { if!(isNull _trgtObj)then{ - { - [_mrkrName] remoteExec ['EPOCH_removeMarker',_x]; - }foreach (units group _trgtObj); + private _targets = (units group _trgtObj); + if !(_targets isEqualTo []) then { + [_mrkrName] remoteExec ['EPOCH_removeMarker',_targets]; + }; }; }; @@ -42,10 +43,10 @@ switch _trgtType do { }; case 3: { - if(isArray _trgtObj && count _trgtObj > 0)then{ - { - [_mrkrName] remoteExec ['EPOCH_removeMarker',_x]; - }foreach _trgtObj; + if(_trgtObj isEqualType [] && {!(_trgtObj isEqualTo [])})then{ + if !(_trgtObj isEqualTo []) then { + [_mrkrName] remoteExec ['EPOCH_removeMarker',_trgtObj]; + }; }; };