From a54e97bed2feabc3b280d6b07b30d7afca8161a0 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Tue, 28 Jun 2022 00:28:21 +0200 Subject: [PATCH 01/25] Prototyp OPT Revive system --- addons/main/modules.hpp | 1 + addons/main/script_version.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/main/modules.hpp b/addons/main/modules.hpp index de2deeeb..7febf7f7 100644 --- a/addons/main/modules.hpp +++ b/addons/main/modules.hpp @@ -66,6 +66,7 @@ class CfgCLibModules FNC(release); FNC(weaponreequip); FNC(clientInitcbaclassevents); + FNC(revive); }; MODULE(GELDZEIT) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 86ddf035..0e9e28ea 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 634 +#define BUILD 636 #ifdef VERSION From e26419632b303bce4792887caf4451a0dd16fecb Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Tue, 28 Jun 2022 00:30:09 +0200 Subject: [PATCH 02/25] neuer Revive Modus --- addons/main/REVIVE/fn_clientInitEH.sqf | 15 +++++- .../REVIVE/fn_clientInitcbaclassevents.sqf | 51 ++++++++++++++++++- addons/main/REVIVE/fn_dialog.sqf | 4 ++ addons/main/REVIVE/fn_handleaction.sqf | 5 ++ addons/main/REVIVE/fn_initCBASettings.sqf | 13 +++++ addons/main/REVIVE/fn_revive.sqf | 42 +++++++++++++++ 6 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 addons/main/REVIVE/fn_revive.sqf diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 2ecb3f47..e83d83a6 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -75,6 +75,10 @@ DFUNC(HandleDamage) = // Einheit aus Fahrzeug entfernen if (vehicle _unit != _unit) then {moveOut _unit}; + //Spieler verwundet darstellen + player playMove "AinjPpneMstpSnonWrflDnon_rolltoback"; + //player switchMove "AinjPpneMstpSnonWrflDnon"; + // Verzögert, damit möglichst alle Variablen gefüllt sind (der EH feuert zig mal, teilweise mit unvollständigen Angaben) [{ // alte Variablen von vorherigen Verletzungen leeren @@ -229,7 +233,16 @@ for "_i" from 0 to 6 do { // Initial assignment, Respawn Handler does not trigger on first-spawn. -GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", FUNC(HandleDamage)]; +GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", +{ + params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; + systemchat format ["d:%1 S:%2 HI:%3 HP:%4",_damage,_selection,_hitIndex,_hitPoint]; + if (_damage > GVAR(levelreviveaktiv)) then + { + _unit setDammage 0.95; + [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); + }; +}]; // Variablen-Reset GVAR(Damage_unit) = objNull; diff --git a/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf b/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf index 6822cdac..59053db6 100644 --- a/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf +++ b/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf @@ -35,7 +35,7 @@ private _action_drag = [ "OPT_REVIVE_DRAG", - MLOC(DRAG), + MLOC(MEDIC_REVIVE), "z\ace\addons\dragging\UI\icons\person_drag.paa", { params ["_target", "_player", "_params"]; @@ -63,3 +63,52 @@ ] call ace_interact_menu_fnc_addActionToObject; } forEach [ _action_drag]; }, nil, nil, true] call CBA_fnc_addClassEventHandler; + +["CAManBase", "init", +{ + params ["_unit"]; + + /* + * Argument: + * 0: Action name + * 1: Name of the action shown in the menu + * 2: Icon + * 3: Statement + * 4: Condition + * 5: Insert children code (Optional) + * 6: Action parameters (Optional) + * 7: Position (Position array, Position code or Selection Name) , or (Optional) + * 8: Distance (Optional) + * 9: Other parameters [showDisabled,enableInside,canCollapse,runOnHover,doNotCheckLOS] (Optional) + * 10: Modifier function (Optional) + */ + private _action_revive = + [ + "OPT_REVIVE_REVIVE", + MLOC(DRAG), + "\a3\ui_f\data\map\MapControl\hospital_ca.paa", + { + params ["_target", "_player", "_params"]; + [_target, _player, "action_revive"] call FUNC(handleAction); + }, + { + (cursorTarget getVariable ["OPT_isUnconscious", 1]) + } + ] call ace_interact_menu_fnc_createAction; + + /* + * Argument: + * 0: Object the action should be assigned to + * 1: Type of action, 0 for actions, 1 for self-actions + * 2: Parent path of the new action (Example: `["ACE_SelfActions", "ACE_Equipment"]`) + * 3: Action + */ + { + [ + _unit, + 0, + ["ACE_MainActions"], + _x + ] call ace_interact_menu_fnc_addActionToObject; + } forEach [ _action_revive]; +}, nil, nil, true] call CBA_fnc_addClassEventHandler; diff --git a/addons/main/REVIVE/fn_dialog.sqf b/addons/main/REVIVE/fn_dialog.sqf index e229cbd6..1d739f35 100644 --- a/addons/main/REVIVE/fn_dialog.sqf +++ b/addons/main/REVIVE/fn_dialog.sqf @@ -168,6 +168,10 @@ GVAR(startzeit) = time; player setVariable ["OPT_isUnconscious", 0, true]; player setVariable ["tf_unable_to_use_radio", false]; + //Spieler umdrehen + player playMove "amovppnemstpsraswrfldnon"; + player playMove ""; + // Schaden freigeben player allowDamage true; GVAR(unconsciousHandler) = nil; diff --git a/addons/main/REVIVE/fn_handleaction.sqf b/addons/main/REVIVE/fn_handleaction.sqf index 2ec1d8eb..bed31af7 100644 --- a/addons/main/REVIVE/fn_handleaction.sqf +++ b/addons/main/REVIVE/fn_handleaction.sqf @@ -33,6 +33,11 @@ switch (_action) do [] call FUNC(release); }; + case "action_revive": + { + [] call FUNC(revive); + }; + default { diff --git a/addons/main/REVIVE/fn_initCBASettings.sqf b/addons/main/REVIVE/fn_initCBASettings.sqf index a4e2acfc..3f936019 100644 --- a/addons/main/REVIVE/fn_initCBASettings.sqf +++ b/addons/main/REVIVE/fn_initCBASettings.sqf @@ -109,3 +109,16 @@ 1, // "_isGlobal" flag. Set this to true to always have this setting synchronized between all clients in multiplayer {} // function that will be executed once on mission start and every time the setting is changed. ] call CBA_Settings_fnc_init; + +[ + QGVAR(levelreviveaktiv), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. + "SLIDER", // setting type + [ + "Grenzwert für Revive Auslösung", // Pretty name shown inside the ingame settings menu. Can be stringtable entry. + "Wert ab dem der Revive ausgelöst wird" + endl // Mouse-Over description of the above + ], + "OPT San-System", // Pretty name of the category where the setting can be found. Can be stringtable entry. + [0, 1.0, 0.75, 2], // [min, max, default, decimal] + 1, // "_isGlobal" flag. Set this to true to always have this setting synchronized between all clients in multiplayer + {} // function that will be executed once on mission start and every time the setting is changed. +] call CBA_Settings_fnc_init; diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf new file mode 100644 index 00000000..04abe68b --- /dev/null +++ b/addons/main/REVIVE/fn_revive.sqf @@ -0,0 +1,42 @@ +/** +* Author: James +* release unit that player carries +* +* Arguments: +* None +* +* Return Value: +* None +* +* Example: +* [] call fn_revive; +* +*/ +#include "macros.hpp" + +//Revive Funktion +DFUNC(revive) = +{ + GVAR(verletzter) = cursorTarget; + + player switchmove "AinvPknlMstpSnonWrflDnon_medic"; + + [ + GVAR(Helizeitsani), + [], + { + player switchmove ""; + player action ["WeaponInHand", player]; + + //Var zurück setzen + GVAR(verletzter) setVariable ["OPT_isUnconscious", 0, true]; + }, + { + player switchmove ""; + player action ["WeaponInHand", player]; + }, + MLOC(MEDIC_REVIVE) + ] call ace_common_fnc_progressBar; +}; + +true From fe7395426b3cb7d352ce3aabd33c2c829cca6a59 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Tue, 28 Jun 2022 00:31:07 +0200 Subject: [PATCH 03/25] =?UTF-8?q?=C3=9Cberfl=C3=BCssige=20EH=20l=C3=B6sche?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/main/REVIVE/fn_clientInitEH.sqf | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index e83d83a6..4e24d77f 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -211,27 +211,6 @@ DFUNC(HandleDamage) = }, 1, ""] call CFUNC(wait); }] call CFUNC(addEventhandler); -// Avoid Handcuffing -// by TeTeT for OPT -// (ist nur noch zur Sicherheit drin) -inGameUISetEventHandler ["Action", ' - params ["_target"]; - private _actionID = _target getVariable [ "#rev_actionID_secure", -1 ]; - if (_actionID isNotEqualTo -1) then { - [ _target, _actionID ] call bis_fnc_holdActionRemove; - true; - }; -']; - -// The initial EHs are not needed and resulting in strange problems adding a new EH, so we remove any. -// still very bad practise that screams for sideeffects. -// Just look away. -for "_i" from 0 to 6 do { - player removeEventHandler ["HandleDamage", _i]; -}; -// ok now you may have a peek again - - // Initial assignment, Respawn Handler does not trigger on first-spawn. GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", { From 6652404fa9ce6f8c2321ff5852c4716e366e89e0 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Tue, 28 Jun 2022 00:32:35 +0200 Subject: [PATCH 04/25] fix --- addons/main/REVIVE/fn_revive.sqf | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf index 04abe68b..f58344ab 100644 --- a/addons/main/REVIVE/fn_revive.sqf +++ b/addons/main/REVIVE/fn_revive.sqf @@ -17,26 +17,26 @@ //Revive Funktion DFUNC(revive) = { - GVAR(verletzter) = cursorTarget; + GVAR(verletzter) = cursorTarget; - player switchmove "AinvPknlMstpSnonWrflDnon_medic"; + player switchmove "AinvPknlMstpSnonWrflDnon_medic"; - [ - GVAR(Helizeitsani), - [], - { - player switchmove ""; - player action ["WeaponInHand", player]; + [ + GVAR(Helizeitsani), + [], + { + player switchmove ""; + player action ["WeaponInHand", player]; - //Var zurück setzen - GVAR(verletzter) setVariable ["OPT_isUnconscious", 0, true]; - }, - { - player switchmove ""; - player action ["WeaponInHand", player]; - }, - MLOC(MEDIC_REVIVE) - ] call ace_common_fnc_progressBar; + //Var zurück setzen + GVAR(verletzter) setVariable ["OPT_isUnconscious", 0, true]; + }, + { + player switchmove ""; + player action ["WeaponInHand", player]; + }, + MLOC(MEDIC_REVIVE) + ] call ace_common_fnc_progressBar; }; true From 00daf5ed52f8fa99667ee335b9f26a00ea91d175 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 1 Jul 2022 18:53:48 +0200 Subject: [PATCH 05/25] =?UTF-8?q?R=C3=BCckgabewert=20und=20Selektionfunkti?= =?UTF-8?q?on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/main/REVIVE/fn_clientInitEH.sqf | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 4e24d77f..c90c398c 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -216,11 +216,24 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", { params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; systemchat format ["d:%1 S:%2 HI:%3 HP:%4",_damage,_selection,_hitIndex,_hitPoint]; + private _returndammage = 0; + if (_damage > GVAR(levelreviveaktiv)) then { _unit setDammage 0.95; [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); - }; + }; +// Maximal MAX_DAMAGE zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) +if (_selection in ["arms", "hands", "legs"]) then + { + _returndammage = 0; + } + else + { + _returndammage = _damage min GVAR(levelreviveaktiv); + }; + + _returndammage }]; // Variablen-Reset From fee70ea548e37e632a3e4d0cfa0ef79821b98969 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 1 Jul 2022 18:54:23 +0200 Subject: [PATCH 06/25] umstellen --- addons/main/REVIVE/fn_clientInitEH.sqf | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index c90c398c..7ed424e2 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -220,7 +220,6 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", if (_damage > GVAR(levelreviveaktiv)) then { - _unit setDammage 0.95; [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); }; // Maximal MAX_DAMAGE zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) From 4d1dcc3e39c8af12306514f70e9805243924f124 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 1 Jul 2022 18:55:05 +0200 Subject: [PATCH 07/25] fix --- addons/main/REVIVE/fn_clientInitEH.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 7ed424e2..c3537c57 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -222,7 +222,7 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", { [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); }; -// Maximal MAX_DAMAGE zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) +// Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) if (_selection in ["arms", "hands", "legs"]) then { _returndammage = 0; From d82bf92debac4ac2730ae649fdeb92b62212db04 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 1 Jul 2022 18:56:19 +0200 Subject: [PATCH 08/25] fix --- addons/main/REVIVE/fn_clientInitEH.sqf | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index c3537c57..2a24f3c0 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -216,7 +216,6 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", { params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; systemchat format ["d:%1 S:%2 HI:%3 HP:%4",_damage,_selection,_hitIndex,_hitPoint]; - private _returndammage = 0; if (_damage > GVAR(levelreviveaktiv)) then { @@ -225,14 +224,14 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) if (_selection in ["arms", "hands", "legs"]) then { - _returndammage = 0; + private _returndammage = 0; } else { - _returndammage = _damage min GVAR(levelreviveaktiv); + private _returndammage = _damage min GVAR(levelreviveaktiv); }; - _returndammage +_returndammage }]; // Variablen-Reset From 206966a524367a542fd10ce1137db22716842f3b Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 1 Jul 2022 19:01:46 +0200 Subject: [PATCH 09/25] umstellung --- addons/main/REVIVE/fn_clientInitEH.sqf | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 2a24f3c0..f3bf5a04 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -149,6 +149,8 @@ DFUNC(HandleDamage) = }; }; +GVAR(returndammage) = 0; + ["Respawn", { params ["_data", "_args"]; @@ -224,14 +226,14 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) if (_selection in ["arms", "hands", "legs"]) then { - private _returndammage = 0; + GVAR(returndammage) = 0; } else { - private _returndammage = _damage min GVAR(levelreviveaktiv); + GVAR(returndammage) = _damage min GVAR(levelreviveaktiv); }; -_returndammage +GVAR(returndammage) }]; // Variablen-Reset From f958d7c5b36e4fb58a6cca54a44d6516eab3ca44 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 1 Jul 2022 19:17:52 +0200 Subject: [PATCH 10/25] =?UTF-8?q?form=20sch=C3=B6n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/main/REVIVE/fn_clientInitEH.sqf | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index f3bf5a04..96a85397 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -149,8 +149,6 @@ DFUNC(HandleDamage) = }; }; -GVAR(returndammage) = 0; - ["Respawn", { params ["_data", "_args"]; @@ -224,16 +222,17 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); }; // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) +private _returndammage = 0; if (_selection in ["arms", "hands", "legs"]) then { - GVAR(returndammage) = 0; + _returndammage = 0; } else { - GVAR(returndammage) = _damage min GVAR(levelreviveaktiv); + _returndammage = _damage min GVAR(levelreviveaktiv); }; -GVAR(returndammage) +_returndammage }]; // Variablen-Reset From dceb1b66b55ac21423c040f7590a71d03022e6f9 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 15:56:23 +0200 Subject: [PATCH 11/25] Revive funktion --- addons/main/REVIVE/fn_checkisUnconscious.sqf | 44 ++++++++++++++++++ .../REVIVE/fn_clientInitcbaclassevents.sqf | 45 +++---------------- addons/main/REVIVE/fn_handleaction.sqf | 2 +- addons/main/REVIVE/fn_initCBASettings.sqf | 13 ++++++ addons/main/REVIVE/fn_revive.sqf | 44 +++++++++--------- addons/main/modules.hpp | 1 + addons/main/script_version.hpp | 2 +- 7 files changed, 88 insertions(+), 63 deletions(-) create mode 100644 addons/main/REVIVE/fn_checkisUnconscious.sqf diff --git a/addons/main/REVIVE/fn_checkisUnconscious.sqf b/addons/main/REVIVE/fn_checkisUnconscious.sqf new file mode 100644 index 00000000..ce659791 --- /dev/null +++ b/addons/main/REVIVE/fn_checkisUnconscious.sqf @@ -0,0 +1,44 @@ +/** +* Author: [GNC]Lord-MDB +* Kontrolliert ob Spieler bewustlos ist. +* +* Arguments: +* 0: target add action is attached to +* 1: unit that called the add action +* +* Return Value: +* 0: true - Spieler ist bewustlos +* +* Example: +* [cursorObject, player] call fn_checkisUnconscious.sqf; +* +*/ +#include "macros.hpp" + +params ["_target", "_caller"]; + +private _return = false; + +private _isPlayerUnconscious = _caller getVariable "OPT_isUnconscious"; + +if (!alive _caller || {_isPlayerUnconscious == 1} || {GVAR(OPT_isDragging)} || {isNil "_target"} || {!alive _target} || {(_target distance _caller) > 5}) exitWith +{ + _return; +}; + +// Target of the action +private _isTargetUnconscious = false; +private _isDragged = _target getVariable "OPT_isDragged"; +private _isPlayerUnconscioustarget = _target getVariable "OPT_isUnconscious"; + +if (_isPlayerUnconscioustarget == 1) then +{ + _isTargetUnconscious = true; +}; + +if (_isTargetUnconscious && (_isDragged == 0)) then +{ + _return = true; +}; + +_return diff --git a/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf b/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf index 59053db6..9eb83f6c 100644 --- a/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf +++ b/addons/main/REVIVE/fn_clientInitcbaclassevents.sqf @@ -35,7 +35,7 @@ private _action_drag = [ "OPT_REVIVE_DRAG", - MLOC(MEDIC_REVIVE), + MLOC(DRAG), "z\ace\addons\dragging\UI\icons\person_drag.paa", { params ["_target", "_player", "_params"]; @@ -47,52 +47,18 @@ } ] call ace_interact_menu_fnc_createAction; - /* - * Argument: - * 0: Object the action should be assigned to - * 1: Type of action, 0 for actions, 1 for self-actions - * 2: Parent path of the new action (Example: `["ACE_SelfActions", "ACE_Equipment"]`) - * 3: Action - */ - { - [ - _unit, - 0, - ["ACE_MainActions"], - _x - ] call ace_interact_menu_fnc_addActionToObject; - } forEach [ _action_drag]; -}, nil, nil, true] call CBA_fnc_addClassEventHandler; - -["CAManBase", "init", -{ - params ["_unit"]; - - /* - * Argument: - * 0: Action name - * 1: Name of the action shown in the menu - * 2: Icon - * 3: Statement - * 4: Condition - * 5: Insert children code (Optional) - * 6: Action parameters (Optional) - * 7: Position (Position array, Position code or Selection Name) , or (Optional) - * 8: Distance (Optional) - * 9: Other parameters [showDisabled,enableInside,canCollapse,runOnHover,doNotCheckLOS] (Optional) - * 10: Modifier function (Optional) - */ private _action_revive = [ "OPT_REVIVE_REVIVE", - MLOC(DRAG), + MLOC(MEDIC_REVIVE), "\a3\ui_f\data\map\MapControl\hospital_ca.paa", { params ["_target", "_player", "_params"]; [_target, _player, "action_revive"] call FUNC(handleAction); }, { - (cursorTarget getVariable ["OPT_isUnconscious", 1]) + params ["_target", "_player", "_params"]; + [_target, _player] call FUNC(checkisUnconscious); } ] call ace_interact_menu_fnc_createAction; @@ -110,5 +76,6 @@ ["ACE_MainActions"], _x ] call ace_interact_menu_fnc_addActionToObject; - } forEach [ _action_revive]; + } forEach [ _action_drag,_action_revive]; }, nil, nil, true] call CBA_fnc_addClassEventHandler; + diff --git a/addons/main/REVIVE/fn_handleaction.sqf b/addons/main/REVIVE/fn_handleaction.sqf index bed31af7..c5960df4 100644 --- a/addons/main/REVIVE/fn_handleaction.sqf +++ b/addons/main/REVIVE/fn_handleaction.sqf @@ -35,7 +35,7 @@ switch (_action) do case "action_revive": { - [] call FUNC(revive); + [_target] call FUNC(revive); }; default diff --git a/addons/main/REVIVE/fn_initCBASettings.sqf b/addons/main/REVIVE/fn_initCBASettings.sqf index 3f936019..3645ffb2 100644 --- a/addons/main/REVIVE/fn_initCBASettings.sqf +++ b/addons/main/REVIVE/fn_initCBASettings.sqf @@ -122,3 +122,16 @@ 1, // "_isGlobal" flag. Set this to true to always have this setting synchronized between all clients in multiplayer {} // function that will be executed once on mission start and every time the setting is changed. ] call CBA_Settings_fnc_init; + +[ + QGVAR(Helizeitsani), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. + "SLIDER", // setting type + [ + "Dauer für die Revivezeit des Sanis", // Pretty name shown inside the ingame settings menu. Can be stringtable entry. + "Zeit in Sek" + endl // Mouse-Over description of the above + ], + "OPT San-System", // Pretty name of the category where the setting can be found. Can be stringtable entry. + [1, 30, 20, 0], // [min, max, default, decimal] + 1, // "_isGlobal" flag. Set this to true to always have this setting synchronized between all clients in multiplayer + {} // function that will be executed once on mission start and every time the setting is changed. +] call CBA_Settings_fnc_init; diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf index f58344ab..fb33acff 100644 --- a/addons/main/REVIVE/fn_revive.sqf +++ b/addons/main/REVIVE/fn_revive.sqf @@ -9,34 +9,34 @@ * None * * Example: -* [] call fn_revive; +* [_target] call fn_revive; * */ #include "macros.hpp" -//Revive Funktion -DFUNC(revive) = -{ - GVAR(verletzter) = cursorTarget; +params ["_target"]; + +GVAR(verletzter) = _target; - player switchmove "AinvPknlMstpSnonWrflDnon_medic"; +//Revive Funktion +player switchmove "AinvPknlMstpSnonWrflDnon_medic"; - [ - GVAR(Helizeitsani), - [], - { - player switchmove ""; - player action ["WeaponInHand", player]; +[ + GVAR(Helizeitsani), + [], + { + player switchmove ""; + player action ["WeaponInHand", player]; - //Var zurück setzen - GVAR(verletzter) setVariable ["OPT_isUnconscious", 0, true]; - }, - { - player switchmove ""; - player action ["WeaponInHand", player]; - }, - MLOC(MEDIC_REVIVE) - ] call ace_common_fnc_progressBar; -}; + //Var zurück setzen + GVAR(verletzter) setVariable ["OPT_isUnconscious", 0, true]; + GVAR(verletzter) setDamage 0.0; + }, + { + player switchmove ""; + player action ["WeaponInHand", player]; + }, + MLOC(MEDIC_REVIVE) +] call ace_common_fnc_progressBar; true diff --git a/addons/main/modules.hpp b/addons/main/modules.hpp index 7febf7f7..15ddfdc7 100644 --- a/addons/main/modules.hpp +++ b/addons/main/modules.hpp @@ -67,6 +67,7 @@ class CfgCLibModules FNC(weaponreequip); FNC(clientInitcbaclassevents); FNC(revive); + FNC(checkisUnconscious); }; MODULE(GELDZEIT) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index fdee5fd6..325d79d0 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 639 +#define BUILD 648 #ifdef VERSION From bf4d66255b4a71e17646de793b7fe4eeacdc84cd Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 16:13:24 +0200 Subject: [PATCH 12/25] =?UTF-8?q?h=C3=B6here=20Helizeit=20bei=20nicht=20Sa?= =?UTF-8?q?ni=20einheiten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/main/REVIVE/fn_initCBASettings.sqf | 13 +++++++++++++ addons/main/REVIVE/fn_revive.sqf | 11 ++++++++++- addons/main/script_version.hpp | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/addons/main/REVIVE/fn_initCBASettings.sqf b/addons/main/REVIVE/fn_initCBASettings.sqf index 3645ffb2..35c6a097 100644 --- a/addons/main/REVIVE/fn_initCBASettings.sqf +++ b/addons/main/REVIVE/fn_initCBASettings.sqf @@ -135,3 +135,16 @@ 1, // "_isGlobal" flag. Set this to true to always have this setting synchronized between all clients in multiplayer {} // function that will be executed once on mission start and every time the setting is changed. ] call CBA_Settings_fnc_init; + +[ + QGVAR(Helizeitfaktor), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. + "SLIDER", // setting type + [ + "Verlängerung bei nicht Sani Einheiten", // Pretty name shown inside the ingame settings menu. Can be stringtable entry. + "Prozentwert die sich die Sanihelizeit vergrößert" + endl // Mouse-Over description of the above + ], + "OPT San-System", // Pretty name of the category where the setting can be found. Can be stringtable entry. + [1, 100, 50, 0], // [min, max, default, decimal] + 1, // "_isGlobal" flag. Set this to true to always have this setting synchronized between all clients in multiplayer + {} // function that will be executed once on mission start and every time the setting is changed. +] call CBA_Settings_fnc_init; diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf index fb33acff..5247a67e 100644 --- a/addons/main/REVIVE/fn_revive.sqf +++ b/addons/main/REVIVE/fn_revive.sqf @@ -17,12 +17,21 @@ params ["_target"]; GVAR(verletzter) = _target; +GVAR(Helizeit) = 0; + +GVAR(Helizeit) = GVAR(Helizeitsani); + +//längere Heilzeit bei nicht Sanitätern +if (!(typeOf player in GVAR(SaniKlassen))) then +{ + GVAR(Helizeit) = GVAR(Helizeitsani)+(GVAR(Helizeitsani)*GVAR(Helizeitfaktor)/100); +}; //Revive Funktion player switchmove "AinvPknlMstpSnonWrflDnon_medic"; [ - GVAR(Helizeitsani), + GVAR(Helizeit), [], { player switchmove ""; diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 325d79d0..915f7fb1 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 648 +#define BUILD 649 #ifdef VERSION From 34dca6492a93460c4fa3df48777eeabe4ecd4577 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 16:15:44 +0200 Subject: [PATCH 13/25] fix --- addons/main/REVIVE/fn_revive.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf index 5247a67e..ebdf4e75 100644 --- a/addons/main/REVIVE/fn_revive.sqf +++ b/addons/main/REVIVE/fn_revive.sqf @@ -24,7 +24,7 @@ GVAR(Helizeit) = GVAR(Helizeitsani); //längere Heilzeit bei nicht Sanitätern if (!(typeOf player in GVAR(SaniKlassen))) then { - GVAR(Helizeit) = GVAR(Helizeitsani)+(GVAR(Helizeitsani)*GVAR(Helizeitfaktor)/100); + GVAR(Helizeit) = GVAR(Helizeitsani)+(GVAR(Helizeitsani)*GVAR(Helizeitfaktor)/100); }; //Revive Funktion From 9f7ab88030796b79bd3c34aa77660766d0d1c871 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 19:26:06 +0200 Subject: [PATCH 14/25] Animatione ausgetauscht --- addons/main/REVIVE/fn_clientInitEH.sqf | 12 +++++++----- addons/main/REVIVE/fn_dialog.sqf | 1 + addons/main/REVIVE/fn_revive.sqf | 6 +++--- addons/main/script_version.hpp | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 96a85397..f5b89926 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -58,8 +58,9 @@ DFUNC(HandleDamage) = if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damage >= MAX_DAMAGE && !(_selection in ["arms", "hands", "legs"])) then { // Spieler bewusstlos machen und weiteren Schaden ausblenden - player setDamage 0.5; + player setDamage GVAR(levelreviveaktiv); player allowDamage false; + player setUnconscious true; GVAR(unconsciousHandler) = true; // ["DEBUG", "KillHandler", [GVAR(Damage_unit), _selection, _damage, GVAR(Damage_source), GVAR(Damage_projectile), _hitIndex, GVAR(Damage_instigator), _hitPoint]] remoteExec [QEFUNC(LOGGING,writelog), 2]; @@ -76,8 +77,7 @@ DFUNC(HandleDamage) = if (vehicle _unit != _unit) then {moveOut _unit}; //Spieler verwundet darstellen - player playMove "AinjPpneMstpSnonWrflDnon_rolltoback"; - //player switchMove "AinjPpneMstpSnonWrflDnon"; + player playAction "Unconscious"; // Verzögert, damit möglichst alle Variablen gefüllt sind (der EH feuert zig mal, teilweise mit unvollständigen Angaben) [{ @@ -163,6 +163,7 @@ DFUNC(HandleDamage) = _newPlayer setVariable ["OPT_isDragged", 0, true]; _newPlayer allowDamage true; _newPlayer setVariable ["tf_unable_to_use_radio", false]; + _newPlayer setUnconscious false; GVAR(OPT_isDragging) = false; GVAR(unconsciousHandler) = nil; @@ -215,12 +216,12 @@ DFUNC(HandleDamage) = GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", { params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; - systemchat format ["d:%1 S:%2 HI:%3 HP:%4",_damage,_selection,_hitIndex,_hitPoint]; if (_damage > GVAR(levelreviveaktiv)) then { [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); }; + // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) private _returndammage = 0; if (_selection in ["arms", "hands", "legs"]) then @@ -231,7 +232,7 @@ if (_selection in ["arms", "hands", "legs"]) then { _returndammage = _damage min GVAR(levelreviveaktiv); }; - +diag_log format ["d:%1 S:%2 rd:%3",_damage,_selection,_returndammage]; _returndammage }]; @@ -261,3 +262,4 @@ GVAR(missionEH_draw3D) = addMissionEventHandler ["Draw3D", drawIcon3D ["\a3\ui_f\data\map\MapControl\hospital_ca.paa", [0.6, 0.15, 0, 0.8], _x, 0.5, 0.5, 0, format ["%1 (%2m)", name _x, round (player distance _x)], 0, 0.02]; } forEach _nearbyUnits; }]; + diff --git a/addons/main/REVIVE/fn_dialog.sqf b/addons/main/REVIVE/fn_dialog.sqf index 1d739f35..463fd7b8 100644 --- a/addons/main/REVIVE/fn_dialog.sqf +++ b/addons/main/REVIVE/fn_dialog.sqf @@ -175,6 +175,7 @@ GVAR(startzeit) = time; // Schaden freigeben player allowDamage true; GVAR(unconsciousHandler) = nil; + player setUnconscious false; // Nicht nach dem Respawnen ausführen if (isNil QGVAR(RespawnPressed)) then diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf index ebdf4e75..a2c8baea 100644 --- a/addons/main/REVIVE/fn_revive.sqf +++ b/addons/main/REVIVE/fn_revive.sqf @@ -28,13 +28,13 @@ if (!(typeOf player in GVAR(SaniKlassen))) then }; //Revive Funktion -player switchmove "AinvPknlMstpSnonWrflDnon_medic"; +player playAction "medicStart"; [ GVAR(Helizeit), [], { - player switchmove ""; + player playAction "medicStop"; player action ["WeaponInHand", player]; //Var zurück setzen @@ -42,7 +42,7 @@ player switchmove "AinvPknlMstpSnonWrflDnon_medic"; GVAR(verletzter) setDamage 0.0; }, { - player switchmove ""; + player playAction "medicStop"; player action ["WeaponInHand", player]; }, MLOC(MEDIC_REVIVE) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 915f7fb1..787ea930 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 649 +#define BUILD 651 #ifdef VERSION From 1216cfba236d35e570b8fef48a6a04a5ce0fee60 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 19:39:06 +0200 Subject: [PATCH 15/25] debug --- addons/main/REVIVE/fn_clientInitEH.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index f5b89926..384c4fa8 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -221,7 +221,7 @@ GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", { [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); }; - + // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) private _returndammage = 0; if (_selection in ["arms", "hands", "legs"]) then @@ -232,7 +232,7 @@ if (_selection in ["arms", "hands", "legs"]) then { _returndammage = _damage min GVAR(levelreviveaktiv); }; -diag_log format ["d:%1 S:%2 rd:%3",_damage,_selection,_returndammage]; +systemChat format ["d:%1 S:%2 rd:%3",_damage,_selection,_returndammage]; _returndammage }]; From 98a24fe13d9335a0debaa35cf384ec5692649a7c Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 19:39:21 +0200 Subject: [PATCH 16/25] version --- addons/main/script_version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 787ea930..d499148d 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 651 +#define BUILD 654 #ifdef VERSION From 81c307bcbacbb0c2d946b783780444ffce311150 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 19:58:54 +0200 Subject: [PATCH 17/25] Umstellung --- addons/main/REVIVE/fn_clientInitEH.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 384c4fa8..47ef7ead 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -58,8 +58,8 @@ DFUNC(HandleDamage) = if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damage >= MAX_DAMAGE && !(_selection in ["arms", "hands", "legs"])) then { // Spieler bewusstlos machen und weiteren Schaden ausblenden - player setDamage GVAR(levelreviveaktiv); player allowDamage false; + player setDamage GVAR(levelreviveaktiv); player setUnconscious true; GVAR(unconsciousHandler) = true; From b86ec728c8e1d70162642a200e7951583e6e0d81 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sat, 2 Jul 2022 20:05:41 +0200 Subject: [PATCH 18/25] version --- addons/main/script_version.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index d499148d..5f5a3bed 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 654 +#define BUILD 655 #ifdef VERSION From d5055b735c99a4b17e1f06774f0a38fa6d50a64c Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Sun, 3 Jul 2022 16:43:18 +0200 Subject: [PATCH 19/25] Verbesserungen --- addons/main/REVIVE/fn_clientInit.sqf | 1 + addons/main/REVIVE/fn_clientInitEH.sqf | 39 ++++++++------------------ addons/main/script_version.hpp | 2 +- 3 files changed, 14 insertions(+), 28 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInit.sqf b/addons/main/REVIVE/fn_clientInit.sqf index 42818ecc..1a3a732a 100644 --- a/addons/main/REVIVE/fn_clientInit.sqf +++ b/addons/main/REVIVE/fn_clientInit.sqf @@ -56,6 +56,7 @@ DFUNC(SelfCare) = player setVariable ["OPT_isStabilized", 0, true]; GVAR(OPT_isDragging) = false; player setVariable ["OPT_isDragged", 0, true]; + player setVariable ["OPT_damage_var",0]; //Chat abschaltung bei Bewustlosigkeit (findDisplay 46) displayAddEventHandler ["KeyDown", {_this call FUNC(keyUnbind)}]; diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 47ef7ead..aa0b6168 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -54,8 +54,14 @@ DFUNC(HandleDamage) = GVAR(Damage_instigator_age) = serverTime; }; + private _damagePrev = damage _unit; + private _damageRecieved = _damage - _damagePrev; + private _damageAccumulated = (_unit getVariable ["OPT_damage_var",0]) + _damageRecieved; + _unit setVariable ["OPT_damage_var",_damageAccumulated]; + systemChat format ["D:%1 DP:%2 DR:%3 AD:%4 V:%5",_damage,_damagePrev,_damageRecieved,_damageAccumulated,(_unit getVariable ["OPT_damage_var",0])]; + // Einmalige Auslösung bei schwerer Verletzung lebenswichtiger Körperteile - if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damage >= MAX_DAMAGE && !(_selection in ["arms", "hands", "legs"])) then + if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damageAccumulated >= GVAR(levelreviveaktiv) && !(_selection in ["arms", "hands", "legs"])) then { // Spieler bewusstlos machen und weiteren Schaden ausblenden player allowDamage false; @@ -63,7 +69,6 @@ DFUNC(HandleDamage) = player setUnconscious true; GVAR(unconsciousHandler) = true; -// ["DEBUG", "KillHandler", [GVAR(Damage_unit), _selection, _damage, GVAR(Damage_source), GVAR(Damage_projectile), _hitIndex, GVAR(Damage_instigator), _hitPoint]] remoteExec [QEFUNC(LOGGING,writelog), 2]; // für Dragging und Chat _unit setVariable ["OPT_isUnconscious", 1, true]; @@ -139,13 +144,13 @@ DFUNC(HandleDamage) = // Respawn-Dialog anzeigen [] call FUNC(dialog); }, 2, ""] call CFUNC(wait); - 0; // keine weitere Damage zurückgeben, da wir eh schon bewusstlos sind + GVAR(levelreviveaktiv); } else { - // Maximal MAX_DAMAGE zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) + // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) if (_selection in ["arms", "hands", "legs"]) then {0} - else {_damage min MAX_DAMAGE}; + else {_damageAccumulated min GVAR(levelreviveaktiv)}; }; }; @@ -164,6 +169,7 @@ DFUNC(HandleDamage) = _newPlayer allowDamage true; _newPlayer setVariable ["tf_unable_to_use_radio", false]; _newPlayer setUnconscious false; + _newPlayer setVariable ["OPT_damage_var",0]; GVAR(OPT_isDragging) = false; GVAR(unconsciousHandler) = nil; @@ -213,28 +219,7 @@ DFUNC(HandleDamage) = }] call CFUNC(addEventhandler); // Initial assignment, Respawn Handler does not trigger on first-spawn. -GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", -{ - params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"]; - - if (_damage > GVAR(levelreviveaktiv)) then - { - [_unit, _selection, _damage, _source, _projectile, _hitIndex, _instigator, _hitPoint] call FUNC(HandleDamage); - }; - -// Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) -private _returndammage = 0; -if (_selection in ["arms", "hands", "legs"]) then - { - _returndammage = 0; - } - else - { - _returndammage = _damage min GVAR(levelreviveaktiv); - }; -systemChat format ["d:%1 S:%2 rd:%3",_damage,_selection,_returndammage]; -_returndammage -}]; +GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", FUNC(HandleDamage)]; // Variablen-Reset GVAR(Damage_unit) = objNull; diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 5f5a3bed..553877b9 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 655 +#define BUILD 667 #ifdef VERSION From 9f5f918c967f0ba758783a70a9aa37dca8e73d83 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 8 Jul 2022 11:17:10 +0200 Subject: [PATCH 20/25] =?UTF-8?q?Varnamen=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/main/REVIVE/fn_initCBASettings.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/main/REVIVE/fn_initCBASettings.sqf b/addons/main/REVIVE/fn_initCBASettings.sqf index 35c6a097..e52721f5 100644 --- a/addons/main/REVIVE/fn_initCBASettings.sqf +++ b/addons/main/REVIVE/fn_initCBASettings.sqf @@ -124,7 +124,7 @@ ] call CBA_Settings_fnc_init; [ - QGVAR(Helizeitsani), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. + QGVAR(Heilzeitsani), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. "SLIDER", // setting type [ "Dauer für die Revivezeit des Sanis", // Pretty name shown inside the ingame settings menu. Can be stringtable entry. @@ -137,7 +137,7 @@ ] call CBA_Settings_fnc_init; [ - QGVAR(Helizeitfaktor), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. + QGVAR(Heilzeitfaktor), // Internal setting name, should always contain a tag! This will be the global variable which takes the value of the setting. "SLIDER", // setting type [ "Verlängerung bei nicht Sani Einheiten", // Pretty name shown inside the ingame settings menu. Can be stringtable entry. From aa13d836da5d01dd50071b8a8744cddd9d8dc171 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 8 Jul 2022 11:17:24 +0200 Subject: [PATCH 21/25] =?UTF-8?q?Varnamen=20ge=C3=A4ndert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/main/REVIVE/fn_revive.sqf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/main/REVIVE/fn_revive.sqf b/addons/main/REVIVE/fn_revive.sqf index a2c8baea..11e09779 100644 --- a/addons/main/REVIVE/fn_revive.sqf +++ b/addons/main/REVIVE/fn_revive.sqf @@ -17,21 +17,21 @@ params ["_target"]; GVAR(verletzter) = _target; -GVAR(Helizeit) = 0; +GVAR(Heilzeit) = 0; -GVAR(Helizeit) = GVAR(Helizeitsani); +GVAR(Heilzeit) = GVAR(Heilzeitsani); //längere Heilzeit bei nicht Sanitätern if (!(typeOf player in GVAR(SaniKlassen))) then { - GVAR(Helizeit) = GVAR(Helizeitsani)+(GVAR(Helizeitsani)*GVAR(Helizeitfaktor)/100); + GVAR(Heilzeit) = GVAR(Heilzeitsani)+(GVAR(Heilzeitsani)*GVAR(Heilzeitfaktor)/100); }; //Revive Funktion player playAction "medicStart"; [ - GVAR(Helizeit), + GVAR(Heilzeit), [], { player playAction "medicStop"; From ce17860d3b0a4e52455047ddc7ff410c105e3456 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Fri, 8 Jul 2022 11:21:53 +0200 Subject: [PATCH 22/25] fix --- addons/main/REVIVE/fn_initCBASettings.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/main/REVIVE/fn_initCBASettings.sqf b/addons/main/REVIVE/fn_initCBASettings.sqf index e52721f5..7bd7fbab 100644 --- a/addons/main/REVIVE/fn_initCBASettings.sqf +++ b/addons/main/REVIVE/fn_initCBASettings.sqf @@ -141,7 +141,7 @@ "SLIDER", // setting type [ "Verlängerung bei nicht Sani Einheiten", // Pretty name shown inside the ingame settings menu. Can be stringtable entry. - "Prozentwert die sich die Sanihelizeit vergrößert" + endl // Mouse-Over description of the above + "Prozentwert um die sich die Sani Heilzeit vergrößert" + endl // Mouse-Over description of the above ], "OPT San-System", // Pretty name of the category where the setting can be found. Can be stringtable entry. [1, 100, 50, 0], // [min, max, default, decimal] From 3e098b86b2957195ae2c0906a0774910b108db66 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Thu, 14 Jul 2022 17:12:15 +0200 Subject: [PATCH 23/25] Test version 2 --- addons/main/REVIVE/fn_clientInitEH.sqf | 10 ++++++---- addons/main/REVIVE/fn_dialog.sqf | 2 +- addons/main/script_version.hpp | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index aa0b6168..d97da16b 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -144,7 +144,7 @@ DFUNC(HandleDamage) = // Respawn-Dialog anzeigen [] call FUNC(dialog); }, 2, ""] call CFUNC(wait); - GVAR(levelreviveaktiv); + 0; } else { @@ -160,8 +160,8 @@ DFUNC(HandleDamage) = _data params ["_newPlayer", "_oldPlayer"]; // Respawn will change the player Object. We need to reassign the Eventhandler. - _oldPlayer removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; - GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = _newPlayer addEventHandler ["HandleDamage", FUNC(HandleDamage)]; + //_oldPlayer removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; + //GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = _newPlayer addEventHandler ["HandleDamage", FUNC(HandleDamage)]; _newPlayer setVariable ["OPT_isUnconscious", 0, true]; _newPlayer setVariable ["OPT_isStabilized", 0, true]; @@ -170,6 +170,7 @@ DFUNC(HandleDamage) = _newPlayer setVariable ["tf_unable_to_use_radio", false]; _newPlayer setUnconscious false; _newPlayer setVariable ["OPT_damage_var",0]; + _newPlayer playAction "PlayerStand"; GVAR(OPT_isDragging) = false; GVAR(unconsciousHandler) = nil; @@ -219,7 +220,8 @@ DFUNC(HandleDamage) = }] call CFUNC(addEventhandler); // Initial assignment, Respawn Handler does not trigger on first-spawn. -GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", FUNC(HandleDamage)]; +//GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", FUNC(HandleDamage)]; +player setVariable ["opt_revive_ehHandleDamage", player addEventHandler ["HandleDamage",OPT_REVIVE_fnc_HandleDamage]]; // Variablen-Reset GVAR(Damage_unit) = objNull; diff --git a/addons/main/REVIVE/fn_dialog.sqf b/addons/main/REVIVE/fn_dialog.sqf index 463fd7b8..00453e42 100644 --- a/addons/main/REVIVE/fn_dialog.sqf +++ b/addons/main/REVIVE/fn_dialog.sqf @@ -72,7 +72,7 @@ _Respawn_button ctrlAddEventHandler ["ButtonClick", EGVAR(LOGGING,LAST_DISTANCE) = 0; // Eventhandler löschen - player removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; + //player removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; GVAR(RespawnPressed) = true; ["Health", "Respawn", [getPlayerUID player, name player, side player, "RespawnClick"]] remoteExecCall [QEFUNC(LOGGING,writelog), 2, false]; diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 553877b9..4409426a 100755 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -2,7 +2,7 @@ #define MAJOR 1 #define MINOR 9 #define PATCHLVL 2 -#define BUILD 667 +#define BUILD 672 #ifdef VERSION From a1beafcf03284f5c8c04b0a80b66c31e4c091ae4 Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Thu, 14 Jul 2022 17:46:53 +0200 Subject: [PATCH 24/25] Test Version 3 --- addons/main/REVIVE/fn_clientInitEH.sqf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index d97da16b..99006961 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -61,7 +61,7 @@ DFUNC(HandleDamage) = systemChat format ["D:%1 DP:%2 DR:%3 AD:%4 V:%5",_damage,_damagePrev,_damageRecieved,_damageAccumulated,(_unit getVariable ["OPT_damage_var",0])]; // Einmalige Auslösung bei schwerer Verletzung lebenswichtiger Körperteile - if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damageAccumulated >= GVAR(levelreviveaktiv) && !(_selection in ["arms", "hands", "legs"])) then + if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damage >= GVAR(levelreviveaktiv) && !(_selection in ["arms", "hands", "legs"])) then { // Spieler bewusstlos machen und weiteren Schaden ausblenden player allowDamage false; @@ -150,7 +150,7 @@ DFUNC(HandleDamage) = { // Maximal levelreviveaktiv zurückgeben, damit man nie sofort stirbt (Extremitätsverletzungen werden ignoriert) if (_selection in ["arms", "hands", "legs"]) then {0} - else {_damageAccumulated min GVAR(levelreviveaktiv)}; + else {_damage min GVAR(levelreviveaktiv)}; }; }; @@ -161,6 +161,8 @@ DFUNC(HandleDamage) = // Respawn will change the player Object. We need to reassign the Eventhandler. //_oldPlayer removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; + _oldPlayer removeEventHandler ["HandleDamage",player getVariable ["opt_revive_ehHandleDamage",-1]]; + player setVariable ["opt_revive_ehHandleDamage", player addEventHandler ["HandleDamage",OPT_REVIVE_fnc_HandleDamage]]; //GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = _newPlayer addEventHandler ["HandleDamage", FUNC(HandleDamage)]; _newPlayer setVariable ["OPT_isUnconscious", 0, true]; From cd5be3d20853cbfc01e52244ba58352d936120cc Mon Sep 17 00:00:00 2001 From: GNCLORD-MDB Date: Thu, 14 Jul 2022 18:00:08 +0200 Subject: [PATCH 25/25] Sauber machen nach Test --- addons/main/REVIVE/fn_clientInitEH.sqf | 12 +----------- addons/main/REVIVE/fn_dialog.sqf | 3 --- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/addons/main/REVIVE/fn_clientInitEH.sqf b/addons/main/REVIVE/fn_clientInitEH.sqf index 99006961..1f98b240 100644 --- a/addons/main/REVIVE/fn_clientInitEH.sqf +++ b/addons/main/REVIVE/fn_clientInitEH.sqf @@ -54,13 +54,7 @@ DFUNC(HandleDamage) = GVAR(Damage_instigator_age) = serverTime; }; - private _damagePrev = damage _unit; - private _damageRecieved = _damage - _damagePrev; - private _damageAccumulated = (_unit getVariable ["OPT_damage_var",0]) + _damageRecieved; - _unit setVariable ["OPT_damage_var",_damageAccumulated]; - systemChat format ["D:%1 DP:%2 DR:%3 AD:%4 V:%5",_damage,_damagePrev,_damageRecieved,_damageAccumulated,(_unit getVariable ["OPT_damage_var",0])]; - - // Einmalige Auslösung bei schwerer Verletzung lebenswichtiger Körperteile + // Einmalige Auslösung bei schwerer Verletzung lebenswichtiger Körperteile if (_unit isEqualTo player && isNil QGVAR(unconsciousHandler) && _damage >= GVAR(levelreviveaktiv) && !(_selection in ["arms", "hands", "legs"])) then { // Spieler bewusstlos machen und weiteren Schaden ausblenden @@ -160,10 +154,8 @@ DFUNC(HandleDamage) = _data params ["_newPlayer", "_oldPlayer"]; // Respawn will change the player Object. We need to reassign the Eventhandler. - //_oldPlayer removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; _oldPlayer removeEventHandler ["HandleDamage",player getVariable ["opt_revive_ehHandleDamage",-1]]; player setVariable ["opt_revive_ehHandleDamage", player addEventHandler ["HandleDamage",OPT_REVIVE_fnc_HandleDamage]]; - //GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = _newPlayer addEventHandler ["HandleDamage", FUNC(HandleDamage)]; _newPlayer setVariable ["OPT_isUnconscious", 0, true]; _newPlayer setVariable ["OPT_isStabilized", 0, true]; @@ -171,7 +163,6 @@ DFUNC(HandleDamage) = _newPlayer allowDamage true; _newPlayer setVariable ["tf_unable_to_use_radio", false]; _newPlayer setUnconscious false; - _newPlayer setVariable ["OPT_damage_var",0]; _newPlayer playAction "PlayerStand"; GVAR(OPT_isDragging) = false; @@ -222,7 +213,6 @@ DFUNC(HandleDamage) = }] call CFUNC(addEventhandler); // Initial assignment, Respawn Handler does not trigger on first-spawn. -//GVAR(PLAYER_HANDLE_DAMAGE_EH_ID) = player addEventHandler ["HandleDamage", FUNC(HandleDamage)]; player setVariable ["opt_revive_ehHandleDamage", player addEventHandler ["HandleDamage",OPT_REVIVE_fnc_HandleDamage]]; // Variablen-Reset diff --git a/addons/main/REVIVE/fn_dialog.sqf b/addons/main/REVIVE/fn_dialog.sqf index 00453e42..ebabb9dd 100644 --- a/addons/main/REVIVE/fn_dialog.sqf +++ b/addons/main/REVIVE/fn_dialog.sqf @@ -71,9 +71,6 @@ _Respawn_button ctrlAddEventHandler ["ButtonClick", EGVAR(LOGGING,LAST_POSITION) = nil; EGVAR(LOGGING,LAST_DISTANCE) = 0; - // Eventhandler löschen - //player removeEventHandler ["HandleDamage", GVAR(PLAYER_HANDLE_DAMAGE_EH_ID)]; - GVAR(RespawnPressed) = true; ["Health", "Respawn", [getPlayerUID player, name player, side player, "RespawnClick"]] remoteExecCall [QEFUNC(LOGGING,writelog), 2, false]; player allowDamage true;