Jump to content

[Résolu] Erreur sur la perte de vie dans le script


Recommended Posts

Bon, je tiens à prévenir que j'ai cherché pendant 1h sans trouver de solutions, je pense que l'erreur est simple à corriger mais pour le moment je ne trouve pas. Voici donc le code:

addEventHandler("onClientVehicleDamage", getRootElement(), 
    function (loss) 
        local voiture = getPedOccupiedVehicle(getLocalPlayer()) 
        local joueur = getLocalPlayer() 
        local vie = getElementHealth(getLocalPlayer()) 
        fadeCamera(false, 0.2, 255, 0, 0) 
        setTimer(function () fadeCamera(true, 0.5) end, 200, 1) -- Rien de grave ici, j'ai juste rendu le script plus compacte 
        setElementHealth(joueur, vie - loss/2) -- C'est ici qu'aparaît l'erreur 
    end 
) 

C'est donc dans cette partie du script que l'erreur est, je n'ai pas tout mis car le reste du code n'a rien à voir avec l'erreur et ne comporte aucuns problèmes. En effet, j'ai voulu mettre les dégàts qu'a reçu le véhicule (divisés par 2), sur le joueur qui conduit ce même véhicule.

Ci-dessous je met le message qui s'affiche dans le debugscript (niveau 3):

ERROR: Scripts\carc.lua:163: attempt to perform arithmetic on local 'loss' (a userdata value)

Donc voilà j'ai tout dis et la ligne 163 correspond à la 8 sur le code que j'ai collé pour la raison que j'avais cité. Merci d'avance pour l'aide et puis si j'arrive à trouver avant d'avoir une réponse je le dirais.

EDIT: J'ai tenté un

tonumber() 

et là l'erreur est celle-ci:

ERROR: Scripts\carc.lua:163: attempt to perform arithmetic on a nil value
Le code au cas ou:
addEventHandler("onClientVehicleDamage", getRootElement(), 
    function (loss) 
        local voiture = getPedOccupiedVehicle(getLocalPlayer()) 
        local joueur = getLocalPlayer() 
        local vie = getElementHealth(getLocalPlayer()) 
        fadeCamera(false, 0.2, 255, 0, 0) 
        setTimer(function () fadeCamera(true, 0.5) end, 200, 1) 
        setElementHealth(joueur, vie - tonumber(loss)/2) 
    end 
) 

Edited by Guest
Link to comment
  • Moderators

L'erreur est effectivement toute simple et part d'une incompréhension sur comment les arguments sont passées à une fonction.

Le wiki de onClientVehicleDamage nous indique les arguments qui seront passée à la fonction attaché à cet event:

element theAttacker, int theWeapon, float loss, float damagePosX, float damagePosY, float damagePosZ, int tyreID 

Donc si tu déclare ta fonction comme ceci:

addEventHandler("onClientVehicleDamage", getRootElement(), 
    function (loss) 
        -- blaba 
    end 
) 

loss va donc contenir theAttacker qui est "un élément (joueur/véhicule) s'il y a effectivement un attaquant".

Ce n'est pas parce que tu as mis le même nom que le 3ème argument que tu vas la récupérer dès le 1er argument de ta fonction. Le Lua ne fait pas attention aux noms que tu donnes à tes arguments, lui il donne dans le même ordre ce que l'event lui dit de donner.

Donc pour récupérer la bonne valeur dans loss il faut faire comme ceci:

addEventHandler("onClientVehicleDamage", getRootElement(), 
    function (attacker, weapon, loss) 
        -- blaba 
    end 
) 

Et si t'es sûr de ne pas avoir besoin des 2 première valeur, tu peux faire comme ceci:

addEventHandler("onClientVehicleDamage", getRootElement(), 
    function (_, _, loss) 
        -- blaba 
    end 
) 

C'est une minuscule optimisation de mémoire qui n'est pas obligatoire et même très peu utilisée.

Pour résumer, si tu veux récupérer la valeur du 3ème argument d'un event, tu dois aussi récupérer ceux qui sont avant en respectant donc l'ordre et la position.

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