Furious^ONE! Posted July 25, 2014 Share Posted July 25, 2014 Salut tout le monde ! J'ai un soucis assez embêtant de mon script , le vois çi , ci dessous : function teleport(gracz, cmd) local accName = getAccountName ( getPlayerAccount ( gracz ) ) -- get his account name if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Police" ) ) then setElementPosition(gracz, 1586.52112, -1607.66797, 13.38281) else outputChatBox("Vous n'êtes pas de la SAPD",source, 255,241,0) end end addCommandHandler("prison1",teleport) Le problème c'est que quand un joueurs qui est pas dans le groupe ACL Police il vois apparaître la phrase : "Vous n'êtes pas de la SAPD" et quand il fait la commande et ce message apparait , tout le joueurs connécté du serveur le vois aussi. Donc j'aimerai savoir comment je peux pour faire en sorte que , que le joueurs qui tape la commande le voit s'il vous plait. Merci d'avance Link to comment
TheCapn Posted July 25, 2014 Share Posted July 25, 2014 Salut, Déjà essaie d'améliorer un peu ton indentation. j'ai eu du mal à me retrouver dans ton code. Par ailleurs, la fonction addCommandHandler prend deux arguments de base : le joueur qui tape la commande, et le "string" de la commande. function teleport (player, command) local accName = getAccountName( getPlayerAccount( player ) ) if isObjectInACLGroup("user." .. accName, aclGetGroup( "Police" ) ) then setElementPosition( player, 1586.52112, -1607.66797, 13.38281 ) else outputChatBox( "Vous n'êtes pas de la SAPD", player, 255, 241, 0 ) end end En fait, le problème majeur venait du fait que le deuxième argument de la fonction outputChatBox était "source", et du coup tous les joueurs recevaient le message. Pour que seul le joueur reçoive le message, il faut mettre player en deuxième argument (ou gracz dans ton cas ). Cordialement, Link to comment
Moderators Citizen Posted July 25, 2014 Moderators Share Posted July 25, 2014 Première chose, il faut savoir que la variable source est une variable "cachée" car elle est implicitement créée dans ta fonction par MTA. Mais cette variable n'est crée que lorsque cette fonction traite (handle) un event comme onPlayerSpawn , onMarkerHit etc. Elle n'est donc pas créée lorsque la fonction traite une commande. Mais alors comment on sait qui à taper la commande ? (Désolé si tu le prends mal) Et bien si tu avais lu l'Introduction à la programmation dont j'ai pris la peine de le traduire en français et reformuler certaine parties pour qu'elles soient plus compréhensibles, tu le saurais déjà. Le wiki détail également ce que ta fonction reçoit en paramètre lorsqu'elle est attaché à une commande via addCommandHandler donc je cite: Handler function parametersThese are the parameters for the handler function that is called when the command is used. Server player playerSource, string commandName, [string arg1, string arg2, ...] playerSource: The player who triggered the command. If not triggered by a player (e.g. by admin), this will be false. commandName: The name of the command triggered. This is useful if multiple commands go through one function. arg1, arg2, ...: Each word after command name in the original command is passed here in a seperate variable. If there is no value for an argument, its variable will contain nil. You can deal with a variable number of arguments using the vararg expression, as shown in Server Example 2 below. On peut donc voir que le 1er argument d'une fonction est le joueur qu'il l'a tapé. Dans ce code là c'est donc gracz qui correspond au joueur. Mais comme ta copié collé du code d'un polonais, forcément ta pas pu deviner en lisant le code (remarque il l'utilise pour le setElementPosition, t'aurais presque pu deviner). Donc reprends plutôt ce code là: (C'est le même sauf que j'ai renommé la variable gracz en thePlayer pour que ça soit plus évident et j'ai remplacé source par thePlayer) function teleport(thePlayer, cmd) local accName = getAccountName ( getPlayerAccount ( thePlayer ) ) -- get his account name if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Police" ) ) then setElementPosition(thePlayer, 1586.52112, -1607.66797, 13.38281) else outputChatBox("Vous n'êtes pas de la SAPD", thePlayer, 255,241,0) end end addCommandHandler("prison1", teleport) Et donc là ça devrait faire ce que tu veux. (Juste pour info, ça l'affichait à tout le monde car source n’existait pas donc quand tu lui donnes source en paramètre, tu lui donnes donc sa valeur qui est nil c'est à dire "inéxistant" et quand outputChatBox reçoit nil en 2ème paramètre, il prend la valeur par défaut qui est getRootElement() d'après le wiki c'est à dire "Tout ce qui existe dans le serveur". Donc même les objets et les voitures le reçoivent mais forcément, comme ça sert à rien de leurs afficher le message, il ne l'affiche qu'aux joueurs). Je t'invite à faire ce tutoriel en entier qui pose les bases comme les commandes, le fonctionnement général du serveur, les events etc: https://wiki.multitheftauto.com/wiki/FR/ ... grammation Bon codage Link to comment
Furious^ONE! Posted July 25, 2014 Author Share Posted July 25, 2014 Merci beaucoup ! En effet j'avais trouvé en remplaçant celà : outputChatBox("Vous n'êtes pas de la SAPD",source, 255,241,0) En ça : outputChatBox("Vous n'êtes pas de la SAPD",thePlayer, 255,241,0) Et ça a fonctionné. Mais je te remerci de ton aide ! Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now