stock GetVehicleName doesn't work
#1

Hello,
this is my code:
Code:
new VehNames[212][] = {
	{"Landstalker"},{"Bravura"},{"Buffalo"},{"Linerunner"},{"Perrenial"},{"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"},{"Article Trailer"},
	{"Previon"},{"Coach"},{"Cabbie"},{"Stallion"},{"Rumpo"},{"RC Bandit"},{"Romero"},{"Packer"},{"Monster"},
	{"Admiral"},{"Squalo"},{"Seasparrow"},{"Pizzaboy"},{"Tram"},{"Article Trailer 2"},{"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"},{"ZR-350"},
	{"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 LA"},{"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 Flat"},{"Streak Carriage"},
	{"Kart"},{"Mower"},{"Dunerider"},{"Sweeper"},{"Broadway"},{"Tornado"},{"AT-400"},{"DFT-30"},{"Huntley"},
	{"Stafford"},{"BF-400"},{"Newsvan"},{"Tug"},{"Article Trailer 3"},{"Emperor"},{"Wayfarer"},{"Euros"},{"Mobile Hotdog"},
	{"Club"},{"Freight Carriage"},{"Trailer 3"},{"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"}
};

stock GetVehicleName(vehicleid)
{
	new GVNString[56];
	format(GVNString, sizeof(GVNString), VehNames[GetVehicleModel(vehicleid)-400]);
	return GVNString;
}
and this is where I'm using it:
Code:
CMD:createveh(playerid, params[])
{
	new vehID;
	new string[128];
	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(playerid, Float:X, Float:Y, Float:Z);
	if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /createveh [vehID].");
	else if(vehID < 400 || vehID > 611) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
    else
    {
    	pVehicle[playerid] = CreateVehicle(vehID, X, Y, Z + 3.0, 0, -1, -1, -1, 1);
    	format(string,sizeof(string), "[SUCCESSO] Hai spawnato un(a) %s (%i).", GetVehicleName(vehID), vehID);
    	SendClientMessage(playerid, COLOR_GREEN, string);
    	PutPlayerInVehicle(playerid, pVehicle[playerid], 0);
    }
    return 1;
}
The gm compiles, the server runs and even the script (partially) works. The vehicle gets created but string doesn't get printed and the player is not put in the vehicle. I just get "SERVER: Unknown command.".
I think something is wrong with the way I use GetVehicleName with format. I've tried declaring vehName[124] inside else{} and formatting it with GetVehicleName before formatting string with vehName, vehID but this way the vehicle doesn't even get spawned.
Could you help me, please? Thanks. ^^
Reply
#2

Use this function

Code:
stock static GetVehicleName(modelid)
{
    static vehName[30];
    strunpack(vehName, VehicleNames[modelid - 400]);
    return vehName;
}
Reply
#3

Quote:
Originally Posted by NoteND
View Post
Use this function

Code:
stock static GetVehicleName(modelid)
{
    static vehName[30];
    strunpack(vehName, VehicleNames[modelid - 400]);
    return vehName;
}
Thanks for your reply, it works.
But, why it doesn't with this code:
Code:
CMD:destroyveh(playerid, params[])
{
	new vehID;
	new string[128];
	if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /destroyveh [vehID].");
	else if(IsValidVehicle(vehID))
		{
			DestroyVehicle(vehID);
			format(string, sizeof(string), "[SUCCESSO] Hai despawnato un(a) %s (%i).", GetVehicleName(vehID), vehID);
			SendClientMessage(playerid, COLOR_GREEN, string);
		}
	else SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
	return 1;
}
?
Sorry if it is a noob question.
Reply
#4

Quote:
Originally Posted by Sh4rp
View Post
Thanks for your reply, it works.
But, why it doesn't with this code:
~snip~
GetVehicleName(vehID) should be GetVehicleName(GetVehicleModel(vehID))
Reply
#5

Quote:
Originally Posted by SlowARG
View Post
GetVehicleName(vehID) should be GetVehicleName(GetVehicleModel(vehID))
When I'm home I'll try it. I have one more question: what's the difference between the code I wrote in cmd:createveh (GetVehicleName(vehID) works perfectly) and cmd:deleteveh (where I need to put GetVehicleName(GetVehicleModel(vehID)))?
Reply
#6

Quote:
Originally Posted by Sh4rp
View Post
When I'm home I'll try it. I have one more question: what's the difference between the code I wrote in cmd:createveh (GetVehicleName(vehID) works perfectly) and cmd:deleteveh (where I need to put GetVehicleName(GetVehicleModel(vehID)))?
Because in createveh you use vehID as model
Reply
#7

I've tried with SlowARG's code and it doesn't compile. This is my code:
Code:
CMD:destroyveh(playerid, params[])
{
	new vehID;
	new string[128];
	if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /destroyveh [vehID].");
	else if(IsValidVehicle(vehID))
		{
			DestroyVehicle(vehID);
			format(string, sizeof(string), "[SUCCESSO] Hai despawnato un(a) %s (%i).", GetVehicleName(GetVehicleModel(vehID));
			SendClientMessage(playerid, COLOR_GREEN, string);
		}
	else SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
	return 1;
}
I get this error:error 001: expected token: ",", but found ";"
Reply
#8

pawn Code:
CMD:destroyveh(playerid, params[])
{
    new vehID, string[128];
    if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /destroyveh [vehID].");
    if(IsValidVehicle(vehID))
    {
        format(string, sizeof(string), "[SUCCESSO] Hai despawnato un(a) %s (Model ID: %i | ID: %i).", VehNames[GetVehicleModel(vehID) - 400], GetVehicleModel(vehID), vehID);
        SendClientMessage(playerid, COLOR_GREEN, string);
        DestroyVehicle(vehID);
    } else SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
    return 1;
}
//not need use stock for get vehicle name. Use this.
//and `DestroyVehicle()` must be after `format()` because vehicle destroyed and `GetVehicleModel()` has return invalid model id.
Reply
#9

Quote:
Originally Posted by Vizi10
View Post
pawn Code:
CMD:destroyveh(playerid, params[])
{
    new vehID, string[128];
    if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /destroyveh [vehID].");
    if(IsValidVehicle(vehID))
    {
        format(string, sizeof(string), "[SUCCESSO] Hai despawnato un(a) %s (Model ID: %i | ID: %i).", VehNames[GetVehicleModel(vehID) - 400], GetVehicleModel(vehID), vehID);
        SendClientMessage(playerid, COLOR_GREEN, string);
        DestroyVehicle(vehID);
    } else SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
    return 1;
}
//not need use stock for get vehicle name. Use this.
//and `DestroyVehicle()` must be after `format()` because vehicle destroyed and `GetVehicleModel()` has return invalid model id.
I've deleted my stock and used your code on CMD:createveh too. The vehicle gets created but no message appears.
Code:
CMD:createveh(playerid, params[])
{
	new vehID;
	new string[128];
	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(playerid, Float:X, Float:Y, Float:Z);
	if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /createveh [vehID].");
	else if(vehID < 400 || vehID > 611) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
    else
    {
    	pVehicle[playerid] = CreateVehicle(vehID, X, Y, Z + 3.0, 0, -1, -1, -1, 1);
    	PutPlayerInVehicle(playerid, pVehicle[playerid], 0);
    	format(string, sizeof(string), "[SUCCESSO] Hai despawnato un(a) %s (Model ID: %i, ID: %i).", VehNames[GetVehicleModel(vehID) - 400], GetVehicleModel(vehID), vehID);
    	SendClientMessage(playerid, COLOR_GREEN, string);
    }
    return 1;
}
Reply
#10

Quote:
Originally Posted by NoteND
View Post
Use this function

Code:
stock static GetVehicleName(modelid)
{
    static vehName[30];
    strunpack(vehName, VehicleNames[modelid - 400]);
    return vehName;
}
Why do people abuses strunpack... That is for unpacking packed strings to unpacked string... It is just to expand the char bits in 1 byte binary to pawn 4 bytes cell.. thats not really the correct way to copy strings

Quote:
Originally Posted by Sh4rp
View Post
I've deleted my stock and used your code on CMD:createveh too. The vehicle gets created but no message appears.
Code:
CMD:createveh(playerid, params[])
{
	new vehID;
	new string[128];
	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(playerid, Float:X, Float:Y, Float:Z);
	if(sscanf(params, "i", vehID)) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Sintassi errata, utilizza: /createveh [vehID].");
	else if(vehID < 400 || vehID > 611) return SendClientMessage(playerid, COLOR_RED, "[ERRORE] Parametro [vehID] errato.");
    else
    {
    	pVehicle[playerid] = CreateVehicle(vehID, X, Y, Z + 3.0, 0, -1, -1, -1, 1);
    	PutPlayerInVehicle(playerid, pVehicle[playerid], 0);
    	format(string, sizeof(string), "[SUCCESSO] Hai despawnato un(a) %s (Model ID: %i, ID: %i).", VehNames[GetVehicleModel(vehID) - 400], GetVehicleModel(vehID), vehID);
    	SendClientMessage(playerid, COLOR_GREEN, string);
    }
    return 1;
}
Ugh now you use getvehiclemodel on vehicle model instead of what returned by CreateVehicle into pVehicle[playerid]


Vehicle ID = 1 to 2000 (MAX_VEHICLES) given by CreeateVehicle
Vehicle Model = 400 to 611 what used in VehNames array

Now your "VehID" is players input of vehicle model... Not id
pVehicle[playerid] is the vehicle id returned by CreateVehicle

Do GetVehicleModel(pVehichle[playerid])

Also please note that new sscanf has k<vehicle> kustom specifier use that instead then you can use model id "411" or vehicle exact name "Infernus" (defined in sscanf include) as parameter and you no longer need to check for valid model range
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)