Screeps主模块代码报Syntax Error: unexpected token '{'错误如何排查
问题修复说明
核心报错原因
你代码中所有的elif关键字都是非法语法:JavaScript 条件判断分支不存在elif写法,正确写法是else if。解析器遇到不识别的elif后,无法匹配后续的{符号,直接抛出unexpected token '{'报错。
其他需要修复的错误
- 角色导入拼写错误:顶部攻击者角色导入语句为
var roleAttaver = require('role.attacker');,后续调用时使用的是roleAttacker.run(creep),变量名不匹配,需将导入语句的变量名改为roleAttacker。 - 变量拼写错误:升级者生成逻辑中的
canspawBig != 0拼写错误,需改为canspawnBig != 0。 - 塔楼逻辑错误:
Game.spawns['Spawn1'].room.find(FIND_MY_STRUCTURES, {filter: { structureType: STRUCTURE_TOWER }})返回的是塔楼数组,直接调用tower.pos会报错,需改为调用数组第一个元素tower[0]。
修复后的完整代码
var roleHarvester = require('role.harvester'); var roleUpgrader = require('role.upgrader'); var roleBuilder = require('role.builder'); var roleAttacker = require('role.attacker'); var roleRepairer = require('role.repairer'); module.exports.loop = function () { var canspawnSmall = Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, CARRY, MOVE, MOVE], 'Worker1', { dryRun: true }); var canspawnBig = Game.spawns['Spawn1'].spawnCreep([WORK, WORK, CARRY, CARRY, MOVE, MOVE], 'Worker1', { dryRun: true }); var harvesters = _.filter(Game.creeps, (creep) => creep.memory.role == 'harvester'); console.log('Harvesters: ' + harvesters.length); var builders = _.filter(Game.creeps, (creep) => creep.memory.role == 'builder'); console.log('Builders: ' + builders.length); var upgraders = _.filter(Game.creeps, (creep) => creep.memory.role == 'upgrader'); console.log('Upgraders: ' + upgraders.length); var repairers = _.filter(Game.creeps, (creep) => creep.memory.role == 'repairer'); console.log('Repairers: ' + repairers.length); var attackers = _.filter(Game.creeps, (creep) => creep.memory.role == 'attacker'); console.log('Attackers: ' + attackers.length); if (harvesters.length < 2) { if (harvesters.length < 2 && canspawnBig == 0) { Game.spawns['Spawn1'].spawnCreep([WORK, WORK, CARRY, CARRY, MOVE, MOVE], 'Harvester' + Game.time, {memory: {role: 'harvester'} }); } else if (harvesters.length < 2 && canspawnSmall == 0) { Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, CARRY, MOVE, MOVE], 'Harvester' + Game.time, {memory: {role: 'harvester'} }); } } else if (harvesters.length >= 2 && upgraders.length < 2) { if (upgraders.length < 2 && canspawnBig == 0 ) { Game.spawns['Spawn1'].spawnCreep([WORK, WORK, CARRY, CARRY, MOVE, MOVE], 'Upgrader' + Game.time, {memory: {role: 'upgrader'} }); } else if (upgraders.length < 2 && canspawnSmall == 0 && canspawnBig != 0) { Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, CARRY, MOVE, MOVE], 'Upgrader' + Game.time, {memory: {role: 'upgrader'} }); } } else if (harvesters.length >= 2 && upgraders.length >= 2 && builders.length < 2) { if (builders.length < 2 && canspawnBig == 0) { Game.spawns['Spawn1'].spawnCreep([WORK, WORK, CARRY, CARRY, MOVE, MOVE], 'Builder' + Game.time, {memory: {role: 'builder'} }); } else if (builders.length < 2 && canspawnSmall == 0 && canspawnBig != 0) { Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, CARRY, MOVE, MOVE], 'Builder' + Game.time, {memory: {role: 'builder'} }); } } else if (harvesters.length >= 2 && upgraders.length >= 2 && builders.length >= 2 && repairers.length < 2) { if (repairers.length < 2 && canspawnBig == 0) { Game.spawns['Spawn1'].spawnCreep([WORK, WORK, CARRY, CARRY, MOVE, MOVE], 'Repairer' + Game.time, {memory: {role: 'repairer'} }); } else if (repairers.length < 2 && canspawnSmall == 0 && canspawnBig != 0) { Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, CARRY, MOVE, MOVE], 'Repairer' + Game.time, {memory: {role: 'repairer'} }); } } else { console.log('All Set Chief') } console.log('Can Big:' + canspawnBig) console.log('Can Small:' + canspawnSmall) const tower = Game.spawns['Spawn1'].room.find(FIND_MY_STRUCTURES, { filter: { structureType: STRUCTURE_TOWER } }); if(tower.length > 0) { const targetTower = tower[0]; const closestDamagedStructure = targetTower.pos.findClosestByRange(FIND_STRUCTURES, {filter: (structure) => structure.hits < structure.hitsMax}); if(closestDamagedStructure) { targetTower.repair(closestDamagedStructure); } const closestDamagedCreep = targetTower.pos.findClosestByRange(FIND_MY_CREEPS, {filter: (creep) => creep.hits < creep.hitsMax}); if (closestDamagedCreep) {targetTower.heal(closestDamagedCreep);} const closestHostile = targetTower.pos.findClosestByRange(FIND_HOSTILE_CREEPS); if(closestHostile) { targetTower.attack(closestHostile); } } for(var name in Game.creeps) { var 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); } if(creep.memory.role == 'attacker') { roleAttacker.run(creep); } if(creep.memory.role == 'repairer') { roleRepairer.run(creep); } } }
内容的提问来源于stack exchange,提问作者Akinshola Akinyemi
相关产品推荐
相关产品推荐

