fix line endings, and dealt with tower logic
This commit is contained in:
parent
ed4c5eb67f
commit
856706ae28
107
battle.js
107
battle.js
@ -1,55 +1,52 @@
|
||||
// usernames are all lowercase, we compare with to lower
|
||||
var USERNAME_WHITELIST = ['chrisinajar', 'ho0ber', 'fractaloop', 'n7-anthony', 'overra', 'tyrel', 'fervens'];
|
||||
|
||||
module.exports = {
|
||||
findEnemy: findEnemy,
|
||||
run: run
|
||||
};
|
||||
|
||||
/*
|
||||
var target = findEnemy(creep);
|
||||
*/
|
||||
function findEnemy (creep) {
|
||||
var targets = creep.room.find(FIND_HOSTILE_CREEPS, {
|
||||
filter: (c) => {
|
||||
return (USERNAME_WHITELIST.indexOf(c.owner.username.toLowerCase()) === -1);
|
||||
}
|
||||
});
|
||||
if (!targets.length) {
|
||||
return creep.room.controller;
|
||||
}
|
||||
return creep.pos.findClosestByPath(targets);
|
||||
}
|
||||
|
||||
function run (creep) {
|
||||
var target = findEnemy(creep);
|
||||
if (!target) {
|
||||
target = findWall(creep);
|
||||
// getDirectionTo
|
||||
if (!creep.pos.isNearTo(target)) {
|
||||
return creep.moveTo(target);
|
||||
} else {
|
||||
creep.attack(target);
|
||||
}
|
||||
var direction = creep.pos.getDirectionTo(target);
|
||||
creep.memory.wallDirection = direction;
|
||||
} else {
|
||||
creep.moveTo(target);
|
||||
creep.attack(target);
|
||||
}
|
||||
}
|
||||
|
||||
function findWall (creep) {
|
||||
var targets = creep.room.find(FIND_STRUCTURES, {
|
||||
filter: function(object) {
|
||||
if (object.my) {
|
||||
return false;
|
||||
}
|
||||
if (object.structureType !== STRUCTURE_TOWER && object.structureType !== STRUCTURE_WALL) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return creep.pos.findClosestByPath(targets);
|
||||
}
|
||||
// usernames are all lowercase, we compare with to lower
|
||||
var USERNAME_WHITELIST = ['chrisinajar', 'ho0ber', 'fractaloop', 'n7-anthony', 'overra', 'tyrel', 'fervens'];
|
||||
|
||||
module.exports = {
|
||||
findEnemy: findEnemy,
|
||||
run: run
|
||||
};
|
||||
|
||||
function findEnemy (searcher) {
|
||||
var targets = searcher.room.find(FIND_HOSTILE_CREEPS, {
|
||||
filter: (c) => {
|
||||
return (USERNAME_WHITELIST.indexOf(c.owner.username.toLowerCase()) === -1);
|
||||
}
|
||||
});
|
||||
if (!targets.length) {
|
||||
return searcher.room.controller;
|
||||
}
|
||||
return searcher.pos.findClosestByPath(targets);
|
||||
}
|
||||
|
||||
function run (creep) {
|
||||
var target = findEnemy(creep);
|
||||
if (!target) {
|
||||
target = findWall(creep);
|
||||
// getDirectionTo
|
||||
if (!creep.pos.isNearTo(target)) {
|
||||
return creep.moveTo(target);
|
||||
} else {
|
||||
creep.attack(target);
|
||||
}
|
||||
var direction = creep.pos.getDirectionTo(target);
|
||||
creep.memory.wallDirection = direction;
|
||||
} else {
|
||||
creep.moveTo(target);
|
||||
creep.attack(target);
|
||||
}
|
||||
}
|
||||
|
||||
function findWall (creep) {
|
||||
var targets = creep.room.find(FIND_STRUCTURES, {
|
||||
filter: function(object) {
|
||||
if (object.my) {
|
||||
return false;
|
||||
}
|
||||
if (object.structureType !== STRUCTURE_TOWER && object.structureType !== STRUCTURE_WALL) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return creep.pos.findClosestByPath(targets);
|
||||
}
|
||||
|
30
helpers.js
30
helpers.js
@ -1,16 +1,16 @@
|
||||
var helpers = {
|
||||
generateName: function(role){
|
||||
return role + '_xxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
},
|
||||
getLastFlag: function(flagName){
|
||||
return _(Object.keys(Game.flags))
|
||||
.filter((f) => f.startsWith(flagName))
|
||||
.map((f) => f.slice(flagName.length))
|
||||
.max();
|
||||
},
|
||||
};
|
||||
|
||||
var helpers = {
|
||||
generateName: function(role){
|
||||
return role + '_xxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
},
|
||||
getLastFlag: function(flagName){
|
||||
return _(Object.keys(Game.flags))
|
||||
.filter((f) => f.startsWith(flagName))
|
||||
.map((f) => f.slice(flagName.length))
|
||||
.max();
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = helpers;
|
148
main.js
148
main.js
@ -1,74 +1,74 @@
|
||||
var roleHarvester = require('role.harvester');
|
||||
var roleUpgrader = require('role.upgrader');
|
||||
var roleBuilder = require('role.builder');
|
||||
var roleGuard = require('role.guard');
|
||||
var helpers = require('helpers');
|
||||
|
||||
var creepRolePriority = ['harvester', 'builder', 'upgrader', 'guard'];
|
||||
var creepsConfig = {
|
||||
harvester: {
|
||||
bodyParts: [WORK, CARRY, MOVE, MOVE, MOVE],
|
||||
minimumCreeps: 3,
|
||||
role: roleHarvester
|
||||
},
|
||||
builder: {
|
||||
bodyParts: [WORK, CARRY, MOVE, MOVE],
|
||||
minimumCreeps: 2,
|
||||
role: roleBuilder
|
||||
},
|
||||
upgrader: {
|
||||
bodyParts: [WORK, CARRY, CARRY, MOVE, MOVE],
|
||||
minimumCreeps: 6,
|
||||
role: roleUpgrader
|
||||
},
|
||||
guard: {
|
||||
bodyParts: [TOUGH, MOVE, ATTACK, MOVE, ATTACK],
|
||||
minimumCreeps: 3,
|
||||
role: roleGuard,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
module.exports.loop = function(){
|
||||
console.log(' ');
|
||||
// Cleanup Creeps
|
||||
for (var name in Memory.creeps){
|
||||
if (!Game.creeps[name]){
|
||||
delete Memory.creeps[name];
|
||||
console.log('Cleaning non-existing creep memory:', name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Refactor some similar behavior for all roles
|
||||
for (var i in creepRolePriority){
|
||||
var roleName = creepRolePriority[i];
|
||||
var defaults = creepsConfig[roleName];
|
||||
|
||||
let creepsOfKind = _.filter(Game.creeps, (creep) => {return creep.memory.role == roleName});
|
||||
if (creepsOfKind.length < defaults.minimumCreeps){
|
||||
var newName = Game.spawns.Spawn1.createCreep(defaults.bodyParts,
|
||||
helpers.generateName(roleName), // Make names show the roles. Change me to undefined if this gets annoying.
|
||||
{role: roleName});
|
||||
if(newName == ERR_NOT_ENOUGH_ENERGY){
|
||||
console.log('not enough resources to spawn');
|
||||
} else {
|
||||
console.log('Spawning', newName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Run stuff for each creep
|
||||
var roleCounts = {harvester: 0, builder: 0, upgrader: 0, guard: 0};
|
||||
var expected = _(creepsConfig).mapValues('minimumCreeps');
|
||||
|
||||
for (var name in Game.creeps){
|
||||
var creep = Game.creeps[name];
|
||||
var role = creep.memory.role;
|
||||
roleCounts[role] += 1;
|
||||
creepsConfig[role].role.run(creep);
|
||||
}
|
||||
console.log('current\t', JSON.stringify(roleCounts));
|
||||
console.log('expect\t', JSON.stringify(expected));
|
||||
console.log('#############################################################');
|
||||
};
|
||||
var roleHarvester = require('role.harvester');
|
||||
var roleUpgrader = require('role.upgrader');
|
||||
var roleBuilder = require('role.builder');
|
||||
var roleGuard = require('role.guard');
|
||||
var helpers = require('helpers');
|
||||
|
||||
var creepRolePriority = ['harvester', 'builder', 'upgrader', 'guard'];
|
||||
var creepsConfig = {
|
||||
harvester: {
|
||||
bodyParts: [WORK, CARRY, MOVE, MOVE, MOVE],
|
||||
minimumCreeps: 4,
|
||||
role: roleHarvester
|
||||
},
|
||||
builder: {
|
||||
bodyParts: [WORK, CARRY, MOVE, MOVE],
|
||||
minimumCreeps: 4,
|
||||
role: roleBuilder
|
||||
},
|
||||
upgrader: {
|
||||
bodyParts: [WORK, CARRY, CARRY, MOVE, MOVE],
|
||||
minimumCreeps: 4,
|
||||
role: roleUpgrader
|
||||
},
|
||||
guard: {
|
||||
bodyParts: [TOUGH, MOVE, ATTACK, MOVE, ATTACK],
|
||||
minimumCreeps: 4,
|
||||
role: roleGuard,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
module.exports.loop = function(){
|
||||
console.log(' ');
|
||||
// Cleanup Creeps
|
||||
for (var name in Memory.creeps){
|
||||
if (!Game.creeps[name]){
|
||||
delete Memory.creeps[name];
|
||||
console.log('Cleaning non-existing creep memory:', name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Refactor some similar behavior for all roles
|
||||
for (var i in creepRolePriority){
|
||||
var roleName = creepRolePriority[i];
|
||||
var defaults = creepsConfig[roleName];
|
||||
|
||||
let creepsOfKind = _.filter(Game.creeps, (creep) => {return creep.memory.role == roleName});
|
||||
if (creepsOfKind.length < defaults.minimumCreeps){
|
||||
var newName = Game.spawns.Spawn1.createCreep(defaults.bodyParts,
|
||||
helpers.generateName(roleName), // Make names show the roles. Change me to undefined if this gets annoying.
|
||||
{role: roleName});
|
||||
if(newName == ERR_NOT_ENOUGH_ENERGY){
|
||||
console.log('not enough resources to spawn');
|
||||
} else {
|
||||
console.log('Spawning', newName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Run stuff for each creep
|
||||
var roleCounts = {harvester: 0, builder: 0, upgrader: 0, guard: 0};
|
||||
var expected = _(creepsConfig).mapValues('minimumCreeps');
|
||||
|
||||
for (var name in Game.creeps){
|
||||
var creep = Game.creeps[name];
|
||||
var role = creep.memory.role;
|
||||
roleCounts[role] += 1;
|
||||
creepsConfig[role].role.run(creep);
|
||||
}
|
||||
console.log('current\t', JSON.stringify(roleCounts));
|
||||
console.log('expect\t', JSON.stringify(expected));
|
||||
console.log('#############################################################');
|
||||
};
|
||||
|
@ -1,28 +1,28 @@
|
||||
var BreakException= {};
|
||||
|
||||
var roleBuilder = {
|
||||
run: function(creep){
|
||||
if(creep.memory.building && creep.carry.energy == 0){
|
||||
creep.memory.building = false;
|
||||
}
|
||||
if (!creep.memory.building && creep.carry.energy == creep.carryCapacity){
|
||||
creep.memory.building = true;
|
||||
}
|
||||
if (creep.memory.building){
|
||||
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
|
||||
|
||||
var transferErrorCode = creep.build(targets[0]);
|
||||
if(transferErrorCode == ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(targets[0]);
|
||||
}
|
||||
} else {
|
||||
var sources = creep.room.find(FIND_SOURCES);
|
||||
if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE){
|
||||
creep.moveTo(sources[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
module.exports = roleBuilder;
|
||||
var BreakException= {};
|
||||
|
||||
var roleBuilder = {
|
||||
run: function(creep){
|
||||
if(creep.memory.building && creep.carry.energy == 0){
|
||||
creep.memory.building = false;
|
||||
}
|
||||
if (!creep.memory.building && creep.carry.energy == creep.carryCapacity){
|
||||
creep.memory.building = true;
|
||||
}
|
||||
if (creep.memory.building){
|
||||
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
|
||||
|
||||
var transferErrorCode = creep.build(targets[0]);
|
||||
if(transferErrorCode == ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(targets[0]);
|
||||
}
|
||||
} else {
|
||||
var sources = creep.room.find(FIND_SOURCES);
|
||||
if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE){
|
||||
creep.moveTo(sources[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
module.exports = roleBuilder;
|
||||
|
@ -1,32 +1,32 @@
|
||||
var roleHarvester = {
|
||||
|
||||
/** @param {Creep} creep **/
|
||||
run: function(creep) {
|
||||
console.log(creep, 'running Harvest');
|
||||
if(creep.carry.energy < creep.carryCapacity) {
|
||||
var source = creep.pos.findClosestByPath(FIND_SOURCES);
|
||||
if(creep.harvest(source) == ERR_NOT_IN_RANGE) {
|
||||
console.log('\tmoving to', source);
|
||||
creep.moveTo(source);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var targets = creep.room.find(FIND_STRUCTURES, {
|
||||
filter: (structure) => {
|
||||
return (structure.structureType == STRUCTURE_EXTENSION
|
||||
|| structure.structureType == STRUCTURE_SPAWN
|
||||
|| structure.structureType == STRUCTURE_TOWER
|
||||
) && structure.energy < structure.energyCapacity;
|
||||
}
|
||||
});
|
||||
if(targets.length > 0) {
|
||||
if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||
console.log('\tmoving to', targets[0]);
|
||||
creep.moveTo(targets[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var roleHarvester = {
|
||||
|
||||
/** @param {Creep} creep **/
|
||||
run: function(creep) {
|
||||
console.log(creep, 'running Harvest');
|
||||
if(creep.carry.energy < creep.carryCapacity) {
|
||||
var source = creep.pos.findClosestByPath(FIND_SOURCES);
|
||||
if(creep.harvest(source) == ERR_NOT_IN_RANGE) {
|
||||
console.log('\tmoving to', source);
|
||||
creep.moveTo(source);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var targets = creep.room.find(FIND_STRUCTURES, {
|
||||
filter: (structure) => {
|
||||
return (structure.structureType == STRUCTURE_EXTENSION
|
||||
|| structure.structureType == STRUCTURE_SPAWN
|
||||
|| structure.structureType == STRUCTURE_TOWER
|
||||
) && structure.energy < structure.energyCapacity;
|
||||
}
|
||||
});
|
||||
if(targets.length > 0) {
|
||||
if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||
console.log('\tmoving to', targets[0]);
|
||||
creep.moveTo(targets[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = roleHarvester;
|
@ -1,26 +1,26 @@
|
||||
var roleUpgrader = {
|
||||
|
||||
/** @param {Creep} creep **/
|
||||
run: function(creep) {
|
||||
if(creep.memory.upgrading && creep.carry.energy == 0) {
|
||||
creep.memory.upgrading = false;
|
||||
}
|
||||
if(!creep.memory.upgrading && creep.carry.energy == creep.carryCapacity) {
|
||||
creep.memory.upgrading = true;
|
||||
}
|
||||
|
||||
if(creep.memory.upgrading) {
|
||||
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(creep.room.controller);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var source = creep.pos.findClosestByPath(FIND_SOURCES);
|
||||
if(creep.harvest(source) == ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(source);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var roleUpgrader = {
|
||||
|
||||
/** @param {Creep} creep **/
|
||||
run: function(creep) {
|
||||
if(creep.memory.upgrading && creep.carry.energy == 0) {
|
||||
creep.memory.upgrading = false;
|
||||
}
|
||||
if(!creep.memory.upgrading && creep.carry.energy == creep.carryCapacity) {
|
||||
creep.memory.upgrading = true;
|
||||
}
|
||||
|
||||
if(creep.memory.upgrading) {
|
||||
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(creep.room.controller);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var source = creep.pos.findClosestByPath(FIND_SOURCES);
|
||||
if(creep.harvest(source) == ERR_NOT_IN_RANGE) {
|
||||
creep.moveTo(source);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = roleUpgrader;
|
38
structure.tower.js
Normal file
38
structure.tower.js
Normal file
@ -0,0 +1,38 @@
|
||||
var battle = require('battle')
|
||||
//var helpers = require('helpers');
|
||||
|
||||
var structureTower= {
|
||||
run: function(structure){
|
||||
this.structure = structure;
|
||||
console.log(structure, 'running Tower')
|
||||
|
||||
var target = battle.findEnemy(this.structure);
|
||||
|
||||
if(target != structure.room.controller) {
|
||||
console.log('\t', this.structure, 'attacking:',target)
|
||||
this.structure.attack(target);
|
||||
} else {
|
||||
var damagedStructure = this.findDamagedStructure();
|
||||
if(damagedStructure){
|
||||
console.log("repairing", damagedStructure);
|
||||
this.structure.repair(damagedStructure);
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
findDamagedStructure: function(searcher){
|
||||
var targets = searcher.room.find(FIND_STRUCTURES, {
|
||||
filter: function(s){
|
||||
if(s.structureType == STRUCTURE_TOWER){
|
||||
return false;
|
||||
}
|
||||
if (s.hits < s.hitsMax){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return searcher.pos.findClosestByPath(targets);
|
||||
}
|
||||
}
|
||||
module.exports = structureTower;
|
Loading…
Reference in New Issue
Block a user