-
Notifications
You must be signed in to change notification settings - Fork 1
/
creeps.extracter.js
81 lines (63 loc) · 3.02 KB
/
creeps.extracter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
var utils = require('./opts.utils');
var voteomat = require('./opts.voteomat');
var _ = require('lodash');
var behaviours = require('./creeps.behaviours');
module.exports = {
run: function(creep) {
// TODO: Build container
if(creep.memory.target == undefined){
var extracters = _.filter(Game.creeps, (creep) => creep.memory.roleId == 'extracter' && creep.memory.target != undefined);
// This should check if the flag is actually red
// && source.pos.findInRange(FIND_FLAGS, 8).length == 0
let sources = creep.room.find(FIND_SOURCES).filter(function(source) {
return source.pos.findInRange(FIND_HOSTILE_CREEPS, 8).length == 0;
});
let sourceExtracterCount = {};
for(let s in sources){
if(sourceExtracterCount[sources[s].id] == undefined)
sourceExtracterCount[sources[s].id] = 0;
}
for(let e in extracters){
sourceExtracterCount[extracters[e].memory.target] ;
}
let lowestId = {id:undefined, count:99999999};
for(let id in sourceExtracterCount)
{
if(sourceExtracterCount[id] < lowestId.count){
lowestId.count = sourceExtracterCount[id];
lowestId.id = id;
}
}
var winner = Game.getObjectById(lowestId.id);
let containers = winner.pos.findInRange(FIND_STRUCTURES, 2).filter(function(structure) {
return structure.structureType == STRUCTURE_CONTAINER;
});
let container = containers[0];
if(container != null){
creep.memory.targetPos = JSON.stringify({x: container.pos.x, y:container.pos.y, roomName: container.pos.roomName});
console.log("Setting target pos for extracter")
}
creep.memory.target = lowestId.id;
}
var assignedSource = Game.getObjectById(creep.memory.target);
if(creep.memory.targetPos != undefined){
let targetPos = JSON.parse(creep.memory.targetPos);
if(creep.pos.x == targetPos.x && creep.pos.y == targetPos.y){
delete creep.memory.targetPos;
} else {
let tp = new RoomPosition(targetPos.x, targetPos.y, targetPos.roomName);
creep.travelTo(tp, {visualizePathStyle: {stroke: '#ffaa00'}, maxRooms: 5});
}
return;
}
var result = creep.harvest(assignedSource);
if(result == ERR_NOT_IN_RANGE) {
voteomat.voteRoad(creep);
creep.travelTo(assignedSource.pos, {visualizePathStyle: {stroke: '#ffaa00'}, maxRooms: 1});
}
if(creep.carryCapacity != 0 && _.sum(creep.carry) == creep.carryCapacity){
if(behaviours.bringResourcesToContainers(creep, 3) == false)
behaviours.dropEverything(creep);
}
}
};