• 19 Juillet 2019, 18:54:08


Auteur Sujet: Scripting Tutorial IV - Hay Mod  (Lu 7834 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne spykerc8

  • *
  • 'The GTAOnline.fr GodFather'
  • Messages: 3821
    • Voir le profil
    • http://www.gtaonline.fr
Scripting Tutorial IV - Hay Mod
« le: 06 Février 2007, 18:21:46 »
Script : Script4.lua

Vidéo :

[yt=425,350]DT0hG_4Vho8[/yt]


Pour comprendre ce tuto, il est indispensable de regarder d'abords la vidéo.
Il faut également savoir que l'on traduit "Hay" par "foin"en français. Pour plus de convenances, je garderais le mot anglais.


Qu'est ce donc que ce "hay"?

Hay est une map où le but est de grimper tout en haut d'une tour en 3d fait de bottes de foin.  Cette tour de dimensions 4x4x50 n'est pas solide mais est faite pour que les joueurs puissent tout de même grimper dessus. but is filled for 31.25%
Les bottes de foing sont disposées pour qu'elles bougent de façon aléatoire, pour bloquer les joueurs, les empêcher de passer à la suivante, les pousser dans le vide, ect...Pour encore accentuer le stress, les bottes bougent de plus en plus vite en fonction du niveau de dificulté où l'on est : plus l'on est haut, plus ça va vite. Par exemple, une botte du début met 4 secondes à bouger et une au sommet du parcours, ne mettra que 2 secondes.
Pour le fun, il y a un système de rocks (cailloux) fixes, qui tant qu'on n'a pas passer à la botte suivante reste en place.


Variables locales

Code: Lua
  1.  
  2. local options = {
  3.         x = 4,
  4.         y = 4,
  5.         z = 49, -- +1
  6.         b = 245,
  7.         r = 4
  8. }
  9.  

Les options définies ici sont sont la largeur 'x', la longueur 'y', la hauteur 'z', les bottes de foin 'b',  et les rocks (cailloux) 'r'. Le paramètre 'z' a +1 car nous avons besoin que la botte tout en haut de la tour ne bouge pas, ainsi que d'ajouter un pick up que les autres risquent de ne pas aprécier...:)

Nous avons également d'autres variables à déclarer :

Code: Lua
  1. -- Don't touch below!
  2. local matrix = {} --3D Matrix containing info over position of bails
  3. local objects = {} --List of objects
  4. local moving = {} --List of currently Moving objects (We dont want to move already moving objects)
  5. local leveltop = {} --List of highest level reached from each player
  6. local textDisplay --Container for textDisplay
  7. local textItem --Container for textItem
  8. local xy_speed --The number of ms the bails will move faster horizontally with each level
  9. local z_speed --The number of ms the bails will move faster vertically with each level
  10. local root = getRootElement() -- Root element
  11. local barrier_x --Anti-run-away barrier x location
  12. local barrier_y --Anti-run-away barrier y location
  13. local barrier_r --Anti-run-away barrier radius
  14.  



Initialisation

Au stade d'initialisation nous allons effectuer les actions suivantes :

    * Calculer les variables statiques
    * Créer la tour
    * Créer le texte à l'écran pour les joueurs
    * Faire en sorte que les bottes de foin bougent.
    * Spawner les joueurs


Valeurs statiques
Nous avons 5 valeurs statiques à calculer. Pour quoi faire? Pour varier sur les rocks.

Code: Lua
  1. --Calculate speed velocity
  2. xy_speed = 2000 / (options.z + 1)
  3. z_speed = 1500 / (options.z + 1)
  4.  

Plus vous obtenez un résultat élevé, plus les bottes iront vite. La vitesse normale de mouvement d'une botte est de 4 secondes sur les axes x/y et 3 secondes sur l'axe z. Cette diférence s'explique par le fait que les bottes ont une dimension de 4*4*3.
En haut de la tour, la vitesse est de moitié celle normale. Pour calculer la vitesse pour chaque niveau, nous divisons le temps normal (2000ms pour les axes x/y  et 1500 mspour l'axe z) par le nombre de niveaux (options.z + 1).

Nous allons également créer une barrière à la map :

Code: Lua
  1. --Calculate tower center and barrier radius
  2. barrier_x = (options.x + 1) * -2
  3. barrier_y = (options.y + 1) * -2
  4. x = options.x * 2 + 4
  5. y = options.y * 2 + 4
  6. barrier_r = math.sqrt(x*x+y*y)
  7.  


Creation of the tower.

Comme vous l'aurez peut-être vu si vous êtes bon en maths ou en programmation (ou les deux), nous utilisons une matrice 3D pour créer la tour. Lua ne fonction pas très bien avec les matrices 3D, c'est pourquoi nous allons utiliser une table qui contiendra les variables X, Y, Z.

 Lua doesn't know exactly a matrix type so we actually work with a table (X axis) of tables (Y axis) which contain a table (Z axis) of variables. Logic ey?

Code: Lua
  1. --Clean matrix
  2. for x = 1,options.x do --For each X
  3.         matrix[x] = {} --Initialize the Y table
  4.         for y = 1,options.y do --For each Y
  5.                 matrix[x][y] = {} --Initialize the Z table
  6.                 for z = 1,options.z do --For each Z
  7.                         matrix[x][y][z] = 0 --Fill in 0
  8.                 end
  9.         end
  10. end
  11.  

Le placement des bottes de foin est assez facile : pour chacune on va prendre une position libre et aléatoire dans la matrice, marquer cette position comme prise et créer un objet à cette position. Pour faire en sorte que les bottes aient l'air différentes les unes des autres, on va les faire tourner de façon aléatoire de 90 degrés sur l'axe x/y, et 180° sur l'axe z.

Code: Lua
  1. --Place number of hay bails in matrix
  2. local x,y,z
  3. for count = 1,options.b do
  4. repeat
  5. x = randInt ( 1, options.x ) --Note 1
  6. y = randInt ( 1, options.y )
  7. z = randInt ( 1, options.z )
  8. until (matrix[x][y][z] == 0) --Note 2
  9.         matrix[x][y][z] = 1 --Note 3
  10.         objects[count] = createObject ( 3374, x * -4, y * -4, z * 3, randInt ( 0, 3 ) * 90, randInt ( 0, 1 ) * 180 , randInt ( 0, 1 ) * 180 ) --Note 4
  11. end
  12.  

Et pareil pour les rocks.

Code: Lua
  1. --Place number of rocks in matrix
  2. for count = 1,options.r do
  3. repeat
  4. x = randInt ( 1, options.x ) --Note 1
  5. y = randInt ( 1, options.y )
  6. z = randInt ( 1, options.z )
  7. until (matrix[x][y][z] == 0) --Note 2
  8.         matrix[x][y][z] = 1 --Note 3
  9.         createObject ( 1305, x * -4, y * -4, z * 3, randInt ( 0, 359 ), randInt ( 0, 359 ), randInt ( 0, 359 ) ) --Note 4
  10. end
  11.  

Après la création et le placement, on va ajouter une botte de foin tout en haut de la tour, plus un pick up surprise... :D

Code: Lua
  1. --Place top-hay bail + surprise
  2. createObject ( 3374, barrier_x, barrier_y, options.z * 3 + 3 ) --Note 1
  3. createPickup ( barrier_x, barrier_y, options.z * 3 + 6, 2, 38, 500 ) --Note 2
  4.  


Créer le texte affiché à l'écran

Comme on peut le voir dans la vidéo, il y a une liste des joueurs à la gauche de l'écran, avec le niveau des joueurs, le joueur ayant le niveau le plus élevé et la vide restante.
Voyons donc comment créer ce texte.
De façon basique cela fonctionne de la façon suivante :
1. Crée le container pour l'item. 'textCreateDisplay ()'
2. Crée l'item, 'textCreateTextItem ( text, x, y, priority, red, green, blue, alpha, scale)'
3. Ajoute l'item au container  'textDisplayAddText ( display, item )'
4. Ajoute les joueurs au container 'textDisplayAddObserver ( display, player )'

Code: Lua
  1. --Set up textdisplay
  2. textDisplay = textCreateDisplay () --Note 1
  3. textItem = textCreateTextItem ( "", 0.08, 0.20, 2, 255, 255, 255, 255, 1) --Note 2
  4. textDisplayAddText ( textDisplay, textItem ) --Note 3
  5. local players = getElementsByType( "player" )
  6. for k,v in players do
  7.         leveltop[v] = 0 --Note 5
  8.         textDisplayAddObserver ( textDisplay, v ) --Note 4
  9. end
  10.  

Comme on peut le voir, la liste est mise à jour toutes les secondes grâce au timer suivant :

Code: Lua
  1. setTimer ( "level", 1000, 0 )
  2.  


Faire bouger les bottes de foin
Le mouvement des bottes de foin est déclenché par un timer qui appelle la fonction toutes les 100 ms. Simple mais efficace.

Code: Lua
  1. setTimer ( "move", 100, 0 )
  2.  


Fonction du mouvement des bottes de foin

C'est véritablement le 'core' de ce script hay.
Pour commencer nous sélectionnons un nombre aléatoire qui va représenter une botte, entre 1 et le nombre de bottes (1). Si cette botte ne bouge pas (2), nous sélectionnons l'objet (3) et nous choisissons un mouvement aléatoire (4). Après ça, nous faisons une copie temporaire de la matrice (5), y mettons la positions des joueurs (6) et calculons la position de l'objet dans la matrice (7). Si le mouvement choisi par le script est possible (ne sort pas de la matrice (8)), nous marquons la botte comme 'en mouvement'.
Une fois que nous avons vérifier ces paramètres, nous allons déterminer la vitesse de mouvement de la botte par rapport au niveau du joueur (10).
Si la botte bouge déjà, nous allons lui attribuer quelques paramètres (11). Après ceci, nous allons calculer la nouvelle position de la botte (12). Pour éviter que les bottes se rentrent dedans, nous allons marquer la position future de la botte, comme prise dans la matrice, elle ne nous pourra donc pas être utilisée par une autre botte (13).

Code: Lua
  1. function move ()
  2. local rand
  3. repeat
  4. rand = randInt ( 1, options.b ) --Note 1
  5. until (moving[rand] ~= 1) --Note 2
  6.         local object = objects[ rand ] --Note 3
  7.         local move = randInt ( 0, 5 ) --Note 4
  8.         local x,y,z
  9.         local x2,y2,z2 = getElementPosition ( object )
  10.         local free = {}
  11.         copyTable(matrix,free) --Note 5
  12.         getFree(free) --Note 6
  13.         x = x2 / -4 --Note 7
  14.         y = y2 / -4
  15.         z = z2 / 3
  16.         if (move == 0) and (x ~= 1) and (free[x-1][y][z] == 0) then --Note 8
  17.                 moving[rand] = 1 --Note 9
  18.                 local s = 4000 - xy_speed * z --Note 10
  19.                 setTimer ("done", s, 1, rand, x, y, z) --Note 11
  20.                 x = x - 1 --Note 12
  21.                 matrix[x][y][z] = 1 --Note 13
  22.                 moveObject ( object, s, x2 + 4, y2, z2, 0, 0, 0 ) --Note 14
  23.         elseif (move == 1) and (x ~= options.x) and (free[x+1][y][z] == 0) then
  24.                 moving[rand] = 1
  25.                 local s = 4000 - xy_speed * z
  26.                 setTimer ("done", s, 1, rand, x, y, z)
  27.                 x = x + 1
  28.                 matrix[x][y][z] = 1
  29.                 moveObject ( object, s, x2 - 4, y2, z2, 0, 0, 0 )
  30.         elseif (move == 2) and (y ~= 1) and (free[x][y-1][z] == 0) then
  31.                 moving[rand] = 1
  32.                 local s = 4000 - xy_speed * z
  33.                 setTimer ("done", s, 1, rand, x, y, z)
  34.                 y = y - 1
  35.                 matrix[x][y][z] = 1
  36.                 moveObject ( object, s, x2, y2 + 4, z2, 0, 0, 0 )
  37.         elseif (move == 3) and (y ~= options.y) and (free[x][y+1][z] == 0) then
  38.                 moving[rand] = 1
  39.                 local s = 4000 - xy_speed * z
  40.                 setTimer ("done", s, 1, rand, x, y, z)
  41.                 y = y + 1
  42.                 matrix[x][y][z] = 1
  43.                 moveObject ( object, s, x2, y2 - 4, z2, 0, 0, 0 )
  44.         elseif (move == 4) and (z ~= 1) and (free[x][y][z-1] == 0) then
  45.                 moving[rand] = 1
  46.                 local s = 3000 - z_speed * z
  47.                 setTimer ("done", s, 1, rand, x, y, z)
  48.                 z = z - 1
  49.                 matrix[x][y][z] = 1
  50.                 moveObject ( object, s, x2, y2, z2 - 3, 0, 0, 0 )
  51.         elseif (move == 5) and (z ~= options.z) and (free[x][y][z+1] == 0) then
  52.                 moving[rand] = 1
  53.                 local s = 3000 - z_speed * z
  54.                 setTimer ("done", s, 1, rand, x, y, z)
  55.                 z = z + 1
  56.                 matrix[x][y][z] = 1
  57.                 moveObject ( object, s, x2, y2, z2 + 3, 0, 0, 0 )
  58.         end
  59. end
  60.  


Rafraichissement de l'affichage du texte

Cette fonction est appellée toutes les secondes et rafraichit le texte à l'écran. Tout en haut de la liste, nous affichons le nombre de niveaux présents dans la tour (1), puis nous faisons de même pour les joueurs (2) et calculons leur niveau actuel (3).
Etant donné que la fonction est appellée toutes les secondes, nous allons pouvoir lui ajouter une vérification pour les limites de la map. Si un joueur dépasse les limites de la map, cela lui envoi un message, puis le tue (4).
S'il est mort, nous allons le marquer comme ayant un niveau invalide '-'. (5). S'il est vivant, nous allons afficher son niveau actuel (6). 

Code: Lua
  1. function level()
  2.         local x,y,z
  3.         local level
  4.         local string = options.z + 1 .. " levels:\n" --Note 1
  5.         local players = getElementsByType( "player" )
  6.         for k,v in players do --Note 2
  7.                 x,y,z = getElementPosition( v )
  8.                 level = math.floor(z / 3 - 0.5) --Note 3
  9.                 if (getDistanceBetweenPoints2D(barrier_x,barrier_y,x,y) > barrier_r) and (isPlayerDead ( v ) == false) and (z ~= 700) then --Note (4)
  10.                         outputChatBox( "* Killed: Don't walk away.", v, 255, 100, 100 )
  11.                         killPlayer(v)
  12.                 end
  13.                 if (z == 700) then --Note 5
  14.                         string = string .. getClientName ( v ) .. " (-/" .. leveltop[v] .. ") 0%\n"
  15.                 else --Note 6
  16.                         if (level > leveltop[v]) then
  17.                                 leveltop[v] = level
  18.                         end
  19.                         string = string .. getClientName ( v ) .. " (" .. level .. "/" .. leveltop[v] .. ") " .. math.floor(getPlayerHealth(v)) .. "%\n"
  20.                 end
  21.         end
  22.         textItemSetText ( textItem , string ) --Note 7
  23. end
  24.  


Autres fonctions

Comme nous l'avons vu, tout en haut de la tour, nous avons placer une petite surprise. Quand un joueur la récupère (1) nous changeons le script pour afficher aux joueurs que le joueur en question a atteint le sommet (2), puis nous détruisons la surprise. (3)

Code: Lua
  1. addEventHandler( "onPickupHit", root, "onPickupHit")
  2. function onPickupHit ( player ) --Note 1
  3.         if (getPickupType ( source ) == 2) then
  4.                 outputChatBox( "* " .. getClientName ( player ) .. " made it to the top!", root, 255, 100, 100 ) --Note 2
  5.                 destroyElement( source ) --Note 3
  6.         end
  7. end
  8.  

Quand un joueur rejoint le serveur, nous devons l'ajouter à la liste des joueurs à l'écran (1). Nous devons également lui donner comme niveau maximal atteint, le niveau 0 (2).

Code: Lua
  1. addEventHandler( "onPlayerJoin", root, "onPlayerJoin")
  2. function onPlayerJoin ( )
  3. leveltop[source] = 0 --Note 1
  4. textDisplayAddObserver ( textDisplay, source ) --Note 2
  5. end
  6.  


Quand une botte a fini de bouger, nous libérons l'endroit (1) où elle était et la marquons comme immobile (2).

Code: Lua
  1. function done ( id, x, y, z )
  2.         moving[id] = 0 --Note 1
  3.         matrix[x][y][z] = 0 --Note 2
  4. end
  5.  


La fonction suivante marque les positions dans la matrice en fonction de celle des joueurs. Elle recommence indéfiniment pour chaque joueur, calcule leur position, vérifie s'ils sont dans les limites, et marque la position comme prise dans la matrice.

Code: Lua
  1. function getFree ( src )
  2.         local x,y,z
  3.         local players = getElementsByType( "player" )
  4.         for k,v in players do --Note 1
  5.                 x,y,z = getElementPosition( v )
  6.                 x = math.floor(x / -4 + 0.5) --Note 2
  7.                 y = math.floor(y / -4 + 0.5)
  8.                 z = math.floor(z / 3 + 0.5)
  9.                 if (x >= 1) and (x <options>= 1) and (y <options>= 1) and (z <= options.z) then --Note 3
  10.                         src[x][y][z] = 2 --Note 4
  11.                 end
  12.         end
  13. end
  14.  


Cette fonction copie les tables.

Code: Lua
  1. function copyTable ( src, des )
  2.         for k,v in pairs(src) do
  3.                 if (type(v) == "table") then
  4.                         des[k] = {}
  5.                         copyTable(src[k],des[k])
  6.                 else
  7.                         des[k] = v
  8.                 end
  9.         end
  10. end
  11.  


Voilà, un peut compliquer...


CODE COMPLET :

Code: Lua
  1. -- Options:
  2. local options = {
  3.         x = 4,
  4.         y = 4,
  5.         z = 49, -- +1
  6.         b = 245,
  7.         r = 4
  8. }
  9. -- Don't touch below!
  10. local matrix = {}
  11. local objects = {}
  12. local moving = {}
  13. local leveltop = {}
  14. local textDisplay
  15. local textItem
  16. local xy_speed
  17. local z_speed
  18. local root = getRootElement()
  19. local barrier_x
  20. local barrier_y
  21. local barrier_r
  22.  
  23. addEventHandler( "onResourceStart", root, "onMapLoad")
  24. function onMapLoad ( )
  25.         outputChatBox("* Haystack-em-up v1.43 by Aeron", root, 255, 100, 100)
  26.         --Calculate speed velocity
  27.         xy_speed = 2000 / (options.z + 1)
  28.         z_speed = 1500 / (options.z + 1)
  29.  
  30.         --Clean matrix
  31.         for x = 1,options.x do
  32.                 matrix[x] = {}
  33.                 for y = 1,options.y do
  34.                         matrix[x][y] = {}
  35.                         for z = 1,options.z do
  36.                                 matrix[x][y][z] = 0
  37.                         end
  38.                 end
  39.         end
  40.  
  41.     --Place number of haybails in matrix
  42.         local x,y,z
  43.         for count = 1,options.b do
  44.                 repeat
  45.                         x = randInt ( 1, options.x )
  46.                         y = randInt ( 1, options.y )
  47.                         z = randInt ( 1, options.z )
  48.                 until (matrix[x][y][z] == 0)
  49.                 matrix[x][y][z] = 1
  50.                 objects[count] = createObject ( 3374, x * -4, y * -4, z * 3, randInt ( 0, 3 ) * 90, randInt ( 0, 1 ) * 180 , randInt ( 0, 1 ) * 180 )
  51.         end
  52.  
  53.         --Place number of rocks in matrix
  54.         for count = 1,options.r do
  55.                 repeat
  56.                         x = randInt ( 1, options.x )
  57.                         y = randInt ( 1, options.y )
  58.                         z = randInt ( 1, options.z )
  59.                 until (matrix[x][y][z] == 0)
  60.                 matrix[x][y][z] = 1
  61.                 createObject ( 1305, x * -4, y * -4, z * 3, randInt ( 0, 359 ), randInt ( 0, 359 ), randInt ( 0, 359 ) )
  62.         end
  63.        
  64.         --Calculate tower center and barrier radius
  65.         barrier_x = (options.x + 1) * -2
  66.         barrier_y = (options.y + 1) * -2       
  67.         if (options.x > options.y) then
  68.                 barrier_r = options.x / 2 + 20
  69.         else
  70.                 barrier_r = options.y / 2 + 20
  71.         end
  72.        
  73.         --Place top-haybail + minigun
  74.         createObject ( 3374, barrier_x, barrier_y, options.z * 3 + 3 )
  75.         createPickup ( barrier_x, barrier_y, options.z * 3 + 6, 2, 38, 500 )
  76.         setTimer ( "move", 100, 0 )
  77.  
  78.     --Set up textdisplay
  79.         textDisplay = textCreateDisplay ()
  80.         textItem = textCreateTextItem ( "", 0.08, 0.20, 2, 255, 255, 255, 255, 1)
  81.         textDisplayAddText ( textDisplay, textItem )
  82.         local players = getElementsByType( "player" )
  83.         for k,v in players do
  84.                 leveltop[v] = 0
  85.                 textDisplayAddObserver ( textDisplay, v )
  86.         end
  87.         setTimer ( "level", 1000, 0 )
  88. end
  89.  
  90. addEventHandler( "onPickupHit", root, "onPickupHit")
  91. function onPickupHit ( player )
  92.         if (getPickupType ( source ) == 2) then
  93.                 outputChatBox( "* " .. getPlayerName ( player ) .. " made it to the top!", root, 255, 100, 100 )
  94.                 destroyElement( source )
  95.         end
  96. end
  97.  
  98. addEventHandler( "onPlayerJoin", root, "onPlayerJoin")
  99. function onPlayerJoin ( )
  100.         leveltop[source] = 0
  101.         textDisplayAddObserver ( textDisplay, source )
  102. end
  103.  
  104. function level()
  105.                 local x,y,z
  106.                 local level
  107.                 local string = options.z + 1 .. " levels:\n"
  108.                 local players = getElementsByType( "player" )
  109.                 for k,v in players do
  110.                         x,y,z = getElementPosition( v )
  111.                         level = math.floor(z  / 3 - 0.5)
  112.                         if (getDistanceBetweenPoints2D(barrier_x,barrier_y,x,y) > barrier_r) and (isPlayerDead ( v ) == false) and (z ~= 700) then
  113. --              outputChatBox( "X:" .. x .. " Y: " .. y .. " Z: " .. z, root, 255, 100, 100 )
  114.                                 outputChatBox( "* Killed: Don't walk away.", v, 255, 100, 100 )
  115.                                 --killPlayer(v)
  116.                         end
  117. --                      if (isPlayerDead ( v )) or (level < 0) or (level > options.z + 2) then
  118.                         if (z == 700) then
  119.                                 string = string .. getClientName ( v ) .. " (-/" .. leveltop[v] .. ") 0%\n"
  120.                         else
  121.                                 if (level > leveltop[v]) then
  122.                                         leveltop[v] = level
  123.                                 end
  124.                                 string = string .. getClientName ( v ) .. " (" .. level .. "/" .. leveltop[v] .. ") " .. math.floor(getPlayerHealth(v)) .. "%\n"
  125.                         end
  126.                 end
  127.                 textItemSetText ( textItem ,  string )
  128. --              setTimer ( "level", 1000 )
  129. end
  130.  
  131. function done ( id, x, y, z )
  132.         moving[id] = 0
  133.         matrix[x][y][z] = 0
  134. end
  135.  
  136. function getFree ( src )
  137.         local x,y,z
  138.         local players = getElementsByType( "player" )
  139.         for k,v in players do
  140.                 x,y,z = getElementPosition( v )
  141.                 x = math.floor(x / -4 + 0.5)
  142.                 y = math.floor(y / -4 + 0.5)
  143.                 z = math.floor(z / 3 + 0.5)
  144.                 if (x >= 1) and (x <= options.x) and (y >= 1) and (y <= options.y) and (z >= 1) and (z <= options.z) then
  145.                         src[x][y][z] = 2
  146.                 end
  147.         end
  148. end
  149.  
  150. function copyTable ( src, des )
  151.         for k,v in pairs(src) do
  152.                 if (type(v) == "table") then
  153.                         des[k] = {}
  154.                         copyTable(src[k],des[k])
  155.                 else
  156.                         des[k] = v
  157.                 end
  158.         end
  159. end
  160.  
  161. function move ()
  162.         local rand
  163.         repeat
  164.                 rand = randInt ( 1, options.b )
  165.         until (moving[rand] ~= 1)
  166.         local object = objects[ rand ]
  167.         local move = randInt ( 0, 5 )
  168.         local x,y,z
  169.         local x2,y2,z2 = getElementPosition ( object )
  170.         local free = {}
  171.         copyTable(matrix,free)
  172.         getFree(free)
  173.         x = x2 / -4
  174.         y = y2 / -4
  175.         z = z2 / 3
  176.         if (move == 0)  and (x ~= 1) and (free[x-1][y][z] == 0) then
  177.                 moving[rand] = 1
  178.                 local s = 4000 - xy_speed * z
  179.                 setTimer ("done", s, 1, rand, x, y, z)
  180.                 x = x - 1
  181.                 matrix[x][y][z] = 1
  182.                 moveObject ( object, s, x2 + 4, y2, z2, 0, 0, 0 )
  183.         elseif (move == 1) and (x ~= options.x) and (free[x+1][y][z] == 0) then
  184.                 moving[rand] = 1
  185.                 local s = 4000 - xy_speed * z
  186.                 setTimer ("done", s, 1, rand, x, y, z)
  187.                 x = x + 1
  188.                 matrix[x][y][z] = 1
  189.                 moveObject ( object, s, x2 - 4, y2, z2, 0, 0, 0 )
  190.         elseif (move == 2) and (y ~= 1) and (free[x][y-1][z] == 0) then
  191.                 moving[rand] = 1
  192.                 local s = 4000 - xy_speed * z
  193.                 setTimer ("done", s, 1, rand, x, y, z)
  194.                 y = y - 1
  195.                 matrix[x][y][z] = 1
  196.                 moveObject ( object, s, x2, y2 + 4, z2, 0, 0, 0 )
  197.         elseif (move == 3) and (y ~= options.y) and (free[x][y+1][z] == 0) then
  198.                 moving[rand] = 1
  199.                 local s = 4000 - xy_speed * z
  200.                 setTimer ("done", s, 1, rand, x, y, z)
  201.                 y = y + 1
  202.                 matrix[x][y][z] = 1
  203.                 moveObject ( object, s, x2, y2 - 4, z2, 0, 0, 0 )
  204.         elseif (move == 4) and (z ~= 1) and (free[x][y][z-1] == 0) then
  205.                 moving[rand] = 1
  206.                 local s = 3000 - z_speed * z
  207.                 setTimer ("done", s, 1, rand, x, y, z)
  208.                 z = z - 1
  209.                 matrix[x][y][z] = 1
  210.                 moveObject ( object, s, x2, y2, z2 - 3, 0, 0, 0 )
  211.         elseif (move == 5) and (z ~= options.z) and (free[x][y][z+1] == 0) then
  212.                 moving[rand] = 1
  213.                 local s = 3000 - z_speed * z
  214.                 setTimer ("done", s, 1, rand, x, y, z)
  215.                 z = z + 1
  216.                 matrix[x][y][z] = 1
  217.                 moveObject ( object, s, x2, y2, z2 + 3, 0, 0, 0 )
  218.         end
  219. --      setTimer ("move", 100 )
  220. end
  221.  
« Modifié: 06 Février 2007, 18:45:31 par spykerc8 »


~ Leader honoraire de la FsK Team ~ -
~ Membre honoraire de la PCP Team ~

Co-fondateur de GTAO - Retraité de la communauté

"Nous ne sommes rien, soyons tout !"


Hors ligne Grounch

  • Le seul Russe du forum
  • *
  • Bandit
  • Mafieux en stage
  • Messages: 327
    • Voir le profil
Re : Scripting Tutorial IV - Hay Mod
« Réponse #1 le: 06 Février 2007, 19:33:42 »
Ca releve de la science fiction de coder ça pour moi :blink

Hors ligne Labiloute

  • XSA
  • *
  • Tueur en série
  • Messages: 207
    • Voir le profil
    • GTA-Stunt.com
Re : Scripting Tutorial IV - Hay Mod
« Réponse #2 le: 06 Février 2007, 21:09:10 »
Wahou encore une petite nouveauté de chez MTA super tuto en tous cas.

Début du HS :

GTA il est codé avec quel language ?

Fin du hs.

Merci :dling


Hors ligne Loo

  • Modo méchant ! :>
  • *
  • Koala paresseux.
  • Messages: 589
    • Voir le profil
Re : Scripting Tutorial IV - Hay Mod
« Réponse #3 le: 07 Février 2007, 07:14:46 »
C++ sûrement.


Hors ligne FuriousKing

  • Best-Driver
  • *
  • The King Of Furious
  • Messages: 546
    • Voir le profil
Re : Scripting Tutorial IV - Hay Mod
« Réponse #4 le: 07 Février 2007, 14:30:27 »
Ouais bah perso je prefere jouer sur la map que de la realiser ^^ .

Hors ligne [DoK]Diablo

  • *
  • Criminel
  • Messages: 34
    • Voir le profil
    • www.dailymotion.com/DiabloQM
Re : Scripting Tutorial IV - Hay Mod
« Réponse #5 le: 08 Février 2007, 14:23:59 »
C'est sur lol moi je préfere creer des maps comme dans MTA RC1.1.1 dont j'éspére sera a peu pret pareille que sur la version que j'ai cité ^^ car moi le codage j'y connais rien   :...

Hors ligne FuriousKing

  • Best-Driver
  • *
  • The King Of Furious
  • Messages: 546
    • Voir le profil
Re : Scripting Tutorial IV - Hay Mod
« Réponse #6 le: 08 Février 2007, 15:00:04 »
Il y aura un éditeur de map comme MTA RACE ;) mais tu aura pas autant de possibiliter que si tu coder ...

Hors ligne Grounch

  • Le seul Russe du forum
  • *
  • Bandit
  • Mafieux en stage
  • Messages: 327
    • Voir le profil
Re : Re : Scripting Tutorial IV - Hay Mod
« Réponse #7 le: 08 Février 2007, 16:48:36 »
Ouais bah perso je prefere jouer sur la map que de la realiser ^^ .
Tu l'a dis F-Gi :)