mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 12:12:34 +03:00
The deleteGroup command requires the group to be local to the machine executing it: https://community.bistudio.com/wiki/deleteGroup When a player changes clothes a new group is created. The player is switched into a new unit in the new group, and then his old group is left empty. Because the old group is local to the player, it will not be deleted by server_cleanupGroups until he disconnects and it is transferred to the server. We should delete the old group immediately rather than wait for the player to disconnect. This will prevent the excessive accumulation of empty groups when players change clothes a lot. It will help with the seagull spawn issue which happens when there are more than 144 groups on side WEST: https://community.bistudio.com/wiki/createGroup
174 lines
5.2 KiB
Plaintext
174 lines
5.2 KiB
Plaintext
private ["_weapons","_backpackWpn","_backpackMag","_currentWpn","_isWeapon","_backpackWpnTypes","_backpackWpnQtys","_countr","_class","_position","_dir","_currentAnim","_tagSetting","_playerUID","_countMags","_magazines","_primweapon","_secweapon","_newBackpackType","_muzzles","_oldUnit","_group","_newUnit","_playerObjName","_wpnType","_ismelee","_oldGroup"];
|
|
if (gear_done) then {disableUserInput true;};
|
|
_class = _this;
|
|
_position = getPosATL player;
|
|
_dir = getDir player;
|
|
_currentAnim = animationState player;
|
|
_tagSetting = player getVariable["DZE_display_name",false];
|
|
_playerUID = [player] call FNC_GetPlayerUID;
|
|
_weapons = weapons player;
|
|
_countMags = call player_countMagazines;
|
|
_magazines = _countMags select 0;
|
|
|
|
if ((_playerUID == dayz_playerUID) && (count _magazines == 0) && (count (magazines player) > 0 )) exitWith {cutText [(localize "str_epoch_player_17"), "PLAIN DOWN"]};
|
|
|
|
_primweapon = primaryWeapon player;
|
|
_secweapon = secondaryWeapon player;
|
|
|
|
if(!(_primweapon in _weapons) && _primweapon != "") then {
|
|
_weapons set [(count _weapons), _primweapon];
|
|
};
|
|
|
|
if(!(_secweapon in _weapons) && _secweapon != "") then {
|
|
_weapons set [(count _weapons), _secweapon];
|
|
};
|
|
|
|
//BackUp Backpack
|
|
dayz_myBackpack = unitBackpack player;
|
|
_newBackpackType = (typeOf dayz_myBackpack);
|
|
if(_newBackpackType != "") then {
|
|
_backpackWpn = getWeaponCargo unitBackpack player;
|
|
_backpackMag = _countMags select 1;
|
|
};
|
|
|
|
//Get Muzzle
|
|
_currentWpn = currentWeapon player;
|
|
_muzzles = getArray(configFile >> "cfgWeapons" >> _currentWpn >> "muzzles");
|
|
if (count _muzzles > 1) then {
|
|
_currentWpn = currentMuzzle player;
|
|
};
|
|
|
|
//Secure Player for Transformation
|
|
player setPosATL dayz_spawnPos;
|
|
|
|
//BackUp Player Object
|
|
_oldUnit = player;
|
|
_oldGroup = group player;
|
|
|
|
/**********************************/
|
|
//DONT USE player AFTER THIS POINT//
|
|
/**********************************/
|
|
|
|
//Create New Character
|
|
_group = createGroup west;
|
|
_newUnit = _group createUnit [_class,dayz_spawnPos,[],0,"NONE"];
|
|
|
|
_newUnit setPosATL _position;
|
|
_newUnit setDir _dir;
|
|
|
|
//Clear New Character
|
|
{_newUnit removeMagazine _x;} count magazines _newUnit;
|
|
removeAllWeapons _newUnit;
|
|
|
|
//Equip New Charactar
|
|
{
|
|
if (typeName _x == "ARRAY") then {if ((count _x) > 0) then {_newUnit addMagazine [(_x select 0), (_x select 1)]; }; } else { _newUnit addMagazine _x; };
|
|
} count _magazines;
|
|
|
|
{
|
|
_newUnit addWeapon _x;
|
|
} count _weapons;
|
|
|
|
//Check && Compare it
|
|
if(str(_weapons) != str(weapons _newUnit)) then {
|
|
//Get Differecnce
|
|
{
|
|
_weapons = _weapons - [_x];
|
|
} count (weapons _newUnit);
|
|
|
|
//Add the Missing
|
|
{
|
|
_newUnit addWeapon _x;
|
|
} count _weapons;
|
|
};
|
|
|
|
if(_primweapon != (primaryWeapon _newUnit)) then {
|
|
_newUnit addWeapon _primweapon;
|
|
};
|
|
if (_primweapon == "MeleeCrowbar") then {
|
|
_newUnit addMagazine 'crowbar_swing';
|
|
};
|
|
if (_primweapon == "MeleeSledge") then {
|
|
_newUnit addMagazine 'sledge_swing';
|
|
};
|
|
if (_primweapon == "MeleeHatchet_DZE") then {
|
|
_newUnit addMagazine 'Hatchet_Swing';
|
|
};
|
|
if (_primweapon == "MeleeMachete") then {
|
|
_newUnit addMagazine 'Machete_swing';
|
|
};
|
|
if (_primweapon == "MeleeFishingPole") then {
|
|
_newUnit addMagazine 'Fishing_Swing';
|
|
};
|
|
|
|
if(_secweapon != (secondaryWeapon _newUnit) && _secweapon != "") then {
|
|
_newUnit addWeapon _secweapon;
|
|
};
|
|
_switchUnit = {
|
|
addSwitchableUnit _newUnit;
|
|
setPlayable _newUnit;
|
|
selectPlayer _newUnit;
|
|
removeAllWeapons _oldUnit;
|
|
{_oldUnit removeMagazine _x;} count magazines _oldUnit;
|
|
deleteVehicle _oldUnit;
|
|
if (count units _oldGroup < 1) then {deleteGroup _oldGroup;};
|
|
if(_currentWpn != "") then {_newUnit selectWeapon _currentWpn;};
|
|
};
|
|
//Add && Fill BackPack
|
|
if (!isNil "_newBackpackType") then {
|
|
if (_newBackpackType != "") then {
|
|
_newUnit addBackpack _newBackpackType;
|
|
dayz_myBackpack = unitBackpack _newUnit;
|
|
//Weapons
|
|
_backpackWpnTypes = [];
|
|
_backpackWpnQtys = [];
|
|
if (count _backpackWpn > 0) then {
|
|
_backpackWpnTypes = _backpackWpn select 0;
|
|
_backpackWpnQtys = _backpackWpn select 1;
|
|
};
|
|
[] call _switchUnit;
|
|
if (gear_done) then {sleep 0.001;};
|
|
["1"] call gearDialog_create;
|
|
if (gear_done) then {sleep 0.001;};
|
|
//magazines
|
|
_countr = 0;
|
|
{
|
|
if ((typeName _x) != "STRING") then {
|
|
_isWeapon = (isClass(configFile >> "CfgWeapons" >> (_x select 0)));
|
|
} else {
|
|
_isWeapon = (isClass(configFile >> "CfgWeapons" >> _x));
|
|
};
|
|
if (!_isWeapon) then {
|
|
_countr = _countr + 1;
|
|
if ((typeName _x) != "STRING") then {
|
|
(unitBackpack player) addMagazineCargoGlobal [(_x select 0), 1];
|
|
_idc = 4999 + _countr;
|
|
_idc setIDCAmmoCount (_x select 1);
|
|
} else {
|
|
(unitBackpack player) addMagazineCargoGlobal [_x, 1];
|
|
};
|
|
};
|
|
} count _backpackMag;
|
|
(findDisplay 106) closeDisplay 0;
|
|
if (gear_done) then {sleep 0.001; disableUserInput false;};
|
|
_countr = 0;
|
|
{
|
|
(unitBackpack player) addWeaponCargoGlobal [_x,(_backpackWpnQtys select _countr)];
|
|
_countr = _countr + 1;
|
|
} count _backpackWpnTypes;
|
|
} else { [] call _switchUnit; };
|
|
} else { [] call _switchUnit; };
|
|
[objNull, player, rSwitchMove,_currentAnim] call RE;
|
|
player disableConversation true;
|
|
if (_tagSetting) then {
|
|
DZE_ForceNameTags = true;
|
|
};
|
|
|
|
_wpnType = primaryWeapon player;
|
|
_ismelee = (gettext (configFile >> "CfgWeapons" >> _wpnType >> "melee"));
|
|
if (_ismelee == "true") then {
|
|
call dayz_meleeMagazineCheck;
|
|
};
|
|
|
|
{player reveal _x} count (nearestObjects [getPosATL player, dayz_reveal, 50]);
|