CMUD

Forum techniczne Arkadii.
Suvi
Posty: 45
Rejestracja: 07 mar 2011 00:03

CMUD

Post autor: Suvi »

Na początek istotne elementy problemu:

alias 'nonstd'
nonstd kierunek_lokacji komenda_wyjscia komenda_powrotu
nonstd d chata wyjscie tworzy pod biezaca lokacja nowa lokacje, a wyjsciu na 'd' przypisuje komende 'chata', zas na lokacji docelowej wyjsciu prowadzacemu na 'u' przypisuje komende 'wyjscie'.

Kod: Zaznacz cały

#MAKE %1
#MOVE @odwrocone.%1
$dest = %roomlink(, %1)
$query = %format( "UPDATE ExitTbl SET Name='%s' WHERE (FromID=%d AND ToID=%d)", %2, %roomnum, $dest)
#CALL @sql_map_query( $query)
$query = %format( "UPDATE ExitTbl SET Name='%s' WHERE (FromID=%d AND ToID=%d)", %3, $dest, %roomnum)
#CALL @sql_map_query( $query)

funkcja 'sql_map_query'

Kod: Zaznacz cały

#SQLDB "Arkadia/Arkadia_mapa.dbm"
#RETURN %sql( "Arkadia/Arkadia_mapa.dbm", $query)
Odpowiedni wpis w bazie danych wyglada identycznie jak inne tego typu, ale wyjscie jakby nie zostaje automatycznie zaktualizowane i nie tylko nie dziala poprawnie, ale i w polu 'Name' nie ma podanej komendy, choc jest widoczna po lewej stronie. Dopiero po ponownym zaladowaniu mapy dziala prawidlowo i podana komenda pojawia sie w polu 'Name'.

Samo pytanie brzmi - jak wymusić aktualizacje danej lokacji/strefy bez przeladowywania calej mapy? Lub czy istnieje prostszy sposob na zmiane komendy wyjscia przy jednoczesnym zachowaniu polozenia lokacji na mapie i zachowaniu odpowiedniego wyjscia (np. dol zamiast niestandardowego oznaczanego na mapie kropka). Moze cos z %roomexit i %roomlink? Nie udalo mi sie do tego jednak dojsc.
Załączniki
blad.jpg
blad.jpg (50.06 KiB) Przejrzano 16139 razy
Awatar użytkownika
Magog
Posty: 127
Rejestracja: 07 sty 2011 00:05

Re: CMUD

Post autor: Magog »

Widze, co chcesz zrobic (fajne imo), ale nigdy bazami sie nie bawilem.
Chodzi chyba o funkcje %roomportal do tworzenie niestandardowych wyjsc. Natomiast w dokumentacji nie ma nic o powiazaniu ich ze standardowymi kierunkami poruszania sie.

Ja bym sie na Twoim miejscu zapytal na forum zuggsoftu, ale jest bardzo mozliwe, ze nie da sie zscriptem (kilka rzeczy edytowalnych z poziomu menu, nie da sie wykonac za pomoca komend - probowalem zrobic skrypt ktory automatycznie i dynamicznie tworzyl gauge button na kazdego czlonka druzyny, ale sam zugg chyba odpowiedzial, ze funkcja tego nie potrafi w zscripcie, a jedynie w LUA)
Podstawowa zasada RPG - "Less QQ, More Pew Pew"
Suvi
Posty: 45
Rejestracja: 07 mar 2011 00:03

Re: CMUD

Post autor: Suvi »

Magog pisze:Widze, co chcesz zrobic (fajne imo), ale nigdy bazami sie nie bawilem.
Chodzi chyba o funkcje %roomportal do tworzenie niestandardowych wyjsc. Natomiast w dokumentacji nie ma nic o powiazaniu ich ze standardowymi kierunkami poruszania sie.
Właśnie z tym jest problem, nie chcą ze sobą współpracować. Na razie udało mi się jeszcze do bazy mapy dodać tabelę opisującą niestandardowe opisy wychodzenia przez szefa drużyny, aby skrypt mógł za nim podążać. Dzięki temu wszystko jest w mapie, a nie w konfigu, więc można to w miarę łatwo przenosić bez konieczności trzymania kilku dodatkowych wielkich zmiennych i operować wyłącznie na %roomnum.
Magog pisze:jest bardzo mozliwe, ze nie da sie zscriptem (kilka rzeczy edytowalnych z poziomu menu, nie da sie wykonac za pomoca komend - probowalem zrobic skrypt ktory automatycznie i dynamicznie tworzyl gauge button na kazdego czlonka druzyny, ale sam zugg chyba odpowiedzial, ze funkcja tego nie potrafi w zscripcie, a jedynie w LUA)
Mam gdzieś zakopany taki skrypt, który na podstawie składu drużyny tworzy serię gaugy z kondycją, które się uaktualniają przy sprawdzaniu tejże. Niestety przy więcej niż 3-4 osobach w drużynie zwalnia to straszliwie (w ogóle updatowanie buttonów bardziej złożonymi funkcjami nie jest zbyt szybkie). LUA zaś na pewno przydaje się do funkcji liczących, gdzie trzeba operować na ułamkach, floatach itp., bo skrypty w zscripcie chcą być za bardzo user-friendly.
Awatar użytkownika
Magog
Posty: 127
Rejestracja: 07 sty 2011 00:05

Re: CMUD

Post autor: Magog »

Suvi pisze:
Magog pisze:jest bardzo mozliwe, ze nie da sie zscriptem (kilka rzeczy edytowalnych z poziomu menu, nie da sie wykonac za pomoca komend - probowalem zrobic skrypt ktory automatycznie i dynamicznie tworzyl gauge button na kazdego czlonka druzyny, ale sam zugg chyba odpowiedzial, ze funkcja tego nie potrafi w zscripcie, a jedynie w LUA)
Mam gdzieś zakopany taki skrypt, który na podstawie składu drużyny tworzy serię gaugy z kondycją, które się uaktualniają przy sprawdzaniu tejże. Niestety przy więcej niż 3-4 osobach w drużynie zwalnia to straszliwie (w ogóle updatowanie buttonów bardziej złożonymi funkcjami nie jest zbyt szybkie). LUA zaś na pewno przydaje się do funkcji liczących, gdzie trzeba operować na ułamkach, floatach itp., bo skrypty w zscripcie chcą być za bardzo user-friendly.
Hmm, da sie zrobic tylko gauge gotowce ze zmiennymi w caption i je wlaczac, nawet pojedynczo. Wsadzenie #button w #loop jest niemozliwe bo "%i" nie jest rozpoznawane w wielu miejscach, a szczegolnie przy ustalania pozycji przycisku. Choc nie patrzylem do ostatnich changelogow, Zugg mowil ze #button ma miec bardziej przyjazne operowanie parametrami (wtedy trzeba bylo podac takze te puste w ciagu)

Jedyne autorskie cos co kombinowalem z mapa, to zrobilem trigger na OnRoomEnter, ktory sprawdza kolor pokoju i ustawia binda na karczmy, wodopoje, bramy itd.
Podstawowa zasada RPG - "Less QQ, More Pew Pew"
Suvi
Posty: 45
Rejestracja: 07 mar 2011 00:03

Re: CMUD

Post autor: Suvi »

Magog pisze:Hmm, da sie zrobic tylko gauge gotowce ze zmiennymi w caption i je wlaczac, nawet pojedynczo. Wsadzenie #button w #loop jest niemozliwe bo "%i" nie jest rozpoznawane w wielu miejscach, a szczegolnie przy ustalania pozycji przycisku. Choc nie patrzylem do ostatnich changelogow, Zugg mowil ze #button ma miec bardziej przyjazne operowanie parametrami (wtedy trzeba bylo podac takze te puste w ciagu)
Można zastępować %i jakąś tymczasową zmienną obliczoną przez %eval. Ale jest to wolne i brzydkie. A składnia #BUTTON jest rzeczywiście paskudna.
Suvi
Posty: 45
Rejestracja: 07 mar 2011 00:03

Re: CMUD

Post autor: Suvi »

Zrobię rzecz straszną i podbiję temat z innym pytaniem.
Czy ktoś ma może jakiś fajny "framework", zestaw funkcji do obsługi SQL? Jakieś wygodne narzędzia do sprawniejszego modyfikowania danych, sprawdzania wyników itp.? I nie, nie chodzi mi o wysępienie od kogoś gotowca ;)
Dogid
Posty: 135
Rejestracja: 26 lis 2010 17:48

Re: CMUD

Post autor: Dogid »

Witam,
Do tej pory uzywalem zmuda 7.21.
Staram się przemigrować na cmuda 2.37.

Pojawiło mi się kilka pytań:

1. Tworząc aliasa w którym używana jest (chyba dowolna funkcja) operująca na tekscie tracę spacje.
przyklad
%if (%1, uderz w %1, zastukaj do bramy)
w wyniku działania dostanę
np. uderzwstol lub zastukajdobramy
Da się to obejść stosujać #IF zamiast %if.
Tyle, że mam trochę zakopanych funkcji i trochę potrwa odgrzebanie wszystkich.
Jest na to jakaś rada?

2. Komenda #STW.
Do tej pory używałem jej na zasadzie
#stw @zmienna
i definiowałem sobie zmienna. Po zmianie na cmuda zamiast ładnie formatowanej zmiennej (%ansi i tym podobne) pojawia mi się textowa wartość tej zmiennej.
%ansi(13)Jestes%ansi(5)w swietnej kondycji
%ansi(12)Kaczka%ansi(3)w dobrej kondycji
etc.
Użycie wielokrotne #STW tworzy natomiast duża liczbę danych do okna statusu.
Mogę zmusić status do wyświetlenia poprawnie.. ale nie wyczyszczę go i przy odświeżaniu pozostaną stare wpisy.
Kombinowałem z $ i pochodnymi ale może źle kombinuje albo godzina jest nieodpowiednia.
Jak to rozwiązujecie?

3. Jak na przycisku wywołać napis z wartością zmiennej?
Przykładowo mam przycisk gdzie w Caption chce wpisać Dowódca: @lider
i chciałbym dostać Dowódca: Oktawian


A co do mapy - może spróbować zaznaczyć w opcjach mapera "aktualizuj po kazdym kroku" i przekonać program, ze wykonało się ruch (np. #te nr. aktualnej lokacji)?
Suvi
Posty: 45
Rejestracja: 07 mar 2011 00:03

Re: CMUD

Post autor: Suvi »

1.

Kod: Zaznacz cały

%if( %1, "uderz w"%1, "zastukaj do bramy")
%if( %1, %format( "uderz w %s", %1), "zastukaj do bramy")
2.
Możesz spróbować używać %eval, a zamiast %ansi znaczników

Kod: Zaznacz cały

<color red>tekst</color>
Nie wiem, czy działają one w status window, bo status window nie używam.
Zapoznaj się z dokumentacją komend #STW i #WINDOW, bo jest kilka zmian.

3.
Ustaw caption przycisku jako np.

Kod: Zaznacz cały

Kondycja: @stan_kond_desc
Mapper zaś najlepiej konfigurować po stworzeniu odpowiednich subów wyjść, np.:

Kod: Zaznacz cały

Lokacja.
==> n, d, w
Jeśli nie chcesz, aby suby pojawiały się na ekranie, możesz wygenerować na podstawie wyjść z lokacji zmienną i przekazać ją do mappera komendą

Kod: Zaznacz cały

#TAG exit $zmienna
oczywiście po odpowiednim formatowaniu. Warto też do definicji kierunków (dirs) dodać ich polskie nazwy, bywa to mimo wszystko bardzo pomocne.
I używać mappera w trybie "fast". Komendy #TELEPORT nie warto używać w nadmiarze, jeśli można coś zrobić prościej.
Dogid
Posty: 135
Rejestracja: 26 lis 2010 17:48

Re: CMUD

Post autor: Dogid »

Suvi.

Odnośnie 2.
Sprawdz coś takiego.
#stw {@testokna} "" testokna
testokna = %ansi(red)test%ansi(yellow) okna %cr dalej to jest tu

pokazuje równocześnie znikanie spacji i to, że %ansi jest trawione.


Odnośnie 3.
Może źle napisałem.
Ustawiam Captiona: Dowódca: @lider
Zmienna lider = Oktawian
oczywiście może się zmienić "w locie" - lider = Nazir
Efektem powinno być Dowódca: Oktawian
a jest Dowódca: @lider
To co jest wpisane w captiona nie jest traktowane jako zmienna a jako text.
Albo źle się odwołuje do tej zmiennej.
Suvi
Posty: 45
Rejestracja: 07 mar 2011 00:03

Re: CMUD

Post autor: Suvi »

Dogid pisze:Odnośnie 2.
Sprawdz coś takiego.
#stw {@testokna} "" testokna
testokna = %ansi(red)test%ansi(yellow) okna %cr dalej to jest tu

pokazuje równocześnie znikanie spacji i to, że %ansi jest trawione.
Normalnie w oknie pojawia się
test okna
dalej jest to tu
Pokombinuj może z opcjami, może gdzieś tam jest coś do autoexpand variables czy coś.
Odnośnie 3.
Może źle napisałem.
Ustawiam Captiona: Dowódca: @lider
Zmienna lider = Oktawian
oczywiście może się zmienić "w locie" - lider = Nazir
Efektem powinno być Dowódca: Oktawian
a jest Dowódca: @lider
To co jest wpisane w captiona nie jest traktowane jako zmienna a jako text.
Albo źle się odwołuje do tej zmiennej.
Mam caption ustawiony na:
Kondycja: @stan_kond_desc
i zmienia się na biężąco. Spróbuj jak wyżej albo używaj Lider: %eval( @zmienna) lub czegoś podobnego.

Kod: Zaznacz cały

#BUTTON test_btn {C: @var} {#SH Zmienna VAR = @var}
var = Test1
var = Test2
Odpowiem tak jak odpowiadają w pomocy technicznej: "u mnie działa".
ODPOWIEDZ