New to Pawno language, and having several problems with looping through an array
#1

So I just started today making a little command system. Altho I'm from JAVA, I've understood a few things in pawno. Everything was going fine untill the loop didn't loop through all the elements in the VerhicleArray. It stops at the 4th element. Because the function "strcmp" things those 2 strings are the same. BUT THEY ARENT ;o.

The player command looks like this: "/vehicle 'Bullet'.

Here is the code:
Код:
new VehicleNames[212][] = {
	"Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
	"Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
	"Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
	"Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
	"Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
	"Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR3 50","Walton","Regina",
	"Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
	"Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
	"Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
	"Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
	"Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
	"Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
	"Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
	"Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
	"Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
	"Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
	"Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};


public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strfind(cmdtext, "/vehicle", true) != -1)
    {

		new output[10][10];
		strexplode(output,cmdtext, "'");

		for(new i = 0; i <= sizeof(VehicleNames); i++)
		{
		    if(!strcmp(output[i], VehicleNames[i], true))
	 	    {
	        	  new Float:x, Float:y, Float:z, Float:az;
				  GetPlayerPos(playerid, x, y, z);
				  GetPlayerFacingAngle(playerid, az);
				  CreateVehicle(i + 400, x+5, y+5, z, az, -1, -1, 180);
			      SendClientMessage(playerid, -1, "Vehicle command executed!");
			    	return 1;
		    }
		}
    }
    return 0;
}
I'm really looking forward to some help, much appreciated!


Kind regards,

~ Just1c3

PS: sorry for my bad english, it's not my native language (dutch is)
Reply
#2

First: the language is called Pawn. Pawno is an editor. Secondly, I don't get what you're trying to do. Why are you using strexplode? By the way, I think sscanf comes with some sort of vehicle specifier in the form of:
pawn Код:
sscanf(params, "k<vehicle>", vehicleid)
Reply
#3

Hey!

My apologise for being so stupid. Ofcourse it's Pawn, but I've seen several websites using the word 'Pawno'. But it's an IDE. I'm using strexplode for splitting the string in several parts. So I can get the value between ''. Nothing wrong with that right? But anyways, it's nice that you have gave me an example of sscanf but my problem isn't solved yet. Why doesn't the loop continue after 4 elements?
Reply
#4

because if string is empty strcmp return 'match', your output[i] is empty (null) and strcmp fail
Reply
#5

The problem is that you're using strcmp, use Vince's sscanf solution or use strfind.

if(strfind(VehicleName[i], string, true) != -1)





I personally prefer sscanf though.
Reply
#6

It's better to use ZCMD (https://sampforum.blast.hk/showthread.php?tid=91354) for the commands (or even y_commands) and all you'll need is just:
PHP код:
CMD:vehicle(playeridparams[])
{
    if (!
isnull(params))
    {
        for(new 
0sizeof(VehicleNames); i++)
        {
            if(
strfind(VehicleName[i], paramstrue) != -1)
            {
                new 
Float:xFloat:yFloat:zFloat:az;
                
GetPlayerPos(playeridxyz);
                
GetPlayerFacingAngle(playeridaz);
                
CreateVehicle(400x+5y+5zaz, -1, -1180);
                
SendClientMessage(playerid, -1"Vehicle command executed!");
                break;
            }
        }
    }
    return 
1;

Note that in a loop, you shouldn't use "<=" with sizeof because indexes start from 0 or else it'll cause Run time error 4: "Array index out of bounds".
Reply
#7

Oh my god.. I'm seeing it now.. output[i] should have been output[1] since I need the second part.. *FACEPALM*
Thanks for the help!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)