Cosméticos personalizados
Las cuatro cosas que un jugador se hace para sí mismo, las reglas que las mantienen legibles y qué pasa al editar o borrar una.
Cuatro tipos de cosmético no están en ningún archivo. Los escribe un jugador, pertenecen solo a ese jugador, y cada uno es una fila de una tabla en vez de una entrada que tú curas.
| Tipo | Qué es | Se hace con |
|---|---|---|
customtag | una etiqueta delante del nombre: el texto y el color, los dos suyos | /cc customtag create <texto> [color] |
customcolor | el color de lo que escribe | /cc customcolor create <color> |
customnick | el color de su nombre | /cc customnick create <color> |
customrank | el color con el que se repinta el prefijo y el sufijo de su rango | /cc customrank create <color> |
Una vez existen se comportan como cualquier otro cosmético: salen en un navegador, se pueden marcar
como favoritos, entran en un loadout y se nombran type:id en comandos y placeholders. Lo distinto
es de dónde salen y quién puede llevarlos.
Dónde se hace uno
Dos caminos de entrada, y los dos acaban en el mismo servicio.
Desde el navegador
Cada navegador del catálogo que se empareja con uno de los cuatro — etiquetas, colores de chat, colores de nick, colores de rango — tiene un botón que cambia la cuadrícula del catálogo a lo que ha hecho el jugador. Mientras esa lista está abierta aparece el botón MAKE ONE. Pregunta el texto, luego el color, y escribe la fila.
Desde un comando
/cc customtag create, /cc customcolor create, /cc customnick create y
/cc customrank create hacen lo mismo en una línea, para el jugador que prefiera escribirlo.
Que la lista de lo que ha hecho el jugador sea un botón y no una pestaña es a propósito: un tipo del que nadie ha hecho nada le quitaría igualmente una pestaña al catálogo, en cada navegador, para cada jugador, para siempre.
Abrir MAKE ONE sin tokens de creación lo dice de inmediato y no pregunta nada. Pedirle a alguien que escriba una etiqueta y luego decirle que nunca habría podido pagarla es el único orden que conviene evitar. El token en sí lo cobra después el servicio, que vuelve a comprobar el saldo.
El id es el número de fila
Un cosmético personalizado se identifica por la fila de la base de datos con la que se escribió. La
fila cuarenta y dos que alguien haya hecho es customtag:42, y sigue siendo customtag:42 mientras
exista.
El texto no puede ser la identidad — dos jugadores pueden escribir la misma palabra — y el color tampoco, porque un degradado lleva dos puntos dentro y los dos puntos son justo lo que separa un tipo de un id. El número de fila es lo único que es único, estable y seguro de imprimir.
La propiedad sale de la fila y no de un permiso. El dueño lo posee como se lo daría un permiso: para
siempre y sin ninguna fila que caduque. Nadie más puede ponérselo, y no hay ningún nodo que lo
permita — un cosmético personalizado declara permission: false, así que el nodo habitual
exyliachatcosmetics.<type>.<id> aquí no concede nada.
Lo que hace el jugador gana
Las dos ranuras pueden estar llenas a la vez — un jugador puede poseer una etiqueta del catálogo y haberse escrito la suya — así que algo tiene que decidir. Gana lo que hizo él, en los cuatro sitios, porque es la elección más deliberada.
| Lo que se dibuja | Primero | Luego | Luego |
|---|---|---|---|
| La etiqueta | customtag | tag | nada |
| El nombre | customnick | nick_color | el nombre tal cual |
| El mensaje | customcolor | chat_color | chat.default-color |
| El prefijo y el sufijo del rango | customrank | rank_color | el rango tal como se escribió |
Un color de rango no tiene nada que decir sobre el nombre, personalizado o no. Pinta el prefijo y el sufijo, que es lo que le pertenece a un rango; el nombre es del jugador.
Lo que una etiqueta personalizada tiene que superar
El texto se comprueba en un orden fijo, y la primera regla que falla es la que se le dice al jugador. No se escribe nada ni se cobra ningún token hasta que han pasado todas.
El permiso
exyliachatcosmetics.customtag.create, por defecto true. Si aquí se deniega, ni siquiera se
pregunta el resto.
La longitud
Entre custom-tags.min-length y custom-tags.max-length, contada en puntos de código para que
un carácter fuera del plano básico cuente como uno y no como dos.
Los caracteres que nunca son texto
<, >, {, }, &, §, % y \ se rechazan sin más, permita lo que permita pattern.
`pattern`
Una expresión regular contrastada contra el texto entero. Un patrón que no compila se trata como si no hubiera patrón.
`blacklist`
Palabras que el texto no puede contener, buscadas sin distinguir mayúsculas en cualquier parte.
La unicidad
Con custom-tags.unique activado, un texto que ya tiene otro jugador se rechaza.
El token de creación
Se cobra el último, así que una etiqueta rechazada no cuesta nada, y se cobra antes de escribir la fila, así que un segundo clic se encuentra el saldo ya corto.
El tercer paso es el que más importa y el más fácil de ensanchar sin querer. Esos ocho caracteres son
los que el módulo de texto lee como una instrucción y no como texto: una etiqueta se dibuja como
texto literal y se nombra en los menús como texto formateado, así que un carácter que abre una
etiqueta de MiniMessage, un token de paleta, un código de color legacy o un placeholder nunca es
parte de un nombre. La comprobación no está dentro de pattern; corre antes que él y al margen de
él. Un dueño que ensanche pattern para dejar puntuación a sus jugadores sigue sin poder meter un
< en una etiqueta.
custom-tags:
min-length: 2
max-length: 16
# What the text may contain, as a regular expression over the whole text
pattern: '[A-Za-z0-9_\-]+'
# Words a custom tag may not contain, case-insensitively
blacklist:
- admin
- staff
- owner
# Whether two players may not hold the same text
unique: trueEl color
Una etiqueta personalizada puede nombrar un color y no tiene por qué; los tres colores
personalizados no son otra cosa que uno. En cualquier caso el color se escribe con la gramática de
siempre — #8a51c4, a51c4, 8a51c4, un color con nombre como gold, un token de paleta como
{primary}, o varios de esos separados por dos puntos para un degradado.
| Regla | Dónde |
|---|---|
Un degradado puede pasar como mucho por custom-colors.max-stops paradas | por defecto 4 |
Un - escrito en la pregunta del color deja la etiqueta sin ninguno | se dibuja con el color propio del chat |
| Un color que no se puede leer se rechaza antes de escribir nada | no se cobra ningún token |
custom-colors:
# How many colours a custom gradient may run through
max-stops: 4Las dos reglas se aplican mientras el jugador escribe, en la propia entrada de texto, y otra vez en el servicio al escribir. La primera es una cortesía; la segunda es la que de verdad sostiene.
Editar conserva el número de fila
Cambiar uno cuesta un token de edición, que es un saldo aparte del de creación y al que una creación no toca nunca. Lo que vuelve es la misma fila: mismo id, misma clave, todo igual salvo lo que dice o de qué color es.
Eso es a propósito, y es la razón entera de que las ediciones se hagan así y no como un borrado más una creación. Una etiqueta puesta sigue puesta. Un color marcado como favorito sigue marcado. Un loadout que lo nombra lo sigue nombrando. Lo que cambió es cómo se ve el cosmético, no qué cosmético es.
Una etiqueta personalizada que se edita pasa por las mismas siete comprobaciones que una nueva, menos el token de creación y más uno de edición. La unicidad ignora la fila que se está editando, así que un jugador puede volver a guardar el texto que ya tiene.
Borrar no devuelve nada
Un token compra el acto de escribir, no la fila que escribió. Borrar una no devuelve nada, y no hay
forma de recuperar saldo que no sea /cca tokens give.
| Comando | Quita |
|---|---|
/cc customtag delete | todas las etiquetas personalizadas del jugador |
/cc customcolor delete <id> | un color de chat personalizado, por número de fila |
/cc customnick delete <id> | un color de nick personalizado |
/cc customrank delete <id> | un color de rango personalizado |
Una fila que está puesta se quita antes de dejar de existir. Después ya nadie puede poseerla, así que dejarla puesta sería solo una línea que no dibuja nada.
Escribirle una a alguien
/cca customtag set <jugador> <texto> [color] le escribe una etiqueta personalizada a un jugador sin
gastar ningún token y sin pedir el permiso de creación. Todo lo demás sigue aplicándose: la
longitud, los ocho caracteres prohibidos, pattern, blacklist y la unicidad se comprueban
exactamente igual que si la escribiera el propio jugador.
Ese es justo el sentido. Las reglas del texto no son un cupo — son lo que mantiene un insulto fuera del chat, y que sea el staff quien escribe la etiqueta no es motivo para saltárselas.
| Comando | Hace |
|---|---|
/cca customtag set <jugador> <texto> [color] | escribe una, gratis, con las reglas puestas |
/cca customtag clear <jugador> | quita todas las etiquetas personalizadas que hizo |
/cca customcolor clear <jugador> | quita todos los colores de chat que mezcló |
/cca customnick clear <jugador> | lo mismo para los colores de nick |
/cca customrank clear <jugador> | lo mismo para los colores de rango |
Todos ellos están bajo exyliachatcosmetics.admin.
¿Falta algo en esta página? Dínoslo en Discord