Jump to content
Sign in to follow this  
Lala14

Adding multiple actions then removing them from an item

Recommended Posts

So I'm currently trying to remove an action for about 30 seconds then re-adding it, by the way I want to remove all actions from the item not just the single one!

item's init:

null = [this] execVM "scripts\skiptime.sqf";

skiptime.sqf

time1 = _this select 0 addAction ["skip time +1",{skiptime 1; _myHint ="Time Skipped by 1 hours wait 30 seconds"; GlobalHint = _myHint; publicVariable "GlobalHint"; hintsilent parseText _myHint; removeAllActions (_this select 0)}];
time3 = _this select 0 addAction ["skip time +3",{skiptime 3; _myHint ="Time Skipped by 3 hours wait 30 seconds"; GlobalHint = _myHint; publicVariable "GlobalHint"; hintsilent parseText _myHint; removeAllActions (_this select 0)}];
time5 = _this select 0 addAction ["skip time +5",{skiptime 5; _myHint ="Time Skipped by 5 hours wait 30 seconds"; GlobalHint = _myHint; publicVariable "GlobalHint"; hintsilent parseText _myHint; removeAllActions (_this select 0)}];
time7 = _this select 0 addAction ["skip time +7",{skiptime 7; _myHint ="Time Skipped by 7 hours wait 30 seconds"; GlobalHint = _myHint; publicVariable "GlobalHint"; hintsilent parseText _myHint; removeAllActions (_this select 0)}];

Share this post


Link to post
Share on other sites

Using the condition parameter is so much easier than removing & readding. Check the Wiki for addaction.

Share this post


Link to post
Share on other sites
Using the condition parameter is so much easier than removing & readding. Check the Wiki for addaction.

Yes I know that but I'm not at all too sure on how I can make it do what I want it to do, let alone make it remove 1 command and then return it.

I was just wondering if its possible for me to add at the end like sleep 30; [] execVM "scripts\skiptime.sqf" but trying that won't work, I'm not at all too sure on how to make it execute a script with code along side it

Edited by Lala14

Share this post


Link to post
Share on other sites

As Shuko says use the condition param of addAction to hide and show the actions.

//global variable to control visibility of skip Time Actions
TAG_showActions = true;

TAG_fnc_skipTimeActions = {
skiptime _this;
_myHint = format ["Time Skipped by %1 hours wait 30 seconds", _this];
GlobalHint = _myHint;
publicVariable "GlobalHint";
hintSilent parseText _myHint;

//a time 30seconds in the future
_pause = time + 30;
//Hide actions
TAG_showActions = false;
//Are we there yet
waitUntil { time > _pause };
//show actions
TAG_showActions = true;
};

//(action params)  title, script, arguments, priority, showWindow, hideOnUse, shortcut, condition
time1 = (_this select 0) addAction [
"skip time +1",
{ _thread = 1 spawn TAG_fnc_skipTimeActions; },
[], -99,	false, true, "",
"TAG_showActions"
];

time3 = (_this select 0) addAction [
"skip time +3",
{ _thread = 3 spawn TAG_fnc_skipTimeActions; },
[], -99,	false, true, "",
"TAG_showActions"
];

time5 = (_this select 0) addAction [
"skip time +5",
{ _thread = 5 spawn TAG_fnc_skipTimeActions; },
[], -99,	false, true, "",
"TAG_showActions"
];

time7 = (_this select 0) addAction [
"skip time +7",
{ _thread = 7 spawn TAG_fnc_skipTimeActions; },
[], -99,	false, true, "",
"TAG_showActions"
];

Moved all the script part of the actions to one function TAG_fnc_skipTimeActions.

Each action runs this function via _thread = 7 spawn TAG_fnc_skipTimeActions; where the number is the number of hours to skip.

Added a global variable at the top called TAG_showActions which is true, on the skipTimeActions functions running it sets this to false for 30 seconds.

At the end of each action you will see "TAG_showActions" this is the condition for whether the action is visible or not.

If there is something you dont quite understand let me know and ill see if i can explain.

Share this post


Link to post
Share on other sites

Thanks Larrow, I was just wanting to make it every 30 seconds because while I was reading up about the skipTime command apparently the server will refresh every 30 seconds, this is why I would like to make it sleep at the end. I might be incorrect but if the information is incorrect then I won't need the 30 second delay on removing the actions then returning them

Sorry, I should have tested the script

Edited by Lala14

Share this post


Link to post
Share on other sites

I would do it the following way.

Add 1 action to the object "Open action menu"

This then runs a script which checks conditions for each sub action you may want to add and then adds them. (They dont exist until that point)

At the same time the main "Open Action Menu" action is then hidden (Simple boolean condition or an action level number)

Selecting an action from the sub menu, then

a) runs that action code

b) removes all other actions

c) re instates the condition that allows the "Open action menu" to be visible

This way the only time there are multiple actions available and in existence is when you actually need to select one of them

Every condition per action is checked very often, at least every 0.5 seconds, it could even be every frame and lots of actions do effect performance

I have used something similar in the past.... code below

Action Inititialisation script

// AUTHOR	:	Terox (terox_@hotmail.com)
// LAST Edited	:	5/8/2012
// MP MACHINE	:	Client		
// Called from	:	Zeus_Actions.sqf (Which is run via an addaction menu on the player)	
// Called using	: 	_this call Txu_factions_MainMenu
// Description	:	loads releveant addactions to the unit dependant on criteria		
//			
// COMMENTS	:	
// 		:	Addaction params 
//			[title, filename, (arguments, priority, showWindow, hideOnUse, shortcut, condition]


 _obj 		= _this select 0;
 _caller 	= _this select 1;
 _actionID 	= _this select 2;

 Txu_ActionLevel = 0;
 Txu_ShowActions = TRUE;
 Txu_Actions 	= [];	// Lists currently held actions that the player has




 // -------------------------------------------------------------------------------------------- //

 // Action Menu Spacer

 _title	= "____________________";
 _script	= (Txu_Actionpath + "Actions_spacer.sqf");
 _priority	= -10;
 _showWindow 	= false;
 _arguments 	= [];
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "";
 Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];


 _title	= "Zeus Options";
 _script	= (Txu_Actionpath + "Actions_Zeus.sqf");
 _arguments 	= [];
 _priority	= -10;
 _showWindow 	= FALSE;
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "Txu_ActionLevel == 0";
 Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];

MAIN ACTION SCIPT

// AUTHOR	:	Terox (terox_@hotmail.com)
// LAST Edited	:	5/8/2012
// MP MACHINE	:	Client		
// Called from	:	Zeus_Actions.sqf (Which is run via an addaction menu on the player)	
// Called using	: 	_this call Txu_factions_MainMenu
// Description	:	loads releveant addactions to the unit dependant on criteria		
//			
// COMMENTS	:	
// 		:	Addaction params 
//			[title, filename, (arguments, priority, showWindow, hideOnUse, shortcut, condition]


 _obj 		= _this select 0;
 _caller 	= _this select 1;
 _actionID 	= _this select 2;

 Txu_ActionLevel = 1;

 // -------------------------------------------------------------------------------------------- //

 // Turns 3D Markers ON or OFF

 _title	= "Toggle 3d Markers";
 _script	= (Txu_Actionpath + "Actions_ToggleMarkers.sqf");
 _priority	= -13;
 _showWindow 	= false;
 _arguments 	= [];
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "(Txu_ActionLevel == 1) && Txu_ShowActions";
 _id = Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];
 Txu_Actions = Txu_Actions + [_id];

 // -------------------------------------------------------------------------------------------- //

 // Hides the addaction nested menu but doesnt remove the actions
 _title	= "HIDE Zeus Menu";
 _script	= (Txu_Actionpath + "Actions_HideMenu.sqf");
 _priority	= -11;
 _showWindow 	= false;
 _arguments 	= [];
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "(Txu_ActionLevel > 0) && Txu_ShowActions";
 _id = Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];
 Txu_Actions = Txu_Actions + [_id];

 // -------------------------------------------------------------------------------------------- //

 // Shows the addaction nested menu after it was hidden by previously defined addaction

 _title	= "SHOW Zeus Menu";
 _script	= (Txu_Actionpath + "Actions_HideMenu.sqf");
 _priority	= -11;
 _showWindow 	= false;
 _arguments 	= [];
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "(Txu_ActionLevel > 0)  && (! Txu_ShowActions)";
 _id = Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];
 Txu_Actions = Txu_Actions + [_id];

 // -------------------------------------------------------------------------------------------- //

 // Closes the nested addaction menu's and removes the addactions from the player

 _title	= "CLOSE Zeus Menu";
 _script	= (Txu_Actionpath + "Actions_CloseMenu.sqf");
 _priority	= -20;
 _showWindow 	= false;
 _arguments 	= [];
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "(Txu_ActionLevel > 0) && Txu_ShowActions";
 _id = Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];
 Txu_Actions = Txu_Actions + [_id];

 // -------------------------------------------------------------------------------------------- //

/*
 // Displays actions from previous nested level

 _title	= "<< previous";
 _script	= (Txu_Actionpath + "Actions_backmenu.sqf");
 _priority	= -19;
 _showWindow 	= false;
 _arguments 	= [];
 _hideonuse	= FALSE;
 _shortcut	= "";
 _condition 	= "(Txu_ActionLevel > 0) && (Txu_ShowActions)";
 _id = Player addaction [_title,_script,_arguments,_priority,_showWindow,_hideonuse,_shortcut,_condition];
 Txu_Actions = Txu_Actions + [_id];

*/


 // Group Leader Actions (Team management etc)
 if(player == leader player)then{_this call Txu_factions_Leader};

CLOSE DOWN SUB MENU ACTIONS

// AUTHOR	:	Terox (terox_@hotmail.com)
// LAST Edited	:	5/8/2012
// MP MACHINE	:	Client		
// Called from	:	Addaction	
// Called using	: 	
// Description	:	Removes all the nested addactions and closes the action menu down to "Zeus Actions"		
//			
// COMMENTS	:	Txu_ActionLevel: 0 is the lowest level, displaying "Zeus Options" only
// 		:	 
//			[title, filename, (arguments, priority, showWindow, hideOnUse, shortcut, condition]
//	_this
// 		select 0: object action attached to
// 		select 1: caller
// 		select 2: actionID

 {(_this select 0) removeaction _x}foreach Txu_Actions;
 Txu_Actions 		= [];
 Txu_ActionLevel 	= 0;

TEMPORARILY HIDE SUBMENUS without removing them. (May need to get in a vehicle or rearm quickly)

// AUTHOR	:	Terox (terox_@hotmail.com)
// LAST Edited	:	5/8/2012
// MP MACHINE	:	Client		
// Called from	:	Addaction	
// Called using	: 	
// Description	:	Hides all the nested addactions but doesnt remove them
//			Used to declutter the menu temporarily		
//			
// COMMENTS	:	Txu_ActionLevel: 0 is the lowest level, displaying "Zeus Options" only
// 		:	 
//			[title, filename, (arguments, priority, showWindow, hideOnUse, shortcut, condition]
//	_this
// 		select 0: object action attached to
// 		select 1: caller
// 		select 2: actionID

 if(Txu_ShowActions)then{Txu_ShowActions = FALSE}else{Txu_ShowActions = TRUE};

Share this post


Link to post
Share on other sites

Nice example Terox but surely if your worried about it being all neat and there to many addActions running, rather than having to manage multiple addActions it would be easier just to wrap it all up in a comms menu instead.

TAG_showActions = true;

TAG_fnc_skipTimeActions = {
   skiptime _this;
   _myHint = format ["Time Skipped by %1 hours wait 30 seconds", _this];
   GlobalHint = _myHint;
   publicVariable "GlobalHint";
   hintSilent parseText _myHint;


   _pause = time + 30;
   TAG_showActions = false;
   waitUntil { time > _pause };
   TAG_showActions = true;
};

MY_MENU_skipTime =
[
["Skip Time",true],

["1 hour", [2], "", -5, [["expression", "_thread = 1 spawn TAG_fnc_skipTimeActions;"]], "1", "1"],
["3 hour", [4], "", -5, [["expression", "_thread = 3 spawn TAG_fnc_skipTimeActions;"]], "1", "1"],
["5 hour", [6], "", -5, [["expression", "_thread = 5 spawn TAG_fnc_skipTimeActions;"]], "1", "1"],
["7 hour", [8], "", -5, [["expression", "_thread = 7 spawn TAG_fnc_skipTimeActions;"]], "1", "1"]
];

player addAction ["Skip Time", {showCommandingMenu "#USER:MY_MENU_skipTime";}, [], -99, false, true, "", "TAG_showActions"];

Makes things easier to handle than an action to show multiple actions that your then removing when not need.

  • Like 1

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×