Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const taskResource = require('task.resource');
- const sources = require('sources');
- /**
- * Проверяем ttl бота.
- * При необходимости отправляем на базу хилится
- */
- exports.checkTTL = function(creep) {
- if (creep.memory.healing) {
- // Ищем ближайший спаун
- const spawn = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, {
- filter: (structure) => structure.structureType == STRUCTURE_SPAWN
- });
- // Если спавна нет, то едем в родную комнату
- // TODO: Родная комната может истощиться, если резко все крипы приедут из другой комнаты
- if (!spawn && creep.room.name != "W9S37") {
- creep.moveTo(new RoomPosition(49, 24, "W9S37"));
- return OK;
- }
- // const addTiks = floor(600 / creep.body.length);
- // const energy = ceil(creep_cost / 2.5 / creep.body.length)
- // const energy = spawn.store[RESOURCE_ENERGY];
- // TODO: Может ли спавн не быть найденым?
- // Чтобы не было волнообразного эффекта, когда у всех резко закончился ttl
- const health = (!creep.memory.boost)
- ? Math.random() * (1400 - 1000) + 1000 // Рандомное число, чтобы не было волнообразного эффекта
- : 1400 // Для некоторых крипов нужнен максимальный TTL
- if (creep.ticksToLive < health) {
- creep.say('Need 💊')
- const status = spawn.renewCreep(creep);
- if (status == ERR_NOT_IN_RANGE) {
- creep.moveTo(spawn, {
- costCallback: (roomName, costMatrix) => {
- costMatrix.set(11, 45, 0);
- costMatrix.set(12, 44, 0);
- },
- visualizePathStyle: {
- stroke: '#00FF00'
- },
- maxRooms: 1
- });
- }
- if (status == ERR_BUSY) {
- if (!creep.pos.inRangeTo(spawn, 2)) {
- creep.moveTo(spawn, {
- costCallback: (roomName, costMatrix) => {
- costMatrix.set(11, 45, 0);
- costMatrix.set(12, 44, 0);
- },
- visualizePathStyle: {
- stroke: '#00FF00'
- },
- maxRooms: 1
- });
- }
- }
- creep.transfer(spawn, RESOURCE_ENERGY);
- return OK;
- }else {
- delete creep.memory.healing;
- return ERR_NOT_FOUND;
- }
- }
- const minimum = (creep.memory.role == "harvester" || creep.memory.role == "remote_upgrader")
- ? 300
- : 200;
- if (creep.ticksToLive < minimum) {
- sources.release(creep);
- creep.memory.healing = true;
- return OK;
- }
- }
- exports.checkRecycling = function(creep) {
- // Нужно ли ехать на переработку
- if (creep.memory.recycling) {
- creep.say(`🏃Recycle`);
- const spawn_id = (() => {
- // Пытаемся получить данные из памяти
- const found = creep.memory.spawn_id;
- if (found) return found;
- // Пытаемся найти ближайщий спаун
- const spawn = creep.pos.findClosestByRange(FIND_MY_SPAWNS);
- if (spawn) {
- creep.memory.spawn_id = spawn.id;
- return spawn.id;
- }
- // Едем к дефолтному спауну
- console.log(`[Recycling] Can't find spawn for ${creep.name} ${creep.pos.x}:${creep.pos.y}:${creep.pos.roomName}`);
- creep.memory.spawn_id = Game.spawns["Spawn1"].id;
- return creep.memory.spawn_id;
- })();
- const spawn = Game.getObjectById(spawn_id);
- if (!spawn) {
- creep.say("Error Spawn");
- return;
- }
- // Двигаемся к спауну
- if (creep.room.name != spawn.room.name || spawn.recycleCreep(creep) == ERR_NOT_IN_RANGE) {
- creep.moveTo(spawn);
- }
- return OK;
- }
- return ERR_NOT_FOUND;
- }
- exports.checkGoTo = function(creep) {
- if (creep.memory.goto) {
- const position = creep.memory.goto.split(':');
- const room_name = (position.length == 3) ? position[2] : creep.room.name;
- if (creep.pos.x != position.x() || creep.pos.y != position.y() || creep.room.name != room_name) {
- creep.moveTo(new RoomPosition(position.x(), position.y(), room_name));
- creep.say(`Go to pos`);
- }else {
- delete creep.memory.goto;
- }
- return OK;
- }
- return ERR_NOT_FOUND;
- }
- exports.healTarget = function(creep) {
- }
- /**
- * Если у крипа установлена переменная boost, то пытаемся забустить крипа
- * Переменная задается в виде PART:RESOURCE - все части одного типа улучшаются одним ресурсом
- * Для этого:
- * 1. Максимально выхиливаем крипа
- * 2. Переносим в лабораторию необходимые ресурсы
- * 3. Бустим крипа
- */
- exports.checkBoost = function(creep) {
- if (!creep.memory.boost) return;
- // Для начала крипу нужно получить максимальное количесто ttl
- if (exports.checkTTL(creep) == OK) return;
- if (creep.ticksToLive < 1200) {
- creep.healing = true;
- return;
- }
- // Дальше нужно заполнить лабораторию энергией
- const lab = (() => {
- if (creep.memory.lab_id) {
- return Game.getOrderById(creep.memory.lab_id);
- }
- const lab = creep.post.findClosestByRange(FIND_MY_STRUTURES, {
- filter: (s) => s.structureType == STRUCTURE_LAB
- });
- if (lab) {
- creep.memory.lab_id = lab.id;
- return lab;
- }
- })();
- if (!lab) {
- console.log(`Not found lab for creep ${creep.name}`);
- delete creep.boost;
- return;
- }
- const [type, resource] = creep.memory.boost.split(':');
- // Считаем энергию, необходимую для апгрейда
- const energy = 20 * _filter(creep.body, body => body.type == type).length;
- if (lab.store.getUsedCapacity(RESOURCE_ENERGY) < energy) {
- taskResource.chechHarvesting(creep, RESOURCE_ENERGY);
- if (creep.memory.harvesting) {
- taskResource.
- }else {
- }
- return;
- }
- }
RAW Paste Data