• 23 Juin 2024, 17:25:55


Auteur Sujet: Scripting Tutorial IV - Hay Mod  (Lu 20574 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) [Sélectionner]

local options = {
        x = 4,
        y = 4,
        z = 49, -- +1
        b = 245,
        r = 4
}

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) [Sélectionner]
-- Don't touch below!
local matrix = {} --3D Matrix containing info over position of bails
local objects = {} --List of objects
local moving = {} --List of currently Moving objects (We dont want to move already moving objects)
local leveltop = {} --List of highest level reached from each player
local textDisplay --Container for textDisplay
local textItem --Container for textItem
local xy_speed --The number of ms the bails will move faster horizontally with each level
local z_speed --The number of ms the bails will move faster vertically with each level
local root = getRootElement() -- Root element
local barrier_x --Anti-run-away barrier x location
local barrier_y --Anti-run-away barrier y location
local barrier_r --Anti-run-away barrier radius



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) [Sélectionner]
--Calculate speed velocity
xy_speed = 2000 / (options.z + 1)
z_speed = 1500 / (options.z + 1)

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) [Sélectionner]
--Calculate tower center and barrier radius
barrier_x = (options.x + 1) * -2
barrier_y = (options.y + 1) * -2
x = options.x * 2 + 4
y = options.y * 2 + 4
barrier_r = math.sqrt(x*x+y*y)


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) [Sélectionner]
--Clean matrix
for x = 1,options.x do --For each X
        matrix[x] = {} --Initialize the Y table
        for y = 1,options.y do --For each Y
                matrix[x][y] = {} --Initialize the Z table
                for z = 1,options.z do --For each Z
                        matrix[x][y][z] = 0 --Fill in 0
                end
        end
end

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) [Sélectionner]
--Place number of hay bails in matrix
local x,y,z
for count = 1,options.b do
repeat
x = randInt ( 1, options.x ) --Note 1
y = randInt ( 1, options.y )
z = randInt ( 1, options.z )
until (matrix[x][y][z] == 0) --Note 2
        matrix[x][y][z] = 1 --Note 3
        objects[count] = createObject ( 3374, x * -4, y * -4, z * 3, randInt ( 0, 3 ) * 90, randInt ( 0, 1 ) * 180 , randInt ( 0, 1 ) * 180 ) --Note 4
end

Et pareil pour les rocks.

Code: (lua) [Sélectionner]
--Place number of rocks in matrix
for count = 1,options.r do
repeat
x = randInt ( 1, options.x ) --Note 1
y = randInt ( 1, options.y )
z = randInt ( 1, options.z )
until (matrix[x][y][z] == 0) --Note 2
matrix[x][y][z] = 1 --Note 3
createObject ( 1305, x * -4, y * -4, z * 3, randInt ( 0, 359 ), randInt ( 0, 359 ), randInt ( 0, 359 ) ) --Note 4
end

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) [Sélectionner]
--Place top-hay bail + surprise
createObject ( 3374, barrier_x, barrier_y, options.z * 3 + 3 ) --Note 1
createPickup ( barrier_x, barrier_y, options.z * 3 + 6, 2, 38, 500 ) --Note 2


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) [Sélectionner]
--Set up textdisplay
textDisplay = textCreateDisplay () --Note 1
textItem = textCreateTextItem ( "", 0.08, 0.20, 2, 255, 255, 255, 255, 1) --Note 2
textDisplayAddText ( textDisplay, textItem ) --Note 3
local players = getElementsByType( "player" )
for k,v in players do
leveltop[v] = 0 --Note 5
textDisplayAddObserver ( textDisplay, v ) --Note 4
end

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

Code: (lua) [Sélectionner]
setTimer ( "level", 1000, 0 )


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) [Sélectionner]
setTimer ( "move", 100, 0 )


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) [Sélectionner]
function move ()
local rand
repeat
rand = randInt ( 1, options.b ) --Note 1
until (moving[rand] ~= 1) --Note 2
local object = objects[ rand ] --Note 3
local move = randInt ( 0, 5 ) --Note 4
local x,y,z
local x2,y2,z2 = getElementPosition ( object )
local free = {}
copyTable(matrix,free) --Note 5
getFree(free) --Note 6
x = x2 / -4 --Note 7
y = y2 / -4
z = z2 / 3
if (move == 0) and (x ~= 1) and (free[x-1][y][z] == 0) then --Note 8
moving[rand] = 1 --Note 9
local s = 4000 - xy_speed * z --Note 10
setTimer ("done", s, 1, rand, x, y, z) --Note 11
x = x - 1 --Note 12
matrix[x][y][z] = 1 --Note 13
moveObject ( object, s, x2 + 4, y2, z2, 0, 0, 0 ) --Note 14
elseif (move == 1) and (x ~= options.x) and (free[x+1][y][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
x = x + 1
matrix[x][y][z] = 1
moveObject ( object, s, x2 - 4, y2, z2, 0, 0, 0 )
elseif (move == 2) and (y ~= 1) and (free[x][y-1][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
y = y - 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2 + 4, z2, 0, 0, 0 )
elseif (move == 3) and (y ~= options.y) and (free[x][y+1][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
y = y + 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2 - 4, z2, 0, 0, 0 )
elseif (move == 4) and (z ~= 1) and (free[x][y][z-1] == 0) then
moving[rand] = 1
local s = 3000 - z_speed * z
setTimer ("done", s, 1, rand, x, y, z)
z = z - 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2, z2 - 3, 0, 0, 0 )
elseif (move == 5) and (z ~= options.z) and (free[x][y][z+1] == 0) then
moving[rand] = 1
local s = 3000 - z_speed * z
setTimer ("done", s, 1, rand, x, y, z)
z = z + 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2, z2 + 3, 0, 0, 0 )
end
end


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) [Sélectionner]
function level()
local x,y,z
local level
local string = options.z + 1 .. " levels:\n" --Note 1
local players = getElementsByType( "player" )
for k,v in players do --Note 2
x,y,z = getElementPosition( v )
level = math.floor(z / 3 - 0.5) --Note 3
if (getDistanceBetweenPoints2D(barrier_x,barrier_y,x,y) > barrier_r) and (isPlayerDead ( v ) == false) and (z ~= 700) then --Note (4)
outputChatBox( "* Killed: Don't walk away.", v, 255, 100, 100 )
killPlayer(v)
end
if (z == 700) then --Note 5
string = string .. getClientName ( v ) .. " (-/" .. leveltop[v] .. ") 0%\n"
else --Note 6
if (level > leveltop[v]) then
leveltop[v] = level
end
string = string .. getClientName ( v ) .. " (" .. level .. "/" .. leveltop[v] .. ") " .. math.floor(getPlayerHealth(v)) .. "%\n"
end
end
textItemSetText ( textItem , string ) --Note 7
end


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) [Sélectionner]
addEventHandler( "onPickupHit", root, "onPickupHit")
function onPickupHit ( player ) --Note 1
if (getPickupType ( source ) == 2) then
outputChatBox( "* " .. getClientName ( player ) .. " made it to the top!", root, 255, 100, 100 ) --Note 2
destroyElement( source ) --Note 3
end
end

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) [Sélectionner]
addEventHandler( "onPlayerJoin", root, "onPlayerJoin")
function onPlayerJoin ( )
leveltop[source] = 0 --Note 1
textDisplayAddObserver ( textDisplay, source ) --Note 2
end


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

Code: (lua) [Sélectionner]
function done ( id, x, y, z )
moving[id] = 0 --Note 1
matrix[x][y][z] = 0 --Note 2
end


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) [Sélectionner]
function getFree ( src )
local x,y,z
local players = getElementsByType( "player" )
for k,v in players do --Note 1
x,y,z = getElementPosition( v )
x = math.floor(x / -4 + 0.5) --Note 2
y = math.floor(y / -4 + 0.5)
z = math.floor(z / 3 + 0.5)
if (x >= 1) and (x <options>= 1) and (y <options>= 1) and (z <= options.z) then --Note 3
src[x][y][z] = 2 --Note 4
end
end
end


Cette fonction copie les tables.

Code: (lua) [Sélectionner]
function copyTable ( src, des )
for k,v in pairs(src) do
if (type(v) == "table") then
des[k] = {}
copyTable(src[k],des[k])
else
des[k] = v
end
end
end


Voilà, un peut compliquer...


CODE COMPLET :

Code: (lua) [Sélectionner]
-- Options:
local options = {
x = 4,
y = 4,
z = 49, -- +1
b = 245,
r = 4
}
-- Don't touch below!
local matrix = {}
local objects = {}
local moving = {}
local leveltop = {}
local textDisplay
local textItem
local xy_speed
local z_speed
local root = getRootElement()
local barrier_x
local barrier_y
local barrier_r

addEventHandler( "onResourceStart", root, "onMapLoad")
function onMapLoad ( )
outputChatBox("* Haystack-em-up v1.43 by Aeron", root, 255, 100, 100)
--Calculate speed velocity
xy_speed = 2000 / (options.z + 1)
z_speed = 1500 / (options.z + 1)

--Clean matrix
for x = 1,options.x do
matrix[x] = {}
for y = 1,options.y do
matrix[x][y] = {}
for z = 1,options.z do
matrix[x][y][z] = 0
end
end
end

    --Place number of haybails in matrix
local x,y,z
for count = 1,options.b do
repeat
x = randInt ( 1, options.x )
y = randInt ( 1, options.y )
z = randInt ( 1, options.z )
until (matrix[x][y][z] == 0)
matrix[x][y][z] = 1
objects[count] = createObject ( 3374, x * -4, y * -4, z * 3, randInt ( 0, 3 ) * 90, randInt ( 0, 1 ) * 180 , randInt ( 0, 1 ) * 180 )
end

--Place number of rocks in matrix
for count = 1,options.r do
repeat
x = randInt ( 1, options.x )
y = randInt ( 1, options.y )
z = randInt ( 1, options.z )
until (matrix[x][y][z] == 0)
matrix[x][y][z] = 1
createObject ( 1305, x * -4, y * -4, z * 3, randInt ( 0, 359 ), randInt ( 0, 359 ), randInt ( 0, 359 ) )
end

--Calculate tower center and barrier radius
barrier_x = (options.x + 1) * -2
barrier_y = (options.y + 1) * -2
if (options.x > options.y) then
barrier_r = options.x / 2 + 20
else
barrier_r = options.y / 2 + 20
end

--Place top-haybail + minigun
createObject ( 3374, barrier_x, barrier_y, options.z * 3 + 3 )
createPickup ( barrier_x, barrier_y, options.z * 3 + 6, 2, 38, 500 )
setTimer ( "move", 100, 0 )

    --Set up textdisplay
textDisplay = textCreateDisplay ()
textItem = textCreateTextItem ( "", 0.08, 0.20, 2, 255, 255, 255, 255, 1)
textDisplayAddText ( textDisplay, textItem )
local players = getElementsByType( "player" )
for k,v in players do
leveltop[v] = 0
textDisplayAddObserver ( textDisplay, v )
end
setTimer ( "level", 1000, 0 )
end

addEventHandler( "onPickupHit", root, "onPickupHit")
function onPickupHit ( player )
if (getPickupType ( source ) == 2) then
outputChatBox( "* " .. getPlayerName ( player ) .. " made it to the top!", root, 255, 100, 100 )
destroyElement( source )
end
end

addEventHandler( "onPlayerJoin", root, "onPlayerJoin")
function onPlayerJoin ( )
leveltop[source] = 0
textDisplayAddObserver ( textDisplay, source )
end

function level()
local x,y,z
local level
local string = options.z + 1 .. " levels:\n"
local players = getElementsByType( "player" )
for k,v in players do
x,y,z = getElementPosition( v )
level = math.floor(z  / 3 - 0.5)
if (getDistanceBetweenPoints2D(barrier_x,barrier_y,x,y) > barrier_r) and (isPlayerDead ( v ) == false) and (z ~= 700) then
-- outputChatBox( "X:" .. x .. " Y: " .. y .. " Z: " .. z, root, 255, 100, 100 )
outputChatBox( "* Killed: Don't walk away.", v, 255, 100, 100 )
--killPlayer(v)
end
-- if (isPlayerDead ( v )) or (level < 0) or (level > options.z + 2) then
if (z == 700) then
string = string .. getClientName ( v ) .. " (-/" .. leveltop[v] .. ") 0%\n"
else
if (level > leveltop[v]) then
leveltop[v] = level
end
string = string .. getClientName ( v ) .. " (" .. level .. "/" .. leveltop[v] .. ") " .. math.floor(getPlayerHealth(v)) .. "%\n"
end
end
textItemSetText ( textItem ,  string )
-- setTimer ( "level", 1000 )
end

function done ( id, x, y, z )
moving[id] = 0
matrix[x][y][z] = 0
end

function getFree ( src )
local x,y,z
local players = getElementsByType( "player" )
for k,v in players do
x,y,z = getElementPosition( v )
x = math.floor(x / -4 + 0.5)
y = math.floor(y / -4 + 0.5)
z = math.floor(z / 3 + 0.5)
if (x >= 1) and (x <= options.x) and (y >= 1) and (y <= options.y) and (z >= 1) and (z <= options.z) then
src[x][y][z] = 2
end
end
end

function copyTable ( src, des )
for k,v in pairs(src) do
if (type(v) == "table") then
des[k] = {}
copyTable(src[k],des[k])
else
des[k] = v
end
end
end

function move ()
local rand
repeat
rand = randInt ( 1, options.b )
until (moving[rand] ~= 1)
local object = objects[ rand ]
local move = randInt ( 0, 5 )
local x,y,z
local x2,y2,z2 = getElementPosition ( object )
local free = {}
copyTable(matrix,free)
getFree(free)
x = x2 / -4
y = y2 / -4
z = z2 / 3
if (move == 0)  and (x ~= 1) and (free[x-1][y][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
x = x - 1
matrix[x][y][z] = 1
moveObject ( object, s, x2 + 4, y2, z2, 0, 0, 0 )
elseif (move == 1) and (x ~= options.x) and (free[x+1][y][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
x = x + 1
matrix[x][y][z] = 1
moveObject ( object, s, x2 - 4, y2, z2, 0, 0, 0 )
elseif (move == 2) and (y ~= 1) and (free[x][y-1][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
y = y - 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2 + 4, z2, 0, 0, 0 )
elseif (move == 3) and (y ~= options.y) and (free[x][y+1][z] == 0) then
moving[rand] = 1
local s = 4000 - xy_speed * z
setTimer ("done", s, 1, rand, x, y, z)
y = y + 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2 - 4, z2, 0, 0, 0 )
elseif (move == 4) and (z ~= 1) and (free[x][y][z-1] == 0) then
moving[rand] = 1
local s = 3000 - z_speed * z
setTimer ("done", s, 1, rand, x, y, z)
z = z - 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2, z2 - 3, 0, 0, 0 )
elseif (move == 5) and (z ~= options.z) and (free[x][y][z+1] == 0) then
moving[rand] = 1
local s = 3000 - z_speed * z
setTimer ("done", s, 1, rand, x, y, z)
z = z + 1
matrix[x][y][z] = 1
moveObject ( object, s, x2, y2, z2 + 3, 0, 0, 0 )
end
-- setTimer ("move", 100 )
end
« 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 :)