TinTin++, skrypty do arkadii v.1.0

Forum techniczne Arkadii.
Awatar użytkownika
Ralandil
Posty: 231
Rejestracja: 02 sty 2012 13:07
Lokalizacja: Athel Loren

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Ralandil »

Orror: Tak. Udostępniłem skrypt trzy strony wcześniej. Zerknij tutaj.
Załączniki
ocenazbroi.png
ocenazbroi.png (2.35 KiB) Przejrzano 3338 razy
Athel Loren shall not suffer the presence of Men, nor Orcs, nor Dwarfs, nor Beastmen. If a foe takes a single step upon such sacred soil, they shall not take another.

TinTin++ Mud Client Manual
Orror
Posty: 40
Rejestracja: 12 lut 2012 19:59

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Orror »

Wielkie dzięki.
Chciałbym zrobić coś podobnego dla broni. Zacząłem nawet w poniższy sposób:

Kod: Zaznacz cały

#action {Twoje doswiadczenie i umiejetnosci podpowiadaja ci, ze jak na %1 jest on %2 wywazony i %3 skuteczny.} 
{
#math {sred} {(@wyw{%2} + @sku{%3}) / 2};
#showme {<030>@wyw{%2} % wywazenia i @sku{%3} % skutecznosci i $sred % sredniej}
}

#function {wyw} 
 {
 #if {"%2"=="dosc dobrze"} {#return 64};
 }

#function {sku} 
 {
 #if {"%3"=="wyjatkowo"} {#return 91}
 }
Mocno testowych kilka linijek bez "{on|ona}", realnych wartości sprzętu itd. Chciałbym tylko zapytać czy jest to w miare sensowny pomysł? Czy nie zwolni pracy TinTina? Może można zrobić to o wiele prościej? Przepraszam za lamerskie pytania ale to mój pierwszy raz z #function. :D
Awatar użytkownika
Ralandil
Posty: 231
Rejestracja: 02 sty 2012 13:07
Lokalizacja: Athel Loren

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Ralandil »

Ocenę broni mam zrobioną na subach, bo chciałem żeby podmiana działała też w innych sytuacjach, np. wypowiedź kupca co do przydatnosci broni.

Kod: Zaznacz cały

#function {bardzo}
{
  #if {"%0" == "bardzo"}{#return 11/14};#else {#if {"%0" == "dosc"}{#return 9/14};#else {#return 10/14};};
} 

#function {kiepsko}
{
  #if {"%0" == "bardzo"}{#return 4/14};#else {#return 5/14};
}

#function {zle}
{
#if {"%0" == "bardzo"}{#return 2/14};#else {#if {"%0" == "wyjatkowo"}{#return 1/14};#else {#return 3/14}};
}

#nop wywazenie broni:
#sub {\b{wyjatkowo|bardzo|} \bzle\b \bwywazon{y|a|e}\b}{%0 @zle{%1}}
#sub {\b{bardzo|} kiepsko wywazon{y|a|e}\b}{%0 @kiepsko{%1}}
#sub {\bprzyzwoicie\b \bwywazon{y|a|e}\b}{%0 6/14}
#sub {\bsrednio\b \bwywazon{y|a|e}\b}{%0 7/14}
#sub {\bniezle\b \bwywazon{y|a|e}\b}{%0 8/14}
#sub {\b{bardzo|dosc|} dobrze wywazon{y|a|e}\b}{%0 @bardzo{%1}}
#sub {\bdoskonale\b \bwywazon{y|a|e}\b}{%0 12/14}
#sub {\bperfekcyjnie\b \bwywazon{y|a|e}\b}{%0 13/14}
#sub {\bgenialnie\b \bwywazon{y|a|e}\b}{%0 14/14}

#nop skutecznosc broni:
#sub {\bkompletnie\b \bnieskuteczn{y|a|e}\b}{%0 1/14}
#sub {\bstrasznie\b \bnieskuteczn{y|a|e}\b}{%0 2/14}
#sub {\bbardzo\b \bnieskuteczn{y|a|e}\b}{%0 3/14}
#sub {\braczej\b \bnieskuteczn{y|a|e}\b}{%0 4/14}
#sub {\bmalo\b \bskuteczn{y|a|e}\b}{%0 5/14}
#sub {\bniezbyt\b \bskuteczn{y|a|e}\b}{%0 6/14}
#sub {\braczej\b \bskuteczn{y|a|e}\b}{%0 7/14}
#sub {\bdosyc\b \bskuteczn{y|a|e}\b}{%0 8/14}
#sub {\bcalkiem\b \bskuteczn{y|a|e}\b}{%0 9/14}
#sub {\bbardzo\b \bskuteczn{y|a|e}\b}{%0 10/14}
#sub {\bniezwykle\b \bskuteczn{y|a|e}\b}{%0 11/14}
#sub {\bwyjatkowo\b \bskuteczn{y|a|e}\b}{%0 12/14}
#sub {\bzabojczo\b \bskuteczn{y|a|e}\b}{%0 13/14}
#sub {\bfantastycznie\b \bskuteczn{y|a|e}\b}{%0 14/14}
Mogę przygotować odpowiedni #action z wyliczaniem średniej, ale wykorzystałbym komendy #switch i #case do przypisania odpowiednich wartości. Sądzę, że takie rozwiązanie będzie szybsze. Wkleję później.

Edycja:
#Action napisałbym tak:

Kod: Zaznacz cały

#action {Twoje doswiadczenie i umiejetnosci podpowiadaja ci, ze jak na %1 jest {on|ona} %2 wywazon{y|a} i %3.}{

#var {wywazenie}{%2};
#var {skutecznosc}{%3};

#switch {"$wywazenie"}{
		#case {"wyjatkowo zle"}{#var {wywazenie}{0};};				
		#case {"bardzo zle"}{#var {wywazenie}{7.7};};
		#case {"zle"}{#var {wywazenie}{15.4};};
		#case {"bardzo kiepsko"}{#var {wywazenie}{23.1};};
		#case {"kiepsko"}{#var {wywazenie}{30.8};};
		#case {"przyzwoicie"}{#var {wywazenie}{38.5};};
		#case {"srednio"}{#var {wywazenie}{46.2};};
		#case {"niezle"}{#var {wywazenie}{53.8};};
		#case {"dosc dobrze"}{#var {wywazenie}{61.5};};
		#case {"dobrze"}{#var {wywazenie}{69.2};};
		#case {"bardzo dobrze"}{#var {wywazenie}{76.9};};
		#case {"doskonale"}{#var {wywazenie}{84.6};};
		#case {"perfekcyjnie"}{#var {wywazenie}{92.3};};
		#case {"genialnie"}{#var {wywazenie}{100};};
		#default {#var {wywazenie}{0};};
						};
						
#switch {"$skutecznosc"}{
		#case {"kompletnie nieskuteczn{y|a|e}"}{#var {skutecznosc}{0};};				
		#case {"strasznie nieskuteczn{y|a|e}"}{#var {skutecznosc}{7.7};};
		#case {"bardzo nieskuteczn{y|a|e}"}{#var {skutecznosc}{15.4};};
		#case {"raczej nieskuteczn{y|a|e}"}{#var {skutecznosc}{23.1};};
		#case {"malo skuteczn{y|a|e}"}{#var {skutecznosc}{30.8};};
		#case {"niezbyt skuteczn{y|a|e}"}{#var {skutecznosc}{38.5};};
		#case {"raczej skuteczn{y|a|e}"}{#var {skutecznosc}{46.2};};
		#case {"dosyc skuteczn{y|a|e}"}{#var {skutecznosc}{53.8};};
		#case {"calkiem skuteczn{y|a|e}"}{#var {skutecznosc}{61.5};};
		#case {"bardzo skuteczn{y|a|e}"}{#var {skutecznosc}{69.2};};
		#case {"niezwykle skuteczn{y|a|e}"}{#var {skutecznosc}{76.9};};
		#case {"wyjatkowo skuteczn{y|a|e}"}{#var {skutecznosc}{84.6};};
		#case {"zabojczo skuteczn{y|a|e}"}{#var {skutecznosc}{92.3};};
		#case {"fantastycznie skuteczn{y|a|e}"}{#var {skutecznosc}{100};};
		#default {#var {skutecznosc}{0};};
						}; 
						
#math {sred}{($wywazenie + $skutecznosc) / 2};												
#sh {<030>$wywazenie % wywazenia i $skutecznosc % skutecznosci i $sred % sredniej.<070>}
}
Tylko trzeba się zdecydować na któryś z powyższych wariantów - albo suby albo ten action.
Athel Loren shall not suffer the presence of Men, nor Orcs, nor Dwarfs, nor Beastmen. If a foe takes a single step upon such sacred soil, they shall not take another.

TinTin++ Mud Client Manual
Orror
Posty: 40
Rejestracja: 12 lut 2012 19:59

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Orror »

Dzięki raz jeszcze. Z każdym następnym postem odkrywam nowe możliwości TinTina. :)
Co do powyższego kodu, wybieram opcję nr 2. Zastanawiam się też czy zamiast #switch i #case można użyć tylko #replace? Coś w stylu:

Kod: Zaznacz cały

#action {Twoje doswiadczenie i umiejetnosci podpowiadaja ci, ze jak na %1 jest {on|ona} %2 wywazon{y|a} blablabla.} 
{
#var {wywazenie}{%2};
#replace {wywazenie} {wyjatkowo zle} {0};
#replace {wywazenie} {bardzo zle} {7.7};
itd.
Jakich komend używać najmniej, tak ażeby nie zamulać klienta?
Awatar użytkownika
Ralandil
Posty: 231
Rejestracja: 02 sty 2012 13:07
Lokalizacja: Athel Loren

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Ralandil »

Ogólnie im mniej skryptów tym lepiej, więc nie przesadzajmy. Przykładowo przy 1000 poleceń #action podobno już można zauważyć spowolnienie, a 20000 bardzo już zwolni. Jedynym rozwiązaniem jest ograniczenie ilości. Jest to szczególnie istotne ponieważ #action jest wykonywany w pierwszej kolejności na tekście przychodzącym, dopiero później mamy #gag, #highlight, #prompt i #substitute.

Dobrym rozwiązaniem będzie załączanie sobie niektórych rzeczy tylko w razie potrzeby. Na przykład zielnik to grubo ponad setka #subów więc nie ma sensu mieć ich załadowanych cały czas.

Odnośnie wpływu rodzaju komend to podejrzewam, że złożone konstrukcje warunkowe (#if) mogą znacznie zwalniać.

Wracając do omawianego skryptu to można wykorzystać #replace, ale trzeba zmienić kolejność.

Kod: Zaznacz cały

...
#replace {wywazenie}{wyjatkowo zle}{0};            
#replace {wywazenie}{bardzo zle}{7.7};
#replace {wywazenie}{niezle}{53.8};
#replace {wywazenie}{zle}{15.4};
#replace {wywazenie}{bardzo kiepsko}{23.1};
#replace {wywazenie}{kiepsko}{30.8};
#replace {wywazenie}{przyzwoicie}{38.5};
#replace {wywazenie}{srednio}{46.2};
#replace {wywazenie}{dosc dobrze}{61.5};
#replace {wywazenie}{bardzo dobrze}{76.9};      
#replace {wywazenie}{dobrze}{69.2};
#replace {wywazenie}{doskonale}{84.6};
#replace {wywazenie}{perfekcyjnie}{92.3};
#replace {wywazenie}{genialnie}{100};
Athel Loren shall not suffer the presence of Men, nor Orcs, nor Dwarfs, nor Beastmen. If a foe takes a single step upon such sacred soil, they shall not take another.

TinTin++ Mud Client Manual
Dorien
Posty: 142
Rejestracja: 25 lip 2012 00:38

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Dorien »

jesli chodzi o bronie zbroje i ich statystykę to ja mam taki mały skrypcik:

bronie

proszę o ocenę jeśli ktoś spróbuje.
Podrawiam D.
Dorien
Posty: 142
Rejestracja: 25 lip 2012 00:38

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Dorien »

i nowe pytanie i propozycja:
czy używacie/używaliście programu sublime text 2? do pisania skrypcików?

jeśli nie to polecam gorąco, http://www.sublimetext.com/

jeśli tak to czy zrobił ktoś syntax do skryptów tintina i czy mógłby się podzielić?

pozdrawiam D.
Awatar użytkownika
Ralandil
Posty: 231
Rejestracja: 02 sty 2012 13:07
Lokalizacja: Athel Loren

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Ralandil »

Nie taki mały ten skrypt. Testować nie będę, moje wynalazki w zupełności mi wystarczają. Do pisania skryptów używam niebieskiej rybki, czasem prosty leafpad lub nawet GNU Midnight Commander jak na shellu coś poprawiam. Gotowy syntax widziałem dla vima, ale można napisać własny, to nie jest wielka filozofia. :)
Athel Loren shall not suffer the presence of Men, nor Orcs, nor Dwarfs, nor Beastmen. If a foe takes a single step upon such sacred soil, they shall not take another.

TinTin++ Mud Client Manual
Orror
Posty: 40
Rejestracja: 12 lut 2012 19:59

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Orror »

Czy istnieje inna metoda niż np:

Kod: Zaznacz cały

#alias {ocen %1}  
{
#class oceny read oceny.tin;
ocen %1;
#delay {1} {#class oceny kill};
} 
ażeby autoamatycznie włączać klasy? Sczególnie chodzi mi o usunięcie komendy #delay. Bez niej w wyżej podanej konstrukcji klient wysyła do muda "ocen %1" w ostatniej kolejnosci, gdy class jest już killed ;) .
Awatar użytkownika
Ralandil
Posty: 231
Rejestracja: 02 sty 2012 13:07
Lokalizacja: Athel Loren

Re: TinTin++, skrypty do arkadii v.1.0

Post autor: Ralandil »

Kod: Zaznacz cały

#alias {ocen %1} 
{
#class oceny read oceny.tin;
ocen %1;
#delay {1} {#class oceny kill};
} 
Alias musi mieć inną nazwę niż polecenie.

Kod: Zaznacz cały

#alias {&ocen %1} 
{
#class oceny read oceny.tin;
ocen %1;
} 
Poniższą część można przenieść na koniec #action oceny.

Kod: Zaznacz cały

#class oceny kill;
Athel Loren shall not suffer the presence of Men, nor Orcs, nor Dwarfs, nor Beastmen. If a foe takes a single step upon such sacred soil, they shall not take another.

TinTin++ Mud Client Manual
ODPOWIEDZ