Jump to content

Problème script outputChatBox


Recommended Posts

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

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

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 parameters

These 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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...