首先来创建一个最简单的采集creep
1.创建一个最简单的creep,把他的工作职能赋值为采集(控制台中创建)
Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], 'harvester1', {
memory: {role: 'harvester'}
});
2.写采集者的代码块
var roleHarvester = {
/** @param {Creep} creep **/
run: function(creep) {
//该存储的剩余可用容量(当大于0时,进行采集任务)
if(creep.store.getFreeCapacity() > 0) {
//寻找所有的资源
var sources = creep.room.find(FIND_SOURCES);
//如果目标太远了,则移动到目标点(creep.harvest采集)
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(sources[0]);
}
}
else {
//transfer(转移)到基地,当目标不为远的时候进行移动
if(creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(Game.spawns['Spawn1']);
}
}
}
};
module.exports = roleHarvester;
3.主项目中开始调用创建好的代码块
var roleHarvester = require('role.harvester');
module.exports.loop = function () {
for(var name in Game.creeps) {
var creep = Game.creeps[name];
//采集者则进行采集的操作
if(creep.memory.role == 'harvester') {
roleHarvester.run(creep);
}
}
}
此时该creep就可一直工作了
然后我们来创建一个最简单的升级控制器的creep
1.创建一个升级控制器的creep
Game.spawns['Spawn1'].spawnCreep( [WORK, CARRY, MOVE], 'Upgrader1' ,{
memory: {role: 'upgrader'}
});
2.写升级控制器的creep代码块
var roleUpgrader = {
/** @param {Creep} creep **/
run: function(creep) {
//采集和采集者的功能是一样的
if(creep.store[RESOURCE_ENERGY] == 0) {
var sources = creep.room.find(FIND_SOURCES);
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(sources[0]);
}
}
else if(creep.store[RESOURCE_ENERGY] < 50){
if(creep.harvest(sources[1]) != OK) {
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
}
//有能量的时候去移动升级控制器
else {
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
}
};
module.exports = roleUpgrader;
3.主项目中把升级者的工作写上
var roleHarvester = require('role.harvester');
var roleUpgrader = require('role.upgrader');
module.exports.loop = function () {
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);
}
}
}
之后我们在创建一个用于建造建筑的creep
1.创建建造建筑的creep
Game.spawns['Spawn1'].spawnCreep( [WORK, CARRY, MOVE], 'Builder1',
{ memory: { role: 'builder' } } );
2.写建造建筑的creep代码块
var roleBuilder = {
/** @param {Creep} creep **/
run: function(creep) {
//当为建造,但没有能量的时候,身份切换为采集
if(creep.memory.building && creep.store[RESOURCE_ENERGY] == 0) {
creep.memory.building = false;
creep.say('🔄 harvest');
}
//当不为建造,但有能量的时候,身份切换为建造
if(!creep.memory.building && creep.store.getFreeCapacity() == 0) {
creep.memory.building = true;
creep.say('🚧 build');
}
//当为创建的时候
if(creep.memory.building) {
//查询所有的创建工地
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
if(targets.length) {
//当有工地创建的时候,则移动建造,visualizePathStyle(可以标识路径)
if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
}
}
}
else {
//否则执行采集任务
var sources = creep.room.find(FIND_SOURCES);
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}});
}
}
}
};
module.exports = roleBuilder;
3.更新主项目
var roleHarvester = require('role.harvester');
var roleBuilder = require('role.builder');
module.exports.loop = function () {
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);
}
}
}
修改采集者到extension放置能量
var roleHarvester = {
/** @param {Creep} creep **/
run: function(creep) {
//没有能量的时候去采集能量
if(creep.store.getFreeCapacity() > 0) {
var sources = creep.room.find(FIND_SOURCES);
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}});
}
}
else {
//创建需要采集的地点
var targets = creep.room.find(FIND_STRUCTURES, {
filter: (structure) => {
return (structure.structureType == STRUCTURE_EXTENSION || structure.structureType == STRUCTURE_SPAWN) &&
structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0;
}
});
if(targets.length > 0) {
if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
}
}
}
}
};
module.exports = roleHarvester;
创建一个采集有四倍效率的采集者
Game.spawns['Spawn1'].spawnCreep( [WORK,WORK,WORK,WORK,CARRY,MOVE,MOVE],
'HarvesterBig',
{ memory: { role: 'harvester' } } );
自动添加采集者
var roleHarvester = require('role.harvester');
var roleUpgrader = require('role.upgrader');
module.exports.loop = function () {
//清除掉已经gg的creep
for(var name in Memory.creeps) {
if(!Game.creeps[name]) {
delete Memory.creeps[name];
console.log('Clearing non-existing creep memory:', name);
}
}
//找出所有的采集者
var harvesters = _.filter(Game.creeps, (creep) => creep.memory.role == 'harvester');
console.log('Harvesters: ' + harvesters.length);
//当数量小于2的时候,开始生产采集者
if(harvesters.length < 2) {
var newName = 'Harvester' + Game.time;
console.log('Spawning new harvester: ' + newName);
Game.spawns['Spawn1'].spawnCreep([WORK,CARRY,MOVE], newName,
{memory: {role: 'harvester'}});
}
//正在孵化进行的处理
if(Game.spawns['Spawn1'].spawning) {
var spawningCreep = Game.creeps[Game.spawns['Spawn1'].spawning.name];
Game.spawns['Spawn1'].room.visual.text(
'🛠️' + spawningCreep.memory.role,
Game.spawns['Spawn1'].pos.x + 1,
Game.spawns['Spawn1'].pos.y,
{align: 'left', opacity: 0.8});
}
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);
}
}
}
激活安全模式
Game.spawns['Spawn1'].room.controller.activateSafeMode();
防御塔
//在界面中找到防御塔的id
var tower = Game.getObjectById('693092d10bdaba0a44c94e45');
if(tower) {
//寻找不属于我们自己的细胞,并且攻击他
var closestHostile = tower.pos.findClosestByRange(FIND_HOSTILE_CREEPS);
if(closestHostile) {
tower.attack(closestHostile);
}
}