Profiles
Visão geral
O Profiles dá a cada jogador vários personagens independentes na mesma conta. Trocar de perfil troca o inventário, o baú do ender, a experiência, a vida e a fome do jogador, e também os seus facts do TypeWriter, de modo que o progresso em quests, os desbloqueios e os contadores são separados para cada personagem. Outras extensões da BTC, como o BTC Sky, anexam seus próprios dados ao perfil ativo.
Os perfis são criados e escolhidos a partir de um menu que você desenha no painel web. Um servidor pode obrigar os jogadores a escolher um perfil antes de poderem se mover, construir, lutar ou conversar. Os dados são armazenados em um banco de dados quando a ponte MySQL está ativada, o que torna os perfis disponíveis em todos os servidores de uma rede, e em arquivos caso contrário.
O sistema está ligado ao modo de jogo do servidor (mysql.game-mode.current): um jogador tem uma lista separada de perfis em cada modo de jogo.
Recursos
- Personagens separados — inventário, armadura, mão secundária, baú do ender, nível, experiência, vida, fome e saturação por perfil.
- Estado de história separado — os facts do TypeWriter são salvos na troca e restaurados para o perfil.
- Menu de perfis — um GUI com um slot por perfil, com templates para slots ativos, inativos, livres e bloqueados.
- Seleção obrigatória — até que um perfil esteja ativo, o jogador não pode se mover, interagir, quebrar, colocar, soltar, lutar nem conversar.
- Solo e coop — um perfil é criado como solo ou coop (ilha compartilhada do BTC Sky), e um modo de jogo sem coop pula a pergunta.
- Limites — um máximo padrão e limites maiores por permissão.
- Proteção na troca — um cooldown entre trocas e um evento que outras extensões podem cancelar.
- Entries — ações para abrir o menu, criar, trocar, renomear, excluir e salvar, facts sobre o estado do perfil e eventos.
- Entre servidores — os perfis e seus dados são compartilhados pela ponte MySQL.
- Placeholders — nome, id, contagem, limites e detalhes por perfil para menus e HUDs.
Instalação
- Instale a extensão GUI, que desenha o menu. A extensão Basic é declarada como dependência.
- Recomendado: instale a extensão MySQL e ative-a (
mysql.enabled: true). Sem ela, os perfis são armazenados em arquivos e não são compartilhados entre servidores. - Coloque o JAR do Profiles em
plugins/Typewriter/extensions/e reinicie o servidor. - Edite a seção
profilesdeplugins/Typewriter/mysql/config.yml; veja Configuração. O Profiles lê suas configurações do arquivo de configuração da extensão MySQL mesmo quando você não usa um banco de dados. - Crie as entries de menu descritas em Primeiros passos.
Primeiros passos
Configure uma seleção de perfil que os novos jogadores devem concluir:
- No painel web do TypeWriter, abra uma page e adicione uma entry Profile Menu Config.
/profileabre a primeira encontrada e não faz nada quando não existe nenhuma. - Defina
inventoryTitle,inventoryRowseguiType. Monte o layout emlayoutPoole definamainLayoutId. Veja os guias do GUI. - Coloque itens com
buttonPrefixprofile_button:ebuttonTypePROFILE_SLOTonde os perfis devem aparecer. Cada marcador mostra um perfil, lidos da esquerda para a direita e depois de cima para baixo. Os slots abaixo do limite do jogador que não têm perfil mostramcreateProfileTemplate, e os slots além do limite mostrammaxProfilesTemplate. - Defina
defaultMaxProfilese, se necessário,permissionLimits. - Crie as duas pages de GUI usadas na criação, como entries Open GUI com os ids
profile_create_chooser(uma escolha entre Solo ou Coop) e, para modos de jogo sem coop,profile_create_solo. Um botão nessas pages executaprofile create soloouprofile create coope, para modos somente solo, apenasprofile create. - Em
plugins/Typewriter/mysql/config.yml, verifiqueprofiles.force-profile-selection(padrãotrue) eprofiles.coop-supported. - Publique, entre no servidor e escolha ou crie um perfil.
Use Switch Profile Action ou Open Profile Menu Action a partir de NPCs e itens. Reaja às trocas feitas pela ação de troca ou por comandos digitados com o Profile Switched Event.
Use os facts Profile Count Fact e Is Profile Active Fact em criteria. Por exemplo, mostre um botão "create a profile" apenas enquanto Can Create Profile Fact for 1.
Como funciona
Em uma troca, a extensão verifica o cooldown e depois dispara um evento de pré-troca cancelável para que um modo de jogo possa recusar (por exemplo, durante uma guerra ou um minigame). Em seguida, captura o estado atual do jogador, grava-o no repositório, limpa os facts do TypeWriter e o inventário do jogador e restaura os dados do perfil de destino. O estado do perfil ativo também é salvo quando o jogador sai.
O que é salvo depende da configuração: inventário e baú do ender (save-inventory, save-ender-chest) e estatísticas do Minecraft (save-statistics, desativado por padrão por causa do tamanho). Nível, experiência, vida, fome e facts do TypeWriter são sempre salvos.
Como os facts são trocados, tudo o que é armazenado em um fact pertence ao perfil. Os dados de outras extensões seguem o próprio profile-mode na configuração do MySQL: os dados per-profile são mantidos separadamente para cada perfil, e os dados shared são comuns a todos os perfis.
Configuração
O Profiles não tem arquivo de configuração próprio. Suas configurações ficam na seção profiles de plugins/Typewriter/mysql/config.yml, criado pela extensão MySQL.
| Chave | Padrão no arquivo fornecido | Significado |
|---|---|---|
profiles.enabled | true | Liga o sistema de perfis. |
profiles.max-profiles | 2 | Máximo de perfis por jogador quando não existe uma entry Profile Menu Config. O defaultMaxProfiles da entry o substitui. |
profiles.default-profile-name | Principal | Nome do perfil automático. |
profiles.save-statistics | true | Salva as estatísticas do Minecraft por perfil. Usa muito armazenamento. |
profiles.save-inventory | true | Troca o inventário por perfil. |
profiles.save-ender-chest | true | Troca o baú do ender por perfil. |
profiles.require-permission | false | Exige typewriter.profiles.create para criar um perfil. |
profiles.auto-create-default | true | Cria um perfil padrão na primeira entrada. Só funciona quando coop-supported é false. |
profiles.force-profile-selection | true | Bloqueia o jogador até que um perfil esteja ativo. |
profiles.switch-cooldown-seconds | 60 | Atraso mínimo entre duas trocas de um jogador. 0 o desativa. |
profiles.coop-supported | true | Se este modo de jogo tem perfis coop. Quando false, a pergunta Solo ou Coop é pulada e todo perfil é solo. |
profiles.creation-menu-entry-id | vazio | Id da page de GUI aberta para criar um perfil. Vazio significa profile_create_chooser quando coop é suportado e profile_create_solo caso contrário. |
Os valores acima são os do arquivo fornecido. Os valores de reserva embutidos diferem quando uma chave está ausente (max-profiles 5, save-statistics true, auto-create-default false), então mantenha as chaves no seu arquivo.
Armazenamento. Com mysql.enabled: true e profiles.enabled: true, os perfis são armazenados na tabela typewriter_profiles. Caso contrário, são armazenados como assets em profiles/<game mode>/<player uuid>.json. Os perfis salvos no antigo artifact Profile Storage Artifact são copiados para o novo armazenamento automaticamente na inicialização.
Menus
A entry Profile Menu Config descreve o menu. Um clique em um perfil troca para ele, Shift + clique esquerdo o exclui (após uma tela de confirmação, a menos que deleteConfirmation esteja desativado), e um clique em um slot livre abre a página de criação. Criar um perfil pede o nome em uma bigorna. {profile_name}, {profile_id}, {created_date}, {last_used}, {level}, {exp}, {health}, {food}, {profile_count} e {max_profiles} podem ser usados em títulos, nomes e lore.
Os itens de botão com buttonPrefix profile_button: suportam PROFILE_SLOT (um perfil) e os marcadores INFO e CLOSE, que executam profile info e gui:close.
Os slots podem executar profile open, profile select <id>, profile create solo|coop e profile delete <id>, como o jogador que clicou.
Os textos padrão do menu, das mensagens e da mensagem de cooldown estão em francês. Altere-os na entry do menu.
Comandos
Todos os comandos exigem profiles.use. Aliases: /profil, /profiles.
| Comando | Descrição |
|---|---|
/profile | Abre o menu de perfis. |
/profile menu | Abre o menu de perfis. |
/profile select <id> | Troca para um perfil. |
/profile create solo ou coop | Cria e ativa um perfil; o nome é pedido em uma bigorna. Sem um modo, apenas para modos de jogo sem coop. |
/profile delete <id> [confirm] | Exclui um perfil que não está ativo. Abre antes a tela de confirmação se deleteConfirmation estiver ativado, a menos que confirm seja informado. |
/profile admin list <player> | Lista os perfis de um jogador online (exige profiles.admin). |
/profile admin create <player> <name> | Cria um perfil solo para um jogador. |
/profile admin delete <player> <id> | Exclui um perfil de um jogador. |
/profile admin switch <player> <id> | Troca um jogador para um perfil. |
/profile admin rename <player> <id> <name> | Renomeia um perfil. |
/profile headless list, select <id>, create <name> | Gerencia seus próprios perfis sem um menu (exige profiles.headless). |
Um listener do menu trata o /profile digitado por um jogador antes da árvore de comandos: ele suporta select, create, delete e a abertura do menu, e ignora os demais. /profile admin ... e /profile headless ... funcionam, portanto, de forma confiável pelo console ou pelos aliases /profil e /profiles.
Permissões
| Permissão | Padrão | Concede |
|---|---|---|
profiles.use | Todos | Os comandos /profile. |
profiles.admin | Operadores | /profile admin. |
profiles.headless | Ninguém | /profile headless, para clientes sem tela, como bots de teste. |
profiles.switch.bypasscooldown | Ninguém | Trocar sem cooldown. |
typewriter.profiles.create | Ninguém | Criar perfis quando profiles.require-permission é true. |
Permissões de permissionLimits | Você escolhe | Aumentam o limite de perfis. O maior limite prevalece. |
Placeholders
Tags do MiniPlaceholders para texto MiniMessage. Uma referência é uma posição na lista (dígitos, a partir de 0) ou um id de perfil.
| Placeholder | Retorna |
|---|---|
<profile_active_id>, <profile_active_name> | Id e nome do perfil ativo. |
<profile_active> | 1 quando um perfil está ativo. Com uma referência, <profile_active:0> informa se esse perfil é o ativo. |
<profile_count> | Número de perfis. |
<profile_max> | Número máximo de perfis para o jogador. |
<profile_can_create> | 1 quando o jogador pode criar outro perfil. |
<profile_remaining> | Número de perfis ainda disponíveis. |
<profile_friend_count> | Número de amigos, 0 sem a extensão Friend. |
<profile_enabled> | 1 quando o sistema está ligado. |
<profile_name:ref>, <profile_id:ref> | Nome e id de um perfil. |
<profile_created:ref>, <profile_last_used:ref> | Datas no formato dd/MM/yyyy HH:mm. |
<profile_created_timestamp:ref>, <profile_last_used_timestamp:ref> | Milissegundos desde a época Unix. |
<profile_level:ref>, <profile_exp:ref> | Nível e progresso de experiência em porcentagem. |
<profile_health:ref>, <profile_food:ref> | Vida e nível de fome salvos. |
Entries
20 entradas, geradas a partir do código-fonte da extensão.
Ações6
- 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
Fatos7
- 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
Artefatos1
- Profile Storage ArtifactStores player profiles with separate inventories and data
Manifestos1
- Profile Menu ConfigConfiguration for the profile selection menu
Solução de problemas
/profile não faz nada. Não existe uma entry Profile Menu Config. Crie e publique uma.
Os novos jogadores ficam congelados e não conseguem conversar. profiles.force-profile-selection é true e nenhum perfil está ativo. O jogador é enviado à página de criação depois de entrar; confirme que a entry de GUI profile_create_chooser (ou profile_create_solo, ou o seu creation-menu-entry-id) existe. Defina a opção como false para desativar o bloqueio.
"Choisissez d'abord Solo ou Coop dans le menu des profils." O jogador tentou um comando enquanto estava forçado. Apenas /profile ... e o comando da página de criação são permitidos até que um perfil esteja ativo.
"Vous devez attendre N s avant de changer à nouveau de profil." O cooldown de troca está em andamento. Reduza profiles.switch-cooldown-seconds ou conceda profiles.switch.bypasscooldown.
Nenhum perfil padrão é criado na primeira entrada. auto-create-default só funciona quando coop-supported é false. Com coop, o jogador deve escolher Solo ou Coop, e o log diz "No implicit profile was created; disable the setting."
Os perfis diferem entre servidores. A extensão MySQL deve estar ativada (mysql.enabled: true) em todo servidor, com o mesmo banco de dados e o mesmo modo de jogo. Sem ela, os perfis ficam em arquivos locais. Se o MySQL estiver ativado mas a fonte de dados estiver ausente, o log diz "MySQL enabled for profiles but DataSource not found. Falling back to JSON."
Os jogadores perdem itens após uma troca. Verifique save-inventory e save-ender-chest. Quando são false, o inventário não é trocado nem limpo, então os itens são compartilhados entre perfis.
Uma troca é recusada com uma mensagem. Outra extensão a cancelou pelo evento de pré-troca, por exemplo durante uma luta ou um minigame. A mensagem vem dessa extensão.