• 16 Février 2019, 04:49:14


Auteur Sujet: Scripting Tutorial III - Crazy clothes  (Lu 5521 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 III - Crazy clothes
« 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
  1. local count = {}
  2.  

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

Code: Lua
  1. for type = 0, 17 do
  2.         --initialize a counter
  3.         local clothes = 0
  4.         --we increase the counter until it's an invalid clothing ID
  5.         while getClothesByTypeIndex ( type, clothes ) ~= false
  6.                 do clothes = clothes + 1 end
  7.         --remember the last one didn't exist: we've got to remove it
  8.         --from the count when storing it
  9.         count[type] = clothes - 1
  10. end
  11.  

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
  1. function doChangeClothes ()
  2.  

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
  1. local players = getElementsByType ( "player" )
  2.  

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

Code: Lua
  1. for i, player in players do
  2.  

(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
  1.                 local accessory = math.random ( 0, 1 )
  2.                 if accessory == 1 then
  3.                         --pick an accessory type
  4.                         type = math.random ( 13, 17 )
  5.                 else
  6.                         --pick hairstyles/shirts/trousers/shoes type
  7.                         type = math.random ( 0, 3 )
  8.                 end
  9.  

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
  1.                 if type == 0 or type == 2 then
  2.                         removePlayerClothes ( player, 17 )
  3.                 end
  4.  

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

Code: Lua
  1.                 local clothing = math.random ( 0, count[type] )
  2.  

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

Code: Lua
  1.                 --we get the texture and model via getClothesByTypeIndex
  2.                 texture, model = getClothesByTypeIndex ( type, clothing )
  3.                 --and we add that piece of clothing to the player.
  4.                 addPlayerClothes ( player, texture, model, type )
  5.  

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

Code: Lua
  1.         end
  2. end
  3.  


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
  1. addEventHandler("onResourceStart", getRootElement(), "clothesStart")
  2. function clothesStart ( resourcename )
  3.  

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
  1. if resourcename ~= getThisResource() then return end
  2.  

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

Code: Lua
  1. --0 means infinite times, until the timer is killed
  2.         setTimer ( "doChangeClothes", 2000, 0 )
  3. end
  4.  


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
  1. local count = {}
  2. addEventHandler("onResourceStart", getRootElement(), "clothesStart")
  3. function clothesStart ( resourcename )
  4.         if resourcename ~= getThisResource () then return end
  5.         --we'll count how many clothes there are for each type and store the numbers in the 'count' table.
  6.         for type = 0, 17 do
  7.                 local clothes = 0
  8.                 --we count the clothes for that type by checking each item until no texture is returned.
  9.                 while getClothesByTypeIndex ( type, clothes ) ~= false do clothes = clothes + 1 end
  10.                 --then we store the number
  11.                 count[type] = clothes
  12.         end
  13.         setTimer ( "doChangeClothes", 2000, 0 )
  14. end
  15.  
  16. function doChangeClothes ()
  17.         --we store all players in a table
  18.         local players = getElementsByType ( "player" )
  19.         --for each player in that table,
  20.         for i, player in players do
  21.                 --choose a random type from 0 to 17
  22.                 type = math.random ( 0, 17 )
  23.                 if type == 0 or type == 2 then removePlayerClothes ( player, 17 ) end
  24.                 --types 4-12 don't exist
  25.                 if type > 3 and type < 13 then type = math.random ( 0, 3 ) end
  26.                 --we pick a random item from the chosen type
  27.                 local clothing = math.random ( 0, count[type] )
  28.                 --we get its texture and model via getClothesByTypeIndex
  29.                 texture, model = getClothesByTypeIndex ( type, clothing )
  30.                 --and we add that piece of clothing to the player.
  31.                 if texture and model then addPlayerClothes ( player, texture, model, type ) end
  32.         end
  33. end
  34.  


~ 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 Labiloute

  • XSA
  • *
  • Tueur en série
  • Messages: 207
    • Voir le profil
    • GTA-Stunt.com
Re : Scripting Tutorial III - Crazy clothes
« Réponse #1 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)


Hors ligne bmxmancky

  • *
  • Tueur
  • Messages: 87
    • Voir le profil
Re : Scripting Tutorial III - Crazy clothes
« Réponse #2 le: 30 Janvier 2007, 14:32:11 »
C'est lua, comme dans les mods de HL.

Hors ligne Grounch

  • Le seul Russe du forum
  • *
  • Bandit
  • Mafieux en stage
  • Messages: 327
    • Voir le profil
Re : Scripting Tutorial III - Crazy clothes
« Réponse #3 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 :)

Hors ligne spykerc8

  • *
  • 'The GTAOnline.fr GodFather'
  • Messages: 3821
    • Voir le profil
    • http://www.gtaonline.fr
Re : Scripting Tutorial III - Crazy clothes
« Réponse #4 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 :/


~ 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 !"