19/03/2025 01:25
(Esta mensagem foi modificada pela última vez a: 19/03/2025 01:27 por xbruno1000x.)
SA-MP Development Kit for Plugins
SDK Completo para Extensão de Servidores SA-MP/OPEN.MP
Introdução
- Kit de desenvolvimento profissional para criação de plugins SA-MP (San Andreas Multiplayer) em C/C++. Oferece controle total sobre a máquina virtual AMX, permitindo implementação de funcionalidades nativas de alto desempenho. Compatível com OPEN.MP e todas versões modernas do SA-MP.
Visão Geral do SDK
- Coleção de 15+ headers especializados e bibliotecas otimizadas
- Suporte completo à arquitetura 32/64-bit
- Integração multiplataforma (Windows/Linux/macOS)
- Sistema de debug integrado com 25+ códigos de erro
Componentes Principais
1 - Sistema AMX Avançado
- Máquina virtual para execução de scripts Pawn
- Gerenciamento de memória com 3 modelos de alocação
- Registro de 200+ funções nativas pré-implementadas
- Suporte a Unicode e codificação UTF-8
2 - Arquitetura Multiplataforma
- Headers específicos para Windows (MSVC), Linux (GCC), FreeBSD
- Tratamento automático de endianness e alinhamento
- Macros para caminhos (DIRSEP_CHAR) e compilação condicional
3 - Sistema de Plugins Profissional
- Interface de inicialização/descarregamento de plugins
- Registro automático de funções nativas via AMX_NATIVE_INFO
- Acesso direto à memória do servidor
- Handlers para eventos críticos
Detalhes Técnicos
Estruturas Principais
AMX_HEADER (amx_structures.h)
Código:
typedef struct tagAMX_HEADER {
int32_t size; // Tamanho total
uint16_t magic; // Assinatura (0xF1E0)
char file_version; // Versão do formato
char amx_version; // Versão AMX requerida
int16_t flags; // Flags de operação
// ... (+15 campos)
} AMX_HEADER;
AMX_NATIVE_INFO (amx.h)
Código:
typedef struct tagAMX_NATIVE_INFO {
const char* name; // Nome da função
AMX_NATIVE func; // Ponteiro para implementação
} AMX_NATIVE_INFO;
Sistema de Erros
- 28 códigos de erro detalhados (amx_constants.h):
- AMX_ERR_MEMORY (16): Falha crítica de alocação
- AMX_ERR_NATIVE (10): Erro em função nativa
- AMX_ERR_JIT (22): Falha na compilação JIT
Gerenciamento de Memória
- Alocação dinâmica via amx_Allot()
- Compactação automática (AMX_COMPACTMARGIN=64)
- Verificação de limites de acesso
- Sistema de tags de usuário (AMX_USERNUM)
Recursos Avançados
1 - Compilação JIT
Código:
#if defined JIT
int AMXAPI amx_InitJIT(AMX *amx, void *reloc_table, void *native_code);
#define AMX_FLAG_JITC 0x2000
#endif
- Aceleração em tempo de execução
- Suporte a otimizações específicas de CPU
2 - Interface de Depuração
Código:
typedef int (AMXAPI *AMX_DEBUG)(AMX *amx);
int AMXAPI amx_SetDebugHook(AMX *amx, AMX_DEBUG debug);
- Breakpoints programáveis
- Monitoramento de registradores (CIP/HEA/STP)
- Log de execução detalhado
3 - Manipulação de Strings
Código:
#define amx_StrParam(amx, param, result) \
/* Implementação completa */
AMXAPI amx_UTF8Check(const char *string, int *length);
- Conversão automática de codificações
- Suporte a caracteres multibyte
- Sanitização de inputs
Exemplos Práticos
1 - Plugin de Monitoramento
Código:
#include <amxplugin.h>
PLUGIN_EXPORT void PLUGIN_CALL OnServerTick() {
static int tick;
logprintf("Ticks: %d | Memória livre: %dKB",
++tick,
amx_MemInfo(amx, NULL, NULL, NULL) / 1024
);
}
PLUGIN_EXPORT int PLUGIN_INIT() {
amx_Register(debug_natives);
return 1;
}
2 - Função Nativa Avançada
Código:
cell AMX_NATIVE_CALL GetPlayerStats(AMX *amx, cell *params) {
cell *addr;
int player_id = params[1];
// Validação de segurança
if(player_id < 0 || player_id > MAX_PLAYERS)
return amx_RaiseError(amx, AMX_ERR_BOUNDS);
// Acesso à memória
amx_GetAddr(amx, params[2], &addr);
*addr = GetPing(player_id);
return 1;
}
Licenciamento
- Licença MIT: Uso comercial e modificações permitidas
- Requisitos:
- Atribuição de autoria original
- Inclusão do aviso de copyright
- Proibição de uso em malware
- Download: [/url][url=https://github.com/spc-samp/samp-sdk]Repositório Oficial
Documentação completa disponível nos headers | Suporte para 9 idiomas
obs: Apenas estou disponibilizando o conteúdo aqui no fórum, não tenho relação alguma com o projeto.
Discente de Sistemas de Informação no Centro Federal de Ensino Tecnológico(CEFET/RJ)
Programador SA-MP desde 2012
Programador SA-MP desde 2012
Não envie dúvidas por inbox, crie um tópico. Sua dúvida pode ser a dúvida de outro alguém, e seu tópico ajudará outras pessoas no futuro.