xElf
Advanced User
- Joined
- Apr 6, 2011
- Messages
- 364
- Reaction score
- 48
Witam!
Dzi?, mam zamiar zaprezentowa? m?j ju? zreszt? nie pierwszy, takowy poradnik.
Tak jak sama nazwa wskazuje - jest on o lua. Czy kiedykolwiek marzy?e?, aby zosta? prawdziwym skrypterem? Twoje marzenie dzi? si? spe?ni! W poradniku przebrniemy przez g??wne tajniki lua, kt?re pozwol? wam napisa? chocia?by prosty skrypt. Z w?asnego do?wiadczenia wnioskuj?, ?e wystarczy pozna? tylko podstawy - reszta sama przyjdzie z czasem.
Przed startem chcia?bym tylko przej?? przez par? wa?nych spraw. Na my?li mam oczywi?cie poddzia? kt?ry znajduje si? w ka?dym solidnym poradniku...
Kilka s??w od autora.
Druga sprawa, to prawa autorskie. Ju? na pocz?tku musz? wydusi? z siebie jedno, mnie te? cz?sto wkurzaj?ce zdanie... Zastrzegam sobie kopiowania tego poradnika na inne strony bez mojej zgody!
Dla przypomnienia:
Dobra, koniec pieprzenia, zabierzmy si? w ko?cu za te lua, o kt?rym przez ca?y czas m?wi?.
Pro?ciej m?wi?c... Lua jest bibliotek?, tzn. ma?? cz??ci? j?zyka C oraz cpp. Stosujemy owego j?zyka w r??nych grach (nie zdziwi? si? je?li nawet world of warcraft go u?ywa), aczkolwiek pami?tajmy, ?e forum te jest o tibii, wi?c przy tej tematyce pozosta?my. Pisz?c nasz skrypt u?ywamy jakiegokolwiek edytora tekstowego, mo?e to nawet by? notatnik. Nie polecam program?w Microsoft Office . My za? b?dziemy u?ywa? notepada++, bardzo przyjazny dla u?ytkownika edytor tekstu. Naprawd?, jest to chyba najlepszy takowy program na rynku. Za nim przejdziemy do praktyki, polecam aby? pobra? go , czyli oficjalnej strony producenta. A teraz wr??my do tematu... Jak napisa? skrypt lua? Skrypt lua piszemy tak, aby silnik wykona? dan? czynno??. Za pomoc? funkcji, tzn. "polece?" g??wnie opieraj?cych si? o j?zyk angielski (dlatego warta jest te? znajomo?? j?zyka angielskiego) "zmuszamy" nasz serwer, ?eby zrobi? to i to, np. doda? wszystkim graczom po 100gp. Wiem, ?e na pocz?tku trudno to zrozumie?, ale najzwyczajniej w ?wiecie, po prostu nie wiem jak to wyt?umaczy? i szczerze m?wi?c w?tpi?, aby kto? umia? zrobi? to w lepszy spos?b, ni? zrobi?em to ja :lol:.
Funkcje podstawowe - zawsze powinny znajdowa? si? na samej g?rze skryptu, m?wi? nam jakie og?lnie czynno?ci maj? by? wykonywane.
Funkcje wt?rne - zawsze s? pod funkcj? podstawow?. W porz?dnym skrypcie jest ich o wiele, wiele wi?cej ni? podstawowych (najcz??ciej jest tylko jedna podstawowa).
Najpierw obadajmy funkcje podstawowe. Lista owych, znajduje si? poni?ej.
G??wne:
Creaturescripts (po zalogowaniu, po zabiciu potwora itp.):
Globalne:
Wyt?umacz? funkcje g??wne, te najcz??ciej u?ywane...
Mo?na to nazwa? "po klikni?ciu". Co to znaczy? Znaczy to, ?e po klikni?ciu na dan? rzecz, co? si? staje. Np. klikam na d?wignie i dostaj? 10gp.
Po wej?ciu na dan? kratk? co? si? dzieje.
Po wyj?ciu z danej kratki co? si? dzieje.
Po napisaniu danej wiadomo?ci co? si? dzieje.
Po w?o?eniu do np. plecaka co? si? dzieje.
Rzadko u?ywane, po wywaleniu czego? z np. plecaka co? si? dzieje.
Ja osobi?cie tej funkcji nigdy w ?yciu nie u?y?em, ale wydaj? mi si?, ?e u?ywamy jej gdy np. chcemy aby skrypt wywo?a? nast?puj?c? sytuacje:
k?adziemy plate armor na ziemi i dostajemy 500gp. Chyba. :>
Negatywnie do powy?szej funkcji.
Zgaduj?, ?e funkcji wt?rnych jest ponad 200, wi?c opisywanie wszystkich zaj??o by mi wieczno??. Aby nie rozci?ga? posta, umieszcz? je wszystkie w notatniku, kt?rego mo?ecie pobra? .
Okej. Teoria funkcji zosta?a przez Ciebie obalona! Gratuluj? :hah:. B?dziemy ich u?ywa? w poddziale "Pierwszy skrypt".
Lista owych:
ACTIONS - tutaj si? praktycznie dzieje wszystko czego u?yjesz (na co klikniesz).
MOVEMENTS - gdy chcemy, aby nasz skrypt wykonywa? np. takow? akcje: wchodzisz na kratk? i bez ?adnego konkretnego powodu, giniesz.
CREATURESCRIPTS - zwi?zane z logowaniem, ?mierci?, wylogowaniem itp. gracza lub kreatury. Na starszych silnikach tego nie ma!
NPC - no raczej wiadomo.
SPELLS Wszelkie czary wykonywane na serwerze.
TALKACTIONS - wszystko co gracz m?wi. Tak te? si? robi komendy dla Goda (wiem, ?e si? podniecili?cie ).
Wydaj? mi si?, ?e to wszystko na temat zdarze?, zatem przejd?my do nast?pnego poddzia?u.
Najpro?ciej po prostu przet?umaczy? to na j?zyk polski.
If - je?li
Else - w innym wypadku (inaczej)
Elseif - przeciwnie, je?li
Return - powr?t (prawie zawsze si? tego u?ywa)
End - koniec. U?ywamy tego zawsze, aby zako?czy? sw?j skrypt.
Na razie skryptu pisa? nie b?dziemy, wi?c wyt?umacz? wam to w inny spos?b.
Napiszmy historyjk?, opieraj?c? si? o powy?sze "czynniki".
Kontynuujmy historyjk?:
Kontynuuj?c:
Ko?czymy historyjk? typowym "the end'em" z tym, ?e tym razem omijamy "the" i wstawiamy tylko "end".
Aha, by?bym zapomnia?. Teraz ostatni warunek "then". U?ywamy go po if'ie. "Then" po polsku, znaczy po prostu "nast?pnie". Nale?y go u?y? w takiej sytuacji:
Bana?, co? No to przejd?my do nast?pnego poddzia?u.
Istniej? dwa typy komentarzy, d?ugi i kr?tki.
Kr?tkie umieszczamy po danej funkcji (najcz??ciej wt?rnej). Aby to zrobi?, musimy wstawi? dwa my?lniki po funkcji.
Na przyk?ad:
Nie mog? one by? zbyt d?ugie, najlepiej ograniczajcie je tylko do jednego akapitu. Gdy komentarz jest d?u?szy, trzeba go umie?ci? w tych znacznikach:
Takowy komentarz mo?emy umie?ci? prawie wsz?dzie (oczywi?cie, nie w ?rodku funkcji, co by?oby ju? totaln? g?upot? :lol.
Czyli - je?li poziom gracza jest mniejszy (<) ni? 50 to...
Je?li poziom gracza jest wi?kszy (>) ni? 50 to...
Je?li poziom gracza jest mniejszy lub r?wny (<=) 50 to...
Je?li poziom gracza jest wi?kszy lub r?wny (>=) 50 to...
Je?li gracz nie posiada 50 lvl'a to skrypt zadzia?a.
Tylko je?li poziom gracza jest r?wny 50 skrypt zadzia?a.
To chyba tyle na temat specjalnych znak?w. Twoja wiedza ju? si? ca?kiem powi?kszy?a, co? :O
Chodzi o to, ?e gdy w danym miejscu wpiszesz "money" to zamiast w?a?nie tej frazy skrypt u?yje liczby "10000". Niewyobra?alnie przydatne gdy np. du?o razy w skrypcie u?yjemy liczby 10000, a chcemy j? zmieni? na 100. Wtedy zamiast szuka? tych dziesi?ciu tysi?cy, po prostu zmieniamy warto?? lokalnej money. Pro?ciutkie .
Natomiast tak si? u?ywa globalnej:
Wtedy wsz?dzie zamiast "globalna" wy?wietli?o by si? "10000". Globalne troch? trudniej zrozumie?, ale z czasem do tego dojdziecie.
Okej, no, ale co by tu napisa?? Na pocz?tek co? prostego. Napiszmy skrypt dzi?ki kt?remu, po klikni?ciu na d?wignie gracz zostaje tutorem i dostaje 10000gp(1cc).
No to tak, zaczynamy od funkcji podstawowej:
Tego w nawiasie nie zmieniamy.
Dobra, jest ju? funkcja podstawowa, to teraz dodajmy lokaln? od pieni?dzy, kt?re posta? dostanie (1cc).
Super, mamy ju? lokaln? i funkcje podstawow?. Niestety skrypt na razie nie b?dzie dzia?a?, bo nie okre?lili?my, itemu, po kt?rym dana czynno?? si? wydarzy. W tym wypadku jest to d?wignia (id 1945).
A wi?c dodajemy funkcje wt?rn? z warunkiem.
Ja?niej: "je?li id itemu to 1945 to...
No to teraz trzeba doda? funkcje wt?rne, ?eby gracz zosta? tutorem i dosta? 1cc.
Po edycji, Tw?j skrypt powinien tak oto wygl?da?:
Wyja?nienie: "setPlayerGrupId(cid,2)" oznacza to samo co "zmie? rang? gracza". W nawiasach "(cid,2)" ustawiamy rang?, czyli 2 kt?ra jest r?wnoznaczna z pozycj? tutora. "cid" to po prostu nasza posta?, bardzo cz?sto si? tego u?ywa.
"doCreatureAddMoney(cid,money)" - znaczy to "dodaj graczowi pieni?dzy". Cid, ju? wiemy, a "money" to lokalna kt?rej u?yli?my wcze?niej.
Natomiast "doPlayerSendTextMessage(cid,22,"Well done, you're a tutor now!") znaczy "gracz wysy?a wiadomo??". Cid - teraz wiadomo co to znaczy, a wi?c przejd? do reszty. 22 - kolor tekstu kt?ry zostanie wys?any przez gracza (ja da?em 22, czyli ???ty). Tekst umieszczony w cudzys?owie jest wiadomo?ci? kt?ra zostanie wys?ana przez gracza.
Nasz skrypt jest ju? teoretycznie sko?czony, ale dodajmy jeszcze par? rzeczy. Zr?bmy tak, ?eby d?wigni mog?a u?ywa? osoba tylko z poziomem 50, lub wy?szym. Aby to zrobi? musimy zedytowa? nasz pierwszy warunek na:
"And" to najzwyklejsze "i" a "getPlayerLevel(cid) znaczy "level gracza". Cid wiadomo. P??niej mamy ">= 50". Mieli?my ju? o tym w innym poddziale, ale dla przypomnienia. "Je?li poziom gracza jest wi?kszy, lub r?wny 50 to...".
Teraz nasz ca?y skrypt powinien wygl?da? w ten spos?b:
?wietnie. Teraz musimy doda? warunek "else" (inaczej), ?eby okre?li? co si? stanie je?li gracz nie ma 50 poziomu. No wi?c dodajemy to do skryptu:
Else - ju? wiecie co to znaczy. Funkcja pod warunkiem po prostu zatrzyma skrypt, tak aby nie zosta? on wykonany. Oczywi?cie, dzieje si? tak tylko je?li gracz nie posiada 50 poziomu.
Nasz skrypt wygl?da tak:
Hmmmm.... co? tu jest ?le. No tak! Zapomnieli?my o zako?czeniu (end) i powrocie (return true). A wi?c dodajmy je do skryptu:
Dlaczego s? dwa ko?ce? Nie zapominajmy, ?e ka?dy if te? musi posiada? sw?j w?asny end.
Teraz, ?eby skrypt poprawnie zadzia?a?, trzeba doda? tak? linijk? do actions.xml:
Gratulacje! W?a?nie napisa?e? sw?j pierwszy skrypt! Mo?esz teraz przej?? do nast?pnego poddzia?u.
Nie umiem wyt?umaczy? czym one s?, wi?c po prostu przer?bmy to w praktyce.
To jest p?tla for:
for var = 1,4 do - to jest nasza p?tla.
print(var) - wydrukuje nam liczby 1-4 (1, 2, 3, 4).
Ka?da p?tla posiada swoj? w?asn? zmienn?, nie mo?e ona wygl?da? w ten spos?b:
Je?li chcia?by?, ?eby Twoja p?tla tak podzia?a?a to musia?by? to zrobi? w ten spos?b:
Warto wspomnie?, ?e ka?da p?tla potrzebuje w?asnego end'u.
Teraz u?yjmy p?tli w skrypcie. Za???my, ?e piszemy skrypt, w kt?rym posta? dostaje backpack, a w ?rodku owego znajduj? si? 3 takie same rzeczy.
W praktyce to wygl?da tak:
P?tla while sprawi, ?e wiadomo?? b?dzie wysy?ana, p?ki gracz nie osi?gnie setnego poziomu. While s? prawdopodobnie najprostszymi p?tlami.
Przyk?ad:
Tej p?tli nie b?dziecie zbyt cz?sto u?ywa?.
Na koniec chcia?bym jeszcze przypomnie?, o prawach autorskich (prosz? si? do moich zalece? stosowa?).
By nie wyj?? na z?ego dupka, powiem, ?e par? informacji o p?tlach ?ci?gn??em z poradnika Evil Hero na Otlandzie. Poradnik jest po Angielsku, wi?c du?o ludzi mia?oby problem ze zrozumieniem go, natomiast ja udost?pni?em go w innej wersji, po Polsku.
Szczerze m?wi?c, to przyjemnie pisa?o mi si? ten artyku?.
Czy kto? doceni m? prac?? Tego nie wiem, licz? na was dziubaski!
Pozdrawiam!
Dzi?, mam zamiar zaprezentowa? m?j ju? zreszt? nie pierwszy, takowy poradnik.
Tak jak sama nazwa wskazuje - jest on o lua. Czy kiedykolwiek marzy?e?, aby zosta? prawdziwym skrypterem? Twoje marzenie dzi? si? spe?ni! W poradniku przebrniemy przez g??wne tajniki lua, kt?re pozwol? wam napisa? chocia?by prosty skrypt. Z w?asnego do?wiadczenia wnioskuj?, ?e wystarczy pozna? tylko podstawy - reszta sama przyjdzie z czasem.
Przed startem chcia?bym tylko przej?? przez par? wa?nych spraw. Na my?li mam oczywi?cie poddzia? kt?ry znajduje si? w ka?dym solidnym poradniku...
Kilka s??w od autora.
Kilka s??w od autora
Pewnie wielu z was zastanawia si?, po co kolejny poradnik o lua. No w?a?nie. Po co? Po co osoba kt?ra posiada tak ma?e poj?cie o lua pisa?a by poradnik? Odpowied? jest prosta... Chcia?bym przywr?ci? martw? stref? tego forum; "Biblioteka kod?w". Ostatnio nic si? w niej niestety nie dzieje. Zmartwi? mnie ten fakt, dlatego w?a?nie pisz? ten poradnik pomimo faktu, ?e czas kt?ry na sko?czenie go po?wi?c? m?g?bym sp?dzi? w ca?kiem inny, lepszy spos?b. Chcia?bym przede wszystkim podzieli? si? z wami informacjami kt?re ja przez sw?j czas nauki zdoby?em (tak naprawd?, nadal si? ucz?). Jest ich sporo, dlatego poradnik przynajmniej powinien by? obszerny, no, ale zobaczymy jak b?dzie.Druga sprawa, to prawa autorskie. Ju? na pocz?tku musz? wydusi? z siebie jedno, mnie te? cz?sto wkurzaj?ce zdanie... Zastrzegam sobie kopiowania tego poradnika na inne strony bez mojej zgody!
Dla przypomnienia:
Osobi?cie, pod ?adnym wzgl?dem nie toleruj? plagiat?w! Prosz?, aby? uszanowa? m? ci??k? prac? i chocia? stosowa? si? do spraw zawartych powy?ej.Plagiaty w Polsce podlegaj? karze grzywny, ograniczenia wolno?ci, albo pozbawienia wolno?ci do lat 3 (Prawo Autorskie i Prasowe, rozdz. 14., art. 115) - s? ?cigane nie tylko z pow?dztwa cywilnego.
Plagiat jest ?cigany przez prokuratora z pow?dztwa karnego - osoby kt?re go pope?niaj?, s? w kr?tkim czasie wzywane do s?du i przes?uchiwane przez prokuratora, a sprawy tocz? si? szybko, a nie ci?gn? si? latami.
Dobra, koniec pieprzenia, zabierzmy si? w ko?cu za te lua, o kt?rym przez ca?y czas m?wi?.
Czym jest lua?
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 wg standardu ANSI C. Celami implementacji s?: prostota, wydajno?? i przeno?no?? kodu.
Pro?ciej m?wi?c... Lua jest bibliotek?, tzn. ma?? cz??ci? j?zyka C oraz cpp. Stosujemy owego j?zyka w r??nych grach (nie zdziwi? si? je?li nawet world of warcraft go u?ywa), aczkolwiek pami?tajmy, ?e forum te jest o tibii, wi?c przy tej tematyce pozosta?my. Pisz?c nasz skrypt u?ywamy jakiegokolwiek edytora tekstowego, mo?e to nawet by? notatnik. Nie polecam program?w Microsoft Office . My za? b?dziemy u?ywa? notepada++, bardzo przyjazny dla u?ytkownika edytor tekstu. Naprawd?, jest to chyba najlepszy takowy program na rynku. Za nim przejdziemy do praktyki, polecam aby? pobra? go , czyli oficjalnej strony producenta. A teraz wr??my do tematu... Jak napisa? skrypt lua? Skrypt lua piszemy tak, aby silnik wykona? dan? czynno??. Za pomoc? funkcji, tzn. "polece?" g??wnie opieraj?cych si? o j?zyk angielski (dlatego warta jest te? znajomo?? j?zyka angielskiego) "zmuszamy" nasz serwer, ?eby zrobi? to i to, np. doda? wszystkim graczom po 100gp. Wiem, ?e na pocz?tku trudno to zrozumie?, ale najzwyczajniej w ?wiecie, po prostu nie wiem jak to wyt?umaczy? i szczerze m?wi?c w?tpi?, aby kto? umia? zrobi? to w lepszy spos?b, ni? zrobi?em to ja :lol:.
Funkcje
Tak jak ju? wspomina?em w poprzednim poddziale, funkcje to polecenia kt?re silnik ma wykona?. W lua funkcji jest bardzo wiele i dziel? si? one na dwie grupy:Funkcje podstawowe - zawsze powinny znajdowa? si? na samej g?rze skryptu, m?wi? nam jakie og?lnie czynno?ci maj? by? wykonywane.
Funkcje wt?rne - zawsze s? pod funkcj? podstawow?. W porz?dnym skrypcie jest ich o wiele, wiele wi?cej ni? podstawowych (najcz??ciej jest tylko jedna podstawowa).
Najpierw obadajmy funkcje podstawowe. Lista owych, znajduje si? poni?ej.
G??wne:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
function onStepIn(cid, item, frompos, itemEx, topos)
function onStepOut(cid, item, frompos, itemEx, topos)
function onSay(cid, words, param)
function onEquip(cid, item, slot)
function onDeEquip(cid, item, slot)
function onAddItem(cid, moveitem, tileitem, position)
function onRemoveItem(cid, moveitem, tileitem, position)
Creaturescripts (po zalogowaniu, po zabiciu potwora itp.):
PHP:
function onLogin(cid)
function onLogout(cid)
function onJoinChannel(cid, channel, users)
function onLeaveChannel(cid, channel, users)
function onAdvance(cid, skill, oldLevel, newLevel)
function onLook(cid, thing, position, lookDistance)
function onSendMail((cid, receiver, open, itemBox)
function onReceiveMail(cid, sender, open, itemBox)
function onTradeRequest(cid, target, item)
function onTradeAccept(cid, target, item)
function onTextEdit(cid, item, newText)
function onReportBug(cid, comment)
function onThink(cid, interval)
function onDirection(cid, old, current)
function onOutfit(cid, old, current)
function onStatsChange(cid, attacker, type, combat, value)
function onAreaCombat(cid, ground, position, aggressive)
function onPush(cid, target)
function onTarget(cid, target)
function onFollow(cid, target)
function onCombat(cid, target)
function onAttack(cid, target)
function onCast(cid, target)
function onKill(cid, target, damage, flags)
function onDeath(cid, corpse, deathList)
function onPreprareDeath(cid, deathList)
Globalne:
PHP:
function onStartUp()
function onShutdown()
function onGlobalSave()
function onRecord(current, old, cid)
function onTime(time)
function onThink(interval)
Wyt?umacz? funkcje g??wne, te najcz??ciej u?ywane...
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
PHP:
function onStepIn(cid, item, frompos, itemEx, topos)
PHP:
function onStepOut(cid, item, frompos, itemEx, topos)
PHP:
function onSay(cid, words, param)
PHP:
function onEquip(cid, item, slot)
PHP:
function onDeEquip(cid, item, slot)
PHP:
function onAddItem(cid, moveitem, tileitem, position)
k?adziemy plate armor na ziemi i dostajemy 500gp. Chyba. :>
PHP:
function onRemoveItem(cid, moveitem, tileitem, position)
Zgaduj?, ?e funkcji wt?rnych jest ponad 200, wi?c opisywanie wszystkich zaj??o by mi wieczno??. Aby nie rozci?ga? posta, umieszcz? je wszystkie w notatniku, kt?rego mo?ecie pobra? .
Okej. Teoria funkcji zosta?a przez Ciebie obalona! Gratuluj? :hah:. B?dziemy ich u?ywa? w poddziale "Pierwszy skrypt".
Zdarzenia
Na Twoim serwerze jest kilka rodzaj?w "zdarze?" (wybaczcie, ale nie wiem jak to nazwa? ). Lista owych:
ACTIONS - tutaj si? praktycznie dzieje wszystko czego u?yjesz (na co klikniesz).
MOVEMENTS - gdy chcemy, aby nasz skrypt wykonywa? np. takow? akcje: wchodzisz na kratk? i bez ?adnego konkretnego powodu, giniesz.
CREATURESCRIPTS - zwi?zane z logowaniem, ?mierci?, wylogowaniem itp. gracza lub kreatury. Na starszych silnikach tego nie ma!
NPC - no raczej wiadomo.
SPELLS Wszelkie czary wykonywane na serwerze.
TALKACTIONS - wszystko co gracz m?wi. Tak te? si? robi komendy dla Goda (wiem, ?e si? podniecili?cie ).
Wydaj? mi si?, ?e to wszystko na temat zdarze?, zatem przejd?my do nast?pnego poddzia?u.
If, Else, Elseif, Return, End
If, Else, Elseif, Return, End - czyli np. co ma si? sta?, je?li dana rzecz nie mo?e zosta? wykonana. Najpro?ciej po prostu przet?umaczy? to na j?zyk polski.
If - je?li
Else - w innym wypadku (inaczej)
Elseif - przeciwnie, je?li
Return - powr?t (prawie zawsze si? tego u?ywa)
End - koniec. U?ywamy tego zawsze, aby zako?czy? sw?j skrypt.
Na razie skryptu pisa? nie b?dziemy, wi?c wyt?umacz? wam to w inny spos?b.
Napiszmy historyjk?, opieraj?c? si? o powy?sze "czynniki".
Notka: ka?dy if, musi posiada? sw?j w?asny end, o tym troch? p??niej.if (je?li) b?d? mia? wystarczaj?co du?o pieni?dzy, to pojad? do sklepu.
end
Kontynuujmy historyjk?:
Notka: else nie musi mie? w?asnego endu, to si? tak?e tyczy elseif'a i returna.else (w innym wypadku) po?ycz? pieni?dze od kolegi.
Kontynuuj?c:
Tak oto stworzyli?my historyjk?. Podsumowuj?c:elseif (przeciwnie, je?li) kolega nie b?dzie mia? pieni?dzy, to zapytam o nie siostr?.
Return true - je?li zastosujemy "return false" to skrypt po prostu nie b?dzie dzia?a? tak jak b?dziemy chcieli.if b?d? mia? wystarczaj?co du?o pieni?dzy, to pojad? do sklepu.
else po?ycz? pieni?dze od kolegi.
elseif kolega nie b?dzie mia? pieni?dzy, to zapytam o nie siostr?.
return true
end
Ko?czymy historyjk? typowym "the end'em" z tym, ?e tym razem omijamy "the" i wstawiamy tylko "end".
Aha, by?bym zapomnia?. Teraz ostatni warunek "then". U?ywamy go po if'ie. "Then" po polsku, znaczy po prostu "nast?pnie". Nale?y go u?y? w takiej sytuacji:
PHP:
if doPlayerRemoveMoney(cid, 10) then
Bana?, co? No to przejd?my do nast?pnego poddzia?u.
Komentarze
Do naszego skryptu mo?emy doda? komentarze. Czasem s? bardzo pomocne.Istniej? dwa typy komentarzy, d?ugi i kr?tki.
Kr?tkie umieszczamy po danej funkcji (najcz??ciej wt?rnej). Aby to zrobi?, musimy wstawi? dwa my?lniki po funkcji.
Na przyk?ad:
PHP:
doCreatureAddMana(cid, 5) -- tutaj Tw?j komentarz
PHP:
--[[
Tw?j komentarz
]]
Znaki wi?kszo?ci, mniejszo?ci i r?wno?ci
W tym poddziale nauczymy si? u?ywa? w?a?nie tych znak?w poprawnie. Teraz gdy ju? wiemy jak u?y? warunku if i funkcji, b?dzie nam o wiele ?atwiej to zrozumie?.
PHP:
if getPlayerLevel(cid) < 50 then
PHP:
if getPlayerLevel(cid) > 50 then
PHP:
if getPlayerLevel(cid) <= 50 then
PHP:
if getPlayerLevel(cid) >= 50 then
PHP:
if getPlayerLevel(cid) ~= 50 then
PHP:
if getPlayerLevel(cid) == 50 then
To chyba tyle na temat specjalnych znak?w. Twoja wiedza ju? si? ca?kiem powi?kszy?a, co? :O
Zmienne Lokalne i Globalne
W skryptach u?ywamy "zmiennych lokalnych". Trudno to wyt?umaczy?, wi?c wyt?umacz? to w praktyce:
PHP:
local money = 10000
Natomiast tak si? u?ywa globalnej:
PHP:
globalna = 10000
Pierwszy Skrypt
Nareszcie! Nie mog?e? si? tego momentu doczeka?, czy? nie? W tym poddziale napiszemy sw?j pierwszy, prawdziwy skrypt uwzgl?dniaj?c jedn? lokaln?! ps:Okej, no, ale co by tu napisa?? Na pocz?tek co? prostego. Napiszmy skrypt dzi?ki kt?remu, po klikni?ciu na d?wignie gracz zostaje tutorem i dostaje 10000gp(1cc).
No to tak, zaczynamy od funkcji podstawowej:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Dobra, jest ju? funkcja podstawowa, to teraz dodajmy lokaln? od pieni?dzy, kt?re posta? dostanie (1cc).
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local money = 10000
A wi?c dodajemy funkcje wt?rn? z warunkiem.
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local money = 10000
if item.itemid == 1945 then
No to teraz trzeba doda? funkcje wt?rne, ?eby gracz zosta? tutorem i dosta? 1cc.
Po edycji, Tw?j skrypt powinien tak oto wygl?da?:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local money = 10000
if item.itemid == 1945 then
setPlayerGroupId(cid, 2)
doCreatureAddMoney(cid, money)
doPlayerSendTextMessage(cid,22,"Well done, you're a tutor now!")
"doCreatureAddMoney(cid,money)" - znaczy to "dodaj graczowi pieni?dzy". Cid, ju? wiemy, a "money" to lokalna kt?rej u?yli?my wcze?niej.
Natomiast "doPlayerSendTextMessage(cid,22,"Well done, you're a tutor now!") znaczy "gracz wysy?a wiadomo??". Cid - teraz wiadomo co to znaczy, a wi?c przejd? do reszty. 22 - kolor tekstu kt?ry zostanie wys?any przez gracza (ja da?em 22, czyli ???ty). Tekst umieszczony w cudzys?owie jest wiadomo?ci? kt?ra zostanie wys?ana przez gracza.
Nasz skrypt jest ju? teoretycznie sko?czony, ale dodajmy jeszcze par? rzeczy. Zr?bmy tak, ?eby d?wigni mog?a u?ywa? osoba tylko z poziomem 50, lub wy?szym. Aby to zrobi? musimy zedytowa? nasz pierwszy warunek na:
PHP:
if item.itemid == 1945 and getPlayerLevel(cid) >= 50 then
Teraz nasz ca?y skrypt powinien wygl?da? w ten spos?b:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local money = 10000
if item.itemid == 1945 and getPlayerLevel(cid) >= 50 then
setPlayerGroupId(cid, 2)
doCreatureAddMoney(cid, money)
doPlayerSendTextMessage(cid,22,"Well done, you're a tutor now!")
PHP:
else
doPlayerSendCancel(cid,"You don't have the required level to use this.")
Nasz skrypt wygl?da tak:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local money = 10000
if item.itemid == 1945 and getPlayerLevel(cid) >= 50 then
setPlayerGroupId(cid, 2)
doCreatureAddMoney(cid, money)
doPlayerSendTextMessage(cid,22,"Well done, you're a tutor now!")
else
doPlayerSendCancel(cid,"You don't have the required level to use this.")
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local money = 10000
if item.itemid == 1945 and getPlayerLevel(cid) >= 50 then
setPlayerGroupId(cid, 2)
doCreatureAddMoney(cid, money)
doPlayerSendTextMessage(cid,22,"Well done, you're a tutor now!")
else
doPlayerSendCancel(cid,"You don't have the required level to use this.")
end
return true
end
Teraz, ?eby skrypt poprawnie zadzia?a?, trzeba doda? tak? linijk? do actions.xml:
PHP:
<action actionid="eg. 5236" event="script" value="Tutorquest.lua"/>
Gratulacje! W?a?nie napisa?e? sw?j pierwszy skrypt! Mo?esz teraz przej?? do nast?pnego poddzia?u.
P?tle
Pewnie zastanawiacie si?, dlaczeg?? to nie umie?ci?em tak zwanych "p?tli" w skrypcie kt?ry napisali?my powy?ej. Niestety, ale nawet ja nie umiem si? nimi do ko?ca pos?ugiwa?. Znam podstawy, kt?rymi si? z wami ch?tnie podziel?. Nie umiem wyt?umaczy? czym one s?, wi?c po prostu przer?bmy to w praktyce.
To jest p?tla for:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
for var = 1,4 do
print(var)
end
return true
end
print(var) - wydrukuje nam liczby 1-4 (1, 2, 3, 4).
Ka?da p?tla posiada swoj? w?asn? zmienn?, nie mo?e ona wygl?da? w ten spos?b:
PHP:
for var = -1,-4 and var = 1,4 do
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
for a = -1,-4 and b = 1,4 do
print(a ..', ' .. b ..'' || ')
end
return true
end
Teraz u?yjmy p?tli w skrypcie. Za???my, ?e piszemy skrypt, w kt?rym posta? dostaje backpack, a w ?rodku owego znajduj? si? 3 takie same rzeczy.
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local backpack = doPlayerAddItem(cid, 1988, 1)
for a = 1,3 do
doAddContainerItem(backpack, 2160, 100)
end
return true
end
Teraz troch? na temat p?tli "while"
While, po polsku "podczas". W praktyce to wygl?da tak:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
while getPlayerLevel(cid) < 100 do
doPlayerSendTextMessage(cid,22,"You need to reach level 100!")
end
return true
end
P?tle Repeat
P?tla "Reapeat" to praktycznie to samo co "while" z tym, ?e p?tla b?dzie si? powtarza? co najmniej raz a dopiero po tym warunek jest sprawdzany. Przyk?ad:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local loop = 0
repeat
doPlayerSendTextMessage(cid, 22, "I'm still looping.")
loop = loop + 1
until loop > 2
return true
end
Koniec
W ko?cu! Nawet nie mo?ecie sobie wyobrazi?, ile czasu sp?dzi?em na pisaniu tego poradnika. Mam nadziej?, ?e Twa wiedza na temat lua si? teraz znacznie powi?kszy?a i umiesz napisa? chocia? prosty skrypt, tak jak zak?ada?em na pocz?tku tego przewodnika. Na koniec chcia?bym jeszcze przypomnie?, o prawach autorskich (prosz? si? do moich zalece? stosowa?).
By nie wyj?? na z?ego dupka, powiem, ?e par? informacji o p?tlach ?ci?gn??em z poradnika Evil Hero na Otlandzie. Poradnik jest po Angielsku, wi?c du?o ludzi mia?oby problem ze zrozumieniem go, natomiast ja udost?pni?em go w innej wersji, po Polsku.
Szczerze m?wi?c, to przyjemnie pisa?o mi si? ten artyku?.
Czy kto? doceni m? prac?? Tego nie wiem, licz? na was dziubaski!
Pozdrawiam!