PlayerHUD

Bloco de gamificação modular para o Moodle — documentação completa.

English | Português

View on GitHub Download .zip

Moodle Plugin CI MDL Shield Moodle License Status PlayerGames Ecosystem Core Component

O Bloco PlayerHUD é um sistema modular de gamificação para Moodle que introduz mecânicas estruturadas de progressão baseadas em XP, Níveis, Inventário e Ranking.

Ele fornece um HUD (Head-Up Display) dinâmico dentro do curso, permitindo que os alunos acompanhem seu progresso em tempo real, enquanto o professor configura as mecânicas de engajamento de acordo com seus objetivos pedagógicos.

Use a barra lateral para ir a qualquer seção desta página.

Código-fonte: github.com/jeanlucio/moodle-block_playerhud


✨ Funcionalidades

🏆 Comportamento do Ranking de Grupos

Quando o ranking de grupos está habilitado, a média de XP de cada grupo é calculada apenas com os membros que estão participando ativamente — ou seja, membros que tenham simultaneamente:

Membros que optaram por não participar da gamificação ou que ocultaram seu ranking são completamente excluídos da soma e da contagem do grupo. O denominador usado para calcular a média reflete apenas a quantidade de participantes ativos, não o total de membros do grupo.

Implicação prática: um grupo com muitos membros inativos pode apresentar uma média mais alta do que o esperado, pois o cálculo é feito sobre um subconjunto menor. Professores devem ter em mente que a média exibida não representa todos os matriculados no grupo — apenas os que estão participando ativamente do ranking.

Integração com o PlayerGroup

O ranking de grupos lê diretamente das tabelas nativas de grupos do Moodle ({groups} / {groups_members}). Funciona com qualquer grupo do Moodle — criado manualmente pelo professor ou automaticamente pela atividade PlayerGroup.

Quando o PlayerGroup (mod_playergroup) está instalado junto ao PlayerHUD, uma integração adicional é ativada no cabeçalho do bloco (não na aba de ranking): o badge do grupo do estudante, o nome do grupo, a quantidade de membros e a capacidade (ex.: 3/5) são exibidos no topo do bloco. Essa informação é obtida via API pública do PlayerGroup (\mod_playergroup\api\group_info) e está disponível apenas para grupos criados por atividades do PlayerGroup — grupos manuais do Moodle não aparecem ali.

As duas funcionalidades são independentes:

Cenário Aba de Ranking de Grupos Info de grupo no cabeçalho do HUD
PlayerGroup não instalado ✅ Funciona com qualquer grupo do Moodle — Não exibido
PlayerGroup instalado, estudante tem grupo do PlayerGroup ✅ Grupo aparece no ranking ✅ Badge + nome + vagas exibidos
PlayerGroup instalado, estudante está só em grupo manual ✅ Grupo aparece no ranking — Não exibido (grupos manuais não estão na API do PlayerGroup)

⚖️ Painel de Saúde da Economia

A aba Configurações do painel de gerenciamento inclui um widget de Saúde da Economia que compara o total de XP que um estudante pode ganhar (todos os itens × seus limites de drop + recompensas de missões) com o teto de XP configurado (XP por nível × número de níveis).

Cobertura Status
Exatamente 100% ✅ Verde — “Configuração equilibrada”
Abaixo de 100% ⚠️ Amarelo — os estudantes não conseguem atingir o nível máximo; adicione mais itens ou missões, ou reduza o teto
Acima de 100% 🔴 Vermelho — os estudantes podem ultrapassar o teto; reduza o XP de itens/missões ou aumente o teto

O widget também exibe uma tabela expansível com o detalhamento de cada item e missão e sua contribuição individual de XP, facilitando a identificação do conteúdo que está contribuindo mais ou menos para a economia.

🎓 Finalidade Educacional

O PlayerHUD foi projetado para:

Indicado para:

🕹️ Ecossistema PlayerGames

O PlayerHUD faz parte do ecossistema de gamificação PlayerGames. Juntos, esses plugins transformam o Moodle em uma experiência imersiva:

🧩 Integração Opcional: Late Penalty

O poder de item Extensão de Prazo (veja Funcionalidades) não funciona sozinho — ele depende do plugin separado Late Penalty (local_latepenalty, do mesmo autor, mas que não faz parte da família PlayerGames). Quando instalado, resgatar um item de Extensão de Prazo adia o prazo efetivo da atividade para aquele estudante e aciona o recálculo automático do Late Penalty, dispensando ou reduzindo qualquer penalidade de nota por atraso já aplicada. Sem o Late Penalty instalado, o poder do item falha de forma controlada, mostrando uma mensagem de “não instalado” em vez de conceder a extensão.

👉 https://github.com/jeanlucio/moodle-local_latepenalty

📦 Requisitos

Componente Versão
Moodle 4.5+
PHP 8.1+

🛠️ Instalação

  1. Baixe o arquivo .zip ou clone este repositório.
  2. Extraia na pasta blocks/ do seu Moodle.
  3. Renomeie para playerhud (se necessário). Caminho final: seu-moodle/blocks/playerhud/
  4. Instale o plugin obrigatório Filtro PlayerHUD.
  5. Acesse Administração do site > Notificações para concluir a instalação.
  6. Adicione o bloco ao curso.

📖 Como Usar

  1. Adicione o Bloco PlayerHUD ao seu curso.
  2. Acesse o Painel de Gerenciamento (necessário perfil de Professor).
  3. Escolha como configurar:
    • Início rápido: rode o Assistente de Gamificação para gerar automaticamente itens, missões, ranking e outras mecânicas em uma única rodada (veja Funcionalidades acima).
    • Configuração manual: configure cada mecânica você mesmo:
      • Itens
      • Valores de XP
      • Quantidade de níveis
      • Limiares de XP para progressão
      • Posicionamento de drops
      • Tempo de Recarga (intervalo entre coletas)
      • Limites de coleta
  4. Os alunos coletam itens diretamente nas seções do curso.
  5. O sistema atualiza automaticamente XP, níveis e ranking.

🌱 Ambiente de Demonstração (Quick Start)

O plugin inclui dois scripts CLI de seed que criam um curso de demonstração completamente configurado em minutos — útil para desenvolvimento local ou para avaliar o conjunto completo de funcionalidades sem configuração manual.

Script Idioma do curso
cli/seed.php Inglês
cli/seed_pt_br.php Português (Brasil)

O que é criado:

Ranking resultante após o seed:

Pos. Usuário Nome XP
1 seed_carol Carol Staff 195
2 seed_bob Bob Bow 150
3 seed_alice Alice Sword 65
4 seed_dave Dave Shield 60
5 seed_eve Eve Dagger 10

Uso:

# Executar uma vez
php blocks/playerhud/cli/seed_pt_br.php --password=SuaSenhaDev

# Apagar e recriar do zero
php blocks/playerhud/cli/seed_pt_br.php --password=SuaSenhaDev --reset

# Ignorar o guard de site não-desenvolvimento (domínios customizados)
php blocks/playerhud/cli/seed_pt_br.php --password=SuaSenhaDev --force

O parâmetro --password é obrigatório e define a senha de login de todas as contas seed. O script recusa executar em URLs que não sejam de desenvolvimento (localhost, *.local, *.test), a menos que --force seja passado.

Via Docker Compose: docker compose exec <servico-webserver> php blocks/playerhud/cli/seed_pt_br.php --password=SuaSenhaDev

🧪 Testes Automatizados

O PlayerHUD inclui uma suíte de testes extensa que cobre tanto a lógica de negócio (PHPUnit) quanto a aceitação em navegador (Behat). Todo push de CI executa a matriz completa (Moodle 4.5 → 5.x, PostgreSQL e MariaDB).

PHPUnit — Testes Unitários e de Integração

Arquivo de teste Casos
ai/generator_test.php 2
backup_restore_test.php 3
collection_tab_test.php 8
content_crud_test.php 13
cross_instance_security_test.php 12
drop_guard_test.php 7
game_test.php 36
gamemaster_test.php 6
instance_delete_test.php 1
item_delete_cascade_test.php 17
karma_test.php 11
privacy_provider_test.php 10
quest_test.php 34
rpg_classes_test.php 7
story_manager_test.php 15
suggest_trades_state_test.php 4
trade_test.php 8
utils_test.php 4
Subtotal 198

Testes de Lógica de Negócio Compartilhada (tests/local/)

Arquivo de teste Casos
analytics_test.php 11
audit_log_test.php 5
drop_distribution_test.php 12
external_items_test.php 18
wizard_test.php 17
xp_budget_test.php 15
Subtotal 78

Testes de Web Services (tests/external/)

Arquivo de teste Casos
chat_message_test.php 2
collect_item_test.php 4
create_avatar_pack_test.php 6
create_class_pack_test.php 7
create_playercoin_test.php 3
execute_chat_action_test.php 4
generate_ai_content_test.php 2
generate_class_oracle_test.php 2
generate_story_test.php 2
insert_drop_shortcode_test.php 7
load_recap_test.php 3
load_scene_test.php 3
make_choice_test.php 3
remove_drop_shortcode_test.php 5
setup_playercoin_drop_test.php 6
use_item_test.php 6
wizard_apply_suggested_levels_test.php 3
wizard_generate_helpers_test.php 10
wizard_list_runs_test.php 4
wizard_run_step_test.php 56
wizard_start_test.php 8
Subtotal 146

Testes de Controlador (tests/controller/)

Arquivo de teste Casos
aikeys_test.php 4
chapters_test.php 13
classes_test.php 7
collect_test.php 3
drops_test.php 11
export_test.php 7
items_test.php 15
quests_test.php 12
scenes_test.php 6
suggestions_test.php 4
trades_test.php 7
Subtotal 89

Testes de Saída / Renderer (tests/output/)

Arquivo de teste Casos
manage/item_delete_confirm_test.php 9
manage/quest_delete_confirm_test.php 3
manage/tab_chapters_test.php 4
Subtotal 16
Total geral 527
vendor/bin/phpunit --testsuite block_playerhud

Cobertura de linhas geral (moodle-coverage, PHPUnit + Xdebug): 42%.

Ver o detalhamento completo de cada teste e a tabela de cobertura →

🔐 Segurança e Conformidade

🔎 Divulgação de Serviço de Terceiros

O PlayerHUD inclui recursos opcionais de IA: um Gerador de Conteúdo (itens, capítulos, backstories de classes) e um Assistente Game Master (chat conversacional para professores que também pode acionar ações no jogo).

O recurso de IA é obrigatório?

Não. O plugin funciona de forma completa sem qualquer serviço externo. Todo o conteúdo pode ser criado manualmente dentro do Moodle. Os recursos de IA são ferramentas de produtividade — o assistente exige confirmação antes de salvar qualquer coisa.

Cadeia de Provedores de IA

O PlayerHUD seleciona o provedor de IA nível por nível, seguindo a escada compartilhada do ecossistema PlayerGames. Uma chave explicitamente configurada sempre prevalece sobre o padrão institucional; o core_ai fica na base.

Escada de resolução (maior prioridade primeiro):

Nível Origem
1 Chave pessoal própria — chave do professor cadastrada no PlayerHUD (aba Configurações → Chaves de API)
2 Chave pessoal do hub — chave do professor cadastrada no local_aihub (se instalado)
3 Chave de site própria — chave cadastrada pelo admin nas configurações do PlayerHUD
4 Chave de site do hub — chave cadastrada pelo admin nas configurações do local_aihub (se instalado)
5 Moodle core_ai — provedores configurados em Administração do site → IA → Provedores de IA. Nenhuma chave armazenada no PlayerHUD.

Nível primeiro, não provedor primeiro. Cada nível acima é avaliado como um todo: o primeiro nível que contiver qualquer chave é usado exclusivamente. Assim, a chave pessoal do professor (nível 1) sempre prevalece sobre uma chave do hub (nível 2) — mesmo que a chave do hub seja de um provedor de maior prioridade. Por exemplo, a chave de endpoint personalizado do professor não é substituída por uma chave Gemini que esteja no hub. O core_ai é consultado apenas quando nenhum nível possui uma chave.

Dentro do nível escolhido, os provedores diretos são testados na ordem Gemini → Groq → OpenAI-compatível (a primeira chave encontrada é usada; se a chamada falhar, o próximo é tentado).

Isso também significa: se o professor configurou sua própria chave no hub PlayerGames, o PlayerHUD a utiliza automaticamente — sem necessidade de recadastrar no PlayerHUD.

Provedores diretos suportados

Esses serviços seguem seus próprios termos de uso e políticas de privacidade.

Como obter a chave de API

As chaves de API devem ser criadas diretamente no site oficial do provedor:

Gemini e Groq atualmente oferecem planos gratuitos, porém as políticas de preços podem variar conforme o volume de uso.

O PlayerHUD não fornece chaves de API.

Onde a chave é configurada

As chaves de API podem ser configuradas por qualquer uma das seguintes origens (em ordem decrescente de prioridade):

  1. Chave pessoal no PlayerHUD — configurada individualmente por cada professor na aba Configurações do painel de gerenciamento.
  2. Chave pessoal na Central de IA — configurada pelo professor em local_aihub → Minhas chaves de IA (se o hub estiver instalado).
  3. Chave de site no PlayerHUD — configurada pelo admin em Administração do site → Plugins → Blocos → PlayerHUD.
  4. Chave de site na Central de IA — configurada pelo admin nas configurações do local_aihub (se o hub estiver instalado).
  5. Moodle core_ai — configurado pelo admin em Administração do site → IA → Provedores de IA (nenhuma chave armazenada no PlayerHUD; consultado apenas quando nenhuma das origens acima tiver chave configurada).

Transmissão de dados

Quando o recurso de IA é utilizado, os prompts informados são enviados ao provedor selecionado para processamento.

O plugin:

Nenhuma comunicação externa ocorre sem ativação explícita de um recurso de IA.

Credenciais de Demonstração

Não aplicável — o PlayerHUD não exige nenhuma credencial para instalar ou usar. Todo recurso de IA é totalmente opcional e o bloco funciona plenamente sem nenhuma chave configurada.

📄 Licença

Este projeto é licenciado sob a GNU General Public License v3 (GPLv3).

Copyright: 2026 Jean Lúcio