Files
DayZ-Epoch/SQF/dayz_code/compile/player_switchModel.sqf
oiad 854c41cf8c switchModel, jerry_fill, packTent changes/fixes (#1836)
* switchModel, jerry_fill, water_fill, drinkWater, packTent changes/fixes

player_packTent: Add private array since there was none. Make it match
player_packVault so a player can't pack the tent with others near (to
stop duping)

water_fill:
Fixed the massive lag issue with the check for ponds etc, Originally was
being done searching for all which is quite intensive, now only
searching for waterholeproxy which matches all the water holes on
chernarus I could try.
Fixed a few localizations. Thanks @schwanzkopfhegel

player_drinkWater: Same as above. Also removed a lot of unused private
variables.

jerry_fill:
Made the minimum fill level of fuel tanks 10% of
dayz_randomMaxFuelAmount so the tank will always have fuel
Fixed issue with ItemFuelBarrel only using 40 litres from a tank.
Thanks @schwanzkopfhegel
Display how much fuel was needed if the tank is empty
Fix issue if the tank was empty that dayz_actionInProgress was not reset

player_switchModel:
Fixed issue of coins dissapearing on gear change
Fixed old commented out code that was broken so now you will go back
into the camera view you were in before you changed clothes

* Revert drinkWater/water_fill changes

My previous commit can only be used on chernarus since it's the only map
that has the waterholeproxy we rely on.

* crafting localization fix

* Update german translations

* Rework

* Missed private variable

* Rework again

* Update german string
2016-12-29 19:47:04 -05:00

199 lines
7.0 KiB
Plaintext

private ["_weapons","_backpackWpn","_backpackMag","_currentWpn","_isWeapon","_backpackWpnTypes","_backpackWpnQtys","_countr","_class","_position","_dir","_currentAnim","_playerUID","_countMags","_magazines","_primweapon","_secweapon","_newBackpackType","_muzzles","_oldUnit","_group","_newUnit","_oldGroup","_idc","_display","_switchUnit","_leader","_currentCamera"];
_class = _this;
if (gear_done) then {disableUserInput true;disableUserInput true;};
disableSerialization;
//Old location system causes issues with players getting damaged during movement.
//_position = getPosATL player;
//New system testing needed.
_position = player modeltoWorld [0,0,0];
_dir = getDir player;
_currentAnim = animationState player;
_currentCamera = cameraView;
_playerUID = getPlayerUID player;
//BackUp Weapons and Mags
_weapons = weapons player;
_countMags = call player_countMagazinesWBackpack; //magazines player;
if (typeName _countMags != "ARRAY") exitWith {localize "str_actions_switchmodel_fail" call dayz_rollingMessages;};
_magazines = _countMags select 0;
if ((_playerUID == dayz_playerUID) && (count _magazines == 0) && (count (magazines player) > 0)) exitWith {
localize "str_actions_switchmodel_fail" call dayz_rollingMessages;
if (gear_done) then {
(findDisplay 106) closeDisplay 0; closeDialog 0;
disableUserInput false;disableUserInput false;disableUserInput false;disableUserInput false;
};
};
_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;
};
_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;
//Prevent client crash
_display = findDisplay 106;
_display closeDisplay 0;
//BackUp Player Object
_oldUnit = player;
_oldGroup = group player;
_leader = (player == leader _oldGroup);
/***********************************/
//DONT USE player AFTER THIS POINT
/***********************************/
//Create New Character
//[player] joinSilent grpNull;
_group = createGroup west;
_newUnit = _group createUnit [_class,respawn_west_original,[],0,"NONE"];
_newUnit setDir _dir;
{_newUnit removeMagazine _x;} count magazines _newUnit;
removeAllWeapons _newUnit;
//Equip New Character
{
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 and 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 (_secweapon != (secondaryWeapon _newUnit) && _secweapon != "") then {
_newUnit addWeapon _secweapon;
};
_switchUnit = {
//Make New Unit Playable (1 of these 3 commands causes crashes with gear dialog open)
//_oldUnit setPosATL [_position select 0 + cos(_dir) * 2, _position select 1 + sin(_dir) * 2, _position select 2];
addSwitchableUnit _newUnit;
setPlayable _newUnit;
selectPlayer _newUnit;
//Switch the units
_rndx = floor(random 100);
_rndy = floor(random 100);
_oldUnit setPosATL [(respawn_west_original select 0) + _rndx, (respawn_west_original select 1) + _rndy, 0];
_newUnit setPosATL [_position select 0,_position select 1,(_position select 2)+.1]; //Prevents swimming in ground glitch
removeAllWeapons _oldUnit;
{_oldUnit removeMagazine _x;} count magazines _oldUnit;
if !(isNull _oldUnit) then {deleteVehicle _oldUnit;};
if (!isNil "dayz_groupInit" && count (units _oldGroup) > 0) then {
[_newUnit] joinSilent _oldGroup;
if (count (units _group) == 0) then {deleteGroup _group;};
if (_leader) then {
//Request new leader promote player back to leader (group is local to leader)
PVDZ_Server_UpdateGroup = [-1,player];
publicVariableServer "PVDZ_Server_UpdateGroup";
};
};
if (count (units _oldGroup) == 0) then {deleteGroup _oldGroup;};
if (_currentWpn != "") then {_newUnit selectWeapon _currentWpn;};
};
//Add and Fill BackPack
if (!isNil "_newBackpackType" && {_newBackpackType != ""}) then {
_newUnit addBackpack _newBackpackType;
//_oldBackpack = dayz_myBackpack;
dayz_myBackpack = unitBackpack _newUnit;
_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;};
_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 {
dayz_myBackpack addMagazineCargoGlobal [_x select 0, 1];
_idc = 4999 + _countr;
_idc setIDCAmmoCount (_x select 1);
} else {
dayz_myBackpack addMagazineCargoGlobal [_x, 1];
};
};
} count _backpackMag;
(findDisplay 106) closeDisplay 0;
_countr = 0;
{
dayz_myBackpack addWeaponCargoGlobal [_x,(_backpackWpnQtys select _countr)];
_countr = _countr + 1;
} count _backpackWpnTypes;
} else {
call _switchUnit;
};
if (gear_done) then {disableUserInput false;disableUserInput false;disableUserInput false;disableUserInput false;};
//Debug Message
//diag_log "Swichtable Unit Created. Equipment:";
//diag_log format["Weapons: %1",weapons _newUnit];
//diag_log format["Magazines: %1",magazines _newUnit];
//diag_log format["Backpack weapons: %1",getWeaponCargo unitBackpack _newUnit];
//diag_log format["Backpack magazines: %1",getMagazineCargo unitBackpack _newUnit];
player switchCamera _currentCamera;
if (_currentWpn != "") then {_newUnit selectWeapon _currentWpn;};
[objNull, player, rSwitchMove, _currentAnim] call RE;
//dayz_originalPlayer attachTo [_newUnit];
player disableConversation true;
player setVariable ["BIS_noCoreConversations",true];
// _playerUID=getPlayerUID player;
// _playerObjName = format["player%1",_playerUID];
// call compile format["%1 = player;",_playerObjName];
// publicVariable _playerObjName;
call dayz_meleeMagazineCheck;
{player reveal _x} count (nearestObjects [getPosATL player,["AllVehicles","WeaponHolder","Land_A_tent","BuiltItems","ModularItems","DZE_Base_Object"],75]);