Gistrec

Untitled

Jan 24th, 2021
622
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const taskResource = require('task.resource');
  2. const sources = require('sources');
  3.  
  4. /**
  5.  * Проверяем ttl бота.
  6.  * При необходимости отправляем на базу хилится
  7.  */
  8. exports.checkTTL = function(creep) {
  9.     if (creep.memory.healing) {
  10.         // Ищем ближайший спаун
  11.         const spawn = creep.pos.findClosestByRange(FIND_MY_STRUCTURES, {
  12.             filter: (structure) => structure.structureType == STRUCTURE_SPAWN
  13.         });
  14.         // Если спавна нет, то едем в родную комнату
  15.         // TODO: Родная комната может истощиться, если резко все крипы приедут из другой комнаты
  16.         if (!spawn && creep.room.name != "W9S37") {
  17.             creep.moveTo(new RoomPosition(49, 24, "W9S37"));
  18.             return OK;
  19.         }
  20.  
  21.         // const addTiks = floor(600 / creep.body.length);
  22.         // const energy = ceil(creep_cost / 2.5 / creep.body.length)
  23.         // const energy = spawn.store[RESOURCE_ENERGY];
  24.         // TODO: Может ли спавн не быть найденым?
  25.  
  26.         // Чтобы не было волнообразного эффекта, когда у всех резко закончился ttl
  27.         const health = (!creep.memory.boost)
  28.             ? Math.random() * (1400 - 1000) + 1000 // Рандомное число, чтобы не было волнообразного эффекта
  29.             : 1400 // Для некоторых крипов нужнен максимальный TTL
  30.  
  31.         if (creep.ticksToLive < health) {
  32.             creep.say('Need 💊')
  33.  
  34.             const status = spawn.renewCreep(creep);
  35.             if (status == ERR_NOT_IN_RANGE) {
  36.                 creep.moveTo(spawn, {
  37.                     costCallback: (roomName, costMatrix) => {
  38.                         costMatrix.set(11, 45, 0);
  39.                         costMatrix.set(12, 44, 0);
  40.                     },
  41.                     visualizePathStyle: {
  42.                         stroke: '#00FF00'
  43.                     },
  44.                     maxRooms: 1
  45.                 });
  46.             }
  47.             if (status == ERR_BUSY) {
  48.                 if (!creep.pos.inRangeTo(spawn, 2)) {
  49.                     creep.moveTo(spawn, {
  50.                         costCallback: (roomName, costMatrix) => {
  51.                             costMatrix.set(11, 45, 0);
  52.                             costMatrix.set(12, 44, 0);
  53.                         },
  54.                         visualizePathStyle: {
  55.                             stroke: '#00FF00'
  56.                         },
  57.                         maxRooms: 1
  58.                     });
  59.                 }
  60.             }
  61.             creep.transfer(spawn, RESOURCE_ENERGY);
  62.             return OK;
  63.         }else {
  64.             delete creep.memory.healing;
  65.             return ERR_NOT_FOUND;
  66.         }
  67.     }
  68.     const minimum = (creep.memory.role == "harvester" || creep.memory.role == "remote_upgrader")
  69.         ? 300
  70.         : 200;
  71.     if (creep.ticksToLive < minimum) {
  72.         sources.release(creep);
  73.         creep.memory.healing = true;
  74.         return OK;
  75.     }
  76. }
  77.  
  78. exports.checkRecycling = function(creep) {
  79.     // Нужно ли ехать на переработку
  80.     if (creep.memory.recycling) {
  81.         creep.say(`🏃Recycle`);
  82.  
  83.         const spawn_id = (() => {
  84.             // Пытаемся получить данные из памяти
  85.             const found = creep.memory.spawn_id;
  86.             if (found) return found;
  87.  
  88.             // Пытаемся найти ближайщий спаун
  89.             const spawn = creep.pos.findClosestByRange(FIND_MY_SPAWNS);
  90.             if (spawn) {
  91.                 creep.memory.spawn_id = spawn.id;
  92.                 return spawn.id;
  93.             }
  94.  
  95.             // Едем к дефолтному спауну
  96.             console.log(`[Recycling] Can't find spawn for ${creep.name} ${creep.pos.x}:${creep.pos.y}:${creep.pos.roomName}`);
  97.            creep.memory.spawn_id = Game.spawns["Spawn1"].id;
  98.            return creep.memory.spawn_id;
  99.        })();
  100.        const spawn = Game.getObjectById(spawn_id);
  101.        if (!spawn) {
  102.            creep.say("Error Spawn");
  103.            return;
  104.        }
  105.        
  106.        // Двигаемся к спауну
  107.        if (creep.room.name != spawn.room.name || spawn.recycleCreep(creep) == ERR_NOT_IN_RANGE) {
  108.            creep.moveTo(spawn);
  109.        }
  110.        return OK;
  111.    }
  112.    return ERR_NOT_FOUND;
  113. }
  114.  
  115. exports.checkGoTo = function(creep) {
  116.    if (creep.memory.goto) {
  117.        const position = creep.memory.goto.split(':');
  118.        const room_name = (position.length == 3) ? position[2] : creep.room.name;
  119.        if (creep.pos.x != position.x() || creep.pos.y != position.y() || creep.room.name != room_name) {
  120.            creep.moveTo(new RoomPosition(position.x(), position.y(), room_name));
  121.            creep.say(`Go to pos`);
  122.        }else {
  123.            delete creep.memory.goto;
  124.        }
  125.        return OK;
  126.    }
  127.    return ERR_NOT_FOUND;
  128. }
  129.  
  130. exports.healTarget = function(creep) {
  131.  
  132. }
  133.  
  134. /**
  135. * Если у крипа установлена переменная boost, то пытаемся забустить крипа
  136. * Переменная задается в виде PART:RESOURCE - все части одного типа улучшаются одним ресурсом
  137. * Для этого:
  138. * 1. Максимально выхиливаем крипа
  139. * 2. Переносим в лабораторию необходимые ресурсы
  140. * 3. Бустим крипа
  141. */
  142. exports.checkBoost = function(creep) {
  143.    if (!creep.memory.boost) return;
  144.    
  145.    // Для начала крипу нужно получить максимальное количесто ttl
  146.    if (exports.checkTTL(creep) == OK) return;
  147.    if (creep.ticksToLive < 1200) {
  148.        creep.healing = true;
  149.        return;
  150.    }
  151.    
  152.    // Дальше нужно заполнить лабораторию энергией
  153.    const lab = (() => {
  154.        if (creep.memory.lab_id) {
  155.            return Game.getOrderById(creep.memory.lab_id);
  156.        }
  157.        
  158.        const lab = creep.post.findClosestByRange(FIND_MY_STRUTURES, {
  159.            filter: (s) => s.structureType == STRUCTURE_LAB
  160.        });
  161.        
  162.        if (lab) {
  163.            creep.memory.lab_id = lab.id;
  164.            return lab;
  165.        }
  166.    })();
  167.    if (!lab) {
  168.        console.log(`Not found lab for creep ${creep.name}`);
  169.        delete creep.boost;
  170.        return;
  171.    }
  172.    
  173.    const [type, resource] = creep.memory.boost.split(':');
  174.    
  175.    // Считаем энергию, необходимую для апгрейда
  176.    const energy = 20 * _filter(creep.body, body => body.type == type).length;
  177.    if (lab.store.getUsedCapacity(RESOURCE_ENERGY) < energy) {
  178.        taskResource.chechHarvesting(creep, RESOURCE_ENERGY);
  179.        if (creep.memory.harvesting) {
  180.            taskResource.
  181.        }else {
  182.            
  183.        }  
  184.        return;
  185.    }
  186.    
  187. }
RAW Paste Data