Exercice en Pawn - Avancй
#21

Ta commande rйpond pas a mon exercice : "[Model/Nom du vйhicule]". Et en plus ton code gйnиrera des t'as de runtime warning par sscanf du fait que tu utilises d avec une valeur par dйfaut. Enfin, l'angle devrait кtre un Float:
Reply
#22

Code:
YCMD:veh(playerid, params, help)
{  
    new strmodel[32], param[3], result_model;
    if(!sscanf(params,"s[32]I(0)I(0)I(-1)",strmodel,param[0],param[1],param[2])) return SendClientMessage(playerid, -1, "CMD : /veh [model/id] [*couleur 1] [*couleur 2] [*time respawn]");
    [COLOR="DarkGreen"]// if(isnull(strmodel)) return SendClientMessage(playerid, -1, "CMD : /veh [model/id] [*couleur 1] [*couleur 2] [*time respawn]");[/COLOR]
    if(isNumeric(strmodel)) result_model = strval(strmodel);
    else result_model = GetVehicleModelByName(strmodel);
    if (result_model<400 || result_model>611) return 1;
    new Float:pos[4];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid,pos[3]);
    GetXYFront(pos[0], pos[1], pos[3], 3.0);
    CreateVehicle(result_model, pos[0], pos[1], pos[2], pos[3], param[0], param[1], param[2]);
    SendClientMessage(playerid, -1,"Vehicule crйй.")
    return 1;
}
stock GetXYFront(&Float:x, &Float:y, Float:a, Float:distance)
{
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
}
Reply
#23

D'oщ sort ce GetVehicleModelByName ? Car si c'est celui de gl_common, on peut mieux faire niveau opti (trиs lйgиrement toutefois). En plus, les trois derniers paramиtre de la chaine sscanf ne sont pas optionnels dans ton code.
Reply
#24

Voila j'ai edit pour les paramиtres optionnel mкme si toute fois ca restй optionel et voila ma fonction GetVehicleModelByName :

Code:
new NomVehicule[212][32] = {
   "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 Truck","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","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","Hotring Racer","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 Truck","Monster Truck","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","Emperor","Wayfarer","Euros","Hotdog","Club","Trailer","Trailer","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","Luggage Trailer","Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};


stock GetVehicleModelByName(vname[])    // Dйtermine l'id du model avec le nom du vйhicule
{
    for(new i = 0; i < 211; i++)
    {
        if(strfind(NomVehicule[i], vname, true) != -1)
        return i + 400;
    }
    return -1;
}

EDIT: Il n'y aucune fonction de ce type dans gl_common
Reply
#25

Ivory, Ton code ne fonctionnera pas , le spйcificateur "z" est dйpassй depuis belle lurette. Et tu n'as pas besoin de ta fonction GetXYFront, en utilisant GetPlayerFacingAngle зa te met bien le vйhicule en face du joueur et donc par consйquent ce n'est pas optimisй.
De plus tu utilises pas mal de fonction qui n'existe pas de base, et donc qu'il faut dйclarй comme IsNumeric.
S4t3k, mon code fonctionnera, il existe bien des valeurs par dйfaut pour les entiers, teste et tu verras par toi mкme.
J'refais mon code demain.
Reply
#26

Je confirme qu'il existe des valeurs par dйfauts mais c'est inutile dans ton cas.
C'est obligatoire а partir du moment oщ on utilise un paramиtre optionnel ( "D(-1)" ).
Reply
#27

GetPlayerFacingAngle donne l'angle de vue alors que GetXYFront donne la position X Y en face du joueur par rapport а son angle. Si je met juste l'angle alors la voiture ce crйera а la mкme position que mon joueur est dans le mкme angle seulement mais elle ne ce crйera pas sans m'applatir comme une crкpe, c'est pour cela que j'utilise GetXYFront. Pour les paramиtre optionnelle, je suis peut кtre pas а jour certes, mais pour moi ca sert pas а grand chose ici car mкme si je n'insere pas les 3 paramиtre optionelle cela marchera quand mкme.

En ce qui concerne IsNumeric(), je vais pas m'amuser а mettre toute les fonctions qui son exactement les mкme chez tout le monde et qui sont surement dйjа trиs bien optimiser. Aprиs si ca peut te rendre heureux :

Code:
stock isNumeric(const string[]) {
    new length=strlen(string);
    if (length==0) return false;
    for (new i = 0; i < length; i++) {
        if (
        (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
        || (string[i]=='-' && i!=0)                                             // A '-' but not at first.
        || (string[i]=='+' && i!=0)                                             // A '+' but not at first.
        ) return false;
    }
    if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
    return true;
}

Voila, essaie d'optimiser ca :P

EDIT : Voila j'ai fait la modif pour les paramиtres optionelle. J'ai jamais fait alors j'espиre que c'est correct.
Reply
#28

Mdr mais c'est toujours pas opti vos codes

Pro tip : Lisez la docu de sscanf si vous arrivez a la retrouver.
Quand vous aurez trouvй ou que je vais vous le dire je vais me faire traiter mais c'est 1 peu important quand mкme.
Reply
#29

Ca ?
Code:
if(!sscanf(params,"s[32]I(0)I(0)I(-1)",strmodel,param[0],param[1],param[2])) return SendClientMessage(playerid, -1, "CMD : /veh [model/id] [*couleur 1] [*couleur 2] [*time respawn]");
Reply
#30

tiens :
S4t3K le pd;3449231 Wrote:Et aprиs, pour vous motiver, un deuxiиme exercice (vous кtes pas obligй de rendre les deux en mкme temps bande de mauvais йlиves) : codez moi une fonction qui va hasher le "buff" dans la "dest" avec le mode de hash choisi, puis, si l'utilisateur a passй un salt, ajouter le salt (avant ou aprиs le hash, comme vous voulez). Seule contrainte : vous n'avez pas le droit aux plugins. Vous devrez йgalement contourner une petite difficultй d'optimisation.

PHP Code:
enum e_hash_type
{
      
MD5,
      
SHA1,
      
WHIRLPOOL,
      
SHA2
}

hash(dest[], buff[], e_hash_type:hashsalt[] = "")
{


Reply
#31

Codez une fonction qui permet de dйtecter quand est-ce que le joueur lиve sa moto en i (lever A l'horizontal, ou pour faire plus simple le max avant de tomber). Зa vous fera travailler les rotations des vйhicules

Et juste pour le dйlire, quand le joueur sera bien en i, lancez la lecture du morceau "En Y" ou "Mets les en i" (au choix) de JuL, en arrкtant le morceau quand le joueur retombe ;))
Reply
#32

J'йtais trиs sйrieux la aussi

Appelez la fonction EsTuEnI
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)