Portal SAMP
[Ajuda] random - 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: [Ajuda] random (/showthread.php?tid=4679)



random - Tonnob V2 - 08/04/2024

opa queria saber como faço pro nao repetir o random,
fiz um sistema de entrega ela seta o check point, so que as vezes o check point cai no mesmo lugar.


RE: random - pushline - 08/04/2024

Código PHP:
cock()
{
    static 
lastRand;
    new 
rand;

    do
    {
        
rand random(sizeof(checkpoint));
    } while (
rand == lastRand);

    
lastRand rand;




RE: random - Tonnob V2 - 08/04/2024

(08/04/2024 08:45)pushline Escreveu:
Código PHP:
cock()
{
    static lastRand;
    new rand;

    do
    {
        rand random(sizeof(checkpoint));
    } while (rand == lastRand);

    lastRand rand;


ele faz o que exatamente ?, so pra eu saber como uso


RE: random - pushline - 08/04/2024

a função "do while" vai repetir a funçao do random enquanto a ultima randomização (lastRand) seja igual ao rand (prevenir oq vc pediu).
e o lastRand está estático para a variável não esquecer o ultimo valor. então se você tiver o lastRand igual a 5, e rodar a função novamente, não vai ser resetado para 0 (que seria o caso do new), e sim vai ter o valor de 5.


RE: random - Tonnob V2 - 09/04/2024

(08/04/2024 13:11)pushline Escreveu: a função "do while" vai repetir a funçao do random enquanto a ultima randomização (lastRand) seja igual ao rand (prevenir oq vc pediu).
e o lastRand está estático para a variável não esquecer o ultimo valor. então se você tiver o lastRand igual a 5, e rodar a função novamente, não vai ser resetado para 0 (que seria o caso do new), e sim vai ter o valor de 5.

agr fiquei na duvida de como adapitala ao SetPlayerCheckPoint sabe me dizer como ?
eu teria que criar essa função e chama


RE: random - pushline - 09/04/2024

Não sei como adaptar pq eu não sei como sua gm funciona e aquilo que eu mandei é só um exemplo da randomização não ser a mesma.


RE: random - Tonnob V2 - 09/04/2024

(09/04/2024 11:54)pushline Escreveu: Não sei como adaptar pq eu não sei como sua gm funciona e aquilo que eu mandei é só um exemplo da randomização não ser a mesma.

eu criei um pastebin com o foco na parte
https://pastebin.com/niM8WuXG


RE: random - pushline - 09/04/2024

Testa isso:
Código PHP:
new Float:RotasSedex[][4] =
{
    {
2347.5012,-1164.4919,27.44313.0},
    {
2095.0173,-1308.8472,24.09863.0},
    {
2001.0612,-1127.2688,25.59543.0},
    {
804.6202,-1455.2427,13.66523.0}
};
 
public 
OnPlayerEnterCheckpoint(playerid)
{
    if(
ServicoS[playerid] != 1)
    {
        
DisablePlayerCheckpoint(playerid);
    }
    else
    {
        new 
money random(500);
        new 
local;
        static 
ultimoLocal;

        do
    {
            
local random(sizeof(RotasSedex));
    } while (
local == ultimoLocal);

    
ultimoLocal local;

        
SetPlayerCheckpoint(playeridRotasSedex[local][0], RotasSedex[local][1], RotasSedex[local][2], RotasSedex[local][3]);
        
        new 
string[246];
        
format(stringsizeof(string), "<!> Entrega Sedex Voce recebeu {00FF00}R$%d"money);
        
SCM(playerid, -1string);

        
Player[playerid][pDinheiro] += money;
        
pCarga[playerid] -= 1;
    }
    return 
1;
}
 
//======= CMD
 
CMD:carregar(playerid)
{
    if(
Player[playerid][pEmprego] != 1) return SCM(playeridVermelho"<!> Voce nao e entregador");
    if(!
IsPlayerInRangeOfPoint(playerid3.0211.1068,24.8129,2.3410)) return SCM(playeridVermelho"<!> Voce nao esta no local para carregar");
    if(
pCarga[playerid] >= 1) return SCM(playeridVermelho"<!> Veiculo ja esta carregado");
    {
        
ServicoS[playerid] = 1;
        
pCarga[playerid] = 3;
        
        new 
local;
        static 
ultimoLocal;

        do
    {
            
local random(sizeof(RotasSedex));
    } while (
local == ultimoLocal);

    
ultimoLocal local;

        
SetPlayerCheckpoint(playeridRotasSedex[local][0], RotasSedex[local][1], RotasSedex[local][2], RotasSedex[local][3]);
        
SCM(playerid, -1"<!> Nao podera usar Gps em servico");
        
SCM(playeridAmarelo"<!> Veiculo carregado");
    }
    return 
1;




RE: random - Tonnob V2 - 09/04/2024

(09/04/2024 13:45)pushline Escreveu: Testa isso:
Código PHP:
new Float:RotasSedex[][4] =
{
    {2347.5012,-1164.4919,27.44313.0},
    {2095.0173,-1308.8472,24.09863.0},
    {2001.0612,-1127.2688,25.59543.0},
    {804.6202,-1455.2427,13.66523.0}
};
 
public 
OnPlayerEnterCheckpoint(playerid)
{
    if(
ServicoS[playerid] != 1)
    {
        
DisablePlayerCheckpoint(playerid);
    }
    else
    {
        new 
money random(500);
        new 
local;
        static 
ultimoLocal;

        do
    {
            
local random(sizeof(RotasSedex));
    } while (local == ultimoLocal);

    ultimoLocal local;

        
SetPlayerCheckpoint(playeridRotasSedex[local][0], RotasSedex[local][1], RotasSedex[local][2], RotasSedex[local][3]);
        
        new 
string[246];
        
format(stringsizeof(string), "<!> Entrega Sedex Voce recebeu {00FF00}R$%d"money);
        
SCM(playerid, -1string);

        
Player[playerid][pDinheiro] += money;
        
pCarga[playerid] -= 1;
    }
    return 
1;
}
 
//======= CMD
 
CMD:carregar(playerid)
{
    if(
Player[playerid][pEmprego] != 1) return SCM(playeridVermelho"<!> Voce nao e entregador");
    if(!
IsPlayerInRangeOfPoint(playerid3.0211.1068,24.8129,2.3410)) return SCM(playeridVermelho"<!> Voce nao esta no local para carregar");
    if(
pCarga[playerid] >= 1) return SCM(playeridVermelho"<!> Veiculo ja esta carregado");
    {
        
ServicoS[playerid] = 1;
        
pCarga[playerid] = 3;
        
        new 
local;
        static 
ultimoLocal;

        do
    {
            
local random(sizeof(RotasSedex));
    } while (local == ultimoLocal);

    ultimoLocal local;

        
SetPlayerCheckpoint(playeridRotasSedex[local][0], RotasSedex[local][1], RotasSedex[local][2], RotasSedex[local][3]);
        
SCM(playerid, -1"<!> Nao podera usar Gps em servico");
        
SCM(playeridAmarelo"<!> Veiculo carregado");
    }
    return 
1;


deu uns erro de "loose indentation"

(09/04/2024 18:37)Tonnob V2 Escreveu:
(09/04/2024 13:45)pushline Escreveu: Testa isso:
Código PHP:
new Float:RotasSedex[][4] =
{
    {2347.5012,-1164.4919,27.44313.0},
    {2095.0173,-1308.8472,24.09863.0},
    {2001.0612,-1127.2688,25.59543.0},
    {804.6202,-1455.2427,13.66523.0}
};
 
public 
OnPlayerEnterCheckpoint(playerid)
{
    if(
ServicoS[playerid] != 1)
    {
        
DisablePlayerCheckpoint(playerid);
    }
    else
    {
        new 
money random(500);
        new 
local;
        static 
ultimoLocal;

        do
    {
            
local random(sizeof(RotasSedex));
    } while (local == ultimoLocal);

    ultimoLocal local;

        
SetPlayerCheckpoint(playeridRotasSedex[local][0], RotasSedex[local][1], RotasSedex[local][2], RotasSedex[local][3]);
        
        new 
string[246];
        
format(stringsizeof(string), "<!> Entrega Sedex Voce recebeu {00FF00}R$%d"money);
        
SCM(playerid, -1string);

        
Player[playerid][pDinheiro] += money;
        
pCarga[playerid] -= 1;
    }
    return 
1;
}
 
//======= CMD
 
CMD:carregar(playerid)
{
    if(
Player[playerid][pEmprego] != 1) return SCM(playeridVermelho"<!> Voce nao e entregador");
    if(!
IsPlayerInRangeOfPoint(playerid3.0211.1068,24.8129,2.3410)) return SCM(playeridVermelho"<!> Voce nao esta no local para carregar");
    if(
pCarga[playerid] >= 1) return SCM(playeridVermelho"<!> Veiculo ja esta carregado");
    {
        
ServicoS[playerid] = 1;
        
pCarga[playerid] = 3;
        
        new 
local;
        static 
ultimoLocal;

        do
    {
            
local random(sizeof(RotasSedex));
    } while (local == ultimoLocal);

    ultimoLocal local;

        
SetPlayerCheckpoint(playeridRotasSedex[local][0], RotasSedex[local][1], RotasSedex[local][2], RotasSedex[local][3]);
        
SCM(playerid, -1"<!> Nao podera usar Gps em servico");
        
SCM(playeridAmarelo"<!> Veiculo carregado");
    }
    return 
1;


deu uns erro de "loose indentation"

deu certo conseguir compilar vou testar