Portal SAMP
[Ajuda] Posição - 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] Posição (/showthread.php?tid=933)



Posição - SkolPlay - 16/03/2021

Estou fazendo um sistema de plantação, fiz a criação de vários pickup para cada jogador plantar em um, porém se eu plantar no pickup x, eu posso colher no y. O que poderia fazer para que isto não aconteça?


RE: Posição - xbruno1000x - 16/03/2021

Basta definir valores distintos para a variável que armazena se o player plantou.
Exemplo:
Se ele plantou no pickup X¹, plantou[playerid] = 1;
Se ele plantou no pickup X², plantou[playerid] = 2;
...
E por aí vai. Você pode ir utilizando valores distintos e depois verificar no momento da colheita.


RE: Posição - SkolPlay - 17/03/2021

Bom, consegui elaborar os dois comandos, o de plantar e colher,  desta forma:

Está correto?

Código PHP:
new Plantando[MAX_PLAYERS], Planta1x[MAX_PLAYERS], Planta2x[MAX_PLAYERS];
new 
Float:PX[MAX_PLAYERS], Float:PY[MAX_PLAYERS], Float:PZ[MAX_PLAYERS];
new 
Float:PosicaoXX[MAX_PLAYERS], Float:PosicaoYY[MAX_PLAYERS], Float:PosicaoZZ[MAX_PLAYERS];

CMD:plantar(playerid)
{
 if(!
IsPlayerInRangeOfPoint(playerid2.0137.0839,-76.0554,1.4297) || IsPlayerInRangeOfPoint(playerid2.0134.7746,-83.3934,1.4297))
 {
 if(
Plantando[playerid] == 1)
 {
 
    GetPlayerPos(playeridPX[playerid], PY[playerid], PZ[playerid]);
 
    SendClientMessage(playerid, -1"Plantou na posição 1.");
 
    Planta1x[playerid] = CreatePickup(127423137.0839,-76.0554,1.4297);
 }
 else if(
Plantando[playerid] == 2)
 {
 
    GetPlayerPos(playeridPosicaoXX[playerid], PosicaoYY[playerid], PosicaoZZ[playerid]);
 
    SendClientMessage(playerid, -1"Plantou na posição 2.");
 
    Planta2x[playerid] = CreatePickup(127423134.7746,-83.3934,1.4297);
 
    }
 }
 return 
1;
}

CMD:colher(playerid)
{
    if(IsPlayerInRangeOfPoint(playerid2.0PX[playerid], PY[playerid], PZ[playerid]) || IsPlayerInRangeOfPoint(playerid2.0PosicaoXX[playerid], PosicaoYY[playerid], PosicaoZZ[playerid]))
{
    if(Plantando[playerid] == 1)
{
    // os negocios de colher
}
else if(
Plantando[playerid] == 2)
{
  // os negocios de colher
    }
}
else{
SendClientMessage(playerid, -1"Posição errada.");
}
return 
1;




RE: Posição - SkolPlay - 18/03/2021

Testei, testei e nada. alguém poderia ajudar?


RE: Posição - Levi.M - 18/03/2021

Não sei se assim vai dar bom, mais tente:
Código PHP:
CMD:colher(playerid)
{
    switch(
Plantando[playerid])
    {
        case 
1:
        {
            if(!
IsPlayerInRangeOfPoint(playerid2.0PX[playerid], PY[playerid], PZ[playerid]))return SendClientMessage(playerid, -1"Você não plantou nada aqui!");
            
// os negocios de colher
        
}
        case 
2:
        {
            if(!
IsPlayerInRangeOfPoint(playerid2.0PosicaoXX[playerid], PosicaoYY[playerid], PosicaoZZ[playerid]))return SendClientMessage(playerid, -1"Você não plantou nada aqui!");
            
// os negocios de colher
        
}
    }
    return 
1;


No caso acho que teria que por um por um assim, verifica o local que ele está com IsPlayerInRangeOfPoint e se ele plantou ali, e depois dá continuidade.


RE: Posição - SkolPlay - 18/03/2021

Não funcionou!


RE: Posição - k2bi_YT - 18/03/2021

Fiz um sistema basico usando uma enum para facilitar talvez o seu entendimento.

Esse tipo pode ser valido caso queira adaptar esse modo de uso no seu sistema, basta você dar continuidade nas funções, e além disso pode facilitar na hora de usar uma variável para salvamentos, etc...

Você pode alterar as define de sua preferencia e adicionar mais variáveis o quanto necessário para seu code.

OBS: Não testei o code, apenas fiz um basico para te ajudar, basta você adaptar na GM

Espero ter ajudado e seu feedback

Código PHP:
#define MAX_PLANTAS 15  ///Topo do GM

enum iPlanta
{
    
Float:X,
    
Float:Y,
    
Float:Z,
    
Pickup,
    
Plantado
};

new 
InfoPlanta[MAX_PLANTAS][iPlanta];

CMD:plantar(playerid)
{
    for(new 
0MAX_PLANTAS; ++i)
    {
        if(
InfoPlanta[i][Plantado] == 0)
        {
            
GetPlayerPos(playeridInfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);
            
InfoPlanta[i][Pickup] = CreatePickup(127423InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);
            new 
msg[64];
            
InfoPlanta[i][Plantado] = 1;
            
format(msg64"Planta: %d foi plantada com sucesso."i);
            
SendClientMessage(playerid, -1msg);
            return 
1;
        }
    }        
    return 
1;
}

CMD:colher(playerid)
{
    for(new 
0MAX_PLANTAS; ++i)
    {
        if(
IsPlayerInRangeOfPoint(playerid2InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]))
        {
            if(
InfoPlanta[i][Plantado] == 1)
            {
                
InfoPlanta[i][Plantado] = 0;
                
DestroyPickup(InfoPlanta[i][Pickup]);
                new 
msg[64];
                
format(msg64"Planta: %d foi colhida com sucesso."i);
                
SendClientMessage(playerid, -1msg);
                
//Função acima é somente para teste basico do sistema de funcionamento

                //Funcao restante para colher....
                //Funcao restante para colher....
                //Funcao restante para colher....
                
return 1;
            }
        }
    }
    
SendClientMessage(playerid, -1"Você não está proximo de uma planta.");
    return 
1;




RE: Posição - SkolPlay - 18/03/2021

(18/03/2021 13:32)k2bi_YT Escreveu: Fiz um sistema basico usando uma enum para facilitar talvez o seu entendimento.

Esse tipo pode ser valido caso queira adaptar esse modo de uso no seu sistema, basta você dar continuidade nas funções, e além disso pode facilitar na hora de usar uma variável para salvamentos, etc...

Você pode alterar as define de sua preferencia e adicionar mais variáveis o quanto necessário para seu code.

OBS: Não testei o code, apenas fiz um basico para te ajudar, basta você adaptar na GM

Espero ter ajudado e seu feedback

Código PHP:
#define MAX_PLANTAS 15  ///Topo do GM

enum iPlanta
{
    
Float:X,
    
Float:Y,
    
Float:Z,
    
Pickup,
    
Plantado
};

new 
InfoPlanta[MAX_PLANTAS][iPlanta];

CMD:plantar(playerid)
{
    for(new 
0MAX_PLANTAS; ++i)
    {
        if(
InfoPlanta[i][Plantado] == 0)
        {
            
GetPlayerPos(playeridInfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);
            
InfoPlanta[i][Pickup] = CreatePickup(127423InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);
            new 
msg[64];
            
InfoPlanta[i][Plantado] = 1;
            
format(msg64"Planta: %d foi plantada com sucesso."i);
            
SendClientMessage(playerid, -1msg);
            return 
1;
        }
    }        
    return 
1;
}

CMD:colher(playerid)
{
    for(new 
0MAX_PLANTAS; ++i)
    {
        if(
IsPlayerInRangeOfPoint(playerid2InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]))
        {
            if(
InfoPlanta[i][Plantado] == 1)
            {
                
InfoPlanta[i][Plantado] = 0;
                
DestroyPickup(InfoPlanta[i][Pickup]);
                new 
msg[64];
                
format(msg64"Planta: %d foi colhida com sucesso."i);
                
SendClientMessage(playerid, -1msg);
                
//Função acima é somente para teste basico do sistema de funcionamento

                //Funcao restante para colher....
                //Funcao restante para colher....
                //Funcao restante para colher....
                
return 1;
            }
        }
    }
    
SendClientMessage(playerid, -1"Você não está proximo de uma planta.");
    return 
1;

Muito obrigado, ajudou bastante!! +REP