-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathActorRoomOffense.js
82 lines (66 loc) · 1.88 KB
/
ActorRoomOffense.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
82
"use strict";
let ActorWithMemory = require('ActorWithMemory');
module.exports = class ActorRoomOffense extends ActorWithMemory
{
constructor(locator)
{
super(locator);
this.CreepBodyFactory = locator.getClass(CLASS_NAMES.CREEP_BODY_FACTORY);
this.screepsApi = locator.getService(SERVICE_NAMES.SCREEPS_API);
this.actors = locator.getService(SERVICE_NAMES.ACTORS);
}
initiateActor(parentId, roomName)
{
this.memoryObject =
{ parentId: parentId
, roomName: roomName
};
}
lateInitiate()
{
this.requestCreep();
}
resetActor()
{
let oldMemory = JSON.parse(JSON.stringify(this.memoryObject));
this.initiateActor(oldMemory.parentId, oldMemory.roomName);
this.lateInitiate();
}
requestCreep()
{
let parent = this.actors.get(this.memoryObject.parentId);
parent.requestCreep(
{ actorId: this.actorId
, functionName: "createDismantler"
, priority: PRIORITY_NAMES.SPAWN.OFFENSE
, energyNeeded: 7350
}
);
}
createDismantler(spawnId)
{
let targetKeys = Object.keys(Game.flags);
if(targetKeys.length === 0)
return;
let targetPos = Game.flags[targetKeys[0]].pos;
let energy = this.screepsApi.getRoom(this.memoryObject.roomName).energyCapacityAvailable;
let body = new this.CreepBodyFactory()
.addPattern([WORK, MOVE], 1)
.addPattern([TOUGH], 48)
.addReplace(TOUGH, MOVE, 24)
.addReplace(TOUGH, HEAL, 24)
.setSort([TOUGH, MOVE, HEAL, WORK])
.setMaxCost(energy)
.fabricate();
this.actors.create(ACTOR_NAMES.PROCEDUAL_CREEP,
(script)=>script.initiateActor("soloDismantler", {},
[ [CREEP_INSTRUCTION.SPAWN_UNTIL_SUCCESS, [spawnId], body] //0
, [CREEP_INSTRUCTION.DISMANTLE_AT, targetPos] //1
, [CREEP_INSTRUCTION.GOTO_IF_DEAD, 4] //2
, [CREEP_INSTRUCTION.REMOVE_FLAG_AT, targetPos] //3
, [CREEP_INSTRUCTION.RECYCLE_CREEP] //4
, [CREEP_INSTRUCTION.DESTROY_SCRIPT] ] //5
));
this.requestCreep();
}
};