Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
Connexion avec identifiant, mot de passe et durée de la session

 
avancée

254649 Messages dans 14035 Fils de discussion- par 6616 Membres - Dernier membre: louloufcb

21 Mai 2012 à 21:01:20
GTAOnline.frMulti Theft AutoScripting MTA [lua Center] (Modérateur: Citizen)Arme sur les véhicules
Pages: [1] 2   Bas de page
Imprimer
Auteur Fil de discussion: Arme sur les véhicules  (Lu 525 fois)
0 Membres et 1 Invité sur ce fil de discussion.
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« 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 Clin d'oeil merci.
Journalisée


Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 106


WWWtvrmntcn1

« Répondre #1 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  Très souriant

Dans le 2ème cas, il faut créer le lance missile ( je dit lance missile car je ne vois que cet objet  Sourire ) 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)
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  Tire la langue

/!\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
Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« Répondre #2 le: 20 Décembre 2010 à 12:29:15 »

Je regarde ca.
Franchement merci pour cet réponse très bien expliqué Sourire

Code: (lua)
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
« Dernière édition: 20 Décembre 2010 à 13:27:28 par MK » Journalisée


Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 106


WWWtvrmntcn1

« Répondre #3 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  LMAO. 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é  Sourire )
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  Roulement d'yeux )


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


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)
function startPedFire( thePlayer, key, keyState )

Mais comme je n'ai besoin que du joueur, je peux enlever le reste:
Code: (lua)
function startPedFire( thePlayer )

Voilà ce que je t'es préparé:
Code: (lua)
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  Tire la langue

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  Clin d'oeil )

                     Citizen
« Dernière édition: 20 Décembre 2010 à 22:16:20 par Citizen » Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« Répondre #4 le: 20 Décembre 2010 à 22:14:36 »

merci, t'assures :p
j'édite en cas de problèmes
Journalisée


Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 106


WWWtvrmntcn1

« Répondre #5 le: 20 Décembre 2010 à 22:19:09 »

Tu as déjà répondu !  homy
J'ai fait 2 EDIT si tu ne les as pas vu

               Citizen

Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« Répondre #6 le: 20 Décembre 2010 à 22:44:35 »

Citation
[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

:/

Citation
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.
« Dernière édition: 20 Décembre 2010 à 22:47:23 par MK » Journalisée


Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 106


WWWtvrmntcn1

« Répondre #7 le: 20 Décembre 2010 à 23:07:07 »

Mouai c'est plutôt bizarre  wallbash

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)
bindKey (source, "rctrl", "down", startPedFire, object)
Code: (lua)
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  Tire la langue)

                  Citizen






Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
Ssk
Développeur d'Open SA-MP
En ligne En ligne


Sous-admin
GTAOnline Legend
*

Open-SA-MP - Unlimited Experience

Messages: 3725


WWW



sasuke78200

« Répondre #8 le: 20 Décembre 2010 à 23:39:11 »

Tu peut nous donner la fonction dans laquelle est appelé setControlState ?
Journalisée






Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« Répondre #9 le: 20 Décembre 2010 à 23:47:46 »

Citation
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
Journalisée


Ssk
Développeur d'Open SA-MP
En ligne En ligne


Sous-admin
GTAOnline Legend
*

Open-SA-MP - Unlimited Experience

Messages: 3725


WWW



sasuke78200

« Répondre #10 le: 20 Décembre 2010 à 23:50:53 »

Tu peut nous donner le code au moment où tu fais bindKey ?
Journalisée






Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog
Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 106


WWWtvrmntcn1

« Répondre #11 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
« Dernière édition: 21 Décembre 2010 à 11:41:16 par Citizen » Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« Répondre #12 le: 21 Décembre 2010 à 13:46:53 »

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

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

Citation
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?
« Dernière édition: 21 Décembre 2010 à 13:48:55 par MK » Journalisée


Citizen
Scripteur LUA confirmé
Hors ligne Hors ligne


Moderateur
Grand Banditisme
*

Messages: 106


WWWtvrmntcn1

« Répondre #13 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)
for k, i in ipairs ( getElementsByType( "player" ) ) do
triggerClientEvent( i, "lafunction", getRootElement() )
end

Code: (lua)
triggerClientEvent( getRootElement() , "lafunction", getRootElement() )

Je suis en train de faire des tests de mon coter Sourire

                    Citizen

Journalisée


The rEvolution is coming ...

Créateur d'un serveur MTA RP
2 ans de scripting
"Ce n'est pas un bug mais une fonctionnalité"
MK
Mapper
Hors ligne Hors ligne

Modérateur Frag'n'Fun
GTAOnline Addict
*

GO - SFTDM

Messages: 1134


« Répondre #14 le: 21 Décembre 2010 à 14:25:04 »

dans le client:
Code: (lua)
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:
Code:
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)
Journalisée


Pages: [1] 2   Haut de page
Imprimer
Aller à:  

Theme créé par padexx et modifié par GTAOnline.fr
Page générée en 0.34 secondes avec 25 requêtes.
Forum GTAOnline.fr 2.0 | Design par : Lalu et GtaManiac
Merci a toute la communaute pour son support !
Copyright © 2004-2012 - GTAOnline.fr | GTAPro.com | Contact