Inicio Foros Ayuda El Reset

Mostrando 3 respuestas a los debates
  • Autor
    Respuestas
    • Anónimo
      Inactivo
      Número de entradas: 175

      Buenas,

      Ese temido momento llamado «Reset» que todos hemos llegado a odiar. ¿Podría alguien arrojar un poco de luz sobre el tema, igual que se hizo con el HB?

      Yo nunca entendí como funciona, solo se que en ocasiones estás haciendo un NPC y de repente desaparece, o recupera el 100% de su vida y te dicen: Te ha reseteado. Luego, vas a ejército de Golthur, dejas un cubo y te lo encuentras ahí 1 mes. El tema del reset…. ¿Cada cuanto? ¿Si alguien entra en una room, el «contador» de reset se reinicia o no? ¿Qué ocurre si el contador empieza (supongamos que resetea cada 40 min), entras en el minuto 38… Te reseteará en 2? ¿Hay alguna manera, comando, de ver si una room va a resetear antes de hacer un npc? ¿Se podría programar que un NPC no resetee hasta que muera para evitar cosas así…?

      Son muchísimas dudas desde el desconocimiento y seguramente otras que me dejo. ¡Gracias por la info!

    • vhurkul
      Moderator
      Número de entradas: 33

      El contador de tiempo es semialeatorio y creo que no se puede saber cuanto tiempo queda por código, así que no podemos mostrarlo. Suele tardar entre 10 y 20 minutos.

      Si al ocurrir el reset hay un jugador en la sala, se cancela (es decir, se ignora y se vuelve a intentar dentro de 10 a 20 minutos), por lo que supongo que ese problema solo pasa cuando estáis haciendo npcs entrando y saliendo de la sala y tenéis la mala suerte de que justo toca el reset cuando estáis afuera.

      Se podría poner que los npcs (sea todos o solamente estos que dan tesoros) no reseteen si han estado recientemente en peleas, pero es más complicado de lo que parece: por un lado hay limitaciones técnicas, y por otro, tenemos que analizar las implicaciones (ej: no queremos que un guardia enemigo por cuya sala has pasado durante un segundo se quede sin resetear hasta que salgas del juego, o que puedas dejar al balrog a 1 pv e irte, y que otro venga horas después y lo remate).

       

       

      • Esta respuesta fue modificada hace 3 years, 10 months por vhurkul.
    • lordsoth
      Participant
      Número de entradas: 284

      Se podría poner que los npcs (sea todos o solamente estos que dan tesoros) no reseteen si han estado recientemente en peleas, pero es más complicado de lo que parece: por un lado hay limitaciones técnicas, y por otro, tenemos que analizar las implicaciones (ej: no queremos que un guardia enemigo por cuya sala has pasado durante un segundo se quede sin resetear hasta que salgas del juego, o que puedas dejar al balrog a 1 pv e irte, y que otro venga horas después y lo remate).

      Quizas se pueda hacer una forma intermedia.

      Implementar una property «antireset» que se añada a los NPCS que se desee la cual haga que si ha estado en peleas con algún jugador en los úlitmos… 5 minutos (por ejemplo) se cancele ese reset y reinicie el contador.

      Al ser una property que se deba añadir de manera manual a los NPCS, evitas problemas de guardias de ciudades y cosas así.

    • Satyr
      Keymaster
      Número de entradas: 9142

      Añado un poco de trasfondo a todo esto para que sirva de referencia a todos. Es posible que me haya colado en alguna cosa porque esto es uno de esos temas un poco esotéricos.

      Cuando se habla del «reset» normalmente se usa dicho término de forma intercambiable para referirse a dos fenómenos.

      El primero es que el driver del juego, cada cierto tiempo, reclama objetos en memoria que estén inactivos (es decir: que no hayan recibido llamadas a funciones). Los objetos son cualquier cosa: salas, armas, armaduras, npcs, etc. En el caso de las salas, si éstas no han recibido actividad (p.ej.: porque nadie entró en ellas) el driver los reclama cada cierto tiempo y las destruye, haciendo que cuando se vuelva a entrar en ellas se regeneren de nuevo (y por lo tanto, vuelvan a aparecer npcs, cofres y cualquier otra cosa que tuviesen). Esto se hace con objeto de ahorrar memoria del servidor. Los objetos se reclaman de forma periódica y solo son recolectados aquellos que tengan 30 minutos de inactividad o más. De ahora en adelante llamaré a este proceso «recolección de basura».

      El segundo es el método «reset» de las salas, también llamado por el driver (y aquí hay muchas similitudes en las que no entro por no liar la cosa), que hace dos cosas: forzar la destrucción de salas que lleven mucho tiempo en memoria o repoblarlas de PNJs si no pueden ser destruídas por algún motivo (más adelante menciono alguno). Cabe destacar que lo de «forzar la destrucción de las salas…» es exactamente lo mismo que en el primer caso que describí en la recolección de basura. Puede parecer duplicado, pero no lo es, ya que puede darse el caso de que una sala esté mucho tiempo en memoria y tenga mucho uso y por lo tanto no sea descargada por la recolección de basura y, sin embargo, no sea necesario tenerla cargada el 100% del tiempo. Este proceso de destrucción se ejecuta cada 20 minutos (en contraste con los 30 de los que hablábamos antes) y no siempre podrá ejecutarse. Si una sala es destruída, ésta perderá sus contenidos. Por el contrario, si una sala es repoblada, ésta clonará de nuevo los NPCs que tuviese, pero cualquier objeto que hubiese en ella (p.ej.: un cuerpo) no será borrado.

      Las salas nunca serán recolectadas como basura si han recibido cualquier tipo de actividad en los últimos 30 minutos. Esto incluye que un PJ esté en ella o haya pasado por ella.

      Las excepciones que pueden hacer que una sala ejecute la función «reset» son varias y dependen un poco del contexto, pero en esencia:

      • Si hay jugadores en la sala no son destruídas ni repobladas.
      • Las muertes recientes impiden que las salas sean destruídas en el reset, pero pueden repoblarse de forma normal.
      • Algunas salas especiales pueden no resetear en un cierto tiempo.
      • Algunos PNJs pueden implementar mecanismos para lo mismo.
      • Algunos PNJs tienen «heart-beat» para que actúen como personajes y evitan que las salas sean destruídas y repobladas.

      Así pues, respondo a las preguntas concretas que se hicieron en base a lo anterior:

      • ¿Cada cuanto?: la recolección cada 30 minutos. El reset cada 20.
      • ¿Si alguien entra en una room, el “contador” de reset se reinicia o no?: el de recolección sí, el de reset no.
      • ¿Qué ocurre si el contador empieza (supongamos que resetea cada 40 min), entras en el minuto 38… Te reseteará en 2?: si la sala estaba ya en memoria, sí, reseteará en 2 minutos si no se cumple alguna de las excepciones más arriba. Si la sala no estaba en memoria, no pasará nada, porque ni será recolectada (mínmo 28 min) ni sufrirá un reset (mínimo 18 min).
      • ¿Hay alguna manera, comando, de ver si una room va a resetear antes de hacer un npc?: no
      • ¿Se podría programar que un NPC no resetee hasta que muera para evitar cosas así…?: algunos PNJs ya impiden parcialmente el reset y lo alargan artificialmente (p.ej.: Anarcam o El Balrog). No obstante, aún si quisiéramos ponerlo para todos, habría otros desafíos que afrontar y para eso me remito a la respuesta que dió Vhurkul.
      • Esta respuesta fue modificada hace 3 years, 10 months por Satyr.
      • Esta respuesta fue modificada hace 3 years, 10 months por Satyr.
      • Esta respuesta fue modificada hace 3 years, 10 months por Satyr.
Mostrando 3 respuestas a los debates
  • Debes estar registrado para responder a este debate.