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(playerid, 2.0, 137.0839,-76.0554,1.4297) || IsPlayerInRangeOfPoint(playerid, 2.0, 134.7746,-83.3934,1.4297))  {  if(Plantando[playerid] == 1)  {      GetPlayerPos(playerid, PX[playerid], PY[playerid], PZ[playerid]);      SendClientMessage(playerid, -1, "Plantou na posição 1.");      Planta1x[playerid] = CreatePickup(1274, 23, 137.0839,-76.0554,1.4297);  }  else if(Plantando[playerid] == 2)  {      GetPlayerPos(playerid, PosicaoXX[playerid], PosicaoYY[playerid], PosicaoZZ[playerid]);      SendClientMessage(playerid, -1, "Plantou na posição 2.");      Planta2x[playerid] = CreatePickup(1274, 23, 134.7746,-83.3934,1.4297);      }  }  return 1; }
  CMD:colher(playerid) {     if(IsPlayerInRangeOfPoint(playerid, 2.0, PX[playerid], PY[playerid], PZ[playerid]) || IsPlayerInRangeOfPoint(playerid, 2.0, PosicaoXX[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(playerid, 2.0, PX[playerid], PY[playerid], PZ[playerid]))return SendClientMessage(playerid, -1, "Você não plantou nada aqui!");             // os negocios de colher         }         case 2:         {             if(!IsPlayerInRangeOfPoint(playerid, 2.0, PosicaoXX[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 i = 0; i < MAX_PLANTAS; ++i)     {         if(InfoPlanta[i][Plantado] == 0)         {             GetPlayerPos(playerid, InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);             InfoPlanta[i][Pickup] = CreatePickup(1274, 23, InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);             new msg[64];             InfoPlanta[i][Plantado] = 1;             format(msg, 64, "Planta: %d foi plantada com sucesso.", i);             SendClientMessage(playerid, -1, msg);             return 1;         }     }             return 1; }
  CMD:colher(playerid) {     for(new i = 0; i < MAX_PLANTAS; ++i)     {         if(IsPlayerInRangeOfPoint(playerid, 2, InfoPlanta[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(msg, 64, "Planta: %d foi colhida com sucesso.", i);                 SendClientMessage(playerid, -1, msg);                 //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 i = 0; i < MAX_PLANTAS; ++i)     {         if(InfoPlanta[i][Plantado] == 0)         {             GetPlayerPos(playerid, InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);             InfoPlanta[i][Pickup] = CreatePickup(1274, 23, InfoPlanta[i][X], InfoPlanta[i][Y], InfoPlanta[i][Z]);             new msg[64];             InfoPlanta[i][Plantado] = 1;             format(msg, 64, "Planta: %d foi plantada com sucesso.", i);             SendClientMessage(playerid, -1, msg);             return 1;         }     }             return 1; }
  CMD:colher(playerid) {     for(new i = 0; i < MAX_PLANTAS; ++i)     {         if(IsPlayerInRangeOfPoint(playerid, 2, InfoPlanta[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(msg, 64, "Planta: %d foi colhida com sucesso.", i);                 SendClientMessage(playerid, -1, msg);                 //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
 
 
 
 |