Voici ce qui ne marche pas :
- Comme l'a dit Malppower, il faut mettre les corrdonnées finales dans la fonction
MoveObject, pas le déplacement relatif.
- Tu fais une boucle sur tous les joueurs il serait bien de faire un premier test sur
IsPlayerConnected qui éviterais de faire des tests sur des joueurs qui n'existent pas
- Dans ta boucle, tu modifies la position du mur en fonction de la position d'un joueur. Mais que va-t-il se passer si tu as deux joueurs admins et que l'un est dans la zone et pas l'autre ? Si le joueur 3 est admin et dans le zone, tu vas bouger le mur en position ouverte quand ta boucle traitera le joueur 3. Si en même temps, le joueur 26 est admin et en dehors de la zone, que ta boucle traitera le joueur 26, tu vas bouger le mur en position fermée !! (Et si il y a d'autres admin ton mur risque de ressembler à un yoyo.
La solution, c'est de ne pas bouger le mur dans la zone mais une seule fois à la fin (et en dehors) de la boucle. Et la boucle ne sert qu'à déterminer si il y a au moins un admin dans la zone (pour savoir si on doit ouvrir ou fermer le mur).
- La variable
avert doit être déclarée sous forme de tableau sinon, d'un joueur à l'autre sa valeur va changer dans la boucle (même principe qu'expliqué précédement).
- Le mieux c'est de téléporter les joueurs non-admins en dehors de la zone lorsqu'ils sont dedans.
Je te propose donc une correction :
http://pastebin.gtaonline.fr/pastebin.php?show=291 masi le mieux c'est que tu essaies de le faire toi-même.
NB : Je n'ai pas testé ce bout de code, je te laisse le soin de le corriger si besoin mais n'hésite pas à poser des questions.
PS : Et effectivement, vérifies les Min et les Max dans tes appels à la fonction
IsPlayerInArea comme te l'as dit Malppower.
++Syg