UNPKG

@screeps/engine

Version:

This is a module for Screeps standalone server. See [main repository](https://github.com/screeps/screeps) for more info.

114 lines (83 loc) 3.67 kB
'use strict'; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var _ = require('lodash'), utils = require('../../../utils'), driver = utils.getDriver(), C = driver.constants; module.exports = function (object, intent, roomObjects, roomTerrain, bulk, bulkUsers, roomController, stats) { if (object.type != 'creep') { return; } if (object.spawning) { return; } var target = roomObjects[intent.id]; if (!target) { return; } if (Math.abs(target.x - object.x) > 1 || Math.abs(target.y - object.y) > 1) { return; } if (target.type == 'source') { if (!target.energy) { return; } if (roomController && (roomController.user && roomController.user != object.user || roomController.reservation && roomController.reservation.user != object.user)) { return; } var harvestAmount = utils.calcBodyEffectiveness(object.body, C.WORK, 'harvest', C.HARVEST_POWER); if (harvestAmount) { var amount = Math.min(target.energy, harvestAmount); target.energy -= amount; object.energy += amount; var invaderHarvested = (target.invaderHarvested || 0) + amount; bulk.update(object, { energy: object.energy }); bulk.update(target, { energy: target.energy, invaderHarvested: invaderHarvested }); var sum = utils.calcResources(object); if (sum > object.energyCapacity) { require('./drop')(object, { amount: Math.min(object.energy, sum - object.energyCapacity), resourceType: 'energy' }, roomObjects, roomTerrain, bulk); } object.actionLog.harvest = { x: target.x, y: target.y }; stats.inc('energyHarvested', object.user, amount); } } if (target.type == 'mineral') { if (!target.mineralAmount) { return; } var extractor = _.find(roomObjects, function (i) { return i.type == C.STRUCTURE_EXTRACTOR && i.x == target.x && i.y == target.y; }); if (!extractor) { return; } if (extractor.user && extractor.user != object.user) { return; } if (!utils.checkStructureAgainstController(extractor, roomObjects, roomController)) { return; } if (extractor.cooldown) { return; } var _harvestAmount = utils.calcBodyEffectiveness(object.body, C.WORK, 'harvest', C.HARVEST_MINERAL_POWER); if (_harvestAmount) { var _amount = Math.min(target.mineralAmount, _harvestAmount); bulk.update(target, { mineralAmount: target.mineralAmount - _amount }); bulk.update(object, _defineProperty({}, target.mineralType, (object[target.mineralType] || 0) + _amount)); var _sum = utils.calcResources(object); if (_sum > object.energyCapacity) { require('./drop')(object, { amount: Math.min(object[target.mineralType], _sum - object.energyCapacity), resourceType: target.mineralType }, roomObjects, roomTerrain, bulk); } object.actionLog.harvest = { x: target.x, y: target.y }; extractor._cooldown = C.EXTRACTOR_COOLDOWN; } } }; //# sourceMappingURL=../../../sourcemaps/processor/intents/creeps/harvest.js.map