screeps - 无法在源代码中创建变量
screeps - can't make variable in source
我是 Screeps 的新手(喜欢它),我很难为房间中的所有源创建一个变量。
我试图确保只有 3 个 creep 在同一个源上工作,所以我有以下代码片段用于我的收割机和我的主模块
主要
var sources = Game.spawns.Spawn1.room.find(FIND_SOURCES);
for (var a in sources) {
var source = (sources[a]);
source.memory.numPeopleAt = 0;
}
module.exports.loop = function () {
...
}
收割机
var sources = creep.room.find(FIND_SOURCES);
for (var s in sources) {
if (creep.harvest(sources[s]) == ERR_NOT_IN_RANGE && sources[s].memory.numPeopleAt < 3) {
creep.moveTo(sources[s]);
sources[s].memory.numPeopleAt++;
break;
}
}
我知道我仍然需要做一个函数 sources[s].memory.numPeopleAtt--
提前致谢,
贾里范梅尔克贝克
Source 没有像 Creep 那样的记忆 属性。但是,您可以向主内存对象添加一些内容。
var sources = Game.spawns.Spawn1.room.find(FIND_SOURCES);
if (!Memory.sources) {
Memory.sources = {};
}
_.each(sources, function(source) {
if (!Memory.sources[source.id]) {
Memory.sources[source.id] = { numPeopleAt: 0 };
}
});
需要注意的一件事是您的代码将 运行 每个游戏 tick,因此您只需要初始化尚未初始化的内容(这就是 if 检查的目的)。
这会将源设置为最近的源,附近没有其他收割机
var source = creep.pos.findClosestByPath(FIND_SOURCES, {filter: (s) => s.pos.findInRange(FIND_MY_CREEPS, 1, {filter: (c) => c.memory.role == 'harvester' && c.name != creep.name})[0] == undefined});
根据您的需要对其进行编辑
我是 Screeps 的新手(喜欢它),我很难为房间中的所有源创建一个变量。 我试图确保只有 3 个 creep 在同一个源上工作,所以我有以下代码片段用于我的收割机和我的主模块
主要
var sources = Game.spawns.Spawn1.room.find(FIND_SOURCES);
for (var a in sources) {
var source = (sources[a]);
source.memory.numPeopleAt = 0;
}
module.exports.loop = function () {
...
}
收割机
var sources = creep.room.find(FIND_SOURCES);
for (var s in sources) {
if (creep.harvest(sources[s]) == ERR_NOT_IN_RANGE && sources[s].memory.numPeopleAt < 3) {
creep.moveTo(sources[s]);
sources[s].memory.numPeopleAt++;
break;
}
}
我知道我仍然需要做一个函数 sources[s].memory.numPeopleAtt--
提前致谢,
贾里范梅尔克贝克
Source 没有像 Creep 那样的记忆 属性。但是,您可以向主内存对象添加一些内容。
var sources = Game.spawns.Spawn1.room.find(FIND_SOURCES);
if (!Memory.sources) {
Memory.sources = {};
}
_.each(sources, function(source) {
if (!Memory.sources[source.id]) {
Memory.sources[source.id] = { numPeopleAt: 0 };
}
});
需要注意的一件事是您的代码将 运行 每个游戏 tick,因此您只需要初始化尚未初始化的内容(这就是 if 检查的目的)。
这会将源设置为最近的源,附近没有其他收割机
var source = creep.pos.findClosestByPath(FIND_SOURCES, {filter: (s) => s.pos.findInRange(FIND_MY_CREEPS, 1, {filter: (c) => c.memory.role == 'harvester' && c.name != creep.name})[0] == undefined});
根据您的需要对其进行编辑