mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 20:13:13 +03:00
172 lines
4.5 KiB
Plaintext
172 lines
4.5 KiB
Plaintext
private ["_class","_position","_dir","_group","_oldUnit","_newUnit","_currentWpn","_muzzles","_currentAnim","_playerUID","_weapons","_magazines","_primweapon","_secweapon","_playerObjName","_wpnType","_ismelee","_tagSetting"];
|
|
_class = _this;
|
|
|
|
_position = getPosATL player;
|
|
_dir = getDir player;
|
|
_currentAnim = animationState player;
|
|
//_currentCamera = cameraView;
|
|
|
|
_tagSetting = player getVariable["DZE_display_name",false];
|
|
|
|
//Get PlayerID
|
|
_playerUID = "";
|
|
if (count playableUnits == 0 and isServer) then {
|
|
//In Single Player
|
|
isSinglePlayer = true;
|
|
player sidechat "Single player Mode detected!";
|
|
//_id = [42,"SinglePlayer"] spawn server_onPlayerConnect;
|
|
_playerUID = "42";
|
|
} else {
|
|
_playerUID = getPlayerUID player;
|
|
};
|
|
|
|
//BackUp Weapons and Mags
|
|
|
|
_weapons = weapons player;
|
|
_magazines = call player_countmagazines; //magazines player;
|
|
|
|
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;
|
|
|
|
//Checks
|
|
if(!(_primweapon in _weapons) && _primweapon != "") then {
|
|
_weapons = _weapons + [_primweapon];
|
|
};
|
|
|
|
if(!(_secweapon in _weapons) && _secweapon != "") then {
|
|
_weapons = _weapons + [_secweapon];
|
|
};
|
|
|
|
//Get Muzzle
|
|
_currentWpn = currentWeapon player;
|
|
_muzzles = getArray(configFile >> "cfgWeapons" >> _currentWpn >> "muzzles");
|
|
if (count _muzzles > 1) then {
|
|
_currentWpn = currentMuzzle player;
|
|
};
|
|
|
|
//Debug Message
|
|
/*
|
|
diag_log "Attempting to switch model";
|
|
diag_log str(_weapons);
|
|
diag_log str(_magazines);
|
|
diag_log (str(_backpackWpn));
|
|
diag_log (str(_backpackMag));
|
|
*/
|
|
|
|
//Secure Player for Transformation
|
|
player setPosATL dayz_spawnPos;
|
|
|
|
//BackUp Player Object
|
|
_oldUnit = player;
|
|
|
|
/***********************************/
|
|
//DONT USE player AFTER THIS POINT
|
|
/***********************************/
|
|
|
|
//Create New Character
|
|
//[player] joinSilent grpNull;
|
|
_group = createGroup west;
|
|
_newUnit = _group createUnit [_class,dayz_spawnPos,[],0,"NONE"];
|
|
|
|
_newUnit setPosATL _position;
|
|
_newUnit setDir _dir;
|
|
|
|
//Clear New Character
|
|
{_newUnit removeMagazine _x;} forEach magazines _newUnit;
|
|
removeAllWeapons _newUnit;
|
|
|
|
//Equip New Charactar
|
|
{
|
|
if (typeName _x == "ARRAY") then {_newUnit addMagazine [_x select 0,_x select 1] } else { _newUnit addMagazine _x };
|
|
} forEach _magazines;
|
|
|
|
{
|
|
_newUnit addWeapon _x;
|
|
} forEach _weapons;
|
|
|
|
//Check and Compare it
|
|
if(str(_weapons) != str(weapons _newUnit)) then {
|
|
//Get Differecnce
|
|
{
|
|
_weapons = _weapons - [_x];
|
|
} forEach (weapons _newUnit);
|
|
|
|
//Add the Missing
|
|
{
|
|
_newUnit addWeapon _x;
|
|
} forEach _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;
|
|
};
|
|
|
|
//Debug Message
|
|
/*
|
|
diag_log "Swichtable Unit Created. Equipment:";
|
|
diag_log str(weapons _newUnit);
|
|
diag_log str(magazines _newUnit);
|
|
diag_log str(getWeaponCargo unitBackpack _newUnit);
|
|
diag_log str(getMagazineCargo unitBackpack _newUnit);
|
|
*/
|
|
//Make New Unit Playable
|
|
addSwitchableUnit _newUnit;
|
|
setPlayable _newUnit;
|
|
selectPlayer _newUnit;
|
|
|
|
//Clear and delete old Unit
|
|
removeAllWeapons _oldUnit;
|
|
{_oldUnit removeMagazine _x;} forEach magazines _oldUnit;
|
|
|
|
deleteVehicle _oldUnit;
|
|
|
|
//Move player inside
|
|
|
|
// player switchCamera = _currentCamera;
|
|
if(_currentWpn != "") then {_newUnit selectWeapon _currentWpn;};
|
|
[objNull, player, rSwitchMove,_currentAnim] call RE;
|
|
//dayz_originalPlayer attachTo [_newUnit];
|
|
player disableConversation true;
|
|
|
|
player setVariable ["bodyName",dayz_playerName,true];
|
|
|
|
if (_tagSetting) then {
|
|
DZE_ForceNameTags = true;
|
|
};
|
|
|
|
_playerUID=getPlayerUID player;
|
|
_playerObjName = format["player%1",_playerUID];
|
|
call compile format["%1 = player;",_playerObjName];
|
|
publicVariable _playerObjName;
|
|
|
|
//melee check
|
|
_wpnType = primaryWeapon player;
|
|
_ismelee = (gettext (configFile >> "CfgWeapons" >> _wpnType >> "melee"));
|
|
if (_ismelee == "true") then {
|
|
call dayz_meleeMagazineCheck;
|
|
};
|
|
|
|
//reveal the same objects we do on login
|
|
{player reveal _x} forEach (nearestObjects [getPosATL player, dayz_reveal, 50]); |