Jump to content

[Making Tie Up] with a lil help of my friends.


juandayz

Recommended Posts

Hey few days ago i posted a new and stupid mod "whistle" ,but from here comes the idea to made a tie up players and whistle zeds to come and eat the player tied up.

I ask for help of everyone here, can be nice made a new script/mod thogeters :laugh:

 

I think use the old knock out system  as base to write it:

BASE MODS:

Spoiler

 

 

INSTALLING: (WORKING): (07/3/17)

Spoiler

First create this path: mpmissions\your_insstance\dayz_code\actions\   

 

 

Player_Restrain.sqf .sqf  (drop in the new path)

Spoiler



private["_hasitem","_body"];
_body =    _this select 3;
_hasitem = "equip_rope" in magazines player;
 
if (!_hasitem) exitWith {
        systemChat("You need Rope to tie up another Player");
};
 
 
if (_hasitem) then {
        dayz_tieup = [_body,3.5];
		player removeMagazine "equip_rope";
        publicVariable "dayz_tieup";
        player playActionNow "Medic";
        sleep 1;
};

 

Player_Restrained .sqf (drop in the new path)

Spoiler


private["_DisableInput","_AttachtoStick","_TieupTimerMsg","_TieUpTimer","_Done","_GiveBackRope","_positionp","_stick","_breakfree","_BreakFreeFailChance","_body","_hastools","_inventory","_TieUpTimer"];
_body	= _this select 0;
_inventory	= items player;
_BreakFree	= round(random 10);
_Done	= false;
//-----------------------Config-----------------------------//	
_DisableInput = false;								//	Disable thier mouse and keyboard? >:D 
_AttachtoStick = true;								//	Stick them to a stick?
_GiveBackRope = true;							//	If player didnt try cut the rope give it to the victim?
_TieUpTimer = 60;									//How long do we want to be tied up for?
_TieupTimerMsg = "Trying to get free, I'll have it in %1 seconds";
_HasTools = "ItemKnife" in _inventory;	// Tools needed to cut free
_BreakFreeFailChance	= 3; 					// 5/10 to fail.   9/10 Hard		1/10 Easy
//-----------------------End-----------------------------//	
//-----------------------Functions-----------------------------//	
//	Countdown
Tie_Countdown= {
while{!_done} do {
    if(_TieUpTimer > 0) then {
	cutText [format[_TieupTimerMsg,_TieUpTimer], "PLAIN DOWN"];
	sleep 1;
	_TieUpTimer = _TieUpTimer - 1;   
	 _Done = _TieUpTimer <= 0;
		};
	};
};

//	Tie Up
Player_Tiedup = {
	if (_DisableInput) then {disableuserinput true;disableuserinput true;disableuserinput true;};
    _body switchMove  "boundCaptive_loop";
	call Tie_Countdown;
	sleep _TieupTimer;		
	if (_AttachtoStick) then {deleteVehicle _stick; };
	if (_DisableInput) then {disableuserinput false;disableuserinput false;disableuserinput false;};
	_body switchMove "amovpsitmstpsraswrfldnon_amovpercmstpslowwrfldnon";	//Getup
	cutText ["You've wriggled free", "PLAIN DOWN"];
	player setVariable ["dayz_tieup",false]; 
};
//-----------------------Functions End-----------------------------//	

//----------------------------------------------------//	
diag_log("Player Tied Up:" + str(_body) + " was tied up by: " + str(player) );
//----------------------------------------------------//
if (_body == player) then {
    diag_log("TIED UP!");
	_body switchMove "boundCaptive_loop";
if (_AttachtoStick) then { 
	_positionp = [player] call FNC_GetPos;
	_stick = createVehicle ["Plastic_Pole_EP1",_positionp, [], 0, "CAN_COLLIDE"];
   _body attachTo [_stick];
}; 
	player setVariable ["dayz_tieup",true];
	[player,10,true,(getPosATL player)] spawn player_alertZombies;
	sleep 5;

//	If player has knife
if (_hastools) then {
cut = 0;
ropecut = 
[
	["Confirmation",true],
	["Try to break free?", [-1], "", -5, [["expression", ""]], "1", "0"],
	["", [-1], "", -5, [["expression", ""]], "1", "0"],
	["YES", [], "", -5, [["expression", "cut=1;"]], "1", "1"],
	["NO", [], "", -5, [["expression", "cut=0;"]], "1", "1"],	
	["", [-1], "", -5, [["expression", ""]], "1", "0"]
];
showCommandingMenu "#USER:ropecut";
WaitUntil{commandingMenu == ""};		
if(cut != 0) then {
if (_BreakFree < _BreakFreeFailChance)  exitWith {
	cutText ["Fuck! Dropped the knife!", "PLAIN DOWN"];
	if (_DisableInput) then {disableuserinput true;disableuserinput true;disableuserinput true;};
	_body switchMove  "boundCaptive_loop";
	player removeWeapon "ItemKnife";
	call Tie_Countdown;
    sleep _TieUpTimer;
	call Player_Tiedup;	
};
	if (_DisableInput) then {disableuserinput false;disableuserinput false;disableuserinput false;};
	_body switchMove "amovpsitmstpsraswrfldnon_amovpercmstpslowwrfldnon";	//Getup
	cutText ["You've cut yourself free", "PLAIN DOWN"];
	player setVariable ["dayz_tieup",false];
} else {
//	If the player likes the bondage.
	call Tie_Countdown;
    sleep _TieUpTimer;
	call Player_Tiedup;	
	if (_GiveBackRope) then {player addMagazine "equip_rope";};
	};
//	End of break free
	} else {
//	If player doesnt have a knive proceed
	call Tie_Countdown;
    sleep _TieUpTimer;
	call Player_Tiedup;	
	if (_GiveBackRope) then {player addMagazine "equip_rope";};
	};
}; 

 

In a custom fn_Selfactions.sqf

Spoiler



if (_isAlive && {_typeOfCursorTarget in AllPlayers} && {isPlayer _cursorTarget} && !isInTraderCity) then {
        if (s_player_tu < 0) then {
            s_player_tu = player addAction [("<t color=""#FF9800"">" + ("Tie Up!") + "</t>"), "dayz_code\actions\player_restrain.sqf",cursorTarget, 0, false, true, "",""];
        };
    } else {
        player removeAction s_player_tu;
        s_player_tu = -1;
 };

below of



if (dayz_tameDogs) then {
		//Dog
		_hasRawMeat = {_x in Dayz_meatraw} count _magazinesPlayer > 0;
		if (_isDog && {_hasRawMeat} && {_isAlive} && {_ownerID == "0"} && {player getVariable ["dogID",0] == 0}) then {
			if (s_player_tamedog < 0) then {
				s_player_tamedog = player addAction [localize "str_actions_tamedog", "\z\addons\dayz_code\actions\dog\tame_dog.sqf", _cursorTarget, 1, false, true];
			};
		} else {
			player removeAction s_player_tamedog;
			s_player_tamedog = -1;
		};
		if (_isDog && {_ownerID == _id} && {_isAlive}) then {
			if (s_player_feeddog < 0 && _hasRawMeat) then {
				s_player_feeddog = player addAction [localize "str_actions_feeddog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,0], 0, false, true];
			};
			if (s_player_waterdog < 0 && _hasbottleitem) then {
				s_player_waterdog = player addAction [localize "str_actions_waterdog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,1], 0, false, true];
			};
			if (s_player_staydog < 0) then {
				if (_dogHandle getFSMVariable "_actionLieDown") then { _text = "str_actions_liedog"; } else { _text = "str_actions_sitdog"; };
				s_player_staydog = player addAction [localize _text,"\z\addons\dayz_code\actions\dog\stay.sqf", _dogHandle, 5, false, true];
			};
			if (s_player_trackdog < 0) then {
				s_player_trackdog = player addAction [localize "str_actions_trackdog","\z\addons\dayz_code\actions\dog\track.sqf", _dogHandle, 4, false, true];
			};
			if (s_player_barkdog < 0) then {
				s_player_barkdog = player addAction [localize "str_actions_barkdog","\z\addons\dayz_code\actions\dog\speak.sqf", _cursorTarget, 3, false, true];
			};
			if (s_player_warndog < 0) then {
				_warn = _dogHandle getFSMVariable "_watchDog";
				if (_warn) then { _text = localize "str_epoch_player_247"; _warn = false; } else { _text = localize "str_epoch_player_248"; _warn = true; };
				s_player_warndog = player addAction [format[localize "str_actions_warndog",_text],"\z\addons\dayz_code\actions\dog\warn.sqf",[_dogHandle, _warn], 2, false, true];		
			};
			if (s_player_followdog < 0) then {
				s_player_followdog = player addAction [localize "str_actions_followdog","\z\addons\dayz_code\actions\dog\follow.sqf",[_dogHandle,true], 6, false, true];
			};
		} else {
			player removeAction s_player_feeddog;
			s_player_feeddog = -1;
			player removeAction s_player_waterdog;
			s_player_waterdog = -1;
			player removeAction s_player_staydog;
			s_player_staydog = -1;
			player removeAction s_player_trackdog;
			s_player_trackdog = -1;
			player removeAction s_player_barkdog;
			s_player_barkdog = -1;
			player removeAction s_player_warndog;
			s_player_warndog = -1;
			player removeAction s_player_followdog;
			s_player_followdog = -1;
		};
	};

now find:


} else {
	//Engineering

below add


player removeAction s_player_tu;
        s_player_tu = -1;

 

in your mission.sqm  check if u have the class sensors for trade cities

Spoiler


class Sensors
	{
		items=6;
#define TRGDEF a=100;b=100;activationBy="WEST";repeating=1;interruptable=1;age="UNKNOWN";class Effects{};
		class Item0
		{
			position[]={6325,304,7807};
			TRGDEF
			name="zonestary";
			expCond="(player distance zonestary) < 100;";
			expActiv="[""trader city Stary"",true,""enter""] call player_traderCity;";
			expDesactiv="[""trader city Stary"",true,""leave""] call player_traderCity;";
		};
		class Item1
		{
			position[]={4063,365,11664};
			TRGDEF
			name="zonebash";
			expCond="(player distance zonebash) < 100;";
			expActiv="[""trader city Bash"",true,""enter""] call player_traderCity;";
			expDesactiv="[""trader city Bash"",true,""leave""] call player_traderCity;";
		};
		class Item2
		{
			position[]={11447,317,11364};
			TRGDEF
			name="zoneklen";
			expCond="(player distance zoneklen) < 100;";
			expActiv="[""trader city Klen"",true,""enter""] call player_traderCity;";
			expDesactiv="[""trader city Klen"",true,""leave""] call player_traderCity;";
		};
		class Item3
		{
			position[]={1606,289,7803};
			TRGDEF
			name="zonebandit";
			expCond="(player distance zonebandit) < 100;";
			expActiv="[""Bandit Trader"",false,""enter""] call player_traderCity;";
			expDesactiv="[""Bandit Trader"",false,""leave""] call player_traderCity;";
		};
		class Item4
		{
			position[]={12944,210,12766};
			TRGDEF
			name="zonehero";
			expCond="(player distance zonehero) < 100;";
			expActiv="[""Hero Trader"",false,""enter""] call player_traderCity;";
			expDesactiv="[""Hero Trader"",false,""leave""] call player_traderCity;";
		};
		class Item5
		{
			position[]={12060,158,12638}; 
			TRGDEF
			name="zoneaircraft";
			expCond="(player distance zoneaircraft) < 100;";
			expActiv="[""Aircraft Trader"",false,""enter""] call player_traderCity;";
			expDesactiv="[""Aircraft Trader"",false,""leave""] call player_traderCity;";
		};
	};
};

 

 

in variables.sqf (custom)

Spoiler

find
canPickup = false;
above add

dayz_tieup = [];

in a custom publicEH.sqf

Spoiler


fnd
    "PVDZ_obj_Fire"                addPublicVariableEventHandler {(_this select 1) spawn BIS_Effects_Burn};
    below
	"dayz_tieup"         addPublicVariableEventHandler {(_this select 1) execVM "dayz_code\actions\player_restrained.sqf"};    
 

 

 @Hooty Infistar Filters

Spoiler

Add



,"#USER:ropecut"

to the end of infistar's _cMenu in AHconfig.sqf

 

@Cherdenko  BE filters

Spoiler


!="dayz_tieup"

to your first line of your publicvariable.txt

 

 

 

 

Link to comment
Share on other sites

7 hours ago, oldmatechoc said:

tieup 2

missing a ;


	[player,10,true,(getPosATL player)] spawn player_alertZombies

	[player,10,true,(getPosATL player)] spawn player_alertZombies;

 

Creates the pole but not sticking the player to it just yet.

 

so the main idea works? the scroll option appear on the other player to tie up?  the pole spawns, but the player is not attached?

 

Link to comment
Share on other sites

5 minutes ago, Cherdenko said:

also another thing @juandayz you should maybe restrict tying up in safezones

yup youre right friend, but we need to know if main idea works, the rest is details.  i think :

1-We need know if scroll menu to tie up appear on the other player.

2-if the tie_up2.sqf made something on the victim player

3-if tie_up2.sqf complete well his script secuense.

4-safezones restrictions

5-filters.

any way this is only an idea.   and many tnks for take the call guys!!!!:smile:

Link to comment
Share on other sites

ok so the tie_up2.sqf stop to work here:

Spoiler

private["_body","_positionp","_stick"];
_body = _this select 0;

 
diag_log("tie up attempt on:" + str(_body) + " and I am: " + str(player) );
 
if (_body == player) then {
    diag_log("tied up!");
    _positionp = [player] call FNC_GetPos;
    _stick = createVehicle ["FlagCarrierINS",_positionp, [], 0, "CAN_COLLIDE"];

 

//STOP TO WORK HERE


    [player] attachTo [_stick, [0, 2, 0]];
    cutText ["You've been tied up! This is not good!", "PLAIN DOWN"];
    [player,10,true,(getPosATL player)] spawn player_alertZombies;
    sleep 10;
    detach [player];
deleteVehicle _stick;

};

so maybe this line   [player] attachTo [_stick, [0, 2, 0]];

 

 _body attachTo [_stick, [0, 2, 0]];

 

 

Link to comment
Share on other sites

Just now, oldmatechoc said:

yep! we are attached! but a little too high. You get attached to about halfway up the flagpole. Detach doesn't/ delete doesn't seem to work either. Progress!

NICE!! TNKS FOR THE TEST MATE!!!!!

also another suggestion by @Cherdenko  restrict the safezones in fn_selfactions

Spoiler

private ["_safezones","_safezonesRad","_inSafezone","_player"];
_safezones = [[6325,7807,0],[4063,11664,0],[11447,11364,0],[1606,7803,0],[12944,12766,0],[4361.4937,2259.9526,0], [12060,12640,0]];	
_safezonesRad = 150;
_inSafezone = false;
_player = player;

if (_player distance _x < _safezonesRad) then {
_inSafezone = true;

};
} forEach _safezones;


//tie up
if (!_insafezone && (_isMan and _isAlive and !_isZombie)) then {

if (s_player_tu < 0) then {
            s_player_tu = player addAction [("<t color=""#FF9800"">" + ("Tie Up!") + "</t>"), "tieup\tie_up.sqf",cursorTarget, 0, false, true, "",""];
        };
    } else {
        player removeAction s_player_tu;
        s_player_tu = -1;
    };

 

 

and the update for tie_up2.sqf  with a variation on detach

Spoiler

private["_body","_positionp","_stick"];
_body = _this select 0;

 
diag_log("tie up attempt on:" + str(_body) + " and I am: " + str(player) );
 
if (_body == player) then {
    diag_log("tied up!");
    _positionp = [player] call FNC_GetPos;
    _stick = createVehicle ["FlagCarrierINS",_positionp, [], 0, "CAN_COLLIDE"];

    _body attachTo [_stick, [0, 1, 0]];
    cutText ["You've been tied up! This is not good!", "PLAIN DOWN"];
    [player,10,true,(getPosATL player)] spawn player_alertZombies;
    sleep 10;
    detach _body;
deleteVehicle _stick;
};

 

 

Link to comment
Share on other sites

3 hours ago, oldmatechoc said:

haha just what i was about to test! haha yeah i sent you an inbox about the safezone when you first posted aswell :P the other method i mentioned

 

you also can try your way for safezones here is that you send me

Spoiler

if (!DZE_SafeZonePosArray && (_isMan and _isAlive and !_isZombie)) then {
        if (s_player_tu < 0) then {
            s_player_tu = player addAction [("<t color=""#FF9800"">" + ("Tie Up!") + "</t>"), "tieup\tie_up.sqf",cursorTarget, 0, false, true, "",""];
        };
    } else {
        player removeAction s_player_tu;
        s_player_tu = -1;
    };

 

Link to comment
Share on other sites

NICE WORK @oldmatechoc the script looks beauty now, love the fn_Selfaction first line. :biggrin:  have some questions.

1-In this line of selfactions 

if (_isAlive && {_typeOfCursorTarget in AllPlayers} && {isPlayer _cursorTarget} && !isInTraderCity) then {

the isInTraderCity  variable, is defined by the coords into DZE_safezonesposarray?  so for example if an adm wanna add some custom safezones he will need a custom ConfigVariables.sqf to take the DZE_safezones?

2-This needs some infistar filter?

3-The altitude by the player in relation with the pole is fine or need be changed?

_stick = createVehicle ["Plastic_Pole_EP1",_positionp, [], 0, "CAN_COLLIDE"];
    _body attachTo [_stick, [0, 2, 0]];

4.You can say "everything works"? to proceed to the merge with whistle mod? or maybe (i ask it to everyone) we can forgot the whistle and use the tie_up2.sqf to spawn some zeds near of the player tied up.

something like:

Spoiler

private["_body","_positionp","_stick","_isTiedup","_rand","_setZedType","_zCreate","_zPos"];
_body = _this select 0;
zTypes = ["zZombie_Base","z_villager1","z_villager2","z_villager3","z_suit1","z_suit2","z_worker1","z_worker2","z_worker3","z_soldier","z_soldier_heavy","z_soldier_pilot","z_policeman","z_teacher","z_doctor","z_hunter","z_priest"];


diag_log("tie up attempt on:" + str(_body) + " and I am: " + str(player) );
if (_body == player) then {
    diag_log("tied up!");
	_positionp = [player] call FNC_GetPos;
	_stick = createVehicle ["Plastic_Pole_EP1",_positionp, [], 0, "CAN_COLLIDE"];
    _body attachTo [_stick, [0, 2, 0]];
	player playMove "AmelPercMstpSnonWnonDnon_zasah6hlava";
_rand = floor(random 600);
if (_rand <= 70) then {
zCount = 5;
area = 5;	
};
if (_rand <= 100 && _rand > 71) then {
zCount = 10;
area = 10;
};
_i = 1;
for "_i" from 1 to zCount do {
	[zTypes] spawn {
		zTypes = _this select 0;
		_setZedType = zTypes call BIS_fnc_selectRandom;
		_zCreate = createAgent [_setZedType, _positionp, [], area, "NONE"];
		_zPos = getPosATL _zCreate;
		[_zPos,_zCreate] execFSM "\z\addons\dayz_code\system\zombie_agent.fsm";
	};
};
	[player,10,true,(getPosATL player)] spawn player_alertZombies;
    cutText ["You've been tied up! You will be released in 20 seconds!", "PLAIN DOWN"];
	sleep 20;				
	deleteVehicle _stick; 	
	cutText ["Releasing you now!", "PLAIN DOWN"];
}; 

 

 

Link to comment
Share on other sites

2 minutes ago, oldmatechoc said:

@juandayz

1. isInTraderCity variable is triggered in the infistar safezone script most people use.

2. No infistar filters needed just the  public variable one.

3. The player is stuck just infront of the pole. could be abit closer but its okay.

4. from what i tested yes all is working as intended without errors.

:D

 

nice! about the infistar safezone, i guess i need made another option for users like me, who dsnt have infistar :biggrin:. but nice work mate

Link to comment
Share on other sites

haah this is to much evil!  love it @oldmatechoc

disableuserinput true;disableuserinput true;disableuserinput true;

 

also you can test with white screen to madee some kind of effect on victim player

titleText ["", "WHITE IN"];

and would be nice, add a scroll menu if player have knife or a rc action to try to cut the rope and get safe

Link to comment
Share on other sites

@oldmatechoc

Spoiler

private["_hasitem","_body","_inventory","_hasitem"];
_body =    _this select 3;
_hasitem = "equip_rope" in magazines player;
 _inventory = items player;
_hastools = "ItemKnife" in _inventory;
if (!_hasitem) exitWith {
        systemChat("needs a rope");
};
 
 
if (_hasitem) then {
        dayz_tieup = [_body,3.5];
		player removeMagazine "equip_rope";
        publicVariable "dayz_tieup";
        player playActionNow "PutDown";
        sleep 1;
    };


private["_body","_positionp","_stick","_waitTime"];
_body = _this select 0;
_waitTime = 60;

diag_log("tie up attempt on:" + str(_body) + " and I am: " + str(player) );
if (_body == player) then {
    diag_log("tied up!");
	_positionp = [player] call FNC_GetPos;
	_stick = createVehicle ["Plastic_Pole_EP1",_positionp, [], 0, "CAN_COLLIDE"];
    _body attachTo [_stick, [0.1, 0.1, 0.15]];
	player setVariable ["dayz_tieup",true];
	if (_hastools) then {
  
waituntil {!isnull (finddisplay 46)};
sleep 15;
cutoff = player addaction [("<t color=""#6599FF"">" + ("cutoff") +"</t>"),"path\cutoff.sqf","",5,false,true,"",""]; 
};

	disableuserinput true;	disableuserinput true;	disableuserinput true;
	player playMove "AmelPercMstpSnonWnonDnon_zasah6hlava";
	[player,10,true,(getPosATL player)] spawn player_alertZombies;
    cutText ["You've been tied up! You will be released in 1min!", "PLAIN DOWN"];
	sleep _waitTime;				
	deleteVehicle _stick; 	
	cutText ["Releasing you now!", "PLAIN DOWN"];
	disableuserinput false;disableuserinput false;disableuserinput false;
	player setVariable ["dayz_tieup",false];
}; 

 

take care about the mouse disabled

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...