Connect with Facebook
Zanim będziesz mógł pisać posty oraz widzieć niektóre sekcje forum, musisz się zarejestrować.    
Zapomniałem hasła

Wróć   oTibia.net - Tibia & OpenTibia > Boty > Poradniki do botów


oTibia.net
[Elfbot NG] Od zera do skrypt kodera - jak napisać swój pierwszy skrypt.

Dyskusja dotyczaca tematu [Elfbot NG] Od zera do skrypt kodera - jak napisać swój pierwszy skrypt., który znajduje sie w dziale Poradniki do botów (Ten dział jest poświęcony wszystkim poradnikom do botów.) w kategorii Boty (). Tresc: 1. Najczęściej używane funkcje: end - kończy wykonywanie hotkeya (nie dezaktywuje go a po prostu kończy tak jakby już więcej w nim nie było instrukcji) [...]

Zamknięty Temat
 
LinkBack Narzędzia wątku Wygląd
Stare 04-08-2010, 15:19   #1
./autogen.sh
 
Avatar Seymour
 
Zarejestrowany: Feb 2010
Skąd: Ostrów Wielkopolski
Postów: 250
Seymour jest lubiany
Punkty reputacji: 47
Domyślnie [Elfbot NG] Od zera do skrypt kodera - jak napisać swój pierwszy skrypt.

1. Najczęściej używane funkcje:
end - kończy wykonywanie hotkeya (nie dezaktywuje go a po prostu kończy tak jakby już więcej w nim nie było instrukcji)
skip - przechodzi do następnego waypointa
dontlist - dzięki temu bot nie umieści aktywnego hotkeya na liście aktywnych hotkeyi -> użycie: auto 200 dontlist | safe healparalysis 'utani gran hur'
safe - wykona daną akcję, jeżeli aktualnie bot Cie nie leczy
listas 'TEKST' - przeciwieństwo 'donlist', zapisuje hotkey na liście, jako TEKST


2. Krótkie wprowadzenie.


a) Co to zmienna?
- Jest to symbol odpowiadający jakiejś wartości.
Przykład:
$mp jest zmienną w Elfbocie, która jest liczbą Twojej aktualnej many

b) Jak porównać zmienną do wartości?
- Jak w matematyce, tylko, że zamiast '=' używasz '==': '==' '<' oraz '>', a jeżeli chcesz sprawdzić czy zmienna jest równa lub mniejsza niż dana wartość użyj '<='.
Przykład:
$mp > 300 zwróci prawdę, jeżeli masz mniej niż 300 many, jeżeli więcej to zwróci fałsz (także w wypadku równości).

c) Mogę porównać zmienną z inną zmienną?
- Oczywiście, że tak
Przykład:
$mp == $hp zwróci prawdę jeżeli masz tyle samo many ile hp

d) Dlaczego '==' a nie '='?
- Aby to wytłumaczyć musiałbym poświęcić na to oddzielny punkt poradnika. Powiem tyle, że jest tak w programowaniu i tego trzymają się twórcy Elfbota. Po prostu używaj '==' bez zbędnych pytań.

e) Dlaczego '>=' a nie '>=='?
- '>' oraz '<' ma zastosowanie tylko do porównywania wartości dlatego bot sam się 'domyśla' co chcesz zrobić i nie potrzebujesz pisać '>=='.

f) Jak sprawdzić czy X nie jest równe Y?
- Użyj '!='.

3. Jak stworzyć prosty warunek.

Aby powiedzieć botowi aby sprawdzić czy coś jest prawdą, użyj:
if [sprawdź czy prawda] { akcja }
Zawsze pamiętaj o '[', ']', '{' oraz '}'.

Przykład:

Wykona akcję zawartą pomiędzy '{' i '}', tylko wtedy, gdy będziesz mieć więcej niż 300 many.

Wyjaśnienie:

'$mp > 300' zamieni się w 'true' jeżeli będziesz mieć więcej niż 300 many, lub 'false' gdy mniej. Oczywiście pamiętaj, że 'akcja' zostanie wykonana tylko i wyłącznie wtedy gdy '$mp > 300' zwróci 'true' czyli prawdę.

4. Jak wykonać więcej niż jedną akcję. Na temat "|".

Jeżeli chcesz wykonać więcej niż jedną akcję oddziel je używając "|".

Przykład:

Wykona akcję1, akcję2 i na koniec akcję3.

Powinieneś/powinnaś wiedzieć też, że używając "|" możesz oddzielić kilka warunków (bloków "if"). Jest to tak samo proste jak z akcjami.


5. Bardziej zaawansowane warunki. Na temat "&&" i "||".



&& - identyczne z 'i', 'oraz'
|| - identyczne z 'albo', 'lub'

a) Używając '&&' możesz sprawić, że bot sprawdzi czy 2 warunki zwrócą true i tylko wtedy wykonał daną akcję.


Przykład:

Tak, tak. Możesz sprawdzić więcej niż tylko 2 warunki.

Wyjaśnienie:
Tak jak mówiłem wcześniej, bot wykona daną akcję tylko wtedy, gdy pomiędzy '[' i ']' znajdą się same true (prawdy). Poniżej jest kilka objaśnień.

$mp > 300 zwróci true, jeżeli masz więcej niż 300 many
$hp < 300 zwróci true, jeżeli masz mniej niż 300 hp

Jeżeli wszystkie warunki zwrócą true, powinno to wyglądać mniej więcej tak:
a gdy drugie zwróci false:
Akcja w takim wypadku nie zostanie wykonana.

b) Używając '||' możesz zmusić bota na wykonanie, jeżeli KTÓRYKOLWIEK z warunków zwróci true.

Przykład:


Wyjaśnienie:
Przykład zwróci true, jeżeli masz więcej niż 300 many mniej niż 300 hp. Znaczy to, że akcja zostanie wykonana, jeżeli jeden z tych warunków jest prawdziwy.

c) Możesz też użyć obydwóch, '||' oraz '&&' na raz!
Jak?
Po prostu użyj '(' oraz ')' do oddzielenia warunków. Jak poniżej:

Warunek umieszczony pomiędzy nawiasami '(' i ')' zwróci tylko JEDNO, true lub false. Oznacza to, że '($hp > 600 || $cap < 800)' zwróci tylko jedną wartość. Tak, więc akcja zostanie wykonana tylko wtedy, gdy masz więcej niż 300 many oraz (więcej niż 600 hp lub mniej niż 800 capa).

Nie jest to jeszcze tak dobrze wyjaśnione tak jak bym chciał. Więc:
($hp > 600 || $cap < 800) zwróci true, jeżeli jeden z warunków jest prawdą (true). Natomiast false, jeżeli obydwa są fałszem (false).
($hp > 600 && $cap < 800) zwróci true, jeżeli obydwa warunki są prawdą. False, jeżeli jeden z nich jest fałszem.

Identycznie jak w matematyce. Działania w nawiasach zwracają tylko jedną wartość:
5 - (5+4-5+3)
(5+4-5+3) zwróci 7. Czyli wynik to -2.

Konieczne jest używanie '&&' oraz '||'?
- nie, ale jeżeli chcesz uniknąć skomplikowanych kodów, w których nie da się połapać to lepiej ich używaj

Przykład:
Kod powyżej może być zapisany zgrabniej i bardziej oczywiście:

Nie uważaj, że ten drugi kod (z użyciem '&&') jest łatwiejszy, zgrabniej napisany i mniej skomplikowany?
PS: W niektórych przypadkach będziesz zmuszony/a do użycia kodów takich jak ten powyżej (bez '&&'). Wytłumaczę je w punkcie 6, poniżej.


6. Trochę bardziej skomplikowane warunki.


Ten punkt jest na temat sprawdzania wielu warunków i wykonywanie danych akcji, jeżeli dane warunki zostaną spełnione.

Przykład:
Wyjaśnienie:
Kod z przykładu sprawdzi czy masz mniej niż 400 hp. Jeżeli tak to dalej bot napotka warunek sprawdzający czy masz mniej niż 100 many, co skutkuje wykonaniem akcji 'say exura'. Następnie jest warunek sprawdzający czy masz więcej niż 100 many, jeżeli tak to bot wykona akcję 'say exura gran'.
Możliwe jest stworzenie jeszcze bardziej skomplikowany warunków, jak poniżej:

Poszukaj teraz początków i końców poszczególnych bloków 'if'. Nie dostajesz może bólu głowy? :P Dobrą wiadomością jest to, że raczej nie ma takiego skryptu, który by potrzebował tak skomplikowanych warunków. Przytoczyłem to, aby pokazać jak skomplikowane skrypty można napisać.

WAŻNE:
Jeżeli chcesz umieścić 2 bloku 'if' po sobie to oddziel je używając '|'. Jak poniżej:

Są to 2 bloki 'if' zawarte w innym bloku.
Skrypt powyżej jest całkowicie poprawny, podczas gdy ten poniżej jest totalną bzdurą.

7. Kiedy nie musisz używać "{", "}" oraz bloków 'if'.



eraz będą coraz bardziej skomplikowane i trudne do zrozumienia rzeczy, będziesz też musiał/a częściej testować wszystko, aby zrozumieć.

a) Kiedy nie trzeba stosować "{" i "}".
Szczerze to nie jest to zbyt trudne. Przypominam, że nie musisz ich unikać, ale jest to tak jak wcześniej pisałem pomoc w pisaniu przejrzystych skryptów i odnosi się tylko do tych małych, tak, więc skomplikowane skrypty ZAWSZE wymagają "{" i "}" (pisząc skomplikowane mam na myśli te z wieloma instrukcjami).
Przykładem gdzie można uniknąć pisania tych nawiasów klamrowych może być skrypt leczenia:

Bot sam rozpoznaje koniec warunku [$hp < 400] bo jest on zamknięty w nawiasach, potem tylko czyta do końca akcję.

Klamer możesz uniknąć też na końcu skryptu:

Musze przyznać, że nie jest to zbyt dobry pomysł. Głównie ze względu na przyszłe usprawnienia skryptu, możesz po prostu nie zauważyć braku nawiasów na końcu.

Ostatni przypadek, w którym można uniknąć nawiasów występuje, gdy masz ciąg warunków (bloków 'if'), tzn. jeżeli jest warunek, który spełniony ma pozwolić na sprawdzenie drugiego.


Nie wydaje Ci się, że po usunięciu klamer będzie ładniej?

Jak wspomniałem wcześniej, poeksperymentuj z tym, aby lepiej to zrozumieć.

WAŻNE!
Pamiętaj, że umieszczenie "|" po akcji (po deklaracji "if [warunek] akcja") równe jest rozpoczęciu nowej akcji, np. if [$hp < 300] say 'exura gran' | if [$hp < 500] say 'exura'
Jest to CAŁKOWICIE niepoprawne.


b) Jak uniknąć bloków "if"?
Tak naprawdę to chodzi tu o usunięcie "if [sprawdź]" jednym wyrazem. Twórcy Elfbota dali "kilka" takich funkcji, aby ułatwić nam pisanie skryptów ;p


Przykłady:

auto 200 ifplayeronscreen playsound 'playeronscreen.wav' - Zagra muzykę z pliku 'playeronscreen.wav’, jeżeli znajdzie gracza na ekranie.
auto 200 safe healparalysis 'utani gran hur' - Użyje gran hura, jeżeli jesteś sparaliżowany i bot aktualnie Cie nie leczy (safe).
auto 200 targethplower 600 say 'exevo gran mas vis' - Użyje ue, jeżeli cel ma mniej niż 600 hp.


8. O wiadomościach.

ym razem nauczymy się wszystkiego na temat wiadomości. Jest to podstawowy aspekt zaawansowanych skryptów Elfbota. Potrzebny jest w refillerach czy auto responderach, oraz w miarę chęci do kierowanie postacią będącego całkowicie AFK kolegi. Pewnie teraz pytasz jak to kierować??? Proste. Ustawiasz żeby kolega pisał do Ciebie jak go ktoś, np. bije. Jeżeli ustawisz akcję na dane wiadomości to możesz sprawić, że postać kolegi zaatakuje PKera, da x loga, ucieknie do miasta, napisze do swoich kolegów żeby pomogli, itp... dosłownie COKOLWIEK! Nie chcesz się tego nauczyć?!?! Na pewno tak =]

Nadszedł czas, aby wytłumaczyć wszystko na temat otrzymanych wiadomości.
Istnieją 3 funkcje umożliwiające sprawdzenie tychże wiadomości na trzy różne sposoby:
$curmsg - sprawdza coś na temat każdej otrzymanej wiadomości (nie zalecam używania tej zmiennej w wypadku, gdy nie chcemy sprawdzać 2 razy tej samej wiadomości)
$lastmsg - sprawdza coś na temat ostatnio otrzymanej wiadomości
$lastnavmsg - sprawdza coś na temat ostatnio otrzymanej wiadomości nawigacyjnej (navigation system)

Aby "sprawdzić coś" na temat wiadomości musisz określić, CO. To 'co' zamieniasz ze słowem wartość z poniższego przykładu:

$lastmsg.wartość

Wcześniej dałem listę dostępnych wartości.

Przykład:


Sprawdzi czy nick tego co wysłał ostatnią wiadomość zawiera w sobie 'GM'.

Wyjaśnienie:
Jak zapewne zauważyłeś/aś użyłem operatora "?" aby sprawdzić czy nick zawiera 'GM'. Konkretnie pozwala on na sprawdzenie pozycji tekstu x w tekście y.


Akcja zostanie wykonana jeżeli bot znajdzie tekst2 w tekście1.

b) Wysyłanie wiadomości.

Jest to tylko spis funkcji wysyłających określone wiadomości na dane kanały:
gamesay 'something' - mówi coś na game-chat
guildsay 'something' - mówi coś na guild-chat
helpsay 'something' - mówi coś na help
npcsay 'something'- mówi coś na npc-chat
pm 'Furao Dutra' 'something' - wysyła wiadomości prywatną do Furao Dutra (jest to przypadkowy nick, który wymyśliłem na miejscu do użycia w poradniku)
rlsay 'something' - mówi coś na real-life chat
say 'something' - mówi coś na default chat
tradesay 'something' - mówi coś na trade

Mimo, że jest to tylko spis funkcji to czuję konieczność dania przykładu... ;p

Przykład:
Sprawdzi czy ostatnia otrzymana wiadomość została wysłana przez kogoś o napisie "GM" lub "CM" w nicku i napisze pm do Furao Dutra żeby go przelogował. Oczywiście ten przykład będzie spamować bo nie sprawdzam czy ta wiadomość jest taka sama jak ta sprawdzona poprzednio... Jest to jednak tylko przykład dlatego nie rozwinąłem go w celu utrzymania prostoty.

c) Użytek.
Wiem, że dałem już przykład ale opis praktycznego użycia jest raczej zalecany.

Jeżeli chcesz napisać komuś to co ktoś do Ciebie napisał:

Jeżeli chcesz napisać coś na default jeżeli dany gracz coś do Ciebie napisze:
Jeżeli chcesz aby Twój char coś zrobił po otrzymaniu określonej wiadomości od danego gracza użyj:

Pamiętaj, że to są tylko niedokończone przykłady, które nie będą wcale dobrze działać w praktyce. Do dobrego sprawdzania wiadomości TYLKO raz służy pętla o których poniżej. Jednak nie wykluczam, że można to zrobić bez pętli sprawdzając czy zmienna, np. $mes istnieje a jeżeli nie to zapisać do niej tekst danej wiadomości. W przypadku istnienia $mes sprawdzić jej wartość (poprzednią wiadomość) z wiadomością pobraną tym razem, jeżeli się nie pokrywają oznacza to otrzymanie nowej wiadomości.

9. Pętle.


Co to pętla?
- jest to wyznaczony blok skryptu wykonywany określoną ilość razy aż do zwrócenia końca pętli.

Po co to?
- głównie używa się tego do sprawdzenia czegoś na temat każdego stwora/gracza/npc na ekranie lub do sprawdzenia czegoś na temat każdej otrzymanej wiadomości

Są 3 typy pętli w Elfbocie:
a) foreach 'typlisty' $zmienna { akcja }
- tworzy listę czegoś (graczy, stworów lub wiadomości), co zdefiniujesz, jako 'typlisty' i zapisuje jej element do zmiennej wykonuje akcję i znowu zapisuje element listy do zmiennej, lecz już następny (czyli jeżeli jest to scarab, larva, scarab to po kolei najpierw zapisze do zmiennej scarab potem larva i na koniec scarab)

b) while [warunek] { akcja }
- wykonuje daną akcję tak długo jak warunek zwraca true

c) loop 'numer' { akcja }
- wykonuje akcję określoną ilość razy, podane, jako numer

WAŻNE!
Tylko pętla 'foreach' jest dozwolona w hotkeyach


9.1 Foreach
Jak zawsze na początek przykład

Wyśle wiadomość do Fura Dutra za każdym razem gdy wykryje kogoś na ekranie.

Jak to działa?
Słowo kluczone 'foreach' mówi botowi, że jest to pętla z listą typu 'floorplayers', która sprawia, że sprawdza on graczy znajdujących się na ekranie i będących na tym samym poziomie (floorze) co ty. Sprawdza każdego po kolei. Najpierw zapisuje dane gracza do zmiennej $var a potem wykonuje akcję. Pamiętaj, że nie musisz używać '$var' może to być cokolwiek, np. $jakistamgraczzekranu (polecam jednak jak najkrótsze nazwy ;p). Jest tu jednak pewien błąd (w przykładzie). Napisze on do 'Furao Dutra', że jesteś na swoim ekranie bo jak już pisałem sprawdza coś na temat graczy znajdujących się na Twoim ekranie, także Ciebie. Poprawny kod powinien wyglądać tak:

Dodałem tylko warunek, który nie pozwaala na wykonanie akcji jeżeli nick sprawdzanego gracza jest równy twojemu.

Poniżej zamieszczam dostępne typy list:
allcreatures, allplayers, allmonsters, floorcreatures, floorplayers, floormonsters, screencreatures, screenplayers, screenmonsters, shootablecreatures, shootableplayers, shootablemonsters, newmessages


Jak już powinieneś wiedzieć, możliwe jest sprawdzenie czegoś na temat każdej nowej otrzymanej wiadomości. Aby to zrobić użyj pętli 'newmessages'.

9.2 While
Jak już wcześniej wspomniałem, pętle 'while' wykonają daną akcję tylko wtedy gdy warunek zwróci true. Dla przykładu:
Będzie kupować 20 mana potionów tak długo jak długo nie będziesz mieć ich przynajmniej 200

Jak to działa?
- najpierw sprawdzi czy warunek "[$itemcount.268 < 200]" zwróci true. Jeżeli tak sie stanie zostanie wykonana akcja "buyitems 268 20".

W jakim typach skryptów ta pętla jest użyteczna?
- głównie w refillerach, itp.

9.3 Loop
Ta pętla wykona akcję tyle razy ile będziesz chciał.
Przykład:
Kupi 20 itemów o ID 268 2 razy.

Ta pętla raczej nie wymaga szczegółowego opisu... ;p

9.4 Szkielety funkcji
Jak można zauważyć w przykładach nie umieszczałem akcji w nawiasach klamrowych "{" i "}". Jeżeli zrozumiałeś punkt poradnika mówiący o tym kiedy te nawiasy trzeba i kiedy nie trzeba używać to powinno to być wiadome, że nie użyłem ich tutaj bo jest to koniec hotkeya i nie potrzeba było. Poniżej zamieszczam szkielety pętli:

9.5. Pętla w pętli?
Oczywiście, że jest to możliwe! Możesz umieścić je w ten sposób:

10 Jak pisać refillery


W końcu dotarliśmy do ostatniego już podpunktu tego poradnika. Refillery są znane, jako najtrudniejsza część pisania skryptów, mija się to dalece z prawdą. W pisaniu refillerów trudne jest tylko wymyślenie jak bot ma obkupywać postać. Ze względu na brak jednego uniwersalnego rozwiązania każdy musi myśleć nad własnym. Uwierz mi jednak, że jest to łatwiejsze, niż co niektóre naprawde trudne i skomplikowane skrypty. Dobra, teraz wytłumaczę wszystko, co jest potrzebne do napisania refillerów ^^

10.1 Główny zarys wiedzy, który potrzebujesz do tego typu skryptów.
a) Do pisania refillerów nie wystarczy kilka funkcji i deklaracje 2 zmiennych. Musisz też znać się na waypointach Elfbota, aby nie wtopić w mieście z pominięciem 'WALK' ;p


b) Waypointy refillera prawie zawsze trzeba zawrzeć w 2 'blokach'. Coś w tym stylu:

Raczej nie potrzeba dodatkowych wyjaśnień.

c) W oknie cavebota w prawym górnym rogu jest przycisk 'hotkeys'. Jest to lista hotkeyi (jeden hot na linię) wykonywanych tylko wtedy, gdy opcja 'follow waypoints' jest włączona.

d) Używaj "walk" do poruszania się w mieście i stand, jeżeli postać MUSI stanąć na dany SQM. Bot nigdy nie ominie waypointa "stand". Po więcej informacji zajrzyj do poradników. Po więcej informacji odsyłam do innych poradników.

10.2 Jak odkupić zaopatrzenie.

a) Kilka akcji, które niekoniecznie, ale można użyć.
- depozyt przedmiotów
- wypłacenie pieniędzy z banku (obliczone ile potrzebujesz na podstawie pożądanej ich ilości i aktualnie posiadanej)
- sprawdzenie czy w baku jest kasa czy nie (jeżeli nie to wyloguj)
- jeżeli czas = hh:mm:ss zakończ botowanie i wyloguje
Oczywiście jest więcej rzeczy, które można zrobić przy użyciu Elfbota. To już zależy od Twojej wyobraźni i potrzeby ;p

b) Dobra, jestem w mieście. Co teraz?
Najpierw oczywiście dojdź postacią tam gdzie chcesz, np. mana shop i użyj jednej tych kilku (nie wszystkich) funkcji poniżej.
say - mówi coś na default, przykład: say hi
npcsay - mówi coś na kanale npc, przykład: npcsay trade
buyitems 268 20 - kupi 20 przedmiotów o ID 268 (musisz mieć otwarty trade z NPC)
settradeoptions - ustawia opcje tradu, przykład: settradeoptions 'buywithbps' 'ignorecap' 'ignoreequipped'

c) Ile jeszcze zostało?
Aby sprawdzić ile przedmiotów Ci zostało użyj tych funkcji i zmiennych:
countitems 268 - zmusi bota do użycia przedmiotu o danym ID (tutaj 268) sprawiając, że wyświetli się zielony tekst na środku ekranu: Using one of XXX YYY. Oczywiście przedmiot ten nie zostanie tak naprawdę użyty.
countitemsvisible 268 - jw. z tym, że liczy tylko te widocznie + brak zielonego tekstu
$itemcount.268 - zwraca ilość widocznych przedmiotów o danym ID (tutaj 268)
$itemcount.'mana potion' - zwraca ilość tych widocznych i nie widocznych przedmiotów o danej nazwie. Informacje pobiera z zielonego tekstu wyświetlanego podczas użycia określonego przedmiotu, czyli musisz użyć funkcji countitems IDITEMU lub po prostu użyć hotkeya.




Jeżeli dalej nie wiesz w jaki sposób masz kupić określoną ilość danych przedmiotów to powiem, że najpierw pomyśl jakie itemy chcesz kupić i co z nimi zrobić. Dla przykładu - speary, trzeba je najpierw kupić potem najlepiej umieścić w ręce.

- czyli, najlpierw piszemy hi potem trade i kupujemy (tutaj) 10 spearów.
PS: Zakładanie do ręki najlepiej zrobić w hotkeyu sprawdzając ilość spearów w danej ręce i tych ogólnie widocznych. Następnie jeżeli liczba ogólnie widocznych spearów przewyższa tą w ręce to zakładamy speary z bp (funkcja refillammo).


- uzupełnianie softów jest chyba najłatwiejszą rzeczą związaną z refillerem.




Jednak jak odkupić stracone manasy czy też health potiony? No właśnie! Jak już wcześniej wspomniałem twórcy Elfbota nie rozwiązali tego problemu tak jak byśmy tego chcieli. W tym temacie trzeba wykazać się inwencją twórczą . Oczywiście powstał nie jeden pomysł na to, jednakże żaden z nich nie jest w 100% pewny, że za każdym razem dobrze nas obkupi. Wcale nie jest to spowodane brakiem dobrych funkcji w Elfie do tego tylko brakiem dobrego pomysłu.

- wypłacamy kase z banku

Ale co jeżeli chcesz wypłacić określoną ilość pieniędzy? Cóż, w grę wchodzi czysta matematyka. Piszesz działanie używając zmiennych, np:

11. Extras.

a) System time.
Aby sprawdzić czas w systemu należy użyć zmiennej $systime.

Przykład:
Przejdzie do labela o nazwie log o godzinie 7:50

Czas zwracany jest w formacie hh:mm:ss

b) Losowe liczby
Od jakiegoś czasu hotkey nie musi być wykonywany zawsze co X milisekund.

Przykład:
Powyższy skrypt będzie wykonywany co 200 do 500 milisekund LOSOWO! Oznacza to, że może być wykonany po 200, 500 lub pomiędzy, np. 432 czy 324 milisekundach. Ale to nie wszystko! Przypisuje tutaj losową liczbę do zmiennej $randomheal. Jak widać przypisywana liczba jest w przedziału od 0 do 200 czyli może wykonić 0, 200 lub coś pomiędzy. Dzięki temu używając warunku if [$hp < 700 - $randomheal] sprawdzam czy moje hp jest mniejsze od 700 odjąć losową liczbę przydzieloną do $randomheal. Na koniec skrypt czeka (wait 500..1000) losowo od 500 do 1000 milisekund (0.5 do 1 sekundy).


12. Wyjaśnienia.


a) label
Labelem (etykietą) można oznaczyć dowolną linijkę w cavebocie dzięki czemu będzie można w każdym momencie kazać botowi przejść do waypointów umieszczonych pod danym labelem. Wyjaśnię na przykładzie.

Załóżmy, że mamy waypointy na expie:

Teraz chcielibyśmy aby bot refillował jakieś itemy, np. speary. Musimy do tego oczywiście dodać waypointy do miasta a potem spowrotem na expa, czyli piszemy:
Koniec skryptu bot doszedł spowrotem na expa i przeszedł do początku skryptu i tak w kółko. Jest tu jednak jakiś błąd. Bot zawsze będzie szedl do miasta nie zależnie od tego czy brakuje nam spearów czy nie. Do tego użyjemy etykiet i skryptu "gotolabel".



Więc, aby powiedzieć botowi, że ma wrócić na początek skryptu a nie iść do miasta musimy najpierw umieścić etykietę tam gdzie zaczynają się waypointy na expie a następnie przed waypointami do miasta umieszczamy funkcję gotolabel (oczywiście jako action script). Etykietę nazwiemy start sugerującą, że jest ona umieszczona na początku skryptu. Teraz nasze waypointy wyglądają tak:
Teraz bot nie będzie chodzić do miasta ale znowu mamy problem. Bot NIGDY nie pójdzie do miasta. Musimy więc sprawdzać czy potrzebujemy spearów czy jeszcze mamy dostatecznie dużo aby kontynuować expienie. Do sprawdzenia ile mamy na sobie spearów użyjemy jednej z poniższych opcji:
Kliknij obrazek, by otworzyć w oryginalnym rozmiarze.


Jako, że speary z reguły mamy wszystkie widoczne na ekranie my użyjemy tej pierwszej "$itemcount.ITEMID" (do refillowania manasów należy użyć tej drugiej w formie, np: $itemcount.'great mana potion' ). Sprawdzanie czy mamy za mało spearów odbywa się następująco:

SPEAR_ID zamieniamy na ID spear'a a X na liczbę przy, której bot ma iść do depo.

Teraz nasz skrypt powinien wyglądać tak:

Koniec!

Autor: Bodajże linek

Ostatnio edytowane przez Seymour ; 05-18-2010 o 18:30
Seymour jest nieaktywny  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Share on Facebook
Linki Sponsorowane

Stare 04-08-2010, 16:35   #2
Xzi
Zbanowany
 
Zarejestrowany: Dec 2009
Skąd: Poznań
Postów: 0
Postacie w Tibii
Xzi jest nowy
Punkty reputacji: 0
Domyślnie

Nie no ziomuś postarałeś się jak nic.
Poradnik zajebisty
Wszystko pięknie ładnie wytłumaczone, napisany przejrzyście i poprawny.
Błędów nie zauważyłem.
Dlatego daje Ci ocenę Celującą
Xzi jest nieaktywny  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Share on Facebook
Stare 04-23-2010, 19:19   #3
Galana represented.
 
Avatar MrcN
 
Zarejestrowany: Nov 2009
Skąd: Grudziądz
Postów: 358
Postacie w Tibii
MrcN jest lubiany
Punkty reputacji: 34

Arcade #1 - Archery 2000 

Domyślnie

Łooo, piękny poradnik. Wszystko przejrzyście, ładnie wyjaśnione, chodź i tak dużo się nie nauczymy z tego, do wszystkiego dojdziemy metodą prób i błędów, ale za pomocą tego cacka :P
Aż chce się dać plusika? ; )
MrcN jest nieaktywny  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Share on Facebook
Stare 04-24-2010, 00:30   #4
Synek Kruka.
 
Avatar Kruczeq
 
Zarejestrowany: Nov 2009
Skąd: Przeworsk
Postów: 87
Kruczeq jest nowy
Punkty reputacji: 9
Domyślnie

Poradnik bardzo ładny , estetycznie i czytelnie napisany , każdy `zielony` gdy przeczyta na pewno będzie miał już jakieś pojęcie. =)
Kruczeq jest nieaktywny  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Share on Facebook
Stare 05-17-2010, 15:00   #5
Zbanowany
 
Zarejestrowany: May 2010
Skąd: Trk
Postów: 71
Claker jest lubiany
Punkty reputacji: 16
Domyślnie

Super fajny poradnik sam się z niego uczyłem, lecz chwila, chwila wtf?
btw. twój podpis pod nickiem bardzo dobrze odwzorowuje daną sytuację.

Ostatnio edytowane przez Claker ; 05-18-2010 o 07:33
Claker jest nieaktywny  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Share on Facebook
Stare 05-17-2010, 15:33   #6
SumaStyli
 
Avatar Michukyng
 
Zarejestrowany: May 2010
Skąd: Ostrów Wielkopolski
Postów: 30
Michukyng jest nowy
Punkty reputacji: 4
Domyślnie

Fajny poradnik, bardzo przydatny, mam nadzieję, że nie był on skopiowany xd
Michukyng jest nieaktywny  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Share on Facebook
Zamknięty Temat

Tagi
błąd, bot, city, czy, dobry, elfbot, gra, innym, jak, już, kilka, life, list, mana, pomoc, poradnik, przez, real, script, skrypt, skrypty, usunięcie, war, waypoints, waypointy


Użytkownicy aktualnie czytający ten temat: 1 (0 użytkownik(ów) i 1 gości)
 
Narzędzia wątku
Wygląd

Zasady postowania
Nie możesz zakładać nowych tematów
Nie możesz pisać wiadomości
Nie możesz dodawać załączników
Nie możesz edytować swoich postów

BB Code jest Włączony
EmotikonyWłączony
[IMG] kod jest Włączony
HTML kod jest Wyłączony
Trackbacks are Włączony
Pingbacks are Włączony
Refbacks are Włączony


Podobne wątki
Temat Autor wątku Forum Odpowiedzi Ostatni post / autor
[Skrypt] PayPal DanJ93 Szukam 2 07-31-2010 01:19
Skrypt ;D gekon311 Prośby & Pomoc 1 04-20-2010 20:05
Skrypt... Pogo Kosz 0 01-06-2010 16:53
Skrypt co i jak? kokoszd Problemy z obsługą Elfbot NG 4 12-05-2009 19:12

Zamknij okno Przeglądasz forum jako gość, zarejestruj się i uzyskaj dostęp do naszych zbiorów!

Zalogowani nie widzą żadnych reklam!


Czasy w strefie GMT +2. Teraz jest 04:00.
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2010, Crawlability, Inc.
Tłumaczenie: vBHELP.pl - Polski Support vBulletin
oTibia.net © 2009-2010


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208