Helló!
az lenne a kérdésem, hogy ezt hogy lehetne úgy megcsinálni, hogy id-re is leadja a kocsit és névre is mert akár hoggy próbálkozok vagy az egyik vagy a másik nem jó :/
kód:
dcmd_car(playerid, params[])
{
new carid[32],carid2,color1,color2,Float:x,Float:y,Float:z,Float:Angle,inte;
if(sscanf(params, \"s[32]D(1)D(1)\",carid2,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
if(strlen(carid)==0)
{
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
inte = GetPlayerInterior(playerid);
GetPlayerFacingAngle(playerid,Angle);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
}
else
{
carid2=GetVehicleModelIDFromName(carid);
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,Angle);
inte = GetPlayerInterior(playerid);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
}
return 1;
}
stock GetVehicleModelIDFromName(vname[])
{
for(new i = 0; i < 211; i++)
{
if ( strfind(VehicleNames, vname, true) != -1 )
return i + 400;
}
return -1;
}
Ahhoz hogy névre is mûködjön kell egy tömb amiben a jármûvek nevei vannak. és amikor a /car-nál vizsgálod az id-t elõtte azt is nézesd meg hogy az szám vagy szöveg. és ez után a szövegnél csak megnézed hogy melyik tömbelemmel egyezik és lehívod neki
igen az meg van és a hiba is meg van de az adott még egy hibát
ami pedig az h ha kocsi nevet irok be pl /car bus akkor egy mentõ autót ad le ezt csinálja pl a /car nrg vel is cott egy virgo-t ad le valamiért mostani kód:
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\"
};
dcmd_car(playerid, params[])
{
new carid[32],carid2,color1,color2,Float:x,Float:y,Float:z,Float:Angle,inte;
if(sscanf(params, \"s[32]D(-1)D(-1)\",carid2,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
if(!sscanf(params, \"dD(-1)D(-1)\",carid2,color1,color2))
{
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
inte = GetPlayerInterior(playerid);
GetPlayerFacingAngle(playerid,Angle);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
}
if(sscanf(params, \"dD(-1)D(-1)\",carid2,color1,color2))
{
carid2=GetVehicleModelIDFromName(carid);
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,Angle);
inte = GetPlayerInterior(playerid);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
}
SendClientMessage(playerid,zold,str);
return 1;
}
stock GetVehicleModelIDFromName(vname[])
{
for(new i = 0; i < 211; i++)
{
if ( strfind(VehicleNames, vname, true) != -1 )
return i + 400;
}
return -1;
}
és még egyszer a hiba:
némelyik kocsinál nem tudja azonosítani a nevet
pl beirom h /car bus akkor egy mentõt ad le
vagy ha beirom /car nrg akkor egy virgo-t ad le
kérdésem h ez mitõl lehet?
Én úgy csinálnám a helyedben hogy amikor meghívja a dcmd_car részt, akkor elsõnek vizsgálja meg, hogy szám vagy karakter a lekérés. vagyis.
dcmd_car(playerid, params[])
{
new carid[32],carid2,color1,color2,Float:x,Float:y,Float:z,Float:Angle,inte;
if(IsNumeric(params[0]))
{
if(sscanf(params, \"ddd\",carid2,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
inte = GetPlayerInterior(playerid);
GetPlayerFacingAngle(playerid,Angle);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
}
else
{
if(sscanf(params, \"s[32]dd\",carid,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
carid2=GetVehicleModelIDFromName(carid);
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,Angle);
inte = GetPlayerInterior(playerid);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
}
SendClientMessage(playerid,zold,str);
return 1;
}
stock GetVehicleModelIDFromName(vname[])
{
for(new i = 0; i < 211; i++)
{
if ( strfind(VehicleNames, vname, true) != -1 )
return i + 400;
}
return -1;
}
stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
if (string > \'9\' || string < \'0\') return 0;
return 1;
}
A hibák:
Mind a két vizsgálatnál carid2-be raktad és a stringet nem kezelte.
Nem jól vizsgáltad hogy id-t vagy nevet írt-e be.
Próbáld ki remélem mûködik. Mivel nincs idõm rá nem tudtam kipróbálni.
nosmost jó le lehet kérni kocsit id vel és névvel is éés nem is keleveri
viszont
ha azt irom be pl hogy /car nrg 0 0 akkor jó és lead egy fekete ntg-t viszont ha ugy kérem le h /car 522 0 0 akkor
valamiért ez a sor állít meg:
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
teljes kód:
dcmd_car(playerid, params[])
{
new carid[32],carid2,color1,color2,Float:x,Float:y,Float:z,Float:Angle,inte;
if(IsNumeric(params[0]))
{
if(sscanf(params, \"dD(-1)D(-1)\",carid2,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
}
if(!IsNumeric(params[0]))
{
if(sscanf(params, \"s[32]D(-1)D(-1)\",carid,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
carid2=GetVehicleModelIDFromName(carid);
}
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,Angle);
inte = GetPlayerInterior(playerid);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
SendClientMessage(playerid,zold,str);
return 1;
}
Dupla hozzászólás automatikusan összefûzve. ( 2014. február 13. - 17:11:40 )
Megvan :D
a helyes megoldás ez:
dcmd_car(playerid, params[])
{
new carid[32],carid2,color1,color2,Float:x,Float:y,Float:z,Float:Angle,inte;
sscanf(params, \"s[32]D(-1)D(-1)\",carid,color1,color2);
if(IsNumeric(carid))
{
if(sscanf(params, \"dD(-1)D(-1)\",carid2,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
}
if(!IsNumeric(carid))
{
if(sscanf(params, \"s[32]D(-1)D(-1)\",carid,color1,color2)) return SendClientMessage(playerid,-1,\"Használat2:/car ...\");
carid2=GetVehicleModelIDFromName(carid);
}
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1==-1) color1 = random(126);
if(color2==-1) color2 = random(126);
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,Angle);
inte = GetPlayerInterior(playerid);
DestroyVehicle(PlayerInfo[playerid][kocsi]);
PlayerInfo[playerid][kocsi]=CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
SendClientMessage(playerid,zold,str);
return 1;
}
én inkább valami ilyesmivel próbálkoznék :)
dcmd_car(playerid, params[])
{
new carid[32],carid2,color1,color2,Float:x,Float:y,Float:z,Float:Angle,inte;
if(sscanf(params, \"s[32]D(-1)D(-1)\",carid,color1,color2)) { return SendClientMessage(playerid,-1,\"Használat2:/car ...\"); }
//
if(IsNumeric(carid))
{ carid2 = strval(carid); }
else
{ carid2 = GetVehicleModelIDFromName(carid); }
//
if(carid2 < 400 || carid2 > 611) return SendClientMessage(playerid,ERROR, \"HIBA: nemlétezik ilyen modell vagy hibás a név\");
if(color1 == -1) color1 = random(126);
if(color2 == -1) color2 = random(126);
// Szín ellenõrzés?
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,Angle);
inte = GetPlayerInterior(playerid);
//
if(GetVehicleModel(PlayerInfo[playerid][kocsi])) { DestroyVehicle(PlayerInfo[playerid][kocsi]); }
//
PlayerInfo[playerid][kocsi] = CreateVehicle(carid2, x,y,z, Angle, color1, color2, -1);
LinkVehicleToInterior(PlayerInfo[playerid][kocsi],inte);
PutPlayerInVehicle(playerid,PlayerInfo[playerid][kocsi], 0);
//
format(str,sizeof(str),\"Te lekértél egy %s-t | ID: %d | Szin1: %d | Szin2: %d |\",VehicleNames[carid2-400],carid2,color1,color2);
SendClientMessage(playerid,zold,str);
return 1;
}
SSCANF-ban van egy új paraméte rlehetõség, kb már 1 éve..
\"Custom (kustom) specifiers\"
(
http://forum.sa-mp.com/showthread.php?t=120356 )
Gyakorlati használat például:
#define FILTERSCRIPT
#include <a_samp>
#include <sscanf2>
#include <zcmd>
CMD:v(playerid, params[]) {
new modelid, color1, color2;
sscanf(params, \"k<vehicle>I(-1)I(-1)\", modelid, color1, color2);
if(modelid == -1) return SendClientMessage(playerid, 0xFF0000AA, \"Hibás jármûazonosítót adtál meg.\");
if(color1 == -1) color1 = random(512);
if(color2 == -1) color2 = random(512);
new vehicleid, Float:p[4], interior;
GetPlayerPos(playerid, p[0], p[1], p[2]);
GetPlayerFacingAngle(playerid, p[3]);
interior = GetPlayerInterior(playerid);
vehicleid = CreateVehicle(modelid, p[0], p[1], p[2], p[3], color1, color2, -1);
LinkVehicleToInterior(vehicleid, interior);
PutPlayerInVehicle(playerid, vehicleid, 0);
SendClientMessage(playerid, 0x00FF00FF, \"Sikeresen lehívtál egy jármûvet!\");
return 1;
}