Автозапуск Screeps не работает полностью

1

Поэтому я попытался обновить свой скрипт screeps и хорошо.. uhm.. что-то пошло не так, потому что мой код автозапуска застревает в цикле. Я до сих пор довольно новичок в JavaScript, поэтому, наверное, это была какая-то глупая ошибка. То, что я пытался сделать, это получить ошибку Reference за то, что не так, добавив console.log в оператор if... ничего не получалось, кроме сообщения о появлении "харвестера", которое было отправлено спамом в мою консоль. Я действительно борется. Помогите мне!

Если вам нужна дополнительная информация, скажите об этом, я рад предоставить все, что вам нужно!

const roleHarvester = require('role.harvester');
const roleUpgrader = require('role.upgrader');
const roleBuilder = require('role.builder');

module.exports.loop = function () {

for(let name in Memory.creeps) {
    if(!Game.creeps[name]) {
        delete Memory.creeps[name];
    }
}

//change to object
let minimum = {
    NumberOfHarvesters: 3,
    NumberOfUpgraders: 3,
    NumberOfBuilders: 3
}
let numberOf = {
    Harvesters: _.sum(Game.creeps, (c) => c.memory.role == 'harvester'),
    Upgraders: _.sum(Game.creeps, (c) => c.memory.role == 'upgraders'),
    Builders: _.sum(Game.creeps, (c) => c.memory.role == 'builders')
}

if (numberOf.Harvesters < 3) {
    Game.spawns.Spawn1.createCreep([WORK, CARRY, CARRY, CARRY, MOVE], {role: 'harvester'})
    console.log('harvester spawned');
} 
else if (numberOf.Upgraders < 3) {
    Game.spawns.Spawn1.createCreep([WORK, CARRY, CARRY, CARRY, MOVE], {role: 'upgrader'})
    console.log('upgrader spawned');
} 
else if (numberOf.Builders < 3) {
    Game.spawns.Spawn1.createCreep([WORK, WORK, CARRY, MOVE], {role: 'builder'})
    console.log('builder spawned');
}
else {
    Game.spawns.Spawn1.createCreep([WORK, CARRY, MOVE], {role: 'upgrader'})
}   

for(let name in Game.creeps) {
    let creep = Game.creeps[name];
    if(creep.memory.role == 'harvester') {
        roleHarvester.run(creep);
    }
    if(creep.memory.role == 'upgrader') {
        roleUpgrader.run(creep);
    }
    if(creep.memory.role == 'builder') {
        roleBuilder.run(creep);
    } 
}
}

Изображение 174551

  • 0
    Совершенно не связанный с вашим вопросом, но вы повторяете Game.creeps 3 раза, чтобы сосчитать. Если у вас много крипов, это будет крайне неэффективно. Возможно, вы захотите изменить сумму на _.groupBy(Game.creeps, c => c.memory.role);
Теги:
if-statement
screeps

1 ответ

1
Лучший ответ

На основе временных меток с консоли ваш код не "застревает в цикле" так сильно, как в основном цикле. Каждый тик, где numberOf.Harvesters < 3 оценивает true, код в блоке if будет выполнен. Предполагая, что счетная часть ползучести работает, это означает, что она будет продолжаться, пока у вас не будет по крайней мере 3 комбайна.

Возможно, вам нужно добавить код, чтобы проверить, не породил ли икру новый крип и если достаточно энергии, прежде чем вызвать Spawn1.createCreep(). Это значительно уменьшит болтовню вашей консоли.

Если у вас уже есть 3 комбайна, попробуйте добавить что-то вроде console.log('harvester count: ' + numberOf.Harvesters); прямо перед утверждением if.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню