Forum www.barsawiaots.fora.pl Strona Główna
  FAQ  Szukaj  Użytkownicy  Grupy  Galerie   Rejestracja   Profil  Zaloguj się, by sprawdzić wiadomości  Zaloguj 

[Podstawy skryptów] Elementarz.

Napisz nowy tematOdpowiedz do tematu Forum www.barsawiaots.fora.pl Strona Główna -> Tutoriale
Zobacz poprzedni temat :: Zobacz następny temat
Autor Wiadomość
Nazarian
Administrator



Dołączył: 01 Mar 2008
Posty: 973
Przeczytał: 0 tematów

Pomógł: 12 razy
Ostrzeżeń: 0/5
Skąd: Wąchock/Rzeszów

PostWysłany: Pią 20:41, 05 Wrz 2008 Temat postu: [Podstawy skryptów] Elementarz.

Witam wszystkich zainteresowanych i zapraszam do lektury. W niniejszej lekcji zamierzałem przedstawić, jak napisać skrypt, który pozwoli nam po "użyciu" wspomnianego obiektu 8210 (taka dziura w skale ze schodami w środku) przenieść się o piętro niżej. Pomyślałem jednak, że przyda Wam się pewna elementarna wiedza z dziedziny programowania. Jeśli przeczytacie całość, i nie zrozumiecie nic - pytajcie. Ja po swoim pierwszym kursie programowania nie wiedziałem absolutnie nic. To przychodzi z czasem. Tak więc miłej lektury.

Najpierw słów kilka o skryptach: Przy tworzeniu skryptów dla OTSów pisze się w języku skryptowym LUA. Jest dość prosty, ma niewiele słów kluczowych (tzn. słów, które coś konkretnego w nim robią). W przypadku OTSa ważniejsza jest lista funkcji, przygotowanych przez twórców silnika, które można w skryptach wykorzystać. Zamieszczę ją w osobnym poście. Przy znajomości angielskiego można wydedukować, co dana funkcja robi.

Najpierw zajmę się nieco elementarzem, później wrócę jeszcze do funkcji.
Podstawową jednostką każdego języka programowania (czy to skryptowego czy nie) jest zmienna. Zmienna jest nazwą, pod jaką kryje się jakaś interesująca nas wartość. Jak sama nazwa wskazuje, wartość ta może się zmieniać. Mały przykład:

a = 2
a = a + 1

W pierwszej linijce zmiennej a nadajemy (fachowo nazywa się to przypisaniem) wartość 2. W następnej linijce dodajemy do poprzedniej wartości zmiennej a (czyli dwójki) wartość 1. W rezultacie nasza zmienna będzie mieć wartość 3. Łatwe, prawda?

W zwyczajnych językach programowania są jeszcze stałe - symboliczne nazwy na wartości, których w przeciwieństwie do zmiennych zmieniać nie można. Przykład:

PI = 3.141

Nie wiem jak jest w LUA, w każdym razie C/C++ w takim przypadku zabrania zmiany wartości stałej. Stałe nazywamy zawsze dużymi literami. Tak się przyjęło i należy się tego trzymać dla porządku. Dzięki takiemu trzymaniu się zasad potrafię bez trudu rozczytać kod serwera, mimo że go nie programowałem.

Skoro wiemy już co to zmienna, przejdźmy teraz do funkcji.

Funkcja składa się z trzech rzeczy:
- Nazwy - która jest chyba oczywista Wink. Nie wolno jako nazwy używać słów kluczowych (np. if, then, else, elseif, while, for, do, until, return i jeszcze kilku innych), najlepszym pomysłem, jeśli się nie znamy, jest nazywać funkcje po polsku, jednak BEZ POLSKICH ZNAKÓW!. Nazwa powinna coś mówić o tym, co robi funkcja. Bez tego szybko zginiecie we własnych funkcjach, które zamiast pomagać, będą siały zamęt. W skryptach które dostałem razem z OTSem jest funkcja buy, która jak łatwo się domyślić, służy do kupowania :]. Widzicie więc sami, że warto.

- Argumentów - Tu sprawa jest trudniejsza. Znaczy, nie jest to skomplikowane, ale wymaga pewnego wyjaśnienia. Znów na przykładzie:

Kod:

function isSorcerer(cid)
   if(isPlayer(cid) == FALSE) then
      debugPrint("isSorcerer: Player not found.")
      return false
   end

   return (isInArray({1,5}, getPlayerVocation(cid)) == TRUE)
end


Nasza funkcja nazywa się isSorcerer - co w dosłownym tłumaczeniu można zamienić na "czy czarodziej?". Jak nietrudno się domyślić, sprawdza ona, czy postać o numerze cid (w serwerze wszystkie stworzenia mają numery, dzięki którym są rozpoznawane - jak kod kreskowy) jest czarodziejem. Cid to właśnie argument funkcji - zmienna, dzięki której możemy funkcji zwrócić uwagę na coś konkretnego. Jeśli jeszcze nie rozumiecie, nic nie szkodzi.

To, co mamy powyżej to tzw. prototyp funkcji - zamiast pisać ją wielokrotnie w każdym miejscu, w którym chcemy żeby się wykonała, możemy zamiast tego używać jej nazwy. Taki prototyp określa, jak funkcja o danej nazwie ma się zachowywać, i wystarczy go przygotować tylko raz. Później, jeśli w naszym skrypcie napiszemy:

isSorcerer(1000)

to serwer sprawdzi, czy gracz o numerze 1000 jest czarodziejem.

No dobra, sprawdzi i co? Tutaj pojawia się trzecia rzecz, która jest związana z funkcją - zwracana wartość. W kodzie naszej funkcji odpowiada za nią słówko kluczowe "return". W przykładowej funkcji użyte jest dwa razy: najpierw linijka

if(isPlayer(cid) == FALSE) then

sprawdza, czy stworzenie o numerze cid jest graczem.

Narazie musicie mi wierzyć na słowo, do warunków jeszcze wrócę.

Jeśli nie, każe funkcji zwrócić false - czyli nieprawdę. To dość logiczne, że jeśli podamy do sprawdzenia numer np. szczura, to raczej trudno przypuszczać, że będzie czarodziejem Wink.

Gdybyśmy chcieli w jakimś momencie zwrócić prawdę - piszemy return true.

Cóż nam to daje? Samo napisanie

isSorcerer(1000)

jest o kant dupy potłuc. Serwer sprawdzi, czy stworzenie o numerze 1000 to czarodziej, ale informacja zostanie od razu zgubiona. Trzeba coś z nią zrobić. Można np. zrobić coś takiego:

a = isSorcerer(1000)

Teraz po wykonaniu tej linijki zmienna a będzie miała wartość true (czyli prawda) jeśli stworzenie o numerze 1000 jest graczem, lub false (fałsz) w przeciwnym wypadku.

Uf. To był zupełny, całkowity elementarz. Po jego przeczytaniu może zrozumiecie, jak napisać skrypt, o którym pisałem na początku. Jeśli macie mętne pojęcie o co mi chodzi, to nic, w pracy na przykładzie wszystko się wyjaśni.


Post został pochwalony 0 razy

Ostatnio zmieniony przez Nazarian dnia Pią 20:42, 05 Wrz 2008, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:
Napisz nowy tematOdpowiedz do tematu Forum www.barsawiaots.fora.pl Strona Główna -> Tutoriale Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1


Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB Š 2001, 2005 phpBB Group
Theme bLock created by JR9 for stylerbb.net
Regulamin