Jump to content

[Résolu] Problème sur mon script ? Je débute !


Recommended Posts

------------------------------ Message de salutations ------------------------------ 
AddEventHandler('onPlayerJoin', root, 
    local oldAllowed = wasAllowedList[player] 
    local newAllowed = isPlayerAllowedHere(player) 
    wasAllowedList[player] = newAllowed 
        if newAllowed and not oldAllowed then 
            outputChatBox("Bienvenue sur GuilAndreas", value, 25, 45, 35, false) 
        if oldAllowed and not newAllowed then 
            function outputChatBox(joueur) 
                outputChatBox("Salut, "..getPlayerName(joueur).." content de te revoir !", value, 35, 45, 25, false) 
            end 
        end 
    end 
) 
  
------------------------------ Message d'arrivée ------------------------------ 
AddEventHandler('onPlayerLogin', root, 
    function outputChatBox(joueur) 
        outputChatBox(..getPlayerName(joueur).."s'est connécté !", value, 0, 255, 0, true) 
    end 
) 
  
------------------------------ Message de déconnexion ------------------------------ 
AddEventHandler('onPlayerQuit', root, 
    function outputChatBox(joueur) 
        outputChatBox(..getPlayerName(joueur).."s'est déconnécté !", value, 255, 0, 0, true) 
    end 
) 
  
------------------------------ Message de connexion ------------------------------ 
AddEventHandler('onPlayerLogin', root, 
    local 
        outputChatBox("Vous êtes maintenent en ligne", value, 100, 255, 100, false) 
    end 
) 
  
------------------------------ Message de déconnexion ------------------------------ 
AddEventHandler('onPlayerLogout', root, 
    local 
        outputChatBox("Vous êtes maintenent hors ligne", value, 255, 100, 100, false) 
    end 
) 

Edited by Guest
Link to comment
  • Moderators

Bonsoir dfigfjf, (jamais vu un ratio de voyelles aussi bas dans un pseudo lol)

Problème sur mon script ?
Oh oui y en a pas mal et c'est sûrement parce que tu as fais des copiés collés sans comprendre.

Déjà je vais juste te proposer une autre écriture plus simple que ceci:

addEventHandler("monEvent", gensConcernés, 
    function (param1, param2, etc) 
        outputChatBox("monEvent à été déclenché !") 
    end 
) 

Ce code écrit dans la chatbox "monEvent à été lancé !" à chaque fois que l'event "monEvent" est déclenché et pour chaque joueur qui compose la variable gensConcernés. Si tu mets root ce bout de code fonctionnera pour tous les joueurs présent sur le serveur.

Mais c'est une écriture avancée que je déconseille fortement pour débuter. Donc voici la même chose écrit plus simplement:

function maFonction(param1, param2, etc) 
    outputChatBox("monEvent à été lancé !") 
end 
addEventHandler("monEvent", gensConcernés, maFonction) 

Ici on déclare d'abord tranquillement la fonction qui sera attachée à l'event puis on l'attache via la fonction addEventHandler

Enfait, la fonction addEventHandler attends une fonction en 3ème argument. Donc:

- soit on lui donne le nom d'une fonction qu'on a déjà déclaré: maFonction (cf.écriture simplifié)

- soit on déclare la fonction dans le 3ème argument (cf. écriture complexe).

Mais quand on utilise là 2ème possibilité (l'écriture complexe), il ne faut pas donner de nom à ta fonction.

On appelle cette fonction une fonction anonyme (qui existe dans d'autres langages).

Dans le bouts de codes que tu nous a montré, tu commences presque tout le temps le 3ème arguement par du code genre:

local oldAllowed = wasAllowedList[player] 

Donc commençons par le message de salutations, la version corrigée:

function salutationsOnJoin() 
    local oldAllowed = wasAllowedList[source] 
    local newAllowed = isPlayerAllowedHere(source) 
    wasAllowedList[source] = newAllowed 
    if newAllowed and not oldAllowed then 
        outputChatBox("Bienvenue sur GuilAndreas", source, 25, 45, 35, false) 
    else 
        outputChatBox("Salut, "..getPlayerName(source).." content de te revoir !", source, 35, 45, 25, false) 
    end 
end 
addEventHandler("onPlayerJoin", root, salutationsOnJoin) 

On repère tout de suite l'écriture simplifiée qui ne doit pas te poser de problème si t'as bien compris ce que j'ai dit plus haut.

Ensuite si on lit la page wiki de onPlayerJoin on lit que la source de cet event est le joueur qui est à l'origine de cet event (donc le joueur qui vient de join). Hors dans ton code, tu utilises la variable player partout:

Un petit extrait de ton code:

local oldAllowed = wasAllowedList[player] 
local newAllowed = isPlayerAllowedHere(player) 
wasAllowedList[player] = newAllowed 

La variable player n'a pas été définie dans ta fonction et vaut donc nil. A la place de player, il faut utiliser la variable source.

Mais je ne vois pas non plus la définition de la variable source dans ton code

C'est une bonne remarque effectivement. La variable source est une sorte de variable invisible que notre addEventHandler se charge de remplir. Et on viens à l'instant de voir que pour onPlayerJoin source contient le joueur qui vient de join.

C'est pour ça que j'ai mis source de partout.

Ensuite tu avais cette potion de code:

if oldAllowed and not newAllowed then 
    function outputChatBox(joueur) 
        outputChatBox("Salut, "..getPlayerName(joueur).." content de te revoir !", value, 35, 45, 25, false) 
    end 
end 

Là par contre c'est pas juste une petite erreur de variable, c'est carrément le temple du copier/coller foireux ^^

Donc tu veux afficher "Salut dfigfjf", content de te revoir !" si oldAllowed vaut true et si newAllowed vaut false ou nil. Je ne suis pas sûr que ça soit tout à fait ça que tu voulais faire, mais c'est du moins ce qui est écrit. Et vu que c'est exactement la même condition que celle d'avant, les deux outputChatBox vont toutes les deux afficher leur message en même temps ... Ce qui, j'en suis sûr, une erreur de ta part.

C'est soit l'un, soit l'autre, donc c'est pour ça que j'ai mis un else à la place de t'a deuxième condition.

if newAllowed and not oldAllowed then 
    outputChatBox("Bienvenue sur GuilAndreas", source, 25, 45, 35, false) 
else 
    outputChatBox("Salut "..getPlayerName(source)..", content de te revoir !", source, 35, 45, 25, false) 
end 
  

Traduction du code en français:

[b]Si [/b]newAllowed vaut true et si oldAllowed vaut nil ou false [b]alors[/b] 
    Afficher "Bienvenue sur GuilAndreas" au joueur 
[b]Sinon[/b] 
    Afficher "Salut <nom du joueur>, content de te revoir !" au joueur 
[b]Fin[/b] 

Message de connexion

function showLogin() 
    outputChatBox(getPlayerName(source).." s'est connecté !", root, 0, 255, 0, true) 
end 
addEventHandler('onPlayerLogin', root, showLogin) 

Bon là même chose pour source, c'est source qui contient le joueur.

Et par contre j'ai mis root en 2ème argument pour outputChatBox parce que je veux l'afficher à tout le monde présent sur le serveur.

Ensuite tu as écrit ceci:

..getPlayerName(joueur).."s'est connécté !" 

Donc petit cours de concatenation.

Concaténation: ce terme désigne le fait de mettre bout à bout deux chaines (=textes).

en Lua on concatène avec deux points à la suite => x..y

Ici j'ai joint la variable x à la variable y

Voici pleins d'exemples de concaténation qui produit le même message:

----------------------------------------- 
local text = "Bonjour ".."dfigfjf ! Joueur numéro 2" 
  
----------------------------------------- 
local text = "Bonjour".." ".."dfigfjf ! Joueur numéro 2" 
  
----------------------------------------- 
local playerName = "dfigfjf" 
local text = "Bonjour "..playerName.." ! Joueur numéro 2" 
  
----------------------------------------- 
local playerName = "dfigfjf" 
local nbJoueur = 2 
local text = "Bonjour "..playerName.." ! Joueur numéro "..nbJoueur 
  
----------------------------------------- 
local bonjourBonsoir = "Bonjour " 
local playerName = "dfigfjf" 
local exclamation = " ! " 
local joueurNumero = "Joueur numéro " 
local nbJoueur = 2 
local text = bonjourBonsoir..playerName..exclamation..joueurNumero..nbJoueur 

Dans tous les cas, les deux points à la suite sont TOUJOURS entouré par une variable, un texte ou un chiffre, tu peux pas avoir:

local text = ..playerName.." s'est connecté !" 

car les premiers deux points n'ont rien sur leur gauche.

Il faut écrire à la place:

local text = playerName.." s'est connecté !" 

Là ça marchera.

Au passage, évite les couleurs en full 255, là t'as mis 255 sur la couleur verte, et crois en mon expérience, ça pique les yeux

En général 200 rends bien à l'écran, le 255 c'est genre le vert fluo d'un stabilo xD.

Message de déconnexion

function showQuit() 
    outputChatBox(getPlayerName(joueur).." à quitté le serveur !", source, 255, 0, 0, true) 
end 
addEventHandler('onPlayerQuit', root, showQuit) 

Plus besoin d'expliquer pourquoi j'ai mis source maintenant

Message de connexion

Je te laisse corriger

Message de déconnexion

Je te laisse corriger

Voilà je te conseil très fortement de suivre l'intégralité de cette Introduction à la programmation dispo sur le wiki FR de MTA.

Et pour info, pour coller du code sur le forum, utilise les balises [ lua][ /lua] sans les espaces genre:

[ lua]outputChatBox("Salut")[ /lua] sans les espaces donne

outputChatBox("Salut") 

ça pique moins les yeux, y a la coloration syntaxique et en plus ça garde l'indentation.

Voilà j'espère que tu as maintenant tout compris et que tu apprécieras le temps que je t'ai accorder pour te répondre avec le maximum d'explications et d'exemples possibles.

Cordialement,

Citizen

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...