Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
Connexion avec identifiant, mot de passe et durée de la session

 
avancée

249938 Messages dans 13845 Fils de discussion- par 6285 Membres - Dernier membre: pokerman

04 Février 2012 à 20:51:07
GTAOnline.frMulti Theft AutoScripting MTA [lua Center]Exemples de codesScripting Tutorial III - Crazy clothes
Pages: [1]   Bas de page
Imprimer
Auteur Fil de discussion: Scripting Tutorial III - Crazy clothes  (Lu 2421 fois)
0 Membres et 1 Invité sur ce fil de discussion.
spykerc8
Hors ligne Hors ligne


Administrateur
GTAOnline Legend
*

'The GTAOnline.fr GodFather'

Messages: 3288


WWW



mrspykerc8

« 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 Sourire.

Code: (lua)
local count = {}

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

Code: (lua)
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  Très souriant :

Code: (lua)
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)
local players = getElementsByType ( "player" )

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

Code: (lua)
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)
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)
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)
local clothing = math.random ( 0, count[type] )

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

Code: (lua)
--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)
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)
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)
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)
--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  Tire la langue


CODE COMPLET :
Code: (lua)
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
Journalisée



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




Labiloute
XSA
Hors ligne Hors ligne


Tueur en série
*

Messages: 210


WWW
« Répondre #1 le: 30 Janvier 2007 à 11:25:42 »

Cool un new tuto  Cool rappeler moi c'est qoi comme langage pour mtasa c++ ?

Salut et bonne journée Cool
Journalisée


bmxmancky
Hors ligne Hors ligne


Grand Banditisme
*

Messages: 88


« Répondre #2 le: 30 Janvier 2007 à 14:32:11 »

C'est lua, comme dans les mods de HL.
Journalisée
Grounch
Le seul Russe du forum
Hors ligne Hors ligne


GTAOnline Big Member
*

Mafieux en stage

Messages: 332






« Répondre #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 Sourire
Journalisée

spykerc8
Hors ligne Hors ligne


Administrateur
GTAOnline Legend
*

'The GTAOnline.fr GodFather'

Messages: 3288


WWW



mrspykerc8

« Répondre #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 :/
Journalisée



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




Pages: [1]   Haut de page
Imprimer
Aller à:  

Theme créé par padexx et modifié par GTAOnline.fr
Page générée en 0.586 secondes avec 23 requêtes.
Forum GTAOnline.fr 2.0 | Design par : Lalu et GtaManiac
Merci a toute la communaute pour son support !
Copyright © 2004-2012 - GTAOnline.fr | GTAPro.com