setDamage
Definition
-- @/lua/vehicle/damageTracker.lua:46
local function setDamage(group, name, value, notifyUI)
if damageData[group] == nil then
damageData[group] = {}
end
if damageData[group][name] == value then
return
end
damageData[group][name] = value
damageDataDelta[group] = damageDataDelta[group] or {}
damageDataDelta[group][name] = value
--make sure to remove any timeouts on this group,name pair if it exists
if temporaryDamageTimeoutTracker[group] and temporaryDamageTimeoutTracker[group][name] then
temporaryDamageTimeoutTracker[group][name] = nil
end
if notifyUI then
local notifyKey = string.format("vehicle.%s.%s.%s", group, name, value)
guihooks.message(notifyKey, 5, notifyKey)
end
M.updateGFX = updateGFXDirty
end
Callers
@/lua/vehicle/beamstate.lua
guihooks.message({txt = "vehicle.beamstate.tireDeflated", context = {wheelName = wheel.name}}, 5, "vehicle.damage.deflated." .. wheel.name)
damageTracker.setDamage("wheels", "tire" .. wheel.name, true)
extensions.hook("onTireDeflated", wheelid)
if damage > 0.001 then
damageTracker.setDamage("body", bodyPart, damage)
end
invBodyPartBeamCount[k] = 1 / v
damageTracker.setDamage("body", k, 0)
end
if damage > 0.001 then
damageTracker.setDamage("body", bodyPart, damage)
end
@/ui/modules/apps/DamageAppVehicleSimple/app.js
function setDamage(component, color, anim) {
hu(component.svgId, svg).css({
$timeout.cancel(damageTimeout)
setDamage(damagedComponent, redColor, 'flashAnim')
} else if (damagedComponent.priority === 0) {
$timeout.cancel(damageTimeout)
setDamage(damagedComponent, orangeColor, 'flashAnim')
} else if (damagedComponent.priority === 2 ) {
var bodyColor = `rgba(${150+damageAmount}, ${150-damageAmount}, 0, 0.6)`
setDamage(damagedComponent, bodyColor, '')
}
if (data[type][component] === true || data[type][component] > 0) {
setDamage(damagedComponent, orangeColor, 'flashAnim')
}
permanentDamagedParts -= 1
setDamage(damagedComponent, noDataColor, '')
}
@/lua/vehicle/powertrain.lua
damageTracker.setDamage("powertrain", device.name, device.isBroken or false)
end
device:reset(deviceJbeamData[device.name])
damageTracker.setDamage("powertrain", device.name, device.isBroken or false)
end
guihooks.message({txt = "vehicle.powertrain.deviceBroken", context = {deviceName = device.uiName}}, 10, "vehicle.damage.device." .. device.uiName)
damageTracker.setDamage("powertrain", device.name, true)
end
@/lua/vehicle/powertrain/frictionClutch.lua
messageTime = 3
damageTracker.setDamage("powertrain", device.name, true)
end
@/lua/vehicle/wheels.lua
obj:setWheelTorqueAndBrakeTorque(wd.cid, 0, 0)
damageTracker.setDamage("wheels", wd.name, true)
-- Brake damage
-- Brake damage
damageTracker.setDamage("wheels", "brake" .. wd.name, true)
if wd.rotatorType == "wheel" then
if updateDamage then
damageTracker.setDamage("wheels", "brakeOverHeat" .. wd.name, (slopeSwitchBit < 1 and thermalEfficiency < 0.85) and wd.brakeThermalEfficiency or 0)
if wd.isBrakeMolten then
if wd.isBrakeMolten then
damageTracker.setDamage("wheels", "brake" .. wd.name, wd.isBrakeMolten)
end
-- Reset brake damage values
damageTracker.setDamage("wheels", "brake" .. wd.name, false)
-- Reset brake overheating values
-- Reset brake overheating values
damageTracker.setDamage("wheels", "brakeOverHeat" .. wd.name, 0)
end
-- Initialising brake damage values
damageTracker.setDamage("wheels", "brake" .. wd.name, false)
-- Initialising brake overheating values
-- Initialising brake overheating values
damageTracker.setDamage("wheels", "brakeOverHeat" .. wd.name, 0)
end
local wd = M.wheels[i]
damageTracker.setDamage("wheels", wd.name, false)
damageTracker.setDamage("wheels", "tire" .. wd.name, false)
damageTracker.setDamage("wheels", wd.name, false)
damageTracker.setDamage("wheels", "tire" .. wd.name, false)
end
damageTracker.setDamage("wheels", wd.name, false)
damageTracker.setDamage("wheels", "tire" .. wd.name, false)
damageTracker.setDamage("wheels", wd.name, false)
damageTracker.setDamage("wheels", "tire" .. wd.name, false)
end
@/lua/vehicle/powertrain/centrifugalClutch.lua
messageTime = 3
damageTracker.setDamage("powertrain", device.name, true)
end
@/lua/vehicle/damageTracker.lua
if data.timeout <= 0 then
M.setDamage(group, name, data.timeoutValue, false)
else
local function setDamageTemporary(group, name, value, timeoutValue, timeout, notifyUI)
setDamage(group, name, value, notifyUI)
temporaryDamageTimeoutTracker[group] = temporaryDamageTimeoutTracker[group] or {}
@/lua/vehicle/powertrain/manualGearbox.lua
damageTracker.setDamage("gearbox", "synchroWear", false)
@/lua/vehicle/powertrain/combustionEngineThermals.lua
fluidLeakRates.oil.oilpan = min(fluidLeakRates.oil.oilpan + damageAmount * 10, 1) --kg/s
damageTracker.setDamage("engine", "oilpanLeak", true, true)
end
fluidLeakRates.oil.radiator = min(fluidLeakRates.oil.radiator + damageAmount * 0.1, 0.1) --kg/s
damageTracker.setDamage("engine", "oilRadiatorLeak", true, true)
end
local function headGasketBlown()
damageTracker.setDamage("engine", "headGasketDamaged", true, true)
M.headGasketBlown = true
local function pistonRingsDamaged()
damageTracker.setDamage("engine", "pistonRingsDamaged", true, true)
M.pistonRingsDamaged = true
local function connectingRodBearingsDamaged()
damageTracker.setDamage("engine", "rodBearingsDamaged", true, true)
M.connectingRodBearingsDamaged = true
M.engineBlockMelted = true
damageTracker.setDamage("engine", "blockMelted", true, true)
end
M.cylinderWallsMelted = true
damageTracker.setDamage("engine", "cylinderWallsMelted", true, true)
end
damageTracker.setDamage("engine", "oilOverheating", true, true)
elseif damageTracker.getDamage("engine", "oilOverheating", true) then
elseif damageTracker.getDamage("engine", "oilOverheating", true) then
damageTracker.setDamage("engine", "oilOverheating", false)
end
if adjustedRadiatorDamage > 0 and not damageTracker.getDamage("engine", "radiatorLeak") then
damageTracker.setDamage("engine", "radiatorLeak", true, true)
end
damageTracker.setDamage("engine", "coolantOverheating", true, true)
elseif damageTracker.getDamage("engine", "coolantOverheating") then
fluidLeakRates.coolant.overpressure = 0
damageTracker.setDamage("engine", "coolantOverheating", false)
end
damageTracker.setDamage("engine", "oilOverheating", true, true)
elseif damageTracker.getDamage("engine", "oilOverheating", true) then
elseif damageTracker.getDamage("engine", "oilOverheating", true) then
damageTracker.setDamage("engine", "oilOverheating", false)
end
if not damageTracker.getDamage("engine", "oilLevelCritical") then
damageTracker.setDamage("engine", "oilLevelCritical", true, true)
end
elseif damageTracker.getDamage("engine", "oilLevelCritical") then
damageTracker.setDamage("engine", "oilLevelCritical", false)
end
if not damageTracker.getDamage("engine", "starvedOfOil") then
damageTracker.setDamage("engine", "starvedOfOil", true, true)
end
elseif damageTracker.getDamage("engine", "starvedOfOil") then
damageTracker.setDamage("engine", "starvedOfOil", false, false)
end
if not damageTracker.getDamage("engine", "oilLevelTooHigh") then
damageTracker.setDamage("engine", "oilLevelTooHigh", true, true)
end
elseif damageTracker.getDamage("engine", "oilLevelTooHigh") then
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
end
if not damageTracker.getDamage("engine", "exhaustBroken") then
damageTracker.setDamage("engine", "exhaustBroken", true)
guihooks.message("vehicle.combustionEngine.exhaustDamaged", 4, "vehicle.damage.exhaust")
if hasCoolantRadiator then
damageTracker.setDamage("engine", "radiatorLeak", false)
end
end
damageTracker.setDamage("engine", "coolantOverheating", false)
damageTracker.setDamage("engine", "oilOverheating", false)
damageTracker.setDamage("engine", "coolantOverheating", false)
damageTracker.setDamage("engine", "oilOverheating", false)
damageTracker.setDamage("engine", "oilRadiatorLeak", false)
damageTracker.setDamage("engine", "oilOverheating", false)
damageTracker.setDamage("engine", "oilRadiatorLeak", false)
damageTracker.setDamage("engine", "oilpanLeak", false)
damageTracker.setDamage("engine", "oilRadiatorLeak", false)
damageTracker.setDamage("engine", "oilpanLeak", false)
damageTracker.setDamage("engine", "headGasketDamaged", M.headGasketBlown)
damageTracker.setDamage("engine", "oilpanLeak", false)
damageTracker.setDamage("engine", "headGasketDamaged", M.headGasketBlown)
damageTracker.setDamage("engine", "rodBearingsDamaged", M.connectingRodBearingsDamaged)
damageTracker.setDamage("engine", "headGasketDamaged", M.headGasketBlown)
damageTracker.setDamage("engine", "rodBearingsDamaged", M.connectingRodBearingsDamaged)
damageTracker.setDamage("engine", "pistonRingsDamaged", M.pistonRingsDamaged)
damageTracker.setDamage("engine", "rodBearingsDamaged", M.connectingRodBearingsDamaged)
damageTracker.setDamage("engine", "pistonRingsDamaged", M.pistonRingsDamaged)
damageTracker.setDamage("engine", "cylinderWallsMelted", false)
damageTracker.setDamage("engine", "pistonRingsDamaged", M.pistonRingsDamaged)
damageTracker.setDamage("engine", "cylinderWallsMelted", false)
damageTracker.setDamage("engine", "blockMelted", false)
damageTracker.setDamage("engine", "cylinderWallsMelted", false)
damageTracker.setDamage("engine", "blockMelted", false)
damageTracker.setDamage("engine", "starvedOfOil", false)
damageTracker.setDamage("engine", "blockMelted", false)
damageTracker.setDamage("engine", "starvedOfOil", false)
damageTracker.setDamage("engine", "oilLevelCritical", false)
damageTracker.setDamage("engine", "starvedOfOil", false)
damageTracker.setDamage("engine", "oilLevelCritical", false)
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
damageTracker.setDamage("engine", "oilLevelCritical", false)
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
damageTracker.setDamage("engine", "exhaustBroken", false)
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
damageTracker.setDamage("engine", "exhaustBroken", false)
end
if hasCoolantRadiator then
damageTracker.setDamage("engine", "radiatorLeak", false)
end
end
damageTracker.setDamage("engine", "coolantOverheating", false)
damageTracker.setDamage("engine", "oilOverheating", false)
damageTracker.setDamage("engine", "coolantOverheating", false)
damageTracker.setDamage("engine", "oilOverheating", false)
damageTracker.setDamage("engine", "oilRadiatorLeak", false)
damageTracker.setDamage("engine", "oilOverheating", false)
damageTracker.setDamage("engine", "oilRadiatorLeak", false)
damageTracker.setDamage("engine", "oilpanLeak", false)
damageTracker.setDamage("engine", "oilRadiatorLeak", false)
damageTracker.setDamage("engine", "oilpanLeak", false)
damageTracker.setDamage("engine", "headGasketDamaged", M.headGasketBlown)
damageTracker.setDamage("engine", "oilpanLeak", false)
damageTracker.setDamage("engine", "headGasketDamaged", M.headGasketBlown)
damageTracker.setDamage("engine", "rodBearingsDamaged", M.connectingRodBearingsDamaged)
damageTracker.setDamage("engine", "headGasketDamaged", M.headGasketBlown)
damageTracker.setDamage("engine", "rodBearingsDamaged", M.connectingRodBearingsDamaged)
damageTracker.setDamage("engine", "pistonRingsDamaged", M.pistonRingsDamaged)
damageTracker.setDamage("engine", "rodBearingsDamaged", M.connectingRodBearingsDamaged)
damageTracker.setDamage("engine", "pistonRingsDamaged", M.pistonRingsDamaged)
damageTracker.setDamage("engine", "cylinderWallsMelted", false)
damageTracker.setDamage("engine", "pistonRingsDamaged", M.pistonRingsDamaged)
damageTracker.setDamage("engine", "cylinderWallsMelted", false)
damageTracker.setDamage("engine", "blockMelted", false)
damageTracker.setDamage("engine", "cylinderWallsMelted", false)
damageTracker.setDamage("engine", "blockMelted", false)
damageTracker.setDamage("engine", "starvedOfOil", false)
damageTracker.setDamage("engine", "blockMelted", false)
damageTracker.setDamage("engine", "starvedOfOil", false)
damageTracker.setDamage("engine", "oilLevelCritical", false)
damageTracker.setDamage("engine", "starvedOfOil", false)
damageTracker.setDamage("engine", "oilLevelCritical", false)
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
damageTracker.setDamage("engine", "oilLevelCritical", false)
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
damageTracker.setDamage("engine", "exhaustBroken", false)
damageTracker.setDamage("engine", "oilLevelTooHigh", false)
damageTracker.setDamage("engine", "exhaustBroken", false)
@/lua/vehicle/powertrain/combustionEngine.lua
device.outputTorqueState = max(device.outputTorqueState * state, min(maxReduction or 0, device.outputTorqueState))
damageTracker.setDamage("engine", "engineReducedTorque", device.outputTorqueState < 1)
end
damageTracker.setDamage("engine", "engineDisabled", true)
end
damageTracker.setDamage("engine", "engineDisabled", false)
end
end
damageTracker.setDamage("powertrain", device.name, true)
damageTracker.setDamage("engine", "engineLockedUp", true)
damageTracker.setDamage("powertrain", device.name, true)
damageTracker.setDamage("engine", "engineLockedUp", true)
end
damageTracker.setDamage("engine", "engineIsHydrolocking", isFlooding)
if device.floodLevel > hydrolockThreshold then
damageTracker.setDamage("engine", "engineHydrolocked", true)
-- avoid piston movement, simulate broken connecting rods
local rpmTooHigh = abs(device.outputAV1) > device.maxPhysicalAV
damageTracker.setDamage("engine", "overRevDanger", rpmTooHigh)
if rpmTooHigh then
device:lockUp()
damageTracker.setDamage("engine", "catastrophicOverrevDamage", true)
guihooks.message({txt = "vehicle.combustionEngine.engineCatastrophicOverrevDamage", context = {}}, 4, "vehicle.damage.catastrophicOverrev")
device:scaleOutputTorque(0.98, 0.2)
damageTracker.setDamage("engine", "mildOverrevDamage", true)
guihooks.message({txt = "vehicle.combustionEngine.engineMildOverrevDamage", context = {}}, 4, "vehicle.damage.mildOverrev")
if device.maxTorqueRating > 0 then
damageTracker.setDamage("engine", "overTorqueDanger", device.combustionTorque > device.maxTorqueRating)
if device.combustionTorque > device.maxTorqueRating then
device:lockUp()
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", true)
guihooks.message({txt = "vehicle.combustionEngine.engineCatastrophicOverTorqueDamage", context = {}}, 4, "vehicle.damage.catastrophicOverTorque")
device.slowIgnitionErrorChance = min(device.slowIgnitionErrorChance + linearScale(damageAmount, 0, 0.01, 0, 0.05))
damageTracker.setDamage("engine", "impactDamage", true, true)
elseif groupType == "radiator" and device.thermals.applyDeformGroupDamageRadiator then
damageTracker.setDamage("engine", "engineDisabled", false)
damageTracker.setDamage("engine", "engineLockedUp", false)
damageTracker.setDamage("engine", "engineDisabled", false)
damageTracker.setDamage("engine", "engineLockedUp", false)
damageTracker.setDamage("engine", "engineReducedTorque", false)
damageTracker.setDamage("engine", "engineLockedUp", false)
damageTracker.setDamage("engine", "engineReducedTorque", false)
damageTracker.setDamage("engine", "catastrophicOverrevDamage", false)
damageTracker.setDamage("engine", "engineReducedTorque", false)
damageTracker.setDamage("engine", "catastrophicOverrevDamage", false)
damageTracker.setDamage("engine", "mildOverrevDamage", false)
damageTracker.setDamage("engine", "catastrophicOverrevDamage", false)
damageTracker.setDamage("engine", "mildOverrevDamage", false)
damageTracker.setDamage("engine", "overRevDanger", false)
damageTracker.setDamage("engine", "mildOverrevDamage", false)
damageTracker.setDamage("engine", "overRevDanger", false)
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", false)
damageTracker.setDamage("engine", "overRevDanger", false)
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", false)
damageTracker.setDamage("engine", "overTorqueDanger", false)
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", false)
damageTracker.setDamage("engine", "overTorqueDanger", false)
damageTracker.setDamage("engine", "engineHydrolocked", false)
damageTracker.setDamage("engine", "overTorqueDanger", false)
damageTracker.setDamage("engine", "engineHydrolocked", false)
damageTracker.setDamage("engine", "engineIsHydrolocking", false)
damageTracker.setDamage("engine", "engineHydrolocked", false)
damageTracker.setDamage("engine", "engineIsHydrolocking", false)
damageTracker.setDamage("engine", "impactDamage", false)
damageTracker.setDamage("engine", "engineIsHydrolocking", false)
damageTracker.setDamage("engine", "impactDamage", false)
damageTracker.setDamage("engine", "engineDisabled", false)
damageTracker.setDamage("engine", "engineLockedUp", false)
damageTracker.setDamage("engine", "engineDisabled", false)
damageTracker.setDamage("engine", "engineLockedUp", false)
damageTracker.setDamage("engine", "engineReducedTorque", false)
damageTracker.setDamage("engine", "engineLockedUp", false)
damageTracker.setDamage("engine", "engineReducedTorque", false)
damageTracker.setDamage("engine", "catastrophicOverrevDamage", false)
damageTracker.setDamage("engine", "engineReducedTorque", false)
damageTracker.setDamage("engine", "catastrophicOverrevDamage", false)
damageTracker.setDamage("engine", "mildOverrevDamage", false)
damageTracker.setDamage("engine", "catastrophicOverrevDamage", false)
damageTracker.setDamage("engine", "mildOverrevDamage", false)
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", false)
damageTracker.setDamage("engine", "mildOverrevDamage", false)
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", false)
damageTracker.setDamage("engine", "mildOverTorqueDamage", false)
damageTracker.setDamage("engine", "catastrophicOverTorqueDamage", false)
damageTracker.setDamage("engine", "mildOverTorqueDamage", false)
damageTracker.setDamage("engine", "engineHydrolocked", false)
damageTracker.setDamage("engine", "mildOverTorqueDamage", false)
damageTracker.setDamage("engine", "engineHydrolocked", false)
damageTracker.setDamage("engine", "engineIsHydrolocking", false)
damageTracker.setDamage("engine", "engineHydrolocked", false)
damageTracker.setDamage("engine", "engineIsHydrolocking", false)
damageTracker.setDamage("engine", "impactDamage", false)
damageTracker.setDamage("engine", "engineIsHydrolocking", false)
damageTracker.setDamage("engine", "impactDamage", false)
@/lua/vehicle/powertrain/turbocharger.lua
damageExhaustPowerCoef = max(damageExhaustPowerCoef - linearScale(damageAmount, 0, 0.01, 0, 0.1), 0)
damageTracker.setDamage("engine", "inductionSystemDamaged", true, true)
end
damageFrictionCoef = damageFrictionCoef * (1 + (turboTemp - turboDamageThresholdTemperature) * 0.001 * dt)
damageTracker.setDamage("engine", "turbochargerHot", true)
else
else
damageTracker.setDamage("engine", "turbochargerHot", false)
end
damageTracker.setDamage("engine", "turbochargerHot", false)
damageTracker.setDamage("engine", "turbochargerDamaged", false)
damageTracker.setDamage("engine", "turbochargerHot", false)
damageTracker.setDamage("engine", "turbochargerDamaged", false)
end
damageTracker.setDamage("engine", "turbochargerHot", false)
damageTracker.setDamage("engine", "turbochargerDamaged", false)
damageTracker.setDamage("engine", "turbochargerHot", false)
damageTracker.setDamage("engine", "turbochargerDamaged", false)
@/lua/vehicle/powertrain/supercharger.lua
damagePressureCoef = clamp(damagePressureCoef - linearScale(damageAmount, 0, 0.01, 0, 1), -0.1, 1)
damageTracker.setDamage("engine", "inductionSystemDamaged", true, true)
end
wearPressureCoef = 1
damageTracker.setDamage("engine", "superchargerDamaged", false)
end
damageTracker.setDamage("engine", "superchargerDamaged", false)
@/lua/vehicle/energyStorage.lua
end
damageTracker.setDamage("energyStorage", storage.name, false)
end
end
damageTracker.setDamage("energyStorage", v.name, false)
end
damageTracker.setDamage("energyStorage", storage.name, true)
end
@/lua/vehicle/energyStorage/pressureTank.lua
storage.previousLeakRate = storage.currentLeakRate
damageTracker.setDamage("pressureTank", "deformationLeak", true, true)
end
storage.currentLeakRate = storage.maxLeakRate
damageTracker.setDamage("pressureTank", "breakLeak", true, true)
end
damageTracker.setDamage("pressureTank", "breakLeak", false, false)
damageTracker.setDamage("pressureTank", "deformationLeak", false, false)
damageTracker.setDamage("pressureTank", "breakLeak", false, false)
damageTracker.setDamage("pressureTank", "deformationLeak", false, false)
end
damageTracker.setDamage("pressureTank", "breakLeak", false, false)
damageTracker.setDamage("pressureTank", "deformationLeak", false, false)
damageTracker.setDamage("pressureTank", "breakLeak", false, false)
damageTracker.setDamage("pressureTank", "deformationLeak", false, false)