GTAOnline.net

Multi Theft Auto (mta) => Scripting MTA [Lua Center] => Exemples de codes => Discussion démarrée par: spykerc8 le 30 Janvier 2007, 08:51:58

Titre: Scripting Tutorial III - Crazy clothes
Posté par: spykerc8 le 30 Janvier 2007, 08:51:58
Ce tutorial va vous expliquer comment faire en sorte que les vêtements des joueurs changent toutes les x secondes. Nous allons créer une fonction qui sera utiliser pour le système de changement des vêtements.


Vidéo :
[yt=425,350]gOfaC5xpYaQ[/yt]


Compter les vêtements

Premièrement, nous allons compter combien d'items il y a dans chaque catégorie, puis nous allons stocker le résultat dans une table :).

Code: (lua) [Sélectionner]
local count = {}

Nous avons 18 types d'habits à vérifier (toutes les informations seront contenus dans la doc).

Code: (lua) [Sélectionner]
for type = 0, 17 do
--initialize a counter
local clothes = 0
--we increase the counter until it's an invalid clothing ID
while getClothesByTypeIndex ( type, clothes ) ~= false
do clothes = clothes + 1 end
--remember the last one didn't exist: we've got to remove it
--from the count when storing it
count[type] = clothes - 1
end

Note: cette étape *pourrait* être remplacée par une table contenant tous les vêtements, cela n'apporterait que peu d'intérêt cependant.


Créer la fonction de changement des vêtements.

Maintenant que nous avons les ID et infos sur les vêtements, il faut créer la fonction pour les changer. Il faudra prendre en compte certains paramètres que nous allons voir. Commençons par le début  :D :

Code: (lua) [Sélectionner]
function doChangeClothes ()

Nous avons donc notre déclaration, il faut désormais l'appliquer à tout les joueurs. Nous allons donc procéder de la manière suivante : on reçois une table de tous les joueurs sur le serveur, puis on créer une boucle dans la table pour changer leurs vêtements.
Voyons déjà comment recevoir la table de joueurs :

Code: (lua) [Sélectionner]
local players = getElementsByType ( "player" )

Ensuite nous allons utiliser une boucle lua pour affecter chaque joueur présent dans la table.

Code: (lua) [Sélectionner]
for i, player in players do

(i est une valeur commune à tous les languages, elle est une variable d'incrémentation, nous allons avoir tous les joueurs grâce à elle)

Pour changer les vêtements, il faut d'abord choisir les limites de la fonction rand (aléatoire). Nous allons utiliser la fonction 'math.random' de lua. Nous allons par exemple laisser de coté les tatouages car ils ne sont pas visibles sous les vêtements (du type ID 4-12) :

Code: (lua) [Sélectionner]
local accessory = math.random ( 0, 1 )
if accessory == 1 then
--pick an accessory type
type = math.random ( 13, 17 )
else
--pick hairstyles/shirts/trousers/shoes type
type = math.random ( 0, 3 )
end

Les vêtements de type costumes (type ID 17) sont appliqués au haut et au bas du joueur, nous allons donc les enlever s'il devait y avoir :

Code: (lua) [Sélectionner]
if type == 0 or type == 2 then
removePlayerClothes ( player, 17 )
end

Maintenant que nous avons nos types, nous allons sélectionner un vêtement de façon aléatoire avec cette fonction :

Code: (lua) [Sélectionner]
local clothing = math.random ( 0, count[type] )

Il ne nous reste plus qu'à appliquer ces vêtements au joueur.

Code: (lua) [Sélectionner]
--we get the texture and model via getClothesByTypeIndex
texture, model = getClothesByTypeIndex ( type, clothing )
--and we add that piece of clothing to the player.
addPlayerClothes ( player, texture, model, type )

Il ne faut pas oublier de fermer la boucle ainsi que la fonction.

Code: (lua) [Sélectionner]
end
end


Lancer la fonction

Pour finir, nous déclencherons la fonction de façon répétitive, quand ce script 'resource' (cela sera expliquer par la team MTA..) est lancée.

Code: (lua) [Sélectionner]
addEventHandler("onResourceStart", getRootElement(), "clothesStart")
function clothesStart ( resourcename )

Notre fonction 'clothesStart' devrait être appelée seulement quand le script est chargé. La ligne ci-dessous fera en sorte que le script ignore toute ressource chargée. 

Code: (lua) [Sélectionner]
if resourcename ~= getThisResource() then return end

Et pour finir le tout, nous allons utiliser la fonction 'setTimer' pour appeler notre fonction toutes les deux secondes.

Code: (lua) [Sélectionner]
--0 means infinite times, until the timer is killed
setTimer ( "doChangeClothes", 2000, 0 )
end


Voilà, c'est fini, si vous avez bien suivi, vous aurez surement compris la majorité du tuto, qui était plutôt facile  :P


CODE COMPLET :
Code: (lua) [Sélectionner]
local count = {}
addEventHandler("onResourceStart", getRootElement(), "clothesStart")
function clothesStart ( resourcename )
if resourcename ~= getThisResource () then return end
--we'll count how many clothes there are for each type and store the numbers in the 'count' table.
for type = 0, 17 do
local clothes = 0
--we count the clothes for that type by checking each item until no texture is returned.
while getClothesByTypeIndex ( type, clothes ) ~= false do clothes = clothes + 1 end
--then we store the number
count[type] = clothes
end
setTimer ( "doChangeClothes", 2000, 0 )
end

function doChangeClothes ()
--we store all players in a table
local players = getElementsByType ( "player" )
--for each player in that table,
for i, player in players do
--choose a random type from 0 to 17
type = math.random ( 0, 17 )
if type == 0 or type == 2 then removePlayerClothes ( player, 17 ) end
--types 4-12 don't exist
if type > 3 and type < 13 then type = math.random ( 0, 3 ) end
--we pick a random item from the chosen type
local clothing = math.random ( 0, count[type] )
--we get its texture and model via getClothesByTypeIndex
texture, model = getClothesByTypeIndex ( type, clothing )
--and we add that piece of clothing to the player.
if texture and model then addPlayerClothes ( player, texture, model, type ) end
end
end
Titre: Re : Scripting Tutorial III - Crazy clothes
Posté par: Labiloute le 30 Janvier 2007, 11:25:42
Cool un new tuto  8) rappeler moi c'est qoi comme langage pour mtasa c++ ?

Salut et bonne journée 8)
Titre: Re : Scripting Tutorial III - Crazy clothes
Posté par: bmxmancky le 30 Janvier 2007, 14:32:11
C'est lua, comme dans les mods de HL.
Titre: Re : Scripting Tutorial III - Crazy clothes
Posté par: Grounch le 30 Janvier 2007, 19:02:07
Ah bah y'a pas grand chose a écrire par rapport aux autres :ninja

Je laisse faire les grands codeurs pour les mods :)
Titre: Re : Scripting Tutorial III - Crazy clothes
Posté par: spykerc8 le 30 Janvier 2007, 19:17:23
Ce tuto est vraiment plus simple que les autres, franchement j'ai pas eu trop de mal, sauf sur certains trucs je sais pas à quoi ca sert :/