Strval tmp entre outros -
ViniKuliveguisky - 25.07.2013
Pessoal eu nгo entendi como se faz para getar muitas coisas em um comando por exemplo:
pawn Код:
if(strcmp(cmd, "/banip", true) == 0 || strcmp(cmd, "/banirip", true) == 0)
Temos o banip ai vai ter que digitar /banip [id] [motivo] como faзo para pegar o ID e o Motivo?
oque significa esses strval tmp e outros tipos assim, nгo consigo entender como faz isso!
Alguem poderia sу fazer um tut ai? ou passar um Post do forum? (procurei no search mais n achei nada)
Obs: Eu sei que vгo falar do sscanf mais eu nгo curti muito ele atй porque nunca mechi com ele e meu GM ta todo em strcmp
Re: Strval tmp entre outros -
PT - 25.07.2013
strval
tmp, pode ser muita coisa, so vendo o codigo... mas provavelmente deve ser para defenir o maximo de celulas em ua string
Respuesta: Re: Strval tmp entre outros -
ViniKuliveguisky - 25.07.2013
Quote:
Originally Posted by PT
strval
tmp, pode ser muita coisa, so vendo o codigo... mas provavelmente deve ser para defenir o maximo de celulas em ua string
|
Mano eu sei que tem na wiki
ja li tudo la mais nгo entendi nada oque realmente isso faz
Re: Strval tmp entre outros -
NathanLive - 25.07.2013
Vamos lб amigo:
Nesse tipo de comando vocк vai usar uma funзгo chamada strtok, ela serve para pegar o espaзo e identificar o que vem escrito depois do comando, usando ela funcionaria mais ou menos assim seu comando (nгo testei caso tenha erro avise aн):
pawn Код:
if(strcmp(cmd, "/banip", true) == 0 || strcmp(cmd, "/banirip", true) == 0)
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFFFAA, "Vocк nгo й administrador."); //Caso o player nгo for adm no caso eu usei a RCON como referкncia, no seu GM vocк modifica
new tmpex[128]; //Criei a variбvel tmpex que vai servir para armazenar o valor depois do primeiro espaзo ou seja o id
new idxex; // Servirб de apoio para funзгo strtok pois vai pegar o нnicio do id
tmpex = strtok(cmdtext, idxex); // Aqui vai atribuir para tmp o reconhecimento do id, pois o strtok vai pegar o espaзo que vem depois
if(!strlen(tmpex)) // Caso o usuбrio nгo digite o id
{
SendClientMessage(playerid,0xFFFFAA,"Uso correto: /banip [id] [motivo].");
return 1;
}
new playerban = strval(tmpex); //Strval serve para passar uma string de texto para um valor inteiro, ou seja tranforma o texto em nъmero, no caso o texto pegado й o id
if(!IsPlayerConnected(playerban)) return SendClientMessage(playerid, 0xFFFFAA, "Esse ID nгo estб conectado.");
/* Aн vocк usarб a funзгo abaixo para pegar o motivo, nгo vou explicar pois nгo conheзo muito bem essa funзгo, vou estudб-la melhor qualquer coisa te explico */
new length = strlen(cmdtext);
while ((idxex < length) && (cmdtext[idxex] <= ' '))// Aqui servirб para detectar o texto apуs o segundo espaзo
{
idxex++;
}
new offset = idxex;
new result[64];//Aqui serб armazenado o motivo do banimento
while ((idxex < length) && ((idxex - offset) < (sizeof(result) - 1)))
{
result[idxex - offset] = cmdtext[idxex];
idxex++;
}
result[idxex - offset] = EOS;
if(!strlen(result))//Caso nгo digite o motivo
{
SendClientMessage(playerid,0xFFFFAA,"Uso correto: /banip [id] [motivo].");
return 1;
}
new aviso[256];
format(aviso, 256,"%s foi banido pelo ADM %s motivo: %s.",pNome(playerban), pNome(playerid), result);
SendClientMessageToAll(0xFFFFAA, aviso);
Ban(playerban);
}
A funзгo pNome que eu criei
pawn Код:
stock pNome(playerid)
{
new nome[MAX_PLAYER_NAME];
GetPlayerName(playerid, nome, sizeof(nome));
return nome;
}
Respuesta: Re: Strval tmp entre outros -
ViniKuliveguisky - 25.07.2013
Quote:
Originally Posted by NathanLive
Vamos lб amigo:
Nesse tipo de comando vocк vai usar uma funзгo chamada strtok, ela serve para pegar o espaзo e identificar o que vem escrito depois do comando, usando ela funcionaria mais ou menos assim seu comando (nгo testei caso tenha erro avise aн):
pawn Код:
if(strcmp(cmd, "/banip", true) == 0 || strcmp(cmd, "/banirip", true) == 0) { if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xFFFFAA, "Vocк nгo й administrador."); //Caso o player nгo for adm no caso eu usei a RCON como referкncia, no seu GM vocк modifica new tmpex[128]; //Criei a variбvel tmpex que vai servir para armazenar o valor depois do primeiro espaзo ou seja o id new idxex; // Servirб de apoio para funзгo strtok pois vai pegar o нnicio do id tmpex = strtok(cmdtext, idxex); // Aqui vai atribuir para tmp o reconhecimento do id, pois o strtok vai pegar o espaзo que vem depois if(!strlen(tmpex)) // Caso o usuбrio nгo digite o id { SendClientMessage(playerid,0xFFFFAA,"Uso correto: /banip [id] [motivo]."); return 1; } new playerban = strval(tmpex); //Strval serve para passar uma string de texto para um valor inteiro, ou seja tranforma o texto em nъmero, no caso o texto pegado й o id if(!IsPlayerConnected(playerban)) return SendClientMessage(playerid, 0xFFFFAA, "Esse ID nгo estб conectado."); /* Aн vocк usarб a funзгo abaixo para pegar o motivo, nгo vou explicar pois nгo conheзo muito bem essa funзгo, vou estudб-la melhor qualquer coisa te explico */ new length = strlen(cmdtext); while ((idxex < length) && (cmdtext[idxex] <= ' '))// Aqui servirб para detectar o texto apуs o segundo espaзo { idxex++; } new offset = idxex; new result[64];//Aqui serб armazenado o motivo do banimento while ((idxex < length) && ((idxex - offset) < (sizeof(result) - 1))) { result[idxex - offset] = cmdtext[idxex]; idxex++; } result[idxex - offset] = EOS; if(!strlen(result))//Caso nгo digite o motivo { SendClientMessage(playerid,0xFFFFAA,"Uso correto: /banip [id] [motivo]."); return 1; } new aviso[256]; format(aviso, 256,"%s foi banido pelo ADM %s motivo: %s.",pNome(playerban), pNome(playerid), result); SendClientMessageToAll(0xFFFFAA, aviso); Ban(playerban); }
A funзгo pNome que eu criei
pawn Код:
stock pNome(playerid) { new nome[MAX_PLAYER_NAME]; GetPlayerName(playerid, nome, sizeof(nome)); return nome; }
|
Hm... nгo resolveu tudo pois entendi atй onde vocк sabia tbm ^^
Mais vai ganhar rep.
Se alguem poder dar uma complementada ai na parte que ele sabe mais ou menos eu agradeзo!
Re: Strval tmp entre outros -
NathanLive - 25.07.2013
Pois й esses cуdigos sгo meio confusos mesmo, dei uma olhada melhor aqui vamos ver se ajuda:
pawn Код:
new length = strlen(cmdtext);//Aqui vai pegar o tamanho total do comando do usuбrio, pois o comando fica armazenado nessa variбvel (cmdtext)
while ((idxex < length) && (cmdtext[idxex] <= ' '))// Aqui vai criar um while para resolver o seguinte, enquanto o index for menor que o tamanho total da variбvel (lembre-se o index extб posicionado sobre a posiзгo do primeiro espaзo pois utilizamos a strtok ali em cima)
//E enquanto nгo acha o caracter que comeзa o segundo espaзo do comando
{
idxex++;//vai aumentar o caracter um por um atй identificar a posiзгo inicial do segundo espaзo
}
new offset = idxex;//Variбvel decorativa que vai servir apenas para cauculo ali embaixo
new result[64];//Aqui serб armazenado o motivo do banimento
Atй essa parte eu entendi, o outro while que complica tudo.
Re: Strval tmp entre outros -
NathanLive - 25.07.2013
Dei uma olhada aqui no search para ver se achava explicaзгo e tals encontrei esse tutorial, vк se ajuda:
https://sampforum.blast.hk/showthread.php?tid=358864
Respuesta: Strval tmp entre outros -
ViniKuliveguisky - 25.07.2013
Blz valeu pela ajuda
Re: Strval tmp entre outros -
darkxdll - 25.07.2013
Vini , strcmp e strtok em comandos estб meio ultrapassado na minha opiniгo .
Tente evoluir seu cуdigo pra bCMD ou ZCMD com sscanf2
...
Mais ai a escolha й sua , sу te falo o seguinte :
Eu uso ZCMD desde que vi a simplicidade de um comando com parвmetros !
Respuesta: Strval tmp entre outros -
ViniKuliveguisky - 25.07.2013
@Edit ja arrumei!
Hm... eu nгo acho que estб ultrapassado nгo!
Prefiro usar coisas da a_samp mesmo atй porque й muito mais dificil haver bugs!