[Pedido] Comando nгo existente
#1

Gostaria de pedir a vocкs um CODE q qnd um player digitasse um comando invalido tipo /lalalalala Mostrasse [Erro] O Comando %s nгo й valido. Digite /ajuda para mais informaзхes ... alguem poderia me ajudar?
Reply
#2

Se vocк usar a callback OnPlayerCommandText й sу trocar o return 0; por:
pawn Код:
static str[80];
format(str, 80, "[Erro] Comando %s nгo й vбlido...", cmdtext);
return SendClientMessage(playerid, -1, str);
Reply
#3

Obrigado vou testar

@@ EDIT: Nгo funfou, Erro:

Код:
(57721) : error 017: undefined symbol "cmdtext"
Linha \/

Код:
		format(str, 80, "{FF0000}[Erro]: {FFFFFF}O Comando {FF0000}%s {FFFFFF}nгo й vбlido. Digite /ajuda para mais informaзхes.", cmdtext);
@@EditІ: Resolvi o erro... compilo normal... irei testar... se funfar = @@Editі

@@Editі: Nгo funfo
Reply
#4

Nгo existe return 0; no final do meu OnPlayerCommandText... Ultimo CMD >>>
Код:
	if(strcmp(cmd, "/contrato",true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	   	{
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD1, "USO: /contrato [playerid/Parte-do-Nick] [amount]");
				return 1;
			}
			giveplayerid = ReturnUser(tmp);
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD1, "USO: /contrato [playerid/Parte-do-Nick] [amount]");
				return 1;
			}
			moneys = strval(tmp);
			if(moneys < 100 || moneys > 1000) { SendClientMessage(playerid, COLOR_GREY, "   O contrato deve ser entre R$100 a R$1000)"); return 1; }
			if (IsPlayerConnected(giveplayerid))
			{
			    if(giveplayerid != INVALID_PLAYER_ID)
			    {
				    if(PlayerInfo[giveplayerid][pMember] == 8 && PlayerInfo[playerid][pMember] == 8)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Vocк nгo pode fazer contrato em um Assassino.");
				        return 1;
				    }
				    else if(PlayerInfo[giveplayerid][pLeader] == 8 && PlayerInfo[playerid][pMember] == 8)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Vocк nгo pode criar os contratos sobre o lнder.");
				        return 1;
				    }
				    else if(PlayerInfo[giveplayerid][pMember] == 8||PlayerInfo[giveplayerid][pLeader] == 8)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Vocк nгo pode fazer contrato em um Assassino !");
				        return 1;
				    }
				    if(gTeam[giveplayerid] == 2 && moneys != 1000)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Contrato para cabeзa de policiais somente no valor de R$1000.");
				        return 1;
				    }
				    if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode fazer um contrato sobre si mesmo."); return 1; }
					GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
					GetPlayerName(playerid, sendername, sizeof(sendername));
					playermoney = GetPlayerGP(playerid);
					if (moneys > 0 && playermoney >= moneys)
					{
						GivePlayerGP(playerid, (0 - moneys));
						PlayerInfo[giveplayerid][pHeadValue]+=moneys;
						format(string, sizeof(string), "<< %s criou um contrato sobre %s, por R$ %d. >>",sendername, giveplayer, moneys);
						SendFamilyMessage(8, COLOR_YELLOW, string);
						format(string, sizeof(string), "Vocк criou um contrato sobre %s, por R$ %d.",giveplayer, moneys);
						SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
						PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
					}
					else
					{
						SendClientMessage(playerid, COLOR_GRAD1, "   O valor de transiзгo do contrato estб invбlido.");
					}
				}
			}
			else
			{
				format(string, sizeof(string), "   %d nгo й um ID vбlido", giveplayerid);
				SendClientMessage(playerid, COLOR_GRAD1, string);
			}
		}
		return 1;
	}
	return 1;
Reply
#5

Quote:
Originally Posted by victor304
Посмотреть сообщение
Nгo existe return 0; no final do meu OnPlayerCommandText... Ultimo CMD >>>
Код:
	if(strcmp(cmd, "/contrato",true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	   	{
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD1, "USO: /contrato [playerid/Parte-do-Nick] [amount]");
				return 1;
			}
			giveplayerid = ReturnUser(tmp);
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GRAD1, "USO: /contrato [playerid/Parte-do-Nick] [amount]");
				return 1;
			}
			moneys = strval(tmp);
			if(moneys < 100 || moneys > 1000) { SendClientMessage(playerid, COLOR_GREY, "   O contrato deve ser entre R$100 a R$1000)"); return 1; }
			if (IsPlayerConnected(giveplayerid))
			{
			    if(giveplayerid != INVALID_PLAYER_ID)
			    {
				    if(PlayerInfo[giveplayerid][pMember] == 8 && PlayerInfo[playerid][pMember] == 8)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Vocк nгo pode fazer contrato em um Assassino.");
				        return 1;
				    }
				    else if(PlayerInfo[giveplayerid][pLeader] == 8 && PlayerInfo[playerid][pMember] == 8)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Vocк nгo pode criar os contratos sobre o lнder.");
				        return 1;
				    }
				    else if(PlayerInfo[giveplayerid][pMember] == 8||PlayerInfo[giveplayerid][pLeader] == 8)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Vocк nгo pode fazer contrato em um Assassino !");
				        return 1;
				    }
				    if(gTeam[giveplayerid] == 2 && moneys != 1000)
				    {
				        SendClientMessage(playerid, COLOR_GREY, "   Contrato para cabeзa de policiais somente no valor de R$1000.");
				        return 1;
				    }
				    if(giveplayerid == playerid) { SendClientMessage(playerid, COLOR_GREY, "Vocк nгo pode fazer um contrato sobre si mesmo."); return 1; }
					GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
					GetPlayerName(playerid, sendername, sizeof(sendername));
					playermoney = GetPlayerGP(playerid);
					if (moneys > 0 && playermoney >= moneys)
					{
						GivePlayerGP(playerid, (0 - moneys));
						PlayerInfo[giveplayerid][pHeadValue]+=moneys;
						format(string, sizeof(string), "<< %s criou um contrato sobre %s, por R$ %d. >>",sendername, giveplayer, moneys);
						SendFamilyMessage(8, COLOR_YELLOW, string);
						format(string, sizeof(string), "Vocк criou um contrato sobre %s, por R$ %d.",giveplayer, moneys);
						SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
						PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
					}
					else
					{
						SendClientMessage(playerid, COLOR_GRAD1, "   O valor de transiзгo do contrato estб invбlido.");
					}
				}
			}
			else
			{
				format(string, sizeof(string), "   %d nгo й um ID vбlido", giveplayerid);
				SendClientMessage(playerid, COLOR_GRAD1, string);
			}
		}
		return 1;
	}
	return 1;
Coloque antes do ъltimo return 1; :

pawn Код:
static str[80];
format(str, 80, "[Erro] Comando %s nгo й vбlido...", cmdtext);
SendClientMessage(playerid, -1, str);
Reply
#6

Antes disto coloca:

pawn Код:
if(strlen(cmdtext) > 25) return false;
static str[80];
format(str, 80, "[Erro] Comando %s nгo й vбlido...", cmdtext);
SendClientMessage(playerid, -1, str);
Como o tamanho de cmdtext й dinвmica e o de str й estбtico se o cara digitar um comando muito longo como "/uhsahushuahusahushuauhsauhuhshua" corre risco de ultrapassar o limite de cells de str e bugar seu servidor. Fica o aviso para outros que tem o mesmo cуdigo.

Faзam o teste:
pawn Код:
main() {
    new a = 7;
    new str[6];
    str[a] = 'x'; // acessando parte 7 da array STR. Mas ela sу tem atй 6  
}
SA:MP Format deve ser prevenido disto acredito, nгo fiz os testes de forma coerente ainda, mas toda й precauзгo pouca. rs

O mesmo de o cara colocar caracteres bipadores:

pawn Код:
new str[5];
    format(str, 5, "/%s", "•");
    for(new i; i != 50; i++) {
        print(str);
    }
Coloque isto e veja a desgraзa que dб ^^
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)