171 lines
6.7 KiB
JavaScript
171 lines
6.7 KiB
JavaScript
|
|
/* #####################################
|
|
# 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<containers.length;i+=1){
|
|
sp.memory.containers_ids.push(containers[i].id);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Different spawning configurations
|
|
|
|
// Add improved versions at top of if-else statement
|
|
if(sp.memory.containers_ids.length >= 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<sp.memory.containers_ids.length;i++){
|
|
if(creep.memory.container_id != sp.memory.containers_ids[i]) container_id = sp.memory.containers_ids[i];
|
|
}
|
|
break;
|
|
case GLOBAL.JOB_SUPPLIER:
|
|
jobs.supplier += creep.body.length;
|
|
break;
|
|
case GLOBAL.JOB_BUILDER:
|
|
jobs.builder += creep.body.length;
|
|
break;
|
|
case GLOBAL.JOB_UPGRADER:
|
|
jobs.upgrader += creep.body.length;
|
|
break;
|
|
case GLOBAL.JOB_DEFENDER:
|
|
jobs.defender += 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
if(jobs.miner < source_count){
|
|
if(sp.room.energyAvailable >= 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<Math.floor(sp.room.energyAvailable/200);i++){
|
|
body.push(WORK);
|
|
body.push(CARRY);
|
|
body.push(MOVE);
|
|
}
|
|
var name = "Harvy"+sp.memory.creep_iterate;
|
|
sp.spawnCreep( body, name, { memory:
|
|
{role: GLOBAL.JOB_HARVESTER, source_id: source_id}});
|
|
sp.memory.creep_iterate += 1;
|
|
}
|
|
|
|
function create_miner(sp, container_id){
|
|
var body = [ WORK, WORK, WORK, WORK, WORK, MOVE ]; // (creep)5*work(2energy/tick)=10energy/tick -> (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<Math.floor(sp.room.energyAvailable/100)-1 && i < 8;i++){ // as big as possible
|
|
body.push(CARRY);
|
|
body.push(MOVE);
|
|
}
|
|
var name = "Suppry"+sp.memory.creep_iterate;
|
|
sp.spawnCreep( body, name, { memory:
|
|
{role: GLOBAL.JOB_SUPPLIER}});
|
|
sp.memory.creep_iterate += 1;
|
|
}
|
|
|
|
function create_builder(sp){
|
|
var body = [];
|
|
|
|
for(let i=0;i<Math.floor(sp.room.energyAvailable/200);i++){ // as big as possible
|
|
body.push(CARRY);
|
|
body.push(MOVE);
|
|
body.push(WORK);
|
|
}
|
|
var name = "Bobby"+sp.memory.creep_iterate;
|
|
sp.spawnCreep( body, name, { memory:
|
|
{role: GLOBAL.JOB_BUILDER}});
|
|
sp.memory.creep_iterate += 1;
|
|
}
|
|
|
|
function create_upgrader(sp){
|
|
var body = [];
|
|
|
|
for(let i=0;i<Math.floor(sp.room.energyAvailable/300);i++){ // as big as possible
|
|
body.push(CARRY);
|
|
body.push(MOVE);
|
|
body.push(WORK);
|
|
body.push(WORK);
|
|
}
|
|
var name = "Undy"+sp.memory.creep_iterate;
|
|
sp.spawnCreep( body, name, { memory:
|
|
{role: GLOBAL.JOB_UPGRADER}});
|
|
sp.memory.creep_iterate += 1;
|
|
}
|
|
|
|
function create_defender(sp){
|
|
var body = [];
|
|
|
|
for(let i=0;i<Math.floor(sp.room.energyAvailable/150);i++){ // as big as possible
|
|
body.push(TOUGH);
|
|
body.push(TOUGH);
|
|
body.push(ATTACK);
|
|
body.push(MOVE);
|
|
}
|
|
var name = "Destroyer CODE"+sp.memory.creep_iterate;
|
|
sp.spawnCreep( body, name, { memory:
|
|
{role: GLOBAL.JOB_DEFENDER}});
|
|
sp.memory.creep_iterate += 1;
|
|
} |