• 28 Mars 2024, 09:59:46


Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - Syg

Pages: [1] 2
1
Candidature / Candidature de Syg
« le: 03 Septembre 2013, 10:49:10 »
Bonjour,

Pseudo Minecraft : 5Y6
Âge : (bien plus vieux que la plupart des membres ...)
Depuis combien de temps jouez vous à Minecraft ? : Pas très longtemps mais les principes du jeu ne sont pas très compliqués
Pourquoi voulez vous rejoindre le serveur ? : Parce que mon fils tanne pour que je le fasse et puis, pour venir embêter les autres.
Pourquoi devrions-nous vous accepter ? : Je préfère ne pas répondre à cette question, je ne voudrais pas qu'on se rende compte que j'use de mon statut d'administrateur pour être accepté.

++
Syg

2
News GTAOnline.fr / SAMP victime d'un hacker
« le: 29 Juin 2010, 23:16:16 »
News : SA-MP victime d'un hacker


Bonjour tout le monde,
Comme beaucoup d'entre-vous ont pu le remarquer, le site officiel d'un de nos multijoueur préféré, SA-MP, s'est vu amputé de son forum ainsi que de son wiki. Kye, créateur et principal codeur du mod, a choisi de prendre cette mesure suite à une attaque menée contre la communauté et ses gérants.

Le 6 Juin 2010, un hacker (pirate informatique) dont l'origine semble être Française (information à prendre avec des pincettes, l'utilisation d'une machine virtuelle, VPS, pourrait permettre à n'importe qui d'obtenir une adresse IP Française) s'est attaqué au moteur du forum, SMF, et a utilisé une faille de sécurité pour installer un logiciel espion sur le serveur hébergeant le site, le forum ainsi que le wiki. Grâce à ce logiciel espion, il a pu obtenir l'intégralité de la base de données de la communauté. Pour information, une base de données est comparable à une sorte d'armoire dans laquelle sont enregistrés pour être utilisés plus tard des informations diverses et variées, comme par exemple les messages d'un forum, les comptes des membres, les news, etc.

Alerté par les modérateurs du forum qui ont vu leur mot de passe être changé sans leur accord, Kye a remarqué ce logiciel espion et s'est empressé de couper l'accès aux parties contenant des données privées pour éviter que l'attaque ne puisse continuer. Malheureusement, comme expliqué dans un communiqué officiel, ce logiciel a été remarqué un peu trop tard.

Étant donné que le(s) hacker(s) a(ont) désormais accès à toutes les informations personnelles des membres, il vous est fortement conseillé de changer vos mots de passe, si comme la majorité des internautes vous utilisez souvent les mêmes. Si votre mot de passe sur le forum (ou le wiki) du multijoueur est le même que celui utilisé pour un autre site (et plus important, si c'est le même que celui de votre messagerie mail), il se pourrait que le(s) hacker(s) y ai(en)t accès. Pire encore, si ce(s) dernier(s) décidai(en)t de publier ces informations, vos comptes seraient susceptibles d'être accessible à n'importe-qui.

Quant aux mesures prises contre ce(s) hacker(s), Kye rassemble en ce moment même des preuves de l'attaque ainsi que toute information intéressante, et transmettra les informations aux forces de police. Le wiki ainsi que le forum devraient refaire surface dans une version plus récente d'ici le courant de l'été, en espérant que ces derniers bénéficient d'une sauvegarde de tout ce qui était présent dessus.

En attendant, si vous avez besoin de ressources diverses ou si vous souhaitez obtenir de l'aide normalement visible sur le wiki, la communauté GTAOnline et ses membres seront toujours prêts à vous aider, que ce soit sur notre forum dédié au scripting, ou encore sur notre wiki Français.

Bonne soirée et bon surf sur le network. :]

L'équipe de GtaOnline.

Note : Texte de la news par Gzsume


3
Autre / Taxi boost
« le: 17 Mai 2010, 16:27:27 »
Bonjour,

Beaucoup de monde demande comment avoir le taxi boost dans SA-MP.

Voici la procédure très simple pour que ça fonctionne :

Installation
Télécharger le fichier attaché à ce post.
Créer un répertoire CLEO dans le répertoire d'installation de GTA San Andreas (Normalement ?:\Program Files\Rockstar Games\GTA San Andreas).
Faire une sauvegarde du fichier vorbisfile.dll et éventuellement du fichier vorbishooked.dll (pour pouvoir revenir en arrière si vous voulez désinstaller le mod)
Copier les fichier vorbisfile.dll, vorbishooked.dll et cleo.asi dans le répertoire d'installation de GTA San Andreas (le fichier cleo_readme.txt doit légalement être copié dans le répertoire aussi mais ce n'est pas un fichier nécessaire)
Copier le fichier mainvb.cs dans le répertoire CLEO que vous avez créé.

Désinstallation
Restaurer les fichiers vorbisfile.dll et éventuellement vorbishooked.dll (avec les sauvegardes que vous avez normalement dû faire)
Supprimer les fichiers cleo.asi et cleo_readme.txt.
Supprimer le répertoire CLEO.

Pour contrôler que l'installation est correcte, il suffit de monter dans un taxi et d'actionner le klaxon en roulant. Si le taxi saute, c'est que c'est bon. Si on entend le klaxon, c'est que j'ai du oublié quelque chose :).

++
Syg

4
Voici un classement qui ne sert à rien, sauf, peut-être, à gonfler un peu l'ego de ceux qui sont en tête.

Classement des distances parcourues le 09/05/2010 a 13:58:09
  1 KaWouA                      8676.22 km
  2 [NHS]Barto                  7971.24 km
  3 [FSC]P4C0W                  7471.48 km
  4 _FsK_Lacuisse               7294.81 km
  5 [NSG]Gzsume                 6731.39 km
  6 [NSG]JOST                   6595.64 km
  7 [NSG]Flag                   6379.16 km
  8 _THS_NeW                    6050.20 km
  9 _THS_ShaDoX                 5948.07 km
 10 [NHS]J0liX                  4960.39 km
 11 Rod                         4581.61 km
 12 _FsK_Adjudant               3991.28 km
 13 [SkD]Sartoflo               3968.40 km
 14 Paky27                      3670.99 km
 15 [FSC]AcidTech               3456.16 km
 16 [ROP]Interceptor            3274.73 km
 17 SteeRIPro                   2954.74 km
 18 [LZR]The_Punisher           2930.92 km
 19 [SkD]SPiiROo                2886.59 km
 20 Alex_Jhonny                 2850.55 km
 21 _FsK_WarGetX                2767.05 km
 22 FuSion                      2722.59 km
 23 [SkD]ProStreet              2704.92 km
 24 [ROP]bobi_rock              2524.22 km
 25 tixytyus                    2314.38 km
 26 [T_DK]7gusts                2163.12 km
 27 [SDC]Bloodangy              2113.03 km
 28 Chiken_Eloi                 2082.00 km
 29 [FSC]Rs_line                2036.53 km
 30 _FsK_GtaManiac              2022.36 km
 31 [ADT]Lia                    2022.02 km
 32 [ADT]rafffel                1998.04 km
 33 DarkWolf                    1982.48 km
 34 [RT]Kartun                  1938.88 km
 35 Jean_Guy                    1924.96 km
 36 _FsK_Lalu                   1890.78 km
 37 [NSG]Aegoss                 1817.97 km
 38 [ROP]_Murdoc                1778.15 km
 39 [ROP]Namamoto               1774.50 km
 40 Phantom                     1683.57 km
 41 Old_Snake                   1636.58 km
 42 [NHS]JiKay                  1572.45 km
 43 [DRT]Nico                   1476.05 km
 44 [LSD]Bilal[ODT]             1475.59 km
 45 [Dk]Flmaik                  1470.12 km
 46 [SSL]_Kinton                1429.69 km
 47 Raphy_77                    1341.44 km
 48 [LZR]C30                    1340.87 km
 49 couilloo_973                1326.18 km
 50 [LSD]pOLeTe          1318.93 km


Je n'ai mis que les 50 premiers et je mettrais à jour de temps en temps (une fois par semaine environs).
N'hésitez par à me le rappeler en PM si je tarde à mettre à jour.

++
Syg

7
Autre / Tutorial Chaos Keybinder
« le: 23 Septembre 2009, 00:03:01 »
Après avoir fait ce tuto, je me suis rappelé que Wargetx avait déjà fait un tuto sur ce logiciel.
Mais il y manque quelque petites choses intéressantes et son tuto n'était destiné qu'à certains membres du forum.

Mon tuto est contenu dans le fichier attaché car il contient pas mal d'images écran qu'il n'est pas facile de mettre sur un post du forum.
Le fichier est une archive ZIP contenant une fichier RTF qu'il est possible d'ouvrir avec WordPad (sous Windows) ou tout autre logiciel de traitement de texte.

++
Syg


8
LES FICHIERS ET LES FONCTIONS ASSOCIÉES

1 GÉNÉRALITÉS

Un fichier est un ensemble de données plus ou moins structurées stocké sur un support permanent (il est toutefois possible de créer de fichiers en mémoire mais l'intérêt en PAWN reste limité).

Un fichier peut être vu comme une boite avec des cases où chaque case est numérotée (à partir de 0) et contient un octet.
De ce fait, les fonctions de gestion de fichier permettent d'ouvrir la boite, de se positionner sur une case donnée, de récupérer le contenu d'une ou plusieurs cases et de refermer la boite.

On considère généralement deux types de fichiers : les fichier textes (que l'on peut ouvrir directement avec notepad par exemple) et les fichiers binaires.
Mais les fichiers textes ne sont rien d'autres que des fichiers binaires ne contenant (presque) que des caractères lisibles.

Un fichier est identifié par son nom.
Exemples : VEHICULES.TXT, SPAWN.DAT, TEAMS.BANNIES.BIN, ...

Une fois ouvert, un fichier est identifié par une variable de type File.

Remarques :
   - L'extension n'est pas obligatoire,
   - Sous Windows, il n'y a pas de différence entre les miniscules et les majuscules (case insensitive). Les fichiers toto.txt, TOTO.txt ou ToTo.TXT ne seront qu'un seul et même fichier. Sous Linux, les fichiers cités précédemment seront trois fichiers distincts. Il est important d'avoir ceci à l'esprit car un script qui accède à des fichiers peut fonctionner parfaitement sous Windows et ne plus fonctionner du tout sur un serveur Linux.

Sous SAMP, les fichiers sont stockés dans le sous-répertoires scriptfiles (ou un des ses sous-répertoire) contenu dans le répertoire du serveur et il n'est possible de les stocker ailleurs.

Pour pouvoir utiliser les fonctions de gestions de fichiers, il faut inclure file.inc dans le script.
Code: (pawn) [Sélectionner]
#include <file>
2 OUVERTURE D'UN FICHIER

Pour pouvoir utiliser les données contenues dans un fichier, il faut tout d'abord l'ouvrir.
L'ouverture d'un fichier se fait au moyen de la fonction fopen :
Code: (pawn) [Sélectionner]
native File:fopen(const name[], filemode: mode = io_readwrite);
Le premier paramètre de cette fonction est le nom du fichier que l'on veut ouvrir.

Le deuxième paramètre indique comment va être ouvert le fichier.
Ce paramètre peut prendre une des valeurs suivante :
   io_read -> Ouverture d'un fichier existant en lecture seule. Il ne sera pas possible d'écrire dans le fichier.
   io_write -> Création d'un fichier qui n'existe pas pour écriture. Il ne sera pas possible de lire dans le fichier.
   io_readwrite -> Ouverture d'un fichier existant en lecture/écriture ou création d'un nouveau fichier.
   io_append -> Ouverture d'un fichier existant en écriture seule. Il ne sera pas possible de lire dans le fichier.

Remarque :
Dans la plupart des cas, on utilisera io_readwrite qui, de plus, est la valeur par défaut pour ce paramètre

La valeur de retour de fopen est de type File et sera ensuite utilisée pour accéder au fichier.
On appellera dorénavant cette valeur le handle du fichier.
Si l'ouverture échoue (fichier introuvable, caractère incorrect dans le nom du fichier, ...), la valeur de retour vaudra 0.
Exemple qui crée un fichier vide dans le répertoire scriptfile (ou ouvre le fichier si il existe déjà) :
Code: (pawn) [Sélectionner]
new File:MonFichier;
MonFichier = fopen ("toto.txt", io_readwrite);
if (MonFichier != File:0) // On ne compare pas directement à 0 sinon ceci provoque un warning
{
   /* On ferme le fichier */
   fclose (Monfichier);
}
else
{
   printf ("Erreur d'ouverture du fichier\n");
}

3 FERMETURE DU FICHIER

La fermeture du fichier a pour effet de libérer le fichier et d'écrire physiquement sur le disque les données qui se trouvent éventuellement dans le cache du disque.

La fermeture d'un fichier se fait au moyen de la fonction de la fonction fclose :
Code: (pawn) [Sélectionner]
native bool:fclose(File: handle);
Le paramètre de cette fonction est un handle de fichier valide.
ATTENTION : Ne pas utiliser fclose avec  handle invalide.

Cette fonction retourne true (1) lorsque la fermeture a été effectuée correctement et false (0) dans le cas contraire.
ATTENTION : Ne pas utiliser le code retour de cette fonction, ceci n'a pas été vérifié (cf wiki SAMP).

4 POSITIONNEMENT DANS LE FICHIER

Le positionnement dans un fichier est appelé index de lecture/écriture. Ceci correspond à la position de l'octet qui sera lu ou écrit.
Chaque lecture ou écriture incrémente l'index de lecture/écriture du nombre d'octet lu ou écrit.

Après ouverture, l'index de lecture/ecriture est positionné au début du fichier ou à la fin si le fichier est ouvert avec l'option io_append.

Il est possible de déplacer l'index sans faire de lecture ou d'écriture au moyen de la fonction fseek :
Code: (pawn) [Sélectionner]
native fseek(File: handle, position = 0, seek_whence: whence = seek_start);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert.

Le deuxième paramètre contient la position relative (donc positive ou négative) en fonction du troisième paramètre.

Le troisième paramètre contient la position de référence et peut prendre une des trois valeurs suivantes :
seek_start -> Début du fichier
seek_current -> Position courante
seek_end -> Fin du fichier

Exemples :
Sauter 5 octets dans le fichier :
Code: (pawn) [Sélectionner]
fseek (Fic, 5, seek_current);
Revenir de 7 octets en arrière :
Code: (pawn) [Sélectionner]
fseek (Fic, -7, seek_current);
Aller au 18ème octet du fichier
Code: (pawn) [Sélectionner]
fseek (Fic, 18, seek_start);
Aller à l'avant-dernier octet du fichier :
Code: (pawn) [Sélectionner]
fseek (Fic, -1, seek_end);
Aller au début du fichier :
Code: (pawn) [Sélectionner]
fseek (Fic);ou
Code: (pawn) [Sélectionner]
fseek (Fic, 0, seek_start);
Le valeur de retour de fseek donne le déplacement effectué dans le fichier en octet.
Par exemple, si l'index de lecture est positionné au début du fichier alors
Code: (pawn) [Sélectionner]
fseek (Fic, 18, seek_start);renverra 18 et
Code: (pawn) [Sélectionner]
fseek (Fic, 0, seek_end); //Dernier octet du fichierrenverra la taille du fichier.

5 LECTURE DANS UN FICHIER

Une fois le fichier ouvert par la fonction fopen, il est possible de lire les données qu'il contient.

Il existe trois type de lecture dans SAMP : la lecture de chaînes de caractères, la lecture de données brutes et la lecture d'un caractère.

5.1 LECTURE DE CHAINES

Pour lire une chaîne de caractères, on utilise la fonction fread :
Code: (pawn) [Sélectionner]
native fread(File: handle, string[], size = sizeof string, bool: pack = false);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert en lecture ou en lecture/écriture.

Le deuxième paramètre est une variable de type tableau qui recevra les données lues.

Le troisième paramètre correspond à la taille maximale que peut contenir le tableau passé en deuxième paramètre.

Le quatrième paramètre indique que les données lues seront compactées (les données compactées ne sont pas l'objet de ce tutoriel, il est préférable de laisser ce paramètre à false)

La valeur de retour de fread correspond au nombre d'octets effectivement lus dans le fichier. Si la valeur de retour est 0, aucune lecture n'a été faîte.
ATTENTION : Ce nombre ne correspond jamais à la taille de la chaîne. Il est donc peu recommandé de s'en servir pour connaître la taille de la chaîne lue.

5.2 LECTURE DE DONNÉES BRUTES

Il est possible de lire des données binaire (brutes) dans un fichier au moyen de la fonction fblockread :
Code: (pawn) [Sélectionner]
native fblockread(File: handle, buffer[], size = sizeof buffer);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert en lecture ou en lecture/écriture.

Le deuxième paramètre est une variable de type tableau qui recevra les données lues.

Le troisième paramètre correspond au nombre d'éléments du tableau qu'on veut lire.

La valeur de retour de la fonction donne le nombre d'éléments lus.

Remarque :
Ici, on parle bien d'éléments d'un tableau et non pas d'octets. En Pawn, sous SAMP, un élément fait 4 octets.

Exemple :
Code: (pawn) [Sélectionner]
new File:Fic;
new Tableau[5];
Fic = fopen ("TOTO.BIN", io_readwrite);
if (Fic != File:0)
{
/* Lecture de 3 éléments */
fblockread (Fic, Tableau, 3));
fclose (Fic);
}
else
{
printf ("Erreur d'ouverture du fichier TOTO.TXT\n");
}

5.3 AUTRE FONCTION DE LECTURE

Il est aussi possible de ne lire qu'un seul caractère dans un fichier ouvert au moyen de la fonction fgetchar :
Code: (pawn) [Sélectionner]
native fgetchar(File: handle, value, bool: utf8 = true);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert en lecture ou en lecture/écriture.

Le deuxième paramètre est une variable qui recevra la valeur du caractère lu.

Le troisième paramètre indique si l'on est en ANSI (1 octet par caractère) ou en UTF8 (2 octets par caractère).
Remarque :
Pour les langues comme le français ou l'anglais, il est préférable de mettre ce paramètre à false.

La valeur de retour de fgetchar n'est pas documentée et ne semble correspondre à rien, il est plus prudent de ne pas s'en servir.

6 ÉCRITURE DANS UN FICHIER

L'écriture dans un fichier suis les mêmes principes que la lecture.

6.1 ÉCRITURE DE CHAINES

Pour écrire une chaîne de caractères, on utilise la fonction fwrite :
Code: (pawn) [Sélectionner]
native fwrite(File: handle, const string[]);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert en écriture ou en lecture/écriture.

Le deuxième paramètre est une variable de type tableau qui contient la chaîne à écrire.

La valeur de retour de fwrite correspond au nombre d'octets effectivement écrits dans le fichier. Si la valeur de retour est 0, aucune ecriture n'a été faîte.
ATTENTION : Ce nombre ne correspond jamais à la taille de la chaîne à écrire.

6.2 ÉCRITURE DE DONNÉES BRUTES

Il est possible d'écrire des données binaire (brutes) dans un fichier au moyen de la fonction fblockwrite :
Code: (pawn) [Sélectionner]
native fblockwrite(File: handle, const buffer[], size = sizeof buffer);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert en écriture ou en lecture/écriture.

Le deuxième paramètre est une variable de type tableau qui contient les données à écrire.

Le troisième paramètre correspond au nombre d'éléments du tableau qu'on veut écrire dans le fichier.

La valeur de retour de la fonction donne le nombre d'éléments écrits.

Remarque : Ici, on parle bien d'éléments d'un tableau et non pas d'octets. En Pawn, sous SAMP, un élément fait 4 octets.

Exemple :
Code: (pawn) [Sélectionner]
new File:Fic;
new Tableau[5] = {1, 2, 3, 4, 5};
Fic = fopen ("TOTO.BIN", io_readwrite);
if (Fic != File:0)
{
fblockwrite (Fic, Tableau));
fclose (Fic);
}
else
{
printf ("Erreur d'ouverture du fichier TOTO.BIN\n");
}

Voici, en binaire, le contenu du fichier TOTO.BIN après exécution de l'exemple ci-dessus :
01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00

6.3 AUTRE FONCTION D'ÉCRITURE

Il est aussi possible de n'écrire qu'un seul caractère dans un fichier ouvert au moyen de la fonction fputchar :
Code: (pawn) [Sélectionner]
native bool:fputchar(File: handle, value, bool: utf8 = true);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert en écriture ou en lecture/écriture.

Le deuxième paramètre est une variable qui contient la valeur du caractère à écrire.

Le troisième paramètre indique si l'on est en ANSI (1 octet par caractère) ou en UTF8 (2 octets par caractère).
Remarque :
Pour les langues comme le français ou l'anglais, il est préférable de mettre ce paramètre à false.

La valeur de retour de fputchar vaut true si l'écriture est correcte, false sinon.

7 AUTRES FONCTIONS SUR LES FICHIERS

7.1 SUPPRESSION D'UN FICHIER
Il est possible de supprimer un fichier au moyen de la fonction fremove :
Code: (pawn) [Sélectionner]
native bool:fremove(const name[]);
Le premier paramètre de cette fonction est le nom du fichier que l'on veut supprimer.

La valeur de retour de fremove vaut true si le fichier a été supprimé correctement, false sinon.

7.2 TAILLE D'UN FICHIER

Il est possible de récupérer la taille d'un fichier ouvert grâce à la fonction flength :
Code: (pawn) [Sélectionner]
native flength(File: handle);
Le premier paramètre de cette fonction est le handle sur un fichier ouvert.

La valeur de retour est la taille en octet du fichier.

++
Syg

9
Voici un topic qui énumère quelques règles simples que tout bon scripteur peut (doit ?) appliquer.
Si je fais ce topic, c'est simplement parce que beaucoup de problèmes sont liés à la non application de certaines de ces règles (qui peuvent être adaptées selon le cas et les humeurs de chacun, je ne veux aucunement m'imposer).

L'INDENTATION

L'indentation d'un script n'est pas là que pour faire joli, elle augmente le lisibilité du code et permet de détecter certaines erreurs facheuses très difficilement détectable dans un script non indenté.
L'indentation doit devenir un réflexe au moment de l'écriture du script, pas après coup car ça peut être compliqué et source d'erreurs.

Voici un exemple pris dans un post de ce forum :
if (strcmp("/tunning", cmdtext, true, 10) == 0)
{
if(IsPlayerInAnyVehicle(playerid)) // Si le joueur est dans un véhicule....
{
new Car = GetPlayerVehicleID(playerid), Model = GetVehicleModel(Car);
switch(Model) { case 448,461,462,463,468,471,509,510,521,522,523,581,586: return SendClientMessage(playerid,0xFF0000AA,"> Vous ne pouvez pas ajouter de composants dans des motos."); } //Si on ajoute des composants dans des motos ou vélos notre jeu crash...
ShowMenuForPlayer(tunning,playerid); // On active le menu "tunning"
TogglePlayerControllable(playerid,0); // On freeze le joueur
}
else{ // Sinon....
SendClientMessage(playerid,COLOR_GREEN,"> Vous devez être dans un véhicule");
}
if(strcmp(cmdtext, "/dm") == 0)
{
SetPlayerPos(playerid, -1452.3439, -531.1021, 13.5776);
SendClientMessage(playerid, COLOR_ORANGE, "Tu est au dm de la gare de SF");
return 1;
}
return 1;
}

Ce bout de script compile et s'exécute.
Mais si l'on teste ce bout de script, on se rendra compte que la commande /dm ne fonctionne pas.

Si on indente correctement ce bout de script, l'erreur saute au yeux :
if (strcmp("/tunning", cmdtext, true, 10) == 0)
{
   if(IsPlayerInAnyVehicle(playerid)) // Si le joueur est dans un véhicule....
   {
      new Car = GetPlayerVehicleID(playerid), Model = GetVehicleModel(Car);
      switch(Model) { case 448,461,462,463,468,471,509,510,521,522,523,581,586: return SendClientMessage(playerid,0xFF0000AA,"> Vous ne pouvez pas ajouter de composants dans des motos.");
      ShowMenuForPlayer(tunning,playerid); // On active le menu "tunning"
      TogglePlayerControllable(playerid,0); // On freeze le joueur
   }
   else
   {
      SendClientMessage(playerid,COLOR_GREEN,"> Vous devez être dans un véhicule");
   }
   if(strcmp(cmdtext, "/dm") == 0)
   {
      SetPlayerPos(playerid, -1452.3439, -531.1021, 13.5776);
      SendClientMessage(playerid, COLOR_ORANGE, "Tu est au dm de la gare de SF");
      return 1;
   }
   return 1;
}
La commande /dm est incluse dans la commande /tunning.

LES ACCOLADES

Les accolades servent à délimiter des bloc d'instructions dans un script.
On peut en mettre autant qu'on veut du moment qu'une accolade ouvrante correspond à une accolade fermante de même niveau.
Même si elles ne paraissent pas nécessaire, il faut prendre l'habitude de toujours mettre les accolades.
Prenons un bout de script :
if (a==10)
   b=52;
et imaginons, que dans le cas où a égale 10, je veuille aussi changer la valeur de c. Je rajoute donc une ligne à la suite :
if (a==10)
   b=52;
   c=49;
Mais ce bout de code ne fait pas ce qu'on attend de lui, il affecte systématiquement la valeur 49 à c, quelque soit la valeur de a.
Le code correct est :
if (a==10)
{
   b=52;
   c=49;
}
Et si dès le départ on avait écrit :
if (a==10)
{
   b=52;
}
l'erreur n'aurai pas pu être faîte.
L'exemple en question est simple et beaucoup d'entre vous n'aurait pas fait l'erreur mais je peux vous assurer que dans un script plus compliqué, c'est une erreur que l'on peut faire facilement et qui se révèle très difficile à trouver.

LA FACTORISATION

Quand je développe (en C/C++ ou en PAWN), j'applique toujours la règle la plus importante à mes yeux : la factorisation.
Ce que j'appelle factorisation, c'est mettre en "facteur" la partie commune à plusieurs bouts de code, comme en math lorsque que l'on factorise une expression.
Exemple en math : (x+1)(x+2)+(x+1)(2x+4) = (x+1)(3x+6) = 3(x+1)(x+2)

Dans le cas d'un script, on cherchera à créer une fonction à partir d'un bout de script que l'on retrouve plus d'une fois à l'identique dans le script.
Exemple :
if (strcmp ("/mls", cmdtext, true) == 0)
{
   new vehicleid;

   if (IsPlayerInAnyVehicle (playerid))
   {
      vehicleid = GetPlayerVehicleId (playerid);
      SetPlayerPos (playerid, 1.0, 2.0, 3.0);
      SetVehiclePos (vehicleid, 1.0, 2.0, 3.0);
      SetVehicleZAngle (vehicleid, 4.0);
      PutPlayerInVehicle (playerid, vehicleid, 0);
      SetCameraBehindPlayer (playerid);
   }
   else
   {
      SetPlayerPos (playerid, 1.0, 2.0, 3.0);
      SetCameraBehindPlayer (playerid);
   }
}
if (strcmp ("/msf", cmdtext, true) == 0)
{
   new vehicleid;
   if (IsPlayerInAnyVehicle (playerid))
   {
      vehicleid = GetPlayerVehicleId (playerid);
      SetPlayerPos (playerid, 5.0, 6.0, 7.0);
      SetVehiclePos (vehicleid, 5.0, 6.0, 7.0);
      SetVehicleZAngle (vehicleid, 8.0);
      PutPlayerInVehicle (playerid, vehicleid, 0);
      SetCameraBehindPlayer (playerid);
   }
   else
   {
      SetPlayerPos (playerid, 5.0, 6.0, 7.0);
      SetCameraBehindPlayer (playerid);
   }
}

Dans le code ci dessus, on trouve deux parties de code identique (aux valeurs des paramètres près).
Si je veux par exemple positionner l'angle du joueur quand il est à pied, il faut que je corrige à deux endroits (plus si j'ai plus de commandes de téléport).
Je vais donc factoriser pour faire une fonction que j'appellerais TeleporterJoueur :
TeleporterJoueur (playerid, Float:X, Float:Y, Float:Z, Float:Angle)
{
   new vehicleid;
   if (IsPlayerInAnyVehicle (playerid)
   {
      vehicleid = GetPlayerVehicleId (playerid);
      SetPlayerPos (playerid, X, Y, Z);
      SetVehiclePos (vehicleid, X, Y, Z);
      SetVehicleZAngle (vehicleid, Angle);
      PutPlayerInVehicle (playerid, vehicleid, 0);
      SetCameraBehindPlayer (playerid);
   }
   else
   {
      SetPlayerPos (playerid, X, Y, Z);
      SetCameraBehindPlayer (playerid);
   }
}

Le code du dessus peut donc maintenant s'écrire :
if (strcmp ("/mls", cmdtext, true) == 0)
{
   TeleporterJoueur (playerid, 1.0, 2.0, 3.0, 4.0);
}
if (strcmp ("/msf", cmdtext, true) == 0)
{
   TeleporterJoueur (playerid, 5.0, 6.0, 7.0, 8.0);
}

On voit tout de suite les avantages d'un telle factorisation :
   - Si un téléport fonctionne alors tous les autres fonctionneront (sauf si les coordonnées sont fausses),
   - L'ajout d'un nouveau téléport est simple, rapide et sans risque,
   - La correction d'un bug ne conduit qu'à la modification de la fonction TeleporterJoueur, pas des 10 ou 15 commandes de téléport,
   - L'ajout d'une nouvelle fonctionnalité dans le téléport est très simple à mettre en œuvre et à tester,
   - Le code est plus concis et lisible donc plus facilement corrigible et modifiable.

Je le répète, la factorisation est la règle la plus importante de tout bon développeur.
Et elle peut s'appliquer dans de très nombreux cas, pas seulement avec les téléports.

LES VARIABLES

Il existe deux type de variables en PAWN :
- Les variables locales (déclarées dans les fonctions, callback ou bloc d'instructions)
- Les variables globales (déclarées en dehors de toute fonction ou callback)

Les variables locales ne peuvent être utilisées que dans le bloc d'instructions où elles sont déclarées.
Les variables globales peuvent être utilisées dans toutes les fonctions ou callback du script.

Les variables locales ne posent pas de problème particulier car leur portée est limitée au bloc d'instructions dans lequel elles sont declarées.
Par contre, il faut faire attention avec les variables globales qui peuvent être modifiées partout dans le script.
Cette particularité peut être source d'erreurs quand une fonction ou callback modifie la valeur d'un variable globale pendant qu'un autre fonction ou callback est en train de la lire.
Il faut donc être très rigoureux dans l'utilisation que l'on fait de ce type de variables.

Chaque fois que c'est possible, on utilisera des variables locales.

Une bonne habitude consiste à déclarer toutes ses variables locale (même celle utilisées dans les boucles) en début de fonction ou de callback pour éviter les surprises à la compilation (voire à l'exécution).

Exemple qui ne compile pas :
UneFonction ()
{
   new a=8;
   if (a==8)
   {
      new b;
      b=a+12;
   }
   a=b+5; // Le compilateur produira l'erreur "b n'est pas défini"
}

En PAWN, il n'existe qu'un seul type de variable (contrairement au C/C++). Ce type par défaut est entier.
Mais il est possible d'utiliser un tag (étiquette) pour transformer cette variable en un autre type.
Le seul tag disponible en standard en PAWN est Float:. Il permet de transformer une variable de type entier en variable de type décimal (ou nombre à virgule flottante).
Exemple :
new Float:b = 12.84;L'utilisation de ce type de variable consomme plus de ressource que pour le type par défaut, il ne faut donc les utiliser que quand c'est nécessaire.

LES CONDITIONS

Les conditions sont la clé d'un code non linéraire. Elles permettent d'orienter le script en fonction de ce qui se passe sur le serveur.
Les conditions s'utilisent avec les mots clés (ou instructions) suivants : if, while, do/while et for.
Les conditions peuvent très vite devenir très compliquées à formuler et il ne faut pas hésiter à les éclater en plusieurs conditions.
Par exemple, on veut tester pour chaque joueur qui est connecté si il est passager d'un véhicule ou si il est à pied.
On pourrait écrire :
for (i=0 ; i<MAX_PLAYERS ; i++)
{
   if (IsPlayerConnected (i) && (IsPlayerInAnyVehicle (i) && GetPlayerState (i) == PLAYER_PASSENGER) || GetPlayerState (i) == PLAYER_ON_FOOT))
   {
      /* On fait quelque chose */
   }
}
On voit très vite dans ce bout de code qu'il est très facile de se tromper dans la condition (parenthèses, opérateurs).

Il vaut donc mieux écrire :
for (i=0 ; i<MAX_PLAYERS ; i++)
{
   if (IsPlayerConnected (i))
   {
      if (IsPlayerInAnyVehicle (i))
      {
         if (GetPlayerState (i) == PLAYER_PASSENGER)
         {
            /* On fait quelque chose */
         }
      }
      else if (GetPlayerState (i) == PLAYER_ON_FOOT)
      {
         /* On fait quelque chose */
      }
   }
}
NB : Ici, on tombe dans un autre travers où l'on est obligé d'utiliser deux fois le même code (/* On fait quelque chose */) mais ce n'est qu'un exemple

Dans un test, les termes (séparés par && ou ||) sont évalués un par un et comparer à 1 (vrai).
Dans le cas d'un condition ne comportant que des &&, l'évaluation de cette condition s'arrête dès qu'un des termes est faux. Ceci peut avoir des conséquences inattendues.
Exemple :
if (a==2 && ++b==5)
{
}
Dans ce bout de script, on test la valeur de a puis la valeur incrémentée de b.
Si a=2 et b=4 alors les test est vérifié et en sortie, a=2 et b=5 (puisqu'il sera incrémenté)
Si a<>2 et b=4 alors le test n'est pas vérifié mais en sortie, b est toujours égal à 4 car comme a n'est pas égal à 2, l'évaluation de la condition s'arrête et le code se poursuit après le bloc d'instructions du if.

++
Syg

10
Aide GTA IV / Pour les déçus qui ne peuvent pas jouer à GTA IV
« le: 08 Décembre 2008, 17:48:53 »
Je crée ce topic pour réconforter tous les membres qui n'ont pas pu ou ne pourront pas installer GTA IV.

C'est un première impression du jeu, après trois jours passés à jouer (soit environ 12 heures).

Je passe l'installation (2h30 en tout, Jeu+SP3 sous XP+drivers derniers cris)
Dès le lancement du jeu, on est bluffé par les graphismes qui sont sans communes mesures avec ceux des anciens opus. On se dit "C'est magnifique, pouvoir joueur à GTA avec les textures et les effets de Crysis .... Houa !!!".
Et puis, première mission, on doit conduire une voiture.
Et là, les déceptions commencent .....
Tout d'abord, les voitures dans leur ensemble ne sont pas très nerveuses et on a l'impression de conduire en permanence une Pérénial ...
Heureusement, d'ailleurs car vu la densité de circulation, aller trop vite est du suicide.

Autre déception dans les virages, la caméra est aussi nerveuse que la voiture et on se retrouve très souvent à regarder le coté de la voiture après un virage. On est constamment en train de regarder furtivement derrière (ce qui a pour effet de recentrer la caméra). On ne s'habitue qu'un peu à ceci.

Et puis, on arrive à destination après quelques centaines de mètres où l'on s'est frayé un passage entre les véhicules qui abondent (provoquant très souvent des embouteillages aux croisements).
On essaie donc la marche (ou la course) à pied .... autre déception, impossible de marcher de coté (comme dans tous les bons FPS), quand on appuie sur droite ou gauche, le personnage tourne.
Autre chose pas très belle : le saut. Lorsque le personnage court et qu'on le fait sauter, il s'arrête presque et fait un saut digne d'un enfant de 4 ans et demis (environ 57 cm de long).

A l'arrêt, on se met à regarder les détails de ce qui nous entoure .... encore une déception, tout n'est pas aussi joli qu'on avait pu le croire. Les ombres notamment, sur la bordure de ces dernière, pleins de petit pixels censés créer l'illusion d'un fondu. Le problème c'est que ces pixels sont bien visibles et ne créent rien du tout d'autre que .... des pixels bien visibles et pas beaux du tout. (C'est certainement un des bugs qui trainent avec les cartes NVIDIA).

Bref, on l'a payé ce jeu donc on ne va pas s'arrêter là, il faut continuer.

On va donc régler comme il faut la configuration du clavier (environs 20 minutes).
On ne peut pas configurer la touche "Entrée", dommage, moi je m'en servait sous les autres GTAs.
On ne peut affecter qu'une seul touche à une même action (on pouvait aller jusqu'à 3 touches sur GTA SA).
On se rend compte aussi qu'il y a 4 groupes différents de configuration des touches sur le même écran, touches communes, touches pour quand on est à pied, touches pour quand on est en véhicule et touches pour quand on pilotes un hélicoptère. Et on comprend au bout d'un moment qu'on peut affecter la même touche dans chacun des groupes (pas très intuitif tout ça).

Et puis, entre autre déception :
- On peut jouer au bowling dans GTA IV. Enfin, moi j'ai pas réussi, impossible de lancer la boule ....
- On ne peut plus faire les missions taxis (ou alors plus loin dans le jeu).
- Les motos ont un handling de cuvettes WC (avec un moteur)
- Les sauts uniques ne rapportent pas d'argent
- Le système de recherche est nul, il n'y a presque pas de course poursuite avec les flics (j'ai mis 20 secondes avec 4 étoiles à leur échapper après avoir été sur l'aéroport).
- J'en oubli certainement ...

Au final, on est déçu car on s'attendait à un GTA SA amélioré et on se retrouve avec tout plein de trucs qui manquent.
Mais le plus important, c'est la jouablilité. Elle est à chier. Je ne sais pas si c'est ma souris qui déconne ou si c'est le jeu (je penche plutôt pour le jeu) mais il faut que je bouge ma souris de 50 cm (j'exagère à peine) pour passer du haut de l'écran au bas dans le menu. Et en jeu c'est presque la même chose, même en réglant la sensibilité au max.
Je ne sais pas ce que ça donne sur une machine monstrueuse à 2 500 € mais en tout cas, sur une machine correcte, ce n'est pas le pied.

Et je n'ai pas encore testé le multi .....

Notre seul espoir, un patch qui remette ce jeu dans le droit chemin : moins gourmand, moins de bugs graphiques, plus de jouabilité. Ceci permettrait à un plus grand nombre d'y jouer.

++
Syg

11
Showroom SA:MP / Concours Script - FS Echec
« le: 28 Octobre 2008, 12:34:25 »
Voilà, comme le nom du topic l'indique, ceci est un concours (dont je serais le juge).

L'objectif est de faire un filterscript qui permettra à deux joueurs de jouer aux échecs sur SA-MP.

1) Contenu du FS :
- Une commande pour rejoindre une partie d'échec.
- Lorsque le joueur a rejoint une partie, il est positionné de manière à voir le jeu d'échec correctement, ces contrôles sont bloqués.
- Les pièces du jeu seront choisies parmi les objets de GTA SA.
- Lors du déroulement de la partie, le joueur dont c'est le tour pourra déplacer un curseur (matérialisé par un objet par exemple) sur le jeu d'échec pour sélectionner une pièce.
- Lorsqu'une pièce est sélectionnée, elle peut être déplacée sur le jeu d'échec (on n'est pas obligé de contrôler le validité du mouvement mais ce serait un plus appréciable).
- Si une pièce arrive sur un case occupée par une autre pièce, cette autre pièce sera éliminée du jeu (la gestion de la prise peut être plus complexe).
- La sélection et les déplacements des pièces et du curseur doivent se faire avec les touches (direction, tir, ...).
- Il faudra prévoir la fin de partie (comme le FS ne contient pas d'intelligence, la fin sera déterminée par les deux joueurs, d'un commun accord, par le biais de commandes de votre choix).

2) Déroulement du concours :
- Il n'y a rien à gagner si ce n'est une très grande considération de la part de tout le monde.
- Le délai de réalisation du FS est de 1 mois à compter d'aujourd'hui (durée révisable bien évidement) -> Soit jusqu'au 30 novembre 2008.
- Les liens vers les script des FS ou les FS eux-mêmes devront m'être envoyé en PM.

3) Eléments pris en compte dans le jugement :
- Le respect des exigences citées en 1)
- L'absence de bug
- Les plus (+) par rapport aux exigences
- La lisibilité du code
NB : Les éléments seront pris en compte dans cet ordre, les derniers servant à départager des candidats ex-æquo.

Je me tiens à votre disposition pour toutes questions, remarques ou récriminations.

Bonne chance.

++
Syg

12
Mod Lalu's Stunt / Les commandes de la version 4 de Lalu's Stunt
« le: 01 Octobre 2008, 15:48:37 »
Voici la liste de la plupart des fonctionnalités de Lalu's Stunt V4 ainsi que les commandes qui leurs sont associées.

Verrouillage/Déverrouillage d'un véhicule (Commande supprimée)
Le verrouillage des véhicule est automatique par défaut.
Pour les joueurs enregistrés, l'état du verrouillage automatique est enregistré dans la base.

Commandes
/l        Verrouille le véhicule (idem /lock)
/u        Déverrouille le véhicule (idem /unlock)
/autolock Active ou désactive le verrouillage automatique des véhicules


Sauvegarde et restauration de position
Il est possible de sauvegarder jusqu'à trois positions (X, Y, Z et Angle).
L'intérieur est géré, il est donc possible de sauvegarder/restaurer des positions depuis ou vers des intérieurs, avec ou sans véhicule.
Il est possible de sauvegarder en course.
Toutefois, une sauvegarde automatique à chaque checkpoint est effectuée dans la postion 0.
Pour les joueurs enregistrés, les trois positions sauvegardées sont enregistrées dans la base.
NB : L'intérieur n'est pas enregistré

Commandes
/s  Sauvegarde la position 0 (idem /savepos)
/r  Restaure la position 0 (idem /return)
/s1 Sauvegarde la position 1
/r1 Restaure la position 1
/s2 Sauvegarde la position 2
/r2 Restaure la position 2


Téléports
les téléports permettent de se rendre plus rapidement à un endroit donné de la carte.
La fonction de téléport de Lalu gère les remorques et les passagers (bien que le téléport des passagers ne marche pas correctement).
Certains véhicules ne sont pas téléportables (avions notamment).
Les téléports sont interdits en course ou en DM.
Commandes
Los Santos
/mls     Téléport vers les motos de Los Santos ( Skate Park)
/vls     Téléport vers les voitures de Los Santos
/bmx     Téléport vers les vélos
/tls     Téléport vers la célèbre tour de Los Santos
/spray   Téléport vers le Pay'N'Spray de Los Santos
/pilotes Téléport vers l'aéroport de Los Santos (idem /pilots)


San Fierro
/msf     Téléport vers les motos de San Fierro
/vsf     Téléport vers les voitures de San Fierro
/gsf     Téléport vers la gare de San Fierro
/asf     Téléport vers aéroport de San Fierro
/tsf     Téléport vers une tour de San Fierro
/ambu    Téléport vers les ambulances
/pomp    Téléport vers les camions de pompier (idem /fire)
/kart    Téléport vers les karts
/tuning  Téléport vers un garage de tuning


Las Venturas
/mlv     Téléport vers les motos de Las Venturas
/vlv     Téléport vers les voitures de Las Venturas
/alv     Téléport vers l'aéroport de Las Venturas
/drift   Téléport vers un parking avec des voitures
/pizza   Téléport vers les PizzaBoy et scooters


Autres
/fun     Téléport vers la zone de fun
/lc      Téléport vers le Bistrot San Marco à Liberty City
/dune    Téléport vers le Dunes
/taxi    Téléport vers les taxis
/quad    Téléport vers les quads
/boats   Téléport vers les bateaux
/camion  Téléport vers les camions (idem /truck)
/country Téléport vers des véhicules tout terrains
/chiliad Téléport en haut du mont Chiliad
/bandito Téléport vers les Banditos
/splat   Téléport à l'aplomb de la position courante à +650 mètres d'altitude
/orbite  Téléport à l'aplomb de la position courante à +10000 mètres d'altitude


Obtention de véhicules
Deux types de véhicules peuvent être obtenus grâce à des commandes. Il s'agit des NRG500 et des Packers.
Chaque commande vous emmène vers les véhicules et vous ramène à votre position initiale lorsque vous en avez pris un.

Commandes
/new    Obtention d'une nouvelle moto
/packer Obtention d'un packer


Réparation du véhicule
Les véhicules sont réparés automatiquement à chaque téléport ou restauration d'une position sauvegardée.
Il est possible de réparer son véhicule ou de le remettre sur ses roues.
Il est à noter que les commandes de réparation fonctionnent mal avec les avions et les hélicoptères.

Commandes
/rep Réparer le véhicule (idem /repair)
/car Réparer et remettre le véhicule sur ses roues


Rampes
Il est possible de faire apparaître une ramps devant le véhicule.
Pour faire apparaître une rampe, il suffit d'appuyer sur la touche "tir secondaire" (cf votre configuration de GTA SA)
Les rampes ne sont pas autorisées dans certaines courses.
Les rampes ne sont pas disponibles avec les avions et les hélicoptères.

Commande
/ramp [ID|on|off] Permet de selectionner le type de rampes ou ne mettre en/hors fonction l'apparition des rampes
Il y a 6 types de rampe disponible.
Paramètres de la commande
   - ID=0 : Petite rampe en tôle (idéale pour les motos)
   - ID=1 : Rampe en béton (plus haute que les autres)
   - ID=2 : Planche sur une caisse
   - ID=3 : Rampe aquatique sur des rochers
   - ID=4 : Rampe aquatique normale
   - ID=5 : Rampe aquatique large
   - on   : Activer l'apparition des rampes
   - off  : Désactiver l'apparition des rampes


Anti Bike Fall
L'Anti Bike Fall permet de remettre le joueur sur sa moto ou son vélo automatiquement après une chute.
Il est à noter une modification du handling du véhicule après la première chute.
Pour les joueurs enregistrés, l'état de l'Anti Bike est sauvegardé dans la base.

Commande
/nofall Active/désactive l'Anti Bike Fall

Signalement de position
Il est possible de signaler sa position aux autres joueurs en faisant clignoter son marqueur sur la mini-carte.
Le marqueur clignote pendant 30 secondes.
Cette fonctionnalité n'est utilisable qu'une fois toutes les 3 minutes.

Commande
/signal Se signaler aux autres joueurs

DeathMatch
Il n'existe qu'un seul DM dans le mode.
C'est le seul endroit où l'on peut tuer d'autres joueurs.
Lorsqu'un joueur est en DM, le suffixe "_DM" est ajouté à son pseudo. Ce suffixe est retiré lorsque le joueur quitte le DM.

Commandes
/dm monster Permet d'entrer dans le mode DM
/dm quit    Permet de sortir du mode DM


Rapport aux administrateurs
Il est possible de rapporter un comportement anti-jeu ou de triche aux administrateurs de manière cachée.

Commande
/report <message> Envoie de manière cachée un message aux administrateurs présents

Couleurs des véhicules
Il est possible de changer les couleurs de certains véhicules (un bug de SAMP empêche de le faire sur la totalité des véhicules).
La commande /vcol est réservée aux joueurs enregistrés.
Pour les joueurs enregistrés, les couleurs choisies par /vcol sont sauvegardées dans la base.

Commandes
/vb                 Changer la couleur du véhicule en vert et blanc (couleurs 86 et 1)
/nb                 Changer la couleur du véhicule en noir et blanc (couleurs 1 et 0)
/ro                 Changer la couleur du véhicule en rose ((couleurs 5 et 126)
/vcol [Col1] [Col2] Permet de changer les couleurs du véhicules
   Si Col1 ou Col2 sont omises, des couleurs aléatoires seront choisies


Aide
Il existe plusieurs commandes d'aide qui récapitulent l'ensemble des commandes utilisables dans le mode.

Commandes
/but        Permet d'afficher le but du mode (idem /goal)
/aide       Permet d'afficher l'aide générale (idem /help)
/plus       Suite de l'aide générale
/plus2      Suite de l'aide générale
/telep      Aide sur les téléportations (idem /teleportation)
/suite      Suite de l'aide sur les téléportations (idem /next)
/suite2     Suite de l'aide sur les téléportations (idem /next2)
/caide      Aide sur les comptes joueurs (idem /ahelp)
/credits    Donne les pseudos de gens ayant participer à la création et à l'évolution du mode
/version    Donne la version du mode
/built_date Donne la date de génération du mode
/time       Permet l'affichage de l'heure du serveur
/gstats     Affiche certaines statistiques du mode


Langue
Il est possible de changer la langue affichée dans le jeu.
Le changement de langue ne peut se faire qu'entre le français (par défaut) et l'anglais.
Pour les joueurs enregistrés, la langue choisie est sauvegardée dans la base.

Commande
/lang <FR|EN> Permet de choisir la langue FR=Français, EN=anglais

Mise en pause

Les joueurs qui désirent s'absenter temporairement sans avoir à quitter le jeu peuvent se mettre en pause.
Lorsqu'un joueur est en pause, le suffixe "_AFK" est ajouté à son pseudo. Ce suffixe est retiré lorsque le joueur quitte le mode pause.
Un joueur en pause est téléporté dans un garage souterrain. Il est ramené à sa position initiale lorsqu'il quitte le mode pause.
NB : Le mode pause n'empêche pas les joueurs d'évoluer sur la carte mais des sanctions sont prises pour les joueurs jouant alors que leur pseudo comporte le suffixe "_AFK"

Commandes
/afk  Permet de se mettre en pause
/back Permet de sortir du mode pause


Suicide

Une commande de suicide existe. Son utilité est discutable.
Le suicide (ainsi que toute autre forme de mort) termine l'animation en cours et élimine le joueur de la course dans laquelle il était.

Commande
/kill Permet de se suicider

S'éjecter de son véhicule
Une commande permet de s'éjecter de son véhicule dans le cas où la touche correspondant sur le clavier ou la manette ne fonctionne pas (véhicule en mouvement notamment).

Commande
/eject Permet de s'éjecter de son véhicule

Affichage d'un HUD en bas de l'écran
Il est possible d'afficher un HUD en bas de l'écran.
Le HUD n'est affiché que lorsue l'on est dans un véhicule.
Ce HUD affiche les informations suivantes :
   - Nom du véhicule,
   - Vitesse en km/h ou MPH selon la langue choisie,
   - Altitude,
   - Santé du véhicule (en % avant explosion).

Commande
/speedo Active/désactive l'affichage du HUD

Compte utilisateur
Plusieurs commande sont liés aux comptes utilisateur.
Ces commandes sont surtout utilisées au moment de la connexion pour se loguer sur le serveur.
Le login charge toutes les informations concernant l'utilisateur.

Commandes
/lvl                       Permet d'afficher son propre niveau
/cmpd <Ancien> <Nouveau>   Permet de changer son mot de passe (idem /cpwd)
/tpass <Mot De Passe Team> Permet de se loguer au niveau de la team
/login <Mot de passe>      Permet de se loguer sur le serveur
/logout                    Permet de se déloguer
/register                  Cette commande ne permet plus de s'enregistrer et redirige sur GtaOnline.fr


Animations
La plupart des animations sont disponibles sur le serveur.

Commandes
/animlist        Permet d'avoir la liste des animations
/eat             Manger
/lay             S'allonger
/bomb            Poser une (fausse) bombe
/chat            Discuter
/deal            Dealer (de la drogue)
/hide            Se cacher
/wave            Faire signe de la main
/crack           Overdose de crack
/dance <1|2|3|4> Danser selon le style passé en paramètre
/drunk           Marcher comme une personne ivre
/fucku           Faire un bras d'honneur
/laugh           Rire
/vomit           Vomir
/cellin          Sortir son téléphone cellulaire
/robman          Mettre en joue
/smokem          Fumer (homme)
/smokef          Fumer (femme)
/taichi          Faire des exercices de taichi
/cellout         Ranger son téléphone cellulaire
/handsup         Lever les mains en l'air
/lookout         Regarder
/slapass         Taper sur les fesses
/chairsit        S'asseoir sur une chaise
/crossarms       Croiser les bras
/groundsit       S'asseoir par terre
/getarrested     Se faire arrêter


Courses
Seuls les joueurs enregistrés peuvent participer aux courses.
Il n'est pas possible de rejoindre une course après le départ de celle-ci.
Les 5 meilleurs temps d'une course (tous joueurs confondus) sont sauvegardés dans la base.
Le meilleur temps pour une course est affiché juste avant le départ.
Les 5 meilleurs temps sont recalculés et affichés en fin de course.
Le meilleur temps d'un joueur pour chaque course qu'il à couru est sauvegardé dans la base.
Ce meilleur temps est affiché lorsque le joueur rejoint une course.
Il est possible de quitter la course à tout moment (sauf pendant le compte à rebours).

Commandes
/join  Rejoindre une course
/leave Quitter la course en cours


Changement d'apparence
Les joueurs enregistrés peuvent changer le modèle de joueur affiché à l'écran (visible par les autres joueurs).
La liste de modèle de joueur peut se trouver sur le net (Le wiki de SAMP n'est plus accessible et les sites que j'ai trouvé font de la pub donc je vous laisse chercher tous seuls)  
Certains modèles font planter le serveur et ne sont pas disponibles.
Pour le moment, le modèle choisi n'est pas sauvegardé.

Commande
/skin <ID> Changer de modèle de joueur

++
Syg

13
Ce fil de discussion a été déplacé vers Tutoriaux et références SA:MP.

[liEN DU FIL DE DISCUSSION]

14
Showroom SA:MP / Couleurs cachées pour les véhicules
« le: 29 Janvier 2008, 23:58:24 »
Il a toujours été dit que les couleurs des véhicules allait de 0 à 126 et pourtant ....

Je viens de découvrir 11 nouvelles couleurs pour les véhicules qui ne se trouvent pas dans la liste des 127 connues :

180      -> Marron foncé
181, 182 -> Bleu turquoise
183      -> Rose fluo
184      -> Bleu ciel fluo
185      -> Fuschia
186      -> Violet

Voici ces couleurs en live (ordre inversé par rapport à la liste mais vous aurez deviné) :

236                               -> Vert foncé
237, 238, 247, 248, 249, 250, 251 -> Vert un peu moins foncé
239, 240, 241, 242, 245, 246      -> Vert très foncé
243, 244                          -> Vert très très foncé (presque noir)
252                               -> Vert brillant

Voici ces couleurs en live (de la plus foncée à la plus claire) :

Ces couleurs fonctionnent aussi bien avec AddStaticVehicle qu'avec ChangeVehicleColor.
Et bien sur, on peut les associées avec les autres couleurs (0-126).

Toutes les autres valeurs donnent du noir et les couleurs rebouclent à partir de 256. Ce n'est donc pas la peine de faire des essais avec des valeurs supérieures à 256 car on retombe sur les même couleurs.

++
Syg

15
Scripting SA-MP [Pawn center] / La tour de paille
« le: 10 Septembre 2007, 23:53:20 »
Salut,
Je viens de terminer le portage en PAWN d'un tutorial de MTA (http://www.mtasa.com/tutorial4.html)
Il n'y a pas d'auteur défini (simplement "The MTA and QA Team") donc je n'ai pu citer personne.

J'en ai fait un filterscript qui peut être chargé dans n'importe quel mode n'utilisant pas d'objet.
Attention, ce filterscript "consomme" 150 objets, si le mode dans lequel il est chargé en utilise aussi, le serveur risque de devenir instable et les clients risquent de planter.

Ce filterscript est disponible ici : http://pastebin.gtaonline.fr/pastebin.php?show=52

Bien évidement, ce filterscript est utilisable comme bon vous semble mais si vous l'améliorer, faites en profiter les autres.
Et n'oubliez pas d'en citer la source ...

++
Syg

Pages: [1] 2