GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: S!m le 06 Septembre 2008, 23:01:08

Titre: include système de langues
Posté par: S!m le 06 Septembre 2008, 23:01:08
salut à tous,

dernièrement j'ai travaillé sur un include pour faire une système de langues, 2 dans ce cas,anglais et français, et bon... je voudrais savoir les fonction qui pourraient être utiles pour la plupart des utilisateurs

volià ce que j'ai de fait:

- couleurs intégrées à certaines fonctions de message (aléatoires)
- équivalent du SendClientMessage à deux textes différents, l'un pour anglais, l'autre français
- équivalent du GameTextForPlayer
- équivalent du SendClientMessageToAll
- une fonction pour détecter la langue d'un joueur

et possiblement (sur mon gm présentement):

- message choisi une langue au spawn
- commande pour changer la langue d'un joueur (admin)
- commande pour choisir la langue (joueur)

alors voilà et si vous avez des idées/suggestions/commentaires n'hésitez pas à les poster, merci :D :D

 et puis si bien entendu ça intérresse quelques personnes, je le mettrai dans le showroom  :happy

++Sim++
Titre: Re : include système de langues
Posté par: spykerc8 le 06 Septembre 2008, 23:50:00
Très bonne idée je pense.

J'aimerais bien voir comment tu fais quand tu auras fini ;)
Titre: Re : include système de langues
Posté par: S!m le 07 Septembre 2008, 00:21:57
salut,

merci,

en réalité, c'est super simple, tu crée une variable dans laquelle tu détermine des paramètres, tu fais une commandes pour que le joueur choisisse la langue qu'il veut et puis tu met plusieurs messages dans une fonction qui remplace les traditionnels SendClientMessage,GameTextForPlayer......


++Sim++
Titre: Re : include système de langues
Posté par: Bayshore le 07 Septembre 2008, 00:22:53
Yep superbe idée je confirme, je l'ai déjà eu. 8) ;D

Et j'aimerais bien que tu me dises comment tu t'y prendras pour détecter la langue du joueur, un array avec tout les début d'IP + strtok sur l'IP du joueur, ou alors avec je ne sais plus quel plugin ?

Sinon, je ne saurais te dire qu'ajouter de plus...
Titre: Re : include système de langues
Posté par: S!m le 07 Septembre 2008, 00:59:00
euh......... ???

ah vrai dire pour "détecter la langue" le joueur fait une cmd ou il choisit....aussi simple que ça, puis on stock dans un array

EDIT: et puis aussi faut pas oublier que le ip change constamment, et que je ne vois pas du tout de quelle façon sa-mp localiserais l'adresse, en plus que le pays où tu es ne donne pas ta langue, ca change d'un joueur à l'autre, j'avais pensé a faire un truc avec des fichiers pour chaque joueur mais ce serait un peu lourd pour un simple script de langue....

++Sim++
Titre: Re : include système de langues
Posté par: spykerc8 le 07 Septembre 2008, 01:19:04
En fait il existe de très bon systèmes pour connaître le pays d'un joueur. La majorité se base sur une grosse base de données avec des ranges d'IP correspondant à chaque pays. C'est assez fiable (on parle de 99% sur la majorité des outils).

Après, effectivement, ca a un intérêt limité.
Titre: Re : Re : include système de langues
Posté par: feldbrau le 07 Septembre 2008, 08:50:24
En fait il existe de très bon systèmes pour connaître le pays d'un joueur. La majorité se base sur une grosse base de données avec des ranges d'IP correspondant à chaque pays. C'est assez fiable (on parle de 99% sur la majorité des outils).

Après, effectivement, ca a un intérêt limité.

Le probleme c'est qu'il y a des joueurs francophone ((qui prefere le francais)) qui habite dans d'autres pays donc je pense que sont systeme de variable pour le language et pas mal du tout. J'avais deja fait quelque test pour MTA mais c'est assez chiant a faire, ca prend vachement plus de temps. Ensuite le risque c'est l'invasion de joueurs non francophone qui risque de nuire aux joueurs uniquement francophone, comme c'est le cas sur un serveur RP FR a la base mais sur 100 y'a 10 francais et sur les 10 2/3 sont bilingue :s
Titre: Re : include système de langues
Posté par: S!m le 07 Septembre 2008, 13:38:18
salut,

ben moi mon serveur est bilingue et ça ne va pas si mal que ça,

mais pour faire cet include, le peaufiner, j'aurais surtout besoin d'aide pour corriger les bouts a problèmes, il fonctionne très bien, sauf que la y a 2-3 trucs que j'aime moins.... :-X

-j'ai fait un dcmd pour la commande de choisir la langue (à ajouter dans le OnPlayerCommandeText)
- j'ai fait un truc qui envoie un message pour dire au joueur de ce choisir une langue (et en passant la langue par défaut est l'anglais, mais bien sur, il faudrait que je le travaille pour que ce soit facile a changer...) 8)

EDIT: il y a maintenant un define (optionnel) a placer pour la langue par défaut, il me reste seulement a tester :D

- il n'y a que deux langues, mais j'ai une idée de comment en rajouter plus, par contre, je veut savoir si cela vous interresse, deux est-ce suffisant?

et voila, comme il s'agit de mon premier include, j'aprrécierais énormément vous me disiez S.V.P. (si possible) comment on peut faire pour ajouter quelque chose dans une callback sans que le scripteur soit forcé d'ajouter un truc dans sa callback

MERCI :D :D

++Sim++
Titre: Re : include système de langues
Posté par: Bayshore le 07 Septembre 2008, 18:45:07
Le probleme c'est qu'il y a des joueurs francophone ((qui prefere le francais)) qui habite dans d'autres pays donc je pense que sont systeme de variable pour le language et pas mal du tout. J'avais deja fait quelque test pour MTA mais c'est assez chiant a faire, ca prend vachement plus de temps.

Bah on peut détecter automatiquement ET demander la confirmation. :happy

Ensuite le risque c'est l'invasion de joueurs non francophone qui risque de nuire aux joueurs uniquement francophone, comme c'est le cas sur un serveur RP FR a la base mais sur 100 y'a 10 francais et sur les 10 2/3 sont bilingue :s

M'ouais... Ce serait dommage de désavantager les non-francophones alors que les français sont de bons gros kikoos en majorité, il n'y a qu'a voir le SFTDM de ce site. ;S
Enfin un serveur rempli de français c'est chaud, des anglophones, etc. ça fait pas de mal, quoi que si le nombre de joueurs sur un serveur français-only n'est pas trop élevé c'est pas trop mal (je pense aux Psycos).

Enfin sur le serveur, qui est en anglais (PEN1), que je modère, même les français qui ne parlent pas du tout anglais ne sont pas trop gênés par l'Anglais, celui du script ainsi que celui du chat.


Sinon, Sim » Deux langues c'est bien, plus c'est mieux.
Par exemple moi à un moment je me tâté à faire aussi en allemand (de super joueurs).

Ce serait bien que l'on puisse rajouter autant de langues qu'on désire, enfin cinq langues maximum devraient suffire. :)

Sinon j'ai pas compris pour le truc de ta callback, plus de détails stp. :happy
Titre: Re : include système de langues
Posté par: R@f le 07 Septembre 2008, 19:05:11
Si quelqu'un a besoin d'aide pour une version allemande je suis là, suisse-allemand d'origine :P

++
R@f
Titre: Re : include système de langues
Posté par: Bayshore le 07 Septembre 2008, 19:08:50
Ah oui, ça m'intéresserait bien, peut-être plus tard, parce que là j'ai même pas tous fini en anglais. :happy

Comment je pourrais te contacter au mieux, Xfire ? MSN ?
Titre: Re : include système de langues
Posté par: R@f le 07 Septembre 2008, 19:29:11
Je voudrais dire comme dans Hitman "ne me contactez pas, je vous contacte", mais j'ai pas ton adresse msn ni xfire, donc j'tenvoye tout par PM ;)

++
R@f
Titre: Re : include système de langues
Posté par: S!m le 07 Septembre 2008, 21:24:58
salut,

bon ben pour le truc des callbacks, je voulais dire que si je voudrais, par exemple, intégrer les commandes à l'include, es-ce que c'est possible, de s'arranger d'une façon à ce qui soit dans l'include soit appelé dans la callback sans que le scripteur n'aie a placer quelque chose dans le script??

si ce n'est pas clair.......je ne sais plus comment l'expliquer  :lmfao

merci à tous! :D


++Sim++
Titre: Re : include système de langues
Posté par: Bayshore le 07 Septembre 2008, 21:41:45
Oui je pense, tu n'as qu'à tester. :happy
Titre: Re : include système de langues
Posté par: S!m le 08 Septembre 2008, 01:29:52
salua tous,

alors j'y ai travailler un peu et puis la j'ai cru remarqué avoir une légère difficulté a créer un script où le nombre de langue serait variable, je serais probablement capable même si je n'ai jamais fait cela (surtout avec votre aide :D) mais comme l'intérêt est plutôt limité, je pense que ce sera a oublier, du moins pour une première version....

alors je me prépare à faire le release dans quelques jours, si vous avez d'autres suggestions asser simples, merci de les poster!

++Sim++
Titre: Re : include système de langues
Posté par: Syg le 08 Septembre 2008, 12:05:18
Le problème d'un include c'est que tu ne pourras pas surcharger les callbacks comme on peut le faire avec un FS.
Si une callback existe dans ton include, tu ne pourras pas mettre la même dans ton GM (erreur de compil car fonction définie 2 fois).
Le mieux, dans ton include c'est de définir une variable qui donne la langue choisie (ou imposée).
Ensuite, comme tu l'as fait précédement, tu redéfinies les fonctions d'affichage de texte (SendClientMessage, ...) pour qu'elles affichent le message dans la bonne langue.
Pour faire ça, il faut passer par des identifiants de chaines.
Ensuite, dans un tableau, tu stockes les chaines pour chaque langue.
Exemple :
#define CHAINE_BIENVENUE   1    /* Identifiant de la chaine de bienvenue */
#define CHAINE_CONNECTION 2
...
new Chaine_FR[NB_MAX_CHAINES][255]; /* Chaines en français */
new Chaine_EN[NB_MAX_CHAINES][255]; /* Chaines en anglais */

/* Fonction d'affichage */
SendClientMessageLangue (playerid, IdMessage, Langue, Couleur)
{
   /* Selon la langue */
   switch (Langue)
   {
      case FRANCAIS:
         SendClientMessage (playerid, Couleur, Chaine_FR[IdMessage]);
      break;
      case ANGLAIS:
         SendClientMessage (playerid, Couleur, Chaine_EN[IdMessage]);
      break;
      default:
         SendClientMessage (playerid, Couleur, Chaine_FR[IdMessage]); // Français par défaut
      break;
   }
}

/* Exemple d'utilisation */
SendClientMessageLangue (playerid, CHAINE_BIENVENUE, LangueJoueur[playerid], 0x00FF00AA);

Et il faut aussi initialiser toutes les chaines :
Chaine_FR[CHAINE_BIENVENUE] = "Bienvenu(e) sur notre serveur";
Chaine_EN[CHAINE_BIENVENUE] = "Welcome on our server";
Chaine_FR[CHAINE_CONNECTION] = "Vous êtes connecté(e)";
Chaine_EN[CHAINE_CONNECTION] = "You are connected";

Par contre, cette façon de faire ne permet pas de mettre des données variables dans les chaines.
Si on veut faire cela, il faut faire des fonctions à arguments variables (sur le principe de printf). Mais c'est un peu compliqué (pas trop quand même). Et l'implementation des fonctions à arguments variables n'est pas très pratique en PAWN.
Mais ceci permettrait de déclarer des chaines du genre "Bienvenu(e) %s sur notre serveur" et de passer le nom du joueur dans la fonction SendClientMessageLangue.

++
Syg