Added handling of out of raid eating, currently handles hydration/energy
This commit is contained in:
parent
da9cd7f7b7
commit
100d04cc67
@ -2,7 +2,7 @@ import { HealthHelper } from "@spt/helpers/HealthHelper";
|
|||||||
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
|
||||||
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
import { ItemHelper } from "@spt/helpers/ItemHelper";
|
||||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||||
import { IBodyPartHealth } from "@spt/models/eft/common/tables/IBotBase";
|
import { IBodyPartHealth, ICurrentMax } from "@spt/models/eft/common/tables/IBotBase";
|
||||||
import { IBodyPart, IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData";
|
import { IBodyPart, IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData";
|
||||||
import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData";
|
import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData";
|
||||||
import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData";
|
import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData";
|
||||||
@ -164,7 +164,49 @@ export class HealthController {
|
|||||||
this.inventoryHelper.removeItem(pmcData, request.item, sessionID, output);
|
this.inventoryHelper.removeItem(pmcData, request.item, sessionID, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check what effect eating item has and handle
|
||||||
|
const foodItemDbDetails = this.itemHelper.getItem(itemToConsume._tpl);
|
||||||
|
const foodItemEffectDetails = foodItemDbDetails[1]._props.effects_health;
|
||||||
|
const foodIsSingleUse = foodItemDbDetails[1]._props.MaxResource === 1;
|
||||||
|
|
||||||
|
for (const effectKey of Object.keys(foodItemEffectDetails)) {
|
||||||
|
const consumptionDetails = foodItemEffectDetails[effectKey];
|
||||||
|
switch (effectKey) {
|
||||||
|
case "Hydration":
|
||||||
|
applyEdibleEffect(pmcData.Health.Hydration, consumptionDetails);
|
||||||
|
break;
|
||||||
|
case "Energy":
|
||||||
|
applyEdibleEffect(pmcData.Health.Energy, consumptionDetails);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
this.logger.warning(`Unhandled effect after consuming: ${itemToConsume._tpl}, ${effectKey}`);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return output;
|
return output;
|
||||||
|
|
||||||
|
function applyEdibleEffect(bodyValue: ICurrentMax, consumptionDetails: Record<string, number>) {
|
||||||
|
if (foodIsSingleUse) {
|
||||||
|
// Apply whole value from passed in parameter
|
||||||
|
bodyValue.Current += consumptionDetails.value;
|
||||||
|
} else {
|
||||||
|
bodyValue.Current += request.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure current never goes over max
|
||||||
|
if (bodyValue.Current > bodyValue.Maximum) {
|
||||||
|
bodyValue.Current = bodyValue.Maximum;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Same as above but for the lower bound
|
||||||
|
if (bodyValue.Current < 0) {
|
||||||
|
bodyValue.Current = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user