sábado, 23 de novembro de 2013

[TUT] Erros e Warnings - Como resolver

eae gente, blz ? então, pra quem ta começando com pawno e até pra quem já e das antigas ainda esquenta a cabeça com warnings e erros simples que fodem com um dia inteiro de programação rs vou por uma lista aqui com a causa dos erros/warnings mais comuns, suas causas e como consertar.




Categorias de erro
Os erros são separados em três classes:


Errors - Descrever situações onde o compilador é incapaz de gerar o código apropriado.Mensagens de erros são numeradas de 1 a 99.

Fatal errors - Erros fatais são erros que o compilador não pode recuperar.Análise é abortada.Mensagens de fatal errors são numeradas 100-199.

Warnings - Os warnings são exibidos para os pressupostos do compilador não intencionais e erros comuns.As mensagens de warnings são numeradas 200-299.[/spoiler]


Warnings comuns
- Loose Indentation
  • Causa: Você nao deu uma formatação (alinhamento) correto ao script.
public OnPlayerLeaveCheckpoint(playerid)
{
    SendClientMessage(playerid,-1,"Exemplo de loose Indentation by ssgames.");
        print("Exemplo de loose Indentation by ssgames.");
    return 1;
}
  • Fix: Só arrumar o alinhamento do código.
public OnPlayerLeaveCheckpoint(playerid)
{
    SendClientMessage(playerid,-1,"Exemplo de loose Indentation by ssgames.");
    print("Exemplo de loose Indentation by ssgames.");
    return 1;
}

- Unreachable code
  • Causa: O compilador diz que não pode ser acessado o trecho completo do código, é retornado antes que ele chegue lá.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(vehicleid == 520)
    {
        SendClientMessage(playerid,-1,"Você entrou no veiculo 520, by ssgames.");
        return 1;
    }
    else return 0;
    return 1;
}
  • Fix: Verifique os returns e conserte-os.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(vehicleid == 520)
    {
        SendClientMessage(playerid,-1,"Você entrou no veiculo ID 520, by ssgames.");
        return 1
    }
    return 1;
}
- Nested comment
  • Causa: Um aviso muito importante. Você comentou algo em um comentário.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    /* if(vehicleid == 520)
    {
        if(playerid == 0)
        {
            /* if(ispassenger)
            {
                print("SSGAMES!");
                return 1;
            }
        }
    } */
    return 1;
}
  • Fix: Basta retirar o segundo comentário.
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    /* if(vehicleid == 520)
    {
        if(playerid == 0)
        {
            if(ispassenger)
            {
                print("SSGAMES!");
                return 1;
            }
        }
    } */
    return 1;
}
- Number of arguments does not match definition
  • Causa: Você tem mais ou menos argumentos do que você realmente tem que ter.
CMD:centro(playerid,params[])
{
    #pragma unused params
    SetPlayerPos(playerid,0.0,0.0,3.0,90.0);
    SendClientMessage(playerid,-1,"Você foi posicionado ao centro do mapa, by ssgames.");
    return 1;
}
  • Fix: Olhe para as sintaxes corretas para a função. Use sempre o SA-MP Wiki para ver as definições corretas dos argumentos. Lá diz que SetPlayerPos só tem quatro argumentos; playerid, X, Y e Z. 
CMD:centro(playerid,params[])
{
    #pragma unused params
    SetPlayerPos(playerid,0.0,0.0,3.0);
    SetPlayerFacingAngle(playerid,90.0);
    SendClientMessage(playerid,-1,"Você foi posicionado ao centro do mapa, by ssgames.");
    return 1;
}
- Symbol is never used 'symbol'
  • Causa: Você criou alguma variavel que nunca foi usada.
CMD:supertapa(playerid,params[])
{
  #pragma unused params
    new Float:Pos[3],string[128];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2] + 200);
    SendClientMessage(playerid,-1,"Voce tomou um tapa.");
    return 1;
 
}
  • Fix: Basta remove-la.
CMD:supertapa(playerid,params[])
{
  #pragma unused params
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    SetPlayerPos(playerid,Pos[0],Pos[1],Pos[2] + 200);
    SendClientMessage(playerid,-1,"Voce tomou um tapa, by ssgames.");
    return 1;
 
}
- Unknown parameter in substitution
  • Causa: Você usou um parâmetro em um define que é desconhecido.
#define PutPos(%1,%2,%3,%4); SetPlayerPos(%9,%2,%3,%4); // %9  não foi definido aqui.
  • Fix: Use os parâmetros certos, e certifique-se que está definido antes.
#define PutPos(%1,%2,%3,%4); SetPlayerPos(%1,%2,%3,%4);
Se você acha que faltou algum warn aqui, comente abaixo seguindo o mesmo modelo, Causa e Fix.






Erros Comuns
- Undefined symbol 'symbol'
  • Causa: O oposto de "symbol is never used". Você está usando uma variável em algum lugar que você não tenha criado.
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    GetPlayerName(playerid,Playername,sizeof(Playername));
    SendClientMessage(playerid,-1,Playername);
    return 1;
}
  • Fix: Crie a variável.
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    new Playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Playername,sizeof(Playername));
    SendClientMessage(playerid,-1,Playername);
    return 1;
}

- Symbol already defined 'symbol'
  • Causa: Você criou uma variável duas vezes.
CMD:ssgames(playerid,params[])
{
        new Playername[MAX_PLAYER_NAME];
    #pragma unused params
        new Playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Playername,sizeof(Playername));
    SendClientMessage(playerid,-1,Playername);
    return 1;
}
  • Fix: Apague uma.
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    new Playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Playername,sizeof(Playername));
    SendClientMessage(playerid,-1,Playername);
    return 1;
}

- Expression has no effect
  • Causa: Não tenho certeza sobre isso. Eu acho que é causada por símbolos inválidos em lugares onde não deveriam estar.
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    GivePlayerWeapon(playerid,46,1);k
    SendClientMessage(playerid,-1,"Você ganhou um paraquedas.");
    return 1;
}
  • Fix: Apague-o.
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    GivePlayerWeapon(playerid,46,1);
    SendClientMessage(playerid,-1,"Você ganhou um paraquedas.");
    return 1;
}

- Empty statement
  • Causa: Você tem duplos símbolos, tais como;; .
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    GivePlayerWeapon(playerid,46,1);
    SendClientMessage(playerid,-1,"Você ganhou um paraquedas.");;
    return 1;
}
  • Fix: Apague um.
CMD:ssgames(playerid,params[])
{
    #pragma unused params
    GivePlayerWeapon(playerid,46,1);
    SendClientMessage(playerid,-1,"Você ganhou um paraquedas.");
    return 1;
}

Function "function" is not implemented
  • Causa: Você usou uma função que não é conhecida pelo compilador. ou Se você receber muitos erros, enquanto alguns deles são esse erro, você esqueceu de fechar uma função com um suporte.
CMD:ssgames(playerid,params[])
{
    SendFormatMessage(playerid,-1,"Cash: %d ... Score: %d",GetPlayerMoney(playerid),GetPlayerScore(playerid));
    return 1;
}
  • Fix: Adicione a função ausente no script. ou Encontre o suporte em falta e adicione-o.
new str[128];
#define SendFormatMessage(%0,%1,%2,%3) format(str, sizeof(str),%2,%3) && SendClientMessage(%0, %1, str)

-[Fatal Error]- Cannot read from file 'file'
  • Causa: Você colocou no topo do script '# include <file>', mas o arquivo não existe na pasta '/ pawno / includes.
  • Fix: Coloque o arquivo na pasta includes ou remova a linha include (isso pode causar problemas com o script, por isso é melhor usar a primeira solução.)
Se você acha que faltou algum erro aqui, comente abaixo seguindo o mesmo modelo, Causa e Fix.
Creditos:Brinquedo_Script

Nenhum comentário:

Postar um comentário

Escreva seu comentario aqui.