added support for GR8 Humanity Script, hopefully fixed any God mode
issues against AI and measure to prevent dead body showing in group
under certain circumstances
This commit is contained in:
happydayz
2016-02-02 19:59:26 +11:00
parent 272a6a7bd8
commit 08e827cfec
13 changed files with 457 additions and 212 deletions

View File

@ -0,0 +1 @@
enigma_exile_custom

View File

@ -0,0 +1,366 @@
/*
Exile_RevivePlayer.sqf
[_ZEN_] Happydayz
© 2016 Enigma Team
*/
private["_handguntype","_handgunammo","_player","_playerID","_playerPos","_reviveused","_reviverownerID","_bambiPlayerID","_playerPos","_data","_extDB2Message","_revivername","_msg","_reviveused","_ind","_playerID","_sessionID","_requestingPlayer", "_requestingPlayerUID", "_items", "_dir", "_location", "_type", "_weapon", "_attachments", "_currWeap", "_itemSlot", "_itemqtys", "_goggles", "_headgear", "_vest", "_backpack", "_uniform", "_weapons", "_magazinesAmmo", "_itemsplayer", "_weaponsplayer", "_group", "_primaryWeapon", "_secondaryWeapon", "_attachment", "_equipped", "_wMags", "_requestingPlayerGroup", "_droppedWeapons", "_bambiPlayer", "_ownerID", "_reviver"];
_requestingPlayer = _this select 0;
_ownerID = owner _requestingPlayer;
_reviver = _this select 1;
_reviverownerID = owner _reviver;
_sessionID = _requestingPlayer getVariable ["ExileSessionID",""];
_reviversessionID = _reviver getVariable ["ExileSessionID",""];
_name = name _requestingPlayer;
_revivername = name _reviver;
_clanID = (_accountData select 4);
_clanName = (_accountData select 5);
_playerID = _requestingPlayer getVariable["ExileDatabaseID", -1];
if (isNull _requestingPlayer) exitWith{ diag_log "EnigmaRevive - No requesting player"};
if (_requestingPlayer distance _reviver > 5) exitWith{ diag_log "EnigmaRevive - Too far from target"};
if (!local _requestingPlayer) then {
_requestingPlayerUID = getPlayerUID _requestingPlayer;
if (!isNil "_requestingPlayerUID" && !alive _requestingPlayer) then {
_accountData = format["getAccountStats:%1", _requestingPlayerUID] call ExileServer_system_database_query_selectSingle;
if (_requestingPlayer == _reviver) exitWith {
Diag_log format ["Enigma Revive - Attempted hack revive by %1",_requestingPlayer];
};
_ind = ((count ReviveChk_cache) - 1);
{
if (_playerID in _x) then {
_reviveused = _x select 1;
_ind = _forEachIndex;
};
} forEach ReviveChk_cache;
if (isNil "_reviveused") then {_reviveused = 0;}; //if not found in array then they havent used a revive this life so set to 0!
// if ((_requestingPlayer getVariable["REVIVE", false])||(_reviveused > MaxRevivesAllowed)) exitWith{ //somewhere on first revive im setting variable to false... WHERE!?!?!?!?!
if (_reviveused == MaxRevivesAllowed) exitWith{
EnigmaReviveFail = [_requestingPlayer, _revivername];
_ownerID publicVariableClient "EnigmaReviveFail";
_msgarray = [];
_msgarray = [
"You put the probes in the wrong place!",
"You didnt let the defib charge for long enough!",
"You forgot to lubricate the probes! You smell sizzling flesh! Oops!"
];
_randommsg = _msgarray call BIS_fnc_selectRandom;
_msg = format ["%1 You killed %2!",_randommsg,_name];
EnigmaReviveMSG = [_msg]; //make the _reviver kill the player! hehehehe
_reviverownerID publicVariableClient "EnigmaReviveMSG";
};
if (_requestingPlayer getVariable["REVIVE", true]) then {
_location = getPosATL _requestingPlayer;
_dir = getDir _requestingPlayer;
_requestingPlayerGroup = _requestingPlayer getVariable["GROUP", ""];
_goggles = goggles _requestingPlayer;
_headgear = headgear _requestingPlayer;
_vest = vest _requestingPlayer;
_backpack = backpack _requestingPlayer;
_uniform = uniform _requestingPlayer;
_items = assignedItems _requestingPlayer;
_magazinesAmmo = magazinesAmmo _requestingPlayer;
_handgunammo = _requestingPlayer ammo handgunWeapon _requestingPlayer; //counts rounds in magazine inside handgun
_handguntype = handgunWeapon _requestingPlayer;
_primaryWeapon = "";
_secondaryWeapon = "";
_itemsplayer = [getItemCargo(uniformContainer _requestingPlayer), getItemCargo(vestContainer _requestingPlayer), getItemCargo(backpackContainer _requestingPlayer)];
_weaponsplayer = [getWeaponCargo(uniformContainer _requestingPlayer), getWeaponCargo(vestContainer _requestingPlayer), getWeaponCargo(backpackContainer _requestingPlayer)];
_weapons = [currentWeapon _requestingPlayer, (weaponsItems _requestingPlayer), [_primaryWeapon, _secondaryWeapon, handgunWeapon _requestingPlayer]];
hideObjectGlobal _requestingPlayer;
_group = grpNull;
_group = createGroup independent;
_bambiPlayer = _group createUnit["Exile_Unit_Player", _location, [], 0, "CAN_COLLIDE"];
_bambiPlayer allowDammage false;
_bambiPlayer disableAI "FSM";
_bambiPlayer disableAI "MOVE";
_bambiPlayer disableAI "AUTOTARGET";
_bambiPlayer disableAI "TARGET";
_bambiPlayer disableAI "CHECKVISIBLE";
if !((typeName _clanID) isEqualTo "SCALAR") then
{_clanID = -1;
_clanName = "";};
_bambiPlayer setFatigue FatiguewhenRevived;
_bambiPlayer setDamage DamageWhenRevived;
_bambiPlayer setDir _dir;
_bambiPlayer setPosATL _location;
if (_uniform != "") then {_bambiPlayer addUniform _uniform;};
if (_backpack != "") then {_bambiPlayer addBackpack _backpack;};
if (_goggles != "") then {_bambiPlayer addGoggles _goggles;};
if (_headgear != "") then {_bambiPlayer addHeadgear _headgear;};
if (_vest != "") then {_bambiPlayer addVest _vest;};
if (count _weapons >= 2) then {
_equipped = _weapons select 2;
{
_weapon = _x select 0;
_type = getNumber(configfile >> "cfgweapons" >> _weapon >> "type");
_attachments = [];
for "_a" from 1 to 3 do {
_attachment = _x select _a;
if (_attachment != "") then {
_attachments pushBack _attachment;
};
};
_wMags = (count _x) == 5;
if (_weapon in _equipped) then {
_equipped = _equipped - [_weapon];
if (_wMags) then { _bambiPlayer addMagazine(_x select 4);};
if (_weapon != "") then { _bambiPlayer addWeapon _weapon;};
switch _type do {
case 1: { removeAllPrimaryWeaponItems _bambiPlayer; { _bambiPlayer addPrimaryWeaponItem _x }forEach _attachments;};
case 2: { removeAllHandgunItems _bambiPlayer; { _bambiPlayer addHandgunItem _x }forEach _attachments;};
case 4: { { _bambiPlayer addSecondaryWeaponItem _x }forEach _attachments;};};
} else {{_bambiPlayer addItem _x;}forEach _attachments;
if (_wMags) then {_bambiPlayer addMagazine(_x select 4);};};} forEach (_weapons select 1);
_currWeap = (_weapons select 0);
};
{if (_x in ["Binocular","Rangefinder","Laserdesignator","Laserdesignator_02","Laserdesignator_03"]) then {_bambiPlayer addWeapon _x;} else {_bambiPlayer linkItem _x;};}forEach _items;
{_itemSlot = _forEachIndex;
_itemqtys = _x select 1;
{for "_i" from 1 to (_itemqtys select _forEachIndex) do {
switch _itemSlot do {
case 0: { _bambiPlayer addItemToUniform _x };
case 1: { _bambiPlayer addItemToVest _x };
case 2: { _bambiPlayer addItemToBackpack _x };
};
};
}forEach (_x select 0);
}forEach _itemsplayer;
{_itemSlot = _forEachIndex;
_itemqtys = _x select 1;
{for "_i" from 1 to (_itemqtys select _forEachIndex) do {
switch _itemSlot do {
case 0: { _bambiPlayer addItemToUniform _x };
case 1: { _bambiPlayer addItemToVest _x };
case 2: { _bambiPlayer addItemToBackpack _x };
};
};
}forEach (_x select 0);
}forEach _weaponsplayer;
{_bambiPlayer addMagazine _x;}forEach _magazinesAmmo;
_bambiPlayer addMagazine [_handguntype, _handgunammo]; //fix handgun losing its ammo! puts mag back into inventory ---Not working... something removes the mag after 10 seconds or so... guessing exile load up!
_bambiPlayer setName _name;
if (GR8HumanityInstalled) then {
_bambiPlayer setVariable ["ExileMoney", (_accountData select 0)];
_bambiPlayer setVariable ["ExileScore", (_accountData select 1)];
_bambiPlayer setVariable ["ExileHumanity", (_accountData select 2)];
_bambiPlayer setVariable ["ExileKills", (_accountData select 3)];
_bambiPlayer setVariable ["ExileDeaths", (_accountData select 4)];
} else {
_bambiPlayer setVariable ["ExileMoney", (_accountData select 0)];
_bambiPlayer setVariable ["ExileScore", (_accountData select 1)];
_bambiPlayer setVariable ["ExileKills", (_accountData select 2)];
_bambiPlayer setVariable ["ExileDeaths", (_accountData select 3)];
};
_bambiPlayer setVariable ["ExileClanID", _clanID];
_bambiPlayer setVariable ["ExileClanName", _clanName];
_bambiPlayer setVariable ["ExileHunger", 50];//set to 50% as shouldnt be expect to be full fit and healthy after a defib!
_bambiPlayer setVariable ["ExileThirst", 50];//set to 50% as shouldnt be expect to be full fit and healthy after a defib!
_bambiPlayer setVariable ["ExileAlcohol", 0.1]; //testing making player a little "drunk" after the defib ;)
_bambiPlayer setVariable ["ExileName", _name];
_bambiPlayer setVariable ["ExileOwnerUID", getPlayerUID _requestingPlayer];
_bambiPlayer setVariable ["ExileIsBambi", false];
_bambiPlayer setVariable ["ExileXM8IsOnline", false, true];
diag_log format ["Bambiplayer = %1 --- _sessionID = %2",_bambiPlayer,_sessionID];
private["_player","_playerID","_playerPos","_data","_extDB2Message"];
_player = _bambiPlayer;
_playerID = format["createPlayer:%1:%2", _player getVariable ["ExileOwnerUID", "SomethingWentWrong"], _player getVariable ["ExileName", "SomethingWentWrong"]] call ExileServer_system_database_query_insertSingle;
_player setVariable ["ExileDatabaseID", _playerID];
_playerPos = getPosATL _player;
_data =
[
_player getVariable ["ExileName",""],
damage _player,
_player getVariable ["ExileHunger", 100],
_player getVariable ["ExileThirst", 100],
_player getVariable ["ExileAlcohol", 0],
getOxygenRemaining _player,
getBleedingRemaining _player,
_player call ExileClient_util_player_getHitPointMap,
getDir _player,
_playerPos select 0,
_playerPos select 1,
_playerPos select 2,
assignedItems _player,
backpack _player,
(getItemCargo backpackContainer _player) call ExileClient_util_cargo_getMap,
(backpackContainer _player) call ExileClient_util_cargo_getMagazineMap,
(getWeaponCargo backpackContainer _player) call ExileClient_util_cargo_getMap,
currentWeapon _player,
goggles _player,
handgunItems _player,
handgunWeapon _player,
headgear _player,
binocular _player,
_player call ExileClient_util_inventory_getLoadedMagazinesMap,
primaryWeapon _player,
primaryWeaponItems _player,
secondaryWeapon _player,
secondaryWeaponItems _player,
uniform _player,
(getItemCargo uniformContainer _player) call ExileClient_util_cargo_getMap,
(uniformContainer _player) call ExileClient_util_cargo_getMagazineMap,
(getWeaponCargo uniformContainer _player) call ExileClient_util_cargo_getMap,
vest _player,
(getItemCargo vestContainer _player) call ExileClient_util_cargo_getMap,
(vestContainer _player) call ExileClient_util_cargo_getMagazineMap,
(getWeaponCargo vestContainer _player) call ExileClient_util_cargo_getMap,
_playerID
];
_extDB2Message = ["updatePlayer", _data] call ExileServer_util_extDB2_createMessage;
_extDB2Message call ExileServer_system_database_query_fireAndForget;
_player setVariable ["REVIVE", true, true];
_bambiPlayer setVariable ["REVIVE", true, true];
_ind = ((count ReviveChk_cache) - 1);
{
if (_bambiPlayerID in _x) then {
_reviveused = _x select 1;
_ind = _forEachIndex;
};
} forEach ReviveChk_cache;
_reviveused = _reviveused + 1;
ReviveChk_cache set [_ind, [_playerID, _reviveused]]; //add this revive to total number of player revives!
//just in case the array check fails (they are fickle beasts sometimes when servers are under load!)
if (_reviveused > MaxRevivesAllowed) then {
_bambiPlayer setVariable ["REVIVE", false, true];
};
_msg = format ["%1 has been stabilised! You have been rewarded 100 Respect!",_name];
EnigmaReviveMSG = [_msg]; //sends message to reviver!
_reviverownerID publicVariableClient "EnigmaReviveMSG";
if (GR8HumanityInstalled) then {
_newScore = _requestingPlayer getVariable ["ExileHumanity", 0];
_newScore = _newScore;
_requestingPlayer setVariable ["ExileHumanity", _newScore];
format["setAccountHumanity:%1:%2", _newScore, getPlayerUID _requestingPlayer] call ExileServer_system_database_query_fireAndForget;
[
_sessionID,
"loadPlayerResponse",
[
(netId _player),
str (_player getVariable ["ExileMoney", 0]),
str (_player getVariable ["ExileScore", 0]),
str (_player getVariable ["ExileHumanity", 0]),
(_player getVariable ["ExileKills", 0]),
(_player getVariable ["ExileDeaths", 0]),
(_player getVariable ["ExileHunger", 100]),
(_player getVariable ["ExileThirst", 100]),
(_player getVariable ["ExileAlcohol", 0]),
(_player getVariable ["ExileClanName", ""])
]
]
call ExileServer_system_network_send_to;
[_sessionID, _player] call ExileServer_system_session_update;
} else {
_newScore = _requestingPlayer getVariable ["ExileScore", 0];
_newScore = _newScore + 100;
_requestingPlayer setVariable ["ExileScore", _newScore];
format["setAccountScore:%1:%2", _newScore, getPlayerUID _requestingPlayer] call ExileServer_system_database_query_fireAndForget;
[
_sessionID,
"loadPlayerResponse",
[
(netId _player),
str (_player getVariable ["ExileMoney", 0]),
str (_player getVariable ["ExileScore", 0]),
(_player getVariable ["ExileKills", 0]),
(_player getVariable ["ExileDeaths", 0]),
(_player getVariable ["ExileHunger", 100]),
(_player getVariable ["ExileThirst", 100]),
(_player getVariable ["ExileAlcohol", 0]),
(_player getVariable ["ExileClanName", ""])
]
]
call ExileServer_system_network_send_to;
[_sessionID, _player] call ExileServer_system_session_update;
};
_player addMPEventHandler ["MPKilled", {_this call ExileServer_object_player_event_onMpKilled}];
_requestingPlayer setposatl [0,0,0];
_corpseGroup = createGroup independent; //test to prevent dead body still being in players group under certain circumstances
[_requestingPlayer] joinSilent _corpseGroup;
deleteVehicle _requestingPlayer;
EnigmaRevive = [];
_ownerID publicVariableClient "EnigmaRevive";
_player allowDamage true; //test to fix players having god mode against AI after revive
};
};
};

View File

@ -0,0 +1,36 @@
/*
Exile_UpdateStats.sqf
[_ZEN_] Happydayz
© 2015 Enigma Team
*/
Private["_target","_newmoneyvalue","_newscorevalue","_newMoney","_newScore"];
_target = _this select 0;
_newmoneyvalue = _this select 1;
_newscorevalue = _this select 2;
diag_log ["%1 Executing Exile_UpdateStats, Adding %2 Poptabs and %3 Respect",_target,_newmoneyvalue,_newscorevalue];
if (_newmoneyvalue > 0) then {
_target setVariable ['ExileMoney', _newmoneyvalue];
_target setVariable['PLAYER_STATS_VAR',[_newmoneyvalue,_target getVariable ['ExileScore', 0]],true];
ExileClientPlayerMoney = _newmoneyvalue;
(owner _target) publicVariableClient 'ExileClientPlayerMoney';
format['setAccountMoney:%1:%2', _newmoneyvalue, (getPlayerUID _target)] call ExileServer_system_database_query_fireAndForget;
};
if (_newscorevalue > 0) then
{
_target setVariable ['ExileScore', _newscorevalue];
_target setVariable['PLAYER_STATS_VAR',[_target getVariable ['ExileMoney', 0],_newscorevalue],true];
ExileClientPlayerScore = _newscorevalue;
(owner _target) publicVariableClient 'ExileClientPlayerScore';
format['setAccountScore:%1:%2', _newscorevalue, (getPlayerUID _target)] call ExileServer_system_database_query_fireAndForget;
};

View File

@ -0,0 +1,29 @@
class CfgPatches
{
class enigma_exile_custom {
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
author[]= {"Happydayz_EngimaTeam"};
};
};
class CfgFunctions
{
class EnigmaTeam
{
class main
{
file = "\enigma_exile_custom\init";
class init
{
preInit = 1;
};
class postinit
{
postInit = 1;
};
};
};
};

View File

@ -0,0 +1,5 @@
diag_log format['Enigma Exile: fn_init %1',time];
call compile preprocessFileLineNumbers "\enigma_exile_custom\init\server_compiles.sqf";
true

View File

@ -0,0 +1,5 @@
diag_log format['Enigma Exile: postinit %1',time];
[]spawn{call compile preprocessFileLineNumbers "\enigma_exile_custom\init\server_init.sqf";
};
true

View File

@ -0,0 +1,5 @@
diag_log format['Enigma Exile: Compiles Started - %1',time];
ENIGMA_server_publicEH =compileFinal preprocessFileLineNumbers "\enigma_exile_custom\init\server_publicEH.sqf";
ENIGMA_server_handle_UpdateStats =compileFinal preprocessFileLineNumbers "\enigma_exile_custom\compile\Enigma\Exile_UpdateStats.sqf";
ENIGMA_server_revivePlayer =compileFinal preprocessFileLineNumbers "\enigma_exile_custom\compile\Enigma\Exile_RevivePlayer.sqf";

View File

@ -0,0 +1,4 @@
diag_log format['Enigma Exile: server_init %1',time];
call ENIGMA_server_publicEH;
diag_log "ENIGMA: Init PublicEH";

View File

@ -0,0 +1,4 @@
diag_log format['Enigma Exile: publicEH %1',time];
"ENIGMA_UpdateStats" addPublicVariableEventHandler{(_this select 1)call ENIGMA_server_handle_UpdateStats};
"ENIGMA_revivePlayer" addPublicVariableEventHandler{(_this select 1)call ENIGMA_server_revivePlayer};

View File

@ -8,12 +8,10 @@ Enigma Exile Revive Initialization
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////Custom Settings//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (!hasInterface && isServer) exitWith {
GR8HumanityInstalled = false; //If you are running GR8's Humanity script set this to true!
MaxRevivesAllowed = 1; //Set the max number of revives permitted per life. I recomend you keep it at 1. Just saying...

View File

@ -8,7 +8,7 @@ changelog
14/01/16 -- prevent accessing gear on player being revived (stops duping).
15/01/16 -- hotfix to enable access to corpse inventory after a failed revive.
17/01/16 -- updated animations for revive, place defib on ground as part of revive process.
02/02/16 -- added support for GR8 Humanity Script, hopefully fixed any God mode issues against AI.
------------------------------------------------------------------------------------------------------------------------------------------------------

View File

@ -1,208 +0,0 @@
changelog
13/01/16 -- prevent duping of gear by revived player.
14/01/16 -- prevent accessing gear on player being revived (stops duping).
------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------HOW TO UPGRADE TO ENIGMA EXILE REVIVE V0.65--------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------
- Replace server pbo. Replace Enigma Revive folder in mission file. New Line for cfgcustomcode:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class CfgExileCustomCode {
ExileClient_object_player_death_startBleedingOut = "custom\EnigmaRevive\ExileClient_object_player_death_startBleedingOut.sqf"; //Happys Revive
ExileClient_object_player_event_onInventoryOpened = "custom\EnigmaRevive\ExileClient_object_player_event_onInventoryOpened.sqf"; //Happys Revive AntiDupe ---NEW with v0.65
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------HOW TO INSTALL ENIGMA EXILE REVIVE V0.65---------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------
First add the startup paramaters @Enigma_Exile to your server!
Copy the @Enigma_Exile Folder to your Server Root!
Open up your mission file and add the init.sqf line to your init.sqf file (Must be executed by both server and client!)!
Copy the Entire Custom folder into the root of your mission file!
Now open your mission file --- config.cpp
Locate the lines:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class Identify: ExileAbstractAction
{
title = "Identify Body";
condition = "!(alive ExileClientInteractionObject)";
action = "_this call ExileClient_object_player_identifyBody";
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
Replace that whole section with this:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class Identify: ExileAbstractAction
{
title = "Identify Body";
condition = "!(alive ExileClientInteractionObject)";
action = "_this call ExileClient_object_player_identifyBody";
};
//////////////Added by [_ZEN_]happydayz/////////////////
class Revive: ExileAbstractAction
{
title = "Perform CPR";
condition = "(!(alive ExileClientInteractionObject) && (ExileClientInteractionObject getVariable ['EnigmaRevivePermitted', true]) && (magazines player find 'Exile_Item_Defibrillator' >= 0))";
action = "_this spawn Enigma_RevivePlyr";
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
Next go to:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class CfgExileCustomCode {};
//////////////////////////////////////////////////////////////////////////////////////////////////////
and modify it to read:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class CfgExileCustomCode {
ExileClient_object_player_death_startBleedingOut = "custom\EnigmaRevive\ExileClient_object_player_death_startBleedingOut.sqf"; //Happys Revive
ExileClient_object_player_event_onInventoryOpened = "custom\EnigmaRevive\ExileClient_object_player_event_onInventoryOpened.sqf"; //Happys Revive AntiDupe ---NEW with v0.65
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
Next you will either want to enable the Defibrilator to be purchased at the trader or add it to loot! I did both but just show how to add to trader here.
Go to:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class FirstAid
{
name = "FirstAid";
icon = "a3\ui_f\data\gui\Rsc\RscDisplayArsenal\itemacc_ca.paa";
items[] =
{
"Exile_Item_InstaDoc",
"Exile_Item_Bandage",
"Exile_Item_Vishpirin"
// Not available in 0.9.4!
//"Exile_Item_Defibrillator"
};
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
change it to:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class FirstAid
{
name = "FirstAid";
icon = "a3\ui_f\data\gui\Rsc\RscDisplayArsenal\itemacc_ca.paa";
items[] =
{
"Exile_Item_InstaDoc",
"Exile_Item_Bandage",
"Exile_Item_Vishpirin",
// Used in Enigma Revive!
"Exile_Item_Defibrillator"
};
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
Next:
//////////////////////////////////////////////////////////////////////////////////////////////////////
//class Exile_Item_Defibrillator { quality = 1; price = 7500; };
//////////////////////////////////////////////////////////////////////////////////////////////////////
change to:
//////////////////////////////////////////////////////////////////////////////////////////////////////
class Exile_Item_Defibrillator { quality = 1; price = 7500; };
//////////////////////////////////////////////////////////////////////////////////////////////////////
Players will only get the scroll option to defib the dead player whilst they are bleeding out, and if they are holding a defib! It will show up with the identify body scroll option!
There are a few settings you can modify inside the custom\EnigmaRevive\init.sqf
Note: this includes my add respect/poptabs server function for those who are running it already!