Portal SAMP
[Pedido] Não repetir 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] Não repetir checkpoint (/showthread.php?tid=592)



Não repetir checkpoint - Levi.M - 01/01/2021

Olá, eu sei fazer um sistema de checkpoint randômico para profissões, mais como faço pra não repetir os checkpoint? Não consegui achar nada falando a respeito, se alguém puder ajudar, agradeço. Exemplo: o jogador foi a um checkpoint e dps seta outro checkpoint, só que por ser randômico as vezes o mesmo checkpoint é setado mais de uma vez.


RE: Não repetir checkpoint - SkolPlay - 01/01/2021

https://portalsamp.com/showthread.php?tid=538

Veja se resolve.


RE: Não repetir checkpoint - Levi.M - 01/01/2021

(01/01/2021 23:01)SkolPlay Escreveu: https://portalsamp.com/showthread.php?tid=538

Veja se resolve.

E como você fez pra utilizar esse sistema, algum exemplo?


RE: Não repetir checkpoint - SkolPlay - 02/01/2021

Fiz o random das posições e adicionei isso:

Código PHP:
new bool:usedPos[sizeof(pos)];

stock GetRandomAvaliablePos()
{
new 
maxp sizeof(usedPos);
new 
maxPos maxp;
new 
rndPos random(maxp);

while(
usedPos[rndPos] && maxPos > -1)
{
rndPos random(maxp);
maxPos --;
}

if(
maxPos > -1)
{
usedPos[rndPos] = true;
return 
rndPos;
}
else
return -
1;




RE: Não repetir checkpoint - Levi.M - 02/01/2021

Deu um erro do jeito que fiz: error 033: array must be indexed (variable "usedPos")

Código PHP:
SetPlayerRaceCheckpoint(playerid1posk[usedPos][],posk[usedPos][],posk[usedPos][], 0001.5); 



RE: Não repetir checkpoint - SkolPlay - 02/01/2021

(02/01/2021 09:42)Levi.M Escreveu: Consegui, muito obrigado.

Ficou basicamente desta forma:

Código PHP:
new Testando[MAX_PLAYERS];
new 
Float:Posicoes[][]=
{
    { 
0.00.00.0 },
    { 
0.00.00.0 },
    {
0.00.00.0 }
};

new 
bool:usedPos[sizeof(Posicoes)];

stock GetRandomAvaliablePos()
{
    new 
maxp sizeof(usedPos);
    new 
maxPos maxp;
    new 
rndPos random(maxp);

    while(
usedPos[rndPos] && maxPos > -1)
    {
        
rndPos random(maxp);
        
maxPos --;
    }

    if(
maxPos > -1)
    {
        
usedPos[rndPos] = true;
        return 
rndPos;
    }
    else
    return -
1;
}

public 
OnPlayerEnterCheckpoint(playerid)
{
    if(
Testando[playerid] > 0)
    {
        
    new rand random(sizeof(Posicoes));
        
    DisablePlayerCheckpoint(playerid);
    }
    return 
1;
}

CMD:testep(playerid)
{
    new 
rand random(sizeof(Posicoes));
    
SetPlayerCheckpoint(playeridPosicoes[rand][0], Posicoes[rand][1], Posicoes[rand][2], 2.0);
    return 
1;




RE: Não repetir checkpoint - Levi.M - 02/01/2021

(02/01/2021 09:53)SkolPlay Escreveu:
(02/01/2021 09:42)Levi.M Escreveu: Consegui, muito obrigado.

Ficou basicamente desta forma:

Código PHP:
new Testando[MAX_PLAYERS];
new 
Float:Posicoes[][]=
{
    0.00.00.0 },
0.00.00.0 },
0.00.00.0 }
};

new 
bool:usedPos[sizeof(Posicoes)];

stock GetRandomAvaliablePos()
{
new 
maxp sizeof(usedPos);
new 
maxPos maxp;
new 
rndPos random(maxp);

while(
usedPos[rndPos] && maxPos > -1)
{
rndPos random(maxp);
maxPos --;
}

if(
maxPos > -1)
{
usedPos[rndPos] = true;
return 
rndPos;
}
else
return -
1;
}

public 
OnPlayerEnterCheckpoint(playerid)
{
if(
Testando[playerid] > 0)
{
    new rand random(sizeof(Posicoes));
    DisablePlayerCheckpoint(playerid);
}
return 
1;
}

CMD:testep(playerid)
{
    new rand random(sizeof(Posicoes));
SetPlayerCheckpoint(playeridPosicoes[rand][0], Posicoes[rand][1], Posicoes[rand][2], 2.0);
return 
1;

Obrigado!!!