|
|
methelas | 2009, gru 11 18:17 | 2009, gru 11 23:04
|
|
|
|
| Brak postaci | |
|
2014, kwi 25
Brak | |
Nieaktualne... poradziłem sobie z tym problemem sam... Był mały błąd w skrypcie... |
|
methelas | 2009, gru 11 20:37 | 2009, gru 11 23:05
|
|
|
|
| Brak postaci | |
|
2014, kwi 25
Brak | |
Nieaktualne... poradziłem sobie z tym problemem sam... Był mały błąd w skrypcie... |
|
sledzislaw | 2009, gru 18 12:53 | 2009, gru 18 23:57
|
|
|
|
| Brak postaci | |
|
2013, sie 4 |
a ja teraz troszkę z innej beczki. Kolejna próba ułatwienia życia rolnikowi - mielenie zboża w nooblandzie:
;skrypt na mielenie mąki w nooblandzie_ wersja bardzo beta ;skrypt pobiera zboże z plecaka juczniaka ;i ładuje otrzymaną mąkę na inny plecak juczniaka set %p_pszenica NUUXZTE ; zamiast NUUXZTE wpisz ID plecaka z pszenicą set %p_maka IZHGKVE ;zamiast IUUXZTE wpisz ID plecaka na mąkę set %pszenicatype HTL ; po zmianie na typ kukurydzy powinno mielić kukurydzę set %pszenicatype2 ITL ; alternatywny typ pszenicy set %makatype PGG ; jak wyżej tylko zmienić na typ mąki kukurydzianej set %korbaid ERVMKKE set %mlynid CRVMKKE event macro 8 7 wait 30 contpos 660 20 set #targcurs 1 event sysmessage Wskaz juczniaka repeat onhotkey ESC halt until #targcurs = 0set %juczniak #ltargetid finditem %juczniak while #finddist > 1 { event macro 1 0 podejdzcie wait 3s finditem %juczniak } repeat { gosub otwieranie gosub napelnij gosub miel finditem %pszenicatype if #findstack = 0 { finditem %pszenicatype2 } } until #findstack =
0sub otwieranie set #lobjectid %juczniak event macro 17 0wait 30 contpos 20 20 wait 15 set #lobjectid %p_pszenica event macro 17 0wait 30 contpos 20 200 set #lobjectid %p_maka event macro 17 0wait 15 contpos 20 380 return
sub napelnij finditem %pszenicatype if #findstack = 0{ finditem %pszenicatype2 if #findstack = 0{ event sysmessage NIE MA PSZENICY event sysmessage SKRYPT SIE ZATRZYMUJE halt } } set #lobjectid #findid event macro 17 0target 1s set #ltargetid %mlynid wait 15 event macro 22 0wait 30 return
sub miel for %i 1 20 { finditem %p_pszenica if #findstack = 0{ gosub otwieranie } set #lobjectid %korbaid event macro 17 0wait 20 finditem %makatype C_ , #backpackid while #FINDCNT > 0{ finditem %makatype C_ , #backpackid Exevent drag #findid wait 10 exevent dropc %p_maka gosub pelny } wait 5s } return
sub pelny scanjournal 1 if is_full in #journal { event sysmessage POJEMNIK PELEN >- OPROZNIJ halt } return
już i tak dość usprawniony, ale bardzo proszę "analityków" o przeanalizowanie i uwagi. Aby skrypt zadziałał należy stanąć w odpowiednim miejscu koło młyna, tak aby jednocześnie sięgać do zbiornika młyna i korby, bez ruszania się. Ponadto należy się zaopatrzyć w juczniaka, i dwa pojemniki >- jeden na pszenicę/kukurydzę, drugi na mąkę.
proszę o analizę |
|
beggginer | 2009, gru 22 09:40 | 2009, gru 22 09:41
|
|
|
|
| Brak postaci | |
|
2014, gru 26 |
sprawdzanie moglbys robic za pomoca #jindex a nie samego scanjournal, jak w przykladzie 2: http://wiki.easyuo.com/index.php/ScanJournal (przy wielu napisach naraz sam scanjournal moze ci ominac to czego szukasz, i sie skrypt pogubi)
poza tym ladnie napisane
|
| .
|
Jam Lasica | 2009, gru 22 12:24 | 2009, gru 22 12:32
|
|
|
|
| Athelas | | |
|
2007, sie 18
Wrocław | |
Jezeli pszenica HTL i ITL jest sobie rowna, to nie trzeba tak zagniezdzac finditemow.
Mozna po prostu ustawic zmienna set %typy HTL_ITL a potem wyszukiwac finditem %typy C
|
| "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."
|
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'
|
| .
|
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." | | | | | | | | | | | |
| | | |
|