Jump to content

Besoin d'aide sur un script.


Recommended Posts

Bonjour,

Ayant fait un script basé sur un MoveObject, donc pour ouvrir un portail, j'ai remarqué que la commande pouvait être effectué n'importe ou, par exemple la grille est a SF et le joueur tappant la commande a LS, il pourras l'ouvrir quand même.

Donc j'aimerai savoir comment pourrai-je faire pour que le joueur puissent l'ouvrir que lorsqu'il est devait le portail a tel et tel zones.

Et lorsque qu'il soit a LS, sa lui envoie un message outPutChatBox, vous n'êtes pas devant le portail.

Voici mon script:

local gate = createObject ( 980, -1364.5552978516, -517.26147460938, 15.5, 0, 0, 298.96350097656 ) 
local state = false 
  
addCommandHandler ( "gr", 
    function ( thePlayer ) 
            if ( not state ) then 
            outputChatBox("Gate open",thePlayer, 0,166,237,true) 
                moveObject ( gate, 2500, -1364.5552978516, -517.26147460938, 22, 0, 0, 0 ) 
            else 
                moveObject ( gate, 2500, -1364.5552978516, -517.26147460938, 15.5, 0, 0, 0 ) 
            outputChatBox("Gate close",thePlayer, 143,0,0,true) 
            end 
            state = ( not state ) 
        end 
    end 
) 

Link to comment
  • Moderators

Bonjour RoRo76,

Pour commencer, ce script ne peut pas fonctionner tel que tu nous l'a collé car il y a un end en trop.

Tu as peut être supprimé un if au-dessus de if ( not state ) then qu'on ne devait pas voir ou parce que c'était un test.

Je vais le laisser parce qu'on va effectivement rajouter un if au-dessus donc ça évitera de replacer le end en bas parce que les codeurs sont flemmards :)

Pour résoudre ton problème, il suffit juste de calculer la distance qui sépare le joueur tapant la commande et le portail.

Pour cela rien de plus facile, il te faut:

- getter la position x, y, z du joueur

- getter la position x, y, z du portail

- calculer la distance entre ces 2 positions

- ajouter un if pour vérifier que cette distance soit inférieur à une distance que tu auras définit.

local gate = createObject ( 980, -1364.5552978516, -517.26147460938, 15.5, 0, 0, 298.96350097656 ) 
local state = false 
  
addCommandHandler ( "gr", 
    function ( thePlayer ) 
        local px, py, pz = getElementPosition(thePlayer) -- Position du joueur 
        local gx, gy, gz = getElementPosition(gate) -- Position de la gate 
        local distance = getDistanceBetweenPoints3D(px, py, pz, gx, gy, gz) -- Calcul de la distance 
        if ( distance <= 20 ) -- Check si cette distance est inférieur à 20 (j'ai mis 20 mais tu peux évidemment changer) 
            if ( not state ) then 
                outputChatBox("Gate open", thePlayer, 0, 166, 237) 
                moveObject ( gate, 2500, -1364.5552978516, -517.26147460938, 22, 0, 0, 0 ) 
            else 
                moveObject ( gate, 2500, -1364.5552978516, -517.26147460938, 15.5, 0, 0, 0 ) 
                outputChatBox("Gate close", thePlayer, 143, 0, 0) 
            end 
            state = ( not state ) 
        else 
            outputChatBox("You are too far to open the gate !", thePlayer, 143, 0, 0) -- Erreur que je ne pense pas nécessaire 
        end 
    end 
) 

Par rapport au message d'erreur s'il est trop loin, je ne pense pas que ce soit une bonne idée de l'afficher parce que lorsque tu auras 20+ gates, le joueur se fera spammer dans la chatbox. Soit il te faudra trouver une solution pour qu'il ne s'affiche qu'une fois, soit tu le supprimes carrément, ce qui ne me choquerait pas en tant que joueur.

Aussi, j'ai vu que tu mettais true en dernier argument de tes outputChatBox mais cela ne sert que si tu veux faire utiliser des "colorCodes" dans ton message pour l'afficher avec plusieurs couleurs différentes dedans. Exemple (provenant du wiki d'ailleurs):

outputChatBox ( "#FF0000Hello #00FF00World", getRootElement(), 255, 255, 255, true ) 

ce qui affichera: Hello World dans la chatbox, ce qui n'est pas possible de faire avec les arguments r, g et b de la fonction.

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