getThreatsNear(x,y[,range])

(info) Other great resources: Official JS API docs, Scripting Forum

getThreatsNear(x,y[,range])

Returns an array of dangerous enemy objects near a specific location on the map.

 

Code

const DEFAULT_THREAT_RANGE = 10; // default range (in tiles) for getThreatsNear() function // getThreatsNear(x,y[,range]) will return an array of dangerous enemy objects near x,y var getThreatsNear = (function() { var oldApproach = function(x,y,range) { range = range || DEFAULT_THREAT_RANGE; var enemies = getEnemyPlayerIDs(); var list = []; // build list of dangerous enemy objects enemies.forEach(function(enemy) { // use specific enums to reduce size of list list = list.concat(enumDroid(enemy,DROID_CYBORG)); list = list.concat(enumDroid(enemy,DROID_WEAPON)); list = list.concat(enumStruct(enemy,DEFENSE)); }); // filter to those within range list = list.filter(function(obj) { return (distBetweenTwoPoints(obj.x,obj.y,x,y) < range); }); return list; } var newApproach = function(x,y,range) { range = range || DEFAULT_THREAT_RANGE; // get list of all enemy objects within range var list = enumRange(x,y,range,ENEMIES); // filter to dangerous objects list = list.filter(function(obj) { switch (obj.type) { case DROID: return (obj.droidType == DROID_WEAPON || obj.droidType == DROID_CYBORG); case STRUCTURE: return (obj.stattype == DEFENCE); } return false; }); return list; } // return relevant function based on presence of enumRange function return (typeof enumRange != "undefined") ? newApproach : oldApproach; })();

Example

// quantify the danger level of a location based // on number of dangerous enemy objects nearby function dangerLevel(x,y,range) { return getThreatsNear(x,y,range).length; }   // you could then use dangerLevel() function to work // out which enemy oil derrick is the safest to attack function safestEnemyDerrick() { var enemyDerricks = []; var enemies = getEnemyPlayerIDs(); var danger; // build list of enemy derricks... enemies.forEach(function(enemy) { enemyDerricks = enemyDerricks.concat(enumStruct(enemy,RESOURCE_EXTRACTOR)); }); // if enemy has none, return null... if (enemyDerricks.length == 0) return null; // find safest enemy derrick to attack... enemyDerricks.currentDanger = Number.MAX_VALUE; enemyDerricks.forEach(function(derrick) { danger = dangerLevel(derrick.x,derrick.y); if (danger < enemyDerricks.currentDanger) { enemyDerricks.currentDanger = danger; enemyDerricks.safestDerrick = derrick; } }); return enemyDerricks.safestDerrick; }