Can't find a way to check if a memory attribute exist or not before accessing it.
-
I get the number of harvester in each of my room with the code :
let creepsInRoom = spawn.room.find(FIND_CREEPS); .... var numberOfHarvesters = _.sum(creepsInRoom, (c) => c.memory.role == 'harvester');
But each time an enemy come to one of my room and doesn't have a creep.memory.role attribute, I got a NPE. I can't find a way to check if an attribute exist in memory before trying to access it.
(I'm a JS newbie)
-
I think your problem is not that there isn't a role -
undefined == 'harvester'
just gives youfalse
. The problem is that there isn't any memory for that creep, since it doesn't belong to you.There are two ways you can fix this:
- If you only want your own creeps to be in
creepsInRoom
, you can changeFIND_CREEPS
toFIND_MY_CREEPS
. - If you want both your creeps and hostile creeps to be in
creepsInRoom
, you can changec.memory.role == 'harvester'
toc.my && c.memory.role == 'harvester'
. (The double&&
means that the second part will only be checked if the first part is also true. If the first part is false, the answer will be false.)
- If you only want your own creeps to be in
-
Thanks for that clear and short answer Have a god day Sir Yoshi I think all will be ok with your help.