mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge pull request #2521 from acemod/fix-ctd-medical
Fixed CTD on overpressure with advanced medical enabled
This commit is contained in:
commit
461028b4e8
BIN
ace_medical.dll
BIN
ace_medical.dll
Binary file not shown.
@ -62,7 +62,7 @@ if (_distance < _backblastRange) then {
|
||||
[_damage * 100] call BIS_fnc_bloodEffect;
|
||||
|
||||
if (isClass (configFile >> "CfgPatches" >> "ACE_Medical") && {([_firer] call EFUNC(medical,hasMedicalEnabled))}) then {
|
||||
[_firer, "HitBody", [_firer, "body", ((_firer getHitPointDamage "HitBody") + _damage), _firer, "backblast"] call EFUNC(medical,handleDamage)] call EFUNC(medical,setHitPointDamage);
|
||||
[_firer, "body", ((_firer getvariable [QEGVAR(medical,bodyPartStatus), [0,0,0,0,0,0]]) select 1) + _damage, _firer, "backblast", 0] call EFUNC(medical,handleDamage);
|
||||
} else {
|
||||
_firer setDamage (damage _firer + _damage);
|
||||
};
|
||||
|
@ -62,7 +62,7 @@ if (!surfaceIsWater _pos) then {
|
||||
if (_x == ACE_player) then {[_damage * 100] call BIS_fnc_bloodEffect};
|
||||
|
||||
if (isClass (configFile >> "CfgPatches" >> "ACE_Medical") && {([_x] call EFUNC(medical,hasMedicalEnabled))}) then {
|
||||
[_x, "HitBody", [_x, "body", (_x getHitPointDamage "HitBody") + _damage, _firer, "backblast"] call EFUNC(medical,handleDamage)] call EFUNC(medical,setHitPointDamage);
|
||||
[_x, "body", ((_x getvariable [QEGVAR(medical,bodyPartStatus), [0,0,0,0,0,0]]) select 1) + _damage, _firer, "backblast", 0] call EFUNC(medical,handleDamage);
|
||||
} else {
|
||||
_x setDamage (damage _x + _damage);
|
||||
};
|
||||
|
@ -39,26 +39,47 @@ void __stdcall RVExtension(char *output, int outputSize, const char *function) {
|
||||
std::vector<std::string> arguments = parseExtensionInput(function);
|
||||
if (arguments.size() > 0)
|
||||
{
|
||||
std::string command = arguments.at(0);
|
||||
arguments.erase(arguments.begin());
|
||||
|
||||
if (command == "addInjuryType") {
|
||||
returnValue = ace::medical::handleDamage::GetInstance().AddInjuryType(arguments);
|
||||
}
|
||||
else if (command == "addDamageType") {
|
||||
returnValue = ace::medical::handleDamage::GetInstance().AddDamageType(arguments);
|
||||
}
|
||||
else if (command == "HandleDamageWounds") {
|
||||
if (arguments.size() >= 4) {
|
||||
std::string selectionName = arguments.at(0);
|
||||
double amountOfDamage = std::stod(arguments.at(1));
|
||||
std::string typeOfDamage = arguments.at(2);
|
||||
int woundID = std::stoi(arguments.at(3));
|
||||
returnValue = ace::medical::handleDamage::GetInstance().HandleDamageWounds(selectionName, amountOfDamage, typeOfDamage, woundID);
|
||||
try {
|
||||
std::string command = arguments.at(0);
|
||||
arguments.erase(arguments.begin());
|
||||
|
||||
if (command == "addInjuryType") {
|
||||
returnValue = ace::medical::handleDamage::GetInstance().AddInjuryType(arguments);
|
||||
}
|
||||
else if (command == "addDamageType") {
|
||||
returnValue = ace::medical::handleDamage::GetInstance().AddDamageType(arguments);
|
||||
}
|
||||
else if (command == "HandleDamageWounds") {
|
||||
if (arguments.size() >= 4) {
|
||||
std::string selectionName = arguments.at(0);
|
||||
double amountOfDamage = std::stod(arguments.at(1));
|
||||
std::string typeOfDamage = arguments.at(2);
|
||||
int woundID = std::stoi(arguments.at(3));
|
||||
returnValue = ace::medical::handleDamage::GetInstance().HandleDamageWounds(selectionName, amountOfDamage, typeOfDamage, woundID);
|
||||
}
|
||||
}
|
||||
else if (command == "ConfigComplete") {
|
||||
ace::medical::handleDamage::GetInstance().FinalizeDefinitions();
|
||||
}
|
||||
}
|
||||
else if (command == "ConfigComplete") {
|
||||
ace::medical::handleDamage::GetInstance().FinalizeDefinitions();
|
||||
catch (std::exception e) {
|
||||
std::stringstream debugreturn;
|
||||
debugreturn << "diag_log format['ACE3 ERROR - Medical Extension: Something went wrong. Input: '];";
|
||||
int i = 0;
|
||||
for (auto arg : arguments) {
|
||||
debugreturn << "diag_log format[' arg " << i++ << ":" << arg << "'];";
|
||||
}
|
||||
debugreturn << "diag_log format['Exception: " << e.what() << "'];";
|
||||
returnValue = debugreturn.str();
|
||||
}
|
||||
catch (...) {
|
||||
std::stringstream debugreturn;
|
||||
debugreturn << "diag_log format['ACE3 ERROR - Medical Extension: Something went wrong. Input: '];";
|
||||
int i = 0;
|
||||
for (auto arg : arguments) {
|
||||
debugreturn << "diag_log format[' arg " << i++ << ":" << arg << "'];";
|
||||
}
|
||||
returnValue = debugreturn.str();
|
||||
}
|
||||
}
|
||||
strncpy(output, returnValue.c_str(), outputSize);
|
||||
|
Loading…
Reference in New Issue
Block a user