Adding source code to respository.
This commit is contained in:
183
spawns.js
Normal file
183
spawns.js
Normal file
@@ -0,0 +1,183 @@
|
||||
|
||||
/* #####################################
|
||||
# Controls the way creeps are spawn #
|
||||
#####################################*/
|
||||
|
||||
var roles = require("roles");
|
||||
|
||||
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 roles.ROLE_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 roles.ROLE_SUPPLIER:
|
||||
jobs.supplier += creep.body.length;
|
||||
break;
|
||||
case roles.ROLE_BUILDER:
|
||||
jobs.builder += creep.body.length;
|
||||
break;
|
||||
case roles.ROLE_UPGRADER:
|
||||
jobs.upgrader += creep.body.length;
|
||||
break;
|
||||
case roles.ROLE_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: roles.ROLE_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: roles.ROLE_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: roles.ROLE_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: roles.ROLE_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: roles.ROLE_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: roles.ROLE_DEFENDER }
|
||||
});
|
||||
sp.memory.creep_iterate += 1;
|
||||
}
|
||||
Reference in New Issue
Block a user