Szerző Téma: sscanf /car parancs  (Megtekintve 972 alkalommal)

sscanf /car parancs
« Dátum: 2014. Február 12. - 13:03:09 »
0 Show voters
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;
}

Nem elérhető TheDon

  • 159
    • Profil megtekintése
sscanf /car parancs
« Válasz #1 Dátum: 2014. Február 12. - 15:37:38 »
+1 Show voters
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

sscanf /car parancs
« Válasz #2 Dátum: 2014. Február 12. - 20:31:51 »
0 Show voters
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?

Nem elérhető TheDon

  • 159
    • Profil megtekintése
sscanf /car parancs
« Válasz #3 Dátum: 2014. Február 13. - 07:09:05 »
+1 Show voters
É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.

sscanf /car parancs
« Válasz #4 Dátum: 2014. Február 13. - 15:56:37 »
0 Show voters
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;
}
« Utoljára szerkesztve: 2014. Február 13. - 17:11:40 írta solyom1992 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
sscanf /car parancs
« Válasz #5 Dátum: 2014. Február 14. - 08:19:18 »
0 Show voters
é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;
}
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
sscanf /car parancs
« Válasz #6 Dátum: 2014. Február 14. - 16:02:39 »
+1 Show voters
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;
}

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal