• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tool] PawnPro 4.0.0 para SA-MP e open.mp — o que mudou e o que foi corrigido
#1
PawnPro 4.0.0
?? Extensão de VS Code / VSCodium para Pawn — SA-MP e open.mp
?? VS Code / VSCodium extension for Pawn — SA-MP and open.mp


Marketplace · Open VSX · GitHub · Documentação

Quote:?? A 4.0.0 está no ar. É a maior atualização da extensão até hoje: IntelliSense cinco vezes mais rápido em projeto grande, F12 para ir à definição, depuração de filterscript, log de diagnóstico para relatar bug, e uma lista de correções que inclui a tela de configurações que não respondia a clique e a formatação que danificava código.

?? Não há nada novo para instalar e a sua configuração continua valendo. Só um aviso importa: se você usa o depurador, atualize o plugin do servidor — detalhes no fim.

?? 4.0.0 is out — the biggest update yet: 5× faster IntelliSense on large projects, F12 go-to-definition, filterscript debugging, a diagnostic log for bug reports, and a long list of fixes including the settings page that ignored clicks and formatting that corrupted code. Nothing new to install; your settings carry over. One caveat: if you debug, update the server plugin.



? Novo na 4.0.0 / New in 4.0.0

⌨️ Ir para definição — F12 ou Ctrl+clique
?? Leva à declaração no próprio arquivo, num include ou em outro arquivo compilado junto. Em cima de um forward, vai direto ao corpo da função.
?? Jumps to the declaration in the file, in an include, or in another file compiled with it. On a forward, it goes to the body.

? Log de diagnóstico / Diagnostic log
?? Configurações → Diagnóstico → nível info. A extensão, o motor de análise e o depurador gravam em .pawnpro/logs/: um pawnpro.log com tudo na ordem em que aconteceu, mais um arquivo por componente. Desligado de fábrica — nenhum arquivo é criado até você ligar —, e os logs entram sozinhos no .gitignore. Ao abrir uma issue, anexar esse arquivo vale mais que qualquer descrição.
?? Settings → Diagnostics → info. Extension, analysis engine and debugger all write to .pawnpro/logs/: one pawnpro.log with everything in the order it happened, plus one file per component. Off by default; the logs are gitignored automatically.

? Depuração de filterscript / Debugging filterscripts
?? Aponte program para o .amx do filterscript: só ele para nos breakpoints, e os outros scripts do servidor seguem rodando normalmente.
?? Point program at the filterscript's .amx: only it stops at breakpoints, the server's other scripts keep running.

✏️ Breakpoint sobrevive a edição durante a sessão / Breakpoints survive edits mid-session
?? O texto de quando o script foi compilado fica guardado, e cada breakpoint é levado para a linha equivalente do binário em execução. Uma linha nova, que não existe no código compilado, fica marcada como não verificada até você reiniciar — em vez de parar no lugar errado.
?? The text as compiled is kept, and each breakpoint is mapped to the matching line of the running binary. A brand-new line shows as unverified until you restart, instead of stopping in the wrong place.

? O IntelliSense volta sozinho quando cai / IntelliSense restarts itself
?? Antes, uma falha no motor deixava o editor sem análise até recarregar a janela. Agora ele sobe de novo sozinho, e um aviso diz quantas vezes isso aconteceu. Depois de cinco quedas seguidas, desiste e avisa — "PawnPro: Limpar Cache" tenta de novo.
?? A crash in the engine used to leave you with no analysis until you reloaded the window. It now comes back on its own, with a notice telling you how many times it happened; after five straight crashes it gives up and says so.



⚡ O que melhorou no dia a dia / Day-to-day improvements
  • Projeto grande ficou rápido — ?? num gamemode com 84 includes, cada edição caiu de cerca de 1 s para 0,2 s / ?? with 84 includes, from ~1 s to 0.2 s per edit
  • O IntelliSense enxerga o programa inteiro — e só ele — ?? hover, assinatura, autocomplete, referências e o contador acima das funções passam a considerar tudo o que é compilado junto com o arquivo aberto, inclusive o [b].inc irmão que você não abriu[/b], e nunca outro programa: gamemode e filterscript deixam de se misturar, mesmo com funções de mesmo nome / ?? the whole compilation unit, closed sibling includes included, and never another program
  • Renomear (F2) respeita escopo — ?? um local muda só no bloco onde foi declarado; um parâmetro, só na função. Renomear uma public atualiza o nome em SetTimer("Nome", …). Renomear uma global que tem um local homônimo é recusado, dizendo onde está o conflito — antes os dois eram trocados juntos / ?? scope-aware rename; conflicts are refused with the location
  • A análise vale para o texto não salvo — ?? o que você escreve num include aberto já conta nos outros arquivos, antes de salvar / ?? unsaved edits in an include already count elsewhere
  • A extensão não trava mais esperando o compilador — ?? ele roda em segundo plano e a interface segue respondendo / ?? the compiler runs in the background
  • Cada falha de RCON diz o que houve — ?? servidor parado, RCON desligado no config.json, senha inválida, servidor remoto ou tempo esgotado, em vez de um código interno / ?? real reasons instead of an internal code
  • Servidor que morre logo ao iniciar (plugin faltando, por exemplo) — ?? é informado na hora, com o código de saída, em vez de a extensão ficar esperando a porta até o prazo acabar / ?? reported immediately with the exit code
  • Seletor de SDK ganha "Automático", já como padrão — ?? usa o SDK do open.mp quando o projeto o tem (qawno/include/open.mp.inc ou o caminho configurado); sem ele, as nativas vêm dos includes, como no SA-MP / ?? new default: open.mp SDK when present, otherwise natives from your includes
  • Tipo errado no config.json — ?? o valor é ignorado sozinho e o resto do arquivo continua valendo / ?? the bad value is skipped, the rest still applies
  • Mudança no config.json chega à análise sem recarregar — ?? incluindo as listas .ban/.allow / ?? including the .ban/.allow lists



? Corrigido / Fixed

Interface
  • A tela de configurações voltou a responder aos cliques. ?? A política de segurança da página usa nonce, e nonce não vale para atributo de evento: os onclick/onchange dos controles eram bloqueados, e o sintoma era a página inteira muda, sem erro visível. A Biblioteca de Recursos tinha o mesmo problema / ?? settings page clicks work again (nonce-based CSP was blocking inline handlers); same for the Resource Library
  • A extensão não depende mais do IntelliSense subir para ativar. ?? Ela ficava presa numa chamada sem prazo, e o que vinha depois — configurações, biblioteca, barra de status — nunca chegava a existir / ?? activation no longer blocks on the engine
  • ?? A página "O que há de novo" mostrava os > do changelog no meio do texto / ?? the What's New page rendered raw > markers
  • ?? Os títulos das correções rápidas apareciam sempre em português; agora seguem o idioma configurado / ?? quick-fix titles follow your language setting

Análise de código
  • A formatação danificava código — ?? em comentário no fim da linha e de bloco, em string e caractere com espaço, e em macro com continuação \. E não era estável: formatar duas vezes mudava o arquivo. Agora não altera código nem comentário, e formatar de novo não muda nada / ?? formatting corrupted trailing/block comments, spaced string and char literals, and \-continued macros — and wasn't idempotent
  • Letra acentuada derrubava a análise — ?? o limite de nome do Pawn é de 31 caracteres e o corte era feito em 31 bytes; ç, ã e é ocupam dois, o corte caía no meio do caractere. Mesma coisa na assinatura, com acento antes do cursor / ?? accented characters crashed analysis (31-character limit truncated at 31 bytes)
  • ?? Aviso de um texto que já não existe deixa de aparecer: análise que termina depois de uma nova edição é descartada / ?? stale diagnostics discarded
  • ?? Nome dentro de string contava como referência; chamada em new x = Funcao(); era ignorada; a coluna saía errada com acento antes do nome / ?? reference counting fixes
  • ?? PP0012 (#include sem símbolo usado) não disparava, e a verificação de símbolo não usado não via edição feita em outro arquivo / ?? PP0012 never fired
  • ?? native e forward com corpo aberto na linha seguinte voltam a ser acusados, e diretiva recuada (    #include) passa a ser reconhecida / ?? both back to working

Depuração
  • ?? Breakpoint parando na linha errada quando o arquivo foi editado depois de compilar / ?? wrong-line breakpoints after post-compile edits
  • ?? Breakpoint do gamemode disparando dentro de filterscript — o plugin passa a reconhecer qual script está em depuração / ?? gamemode breakpoints firing inside filterscripts
  • ?? Breakpoint em include por caminho relativo (#include "../include/x.inc") passa a ser atingido / ?? breakpoints in relatively-included files now hit
  • ?? Arrays. Elemento de array de várias dimensões ou recebido por referência mostrava valor de outra posição da memória; data breakpoint e edição em grid[j] passam a funcionar / ?? multi-dimensional and by-reference array elements read the wrong memory slot
  • ?? Edição de variável só aparece como feita depois que o servidor confirma a escrita / ?? variable edits confirmed by the server first
  • ?? A pilha de chamadas mostra o arquivo de cada frame — um frame dentro de include abria o arquivo principal / ?? call stack opens the right file per frame
  • ?? Depurar com .amx sem informação de depuração recompila, em vez de subir um binário em que nenhum breakpoint pega. E qualquer -d da sua configuração é trocado por -d3 só naquela compilação: um -d0 ou -d1 configurado deixava o .amx sem o que breakpoint e variável precisam / ?? a debug-less .amx is recompiled, and -d3 is forced for that build only
[*]


⚙️ Por dentro: de onde vem essa versão / Under the hood

?? Vale explicar por que uma lista dessas aparece de uma vez. A extensão comandava, em TypeScript, coisas que não possuía: processos do servidor, portas, RCON, o compilador, a configuração e a resolução de includes. Cada tarefa tinha um caminho diferente por sistema operacional (lsof, /proc, netstat, taskkill), por sinal indireto, e a configuração era lida em dois lugares ao mesmo tempo. Daí vinha boa parte dos defeitos: IntelliSense discordando do que o compilador enxergava, include resolvido de um jeito na análise e de outro na compilação, e uma resposta diferente por sistema.

?? A 4.0.0 move tudo isso para o PawnPro-Core, um projeto novo — primeira versão, 0.1.0 — em Rust, que acompanha a extensão e também passou a hospedar o motor de análise e o depurador, que antes eram binários separados. Agora há uma resposta só para cada pergunta, e o VSIX traz um binário só.

?? Worth explaining why a list this long lands at once. The extension was driving, in TypeScript, things it didn't own: server processes, ports, RCON, the compiler, configuration and include resolution — one code path per OS, all indirect, with configuration read in two places at once. That's where most of the defects came from. 4.0.0 moves all of it into PawnPro-Core, a new project (0.1.0) written in Rust, which also now hosts the analysis engine and the debugger. One answer per question, one binary in the VSIX.

  • ?? Você não baixa o núcleo: ele vem dentro da extensão, no binário da sua plataforma — Windows x64, Linux x64 e arm64, macOS x64 e arm64 / ?? the core ships inside the extension
  • ?? Análise, depuração e o plugin do servidor chegam por um soquete local único (named pipe no Windows), não por porta TCP / ?? one local socket, not a TCP port
  • ?? Encerrar processo confere de novo, na hora, se ele é o servidor deste projeto e do mesmo usuário / ?? process kills re-check ownership
  • ?? A ajuda mostra a versão do núcleo no lugar das versões separadas de motor e depurador / ?? one version to report



⚠️ Antes de atualizar / Before you update

  • ?? Se você usa o depurador: atualize o plugin do servidor. O pawnpro_debug (.so / .dll, 32 bits, como o servidor) agora sai no release do PawnPro-Core e precisa ser da mesma versão. Plugin desatualizado faz a sessão falhar — é o primeiro lugar a olhar se o F5 não responde. A ajuda da extensão aponta o release certo / ?? update the 32-bit pawnpro_debug plugin to the matching version
  • ?? Foram removidos do launch.json os campos server, session e stopOnEntry, que já eram ignorados. O servidor vem da seção server das configurações / ?? server, session and stopOnEntry removed from launch.json (they were already ignored)
  • ?? Fora isso, sua configuração e seus projetos continuam valendo, e não há nada a instalar à parte / ?? otherwise your settings and projects carry over
  • ?? Lembrete que ainda é o erro mais comum: abra a PASTA do projeto, não o .pwn solto — sem ela não há como achar seus includes / ?? open the project folder, not a lone .pwn



? O que ainda não está verificado
Not verified yet

?? O depurador continua marcado como instável, e é honesto dizer onde:

  • Depuração no Windows nunca foi testada num servidor Windows real. Ela é compilada e publicada, mas lá o canal com o servidor é outro (named pipe) e o encerramento também — o mecanismo que garante que o servidor morre junto com a sessão só existe no Linux. Se você hospeda no Windows e testar, esse relato é o mais útil que existe agora
  • Pausar com jogadores conectados foi medido sem clientes de verdade. Num teste, um jogador continuou se movendo com a execução parada num breakpoint; não se sabe o efeito com servidor cheio, nem se a rajada de sincronia na retomada derruba conexão
  • A posição do breakpoint muda o cenário: parar num comando, que roda de vez em quando, não é o mesmo que parar num callback que roda a cada tick

Quote:?? Bug encontrado vira issue pública, não vira segredo. Se você esbarrar em algo, ligue o log em info, anexe o arquivo e abra uma issue — é assim que isto melhora.
?? Bugs become public issues, not secrets. If you hit something, set logging to info, attach the file and open an issue.




Links

Code:
ext install NullSablex.pawnpro


[i]?? Dúvida, crítica e relato de bug são bem-vindos — aqui no tópico ou nas issues do GitHub.
?? Questions, criticism and bug reports are welcome — here or on GitHub issues.


⭐ github.com/NullSablex/PawnPro[/i]
  Reply