Strona 71 z 77

Re: CMUD

: 04 gru 2016 21:06
autor: Iverin
No fajnie by to bylo miec w okienku kondycji rzeczywiscie.
Tyle tylko... Jak to zrobic :DDD ???????????????????????

Re: CMUD

: 06 gru 2016 08:07
autor: Sadriviel
To ostatnia część funkcji @uaktualnij_kondycje. Może Cię natchnie. A jak nie to postaram się wytłumaczyć.

Na początku funkcji musisz dodać $nr=%null, żeby się nie krzaczyło. Nie pamiętam czy coś jeszcze.

Kod: Zaznacz cały

  #if (%val.avatar = "true") {
    $sub = $sub"{O} <send ':skrypty:rozkaz wszystkim zaslonic ciebie;wskaz siebie jako cel obrony' 'rozkaz zaslonic'>"Ty"</send> "$atakujaSub
    $kwinYou = $sub
    #if (%val.team_leader = "true") {lead=1} {lead=0}
    #CONTINUE
    }
  #if (%val.team = "true")
  {
    #additem druzyna %key
    $nr=%ismember(%key, @druzyna)
    $sub = $sub"{"$nr"} <send ':skrypty:zaslon ob_"%key"|:skrypty:rozkaz wszystkim zaslonic ob_"%key";wskaz ob_"%key" jako cel obrony|:skrypty:wycofaj sie za ob_"%key"' 'zaslon|rozkaz zaslonic|wycofaj sie za'>"%proper( %val.desc)"</send> "$atakujaSub
    #additem $kwinTeam $sub
    #CONTINUE
    }
  #if (%val.enemy = "true")
  {
    #if (%ismember(%key, @druzyna)) {#delitem druzyna %key} {#additem wrogowie %key}
    $nr=%ismember(%key, @wrogowie)
    $sub = $sub"{"$nr"} <send ':skrypty:zabij ob_"%key"|:skrypty:przelam obrone ob_"%key"|:skrypty:rozkaz wszystkim zaatakowac ob_"%key";wskaz ob_"%key" jako cel ataku|:skrypty:zaslon przed ob_"%key"|:skrypty:zablokuj ob_"%key"' 'zabij|przelam|rozkaz zaatakowac|zaslon przed|zablokuj'>"$nazwa"</send> "$atakujaSub
    #additem $kwinEnemy $sub
    #CONTINUE
    }  
  #if (%ismember(%key, @druzyna)) {#delitem druzyna %key} {#additem wrogowie %key}
  $nr=%ismember(%key, @wrogowie)
  $sub = $sub"{"$nr"} <send '|:skrypty:zabij ob_"%key"|:skrypty:przelam obrone ob_"%key"|:skrypty:rozkaz wszystkim zaatakowac ob_"%key";wskaz ob_"%key" jako cel ataku|:skrypty:zaslon przed ob_"%key"|:skrypty:zablokuj ob_"%key"' 'brak domyslnej akcji|zabij|przelam|rozkaz zaatakowac|zaslon przed|zablokuj'>"$nazwa"</send> "$atakujaSub
  #additem $kwinRest $sub
  }
  
#win "kondycje" $kwinYou
#if ($kwinTeam AND ($kwinEnemy OR $kwinRest)) {#win "kondycje" %ansi(7)"======Druzyna========"}
#forall {$kwinTeam} {#win "kondycje" %i}
#if ($kwinEnemy) {#win "kondycje" %ansi(7)"======Wrogowie======="}
#forall {$kwinEnemy} {#win "kondycje" %i}
#if ($kwinRest AND ($kwinTeam OR $kwinEnemy)) {#win "kondycje" %ansi(7)"======Pozostali======"}
#forall {$kwinRest} {#win "kondycje" %i}

Re: CMUD

: 06 gru 2016 09:45
autor: Talisa
No ba, to jest ze skryptu, i od razu ma bindy i przydzielanie do okna. Mnie glowa juz boli od proby wylowienia odniesien do %json(%0) zlapanego z triggera GMCP. A jestem niepismienny jesli chodzi o programowanie z grubsza.

Jesli bysmy chcieli to zrobic latwiej dla budowania wlasnych skryptow, ktos moglby wylozyc prosta funkcje ktora zapisuje obiekty jako record variable ze wszystkimi parametrami np. @obj_1234 i stamtad kazdy moglby sobie wyciagac i budowac skrypty, okienka i kondycje?

Re: CMUD

: 25 gru 2016 19:22
autor: Borgin
da sie przeniesc mape i konfig z zmuda przeniesc do cmuda zeby w wiekszosci to dzialalo?

Re: CMUD

: 25 gru 2016 19:53
autor: Talisa
Mape tak, skrypty nie.

Re: CMUD

: 25 gru 2016 23:09
autor: Haern
Dla doprecyzowania: Konfig ze skryptami zwykłymi w miarę tak, mapę w miarę tak, skrypty wewnątrz mapy (np. makra/triggery dla konkretnych roomów) - nie.

Re: CMUD

: 02 sty 2017 12:19
autor: Sadriviel
W tej chwili mam z grubsza taki trigger GMCP:

Kod: Zaznacz cały

Pattern: messages
Value:
$msg=%json(%0)

#if ($msg.type="combat") {
   #if {$msg.text=%match( jakis tam sobie pattern )} (
   Jakas tam sobie zamiana do patternu
   #sh Jakis tam sobie zmieniony pattern.
   )
}
Problem polega na tym, że w pewnym momencie kod jest nieczytelny. Mam dużo powtórzonego kodu dla każdej linijki, którą trzeba match'ować. Próbuje ratować się komentarzem po //, ale wciąż średnio to wygląda.

Czy da się zrobić taki trigger GMCP, który byłby osobnym triggerem w CMUDzie reagującym na określony type i text pakietu messages?

Na przykład pattern: messages.type=combat|text=Jakis tam sobie tekst.
Który już normalnie w value miałby dokładnie to samo co rozwiązanie wyżej, tylko bez %match i tworzył normalną strukturę drzewa w CMUDzie.

Re: CMUD

: 02 sty 2017 13:47
autor: Haern
Bez wnikania w dokładną treść - w nowym CMUDzie dostępne są eventy oraz pisanie własnych funkcji. Powinno znacząco poprawić przejrzystość kodu oraz uniknąć powtarzania w kółko tego samego fragmentu kodu. Można też zrobić sekwencyjne triggery (condition). Ostatecznie - dość oldschoolowo - można do tego użyć aliasów. Helpful?

edit: Pattern może też być wyrażeniem (odpowiedni typ triggera?), ale nigdy tego nie testowałem. Może coś się tu da wykorzystać.

Re: CMUD

: 02 sty 2017 15:08
autor: Talisa
Jak rozumiem chcesz tylko niektore fragmenty walki przepuszczac do muda?
Bo inaczej nie potrafie wyobrazic sobie zalety otrigerowania gmcp nad trigerami normalnymi. Ja po prostu wygagowalem, ale rzeczywiscie to jest wolne.
Text przychodzi jako %json, nie otrigerujesz tego. Ewt. zrobic zmienna ze slowami kluczowymi/unikalnymi do niechcianych linii i dac %match("@zmienna").


Ja natomiast chcialbym skrypt ktory lapie czy dana linia aktywuje jakis trigger z odpowiedniej grupy. Albo chociaz reaguje tylko na text po #sub-ach, gdzie moglbym po dlugosci linii lapac niewysubowane spece np.

Re: CMUD

: 02 sty 2017 16:56
autor: Sadriviel
@Haern:

Zajęło mi sporo czasu ogarnięcie funkcji, ale się udało i z nich korzystam, ułatwiają znacznie wszystko. Chociaż myślę, że dałoby się tam coś jeszcze poprawić - sprawdzę.

@Talisa:

Teoretycznie jedne trigger na samym GMPC.messages jest szybszy niż kilka triggerów na linijkach wykorzystujących #sub, dlatego tak zrobiłem.

To czego szukasz, to kolejny trigger moim zdaniem. Ja zamieniam wszystko tak, że jest tam znaczek ">" lub "<", dlatego myślę, że u mnie (i analogicznie u Ciebie) zadziałałoby coś takiego...

Pattern:^(*)({>|<})(*)$
Value:
$linijka=%1%2%3
#if (%len(linijka)>120) {jakis tam skrypt, #additem?}

I teraz kazda linijka po subie, ktora ma wiecej niz 120 znakow, bedzie wywoływała skrypt lub przy #additem dodawala sie do jakiejs zmiennej.

O ile o to chodziło :)