CMUD

Forum techniczne Arkadii.
Awatar użytkownika
Freyr
Posty: 40
Rejestracja: 14 paź 2013 10:59

Re: CMUD

Post autor: Freyr »

Witam wszystkich,

Mam na początek bardzo krótkie pytanie. Szukałem odpowiedzi na różnych forach, niestety bez większych rezultatów. Tutaj również opcje 'szukaj' na tyle ciężko ograniczyć hasłami, by coś znaleźć. Odsyłany z forum do forum, natrafiłem na trigger zapisujący sesję gry do pliku na dysku.

W oknie pattern:

^Witaj, %w. Podaj swe haslo:

Poniżej:

<trigger priority="430" id="43">
<pattern>Witaj, %w. Podaj swe haslo:</pattern>
<value>#LO c:\Logi\%time( "ddmmmmyyyy")</value>
</trigger>


Czy tu gdzieś jest błąd, czy leży on w ustawieniach programu?

Edycja: Widziałem właśnie gdzieś ten zwrot, ale nie było napisane, gdzie tego szukać. Jakieś wskazówki?
Ostatnio zmieniony 19 lis 2013 12:40 przez Freyr, łącznie zmieniany 2 razy.
This land is ours and we'll see it wiped clean
Of the scourge that has sullied our hopes and our dreams
Awatar użytkownika
Merkava
Posty: 258
Rejestracja: 28 lis 2011 15:09

Re: CMUD

Post autor: Merkava »

A czemu nie uzyjesz eventa onconnect?

Poza tym z tego co widzę u siebie potrzebujesz jeszcze otworzyć plik:

#file 1 "C:\sciezka do katalogu\logi\"%char"_"%time( y_m_d).txt
#close 1

i dopiero potem:
#LOG "C:\sciezka do katalogu\logi\"%char"_"%time( y_m_d).txt

Wlasnie tak. Tworzysz event onconnect, i w jego tresci dajesz te trzy linijki. Pamietaj żeby dać cmudowi uprawnienia do zapisu w miejscu docelowym.
Awatar użytkownika
Merkava
Posty: 258
Rejestracja: 28 lis 2011 15:09

Re: CMUD

Post autor: Merkava »

Dobra, zacząłem cos więcej grzebać w skryptowaniu i trafiłem na pierwszy problem.

Chcę stworzyć zmienną twoj_stan która bedzie przechowywać szereg elementów, na początek hp i mane. Chcę potem móc odwoływać się do poszczególnych elementów i je modyfikować.

Najpierw stworzyłem pattern:

Kod: Zaznacz cały

Jestes *({ledwo zyw?|ciezko rann?|w zlej kondycji|rann?|lekko rann?|w dobrym stanie|w swietnej kondycji}), zas mentalnie ({u kresu sil|wykonczon?|wyczerpan?|w zlej kondycji|bardzo zmeczon?|zmeczon?|oslabion?|lekko oslabion?|w pelni sil}).
I pięknie, pod %1 znajduje mi 'w swietnej kondycji' a pod %2 'w pelni sil'.
Teraz chciałem żeby to zostało zapisane w jednej zmiennej, i... dupa. Na dziesięć sposobów już próbowałem, w dokumentacji nie ma przykładu zapisania listy (tylko wzmianka że elementy powinny być rozdzielone '|'), przy zapisie z %array (bo z tym też kombinowałem) tworzy mi pustą zmienną, przy zapisie bez w ogóle żadnej nie tworzy, wywala komunikat że nie mogło skompilować. Może mi ktoś podać poprawną składnie komendy tworzącej zmienną o nazwie twoj_stan która będzie mieć w wartości dwa elementy, odpowiadające bieżącym hp i manie?
Gleanevall
Posty: 258
Rejestracja: 13 sie 2011 21:08

Re: CMUD

Post autor: Gleanevall »

Skoro chcesz do listy, to najlepiej tak:

Kod: Zaznacz cały

twoj_stan = %1
#additem twoj_stan %2
i wyciągasz te dane potem %item(@twoj_stan, 1) %item(@twoj_stan, 2).
Ale może lepiej do zmiennej bazodanowej:

Kod: Zaznacz cały

twoj_stan.hp = %1
twoj_stan.mana = %2
i wyciagasz dane przez @twojstan.hp albo %db(@twoj_stan, hp).
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post autor: Haern »

Bez problemu powinno zadzialac najprostsze rozwiazanie:
#VAR twoj_stan {%1|%2}

Dla pewnosci mozesz najpierw ustalic typ zmiennej poprzez #call %vartype.
Awatar użytkownika
Merkava
Posty: 258
Rejestracja: 28 lis 2011 15:09

Re: CMUD

Post autor: Merkava »

Dzięki.

Kolejne pytanie:
Czy (a jeśli tak, to jak) na JEDNEJ pozycji listy będącej stringiem mogę przechowywać nie tylko dokładną wartość ale też wyrażenie?

Przykład:
lista @kondycje
ledwo zywy|ciezko ranny|w zlym stanie|ranny|lekko ranny|w dobrym stanie

funkcja %ismember zwraca mi pozycję elementu listy, np 'Jestes ledwo zywy.' zwraca mi 1. Chciał bym żeby ta sama lista zwracała mi 1 na 'ledwo zywy' i 'ledwo zywa'. Czy mogę to jakoś zrobić?

Teoretycznie mógł bym sprawdzać tylko 'ledwo zyw' a ostatnia literę wyrzucić poza zmienną, ale na przyszłość chciał bym wiedzieć czy można robić taką listę o jakiej piszę.

p.s. Zależy mi na tym by to była zmienna-lista a nie db.
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post autor: Haern »

Nigdy nie próbowałem. Nie łatwiej zrobić jakiś przełącznik "płci" skryptów?;) Albo w liście kondycja umieścić odpowiedniki dla obu płci, i potem po %ismember odpowiednio dzielić wynik.
Jeśli jednak BARDZO chcesz zrobić to tak jak mówisz, to po zastąpieniu %ismember pętlą, wstawieniu regexpa albo wildcarda do @kondycja i testowaniu %match/%regex powinno się to udać zrobić (może wymagać użycia funkcji %expand).
Awatar użytkownika
Merkava
Posty: 258
Rejestracja: 28 lis 2011 15:09

Re: CMUD

Post autor: Merkava »

W końcu zrobiłem po prostu 'przełącznik' na płeć. I kolejne pytanie, może to kwestia późnej pory, ale za demona nie mogę wykminić z Helpa jak działa #alarm, #timer itd... W jaki sposób ustawić narzędzie, które co określony interwał czasu, począwszy od jakiejś informacji z arki, będzie wykonywać mi daną komendę?
Awatar użytkownika
Thorffin
Posty: 62
Rejestracja: 05 lis 2012 20:08

Re: CMUD

Post autor: Thorffin »

Oj, oj.... Nie jestem pewien, czy za takie coś nie grozi piorun z jasnego nieba prosto w czerep.

Może #wait Cię poratuje?

#wait 5000 = czekanie 5s
#sh Minelo 5s.
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post autor: Haern »

Jesli jest to komenda wysylana do muda (np "stan") to jest to zabronione (rownoznaczne z triggerem, wyslanie komendy bez wiedzy gracza). Jesli jest to tylko czesc skryptu, bez wysylania niczego, to oczywiscie dozwolone.
#Alarm powoduje pojedyncze wywolanie konkretnego kodu po okreslonym czasie od wywolania komendy #alarm.
#Wait to odczekanie z wykonywaniem kolejnej linijki kodu (w zmudzie blokowalo wykonywanie wszystkich skryptow, nie wiem jak w cmudzie). Zwykle lepiej uzywac #alarm.
#Timer to ustawienie wbudowanego w cmuda "ticku", ktory po uplywie okreslonego czasu wywola komende, po czym zacznie liczyc od poczatku. Mozna tym mierzyc np. czas arkadiowy, ale tak jak napisalem, wysylanie w ten sposob komend do muda jest zabronione.
ODPOWIEDZ