Pesquisar

×

Wiki Pawno SA-MP — Visualização Pública Modo Leitura

Você pode navegar livremente e consultar toda a documentação. Para contratar ou programar na sua Workspace do Editor Pawno Web, faça login com sua conta Discord.

Entrar com Discord Ver Planos do Editor

Wikipedia & Central de Ajuda Pawno IDE

Documentação oficial do nosso sistema web e guia completo da linguagem PAWN para SA-MP.

IDE Web Otimizada SA-MP PAWN Doc
Categorias:

1. Guia de Uso da Nossa Workspace Web Pawno

Sistema

Compilar Gamemode (Tecla F5)

Transforma o seu código fonte .pwn no arquivo binário executável .amx que roda direto no servidor SA-MP.

  • Onde ver o resultado: Qualquer erro ou aviso (warning) é exibido no Terminal de Compilação na parte inferior.
  • Navegação de erros: Dê um duplo clique na linha do erro no terminal para saltar direto para a linha errada no editor!
  • Compilação rápida: Você pode pressionar F5 a qualquer momento no teclado para compilar.

Auto-Fix IA (Varinha Mágica)

Nosso assistente inteligente analisa o relatório de erros retornado pelo compilador do Pawn e reescreve automaticamente as linhas defeituosas.

  • Como usar: Se a compilação falhar com erros, clique no ícone da varinha mágica no topo do editor.
  • Correções suportadas: Falta de ponto e vírgula (;), chaves desbalanceadas, sintaxe incorreta em dialogs e variáveis não declaradas.

Abertura Instantânea de Gamemodes (Cache IndexedDB)

Nossa Workspace é equipada com um banco de dados local no navegador (IndexedDB) para lidar com gamemodes gigantes (com mais de 180.000 linhas).

  • Zero tempo de espera: Quando você abre um arquivo uma vez, ele fica salvo no cache local do seu navegador. Ao reabrir a IDE ou atualizar a página, o arquivo abre em menos de 1 segundo.
  • Sincronização em segundo plano: O sistema valida com o servidor silenciosamente para garantir que você esteja com a versão mais recente sem travar sua tela.

Sincronização em Tempo Real (Live Sync)

Programe em equipe no mesmo arquivo no estilo Google Docs!

  • Cursores ao vivo: Veja a posição e as edições dos seus outros programadores ou sub-admins simultaneamente.
  • Barra de presenciais: Na barra superior da IDE você vê quem está conectado e online na mesma Workspace no momento.

Gerenciador de Arquivos & Backups ZIP

Organize os arquivos da sua gamemode de forma simples e intuitiva.

  • Ações em lote: Selecione múltiplos arquivos para mover de pasta, deletar ou compactar em .zip.
  • Downloads Rápidos: Baixe o .zip da sua gamemode inteira com apenas um clique para manter cópias de segurança.

Acesso FTP & Ponte com o Servidor

Acesse os arquivos do seu servidor diretamente por programas externos como FileZilla ou WinSCP.

  • Dados de Conexão: Host, Usuário, Porta e Senha do FTP estão disponíveis na aba Acesso FTP.
  • Ponte Servidor: Permite reiniciar a execução do SA-MP diretamente do editor assim que você compila o seu código.

2. Conceitos Básicos da Linguagem PAWN

Linguagem

Declaração de Variáveis e Tipos

No Pawn, todas as variáveis são declaradas utilizando a palavra-chave new:

// Inteiro
new level = 5;

// Ponto Flutuante (Coordenadas/Vida)
new Float:vida = 100.0;

// Booleano (Verdadeiro ou Falso)
new bool:estaTrabalhando = true;

// String (Array de Caracteres)
new nome[32] = "Jogador";

// Array Multidimensional (Matriz)
new matrizExemplo[5][10];

Diretivas de Compilador (#pragma)

Diretivas configuram comportamentos do compilador no topo do código:

// Desativa avisos de indentação (warning 217)
#pragma tabsize 0

// Aumenta a memória da pilha para gamemodes grandes (evita crash do compilador)
#pragma dynamic 60000

// Ignora warnings específicos se necessário
#pragma unused minhaVariavel

Diferença entre Stock, Forward e Public

  • stock: Usado para criar funções auxiliares. Se a função não for usada no código, o compilador não gera erro e ignora o trecho.
  • public: Funções que podem ser chamadas pelo servidor SA-MP (como Callbacks) ou por SetTimer / SetTimerEx.
  • forward: Declaração do cabeçalho obrigatória antes de qualquer função public.
// Declaração do cabeçalho para public
forward MeuTimerCustom(playerid);

public MeuTimerCustom(playerid) {
    SendClientMessage(playerid, -1, "Timer executado!");
    return 1;
}

stock EnviarMensagemErro(playerid, const texto[]) {
    new str[128];
    format(str, sizeof(str), "[ERRO]: %s", texto);
    SendClientMessage(playerid, 0xFF0000FF, str);
}

3. Principais Callbacks (Eventos) do SA-MP

Eventos

public OnGameModeInit()

Executado uma única vez quando o servidor SA-MP inicia. Ideal para criar veículos globais, carregar banco de dados e objetos.

public OnGameModeInit()
{
    SetGameModeText("Meu Servidor RP v1.0");
    AddPlayerClass(0, 1958.3783, -1367.7384, 13.8600, 269.1425, 0, 0, 0, 0, 0, 0);
    
    // Criar um veículo estático em Los Santos
    AddStaticVehicle(520, 2000.0, -1200.0, 13.5, 0.0, 1, 1);
    return 1;
}

public OnPlayerConnect(playerid)

Chamado assim que o jogador estabelece conexão com o servidor. Use para resetar variáveis e exibir caixa de login/registro.

public OnPlayerConnect(playerid)
{
    new string[128], pNome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pNome, sizeof(pNome));
    
    format(string, sizeof(string), ">>> %s entrou no servidor.", pNome);
    SendClientMessageToAll(0x38BDF8FF, string);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)

Chamado quando o jogador sai do servidor. Motivos: 0 (Timeout/Crash), 1 (Saiu voluntariamente), 2 (Kicked/Banned).

public OnPlayerDisconnect(playerid, reason)
{
    // OBRIGATÓRIO: Salvar dados da conta do jogador aqui!
    SalvarDadosJogador(playerid);
    return 1;
}

public OnPlayerSpawn(playerid)

Executado assim que o jogador renasce na cidade. Defina vida, colete, armas e posição aqui.

public OnPlayerSpawn(playerid)
{
    SetPlayerHealth(playerid, 100.0);
    GivePlayerWeapon(playerid, 24, 100); // Desert Eagle
    return 1;
}

public OnPlayerText(playerid, text[])

Acionado quando o jogador envia uma mensagem no chat global ou local. Retornar 0 impede a mensagem original de aparecer.

public OnPlayerText(playerid, text[])
{
    // Formatar chat com ID do jogador
    new string[144], pNome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pNome, sizeof(pNome));
    format(string, sizeof(string), "%s [%d]: %s", pNome, playerid, text);
    SendClientMessageToAll(-1, string);
    return 0; // Bloqueia a mensagem padrao do SA-MP
}

public OnDialogResponse(...)

Captura as interações do jogador com caixas de diálogo (ShowPlayerDialog).

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == 1001) // ID do Dialog
    {
        if (!response) return SendClientMessage(playerid, -1, "Voce cancelou.");
        
        if (listitem == 0) // Item 1 da lista
        {
            SetPlayerHealth(playerid, 100.0);
            SendClientMessage(playerid, 0x3FB950FF, "Vida restaurada!");
        }
        return 1;
    }
    return 0;
}

4. Biblioteca e Dicionário de Funções Nativas do SA-MP

Dicionário SA-MP

Funções de Manipulação do Jogador

SendClientMessage(playerid, color, message[])

Envia uma mensagem no chat para um jogador específico.

SendClientMessageToAll(color, message[])

Envia uma mensagem no chat visível para todos os jogadores online.

SetPlayerPos(playerid, Float:x, Float:y, Float:z)

Teleporta o jogador para as coordenadas X, Y e Z especificadas.

GivePlayerMoney(playerid, amount)

Adiciona ou remove (se valor negativo) dinheiro no bolso do jogador.

SetPlayerHealth(playerid, Float:health)

Altera a quantidade de vida do jogador (0.0 até 100.0).

ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2)

Exibe uma janela gráfica de diálogo interativa na tela do jogador.

Funções de Veículos

CreateVehicle(type, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn)

Spawna um veículo no mundo e retorna o ID único do veículo gerado.

PutPlayerInVehicle(playerid, vehicleid, seatid)

Teleporta o jogador diretamente para dentro do veículo (seatid: 0 é motorista).

RepairVehicle(vehicleid)

Restaura a lataria, motor e pneus danificados do veículo instantaneamente.

5. Processadores de Comando (Pawn.CMD / zcmd + sscanf2)

Comandos

Por que usar zcmd / Pawn.CMD?

O método antigo OnPlayerCommandText utiliza varreduras de texto lentas (strcmp). Processadores como zcmd ou Pawn.CMD são compilados diretamente em tabelas Hash e chegam a ser até 20 vezes mais rápidos.

#include <zcmd>
#include <sscanf2>

// Exemplo de Comando sem parametros:
CMD:vida(playerid, params[])
{
    SetPlayerHealth(playerid, 100.0);
    SendClientMessage(playerid, 0x3FB950FF, "[SUCESSO]: Sua vida foi restaurada!");
    return 1;
}

Como extrair parâmetros com sscanf

A include sscanf permite ler parâmetros de comandos em uma única linha:
u = Nome do jogador ou ID, i = Inteiro, f = Float, s = String.

CMD:dargrana(playerid, params[])
{
    new targetid, quantia;
    if (sscanf(params, "ui", targetid, quantia)) {
        return SendClientMessage(playerid, -1, "Uso correto: /dargrana [id/nome] [quantidade]");
    }
    
    if (!IsPlayerConnected(targetid)) {
        return SendClientMessage(playerid, 0xFF0000FF, "[ERRO]: Jogador offline.");
    }
    
    GivePlayerMoney(targetid, quantia);
    SendClientMessage(playerid, 0x3FB950FF, "Dinheiro enviado com sucesso!");
    return 1;
}

6. Códigos e Snippets Prontos para Copiar

Exemplos Práticos

Sistema de Teleporte Básico com Menú Dialog

#define DIALOG_TELEPORTES 5050

CMD:ir(playerid, params[])
{
    ShowPlayerDialog(playerid, DIALOG_TELEPORTES, DIALOG_STYLE_LIST, 
        "Menu de Teleportes - SA-MP", 
        "1. Prefeitura de Los Santos\n2. Aeroporto de Las Venturas\n3. Lanchonete San Fierro", 
        "Ir", "Cancelar");
    return 1;
}

// Colocar dentro do OnDialogResponse:
if (dialogid == DIALOG_TELEPORTES)
{
    if (!response) return 1;
    switch(listitem)
    {
        case 0: SetPlayerPos(playerid, 1481.0, -1771.0, 18.7); // Los Santos
        case 1: SetPlayerPos(playerid, 1692.0, 1448.0, 10.7);  // Las Venturas
        case 2: SetPlayerPos(playerid, -2240.0, -88.0, 35.3);  // San Fierro
    }
    SendClientMessage(playerid, 0x38BDF8FF, "[TELEPORTE]: Voce foi teleportado!");
    return 1;
}

Comando para Criar Veículo e Entrar Automaticamente (/carro [modelo])

CMD:carro(playerid, params[])
{
    new modelo;
    if (sscanf(params, "i", modelo)) {
        return SendClientMessage(playerid, -1, "Uso: /carro [ID do Modelo 400 - 611]");
    }
    
    if (modelo < 400 || modelo > 611) {
        return SendClientMessage(playerid, 0xFF0000FF, "[ERRO]: Modelo de veiculo invalido! (400 a 611)");
    }
    
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    
    new vehID = CreateVehicle(modelo, x + 2.0, y, z + 0.5, a, 1, 1, -1);
    PutPlayerInVehicle(playerid, vehID, 0);
    
    SendClientMessage(playerid, 0x3FB950FF, "[VEICULO]: Veiculo criado com sucesso!");
    return 1;
}