First commit
This commit is contained in:
commit
4b61534d6f
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.tern-project
|
||||||
|
ScreepsAutocomplete
|
37
main.js
Normal file
37
main.js
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
var roleDispatcher = require('role.dispatcher');
|
||||||
|
|
||||||
|
var creepCounts = {"harvester" : 3, "builder" : 1, "upgrader" : 2, "repairer" : 1};
|
||||||
|
|
||||||
|
module.exports.loop = function () {
|
||||||
|
|
||||||
|
for(var name in Memory.creeps) {
|
||||||
|
if(!Game.creeps[name]) {
|
||||||
|
delete Memory.creeps[name];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const [role, count] of Object.entries(creepCounts)){
|
||||||
|
var roleCreeps = _.filter(Game.creeps, (creep) => creep.memory.role == role);
|
||||||
|
|
||||||
|
if(roleCreeps.length < count && !Game.spawns['Moscow'].spawning) {
|
||||||
|
var newName = role + Game.time;
|
||||||
|
Game.spawns['Moscow'].spawnCreep([WORK,CARRY,MOVE], newName,
|
||||||
|
{memory: {role: role}});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Game.spawns['Moscow'].spawning) {
|
||||||
|
var spawningCreep = Game.creeps[Game.spawns['Moscow'].spawning.name];
|
||||||
|
Game.spawns['Moscow'].room.visual.text(
|
||||||
|
'🛠️' + spawningCreep.memory.role,
|
||||||
|
Game.spawns['Moscow'].pos.x + 1,
|
||||||
|
Game.spawns['Moscow'].pos.y,
|
||||||
|
{align: 'left', opacity: 0.8});
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var name in Game.creeps) {
|
||||||
|
var creep = Game.creeps[name];
|
||||||
|
roleDispatcher.runRole(creep);
|
||||||
|
}
|
||||||
|
}
|
29
role.builder.js
Normal file
29
role.builder.js
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
var energyUtils = require('utils.energy');
|
||||||
|
|
||||||
|
var roleBuilder = {
|
||||||
|
|
||||||
|
/** @param {Creep} creep **/
|
||||||
|
run: function(creep) {
|
||||||
|
|
||||||
|
if(creep.memory.building && creep.store[RESOURCE_ENERGY] == 0) {
|
||||||
|
creep.memory.building = false;
|
||||||
|
}
|
||||||
|
if(!creep.memory.building && creep.store.getFreeCapacity() == 0) {
|
||||||
|
creep.memory.building = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(creep.memory.building) {
|
||||||
|
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
|
||||||
|
if(targets.length) {
|
||||||
|
if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
energyUtils.gatherEnergy(creep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = roleBuilder;
|
23
role.dispatcher.js
Normal file
23
role.dispatcher.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
var roleHarvester = require('role.harvester');
|
||||||
|
var roleUpgrader = require('role.upgrader');
|
||||||
|
var roleBuilder = require('role.builder');
|
||||||
|
var roleRepairer = require('role.repairer');
|
||||||
|
|
||||||
|
const roleMap = {
|
||||||
|
harvester: roleHarvester,
|
||||||
|
upgrader: roleUpgrader,
|
||||||
|
builder: roleBuilder,
|
||||||
|
repairer: roleRepairer
|
||||||
|
};
|
||||||
|
|
||||||
|
function runRole(creep){
|
||||||
|
const role = roleMap[creep.memory.role];
|
||||||
|
|
||||||
|
if(role && typeof role.run === 'function'){
|
||||||
|
role.run(creep);
|
||||||
|
} else {
|
||||||
|
console.log('Unknown or underfied role: ' + creep.memory.role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { runRole };
|
21
role.guard.js
Normal file
21
role.guard.js
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
var energyUtils = require('utils.energy');
|
||||||
|
|
||||||
|
var roleHarvester = {
|
||||||
|
|
||||||
|
/** @param {Creep} creep **/
|
||||||
|
run: function(creep) {
|
||||||
|
if(creep.store.getFreeCapacity() > 0) {
|
||||||
|
var sources = creep.room.find(FIND_SOURCES);
|
||||||
|
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(!energyUtils.depositEnergy(creep)){
|
||||||
|
creep.moveTo(Game.flags.IdleArea);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = roleHarvester;
|
21
role.harvester.js
Normal file
21
role.harvester.js
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
var energyUtils = require('utils.energy');
|
||||||
|
|
||||||
|
var roleHarvester = {
|
||||||
|
|
||||||
|
/** @param {Creep} creep **/
|
||||||
|
run: function(creep) {
|
||||||
|
if(creep.store.getFreeCapacity() > 0) {
|
||||||
|
var sources = creep.room.find(FIND_SOURCES);
|
||||||
|
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(!energyUtils.depositEnergy(creep)){
|
||||||
|
creep.moveTo(Game.flags.IdleArea);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = roleHarvester;
|
36
role.repairer.js
Normal file
36
role.repairer.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
var energyUtils = require('utils.energy');
|
||||||
|
|
||||||
|
var roleRepairer = {
|
||||||
|
|
||||||
|
/** @param {Creep} creep **/
|
||||||
|
run: function(creep) {
|
||||||
|
|
||||||
|
if(creep.memory.building && creep.store[RESOURCE_ENERGY] == 0) {
|
||||||
|
creep.memory.building = false;
|
||||||
|
}
|
||||||
|
if(!creep.memory.building && creep.store.getFreeCapacity() == 0) {
|
||||||
|
creep.memory.building = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(creep.memory.building) {
|
||||||
|
var targets = creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure) => {
|
||||||
|
return structure.hitsMax - structure.hits > 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(targets.length > 0) {
|
||||||
|
if(creep.repair(targets[0]) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
creep.say("IDLE")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
energyUtils.gatherEnergy(creep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = roleRepairer;
|
27
role.upgrader.js
Normal file
27
role.upgrader.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
var roleUpgrader = {
|
||||||
|
|
||||||
|
/** @param {Creep} creep **/
|
||||||
|
run: function(creep) {
|
||||||
|
|
||||||
|
if(creep.memory.upgrading && creep.store[RESOURCE_ENERGY] == 0) {
|
||||||
|
creep.memory.upgrading = false;
|
||||||
|
}
|
||||||
|
if(!creep.memory.upgrading && creep.store.getFreeCapacity() == 0) {
|
||||||
|
creep.memory.upgrading = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(creep.memory.upgrading) {
|
||||||
|
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(creep.room.controller, {visualizePathStyle: {stroke: '#ffffff'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var sources = creep.room.find(FIND_SOURCES);
|
||||||
|
if(creep.harvest(sources[1]) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(sources[1], {visualizePathStyle: {stroke: '#ffaa00'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = roleUpgrader;
|
49
utils.energy.js
Normal file
49
utils.energy.js
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
var energyUtils = {
|
||||||
|
gatherEnergy : function(creep) {
|
||||||
|
var storage = creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure) => {
|
||||||
|
return (structure.structureType == STRUCTURE_CONTAINER) &&
|
||||||
|
structure.store.getUsedCapacity(RESOURCE_ENERGY) > 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/**
|
||||||
|
if(storage.length == 0){
|
||||||
|
storage = creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure) => {
|
||||||
|
return (structure.structureType == STRUCTURE_SPAWN) &&
|
||||||
|
structure.store.getUsedCapacity(RESOURCE_ENERGY) > 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
**/
|
||||||
|
if(creep.withdraw(storage[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(storage[0], {visualizePathStyle: {stroke: '#ffaa00'}});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
depositEnergy : function(creep) {
|
||||||
|
var targets = creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure) => {
|
||||||
|
return structure.structureType == STRUCTURE_SPAWN &&
|
||||||
|
structure.store.getUsedCapacity(RESOURCE_ENERGY) < 250;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(targets.length == 0){
|
||||||
|
targets = creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure) => {
|
||||||
|
return (structure.structureType == STRUCTURE_EXTENSION ||
|
||||||
|
structure.structureType == STRUCTURE_CONTAINER ||
|
||||||
|
structure.structureType == STRUCTURE_TOWER) &&
|
||||||
|
structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(targets.length > 0) {
|
||||||
|
if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return targets.length > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = energyUtils;
|
Loading…
Reference in a new issue