mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-13 19:52:38 +03:00
125 lines
4.5 KiB
Plaintext
125 lines
4.5 KiB
Plaintext
/*
|
|
Simple class system to use this script.
|
|
class Upgrade {
|
|
requiredTools[] = {"ItemToolbox"};
|
|
requiredParts[] = {"equip_crate","PartWoodPile"};
|
|
create = "TentStorage1";
|
|
};
|
|
*/
|
|
if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; };
|
|
dayz_actionInProgress = true;
|
|
|
|
private ["_cursorTarget","_item","_classname","_requiredTools","_requiredParts","_upgrade","_upgradeConfig",
|
|
"_upgradeDisplayname","_onLadder","_isWater","_upgradeParts","_startUpgrade","_missingPartsConfig","_textMissingParts","_dis",
|
|
"_sfx","_ownerID","_dir","_weapons","_magazines","_backpacks","_object",
|
|
"_itemName","_vector","_playerNear","_finished"];
|
|
|
|
_cursorTarget = _this select 3;
|
|
|
|
_ownerID = _cursorTarget getVariable ["characterID","0"];
|
|
|
|
if (isNil "_cursorTarget" or {isNull _cursorTarget}) exitWith {
|
|
localize "str_cursorTargetNotFound" call dayz_rollingMessages;
|
|
dayz_actionInProgress = false;
|
|
};
|
|
|
|
_item = typeOf _cursorTarget;
|
|
|
|
player removeAction s_player_upgradestorage;
|
|
s_player_upgradestorage = -1;
|
|
|
|
_classname = configFile >> "CfgVehicles" >> _item;
|
|
_requiredTools = getArray (_classname >> "Upgrade" >> "requiredTools");
|
|
_requiredParts = getArray (_classname >> "Upgrade" >> "requiredParts");
|
|
_upgrade = getText (_classname >> "Upgrade" >> "create");
|
|
_upgradeConfig = configFile >> "CfgVehicles" >> _upgrade;
|
|
_upgradeDisplayname = getText (_upgradeConfig >> "displayName");
|
|
|
|
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
|
|
_isWater = (surfaceIsWater (getPosATL player)) or dayz_isSwimming;
|
|
if (_isWater or _onLadder) exitWith {dayz_actionInProgress = false; localize "str_CannotUpgrade" call dayz_rollingMessages;};
|
|
|
|
_upgradeParts = [];
|
|
_startUpgrade = true;
|
|
|
|
_playerNear = {isPlayer _x} count (([_cursorTarget] call FNC_GetPos) nearEntities ["CAManBase", 12]) > 1;
|
|
if (_playerNear) exitWith {dayz_actionInProgress = false; localize "str_pickup_limit_5" call dayz_rollingMessages;};
|
|
|
|
{
|
|
if (!(_x in items player)) exitWith {
|
|
_missingPartsConfig = configFile >> "CfgWeapons" >> _x;
|
|
_textMissingParts = getText (_missingPartsConfig >> "displayName");
|
|
|
|
format [localize "str_missing_to_do_this", _textMissingParts] call dayz_rollingMessages;
|
|
|
|
_startUpgrade = false;
|
|
};
|
|
} count _requiredTools;
|
|
|
|
{
|
|
if (!(_x in magazines player)) exitWith {
|
|
_missingPartsConfig = configFile >> "CfgMagazines" >> _x;
|
|
_textMissingParts = getText (_missingPartsConfig >> "displayName");
|
|
|
|
format [localize "str_missing_to_do_this", _textMissingParts] call dayz_rollingMessages;
|
|
_startUpgrade = false;
|
|
};
|
|
if (_x in magazines player) then {_upgradeParts set [count _upgradeParts, _x];};
|
|
} count _requiredParts;
|
|
|
|
if ((_startUpgrade) && (isClass(_upgradeConfig))) then {
|
|
_dis = 20;
|
|
_sfx = "tentpack";
|
|
[player,_sfx,0,false,_dis] call dayz_zombieSpeak;
|
|
["Working",0,[100,15,5,0]] call dayz_NutritionSystem;
|
|
[player,_dis,true,(getPosATL player)] call player_alertZombies;
|
|
|
|
_finished = ["Medic",1] call fn_loopAction;
|
|
if (!_finished || (isNull _cursorTarget) || ({!(_x in magazines player)} count _upgradeParts > 0)) exitWith {}; //Double check player did not drop required parts
|
|
|
|
_dir = round getDir _cursorTarget;
|
|
_vector = [vectorDir _cursorTarget,vectorUp _cursorTarget];
|
|
|
|
_cursorTarget setDir 0;
|
|
_pos = getPosATL _cursorTarget;
|
|
|
|
if (abs(((_vector select 1) select 2) - 1) > 0.001) then { _pos set [2,0]; };
|
|
|
|
_weapons = getWeaponCargo _cursorTarget;
|
|
_magazines = getMagazineCargo _cursorTarget;
|
|
_backpacks = getBackpackCargo _cursorTarget;
|
|
|
|
PVDZ_obj_Destroy = [netID player,netID _pos,dayz_authKey];
|
|
publicVariableServer "PVDZ_obj_Destroy";
|
|
|
|
{
|
|
player removeMagazine _x;
|
|
_upgradeParts = _upgradeParts - [_x];
|
|
} count _upgradeParts;
|
|
|
|
_object = createVehicle [_upgrade, getMarkerpos "respawn_west", [], 0, "CAN_COLLIDE"];
|
|
|
|
_object setDir 0;
|
|
_object setPosATL _pos;
|
|
_object setVectorDirAndUp _vector;
|
|
_object setVariable ["characterID",_ownerID];
|
|
|
|
player reveal _object;
|
|
|
|
[_weapons,_magazines,_backpacks,_object] call fn_addCargo;
|
|
|
|
_object setVariable ["ownerPUID",dayz_playerUID,true];
|
|
PVDZ_obj_Publish = [dayz_characterID,_object,[_dir,_pos,dayz_playerUID],[_weapons,_magazines,_backpacks],player,dayz_authKey];
|
|
|
|
publicVariableServer "PVDZ_obj_Publish";
|
|
//diag_log [diag_ticktime, __FILE__, "New Networked object, request to save to hive. PVDZ_obj_Publish:", PVDZ_obj_Publish];
|
|
|
|
localize "str_upgradeDone" call dayz_rollingMessages;
|
|
/*
|
|
} else {
|
|
localize "str_upgradeNoOption" call dayz_rollingMessages;
|
|
*/
|
|
};
|
|
|
|
dayz_actionInProgress = false;
|