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 1
er 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: iciUne 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
bindKeyDonc je doit mettre ceci:
function startPedFire( thePlayer, key, keyState )
Mais comme je n'ai besoin que du joueur, je peux enlever le reste:
function startPedFire( thePlayer )
Voilà ce que je t'es préparé:
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