@screeps/engine
Version:
This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.
80 lines (68 loc) • 2.83 kB
JavaScript
;
var _ = require('lodash'),
utils = require('../../../utils'),
driver = utils.getDriver(),
C = driver.constants;
module.exports = function (object, roomObjects, roomTerrain, bulk, bulkUsers, roomController, stats, gameTime, roomInfo) {
if (roomInfo.novice && roomInfo.novice > Date.now() || roomInfo.respawnArea && roomInfo.respawnArea > Date.now()) {
bulk.remove(object._id);
delete roomObjects[object._id];
return;
}
if (gameTime == object.landTime - 1) {
_.forEach(roomObjects, function (target) {
if (!target) {
return;
}
if (target.type == 'creep') {
require('../creeps/_die')(target, roomObjects, bulk, stats, 0);
}
if (target.type == 'constructionSite' || target.type == 'energy') {
bulk.remove(target._id);
delete roomObjects[target._id];
}
});
for (var dx = -2; dx <= 2; dx++) {
var _loop = function _loop(dy) {
var x = object.x + dx,
y = object.y + dy,
range = Math.max(Math.abs(dx), Math.abs(dy)),
damage = range == 0 ? C.NUKE_DAMAGE[0] : C.NUKE_DAMAGE[2];
var objects = _.filter(roomObjects, { x: x, y: y });
var rampart = _.find(objects, { type: 'rampart' });
if (rampart) {
var rampartHits = rampart.hits;
_.pull(objects, rampart);
require('../_damage')(object, rampart, damage, 'ranged', roomObjects, roomTerrain, bulk, roomController, stats, gameTime, roomInfo);
damage -= rampartHits;
}
if (damage > 0) {
objects.forEach(function (target) {
require('../_damage')(object, target, damage, 'ranged', roomObjects, roomTerrain, bulk, roomController, stats, gameTime, roomInfo);
});
}
};
for (var dy = -2; dy <= 2; dy++) {
_loop(dy);
}
}
if (roomController) {
if (roomController.safeMode > gameTime) {
bulk.update(roomController, {
safeMode: gameTime,
safeModeCooldown: null
});
}
if (roomController.user) {
bulk.update(roomController, {
upgradeBlocked: gameTime + C.CONTROLLER_NUKE_BLOCKED_UPGRADE
});
}
}
}
if (gameTime >= object.landTime) {
bulk.remove(object._id);
delete roomObjects[object._id];
};
};
//# sourceMappingURL=../../../sourcemaps/processor/intents/nukes/tick.js.map