Merge branch 'medical-rewrite' of https://github.com/KoffeinFlummi/ACE3 into medical-rewrite

Conflicts:
	addons/medical/XEH_preInit.sqf
	addons/medical/functions/fnc_handleDamage.sqf
This commit is contained in:
KoffeinFlummi 2015-02-06 13:48:28 +01:00
commit 35386f19d6
8 changed files with 205 additions and 1 deletions

View File

@ -2,10 +2,15 @@
ADDON = false;
PREP(getTypeOfDamage);
PREP(handleAirway);
PREP(handleDamage);
PREP(handleDamage_advanced);
PREP(handleDamage_basic);
PREP(handleDamage_medium);
PREP(handleFractures);
PREP(handleInternalInjuries);
PREP(init);
PREP(selectionNameToNumber);
ADDON = true;

View File

@ -0,0 +1,31 @@
/**
* fn_getTypeOfDamage.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
private ["_typeOfProjectile","_typeOfInjury"];
_typeOfProjectile = _this select 0;
_typeOfInjury = switch (true) do {
case (_typeOfProjectile isKindOf "Backblast"): {"backblast"};
case (_typeOfProjectile iskindof "BulletBase"): {"Bullet"};
case (_typeOfProjectile iskindof "GrenadeCore"): {"Grenade"};
case (_typeOfProjectile iskindof "TimeBombCore"): {"Explosive"};
case (_typeOfProjectile iskindof "MineCore"): {"Explosive"};
case (_typeOfProjectile iskindof "FuelExplosion"): {"Explosive"};
case (_typeOfProjectile iskindof "ShellBase"): {"Shell"};
case (_typeOfProjectile iskindof "RocketBase"): {"Explosive"};
case (_typeOfProjectile iskindof "MissileBase"): {"Explosive"};
case (_typeOfProjectile iskindof "LaserBombCore"): {"Explosive"};
case (_typeOfProjectile iskindof "BombCore"): {"Explosive"};
case (_typeOfProjectile iskindof "Grenade"): {"Grenade"};
case (_typeOfProjectile == "VehicleCrash"): {"VehicleCrash"};
default {"Unknown"};
};
_typeOfInjury

View File

@ -0,0 +1,30 @@
/**
* fn_assignAirwayStatus.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"];
_unit = _this select 0;
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfDamage = _this select 4;
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
// We process only the head for airway.
if (_bodyPartn != 0) exitwith {};
if (_amountOfDamage > 0.4) then {
if (random(1) >= 0.8) then {
if !(_unit getvariable[QGVAR(airwayCollapsed), false]) then {
_unit setvariable [QGVAR(airwayCollapsed), true, true];
};
};
};

View File

@ -17,7 +17,11 @@
#include "script_component.hpp"
<<<<<<< HEAD
private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_hitPoints"];
=======
private ["_damageReturn", "_typeOfDamage"];
>>>>>>> 596d018f45d34ae8f713efcd3c0c3c2e3156af07
_unit = _this select 0;
_selection = _this select 1;
@ -34,6 +38,7 @@ if (typeName _projectile == "OBJECT") then {
_this set [4, _projectile];
};
<<<<<<< HEAD
// If the damage is being weird, we just tell it to fuck off.
_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"];
if !(_selection in (_hitSelections + [""])) exitWith {0};
@ -45,10 +50,15 @@ if (isNil QGVAR(level)) then {
GVAR(level) = 0;
};
=======
_damageReturn = (_this select 2);
_typeOfDamage = [_this select 4] call FUNC(getTypeOfDamage)
>>>>>>> 596d018f45d34ae8f713efcd3c0c3c2e3156af07
if (GVAR(level) >= 0) then {
_damageReturn = (_this + [_damageReturn]) call FUNC(handleDamage_basic);
_damageReturn = (_this + [_damageReturn, _typeOfDamage]) call FUNC(handleDamage_basic);
};
if (GVAR(level) >= 1) then {
<<<<<<< HEAD
_damageReturn = (_this + [_damageReturn]) call FUNC(handleDamage_medium);
};
if (GVAR(level) >= 2) then {
@ -56,4 +66,12 @@ if (GVAR(level) >= 2) then {
};
if (_damageReturn < 0.01) exitWith {0};
=======
_damageReturn = (_this + [_damageReturn, _typeOfDamage]) call FUNC(handleDamage_medium);
if (GVAR(level) >= 2) then {
_damageReturn = (_this + [_damageReturn, _typeOfDamage]) call FUNC(handleDamage_advanced);
};
};
>>>>>>> 596d018f45d34ae8f713efcd3c0c3c2e3156af07
_damageReturn

View File

@ -0,0 +1,19 @@
private ["_unit","_selectionName","_amountOfDamage","_sourceOfDamage","_typeOfProjectile","_typeOfDamage"];
_unit = _this select 0;
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfProjectile = _this select 4;
_returnDamage = _this select 5;
_typeOfDamage = _this select 6; //[_typeOfProjectile] call FUNC(getTypeOfDamage);
if (GVAR(enableAirway)) then {
[_unit,_selectionName,_amountOfDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleAirway);
};
if (GVAR(enableFractures)) then {
[_unit,_selectionName,_amountOfDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleFractures);
};
if (GVAR(enableInternalBleeding)) then {
[_unit,_selectionName,_amountOfDamage,_sourceOfDamage, _typeOfDamage] call FUNC(handleInternalInjuries);
};
_returnDamage;

View File

@ -0,0 +1,67 @@
/**
* fn_assignFractures.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn", "_fractures", "_fractureType"];
_unit = _this select 0;
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfDamage = _this select 4;
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
_fractureType = 1;
if (_amountOfDamage > 0.05) then {
// TODO specify fractures based off typeOfInjury details better.
switch (_typeOfDamage) do {
case "Bullet": {
_fractureType = round(random(2));
};
case "Grenade": {
_fractureType = round(random(2));
if (_fractureType < 1) then {
_fractureType = 1;
};
};
case "Explosive": {
_fractureType = round(random(2));
if (_fractureType < 1) then {
_fractureType = 1;
};
};
case "Shell": {
_fractureType = round(random(2));
if (_fractureType < 1) then {
_fractureType = 1;
};
};
case "Unknown": {
_fractureType = round(random(1));
};
case "VehicleCrash": {
_fractureType = round(random(0));
};
default {
_fractureType = round(random(1));
};
};
private ["_fractures", "_fractureID", "_amountOf"];
_fractures = _unit getvariable[QGVAR(fractures), []];
_fractureID = 1;
_amountOf = count _fractures;
if (_amountOf > 0) then {
_fractureID = (_fractures select (_amountOf - 1) select 0) + 1;
};
_fractures pushback [_fractureID, _fractureType, _bodyPartn, 1 /* percentage treated */];
_unit setvariable [GVAR(fractures), _fractures, true];
};

View File

@ -0,0 +1,21 @@
/**
* fn_assignFractures.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
private ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeOfDamage", "_bodyPartn"];
_unit = _this select 0;
_selectionName = _this select 1;
_amountOfDamage = _this select 2;
_sourceOfDamage = _this select 3;
_typeOfDamage = _this select 4;
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
// TODO implement internal injuries

View File

@ -0,0 +1,13 @@
/**
* fn_getBodyPartNumber.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#include "script_component.hpp"
(["head","body","hand_l","hand_r","leg_l","leg_r"] find (_this select 0));