Créer des pouvoirs
Deux façons d'écrire un pouvoir
Chaque pouvoir se trouve dans ~/plugins/EliteMobs/powers (les sous-dossiers sont également analysés), et il existe deux formats :
| Format | Fichier | À utiliser pour |
|---|---|---|
| Lua | *.lua | Tout nouveau développement. Langage de script complet, tous les hooks de boss, boucles et état. C'est ce qu'utilisent les pouvoirs livrés. |
| EliteScript | *.yml | Le format déclaratif événement/action documenté dans le reste de cette page. Toujours pleinement pris en charge. |
La quasi-totalité des 71 pouvoirs livrés avec EliteMobs sont désormais en Lua — 68 d'entre eux. Seuls bonus_coins.yml, custom_summon.yml et elite_script.yml subsistent en tant que pouvoirs Java adossés à du YAML. Si vous écrivez un nouveau pouvoir de zéro, Lua est la voie disposant du plus de capacités — commencez par Lua : Pour Commencer et Hooks et Cycle de Vie.
Les deux formats se référencent depuis un boss de la même façon, via la liste powers.
.lua remplace un pouvoir .yml du même nomLorsqu'un boss demande attack_fire.yml, EliteMobs cherche d'abord attack_fire.lua et l'utilise s'il existe. C'est pourquoi les anciennes configurations de boss écrites avant Lua continuent de fonctionner sans modification — vous n'avez pas à réécrire vos listes powers:. Les nouvelles configurations devraient nommer directement le fichier .lua.
.lua préfabriqués sont écrits une fois, jamais écrasésChaque pouvoir Lua livré n'est écrit dans le dossier powers que si ce fichier n'existe pas déjà. Une fois que vous en modifiez un, EliteMobs n'écrasera pas votre version lors d'une mise à jour — mais vous cessez aussi de recevoir les correctifs amont le concernant. Si vous souhaitez une copie modifiée, préférez lui donner un nouveau nom de fichier.
on_zone_enter / on_zone_leave ne sont pas déclenchés par les zones LuaLes deux noms de hooks sont acceptés par le fournisseur de scripts de boss et ne provoqueront pas d'erreur de chargement, mais rien dans un pouvoir Lua ne peut les faire se déclencher. Ils ne sont dispatchés que depuis l'écouteur de zone d'EliteScript, lequel est démarré lorsqu'un eliteScript: YAML sur le même boss liste ZoneEnterEvent ou ZoneLeaveEvent dans ses Events:. Un boss ne disposant que de pouvoirs Lua chargera un fichier contenant ces hooks puis ne les appellera jamais.
Ne construisez pas un pouvoir Lua autour de ces deux hooks, sauf si vous l'associez délibérément à un tel script de zone YAML. Utilisez plutôt context.zones:watch_zone(...) (dont les propres callbacks on_enter / on_leave sont invoqués directement), un bloc Zone EliteScript, ou une interrogation depuis on_game_tick. Voir Hooks et Cycle de Vie et Événements de script.
Système de scripting d'EliteMobs
La page suivante décrit comment créer des Elite Scripts !
Il s'agit d'une fonctionnalité avancée qui nécessite une connaissance approfondie d'EliteMobs.
Remarque : Les Elite Scripts peuvent être ajoutés en tant que fichiers de pouvoir ou dans des fichiers de boss personnalisés ! S'ils sont utilisés comme fichiers de pouvoir, vous pouvez les ajouter comme des pouvoirs normaux aux boss en utilisant le paramètre de configuration powers des Boss Personnalisés, comme d'habitude.
Ajouter un EliteScript
Pour commencer à ajouter un EliteScript à un boss, ajoutez l'entrée suivante au fichier du boss :
eliteScript:
Remarque : Ce qui suit est extrêmement sensible à la casse et aux espaces ! Assurez-vous que vos espaces, sauts de ligne et formatage général correspondent aux exemples !
Maintenant que le début de votre script est déclaré, vous pouvez ajouter votre script spécifique. Pour cet exemple, nous allons créer un script appelé Example :
eliteScript:
Example:
Les EliteScripts ont 5 sections différentes : Events, Conditions, Zones, Actions et Cooldowns. Seul Actions est obligatoire.
Examinons un exemple simple :
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,0.5,0
Cooldowns:
local: 60
global: 20
Ce script fait qu'un elite est poussé vers le haut lorsqu'il est frappé par un joueur, et ne le refera pas pendant 3 secondes (et empêchera d'autres pouvoirs de se déclencher pendant 1 seconde en raison des paramètres de la section Cooldowns).
Maintenant que vous connaissez le format général de la structure des scripts, il est temps d'apprendre ce que vous pouvez faire avec chaque section !
Events
Cliquez sur le lien ci-dessus pour apprendre à utiliser les événements !
Targets
Cliquez sur le lien ci-dessus pour apprendre à utiliser les cibles !
Actions
Cliquez sur le lien ci-dessus pour apprendre à utiliser les actions !
Zones
Cliquez sur le lien ci-dessus pour apprendre à utiliser les zones !
Conditions
Cliquez sur le lien ci-dessus pour apprendre à utiliser les conditions !
Cooldowns
Cliquez sur le lien ci-dessus pour apprendre à utiliser les temps de recharge !
Ajouter plusieurs EliteScripts
Vous pouvez avoir plusieurs actions sur un événement, mais que faire si vous voulez plusieurs scripts sur le même boss ? C'est aussi simple que de créer une nouvelle entrée de script ! Développons l'exemple précédent et ajoutons un autre script :
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,0.5,0
Cooldowns:
local: 60
global: 20
Example2:
Events:
- PlayerDamagedByEliteMobEvent
Actions:
- action: SET_ON_FIRE
Target:
targetType: DIRECT_TARGET
Cooldowns:
local: 200
global: 60
Dans cet exemple, nous avons ajouté un second script appelé Example2. Example2 mettra le feu au joueur qui est endommagé par le boss, car le targetType est défini sur DIRECT_TARGET.
Le cooldown de ce script est fixé à 200 ticks, ce qui signifie que le boss ne pourra enflammer les joueurs que toutes les 10 secondes.
Créer des pouvoirs autonomes
Les pouvoirs autonomes sont presque entièrement composés de l'Elite Script. Il n'y a que deux champs optionnels. N'oubliez pas que pour que les pouvoirs autonomes fonctionnent, ils doivent être placés dans le dossier ~plugins/EliteMobs/powers.
Exemple de pouvoir autonome :
isEnabled: true
powerType: UNIQUE
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20
isEnabled
Comme partout ailleurs dans le plugin, définit si le pouvoir est activé.
powerType
Le type de pouvoir définit comment le pouvoir est attribué. Les valeurs sont :
UNIQUE: Le pouvoir ne sera appliqué qu'aux boss personnalisés qui ont le pouvoir défini dans la section des pouvoirs.DEFENSIVE/MISCELLANEOUS/OFFENSIVE: N'IMPORTE QUEL elite pourra obtenir ces pouvoirs, et ils compteront pour un sous-ensemble spécifique de pouvoirs.MAJOR_ZOMBIE,MAJOR_SKELETON,MAJOR_BLAZE,MAJOR_ENDERMAN,MAJOR_GHAST: Seuls les elites du type d'entité approprié pourront apparaître naturellement avec ces pouvoirs, et ils compteront comme pouvoirs majeurs. Ces cinq types sont les seuls à compter comme pouvoirs majeurs ; tout le reste compte comme pouvoir mineur.
Comment powerType atteint les élites naturelles : EliteMobPowers.yml
powerType ne place pas à lui seul un pouvoir devant une élite naturelle. Ce sur quoi les élites naturelles tirent réellement, c'est ~/plugins/EliteMobs/EliteMobPowers.yml, qui contient ces listes :
| Clé | Signification |
|---|---|
defensivePowers | Pouvoirs défensifs que les élites naturelles peuvent tirer au hasard |
offensivePowers | Pouvoirs offensifs que les élites naturelles peuvent tirer au hasard |
miscellaneousPowers | Pouvoirs divers que les élites naturelles peuvent tirer au hasard |
majorPowers.<ENTITY_TYPE> | Pouvoirs majeurs que ce type d'entité peut tirer au hasard |
disabledPowers.<ENTITY_TYPE> | Pouvoirs retirés de ce type d'entité après application des listes partagées |
À la première génération du fichier, chaque liste est amorcée avec tous les pouvoirs chargés du powerType correspondant. Ensuite, le fichier fait autorité et n'est jamais réamorcé : un pouvoir que vous ajoutez plus tard — y compris tout fichier .lua que vous déposez dans le dossier powers — n'apparaîtra pas sur les élites naturelles tant que vous ne l'aurez pas ajouté vous-même à la liste concernée.
Les noms de fichiers .lua et les anciens noms .yml sont tous deux acceptés dans ces listes ; les valeurs par défaut générées sont écrites en utilisant l'alias .yml. Un nom qui ne correspond à aucun pouvoir est ignoré avec un avertissement en console nommant le fichier et la clé.
effect
Définit l'effet visuel ou le matériau utilisé par le pouvoir. Ceci est utilisé par certains pouvoirs codés en dur pour définir leur effet visuel de particules ou de matériau.
| Clé | Valeurs | Par défaut |
|---|---|---|
effect | String | none |
powerCooldown
Définit le temps de recharge, en ticks, pour le pouvoir individuel. Cela contrôle la fréquence à laquelle ce pouvoir spécifique peut se déclencher.
| Clé | Valeurs | Par défaut |
|---|---|---|
powerCooldown | Integer | 0 |
globalCooldown
Définit le temps de recharge global, en ticks, partagé entre tous les pouvoirs. Après le déclenchement de ce pouvoir, aucun autre pouvoir ne peut se déclencher tant que le cooldown global n'a pas expiré.
| Clé | Valeurs | Par défaut |
|---|---|---|
globalCooldown | Integer | 0 |
Créer des pouvoirs Lua autonomes
Un pouvoir Lua autonome n'est qu'un fichier .lua dans ~/plugins/EliteMobs/powers (sous-dossiers compris — le dossier est parcouru récursivement). Il n'y a ni enveloppe YAML ni clés de configuration : le fichier est le pouvoir.
return {
api_version = 1,
on_player_damaged_by_boss = function(context)
if context.player == nil then
return
end
context.player:apply_potion_effect("BLINDNESS", 60, 0)
end
}
Comme il n'y a pas d'en-tête YAML dont les lire, un pouvoir Lua découvert de cette façon reçoit des métadonnées fixes :
powerTypevautMISCELLANEOUS. Vous ne pouvez pas le définir àUNIQUEdepuis le fichier. (Les pouvoirs Lua livrés avec EliteMobs portent leur type en Java, c'est pourquoi ils peuvent êtreUNIQUE,OFFENSIVE,MAJOR_*, etc.)effectn'est pas défini.
En pratique, cela ne fait pas fuiter votre pouvoir vers des élites aléatoires, car les réserves de tirage des élites naturelles proviennent d'EliteMobPowers.yml et ce fichier n'est pas réamorcé une fois qu'il existe — voir ci-dessus. Ajoutez le pouvoir à la liste powers: d'un boss pour l'utiliser.
Hooks disponibles pour les pouvoirs Lua de boss
| Hook | Se déclenche quand |
|---|---|
on_spawn | Le boss apparaît |
on_game_tick | À chaque tick serveur |
on_boss_damaged | Le boss subit des dégâts de n'importe quelle source |
on_boss_damaged_by_player | Le boss subit des dégâts d'un joueur |
on_boss_damaged_by_elite | Le boss subit des dégâts d'une autre élite |
on_player_damaged_by_boss | Le boss inflige des dégâts à un joueur |
on_enter_combat | Le boss entre en combat |
on_exit_combat | Le boss quitte le combat |
on_heal | Le boss se soigne |
on_boss_target_changed | Le boss change de cible |
on_death | Le boss meurt |
on_phase_switch | Le boss change de phase |
on_zone_enter et on_zone_leave sont également acceptés par l'analyseur, mais rien dans un pouvoir Lua ne peut les faire se déclencher — ils ne sont dispatchés que depuis un écouteur de zone EliteScript sur le même boss. Voir l'avertissement en haut de cette page.
Pour savoir ce que vous pouvez réellement appeler à l'intérieur de ces hooks, consultez Lua : Pour Commencer, Hooks et Cycle de Vie et Boss et Entités.
