Valentin3526 Posted September 12, 2015 Share Posted September 12, 2015 (edited) 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 October 16, 2015 by Guest Link to comment
Moderators Citizen Posted September 12, 2015 Moderators Share Posted September 12, 2015 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
Valentin3526 Posted September 12, 2015 Author Share Posted September 12, 2015 Merci beaucoup, c'est vrais que comme je n'utilise que rarement les arguments je n'avais pas remaqué cette erreur. Merci encore une fois 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