Ok, to czas na aktualizację:
1. Mapper
Zrobiłem już w zasadzie wszystko i przetestowałem na sporej części Ishtar. Nie wiem jedynie jak ogarnąć linie specjalne. W manualu jest, aby użyć
Kod: Zaznacz cały
addCustomLine(roomID, id_to, direction, style, color, arrow)
z zaznaczeniem, że jest to od Mudleta 2.1. Na moim 2.1 to nie działa (wersja na OSX), ale spróbowałem też z ciekawości na delcie 3.0.0 i również ten API call zdaje się nie działać. Graficznie chyba można to dodać, ale dość topornie to działa. Czy ktoś ma z tym jakieś doświadczenia?
Śledzenie drużyny postanowiłem rozwiązać tak, że mam handlera na gmcp.room i jak go wyłapuję to:
a) jeśli dostępne są koordynaty to można je stąd wziąć i na tym się kończy, bo można znaleźć bezpośrednio room_id
b) jeśli a) nie pokaże koordynatów to patrzę w (standardowy) kierunek, który wyłapany zostaje przez trigger i kieruję pozycję na mapperze tam gdzie był wykonany ruch
c) jeśli nie jest to standardowy kierunek to chwilowo zakładam, że każdy w drużynie musi sam przejść, np: "zejdz po lancuchu", wtedy handler na gmcp.room zaskoczy, a skrypt po wykonanej komendzie przeskoczy na odpowiednią lokację.
Chodzik na jakiejkolwiek przeszkodzie (wrota miast) się zatrzymuje i wyświetla informację o bindzie, który trzeba nacisnąć aby wykonać akcję otwarcia.
2. Skrypt drużynowy.
Postanowiłem jednak dodać jedno małe okienko w prawym górnym rogu, którego zawartość wygląda tak:
Kod: Zaznacz cały
[ 0][##############] [0,2,3]JA
[ 1][##############] teammate1
[ 2][##############] [1] teammate2
[ 0][##############] enemy0
[ 2][##############] enemy1
[ 1][##############] enemy2
[ 3][----##########] enemy3
[ ][##############] NPC
- pierwsza kolumna to id, które służą do komend (poniżej). Numerowanie osobne dla drużyny, osobne dla wrogów (NPCe nie walczące na lokacji nie otrzymują id). Kolorowanie dość intuicyjnie: drużyna na zielono, wrogowie na fioletowo (aktualne bity na czerwono).
- druga kolumna to kondycja (zastanawiam się nad zamianą na [4/6], będzie równie przejrzyście a większa oszczędność ekranu)
- trzecia kolumna to które id wrogów dana postać trzyma ([0,2,3] oznacza, że moja postać trzyma wrogów o id 0, 2 oraz 3
Okno się przeładowuje z każdym nadejściem objects.data, czyli: zmiana kondycji, zmiana atakującego, zasłona itp itd. W związku z tym, wszystkie bindy opisane poniżej działają na identyfikatorach dostarczanych przez gmcp (typu ob_245213 itp) i wyglądają następująco:
/za [id] - wykonuje 'zaslon _teammate_o_tym_id_'
/zas [id] - wykonuje 'zaslon przed _enemy_o_tym_id_'
/prze [id] - wykonuje 'przelam obrone _enemy_o_tym_id_'
jeśli skrypt wykryje, że walczący walczy z wrogiem innym niż prowadzący to podepnie akcję wsparcia pod ALT+2 i pokaże komunikat na ekranie, że postać bije innego i należy nacisnąć odpowiedniego binda aby wesprzeć.
3. Napisałem też proste wsparcie do lampy.
Kod: Zaznacz cały
/zap - zapala lampę, liczy ile jest butelek i pokazuje informację na ekranie
/nlo - dopełnia lampę resetując timer
/zg - zgaś lampę i wyłącz skrypt
po uruchomieniu ustawiany jest timer (początkowy na ~75 sekund). Po tym czasie wyskakuje informacja na ekranie o dopełnieniu lampy odpowiednim bindem (aktualnie ALT+3). Następny timer to 2/3 aktualnego czasu (czyli 50 sekund). Każdy następny jest 2/3 wartości poprzedniego z wyjątkiem kiedy wartość będzie <20 sekund, wtedy ustawiam go na 20 sekund i każdy następny również na 20 sekund. Dopełnienie lampy w którymkolwiek momencie spowoduje zresetowanie timera i liczenie od początku (od 75 sekundowego timera).
Jeśli wyłapany jest trigger '.*opróżniając calkowicie butelke\.$' to odkładam aktualną i biorę następną aktualizując licznik. Jeśli jest to ostatnia butelka to pokaże się komunikat informujący o tym.
Jak na razie mam tyle i mnie zdaje się to w zupełności wystarczać. Wszelkie komentarze oraz informacje jak to ulepszyć i poprawić jak zwykle mile widziane.
Jeśli będą chętni to mogę w zasadzie już udostępnić (2) i (3) część, tylko je uprzątnę. Mappera jeszcze dopracuję i przetestuję, a konkretniej część z podążaniem za drużyną. Powinien być niebawem gotowy do udostępnienia.