Jump to content

Objet


Recommended Posts

Salut ma2med,

Tu peux utiliser la fonction suivante :

  
createObject 
  

La fonction prend quatre arguments principaux : l'Id de l'objet, l'abscisse, l'ordonnée et la cote du point où l'objet est créé ( qui sont trois arguments )

Vu que tu sembles nouveau, je vais t'aider un peu ! Lis bien le code, et assimile le. Il n'y a rien de compliquer.

  
-- On déclare la fonction qui prend comme argument le joueur qui effectue la commande, et la commande en elle même 
function addObjectHandler( player, command )  
    local x, y, z = getElementPosition( player ) -- On recupère la position du joueur 
    x = x + 2 -- On augmente l'abscisse de deux pour que l'objet soit créé à proximité du joueur 
    createdObject = createObject( 520, x, y, z ) -- On prend 520 pour l'exemple mais tu peux prendre l'ID de l'objet que tu veux 
    if createdObject then -- Si l'objet a correctement été créé, alors ... 
      outputChatBox(  "Vous avez créé un objet à proximité de votre position ! ", player ) -- On envoie un message au joueur 
    else -- Sinon ...  
      outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) -- On l'informe que l'objet n'a pas pu être créé  
    end 
end 
addCommandHandler( "addobject", addObject ) 
  

Si tu as des questions, n'hésite pas !

Link to comment
Salut ma2med,

Tu peux utiliser la fonction suivante :

  
createObject 
  

La fonction prend quatre arguments principaux : l'Id de l'objet, l'abscisse, l'ordonnée et la cote du point où l'objet est créé ( qui sont trois arguments )

Vu que tu sembles nouveau, je vais t'aider un peu ! Lis bien le code, et assimile le. Il n'y a rien de compliquer.

  
-- On déclare la fonction qui prend comme argument le joueur qui effectue la commande, et la commande en elle même 
function addObjectHandler( player, command )  
    local x, y, z = getElementPosition( player ) -- On recupère la position du joueur 
    x = x + 2 -- On augmente l'abscisse de deux pour que l'objet soit créé à proximité du joueur 
    createdObject = createObject( 520, x, y, z ) -- On prend 520 pour l'exemple mais tu peux prendre l'ID de l'objet que tu veux 
    if createdObject then -- Si l'objet a correctement été créé, alors ... 
      outputChatBox(  "Vous avez créé un objet à proximité de votre position ! ", player ) -- On envoie un message au joueur 
    else -- Sinon ...  
      outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) -- On l'informe que l'objet n'a pas pu être créé  
    end 
end 
addCommandHandler( "addobject", addObject ) 
  

Si tu as des questions, n'hésite pas !

Merci d'avoir répondu aussi vite mais, quand je crée l'objet, il se crée pas toujours devant moi, en faite cela depend de la rotation du joueur.

Link to comment
Oui, après à toi de faire des calculs mathématiques pour ajuster en fonction de la rotation :)
  
getElementPosition 
getElementRotation 
  

... devraient t'aider

Désolé je sais rien dans le script silteplait aide moi pour le faire devant le joueur, j'ai vu sa dans un server. :|

Link to comment
  • Moderators

Il faut faire un calcul de trigonométrie en utilisant la position actuelle, la rotation pour donner la direction vers laquelle on va éloigné l'objet, ainsi que la distance qui doit séparer les 2 positions.

Merci à la communauté qui fournit cette fonction:

https://wiki.multitheftauto.com/wiki/Get ... ceRotation

--lien de la fonction [url=https://wiki.multitheftauto.com/wiki/GetPointFromDistanceRotation]https://wiki.multitheftauto.com/wiki/Get ... ceRotation[/url] 
function getPointFromDistanceRotation(x, y, dist, angle) 
    local a = math.rad(90 - angle); 
    local dx = math.cos(a) * dist; 
    local dy = math.sin(a) * dist; 
    return x+dx, y+dy; 
end 
  
  
function spawnBarrel( player ) 
    local x, y, z = getElementPosition( player ) -- On recupère la position du joueur 
  
    -- On modifie la position pour que notre barril soit en face du joueur: 
    x, y = getPointFromDistanceRotation(x, y, 5, 0) 
  
    local barrel = createObject( 1225, x, y, z ) 
    if barrel then -- Si le barril a correctement été créé, alors ... 
      outputChatBox( "Vous avez créé un objet en face de vous !", player ) 
    else -- Sinon ... 
      outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) 
    end 
end 
addCommandHandler( "barril", spawnBarrel ) 

Tape /barril et admire :D

Pour bien comprendre son fonctionnement (en gros quoi), je te conseil de jouer un peu avec les valeurs en modifiant le 5 (=5m dans le jeu) et 0 (=droit devant).

Link to comment
Il faut faire un calcul de trigonométrie en utilisant la position actuelle, la rotation pour donner la direction vers laquelle on va éloigné l'objet, ainsi que la distance qui doit séparer les 2 positions.

Merci à la communauté qui fournit cette fonction:

https://wiki.multitheftauto.com/wiki/Get ... ceRotation

--lien de la fonction [url=https://wiki.multitheftauto.com/wiki/GetPointFromDistanceRotation]https://wiki.multitheftauto.com/wiki/Get ... ceRotation[/url] 
function getPointFromDistanceRotation(x, y, dist, angle) 
    local a = math.rad(90 - angle); 
    local dx = math.cos(a) * dist; 
    local dy = math.sin(a) * dist; 
    return x+dx, y+dy; 
end 
  
  
function spawnBarrel( player ) 
    local x, y, z = getElementPosition( player ) -- On recupère la position du joueur 
  
    -- On modifie la position pour que notre barril soit en face du joueur: 
    x, y = getPointFromDistanceRotation(x, y, 5, 0) 
  
    local barrel = createObject( 1225, x, y, z ) 
    if barrel then -- Si le barril a correctement été créé, alors ... 
      outputChatBox( "Vous avez créé un objet en face de vous !", player ) 
    else -- Sinon ... 
      outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) 
    end 
end 
addCommandHandler( "barril", spawnBarrel ) 

Tape /barril et admire :D

Pour bien comprendre son fonctionnement (en gros quoi), je te conseil de jouer un peu avec les valeurs en modifiant le 5 (=5m dans le jeu) et 0 (=droit devant).

Merci d'avoir répondu mais, cela donne le même resultat que TheCapn ma donner. ( Ce n'est pas toujours en face du joueur )

Link to comment
  • Moderators

Ah ouai excuse moi, j'ai confondu avec ma fonction perso pour laquelle je n'ai pas besoin de donner la rotation (mais l'élément). Enfin peu importe, revoilà le code:

--lien de la fonction [url=https://wiki.multitheftauto.com/wiki/Get]https://wiki.multitheftauto.com/wiki/Get[/url] ... ceRotation 
function getPointFromDistanceRotation(x, y, dist, angle) 
    local a = math.rad(90 - angle); 
    local dx = math.cos(a) * dist; 
    local dy = math.sin(a) * dist; 
    return x+dx, y+dy; 
end 
  
  
function spawnBarrel( player ) 
    local x, y, z = getElementPosition( player ) -- On recupère la position du joueur 
  
    local _, _, rz = getElementRotation( player ) --On doit donner la rotation du joueur 
  
    -- On modifie la position pour que notre barril soit en face du joueur donc on l'a récupère 
    x, y = getPointFromDistanceRotation(x, y, 5, rz) 
  
    local barrel = createObject( 1225, x, y, z ) 
    if barrel then -- Si le barril a correctement été créé, alors ... 
      outputChatBox( "Vous avez créé un objet en face de vous !", player ) 
    else -- Sinon ... 
      outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) 
    end 
end 
addCommandHandler( "barril", spawnBarrel ) 

Link to comment
Ah ouai excuse moi, j'ai confondu avec ma fonction perso pour laquelle je n'ai pas besoin de donner la rotation (mais l'élément). Enfin peu importe, revoilà le code:
--lien de la fonction [url=https://wiki.multitheftauto.com/wiki/Get]https://wiki.multitheftauto.com/wiki/Get[/url] ... ceRotation 
function getPointFromDistanceRotation(x, y, dist, angle) 
    local a = math.rad(90 - angle); 
    local dx = math.cos(a) * dist; 
    local dy = math.sin(a) * dist; 
    return x+dx, y+dy; 
end 
  
  
function spawnBarrel( player ) 
    local x, y, z = getElementPosition( player ) -- On recupère la position du joueur 
  
    local _, _, rz = getElementRotation( player ) --On doit donner la rotation du joueur 
  
    -- On modifie la position pour que notre barril soit en face du joueur donc on l'a récupère 
    x, y = getPointFromDistanceRotation(x, y, 5, rz) 
  
    local barrel = createObject( 1225, x, y, z ) 
    if barrel then -- Si le barril a correctement été créé, alors ... 
      outputChatBox( "Vous avez créé un objet en face de vous !", player ) 
    else -- Sinon ... 
      outputChatBox( "Votre objet n'a pas pu être créé ! ", player ) 
    end 
end 
addCommandHandler( "barril", spawnBarrel ) 

Toujours parreille, merci quand même.

Link to comment
  • Moderators

Ok tu peux l'enlever, et t'es sûr que le barril ne suit pas ta rotation (même s'il est pas en face de toi comme tu le souhaites) ?

Car s'il apparaît toujours derrière toi, il suffit d'ajouter 180 degrés à rz en le passant à la fonction.

Là concrètement il apparaît où par rapport à ton joueur ?

Link to comment
Ok tu peux l'enlever, et t'es sûr que le barril ne suit pas ta rotation (même s'il est pas en face de toi comme tu le souhaites) ?

Car s'il apparaît toujours derrière toi, il suffit d'ajouter 180 degrés à rz en le passant à la fonction.

Là concrètement il apparaît où par rapport à ton joueur ?

En fait, le barril a la même rotation que moi, mais il n'apparait pas devant moi, et il n'est pas toujours derriére moi, si ma rotation est de 0, donc il seras devant moi par contre si c'est 180 il seras derriére moi un truc comme sa.

Link to comment
  • Moderators

Ouai je m'emmêle les pinceaux depuis que getPedRotation est passé en deprecated.

Modifie la ligne 13 et 14 pour avoir ça:

    local rx, ry, rz = getElementRotation( player ) --On doit donner la rotation du joueur 
    outputChatBox("rx: "..rx..", ry: "..ry..", rz: "..rz) 

Et donne moi ce que ça affiche dans la chatbox.

En fait les axes X, Y, Z ne sont pas les même entre les objets/vehicules que les joueurs/bots et donc je pense que ce n'était pas rz qu'il fallait donner à getPointFromDistanceRotation.

Au pire test les 2 autres (rx et ry) et voit si l'un d'eux marche.

Il se peux aussi que la rotation soit inversé d'après ce que je lis sur le wiki donc essaye aussi avec -rz, -ry et -rz.

En tout cas y en a forcément une des 6 possibilités qui marche correctement (et une autre qui fonctionnera à l'envers).

Link to comment
Ouai je m'emmêle les pinceaux depuis que getPedRotation est passé en deprecated.

Modifie la ligne 13 et 14 pour avoir ça:

    local rx, ry, rz = getElementRotation( player ) --On doit donner la rotation du joueur 
    outputChatBox("rx: "..rx..", ry: "..ry..", rz: "..rz) 

Et donne moi ce que ça affiche dans la chatbox.

En fait les axes X, Y, Z ne sont pas les même entre les objets/vehicules que les joueurs/bots et donc je pense que ce n'était pas rz qu'il fallait donner à getPointFromDistanceRotation.

Au pire test les 2 autres (rx et ry) et voit si l'un d'eux marche.

Il se peux aussi que la rotation soit inversé d'après ce que je lis sur le wiki donc essaye aussi avec -rz, -ry et -rz.

En tout cas y en a forcément une des 6 possibilités qui marche correctement (et une autre qui fonctionnera à l'envers).

Sa affiche:

rx: 0, ry: 0, rz: 270.38589477539 
It works 
Vous avez créé un objet en face de vous ! 

Link to comment
  • Moderators

ah cool on a enfin trouvé :D

Donc juste pour bien retenir, pour les véhicules et les objets, c'est bien la 3ème rotation alors que pour les joueurs/bot c'est l'inverse de la 3ème rotation ^^

Bon codage !

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