-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbehaviors.js
More file actions
135 lines (116 loc) · 4.22 KB
/
behaviors.js
File metadata and controls
135 lines (116 loc) · 4.22 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
var overseer = require('overseer');
var types = require('types');
var builder = function(creep) {
if (creep.carry.energy == 0) {
availc = overseer.get_creeps()
for (var index in types.creep_types) {
var ctype = types.creep_types[index];
if (availc[ctype.role_name] < ctype.target_count) {
return;
}
}
var closest_spawn = creep.pos.findClosestByRange(FIND_MY_SPAWNS)
if (closest_spawn.transferEnergy(creep) == ERR_NOT_IN_RANGE) {
creep.moveTo(closest_spawn);
}
} else {
var closest_build = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES)
if (closest_build) {
if (creep.build(closest_build) == ERR_NOT_IN_RANGE) {
creep.moveTo(closest_build);
}
} else {
var roadToRepair = creep.pos.findClosestByRange(FIND_STRUCTURES, { //can be opti
filter: function(object) {
return object.structureType != STRUCTURE_RAMPART && (object.hits < object.hitsMax / 2) && (object.structureType == STRUCTURE_WALL && object.hits < 50000);
}
});
if (roadToRepair) {
if (creep.repair(roadToRepair) == ERR_NOT_IN_RANGE) {
creep.moveTo(roadToRepair);
}
}
}
}
}
var guard = function(creep) {
var target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS)
if (target) {
if (creep.attack(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
} else {
for (var name in Game.flags) {
var flag = Game.flags[name];
if (flag.color == COLOR_YELLOW) {
creep.moveTo(flag);
break
}
}
}
}
var janator = function(creep) {
var room_controller = creep.room.controller
var at_controller = creep.pos.isNearTo(creep.room.controller)
//find the mine which is closest to the controller and remember it
if (typeof(creep.memory.source) === 'undefined') {
creep.memory.source = room_controller.pos.findClosestByRange(FIND_SOURCES).id;
}
var closest_source = Game.getObjectById(creep.memory.source);
if (creep.carry.energy > 0 && at_controller) {
if (creep.upgradeController(room_controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(room_controller);
}
}
if (creep.carry.energy == creep.carryCapacity) {
if (creep.upgradeController(room_controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(room_controller);
}
}
if (creep.carry.energy == 0 && at_controller) {
if (creep.harvest(closest_source) == ERR_NOT_IN_RANGE) {
creep.moveTo(closest_source);
}
}
if (creep.carry.energy < creep.carryCapacity && !at_controller) {
if (creep.harvest(closest_source) == ERR_NOT_IN_RANGE) {
creep.moveTo(closest_source);
}
}
}
//Get list of buildings and spawns able to store dank, spawn first then extensions
var get_nearest_storage = function(creep) {
var spawn = creep.pos.findClosestByRange(FIND_MY_SPAWNS)
if (spawn.energy < spawn.energyCapacity) {
return spawn
} else {
return struct = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, { //can be opti
filter: function(object) {
return object.structureType == STRUCTURE_EXTENSION && (object.energy < object.energyCapacity);
}
});
}
}
var miner = function(creep) {
if (typeof(creep.memory.source) === 'undefined') {
creep.memory.source = creep.pos.findClosestByRange(FIND_SOURCES).id;
}
if (creep.carry.energy < creep.carryCapacity) {
var closest_source = Game.getObjectById(creep.memory.source);
if (creep.harvest(closest_source) == ERR_NOT_IN_RANGE) {
creep.moveTo(closest_source);
}
} else {
var closest_store = get_nearest_storage(creep)
var result = creep.transfer(closest_store, RESOURCE_ENERGY);
if (result == ERR_NOT_IN_RANGE) {
creep.moveTo(closest_store);
}
}
}
exports.behavior = {
"Miner": miner,
"Guard": guard,
"Builder": builder,
"Janator": janator,
}