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
|