GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Showroom SA:MP => Discussion démarrée par: cristab le 04 Août 2009, 21:24:09

Titre: [FS]Auto tune
Posté par: cristab le 04 Août 2009, 21:24:09
Bonjour voila je vous presente un petit FS simple et marrant aussi il permet de tuner vos vehicule avec une seul commande si votre vehicule n'est pas tunnable un changement automatique de couleur est prevu



Les Commandes

/tune
/stop


Lorsque vous sortez du vehicule le timer se killeras automatiquement le systeme fonctionne pour tout les vehicules a l'exeption des vehicule dont la couleur ne change pas (EX: Hydra)
Pour changer la vitesse du changement de couleur changer cette ligne
#define Time_Color 1000
Si vous rencontrer des soucis pour son utilisation (j'espere que non) poster ici meme vos demande d'information et essayer d'être le plus claire possible SVP.



Le pastebin (http://pastebin.gtaonline.fr/pastebin.php?show=643)


Merci ++

EDIT je vient de trouver un bug assez genant

Remplacer la case default par celle ci


Code: (correction) [Sélectionner]
default :
    {
        if(Auto_Change[playerid] == 0)
        {
        ColorTimer = SetTimerEx("RandomColor", Time_Color, 1, "d", playerid);
        Auto_Change[playerid] = 1;
        SendClientMessage(playerid, 0xFF0000FF,"Votre voiture ne peu etre amelioré a la place nous la transformons en sapin de noel!");
}
else
{
    return 0;
}
    }
Titre: Re : [FS]Auto tune
Posté par: Azz45 le 04 Août 2009, 21:35:11
GG, cristab.
Titre: Re : [FS]Auto tune
Posté par: hardcoder le 04 Août 2009, 23:37:31
C'est pas mal, cependant il y a pas mal de trucs à revoir.

- Tu as ces lignes:
Code: (pawn) [Sélectionner]
#define BAD 560,562,411,559,558,565,561

//...

if(Type != (BAD))
Ce n'est pas valide. Il y a une grande différence entre un script compilé sans erreurs, et un script qui fonctionne correctement.


- Pourquoi créer des tableaux à 2 dimensions si tu n'en utilise qu'une seule?


- C'est mieux d'utiliser un switch plutot qu'une longue série de "if" (a propos, pourquoi n'as-tu pas utilisé de "else if"?).

Code: (pawn) [Sélectionner]
switch (GetVehicleModel(GetPlayerVehicleId(playerid)))
{
    case 560 :
    {
        AddVehicleComponent(vehicleid,1139);
        //...
    }

    case 562 :
    {
        //...
    }

    default :
    {
        ColorTimer = SetTimer("RandomColor",Time_Color,1);
        Auto_Change[playerid] = 1;
        SendClientMessage(playerid, 0xFF0000FF,"Votre voiture ne peu etre amelioré a la place nous la transformons en sapin de noel!");
    }
}

- Dernier point, et le plus important, tes timers ne fonctionneront que pour le playerid 0.



Tu devrais tester un peu plus avant de poster un script.
Titre: Re : [FS]Auto tune
Posté par: cristab le 04 Août 2009, 23:42:02
sa etait tester le timer fonctionne jusqu'a l'id 3 pas plus tester plus loin et pourquoi un switch oui en faite pas penser ^^ je verais ceci dans une prochaine version avec un peu plus de vehicule

Merci



PS la define BAD est fonctionnelle pourtant je voit pas pourquoi tu me dit que c'est invalide :s peu tu argumenter ceci stp :)
Titre: Re : [FS]Auto tune
Posté par: hardcoder le 04 Août 2009, 23:57:07
J'ai bien écrit playerid, pas vehicleid. Ton script fonctionne probablement pour tous les vehicleid, mais seulement pour le premier joueur qui se connecte. Comme SA-MP est un mod multijoueurs, tu doit tester ton script avec au minimum un autre joueur dans ton serveur. Tu doit utiliser SetTimerEx, ou un loop, pour réparer ce bug.

Et non, ta #define n'est pas fonctionnelle, quand tu compile ton script, c'est remplacé par:
Code: (pawn) [Sélectionner]
if(Type != (560,562,411,559,558,565,561))
or dans Pawn comme dans presque tous les languages, une seule valeur peut etre comparée à un temps donné. Ton script se compile donc comme ceci:
Code: (pawn) [Sélectionner]
if(Type != 560)

Tu peut facilement tester comme ceci:
Code: (pawn) [Sélectionner]
#define BAD 560,562,411,559,558,565,561

new Type = 562;

if (Type != (BAD))
    print("si ce message apparait dans la console, c'est qu'il y a un problème.");
Titre: Re : [FS]Auto tune
Posté par: Franky™ le 05 Août 2009, 00:07:34
GG beau script

++ Franky
Titre: Re : [FS]Auto tune
Posté par: cristab le 05 Août 2009, 00:12:55
forcement il s'afficheras puisque c'est pour tout les vehicules non citer plus haut que je lance le timer pour qu'elle change de couleur mais je ne voulais pas changer la couleurs des voitures tuner  le default c'est le SetTimer que je vais remplacer par un SetTimerEx qui est d'apres les dires plus precit et juste pour le playerid

J'espere ne pas a avoir a faire une video pour me faire comprendre ^^

pour la define BAD ne t'inquite pas je les tester est elle est 100% fonctionnelle je voulais eviter ce genre de ligne

if(Type != 560 || Type !=562 || Type !=411 || Type != 559 || Type !=558 || Type != 565 || Type != 561)
{
   ColorTimer = SetTimer("RandomColor",Time_Color,1);
   Auto_Change[playerid] = 1;
   SendClientMessage(playerid, 0xFF0000FF,"Votre voiture ne peu etre amelioré a la place nous la transformons en sapin de noel!");
}

Vola pourquoi cette define est presente
Titre: Re : [FS]Auto tune
Posté par: RaiDeN le 05 Août 2009, 00:56:39
Salut,

Merci de ce script, peut être qu'il sera dans la version de mon serveur dans le futur :D

GG Rambo.

++
Raiden
Titre: Re : [FS]Auto tune
Posté par: Ssk le 05 Août 2009, 17:53:55
Ce que dit hardcoder a propos de la define est vrai il vaudrait mieu que tu utiise un tableau ce serait mieu sinon elle ne renvera jamais une erreur sauf ( si la variable type est a 560 )


tu peut faire un tableau de ce type


new BAD[6] = {
560,
562,
411,
559,
558,
565,
561
};

est dans la condition tu te fais un petit loop pour verifier dans chaque valeur du tableau.

for(i = 0;i < 7;i++)
{
if(Type == BAD[i])
{
return 0;
}
}
   ColorTimer = SetTimer("RandomColor",Time_Color,1);
   Auto_Change[playerid] = 1;
   SendClientMessage(playerid, 0xFF0000FF,"Votre voiture ne peu etre amelioré a la place nous la transformons en sapin de noel!");

Voila normalement ca doit etre ca

PS: Si tu veut prendre le code indente le
Titre: Re : [FS]Auto tune
Posté par: cristab le 05 Août 2009, 21:15:01
donc j'ai pris en note certaine de vos idée et j'ai tester une chose meme les voitures tuner je trouve sympas qu'elle change de couleur donc pour celle ci je vait creer une seconde commandes qui va permettre au joueur de lancer le timer si il le souhaite et j'edit ensuite

Merci a vous
Titre: Re : [FS]Auto tune
Posté par: hardcoder le 05 Août 2009, 21:21:59
sasuke, ne crois-tu pas qu'il est préférable d'utiliser le switch? C'est tellement plus simple, plus beau, plus efficace.. :P
Titre: Re : [FS]Auto tune
Posté par: cristab le 05 Août 2009, 21:56:16
voila corriger seul le lien pastebin pour le moment merci a vous deux
Titre: Re : [FS]Auto tune
Posté par: Ssk le 05 Août 2009, 23:52:46
Oui c 'est vrai mais ca fait un peut long le switch moi j ai fait une solution simple et puis pas tres longue voila tout mais c' est vrai que visuellement c' est mieu le switch
Titre: Re : [FS]Auto tune
Posté par: hardcoder le 06 Août 2009, 03:00:09
C'est déjà beaucoup mieux, cristab :P

Il reste un petit bug qui saute au yeux lol:
Code: (pawn) [Sélectionner]
new vehicleid = GetPlayerVehicleID(playerid);
switch (GetPlayerVehicleID(playerid))

Or ca devrait être:
Code: (pawn) [Sélectionner]
new vehicleid = GetPlayerVehicleID(playerid);
switch (GetVehicleModel(vehicleid))

A part ca, je peux pas dire que ca fonctionne car je n'ai pas testé, mais ca m'a l'air correct. Du moment que tu ne met pas n'importe quel mod sur n'importe quel vehicle :laugh