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êtementsPremièrement, nous allons compter combien d'items il y a dans chaque catégorie, puis nous allons stocker le résultat dans une table :).
local count = {}
Nous avons 18 types d'habits à vérifier (toutes les informations seront contenus dans la doc).
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 :
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 :
local players = getElementsByType ( "player" )
Ensuite nous allons utiliser une boucle lua pour affecter chaque joueur présent dans la table.
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) :
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 :
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 :
local clothing = math.random ( 0, count[type] )
Il ne nous reste plus qu'à appliquer ces vêtements au joueur.
--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.
end
end
Lancer la fonctionPour 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.
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.
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.
--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 :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