CMUD

Forum techniczne Arkadii.
Dragar
Posty: 10
Rejestracja: 20 paź 2015 08:41

Re: CMUD

Post autor: Dragar »

Cześć

Mam pytanie: Wymysliłem sobie ja że jak ocenie kogos, np ocen czlowieka -> jest to xx yy czlowiek. to wrzuce sobie odmienionego do zmiennych i podbinduje go do komendy polaskocz xx yy czlowieka.
Dziala! Ale...cholerna kropka! Jak zmienic string "czlowieka." na "czlowieka", czyli usunac kropke ze stringu przekazanego do zmiennej?

Pozdrawiam
Dragar
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post autor: Haern »

Najłatwiej kropkę umieścić już w patternie.
Jeśli nie, to można użyć funkcji %replace, zamieniając kropkę na pusty string.
Dragar
Posty: 10
Rejestracja: 20 paź 2015 08:41

Re: CMUD

Post autor: Dragar »

Dzieki!

Dragar
Narmaniel

Re: CMUD

Post autor: Narmaniel »

Mam problem z pakietem "messages". To mój skrypt na pakiecie:

Kod: Zaznacz cały

$msg = %json(%0)
#say [$msg.type] $msg.text
A to efekt na Arce:

Kod: Zaznacz cały

[combat] Lekko ranisz kogutoglowego owrzodzialego mutanta nabijanym czernionym morgensternem, trafiajac go w korpus.
[combat] 
[combat] Kogutoglowy owrzodzialy mutant ledwo muska cie zardzewiala prowizoryczna szabla, trafiajac cie w lewe ramie.
[combat]
Pokazując sam msg.text też wrzuca jedną pustą linię. Czy to ja coś zepsułem, czy tak ma być?

EDIT:

Problem rozwiązałem #if'em, który był u Zurwena. (Głupi ja...) Podtrzymuję pytanie - skąd ta pusta linia?
Jasko
Posty: 71
Rejestracja: 06 sty 2012 11:17

Re: CMUD

Post autor: Jasko »

Zgadywalbym ze ta pusta linia to informacja przeslana przez gmcp - mozesz sprawdzic czy przy uzyciu #sayadd bedzie ta pusta linia? Byloby to moim zdaniem efektywniejsze niz #if
Narmaniel

Re: CMUD

Post autor: Narmaniel »

Niestety, if musi zostać, bo z #sayadd się krzaczy jeszcze bardziej.
Narmaniel

Re: CMUD

Post autor: Narmaniel »

Z góry przepraszam za dwa posty pod sobą.

Próbuję zrobić zamianę linijek wewnątrz triggera GMCP na pakietach Messages i póki co wyszło mi coś takiego:

Kod: Zaznacz cały

$msg = %json(%0)
#if (%len($msg.text)>4) {
#say [$msg.type] $msg.text
  #if ($msg.type == "comm") {
  #sh ok
  #if (%match($msg.text,"(*) mowi do (*): (*)",$kto,$do_kogo,$co)) {#sh $kto => $do_kogo : $co;kto=$kto;co=$co} {#say nie ok}
  } {}
} {}
Chciałbym, żeby pattern mógł rozpoznawać kolory ascii i jestem na dobrej drodze ku temu. Pierwsza wyłapana zmienna, czyli $kto, zwyczajnie przeklejona do zwykłego ANSI triggera wygląda tak: %e[33mNAZWA NPCA%e[0m, natomiast wyłapana do $kto automatycznie przez kod powyżej wygląda tak: [0m[37;1m[0m[22;33mNAZWA NPCA[0m[37;1m (przed każdym [ jest znak, który CMUD pokazuje jako ESC, jeśli się go przeklei).

Wpisanie tych automatycznie wyłapanych "krzaków" przed i po miejscu, z którego ma być wyłapana zmienna, daje sam czysty tekst NAZWY NPCA. Metodą prób i błędów staram się ogarnąć, jak dużo z tych "krzaków" jest potrzebnych, żeby pattern się łapał. ;) Może jakieś sprawdzone rozwiązania lub wskazówki, które mi pomogą?

Poza tym zastanawiam się nad strukturą całego skryptu. Próbowałem jakoś uruchomić szczątki swojego algorytmicznego myślenia i nijak nie jestem w stanie połączyć tu #if i #switch w działającą całość. Póki co widzę to jako #if na rozpoznanie typu, a potem serię #if'ów na przerabianie linijek. Przypuszczam też, że mógłbym się tu posłużyć funkcjami, ale mimo prób i ogarnięciu skryptów Zurwena, nijak nie jestem w stanie pojąć, jak one działają...

Będę wdzięczny za każdą pomoc. :ugeek:
Awatar użytkownika
Tuargan
Posty: 41
Rejestracja: 14 lut 2009 19:12

Re: CMUD

Post autor: Tuargan »

Miałem ten sam problem w tf. W pewnym momencie się poddałem i zastosowałem obejście.

Jak się zorientowałeś (bądź nie :P) te "krzaki" to kolorowanie (ciąg przed, w tym przypadku nazwą enpeca to ustawienie koloru, jaki masz podany na arce pod "kolor", ciąg po nazwie, to wyczyszczenie kolorowania). Ten sam problem mieć będziesz ze wszystkim co ma ustawione jakiekolwiek arkowe kolory. Ciąg krzaczków przed będzie zmienny, w zależności od koloru. Ciąg po, będzie stały chyba zawsze (w dotychczasowych eksperymentach wychodził mi stały).

I teraz masz 3 wyjścia:
1) wyłapujesz konkretne ciągi dla konkretnych kolorów, po czym zakładasz, że każda postać stosująca te skrypty będzie miała te same ustawienia i zaszywasz patterny na stałe w skrypcie
2) wymyślasz wspólny pattern na wszelkie kolory (ja się poddałem w pewnym momencie, za słaby z programowania jestem, żeby dobrego regexa wymyślić na to :/
3) wyłączasz wszelkie arkowe kolory i masz problem z głowy, dochodzi jednak inny - kolorowanie rzeczy tych, które chcesz :P
Narmaniel

Re: CMUD

Post autor: Narmaniel »

Już poczytałem o krzakach, mam zamiar je wykorzystać do łapania rzeczy jak przeciwnik/drużyna i takie tam.

Jakoś tak mam, że jak napiszę posta na forum, to potem wpadam na genialne pomysły. :P Struktura, jaką wymyśliłem póki co to:

Kod: Zaznacz cały

#if (%len($msg.text)>4) {
   #switch ($msg.type)
      ("comm") {
      TUTAJ SKRYPTY NA COMM
      }
      ("combat") {
      TUTAJ SKRYPTY NA MOJA WALKE
      }
      ("combat.team" OR "combat.other") {
      TUTAJ SKRYPTY NA RESZTE
      }
}
Tylko te skrypty to wciąż seria IF pod IFem... Muszę raz jeszcze przekopać te funkcje :/ Chciałbym, żeby #if wyglądał tak...

Kod: Zaznacz cały

Mutant lekko rani krasnoluda mieczem, trafiajac go w glowe.


#if (%match($msg.text,"(kodansi)(*)(/kodansi) (*{muska|rani|masakruje}) (kodansi)(*)(/kodansi) (*), trafiajac %w w *.",$kto,$dmg,$kogo,$czym) {@funkcja_do zamieniania_normalnego_ciosu}
Albo też %match wciągnąć w funkcję, tylko jeszcze nie mam pomysłu jak.
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post autor: Haern »

Polecam wykorzystywanie zmiennych lokalnych. Zrobi się bardziej przejrzysto, no i zachowasz sobie wynik np. %match i możesz go wykorzystać później ponownie do czegoś, nie musisz znów wykonywać funkcji %match - zyskujesz na wydajności (niby drobnica, ale wszystko się liczy w ogólnym obrazie).
ODPOWIEDZ