////////////////////////////////////////////////////////////////////////////////////////////// // Script writen by Krixes // // Infection chance and some comments added by Player2 // // Combat check added by istealth // // // // Version 1.4 // // // // Change Log: // // 1: Added bloodbag use timer // // 2: Added a timer for the amount of time before player can use self bloodbag again // ////////////////////////////////////////////////////////////////////////////////////////////// private ["_bloodAmount","_humanityBool","_infectionChance","_humanityNegBool","_humanityNegAmount","_humanityAmount","_infectedLifeLost","_infectedLifeBool","_lastBloodbag","_bloodbagLastUsedTime","_bloodbagTime","_bloodbagUseTime","_bloodbagUsageTime","_incombat","_timeout","_hasBagItem","_needsBlood"]; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Config Start-----------------------------------------------------------------------------------------------------------------------// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// _bloodAmount = 12000; // Amount of blood to give to player _bloodbagUseTime = 5; // Amount of time it takes in second for the player to use the self bloodbag _bloodbagLastUsedTime = 300; // Amount of time in seconds before player can use self bloodbag again after a succesful use _infectionChance = 10; // Percent chance of player infection on self bloodbag (10 = 10% | 2 = 50% | 1 = 100%) _infectedLifeBool = false; // Whether the player can loose life if infected (True = On | False = off) _infectedLifeLost = 1000; // Amount of life to loose in becomes infected _humanityBool = false; // Whether the player can get humanity from giving self a bloodbag (True = On | False = off) _humanityAmount = 50; // Amount of humanity to give player if _humanityBool is true (250 is default for normal bloodbags) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Config End-------------------------------------------------------------------------------------------------------------------------// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // Everything below need not be modified unless you know what you are doing! // /////////////////////////////////////////////////////////////////////////////// _bloodbagTime = time - lastBloodbag; // Variable used for easy reference in determining the self bloodbag cooldown _bloodbagUsageTime = time; _hasBagItem = "ItemBloodbag" in magazines player; _needsBlood = if (r_player_blood < 12000) then { true } else { false }; if (!_hasBagItem) exitWith { //If player doesn't have bloodbag then they can't self blood cutText [format["You need a bloodbag to do this."], "PLAIN DOWN"]; //display text to let player know they need a blood bag }; if (!_needsBlood) exitWith { //If they don't need blood then they can't self blood cutText [format["Are you crazy? You already have full blood."], "PLAIN DOWN"]; //display text to let player know they have full blood }; _timeout = player getVariable["combattimeout", 0]; _inCombat = if (_timeout >= diag_tickTime) then { true } else { false }; if(_bloodbagTime < _bloodbagLastUsedTime) exitWith { // If cooldown is not done then exit script cutText [format["You may not use Self Bloodbag this soon please wait %1!",(_bloodbagTime - _bloodbagLastUsedTime)], "PLAIN DOWN"]; //display text at bottom center of screen when players cooldown is not done }; if (_inCombat) then { // Check if in combat cutText [format["You are in Combat and cannot give yourself a Bloodbag"], "PLAIN DOWN"]; //display text at bottom center of screen when in combat } else { player removeAction s_player_selfBloodbag; //remove the action from users scroll menu player playActionNow "Medic"; //play bloodbag animation //////////////////////////////////////////////// // Fancy cancel if interrupted addition start // //////////////////////////////////////////////// r_interrupt = false; // public interuppt variable _animState = animationState player; // get the animation state of the player r_doLoop = true; // while true sets whether to continue self bloodbagging _started = false; // this starts as false as a check _finished = false; // this starts as false and when true later sets players blood while {r_doLoop} do { _animState = animationState player; // keep checking to make sure player is in correct animation _isMedic = ["medic",_animState] call fnc_inString; // checking to make sure the animstate is the medic animation still if (_isMedic) then { _started = true; // this is a check to make sure everything is still ok }; if(!_isMedic && !r_interrupt && (time - _bloodbagUsageTime) < _bloodbagUseTime) then { player playActionNow "Medic"; //play bloodbag animation _isMedic = true; }; if (_started && !_isMedic && (time - _bloodbagUsageTime) > _bloodbagUseTime) then { r_doLoop = false; // turns off the loop _finished = true; // set finished to true to finish the self bloodbag and give player health/humanity lastBloodbag = time; // the last self bloodbag time }; if (r_interrupt) then { r_doLoop = false; // if interuppted turns loop off early so _finished is never true }; sleep 0.1; }; r_doLoop = false; // make sure loop is off on successful self bloodbag /////////////////////////////////////////////// // Fancy cancel if interrupted addition end // ////////////////////////////////////////////// if (_finished) then { player removeMagazine "ItemBloodbag"; //remove the used bloodbag from inventory r_player_blood = r_player_blood + _bloodAmount; //set players LOCAL blood to a certain ammount if(r_player_blood > 12000) then { r_player_blood = 12000; // If players blood is greater then max amount allowed set it to max allowed (this check keeps an error at bay) }; // check if infected if (random(_infectionChance) < 1) then { r_player_infected = true; //set players client to show infection player setVariable["USEC_infected",true,true]; //tell the server the player is infected cutText [format["You have used a bloodbag on yourself but the bloodbag was infected!"], "PLAIN DOWN"]; //display text at bottom center of screen if infected // check for if loosing life on infection is turned on if(_infectedLifeBool) then { r_player_blood = r_player_blood - _infectedLifeLost; //set players LOCAL blood to a certain ammount player setVariable["USEC_BloodQty",r_player_blood,true]; //save this blood ammount to the database } else { // if loosing life is turned off r_player_lowblood = false; //set lowblood setting to false 10 fadeSound 1; //slowly fade their volume back to maximum "dynamicBlur" ppEffectAdjust [0]; "dynamicBlur" ppEffectCommit 5; //disable post processing blur effect "colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, 1], [1, 1, 1, 1]];"colorCorrections" ppEffectCommit 5; //give them their colour back r_player_lowblood = false; //just double checking their blood isnt low player setVariable["USEC_BloodQty",r_player_blood,true]; //save this blood ammount to the database }; } else { // if not infected r_player_lowblood = false; //set lowblood setting to false 10 fadeSound 1; //slowly fade their volume back to maximum "dynamicBlur" ppEffectAdjust [0]; "dynamicBlur" ppEffectCommit 5; //disable post processing blur effect "colorCorrections" ppEffectAdjust [1, 1, 0, [1, 1, 1, 0.0], [1, 1, 1, 1], [1, 1, 1, 1]];"colorCorrections" ppEffectCommit 5; //give them their colour back r_player_lowblood = false; //just double checking their blood isnt low player setVariable["USEC_BloodQty",r_player_blood,true]; //save this blood ammount to the database cutText [format["You have used a bloodbag on yourself!"], "PLAIN DOWN"]; //display text at bottom center of screen on succesful self bloodbag }; // check if giving player humanity is on if(_humanityBool) then { [player,_humanityAmount] call player_humanityChange; // Set players humanity based on amount listed in config area }; } else { // this is for handling if interrupted r_interrupt = false; player switchMove ""; player playActionNow "stop"; cutText [format["You have interrupted giving yourself a bloodbag!"], "PLAIN DOWN"]; //display text at bottom center of screen on interrupt }; };