
W tym tygodniu napiszemy skrypt, który będzie pozwalać na losowe zmienianie ubioru.. W tym przykładzie ustawimy zmiany na 2 sekundy, ale pamiętaj, że podczas zmiany ubrania może wystąpić krótki lag. Dlatego radzimy ustawiać skrypt tak, aby zmieniał ubrania w dość dużych odstępach czasu..
Video: scriptvideo3.avi – XviD codec (640×480, 30fps)
Skrypt: script3.lua

Policzmy ubrania…
Na samym początku pracy, musimy policzyć ile tak naprawdę mamy ubrać w każdej kategorii. Będziemy je trzymać w tabeli:
local count = {}
Mamy 18 różnych rodzajów ubrań. (będzie to udokumentowane tak jak reszta ID, kiedy mod zostanie wydany):
for type = 0, 17 do –wywołujemy licznik
local clothes = 0–stosujemy pętlę typu while, aby zwiększać go aż dojdzie do nieprawidłowego ID ubrania
while getClothesByTypeIndex ( type, clothes ) ~= false do
clothes = clothes + 1
end –pamiętajmy, że ostatni id w ogóle nie istnieje. Musimy go skasował
–z licznika, w którym jest przechowywany
count[type] = clothes – 1
end
Uwaga: Można również zrobić to za pomocą tabeli, jako że każda niezmodowana kopia gry ma taką samą liczbę ubrań w każdej kategorii.
Tworzenie funkcji zmieniającej ubrania
Przejdźmy do napisania głównej funkcji, która będzie faktycznie zmieniać ubrania. Na początku zadeklarujmy samą funkcję, abyśmy potem mogli jej używać:
function doChangeClothes ()
Teraz udostępnijmy ją dla każdego z podłączonych graczy. Można ich uzyskać, poprzez pobranie tabeli, w której są przechowywani przez serwer, potem zapętlimy skrypt tak, aby korzystając z niej zmieniać ubrania.. Pobierzmy więc samą tabelę:
local players = getElementsByType ( ‘player’ )
Następnie zastosujmy funkcję Lua FOR, jaką jeden z rodzajów pętli, aby przemieszczać się pomiędzy każdym z graczy w tabeli.
for i, player in players do
Na początku musimy wybrać ubranie losując je za pomocą funkcji Lua math.random. Nie zajmiemy się tatuażami, bo ich zwyczajnie nie widać pod ubraniami (ID 4-12):
local accessory = math.random ( 0, 1 )
if accessory == 1 then –ustawiamy akcesoria, takie jak okulary type = math.random ( 13, 17 ) else –następnie zajmujemy się fryzurami/koszulkami/spodniami/butami
type = math.random ( 0, 3 ) end
Ubrania, które są kompletami (ID 17) są normalnie zakładane na koszulki I spodnie, dlatego usuniemy je, jeżli zajdzie taka potrzeba:
if type == 0 or type == 2 then removePlayerClothes ( player, 17 ) end
Teraz zwyczajnie wylosujmy typ ubrania:
local clothing = math.random ( 0, count[type] )
–…I ubierzmy naszego gracza.
–pobieramy teksturą i model za pomocą funkcji getClothesByTypeIndex
texture, model = getClothesByTypeIndex ( type, clothing ) –I oczywiście zmieniamy sam wygląd gracza.
addPlayerClothes ( player, texture, model, type )
Nie wolno nam zapomnieć, aby zakończyć pętlę ‘for’ i deklarację funkcji.
End
End
Uruchomienie funkcji
Wreszcie, uruchamiamy naszą funkcję, jeżli ‘dane źródłowe’ będą pasowały do naszej funkcji (bardziej dokładniej opisane zostaną za chwilę) i kiedy ona sama startuje.
addEventHandler(‘onResourceStart’, getRootElement(), ‘clothesStart’)
function clothesStart ( resourcename )
Nasza funkcja clothesStart powinna być wywoływana tylko, gdy TEN skrypt startuje. Ta linia kodu zapobiega ładowania danych, które nie pasują do skryptu:
if resourcename ~= getThisResource() then return end
Ustawmy licznik za pomocą funkcji setTimer tak jak w poprzednim tutorialu. Wywoływać będziemy naszą funkcję co dwie sekundy. Język Lua korzysta z danych czasowych w postaci milisekund. Jedna sekunda odpowiada 1000 milisekund.
–0 znaczy tyle, co nieskończoność, a właściwie do czasu, kiedy licznik zostanie zatrzymany
setTimer ( ‘doChangeClothes’, 2000, 0 )
end
To tyle w tym tygodniu. Jeżeli masz jakieś pytania – zapraszamy na forum.

2010-03-20 18:30:27
no ja <komuna>......