Yoxino
Advanced User
- Joined
- Aug 12, 2009
- Messages
- 478
- Reaction score
- 51
Witam!
Dzi? chcia?bym zabra? g?o? w sprawie dot. tworzenia dodatkowych funkcji wykonawczych. Jest to rzecz bardzo przydatna w programowaniu, kt?ra sprawi ?e kod b?dzie bardziej przejrzysty. Pisz? to dlatego i? prawie nikt z pocz?tkuj?cych i ?rednio zaawansowanych skrypter?w tego nie u?ywa (zak?adam ?e nie potrafi). A wi?c do dzie?a:
1. Przyk?ad zastosowania dodatkowej funkcji
Oto przyk?ad w/w funkcji, jest to skrypt talkactions, kt?ry atakuje po wypowiedzieniu !attack. Jest to skrypt wy??cznie na potrzeby tematu, nikomu go NIE POLECAM! Na pocz?tku kod bez u?ycia funkcji:
Jak wida? jest to d?ugi kod, musimy osobno deklarowa? wszystkie warunki dla gracza i dla playera. A teraz zr?bmy to za pomoc? dodatkowej funkcji:
Jak wida? kod jest bardziej przejrzysty. Zastosowalismy tutaj 2 funkcje: onSay, attack(w?asn?). W funkcji attack dodali?my parametry, a w funkcji onSay zainicjowali?my j?. O tym wszystkim w nast?pnych cz?sciach.
2. Tworzenie prostej funkcji zwracaj?cej:
Napiszemy teraz prost? funkcj? zwracaj?c? true w razie powodzenia i false w razie niepowodzenia.
W funkcji onUse wykonujemy warunek w kt?rym wykonujemy metod? "wykonaj" i sprawdzamy czy metoda wykonaj zwraca true lub false (decyduje o tym funckcja random, kt?ra wybiera losowo liczb? pomi?dzy 0 a 1 a potem zmienia jej posta? 0 - false/1-true). Nast?pnie je?eli metoda "wykonaj" zwr?ci true wy?wietla si? text "Uda?o si?", w odwrotny wypadku "Nie uda?o si?".
3. Przekazanie paramet?w do funkcji
W tym rozdziale zajemiemy si? przekazaniem parametr?w(informacji) do funkcji dodatkowej. Na podstawie powy?szego kodu przeka?emy parametry (liczba1, liczba2) spo?r?d nich metoda b?dzie wybiera?a liczb? kt?r? zwr?ci:
4. Prawa autorskie:
Zezwalam na rozpowszechnianie tego skryptu tylko je?eli znajdzie si? tam stopka:
"Created by Yoxino (forum.tibia.net.pl)"
No i to by?o by na tyle. Mam nadziej? ?e komu? si? to przyda i ?e nie pisa?em tego na marno ;P
#Down :
1, 2 - pomy?ka przy pisaniu kodu, po prostu liter?wki. Zmieniaj?c go kilka razy wcze?niej nie zauwa?y?em ich. (Poprawione)
3 - nazwa "wykonaj" jest po to aby by?o ?atwiej zrozumie?... Funkcja random w funkcji wykonaj jest tylko po to aby co? dzia?o si? z parametrem przes?anym do tej funkcji. Co do return to specjanie nie zrobi?em tak jak ty napisa?e? aby by?o ?atwiej zrozumie?... Napewno nie ka?dy pocz?tkuj?cy skrypter zrozumie:
lepiej jest to roz?o?y? na if'y...
Pozdrawiam!
Yoxino
Dzi? chcia?bym zabra? g?o? w sprawie dot. tworzenia dodatkowych funkcji wykonawczych. Jest to rzecz bardzo przydatna w programowaniu, kt?ra sprawi ?e kod b?dzie bardziej przejrzysty. Pisz? to dlatego i? prawie nikt z pocz?tkuj?cych i ?rednio zaawansowanych skrypter?w tego nie u?ywa (zak?adam ?e nie potrafi). A wi?c do dzie?a:
1. Przyk?ad zastosowania dodatkowej funkcji
Oto przyk?ad w/w funkcji, jest to skrypt talkactions, kt?ry atakuje po wypowiedzieniu !attack. Jest to skrypt wy??cznie na potrzeby tematu, nikomu go NIE POLECAM! Na pocz?tku kod bez u?ycia funkcji:
PHP:
function onSay(cid, words, param, channel)
local config = {
wymagany_lvl = 45,
wymagany_mlvl = 15,
lvl = getPlayerLevel(cid),
mlvl = getPlayerMagLevel(cid),
target = getCreatureTarget(cid),
cid_pos = getPlayerPosition(cid)}
target_pos = getPlayerPosition(config.target.uid)
atk_min = (config.lvl * 2 + config.mlvl *3) * 1.2 - 30
atk_max = (config.lvl * 2 + config.mlvl *3) * 1.6
atk = math.random(atk_min, atk_max)
if isPlayer(target.uid) == true then
if lvl >= config.wymagany_lvl then
if mlvl >= config.wymagany_mlvl then
doPlayerAddHealth(config.target.uid,-atk)
else
doPlayerSendTextMessage(cid,22,"Musisz miec " .. config.wymagany_mlvl .. " poziom magiczny aby uzywac tego czaru")
end
else
doPlayerSendTextMessage(cid,22,"Musisz miec " .. config.wymagany_lvl .. " poziom aby uzywac tego czaru")
end
end
if isCreature(target.uid) == true then
if lvl >= config.wymagany_lvl then
if mlvl >= config.wymagany_mlvl then
doCreatureAddHealth(config.target.uid,-config.atk)
else
doPlayerSendTextMessage(cid,22,"Musisz miec " .. config.wymagany_mlvl .. " poziom magiczny aby uzywac tego czaru")
end
else
doPlayerSendTextMessage(cid,22,"Musisz miec " .. config.wymagany_lvl .. " poziom aby uzywac tego czaru")
end
end
end
Jak wida? jest to d?ugi kod, musimy osobno deklarowa? wszystkie warunki dla gracza i dla playera. A teraz zr?bmy to za pomoc? dodatkowej funkcji:
PHP:
function onSay(cid, words, param, channel)
lvl = getPlayerLevel(cid)
mlvl = getPlayerMagLevel(cid)
target = getCreatureTarget(cid)
cid_pos = getPlayerPosition(cid)
target_pos = getPlayerPosition(target.uid)
atk_min = (lvl * 2 + mlvl *3) * 1.2 - 30
atk_max = (lvl * 2 + mlvl *3) * 1.6
atk = math.random(atk_min, atk_max)
attack(cid, target.uid, atk, lvl, mlvl)
end
function attack(cid, who, how_much, lvl, mlvl)
local config = {
wymagany_lvl = 45,
wymagany_mlvl = 15}
if lvl >= config.wymagany_lvl then
if mlvl >= config.wymagany_mlvl then
if isPlayer(who) == true then
doPlayerAddHealth(who,-how_much)
end
if isCreature(who) == true then
doCreatureAddHealth(who,-how_much)
end
else
doPlayerSendTextMessage(cid,22,"Musisz miec " .. config.wymagany_mlvl .. " poziom magiczny aby uzywac tego czaru")
end
else
doPlayerSendTextMessage(cid,22,"Musisz miec " .. config.wymagany_lvl .. " poziom aby uzywac tego czaru")
end
end
2. Tworzenie prostej funkcji zwracaj?cej:
Napiszemy teraz prost? funkcj? zwracaj?c? true w razie powodzenia i false w razie niepowodzenia.
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
if wykonaj() == true then
doPlayerSendTextMessage(cid, 22, "Udalo sie")
else
doPlayerSendTextMessage(cid, 22, "Nie udalo sie")
end
end
function wykonaj()
local rand = math.random(0,1)
if rand == 0 then
return false
else
return true
end
end
W funkcji onUse wykonujemy warunek w kt?rym wykonujemy metod? "wykonaj" i sprawdzamy czy metoda wykonaj zwraca true lub false (decyduje o tym funckcja random, kt?ra wybiera losowo liczb? pomi?dzy 0 a 1 a potem zmienia jej posta? 0 - false/1-true). Nast?pnie je?eli metoda "wykonaj" zwr?ci true wy?wietla si? text "Uda?o si?", w odwrotny wypadku "Nie uda?o si?".
3. Przekazanie paramet?w do funkcji
W tym rozdziale zajemiemy si? przekazaniem parametr?w(informacji) do funkcji dodatkowej. Na podstawie powy?szego kodu przeka?emy parametry (liczba1, liczba2) spo?r?d nich metoda b?dzie wybiera?a liczb? kt?r? zwr?ci:
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
local liczba = wykonaj(1,30)
doPlayerSendTextMessage(cid, 22, liczba)
end
function wkonaj(liczba1, liczba2)
return math.random(liczba1, liczb2)
end
4. Prawa autorskie:
Zezwalam na rozpowszechnianie tego skryptu tylko je?eli znajdzie si? tam stopka:
"Created by Yoxino (forum.tibia.net.pl)"
No i to by?o by na tyle. Mam nadziej? ?e komu? si? to przyda i ?e nie pisa?em tego na marno ;P
#Down :
1, 2 - pomy?ka przy pisaniu kodu, po prostu liter?wki. Zmieniaj?c go kilka razy wcze?niej nie zauwa?y?em ich. (Poprawione)
3 - nazwa "wykonaj" jest po to aby by?o ?atwiej zrozumie?... Funkcja random w funkcji wykonaj jest tylko po to aby co? dzia?o si? z parametrem przes?anym do tej funkcji. Co do return to specjanie nie zrobi?em tak jak ty napisa?e? aby by?o ?atwiej zrozumie?... Napewno nie ka?dy pocz?tkuj?cy skrypter zrozumie:
Code:
return rand == 0 and false or true
Pozdrawiam!
Yoxino