CMUD

Forum techniczne Arkadii.
Iverin
Posty: 6
Rejestracja: 03 gru 2016 10:29

Re: CMUD

Post autor: Iverin »

No fajnie by to bylo miec w okienku kondycji rzeczywiscie.
Tyle tylko... Jak to zrobic :DDD ???????????????????????
Awatar użytkownika
Sadriviel
Posty: 79
Rejestracja: 23 mar 2016 07:37

Re: CMUD

Post 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}
Cierpliwość i spokój nie są moimi cnotami.
Awatar użytkownika
Talisa
Posty: 144
Rejestracja: 21 kwie 2015 23:40
Lokalizacja: Skellige IRL

Re: CMUD

Post 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?
Everyone is fighting their own battle to be free from their past, to live in the present, and create a meaningful future for themselves. Don't judge, have a heart.
Borgin
Posty: 7
Rejestracja: 26 lut 2015 16:22

Re: CMUD

Post autor: Borgin »

da sie przeniesc mape i konfig z zmuda przeniesc do cmuda zeby w wiekszosci to dzialalo?
Awatar użytkownika
Talisa
Posty: 144
Rejestracja: 21 kwie 2015 23:40
Lokalizacja: Skellige IRL

Re: CMUD

Post autor: Talisa »

Mape tak, skrypty nie.
Everyone is fighting their own battle to be free from their past, to live in the present, and create a meaningful future for themselves. Don't judge, have a heart.
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post 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.
Awatar użytkownika
Sadriviel
Posty: 79
Rejestracja: 23 mar 2016 07:37

Re: CMUD

Post 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.
Cierpliwość i spokój nie są moimi cnotami.
Haern
Posty: 756
Rejestracja: 13 lut 2009 14:03

Re: CMUD

Post 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ć.
Awatar użytkownika
Talisa
Posty: 144
Rejestracja: 21 kwie 2015 23:40
Lokalizacja: Skellige IRL

Re: CMUD

Post 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.
Everyone is fighting their own battle to be free from their past, to live in the present, and create a meaningful future for themselves. Don't judge, have a heart.
Awatar użytkownika
Sadriviel
Posty: 79
Rejestracja: 23 mar 2016 07:37

Re: CMUD

Post 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 :)
Cierpliwość i spokój nie są moimi cnotami.
ODPOWIEDZ