Jump to content
Creic

Incapacitated Scripted EH?

Recommended Posts

Hi folks, 

 

From patch 1.46's changelog: "Added: Scripted event handlers for entering and exiting the incapacitated state" (https://dev.arma3.com/post/spotrep-00043#:~:text=Added%3A Scripted event handlers for entering and exiting the incapacitated state)

List of Scripted EH's on Wiki: https://community.bistudio.com/wiki/Arma_3:_Scripted_Event_Handlers

 

I've noticed the incapacitated state scripted EH doesn't appear in that list. I can't find a reference to it being removed in a later patch, so I'm guessing it is undocumented. I've hunted high and low through the function viewer to no avail, and even had help from the Discord which had the same result.

 

Anybody know what the event name and event params for it would be?

 

Cheers.

Share this post


Link to post
Share on other sites

Either I'm doing something wrong, or the event name is no longer 'reviveIncapacitated' as the following does not fire when incapacitated:

[ missionNamespace, "reviveIncapacitated", {
    systemChat "Test: Incap";
} ] call BIS_fnc_addScriptedEventHandler;

 

Share this post


Link to post
Share on other sites

From patch 1.46's changelog: "Added: Scripted event handlers for entering and exiting the incapacitated state"

They were removed when the whole revive system was rewritten, A3 1.62 2016 I believe.

 

spotrep-00058

Quote

Tweaked: The Revive feature was overhauled

  • Thanks 2

Share this post


Link to post
Share on other sites
47 minutes ago, Larrow said:

They were removed when the whole revive system was rewritten, A3 1.62 2016 I believe.

 

spotrep-00058

 

Damn, that's such a shame. Thanks though!

Share this post


Link to post
Share on other sites

I personally use lifeState isEqualTo "INCAPACITATED" (All string values it returns are in caps), could try to detect when someone enters that state via a damage eventHandler maybe. I wrote my own incapacitation script/system but manually sets the incapacitated to true on player. There's a lot of variables with the vanilla incapacitation/revive system to keep track of so just be aware of that.

  • Like 1

Share this post


Link to post
Share on other sites
16 hours ago, phronk said:

try to detect when someone enters that state via a damage eventHandler maybe

16 hours ago, phronk said:

There's a lot of variables with the vanilla incapacitation/revive system to keep track of

^^this.

See \a3\functions_f_mp_mark\revive\defines.inc which you can include into your own scripts to access revive macros/state enumerations.

These are likely the most useful from that file.

Spoiler

/*--------------------------------------------------------------------------------------------------

	PLAYER VARIABLE NAMES

--------------------------------------------------------------------------------------------------*/
//unit variable names
#define VAR_REVIVE_ENABLED				"#rev_enabled"

//broadcasted unit variables
#define VAR_TRANSFER_STATE				"#rev"
#define VAR_TRANSFER_FORCING_RESPAWN	"#revF"
#define VAR_TRANSFER_BEING_REVIVED		"#revB"
#define VAR_BLOOD_LEVEL					"#revL"

//local unit variables
#define VAR_STATE						"#rev_state"
#define VAR_STATE_PREV					"#rev_statePrev"

#define VAR_BEING_REVIVED				"#rev_being_revived"
#define VAR_FORCING_RESPAWN				"#rev_forcing_respawn"

#define VAR_DAMAGE						"#rev_damage"
#define VAR_DAMAGE_BLEED				"#rev_bleed"
#define VAR_ACTION_ID_REVIVE			"#rev_actionID_revive"
#define VAR_ACTION_ID_RESPAWN			"#rev_actionID_respawn"
#define VAR_ACTION_ID_SECURE			"#rev_actionID_secure"

#define VAR_CAMERA_VIEW					"#rev_camera"

#define VAR_INCAPACITATED_POS			"#rev_incap_pos"
#define VAR_INCAPACITATED_BACKUPPOS		"#rev_incap_backuppos"
#define VAR_INCAPACITATED_DIR			"#rev_incap_dir"
#define VAR_INCAPACITATED_BODY			"#rev_incap_corpse"

#define AI_PROTECTION_ACTIVATE(unit)	if (!captive unit) then {unit setCaptive true;unit setVariable ["#rev_captiveForced",true];} else {unit setVariable ["#rev_captiveForced",false];}
#define AI_PROTECTION_DEACTIVATE(unit)	if (unit getVariable ["#rev_captiveForced",false]) then {unit setVariable ["#rev_captiveForced",false];unit setCaptive false;}


/*--------------------------------------------------------------------------------------------------

	PLAYER STATES

--------------------------------------------------------------------------------------------------*/
#define STATE_RESPAWNED								0
#define STATE_REVIVED								1
#define STATE_INCAPACITATED							2
#define STATE_DEAD									3

#define GET_STATE_STR(state)						format["%1(%2)",["RESPAWNED","REVIVED","INCAPACITATED","DEAD"] select state,state]

#define SET_STATE(unit,state)						["",state,unit] call bis_fnc_reviveOnState;unit setVariable [VAR_TRANSFER_STATE, state, true]
#define SET_STATE_XTRA(unit,state,source)			["",[state,source],unit] call bis_fnc_reviveOnState;unit setVariable [VAR_TRANSFER_STATE, [state,source], true]
#define SET_STATE_XTRA2(unit,state,source,reason)	["",[state,source,reason],unit] call bis_fnc_reviveOnState;unit setVariable [VAR_TRANSFER_STATE, [state,source,reason], true]

#define GET_STATE(unit)								(unit getVariable [VAR_STATE, STATE_RESPAWNED])
#define IS_DISABLED(unit)							(GET_STATE(unit) == STATE_INCAPACITATED)
#define IS_ACTIVE(unit)								(GET_STATE(unit) < STATE_INCAPACITATED)

 

 

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

×