CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Guias de matchup de LoL (Akshan e Mordekaiser) a partir das planilhas dos jogadores. Site de fã.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Site de fã com guias de matchup de vários campeões, cada um feito a partir da planilha de um jogador. Sem servidor e sem dependências: abra o index.html com dois cliques.
Guias atuais:
"autor": "" e "credito_minimo": true no guias.json (o crédito vira "planilha da comunidade" + link).scripts/atualizar_akali.py.Um guia pode ser escondido com "oculto": true em src/guias.json (os dados continuam no repositório).
src/guias/akshan/traducao_en.json (linhas: cada linha da planilha → tradução; celulas: nomes de runas e itens das colunas de setup).python scripts/atualizar_akshan.py lista essas linhas.src/guias/<guia>/traducao_pt.json: textos (cada frase da planilha → português, inclusive cooldowns e páginas), nomes (ícone → nome do item ou runa no cliente em português) e titulos_en (título de cada campeão em inglês). python scripts/traducao_pt.py atualiza os nomes e os títulos e diz quantas frases estão sem tradução; com --faltando lista quais. Frase nova aparece em inglês no modo PT até ganhar tradução./ vai para a busca; ← → trocam para o matchup anterior/próximo; ↑ ↓ andam uma linha na grade de campeões (no celular, um campeão).index.html#mordekaiser, index.html#mordekaiser/aatrox. Links antigos do Akshan (#ahri) continuam funcionando.src/template.html: HTML, CSS e JS do site. É aqui que se edita. Os marcadores /*FONTS*/ e /*GUIAS*/ recebem as fontes e os dados.src/guias.json: a lista de guias (ordem do menu, autor, créditos, formato e pasta dos dados). acompanhe lista os canais do bloco "Acompanhe mono …" embaixo da lista de campeões (nome, link e o texto do canal).src/guias/akshan/: rows.js no formato [campeão, runa, secundária, feitiço, bota, build, lembrete, noGuia(1/0)], meta.json com ids, títulos (pt e en), ícones e mira (ponto do splash, em % de largura e altura, onde fica o centro da mira do card; escolhido à mão para pegar rosto + corpo. Campeão novo sem mira usa 50, 38), e traducao_en.json.scripts/atualizar_akshan.py: baixa a planilha do Peteruso para a cópia embutida (a que aparece sem internet), lê os ícones de cada célula, acrescenta campeões novos e lista linhas sem tradução. Depois rode o build..github/workflows/atualizar-planilha.yml: o GitHub roda o atualizar_akshan.py e o build todo dia às 6h (horário de Brasília) e faz o commit se a planilha mudou; a Vercel publica sozinha. Dá para rodar na hora pela aba Actions do GitHub. Tradução de linha nova continua sendo à mão (até lá ela aparece em português no modo EN).scripts/icones_planilha.py e src/guias/akshan/icones_planilha.json: a dificuldade de cada matchup é a cor da célula do campeão na planilha (classificação do Peteruso: vermelho escuro muito difícil, vermelho claro difícil, amarelo médio, verde fácil, ciano muito fácil) e aparece na borda do retrato, nos filtros e no card do inimigo. Os ícones de runa, secundária, bota e build saem das imagens coladas na planilha (só vêm no xlsx; o CSV traz só o texto). Cada imagem é reconhecida pelo md5 em meta.json > imagens e vira uma peça de meta.json > pecas (nome em pt e en). Se o Peteruso mudar o texto de uma célula, o site usa texto_pecas até a próxima leitura; imagem nova aparece na saída do script para cadastrar.src/guias/mordekaiser/: planilha.csv (cópia da planilha) e matchups.json (a planilha separada em runas, itens, dificuldade e seções).src/fonts/: Cinzel e Hanken Grotesk (subconjunto latino), embutidas no HTML pelo build.modelo/akshan.glb: o Akshan 3D do jogo (malha, esqueleto, texturas e as animações de idle, dança, provocação, risada, ataque e recall). Aparece numa coluna à direita só em tela de 1720 px ou mais, no guia do Akshan e no site publicado. Arrastar gira, clique faz uma emote e os botões embaixo tocam cada animação (sequências em no template). O X no canto da caixa esconde a coluna e centraliza tudo; escondido, uma alça na borda direita traz de volta (vem ligado; fica salvo no navegador). O three.js vem do jsDelivr e só é baixado nesse caso.app/ tem um programa de bandeja para Windows: quando o jogador trava um campeão que tem guia no site (lista em guias-app.json), ele adivinha o inimigo da mesma rota (entre os inimigos que estão no guia, o que mais joga nela) e mostra o guia numa janela própria, direto na matchup (#<guia>/<slug>). A janela some quando a partida começa. Pela API local do cliente, lê a seleção e grava a página de runas e o conjunto de itens da matchup (como o Porofessor; dá para desligar no menu); nunca escolhe, bane nem aceita fila. Inicia com o Windows (dá para desligar no menu da bandeja).
AkshanMatchups.exe, um arquivo só, não precisa de Python). O botão "App para PC" fica no card "Acompanhe" de todos os guias, só no desktop (APP_URL no template aponta para a release mais nova).app/README.md (python app/gerar_exe.py; testes com python -m unittest app/test_akshan_app.py).app/ não vai para a Vercel (.vercelignore).src/guias/<campeão>/. Planilhas no formato do Akshan usam "formato": "simples"; planilhas grandes como a do Meowdekaiser usam "formato": "completo" com um matchups.json (copie o atualizar_mordekaiser.py e ajuste as colunas).src/guias.json.:root[data-guia="<id>"] (e o do tema claro) no src/template.html, como o do Mordekaiser.python scripts/build.py.index.html direto: ele é gerado.As imagens de campeões, runas, feitiços e itens vêm do Data Dragon da Riot (precisa de internet). Se uma falhar, o site esconde a imagem e mostra a inicial do campeão na lista. Os sons tocam no Chrome, Edge, Firefox e Android; Safari antigo pode ficar sem som (os arquivos são Ogg Vorbis).
SEQ_3Dmodelo/<campeão>.glb, sons/<campeão>3d/; configuração em CONF_3D no template): Mordekaiser, Illaoi e Kayle. A Kayle aparece na forma final, com as asas e a espada (MOSTRAR_POR_CAMPEAO em skin3d.py). A dublagem pt-BR da Kayle fica no Kayle.pt_BR.wad.client com caminho fora do padrão: os bancos foram achados pelo conteúdo (o que tem os eventos Play_vo_Kayle_*3DGeneral). Gerar: python scripts/modelo3d/skin3d.py <campeão> 0 <Campeão.wad.client> <pasta> modelo/<campeão>.glb e python scripts/modelo3d/sons3d.py <campeão> <bancos> <vgmstream-cli> sons/<campeão>3d.localStorage > skin). Cada skin tem a paleta em :root[data-guia="akshan"][data-skin="<id>"] (cores tiradas da splash oficial), a arte do card, o modelo modelo/akshan-<id>.glb e os efeitos sonoros em sons/akshan3d/<id>/ (a voz é a do Akshan). A lista fica em SKINS no template. Hoje: Padrão, Ciberpop, Rosa de Cristal, Três Honras e Velho Oeste. As setas nas laterais do card passam de uma skin para outra. Cada troca de skin toca uma fala sorteada do Akshan (38 falas, de scripts/modelo3d/falas.py). Todas as falas seguem a língua do site: dublagem pt-BR em sons/vo/akshan/, sons/akshan3d/ e sons/vo/Akshan.ogg; voz original em inglês em sons/vo/akshan-en/, sons/akshan3d/en/ e sons/vo/en/Akshan.ogg (tirada do Akshan.en_US.wad.client, que só existe com o LoL em inglês). Os chromas (Ciberpop, Rosa de Cristal e Velho Oeste) aparecem como bolinhas embaixo da skin no menu: usam o mesmo modelo e só trocam as texturas, que o site carrega direto do CommunityDragon; a tabela CHROMAS do template sai de python scripts/modelo3d/chromas.py <pasta com skinN/config.json>. Para gerar uma skin nova: python scripts/modelo3d/skin3d.py <número> <Akshan.wad.client> <pasta> modelo/akshan-<id>.glb e python scripts/modelo3d/sons3d.py <bancos da skin> <vgmstream-cli> sons/akshan3d/<id> <número>.scripts/modelo3d/: como o .glb foi feito. wad.py extrai os arquivos do Akshan.wad.client da instalação do LoL (C:\Riot Games\League of Legends\Game\DATA\FINAL\Champions) e lol2glb.py converte esqueleto, malha e animações para glTF (as texturas em PNG vêm do CommunityDragon). Os sons das animações (sons/akshan3d/, efeitos e a dublagem em português) saem dos bancos do Wwise do mesmo .wad e do Akshan.pt_BR.wad.client: bnk.py liga cada evento do jogo aos áudios e sons3d.py converte para OGG com o vgmstream-cli (baixado à parte, não fica no projeto). Qual som toca em cada clipe está em SONS_CLIPE_3D no template. Precisa de pip install zstandard xxhash numpy pillow soundfile.manifest.webmanifest, sw.js e icones/: o site pode ser instalado como app ("Adicionar à tela inicial") e abre sem internet com a última versão vista; com internet a página vem sempre da rede.meta.json > feitico_extra: feitiço somado ao da planilha numa matchup, combinado com o dono do site (hoje Zoe: + Cleanse). Some sozinho se a planilha passar a ter esse feitiço.meta.json > pecas_manuais: ícones escolhidos à mão para célula sem imagem na planilha (hoje a build do Malphite: Terminus + Gume do Infinito); vale enquanto o texto da célula for o mesmo.og.jpg e scripts/og.py: a imagem da prévia quando o link é compartilhado (WhatsApp, Discord, X), com uma faixa da splash de cada guia. Rode python scripts/og.py quando entrar ou sair um guia e aumente o ?v= do og:image no template (as redes guardam a prévia antiga pelo endereço).src/icone/: ícone da aba (icone-64.png) e da tela inicial do celular (apple-180.png), também embutidos pelo build; original.png (1024 px) é a base do ícone do app. Todos saem de python scripts/icone_marca.py (marca BattleMatch, ver DESIGN.md).scripts/build.py: gera o index.html. Rode python scripts/build.py depois de qualquer mudança.scripts/importar_lol.py e src/guias/<guia>/importar.json: a página de runas (ids do jogo, uma por opção da planilha) e os blocos do conjunto de itens de cada matchup, que o build põe no guias-app.json para o app importar no cliente. No Akshan a planilha só traz a runa principal e as secundárias; o resto da página vem de meta.json > paginas_padrao (aprovado pelo dono do site). Na Kayle, o resto vem de src/guias/kayle/paginas_padrao.json: as linhas fixas da aba de runas do UJard e os fragmentos lidos das capturas de cada matchup (pelo nome da imagem); o atualizar_kayle.py usa o mesmo arquivo para mostrar a página inteira com ícones no site. Runa que saiu do jogo vira a que ficou no lugar (Lenda: Tenacidade → Lenda: Aceleração). Testes: python -m unittest scripts/test_importar_lol.py.src/versao_dd.txt e scripts/versao_dd.py: a versão do Data Dragon (patch do LoL) de ícones, nomes e cooldowns, a mesma para o site e para os scripts. O workflow diário troca para o patch mais novo sozinho; à mão, python scripts/versao_dd.py e depois os atualizar_*.py.sons/: sons do cliente do LoL (seleção de campeões) e a fala de escolha de cada campeão de guia, carregados só quando tocam. scripts/baixar_sons.py baixa de novo do CommunityDragon (rode quando entrar um guia novo). O botão de som no topo desliga tudo.scripts/atualizar_kayle.py: lê o Excel original público do UJard (sem converter nem alterar a planilha), preserva os textos e as imagens e gera src/guias/kayle/ e imagens/kayle/. Aceita um caminho .xlsx para conferir uma cópia local; testes: python -m unittest scripts/test_atualizar_kayle.py. O workflow diário atualiza esse guia também. O app recebe o guia novo por guias-app.json; para Kayle importa os itens iniciais, mas não completa uma página de runas quando ela não está inteiramente especificada.src/guias/<guia>/curadoria.json: curadoria das páginas extras do guia, aplicada pelo build.py (a atualização diária não desfaz). remover: começos de texto que saem (bio do autor, redes, Discord pessoal, doação, aviso de beta, prints de ranking); trocar: texto útil em primeira pessoa reescrito neutro, com EN e PT. O build avisa quando um trecho da curadoria não existe mais na planilha. As notas das matchups não passam por aqui.scripts/atualizar_akali.py e scripts/akali_baixar.js: a planilha da Akali bloqueia download e cópia, então akali_baixar.js (Node + Playwright) lê a página do Google Sheets como um navegador (a tabela das 100 primeiras linhas, as linhas carregadas ao rolar e as cores pelo print da coluna A) e atualizar_akali.py --de <pasta> grava src/guias/akali/planilha_bruta.json e monta o guia. Fora do workflow diário.scripts/atualizar_garen.py: lê as abas Matchups e FAQ da planilha do Triton pelo CSV do Google (gviz) e grava src/guias/garen/. As células de Twitch, Discord, coaching e agradecimentos e a aba Index (sobre o autor) ficam de fora.scripts/atualizar_azir.py: baixa os slides em .pptx (export do Google Slides, python-pptx) e grava src/guias/azir/. Cada slide de matchup vira dificuldade + dicas (a cor do texto separa as agressivas).scripts/atualizar_ksante.py: baixa a planilha em xlsx (texto) e a versão publicada (links dos VODs), gera src/guias/ksante/. Não grava nome de autor nem de quem jogou o VOD (pedido do autor).scripts/atualizar_fiora.py: baixa a planilha do Sad em xlsx e gera src/guias/fiora/ e imagens/fiora/. Os ícones de runa, feitiço e item são reconhecidos pelo md5 (tabelas no começo do script); ícone novo aparece como aviso no log, sem quebrar o resto. Aceita um caminho .xlsx para testar uma cópia local. O workflow diário atualiza esse guia também.scripts/atualizar_mordekaiser.py e scripts/atualizar_illaoi.py: baixam de novo a planilha de cada guia e os dados do Data Dragon e refazem o matchups.json e o paginas.json (precisa de internet). Depois rode scripts/traducao_pt.py e o build. O workflow diário roda tudo isso.PRODUCT.md e DESIGN.md: o que o produto é e o sistema visual.