poniedziałek, 23 lutego 2009

Finditem, czyli szukanie przedmiotów

Dzisiaj chciałem opisać polecenie finditem oraz wszystkie związane z tym zmienne. Postaram się dość szczegółowo omówić zagadnienie, gdyż jest to chyba jedno z najważniejszych zagadnień.

Składania brzmi:
findItem {{id} | {type} | *} [index] [[G] | [G_{dist}] | [C] | [C_{container id}]]

może teraz po kolei wytłumaczę co i jak bo domyślam się czytelniku, że patrząc na to, zastanawiasz się o co tutaj w ogóle chodzi.


Zacznijmy od tego co robi samo finditem.
Finditem szuka przedmioty. Jakie przedmioty? Takie i w takich miejscach jakie podamy jako parametry, czyli to co jest po słówku finditem.

Pierwsze musimy podać jedną z 3 rzeczy:

id - jest to id przedmiotu, unikalna dla każdej rzeczy w Ultimie. Jeżeli nie wiesz jak sprawdzić id przedmiotu już spieszę z pomocą. Klikamy 2 razy na dany przedmiot, a następnie w easyUO po prawej stronie, w zakładce Last Action szukamy zmiennej #lobjectid. Tam właśnie znajduje się id przedmiotu, który "użyliśmy" ostatnio.

typ - są to 2-3 litery które określają typ przedmiotu. Typ przedmiotu sprawdzamy tak samo jak id, jednak patrzymy na zmienną #lobjecttype. Dla przykładu na MW, serwerze na którym ja gram bandaże mają typ ZLF.

* - gwiazdka wyszukuje wszystkie przedmioty. Po prostu szuka wszystkiego.

Kolejnymi argumentami są argumenty, które określają gdzie chcemy szukać danych przedmiotów. Do wyboru mamy 2 różne rzeczy.

C - czyli container. Przedmioty będą szukany tylko i wyłącznie w plecakach, pojemnikach oraz w naszym paperdolu (jedynie w tych, które są aktualnie otwarte)
Dodatkowo możemy dokładnie określić w jakim pojemniku chcemy szukać. Wygląda to wtedy tak:
finditem * C_idpojemnika
lub
finditem * C_ , %zmienna
gdzie zmienna przechowuje id pojemnika. Ta druga składnia jest dość często stosowana. W tym przypadku, który widzimy wyżej, będą wyszukiwane wszystkie przedmioty z plecaka o podanym idpojemnika.

Przykładowo:
finditem * C_ , #backpackid
szuka wszystkich przedmiotów w naszym plecaku głównym.

G - druga opcja czyli ground. Ground czyli ziemia. Wyszukiwane są wszystkie przedmioty leżące na ziemi. Ale również i postacie i NPC. Dodatkowo możemy określić zasięg w jakim chcemy szukać przedmiotów poprzez podanie liczby po _ tak jak w przypadku wyżej.
Przykład:
finditem * G_5
szuka wszystkich przedmiotów, które znajdują się w promieniu 5 od naszej postaci.

Dodatkowo:
Z tego co wyczytałem w dokumentacji, można używać jeszcze 2 opcji, nie tylko C i G.
Są to:
A - szuka ukrytych przedmiotów. Ale są to przedmioty ukryte przez komendę hideitem
CA_pojemnik - szuka ukrytych przedmiotów w pojemniku. Tak jak w przypadku samego C, można podać id pojemnika.


Zmienne find item
Teraz koniecznie trzeba powiedzieć, gdzie znajdziemy informacje o tym co finditem znalazł, w końcu o to dokładnie nam chodzi.
Wszystkie te zmienne znajdują się w zakładce find item.
Postaram się teraz po kolei omówić każdą z tych zmiennych.

#FINDID - jest to ID znalezionego przedmiotu. Jest unikalne i niepowtarzalne dla danego przedmiotu.

#FINDTYPE - jest to typ przedmiotu, który został znaleziony. Określa grupę obiektów o tych samych właściwościach, czasami tylko grafice. Np butle nie maja rozróżnienia na duże i małe. Do ich odróżniania trzeba już używać property.

#FINDX, #FINDY, #FINDZ - są to 3 zmienne, które określają położenie przedmiotu.

#FINDDIST - określa odległość w jakiej znajdujemy się od przedmiotu

#FINDKIND - w zmiennej tej znajduje się gdzie znajduje się obiekt. Przyjmuje on 3 wartości.
0 - gdy obiekt znajduje się w pojemniku
1 - gdy obiekt znajduje się na ziemi
-1 - gdy obiekt nie został znaleziony
Z tego co można wyczytać w dokumentacji, nie jest zalecane sprawdzanie czy został znaleziony przedmiot przez sprawdanie if #findkind = -1 (aczkolwiek ja osobiscie spotykam sie najczęsciej z takim przypadkiem sprawdzania czy został znaleziony przedmiot). Tłumaczą to tym, że dla człowieka ciężej zrozumieć o co chodzi. Bardziej zalecane jest sprawdzanie zmiennej #findcnt

#FINDSTACK - zmienna ta przechowuje ile jednostek znajduje się w kupce. Jeżeli mamy przedmioty które sie grupują (stackują) to wtedy zmienna ta mówi nam ile jest rzeczy w danej kupce. Np: złoto, zioła. W przeciwnym wypadku jak łatwo sie domyslić zmienna ta ma wartość 1.

#FINDBAGID - zmienna ta przechowuje ID pojemnika, w którym znaleziony został przedmiot.

#FINDMOD - przechowuje X i Y znalezionego przedmiotu w formie: X_Y. Szczerze nigdy nie używałem.

#FINDREP - zwraca reputacje. Jeżeli szukamy osoby, NPCa to wtedy zmienna ta przechowuje reputacje, czyli jedną z 7 wartości:
1 - Niewinny (Niebieski)
2 - Przyjaciel (Zielony)
3 - Zwierzęta (Szary)
4 - Kryminalista (Szary)
5 - Wróg (Pomarańczowy)
6 - Morderca (Czerwony)
7 - Invulnerable (nietykalny) (żółty)

#FINDCOL - zwraca kolor znalezionego przedmiotu. Warto zobaczyć to na systemie rudy, gdy mamy takie samo #FINDTYPE. Różne rudy róznią się właśnie kolorem.

#FINDINDEX - jest to index znalezionego przedmiotu. Jeżeli szukamy przedmiotów po np typie, możemy znaleźć ich więcej niż tylko jedną. Zmieniając wartość tej zmiennej, możemy dostać się do informacji o kolejnych przedmiotach. Może mieć wartości od 0 do #findcnt

Przyklad:

Finditem *
for %i 1 #findcnt
{
event sysmessage Znalazlem przedmiot o id: #findid
wait 5
}

#FINDCNT - zmienna ta przechowuje ile przedmiotów zostało znalezionych. Jeżeli nie zostało nic znalezione to mamy wartość 0.


W sumie tyle na dziś. Dla ciekawskich chciałbym dać jeszcze tylko jeden przykład, dość żartobliwy. Można dać swoim kolegom.

finditem *
for %i 1 #findcnt
{
hideitem #findid
}

sami domyślcie się lub sprawdzcie co ten skrypt robi.

W przypadku jakichkolwiek niejasności proszę o pytania w komentarzach

2 komentarze:

  1. Musze powiedziec ze calkiem przyjemny opis :D oby tak dalej ja jestem za !! doucze sie czego nie wiem :D POZDRO I CZEKAM NA NEXT CZESC!!

    OdpowiedzUsuń
  2. ciekawie ciekawie :] tylko jak byscie mogli, to opiszcie jeszcze petle 'goto"- ciekawa i przydatna petla :) czekam na dalsze czesci

    OdpowiedzUsuń