Créer des phases de boss
Les phases permettent à un boss personnalisé de changer de configuration pendant une rencontre.
Comment fonctionnent les Phases de boss ?
Les Phases de boss peuvent être ajoutées à n'importe quel Boss personnalisé dans EliteMobs à l'aide du format de configuration suivant :
phases:
- phase_2_boss.yml:0.X
- phase_3_boss.yml:0.Y
Note : le boss que vous faites apparaître à l'origine (celui qui contient l'entrée phases: listant toutes les autres phases) est le boss de la phase 1. Le fichier du boss de la phase 1 ne doit PAS se lister lui-même dans sa propre entrée phases:.
Chaque entrée a la forme filename:healthFraction. La fraction doit être supérieure ou égale à 0 et inférieure à 1, par exemple 0.60 ou 0.30, et le fichier de boss référencé doit être chargé et activé. EliteMobs vérifie la liste à chaque création du boss : une entrée invalide empêche ce boss d'apparaître, et le message de la console nomme l'entrée en cause.
Chaque phase référence un autre fichier de boss, permettant de modifier les pouvoirs, les multiplicateurs de dégâts et de santé, le type d'entité, le déguisement et l'équipement. L'état de la rencontre et les paramètres régionaux indiqués ci-dessous restent partagés.
EliteMobs remplace le corps du boss par celui de la phase suivante tout en conservant l'état de la rencontre. Lorsqu'un événement de dégâts franchirait le prochain seuil, il est annulé et la nouvelle phase commence au pourcentage de santé configuré. Les dégâts excédentaires ne sont pas reportés. Le boss bénéficie ensuite de 20 ticks de grâce de combat.
Si le chunk de destination ne peut pas encore faire tourner les entités, EliteMobs le charge et attend jusqu'à 100 ticks (5 secondes) avant de remplacer le corps. Les dégâts infligés au boss sont annulés pendant cette attente. Si le monde de destination n'est pas chargé, ou si le chunk n'est pas prêt à temps, la transition est refusée : le boss conserve sa phase actuelle et la console enregistre un avertissement.
Exemple
Prenons cet exemple de boss à phases :
Fichier : 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
Fichier : phase_2_boss.yml
isEnabled: true
level: 50
healthMultiplier: 10
entityType: SKELETON
powers:
- attack_gravity.lua
- arrow_fireworks.lua
Fichier : phase_3_boss.yml
isEnabled: true
level: 50
healthMultiplier: 10
entityType: WITHER_SKELETON
powers:
- arrow_rain.lua
Ceci constitue un Boss à phases valide. Si vous faites apparaître phase_1_boss.yml, cela générera un Stray avec les attributs listés ci-dessus. Après avoir subi des dégâts jusqu'à 60 % de ses points de vie, il sera immédiatement remplacé au même endroit par le Boss personnalisé tel que défini dans phase_2_boss.yml, puisque le fichier de configuration indique - phase_2_boss.yml:0.60 (phase_2_boss.yml est le nom de fichier de ce boss personnalisé, 0.60 correspond à 60 % des points de vie). Notez que le boss de la phase 2 apparaîtra avec 60 % de ses points de vie, puisque c'est à ce moment qu'il passe à cette phase. Le boss aura les pouvoirs listés dans le fichier phase_2_boss.yml. Une fois que le boss de la phase 2 a subi des dégâts jusqu'à 30 % de ses points de vie, il fait apparaître le boss défini pour la phase 3. Notez que les pouvoirs de la phase 3 n'ont aucun rapport avec ceux d'avant — vous pouvez complètement changer les pouvoirs entre les phases, tout comme presque tous les autres attributs.
Avancé
Mécaniques héritées
Voici une liste de choses qui ne changent pas d'une phase à l'autre :
-
Le premier Boss à phases de la chaîne détermine les phases que le boss traversera, ce qui signifie que vous ne devriez pas mettre d'entrée phases pour les autres boss de la phase.
-
La table de menace / table de dégâts reste la même, ce qui signifie que la distribution du butin et le système d'aggro avancé ne sont pas affectés par un changement de phase
-
La transition utilise le pourcentage de santé configuré pour la prochaine phase. Si la phase 2 commence à 50 %, elle reçoit 50 % de son propre maximum de santé, même si le coup déclencheur aurait fait passer la phase précédente sous ce seuil. Chaque phase peut avoir un maximum de santé différent.
Les points de vie des boss sont plafonnés par le settings.attribute.maxHealth.max du serveur (2048 par défaut). Si plusieurs phases sont configurées avec un level et un healthMultiplier suffisamment élevés pour atteindre ce plafond, elles se retrouvent toutes avec exactement 2048 PV et les différences de points de vie que vous aviez prévues entre les phases disparaissent. Les exemples de cette page (level: 50, healthMultiplier: 10) sont dans ce cas — voir healthMultiplier pour connaître le niveau auquel chaque multiplicateur plafonne.
-
Les boss à phases non instanciés admissibles reviennent à la phase 1 lorsque la régénération hors combat appelle
fullHeal(). Cela nécessiteregenerateCustomBossHealthOnCombatEnd; ce chemin d'événement exclut les phantoms. Les boss instanciés ignorentfullHeal(). Des soins ordinaires jusqu'au maximum ne déclenchent pas à eux seuls une réinitialisation de phase. -
Les boss régionaux conservent le rayon de laisse et le délai de réapparition définis par la phase 1, puis réapparaissent sous cette forme après ce délai. Une transition utilise une apparition silencieuse et ne lance pas de nouveau compte à rebours de fuite ; configurez le
timeoutde la rencontre dans la phase 1. -
La phase 1 détermine également
normalizedCombatpour toute la chaîne. Une phase aveclevel: -1conserve le niveau déjà résolu de la rencontre, y compris celui sélectionné pour une instance ; un niveau explicite dans la nouvelle phase le remplace.
Emplacements d'apparition spécifiques à une phase
Par défaut, les boss restent à leur emplacement actuel lors de la transition entre les phases. Cependant, vous pouvez faire en sorte qu'un boss se téléporte vers un emplacement spécifique en entrant dans une phase à l'aide du réglage phaseSpawnLocation :
Fichier : 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
Vous pouvez aussi téléporter le boss tout en le gardant dans le même monde :
phaseSpawnLocation: same_as_boss,100,64,100,0,0
Ceci est utile pour créer des transitions de phase spectaculaires où le boss se téléporte vers une arène ou un emplacement différent.
Avertissements
Voici une liste de mécaniques qui fonctionnent d'une manière qui peut sembler contre-intuitive au premier abord :
-
Les dégâts ordinaires d'EliteMobs ne peuvent pas sauter une prochaine phase valide en un coup : franchir son seuil annule le coup et fait avancer d'une phase. Le butin vient de la configuration active à la mort réelle du boss. Configurez les récompenses de la phase finale. Lorsqu'une transition est refusée, par exemple parce que
phaseSpawnLocationdésigne un monde non chargé, le coup franchissant le seuil reste annulé : les dégâts ordinaires ne peuvent donc pas faire descendre le boss sous ce seuil tant que le problème n'est pas corrigé. -
Chaque phase exécute sa routine d'apparition, dont les
onSpawnCommandsapplicables. Les transitions et les réinitialisations après régénération complète utilisent une apparition silencieuse, sans annonce normale. Les réapparitions régionales après le délai peuvent à nouveau être annoncées. Une transition n'est pas une mort et n'exécute pas les commandes de mort. -
Les boss régionaux appliquent les blocs transitifs
ON_REMOVEde la phase sortante avant d'avancer. La nouvelle phase applique ensuite ses blocs d'apparition. La mort réelle ou la commande kill applique les blocs de retrait de la phase terminale. Les déchargements ordinaires de chunks et les réinitialisations après régénération complète ne comptent pas comme des défaites pour ce nettoyage. -
Les transitions retirent la monture suivie de la phase sortante, puis la nouvelle phase crée sa monture configurée. Une réinitialisation après régénération complète retire aussi la monture actuelle et utilise la configuration de monture de la phase 1.
-
Chaque phase recharge ses pouvoirs. L'état des renforts
ONCEdu pouvoircustom_summonest donc réinitialisé lors d'un changement de phase ou d'un retour à la phase 1 ; ce n'est pas une limite d'une fois par rencontre.
Astuces et conseils
-
Vous pouvez utiliser le fait que l'équipement et les types d'entités peuvent être modifiés tout au long du combat pour faire paraître le boss de plus en plus (ou de moins en moins) dangereux au fil du combat
-
Bien que ce soit possible, à moins d'avoir un objectif de conception spécifique en tête, il est probablement préférable que les pouvoirs du Boss à phases ne changent pas trop radicalement entre les phases, car les joueurs sont plus susceptibles d'apprécier une progression qui semble naturelle tout au long du combat.
-
Vous pouvez utiliser les commandes onSpawn pour exécuter des commandes entre les phases
-
Définissez
songdans chaque phase qui doit changer la musique. Une valeur différente remplace la piste ; une valeur identique la poursuit. Omettresongdans une phase ultérieure n'arrête pas la piste précédente. -
Les phases peuvent être utilisées pour faire passer le boss du mode mêlée au mode à distance et vice-versa
-
Les Boss à phases ont été conçus pour être des boss coriaces avec beaucoup de PV. Ils sont généralement les mieux adaptés en tant que rencontre de boss final pour les donjons ou en tant que grands Boss de monde.
-
Les renforts peuvent rester vivants entre les phases.
cullReinforcementsdans la phase sortante contrôle leur nettoyage ; un retour à la phase 1 demande également leur nettoyage. -
Les boss peuvent avoir autant de phases que vous le souhaitez, mais plus ils ont de phases, plus ils auront besoin de points de vie pour que chaque phase ait de l'importance.
Intégration API
Pour les développeurs de plugins : EliteMobs déclenche un ElitePhaseSwitchEvent lorsqu'un boss effectue une transition entre les phases. Cet événement peut être utilisé pour créer des comportements ou des effets personnalisés lors des transitions de phase :
L'événement se déclenche aussi lors d'un retour à la phase 1. Il se déclenche une fois le corps de la nouvelle phase apparu, après l'application de son pourcentage de santé et des 20 ticks de grâce de combat. Une transition qui attend son chunk de destination ne déclenche l'événement qu'au moment où le corps apparaît.
@EventHandler
public void onPhaseSwitch(ElitePhaseSwitchEvent event) {
CustomBossEntity boss = event.getCustomBossEntity();
PhaseBossEntity phaseBoss = event.getPhaseBossEntity();
// Your custom logic here
}