diff --git a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp index 433e8a5a62..dc7cc1b183 100644 --- a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp +++ b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp @@ -286,8 +286,9 @@ class GVAR(actions) { treatmentTime = QFUNC(getStitchTime); condition = QFUNC(canStitch); callbackSuccess = ""; + callbackStart = QFUNC(surgicalKitStart); callbackProgress = QFUNC(surgicalKitProgress); - consumeItem = QGVAR(consumeSurgicalKit); + consumeItem = QGVAR(consumeSurgicalKit); // setting can be 0,1,2 - only 1 will consume items[] animationMedic = "AinvPknlMstpSnonWnonDnon_medic1"; litter[] = {{"ACE_MedicalLitter_gloves"}}; }; diff --git a/addons/medical_treatment/CfgVehicles.hpp b/addons/medical_treatment/CfgVehicles.hpp index 5036750fab..bb9ea8054f 100644 --- a/addons/medical_treatment/CfgVehicles.hpp +++ b/addons/medical_treatment/CfgVehicles.hpp @@ -78,6 +78,9 @@ class CfgVehicles { class ACE_MedicalLitter_splint: ACE_MedicalLitterBase { model = QPATHTOF(data\littergeneric_splint.p3d); }; + class ACE_MedicalLitter_suture: ACE_MedicalLitterBase { + model = QPATHTOF(data\littergeneric_suture.p3d); + }; // Treatment items class Item_Base_F; @@ -232,6 +235,16 @@ class CfgVehicles { MACRO_ADDITEM(ACE_surgicalKit,1); }; }; + class ACE_sutureItem: Item_Base_F { + scope = 2; + scopeCurator = 2; + displayName = CSTRING(Suture_Display); + author = ECSTRING(common,ACETeam); + vehicleClass = "Items"; + class TransportItems { + MACRO_ADDITEM(ACE_suture,1); + }; + }; class ACE_bodyBagItem: Item_Base_F { scope = 2; scopeCurator = 2; diff --git a/addons/medical_treatment/CfgWeapons.hpp b/addons/medical_treatment/CfgWeapons.hpp index 3e90457c8b..fed3184a59 100644 --- a/addons/medical_treatment/CfgWeapons.hpp +++ b/addons/medical_treatment/CfgWeapons.hpp @@ -252,6 +252,18 @@ class CfgWeapons { mass = 15; }; }; + class ACE_suture: ACE_ItemCore { + scope = 2; + author = ECSTRING(common,ACETeam); + displayName = CSTRING(Suture_Display); + model = QPATHTOF(data\suture.p3d); + picture = QPATHTOF(ui\suture_ca.paa); + descriptionShort = CSTRING(Suture_Desc_Short); + descriptionUse = CSTRING(Suture_Desc_Use); + class ItemInfo: CBA_MiscItem_ItemInfo { + mass = 1; + }; + }; class ACE_bodyBag: ACE_ItemCore { scope = 2; author = ECSTRING(common,ACETeam); diff --git a/addons/medical_treatment/XEH_PREP.hpp b/addons/medical_treatment/XEH_PREP.hpp index 0c0f11742f..82be8c81af 100644 --- a/addons/medical_treatment/XEH_PREP.hpp +++ b/addons/medical_treatment/XEH_PREP.hpp @@ -53,6 +53,7 @@ PREP(setTriageStatus); PREP(splint); PREP(splintLocal); PREP(surgicalKitProgress); +PREP(surgicalKitStart); PREP(tourniquet); PREP(tourniquetLocal); PREP(tourniquetRemove); diff --git a/addons/medical_treatment/config.cpp b/addons/medical_treatment/config.cpp index 7506903b46..1664eed719 100644 --- a/addons/medical_treatment/config.cpp +++ b/addons/medical_treatment/config.cpp @@ -3,8 +3,8 @@ class CfgPatches { class ADDON { name = COMPONENT_NAME; - units[] = {"ACE_fieldDressingItem","ACE_packingBandageItem","ACE_elasticBandageItem","ACE_tourniquetItem","ACE_splintItem","ACE_morphineItem","ACE_adenosineItem","ACE_epinephrineItem","ACE_plasmaIVItem","ACE_bloodIVItem","ACE_salineIVItem","ACE_quikClotItem","ACE_personalAidKitItem","ACE_surgicalKitItem","ACE_bodyBagItem","ACE_medicalSupplyCrate","ACE_medicalSupplyCrate_advanced"}; - weapons[] = {"ACE_fieldDressing","ACE_packingBandage","ACE_elasticBandage","ACE_tourniquet","ACE_splint","ACE_morphine","ACE_adenosine","ACE_epinephrine","ACE_plasmaIV","ACE_plasmaIV_500","ACE_plasmaIV_250","ACE_bloodIV","ACE_bloodIV_500","ACE_bloodIV_250","ACE_salineIV","ACE_salineIV_500","ACE_salineIV_250","ACE_quikclot","ACE_personalAidKit","ACE_surgicalKit","ACE_bodyBag"}; + units[] = {"ACE_fieldDressingItem","ACE_packingBandageItem","ACE_elasticBandageItem","ACE_tourniquetItem","ACE_splintItem","ACE_morphineItem","ACE_adenosineItem","ACE_epinephrineItem","ACE_plasmaIVItem","ACE_bloodIVItem","ACE_salineIVItem","ACE_quikClotItem","ACE_personalAidKitItem","ACE_surgicalKitItem","ACE_sutureItem","ACE_bodyBagItem","ACE_medicalSupplyCrate","ACE_medicalSupplyCrate_advanced"}; + weapons[] = {"ACE_fieldDressing","ACE_packingBandage","ACE_elasticBandage","ACE_tourniquet","ACE_splint","ACE_morphine","ACE_adenosine","ACE_epinephrine","ACE_plasmaIV","ACE_plasmaIV_500","ACE_plasmaIV_250","ACE_bloodIV","ACE_bloodIV_500","ACE_bloodIV_250","ACE_salineIV","ACE_salineIV_500","ACE_salineIV_250","ACE_quikclot","ACE_personalAidKit","ACE_surgicalKit","ACE_suture","ACE_bodyBag"}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = {"ace_medical_status", "ace_medical_damage", "ace_apl"}; author = ECSTRING(common,ACETeam); diff --git a/addons/medical_treatment/data/littergeneric_suture.p3d b/addons/medical_treatment/data/littergeneric_suture.p3d new file mode 100644 index 0000000000..eb4a1fc9dd Binary files /dev/null and b/addons/medical_treatment/data/littergeneric_suture.p3d differ diff --git a/addons/medical_treatment/data/suture.p3d b/addons/medical_treatment/data/suture.p3d new file mode 100644 index 0000000000..b98ee47f95 Binary files /dev/null and b/addons/medical_treatment/data/suture.p3d differ diff --git a/addons/medical_treatment/data/suture.rvmat b/addons/medical_treatment/data/suture.rvmat new file mode 100644 index 0000000000..8664194d32 --- /dev/null +++ b/addons/medical_treatment/data/suture.rvmat @@ -0,0 +1,96 @@ +class StageTI +{ + texture="a3\data_f\default_vehicle_ti_ca.paa"; +}; +ambient[]={0.10196079,0.35686275,0.26274511,1}; +diffuse[]={0.10196079,0.35686275,0.26274511,1}; +forcedDiffuse[]={0,0,0,1}; +emmisive[]={0,0,0,0}; +specular[]={0,0,0,1}; +specularPower=3.5; +PixelShaderID="Super"; +VertexShaderID="Super"; +class Stage1 +{ + texture="z\ace\addons\medical_treatment\data\suture_nohq.paa"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage2 +{ + texture="#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage3 +{ + texture="#(argb,8,8,3)color(0,0,0,0,MC)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage4 +{ + texture="#(argb,8,8,3)color(1,1,1,1,AS)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage5 +{ + texture="z\ace\addons\medical_treatment\data\suture_smdi.paa"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage6 +{ + texture="#(ai,64,64,1)fresnel(1.5,1)"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; +class Stage7 +{ + texture="a3\data_f\env_land_co.paa"; + uvSource="tex"; + class uvTransform + { + aside[]={1,0,0}; + up[]={0,1,0}; + dir[]={0,0,1}; + pos[]={0,0,0}; + }; +}; diff --git a/addons/medical_treatment/data/suture_co.paa b/addons/medical_treatment/data/suture_co.paa new file mode 100644 index 0000000000..5555b9dce1 Binary files /dev/null and b/addons/medical_treatment/data/suture_co.paa differ diff --git a/addons/medical_treatment/data/suture_nohq.paa b/addons/medical_treatment/data/suture_nohq.paa new file mode 100644 index 0000000000..94c4f595cf Binary files /dev/null and b/addons/medical_treatment/data/suture_nohq.paa differ diff --git a/addons/medical_treatment/data/suture_smdi.paa b/addons/medical_treatment/data/suture_smdi.paa new file mode 100644 index 0000000000..c41af47eba Binary files /dev/null and b/addons/medical_treatment/data/suture_smdi.paa differ diff --git a/addons/medical_treatment/functions/fnc_canStitch.sqf b/addons/medical_treatment/functions/fnc_canStitch.sqf index a542de23f1..995a018e04 100644 --- a/addons/medical_treatment/functions/fnc_canStitch.sqf +++ b/addons/medical_treatment/functions/fnc_canStitch.sqf @@ -1,10 +1,10 @@ #include "script_component.hpp" /* - * Author: Katalam, mharis001 + * Author: Katalam, mharis001, Brett Mayson * Checks if the patient can be stitched. * * Arguments: - * 0: Medic (not used) + * 0: Medic * 1: Patient * * ReturnValue: @@ -16,6 +16,8 @@ * Public: No */ -params ["", "_patient"]; +params ["_medic", "_patient"]; + +if ((GVAR(consumeSurgicalKit) == 2) && {!([_medic, _patient, ["ACE_suture"]] call FUNC(hasItem))}) exitWith {false}; (_patient call FUNC(getStitchableWounds) isNotEqualTo []) diff --git a/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf b/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf index 9928936f30..1a19066a43 100644 --- a/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf +++ b/addons/medical_treatment/functions/fnc_surgicalKitProgress.sqf @@ -20,7 +20,7 @@ */ params ["_args", "_elapsedTime", "_totalTime"]; -_args params ["", "_patient"]; +_args params ["_medic", "_patient"]; private _stitchableWounds = _patient call FUNC(getStitchableWounds); @@ -76,4 +76,12 @@ if (EGVAR(medical,limping) == 2 && {_patient getVariable [QEGVAR(medical,isLimpi [QEGVAR(medical_engine,updateDamageEffects), _patient, _patient] call CBA_fnc_targetEvent; }; -true +// Consume a suture for the next wound if one exists, stop stitching if none are left +if (GVAR(consumeSurgicalKit) == 2) then { + // Don't consume a suture if there are no more wounds to stitch + if (count _stitchableWounds == 1) exitWith {false}; + ([_medic, _patient, ["ACE_suture"]] call FUNC(useItem)) params ["_user"]; + !isNull _user +} else { + true +} diff --git a/addons/medical_treatment/functions/fnc_surgicalKitStart.sqf b/addons/medical_treatment/functions/fnc_surgicalKitStart.sqf new file mode 100644 index 0000000000..82de448c82 --- /dev/null +++ b/addons/medical_treatment/functions/fnc_surgicalKitStart.sqf @@ -0,0 +1,24 @@ +#include "script_component.hpp" +/* + * Author: Brett Mayson + * Handles the surgical kit treatment start by consuming a suture when applicable + * + * Arguments: + * 0: Medic + * 1: Patient + * + * Return Value: + * None + * + * Example: + * [player, cursorObject] call ace_medical_treatment_fnc_surgicalKitStart + * + * Public: No + */ + +params ["_medic", "_patient"]; +TRACE_2("surgicalKitStart",_medic,_patient); + +if (GVAR(consumeSurgicalKit) == 2) then { + ([_medic, _patient, ["ACE_suture"]] call FUNC(useItem)); +}; diff --git a/addons/medical_treatment/initSettings.sqf b/addons/medical_treatment/initSettings.sqf index 40e8dcaf87..f66868aac9 100644 --- a/addons/medical_treatment/initSettings.sqf +++ b/addons/medical_treatment/initSettings.sqf @@ -193,7 +193,7 @@ "LIST", [LSTRING(ConsumeSurgicalKit_DisplayName), LSTRING(ConsumeSurgicalKit_Description)], [ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)], - [[0, 1], [ELSTRING(common,No), ELSTRING(common,Yes)], 0], + [[0, 1, 2], ["str_eval_typenothing", LSTRING(SurgicalKit_Display), LSTRING(Suture_Display)], 0], true ] call CBA_fnc_addSetting; diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 16856e3db2..1bf87dc2a1 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -711,19 +711,8 @@ 봉합키트 소모 - Controls whether a surgical kit should be consumed after use. - 縫合キットの使用後に消費するかどうかを決定します。 - Définit si la trousse chirurgicale doit être à usage unique. - Контролирует, следует ли израсходовать Хирургический набор после использования. - Controla se o Kit Cirúrgico deve ser descartado/consumido após o uso. - 設定手術包是否為消耗品 - 设置手术包是否使用后会被消耗 - Controlla se un kit chirurgico deve essere consumato dopo l'uso. - Nastavuje - Kontroluje, czy Zestaw Chirurgiczny powinien być zużyty po użyciu. - Legt fest, ob ein Operations-Set nach der Anwendung verbraucht werden soll. - Controla si un kit quirúrgico debería ser consumido tras su uso - 봉합키트가 사용 후 소모되는 지를 결정합니다. + What should be consumed after use. + Legt fest, ob etwas nach der Anwendung verwendet werden soll. Self Stitching @@ -2322,6 +2311,18 @@ 使用手術包 Cerrahi Kit Kullan + + Suture + Naht + + + Surgical Suture for stitching injuries. + Chirurgisches Nahtmaterial zum Nähen von Wunden. + + + Surgical Suture for stitching injuries. + Chirurgisches Nahtmaterial zum Nähen von Wunden. + Bodybag Housse mortuaire diff --git a/addons/medical_treatment/ui/suture_ca.paa b/addons/medical_treatment/ui/suture_ca.paa new file mode 100644 index 0000000000..4b27ca8509 Binary files /dev/null and b/addons/medical_treatment/ui/suture_ca.paa differ