Xayan
Senior User
- Joined
- Jul 4, 2009
- Messages
- 2,608
- Reaction score
- 390
- Age
- 28
Witam!
Zdecydowa?em si? napisa? ten poradnik z my?l? o pocz?tkuj?cych skrypterach. My?l?, ?e wszystko odpowiednio wyt?umacz?.
1. O LUA og?lnie.
LUA jest j?zykiem skryptowym stosowanym do prywatnych serwer?w Tibii oraz World of Warcraft. Jednak nie tylko. Przydaje si? tak?e przy programowaniu w innych j?zykach, np. C++.
Przyk?adowo:
Mamy gr?. Za ka?dym razem, gdy chcemy doda? nowe poziomy, edytujemy kod gry i od nowa musimy go kompilowa?. Kiedy u?yjemy plik?w LUA, w kt?rych b?d? znajdowa? si? dane poziom?w, kompilacja b?dzie zb?dna.
2. Co nam b?dzie potrzebne?
Og?lnie wystarczy notatnik, ale ja proponuj? Notepad++. Jest to program freeware, kt?ry mo?na pobra? st?d: .
Umo?liwia on otwarcie wielu plik?w na raz, co znacznie przyspiesza ich edycj?. Ma r?wnie? mas? przydatnych funkcji, mi?dzy innymi tasker, dzi?ki kt?remu mo?emy co? nagra? (np. ruchy i kliki myszk?), a nast?pnie to odtworzy?. Zach?cam do poznania wszystkich dost?pnych funkcji.
3. Funkcje g??wne.
Tak wi?c: skrypt LUA sk?ada si? z g??wnej funkcji oraz kodu zawartego w niej. G??wna funkcja okre?la, przy jakiej czynno?ci skrypt zostanie aktywowany. I oto funkcje, kt?re wyst?puj? w silniku The Forgotten Server:
Jak pewnie wiesz, w folderze silnika znajduj? si? podfoldery, ka?dy do innego rodzaju skrypt?w.
Ka?d? funkcj? g??wn? nale?y zako?czy? s?owem end.
4. Pierwszy skrypt.
Zr?bmy skrypt, kt?ry b?dzie przyzywa? smoka, gdy co? powiemy.
Tak wi?c musimy zacz?? od funkcji g??wnej:
Teraz, aby smok zosta? przyzwany, musimy wstawi? odpowiedni? funkcj? mi?dzy te dwie linijki kodu:
Jak wida?, w funkcji musz? zosta? u?yte dwie dane. Name, czyli nazwa potwora oraz pos, czyli pozycja, na kt?rej potw?r zostanie przyzwany. Mamy przyzwa? smoka, wi?c zamiast name wpisujemy "Dragon". Koniecznie z cudzys?owami, poniewa? bez nich, silnik wzi??by imi? za zmienn?. O tym za chwil?.
Tak wi?c obecny skrypt wygl?da nast?puj?co:
Lecz po co r?cznie wpisywa? pozycj?? Teraz zastosujemy zmienn?! Prezentuje si? ona nast?puj?co:
Jak widzimy, przez s?owo local "m?wimy" silnikowi, ?e jest to zmienna. Jednak gdzie j? umie?ci? w skrypcie? Bezpo?rednio po rozpocz?ciu g??wnej funkcji, czyli w drugiej linijce. Teraz mo?emy wpisa? dowoln? nazw? zmiennej, np. pozycjagracza. Natomiast zamiast funkcja wpisujemy:
Owa funkcja pobiera pozycj? gracza i zapisuje j? w zmiennej pozycjagracza. Cid w funkcji oznacza, ?e tyczy si? ona osoby wykonuj?cej czynno??.
Teraz mo?emy u?y? naszej zmiennej w funkcji przyzywaj?cej smoka. Teraz ca?y skrypt wygl?da nast?puj?co:
Koniec. Oto ca?y skrypt.
5. Zwrotnice, czyli if oraz else.
Napiszmy prosty skrytp, kt?ry da graczowi 4200 expa.
Proste, prawda? No to teraz zr?bmy, ?e se skryptu mo?e skorzysta? gracz z lvl'em r?wnym 1. Stosujemy do tego instrukcj? if.
Nast?pnie dodajemy funkcj?...
Instrukcj? if trzeba zako?czy? tak samo, jak funkcj? g??wn?, czyli na ko?cu wpisujemy s??wko end. Ca?y skrypt b?dzie wygl?da? wi?c nast?puj?co:
Teraz podam wam "znaki" stosowane w instrukcji if:
Jednak ulepszmy troch? skrypt. Je?eli gracz nie ma pierwszego levela, to niech zostanie o tym poinformowany. U?yjmy do tego else:
@Xart:
Dzi?ki xP
Zdecydowa?em si? napisa? ten poradnik z my?l? o pocz?tkuj?cych skrypterach. My?l?, ?e wszystko odpowiednio wyt?umacz?.
1. O LUA og?lnie.
LUA jest j?zykiem skryptowym stosowanym do prywatnych serwer?w Tibii oraz World of Warcraft. Jednak nie tylko. Przydaje si? tak?e przy programowaniu w innych j?zykach, np. C++.
Przyk?adowo:
Mamy gr?. Za ka?dym razem, gdy chcemy doda? nowe poziomy, edytujemy kod gry i od nowa musimy go kompilowa?. Kiedy u?yjemy plik?w LUA, w kt?rych b?d? znajdowa? si? dane poziom?w, kompilacja b?dzie zb?dna.
2. Co nam b?dzie potrzebne?
Og?lnie wystarczy notatnik, ale ja proponuj? Notepad++. Jest to program freeware, kt?ry mo?na pobra? st?d: .
Umo?liwia on otwarcie wielu plik?w na raz, co znacznie przyspiesza ich edycj?. Ma r?wnie? mas? przydatnych funkcji, mi?dzy innymi tasker, dzi?ki kt?remu mo?emy co? nagra? (np. ruchy i kliki myszk?), a nast?pnie to odtworzy?. Zach?cam do poznania wszystkich dost?pnych funkcji.
3. Funkcje g??wne.
Tak wi?c: skrypt LUA sk?ada si? z g??wnej funkcji oraz kodu zawartego w niej. G??wna funkcja okre?la, przy jakiej czynno?ci skrypt zostanie aktywowany. I oto funkcje, kt?re wyst?puj? w silniku The Forgotten Server:
Code:
Actions
onUse(cid, item, fromPosition, itemEx, toPosition)
TalkActions
onSay(cid, words, param, channel)
GlobalEvents
onThink(interval, lastExecution)
Movements
onStepIn(cid, item, position, fromPosition)
onStepOut(cid, item, position, fromPosition)
onAddItem(moveitem, tileitem, position, cid)
onRemoveItem(item, tile, pos)
CreatureScripts
onLogin(cid)
onLogout(cid)
onAdvance(cid, skill, oldLevel, newLevel)
onSendMail(cid, receiver, item, openBox)
onSendMail(cid, sender, item, openBox)
onJoinChannel(cid, channel, users)
onLeaveChannel(cid, channel, users)
onLook(cid, thing, position, lookDistance)
onKill(cid, target)
Jak pewnie wiesz, w folderze silnika znajduj? si? podfoldery, ka?dy do innego rodzaju skrypt?w.
Ka?d? funkcj? g??wn? nale?y zako?czy? s?owem end.
4. Pierwszy skrypt.
Zr?bmy skrypt, kt?ry b?dzie przyzywa? smoka, gdy co? powiemy.
Tak wi?c musimy zacz?? od funkcji g??wnej:
Code:
onSay(cid, words, param, channel)
end
Teraz, aby smok zosta? przyzwany, musimy wstawi? odpowiedni? funkcj? mi?dzy te dwie linijki kodu:
Code:
doCreateMonster(name, pos)
Jak wida?, w funkcji musz? zosta? u?yte dwie dane. Name, czyli nazwa potwora oraz pos, czyli pozycja, na kt?rej potw?r zostanie przyzwany. Mamy przyzwa? smoka, wi?c zamiast name wpisujemy "Dragon". Koniecznie z cudzys?owami, poniewa? bez nich, silnik wzi??by imi? za zmienn?. O tym za chwil?.
Tak wi?c obecny skrypt wygl?da nast?puj?co:
Code:
onSay(cid, words, param, channel)
doCreateMonster("Dragon", pos)
end
Lecz po co r?cznie wpisywa? pozycj?? Teraz zastosujemy zmienn?! Prezentuje si? ona nast?puj?co:
Code:
local nazwazmiennej = funkcja
Jak widzimy, przez s?owo local "m?wimy" silnikowi, ?e jest to zmienna. Jednak gdzie j? umie?ci? w skrypcie? Bezpo?rednio po rozpocz?ciu g??wnej funkcji, czyli w drugiej linijce. Teraz mo?emy wpisa? dowoln? nazw? zmiennej, np. pozycjagracza. Natomiast zamiast funkcja wpisujemy:
Code:
getCreaturePosition(cid)
Owa funkcja pobiera pozycj? gracza i zapisuje j? w zmiennej pozycjagracza. Cid w funkcji oznacza, ?e tyczy si? ona osoby wykonuj?cej czynno??.
Teraz mo?emy u?y? naszej zmiennej w funkcji przyzywaj?cej smoka. Teraz ca?y skrypt wygl?da nast?puj?co:
Code:
onSay(cid, words, param, channel)
local pozycjagracza = getCreaturePosition(cid)
doCreateMonster("Dragon", pozycjagracza)
end
Koniec. Oto ca?y skrypt.
5. Zwrotnice, czyli if oraz else.
Napiszmy prosty skrytp, kt?ry da graczowi 4200 expa.
Code:
onUse(cid, item, fromPosition, itemEx, toPosition)
doPlayerAddExp(cid, 4200)
end
Proste, prawda? No to teraz zr?bmy, ?e se skryptu mo?e skorzysta? gracz z lvl'em r?wnym 1. Stosujemy do tego instrukcj? if.
Code:
if(getPlayerLevel(cid) == 1) then
Nast?pnie dodajemy funkcj?...
Code:
doPlayerAddExp(cid, 4200)
Instrukcj? if trzeba zako?czy? tak samo, jak funkcj? g??wn?, czyli na ko?cu wpisujemy s??wko end. Ca?y skrypt b?dzie wygl?da? wi?c nast?puj?co:
Code:
onUse(cid, item, fromPosition, itemEx, toPosition)
if(getPlayerLevel(cid) == 1) then
doPlayerAddExp(cid, 4200)
end
end
Teraz podam wam "znaki" stosowane w instrukcji if:
Code:
== - jest r?wne
< - jest mniejsze
> - jest wi?ksze
<= - jest mniejsze, lub r?wne
>= - jest wi?ksze, lub r?wne
~= - w przybli?eniu
Jednak ulepszmy troch? skrypt. Je?eli gracz nie ma pierwszego levela, to niech zostanie o tym poinformowany. U?yjmy do tego else:
Code:
onUse(cid, item, fromPosition, itemEx, toPosition)
if(getPlayerLevel(cid) == 1) then
doPlayerAddExp(cid, 4200)
else
doPlayerSendTextMessage(cid, 4, "This can be using only by players with level 1!")
end
end
@Xart:
Dzi?ki xP