• 18 Mai 2024, 20:34:48


Auteur Sujet: Débutant en pawn, je souhaiterais apprendre via un GM DM pas trop poussé  (Lu 4619 fois)

0 Membres et 1 Invité sur ce sujet

vincentdu90

  • Invité
Certes mais si tu souhaites te diriger vers du Lua (MTA:SA) ou du Squirrel (IV:MP)  le C te permet d'avoir de bonnes bases (du moins tu comprends plus vite), mais ce n'est effectivement pas essentiel.

Hors ligne Salif

  • *
  • Tueur
  • Messages: 52
    • Voir le profil
Les fonctions c'est bon, les conditions, etc sur les tutos de gilux c'est bon aussi. Par contre dans les tutos de Gilux, ce que je ne comprend vraiment pas du tout c'est les arrays et les boucles, incompréhensible pour moi.

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Une boucle, ce n'est ni plus ni moins qu'une condition répétée. Si tu as cerné les conditions, alors tu as cerné les boucles. Pour les arrays, lis le tutoriel sur le PHP du SiteDuZéro. C'est le même principe. ;)

Hors ligne rafffel

  • *
  • Bandit
  • Messages: 493
    • Voir le profil
enfaite c'est simple.
un array c'est enfaîte un tableau qui te permet de stocker plusieurs valeur sous un seul nom de variable.
exemple simple tu veux faire une liste des id accepter pour une course tu fais un tableau dans lequel tu met toutes les id que tu veux.
Code: (pawn) [Sélectionner]
new ListeAutorizedCars[3]; // on spécifie que le tableau sera initialisé avec possibilité de stocker 3 valeurs. A savoir aussi que les slots d'un tableau commence à 0 et fini a 3-1(2) car 0,1,2 ça fait 3 valeurs.

ListeAutorizedCars[0]=411;//dans le slot 0 du tableau on met l'id 411
ListeAutorizedCars[1]=412;//dans le slot 1 du tableau on met l'id 412
ListeAutorizedCars[2]=413;//dans le slot 2 du tableau on met l'id 413

lorsque par exemple quelqu'un veut rejoindre une course il suffira alors de vérifier que l'id du véhicule du joueur est bien une valeur contenu dans ListeAutorizedCars

Les boucles permettent elles d'explorer un tableau (mais pas uniquement c'est une des choses possibles).
exemple

Code: (pawn) [Sélectionner]
new i;
new sum;
for (i=1; i<=10; i++)
{
   sum += i;
}
Donc la boucle va s’exécuter de la manière suivante  (traduction française du for)
Pour i égale 1 jusqu’à ce que i soit inférieur ou égale a 10 j'incrémente i de 1 et tant que i est inférieur ou égale a 10 je fait l'instruction suivante j'ajoute a sum la valeur de i.

Donc tu peux imaginer par exemple faire une boucle et lire le contenue de notre tableau précédemment fait pour la comparer a une autre valeur de la manière suivante.
Code: (pawn) [Sélectionner]
new bool:voitureok=false;
for(i=0;i<2;i++)
{
     if(VoitureDuJoeur == ListeAutorizedCars[i])
     {
           voitureok = true;
     }
}
if(voitureok)// test si VoitureOk vaut true
{
   //on le fait rejoindre la course
}

Voila en éspérant avoir éclairci la chose plus que l'embrouiller XD.
« Modifié: 02 Avril 2013, 21:54:36 par rafffel »

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
À noter que tu oublies les points-virgules après les instructions. Ça ne compilerait pas. Et VoitureOk devrait être initialisée comme un booléen. C'est qu'un détail. :p
Bon, et puis si vraiment je voudrais faire le chieur, je pourrais te dire que ta condition serait plus rapide sous la forme d'un ternaire...

Hors ligne rafffel

  • *
  • Bandit
  • Messages: 493
    • Voir le profil
j'ai horreur de lire le ternaire pour un débutant c'est tout simplement imbuvable et de la fausse optimisation.
Car a moins d'avoir une boucle avec au moins 100000 itérations (qui ne ferais que gagnait que quelques secondes) c'est juste selon le gout du scripteur.

Concernant l'écriture ben c'est des morceaux de copier coller sur le wiki du pawn du coup je ne savais plus si y'avait des ; ou non (je rajoute)

Pour la variable voitureok si tu veut vraiment chipoter il faut aussi la déclarer avec un new mais bon
Je corrige les grosses fautes de syntaxe Pour que cela compile.


Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Juste pour t'embêter : t'as oublié le tag bool: lors de la déclaration du booléen. :D
Je sors, je sors...

Hors ligne rafffel

  • *
  • Bandit
  • Messages: 493
    • Voir le profil
les déclarations en pawn sont étrange tu ne déclare pas un type int mais il faut déclaré un float ou un bool de manière plus que douteuse XD.
Bref je corrige

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
En faite les types n'existe pas en pawn, on utilise des pseudos type bien pourri qu'on appel les tags qui permettent de nous faire chier quand on les utilise pas que la variable a été déclaré avec un tag.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Salif

  • *
  • Tueur
  • Messages: 52
    • Voir le profil
Merci ça m'éclairci un peu, surtout pour les tableaux. Maintenant si vous pouviez m'aider pour ça svp :

Deuxièmement et dernièrement, je veux faire un /sortirdm pour sortir de mon /dm1, et un /changeteam. Je vois à peu près la "logique" du comment cela doit se passer, mais je ne sais pas scripter cela. Pour le /sortirdm, j'imagine qu'il faut qu'une fois que le joueur meurt, si le joueur a fait auparavant /dm1, il respawn à la position aléatoire comme lorsqu'on fait /dm1, c'est bien ça ? Je vous remercie par avance pour votre aide.

PS : Si seulement il existait un tuto complet comme ceux du siteduzero mais en 100% Pawn  :kiss:
« Modifié: 03 Avril 2013, 20:10:59 par Salif »

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
PS : Si seulement il existait un tuto complet comme ceux du siteduzero mais en 100% Pawn  :kiss:

J'avais il y a quelques mois pour projet de réaliser un gros tutoriel sur ce principe, en partant strictement de zéro, en version vidéo (PowerPoint commenté à l'audio)... Mais je me suis dit que 15 personnes maximum le lirait.

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3550
    • Voir le profil
16, je le lirais moi. Mon professeur de pawn fait grève ! (hein citron !)


Adju ♥
(-_-)



Hors ligne ShaDowxx™

  • We are cats.
  • *
  • Grand Banditisme
  • Messages: 706
    • Voir le profil
SF, LS et LV (T)DM de Cristab sur le showroom.

Plus complexe le SFTDM 2.0 by Pimp.

Hors ligne steve76

  • *
  • Tueur en série
  • Messages: 153
    • Voir le profil
PS : Si seulement il existait un tuto complet comme ceux du siteduzero mais en 100% Pawn  :kiss:

Justement, j'étais en train d'en rédiger un avant que le sdz passe en v4.
Donc pour le moment je ne peux pas le continuer, tant que l'éditeur de tuto n'est pas remis.

A titre d'information, il contiendra 5 parties avec une quarantaine de chapitres environ:
  • Les bases du Pawn
  • Le Pawn appliqué à SA-MP
  • Une partie dédié à MySQL avec le plugin de BlueG
  • Une partie dédié aux plugins importants tel que le Streamer d'incognito, sscanf2...
  • Une partie perfectionnement

Actuellement la partie 1 est terminé, et la 2 à mi-parcours.

Normalement l'éditeur de tuto revient courant avril, et c'est un des projets que je dois rendre pour les cours, donc il sera disponible avant la fin mai pour ce que ça intéresse.
Le plus dur étant qu'il passe la validation.

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Citer
Deuxièmement et dernièrement, je veux faire un /sortirdm pour sortir de mon /dm1, et un /changeteam. Je vois à peu près la "logique" du comment cela doit se passer, mais je ne sais pas scripter cela. Pour le /sortirdm, j'imagine qu'il faut qu'une fois que le joueur meurt, si le joueur a fait auparavant /dm1, il respawn à la position aléatoire comme lorsqu'on fait /dm1, c'est bien ça ? Je vous remercie par avance pour votre aide.

Et bien les variables peuvent t'aider à réaliser ça.
Voici un exemple :

// Tout en haut du code
new bool:dm1[MAX_PLAYERS];

//Dans la callback OnPlayerCommandText
if(!strcmp(cmdtext,"/dm1",true))
{
    dm1[playerid]=true;
    //Code...
}

//Dans la callback OnPlayerDeath
if(dm1[playerid])
{
    SetPlayerPos(...);
    //Tu le fais spawner aléatoirement dans le dm1
}
if(!dm1[playerid]) SetPlayerPos(...); //Tu le fais spawner au spawn habituel

Il est important de créer deux conditions car si ton SetPlayerPos aurait été après la condition if(dm1...), il aurait été re-téléporté et donc ça n'aurai servi à rien.

Tu peux aussi mettre la condition après le SetPlayerPos (qui fait spawner normalement) pour qu'il soit téléporté une deuxième fois mais dans le dm cette fois-ci, tu fais comme tu veux

[/url]