Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/helpers/DamageBonus.js
/** | /** | ||||
* Calculate the attack damage multiplier against a target. | * Calculate the attack damage multiplier against a target. | ||||
*/ | */ | ||||
function GetDamageBonus(target, template) | function GetDamageBonus(target, template, type, source) | ||||
{ | { | ||||
let attackBonus = 1; | let attackBonus = 1; | ||||
let cmpIdentity = Engine.QueryInterface(target, IID_Identity); | let cmpIdentity = Engine.QueryInterface(target, IID_Identity); | ||||
if (!cmpIdentity) | if (!cmpIdentity) | ||||
return 1; | return 1; | ||||
// Multiply the bonuses for all matching classes | // Multiply the bonuses for all matching classes | ||||
for (let key in template) | for (let key in template) | ||||
{ | { | ||||
let bonus = template[key]; | let bonus = template[key]; | ||||
if (bonus.Civ && bonus.Civ !== cmpIdentity.GetCiv()) | if (bonus.Civ && bonus.Civ !== cmpIdentity.GetCiv()) | ||||
continue; | continue; | ||||
if (bonus.Classes && bonus.Classes.split(/\s+/).some(cls => !cmpIdentity.HasClass(cls))) | if (bonus.Classes && bonus.Classes.split(/\s+/).some(cls => !cmpIdentity.HasClass(cls))) | ||||
continue; | continue; | ||||
attackBonus *= bonus.Multiplier; | attackBonus *= ApplyValueModificationsToEntity("Attack/" + type + "/Bonuses/" + key + "/Multiplier", +bonus.Multiplier, source); | ||||
} | } | ||||
return attackBonus; | return attackBonus; | ||||
} | } | ||||
Engine.RegisterGlobal("GetDamageBonus", GetDamageBonus); | Engine.RegisterGlobal("GetDamageBonus", GetDamageBonus); |
Wildfire Games · Phabricator