Portal SAMP
[Pedido] Ajuda com checkpoint - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Pedido] Ajuda com checkpoint (/showthread.php?tid=2971)

Páginas: 1 2


Ajuda com checkpoint - Zoiao - 07/11/2022

Estou fazendo a profissão de Entregador de jornal, quero que ele vai até o checkpoint nas casas, mas quando ele chaga no checkpoint não mostra a mensagem.

Alguem por favor pode me dizer, como faz o player entrar no checkpoint sem usar nenhum comando, é para entrar no checkpoint e entregar os jornais e ir para outro checkpoint


RE: Ajuda com checkpoint - Carlos Victor - 07/11/2022

Tenta esse código ai, vou testar agora, mas eu acho que funciona.
Código:
new const Float:g_arrCheckpoints[][] = {
    {x, y, z},
    {x, y, z}
};

new playerCheckpoint[MAX_PLAYERS] = {-1, ...};

public OnPlayerEnterCheckpoint(playerid)
{
    if(GetPlayerCheckpoint(playerid) != 0)
    {
        DisablePlayerCheckpoint(playerid);        
        GivePlayerMoney(playerid, 20);

        SendClientMessage(playerid, -1, "* Você entregou um jornal e ganhou $20.");
        return 1;
    }
    return 1;
}

CMD:entregar(playerid)
{
    new rand = random(sizeof(g_arrCheckpoints));

    SetPlayerCheckpoint(playerid, g_arrCheckpoints[rand][0], g_arrCheckpoints[rand][1], g_arrCheckpoints[rand][2], 1.0);
    playerCheckpoint[playerid] = rand;

    SendClientMessage(playerid, -1, "* Entregue até o local marcado em seu mapa.");
    return 1;
}

GetPlayerCheckpoint(playerid)
{
    for(new i = 0; i < sizeof(g_arrCheckpoints); i++)
    {
        if(playerCheckpoint[playerid] == i && IsPlayerInRangeOfPoint(playerid, 2.0, g_arrCheckpoints[i][0], g_arrCheckpoints[i][1], g_arrCheckpoints[i][2]))
                return 1;
    }
    return 0;
}

Dei uma modificada no código, e funciona, testei aqui.


RE: Ajuda com checkpoint - Zoiao - 07/11/2022

(07/11/2022 09:37)Carlos Victor Escreveu: Tenta esse código ai, vou testar agora, mas eu acho que funciona.
Código:
new const Float:g_arrCheckpoints[][] = {
    {x, y, z},
    {x, y, z}
};

new playerCheckpoint[MAX_PLAYERS] = {-1, ...};

public OnPlayerEnterCheckpoint(playerid)
{
    if(GetPlayerCheckpoint(playerid) != 0)
    {
        DisablePlayerCheckpoint(playerid);        
        GivePlayerMoney(playerid, 20);

        SendClientMessage(playerid, -1, "* Você entregou um jornal e ganhou $20.");
        return 1;
    }
    return 1;
}

CMD:entregar(playerid)
{
    new rand = random(sizeof(g_arrCheckpoints));

    SetPlayerCheckpoint(playerid, g_arrCheckpoints[rand][0], g_arrCheckpoints[rand][1], g_arrCheckpoints[rand][2], 1.0);
    playerCheckpoint[playerid] = rand;

    SendClientMessage(playerid, -1, "* Entregue até o local marcado em seu mapa.");
    return 1;
}

GetPlayerCheckpoint(playerid)
{
    for(new i = 0; i < sizeof(g_arrCheckpoints); i++)
    {
        if(playerCheckpoint[playerid] == i && IsPlayerInRangeOfPoint(playerid, 2.0, g_arrCheckpoints[i][0], g_arrCheckpoints[i][1], g_arrCheckpoints[i][2]))
                return 1;
    }
    return 0;
}

Dei uma modificada no código, e funciona, testei aqui.

deu 5 avisos de tag mismatch - e um erro de error 017: undefined symbol "rand".


RE: Ajuda com checkpoint - Carlos Victor - 07/11/2022

Eu atualizei o código, presta atenção.


RE: Ajuda com checkpoint - Zoiao - 07/11/2022

(07/11/2022 09:57)Carlos Victor Escreveu: Eu atualizei o código, presta atenção.

deu dois erro error 017: undefined symbol "GetPlayerCheckpoint"

5 avisos de loose indentation

1 erro de error 001: expected token: ";", but found "return"

warning 225: unreachable code

fiz tudo que voce mandou e deu os mesmos erros

o GetPlayerCheckpoint fica em qual quer lugar ou tem que ficar num lugar.


RE: Ajuda com checkpoint - Carlos Victor - 07/11/2022

Bom, o código está correto. Provavelmente você está integrando de forma incorreta na sua gamemode.

Você precisa por tudo certinho no devido lugar, dar espaçamentos(tab) e compilar. Acabei de compilar o código que enviei e não tem erro nenhum.

E sim, a função GetPlayerCheckpoint fica fora das funções, é basicamente uma stock, como dizem...


RE: Ajuda com checkpoint - Zoiao - 07/11/2022

(07/11/2022 10:29)Carlos Victor Escreveu: Bom, o código está correto. Provavelmente você está integrando de forma incorreta na sua gamemode.

Você precisa por tudo certinho no devido lugar, dar espaçamentos(tab) e compilar. Acabei de compilar o código que enviei e não tem erro nenhum.

E sim, a função GetPlayerCheckpoint fica fora das funções, é basicamente uma stock, como diz...
Agora deu certo, mas deu um aviso de loose indentation, eu acho que o getplayercheckpoint.

Eu coloquei ele embaixo do OnPlayerEnterCheckpoint

Vou te mostrar o que eu fiz


new const Float:g_arrCheckpoints[][] = {
    {1496.9918,-689.0601,95.1433},
    {1410.9694,-921.5505,38.4219}
};

new playerCheckpoint[MAX_PLAYERS] = {-1, ...};

--------------------------------------------------------------------------------

public OnPlayerEnterCheckpoint(playerid)
{
       if(GetPlayerCheckpoint(playerid) != 0)
    {
        DisablePlayerCheckpoint(playerid);
        GivePlayerMoney(playerid, 20);

        SendClientMessage(playerid, -1, "* Você entregou um jornal e ganhou $20.");
        return 1;
    }
return 1;
}

GetPlayerCheckpoint(playerid)
{
    for(new i = 0; i < sizeof(g_arrCheckpoints); i++)
    {
        if(playerCheckpoint[playerid] == i && IsPlayerInRangeOfPoint(playerid, 2.0, g_arrCheckpoints[i][0], g_arrCheckpoints[i][1], g_arrCheckpoints[i][2]))
                return 1;
    }
    return 0;
}

if(!strcmp(cmd, "/entregarjornal", true))
{
  new rand = random(sizeof(g_arrCheckpoints));

    SetPlayerCheckpoint(playerid, g_arrCheckpoints[rand][0], g_arrCheckpoints[rand][1], g_arrCheckpoints[rand][2], 1.0);
    playerCheckpoint[playerid] = rand;

    SendClientMessage(playerid, -1, "* Entregue até o local marcado em seu mapa.");
    return 1;
}


RE: Ajuda com checkpoint - Carlos Victor - 07/11/2022

O aviso de loose indentation está na criação da variável rand você precisa indentar ela ali, da um espaço ou dois até remover o aviso.


RE: Ajuda com checkpoint - Zoiao - 07/11/2022

(07/11/2022 10:46)Carlos Victor Escreveu: O aviso de loose indentation está na criação da variável rand você precisa indentar ela ali, da um espaço ou dois até remover o aviso.

qual do rand voce está falando e como indentar ela?


RE: Ajuda com checkpoint - xbruno1000x - 07/11/2022

(07/11/2022 10:53)Zoiao Escreveu:
(07/11/2022 10:46)Carlos Victor Escreveu: O aviso de loose indentation está na criação da variável rand você precisa indentar ela ali, da um espaço ou dois até remover o aviso.

qual do rand voce está falando e como indentar ela?

Ele literalmente falou o que você precisa fazer. É só dar um espaço para alinhar essa variável com o resto do código.

Esse rand:
Código:
new rand = random(sizeof(g_arrCheckpoints));