Screeps #HO | MMO para programadores en JavaScript

lebroN

#270 no estoy muy seguro, pero no sería algo así en el for?

´´´javascript
var creeps = room.find(FIND_MY_CREEPS);
for(var cid in creeps) {
if (cid == 'harvester') {
console.log('test
if(!Memory.creeps[cid].workJournal){
Memory.creeps[creeps[cid].name].workJournal = [];
´´´

Tengo un creep con el rol de harvester y el código no llega a la linea de

´´´javascript
console.log('test
´´´

Al recorrer el for de esa manera, no haría falta acceder a las posiciones como si fuese un array normal no?

1 respuesta
Lolth

#271 cid solo es el índice de creeps en el array resultado de la búsqueda, alomejor el problema está en la búsqueda que no almacena el rol :/, voy a probar xd

1 respuesta
lebroN

#272 ahh, creía que te devolvía otra cosa jajaj, entonces nada.

Lolth

Ya está xd, si a alguien le sirve aquí lo pongo

        for(var cid in Memory.creeps) {
           if(Memory.creeps[cid].role == 'harvester'){
covaga

no consigo que mi creep recoja la energía desde el spawn, alguna ayuda?

var roleNodrizas = {
run: function(creep) {

    if(creep.memory.upgrading && creep.carry.energy == 0) {
        creep.memory.upgrading = false;
    }
    if(!creep.memory.upgrading && creep.carry.energy == creep.carryCapacity) {
        creep.memory.upgrading = true;
    }

    if(creep.memory.upgrading) {
        if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
            creep.moveTo(creep.room.controller);
        }
    }
    else {
         var target = creep.room.find(FIND_STRUCTURES, {
                filter: (structure) => {
                    return (structure.structureType == STRUCTURE_SPAWN);
                }
            });
        if(creep.carry.energy < creep.carryCapacity) {
            if (target[0].transfer(creep, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
        	creep.moveTo(target[0]);
            }
        
        }
    }
}

};

module.exports = roleNodrizas;

me sale este error

[15:22:02]TypeError: target[0].transfer is not a function
at Object.run:23:31
at Object.module.exports.loop:20:26
at __mainLoop:1:14194
at eval:2:4
at Object.c.runCode:6:30470

1 respuesta
AikonCWD

#275 Pues está muy claro el error:

var target = creep.room.find(FIND_STRUCTURES, { ... } Esa función devuelve en target un objeto del tipo StructureSpawn. Si miras la wiki verás que dicho objeto no tiene implementado el método transfer()

Cambia la parte del final por:

    if(creep.carry.energy < creep.carryCapacity) {
        if (target[0].transferEnergy(creep, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) creep.moveTo(target[0]);

:)

1 respuesta
covaga

#276 joder por no mirar la wikia t.t se ha ido el error pero el creep no hace nada

1 respuesta
AikonCWD

#277 Revisa bien el código, está claro que lo que quieres hacer no se corresponde con el source que has escrito. A la tarde podría revisar tu código, pero mejor leelo tú, así aprenderás un huevo.

1 respuesta
covaga

#278 :psyduck: mi lógica me dice que está bien. Mas tarde le echaré un vistazo a ver en que fallo. Gracias por la ayuda.

1 respuesta
valdrar

#279 console.log es tu amigo :)

Te ayudará a entender mejor que es lo que está haciendo de verdad tu código y de paso podrás divertirte poniendo mensajitos graciosos jejeje

gbpepe

Una pregunta... ¿Como le ponéis a cada unidad el nombre encima? (Y no me refiero al "creep.say(message)"), que he visto capturas por ahí con el nombre tipo tag, como el spawn.

1 respuesta
Amazon

#281

1 1 respuesta
gbpepe

#282 Ohhh! Claro, ya podía buscarlo en la API xD (Creí que era una especia de TAG que se asignaba), ahora ya tiene sentido, le pondré de nombre el tipo de creep + id...

Muchas gracias :)

Lolth

Con esto de abajo podéis calcular los slots libres que tiene cada recurso, ya se que no es gran cosa pero me ha costado lo suyo xD espero que le sirva a alguien

            var resources = room.find(FIND_SOURCES);
            /*Log sources*/
            if (!Memory.rooms[room.name].sources) {
                Memory.rooms[room.name].sources = [];
                for (var ids in resources) {
                    var source = {};
                    var klair = resources[ids].pos.findInRange(FIND_STRUCTURES, 6, {filter: {structureType: STRUCTURE_KEEPER_LAIR}}).length > 0;
                    source.id = resources[ids].id;
                    var resourceObject = Game.getObjectById(resources[ids].id);
                    var resourceArea = creep.room.lookAtArea((resourceObject.pos.y-1),(resourceObject.pos.x-1),(resourceObject.pos.y+1),(resourceObject.pos.x+1),true);
                    var freeSlots = 9;
                    for (var i = 1; i < resourceArea.length; i++) {
                        if(resourceArea[i].terrain == 'wall'){
                            freeSlots--;
                        }
                    }
                    source.slots = freeSlots;
                    source.klair = klair;
                    Memory.rooms[room.name].sources.push(source);
                }
            };
Asilvestrao

Que editor utilizais? Con auto-completado?

Un saludo.

3 respuestas
Amazon

#285 yo estoy usando el propio del juego por ahora

1
Lolth

#285 jetbrains WebStorm + Screeps autocomplete, esperando que antes de los 30 días acepten mi instituto para el jetbrains education xD

1 1 respuesta
gbpepe

#285 Yo sublime 3 (sin autocompletado, solo los docs) + el gruntfile para subir automaticamente...

bazoo

#287 Yo mandé un correo con el PDF de la preinscripción a la matrícula y al día me dieron la licencia.

2 meses después
Amazon

http://steamcommunity.com/games/464350/announcements/detail/901108372477450700

D:

1 mes después
Amazon

http://support.screeps.com/hc/en-us/articles/213625765-Screeps-private-server-released-

Se podría montar un server para tomárselo con más calma que en el principal xD

1 año después
HelThunk

Alguien le sigue dando?