Advertisement
Guest User

Builder Code

a guest
Jun 24th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.34 KB | None | 0 0
  1. var spawnUtility = require("utility.spawner");
  2. var util = require("utility.functions");
  3.  
  4. function getOptimalBody(spawn) {
  5.   var body = [];
  6.   var stats = spawnUtility.getSpawnStats(spawn);
  7.  
  8.   if (stats.parts == 3) {
  9.     return [MOVE, CARRY, WORK];
  10.   }
  11.  
  12.   for (var i = 0; i <= 25; i++) {
  13.     body.push(MOVE);
  14.     body.push(CARRY);
  15.     body.push(WORK);
  16.     body.push(MOVE);
  17.   }
  18.  
  19.  
  20.   while (spawnUtility.getBodyCost(body) > stats.energy || body.length > stats.parts) {
  21.     body.pop();
  22.     body.pop();
  23.   }
  24.  
  25.   return body;
  26. }
  27.  
  28. function createCreep(spawn) {
  29.   var body = getOptimalBody(spawn);
  30.  
  31.   var result = spawn.createCreep(body, null, {
  32.     room: spawn.room.name,
  33.     job: "builder"
  34.   });
  35.  
  36.   if (result === 0) {
  37.     return true;
  38.   } else if (result === -10) {
  39.     Game.notify("Error! Creep spawning failed with invalid body! " + JSON.stringify(body));
  40.   }
  41. };
  42.  
  43. module.exports.spawnTick = function(room) {
  44.   var spawns = room.find(FIND_MY_SPAWNS);
  45.   var builders = 0;
  46.   if (spawns.length !== 0) {
  47.  
  48.     var creeps = [];
  49.     for (creepName in Game.creeps) {
  50.       if (Game.creeps[creepName].memory.room == room.name) {
  51.         creeps.push(Game.creeps[creepName]);
  52.         if (Game.creeps[creepName].memory.job == "builder") {
  53.           builders++;
  54.         }
  55.       }
  56.     }
  57.  
  58.     var spawns = room.find(FIND_MY_SPAWNS);
  59.  
  60.     if (builders < 2) {
  61.       createCreep(spawns[0]);
  62.       return true;
  63.     }
  64.   }
  65.  
  66.   return false;
  67. };
  68.  
  69. module.exports.tickCreep = function(creep) {
  70.   if (creep.memory.waitTicks) {
  71.     creep.memory.waitTicks = creep.memory.waitTicks - 1;
  72.     return;
  73.   }
  74.  
  75.   if (creep.carry.energy < 5) {
  76.     if (!creep.memory.container) {
  77.       if (!creep.room.memory.energySources) { return; }
  78.  
  79.       var source = creep.room.memory.energySources[Math.floor(Math.random() * creep.room.memory.energySources.length)];
  80.       creep.memory.container = {
  81.         x: source.container.x,
  82.         y: source.container.y,
  83.         id: source.container.id
  84.       };
  85.  
  86.     }
  87.  
  88.     if (util.distance(creep.memory.container.x, creep.memory.container.y, creep.pos.x, creep.pos.y) < 2) {
  89.       var container = Game.getObjectById(creep.memory.container.id);
  90.       if (container) {
  91.         container.transfer(creep, RESOURCE_ENERGY);
  92.       } else {
  93.         var target = creep.pos.findClosestByRange(FIND_DROPPED_ENERGY);
  94.         creep.pickup(target);
  95.       }
  96.     } else {
  97.       creep.moveTo(creep.memory.container.x, creep.memory.container.y);
  98.     }
  99.   } else {
  100.  
  101.     creep.memory.container = null;
  102.  
  103.     var target;
  104.  
  105.     if (creep.memory.buildTarget) {
  106.       target = Game.getObjectById(creep.memory.buildTarget.id);
  107.       if (!target) {
  108.         creep.memory.buildTarget = null;
  109.       }
  110.     }
  111.  
  112.     if (!creep.memory.buildTarget) {
  113.       var targets = creep.room.find(FIND_MY_CONSTRUCTION_SITES);
  114.  
  115.       if(targets.length > 0) {
  116.         creep.memory.buildTarget = {
  117.           x: targets[0].pos.x,
  118.           y: targets[0].pos.y,
  119.           id: targets[0].id,
  120.         };
  121.  
  122.         target = targets[0];
  123.       } else {
  124.         creep.memory.waitTicks = 10;
  125.         return;
  126.       }
  127.     }
  128.  
  129.     if (util.distance(creep.memory.buildTarget.x, creep.memory.buildTarget.y, creep.pos.x, creep.pos.y) <= 3) {
  130.       creep.build(target);
  131.     } else {
  132.       creep.moveTo(creep.memory.buildTarget.x, creep.memory.buildTarget.y);
  133.     }
  134.  
  135.   }
  136. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement