Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Forum techniczne Arkadii.
Terum
Posty: 60
Rejestracja: 01 gru 2015 15:17

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Terum »

Podeślę wieczorem kilka opisów bo znalazłem miejsca gdzie /medytuj i /licz_poziom nie działa poprawnie.
Awatar użytkownika
Werbat
Posty: 1357
Rejestracja: 12 lut 2009 21:25
Lokalizacja: Poznań
Kontakt:

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Werbat »

Taka wskazówka: nie musisz dopisywać wszystkich statków po konkretnym opisie, bo są standardowe teksty kapitana. Ja mam tak:

/def -mregexp -p2 -t'(Wszyscy na poklad!|przybija wielki trojmasztowy galeon.)' ship_on = \
/tbind wns
/def -mregexp -p2 -t'(ratwa|rom) przybija do brzegu' ship_on1 = \
/tbind wejdz na statek
/def -mregexp -p2 -t'(Doplynelismy.*(Mozna|w calej swej)|Marynarze sprawnie cumuja)' ship_off = \
/tbind zejdz ze statku

I działa.
I aim to misbehave.
Systematycznie dążę do wyrugowania hejtu z arsenału swoich środków wyrazu.
Awatar użytkownika
Adremen
Posty: 242
Rejestracja: 31 gru 2009 11:13

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Adremen »

Suavi pisze: Adremenie, wielkie dzięki, za poświęcony czas, za to, że Ci się chce i za podzielenie się :D

Na Mudlecie gram od dawna, zrobilam sobie jakieś tam swoje duperele (dźwięki przy ataku na mnie i do nowej poczty np. - bardzo przydatne:P), ale o pisaniu takich skryptów nawet nie marzę.
Wcześniej tu zaglądałam, ale nie miałam czasu grzebać w Mudlecie. Dopiero w ten weekend znalazłam chwilę.

Okienko do walki - rewelacja! :D

Jakby się jeszcze udało zrobić takie osobne okienko do erpega – gadanie + emoty, bez żadnych dodatków i wodotrysków nawet, żeby tylko to nie ginęło jak jest kilkanaście osób w drużynie - to mi osobiście nic wiecej nie potrzeba:)

Na tę chwilę, apetyt rośnie w miarę... itd ;)
Dzięki. Co do wydzielonego okna - będzie, ale to większy temat, bo tak jak wspominałem Mudlet ma jakiegoś buga, który sprawia, że gmcp.messages odpowiadający za dostarczanie tych komunikatów jest pusty. Podejrzewam, że w następnych 2 miesiącach powinienem to rozwiązać.
Werbat pisze: Taka wskazówka: nie musisz dopisywać wszystkich statków po konkretnym opisie, bo są standardowe teksty kapitana. Ja mam tak:

/def -mregexp -p2 -t'(Wszyscy na poklad!|przybija wielki trojmasztowy galeon.)' ship_on = \
/tbind wns
/def -mregexp -p2 -t'(ratwa|rom) przybija do brzegu' ship_on1 = \
/tbind wejdz na statek
/def -mregexp -p2 -t'(Doplynelismy.*(Mozna|w calej swej)|Marynarze sprawnie cumuja)' ship_off = \
/tbind zejdz ze statku

I działa.
Dzięki, nie zdawałem sobie sprawy, że od tej strony można to złapać. Co do tratwy i promu to warto dodać jeszcze krype, od niedawna jest.
Irvin

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Irvin »

Chcialem szczerze podziekowac za prace jaka wykonujesz i z nami sie dzielisz.

Czy moglbym prosic o jakas krociutka instrukcje jak to zaladowac do mudleta, skrypt i mapy by dzialalo. Rozumiem ze mapy sa oddzielnie a skrypty oddzielnie.

Wybaczcie za tak glupiutkie pytanie lecz przeszlo 11 lat nie tykalem mudow i ich klientow.

Da sie zmienic w mapperze by zamiast kropek jak na filmiku instruktazowym byly kwadraty? Jak np w arkadiowym kliencie?

I ostatnie czy na tych mapach moge sobie dodawac opisy typu " kowal" " banici" etc...
Awatar użytkownika
Adremen
Posty: 242
Rejestracja: 31 gru 2009 11:13

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Adremen »

Irvin pisze:Chcialem szczerze podziekowac za prace jaka wykonujesz i z nami sie dzielisz.

Czy moglbym prosic o jakas krociutka instrukcje jak to zaladowac do mudleta, skrypt i mapy by dzialalo. Rozumiem ze mapy sa oddzielnie a skrypty oddzielnie.

Wybaczcie za tak glupiutkie pytanie lecz przeszlo 11 lat nie tykalem mudow i ich klientow.

Da sie zmienic w mapperze by zamiast kropek jak na filmiku instruktazowym byly kwadraty? Jak np w arkadiowym kliencie?

I ostatnie czy na tych mapach moge sobie dodawac opisy typu " kowal" " banici" etc...
Dzięki. Co do instalacji:

Skrypty to łatwiej - po prostu instalujesz paczkę (Package Manager i wskaż plik xml). Do mappera potrzebna jest odrobina Twojej ingerencji w kilka aliasów, które musisz stworzyć, aby mapper śledził poprawnie Twoje ruchy. Przejrzyj proszę plik README dołączany w paczce.

Co do kwadratów - nie wiem, u mnie w 2.1 jest tylko, że mogę dać "round" na dole okna mappera, nie mam pojęcia czy da się to jakoś inaczej modyfikować.

Na razie możesz sobie dodawać litery do lokacji (prawy plik na lokacji -> letter i dajesz jakąś literę). W następnych wersjach mam zamiar wprowadzić oznaczanie pokoi (typu kowale, karczmy itp) i później wyszukiwanie najbliższych typów lokacji. Ale kiedy to będzie to nie wiem.
Awatar użytkownika
Adremen
Posty: 242
Rejestracja: 31 gru 2009 11:13

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Adremen »

Czas na kolejny duży update, tym razem mapper.

Arkadia mapper, wersja 1.7

Co w tej wersji?

1. Baza nazw/opisów lokacji i notatki
Od teraz można ustawiać sobie tytuły lokacji, ich opisy i przeszukiwać wszystkie pokoje po tych nazwach i opisach. Przykładowo, nazwa jest krótka, jednoznacznie określająca lokację a opis już dowolny. Ja sobie ustawiam opisy tylko do sklepów lub lokacji, gdzie chcę podkreślić co tam mogę kupić/dostać. Przykład poniżej z targiem w Gelibolu (wyszukiwanie po "jablko" i znajdzie, ze mozna go dostać na targu jeśli ma się zdefiniowany odpowiednio opis do tamtej lokacji).
Cała funkcjonalność opisana w README i jest to zbyt długi opis na wklejenie w poście, tutaj jest wycinek z README wyjaśniający całą funkcjonalność

Tutaj tylko po krótce jak wyglądają komendy:

Kod: Zaznacz cały

+-------------------------- Arkadia mapper, ver 1.7   ---------------------------+
|                                                                                |
| Dostepne KOMENDY:                                                              |
|                                                                                |
| /pokazuj_notki - czy pokazywac automatycznie notki.                            |
|                                                                                |
| /lok_nazwa [nazwa] - ustawi [nazwe] aktualnej lokacji.                         |
| /lok_nazwa [id] [nazwa] - to co powyzej, ale dla tego [id] lokacji.            |
| /lok_opis [opis] - ustawi [opis] aktualnej lokacji.                            |
| /lok_opis [id] [opis] - to co powyzej, ale dla tego [id] lokacji.              |
|                                                                                |
| /przeszukaj_mape [nazwa] - przeszuka mape (nazwy i opisy) po tej [nazwie].     |
| Pokaze tylko 5 wynikow (najblizszych w odniesieniu do aktualnej lokacji).      |
| /przeszukaj_mape! [nazwa] - przeszuka mape (nazwy i opisy) po tej [nazwie].    |
| Pokaze wszystkie wyniki, rowniez w kolejnosci odleglosci od aktualnej lokacji. |
|                                                                                |
| /lok_notka [nazwa] - ustawi [notke] aktualnej lokacji.                         |
| /lok_notka [id] [nazwa] - to co powyzej, ale dla tego [id] lokacji.            |
| /lok_notka- - zresetuje notke aktualnej lokacji                                |
| /lok_notka- [id] - to co powyzej, ale dla tego [id] lokacji.                   |
|                                                                                |
+--------------------------------------------------------------------------------+
A tutaj i tutaj przykładowe działania bazy.

Notatki to proste i szybkie notatki, które pokażą się po wejściu na lokację. To automatyczne pokazywane po wejściu na lokację z notatką można wyłączyć w opcjach (poniżej o tym). Wygląda to tak

2. Wagi lokacji
Od teraz można ustawiać wagi lokacji. Wagi są wykorzystywane przy liczeniu wartości ścieżki (jedna lokacja przez góry != jedna lokacja traktem, czyli na przykład wagę traktu górskiego ustawimy sobie na 1.5 lub 2 albo inną). Standardowo każda stworzona lokacja ma wagę 1.
Kawałek z '/mapper_rys':

Kod: Zaznacz cały

| /waga [wartosc] - ustawia wage tego pokoju.                                    |
| /waga [wartosc] [lokacja_id] - ustawia wage lokacje o tym [lokacja_id].        |
3. Zmiany w chodziku.
Od teraz jakikolwiek kierunek nacisnięty lub kliknięty róży wiatrów stopuje alias natchmiastowo.
W dodatku, '/idz [wartosc]' działa też teraz dla id lokacji (lokacje są pokazywane przy przeszukiwaniu lokacji w bazie, (patrz punkt 1)

4. Podobnie jak w skryptach, w mapperze dochodzi też opcja ustawienia sobie domyślnych opcji. Plik-wzór w paczce. Wygląda tak:

Kod: Zaznacz cały

-- SKOPIUJ CALA ZAWARTOSC TEGO PLIKU

------------------------------------------
---     Ustawienia do mappera          --- 
------------------------------------------

-- Domyslna opcja czy maja byc pokazywane notki
-- podczas wejscia na lokacje
--
-- Dozwolone wartosci
-- true  - beda pokazywane notki
-- false - nie beda pokazywane notki (mozna ja wtedy zobaczyc w '/lok')
--
-- Komenda do zmiany w trakcie gry: '/pokazuj_notki'
amap.db.show_notes = true

------------------------------------------

-- Domyslna opcja startowa opoznienia chodzika
--
-- Dozwolone wartosci
-- <jakakolwiek liczba>
-- Mozna zmienic '/opoz' w trakcie gry
--
-- Komenda do zmiany w trakcie gry: '/opoz [wartosc]'
amap.walker_delay = 2

------------------------------------------

-- Domyslna opcja startowa rozy wiatrow (czy ma byc wlaczona)
--
-- Dozwolone wartosci
-- true  - roza bedzie wlaczona przy starcie Mudleta
-- false - roza nie bedzie wlaczona przy starcie Mudleta
--
-- Komenda do zmiany w trakcie gry: '/roza'
amap.ui.active = true

------------------------------------------
Więcej w README

5. Stabilizacyjne
*coś tam*

6. Nowa mapa
Będzie niebawem, jak domapuję pozostałe tereny i podopisuję opisy sklepów/karczm itp.

Instalacja
Standardowa. Usunąć paczkę, restart, instalacja nowej paczki.

Tutaj mapper do ściągnięcia

Jak zwykle będę wdzięczny za informacje o błędach/co niedziała.
Awatar użytkownika
Rafgart
Posty: 970
Rejestracja: 09 lut 2009 10:10

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Rafgart »

Adremen pisze: Dzięki. Co do wydzielonego okna - będzie, ale to większy temat, bo tak jak wspominałem Mudlet ma jakiegoś buga, który sprawia, że gmcp.messages odpowiadający za dostarczanie tych komunikatów jest pusty. Podejrzewam, że w następnych 2 miesiącach powinienem to rozwiązać.
Prawdopodobnie parser wywala sie na znaku ESCAPE od kolorow. Bo chyba powinien (pozostale klienty pewnie nie trzymaja sie dokladnie specyfikacji JSON).
Awatar użytkownika
Artak
Posty: 247
Rejestracja: 15 kwie 2015 16:40
Kontakt:

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Artak »

Adremen, mam kilka kolejnych błędów :)

Odnośnie komunikatu przy włączaniu, to pewnie przez to, że mam pustą listę wrogów.
Od razu mówię, że nie instalowałem najnowszego mappera, więc może w najnowszym to poprawiłeś, ale:

1. Chodzenie za kimś w drużynie. Ogólnie trigger masz działający, ale w triggerze masz odwołanie:

Kod: Zaznacz cały

amap:follow(amap.dir_from_team_follow)
A w amapie funkcje

Kod: Zaznacz cały

function amap:follow(direction, gmcp_to_check)
I z tego co zauważyłem, to to nie działa :) (znaczy nie gada ze sobą jak przy odwołaniu nie ma drugiego atrybutu)

2. Chodzenie i zmienna:

Kod: Zaznacz cały

amap.queue
W tej zmiennej zapisują się wszystkie wartości, które się wpisze z klawiatury (a przynajmniej tak to wygląda). I jak przykładowo chodzę za kimś, kliknę sobie

Kod: Zaznacz cały

stan
Później

Kod: Zaznacz cały

kondycja

Kod: Zaznacz cały

kondycja wszystkich
To mapper się pierdzieli, bo dostaje ścieżkę:

Kod: Zaznacz cały

{"stan", "kondycja", "kondycja_wszystkich", "kierunek w którym idziesz"}
A nawet czasami jest tak, że kierunek wpada między te wklepane komendy (bo trigger zdąży się szybciej wykonać niż skrypt wyrzuci wszystko z tabeli) i mapper się gubi :)

Możliwe (nie sprawdzone) rozwiązania:
1. Skoro używasz kolejki, to używaj jej zawsze :) bo z triggera follow_team kierunek nie wpada do stosu, tylko wpierdziela się gdzieś z boku :)
2. Sprawdź najpierw czy kierunek, który leży sobie w stosie ma sens (jeszcze nie chciało mi się ogarniać kolejki "amap.queue" ale w momencie wrzucenia czegoś w tą tabelkę możesz sprawdzić czy taki kierunek występuje na danej lokacji. Jak nie ma, to nie wrzucaj :) ).

To takie moje małe żale :)
Awatar użytkownika
Adremen
Posty: 242
Rejestracja: 31 gru 2009 11:13

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Adremen »

Artak pisze:Adremen, mam kilka kolejnych błędów :)

Odnośnie komunikatu przy włączaniu, to pewnie przez to, że mam pustą listę wrogów.
Od razu mówię, że nie instalowałem najnowszego mappera, więc może w najnowszym to poprawiłeś, ale:

1. Chodzenie za kimś w drużynie. Ogólnie trigger masz działający, ale w triggerze masz odwołanie:
Działa działa. Jeśli nie przekażesz ostatniego argumentu to jest on nil, a w follow masz:

Kod: Zaznacz cały

if gmcp_to_check then
(...)
więc wszystko jest ok, to jest celowe.
2. Chodzenie i zmienna:
Eh Artaku Artaku, jak już chcesz się żalić to musisz spędzić więcej czasu i rozpoznać dokładnie jak działa cały mechanizm mappera :) Albo usiąść do tego od strony GMCP i Arki i wtedy zobaczysz czemu czasami stosuję takie ruchy, a nie inne :)
Ok, to po kolei kilka najważniejszych informacji.

Każda Twoja komenda trafia do kolejki. Dzięki temu masz niegubienie się w miejscach, gdzie w GMCP nie koordynatów (jaskinie, bagna itp). To jest zrobione tak, że:
- wklepujesz masę komend kierunkowych
- zaczynają przychodzić GMCP. Każde przyjście GMCP powoduje podbieranie komend z kolejki. Pierwsza, która jest poprawnym ruchem jest wykonywana. itp itd.

Teraz tak: przyjście gmcp.room powoduje odpalenie on_key_event(). Znaczy to, że przyszedł komunikat i trzeba wykonać ruch z kolejki. Te wszystkie komendy typu "stan", "kondycje" są później filtrowane (w amap.follow() masz:

Kod: Zaznacz cały

  local new_id = get_next_room_from_dirs(current_id, dir, dir)
  if not dir and not new_id then
    amap.dir_from_key = nil
    return false
  end
follow dla tych komend zwraca false, bo nie ma wyjścia "stan" z lokacji, więc on_key_event wie, ze musi brać kolejny kierunek. Wywoła kolejny raz follow z nową komendą itp. O to się nie przejmuj, mapper sprytnie potrafi to wyfiltrować.

Teraz dochodzimy do tego, dlaczego śledzenie drużyny nie działa z kolejką. Odpowiedź jest bardzo prosta: Bo śledzenie drużyny nie korzysta z GMCP (dlatego wtedy cały mechanizm GMCP jest wyłączony). Dlaczego tak jest? Dlatego, że GMCP przychodzi szybciej niż tekst "Podazasz za ...", już o tym pisałem gdzieś. Wiem, że jest ruch, ale nie mam kierunku, jest problem. Stąd takie rozwiązanie.
Stąd też, jeśli podążasz za drużyną i nagle się ruszysz gdziekolwiek (nawet o jedną lokację), to powracając do drużyny chcąc ją śledzić musisz dać '/fo', żeby "przełączyć się" z powrotem na parsowanie bez GMCP (czyli chodzenie za drużyną).
A nawet czasami jest tak, że kierunek wpada między te wklepane komendy (bo trigger zdąży się szybciej wykonać niż skrypt wyrzuci wszystko z tabeli) i mapper się gubi
i tak ma być, mapper sobie wyfiltruje i weźmie tylko odpowiedni kierunek, wszystko zadziała. Daj mi konkretne kombinacje/miejsca gdzie mapper się gubi jak szybko chodzisz. Ja właśnie sprawdziłem stojąc na bagnach taką komendę:

Kod: Zaznacz cały

w;stan;w;k wszystkich;e;fuknij;fuknij;e;kto;e
Mapper wychwycił wszystko i postawił mnie na właściwej lokacji. Pamiętaj, że chodzenie Twoje nie działa na triggerach a na GMCP - w tym przypadku przyjdzie 5 komunikatów GMCP, więc kolejkowani sprwi, że będą wzięte w dobrej kolejności = wszystko zadziała zgodnie z założeniem.
Możliwe (nie sprawdzone) rozwiązania:
1. Skoro używasz kolejki, to używaj jej zawsze :) bo z triggera follow_team kierunek nie wpada do stosu, tylko wpierdziela się gdzieś z boku :)
2. Sprawdź najpierw czy kierunek, który leży sobie w stosie ma sens (jeszcze nie chciało mi się ogarniać kolejki "amap.queue" ale w momencie wrzucenia czegoś w tą tabelkę możesz sprawdzić czy taki kierunek występuje na danej lokacji. Jak nie ma, to nie wrzucaj :) ).
1. Nie, followanie drużyny nie będzie kolejkowane, bo kolejkowanie jest do GMCP (dzięki temu mapper nie gubi się na szybkim bieganiu po tereneach bez GMCP gdzie komunikaty przychodzą po Twoich komendach).
2. Nie, nie trzeba tego robić inaczej. Sprawdzanie jest (w funkcji follow). Jak wyobrażasz sobie sprawdzanie tego przed wrzuceniem do kolejki? Musiałbym rozpoznawać wszystkie wyjścia/wejścia specjalne. Załóżmy, że je zbiorę do listy, mam super długą listę. Nagle administracja dodaje nowe teremy z nowymi wyjściami, których nie mam na liście, lista musi być zmodyfikowana. Nie, to nie ma sensu. Znacznie prostszą metodą jest to co robię, czyli wzięcie każdej komendy po kolei i sprawdzenie, czy z aktualnej lokacji jest wyjście (normalne lub specjalne) w kierunku wpisanej komendy. To po prostu działa i działa dość niezawodnie.

Nie przeczę, że chcesz dobrze, ale musisz wiedzieć, że pewne rzeczy nie wynikają z tego, że nie chcę tego uprościć, a z tego, że Mudlet zgłasza event gmcp.room wcześniej niż pojawia się tekst na ekranie.

EDIT: Lekka modyfikacja w związku z postem Gleanevalla i Rafgarta
Ostatnio zmieniony 22 kwie 2016 10:09 przez Adremen, łącznie zmieniany 1 raz.
Gleanevall
Posty: 258
Rejestracja: 13 sie 2011 21:08

Re: Mudlet 2.1 - Mapper + zestaw prostych niezawodnych skryptów

Post autor: Gleanevall »

Nie ma opóźnienia w wysyłaniu GMCP - można to sprawdzić w Wiresharku. To klienty po odebraniu przetwarzają je asynchronicznie wzgledem przetwarzania tekstu.
ODPOWIEDZ