Releases: andrew-mauricio/Conan-Api
Release list
v2.9.0 — build 24922388
v2.9.0 — tabela v7. ChamarVirtual: chamar virtual nativa por indice atras de cinco checagens, sendo a quinta 'o slot aponta para memoria executavel' — a que faltava no dia em que um plugin daqui derrubou um servidor lendo vtable na mao. Executavel() publicado no ConanBase.h. Duas guardas de documentacao que passavam VERDE conferindo zero arquivos: conferir_docs.py e sincronizar_docs_versao.py tinham lista de nomes escrita a mao, e o arquivo real tinha outro nome. UnlockEngrams 1.1.0 com unlock_dlc e unlock_bazaar.
Build do Conan Exiles Enhanced: 24922388
Tabela da API: v7
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
SHA-256 do pacote
9ddf13e6ca45425a3391496cf696ee0119a19b39fcaa876e4b03c03734226cf5
Confira antes de instalar: sha256sum no Linux, certutil -hashfile <arquivo> SHA256 no Windows.
Este README pede que voce confie num binario que roda dentro do seu servidor — o
minimo que devemos em troca e' um jeito de verificar que voce recebeu o que
publicamos.
v2.8.0 — build 24922388
v2.8.0 — build 24922388. Correcao critica no Legivel(): o cache de regioes aprovava o topo do espaco de enderecos porque a+n dava a volta em 64 bits, e isso derrubava servidor com jogador dentro. Atinge todo plugin da API. UnlockEngrams ganhou unlock_dlc e unlock_bazaar, ambos false por padrao. Golden e ancoras na build nova.
Build do Conan Exiles Enhanced: 24922388
Tabela da API: v6
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
SHA-256 do pacote
d9dd7a2678b2dafead56f6bfc8fb7d68475a3aa7ceac9bbbfbdc3b926ae47c90
Confira antes de instalar: sha256sum no Linux, certutil -hashfile <arquivo> SHA256 no Windows.
Este README pede que voce confie num binario que roda dentro do seu servidor — o
minimo que devemos em troca e' um jeito de verificar que voce recebeu o que
publicamos.
v2.7.0 — build 24784646
A capa dos dois repositorios reescrita, e tres defeitos que a revisao de fora achou.
A CONTRADICAO QUE DECIDIA A ADOCAO. A secao "Quando o Conan atualizar" dizia que
a API se recusa a carregar E que ela se reencontra sozinha no executavel novo,
sem explicar que sao etapas diferentes — o leitor concluia, com razao, que uma
das duas frases era otimismo. Pior: prometia que a correcao "costuma sair
rapido", e esse "costuma" nao tinha lastro nenhum. Este projeto e anterior ao
primeiro patch do Enhanced; todas as releases sao da mesma build 24784646.
Agora a secao separa achar endereco (automatico, por padrao de bytes, sem subir
o servidor) de conferir a build (deliberado, porque os offsets dos campos
tambem mudam) e diz com todas as letras que o tempo de resposta real ainda nao
foi medido contra uma atualizacao de verdade.
O CAMINHO QUE FALTAVA. O SDK ensinava a hookar, chamar funcao, montar texto e
consultar permissao — e nao ensinava o pulo que TODO plugin precisa dar: de
"alguem falou no chat" ate o objeto daquele jogador. Sem ele as 9.247 classes
nao tem porta de entrada. Entra com codigo provado no servidor: OffsetDoMembro
devolveu PlayerState 0x308, Character 0x350 e Pawn 0x340, todos resolvidos por
NOME e nenhum gravado no binario. Exemplo completo em Exemplos/ExemploJogador,
instalado a quente com o servidor 53 minutos de pe.
O ARGUMENTO QUE VENDE. Quem administra servidor de Conan nao procura "sistema
de plugins" — ele ja tem mod. A diferenca e uma so e decide tudo: o jogador nao
baixa nada. Sem Workshop, sem subscricao, sem "nao consigo entrar porque falta
mod". Entra como tabela comparativa, com o preco dito junto: plugin nao muda o
que o cliente desenha.
LICENCA REESCRITA. Quem escreve plugin pode VENDER, sem pedir nada a ninguem, e
servidor que cobra pode usar. A API em si nao se revende nem se re-hospeda, e o
link do repositorio e livre para indexar em qualquer lugar. O motivo esta no
proprio arquivo: existe UMA fundacao para haver um caminho de atualizacao
quando o jogo muda, em vez de copias divergentes.
MENOS FRICCAO: topics nos dois repositorios (eram vazios), licenca resumida em
tres linhas nas capas, o SHA-256 do pacote na descricao de cada release, e uma
guarda que aborta se a winmm.dll do repositorio deixar de ser a mesma do
.tar.gz — hoje sao identicas por construcao, mas isso dependia de ninguem
esquecer.
E a secao que responde a duvida mais basica: numa pasta de plugin, so a DLL e
obrigatoria. PluginInfo.json e config.json sao opcionais, e o config.json e do
plugin — a API nunca abre esse arquivo.
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v6
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
SHA-256 do pacote
e47b3177312c27243600925b16252c8199b4c948f196165066188eaa39db054f
Confira antes de instalar: sha256sum no Linux, certutil -hashfile <arquivo> SHA256 no Windows.
Este README pede que voce confie num binario que roda dentro do seu servidor — o
minimo que devemos em troca e' um jeito de verificar que voce recebeu o que
publicamos.
v2.6.0 — build 24784646
A API sobrevive a atualizacao do jogo, e o SDK inteiro vai no pacote.
SOBREVIVER AO PATCH — era a meta declarada, e estava marcada como feita com uma definicao que a mascarava ("recusa carregar se a build mudar", que e o oposto de sobreviver). tools/assinaturas.py acha GUObjectArray, FNamePool e ProcessEvent por PADRAO DE BYTES, lendo o .exe no disco: sem servidor de pe, sem pid, sem palpite. Taxa de resolucao cega 3/3. Calibrado nos dois sentidos — alvo movido +0x10000 numa copia e a ancora ACOMPANHA (0x9F1C920 vira 0x9F2C920); bytes estaveis corrompidos e ela PARA de achar. O que ainda nao esta provado esta escrito no proprio codigo: que o codigo em volta sobreviva a uma recompilacao real da Funcom. corpus/ guarda o executavel para medir contra um par real no proximo patch, e QUANDO-O-JOGO-ATUALIZAR.md tem o procedimento em seis passos.
O ConanSDK.h ENTROU NO PACOTE. O README o anunciava ha semanas e ele nunca esteve la dentro: o header emitia ConanApi::Call<>, que so existia na libconanapi.a, entao inclui-lo obrigava a linkar a nossa biblioteca — o oposto do modelo de tabela. A v6 fechou o que faltava (ChamarFuncaoEx, para parametro de SAIDA, presente em 6.157 das 36.757 assinaturas). O plugin precisa de uma linha: ConanApi::UsarTabela(api).
TIPAGEM 85% para 88,8% (+1.148 funcoes). Retorno FString/FText/TArray virou parametro de saida — a tabela aceita indice -1 para o slot de retorno — e UPARAM(ref) de texto passou a funcionar. Provado com resultado verificavel: Conv_IntToString(42) devolve "42", Split("conan|api") devolve "conan"+"api", BreakVector(11,22,33) devolve 11/22/33.
INSTALAR SEM DERRUBAR O SERVIDOR: copie a pasta para Plugins/ e crie o arquivo CARREGAR-NOVOS. Provado com o servidor no ar, mesmo processo de pe antes e depois. Recarregar plugin existente NAO foi feito, e e decisao: DLL com hook armado descarregada faz o jogo saltar para memoria desmapeada depois, longe da causa.
COMANDO RESPONDE NA HORA: ConanPluginRegistrar recebe a tabela e HookProcessEvent enfileira antes de haver mundo. Provado no log — hook armado 6 segundos ANTES de o plugin ser ativado, e RemoverHook confirmou que ele estava na mesa (id que so ficasse na fila nao passaria).
PLUGIN PRESO A BUILD ANTIGA: o autor declara BuildDoJogo e UsaOffsetsCrus, e o carregador recusa em vez de deixar ler memoria errada calado. Provado 3/3 no servidor — e a primeira versao anunciava recusa e carregava assim mesmo, porque a fase que carrega rele a pasta do zero.
45.930 acessores com cache atomico (era data race formal). 712 atalhos legiveis para campos de UserDefinedStruct que vem com GUID colado no nome.
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v6
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
v2.5.0 — build 24784646
O teste do desconhecido: escrever um plugin do zero achou 9 defeitos nossos
Ordem do Andrew: testar como alguem que nunca viu o projeto — escrever um plugin
novo lendo so a documentacao do pacote, nao recompilar o exemplo pronto.
O PRIMEIRO comando do guia falhava. O compilar.sh do pacote apontava para
../../api/include, caminho da arvore de desenvolvimento: 'ConanPluginApi.h: No
such file'. Havia uma correcao para isso — escrita para um layout que mudou, e
que por isso nao casava com nada e nao dava erro. Envelheceu calada.
Tambem: o guia dizia tabela v3 (e' v5), versao 1.1.0 (era 2.3.0), o README citava
a build ANTIGA, o .tar.gz extraia para 'sdk-dev/', e o guia afirmava que a API
NAO fala com o jogador — quando MensagemParaJogador, MensagemParaTodos e
MensagemNaTela existem desde a v3. Faltava ainda documentar ConanChamada
(c->Obj), FindObjects e o retorno de HookProcessEvent, onde zero e' falha.
O que impede a volta: o build agora COMPILA o exemplo de dentro do pacote antes
de publicar, conferir_docs.py compara a doc com o VERSAO em tres eixos, o
montador tem trava contra montagem concorrente e um trap que proibe morrer
calado. Todas calibradas nos dois sentidos.
Provado: plugin novo compilado com MinGW e MSVC, instalado num servidor limpo
pela pasta que a documentacao ensina — os dois carregaram e executaram. O plugin
virou ExemploVigia no SDK.
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v6
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
v2.4.0 — build 24784646
Teste do desconhecido: escrevi um plugin do ZERO lendo so a documentacao do pacote. Ele achou 10 defeitos, 9 nossos. O pior: o compilar.sh do pacote apontava para a arvore de desenvolvimento, entao o PRIMEIRO comando do guia falhava para todo mundo que baixou — e a correcao disso ja existia, para o layout ANTIGO, envelhecida em silencio porque so editava texto. Agora o montador COMPILA o exemplo de dentro do pacote antes de publicar. A doc dizia tabela v3 (e 5), projeto 1.1.0, build 24383534 (a antiga), e negava que a API fala com o jogador (fala desde a v3, com tres rotas). tools/conferir_docs.py compara doc x VERSAO em tres eixos e bloqueia a publicacao. NOVO: plugin pode declarar BuildDoJogo e UsaOffsetsCrus, e o carregador recusa carregar plugin preso a build antiga em vez de deixar ele ler memoria errada calado. Novo ExemploVigia (boas-vindas, !online, !vigia). MSVC provado ponta a ponta: baixa o pacote sozinho, compila, exports sem decoracao, so KERNEL32.
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v5
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
v2.3.0 — build 24784646
testar-como-a-comunidade.sh: o teste que a regra exige — baixa o pacote da RELEASE, compila o ExemploOla so com o include publicado, e confere que o binario nao depende de nenhuma DLL nossa. Provado com servidor limpo e um plugin so: 2 carregados 0 falhas, e o plugin achou classes do jogo, resolveu por cache (6ms -> 0ms) e leu o GameMode. Na primeira execucao o proprio teste achou que as releases nao tinham anexo — estavam sem arquivo desde a v1.0.0. Falta o MSVC, que exige a maquina do dono ligada, e o teste devolve NAO VERIFIQUEI por isso
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v5
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
v2.2.0 — build 24784646
o gerador passa a PROVAR a propria conta: 37.284 funcoes do catalogo = 36.757 emitidas + 527 descartadas, resto ZERO. Antes 2.588 pares sumiam sem explicacao, e um deles — Object::ExecuteUbergraph — nao aparecia em lugar nenhum. Agora FUNCOES-NAO-EMITIDAS.txt lista cada descarte com o motivo, e o dev que procurar uma funcao la descobre por que ela nao esta no header em vez de concluir que o jogo nao a tem. O fallback do FieldRef parou de congelar: guardava o offset medido quando a reflexao nao sabia responder, e nunca mais reperguntava — o mesmo cache negativo que o OffsetDoMembro proibe, e pior, porque o valor congelado e plausivel. E o aviso de campo replicado passou a ser por (plugin, campo): antes o primeiro plugin consumia o aviso e o segundo escrevia sem sinal
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v5
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
v1.9.2 — build 24784646
publicar preserva tambem as traducoes, e a conferencia do push tolera a latencia do GitHub. As traducoes moram em doc/ e Docs/ — pastas que a distribuicao TAMBEM usa —, entao preservar a pasta inteira nao bastava: a copia substituia a pasta e levava README.en.md e README.es.md junto, quebrando os links do topo da pagina. Agora a preservacao e por ARQUIVO e a devolucao MESCLA. E a conferencia do push tenta quatro vezes: a API do GitHub responde o commit anterior por alguns instantes, e uma leitura so dava falso alarme de divergencia
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v4
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.
v1.9.1 — build 24784646
publicar deixa de apagar a apresentacao dos repositorios. O script limpava tudo que nao vinha da distribuicao antes de copiar, e o README com imagens, traducoes, LICENSE e workflows nao vem do pacote — e escrito no proprio GitHub. Destruiu o mesmo trabalho duas vezes, sem erro nenhum: o push dizia que deu certo. Agora esses arquivos sao guardados antes da limpeza e devolvidos depois, sem sobrescrever o que a distribuicao trouxer com o mesmo nome
Build do Conan Exiles Enhanced: 24784646
Tabela da API: v4
Plugins compilados contra uma tabela igual ou anterior continuam funcionando —
campos novos entram sempre no fim da struct e nada e removido nem reordenado.