Saltar al contenido principal

Crear Fases de Jefe

Las Fases de Jefe permiten cambiar la configuración de un Jefe Personalizado durante un encuentro.

¿Cómo funcionan las Fases de Jefe?​

Las Fases de Jefe se pueden añadir a cualquier Jefe Personalizado en EliteMobs usando el siguiente formato de configuración:

phases:
- phase_2_boss.yml:0.X
- phase_3_boss.yml:0.Y

Nota: El jefe que invocas originalmente (que contiene la entrada phases: que lista todas las demás fases) es el jefe de la fase 1. El archivo del jefe de la fase 1 NO debe listarse a sí mismo en su propia entrada phases:.

Cada entrada tiene el formato filename:healthFraction. La fracción debe ser como mínimo 0 e inferior a 1, como 0.60 o 0.30, y el archivo de jefe referenciado debe estar cargado y habilitado. EliteMobs comprueba la lista cada vez que crea el jefe: una entrada no válida impide que ese jefe aparezca, y el mensaje de consola indica qué entrada es.

Cada fase referencia otro archivo de jefe, lo que permite cambiar poderes, multiplicadores de daño y salud, tipo de entidad, disfraz y equipo. El estado del encuentro y los ajustes regionales indicados abajo se conservan.

EliteMobs reemplaza el cuerpo del jefe por el de la siguiente fase conservando el estado del encuentro. Si un evento de daño cruza el siguiente umbral de fase, se cancela ese evento y la nueva fase comienza con su porcentaje de salud configurado. El daño sobrante no pasa a la nueva fase. Después, el jefe recibe 20 ticks de gracia de combate.

Si el chunk de destino todavía no puede procesar entidades, EliteMobs lo carga y espera hasta 100 ticks (5 segundos) antes de reemplazar el cuerpo. El daño al jefe se cancela mientras espera. Si el mundo de destino no está cargado, o el chunk no queda listo a tiempo, la transición se rechaza: el jefe mantiene su fase actual y la consola registra una advertencia.

Ejemplo​

Toma este jefe de fases de ejemplo:

Archivo: phase_1_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: STRAY
powers:
- attack_gravity.lua
phases:
- phase_2_boss.yml:0.60
- phase_3_boss.yml:0.30

Archivo: phase_2_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.lua
- arrow_fireworks.lua

Archivo: phase_3_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: WITHER_SKELETON
powers:
- arrow_rain.lua

Esto constituye un Jefe de Fases válido. Si invocas phase_1_boss.yml, hará aparecer un Stray con los atributos listados arriba. Tras ser dañado hasta el 60% de su salud, será reemplazado inmediatamente en la misma ubicación por el Jefe Personalizado formado en phase_2_boss.yml, ya que el archivo de configuración indica - phase_2_boss.yml:0.60 (phase_2_boss.yml es el nombre de archivo de ese jefe personalizado, 0.60 es el 60% de salud). Ten en cuenta que el jefe de la fase 2 aparecerá con el 60% de su salud, ya que ese es el momento en que cambia a esa fase. El jefe tendrá los poderes listados en el archivo phase_2_boss.yml. Una vez que el jefe de la fase 2 es dañado hasta el 30% de su salud, hace aparecer al jefe establecido para la fase 3. Ten en cuenta que los poderes de la fase 3 no están relacionados con los anteriores — puedes cambiar por completo los poderes entre fases, igual que casi todos los demás atributos.

Avanzado​

Mecánicas heredadas​

Aquí hay una lista de cosas que no cambian de una fase a otra:

  • El primer Jefe de Fases de la cadena determina por qué fases pasará el jefe, lo que significa que no deberías poner una entrada de phases para los demás jefes de la fase.

  • La tabla de amenaza / tabla de daño permanece igual, lo que significa que la distribución del botín y el sistema de aggro avanzado no se ven afectados por un cambio de fase

  • La transición usa el porcentaje de salud configurado para la siguiente fase. Si la fase 2 empieza al 50%, recibe el 50% de su propia salud máxima, aunque el golpe que provocó el cambio hubiera dejado a la fase anterior por debajo de ese umbral. Cada fase puede tener una salud máxima diferente.

Las fases que alcanzan el límite de salud tienen el mismo máximo

La salud de los jefes queda limitada por el valor settings.attribute.maxHealth.max del servidor (2048 por defecto). Si varias fases se configuran con un level y un healthMultiplier lo bastante altos como para alcanzar ese techo, todas acaban con exactamente 2048 de salud y las diferencias de salud por fase que pretendías desaparecen. Los ejemplos de esta página (level: 50, healthMultiplier: 10) están en ese terreno: consulta healthMultiplier para ver el nivel en el que se topa cada multiplicador.

  • Los jefes de fases no instanciados que cumplen las condiciones vuelven a la fase 1 cuando la regeneración fuera de combate llama a fullHeal(). Esto requiere regenerateCustomBossHealthOnCombatEnd; esa ruta del evento excluye a los phantoms. Los jefes instanciados omiten fullHeal(). Curarse normalmente hasta la salud máxima no provoca por sí solo un reinicio de fase.

  • Los jefes regionales conservan el radio de correa y el tiempo de reaparición establecidos por la fase 1, y reaparecen como fase 1 tras ese plazo. La transición usa una aparición silenciosa y no inicia un nuevo temporizador de escape; configura el timeout del encuentro en la fase 1.

  • La fase 1 también determina normalizedCombat para toda la cadena. Una fase con level: -1 conserva el nivel ya resuelto del encuentro, incluido el nivel seleccionado de una instancia; un nivel explícito en la nueva fase lo reemplaza.

Ubicaciones de aparición específicas de cada fase​

De forma predeterminada, los jefes permanecen en su ubicación actual al hacer la transición entre fases. Sin embargo, puedes hacer que un jefe se teletransporte a una ubicación específica al entrar en una fase usando el ajuste phaseSpawnLocation:

Archivo: phase_2_boss.yml

isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.lua
- arrow_fireworks.lua
phaseSpawnLocation: world_name,100,64,100,0,0

También puedes teletransportar al jefe manteniéndolo en el mismo mundo:

phaseSpawnLocation: same_as_boss,100,64,100,0,0

Esto es útil para crear transiciones de fase dramáticas en las que el jefe se teletransporta a una arena o ubicación diferente.

Advertencias​

Aquí hay una lista de mecánicas que funcionan de una forma que puede resultar contraintuitiva al principio:

  • El daño normal de EliteMobs no puede saltarse una siguiente fase válida con un solo golpe: cruzar su umbral cancela ese golpe y avanza una fase. El botín procede de la configuración activa cuando el jefe muere realmente. Configura las recompensas de la fase final. Cuando se rechaza una transición, por ejemplo porque phaseSpawnLocation indica un mundo que no está cargado, el golpe que cruza el umbral sigue cancelándose, por lo que el daño normal no puede bajar al jefe de ese umbral hasta que se corrija el problema.

  • Cada fase ejecuta su rutina de aparición, incluidos los onSpawnCommands aplicables. Las transiciones y los reinicios por salud completa usan una aparición silenciosa que suprime el anuncio normal. Las reapariciones regionales tras el tiempo de espera pueden anunciarse de nuevo. Un cambio de fase no es una muerte y no ejecuta comandos de muerte.

  • Los jefes regionales aplican los bloques transitivos ON_REMOVE de la fase saliente antes de avanzar. La nueva fase aplica después sus bloques de aparición. La muerte real o el comando kill aplica los bloques de eliminación de la fase final. Las descargas normales de chunks y los reinicios por salud completa no cuentan como derrotas para esa limpieza.

  • Los cambios de fase eliminan la montura registrada de la fase saliente; la nueva fase crea su montura configurada. Un reinicio por salud completa también elimina la montura actual y usa la configuración de montura de la fase 1.

  • Cada fase recarga sus poderes. Por ello, el estado de refuerzos ONCE del poder custom_summon se reinicia al cambiar de fase o volver a la fase 1; no es un límite de una vez por encuentro.

Trucos y consejos​

  • Puedes aprovechar el hecho de que el equipamiento y los tipos de entidad pueden cambiarse a lo largo del combate para hacer que el jefe se vea cada vez más (o cada vez menos) peligroso a lo largo de la pelea

  • Aunque es posible, a menos que tengas un objetivo de diseño específico en mente, probablemente sea mejor que los poderes del Jefe de Fases no cambien demasiado drásticamente entre fases, ya que es más probable que los jugadores disfruten de una progresión que se sienta natural a lo largo de la pelea.

  • Puedes usar comandos onSpawn para ejecutar comandos entre fases

  • Configura song en cada fase que deba cambiar la música. Un valor diferente reemplaza la pista; el mismo valor la continúa. Omitir song en una fase posterior no detiene la pista anterior.

  • Las fases pueden usarse para cambiar al jefe de modo cuerpo a cuerpo a modo a distancia y viceversa

  • Los Jefes de Fases fueron construidos para ser jefes resistentes con mucho HP. Suelen funcionar mejor como encuentro de jefe final de mazmorras o como grandes Jefes de Mundo (World Bosses).

  • Los refuerzos pueden seguir vivos entre fases. cullReinforcements en la fase saliente controla su limpieza; un reinicio a la fase 1 también solicita la limpieza de refuerzos.

  • Los jefes pueden tener tantas fases como quieras, pero cuantas más fases tengan, más salud necesitarán para que cada fase tenga sentido.

Integración con la API​

Para desarrolladores de plugins: EliteMobs dispara un ElitePhaseSwitchEvent cuando un jefe hace la transición entre fases. Este evento puede usarse para crear comportamientos o efectos personalizados durante las transiciones de fase:

El evento también se dispara al volver a la fase 1. Se dispara cuando el cuerpo de la nueva fase ya ha aparecido, después de aplicar su porcentaje de salud y los 20 ticks de gracia de combate. Una transición que espera a su chunk de destino solo dispara el evento cuando aparece el cuerpo.

@EventHandler
public void onPhaseSwitch(ElitePhaseSwitchEvent event) {
CustomBossEntity boss = event.getCustomBossEntity();
PhaseBossEntity phaseBoss = event.getPhaseBossEntity();
// Your custom logic here
}