initial commit, tutorial level scripts

This commit is contained in:
2024-04-30 21:37:16 +02:00
parent d672727d9b
commit efa3d8df5c
48 changed files with 8250 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
1714505785927
ed58037af2462c9
+97
View File
@@ -0,0 +1,97 @@
var roleHarvester = require('role.harvester');
var roleUpgrader = require('role.upgrader');
var roleBuilder = require('role.builder');
var lastLog = Date.now();
var creepDefinitions = {
"harvester": {
"minCount": 2,
"variants": {
"normal": [WORK, CARRY, MOVE],
"big": [WORK, WORK, CARRY, CARRY, MOVE, MOVE, MOVE]
}
},
"builder": {
"minCount": 2,
"variants": {
"normal": [WORK, CARRY, MOVE],
"big": [WORK, WORK, CARRY, CARRY, MOVE, MOVE, MOVE]
}
},
"upgrader": {
"minCount": 2,
"variants": {
"normal": [WORK, CARRY, MOVE],
"big": [WORK, WORK, CARRY, CARRY, MOVE, MOVE, MOVE]
}
},
};
var editing = false;
module.exports.loop = function () {
if (editing) return;
// var tower = Game.getObjectById('f84398b5d228975dd105a0ca');
// if (tower) {
// var closestDamagedStructure = tower.pos.findClosestByRange(FIND_STRUCTURES, {
// filter: (structure) => structure.hits < structure.hitsMax
// });
// if (closestDamagedStructure) {
// tower.repair(closestDamagedStructure);
// }
// var closestHostile = tower.pos.findClosestByRange(FIND_HOSTILE_CREEPS);
// if (closestHostile) {
// tower.attack(closestHostile);
// }
// }
for (var name in Memory.creeps) {
if (!Game.creeps[name]) {
delete Memory.creeps[name];
console.log('Clearing non-existing creep memory:', name);
}
}
console.log();
for (const role in creepDefinitions) {
if (Object.hasOwnProperty.call(creepDefinitions, role)) {
const creep = creepDefinitions[role];
let creeps = _.filter(Game.creeps, (creep) => creep.memory.role == role);
console.log(role[0].toUpperCase() + role.slice(1) + ' count: ' + creeps.length);
if (creeps.length < creep.minCount) {
let newName = role[0].toUpperCase() + role.slice(1) + Game.time;
console.log('Trying to spawn new ' + role + ': ' + newName);
Game.spawns.Spawn1.spawnCreep(creep.variants.big, newName, { memory: { role: role } });
Game.spawns['Spawn1'].spawnCreep(creep.variants.normal, newName, { memory: { role: role } });
if (Game.spawns['Spawn1'].spawning != null) {
Game.spawns['Spawn1'].room.visual.text(
'🛠️' + Game.spawns['Spawn1'].spawning.name,
Game.spawns['Spawn1'].pos.x + 1,
Game.spawns['Spawn1'].pos.y,
{ align: 'left', opacity: 0.8 }
);
}
}
}
}
for (var 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);
}
}
};
+32
View File
@@ -0,0 +1,32 @@
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) {
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;
@@ -0,0 +1,29 @@
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.structureType == STRUCTURE_TOWER) &&
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;
@@ -0,0 +1,29 @@
var roleUpgrader = {
/** @param {Creep} creep **/
run: function(creep) {
if(creep.memory.upgrading && creep.store[RESOURCE_ENERGY] == 0) {
creep.memory.upgrading = false;
creep.say('🔄 harvest');
}
if(!creep.memory.upgrading && creep.store.getFreeCapacity() == 0) {
creep.memory.upgrading = true;
creep.say('⚡ upgrade');
}
if(creep.memory.upgrading) {
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller, {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 = roleUpgrader;