Files
DayZ-Epoch/SQF/dayz_code/groups/server_updateGroup.sqf

70 lines
1.9 KiB
Plaintext

private ["_event","_groupUIDs","_kickedUID","_name","_newGroup","_player","_playerUID","_save","_unit"];
_event = _this select 0;
_player = _this select 1;
_kickedUID = ["0",_this select 2] select (count _this > 2);
_name = ["unknown",name _player] select (alive _player);
_playerUID = getPlayerUID _player;
if (_event < 3) then {
//Small delay needed for group changes to propagate to server
uiSleep 1;
};
//Do not update if calling player is dead. Prevent saving dayz_firstGroup.
if (damage _player >= 1) exitWith {};
if (_event == -1) exitWith {
//Promote _player
PVDZ_groupInvite = [-1,_player];
(owner (leader group _player)) publicVariableClient "PVDZ_groupInvite";
};
_groupUIDs = [];
{
if (damage _x < 1 && {isPlayer _x}) then {
_groupUIDs set [count _groupUIDs,getPlayerUID _x];
};
} count (units group _player);
_newGroup = [];
_newGroup = call {
//Join
if (_event == 1) exitwith {_groupUIDs};
//Kick (target was already kicked from group)
if (_event == 2) exitwith {
_name = _kickedUID;
format["CHILD:204:%1:%2:%3:",_name,dayZ_instance,[]] call server_hiveWrite;
_groupUIDs
};
//Leave
if (_event == 3) exitwith {
dayz_groupLeft = true;
(owner _player) publicVariableClient "dayz_groupLeft";
(_groupUIDs - [_playerUID])
};
//Disband
if (_event == 4) exitwith {
_name = 0; //Not needed
dayz_groupDisbanded = true;
(owner _player) publicVariableClient "dayz_groupDisbanded";
[]
};
};
//Update all group members' saved group in DB
{
_save = [_newGroup,[]] select (_event == 3 && {_x == _playerUID});
format["CHILD:204:%1:%2:%3:",_x,dayZ_instance,_save] call server_hiveWrite;
} count _groupUIDs;
//Notify group members of the change
PVDZ_groupInvite = [_event,_name];
_groupUIDs set [count _groupUIDs,_kickedUID];
{
_unit = getPlayerUID _x;
if (_unit in _groupUIDs && {_unit != _playerUID}) then {
owner _x publicVariableClient "PVDZ_groupInvite";
};
} count allUnits;