-
Notifications
You must be signed in to change notification settings - Fork 1
/
config_brain_stats.js
123 lines (114 loc) · 2.98 KB
/
config_brain_stats.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
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
'use strict';
/**
* stats.add use for push anything into Memory.stats at a given place.
*
* @param {Array} path Sub stats path.
* @param {Any} newContent The value to push into stats.
*
*/
brain.stats.add = function(path, newContent) {
if (!config.stats.enabled || Game.time % 3) {
return false;
}
var name = Memory.username || _.find(Game.spawns, 'owner').owner.username;
Memory.username = name;
Memory.stats = Memory.stats || {};
Memory.stats[name] = Memory.stats[name] || {};
let current = Memory.stats[name];
for (let item of path) {
if (!current[item]) {
current[item] = {};
}
current = current[item];
}
current = _.merge(current, newContent);
return true;
};
/**
* stats.addRoot sets the root values, cpu, exec, gcl
*
*/
brain.stats.addRoot = function() {
if (!config.stats.enabled || Game.time % 3) {
return false;
}
brain.stats.add([], {
cpu: {
limit: Game.cpu.limit,
tickLimit: Game.cpu.tickLimit,
bucket: Game.cpu.bucket
},
exec: {
halt: Game.cpu.bucket < Game.cpu.tickLimit * 2
},
gcl: {
level: Game.gcl.level,
progress: Game.gcl.progress,
progressTotal: Game.gcl.progressTotal
}
});
return true;
};
/**
* stats.addRoom call stats.add with given values and given sub room path.
*
* @param {String} roomName The room which from we will save stats.
*
*/
brain.stats.addRoom = function(roomName, previousCpu) {
if (!config.stats.enabled || Game.time % 3) {
return false;
}
let room = Game.rooms[roomName];
if (!room) {
return false;
}
if (room.memory.upgraderUpgrade === undefined) {
room.memory.upgraderUpgrade = 0;
}
brain.stats.add(['room', roomName], {
energy: {
available: room.energyAvailable,
capacity: room.energyCapacityAvailable,
sources: _.sum(_.map(room.find(FIND_SOURCES), 'energy'))
},
controller: {
progress: room.controller.progress,
preCalcSpeed: room.memory.upgraderUpgrade / (Game.time % 100),
progressTotal: room.controller.progressTotal
},
creeps: {
into: room.find(FIND_CREEPS).length,
queue: room.memory.queue.length
},
cpu: Game.cpu.getUsed() - previousCpu
});
if (room.storage) {
let storage = room.storage;
brain.stats.add(['room', roomName, 'storage'], {
energy: storage.store.energy,
power: storage.store.power
});
}
if (room.terminal) {
let terminal = room.terminal;
brain.stats.add(['room', roomName, 'terminal'], {
energy: terminal.store.energy,
minerals: _.sum(terminal.store) - terminal.store.energy
});
}
return true;
};
brain.stats.init = function() {
var name = Memory.username || _.find(Game.spawns, 'my').owner;
Memory.stats = {
[name]: {
roles: {},
room: {}
}
};
let rolesNames = _(Game.creeps).map(c => c.memory.role).countBy(function(r) { return r; }).value();
_.forEach(rolesNames, function(element, index) {
Memory.stats[name].roles[index] = element;
});
};