ma2med Posted May 15, 2014 Share Posted May 15, 2014 Bonjour, j'aimerais avoir de l'aide car j'aimerais crée un objet juste en face du joueur qui le crée mais je ne sais pas comment faire silvousplait aidez moi Merci d'avance. Link to comment
TheCapn Posted May 15, 2014 Share Posted May 15, 2014 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
ma2med Posted May 15, 2014 Author Share Posted May 15, 2014 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
TheCapn Posted May 15, 2014 Share Posted May 15, 2014 Oui, après à toi de faire des calculs mathématiques pour ajuster en fonction de la rotation getElementPosition getElementRotation ... devraient t'aider Link to comment
ma2med Posted May 15, 2014 Author Share Posted May 15, 2014 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 Citizen Posted May 15, 2014 Moderators Share Posted May 15, 2014 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 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
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 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 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 Citizen Posted May 16, 2014 Moderators Share Posted May 16, 2014 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
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 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 Citizen Posted May 16, 2014 Moderators Share Posted May 16, 2014 Heuuu rajoute ça à la ligne 17 : outputChatBox("It works") et dit moi si "It works" s'affiche dans ta console lorsque tu tapes la commande. Link to comment
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 Heuuu rajoute ça à la ligne 17 : outputChatBox("It works") et dit moi si "It works" s'affiche dans ta console lorsque tu tapes la commande. Oui, cela s'affiche. Link to comment
Moderators Citizen Posted May 16, 2014 Moderators Share Posted May 16, 2014 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
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 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 Citizen Posted May 16, 2014 Moderators Share Posted May 16, 2014 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
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 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 Citizen Posted May 16, 2014 Moderators Share Posted May 16, 2014 Ok donc c'est bien rz, essaye de donner l'inverse du rz: x, y = getPointFromDistanceRotation(x, y, 5, -rz) Si ça ne marche pas, je testerai chez moi en rentrant (ce soir). Link to comment
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 Ok donc c'est bien rz, essaye de donner l'inverse du rz: x, y = getPointFromDistanceRotation(x, y, 5, -rz) Si ça ne marche pas, je testerai chez moi en rentrant (ce soir). Parfait, merci infiniment Link to comment
Moderators Citizen Posted May 16, 2014 Moderators Share Posted May 16, 2014 ah cool on a enfin trouvé 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
ma2med Posted May 16, 2014 Author Share Posted May 16, 2014 ah cool on a enfin trouvé 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 ! Ok, merci Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now