Ea7gign Posted February 7, 2018 Share Posted February 7, 2018 (edited) Bonjours, j'aimerais créer un script qui permet de bouger des cibles, j'aimerais savoir comment je peut faire pour que le mouvement soit infini, et que l'on puisse le stopper avec une commande. Je voulais le faire avec des timers, mais le script sera trop long. Voilà le code: function bougerCible() if moveCibles == 0 then moveObject( cible1, 5000, 2575.3, -2389.8, 881.40002) setTimer(moveObject, 10000, 1, cible1, 5000, 2568.3, -2389.8, 881.40002) setTimer(moveObject, 10000, 1, cible1, 5000, 2560.3, -2389.8, 881.40002) --moveObject( cible2, 1000, 2576, -2393.2, 881.40002) --moveObject( cible3, 1000, 2571.7, -2395.7, 881.40002) --moveObject( cible4, 1000, 2562.6001, -2391, 881.40002) --moveObject( cible5, 1000, 2567.3, -2392.1001, 881.40002) --moveObject( cible6, 1000, 2561, -2397.8999, 881.40002) moveCibles = moveCibles + 1 -- Test elseif moveCibles == 1 then -- moveObject( cible1, 5000, 2568.3, -2389.8, 881.40002) -- moveCibles = moveCibles - 1 end end addCommandHandler("bougercibles", bougerCible) addCommandHandler("movecibles", bougerCible) Edited February 7, 2018 by Citizen Merci de sélectionner Lua comme coloration syntaxique Link to comment
Wumbaloo Posted February 7, 2018 Share Posted February 7, 2018 Je te propose d'utiliser un onClientRender si tu utilise ce script en client et tu met à jour la position à chaque loop de la fonction, avec un booléan qui vas servir de direction pour l'élément, en gros, s'il est sur false ton élément ira vers la gauche et à l'inverse, s'il est sur true il ira vers la droite. A la fin de tout ça, soit tu fais un "removeEventHandler" pour supprimer le mouvement de tes cibles, ou tu fais un autre booléan qui return au début de ta fonction pour "freeze" le tout. Tu veux un exemple? En serveur ou en client ? Link to comment
Ea7gign Posted February 8, 2018 Author Share Posted February 8, 2018 Ouais, je veut bien un exemple, pour ce script, le mieux c'est en server, ou client ? Link to comment
Wumbaloo Posted February 11, 2018 Share Posted February 11, 2018 Désolé de la réponse tardive Ça dépend, si tu veux qu'il soit synchroniser entre les joueurs ou juste pour le joueur (en local) Link to comment
Ea7gign Posted February 12, 2018 Author Share Posted February 12, 2018 Pour tous les joueurs, donc en server. Link to comment
Wumbaloo Posted February 12, 2018 Share Posted February 12, 2018 Tiens je t'ai rédigé cet exemple, il fonctionne en jeu, je t'ai ajouté quelques commentaire si tu as besoin de savoir pourquoi j'ai écris telle ou telle chose, dit le moi je t'expliquerai. Tu n'as plus qu'à le tester, ajouter des objets, changer les positions et jouer avec les timer du "moveObject" la j'ai mis une petite opération qui fait un mouvement différent entre les deux objets. objects = { -- [index] = object } function startResource() local object1 = createObject(1700, 0, 0, 2) setElementData(object1, "direction", true) local object1X, object1Y, object1Z = getElementPosition(object1) setElementData(object1, "start:X", object1X) setElementData(object1, "start:Y", object1Y) setElementData(object1, "start:Z", object1Z) setElementData(object1, "end:X", 10) setElementData(object1, "end:Y", 0) setElementData(object1, "end:Z", 2) setElementData(object1, "moving", false) table.insert(objects, object1) local object2 = createObject(1800, 5, 0, 2) setElementData(object2, "direction", true) local object2X, object2Y, object2Z = getElementPosition(object2) setElementData(object2, "start:X", object2X) setElementData(object2, "start:Y", object2Y) setElementData(object2, "start:Z", object2Z) setElementData(object2, "end:X", 15) setElementData(object2, "end:Y", 0) setElementData(object2, "end:Z", 2) setElementData(object2, "moving", false) table.insert(objects, object2) setTimer(verifierCiblePosition, 3000, 0) -- Faire de même avec les différentes cibles end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), startResource) function verifierCiblePosition() for key, cible in pairs(objects) do if (isElement(cible)) then -- On vérifie si la cible existe if (getElementData(cible, "direction")) then -- Si la direction est "true" -- On dit que "true" c'est vers la droite local endX = getElementData(cible, "end:X") local endY = getElementData(cible, "end:Y") local endZ = getElementData(cible, "end:Z") local cibleX, cibleY, cibleZ = getElementPosition(cible) if (cibleX >= endX and cibleZ >= endZ) then setElementData(cible, "direction", false) -- On change de direction setElementData(cible, "moving", true) -- Il est en mouvement local startX = getElementData(cible, "start:X") local startY = getElementData(cible, "start:Y") local startZ = getElementData(cible, "start:Z") moveObject(cible, 3000*key/2, startX, startY, startZ) else if (not getElementData(cible, "moving")) then -- On vérifie s'il ne bouge pas, de le faire bouger moveObject(cible, 3000*key/2, endX, endY, endZ) end end else -- On dit que "false" c'est vers la gauche local endX = getElementData(cible, "end:X") local endY = getElementData(cible, "end:Y") local endZ = getElementData(cible, "end:Z") local cibleX, cibleY, cibleZ = getElementPosition(cible) if (cibleX <= endX and cibleZ <= endZ) then setElementData(cible, "direction", true) -- On change de direction setElementData(cible, "moving", true) -- Il est en mouvement moveObject(cible, 3000*key/2, endX, endY, endZ) else if (not getElementData(cible, "moving")) then -- On vérifie s'il ne bouge pas, de le faire bouger moveObject(cible, 3000*key/2, endX, endY, endZ) end end end end end end Link to comment
Gordon_G Posted February 12, 2018 Share Posted February 12, 2018 Par contre... Le CPU va vraiment être surchargé hein, getElementData va synchroniser entre tous les joueurs du côté serveur ET client, du coup créer autant d'elementdata ça peut créer du lag. Moi je te conseillerais plutôt de le faire avec une table, je ferai un exemple ce soir. Link to comment
Wumbaloo Posted February 12, 2018 Share Posted February 12, 2018 Ouais j'avais commencé avec des tables puis pour que ce soit plus clair pour un débutant j'ai fais via elementData Au début j'ai mis ces lignes là pour donner un visuel de la structure de la table : objects = { -- [index] = object } En réunissant tout dans une table, ta structure pourrait ressembler à celle-ci: objects = { -- [index] = {object, direction=false, startPosition={0, 0, 0}, endPosition={0, 0, 0}, moving=false} } Link to comment
Wumbaloo Posted February 12, 2018 Share Posted February 12, 2018 Tiens, voici la version avec les table, j'ai mis en commentaire ce qui ne servait plus comme ça tu peux voir les changements. objects = { -- [index] = {object, direction=false, startPosition={0, 0, 0}, endPosition={0, 0, 0}, moving=false}, } function startResource() local object1 = createObject(1700, 0, 0, 2) --setElementData(object1, "direction", true) local object1X, object1Y, object1Z = getElementPosition(object1) objects[1] = {object1, direction=true, startPosition={object1X, object1Y, object1Z}, endPosition={8, 0, 2}, moving=false} -- setElementData(object1, "start:X", object1X) -- setElementData(object1, "start:Y", object1Y) -- setElementData(object1, "start:Z", object1Z) -- setElementData(object1, "end:X", 10) -- setElementData(object1, "end:Y", 0) -- setElementData(object1, "end:Z", 2) -- setElementData(object1, "moving", false) --table.insert(objects, object1) local object2 = createObject(1800, 5, 0, 2) -- setElementData(object2, "direction", true) local object2X, object2Y, object2Z = getElementPosition(object2) objects[2] = {object2, direction=true, startPosition={object2X, object2Y, object2Z}, endPosition={15, 0, 2}, moving=false} -- setElementData(object2, "start:X", object2X) -- setElementData(object2, "start:Y", object2Y) -- setElementData(object2, "start:Z", object2Z) -- setElementData(object2, "end:X", 15) -- setElementData(object2, "end:Y", 0) -- setElementData(object2, "end:Z", 2) -- setElementData(object2, "moving", false) --table.insert(objects, object2) setTimer(verifierCiblePosition, 3000, 0) -- Faire de même avec les différentes cibles end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), startResource) function verifierCiblePosition() for key, cible in pairs(objects) do if (isElement(cible[1])) then -- On vérifie si la cible existe if (cible.direction) then -- Si la direction est "true" --if (getElementData(cible, "direction")) then -- Si la direction est "true" -- On dit que "true" c'est vers la droite local endX, endY, endZ = unpack(cible.endPosition) -- local endX = getElementData(cible, "end:X") -- local endY = getElementData(cible, "end:Y") -- local endZ = getElementData(cible, "end:Z") local cibleX, cibleY, cibleZ = getElementPosition(cible[1]) if (cibleX >= endX and cibleZ >= endZ) then cible.direction = false cible.moving = true --setElementData(cible, "direction", false) -- On change de direction --setElementData(cible, "moving", true) -- Il est en mouvement local startX, startY, startZ = unpack(cible.startPosition) -- local startX = getElementData(cible, "start:X") -- local startY = getElementData(cible, "start:Y") -- local startZ = getElementData(cible, "start:Z") moveObject(cible[1], 3000*key*0.5, startX, startY, startZ) else if (not cible.moving) then -- On vérifie s'il ne bouge pas, de le faire bouger --if (not getElementData(cible, "moving")) then -- On vérifie s'il ne bouge pas, de le faire bouger moveObject(cible[1], 3000*key*0.5, endX, endY, endZ) end end else -- On dit que "false" c'est vers la gauche local endX, endY, endZ = unpack(cible.endPosition) -- local endX = getElementData(cible, "end:X") -- local endY = getElementData(cible, "end:Y") -- local endZ = getElementData(cible, "end:Z") local cibleX, cibleY, cibleZ = getElementPosition(cible[1]) if (cibleX <= endX and cibleZ <= endZ) then cible.direction = true cible.moving = true -- setElementData(cible, "direction", true) -- On change de direction -- setElementData(cible, "moving", true) -- Il est en mouvement moveObject(cible[1], 3000*key*0.5, endX, endY, endZ) else if (not cible.moving) then -- On vérifie s'il ne bouge pas, de le faire bouger --if (not getElementData(cible, "moving")) then -- On vérifie s'il ne bouge pas, de le faire bouger moveObject(cible[1], 3000*key*0.5, endX, endY, endZ) end end end end end end 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