Epoch/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf
vbawol 87c23b106f Release 0.3.8 (#502)
* first build for 0.3.8

* 0.3.8.0190

* 0.3.8.0202

* 0.3.8.0213

* 0.3.7.0214

* 0.3.8.0222

* 0.3.8.0246

* 0.3.8.0247

fixed typo

* 0.3.8.0249

more fixes for server compiler

* 0.3.8.0256

* add build number and simple batch file for packing

* match build number with internal

* add build numbers to server pbo's and mission files

also reworked build script for more options

* 0.3.8.0261

* 0.3.8.0261

* 0.3.8.0283

* 0.3.8.0284

* changelog

* 0.3.8.0307

* 0.3.8.0311

* remove old BEC plugin

* update redis-server.exe to latest build and full config

* 0.3.8.0314

* 0.3.8.0315

* inverse logic

This should correctly prevent spawning these units nearby jammer or
protection zones

* use pushbackUnique here

* optimized loot function

by using selectRandom instead of slower sqf logic

* 0.3.8.0316

* make use of new getDir functionality instead of BIS fnc

* add lower disconnect value to server.cfg

* use new getpos functionality

* 0.3.8.0317

* 0.3.8.0319

* 0.3.8.0327

* 0.3.8.0338

changelog update tba

* changelog

* 0.3.8.0341

* BE update

* 0.3.8.0353

* changelog

* removed duplicates

* 0.3.8.0355

fixed error in getIDC

* 0.3.8.0356

revert to BIS_fnc_param as params threw errors

* 0.3.8.0357

fixes for #496 #497

* 0.3.8.0359

fixed #497
fixed #496

* 0.3.8.0365

* 0.3.8.0371

* 0.3.8.0373

* 0.3.8.0379

* 0.3.8.0381

* 0.3.8.0386

* 0.3.8.0393

* 0.3.8.0395

* 0.3.8.0396

* 0.3.8.0397

* 0.3.8.0406

* 0.3.8.0409

* 0.3.8.0410

loot balance
suppress error in spawnloot
make near object check based on building size

* 0.3.8.0412

* 0.3.8.0414

removed classes with scope 0
test remove loot trash on gear for #498
fixed #501

* 0.3.8.0415

* same
2016-04-08 15:21:46 -05:00

124 lines
3.6 KiB
Plaintext

/*
Author: Aaron Clark - EpochMod.com
Contributors:
Description:
Weapon fired handler
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf
Example:
player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}];
Parameter(s):
_this select 0: unit: Object - Object the event handler is assigned to
_this select 1: weapon: String - Fired weapon
_this select 2: muzzle: String - Muzzle that was used
_this select 3: mode: String - Current mode of the fired weapon
_this select 4: ammo: String - Ammo used
_this select 5: magazine: String - magazine name which was used
_this select 6: projectile: Object - Object of the projectile that was shot (Arma 2: OA and onwards)
Returns:
NOTHING
*/
private ["_heal","_highestDMG","_currentHIT","_currentDMG","_newDMG","_attachments","_cursorTarget","_repaired","_gesture","_droneChance"];
params ["_unit","_weapon","_muzzle","_mode","_ammo","_magazine","_projectile"];
switch true do {
case (_ammo isKindOf "B_EnergyPack"): {
if (!isNull cursorTarget) then {
_cursorTarget = cursorTarget;
_repaired = false;
if ((player distance _cursorTarget) <= 6) then {
_attachments = handgunItems player;
_heal = false;
if (_cursorTarget isKindOf "Man") then {
if ("Heal_EPOCH" in _attachments) then {
_heal = true;
};
if ("Defib_EPOCH" in _attachments) then {
if (!alive _cursorTarget) then {
[_cursorTarget,player,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2];
};
};
} else {
if ("Repair_EPOCH" in _attachments) then {
_heal = true;
};
};
if (_heal) then {
_highestDMG = 0;
_currentHIT = -1;
_currentDMG = 0;
{
_currentDMG = _x;
if (_currentDMG > _highestDMG) then{
_highestDMG = _currentDMG;
_currentHIT = _forEachIndex;
};
}forEach((getAllHitPointsDamage _cursorTarget) param[2,[]]);
if (_highestDMG > 0) then {
_newDMG = ((_highestDMG - 0.5) max 0);
if (local _cursorTarget) then {
[_cursorTarget,[_currentHIT,_newDMG]] call EPOCH_client_repairVehicle;
} else {
[_cursorTarget,[_currentHIT,_newDMG],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
} else {
if ((damage _cursorTarget) > 0) then {
[_cursorTarget,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
};
};
};
};
case (_ammo isKindOf "B_Hatchet"): {
_gesture = selectRandom ["GestureSwing0", "GestureSwing1", "GestureSwing2"];
player playActionNow _gesture;
call EPOCH_chopWood;
};
case (_ammo isKindOf "B_Swing" || _ammo isKindOf "B_Stick") : {
player playActionNow "SledgeSwing";
call EPOCH_mineRocks;
if (_weapon isEqualTo "MeleeSword") then {
call EPOCH_chopWood;
};
if (_weapon isEqualTo "MeleeRod") then {
call EPOCH_fish;
};
};
case (_ammo isKindOf "ChainSaw_Bullet"): {
call EPOCH_chopWood;
};
default {
_droneChance = 2;
if !(EPOCH_nearestLocations isEqualTo[]) then{
_droneChance = _droneChance * 2;
};
// reduce chance to spawn by 50% if weapon has silencer
if (((player weaponAccessories _muzzle) select 0) != "") then{
_droneChance = _droneChance / 2;
};
// 2% chance (+ 4% chance if in city) to spawn drone if shot fired (1% - 2% Half if using silencer)
if (random EPOCH_droneRndChance < _droneChance) then{
"I_UAV_01_F" call EPOCH_unitSpawnIncrease;
};
};
};