Advertisement
Guest User

Untitled

a guest
Mar 5th, 2013
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 17.42 KB | None | 0 0
  1. scriptName "Functions\misc\fn_selfActions.sqf";
  2. /***********************************************************
  3.     ADD ACTIONS FOR SELF
  4.     - Function
  5.     - [] call fnc_usec_selfActions;
  6. ************************************************************/
  7. private["_menClose","_hasBandage","_hasEpi","_hasMorphine","_hasBlood","_vehicle","_inVehicle","_color","_part"];
  8.  
  9. _vehicle = vehicle player;
  10. _inVehicle = (_vehicle != player);
  11. _bag = unitBackpack player;
  12. _classbag = typeOf _bag;
  13. _isWater =      (surfaceIsWater (position player)) or dayz_isSwimming;
  14. _hasAntiB =     "ItemAntibiotic" in magazines player;
  15. _hasFuelE =     "ItemJerrycanEmpty" in magazines player;
  16. //boiled Water
  17. _hasbottleitem = "ItemWaterbottle" in magazines player;
  18. _hastinitem = false;
  19. {
  20.     if (_x in magazines player) then {
  21.         _hastinitem = true;
  22.     };
  23.  
  24. } forEach boil_tin_cans;
  25.  
  26.  
  27. _hasKnife =     "ItemKnife" in items player;
  28. _hasToolbox =   "ItemToolbox" in items player;
  29. //_hasTent =        "ItemTent" in items player;
  30. _onLadder =     (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
  31. _nearLight =    nearestObject [player,"LitObject"];
  32. _canPickLight = false;
  33.  
  34. if (!isNull _nearLight) then {
  35.     if (_nearLight distance player < 4) then {
  36.         _canPickLight = isNull (_nearLight getVariable ["owner",objNull]);
  37.     };
  38. };
  39. _canDo = (!r_drag_sqf and !r_player_unconscious and !_onLadder);
  40.  
  41. //Grab Flare
  42. if (_canPickLight and !dayz_hasLight) then {
  43.     if (s_player_grabflare < 0) then {
  44.         _text = getText (configFile >> "CfgAmmo" >> (typeOf _nearLight) >> "displayName");
  45.         s_player_grabflare = player addAction [format[localize "str_actions_medical_15",_text], "\z\addons\dayz_code\actions\flare_pickup.sqf",_nearLight, 1, false, true, "", ""];
  46.         s_player_removeflare = player addAction [format[localize "str_actions_medical_17",_text], "\z\addons\dayz_code\actions\flare_remove.sqf",_nearLight, 1, false, true, "", ""];
  47.     };
  48. } else {
  49.     player removeAction s_player_grabflare;
  50.     player removeAction s_player_removeflare;
  51.     s_player_grabflare = -1;
  52.     s_player_removeflare = -1;
  53. };
  54.  
  55. if (!isNull cursorTarget and !_inVehicle and (player distance cursorTarget < 4)) then { //Has some kind of target
  56.     _isHarvested = cursorTarget getVariable["meatHarvested",false];
  57.     _isVehicle = cursorTarget isKindOf "AllVehicles";
  58.     _isVehicletype = typeOf cursorTarget in ["ATV_US_EP1","ATV_CZ_EP1"];
  59.     _isMan = cursorTarget isKindOf "Man";
  60.     _ownerID = cursorTarget getVariable ["characterID","0"];
  61.     _isAnimal = cursorTarget isKindOf "Animal";
  62.     _isDog =  (cursorTarget isKindOf "DZ_Pastor" || cursorTarget isKindOf "DZ_Fin");
  63.     _isZombie = cursorTarget isKindOf "zZombie_base";
  64.     _isDestructable = cursorTarget isKindOf "BuiltItems";
  65.     _isTent = cursorTarget isKindOf "TentStorage";
  66.     _isFuel = false;
  67.     _isAlive = alive cursorTarget;
  68.     _canmove = canmove cursorTarget;
  69.     _text = getText (configFile >> "CfgVehicles" >> typeOf cursorTarget >> "displayName");
  70.    
  71.    
  72.     _rawmeat = meatraw;
  73.     _hasRawMeat = false;
  74.         {
  75.             if (_x in magazines player) then {
  76.                 _hasRawMeat = true;
  77.             };
  78.         } forEach _rawmeat;
  79.    
  80.    
  81.     if (_hasFuelE) then {
  82.         _isFuel = (cursorTarget isKindOf "Land_Ind_TankSmall") or (cursorTarget isKindOf "Land_fuel_tank_big") or (cursorTarget isKindOf "Land_fuel_tank_stairs") or (cursorTarget isKindOf "Land_wagon_tanker");
  83.     };
  84.     //diag_log ("OWNERID = " + _ownerID + " CHARID = " + dayz_characterID + " " + str(_ownerID == dayz_characterID));
  85.    
  86.     //Allow player to delete objects
  87.     if(_isDestructable and _hasToolbox and _canDo) then {
  88.         if (s_player_deleteBuild < 0) then {
  89.             s_player_deleteBuild = player addAction [format[localize "str_actions_delete",_text], "\z\addons\dayz_code\actions\remove.sqf",cursorTarget, 1, true, true, "", ""];
  90.         };
  91.     } else {
  92.         player removeAction s_player_deleteBuild;
  93.         s_player_deleteBuild = -1;
  94.     };
  95.    
  96.     /*
  97.     //Allow player to force save
  98.     if((_isVehicle or _isTent) and _canDo and !_isMan) then {
  99.         if (s_player_forceSave < 0) then {
  100.             s_player_forceSave = player addAction [format[localize "str_actions_save",_text], "\z\addons\dayz_code\actions\forcesave.sqf",cursorTarget, 1, true, true, "", ""];
  101.         };
  102.     } else {
  103.         player removeAction s_player_forceSave;
  104.         s_player_forceSave = -1;
  105.     };
  106.     */
  107.     //flip vehicle
  108.     if ((_isVehicletype) and !_canmove and _isAlive and (player distance cursorTarget >= 2) and (count (crew cursorTarget))== 0 and ((vectorUp cursorTarget) select 2) < 0.5) then {
  109.         if (s_player_flipveh  < 0) then {
  110.             s_player_flipveh = player addAction [format[localize "str_actions_flipveh",_text], "\z\addons\dayz_code\actions\player_flipvehicle.sqf",cursorTarget, 1, true, true, "", ""];      
  111.         }; 
  112.     } else {
  113.         player removeAction s_player_flipveh;
  114.         s_player_flipveh = -1;
  115.     };
  116.    
  117.     //Allow player to fill jerrycan
  118.     if(_hasFuelE and _isFuel and _canDo) then {
  119.         if (s_player_fillfuel < 0) then {
  120.             s_player_fillfuel = player addAction [localize "str_actions_self_10", "\z\addons\dayz_code\actions\jerry_fill.sqf",[], 1, false, true, "", ""];
  121.         };
  122.     } else {
  123.         player removeAction s_player_fillfuel;
  124.         s_player_fillfuel = -1;
  125.     };
  126.    
  127.     if (!alive cursorTarget and _isAnimal and _hasKnife and !_isHarvested and _canDo) then {
  128.         if (s_player_butcher < 0) then {
  129.             s_player_butcher = player addAction [localize "str_actions_self_04", "\z\addons\dayz_code\actions\gather_meat.sqf",cursorTarget, 3, true, true, "", ""];
  130.         };
  131.     } else {
  132.         player removeAction s_player_butcher;
  133.         s_player_butcher = -1;
  134.     };
  135.    
  136.     //Fireplace Actions check
  137.     if (inflamed cursorTarget and _hasRawMeat and _canDo) then {
  138.         if (s_player_cook < 0) then {
  139.             s_player_cook = player addAction [localize "str_actions_self_05", "\z\addons\dayz_code\actions\cook.sqf",cursorTarget, 3, true, true, "", ""];
  140.         };
  141.     } else {
  142.         player removeAction s_player_cook;
  143.         s_player_cook = -1;
  144.     };
  145.     if (inflamed cursorTarget and (_hasbottleitem and _hastinitem) and _canDo) then {
  146.         if (s_player_boil < 0) then {
  147.             s_player_boil = player addAction [localize "str_actions_boilwater", "\z\addons\dayz_code\actions\boil.sqf",cursorTarget, 3, true, true, "", ""];
  148.         };
  149.     } else {
  150.         player removeAction s_player_boil;
  151.         s_player_boil = -1;
  152.     };
  153.    
  154.     if(cursorTarget == dayz_hasFire and _canDo) then {
  155.         if ((s_player_fireout < 0) and !(inflamed cursorTarget) and (player distance cursorTarget < 3)) then {
  156.             s_player_fireout = player addAction [localize "str_actions_self_06", "\z\addons\dayz_code\actions\fire_pack.sqf",cursorTarget, 0, false, true, "",""];
  157.         };
  158.     } else {
  159.         player removeAction s_player_fireout;
  160.         s_player_fireout = -1;
  161.     };
  162.    
  163.     //Packing my tent
  164.     if(cursorTarget isKindOf "TentStorage" and _canDo and _ownerID == dayz_characterID) then {
  165.         if ((s_player_packtent < 0) and (player distance cursorTarget < 3)) then {
  166.             s_player_packtent = player addAction [localize "str_actions_self_07", "\z\addons\dayz_code\actions\tent_pack.sqf",cursorTarget, 0, false, true, "",""];
  167.         };
  168.     } else {
  169.         player removeAction s_player_packtent;
  170.         s_player_packtent = -1;
  171.         };
  172.    
  173.     //Sleep
  174.     if(cursorTarget isKindOf "TentStorage" and _canDo and _ownerID == dayz_characterID) then {
  175.         if ((s_player_sleep < 0) and (player distance cursorTarget < 3)) then {
  176.             s_player_sleep = player addAction [localize "str_actions_self_sleep", "\z\addons\dayz_code\actions\player_sleep.sqf",cursorTarget, 0, false, true, "",""];
  177.         };
  178.     } else {
  179.         player removeAction s_player_sleep;
  180.         s_player_sleep = -1;
  181.     };
  182. // Remove Parts from Vehicles - By SilverShot.
  183. if( !_isMan and _canDo and _hasToolbox and (silver_myCursorTarget != cursorTarget) and cursorTarget isKindOf "AllVehicles" and (getDammage cursorTarget < 0.95) ) then {
  184. _vehicle = cursorTarget;
  185. _invalidVehicle = (_vehicle isKindOf "Motorcycle") or (_vehicle isKindOf "Tractor"); //or (_vehicle isKindOf "ATV_US_EP1") or (_vehicle isKindOf "ATV_CZ_EP1");
  186. if( !_invalidVehicle ) then {
  187. {silver_myCursorTarget removeAction _x} forEach s_player_removeActions;
  188. s_player_removeActions = [];
  189. silver_myCursorTarget = _vehicle;
  190.  
  191. _hitpoints = _vehicle call vehicle_getHitpoints;
  192.  
  193. {
  194. _damage = [_vehicle,_x] call object_getHit;
  195.  
  196. if( _damage < 0.15 ) then {
  197.  
  198. //change "HitPart" to " - Part" rather than complicated string replace
  199. _cmpt = toArray (_x);
  200. _cmpt set [0,20];
  201. _cmpt set [1,toArray ("-") select 0];
  202. _cmpt set [2,20];
  203. _cmpt = toString _cmpt;
  204.  
  205. _skip = true;
  206. if( _skip and _x == "HitFuel" ) then { _skip = false; _part = "PartFueltank"; _cmpt = _cmpt + "tank"};
  207. if( _skip and _x == "HitEngine" ) then { _skip = false; _part = "PartEngine"; };
  208. if( _skip and _x == "HitLFWheel" ) then { _skip = false; _part = "PartWheel"; };
  209. if( _skip and _x == "HitRFWheel" ) then { _skip = false; _part = "PartWheel"; };
  210. if( _skip and _x == "HitLBWheel" ) then { _skip = false; _part = "PartWheel"; };
  211. if( _skip and _x == "HitRBWheel" ) then { _skip = false; _part = "PartWheel"; };
  212. if( _skip and _x == "HitGlass1" ) then { _skip = false; _part = "PartGlass"; };
  213. if( _skip and _x == "HitGlass2" ) then { _skip = false; _part = "PartGlass"; };
  214. if( _skip and _x == "HitGlass3" ) then { _skip = false; _part = "PartGlass"; };
  215. if( _skip and _x == "HitGlass4" ) then { _skip = false; _part = "PartGlass"; };
  216. if( _skip and _x == "HitGlass5" ) then { _skip = false; _part = "PartGlass"; };
  217. if( _skip and _x == "HitGlass6" ) then { _skip = false; _part = "PartGlass"; };
  218. if( _skip and _x == "HitHRotor" ) then { _skip = false; _part = "PartVRotor"; };
  219.  
  220. if (!_skip ) then {
  221. _string = format["<t color='#0096ff'>Remove%1</t>",_cmpt,_color]; //Remove - Part
  222. _handle = silver_myCursorTarget addAction [_string, "Scripts\ss_remove.sqf",[_vehicle,_part,_x], 0, false, true, "",""];
  223. s_player_removeActions set [count s_player_removeActions,_handle];
  224. };
  225. };
  226.  
  227. } forEach _hitpoints;
  228. };
  229. };
  230.     //Repairing Vehicles
  231.     if ((dayz_myCursorTarget != cursorTarget) and _isVehicle and !_isMan and _hasToolbox and (damage cursorTarget < 1)) then {
  232.         _vehicle = cursorTarget;
  233.         {dayz_myCursorTarget removeAction _x} forEach s_player_repairActions;s_player_repairActions = [];
  234.         dayz_myCursorTarget = _vehicle;
  235.  
  236.         _allFixed = true;
  237.         _hitpoints = _vehicle call vehicle_getHitpoints;
  238.        
  239.         {
  240.             _damage = [_vehicle,_x] call object_getHit;
  241.             _part = "PartGeneric";
  242.            
  243.             //change "HitPart" to " - Part" rather than complicated string replace
  244.             _cmpt = toArray (_x);
  245.             _cmpt set [0,20];
  246.             _cmpt set [1,toArray ("-") select 0];
  247.             _cmpt set [2,20];
  248.             _cmpt = toString _cmpt;
  249.                
  250.             if(["Engine",_x,false] call fnc_inString) then {
  251.                 _part = "PartEngine";
  252.             };
  253.                    
  254.             if(["HRotor",_x,false] call fnc_inString) then {
  255.                 _part = "PartVRotor"; //yes you need PartVRotor to fix HRotor LOL
  256.             };
  257.  
  258.             if(["Fuel",_x,false] call fnc_inString) then {
  259.                 _part = "PartFueltank";
  260.             };
  261.            
  262.             if(["Wheel",_x,false] call fnc_inString) then {
  263.                 _part = "PartWheel";
  264.  
  265.             };
  266.                    
  267.             if(["Glass",_x,false] call fnc_inString) then {
  268.                 _part = "PartGlass";
  269.             };
  270.  
  271.             // get every damaged part no matter how tiny damage is!
  272.             if (_damage > 0) then {
  273.                
  274.                 _allFixed = false;
  275.                 _color = "color='#ffff00'"; //yellow
  276.                 if (_damage >= 0.5) then {_color = "color='#ff8800'";}; //orange
  277.                 if (_damage >= 0.9) then {_color = "color='#ff0000'";}; //red
  278.  
  279.                 _string = format["<t %2>Repair%1</t>",_cmpt,_color]; //Repair - Part
  280.                 _handle = dayz_myCursorTarget addAction [_string, "\z\addons\dayz_code\actions\repair.sqf",[_vehicle,_part,_x], 0, false, true, "",""];
  281.                 s_player_repairActions set [count s_player_repairActions,_handle];
  282.  
  283.             };
  284.                    
  285.         } forEach _hitpoints;
  286.         if (_allFixed) then {
  287.             _vehicle setDamage 0;
  288.         };
  289.     };
  290.    
  291.     if (_isMan and !_isAlive and !_isZombie) then {
  292.         if (s_player_studybody < 0) then {
  293.             s_player_studybody = player addAction [localize "str_action_studybody", "\z\addons\dayz_code\actions\study_body.sqf",cursorTarget, 0, false, true, "",""];
  294.         };
  295.     } else {
  296.         player removeAction s_player_studybody;
  297.         s_player_studybody = -1;
  298.     };
  299.  
  300.     //Dog
  301.     if (_isDog and _isAlive and (_hasRawMeat) and _canDo and _ownerID == "0" and player getVariable ["dogID", 0] == 0) then {
  302.         if (s_player_tamedog < 0) then {
  303.             s_player_tamedog = player addAction [localize "str_actions_tamedog", "\z\addons\dayz_code\actions\tame_dog.sqf", cursorTarget, 1, false, true, "", ""];
  304.         };
  305.     } else {
  306.         player removeAction s_player_tamedog;
  307.         s_player_tamedog = -1;
  308.     };
  309.    
  310.     if (_isDog and _ownerID == dayz_characterID and _isAlive and _canDo) then {
  311.         _dogHandle = player getVariable ["dogID", 0];
  312.         if (s_player_feeddog < 0 and _hasRawMeat) then {
  313.             s_player_feeddog = player addAction [localize "str_actions_feeddog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,0], 0, false, true,"",""];
  314.         };
  315.         if (s_player_waterdog < 0 and "ItemWaterbottle" in magazines player) then {
  316.             s_player_waterdog = player addAction [localize "str_actions_waterdog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,1], 0, false, true,"",""];
  317.         };
  318.         if (s_player_staydog < 0) then {
  319.             _lieDown = _dogHandle getFSMVariable "_actionLieDown";
  320.             if (_lieDown) then { _text = "str_actions_liedog"; } else { _text = "str_actions_sitdog"; };
  321.             s_player_staydog = player addAction [localize _text,"\z\addons\dayz_code\actions\dog\stay.sqf", _dogHandle, 5, false, true,"",""];
  322.         };
  323.         if (s_player_trackdog < 0) then {
  324.             s_player_trackdog = player addAction [localize "str_actions_trackdog","\z\addons\dayz_code\actions\dog\track.sqf", _dogHandle, 4, false, true,"",""];
  325.         };
  326.         if (s_player_barkdog < 0) then {
  327.             s_player_barkdog = player addAction [localize "str_actions_barkdog","\z\addons\dayz_code\actions\dog\speak.sqf", cursorTarget, 3, false, true,"",""];
  328.         };
  329.         if (s_player_warndog < 0) then {
  330.             _warn = _dogHandle getFSMVariable "_watchDog";
  331.             if (_warn) then { _text = "Quiet"; _warn = false; } else { _text = "Alert"; _warn = true; };
  332.             s_player_warndog = player addAction [format[localize "str_actions_warndog",_text],"\z\addons\dayz_code\actions\dog\warn.sqf",[_dogHandle, _warn], 2, false, true,"",""];       
  333.         };
  334.         if (s_player_followdog < 0) then {
  335.             s_player_followdog = player addAction [localize "str_actions_followdog","\z\addons\dayz_code\actions\dog\follow.sqf",[_dogHandle,true], 6, false, true,"",""];
  336.         };
  337.     } else {
  338.         player removeAction s_player_feeddog;
  339.         s_player_feeddog = -1;
  340.         player removeAction s_player_waterdog;
  341.         s_player_waterdog = -1;
  342.         player removeAction s_player_staydog;
  343.         s_player_staydog = -1;
  344.         player removeAction s_player_trackdog;
  345.         s_player_trackdog = -1;
  346.         player removeAction s_player_barkdog;
  347.         s_player_barkdog = -1;
  348.         player removeAction s_player_warndog;
  349.         s_player_warndog = -1;
  350.         player removeAction s_player_followdog;
  351.         s_player_followdog = -1;
  352.     };
  353. } else {
  354. //Extras
  355. //Remove Parts
  356. {silver_myCursorTarget removeAction _x} forEach s_player_removeActions;s_player_removeActions = [];
  357. silver_myCursorTarget = objNull;
  358.     //Engineering
  359.     {dayz_myCursorTarget removeAction _x} forEach s_player_repairActions;s_player_repairActions = [];
  360.     dayz_myCursorTarget = objNull;
  361.     //Others
  362.     player removeAction s_player_forceSave;
  363.     s_player_forceSave = -1;
  364.     player removeAction s_player_flipveh;
  365.     s_player_flipveh = -1;
  366.     player removeAction s_player_sleep;
  367.     s_player_sleep = -1;
  368.     player removeAction s_player_deleteBuild;
  369.     s_player_deleteBuild = -1;
  370.     player removeAction s_player_butcher;
  371.     s_player_butcher = -1;
  372.     player removeAction s_player_cook;
  373.     s_player_cook = -1;
  374.     player removeAction s_player_boil;
  375.     s_player_boil = -1;
  376.     player removeAction s_player_fireout;
  377.     s_player_fireout = -1;
  378.     player removeAction s_player_packtent;
  379.     s_player_packtent = -1;
  380.     player removeAction s_player_fillfuel;
  381.     s_player_fillfuel = -1;
  382.     player removeAction s_player_studybody;
  383.     s_player_studybody = -1;
  384.     //Dog
  385.     player removeAction s_player_tamedog;
  386.     s_player_tamedog = -1;
  387.     player removeAction s_player_feeddog;
  388.     s_player_feeddog = -1;
  389.     player removeAction s_player_waterdog;
  390.     s_player_waterdog = -1;
  391.     player removeAction s_player_staydog;
  392.     s_player_staydog = -1;
  393.     player removeAction s_player_trackdog;
  394.     s_player_trackdog = -1;
  395.     player removeAction s_player_barkdog;
  396.     s_player_barkdog = -1;
  397.     player removeAction s_player_warndog;
  398.     s_player_warndog = -1;
  399.     player removeAction s_player_followdog;
  400.     s_player_followdog = -1;
  401. };
  402.  
  403. //Dog actions on player self
  404. _dogHandle = player getVariable ["dogID", 0];
  405. if (_dogHandle > 0) then {
  406.     _dog = _dogHandle getFSMVariable "_dog";
  407.     _ownerID = "0";
  408.     if (!isNull cursorTarget) then { _ownerID = cursorTarget getVariable ["characterID","0"]; };
  409.     if (_canDo and !_inVehicle and alive _dog and _ownerID != dayz_characterID) then {
  410.         if (s_player_movedog < 0) then {
  411.             s_player_movedog = player addAction [localize "str_actions_movedog", "\z\addons\dayz_code\actions\dog\move.sqf", player getVariable ["dogID", 0], 1, false, true, "", ""];
  412.         };
  413.         if (s_player_speeddog < 0) then {
  414.             _text = "Walk";
  415.             _speed = 0;
  416.             if (_dog getVariable ["currentSpeed",1] == 0) then { _speed = 1; _text = "Run"; };
  417.             s_player_speeddog = player addAction [format[localize "str_actions_speeddog", _text], "\z\addons\dayz_code\actions\dog\speed.sqf",[player getVariable ["dogID", 0],_speed], 0, false, true, "", ""];
  418.         };
  419.         if (s_player_calldog < 0) then {
  420.             s_player_calldog = player addAction [localize "str_actions_calldog", "\z\addons\dayz_code\actions\dog\follow.sqf", [player getVariable ["dogID", 0], true], 2, false, true, "", ""];
  421.         };
  422.     };
  423. } else {
  424.     player removeAction s_player_movedog;      
  425.     s_player_movedog =      -1;
  426.     player removeAction s_player_speeddog;
  427.     s_player_speeddog =     -1;
  428.     player removeAction s_player_calldog;
  429.     s_player_calldog =      -1;
  430. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement