diff --git a/@enigma_exile/addons/enigma_exile_custom.pbo b/@enigma_exile/addons/enigma_exile_custom.pbo index 9109109..b4f1d49 100644 Binary files a/@enigma_exile/addons/enigma_exile_custom.pbo and b/@enigma_exile/addons/enigma_exile_custom.pbo differ diff --git a/@enigma_exile/addons/enigma_exile_custom/PboPrefix.txt b/@enigma_exile/addons/enigma_exile_custom/PboPrefix.txt new file mode 100644 index 0000000..9f72272 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/PboPrefix.txt @@ -0,0 +1 @@ +enigma_exile_custom \ No newline at end of file diff --git a/@enigma_exile/addons/enigma_exile_custom/compile/Enigma/Exile_RevivePlayer.sqf b/@enigma_exile/addons/enigma_exile_custom/compile/Enigma/Exile_RevivePlayer.sqf new file mode 100644 index 0000000..2c3b9ff --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/compile/Enigma/Exile_RevivePlayer.sqf @@ -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 + + }; + + }; +}; diff --git a/@enigma_exile/addons/enigma_exile_custom/compile/Enigma/Exile_UpdateStats.sqf b/@enigma_exile/addons/enigma_exile_custom/compile/Enigma/Exile_UpdateStats.sqf new file mode 100644 index 0000000..584ac56 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/compile/Enigma/Exile_UpdateStats.sqf @@ -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; + }; diff --git a/@enigma_exile/addons/enigma_exile_custom/config.cpp b/@enigma_exile/addons/enigma_exile_custom/config.cpp new file mode 100644 index 0000000..aaf9747 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/config.cpp @@ -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; + }; + }; + }; +}; + diff --git a/@enigma_exile/addons/enigma_exile_custom/init/fn_init.sqf b/@enigma_exile/addons/enigma_exile_custom/init/fn_init.sqf new file mode 100644 index 0000000..dea3f20 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/init/fn_init.sqf @@ -0,0 +1,5 @@ + +diag_log format['Enigma Exile: fn_init %1',time]; + +call compile preprocessFileLineNumbers "\enigma_exile_custom\init\server_compiles.sqf"; +true diff --git a/@enigma_exile/addons/enigma_exile_custom/init/fn_postinit.sqf b/@enigma_exile/addons/enigma_exile_custom/init/fn_postinit.sqf new file mode 100644 index 0000000..dcbe161 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/init/fn_postinit.sqf @@ -0,0 +1,5 @@ +diag_log format['Enigma Exile: postinit %1',time]; + +[]spawn{call compile preprocessFileLineNumbers "\enigma_exile_custom\init\server_init.sqf"; +}; +true diff --git a/@enigma_exile/addons/enigma_exile_custom/init/server_compiles.sqf b/@enigma_exile/addons/enigma_exile_custom/init/server_compiles.sqf new file mode 100644 index 0000000..f7f42e2 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/init/server_compiles.sqf @@ -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"; diff --git a/@enigma_exile/addons/enigma_exile_custom/init/server_init.sqf b/@enigma_exile/addons/enigma_exile_custom/init/server_init.sqf new file mode 100644 index 0000000..941eaf8 --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/init/server_init.sqf @@ -0,0 +1,4 @@ +diag_log format['Enigma Exile: server_init %1',time]; + +call ENIGMA_server_publicEH; +diag_log "ENIGMA: Init PublicEH"; \ No newline at end of file diff --git a/@enigma_exile/addons/enigma_exile_custom/init/server_publicEH.sqf b/@enigma_exile/addons/enigma_exile_custom/init/server_publicEH.sqf new file mode 100644 index 0000000..a2f6aba --- /dev/null +++ b/@enigma_exile/addons/enigma_exile_custom/init/server_publicEH.sqf @@ -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}; diff --git a/Exile.Altis/Custom/EnigmaRevive/init.sqf b/Exile.Altis/Custom/EnigmaRevive/init.sqf index 5ffafa1..00d8f66 100644 --- a/Exile.Altis/Custom/EnigmaRevive/init.sqf +++ b/Exile.Altis/Custom/EnigmaRevive/init.sqf @@ -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... diff --git a/README.md b/README.md index 5e99c7d..642fb32 100644 --- a/README.md +++ b/README.md @@ -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. ------------------------------------------------------------------------------------------------------------------------------------------------------ diff --git a/Readme.txt b/Readme.txt deleted file mode 100644 index f62b00e..0000000 --- a/Readme.txt +++ /dev/null @@ -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! -