Skocz do zawartości

Randomizacja - Jak losować? Losowe liczby i kody (Captcha)


Rekomendowane odpowiedzi

W tym (moim pierwszym tutaj) poradniku chciałbym pokazać Wam jak losować w Skript.

Chodzi mi tu o np. losowe ciągi znaków, losowe liczby i kilka wskazówek i uwag.


.

Randomizacja w Skript

Dzięki randomizacji w Skript'cie jesteśmy w stanie losować obiekty z pewnego zakresu/zbioru.

give a diamond to a random player out of all players in "world" 

Kod powyżej spowoduje, że losowy gracz z zakresu wszystkich graczy w świecie "world" dostanie diament.

message "Losowa liczba pomiedzy 8 a 35: %random integer between 8 and 35%" 

Możemy także losować liczby z zakresów. Kod powyżej napisze nam jakąś losową liczbę całkowitą.

message "Losowa liczba pomiedzy 8 a 35: %random number between 8 and 35%" 

Skript potrafi także losować liczbę niecałkowitą (ułamek dziesiętny), przykładowo kod powyżej napisze nam jakąś losową liczbę dziesiętną.

chance of 10%:        message "Masz szczescie!"

W powyższym kodzie też jest randomizacja. Wyrażenie, a raczej kondycja "chance", pozwala na wylosowanie szansy na jakieś zdarzenie. Powyżej, mamy 10% szans (z 100%) na otrzymanie wiadomości "Masz szczescie!". Możemy to też zapisać na inne sposoby:

if chance of 0.1:        message "Masz szczescie!"# LUBchance of 10/100:        message "Masz szczescie!"# LUBchance of 37.4/374:        message "Masz szczescie!" 

.

Wyrażenia

W dokumentacji Skript'a mamy więc 3 wyrażenia związane z randomizacją: "random" i "random number" oraz "chance".

 

"random" służy do losowania pewnego typu obiektu z jakiegoś zakresu obiektów.

Składnia:       [a] random %typ obiektu% [out] of %zakres, zbiór%

Przykłady:       a random player out of all players

Uwagi:  brak

 

"random number" służy do losowania liczb z pewnego zakresu.

Składnia:       [a] random (integer|number) (from|between) %liczba% (to|and) %liczba%

Przykłady:      a random integer between 38 and 79        a random number from 73.48 to 91.2

Uwagi: Jeśli użyjemy, np. "random number from 10 and 5" to też będzie działać normalnie.

           Jeśli jednak spróbujemy "random integer between 10 and 10" to z'crash'ujemy skrypt/plugin/serwer.

 

"chance" służy do losowania szansy.

Składnia:        chance of %liczba od 0 do 1%

Przykłady:       chance of 96/183         chance of 0.41273         chance of 36.7%

Uwagi: Liczba od 0 do 1 == procent (mniejszy lub równy 100%) == (ułamek prawidłowy)

 

Łączenie szans

chance of 25%:        message "Wiadomosc 1"        stopchance of 25%:        message "Wiadomosc 2"        stopchance of 25%:        message "Wiadomosc 3"        stop

Warto zauważyć, że "łączenie" wyrażeń "chance" powoduje ciekawy efekt. Niektóry popełniają błąd, gdy myślą w takim przypadku, że wszystkie wiadomości mają równą szansę na wyświetlenie.

 

W rzeczywistości jest to tak, że wiadomość 1 ma 25%, 2 -- 75%*25%=0,1875 a 3 -- 75%*75%*25%= 0,140625.

 

Po każdym "chance" jest przecież "stop", czyli wyjście z działania. Na początku losuje się szansa na wysłanie 1 wiadomości i stop (25%). Jeśli szansa się nie powiodła, jest wykonywana kolejna instrukcja (75%), czyli "chance" związana z wiadomością 2. Zrozumieliście choć trochę niektórzy (mam nadzieję)?

 

Losowe kody

Skript nie dostarcza wyrażenia, które pozwala losować w zakresie znaków lub liter.

Przydałoby się takie coś np. w Captcha. Jest to jednak do wykonania.

set {characters::1} to "a"set {characters::2} to "b"               # ... (w spoilerze ponizej jest reszta dlaset {characters::3} to "c"               #      cyfr oraz dla malych i duzych liter)# [...]

Na początek definiujemy znaki (czy tam litery) w liście/tablicy.

 

        set {characters::1} to "a"        set {characters::2} to "b"        set {characters::3} to "c"        set {characters::4} to "d"        set {characters::5} to "e"        set {characters::6} to "f"        set {characters::7} to "g"        set {characters::8} to "h"        set {characters::9} to "i"        set {characters::10} to "j"        set {characters::11} to "k"        set {characters::12} to "l"        set {characters::13} to "m"        set {characters::14} to "n"        set {characters::15} to "o"        set {characters::16} to "p"        set {characters::17} to "q"        set {characters::18} to "r"        set {characters::19} to "s"        set {characters::20} to "t"        set {characters::21} to "v"        set {characters::22} to "u"        set {characters::23} to "w"        set {characters::24} to "x"        set {characters::25} to "y"        set {characters::26} to "z"        set {characters::27} to "A"        set {characters::28} to "B"        set {characters::29} to "C"        set {characters::30} to "D"        set {characters::31} to "E"        set {characters::32} to "F"        set {characters::33} to "G"        set {characters::34} to "H"        set {characters::35} to "I"        set {characters::36} to "J"        set {characters::37} to "K"        set {characters::38} to "L"        set {characters::39} to "M"        set {characters::40} to "N"        set {characters::41} to "O"        set {characters::42} to "P"        set {characters::43} to "Q"        set {characters::44} to "R"        set {characters::45} to "S"        set {characters::46} to "T"        set {characters::47} to "V"        set {characters::48} to "U"        set {characters::49} to "W"        set {characters::50} to "X"        set {characters::51} to "Y"        set {characters::52} to "Z"        set {characters::53} to "1"        set {characters::54} to "2"        set {characters::55} to "3"        set {characters::56} to "4"        set {characters::57} to "5"        set {characters::58} to "6"        set {characters::59} to "7"        set {characters::60} to "8"        set {characters::61} to "9"        set {characters::62} to "0" 

set {_dlugosc.ciagu} to 8set {_gotowy.ciag} to ""loop {_dlugosc.ciagu} times:        set {_gotowy.ciag} to "%{_gotowy.ciag}%%{characters.letters::%random integer from 1 to 62%}%"message "%{_gotowy.ciag}%"

Później definiujemy zmienną dla ciągu na "" (nic), a następnie zapętlamy dodawanie do niej losowego znaku z tablicy tyle razy, jak długi ma być ten ciąg. Tak oto możemy otrzymać losowy ciąg znaków.

 

.

... W tym spoilerze zobaczysz przykładowe captcha (test polegający na przepisaniu losowego kodu) ...

Notka: Używa tej listy/tabeli w pierwszym spoilerze.

command /captcha <text> [<player>]:        trigger:                if player-argument is set:                        message "Wyslano test Captcha do %player-argument%."                        set {_r} to ""                        loop argument 1 parsed as integer times:                                set {_r} to "%{_r}%%{characters::%random integer between 1 and 62%}%"                        message "Test Captcha! Wpisz /captcha %{_r}% aby zdac!"                        set {captcha.kod::%player-argument%} to {_r}                        set {captcha.pyt::%player-argument%} to sender                else:                        if {captcha.kod::%player-argument%} is not set:                                message "Nie ma dla Ciebie testu Captcha."                        if argument 1 is {captcha::%player-argument%}:                                message "Test Captcha zaliczony!"                                message "%sender% zaliczyl test Captcha" to {captcha.pyt::%player-argument%}                        else:                                message "Test Captcha nie zaliczony!"                                message "%sender% nie zaliczyl testu Captcha" to {captcha.pyt::%player-argument%}                        delete {captcha.kod::%player-argument%}                        delete {captcha.pyt::%player-argument%} 

Edytowane przez AgainPsychoX
Odnośnik do komentarza
https://skript.pl/temat/1146-randomizacja-jak-losowa%C4%87-losowe-liczby-i-kody-captcha/
Udostępnij na innych stronach

Musiałem sam błędy strony omijać, bo TAGi usuwało :< :(

 

poza tym: Dzięki ;)

 

@down

To jest bardziej styl pisania, a nie funkcjonalność :)

Edytowane przez AgainPsychoX
Odnośnik do komentarza
https://skript.pl/temat/1146-randomizacja-jak-losowa%C4%87-losowe-liczby-i-kody-captcha/#findComment-8916
Udostępnij na innych stronach

  • 1 rok później...
  • Szifter zablokował(a) ten temat
Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...