Yo también lo dejo funcionando por hoy a ver que tal se portan.
#178 Si quieres dejar que tu colonia "juegue" sola en los servidores remotos, deberás comprar CPU. El total de CPU que necesites dependerá de la complejidad de tu script.
Si juegas local/simulador, no necesitas CPU, pues todos los scripts se ejecutan en tu PC.
Si compras el juego en Steam te dan 10 CPU para siempre. Además puedes pagar una cuota adicional variable para obtener 20, 30 o 50 CPU (solo para frikis y grandes colonias).
#181 Como mola! Me acabo de levantar y ya veo errores en mi colonia... Para empezar, da igual que tenga 2, 3 o 5 sources, todos mis mineros se agolpan en un source solo xD Tendré que idear una forma de asignar un contador de mineros a cada source y hacer que el siguiente minero vaya al source con el menor contador...
Otra cosa que me falla es el algoritmo que utilizo para auto-construir cosas... no es eficiente y la ubicación de las construcciones a veces tapa un pasillo o algo xD
En fin, puto juego, tocará seguir programando.
#183 Si asignas una referencia a cada resource, siempre puedes decir que vayan a buscar una que no este en un array por ejemplo (un array con los utilizados)
#184 Y si a cada resource le puedes meter memory, y es el source el que guarda la lista de los trabajadores asignados, puedes hacer que sólo X trabajadores a la vez vayan a un source.
Estoy muy tentado, muuuuy tentado.
Lo seguiré de cerca, a ver si hacemos comuna de creeps mediavida y arrasamos el universo.
Un saludo.
#185 Eso he intentado pero no he logrado acceder a la memoria de los sources. Según la api, el objeto source no tiene la propiedad memory (que alguien lo confirme).
Lo haré al revés, trabajando con la memoria global (creando una nueva variable) y la memoria del creep. Listando el número de resources y coger su id. Añadir en la momeria global una relación de source.id ==> creep.id
Cuando nazca un creep minero, buscará el primer source.id que no tenga creep.id asignado. A ver si me sale xD
#187 Si no me equivoco, al ser en JS, da igual que source no tenga la propiedad memory, se la podrás crear tu manualmente, no? xD
#188 Si el tema es que, aunque se la puedas poner tú, si el engine del juego no persiste/guarda ese memory para ese tipo de objeto, se perderá entre turno y turno.
#190 Pero en cada turno, compruebas todos los creeps igualmente, y les asignas una acción, por lo que conforme vayas comprobando los creeps, solo tienes que ir asignando a las propiedades.
La idea es que, por ejemplo, cuando llegues al creep 17, las sources ya tendrán en "memory" los otros 16 creeps, y podrás poner al 17 donde toque.
En el siguiente tick hará básicamente lo mismo.
Supongo que el for mantendrá siempre el mismo orden, pq si no, ya me veo que cada creep en cada iteración se mueve a un source distinto xD
De todas formas, la otra opcion me parece mejor, la de asignar al creep cuando nace el source id y ya no tocarlo
#191 tal y como tú dices, se podría hacer, pero teniendo como requisito que el orden de los creeps se mantenga. Si no, los creeps se pasarían la vida moviéndose entre sources sin llegar a picar.
#191 Si, yo también creo que es la mejor opción. El creep es el elemento fundamental de la colonia, y su memoria persiste hasta su muerte. Por otra parte, el objeto Memory puede almacenar memoria a cascoporro, la idea que tengo en mente sería:
- Enumerar cada source de la habitación
- Para cada source encontrado: Crear Memory.sources = {id : 'id_del_source', mineros : 0}
- Para cada creep minero generado: Buscar en su memoria si existe el valor creep.memory.MinarEn = 'id_del_source'
- Si no existe ese valor: Enumerar Memory.sources con la variable
mineros
de menor valor (utilizando sort?) - Asignar el source al creep.
Es debería funcionar, no? Ahora a ver como se programa eso xd
#193 Yo haría algo así:
Primero, paso por cada source, y lo agrego al array "sourcesLibres" con "numMineros" = 0
Al nacer el creep, le asigno un source del array "sourcesLibres". Después de asignarle el source al creep, incrementaría "numMineros" del source elegido en 1.
Cuando la variable "numMineros" sea igual al máximo de creeps que permite cada source ( hay un máximo? por algunos pantallazos creo que es 3 ), quitaria el source del array "sourcesLibres" y lo movería a "sourcesOcupados"
Una vez hecho esto, hay que tener más cosas en cuenta:
Cuando no haya "sourcesLibres", tocará mover el creep por el mapa hasta buscar nuevos sources
Cuando un creep muera, habrá que coger su ID de source, restarle a dicho source 1 minero y moverlo de "sourcesOcupados" a "sourcesLibres"
yo asigno el source por cercania y muevo o cambio de rol a los harvesters si estan sin hacer nada
if (creep.memory.source == null){
var source = creep.pos.findClosestByRange(FIND_SOURCES);
//...
creep.memory.source = source.id;
}
//...
if(creep.carry.energy < creep.carryCapacity) {
var source= Game.getObjectById(creep.memory.source);
switch(creep.harvest(source))
{
case OK:
//...
#195 La cuestion es que lo que planteaban en comentarios anteriores, era que los creeps simplemente minaban ( no se movian del sitio ) y tenian otros creeps que eran los q iban a recoger la energia del suelo, pero los que minan no se mueven, por lo que siempre tendrian más proximo el primer source al que vayan ( y todos irian al mismo )
Yo lo tengo asociado por source al nacer usando una mini función que he creado para que detecte el source disponible con menos trabajadores asignados.
Ahora lo que tengo que mirar de hacer es optimizar la repartición de energia, para los otros roles, que van en masa a un lado y no se reparten.
Aparte la colonia ha muerto porque me han atacado durante la noche los npc's xD
Según está planteado el juego y está ya en proceso habrá formas de comerciar con los recursos. Que os reunáis todos unos cerca de otros en el modo online no sería una mala idea!
#1 Para los que tenemos no muchos conocimientos de JS, ¿nos lo recomiendas? Como algo didáctico/divertido, ¿o directamente drop? .
Uf, ahora me estoy dando cuenta de que mi planteamiento es terrible para el "early game", me ha tocado meter un orden de spawn para que en early sea mas eficiente, y ni aun asi, tocara currarselo mas..
Hacemos un grupo de telegram para que los que lo teneis compartais cosas chulas y los que no lloremos?
#205 De tarde nada, acabo de montar un slack:
Entrad, el registro y rápido y fácil. Mucho más fácil que usar Telegram.
Tambien he creado el grupo de MV para que estéis enterados: http://www.mediavida.com/g/screeps
Luego lo pongo bonito y meto información.
#206 ya tengo slack, pero no en casa, solo movil y curro, no me apetece instalarlo en casa, que yo no estoy pa emergencias en la empresa Xd
Pues yo haria un encargado de los mineros y es el que tendria en memoria cada fuente y asignaria cada fuente a los nuevos creeps.
Para el combate igual, puedes crear un creep con mucho tough que seria el capitan de escuadron y es el que le da las ordenes a los soldados, asi puedes mantener escuadrones.
Lo malo es que, como en la vida real, si el capitan se muere, los soldados no saben que hacer.
Vamos, hacer una jerarquia "realista".