ACE3/addons/medical/functions/fnc_makeCopyOfBody_f.sqf

75 lines
2.6 KiB
Plaintext
Raw Normal View History

2015-01-16 23:21:47 +00:00
/**
* fn_makeCopyOfBody_f.sqf
* @Descr: Makes a copy of a dead body. For handling dead bodies for actions such as load and carry.
* @Author: Glowbal
*
* @Arguments: [oldBody OBJECT, caller OBJECT]
* @Return: newUnit OBJECT Returns the copy of the unit. If no copy could be made, returns the oldBody
* @PublicAPI: false
*/
#include "script_component.hpp"
private ["_oldBody","_newUnit","_class","_group","_position","_side","_allVariables"];
_oldBody = _this select 0;
_caller = _this select 1;
2015-01-18 19:09:19 +00:00
if (alive _oldBody) exitwith {_oldBody}; // we only want to do this for dead bodies
2015-01-24 20:16:51 +00:00
_name = _oldBody getvariable ["ACE_name","unknown"];
2015-01-18 19:09:19 +00:00
_class = typeof _oldBody;
_side = side _caller;
_group = createGroup _side;
_position = getPos _oldBody;
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit = _group createUnit [typeof _oldBody, _position, [], 0, "NONE"];
2015-01-16 23:21:47 +00:00
_allVariables = [_oldBody] call EFUNC(common,getAllDefinedSetVariables);
2015-01-18 19:09:19 +00:00
// [NAME (STRING), TYPENAME (STRING), VALUE (ANY), DEFAULT GLOBAL (BOOLEAN)]
{
[_newUnit,_x select 0, _x select 2] call EFUNC(common,setDefinedVariable);
2015-01-18 19:09:19 +00:00
}foreach _allVariables;
2015-01-24 20:16:51 +00:00
_newUnit setVariable ["ACE_name",_name,true];
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit disableAI "TARGET";
_newUnit disableAI "AUTOTARGET";
_newUnit disableAI "MOVE";
_newUnit disableAI "ANIM";
_newUnit disableAI "FSM";
_newUnit setvariable ["ACE_isDead",true,true];
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
removeallweapons _newUnit;
removeallassigneditems _newUnit;
removeUniform _newUnit;
removeHeadgear _newUnit;
removeBackpack _newUnit;
removeVest _newUnit;
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit addHeadgear (headgear _oldBody);
_newUnit addBackpack (backpack _oldBody);
clearItemCargoGlobal (backpackContainer _newUnit);
clearMagazineCargoGlobal (backpackContainer _newUnit);
clearWeaponCargoGlobal (backpackContainer _newUnit);
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit addVest (vest _oldBody);
clearItemCargoGlobal (backpackContainer _newUnit);
clearMagazineCargoGlobal (backpackContainer _newUnit);
clearWeaponCargoGlobal (backpackContainer _newUnit);
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit addUniform (uniform _oldBody);
clearItemCargoGlobal (backpackContainer _newUnit);
clearMagazineCargoGlobal (backpackContainer _newUnit);
clearWeaponCargoGlobal (backpackContainer _newUnit);
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
{_newUnit addMagazine _x} count (magazines _oldBody);
{_newUnit addWeapon _x} count (weapons _oldBody);
{_newUnit addItem _x} count (items _oldBody);
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit selectWeapon (primaryWeapon _newUnit);
//_newUnit playMoveNow ([_newUnit] call FUNC(getDeathAnim));
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
deleteVehicle _oldBody;
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
// TODO sometimes the old body does not get cleaned up properly. Look into garbage collection.
2015-01-16 23:21:47 +00:00
2015-01-18 19:09:19 +00:00
_newUnit setDamage 0.9;
2015-01-16 23:21:47 +00:00
_newUnit