Profiles
Descripción general
Profiles da a cada jugador varios personajes independientes en la misma cuenta. Cambiar de perfil intercambia el inventario, el cofre de ender, la experiencia, la salud y la comida del jugador, y también sus hechos de TypeWriter, de modo que el progreso de las misiones, los desbloqueos y los contadores son independientes para cada personaje. Otras extensiones de BTC, como BTC Sky, asocian sus propios datos al perfil activo.
Los perfiles se crean y se eligen desde un menú que diseñas en el panel web. Un servidor puede obligar a los jugadores a elegir un perfil antes de poder moverse, construir, luchar o chatear. Los datos se almacenan en una base de datos cuando el puente MySQL está activado, lo que hace que los perfiles estén disponibles en todos los servidores de una red, y en archivos en caso contrario.
El sistema está ligado al modo de juego del servidor (mysql.game-mode.current): un jugador tiene una lista de perfiles distinta en cada modo de juego.
Características
- Personajes independientes: inventario, armadura, mano secundaria, cofre de ender, nivel, experiencia, salud, comida y saturación por perfil.
- Estado de la historia independiente: los hechos de TypeWriter se guardan al cambiar y se restauran para el perfil.
- Menú de perfiles: una GUI con una ranura por perfil y plantillas para las ranuras activas, inactivas, libres y bloqueadas.
- Selección obligatoria: hasta que haya un perfil activo, el jugador no puede moverse, interactuar, romper, colocar, soltar, luchar ni chatear.
- Solo y cooperativo: un perfil se crea como solo o cooperativo (isla compartida de BTC Sky), y un modo de juego sin cooperativo se salta la pregunta.
- Límites: un máximo por defecto y límites más altos por permiso.
- Protección de cambio: un cooldown entre cambios y un evento que otras extensiones pueden cancelar.
- Entradas: acciones para abrir el menú, crear, cambiar, renombrar, eliminar y guardar, hechos sobre el estado del perfil y eventos.
- Entre servidores: los perfiles y sus datos se comparten mediante el puente MySQL.
- Placeholders: nombre, id, recuento, límites y detalles por perfil para menús y HUD.
Instalación
- Instala la extensión GUI, que dibuja el menú. La extensión Basic está declarada como dependencia.
- Recomendado: instala la extensión MySQL y actívala (
mysql.enabled: true). Sin ella, los perfiles se almacenan en archivos y no se comparten entre servidores. - Coloca el JAR de Profiles en
plugins/Typewriter/extensions/y reinicia el servidor. - Edita la sección
profilesdeplugins/Typewriter/mysql/config.yml; consulta Configuración. Profiles lee sus ajustes del archivo de configuración de la extensión MySQL incluso cuando no usas una base de datos. - Crea las entradas de menú descritas en Primeros pasos.
Primeros pasos
Configura una selección de perfil que los jugadores nuevos deban completar:
- En el panel web de TypeWriter, abre una página y añade una entrada Profile Menu Config.
/profileabre la primera que encuentre y no hace nada cuando no existe ninguna. - Establece
inventoryTitle,inventoryRowsyguiType. Construye el layout enlayoutPooly establecemainLayoutId. Consulta las guías de GUI. - Coloca objetos con
buttonPrefixprofile_button:ybuttonTypePROFILE_SLOTdonde deban aparecer los perfiles. Cada marcador muestra un perfil, leído de izquierda a derecha y de arriba abajo. Las ranuras por debajo del límite del jugador que no contienen ningún perfil muestrancreateProfileTemplate, y las ranuras que superan el límite muestranmaxProfilesTemplate. - Establece
defaultMaxProfilesy, si es necesario,permissionLimits. - Crea las dos páginas de GUI que se usan para la creación, como entradas Open GUI con los ids
profile_create_chooser(una elección entre Solo o Coop) y, para los modos de juego sin cooperativo,profile_create_solo. Un botón de estas páginas ejecutaprofile create solooprofile create coop, yprofile createsolo, para los modos solo. - En
plugins/Typewriter/mysql/config.yml, compruebaprofiles.force-profile-selection(por defectotrue) yprofiles.coop-supported. - Publica, entra al servidor y elige o crea un perfil.
Usa Switch Profile Action o Open Profile Menu Action desde NPC y objetos. Reacciona a los cambios hechos por la acción de cambio o por comandos escritos con el Profile Switched Event.
Usa los hechos Profile Count Fact e Is Profile Active Fact en los criterios. Por ejemplo, muestra un botón de "crear un perfil" solo mientras Can Create Profile Fact valga 1.
Cómo funciona
En un cambio, la extensión comprueba el cooldown y después dispara un evento previo al cambio que se puede cancelar, para que un modo de juego pueda rechazarlo (por ejemplo durante una guerra o un minijuego). A continuación captura el estado actual del jugador, lo escribe en el repositorio, borra los hechos de TypeWriter y el inventario del jugador y restaura los datos del perfil de destino. El estado del perfil activo también se guarda cuando el jugador se desconecta.
Lo que se guarda depende de la configuración: inventario y cofre de ender (save-inventory, save-ender-chest) y estadísticas de Minecraft (save-statistics, desactivado por defecto por su tamaño). El nivel, la experiencia, la salud, la comida y los hechos de TypeWriter se guardan siempre.
Como los hechos se intercambian, todo lo que se almacena en un hecho pertenece al perfil. Los datos de otras extensiones siguen su propio profile-mode en la configuración de MySQL: los datos per-profile se conservan por separado para cada perfil y los datos shared son comunes a todos los perfiles.
Configuración
Profiles no tiene archivo de configuración propio. Sus ajustes están en la sección profiles de plugins/Typewriter/mysql/config.yml, creado por la extensión MySQL.
| Clave | Valor por defecto en el archivo incluido | Significado |
|---|---|---|
profiles.enabled | true | Activa el sistema de perfiles. |
profiles.max-profiles | 2 | Máximo de perfiles por jugador cuando no existe ninguna entrada Profile Menu Config. El defaultMaxProfiles de la entrada lo sustituye. |
profiles.default-profile-name | Principal | Nombre del perfil automático. |
profiles.save-statistics | true | Guarda las estadísticas de Minecraft por perfil. Usa mucho almacenamiento. |
profiles.save-inventory | true | Intercambia el inventario por perfil. |
profiles.save-ender-chest | true | Intercambia el cofre de ender por perfil. |
profiles.require-permission | false | Exige typewriter.profiles.create para crear un perfil. |
profiles.auto-create-default | true | Crea un perfil por defecto en la primera entrada. Solo funciona cuando coop-supported es false. |
profiles.force-profile-selection | true | Bloquea al jugador hasta que haya un perfil activo. |
profiles.switch-cooldown-seconds | 60 | Retraso mínimo entre dos cambios de un jugador. 0 lo desactiva. |
profiles.coop-supported | true | Si este modo de juego tiene perfiles cooperativos. Cuando es false, se omite la pregunta Solo o Coop y todos los perfiles son en solitario. |
profiles.creation-menu-entry-id | vacío | Id de la página de GUI que se abre para crear un perfil. Vacío significa profile_create_chooser cuando hay cooperativo y profile_create_solo en caso contrario. |
Los valores anteriores son los del archivo incluido. Los valores de reserva integrados difieren cuando falta una clave (max-profiles 5, save-statistics true, auto-create-default false), así que conserva las claves en tu archivo.
Almacenamiento. Con mysql.enabled: true y profiles.enabled: true, los perfiles se almacenan en la tabla typewriter_profiles. En caso contrario, se almacenan como assets en profiles/<game mode>/<player uuid>.json. Los perfiles guardados en el antiguo artefacto Profile Storage Artifact se copian automáticamente al nuevo almacenamiento al arrancar.
Menús
La entrada Profile Menu Config describe el menú. Un clic en un perfil cambia a él, Mayús + clic izquierdo lo elimina (tras una pantalla de confirmación, salvo que deleteConfirmation esté desactivado), y un clic en una ranura libre abre la página de creación. Al crear un perfil se pide su nombre en un yunque. {profile_name}, {profile_id}, {created_date}, {last_used}, {level}, {exp}, {health}, {food}, {profile_count} y {max_profiles} se pueden usar en títulos, nombres y lore.
Los objetos botón con buttonPrefix profile_button: admiten PROFILE_SLOT (un perfil) y los marcadores INFO y CLOSE, que ejecutan profile info y gui:close.
Las ranuras pueden ejecutar profile open, profile select <id>, profile create solo|coop y profile delete <id>, como el jugador que hace clic.
Los textos por defecto del menú, los mensajes y el mensaje del cooldown están en francés. Cámbialos en la entrada del menú.
Comandos
Todos los comandos necesitan profiles.use. Alias: /profil, /profiles.
| Comando | Descripción |
|---|---|
/profile | Abre el menú de perfiles. |
/profile menu | Abre el menú de perfiles. |
/profile select <id> | Cambia a un perfil. |
/profile create solo o coop | Crea y activa un perfil; el nombre se pide en un yunque. Sin modo, solo para los modos de juego sin cooperativo. |
/profile delete <id> [confirm] | Elimina un perfil que no esté activo. Abre antes la pantalla de confirmación si deleteConfirmation está activado, salvo que se indique confirm. |
/profile admin list <player> | Lista los perfiles de un jugador conectado (requiere profiles.admin). |
/profile admin create <player> <name> | Crea un perfil en solitario para un jugador. |
/profile admin delete <player> <id> | Elimina un perfil de un jugador. |
/profile admin switch <player> <id> | Cambia a un jugador a un perfil. |
/profile admin rename <player> <id> <name> | Renombra un perfil. |
/profile headless list, select <id>, create <name> | Gestiona tus propios perfiles sin menú (requiere profiles.headless). |
Un listener del menú gestiona /profile cuando lo escribe un jugador, antes que el árbol de comandos: admite select, create, delete y la apertura del menú, e ignora los demás. Por tanto, /profile admin ... y /profile headless ... funcionan de forma fiable desde la consola o mediante los alias /profil y /profiles.
Permisos
| Permiso | Por defecto | Concede |
|---|---|---|
profiles.use | Todos | Los comandos /profile. |
profiles.admin | Operadores | /profile admin. |
profiles.headless | Nadie | /profile headless, para clientes sin pantalla como los bots de prueba. |
profiles.switch.bypasscooldown | Nadie | Cambiar sin cooldown. |
typewriter.profiles.create | Nadie | Crear perfiles cuando profiles.require-permission es true. |
Permisos de permissionLimits | Tú eliges | Elevan el límite de perfiles. Prevalece el límite más alto. |
Placeholders
Etiquetas de MiniPlaceholders para texto MiniMessage. Una referencia es una posición en la lista (dígitos, desde 0) o un id de perfil.
| Placeholder | Devuelve |
|---|---|
<profile_active_id>, <profile_active_name> | Id y nombre del perfil activo. |
<profile_active> | 1 cuando hay un perfil activo. Con una referencia, <profile_active:0> indica si ese perfil es el activo. |
<profile_count> | Número de perfiles. |
<profile_max> | Número máximo de perfiles del jugador. |
<profile_can_create> | 1 cuando el jugador puede crear otro perfil. |
<profile_remaining> | Número de perfiles aún disponibles. |
<profile_friend_count> | Número de amigos, 0 sin la extensión Friend. |
<profile_enabled> | 1 cuando el sistema está activado. |
<profile_name:ref>, <profile_id:ref> | Nombre e id de un perfil. |
<profile_created:ref>, <profile_last_used:ref> | Fechas con el formato dd/MM/yyyy HH:mm. |
<profile_created_timestamp:ref>, <profile_last_used_timestamp:ref> | Milisegundos de época. |
<profile_level:ref>, <profile_exp:ref> | Nivel y progreso de experiencia como porcentaje. |
<profile_health:ref>, <profile_food:ref> | Salud guardada y nivel de comida. |
Entradas
20 entradas, generadas a partir del código fuente de la extensión.
Acciones6
- Create Profile ActionCreates a new profile for the player
- Delete Profile ActionDeletes a specific profile
- Open Profile Menu ActionOpens the profile selection menu for the player
- Rename Profile ActionRenames a specific profile
- Save Profile ActionSaves the current profile state
- Switch Profile ActionSwitches the player to a specific profile
Eventos5
- Profile Created EventTriggered when a player creates a new profile
- Profile Deleted EventTriggered when a player deletes a profile
- Profile Loaded EventTriggered when a player's profile is loaded on join
- Profile Saved EventTriggered when a player's profile is saved
- Profile Switched EventTriggered when a player switches profiles
Hechos7
- Can Create Profile FactReturns 1 if player can create more profiles, 0 otherwise
- Has Active Profile FactReturns 1 if player has an active profile, 0 otherwise
- Is Profile Active FactReturns 1 if the specified profile is active, 0 otherwise
- Max Profiles FactReturns the maximum number of profiles allowed per player
- Profile Coop Enabled FactReturns 1 if the active profile was created as a coop profile
- Profile Count FactReturns the number of profiles a player has
- Profiles Enabled FactReturns 1 if the profile system is enabled, 0 otherwise
Artefactos1
- Profile Storage ArtifactStores player profiles with separate inventories and data
Manifiestos1
- Profile Menu ConfigConfiguration for the profile selection menu
Resolución de problemas
/profile no hace nada. No existe ninguna entrada Profile Menu Config. Crea y publica una.
Los jugadores nuevos están congelados y no pueden chatear. profiles.force-profile-selection es true y no hay ningún perfil activo. Al jugador se le envía a la página de creación tras entrar; asegúrate de que existe la entrada de GUI profile_create_chooser (o profile_create_solo, o tu creation-menu-entry-id). Establece la opción en false para desactivar el bloqueo.
"Choisissez d'abord Solo ou Coop dans le menu des profils." El jugador intentó un comando mientras estaba forzado. Hasta que haya un perfil activo solo se permiten /profile ... y el comando de la página de creación.
"Vous devez attendre N s avant de changer à nouveau de profil." El cooldown de cambio está en marcha. Reduce profiles.switch-cooldown-seconds o concede profiles.switch.bypasscooldown.
No se crea ningún perfil por defecto en la primera entrada. auto-create-default solo funciona cuando coop-supported es false. Con cooperativo, un jugador debe elegir Solo o Coop, y el registro dice "No implicit profile was created; disable the setting."
Los perfiles difieren entre servidores. La extensión MySQL debe estar activada (mysql.enabled: true) en todos los servidores, con la misma base de datos y el mismo modo de juego. Sin ella, los perfiles están en archivos locales. Si MySQL está activado pero falta la fuente de datos, el registro dice "MySQL enabled for profiles but DataSource not found. Falling back to JSON."
Los jugadores pierden objetos tras un cambio. Comprueba save-inventory y save-ender-chest. Cuando son false, el inventario no se intercambia y tampoco se borra, por lo que los objetos se comparten entre perfiles.
Un cambio se rechaza con un mensaje. Otra extensión lo canceló mediante el evento previo al cambio, por ejemplo durante un combate o un minijuego. El mensaje procede de esa extensión.