Contenido generado con IA — puede contener errores.

Módulos

Combate

Recompensas por baja y rachas, recompensas por cabeza, estadísticas y contadores de módulos con rankings, qué pasa al morir, y tumbas.

Recompensas por baja

Cada baja puede pagar, y las bajas seguidas montan una racha. Las dos se escriben en modules/kill-rewards/rewards.yml.

on-kill:
  money: 3
  commands: []
  killer:   { chat: "", actionbar: "", title: "", sound: "" }
  victim:   { chat: "", actionbar: "", title: "", sound: "" }
  server-broadcast: ""
streak-milestones:
  '3':  { … }
  '5':  { … }
  '10': { … }
streak-end:
  min-streak: 3
  commands: []
  killer: { … }
  victim: { … }
  server-broadcast: ""

%killer%, %victim%, %streak% y %victim_streak% están disponibles en todo el archivo. Los comandos aceptan un prefijo console: o player:.

money le paga al asesino en la moneda por defecto, multiplicado por los potenciadores de dinero de kill-rewards (ver Economía), y %money% es lo que se pagó, con potenciadores incluidos. Funciona en on-kill, en cada hito de racha y en streak-end. El on-kill que viene paga 3 así, donde antes ejecutaba eco give %killer% 50.

settings.worlds es una lista blanca: vacía significa todos los mundos. settings.streak-reset-on-logout decide si una racha sobrevive a una desconexión.

/killrewardsadmin reset <jugador> y /killrewardsadmin resetbest <jugador> (alias /kra, nodo exyliasurvivalcore.killrewards.admin) borran la racha actual o la mejor de un jugador, esté conectado o no. Las dos rachas viven en memoria, así que un reinicio también las borra. El best_kill_streak del módulo de estadísticas es un valor aparte, guardado, y no se toca.

Recompensas por cabeza

/bounty place <jugador> <cantidad> pone dinero sobre una cabeza. Quien mate a ese jugador se lo lleva. Varios jugadores pueden aportar a la misma cabeza, y /bounty lista las abiertas con sus aportaciones.

AjustePor defectoQué hace
min-amount25Aportación mínima
max-amount100000Máxima, -1 para ilimitada
max-bounties-per-placer5Cuántas cabezas puede financiar un jugador
max-target-pool-1Techo del total de una cabeza
allow-self-bountyfalseSi un jugador puede financiar su propia cabeza
cancel-penalty-percent10Lo que se retiene al cancelar una aportación
expiry-hours-1-1 no caduca nunca
allow-anonymoustrueSi se puede ocultar el nombre de quien la pone
notify-target-on-logintrueSi se avisa al perseguido al conectarse
target-bossbar-duration-seconds10Cuánto se le muestra la barra de jefe

Los administradores tienen /bountyadmin add, remove y clear.

Otro plugin puede rechazar un cobro con BountyClaimEvent, que se consulta antes de mover dinero: un cobro rechazado deja todas las recompensas sobre la víctima para la siguiente baja. Ver API.

Dos cosas de este módulo no funcionan como se leen

/bounty cancel abre la misma lista que /bounty y no cancela nada: cancela una aportación desde el menú.

exyliasurvivalcore.bounties.anonymous no tiene ningún efecto por el flujo normal. /bounty place calcula bien la marca y se la pasa a la pantalla de confirmación, pero el bounty_place_confirm.yml que viene le pasa false igualmente, así que toda recompensa puesta así lleva nombre.

Estadísticas

A la pantalla de estadísticas llegan dos tipos de número. El módulo de estadísticas lleva cuatro valores de PvP propios — bajas, muertes, mejor racha y racha actual — y cada módulo lleva contadores de lo que hacen sus jugadores: bloques minados, cajas abiertas, warps usados. modules/stats/stats.yml decide cuáles se muestran y se clasifican.

El archivo que viene es corto a propósito, con las stats por las que compiten los jugadores:

stats:
  kills:              { type: INTERNAL, format: NUMBER,  leaderboard: true, … }
  deaths:             { type: INTERNAL, format: NUMBER,  leaderboard: true, … }
  kdr:                { type: COMPUTED, format: DECIMAL, formula: KILLS_PER_DEATH }
  best_kill_streak:   { type: INTERNAL, format: NUMBER,  leaderboard: true, … }
  current_streak:     { type: INTERNAL, format: NUMBER,  leaderboard: false, … }
  duels_won:          { type: COUNTER,  counter: 'duels.wins',         format: NUMBER }
  balance:            { type: VAULT,    format: MONEY }
  bounties_claimed:   { type: COUNTER,  counter: 'bounties.claimed',   format: NUMBER }
  bounties_earned:    { type: COUNTER,  counter: 'bounties.earned',    format: MONEY }
  votes_total:        { type: COUNTER,  counter: 'votes.total',        format: NUMBER }
  votes_best_streak:  { type: COUNTER,  counter: 'votes.best_streak',  format: NUMBER }
  market_sold:        { type: COUNTER,  counter: 'market.sold',        format: NUMBER }
  market_earned:      { type: COUNTER,  counter: 'market.earned',      format: MONEY }
  blocks_mined:       { type: COUNTER,  counter: 'mines.blocks',       format: NUMBER }
  farming_harvested:  { type: COUNTER,  counter: 'farming.harvested',  format: NUMBER }
  crates_opened:      { type: COUNTER,  counter: 'crates.opened',      format: NUMBER }
  missions_completed: { type: COUNTER,  counter: 'missions.completed', format: NUMBER }
  mobs_killed:        { type: COUNTER,  counter: 'kills.mobs',         format: NUMBER }
  playtime:           { type: PAPI,     format: TIME, placeholder: "%exyliasurvivalcore_playtime_millis%" }

Todas vienen con enabled: true, y todas menos current_streak tienen ranking.

typeDe dónde sale el número
INTERNALUno de los cuatro valores de PvP que lleva el módulo: kills, deaths, best_kill_streak, current_streak
COUNTERUn contador de módulo, nombrado en counter. Si falta, se usa el id de la propia stat como clave
COMPUTEDUna fórmula sobre los valores de PvP
PAPICualquier nombre de PlaceholderAPI
VAULTEl saldo del jugador

format es NUMBER, DECIMAL, MONEY o TIME. leaderboard: false deja una stat fuera de los rankings pero visible en el perfil.

`COMPUTED` tiene exactamente una fórmula

KILLS_PER_DEATH es el único valor que acepta formula. Cualquier otro cae en él en silencio.

AjustePor defectoQué hace
leaderboard-refresh-interval300Segundos entre reconstrucciones del ranking
papi-sample-interval60Segundos entre muestras de una stat PAPI o VAULT
leaderboard-size100Hasta dónde llega un ranking
counter-flush-interval60Segundos entre escrituras de los contadores que han cambiado. Menos de 5 cuenta como 5

Una recarga reprograma los tres temporizadores con los valores nuevos.

Contadores

Un contador existe en cuanto un módulo cuenta algo; no hay que declarar nada. %exyliasurvivalcore_stats_counter_<clave>% lee cualquier contador por su clave, como número sin formato, lo liste stats.yml o no: por ejemplo %exyliasurvivalcore_stats_counter_mines.blocks%. Un bloque COUNTER solo sirve para ponerlo en la pantalla de estadísticas y darle ranking. Las misiones y las temporadas leen los mismos contadores: ver Misiones y temporadas.

MóduloContadores
Estadísticas (PvP)kills.players, kills.mobs, kills.mob.<tipo>, deaths.total
Recompensas por cabezabounties.claimed, bounties.earned, bounties.lost
Salas de dueloduels.played, duels.wins, duels.<sala>.played
Tumbasgraves.created, graves.collected, graves.looted
Rankup, tiempo jugado, farmeo, reclaimrankup.ranks, playtime.rewards, farming.harvested, farming.<categoría>.harvested, reclaim.claimed, reclaim.<sección>.claimed
Kits, cajas, cofres de lootkits.claimed, kits.<kit>.claimed, crates.opened, crates.<caja>.opened, lootchests.opened, lootchests.<cofre>.opened
Minasmines.blocks, mines.<mina>.blocks
Warps, homes, spawn, back, tpa, rtpwarps.used, warps.<warp>.used, homes.teleports, homes.created, homes.deleted, spawn.teleports, back.used, tpa.teleports, rtp.used, rtp.<id>.used
Portales, jumpads, power-ups, zonas AFKportals.used, portals.<portal>.used, jumpads.used, jumpads.<jumpad>.used, powerups.picked, powerups.<powerup>.picked, afkzones.rewards, afkzones.<zona>.rewards
Reparaciónrepair.items
Misionesmissions.completed, missions.<grupo>.completed, missions.earned
Recompensas, votosrewards.claimed, votes.total, votes.<servicio>, votes.best_streak
Mercado, subastas, pedidos, intercambiomarket.listed, market.sold, market.bought, market.earned, market.spent, auctions.listed, auctions.bids, auctions.won, auctions.spent, auctions.sold, auctions.earned, orders.placed, orders.filled, orders.received, orders.earned, trade.completed
Varitas de ventasellwands.uses, sellwands.items, autosell.items
Proteccionesprotections.created, protections.upgrades, protections.raids, protections.lives_lost, protections.bans, protections.bought, protections.sold, protections.rented, protections.warp_visits

Las claves se pasan a minúsculas, y una de más de 100 caracteres se ignora en vez de recortarse. Los contadores de dinero — .earned, .spent — suman unidades enteras. votes.best_streak es un récord, no una suma: guarda la racha más alta vista. La lista de la cabecera del stats.yml que viene recoge la mayoría de estos, pero no todos; esta tabla sigue el código.

Se cuenta en memoria. Los contadores que cambian se escriben cada counter-flush-interval segundos, cuando un jugador sale y al apagar el servidor, así que una caída puede perder como mucho ese intervalo. Con el módulo de estadísticas apagado no se cuenta nada, y lo que se habría contado no se guarda para después.

`/stats` sigue sin existir en ejecución

El comando se reescribió para abrir las estadísticas de cualquiera, también de un jugador desconectado — sus valores de PvP, sus contadores y la última muestra de sus stats PAPI y VAULT —, pero a su método le sigue faltando cualquiera de las anotaciones con las que Lamp registra un comando, así que no se añade nada al servidor. exyliasurvivalcore.stats y exyliasurvivalcore.stats.others quedan por tanto inalcanzables, y con ellos ver las estadísticas de otro jugador.

Las pantallas sí funcionan: enlaza survivalcore:stats_open a un botón de cualquier menú, a un NPC o a un objeto de hotbar y el perfil de quien lo pulsa y sus rankings abren con normalidad. Los rankings incluyen a los jugadores desconectados.

Muerte

El módulo de muerte son tres ajustes.

AjustePor defectoQué hace
scatter-radius0.3Cuánto se dispersan los drops, para que una pila no sea un montón
fire-protectiontrueLos drops sobreviven al fuego — no a la lava
custom-messagestrueLa línea de muerte sale de messages.yml y no de vanilla

El anuncio de muerte es uno de los siete que respetan las preferencias de /settings de cada jugador.

Cuando el módulo de tumbas crea una tumba, los drops van primero a ella y el módulo de muerte ya no encuentra nada que dispersar.

Tumbas

Un jugador que muere deja una tumba donde cayó: una cabeza con su cara, un texto flotante con cuenta atrás y dentro todo lo que soltó. Un clic en la cabeza — izquierdo o derecho, con la mano principal — lo recoge todo. Una tumba no tiene ventana.

El módulo viene activado. Sus ajustes están en modules/graves/config.yml.

AjustePor defectoQué hace
settings.expire-minutes60Cuánto dura una tumba. -1 — o 0 — la mantiene hasta que se recoja
settings.on-expireDROPQué hace una tumba caducada con sus objetos: DROP los tira donde estaba y DELETE los borra. Cualquier cosa que no sea DELETE los tira
settings.protect-minutes15Cuánto tiempo solo la puede abrir el dueño. 0 la abre a todos desde el principio y -1 la deja del dueño para siempre
settings.killer-can-loottrueSi quien hizo la baja puede abrirla durante la protección
settings.keep-experiencetrueSi la experiencia que se habría soltado va a la tumba y se le da a quien la recoja
settings.max-graves-per-player5Tumbas que puede tener en pie un jugador. Morir con ese número tira los objetos de la más antigua donde está. -1 es sin límite
settings.blacklisted-worlds[]Mundos, por nombre, donde nadie tiene tumba
settings.allow-teleportfalseSi /graves deja teletransportarse a una tumba propia
settings.teleport-cost0.0Lo que cuesta ese teletransporte. 0 es gratis
hologram.enabledtrueTexto flotante sobre la tumba
hologram.offset1.4A qué altura sobre el bloque
hologram.linestres líneas%player% de quién es, %items% cuántas pilas, %time_left% lo que le queda, %protection% quién la puede abrir
sounds.createdBLOCK_BELL_RESONATE|0.8|0.6Suena para el dueño al crearse la tumba
sounds.collectedBLOCK_CHEST_OPEN|1.0|1.2Suena para quien la recoge

%protection% dice "Anybody can open it", "Only the owner can open it" o "Protected » " seguido del tiempo que queda; las tres líneas son hologram-open, hologram-protected y hologram-protected-for en la sección graves de messages.yml. Las cuentas atrás avanzan cada segundo, y las tumbas caducadas se retiran con el mismo temporizador.

Cuándo se crea una tumba

  • No se crea si el mundo conserva el inventario, en un mundo de la lista negra ni cuando no hay nada que guardar: ni objetos ni experiencia.
  • La cabeza va en el bloque donde murió el jugador si es aire, agua, lava, hierba, helecho, nieve o algas; si no, en el primero de esos que encuentre hasta seis bloques por encima. Si no hay sitio no hay tumba y los drops caen como habrían caído.
  • El bloque que ocupó la cabeza se devuelve a su sitio cuando la tumba desaparece.
  • Si la tumba no se puede guardar, sus objetos y su experiencia caen allí mismo.

Una tumba no se puede romper, y ni las explosiones ni los pistones la mueven.

Recoger

El dueño siempre puede abrir su tumba. Durante la protección también puede el asesino si killer-can-loot está activado; a cualquier otro se le dice de quién es y cuánto falta para que se abra. Pasada la protección, cualquiera se la puede llevar: al dueño se le dice "Grave collected" y a los demás que la han saqueado.

Los objetos van al inventario de quien la recoge. Lo que no cabe se guarda en la tabla de recompensas pendientes de ExyliaLib y se entrega la próxima vez que entre. La experiencia se da junto con los objetos.

Si dos jugadores hacen clic en la misma tumba en el mismo tick, o una tumba caduca mientras alguien la abre, gana exactamente uno: llevarse una tumba es borrar su fila, y solo quien la borró recibe los objetos.

/graves

/graves (alias /grave, nodo exyliasurvivalcore.graves) lista las tumbas propias de un jugador en modules/graves/menus/graves.yml: dónde está cada una, qué hay dentro, hace cuánto murió, cuánto le queda y quién la puede abrir. A quien no tiene ninguna se le dice y no se abre menú. Con allow-teleport activado, hacer clic en una tumba cobra teleport-cost y lleva al jugador hasta ella; si el coste es mayor que 0 y no hay economía disponible, el teletransporte se rechaza. El menú también se abre con la acción survivalcore:graves_open.

Cuando varios servidores comparten una base de datos, una tumba solo se carga en el servidor donde se creó.

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