|
|
beggginer | 2009, gru 23 13:03 | 2009, gru 23 13:07
|
|
|
|
| Brak postaci | |
|
2014, gru 26 |
#jindex pokazuje numer wpisu w journalu. journal z gry to zapominajac o grafice cos jak plik tekstowy z kolejnymi wierszami. kazdy nowy wpis to nowa linia.
#jindex powstal poniewaz np. scanjournal 2 skanuje konkretne linie (tutaj 2 od dolu), a z uwagi na to ze w journalu moga pojawic sie informacje nieprzewidziane jak pojawienie sie jakiegos obiektu (You see: COS), informacje pogodowe (A fierce storm aproaches), informacje z innych makr (event sysmessage) i cokolwiek innego, skrypty oparte na skanowaniu konkretnej linii w momencie zbyt wczesnego/poznego wywolania takiego skanowania moga cos pominac
przyklad 2 z http://wiki.easyuo.com/index.php/ScanJournal zapisany w pseudokodzie to:
zapisz aktualna ilosc wpisow w journalu w zmiennej tymczasowej powtarzaj w nieskonczonosc { jezeli zapisana ilosc w zmiennej tymczasowej jest mniejsza od aktualnego numeru wpisu w journalu { powieksz zm. tymczasowa o 1, otrzymujac informacje ktora pierwsza linia nie byla jeszcze przeskanowana przeskanuj te konkretna linie jezeli jest cos pasujacego, wykonaj jakas akcje } }
w jednym zdaniu, #jindex pozwala na 'przeskanuj wszystko z journala od wpisu X do aktualnego wpisu wlacznie, i we wszystkich tych wpisach szukaj Y'
|
| .
|
Seires | 2009, gru 23 13:35
|
|
|
|
|
| Brak postaci | |
|
2018, cze 21 |
Beggginer a jesteś wstanie przerobić leczenie ngz menu na leczenie wykorzystujące .lecz ?
|
| Wino czyni ubogiego bogatym w fantazje, a bogatego biednym w rzeczywistość
Platon
|
thorrief | 2009, gru 23 14:28 | 2009, gru 23 15:32
|
|
|
|
| Brak postaci | |
|
2011, kwi 16 |
@beggginer: ok, już lepiej. Generalnie kod, który sobie napisałem, wyszukuje "końca leczenia" w taki sposób:
petla1: for %p 1 2 { set %czas1 %czas1 + 1 scanjournal %p if #ENEMYID = N/A setuotitle Ulitma Online - #charname else setuotitle Ulitma Online - #hits hp; #charname gosub zycie set %czas1 %czas1 + 1 if %czas1 > 95 set %leczenie 0 if Wyleczyles_sie in #journal { set %leczenie 0 gosub anatomia } if Przestales_sie in #journal set %leczenie 0 if What_you_selected in #journal set %leczenie 0 if Ta_osoba_jest_w_pelni in #journal set %leczenie 0 if Your_skill_in_Uzdrawianie in #journal set %leczenie 0 if Nie_udalo in #journal set %leczenie 0 if #hits > %hits0 set %leczenie 0 wait 2 } set %p 0if %leczenie = 1 goto petla1
Co, jak widać, jest dość skomplikowane, ale za to przewiduje chyba wszystkie możliwe odpowiedzi systemu na użycie bandaża. ( "set %czas1 %czas1 + 1" i "wait 2" na końcu pozwalają zakończyć skanowanie journala po 9,5s)
Czy ten #jindex jest według Ciebie w stanie pomóc zoptymalizować ten fragment kodu?
EDIT: Sam sobie odpowiem: Tak, #jindex znacznie ulepszył mój skrypt, to lepsze rozwiązanie, niż pętla i wyszukiwanie po linijkach od końca. ;-) |
|
Jam Lasica | 2009, gru 23 15:44 | 2009, gru 23 16:23
|
|
|
|
| Athelas | | |
|
2007, sie 18
Wrocław | |
zamiast event macro 17 0 - LastObject nalezy wpisac event macro 1 0 .lecz i wyeliminowac linijki, ktore oczekuja na pojawienie sie targetu oraz event macro 23 0 - TargetSelf.
=======
thorrief Warunki logiczne mozna laczyc ze soba przy pomocy operatorow logicznych: http://wiki.easyuo.com/index.php/Operators#Logical_Operators http://pl.wikipedia.org/wiki/Koniunkcja_(matematyka) http://pl.wikipedia.org/wiki/Alternatywa
W momencie gdy oczekujesz na jeden z komunikatow wystarczy napisac:
if pierwsze_zdanie in #journal || drugie_zdanie in #journal || trzecie_zdanie in #journal
/W praktyce skrypt zostanie nieznacznie przyspieszony - ale glownie chodzi o aspekt wizualny.
Ostrzegam tez, przed wielokrotnym nieskonczonym uzywaniem: setUOtitle. Mozliwe jest bardzo silne obciazenie procesora przez EasyUO.
Na samym koncu robisz dziwne rzeczy: set %p 0 Jezeli uzywasz zmiennej %p tylko do skanowania journala to nie jest potrzebne jej zerowanie, poniewaz po tej instrukcji przechodzisz do petli for: for %p 1 2 ktora ustawi zmienna %p na 1 - niezaleznie od poprzedniej wartosci.
Nastepnie sprawdzasz czy %leczenie = 1, a co sie stanie jezeli %leczenie = 0 ? W praktyce po ostatniej lini wykonywana jest pierwsza, dlatego naprawde dokonany bedzie skok bezwarunkowy do etykiety petla1.
Uzywasz rowniez konstrukcji set %czas1 %czas1 + 1, w polaczeniu z wait 2 - mozliwe, ze to dziala, jednak warto odwolywac sie do zmiennych systemowych zawierajacych czas np.: #scnt i #scnt2, wtedy gdy np chcemy wykonac cos po 10 sekundach robimy: set %czas #scnt + 10 ;w momencie, w ktorym rozpoczynamy odmierzanie czasu. a instrukcje warunkowa zapiszemy jako: if %czas [znak mniejszy badz rowny] #scnt ;nie dalo sie zapisac tego znaku, dlatego umiescilem go w nawiasie kwadratowym. {
}
Przejdzmy teraz do wykonania petli. Jezeli pojawil sie wyraz Wyleczyles_sie i sprawdzilismy to, nastepnie ustawiamy zmienna %leczenie na 0, to kolejne sprawdzania wyrazow: Przestales_sie, What_you_selected itd. sa zbyteczne, poniewaz juz mamy pewnosc przy pierwszym poprawnym sprawdzeniu, ze przestano sie leczyc. Dlatego mozna uzyc break, ktory zakonczy wykonywanie petli.
|
| "Wielu spośród żyjących zasługuje na śmierć. A niejeden z tych, którzy umierają, zasługuje na życie. Czy możesz ich nim obdarzyć? Nie bądz tak pochopny w ferowaniu wyroków śmierci."
|
Seires | 2009, gru 23 16:23
|
|
|
|
|
| Brak postaci | |
|
2018, cze 21 |
set #lobjectid #findid if %Uzycie = 0 set %Nr_indexu #jindex event macro 17 event macro 1.0 .lecz ?? set %Uzycie 1 set %Timer #scnt2 + 10 repeat if %Timer < #scnt2 goto Uzycie_bandazy scanjournal 1 if Juz_cos_robisz in #journal || I_am_frozen_ in #journal || Anulowano in #journal || Nie_mozesz_tego_teraz_uzyc in #journal || ( I_am_already_ in #journal && #targcurs = 1 ) || Nie_mozesz_teraz_leczyc in #journal { if Juz_cos_robisz in #journal || Nie_mozesz_tego_teraz_uzyc in #journal || Nie_mozesz_teraz_leczyc in #journal set %Timer_juz_cos_robisz #scnt2 + 10 if ( I_am_already_ in #journal || I_am_frozen_ in #journal ) && #targcurs = 1 { if #jindex - %Nr_indexu > 1 { set %Roznica_indexow #jindex - %Nr_indexu for %i %Roznica_indexow 1 { Skanuj_ponownie: scanjournal %i if Kogo_Chcial in #journal goto Jest_cel_i_kogo_chcial if #jindex - %Nr_indexu > %Roznica_indexow { set %Roznica #jindex - %Nr_indexu - %Roznica_indexow set %Roznica_indexow %Roznica_indexow + %Roznica set %i %i + %Roznica goto Skanuj_ponownie }
Przypuszczam ze chodzi o te linijki ?
|
| Wino czyni ubogiego bogatym w fantazje, a bogatego biednym w rzeczywistość
Platon
|
beggginer | 2009, gru 23 16:25 | 2009, gru 23 16:27
|
|
|
|
| Brak postaci | |
|
2014, gru 26 |
pamietaj ze 'wait 2' to 'czekaj 0,1s', a nie 'czekaj 2s'. te warunki ze sprawdzaniem czy walczysz nie wiem po co uzywasz, moglbys na stale miec w pasku gry #hits / #maxhits. przeciez nie zaszkodzi.
odnosnie przerobienia odpowiedzial RP
nie zapomnij zainicjowac zmiennej %leczenie jakas wartoscia na poczatku skryptu, 0 albo 1. uo w niektorych buildach ma problemy ze sprawdzaniem wartosci zmiennej, ktora wczesniej nie zostala zadeklarowana.
Seires, prawdopodobnie zamiast 'goto Uzycie_bandazy' wystarczy 'event macro 1 0 .lecz' i bedize dzialac (nie mam tamtego makra)
|
| .
|
Jam Lasica | 2009, gru 23 16:37 | 2009, gru 23 16:38
|
|
|
|
| Athelas | | |
|
2007, sie 18
Wrocław | |
Idea zamieniania event macro 17 0 na event macro 1 0 .lecz jest taka, zeby nie bylo potrzeby posiadania otwartego plecaka w celu leczenia sie. Wiec przerobienie tego macra powinno jeszcze w inny sposob sprawdzac, czy w ogole sa bandaze - nie przez finditem - poniewaz on wyszukuje tylko (nie tylko, ale tutaj chodzi o wyraz tylko) w otwartych pojemnikach.
|
| "Wielu spośród żyjących zasługuje na śmierć. A niejeden z tych, którzy umierają, zasługuje na życie. Czy możesz ich nim obdarzyć? Nie bądz tak pochopny w ferowaniu wyroków śmierci."
|
thorrief | 2009, gru 23 16:54
|
|
|
|
|
| Brak postaci | |
|
2011, kwi 16 |
Rzecznik, beggginer - dzięki za rady! to, co wkleiłem, to oczywiście tylko część większego kodu, zmienna "%leczenie" ma "pozwalać" skryptowi robić anatomię. Co do funkcji logicznych - znam je doskonale, następny krok mój to miało być ich zastosowanie właśnie. W sprawie break - świetny pomysł, dzięki!
"Ostrzegam tez, przed wielokrotnym nieskonczonym uzywaniem: setUOtitle. Mozliwe jest bardzo silne obciazenie procesora przez EasyUO." Czym to jest spowodowane?
set %p 0 to pozostałość po pierwszej wersji skryptu, gdzie było ogromne "if" zamiast pętli, nawet nie zauważyłem, że tu jest.
"pamietaj ze 'wait 2' to 'czekaj 0,1s', a nie 'czekaj 2s'. " Tak, wiem o tym.
"te warunki ze sprawdzaniem czy walczysz nie wiem po co uzywasz, moglbys na stale miec w pasku gry #hits / #maxhits. przeciez nie zaszkodzi." Mam dwa monitory. Dzięki temu rozwiązaniu wiem, czy coś mnie atakuje, czy nie, nie musząc patrzeć na drugi monitor. PRzy dwóch 21" to spora odległość jest mimo wszystko. ;-) W sensie - jeśli UOtitle nie pokazuje punktów życia, to znaczy, że nic mnie nie atakuje. Taka wariacja, nie wracajmy do tego. ;-)
Dzięki Wam za rady, w wolnej chwili je wprowadzę w życie! | | | | | | | | | | | | | | |
| | | |
|