Merge pull request #518 from acemod/basic-medical-tweaks

Basic medical tweaks
This commit is contained in:
Felix Wiegand 2015-04-14 23:49:00 +02:00
commit 5d8dd701d2
12 changed files with 187 additions and 118 deletions

View File

@ -7,7 +7,7 @@ class ACE_Head {
icon = PATHTOF(UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitHead";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(treatment));
@ -78,7 +78,7 @@ class ACE_Torso {
icon = PATHTOF(UI\icons\medical_cross.paa);
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitBody";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(treatment));
@ -178,7 +178,7 @@ class ACE_ArmLeft {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(treatment));
@ -334,7 +334,7 @@ class ACE_ArmRight {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(treatment));
@ -487,7 +487,7 @@ class ACE_LegLeft {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(treatment));
@ -628,7 +628,7 @@ class ACE_LegRight {
distance = MEDICAL_ACTION_DISTANCE;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreatCached));
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(treatment));

View File

@ -14,7 +14,7 @@ class Medical {
runOnHover = 1;
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitHead";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'head', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -84,7 +84,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitBody";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'body', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -149,7 +149,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_l', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -249,7 +249,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightArm";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'hand_r', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -345,7 +345,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitLeftLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_l', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -430,7 +430,7 @@ class Medical {
icon = PATHTOF(UI\icons\medical_cross.paa);
class Bandage {
displayName = "$STR_ACE_Medical_Bandage_HitRightLeg";
displayName = "$STR_ACE_Medical_Bandage";
distance = 2.0;
condition = QUOTE([ARR_4(_player, _target, 'leg_r', 'Bandage')] call DFUNC(canTreatCached));
exceptions[] = {"isNotInside"};
@ -506,4 +506,4 @@ class Medical {
statement = QUOTE([ARR_4(_player, _target, 'leg_r', 'RemoveTourniquet')] call DFUNC(treatment));
};
};
};
};

View File

@ -55,15 +55,6 @@ class ACE_Medical_Actions {
animationCaller = "AinvPknlMstpSnonWnonDnon_medic1";
litter[] = {};
};
class Tourniquet: Bandage {
displayName = "$STR_ACE_Medical_Apply_Tourniquet";
displayNameProgress = "$STR_ACE_Medical_Applying_Tourniquet";
items[] = {"ACE_tourniquet"};
treatmentTime = 6;
callbackSuccess = QUOTE(DFUNC(treatmentTourniquet));
condition = QUOTE(!([ARR_2(_this select 1, _this select 2)] call FUNC(hasTourniquetAppliedTo)));
litter[] = {};
};
class BodyBag: Bandage {
displayName = "$STR_ACE_MEDICAL_PlaceInBodyBag";
displayNameProgress = "$STR_ACE_MEDICAL_PlacingInBodyBag";
@ -80,6 +71,27 @@ class ACE_Medical_Actions {
itemConsumed = 1;
litter[] = {};
};
class CheckPulse: Bandage {
displayName = "";
displayNameProgress = "";
treatmentLocations[] = {"All"};
requiredMedic = 0;
treatmentTime = 2;
items[] = {};
callbackSuccess = QUOTE(DFUNC(actionCheckPulse));
callbackFailure = "";
callbackProgress = "";
animationPatient = "";
animationCaller = ""; // TODO
itemConsumed = 0;
litter[] = {};
};
class CheckBloodPressure: CheckPulse {
callbackSuccess = QUOTE(DFUNC(actionCheckBloodPressure));
};
class CheckResponse: CheckPulse {
callbackSuccess = QUOTE(DFUNC(actionCheckResponse));
};
};
class Advanced {

View File

@ -117,4 +117,11 @@ class ACE_Settings {
typeName = "BOOL";
value = 1;
};
class GVAR(painEffectType) {
displayName = "$STR_ACE_Medical_painEffectType";
typeName = "SCALAR";
value = 0;
values[] = {"$STR_ACE_Medical_painEffect_Flash", "$STR_ACE_Medical_painEffect_Chroma"};
isClientSettable = 1;
};
};

View File

@ -47,11 +47,3 @@ class Extended_Local_EventHandlers {
};
};
};
class Extended_Take_EventHandlers {
class CAManBase {
class ADDON {
take = QUOTE(call FUNC(itemCheck));
};
};
};

View File

@ -645,7 +645,7 @@ class CfgVehicles {
EGVAR(dragging,dragPosition[]) = {0,1.2,0};
EGVAR(dragging,dragDirection) = 0;
class ACE_Actions {
class ACE_MainActions {
class ACE_MainActions {
displayName = "$STR_ACE_Interaction_MainAction";
distance = 5;
condition = QUOTE(true);
@ -696,10 +696,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BANDAGE_BASIC_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_fieldDressing
{
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";
count = 1;
};
@ -711,10 +709,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_PACKING_BANDAGE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_packingBandage
{
class TransportItems {
class ACE_packingBandage {
name = "ACE_packingBandage";
count = 1;
};
@ -726,10 +722,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BANDAGE_ELASTIC_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_elasticBandage
{
class TransportItems {
class ACE_elasticBandage {
name = "ACE_elasticBandage";
count = 1;
};
@ -741,10 +735,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_TOURNIQUET_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_tourniquet
{
class TransportItems {
class ACE_tourniquet {
name = "ACE_tourniquet";
count = 1;
};
@ -756,10 +748,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_MORPHINE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_morphine
{
class TransportItems {
class ACE_morphine {
name = "ACE_morphine";
count = 1;
};
@ -771,10 +761,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_ATROPINE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_atropine
{
class TransportItems {
class ACE_atropine {
name = "ACE_atropine";
count = 1;
};
@ -786,10 +774,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_EPINEPHRINE_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_epinephrine
{
class TransportItems {
class ACE_epinephrine {
name = "ACE_epinephrine";
count = 1;
};
@ -801,10 +787,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_PLASMA_IV;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_plasmaIV
{
class TransportItems {
class ACE_plasmaIV {
name = "ACE_plasmaIV";
count = 1;
};
@ -817,10 +801,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BLOOD_IV;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_bloodIV
{
class TransportItems {
class ACE_bloodIV {
name = "ACE_bloodIV";
count = 1;
};
@ -832,10 +814,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_SALINE_IV;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_salineIV
{
class TransportItems {
class ACE_salineIV {
name = "ACE_salineIV";
count = 1;
};
@ -847,10 +827,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_QUIKCLOT_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_quikClot
{
class TransportItems {
class ACE_quikClot {
name = "ACE_quikclot";
count = 1;
};
@ -862,10 +840,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_AID_KIT_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_personalAidKit
{
class TransportItems {
class ACE_personalAidKit {
name = "ACE_personalAidKit";
count = 1;
};
@ -877,10 +853,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_SURGICALKIT_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_surgicalKit
{
class TransportItems {
class ACE_surgicalKit {
name = "ACE_surgicalKit";
count = 1;
};
@ -892,10 +866,8 @@ class CfgVehicles {
displayName = $STR_ACE_MEDICAL_BODYBAG_DISPLAY;
author = "$STR_ACE_Common_ACETeam";
vehicleClass = "Items";
class TransportItems
{
class ACE_bodyBag
{
class TransportItems {
class ACE_bodyBag {
name = "ACE_bodyBag";
count = 1;
};
@ -906,9 +878,42 @@ class CfgVehicles {
class ACE_medicalSupplyCrate: NATO_Box_Base {
scope = 2;
accuracy = 1000;
displayName = "[ACE] Medical Supply Crate";
displayName = "[ACE] Medical Supply Crate (Basic)";
model = PATHTOF(data\ace_medcrate.p3d);
author = "$STR_ACE_Common_ACETeam";
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";
count = 50;
};
class ACE_morphine {
name = "ACE_morphine";
count = 25;
};
class ACE_epinephrine {
name = "ACE_epinephrine";
count = 25;
};
class ACE_bloodIV {
name = "ACE_bloodIV";
count = 15;
};
class ACE_bloodIV_500 {
name = "ACE_bloodIV_500";
count = 15;
};
class ACE_bloodIV_250 {
name = "ACE_bloodIV_250";
count = 15;
};
class ACE_bodyBag {
name = "ACE_bodyBag";
count = 10;
};
};
};
class ACE_medicalSupplyCrate_advanced: ACE_medicalSupplyCrate {
displayName = "[ACE] Medical Supply Crate (Advanced)";
class TransportItems {
class ACE_fieldDressing {
name = "ACE_fieldDressing";

View File

@ -19,7 +19,6 @@ class CfgWeapons {
};
};
// @todo localize
class ACE_ItemCore;
class ACE_fieldDressing: ACE_ItemCore {
scope = 2;

View File

@ -153,11 +153,6 @@ GVAR(effectTimeBlood) = time;
GVAR(lastHeartBeat) = time;
GVAR(lastHeartBeatSound) = time;
// @todo, remove once parameters are set up
if (isNil QGVAR(level)) then {
GVAR(level) = 0;
};
// HEARTRATE BASED EFFECTS
[{
_heartRate = ACE_player getVariable [QGVAR(heartRate), 70];
@ -172,8 +167,7 @@ if (isNil QGVAR(level)) then {
// Pain effect
_strength = ACE_player getVariable [QGVAR(pain), 0];
// _strength = _strength * (ACE_player getVariable [QGVAR(coefPain), GVAR(coefPain)]); @todo
GVAR(alternativePainEffect) = false; // @todo
if (GVAR(alternativePainEffect)) then {
if (GVAR(painEffectType) == 1) then {
GVAR(effectPainCC) ppEffectEnable false;
if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then {
_strength = _strength * 0.15;
@ -198,7 +192,7 @@ if (isNil QGVAR(level)) then {
} else {
GVAR(effectPainCA) ppEffectEnable false;
if ((ACE_player getVariable [QGVAR(pain), 0]) > 0 && {alive ACE_player}) then {
_strength = _strength * 0.6;
_strength = _strength * 0.9;
GVAR(effectPainCC) ppEffectEnable true;
GVAR(effectPainCC) ppEffectAdjust [1,1,0, [1,1,1,1], [0,0,0,0], [1,1,1,1], [1 - _strength,1 - _strength,0,0,0,0.2,2]];
GVAR(effectPainCC) ppEffectCommit 0.01;
@ -266,3 +260,8 @@ if (USE_WOUND_EVENT_SYNC) then {
// Prevent all types of interaction while unconscious
// @todo: probably remove this when CBA keybind hold key works properly
["isNotUnconscious", {!((_this select 0) getVariable ["ACE_isUnconscious", false])}] call EFUNC(common,addCanInteractWithCondition);
// Item Event Handler
["playerInventoryChanged", {
[ACE_player] call FUNC(itemCheck);
}] call EFUNC(common,addEventHandler);

View File

@ -47,8 +47,10 @@ if (_show) then {
_allInjuryTexts = [];
_genericMessages = [];
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
if (GVAR(level) >= 2) then {
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
};
if (_target getvariable[QGVAR(isBleeding), false]) then {
_genericMessages pushback [localize "STR_ACE_MEDICAL_STATUS_BLEEDING", [1, 0.1, 0.1, 1]];
@ -126,12 +128,22 @@ if (_show) then {
{
_selectionBloodLoss set [_forEachIndex, _target getHitPointDamage _x];
if (_target getHitPointDamage _x > 0.1 && {_forEachIndex == _selectionN}) then {
// @todo localize
_allInjuryTexts pushBack [format ["%1 %2",
["Lightly wounded", "Heavily wounded"] select (_target getHitPointDamage _x > 0.5),
["head", "torso", "left arm", "right arm", "left leg", "right leg"] select _forEachIndex
], [1,1,1,1]];
if (_target getHitPointDamage _x > 0 && {_forEachIndex == _selectionN}) then {
_pointDamage = _target getHitPointDamage _x;
_severity = switch (true) do {
case (_pointDamage > 0.5): {localize "STR_ACE_Medical_HeavilyWounded"};
case (_pointDamage > 0.1): {localize "STR_ACE_Medical_LightlyWounded"};
default {localize "STR_ACE_Medical_VeryLightlyWounded"};
};
_part = localize ([
"STR_ACE_Medical_Head",
"STR_ACE_Medical_Torso",
"STR_ACE_Medical_LeftArm",
"STR_ACE_Medical_RightArm",
"STR_ACE_Medical_LeftLeg",
"STR_ACE_Medical_RightLeg"
] select _forEachIndex);
_allInjuryTexts pushBack [format ["%1 %2", _severity, toLower _part], [1,1,1,1]];
};
} forEach ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
};

View File

@ -13,7 +13,7 @@
#include "script_component.hpp"
#define BLOODLOSSRATE_BASIC 0.4
#define BLOODLOSSRATE_BASIC 0.2
private ["_totalBloodLoss","_tourniquets","_openWounds", "_value", "_cardiacOutput", "_internalWounds"];
// TODO Only use this calculation if medium or higher, otherwise use vanilla calculations (for basic medical).

View File

@ -28,9 +28,8 @@ if (_syncValues) then {
};
_bloodVolume = (_unit getvariable [QGVAR(bloodVolume), 0]) + ([_unit] call FUNC(getBloodVolumeChange));
if (_bloodVolume <= 0) then {
_bloodVolume = 0;
};
_bloodVolume = _bloodVolume max 0;
_unit setvariable [QGVAR(bloodVolume), _bloodVolume, _syncValues];
// Set variables for synchronizing information across the net
@ -78,15 +77,11 @@ if (GVAR(level) == 1) then {
// bleeding
_blood = _unit getVariable [QGVAR(bloodVolume), 100];
_blood = (_blood - 0.4 * (damage _unit) * _interval) max 0;
if (_blood != (_unit getVariable [QGVAR(bloodVolume), 100])) then {
_unit setVariable [QGVAR(bloodVolume), _blood, _syncValues];
if (_blood <= 35 and !(_unit getVariable ["ACE_isUnconscious", false])) then {
[_unit, true] call FUNC(setUnconscious);
};
if (_blood == 0) then {
[_unit] call FUNC(setDead);
};
if (_blood <= 35 and !(_unit getVariable ["ACE_isUnconscious", false])) then {
[_unit, true] call FUNC(setUnconscious);
};
if (_blood == 0) then {
[_unit] call FUNC(setDead);
};
};

View File

@ -1284,5 +1284,53 @@
<Polish>%1 założył stazę</Polish>
<French>%1 a appliqué un garrot</French>
</Key>
<Key ID="STR_ACE_Medical_HeavilyWounded">
<English>Heavily wounded</English>
<German>Schwer verwundet:</German>
</Key>
<Key ID="STR_ACE_Medical_LightlyWounded">
<English>Lightly wounded</English>
<German>Leicht verwundet:</German>
</Key>
<Key ID="STR_ACE_Medical_VeryLightlyWounded">
<English>Very lightly wounded</English>
<German>Sehr leicht verwundet:</German>
</Key>
<Key ID="STR_ACE_Medical_Head">
<English>Head</English>
<German>Kopf</German>
</Key>
<Key ID="STR_ACE_Medical_Torso">
<English>Torso</English>
<German>Torso</German>
</Key>
<Key ID="STR_ACE_Medical_LeftArm">
<English>Left Arm</English>
<German>Linker Arm</German>
</Key>
<Key ID="STR_ACE_Medical_RightArm">
<English>Right Arm</English>
<German>Rechter Arm</German>
</Key>
<Key ID="STR_ACE_Medical_LeftLeg">
<English>Left Leg</English>
<German>Linkes Bein</German>
</Key>
<Key ID="STR_ACE_Medical_RightLeg">
<English>Right Leg</English>
<German>Rechtes Bein</German>
</Key>
<Key ID="STR_ACE_Medical_painEffectType">
<English>Pain Effect Type</English>
<German>Schmerzeffekt-Typ</German>
</Key>
<Key ID="STR_ACE_Medical_painEffect_Flash">
<English>Colour Flashing</English>
<German>Farbblinken</German>
</Key>
<Key ID="STR_ACE_Medical_painEffect_Chroma">
<English>Chromatic Aberration</English>
<German>Chromatische Aberration</German>
</Key>
</Package>
</Project>