Memory.colony.sources = {};
for(var n in sources) {
Memory.colony.sources[n] = {
id : 'sin minero'
};
}
Explicación:
Memory.colony.sources = {};
for(var n in sources) {
Memory.colony.sources[n] = {
id : 'sin minero'
};
}
Explicación:
#242 imagínate picar 43h semanales durante dos años de eso, muy poco de HTML y bastante de CSS.
Por cierto, para probar esas cosillas el F12 de Chrome con datos sencillos sobre la marcha ayuda mucho.
#243 He modificado un poco tu código, ahora ya sale como quiero:
var minas = Game.rooms[MyRoom].find(FIND_SOURCES);
Memory.colony = {}
Memory.colony.sources = {}
var i = 0;
for(var n in minas) {
Memory.colony.sources['supply' + i] = {
id : minas[n].id,
minero : false
};
i++;
}
Cuando ves un ejemplo se vuelve fácil. Pero cuando no tienes ni idea como yo, vas dando palos de ciego y es desesperante xD.
#244 Ahí es donde viene muy bien tirar de la consola del Chrome/FF para poder parar la ejecución en cualquier punto del programa y ver el valor que hay en las variables y cómo van a funcionar los bucles, ya que el editor web del screeps en ese sentido está un poco verde.
En JS, hay que hacer algo para que el resultado de Math.random()
sea realmente random? Me da que siempre da la misma secuencia xD. En VB por ejemplo hay que invocar el método Randomize
si quieres que la función rnd
devuelva valores con un seed realmente aleatorio. En JS ocurre igual? Como se haría?
doblepost:
Bueno, lo dejo por hoy, ha sido un día productivo para mi colonia. Me he centrado en mejorar la eficiencia de los creeps durante los primeros minutos de vida en una nueva room. Como ya expliqué, he designado un rol llamado miner
que se desplaza a un source no ocupado y extrae energía sin descanso. Dicho miner
no se mueve de su sitio.
Luego la colonia spawnea un nuevo creep con rol miner.helper
. Se lanza un algoritmo muy eficaz para calcular la ruta más corta entre el miner
y el Spawn, de ésta forma trazamos la construcción de una carretera para aligerar el movimiento. Nuestro miner.helper
se moverá entre el Spawn y su miner
por la carretera trazada.
Cada source tiene un miner
y cada miner
tiene un helper
. Si uno de ellos muere, la memoria se libera para que el miner
tenga un nuevo helper
(o viceversa!)
El resultado lo podéis ver en la foto:
Los creeps negros son los miners
y justo detrás están los helpers
recogiendo la energia y transportándola (por la carretera) hasta el Spawn. He dejado atrás el otro algoritmo que construía demasiadas carreteras sin sentido, ahora es muy eficiente y barato
Mañana intentaré meterme más con la IA. Me gustaría poder crear un rol nuevo del tipo arquitecto
que sea capaz de localizar el mejor sitio para construir un contenedor o una extensión. De momento no se ni como empezar xD.
A mi me muere que JS sea de tipado débil Y_Y
edit: acabo de ver que todos mis chiquitines han muerto debido a lo idiotas que les dejé
tendré que seguir profundizando
#247 Puedo preguntar que algoritmo tiene y su complejidad?
Lo digo porque he pensado usar el algoritmo A* para calcular los paths al crear el spawn ya que este algoritmo tiene en cuenta el coste real (pasar por la zona verde cuesta 5 veces mas que pasar por una zona normal).
Ademas el algoritmo A* tiene una complejidad lineal si eliges bien los costes.
#248 A mi me mata el lenguaje en si. Es que me cuesta muchisimo trabajar en alto nivel porque me gusta controlar bien lo que estoy haciendo.
Me he creado un rol para reparar, pero no consigo hacer que reparen mis walls, es decir, se tendría que hacer con:
creep.repair(wallToRepair);
no?? pero no consigo filtrar para encontrar mis muros :S
¿Alguna ayuda?
#251 en el tutorial, parte 5, se explica eso, no recuerdo el código exacto, pero sí recuerdo que los muros no son tuyos, sino neutrales
#252 Exacto, por eso lo estoy filtrando por FIND_STRUCTURES y no por FIND_MY_STRUCTURES.
Fuck xdd
#253 pásate a la branch tutorial5, ahí verás cómo lo hace para reparar la torre, supongo que para reparar un creep es igual
#255 loggea con steam en la web, no he probado si puedes online, pero al menos en offline sí, y se guarda el progreso
Buenas, vengo a por un poco de ayuda tengo una función que la llamo cuando un creep está al lado del spawn o container y esta función lo que debería hacer es transferir energia a un creep. Os pongo lo que tengo aquí.
var utils = {
run: function fillCreep(creep) {
var source = creep.room.find(FIND_STRUCTURES, {
filter: (structure) => {
return (structure.structureType == STRUCTURE_SPAWN ||
structure.structureType == STRUCTURE_CONTAINER) && structure.energy >= (structure.energyCapacity/2);
}
});
source[0].transfer(creep);
}
};
la función la llamo desde aquí:
if(creep.pos.getRangeTo(path) == 1 && creep.carry.energy < creep.carryCapacity){
creep.say('Filling');
utils.run(creep);
};
Añado que empiezo hoy con el JS, hasta la fecha solo he tocado java y algo de c#
#259 Mi no entender....
run: funcion fillCreep(creep)
O es run, o es fillCreep, no?
xdddd
Por cierto, seria:
run: function(creep)
#260 Vale, lo que intento hacer es crear una funcion con un nombre es decir como pondria en Java
void Fillcreep(creep){
Codigo
}
y llamarla desde otra "Clase" con utils.Fillcreep(asd),
#261 Pues:
fillCreep: function(creep) {
Es que como JS no esta tipado se han tenido que inventar otro modo de crear funciones que no sea "void" o el tipo que devuelve.
Porque puedes devolver en algunos caminos y en otros no, y puedes devolver del tipo que quieras...
#262 Gracias! ahora ya tengo algo con que empezar, tengo lo siguiente.
es poca cosa pero pinta bien xd
#263 Yo tendria 1 upgrader fijo y los demas los pondria de repair, y si no tienen nada que reparar, pues de upgrader.
Y tambien le puedes poner construir en esa cadena.
Para elegir las carreteras (y para mover los creeps) yo utilizaria A*
Aqui teneis uno implementado en JavaScript:
http://www.briangrinstead.com/blog/astar-search-algorithm-in-javascript
Obviamente lo tendreis que cambiar para que el coste dependa de si vas a una carretera, zona normal o zona lenta.
Yo calcularia la zona del spawn como el punto con camino minimo hasta las fuentes y hasta el room controller, despues lanzaria ordenes de construir carreteras en esos caminos minimos (si las haces de 2 o 3 de grosor mejor, lo digo porque cuando empiezas a tener muchos creeps ellos tendran que salirse de ese camino fijado).
Yo es que tengo mas o menos ideas para hacer las cosas, pero como JS me esta dando mucho cancer pues como que no me entran muchas ganas de ponerme a picar codigo
Lo que veo es que la mayoria de la gente construye cosas manualmente y tal, y mi objetivo es que la colonia funcione desde 0 sin problemas ningunos.
Primero que aproveche una room al tope desde 0 (y que ponga paredes/torres para defenderla de NPCs).
Que pasada de juego.
Esta mañana me atacó un creep del jugador del mapa de al lado aunque aún me quedaban 12 días de Novice area, ¿No es esto una protección?
He reconstruido en otro mapa y de momento llevo esto
#268 Yo también estoy con eso ahora mismo. Por el momento he conseguido que las acrreteras se construyan solas, los containers al lado del controller y 8 extensiones. El resto... pues ni idea xD
Buenas!
una duda mas por aquí.
tengo lo siguiente:
var creeps = room.find(FIND_MY_CREEPS);
for(var cid in creeps) {
if (creeps[cid].memory == '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
console.log('test');