From ecde67c19a62296e18f9ff2a2f220de3b0fd866f Mon Sep 17 00:00:00 2001 From: mimo Date: Thu, 9 Feb 2017 20:20:59 +0000 Subject: [PATCH] Cleanup of GetBonusAttack function and use it inside petra simulation part reviewed by fatherbushido Differential Revision: https://code.wildfiregames.com/D138 This was SVN commit r19210. --- .../simulation/ai/petra/entityExtend.js | 23 +++++++++++++++++-- .../simulation/ai/petra/headquarters.js | 7 ++++-- .../public/simulation/components/Attack.js | 15 ++++-------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/binaries/data/mods/public/simulation/ai/petra/entityExtend.js b/binaries/data/mods/public/simulation/ai/petra/entityExtend.js index 010b2023f4..b30b292075 100644 --- a/binaries/data/mods/public/simulation/ai/petra/entityExtend.js +++ b/binaries/data/mods/public/simulation/ai/petra/entityExtend.js @@ -138,7 +138,7 @@ m.allowCapture = function(gameState, ent, target) let capturableTargets = gameState.ai.HQ.capturableTargets; if (!capturableTargets.has(target.id())) { - capture = ent.captureStrength(); + capture = ent.captureStrength() * m.getAttackBonus(ent, target, "Capture"); capturableTargets.set(target.id(), { "strength": capture, "ents": new Set([ent.id()]) }); } else @@ -146,7 +146,7 @@ m.allowCapture = function(gameState, ent, target) let capturable = capturableTargets.get(target.id()); if (!capturable.ents.has(ent.id())) { - capturable.strength += ent.captureStrength(); + capturable.strength += ent.captureStrength() * m.getAttackBonus(ent, target, "Capture"); capturable.ents.add(ent.id()); } capture = capturable.strength; @@ -158,6 +158,25 @@ m.allowCapture = function(gameState, ent, target) return capture > antiCapture + sumCapturePoints/80; }; +/** copy of GetAttackBonus from Attack.js */ +m.getAttackBonus = function(ent, target, type) +{ + let attackBonus = 1; + if (!ent.get("Attack/" + type) || !ent.get("Attack/" + type + "/Bonuses")) + return attackBonus; + let bonuses = ent.get("Attack/" + type + "/Bonuses"); + for (let key in bonuses) + { + let bonus = bonuses[key]; + if (bonus.Civ && bonus.Civ !== target.civ()) + continue; + if (bonus.Classes && bonus.Classes.split(/\s+/).some(cls => !target.hasClass(cls))) + continue; + attackBonus *= bonus.Multiplier; + } + return attackBonus; +}; + /** Makes the worker deposit the currently carried resources at the closest accessible dropsite */ m.returnResources = function(gameState, ent) { diff --git a/binaries/data/mods/public/simulation/ai/petra/headquarters.js b/binaries/data/mods/public/simulation/ai/petra/headquarters.js index ec24854424..471a432650 100644 --- a/binaries/data/mods/public/simulation/ai/petra/headquarters.js +++ b/binaries/data/mods/public/simulation/ai/petra/headquarters.js @@ -2106,11 +2106,14 @@ m.HQ.prototype.updateCaptureStrength = function(gameState) if (!target || !target.isCapturable()) continue; if (!this.capturableTargets.has(targetId)) - this.capturableTargets.set(targetId, { "strength": ent.captureStrength(), "ents": new Set([ent.id()]) }); + this.capturableTargets.set(targetId, { + "strength": ent.captureStrength() * m.getAttackBonus(ent, target, "Capture"), + "ents": new Set([ent.id()]) + }); else { let capturableTarget = this.capturableTargets.get(target.id()); - capturableTarget.strength += ent.captureStrength(); + capturableTarget.strength += ent.captureStrength() * m.getAttackBonus(ent, target, "Capture"); capturableTarget.ents.add(ent.id()); } } diff --git a/binaries/data/mods/public/simulation/components/Attack.js b/binaries/data/mods/public/simulation/components/Attack.js index 8a4c9d8316..5fa3813d9e 100644 --- a/binaries/data/mods/public/simulation/components/Attack.js +++ b/binaries/data/mods/public/simulation/components/Attack.js @@ -422,16 +422,11 @@ Attack.prototype.GetAttackBonus = function(type, target) for (let key in template.Bonuses) { let bonus = template.Bonuses[key]; - - let hasClasses = true; - if (bonus.Classes){ - let classes = bonus.Classes.split(/\s+/); - for (let key in classes) - hasClasses = hasClasses && cmpIdentity.HasClass(classes[key]); - } - - if (hasClasses && (!bonus.Civ || bonus.Civ === cmpIdentity.GetCiv())) - attackBonus *= bonus.Multiplier; + if (bonus.Civ && bonus.Civ !== cmpIdentity.GetCiv()) + continue; + if (bonus.Classes && bonus.Classes.split(/\s+/).some(cls => !cmpIdentity.HasClass(cls))) + continue; + attackBonus *= bonus.Multiplier; } }