• 19 Avril 2024, 19:36:43


Auteur Sujet: Arme sur les véhicules  (Lu 4759 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Arme sur les véhicules
« Réponse #15 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

The rEvolution is coming ...

Hors ligne MK

  • *
  • Gangster
  • Messages: 1844
    • Voir le profil
Re : Arme sur les véhicules
« Réponse #16 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() )


Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Arme sur les véhicules
« Réponse #17 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

The rEvolution is coming ...

Hors ligne MK

  • *
  • Gangster
  • Messages: 1844
    • Voir le profil
Re : Arme sur les véhicules
« Réponse #18 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 :/

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Arme sur les véhicules
« Réponse #19 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

The rEvolution is coming ...

Hors ligne MK

  • *
  • Gangster
  • Messages: 1844
    • Voir le profil
Re : Arme sur les véhicules
« Réponse #20 le: 21 Décembre 2010, 16:04:26 »
ok merci :)
bon je vais encore essayé quelques tentatives, j'espère que ca marchera :/

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Arme sur les véhicules
« Réponse #21 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
The rEvolution is coming ...

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Arme sur les véhicules
« Réponse #22 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



The rEvolution is coming ...