GTAOnline.net

Multi Theft Auto (mta) => Scripting MTA [Lua Center] => Discussion démarrée par: MK le 19 Décembre 2010, 19:28:19

Titre: Arme sur les véhicules
Posté par: MK le 19 Décembre 2010, 19:28:19
Salut,
Ce script est prévu pour le gameMode "race", il est destiné a fixer une arme utilisable sur le véhicule d'un joueur. (le joueur doit acheter cette fonctionnalité dans un shop)
Le script serait de type serveur.

J'ai déjà essayé plusieurs tentative mais en voila les conséquence:
-L'objet (l'arme) apparait au dessus du véhicule mais ne se fixe pas et est inutilisable.
-L'arme est fixé (sur le joueur et non sur le véhicules) mais on ne peut utiliser l'arme.

Je me suis aidé sur le wiki MTA mais je ne trouve aucune solution. J'ai vraiment essayé, mais je n'y arrive pas.
Aidez moi ;) merci.
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 19 Décembre 2010, 20:49:57
Salut MK,
Les armes que tu veux fixer sur le véhicule, ce sont les même armes que celui du "solo" ( exemple AK-47, MP5 ... )
ou alors un objet de type lance missile qu'on peut trouver dans la base secrète dans le desert de LV ?

Dans le premier cas, je te conseil d'attacher ( attachElements ) un ped invisible et de lui donner une arme le problème c'est que l'arme sera invisible aussi puisqu'il prend les propriétés du parent ( le ped ),tu as le choix entre 2 possibilités:
FACILE: Laisser l'arme transparente et faire tirer le ped lorsque le joueur appuie sur un touche ( bindKey ) [ Je verrais bien les tires partir de la calandre afin qu'il soit à la hauteur des autres voitures ]
DIFFICILE: Créer la même arme en tant qu'objet ( createObject ) et la superposer à l'arme du ped avec un attachElement sur le ped ( de très nombreux tests en perspective pour une superposition correcte sans compter qu'il faut le faire pour chaque armes disponnible )
Choix vivement conseillé: La facile  :D

Dans le 2ème cas, il faut créer le lance missile ( je dit lance missile car je ne vois que cet objet  :) ) et l'attacher sur le toit de la voiture ( si il est trop gros pour certaines voitures, tu peux toujours réduire avec setObjectScale) par contre c'est du only-client alors appelle le depuis le server avec un trigger vers tous les clients ex:
Code: (lua) [Sélectionner]
for k , i in ipairs( getElementsByType( "player" ) )do
triggerClientEvent( i, "setObjectScale", objet, 0.12 )
end
et il faut que tu code les missiles qui vont "sortir" du lance missile et même pour moi sa prendrai beaucoup de temps  :P

/!\Ne pas oublier d'enlever la collision du ped avec setElementCollisionsEnabled ( a tous les clients ) car il va provoquer des accoups sur la voiture et va mourrir :lmao /!\

Conclusion: Il faut utiliser la méthode facile du 1er cas:
-Créer un ped invisible et le faire viser droit devant lui avec une arme ( une animation non looper )
-Attacher le ped à la voiture de façon à se que l'arme ( invisible je le rappel ) dépassent de la calendre
-Faire un bindKey pour que le joueur puissent faire tirer le ped

Voilà en espérant t'avoir aidé dans la réalisation de ton système.

N'hésite pas à me poser des questions ou même de l'aide pour la réalisation
Titre: Re : Arme sur les véhicules
Posté par: MK le 20 Décembre 2010, 12:29:15
Je regarde ca.
Franchement merci pour cet réponse très bien expliqué :)

Code: (lua) [Sélectionner]
addEvent("buyWeaponl", true)
addEventHandler("buyWeaponl", getRootElement(),
function()
  local pname = getPlayerName( source )
      if ( getPlayerMoney (source) >= 150 ) then
        takePlayerMoney(source, 150 )
local x, y, z = getElementPosition ( source ) --Get the players position
local object = createPed ( 120, x, y, z+2)
attachElements ( object, source, 0, 0, 2 )
giveWeapon ( object, 28, 1 )
setElementAlpha(object, 0)

bindKey (source, "ctrl", "down", pedFire)

outputChatBox("Weapon Obtained", source, 255, 255, 0, true)
outputChatBox( "** ALERT WEAPON DETECTED **", 255, 12, 15, true )
      else
        outputChatBox("Not enough money.", source, 255, 0, 0, true)
    end
  end
)
function pedFire()
setPedOnFire ( object, true )
end



franchement, je galére.
Le bindkey ne marche pas, le ped est bien fixer sur le véhicule mais je n'arrive pas a en faire plus.
Merci de m'aider :S
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 20 Décembre 2010, 21:50:26
Salut MK,

Bon ba c'est déjà un bon début mais pour tes tests, je te conseil de commenter le setElementAlpha pour voir où il est et ce qu'il fait de plus il faudrai que tu l'attaches non pas au joueur mais au véhicule c'est une question de logique car si ton script permet au joueur de sortir de son véhicule, le ped va le suivre  :lmao.
Pour récupéré le véhicule utilisé par le joueur c'est: getPedOccupiedVehicule( thePlayer )


Ensuite, la fonction setPedOnFire ne permet pas au ped de tirer comme tu le pensais, mais de le faire prendre feu  :lmao  :lmfao. Mais heureusement, ta fonction ne peut pas marcher, parce que tu lui donnes la variable object mais en réalité c'est une variable de type local ( c'est une variable qui se détruit à la fin de la fonction ) donc object n'existe plus à ce niveau là. Tu peux la passer en globale en enlevant le 'local' devant. Mais sa serai trop beau pour que se soit la solution du problème. En effet, cette façon de faire ne marche que pour un joueur ( le dernier qui a acheté une arme ) car lorsqu'un joueur va acheter une arme, la variable object sera "remplacée" par le nouveau ped créé ( j'espère que tu as compris ce passage difficile à expliqué  :) )
Donc la solution serai de faire un setElementData comme ceci: setElementData( leVehicule, "ped", object )
Tu pourras ensuite le récupéré en faisant: getElementData( leVehicle, "ped" )
Comme ça, chaque véhicule à son ped ( à condition d'acheter une arme biensur  ::) )


Je te conseil de mettre 2 fonctions:
- Une pour faire tirer le ped ( par ex: startPedFire() )
- Une autre pour le faire arrêter de tirer ( par ex: stopPedFire() )
Car ici même lorsque le joueur aura relâcher la touche, il continuera à tirer jusqu'à ce qu'il n'est plus de munitions et même là, il continuera à appuyer sur la gâchette  :lmao. Il te faut donc un 2ème bindKey comme le 1er mais cette fois lorsqu'il relâche la touche ( bindKey (source, "ctrl", "up", stopPedFire) )


Il y a aussi un problème avec ton bindKey car la touche ctrl n'existe pas dans MTA ( J'ai laissé la faute au-dessus exprès ). En effet, tu as le choix entre rctrl ou lctrl ( autrement dit la touche ctrl de droite ou de gauche).
Liste des touches:   ici (http://wiki.multitheftauto.com/wiki/Key_names)


Une petite information complémentaire sur les bindKey, cette fonction retourne dans l'ordre:
- Le joueur qui à exécuté le bindKey
- La touche
- Le statut ( "up" ou "down" = relâché ou enfoncé )
- Des arguments que tu auras signalés dans le bindKey
Donc je doit mettre ceci:
Code: (lua) [Sélectionner]
function startPedFire( thePlayer, key, keyState )
Mais comme je n'ai besoin que du joueur, je peux enlever le reste:
Code: (lua) [Sélectionner]
function startPedFire( thePlayer )
Voilà ce que je t'es préparé:
Code: (lua) [Sélectionner]
addEvent("buyWeaponl", true)
addEventHandler("buyWeaponl", getRootElement(),
function()
local pname = getPlayerName( source ) -- Où tu utilises le nom du joueur ?
    if ( getPlayerMoney (source) >= 150 ) then
        takePlayerMoney(source, 150 )
local x, y, z = getElementPosition ( source ) --Get the players position
local object = createPed ( 120, x, y, z+2)
--------- On enlève la collision du nouveau ped pour tous les joueurs -------------------
for k , i in ipairs( getElementsByType( "player" ) )do
triggerClientEvent( i, "setElementCollisionsEnabled", object, false )
end
----------------------------------------------------------------------------------------
local veh = getPedOccupiedVehicle( source ) -- On récupère le veh utiliser par le joueur
attachElements ( object, veh, 0, 0, 2 )
giveWeapon( object, 28, 1 )
-- setElementAlpha(object, 0)
setElementData( veh, "ped", object ) -- On stock le ped "avec le véhicule"
-------------- le ctrl droit -------------------
bindKey (source, "rctrl", "down", startPedFire)
bindKey (source, "rctrl", "up", stopPedFire)
-------------- le ctrl gauche ------------------
bindKey (source, "lctrl", "down", startPedFire)
bindKey (source, "lctrl", "up", stopPedFire)

outputChatBox("Weapon Obtained", source, 255, 255, 0, true)
outputChatBox( "** ALERT WEAPON DETECTED **", 255, 12, 15, true )
      else
        outputChatBox("Not enough money.", source, 255, 0, 0, true)
    end
  end
)

function startPedFire( thePlayer )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
setControlState( thePed, "fire", true ) -- On le fait tirer
end

function stopPedFire( thePlayer )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
setControlState( thePed, "fire", false ) -- On arrête de le faire tirer
end

Voilà, je te laisses continuer  :P

EDIT: Je t'es rajouté dans le code la suppression des collision du ped pour tous les clients
EDIT2: Je précise que ce code doit être du coter server pour que cela soit synchrone avec tous les autres joueurs ( mais peut-être que tu appelles la fonction depuis le client car je vois un addEventHandler, si ce n'est pas le cas demande moi on modifiera quelque chose  ;) )

                     Citizen
Titre: Re : Arme sur les véhicules
Posté par: MK le 20 Décembre 2010, 22:14:36
merci, t'assures :p
j'édite en cas de problèmes
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 20 Décembre 2010, 22:19:09
Tu as déjà répondu !  :ohmy
J'ai fait 2 EDIT si tu ne les as pas vu

               Citizen

Titre: Re : Arme sur les véhicules
Posté par: MK le 20 Décembre 2010, 22:44:35
Citer
[2010-12-20 22:37:40] WARNING: userpanel\server.lua:124: Bad 'player' pointer @ 'setControlState'(1)
[2010-12-20 22:37:40] WARNING: userpanel\server.lua:129: Bad 'player' pointer @ 'setControlState'(1)
Il me semble être bon mais pourtant il me renvoie une erreur. j'ai vérifier sur le wiki pourtant...
et setElementAlpha(object, 0) ne rend pas le ped invisible O.o (je crois que je n'utilise pas la bonne fonction)
et j'ai aussi l'impression que giveWeapon( object, 28, 1 ) ne fonctionne pas

:/

Citer
EDIT2: Je précise que ce code doit être du coter server pour que cela soit synchrone avec tous les autres joueurs ( mais peut-être que tu appelles la fonction depuis le client car je vois un addEventHandler, si ce n'est pas le cas demande moi on modifiera quelque chose  Clin d'oeil )
J'utilise un script qui vient de mta community or, oui les fonctions sont appelé depuis le client.lua ce script était complétement bugger j'ai dut le modifier à ma sauce pour qu'il marche et maintenant j'essaye de le customiser.
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 20 Décembre 2010, 23:07:07
Mouai c'est plutôt bizarre  :wall

Essaye de mettre le giveWeapon, le setElementData et le setElementAlpha juste en-dessous de la création du ped ( je ne pense pas que sa changera mais peut-être que l'attachElement y est pour quelque chose )

Pour le ped invisible c'est bien setElementAlpha ( je l'ai déjà utilisé sur des peds ) mais vérifie qu'il n'est pas commenté comme lorsque je te l'ai filé.

Tu devrais aussi lui donner plus de munitions à ton ped:  giveWeapon( object, 28, 1000 )

Si tu as encore ces 2 erreurs, essaye de faire passer le ped par le bindKey comme ceci:
Code: (lua) [Sélectionner]
bindKey (source, "rctrl", "down", startPedFire, object)
Code: (lua) [Sélectionner]
function startPedFire( thePlayer, key, keyState, thePed )
setControlState( thePed, "fire", true ) -- On le fait tirer
end

Je te laisse faire les modifs nécessaires  sur les 3 autres bindKey et sur la 2eme fonction.

Voila sur ce je doit te laisser à demain ( vers 10h30  :P)

                  Citizen






Titre: Re : Arme sur les véhicules
Posté par: Ssk le 20 Décembre 2010, 23:39:11
Tu peut nous donner la fonction dans laquelle est appelé setControlState ?
Titre: Re : Arme sur les véhicules
Posté par: MK le 20 Décembre 2010, 23:47:46
Citer
function pedFire(source, key, keyState, thePed)
   setControlState( thePed, "fire", true ) -- On le fait tirer
end
function stopPedFire(source, key, keyState, thePed)
   setControlState( thePed, "fire", false )
end
Titre: Re : Arme sur les véhicules
Posté par: Ssk le 20 Décembre 2010, 23:50:53
Tu peut nous donner le code au moment où tu fais bindKey ?
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 21 Décembre 2010, 11:29:23
C'est la réponse #3 Sasuke,
il a copier-coller tels que je lui est donné ( du moins, c'est ce que je pense )
J'ai une question aussi, normalement on peut faire un setElementData et mettre le ped en data comme dans la réponse #2
Parce que apparemment je ne peut pas récupéré le ped ( bad pointer avec le setControlState )
A moins que...
MK ? Tu étais bien dans la voiture qui a le ped pour le faire tirer ?? Car sinon tu ne peux pas récupéré ton ped dans le code de la réponse #2
Titre: Re : Arme sur les véhicules
Posté par: MK le 21 Décembre 2010, 13:46:53
Citer
il a copier-coller tels que je lui est donné ( du moins, c'est ce que je pense )
oui et non, j'ai recopier se que j'avais besoin et j'ai essayé de comprendre.

Citer
function stopPedFire(source, key, keyState, thePed)
   setControlState( thePed, "fire", false )
end
c'est bien les paramètres qu'il fallait mettre non?

Citer
MK ? Tu étais bien dans la voiture qui a le ped pour le faire tirer ?? Car sinon tu ne peux pas récupéré ton ped dans le code de la réponse #2
De toute façon dans le mode race, on ne peut changer de voiture.

édit:
pour info j'ai réussi à le rendre invisible.
Mais je n'arrive toujours pas à le faire tirer, les informations du ped ne se transmettent pas de fonction en fonction. es ce normal?
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 21 Décembre 2010, 13:54:43
Donc setControlState ne s'utilise que sur les joueurs ( je pensais que sa faisait aussi sur les peds ), il faut utiliser setPedControlState qui est du only client donc il faut faire des triggerClientsEvent

J'ai remarqué aussi que ces 2 codes sont équivalents:

Code: (lua) [Sélectionner]
for k, i in ipairs ( getElementsByType( "player" ) ) do
triggerClientEvent( i, "lafunction", getRootElement() )
end

Code: (lua) [Sélectionner]
triggerClientEvent( getRootElement() , "lafunction", getRootElement() )
Je suis en train de faire des tests de mon coter :)

                    Citizen

Titre: Re : Arme sur les véhicules
Posté par: MK le 21 Décembre 2010, 14:25:04
dans le client:
Code: (lua) [Sélectionner]
function clientPedFire(source, key, keyState, thePed)
setPedControlState(thePed, "fire", true)
end

function clientStopPedFire(source, key, keyState, thePed)
setPedControlState(thePed, "fire", false)
end

dans le server:
function pedFire(source, key, keyState, thePed)
triggerClientEvent( getRootElement() , "clientPedFire", getRootElement() )
end
function stopPedFire(source, key, keyState, thePed)
triggerClientEvent( getRootElement() , "clientStopPedFire", getRootElement() )
end

aucune erreur s'affiche mais sa ne marche pas ^^
(comme je suis nul)
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 21 Décembre 2010, 14:43:39
Ouai c'est bien
C'est se que j'ai fait aussi.
Le problème c'est qu'il faut d'abord lui dire une "target" avec setPedAimTarget( ped, x, y, z ) et après tu peux le faire tirer
Moi je l'ai mis dans un onClientRender aux coordonnées 0, 0, 0 mais je vais faire en sorte qu'il tire tout droit ( fait appelle à la trigo)

Voilà alors moi j'ai réussi à le faire tirer mais a chaque fois il n'avait qu'une munitions même avec 99999 munitions dans le giveWeapon
Alors j'ai fait ceci:
Code: (lua) [Sélectionner]
setTimer( giveWeapon, 500, 0, ped, 28, 999999, true )
Je te passerais mon code une fois que j'aurais fini ( mais tu peux continuer si tu veux )  :P

Je pense que j'en ai plus pour très longtemps ...

                             Citizen

Titre: Re : Arme sur les véhicules
Posté par: MK le 21 Décembre 2010, 15:01:57
client:
root = getRootElement()
function target(source, thePed)
setPedAimTarget(thePed, 0,0,0)
end
addEventHandler ( "onClientRender", root, target )

server:
triggerClientEvent( getRootElement() , "target", getRootElement() )

Titre: Re : Arme sur les véhicules
Posté par: Citizen le 21 Décembre 2010, 15:14:04
Nan tu n'as pas besoin de faire un triggerClientEvent pour celui la car onClientRender est un event interne à MTA elle est exécuté à chaque render:
Si tu as par exemple 87 FPS, ta fonction sera exécutée 87 fois par secondes.

Mais il ne faut pas l'utiliser finalement car c'est du client et donc pour les autres joueurs, ton ped n'aura pas de target
Je l'ai fait comme sa du coups:
SERVER:
Code: (lua) [Sélectionner]
function updateRotationAndTarget( thePlayer )
-- outputChatBox("update")
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
---------------- Rotation ---------------------------
local rx, ry, rz = getElementRotation( veh )
setElementRotation( thePed, 0, 0, rz )
-------------------- Target -------------------------
local x, y, z = getElementPosition( thePed )
local distance = 0.1
local a = math.rad( getPedRotation(thePed) )
local x2 = x+(distance * math.deg(math.sin(-a)))
local y2 = y+(distance * math.deg(math.cos(-a)))
triggerClientEvent( getRootElement(), "setTargetPosition", getRootElement(), thePed, x2, y2, z+0.5)
end

CLIENT:
Code: (lua) [Sélectionner]
addEvent( "setTargetPosition", true )
function setTargetPosition( ped, x, y, z)
if ( ped and x and y and z ) then
setPedAimTarget( ped, x, y, z )
end
end
addEventHandler("setTargetPosition", getRootElement(), setTargetPosition)

Mais parcontre mon setElementRotation ne fonctionne pas et je n'est pourtant pas d'erreurs je poursuis mes recherches

                              Citizen

Titre: Re : Arme sur les véhicules
Posté par: MK le 21 Décembre 2010, 15:30:07
désolé mais la je suis perdu.
En plus je n'arrive toujours pas  à le faire tirer XD
et m'expliquer le passage ou tu utilise la trigo serait sympa :/
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 21 Décembre 2010, 15:50:49
Alors j'ai tiré ceci d'un script:

Code: (lua) [Sélectionner]
local x, y, z = getElementPosition( thePed )
local distance = 0.1
local a = math.rad( getPedRotation(thePed) )
local x2 = x+(distance * math.deg(math.sin(-a)))
local y2 = y+(distance * math.deg(math.cos(-a)))

Cela permet de trouver les coordonnées X, Y, Z d'un point situé à une distance donnée ( la distance ne correspond pas au mètres ) selon la rotation du personnage ( ici le ped )
Tu peux créer un marker aux coordonnées x2 et y2 et z pour voir réellement ce que sa donne et tu peux aussi jouer avec la variable distance pour voir les différences

Voilà

                     Citizen

Titre: Re : Arme sur les véhicules
Posté par: MK le 21 Décembre 2010, 16:04:26
ok merci :)
bon je vais encore essayé quelques tentatives, j'espère que ca marchera :/
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 21 Décembre 2010, 21:10:57
Bon je ne peux pas encore te donner mon code donc je t'es envoyé un PM pour savoir comment me rejoindre je pourrais te montrer se que sa donne.  :cheers
Titre: Re : Arme sur les véhicules
Posté par: Citizen le 23 Décembre 2010, 14:32:15
Après t'avoir montré le résultat je te met ici les codes lua qui ont donné le meilleur résultat:

SERVER:
Code: (lua) [Sélectionner]
curentArme = {{ID,Ammos}}
bloquer = 0
attacher = 0

addEvent("buyWeaponl", true)
function buyWeaponl( thePlayer, commandName)
if ( not getPedOccupiedVehicle( thePlayer ) ) then
return
end
local pname = getPlayerName( thePlayer )
    if ( getPlayerMoney (thePlayer) >= 150 ) then
        takePlayerMoney(thePlayer, 150 )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local x, y, z = getElementPosition ( thePlayer ) --Get the players position
local ped = createPed ( 120, x, y, z+2)
giveWeapon( ped, 28, 9999, true )
curentArme[thePlayer] = {ID=28,Ammos=500}
-- setElementAlpha(object, 0)
setElementData( veh, "ped", ped ) -- On stock le ped "avec le véhicule"
local timer = setTimer( updateRotationAndTarget, 50, 0, thePlayer)
setElementData( thePlayer, "timer", timer )
-------------- le ctrl droit -------------------
bindKey (thePlayer, "j", "down", startPedFire)
bindKey (thePlayer, "j", "up", stopPedFire)
-------------- le ctrl gauche ------------------
-- bindKey (thePlayer, "lctrl", "down", startPedFire)
-- bindKey (thePlayer, "lctrl", "up", stopPedFire)

outputChatBox("Weapon Obtained", thePlayer, 255, 255, 0)
outputChatBox( "** ALERT WEAPON DETECTED **", 255, 12, 15)
pedViser( ped, true )
faireAcroupir( ped )
      else
        outputChatBox("Not enough money.", thePlayer, 255, 0, 0)
    end
 end
addEventHandler("buyWeaponl", getRootElement(), buyWeaponl)
addCommandHandler( "buyarme", buyWeaponl, false, false )

function faireAcroupir( thePlayer )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
for k, i in ipairs ( getElementsByType( "player" ) )do
triggerClientEvent( i , "faireAcroupir", getRootElement(), thePed)
end
end

function startPedFire( thePlayer )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
for k, i in ipairs ( getElementsByType( "player" ) )do
triggerClientEvent( i , "startPedShoot", getRootElement(), thePed)
end
end

function stopPedFire( thePlayer )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
for k, i in ipairs ( getElementsByType( "player" ) )do
triggerClientEvent( i, "stopPedShoot", getRootElement(), thePed) -- On arrête de le faire tirer
end
end

function updateRotationAndTarget( thePlayer )
local veh = getPedOccupiedVehicle( thePlayer ) -- On récupère le veh utiliser par le joueur
local thePed = getElementData( veh, "ped" ) -- On récupère le ped
---------------- Rotation ---------------------------
local rx, ry, rz = getElementRotation( veh )
local x, y, z = getElementPosition( veh )
setElementRotation( thePed, 0, 0, rz )
setElementPosition( thePed, x, y, z+1 )
-------------------- Target -------------------------
local distance2 = 0.4
local a2 = math.rad( rz )
local x3 = x+(distance2 * math.deg(math.sin(-a2)))
local y3 = y+(distance2 * math.deg(math.cos(-a2)))
for k, i in ipairs ( getElementsByType( "player" ) )do
triggerClientEvent( i, "setTargetPosition", getRootElement(), thePed, x3, y3, z+0.2)
end
end

addEvent("pedViser", true )
function pedViser( thePed, bool)
for k, i in ipairs ( getElementsByType( "player" ) )do
triggerClientEvent( i, "setPedViser", getRootElement(), thePed, false)
setTimer( triggerClientEvent, 1000, 1, i, "setPedViser", getRootElement(), thePed, bool)
end
----------------------------------------
end
addEventHandler( "pedViser", getRootElement(), pedViser )

addEvent("retMunitions", true )
function retMunitions( thePlayer, thePed, bool )
local wep = curentArme[thePlayer].ID
local ammos = curentArme[thePlayer].Ammos
outputChatBox( ""..ammos )
if ( ammos <= 0) then
takeWeapon( thePed, wep )
outputChatBox( "Vous n'avez plus de munitions !", thePlayer, 200, 0, 0)
unbindKey( thePlayer, "j" )
killTimer( getElementData( thePlayer, "timer" ) )
destroyElement( thePed )
else
curentArme[thePlayer] = {ID=wep,Ammos=ammos-1}
giveWeapon( thePed, 28, 9999, true )
setWeaponAmmo( thePed, wep, 9999, 999 )
pedViser( thePlayer, bool )
end
end
addEventHandler( "retMunitions", getRootElement(), retMunitions )

CLIENT:
Code: (lua) [Sélectionner]
function onPedFire()
triggerServerEvent( "retMunitions", getLocalPlayer(), getLocalPlayer(), source, true)
end
addEventHandler("onClientPedWeaponFire", getRootElement(), onPedFire)

addEvent( "setPedViser", true )
function setPedViser( ped, bool)
if ( ped and bool ) then
setPedControlState ( ped, "aim_weapon", bool )
end
end
addEventHandler("setPedViser", getRootElement(), setPedViser)

addEvent( "setTargetPosition", true )
function setTargetPosition( ped, x, y, z)
if ( ped and x and y and z ) then
setPedAimTarget( ped, x, y, z )
end
end
addEventHandler("setTargetPosition", getRootElement(), setTargetPosition)

addEvent( "faireAccroupir", true )
function faireAccroupir( ped )
if ( ped ) then
setPedControlState ( ped, "crouch", true )
end
end
addEventHandler("faireAccroupir", getRootElement(), faireAccroupir)


addEvent( "startPedShoot", true )
function startPedShoot(ped)
setPedControlState ( ped, "fire", true )
end
addEventHandler("startPedShoot", getRootElement(), startPedShoot)

addEvent( "stopPedShoot", true )
function stopPedShoot(ped)
setPedControlState ( ped, "fire", false )
end
addEventHandler("stopPedShoot", getRootElement(), stopPedShoot)

Voila essaye de faire quelque chose avec ceci.

                              Citizen