Manana81 Posted June 17, 2014 Share Posted June 17, 2014 Bonjour à tous J'aimerai bien simuler un temps ,dans une zone inconnue de la carte MTA , lorsqu'un joueur est dans une dimension précise avec un scripte simple mais je n'y arrive pas.J'ai regardé le scripte "leatherface" mais celui ci est limité à une zone .Comme je suis encore novice j'ai regardé d'autres scriptes comme "weather" et dans MTAwiki mais ça n'a produit aucun effets.Voici au final ce que j'ai fait côté client: function weatherzone() local ThePlayer = getLocalPlayer() if setElementDimension ( ThePlayer, 4 )then setWeather(19) end end addEventHandler( "onClientResouceStart", getRootElement(), weatherzone ) Quelqu'un a une idée? Link to comment
Moderators Citizen Posted June 17, 2014 Moderators Share Posted June 17, 2014 Quelqu'un a une idée? ouaip, c'est "onClientResourceStart" Et il faut aussi noter que getRootElement() (ou la variable prédéfinie root) te renvoit le l'élément racine de ton serveur. Il faut savoir que chaque élément est un sous-élément d'un autre élément. L'élément root étant le seul à ne pas avoir d'éléments au-dessus de lui. Chaque ressource est un sous-élément de l'élément root et sera l'élément racine de tous les éléments que ses scripts créerons. Lorsqu'on supprime un élément, (par exemple en arrêtant une ressource), tous ces sous-éléments seront détruit également. Pour visualiser ce que je viens d'expliquer, voici un schéma: Tout ça pour dire que le getRootElement() n'est pas approprié car tu veux certainement que ta fonction ne soit exécuté que lorsque que ta ressource (celle qui contient ce code) démarre sur le client (joueur). Là tu exécute ta fonction même lorsqu'une autre ressource démarrera. Pour corriger ça, on va dire qu'on n'exécute la fonction weatherzone que lorsque "onClientResourceStart" sera triggered avec la ressource courante en source de cet event: addEventHandler( "onClientResourceStart", getResourceRootElement(getThisResource()), weatherzone ) Mais comme c'est long à écrire et que les codeurs sont paresseux, l'équipe de MTA nous fournit un certains nombre de variables prédéfinies. (Voir la liste: Predefined Variables) On peut donc l'écrire comme ceci: addEventHandler( "onClientResourceStart", getResourceRootElement(resource), weatherzone ) -- ou encore plus rapide addEventHandler( "onClientResourceStart", resourceRoot, weatherzone ) Les 3 addEventHandlers ci-dessus sont exactement pareil. Un autre conseil quand un script ne marche pas, mettre des outputs un peu partout (mais de façon logique quand même). Pour trouver ton erreur, voici ce que j'ai écrit: function weatherzone() outputChatBox("weatherzone function") local ThePlayer = getLocalPlayer() if setElementDimension ( ThePlayer, 4 ) then outputChatBox("set weather") setWeather( 19 ) end end addEventHandler( "onClientResouceStart", resourceRoot, weatherzone ) Mais évidemment, il ne sait rien passé dans la chatbox, ma meta.xml était correcte et je n'avait pas d'erreur dans mon script (une parenthèse oubliée affichera une erreur en utilisant /debugscript 3). J'était donc sûr que ça venait du addEventHandler, j'ai donc relu attentivement "on client resouce ... wtf resouce ?!" J'ai corrigé et retenté. Et là le script marchait et j'avais mes 2 messages dans la chatbox. Les outputChatBox est très utile lorsqu'il s'agit de débuguer un script. J'espère que les explications ont été claires pour toi et que tu retiendras les astuces pour tes futurs scripts. 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