Jump to content

[Résolu] J'ai du mal sur mon script police


Recommended Posts

Bonjour, je revient en force avec (encore) une demande d'aide :o J'ai commencé ce mation à scripter un système d'indice de recherche bien spécial mais j'ai du mal sachant que j'avais arrêté de scripter en LUA pendent un petit moment. Bref, revenons à la source du problème, d'abord le script, ensuite l'explication !

--PEDS-- 
function pedCopLS ( name ) 
    createPed (  280, 1544.3, -1632, 13.4, 270 ) --(garde) 
end 
addEventHandler ( "onResourceStart", getResourceRootElement(), pedCopLS) 
  
--CONFIG PEDS-- 
function gunCopCty ( name ) 
    --LS 
    setPedWeaponSlot ( name, 3, 1) 
    setPedWeaponSlot ( name, 22, 2) 
end 
addEventHandler ( "onResourceStart", getResourceRootElement(), gunCopCty) 
  
function deadCopCty ( thePlayer, name ) 
    if ( isPedDead ( name ) ) then 
        local level = getPlayerWantedLevel ( thePlayer ) 
        if ( level > 2 ) then 
            setPlayerWantedLevel ( theplayer, 3 ) 
        if ( level > 3 ) then 
            cancelEvent() 
        else 
            setPlayerWantedLevel ( thePlayer, 2 ) 
        end 
        end  
    end 
end 
addEventHandler ( "onPedWasted", name, deadCopCty) 

Voilà pour le script, donc mon problème est que sur le mode debug 3 erreurs sont détéctés celles-ci:

function gunCopCty ( name ) 
    --LS 
    setPedWeaponSlot ( name, 3, 1) -- Une erreur, au 1er argument donc "name" 
    setPedWeaponSlot ( name, 22, 2) -- La même erreur sur celui-ci 
end 

function deadCopCty ( thePlayer, name ) 
    if ( isPedDead ( name ) ) then 
        local level = getPlayerWantedLevel ( thePlayer ) 
        if ( level > 2 ) then 
            setPlayerWantedLevel ( theplayer, 3 ) 
        if ( level > 3 ) then 
            cancelEvent() 
        else 
            setPlayerWantedLevel ( thePlayer, 2 ) 
        end 
        end  
    end 
end 
addEventHandler ( "onPedWasted", name, deadCopCty) -- l'erreur est ici, 2ème argument (toujours "name") 

Je tiens à préciser que j'ai fait ce script à l'aide de mes aquis et du wiki, le problème vient sans doute de mes "aquis" puisque le wiki ne devrait pas avoir d'erreur dans ses scripts

donc voilà, je ne sais pas pourquoi ce fameux "name" est reconnu entant que "Bad argument" mais une petite explication serait la bienvenue puisque j'ai beau chercher, je ne trouve pas...

PS: si il y a plus de fautes que d'habitude, c'est à cause de la fatigue qui m'a pris en traitre !

Edited by Guest
Link to comment
  • Moderators

Bonjour dfigfjf,

Il y a des erreurs dans ton script qu'on ne doit normalement plus faire si on a suivi de façon attentive les tutoriels (disponible en français) sur le wiki.

Anglais: https://wiki.multitheftauto.com/wiki/Scr ... troduction

Français: https://wiki.multitheftauto.com/wiki/FR/ ... grammation

Je parle notamment de ta variable name que tu essayes d'utiliser un peut partout. Cette variable n'existe pas dans ton code, ce qui provoque les erreurs.

Voici ma version corrigée avec le maximum de commentaires pour que tu comprennes bien:

--PEDS-- 
function pedCopLS ( startedResource ) -- onResourceStart donne à la fonction la ressource qui démarre et non pas le ped que tu vas créer dans cette fonction 
    --LS 
    local garde = createPed (  280, 1544.3, -1632, 13.4, 270 ) --(garde) 
    setElementData( garde, "pedtType", "garde" ) -- on demande à ce ped de retenir pour nous le mot "garde" sous le nom "pedType" 
    setPedWeaponSlot ( garde, 3, 1) 
    setPedWeaponSlot ( garde, 22, 2) 
end 
addEventHandler ( "onResourceStart", getResourceRootElement(), pedCopLS) 
  
function deadCopCty ( totalAmmo, killer, killerWeapon, bodypart, stealth ) 
    local deadPed = source -- le ped qui est mort est la source de l'event 
    local pedType = getElementData( deadPed, "pedType" ) -- on demande au ped mort de nous rappeler le mot qu'on lui a peut-être demandé de retenir sous le nom "pedType". 
    if ( pedType == "garde" ) then -- s'il nous réponds "garde" alors ça veut dire que le ped mort était un garde. 
        local level = getPlayerWantedLevel ( killer ) 
        if ( level == 0 ) then -- s'il n'est pas encore recherché 
            setPlayerWantedLevel ( killer, 2 ) -- le tueur du ped se prends 2 étoiles d'un seul coup 
        else if ( level == 2 ) then -- s'il a déjà 2 étoiles 
            setPlayerWantedLevel ( killer, 3 ) -- il s'en prends une 3ème (qui est le maximum d'étoiles qui peut se prendre en tuant des gardes) 
        end 
    end 
end 
addEventHandler ( "onPedWasted", getRootElement(), deadCopCty) -- ici on utilise getRootElement pour dire que tout le monde peut déclencher la fonction deadCopCty si onPedWasted est déclenché sur lui. 
-- Mais comme onPedWasted n'est déclenché que sur les peds, deadCopCty sera déclenché si n'importe quel ped meurt. 
-- Question: Oui mais moi je veux que deadCopCty se déclenche que si c'est un garde ! 
-- Réponse: Bonne remarque mais c'est pour ça qu'on vérifie que l'elementdata "pedType" soit bien égal à "garde", sinon on ne fait rien. 
  

Le tutoriel explique très bien les bases de la programmation sur MTA avec l'explication du fonctionnement des events et des elementdatas qu'on a utilisé ici.

N'hésite pas à demander des explications supplémentaires.

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