Contenido generado con IA — puede contener errores.

Sistemas

HUD

El sidebar, la barra de jefe, la barra de experiencia, el feedback de impactos, los sonidos y las partículas: qué muestra cada uno, dónde se configura y qué puede apagar un jugador.

Todo lo que rodea a una ronda se dibuja con paquetes: el scoreboard, la experiencia y el inventario reales del servidor nunca se tocan. Cinco canales, configurados en tres sitios.

CanalSe configura enUn jugador puede apagarlo
Sidebarscoreboards.ymlSí — Sidebar
Barra de jefeconfig.yml → hud.boss-barSí — Boss bar
Barra de experienciaconfig.yml → hud.experience-barNo
Títulos, action bars y sonidosconfig.yml → feedbackAction bar y sonidos — Hit feedback y Hit sounds
Partículas de impactoconfig.yml → hud.hit-particleSí — Hit particles

Los botones de la hotbar también forman parte del HUD; son un archivo de menú y se describen en Menús.

scoreboards.yml define dos sidebars: training, que se muestra durante una sesión en solitario, y match, que ve quien está en un duelo. Se muestra cuando el jugador entra en cualquiera de los dos y se reconstruye cada vez que empieza una ronda en solitario. Fuera de ambos, el plugin no muestra nada, y el tablero que tuviera debajo un plugin de lobby vuelve solo.

plugins/ExyliaAimTrainer/scoreboards.yml
training:
  enabled: true
  title:
    - "{primary}&lAIM TRAINER"
  lines:
    - ""
    - "{secondary}Drill:"
    - " {letters_black}▎ {letters}%exyliaaimtrainer_drill% {muted}· {info}×%exyliaaimtrainer_difficulty%"
    - " {letters_black}▎ {letters}Time {letters_black}» {info}%exyliaaimtrainer_time_left%"
    - ""
    - "{secondary}Live:"
    - " {letters_black}▎ {letters}Score {letters_black}» {highlight}%exyliaaimtrainer_score%"
    - " {letters_black}▎ {letters}Hits {letters_black}» {success}%exyliaaimtrainer_hits% {muted}· {error}%exyliaaimtrainer_misses%"
    - " {letters_black}▎ {letters}Accuracy {letters_black}» {info}%exyliaaimtrainer_accuracy%%"
    - " {letters_black}▎ {letters}Streak {letters_black}» {highlight}%exyliaaimtrainer_streak%"
    - " {letters_black}▎ {letters}Last {letters_black}» %exyliaaimtrainer_grade%"
    - ""
    - "{muted}{server-ip}"
  update:
    interval: 10
    smart: true
    cache: true
match:
  enabled: true
  title:
    - "{primary}&lAIM TRAINER"
  lines:
    - ""
    - "{secondary}Duel: {muted}· {letters}%exyliaaimtrainer_format%"
    - " {letters_black}▎ {letters}vs {highlight}%exyliaaimtrainer_opponent%"
    - " {letters_black}▎ {letters}Round {letters_black}» {info}%exyliaaimtrainer_round%"
    - " {letters_black}▎ {letters}Series {letters_black}» {success}%exyliaaimtrainer_series%"
    - " {letters_black}▎ {letters}%exyliaaimtrainer_match_state%"
    - ""
    - "{secondary}Round:"
    - " {letters_black}▎ {letters}Time {letters_black}» {info}%exyliaaimtrainer_time_left%"
    - " {letters_black}▎ {letters}You {letters_black}» {highlight}%exyliaaimtrainer_score% {muted}· {letters}%exyliaaimtrainer_hits% hits"
    - " {letters_black}▎ {letters}Them {letters_black}» {highlight}%exyliaaimtrainer_opponent_score% {muted}· {letters}%exyliaaimtrainer_opponent_hits% hits"
    - " {letters_black}▎ {letters}Accuracy {letters_black}» {info}%exyliaaimtrainer_accuracy%%"
    - ""
    - "{muted}{server-ip}"
  update:
    interval: 10
    smart: true
    cache: true
ClavePor defectoQué hace
enabledtruefalse deja la sección escrita pero no muestra tablero en ese contexto.
titleuna líneaUna lista. Con varias entradas se anima: cada refresco muestra la siguiente.
linesver arribaLas líneas, de arriba abajo. Como máximo 15; las demás se descartan.
update.interval10Ticks entre refrescos. 20 ticks son un segundo.
update.smarttrueEnvía solo las líneas que cambiaron en lugar del tablero entero.
update.cachetrueSe conserva por los archivos antiguos: ExyliaLib cachea el texto parseado para todos los plugins a la vez.

La referencia completa de claves está en la sección de Sidebars de la librería.

Qué pueden decir las líneas

A un tablero no se le empuja nada. La librería lo dibuja con su propio intervalo y pregunta a los placeholders, así que una línea es cualquier texto con los placeholders %exyliaaimtrainer_<nombre>% de este plugin, y cualquier otro placeholder que resuelva ExyliaLib también funciona. Este archivo lo lee el propio plugin, así que los nombres van sin el nombre del plugin delante; la lista completa, en la forma en que la leen otros plugins, está en Placeholders.

Entre dos rondas, algunas líneas leen los números de por vida

%exyliaaimtrainer_hits%, %exyliaaimtrainer_misses%, %exyliaaimtrainer_shots% y %exyliaaimtrainer_accuracy% significan la ronda en curso mientras hay una y los totales de por vida del jugador en otro caso — y no hay ronda en curso durante la cuenta atrás, mientras el jugador descansa tras un ejercicio ni entre dos rondas de un duelo. En esos momentos las líneas Hits y Accuracy por defecto muestran números de por vida, mientras Score y Streak leen 0 y Last lee —. Escribe las líneas teniéndolo en cuenta, o usa %exyliaaimtrainer_phase% para distinguir los momentos.

El interruptor del jugador

Un jugador que apaga Sidebar en sus ajustes pierde el tablero al instante, y lo recupera al instante cuando lo vuelve a encender. Hasta entonces el tablero sigue oculto en todas sus sesiones siguientes.

Barra de jefe

Aparece cuando empieza la cuenta atrás de una ronda, con toda la duración del ejercicio, y se redibuja mientras la ronda avanza. Su progreso es el tiempo restante. Cuando la ronda termina se queda como la dejó hasta que el jugador sale o empieza la siguiente.

plugins/ExyliaAimTrainer/config.yml
hud:
  boss-bar:
    enabled: true
    text: "{primary}&l%drill% {muted}· {letters}%time% {muted}· {success}%hits% {letters}hits {muted}· {info}%accuracy%% {muted}· {highlight}%score% pts"
    colour: PURPLE
    overlay: PROGRESS
    refresh-ticks: 5
ClavePor defectoQué hace
enabledtruefalse no muestra barra de jefe a nadie.
textver arribaLa línea de la barra.
colourPURPLEPINK, BLUE, RED, GREEN, YELLOW, PURPLE o WHITE.
overlayPROGRESSPROGRESS, NOTCHED_6, NOTCHED_10, NOTCHED_12 o NOTCHED_20.
refresh-ticks5Ticks entre dos redibujados. Como mínimo 1.

El texto conoce sus propios valores, que se rellenan en cada redibujado; no son placeholders globales.

ValorQué es
%drill%El nombre visible del ejercicio
%time%Segundos restantes, redondeados hacia arriba: 30, 1:30
%hits%Impactos hasta ahora
%misses%Fallos hasta ahora
%accuracy%Precisión sin decimales y sin el signo %: 87
%score%La puntuación en vivo
%streak%Impactos seguidos
%opponent_score%La puntuación en vivo del rival en un duelo; 0 en entrenamiento en solitario

Barra de experiencia

Con hud.experience-bar: true (por defecto), el nivel muestra los segundos restantes y la barra se vacía según avanza la ronda. Es un paquete por segundo; la experiencia real del servidor nunca cambia, y se vuelve a enviar en cuanto el jugador sale. No hay interruptor por jugador.

En un ejercicio REACTION el tiempo es el tope del ejercicio, porque la ronda termina con sus intentos.

Feedback de impactos

Cada suceso de una ronda reproduce una entrada de feedback en config.yml. Cada entrada es un efecto de ExyliaLib con cualquiera de estos: un título, una action bar, una barra de jefe, un sonido, una partícula y un fuego artificial; una sección que no se escribe no hace nada. Los campos están en la página de Efectos de la librería.

plugins/ExyliaAimTrainer/config.yml (extracto)
feedback:
  perfect:
    effect:
      action-bar:
        text: "{success}⚡ PERFECT {muted}· {letters}%time%s {muted}· {info}x%streak%"
        duration: 1.5
      sound:
        name: ENTITY_EXPERIENCE_ORB_PICKUP
        volume: 0.7
        pitch: 1.8
    chat: ""
  miss:
    action-bar:
      text: "{error}✘ MISS {muted}· {letters}%accuracy%% accuracy"
      duration: 1.5
    sound:
      name: ENTITY_PLAYER_ATTACK_NODAMAGE
      volume: 1.0
      pitch: 1.0

Durante una ronda

A estas llegan los interruptores Hit feedback y Hit sounds del jugador: apagar uno reproduce el mismo efecto con su action bar, o su sonido, en blanco. Un título nunca se deja en blanco.

EntradaCuándoPor defecto
perfectUn impacto calificado PERFECTAction bar ⚡ PERFECT · %time%s · x%streak%, sonido de orbe de experiencia con tono 1.8
excellentUn impacto calificado EXCELLENT✦ EXCELLENT, tono 1.5
goodUn impacto calificado GOOD✔ GOOD, tono 1.2
okUn impacto calificado OK• OK, tono 1.0
slowUn impacto calificado SLOW▼ SLOW, tono 0.7
missUn clic que no dio a nada✘ MISS · %accuracy%% accuracy, ENTITY_PLAYER_ATTACK_NODAMAGE
expiredUn objetivo FLICK al que se le acabó el tiempo⌛ EXPIRED · %accuracy%% accuracy, BLOCK_NOTE_BLOCK_SNARE
false-startUn clic REACTION antes de la luz✘ TOO EARLY · wait for the light, ENTITY_VILLAGER_NO
armedUn objetivo REACTION que se enciendeSolo sonido, BLOCK_NOTE_BLOCK_PLING
rushedUn impacto COMBO dentro del cooldown de ataque✘ RUSHED · wait for the cooldown, ENTITY_PLAYER_ATTACK_WEAK

Las cinco entradas de calificación tienen un segundo campo, chat: una línea de chat que se envía con el efecto, vacía por defecto. No le afectan los interruptores del jugador. Cómo se califica un impacto está en Puntuación.

Las entradas de calificación, miss, expired y rushed conocen estos valores:

ValorQué es
%grade%La calificación en mayúsculas: PERFECT. Vacío fuera de una entrada de calificación.
%time%El tiempo calificado en segundos, con dos decimales: 0.42. 0.00 fuera de una entrada de calificación.
%hits%Impactos hasta ahora
%streak%Impactos seguidos
%combo%El combo actual
%accuracy%Precisión sin decimales y sin el signo %

El primer impacto de una ronda no tiene un impacto anterior contra el que medirse, así que no tiene calificación: reproduce solo el sonido de la entrada good, y solo si el jugador tiene los sonidos de impacto encendidos.

Alrededor de una ronda

Estas suenan igual para todos, apague lo que apague el jugador.

EntradaCuándoPor defecto
countdownCada segundo de la cuenta atrás; %time% son los segundos restantesTítulo %time% / Left click the targets, action bar Starting in %time%s, BLOCK_NOTE_BLOCK_HAT
goEl primer objetivo está activoTítulo GO, BLOCK_NOTE_BLOCK_PLING
session-completeUn ejercicio en solitario llegó al finalTítulo TIME, UI_TOAST_CHALLENGE_COMPLETE
personal-bestLa ronda superó el mejor rating del jugador; conoce %rating%Título NEW BEST / Rating %rating%, ENTITY_PLAYER_LEVELUP
match-foundLos dos duelistas han llegado a la arenaTítulo MATCH FOUND / Teleporting…
round-wonRonda de duelo ganadaTítulo ROUND WON, ENTITY_PLAYER_LEVELUP
round-lostRonda de duelo perdidaTítulo ROUND LOST, BLOCK_NOTE_BLOCK_BASS
round-drawRonda de duelo empatada y repetidaTítulo DRAW / Same score — replaying, action bar Round replayed
match-wonDuelo ganadoTítulo VICTORY / Match won, UI_TOAST_CHALLENGE_COMPLETE
match-lostDuelo perdidoTítulo DEFEAT / Match lost, ENTITY_WITHER_HURT

Partículas de impacto

plugins/ExyliaAimTrainer/config.yml
hud:
  hit-particle: "ELECTRIC_SPARK|8|0.15|0.15|0.15|0.05"

Se dibujan donde se golpeó un objetivo, solo para el jugador que lo golpeó. La línea es NOMBRE|cantidad|dx|dy|dz|velocidad; una cadena vacía no dibuja nada para nadie. Un jugador con Hit particles apagado no ve ninguna.

Cuándo surte efecto un interruptor

AjusteClave del ajusteSurte efecto
SidebarsidebarAl instante
Boss barboss_barDesde la siguiente ronda, o la siguiente ronda de un duelo
Hit feedbackaction_barDesde la siguiente ronda
Hit soundshit_soundsDesde la siguiente ronda
Hit particlesparticlesDesde la siguiente ronda

Un cambio hecho en mitad de una sesión además envía la línea settings.applies-next-drill. Los interruptores se guardan en el perfil, así que sobreviven a los reinicios. Los nombres que muestra la pantalla de ajustes están en messages.yml, bajo menu.toggles.

Quedarse quieto no es un ajuste

Nadie camina durante una ronda: el plugin descarta el movimiento propio del cliente mientras el HUD está puesto, para todos los jugadores. No hay interruptor para eso.

Recargar

/aimtraineradmin reload vuelve a leer los tres archivos y reconstruye el sidebar de cada jugador que esté en una sesión o en un duelo. La barra de jefe toma un text nuevo en su siguiente redibujado; su color y su overlay se aplican desde la siguiente ronda.

¿Falta algo en esta página? Dínoslo en Discord