Jump to content

simuler un temps dans une zone inconnue


Recommended Posts

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

Tre.png

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 ?!" :D

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

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