|
|
|
|
|
UndefineClass('Bleeding') |
|
DefineClass.Bleeding = { |
|
__parents = { "StatusEffect" }, |
|
__generated_by_class = "CharacterEffectCompositeDef", |
|
|
|
|
|
object_class = "StatusEffect", |
|
unit_reactions = { |
|
PlaceObj('UnitReaction', { |
|
Event = "OnEndTurn", |
|
Handler = function (self, target) |
|
if not IsInCombat() then return end |
|
if target:HasStatusEffect("BeingBandaged") then |
|
target:RemoveStatusEffect("Bleeding") |
|
return |
|
end |
|
local value = self:ResolveValue("DamagePerTurn") |
|
local floating_text = T{193053798048, "<num> (bleeding)", num = value} |
|
local pov_team = GetPoVTeam() |
|
local has_visibility = HasVisibilityTo(pov_team, target) |
|
local log_msg = T{729241506274, "<name> bleeds for <em><num> damage</em>", name = target:GetLogName(), num = value} |
|
target:TakeDirectDamage(value, has_visibility and floating_text or false, "short", log_msg) |
|
end, |
|
}), |
|
PlaceObj('UnitReaction', { |
|
Event = "OnCalcChanceToHit", |
|
Handler = function (self, target, attacker, action, attack_target, weapon1, weapon2, data) |
|
if target == attacker then |
|
ApplyCthModifier_Add(self, data, self:ResolveValue("cth_penalty")) |
|
end |
|
end, |
|
}), |
|
PlaceObj('UnitReaction', { |
|
Event = "OnCalcCritChance", |
|
Handler = function (self, target, attacker, attack_target, action, weapon, data) |
|
if target == attack_target and IsKindOf(data.weapon, "GutHookKnife") then |
|
data.guaranteed_crit = true |
|
end |
|
end, |
|
}), |
|
PlaceObj('UnitReaction', { |
|
Event = "OnUnitBandaged", |
|
Handler = function (self, target, healer, patient, hp_restored) |
|
if target == patient then |
|
target:RemoveStatusEffect(self.class) |
|
end |
|
end, |
|
}), |
|
}, |
|
DisplayName = T(779855732255, "Bleeding"), |
|
Description = T(303094247377, "This character will <em>take <DamagePerTurn> damage</em> each turn until they are <em>bandaged</em>. Maximum <em>AP decreased by <APLoss></em>."), |
|
AddEffectText = T(902710213609, "<em><DisplayName></em> is bleeding"), |
|
OnAdded = function (self, obj) |
|
if g_Teams[g_CurrentTeam] == obj.team and not obj:HasStatusEffect("BeingBandaged") then |
|
obj:ConsumeAP(-self:ResolveValue("APLoss") * const.Scale.AP) |
|
end |
|
end, |
|
OnRemoved = function (self, obj) |
|
if g_Combat and not obj:HasStatusEffect("BeingBandaged") then |
|
obj:ConsumeAP(self:ResolveValue("APLoss") * const.Scale.AP) |
|
end |
|
end, |
|
type = "Debuff", |
|
Icon = "UI/Hud/Status effects/bleeding", |
|
RemoveOnEndCombat = true, |
|
Shown = true, |
|
HasFloatingText = true, |
|
} |
|
|
|
|