Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Poradnik] LUA - pisz skrypty jakie chcesz!


rafaeru

Rekomendowane odpowiedzi

Opublikowano

Spis treści:

1. Co to jest ?

2. Zmienne

3. Algebra Bool'a

4. Funkcje warunkowe

5. Pętle

6. Tablice

7. Nowe funkcje

8. Lua a OTS

9. Zakończenie

 

LUA

 

1. Co to jest ?

 

Lua − język skryptowy pierwotnie zaprojektowany dla rozszerzenia funkcjonalności różnych aplikacji, jednak często używany jako samodzielny język. Lua wiąże w sobie prostą składnię procedury (podobną do Pascala) z konstrukcjami opisu danych opartymi na tablicach asocjacyjnych i rozszerzalnej semantyce.
Język ten zaimplementowany jest jako mała biblioteka języka C, napisana według standardu ANSI C. Celami implementacji są: prostota, wydajność i przenośność kodu.
ź:wikipedia.org
 
 
Jak wiemy, albo nie wiemy lua nie jest jakimś specjalnym językiem wymyślonym tylko dla Tibi. Znając jego podstawy powinniśmy dać sobie rade w skryptach innych gier np. GTA SAMP, Metin2, WoWa.
Dodatkowo może to pomóc nam w pisaniu skryptów do np. XenoBota.
 
Dobra koniec wstępu.
 
2. Zmienne
 
Hmm... jaki by tu podać przykład z życia aby wyjaśnić wam zmienne.
Może tak: idziecie do restauracji z dziewczyną i wcześniej zająłeś stolik, żeby potem nie szukać restauracji z wolnym stolikiem. Kelner się was pyta o nazwisko na jakie zostało zarezerwowane miejsce więc podajecie Kowalski i wtedy kelner prowadzi was na to miejsce.
 
Czyli miejsce zostało przypisane do nazwiska.
 
Inny przykład: Dzwonicie dopiero, żeby zarezerwować miejsce w restauracji i kelner przez telefon się was pyta: Nazwisko, ile osób i kiedy.
Kelner sobie to musi zapisać, żeby nie zapomnieć albo jak go w ten dzień nie będzie w pracy to żeby wiedział jego kolega.
nazwisko Kowalski
osob 2
10.02.215
W lua taki przykład możemy zaprezentować w następujący sposób:
nazwisko = "Kowalski"
ile_osob = 2
kiedy = "10.02.2015"

W lua mamy 5 rodzai  zmiennych:

 

nil - nic ( w innych językach występuje jako null, none)

boolean - prawda albo fałsz (1 lub 0)

number - liczba (np. -20, -5.6, 1, 60, 5012314123)

string - tekst np. "Ala ma kota", "Kowalski",

tablica - o tym później 

 

Jak znamy już wszystkie typy to coś wyjaśnię

 

czemu 10.02.2015 w przykładzie z kelnerem zapisałem w cudzysłowu  "10.02.2015" ponieważ nie jest to numer bo ma dwie kropki więc zalicza się do tekstu a zmienne z tekstem zapisujemy z cudzysłowem.

 

Jak ktoś używa ściągniętych skryptów XenoBota to ma do czynienia ze zmiennymi ponieważ config takiego skryptu to nic innego jak zmienne które są poniżej wykorzystywane w kodzie. 

 

W lua występują zmienne lokalne i globalne:

 

Lokalne - to takie które są wykorzystywane tylko w danym pliku czy funkcji.

Globalne - to takie z których może korzystać wiele plików.

 

Dobra, tyle pisze o tych zmiennych ale po co to w ogóle jest ?

 

Przykład:

local efekt = 2
doSendMagicEffect(getCreaturePosition(cid), efekt)

Jak możemy się domyślić ten skrypt powinien wyświetlić efekt o numerze 2 na naszej postaci. 

local przed nazwą zmiennej określa czy jest lokalna czy globalna, jak byśmy chcieli zapisać zmienną globalną efekt dla wszystkich funkcji (co może być niebezpieczne jeśli stosujesz jej nieumyślnie) zapiszemy tak:

efekt = 2
doSendMagicEffect(getCreaturePosition(cid), efekt)

Ale ktoś zapyta czemu nie mogliśmy wstawić 2 zamiast efekt w kodzie. Mogliśmy:

doSendMagicEffect(getCreaturePosition(cid), 2)

Ha i po co mi te wszystkie zmienne!

 

No dobra to teraz chce wyświetlić ten efekt 6 razy:

doSendMagicEffect(getCreaturePosition(cid), 2)
doSendMagicEffect(getCreaturePosition(cid), 2)
doSendMagicEffect(getCreaturePosition(cid), 2)
doSendMagicEffect(getCreaturePosition(cid), 2)
doSendMagicEffect(getCreaturePosition(cid), 2)
doSendMagicEffect(getCreaturePosition(cid), 2)

Dobra działa, ale efekt 2 słabo wygląda (domyślnie to te dymki) chce efekt 0 (blood hit)

i co ? teraz trzeba zmieniać 6 razy z 2 na 0.

No niby nie problem ale gdyby nasz kod był bardziej złożony moglibyśmy nie doszukać się jakiejś 2 i efekt 2 by został. Co prawda inny wygląd efektu nie jest niebezpieczny, jeśli popełnilibyśmy taki błąd z inną funkcją to skrypt by się nie wczytał a w najgorszym wypadku crashował by serwer.

Dlatego ważna jest przejrzystość kodu.

 

Wasze zadanie: Jak powinien wyglądać kod z tymi 6 efektami ze zmienną ?

Odpowiedź:

local efekt = 0
doSendMagicEffect(getCreaturePosition(cid), efekt)
doSendMagicEffect(getCreaturePosition(cid), efekt)
doSendMagicEffect(getCreaturePosition(cid), efekt)
doSendMagicEffect(getCreaturePosition(cid), efekt)
doSendMagicEffect(getCreaturePosition(cid), efekt)
doSendMagicEffect(getCreaturePosition(cid), efekt) 

 

Zmienne tak czy siak będą wam potrzebne bo się pogubicie we własnych kodach.

 

3. Algebra Bool'a

 

Pisze tu o tym ponieważ wg mnie łatwiej będzie zrozumieć następny punkt poradnika a jest to dość proste i logiczne.

George Boole był matematykiem, logikiem i filozofem.

Wymyślił swoją matematykę a wygląda ona tak:

 

                       0+0 = 0           0*0 = 0          nie0 = 1

                       1+0 = 1           1*0 = 0          nie1 = 0

0+1 = 1           0*1 = 0

1+1 = 1           1*1 = 1

 

słowo "nie" oznacza negację.

 

Ahh gdyby matematyka była taka prosta. 

 

Jak wiecie ze szkoły, albo nie w zbiorach mamy Sumę i Iloczyn 

suma - lub

iloczyn - i

 

I jak to w matematyce jest: suma to łączna część zajęta przez zbiory a iloczyn to część wspólna zbiorów

 

Suma:

256px-Set_union.png

 

Iloczyn:

256px-Set_intersection.png

 

Ale po co to tu napisałem zobaczycie w następnym punkcie.

 

4. Funkcje warunkowe

 

Nikt nie lubi jak coś dzieje się bez jego wiedzy. W skrypcie też nie możemy sobie pozwolić, żeby coś działo się samo.

 

Weźmy przykład: Jesteśmy adminami OTS'a i chcemy skrypt który da graczowi 10cc za wbicie 50lvl.

function onAdvance(cid, skill, oldlevel, newlevel)
doPlayerAddItem(cid, 2160,10)
end

Niby funkcja przy awansie, powinien dostać 10cc. Ale patrzymy a na serwerze ludzie mają pełno cc bo nie ważne czy to sword, magic, fishing czy level ludzie dostają po 10cc za każdy skill. Nie powiedzieliśmy skryptowi jakie ktoś musi spełnić warunki aby skrypt zadziałał.

function onAdvance(cid, skill, oldlevel, newlevel)
   if getPlayerLevel(cid) >= 50 then
      doPlayerAddItem(cid, 2160,10)
   end
end

Dobra wprowadziliśmy małą poprawkę ale to jeszcze nie jest ideał ponieważ jak ktoś wbije 50 lvl i potem spadnie do 49lvl i znowu wbije to znowu dostanie 10cc ...

function onAdvance(cid, skill, oldlevel, newlevel)
   if getPlayerLevel(cid) >= 50 and getPlayerStorageValue(cid,10234) ~= 1 then
      doPlayerAddItem(cid, 2160,10)
      setPlayerStorageValue(cid,10234,1)
   end
end

Teraz to wyjaśnijmy:

funkcja przy awansie
   jeśli level gracza większe równe 50 i szufladka gracza 10234 różna od 1 wtedy 
      daj graczowi 10cc
      zapełnij jego szufladkę liczbą 1
   koniec warunku
koniec funkcji

Jak widzimy każdy if ma: then i end

 

IF warunek THEN:

   co ma się stać

END

 

Przykłady z życia:

 

jeśli mam 18 lat wtedy

    mogę kupić alkohol

koniec warunku

 

 

 

 

 

W TRAKCIE BUDOWY !

  • Aive zmienił(a) tytuł na [Poradnik] LUA - pisz skrypty jakie chcesz!
  • 7 miesięcy temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...