Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var spawnUtility = require("utility.spawner");
- var util = require("utility.functions");
- function getOptimalBody(spawn) {
- var body = [];
- var stats = spawnUtility.getSpawnStats(spawn);
- if (stats.parts == 3) {
- return [MOVE, CARRY, WORK];
- }
- for (var i = 0; i <= 25; i++) {
- body.push(MOVE);
- body.push(CARRY);
- body.push(WORK);
- body.push(MOVE);
- }
- while (spawnUtility.getBodyCost(body) > stats.energy || body.length > stats.parts) {
- body.pop();
- body.pop();
- }
- return body;
- }
- function createCreep(spawn) {
- var body = getOptimalBody(spawn);
- var result = spawn.createCreep(body, null, {
- room: spawn.room.name,
- job: "builder"
- });
- if (result === 0) {
- return true;
- } else if (result === -10) {
- Game.notify("Error! Creep spawning failed with invalid body! " + JSON.stringify(body));
- }
- };
- module.exports.spawnTick = function(room) {
- var spawns = room.find(FIND_MY_SPAWNS);
- var builders = 0;
- if (spawns.length !== 0) {
- var creeps = [];
- for (creepName in Game.creeps) {
- if (Game.creeps[creepName].memory.room == room.name) {
- creeps.push(Game.creeps[creepName]);
- if (Game.creeps[creepName].memory.job == "builder") {
- builders++;
- }
- }
- }
- var spawns = room.find(FIND_MY_SPAWNS);
- if (builders < 2) {
- createCreep(spawns[0]);
- return true;
- }
- }
- return false;
- };
- module.exports.tickCreep = function(creep) {
- if (creep.memory.waitTicks) {
- creep.memory.waitTicks = creep.memory.waitTicks - 1;
- return;
- }
- if (creep.carry.energy < 5) {
- if (!creep.memory.container) {
- if (!creep.room.memory.energySources) { return; }
- var source = creep.room.memory.energySources[Math.floor(Math.random() * creep.room.memory.energySources.length)];
- creep.memory.container = {
- x: source.container.x,
- y: source.container.y,
- id: source.container.id
- };
- }
- if (util.distance(creep.memory.container.x, creep.memory.container.y, creep.pos.x, creep.pos.y) < 2) {
- var container = Game.getObjectById(creep.memory.container.id);
- if (container) {
- container.transfer(creep, RESOURCE_ENERGY);
- } else {
- var target = creep.pos.findClosestByRange(FIND_DROPPED_ENERGY);
- creep.pickup(target);
- }
- } else {
- creep.moveTo(creep.memory.container.x, creep.memory.container.y);
- }
- } else {
- creep.memory.container = null;
- var target;
- if (creep.memory.buildTarget) {
- target = Game.getObjectById(creep.memory.buildTarget.id);
- if (!target) {
- creep.memory.buildTarget = null;
- }
- }
- if (!creep.memory.buildTarget) {
- var targets = creep.room.find(FIND_MY_CONSTRUCTION_SITES);
- if(targets.length > 0) {
- creep.memory.buildTarget = {
- x: targets[0].pos.x,
- y: targets[0].pos.y,
- id: targets[0].id,
- };
- target = targets[0];
- } else {
- creep.memory.waitTicks = 10;
- return;
- }
- }
- if (util.distance(creep.memory.buildTarget.x, creep.memory.buildTarget.y, creep.pos.x, creep.pos.y) <= 3) {
- creep.build(target);
- } else {
- creep.moveTo(creep.memory.buildTarget.x, creep.memory.buildTarget.y);
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement