-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrole.defender.js
67 lines (65 loc) · 3.15 KB
/
role.defender.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
var roleDefender = {
run: function (creep) {
var attack_targets = creep.room.find(FIND_HOSTILE_CREEPS);
var attack_target = creep.pos.findClosestByPath(attack_targets);
var rampartsAvailable = _.filter(creep.room.find(FIND_STRUCTURES), (s) => s.structureType === STRUCTURE_RAMPART && s.room.lookForAt(LOOK_CREEPS, s.pos).length === 0);
var closestRampart = creep.pos.findClosestByPath(rampartsAvailable);
let closest_rampart_to_defender = creep.pos.findClosestByPath(creep.room.find(FIND_STRUCTURES, s => s.structureType === STRUCTURE_RAMPART))
// If enemies in room -> set memory attacking to true
if (attack_targets.length > 0) {
creep.memory.attacking = true;
}
else {
creep.memory.attacking = false;
}
// TO DO set last known location into memory as place to go if no enemies in room
if (creep.memory.attacking) {
if (creep.attack(attack_target) === ERR_NOT_IN_RANGE) {
creep.moveTo(attack_target, { visualizePathStyle: { stroke: '#ff0051' } });
console.log('Attacker Creep: ' + creep.name + ' is attacking ' + attack_target.name + ' in room: ' + creep.room.name)
}
if (rampartsAvailable.length > 0 && creep.pos != closestRampart.pos || creep.pos != closest_rampart_to_defender.pos) {
creep.moveTo(closestRampart);
}
else if (rampartsAvailable.length === 0) {
//creep.say("No Ramparts Available!")
}
//if(creep.pos === closestRampart.pos){
// creep.attack(attack_target);
//}
}
// If memory attacking not true
else {
// If creep has targetRampart in memory
if (creep.memory.targetRampart) {
console.log('debuuug')
let targetRampart = Game.getObjectById(creep.memory.targetRampart)
// If creep on targetRampat -> delete targetRampart memory and set inPlace to be true!
if (creep.pos.x === targetRampart.pos.x && creep.pos.y === targetRampart.pos.y) {
console.log('[DEBUG] role.defender test msg')
delete creep.memory.targetRampart;
creep.memory.inPlace = true;
}
else if (creep.room.lookForAt(LOOK_CREEPS, targetRampart.pos).length > 0) {
delete creep.memory.targetRampart
}
else {
creep.moveTo(targetRampart);
}
}
else {
if (creep.memory.inPlace) {
if (creep.room.lookForAt(LOOK_STRUCTURES, creep.pos)) {
//creep.say('holding pos')
}
}
if (!creep.memory.inPlace) {
if (rampartsAvailable.length > 0) {
creep.memory.targetRampart = creep.pos.findClosestByPath(rampartsAvailable).id;
}
}
}
}
}
};
module.exports = roleDefender;