/* ##################################### # Controls the way creeps are spawn # #####################################*/ var GLOBAL = require("GLOBAL_VARIABLES"); module.exports = { run: function(){ for(var sp in Game.spawns){ sp = Game.spawns[sp] // values var creep_count = 0 for(var cr in Game.creeps){ if(Game.creeps[cr].room.name == sp.room.name) creep_count += 1; } var source_count = 0; if(sp.memory.sources_ids != undefined) source_count = sp.memory.sources_ids.length; // Memory setup if(sp.memory.creep_iterate == undefined) sp.memory.creep_iterate = 0; if(sp.memory.sources_ids == undefined){ sp.memory.sources_ids = []; var sources = sp.room.find(FIND_SOURCES); for(var source in sources){ source = sources[source]; sp.memory.sources_ids.push(source.id); } source_count = sp.memory.sources_ids.length; } if(sp.memory.containers_ids == undefined || sp.memory.containers_ids.length != source_count){ sp.memory.containers_ids = []; var containers = sp.room.find(FIND_STRUCTURES, { filter:{ structureType: STRUCTURE_CONTAINER }}); if(containers.length > 0){ for(let i=0;i= source_count && sp.room.energyCapacityAvailable >= 550 && creep_count > source_count ){ // Miner method: Miners fille containers rest picks up from them // Check current creep_jobs var jobs = { miner: 0, supplier: 0, builder: 0, upgrader: 0, defender: 0}; var container_id = sp.memory.containers_ids[0]; for(var creep in Game.creeps){ var creep = Game.creeps[creep]; if(creep.room.name != sp.room.name) continue; switch (creep.memory.role) { case GLOBAL.JOB_MINER: jobs.miner += 1; for(let i=0;i= 550) create_miner(sp, container_id); } else if(jobs.supplier < source_count * 15 && sp.room.energyAvailable >= 300 && jobs.miner > 0) create_supplier(sp); else if(jobs.builder < source_count * 5 && sp.room.energyAvailable >= 300 && jobs.miner > 0) create_builder(sp); else if(jobs.upgrader < source_count * 5 && sp.room.energyAvailable >= 300 && jobs.miner > 0) create_upgrader(sp); else if(jobs.defender < 0 && sp.room.energyAvailable >= sp.room.energyCapacityAvailable*0.8 && jobs.miner > 0) create_defender(sp); } else { // Harvesting method: everybody mines own sources if (sp.room.find(FIND_MY_CREEPS).length < source_count * 5 && sp.room.energyAvailable >= 300){ var source_id = sp.memory.sources_ids[sp.memory.creep_iterate % source_count]; create_harvester(sp, source_id); } } } } }; function create_harvester(sp, source_id){ var body = []; for(let i=0;i (source)3000energy/300tick=10energy/tick var name = "Mindy"+sp.memory.creep_iterate; sp.spawnCreep( body, name, { memory: {role: GLOBAL.JOB_MINER, container_id: container_id}}); sp.memory.creep_iterate += 1; } function create_supplier(sp){ var body = [WORK]; for(let i=0;i