-
Notifications
You must be signed in to change notification settings - Fork 0
/
role.upgrader.js
78 lines (72 loc) · 2.77 KB
/
role.upgrader.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
var s = require('shared');
var getSource = function(creep) {
var sources = creep.room.find(FIND_STRUCTURES, {
filter: (structure) => {
return (structure.structureType == STRUCTURE_CONTAINER || structure.structureType == STRUCTURE_STORAGE) &&
structure.store[RESOURCE_ENERGY] >= creep.carryCapacity;
}
});
if (sources.length === 0) {
sources = creep.room.find(FIND_STRUCTURES, {
filter: (structure) => {
return (structure.structureType == STRUCTURE_EXTENSION || structure.structureType == STRUCTURE_SPAWN) &&
structure.energy >= creep.carryCapacity;
}
});
}
if (sources.length === 0) {
sources = creep.room.find(FIND_STRUCTURES, {
filter: (structure) => {
return (structure.structureType == STRUCTURE_CONTAINER || structure.structureType == STRUCTURE_STORAGE);
}
});
}
if (sources.length === 0) {
sources = creep.room.find(FIND_STRUCTURES, {
filter: (structure) => {
return (structure.structureType == STRUCTURE_EXTENSION || structure.structureType == STRUCTURE_SPAWN);
}
});
}
if (sources.length === 0) {
sources = creep.room.find(FIND_SOURCES);
}
if (sources.length === 0 ) {
console.log('upgrader lost');
creep.memory.role = 'defective';
return;
}
return creep.pos.findClosestByRange(sources);
};
var roleUpgrader = {
run: function(creep) {
var m = creep.memory;
if(m.upgrading && creep.carry.energy === 0) {
m.upgrading = false;
}
if(!m.upgrading && creep.carry.energy == creep.carryCapacity) {
m.upgrading = true;
}
if(m.upgrading) {
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller, {visualizePathStyle: {stroke: '#ffffff'}});
}
} else {
var err;
var source = getSource(creep);
if (source) {
if (source.structureType == STRUCTURE_CONTAINER || source.structureType == STRUCTURE_STORAGE || source.structureType == STRUCTURE_SPAWN || source.structureType == STRUCTURE_EXTENSION) {
err = creep.withdraw(source, RESOURCE_ENERGY);
} else if (source.energy > 0) {
err = creep.harvest(source);
} else {
err = source.transferEnergy(creep, creep.carryCapacity);
}
if(err == ERR_NOT_IN_RANGE) {
creep.moveTo(source, {visualizePathStyle: {stroke: '#ffaa00'}});
}
}
}
}
};
module.exports = roleUpgrader;