[Release] Fred's Zombie Bait

Freaking Fred

OpenDayZ Rockstar!
Fred's Zombie Bait​
Created By Freaking Fred​
​
Info

Fred's Zombie Bait allows players to combine Raw Beef and Bloodbags to create Zombie Bait that can be placed on the ground. In my testing, I have found the bait to be very effective at keeping the zombies attention away from the player.

Versions

v 1.1.0 - Added Exploding Zombie Bait. Requires M67 Frag Grenade.
v 1.0.0 - Initial release.

Tutorials

Custom dayz_code files. (compiles.sqf and fn_selfActions.sqf)
Open the spoiler for the tutorial.
Step 1:Go to your arma 2 operation arrowhead installation folder on your PC and find your @DayZ folder.

Step 2: In your @DayZ folder, go into the addons folder and find the dayz_code.pbo. Make a copy of dayz_code.pbo on your desktop.

Step 3: Unpack the dayz_code.pbo that you have placed on your desktop. Inside the dayz_code folder find the compile folder.

Step 4: Inside the compile folder you will find the fn_selfActions.sqf. Make a copy of that and place it on your desktop.

Step 5: Back out to the main dayz_code folder and find the init folder. Inside the init folder you will find compiles.sqf. Make a copy of that and place it on your desktop.

Step 6: In your server's mission folder, create a fixes folder, if you don't already have one. Move the fn_selfActions.sqf and compiles.sqf from your desktop into this folder.

Step 7: In your compiles.sqf find the following line.
Code:
fnc_usec_selfActions =        compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_selfActions.sqf";        //Checks which actions for self
Change it to
Code:
fnc_usec_selfActions =      compile preprocessFileLineNumbers "fixes\fn_selfActions.sqf";        //Checks which actions for self


Step 8: In your init.sqf find the following line.
Code:
call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\compiles.sqf";              //Compile regular functions
Change it to
Code:
call compile preprocessFileLineNumbers "fixes\compiles.sqf";              //Compile regular functions

Installation

Update to v1.1.0
Open the spoiler for installation.
Step 1: In your scripts\zombiebait folder, create a new text document and name it zombiebomb.sqf.

Step 2: Copy and paste the following code into zombiebomb.sqf.
Code:
player playActionNow "Medic";
sleep 1;
titleText ["You have placed Explosive Zombie Bait. You should run.","PLAIN DOWN"]; titleFadeOut 5;
 
_mypos = getposATL player;
_dir = getdir player;
_mypos = [(_mypos select 0)+2*sin(_dir),(_mypos select 1)+2*cos(_dir), (_mypos select 2)];
_createBait = createVehicle ["Land_Bucket_EP1", _mypos, [], 0, "CAN_COLLIDE"];
_createBait setDir _dir;
_createBait setposATL _mypos;
sleep 1;
 
player removeMagazine "ItemBloodbag";
player removeMagazine "FoodbeefRaw";
player removeMagazine "HandGrenade_West";
sleep 10;
 
_i = 0;
_bait = nearestObject [player, "Land_Bucket_EP1"];
_setBait = (getPosATL _bait) nearEntities ["zZombie_Base",50];
{
    _group = group _x;
    if (isNull group _x) then {
        _group = _x;
    };
    _x reveal [_bait,4];
    _targets = _group getVariable ["targets",[]];
    if (!(_bait in _targets)) then {
        _targets set [count _targets,_bait];
        _group setVariable ["targets",_targets,true];
    };
    _i = _i + 1;
} forEach _setBait;
 
sleep 10;
titleText ["You're Explosive Zombie Bait will detonate in 2 minutes.","PLAIN DOWN"]; titleFadeOut 5;
sleep 60;
titleText ["You're Explosive Zombie Bait will detonate in 1 minute.","PLAIN DOWN"]; titleFadeOut 5;
sleep 30;
titleText ["You're Explosive Zombie Bait will detonate in 30 seconds.","PLAIN DOWN"]; titleFadeOut 5;
sleep 20;
titleText ["You're Explosive Zombie Bait will detonate in 10 seconds.","PLAIN DOWN"]; titleFadeOut 5;
sleep 10;
 
_zombieBomb = createVehicle ["grenade",position _createBait, [], 0, "NONE"];
sleep 1;
deleteVehicle _createBait;

Step 3: Open your fn_selfActions.sqf and replace your original zombie bait section with
Code:
// Zombie Bait
if (("ItemBloodbag" in magazines player) && ("FoodbeefRaw" in magazines player)) then {
    hasBait = true;
} else {
    hasBait = false;
};
if (hasBait) then {
    if (zombieBait < 0) then {
zombieBait = player addAction [("<t color=""#c30000"">" + ("Place Zombie Bait") +"</t>"),"scripts\zombiebait\zombiebait.sqf","",5,false,true,"",""];
    };
} else {
    player removeAction zombieBait;
    zombieBait = -1;
};
// Exploding Zombie Bait
if ((hasBait) && ("HandGrenade_West" in magazines player)) then {
if (zombieBomb < 0) then {
zombieBomb = player addAction [("<t color=""#c30000"">" + ("Place Exploding Bait") +"</t>"),"scripts\zombiebait\zombiebomb.sqf","",5,false,true,"",""];
};
} else {
player removeAction zombieBomb;
zombieBomb = -1;
};

Full Installation instructions start on post #2.
 
Full Installation (Zombie Bait and Exploding Zombie Bait)

Open the spoiler for installation.
Step 1: In your server's mission folder, create two new folders and name them scripts and fixes, if you don't already have them.

Step 2: In your scripts folder, create a new folder and name it zombiebait. In the zombiebait folder, create two new text documents and name them zombiebait.sqf and zombiebomb.sqf.

Step 3: Copy and paste the following code into zombiebait.sqf.
Code:
player playActionNow "Medic";
sleep 1;
titleText ["You have placed Zombie Bait. You should run.","PLAIN DOWN"]; titleFadeOut 5;
 
_mypos = getposATL player;
_dir = getdir player;
_mypos = [(_mypos select 0)+2*sin(_dir),(_mypos select 1)+2*cos(_dir), (_mypos select 2)];
_createBait = createVehicle ["Land_Bucket_EP1", _mypos, [], 0, "CAN_COLLIDE"];
_createBait setDir _dir;
_createBait setposATL _mypos;
sleep 1;
 
player removeMagazine "ItemBloodbag";
player removeMagazine "FoodbeefRaw";
sleep 10;
 
_i = 0;
_bait = nearestObject [player, "Land_Bucket_EP1"];
_setBait = (getPosATL _bait) nearEntities ["zZombie_Base",50];
{
    _group = group _x;
    if (isNull group _x) then {
        _group = _x;
    };
    _x reveal [_bait,4];
    _targets = _group getVariable ["targets",[]];
    if (!(_bait in _targets)) then {
        _targets set [count _targets,_bait];
        _group setVariable ["targets",_targets,true];
    };
    _i = _i + 1;
} forEach _setBait;
 
sleep 120;
titleText ["You're Zombie Bait is gone.","PLAIN DOWN"]; titleFadeOut 5;
deleteVehicle _createBait;
 
player removeAction zombieBait;

Step 4:Copy and paste the following code intozombiebomb.sqf.
Code:
player playActionNow "Medic";
sleep 1;
titleText ["You have placed Explosive Zombie Bait. You should run.","PLAIN DOWN"]; titleFadeOut 5;
 
_mypos = getposATL player;
_dir = getdir player;
_mypos = [(_mypos select 0)+2*sin(_dir),(_mypos select 1)+2*cos(_dir), (_mypos select 2)];
_createBait = createVehicle ["Land_Bucket_EP1", _mypos, [], 0, "CAN_COLLIDE"];
_createBait setDir _dir;
_createBait setposATL _mypos;
sleep 1;
 
player removeMagazine "ItemBloodbag";
player removeMagazine "FoodbeefRaw";
player removeMagazine "HandGrenade_West";
sleep 10;
 
_i = 0;
_bait = nearestObject [player, "Land_Bucket_EP1"];
_setBait = (getPosATL _bait) nearEntities ["zZombie_Base",50];
{
    _group = group _x;
    if (isNull group _x) then {
        _group = _x;
    };
    _x reveal [_bait,4];
    _targets = _group getVariable ["targets",[]];
    if (!(_bait in _targets)) then {
        _targets set [count _targets,_bait];
        _group setVariable ["targets",_targets,true];
    };
    _i = _i + 1;
} forEach _setBait;
 
sleep 10;
titleText ["You're Explosive Zombie Bait will detonate in 2 minutes.","PLAIN DOWN"]; titleFadeOut 5;
sleep 60;
titleText ["You're Explosive Zombie Bait will detonate in 1 minute.","PLAIN DOWN"]; titleFadeOut 5;
sleep 30;
titleText ["You're Explosive Zombie Bait will detonate in 30 seconds.","PLAIN DOWN"]; titleFadeOut 5;
sleep 20;
titleText ["You're Explosive Zombie Bait will detonate in 10 seconds.","PLAIN DOWN"]; titleFadeOut 5;
sleep 10;
 
_zombieBomb = createVehicle ["grenade",position _createBait, [], 0, "NONE"];
sleep 1;
deleteVehicle _createBait;

Step 5: In your fixes folder, create a new folder and name it zombiebait. In thiszombiebait folder, create a new text document and name itzombie_findTargetAgent.sqf.

Step 6: Copy and paste the following code into zombie_findTargetAgent.sqf.
Code:
private["_agent","_target","_targets","_targetDis","_c","_man","_manDis","_targets","_agent","_agentheight","_nearEnts","_rnd","_assigned","_range","_objects"];
_agent = _this;
_target = objNull;
/*
_local = [];
_remote = [];
*/
_targets = [];
_targetDis = [];
_range = 120;
_manDis = 0;
_refobj = vehicle player;
 
/*
_local =    _agent getVariable ["target",[]];
//diag_log ("Local is: " + str(_local));
_remote =    _agent getVariable ["targets",[]];
//diag_log ("Remote is: " + str(_remote));
 
if (count _remote == 0) then
{
    _targets = _local;
    //diag_log ("Targets is: " + str(_targets));
}
else
{
    _targets = _local + _remote;
    //diag_log ("Local + Remote targets is: " + str(_targets));
};
*/
 
_targets = _agent getVariable ["targets",[]];
 
if (isNil "_targets") exitWith {};
//Search for objects
if (count _targets == 0) then
{
    _objects = nearestObjects [_agent,["ThrownObjects","GrenadeHandTimedWest","SmokeShell","Land_Bucket_EP1"],500];
    {
        private["_dis"];
        if (!(_x in _targets)) then
        {
            _targets set [count _targets,_x];
            _targetDis set [count _targetDis,_dis];
        _move = "ZombieFeed";
        [objNull, _objects,rPlayMove, _move] call RE;
        };
    } forEach _objects;
};
 
//Find best target
if (count _targets > 0) then
{
    _man = _targets select 0;
    _manDis = _man distance _agent;
    {
        private["_dis"];
        _dis =  _x distance _agent;
        if (_dis < _manDis) then
        {
            _man = _x;
            _manDis = _dis;
        };
        if (_dis > _range) then
        {
            _targets = _targets - [_x];
        };
        if (_x isKindOf "SmokeShell") then
        {
            _man = _x;
            _manDis = _dis;
        };
    } forEach _targets;
 
    _target = _man;
};
 
//Check if too far
if (_manDis > _range) then
{
    _targets = _targets - [_target];
    _target = objNull;
};
 
_target


Step 7: Open your fn_selfActions.sqf and copy and paste the following code to the bottom of the file.
Code:
// Zombie Bait
if (("ItemBloodbag" in magazines player) && ("FoodbeefRaw" in magazines player)) then {
    hasBait = true;
} else {
    hasBait = false;
};
if (hasBait) then {
    if (zombieBait < 0) then {
zombieBait = player addAction [("<t color=""#c30000"">" + ("Place Zombie Bait") +"</t>"),"scripts\zombiebait\zombiebait.sqf","",5,false,true,"",""];
    };
} else {
    player removeAction zombieBait;
    zombieBait = -1;
};
// Exploding Zombie Bait
if ((hasBait) && ("HandGrenade_West" in magazines player)) then {
if (zombieBomb < 0) then {
zombieBomb = player addAction [("<t color=""#c30000"">" + ("Place Exploding Bait") +"</t>"),"scripts\zombiebait\zombiebomb.sqf","",5,false,true,"",""];
};
} else {
player removeAction zombieBomb;
zombieBomb = -1;
};


Step 8: Open your compiles.sqf and find the following code on line 56.
Code:
zombie_findTargetAgent =    compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_findTargetAgent.sqf";
Change it to
Code:
zombie_findTargetAgent =    compile preprocessFileLineNumbers "fixes\zombiebait\zombie_findTargetAgent.sqf";


Step 9: You will have to add an exception in your createvehicle.txt. Find the following line.
Code:
5 "Land_" !="Land_Fire_DZ"
Change it to
Code:
5 "Land_" !="Land_Fire_DZ" !="Land_Bucket_EP1"



Media

Zombie Bait in action! by andy1978

Exploding Zombie Bait! by Freaking Fred


How To Use
Step 1: Make sure you have at least 1 Raw Beef and 1 Bloodbag in your inventory.

Step 2: Scroll wheel and select the Place Zombie Bait option.

Step 3: Get the hell away from the bait!


FAQ
Q: I have Raw Beef and Bloodbags in my inventory but I am not getting a Place Zombie Bait option.
A: Try dropping the required items on the ground and picking them back up. I am currently looking into a permanent fix for the issue.

Q: I have raw meat in my inventory but I am not getting the option.
A: Make sure you are using Raw Beef specifically.
 
Put these into your dayz_resetSelfActions = { section in variables.sqf. they will show as intended on login.

zombieBait = -1;
zombieBomb = -1;
zombieShield = -1;
 
Back
Top