Error en comando con sscanf.
#1

Buenas, estoy realizando mi sistema de maletero de a poco, y me quede trabado en un comando con parametros en el mismo.

Comando:
Код:
CMD:maletero(playerid, params[])
{
	if(isnull(params))
	{


		SendClientMessageEx(playerid, COLOR_GREEN, "Utiliza: /maletero (nombre)");
		SendClientMessageEx(playerid, COLOR_WHITE, "Nombres: ver, guardar, sacar");
		return 1;
	}
	else if(strcmp(params, "guardar", true) == 0)
	{
		new string[128], weaponchoice[32], slot;
		if(!sscanf(params, "s[32]d", weaponchoice, slot))
		{
		new pvid = -1, Float: x, Float: y, Float: z;
		for(new d = 0 ; d < MAX_PLAYERVEHICLES; d++)
		{
			if(PlayerVehicleInfo[playerid][d][pvId] != INVALID_PLAYER_VEHICLE_ID) GetVehiclePos(PlayerVehicleInfo[playerid][d][pvId], x, y, z);
			if(IsPlayerInRangeOfPoint(playerid, 3.0, x, y, z))
			{
				pvid = d;
				break;
			}
		}
		if(pvid == -1) return SendClientMessageEx(playerid,COLOR_GREY,"{FFFF00}[ERROR]:{FFFFFF} No estбs cerca de un vehнculo que sea tuyo.");
		
		new maxslots = 8;
		if(slot > maxslots)
		{
			SendClientMessageEx(playerid, COLOR_GREY, "{FFFF00}[ERROR]:{FFFFFF} Slot Invбlido, del 1 al 8.");
			return 1;
		}
		if( PlayerVehicleInfo[playerid][pvid][pvWeapons][slot-1] != 0)
		{
			SendClientMessageEx(playerid, COLOR_GREY, "{FFFF00}[ERROR]:{FFFFFF} Tienes armas guardadas en ese slot.");
			return 1;
		}
		new weapon;
		if(strcmp(weaponchoice, "sdpistol", true, strlen(weaponchoice)) == 0)
		{
			if( Info[playerid][pWeapons][2] == 23)
			{
				SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "Has guardado una pistola SD en tu maletero.");
				weapon = Info[playerid][pWeapons][2];
				format(string,sizeof(string), "* %s guarda un pistola SD en su maletero.", GetPlayerNameEx(playerid));
				ProxDetector(15.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
			}
		}
		else if(strcmp(weaponchoice, "deagle", true, strlen(weaponchoice)) == 0)
		{
			if( Info[playerid][pWeapons][2] == 24)
			{
				SendClientMessageEx(playerid, COLOR_LIGHTBLUE, "Has guardado un Desert Eagle en tu maletero.");
				weapon = Info[playerid][pWeapons][2];
				format(string,sizeof(string), "* %s guarda una Desert Eagle en su maletero.", GetPlayerNameEx(playerid));
				ProxDetector(15.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
			}
		}
		//El codigo del else if se repite con el resto de armas, no lo coloco ya que seria muy largo....
		if(weapon == 0) return SendClientMessageEx(playerid, COLOR_WHITE, "No tienes esa arma");
		if(PlayerVehicleInfo[playerid][pvid][pvWeapons][slot-1] == 0)
		{



			PlayerVehicleInfo[playerid][pvid][pvWeapons][slot-1] = weapon;
			RemovePlayerWeapon(playerid, weapon);
			return 1;
		}
		else { SendClientMessageEx(playerid,COLOR_GREY,"   Nombre invбlido!");}
	}
	else return SendClientMessageEx(playerid, COLOR_WHITE, "Utiliza: /maletero (guardar) (arma) (slot)");
	}
	return 1;
}
No se que parte del comando es, pero no tengo respuesta alguna al comando mas que un mensaje del uso del mismo ( "Utiliza: /maletero..." es lo unico que responde.)


Gracias de antemano.
Reply
#2

En vez de:

Код:
if(isnull(params))
	{


		SendClientMessageEx(playerid, COLOR_GREEN, "Utiliza: /maletero (nombre)");
		SendClientMessageEx(playerid, COLOR_WHITE, "Nombres: ver, guardar, sacar");
		return 1;
	}
Coloca esto:

Код:
if(sscanf(params,"s",params[0])) return SendClientMessageEx(playerid, COLOR_GREEN, "Utiliza: /maletero (nombre)");
Y en vez de:

Код:
else if(strcmp(params, "guardar", true) == 0)
Coloca esto:

Код:
if(!strcmp(params[0], "guardar", true))
y asн vas cambiando los "else if" por el que te puse, prueba a ver si funciona.
Reply
#3

Y para hacer muchнsimo mas corto el comando, en vez de poner "/maletero guardar deagle" "/maletero guardar sdpistol" y un comando para cada arma, es mas fбcil solo colocar "/maletero guardar" y se guarda automбticamente el arma que lleva el pj encima.

Antes debes programarlo, claro estб...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)