Screeps #HO | MMO para programadores en JavaScript

MartiONE

Yo también lo dejo funcionando por hoy a ver que tal se portan.

1 2 respuestas
Amazon

#181 me parto con los machanguitos que tienes hablando

AikonCWD

#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.

1 respuesta
themaz

#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)

1 respuesta
EnderFX

#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.

1 respuesta
Asilvestrao

Estoy muy tentado, muuuuy tentado.

Lo seguiré de cerca, a ver si hacemos comuna de creeps mediavida y arrasamos el universo.

Un saludo.

AikonCWD

#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

2 respuestas
MisKo

#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

1 respuesta
covaga

#187 has probado poniendo una flag encima del source?

EnderFX

#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.

1 respuesta
MisKo

#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

2 respuestas
EnderFX

#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.

AikonCWD

#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

1 respuesta
MisKo

#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"

PaCoX

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: 
         //...
1 respuesta
MisKo

#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 )

MartiONE

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

NickNack

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!

B

#1 Para los que tenemos no muchos conocimientos de JS, ¿nos lo recomiendas? Como algo didáctico/divertido, ¿o directamente drop? ;).

1 respuesta
Amazon

#199 sí, dale un try, el tutorial es muy sencillo y explica todo muy bien

Yo ando con él, porque lo hago por rachas. Al final me voy a tener que comprar el juego xd

1
MartiONE

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..

Amazon

Hacemos un grupo de telegram para que los que lo teneis compartais cosas chulas y los que no lloremos?

1 respuesta
MartiONE

#202 telegram dice puto hipster.

Pd: @martione

AikonCWD

Prefiero que montáis un slack. Es mucho mas dinamico y mejor para éste tipo de juegos.

1 1 respuesta
Amazon

#204 tarde :[

1 respuesta
AikonCWD

#205 De tarde nada, acabo de montar un slack:

http://mv-screeps.slack.com

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.

1 respuesta
Amazon

#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

1 respuesta
AikonCWD

#207 Pero si slack es web... no tienes que instalar nada.

1 respuesta
Amazon

#208 app android + app desktop. No me gusta tener el navegador abierto siempre

n3krO

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".

1 respuesta