09/05/2024 08:50
(Esta mensagem foi modificada pela última vez a: 09/05/2024 09:21 por samuelmatheus0502.)
@Cyclopeta essa variável IDFIXO, dessa linha "new IDFIXO, minutos, motivo[50 + 1];" você deve carregar ela quando o player entra.
Exeplo cria uma variável IdFixoPlayer[MAX_PLAYERS];
seta o IdFixo para o player com essa função que você tem.
E no comando você puxa essas informações, porquem você ta tentando pegar o idFixo no proprio comando, só que no comando você faz a busca através do playerid e não através de um loop
Meu amigo fiz esse código bem rápido e extremamente genérico porém está funcional, espero que ajude no sentido de lógica, pois eu uso STRCMP para fazer comandos e não sou muito familiarizado no ZCMD, mas é só converter e acredito que você consiga fazer isso na boa, ou o pessoal consegue te ajudar facilmente:
Topo do GM
Na OnPlayerConnect setei o idFixo do player de maneira extremamente genérica, você terá que pegar esse idFixo que você setou lá no seu banco de dados:
Na OnPlayerDisconnect eu fiz a limepza de dados da variável
Função de verificar se o player idFixo está conectado, no caso aquele que será digitado la no comando!(legal adicionar ao final do seu gamemode, você também já sabe disso)
E o comando propriamente dito, espero que sirva lógicamente porque eu não fiz em ZCMD
Com essa lógica da para fazer umas funções legais, exemplo: pegar o nome do player através do id unico etc
Da minha meneira genérica de fazer os ids fixo ficou o playerid + 7, no caso ID 0 > IdFixo = 7, ID 1 > IdFixo = 8 e assim vai meu amigo
E obviamente tem que fazer a função de prender de acordo que a você tem aí, eu só coloquei uma mensagem para servir de debug mesmo para ver se funcionou
Outra coisa também meu amigo, essa função está só sendo executada se o player tiver online, mas da para fazer também se ele estiver offiline, se for um sistema de prisão ADM por exemplo, mas para isso teria que fazer uma verificação no seu banco de dados se esse ID existe ao invés de verificar se ele está online.
Exeplo cria uma variável IdFixoPlayer[MAX_PLAYERS];
seta o IdFixo para o player com essa função que você tem.
E no comando você puxa essas informações, porquem você ta tentando pegar o idFixo no proprio comando, só que no comando você faz a busca através do playerid e não através de um loop
Meu amigo fiz esse código bem rápido e extremamente genérico porém está funcional, espero que ajude no sentido de lógica, pois eu uso STRCMP para fazer comandos e não sou muito familiarizado no ZCMD, mas é só converter e acredito que você consiga fazer isso na boa, ou o pessoal consegue te ajudar facilmente:
Topo do GM
Código:
new idFixoPlayer[MAX_PLAYERS]; // isso é porque é de maneira genérica, mas você deve ter o objeto player aí que conversa com seu banco de dados para puxar e setar essas infos de la
Código:
public OnPlayerConnect(playerid)
{
idFixoPlayer[playerid] = playerid + 7;
return 1;
}
Na OnPlayerDisconnect eu fiz a limepza de dados da variável
Código:
public OnPlayerDisconnect(playerid, reason)
{
idFixoPlayer[playerid] = 0;
return 1;
}
Função de verificar se o player idFixo está conectado, no caso aquele que será digitado la no comando!(legal adicionar ao final do seu gamemode, você também já sabe disso)
Código:
getIdFixo(id) // 7
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && idFixoPlayer[i] == id)
{
return 1;
}
}
return -255;
}
E o comando propriamente dito, espero que sirva lógicamente porque eu não fiz em ZCMD
Código:
if(strcmp("/prender", cmd, true) == 0)
{
if(PlayerInfo[playerid][pAdmin] == PLAYER_DONO) // isso tbm é meu mude para o seu se quiser ou remova
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))return SendClientMessage(playerid, vermelho, "/prender [IDFIXO]");
new i = strval(tmp);
if(i > 5000)return SendClientMessage(playerid, vermelho, "Os ID's fixos vão de 1 a 5000");
new idPlayer = getIdFixo(i);
if(idPlayer == -255) return SendClientMessage(playerid, vermelho, "O jogador está offline");
new stringtp[256];
format(stringtp, sizeof(stringtp),"{5858FA}[Presos] {ffffff}O %s prendeu o jogador ID %d",namePlayer(playerid), i);
SendClientMessage(playerid, -1, stringtp);
return 1;
} else {
//commandError(playerid); isso é do meu GM desconsidera
return 1;
}
}
Com essa lógica da para fazer umas funções legais, exemplo: pegar o nome do player através do id unico etc
Da minha meneira genérica de fazer os ids fixo ficou o playerid + 7, no caso ID 0 > IdFixo = 7, ID 1 > IdFixo = 8 e assim vai meu amigo
E obviamente tem que fazer a função de prender de acordo que a você tem aí, eu só coloquei uma mensagem para servir de debug mesmo para ver se funcionou
Outra coisa também meu amigo, essa função está só sendo executada se o player tiver online, mas da para fazer também se ele estiver offiline, se for um sistema de prisão ADM por exemplo, mas para isso teria que fazer uma verificação no seu banco de dados se esse ID existe ao invés de verificar se ele está online.
Estou na luta para que no futuro eu me torne um grande programador