Skocz do zawartości

luk4sMC

Użytkownik
  • Ilość zawartości

    51
  • Rejestracja

  • Ostatnia wizyta

Treść opublikowana przez luk4sMC

  1. Witam. Zanim napisałem swój pierwszy skrypt w: Skript, wykorzystywałem skrypt bash do sprawdzania logów i słów zakazanych. Żeby nie przedłużać, posłużę się przykładem: if słowo pasujące do wzorca *[Kk]urw*) spam_detected;; *[Zz]aj[eo]b*) spam_detected;; function spam_detected W BASH'u mogłem wykorzystać: wzorce, wyrażenia regularne: *[Kk]urw*) pasuje do grupy słów: kurw, kurwa, skurwiel, skurwiały, skurwiony, skurwysyn itd. *[Zz]aj[eo]b*) pasuje do: zajob jak i zajebie, zajebany, zajebał mi ity itd. Zauważyłem, że do zbudowania szybkiego i mocno skutecznego słownika, należy dodawać do zmiennej słowa zaczynając od najdłuższych do najkrótszych... Zauważyłem też, że nie trzeba dodawać wszystkich słów, a wystarczy np. kurw co w efekcie da mi: ***, ***a, ***y, ***o, słowo skurwysyn zamieni na ***, ***y i ***u. kurw[a,y,o] skurwiał[y,a] kurwysyn skurwysyn[y,u] kurwisz[cze] kurwisz[on[y]] zakurwist[y,a] pokurwion[y,a] spam.yml kurwa skurwiały kurwysyn Nie interesuje mnie zabawa "A zrób tak, żeby był pierwszy i ostatni znak" bo to niepotrzebnie będzie obciążało serwer. Przetwarzanie danych na tak niskim poziomie (liczenie ilości znaków w słowie itd.) nie da żadnego realnego efektu... Wiec zrobiłem tak: on chat: loop {spam::*}: #set {first_sign} to first characters of "%loop-value%" #set {last_sign} to last characters of "%loop-value%" #replace "%loop-value%" with "%{first_sign}%***%{last_sign} %" in message replace "%loop-value%" with "***" in message Co w efekcie przy prostym słowniku i tak maskuje 80,90% śmieci. Przy budowaniu słownika z czasem będą go musiał poprawiać. Dlatego najlepiej robić to edytując plik słownika. Potrzebuje listę ze zmiennej {spam::*} zapisać do pliku jak w przykładzie wyżej i odczytać z tego pliku. Przerobiłem wszystkie tematy zaczynając od niewspieranych dodatków po aktualne skUtilities.v0.9.2.jar, ale nie widzę tego co mi potrzeba...
  2. Nie chodzi mi o zapętlenie kodu a przykładowo o to, że przy dużym obciążeniu serwera, skrypty takie jak "masz wiadomość" nie będą wyświetlały 15 graczom co 60 sek, że jakąś wiadomość mają, a będzie to co 1 godzinę. Wiadomość wyświetla się (spami czat) co 60 sek. celowo, żeby gracz tą wiadomość odebrał i usunął, a nie zawracał gitarę administracji. Wiadomość co 10 min., że do twojego portfela wpadły 3$ też celowo, żeby zachęcić gracza do pozostania na serwerze i zarabiania na jakąś rangę, permisje. To od pierwszego twórcy Skrip jeżeli dobrze rozumiem. Tak, to dla mnie nie problem Napisanie pętli nieskończonej dla serwera VPS, która dla każdego skryptu, który zaczynałby się od niskiego priorytetu czyli np. 03-wiadomosc.sk... CPU=50 CPU=100 while true do if [ CPU > 50 ]; then for file in 03-*.sk #kazdy skrypt z priorytetem low ma na początku pliku wartość 03- do #zmien nazwe z 03-masz_wiadomosc.sk na -03-masz_wiadomosc.sk mv "&file" "-$file" done fi sleep 5 done Tylko, że to twórcy a nie Ciebie należałoby zapytać. Nie uważasz? A że wielu osób tutaj dzieli się swoimi skryptami i pyta co zmienić, poprawić, to stwierdzam, że nie obraziłby się gdyby ktoś podrzucił mu gotowy kod i zapytał czy ma to sens!!!
  3. Witam. Zauważyłem, że z jakiegoś powodu moje skrypt zaczęły zachowywać się nielogicznie. Przykładowo: wiadomość o pobraniu z portfela pieniędzy wyświetla się, pieniądze ubywają więc arytmetyka działa i ma się dobrze, ale give, pomimo, że jest wyżej w kodzie, nic nie daje!! Inny przypadek: po wejściu na region pvp -itemy gracza nie są zapisywane/przechowywane. Dopiero po przeładowaniu zaczyna działać. I teraz zaczynam się zastanawiać czy to wina zmian wprowadzanych w WG przez dodanie flag, czy moc obliczeniowa nie wyrabia lub wielokrotne zmiany w kodzie zrobiły w Skript bałagan. Więc pierwsze co mi wpadło do głowy, to: priorytety w skryptach. jeżeli skript tego nie obsługuje, to email do twórcy. stworzenie demona, który na podstawie: wysokiego użycie procesora, ilości ramu lub ilość graczy wyłączałby skrypty o niższym priorytecie (priorytety w nazwach np. 1-portfel.sk, 3-masz_wiadomosc) lub opóźniał wykonywanie pętli w tych skryptach dla graczy język bash, python lub inne dla serwera VPS, plugin w java czy sam skript chociaż jego wydajność zapewne jest wątpliwa, więc... Próbował dziś podstawić wartości zmiennych do wszystkich pętli i wait, ale widzę, że się nie da. Najprostsze rozwiązanie tj. dożo graczy, więc wait {time}, every {time} itd... Połowiczne rozwiązanie mam tu czyli dużo graczy: skrypt można by wyłączyć lub włączyć jego kopie, która działa kilka razy dziennie. While Loops While loops look much closer to that diagram I posted above. While other kinds of loops go through a specified amount of objects before running out, a while loop could potentially run on forever. Just like other loops, the will keep iterating until the condition is false. while {var} is true: strike lightning at player chance of 10%: set {var} to false In this case the loop will keep running and striking the player with lightning with only a 10% chance of stopping each time. Any condition you can use with an if statement, you can use for a while loop. Hopefully this clears up some of the confusion around loops in Skript. You can post in the help forum, or send me a PM if you have any questions, or need some more explanation about loops. -Demon Pytanie czy ma to sens, czy ktoś się spotkał z tym co opisuje i optymalizował swoje skrypty w jakikolwiek sposób...
  4. Właśnie zacząłem się bawić ekonomia do takiego stopnia, że u mnie nawet, żeby walczyć na arenie pvp trzeba mieć pieniądze [przegrany traci, wygrany bierze wszystko], ale nieważne... Zaznaczę, że nie testowałem a tylko logicznie myślę! Dlaczego ta wersja wyżej miałaby być głupia? loop all player to jak pętla for z listą np. for x in player-1 player-2 player-3. Jeżeli gracze są offline, to pętla nie wykonuje żadnej instrukcji. on join while player is online czyli wykonaj instrukcje tylko dla graczy online, czyli to co wyżej. Przecież to jest to samo!!! SPRAWDŹCIE SAMI!!! every 1 seconds: loop all players: send "every: %loop-player%" to loop-player on join: while player is online: send "while: %player%" to player wait 1 second Dostaje drugi raz emote "ale o co chodzi" i sam nie wiem o co chodzi lub czego ktoś nie rozumie xD
  5. Ja uznaje zasadę, że zamiast blokować coś pluginami, skryptami, lepiej stworzyć na serwerze takie smaczki jak np. kary za "znęcanie się nad zwierzętami" U mnie nie ma bana, a jest więzienie, tepanie losowo po mapie co np. 10 sek. Dziś dodałem kary za znęcanie się nad moim kotem Zenkiem, który kręci się koło baru czy psem Reksiem, który pilnuje sklepu xD To w sumie też część zabawy i zwiększa interakcje z graczem. Niech się zastanowi zanim znowu zrobi coś głupiego!!! on damage: if attacker is player: if victim is wolf or cat: if victim's name is "Reksio" or "Zenek": cancel event set {angry.%attacker%} to {angry.%attacker%} + 1 if {angry.%attacker%} is 1: send "Nie wolno znęcać się nad zwierzakami!" to attacker if {angry.%attacker%} is 2: send "Ostanie ostrzeżenie!!!" to attacker if {angry.%attacker%} is 3: send "Dostajesz kare więzenie 60 sekund!!!" to attacker #execute command "/wiezienie %attacker%" #polecenie z autorskiego skryptu delete {angry.%attacker%}
  6. Pętla while jest wykonywana w nieskończoność dopóki warunek jest prawdziwy (zwróci true). on script load: while 1 is 1: broadcast "Nie zapomnij dodać ""wait 10 minutes"" :)" wait 10 minutes To przykład z wiki tego forum. Wiem czym jest pętla while i jak działa bo znam też inne języki programowania i wiem, że pętla będzie wykonywać instrukcje tak długo jak warunek jest spełniony, prawdziwy czyli ma wartość true lub 0 #zalezy od języka every 5 seconds: loop all players: send "%loop-player% sprawdzam Twoją skrzynkę" to loop-player if {list.%loop-player%::*} is set: send "Masz Wiadomość: %{list.%loop-player%::*}%" to loop-player else: send "Brak wiadomości w Twojej skrzynce" to loop-player Z poradnika młodego pirata ->
  7. Mam mały problem, a szkoda mi czasu na skubanie samemu xD Działa i jest ok on join: if {list.%player%::*} is set: send "&bMasz Wiadomość &6(&f%{nr_msg.%player%}%&6)" send "&c- &f%{list.%player%::1}%" #Informuje tylko, że są wiadomości i wyświetla pierwszą, ewentualnie zrobię losową... Potrzebuje co 60 sek sprawdzić: czy wszyscy gracze mają jakąś wiadomość. jeżeli tak, to wyświetli się komunikat ile i podpowiedz jakim poleceniem odczytać. Wykorzystałem do tego pętle while, skrypt działa, ale wywala mi błędy na serwerze i mnie pisząc, że jestem już zalogowany. Dlatego próbowałem tak: every 60 seconds in "world": loop all players: broadcast "czego ja nie rozumiem" # if {list.%player%::*}: is set: # send "&bMasz Wiadomość &6(&f%{nr_msg.%player%}%&6)" # send "&o&7/&creadmsg &o&7odczytuje wiadomości" Jakaś rada???
  8. Napisałem kilka programów z takim samym efektem i w ostateczności sięgnąłem po to https://wiki.skript.pl/Odstępy_czasowe rozwiązanie... Jak mogę podstawić zamiast stałych wartości [80], wartości ze zmiennych lub argumentów. Cos mi nie idzie ;/
  9. Witam. Ponieważ nie mogę wykorzystać: cooldown i cooldown message, napisałem własny licznik. Działa, ale niestety gdy szybko klikam w tabliczkę to pętla też przyspiesza. Jest na to inny sposób? Domyślam się, że każde kliknięcie w tabliczkę uruchamia pętlę, które nie wykonuje kodu co 1 sek a co 1 sek i każde kliknięcie.
  10. Prezentacja Zostaw Wiadomość *.SK Auto Wiadomość *.SK Możliwości: wysyłanie wiadomości do gracza: offline i online wyświetlanie wiadomości przy logowaniu wyświetlanie wiadomości ręcznie usuwanie wszystkich odebranych wiadomości usuwanie wybranych odebranych wiadomości usuwanie wybranych wysłanych wiadomości podpowiedzi "jak używać" wyświetlane są randomo'wo. Zostawiam, ponieważ kilka osób miało czas i chęć pomóc. No i może komuś się przyda, spodoba PS Jakieś pozostałości po zmianach w kodzie są...wiem o tym.
  11. Super skrypt (sic!)..super bo dzięki @Kormic mam kolejny materiał do poczytania. Tyle razy tam byłem i nie zauważyłem, że to jest tak rozwinięte
  12. Zauważyłem to. Korzystając ze zmiennej <player> gracz obecny na serwerze tab'ował się i zliczanie wiadomości działało prawidłowo. Natomiast gdy nie był obecny na serwerze, wysyłanie wiadomości działało prawidłowo, ale zliczanie ich już nie łącznie z nazwą gracza, która nie był podstawiana a send wyświetlał none. Zamiana na <offlineplayer> rozwiązała problem... Na przyszłość polecam podstawianie zmiennych na różne sposoby i wyświetlanie ich na czacie...Brak wyniku będzie jakimś wyznacznikiem gdzie szukać przyczyny problemu
  13. >> Skrypt i to jak działa << Skrypt Zostaw Wiadomowsc *.SK command /sendmsg [<player>] [<text>]: trigger: if arg-2 is set: add 1 to {login.%player%} send "" #dodaj do: list.<player>, treść wiadomosci: <text> add "%player%: %arg-2%" to {list.%arg-1%::*} send "&bWiadomość &6(&f%{login.%player%}%&6) do &6%arg-1%:" send " &c- &f%arg-2%" send "" command /readmsg: trigger: send "" send "&bWiadomości: &6(&f%{login.%player%}%&6):" loop {list.%player%::*}: send " &c- &f%loop-value%" send "" command /deletemsg: trigger: delete {list.%player%::*} delete {login.%player%} send "&bUsunięto wszystkie wiadomości: &6%player%" Skrypt Auto Wiadomość *.SK on join: if {login.%player%} is not set: set {login.%player%} to 0 send "" send "&bMasz Wiadomość &6(&f%{login.%player%}%&6)" loop {list.%player%::*}: if player's name's length <= 10: send "&c- &f%loop-value%" send "" Do zrobienia: ustawienie stałej długości nazw graczy dla formatowania tekstu #nie wiem jak to się nazywa.. w printf '%-10s %s\n' 'Gracz' 'Wiadomosc' jezeli wiadomosci jest duzo, przy kazdym logowaniu usuwa najstarsza z listy inne, zalecane, proponowane PS To pierwszy skrypt. który podoba się moim dzieciakom xD Ręcznie jak wpiszesz gracza, którego nie ma na serwerze, to też działa... command /sendmsg [<player>] [<text>]: #<-- pierwszy argument to Gracz, który jeżeli nie ma go na serwerze, to nie wyświetli się pod Tab i wpisuje go z pamięci trigger: if arg-2 is set: #<-- Nie ma potrzeby sprawdzania wszystkich argumentów, ponieważ jezeli arg-50 istnieje to istnieje też arg-22 Logiczne add 1 to {login.%arg-1%} #<--tutaj arytmetyka ma się dobrze i zlicza każdą jedną dodaną wiadomość send "" #dodaj do: list.<player>, treść wiadomosci: <text> add "&6%player%: &f%arg-2%" to {list.%arg-1%::*} #<-- ale tutaj już nie wystwietla, dostaje none. Jak moze zwracac none jeżeli arg-1 istnieje, jest z palca wpisany i to czy gracz jest na serweie, czy nie -nie ma znaczenia bo arg-1 istnieje w formie łańcucha znaków!! send "&bWiadomość &6(&f%{login.%arg-1%}%&6) do &6%arg-1%:" CoFFeIN04 zwracam honor!!! <offlineplayer> rozwiązał problem!!! Mogłem wykorzystać dla pierwszego argumentu <text>, ale zależało mi na Tab'owaniu graczy. Dziwna za zmienna player. Muszę się jej przyjrzeć dokłądniej...
  14. Od wczoraj to robię, tylke, że add arg-1 and arg-2 to, arg-1, arg-2 to Działa... Jeszcze tylko ograniczę nazwę gracza i będzie ok
  15. Działa, działa... tekst wiadomości zostaje dodany do listy gracza wskazanego... command /sendmsg [<player>] [<text>]: add arg-2 to {list.%arg-1%::*} czyli powiedzmy: <dodaj text wiadomości> do <list.nazwa_gracza>
  16. command /sendmsg [<player>] [<text>]: trigger: if arg-2 is set: #dodaj do: list.<player>, treść wiadomosci: <text> add arg-2 to {list.%arg-1%::*} send "&bWysłano wiadomośc do: &6%arg-1%" /sendmsg <gracz> <wiadomość> Gracza po zalogowaniu dostaje listę wiadomości... on join: send "" send "&bMasz Wiadomość:" loop {list.%player%::*}: send "&c- &f%loop-value%" send ""
  17. Witam. Napisałem skrypt, który pozwala na pozostawianie wiadomości wskazanemu graczowi. Po zalogowaniu każdy gracz dostaje listę wiadomości. Napotykam na kilka problemów z: podstawieniem nazwy gracza do wiadomości. wstawieniem całej wiadomości tj. <player> <text>, <name of player> <textr Metoda podana na forum z 2015 nie działa..niestety. command /sendmsg [<player>] [<text>]: trigger: if arg-2 is set: #dodaj do: list.<player>, treść wiadomosci: <text> set {player} to arg-2 add arg-2 to {list.%arg-1%::*} send "&bWysłano wiadomośc do: &6%arg-1%" Nie wiem czy z tego będą korzystał, ponieważ różne długości nazw graczy zrobią mi śmietnik na czacie. Chyba, że da się ograniczyć wyświetlenie nazwy gracza do np. max 15 znaków długości???
  18. Temat stary, ale, że posiadam skrypt do instalacji serwer, to zapytam czy ktoś byłby chętny przetestować, zaproponować zmiany itd? Jest to odpowiedz w temacie Serwer Minecraft na VPS - Poradnik dla zielnonych W skrócie: wystarczy stworzyć katalog dla serwera Minecraft przekopiować skrypt, nadać uprawnienia i uruchomić Co robi skrypt: sprawdza czy java istnieje. Jeżeli nie, to ją pobiera i instaluje #kwestie wydajności i czy jest sens usilnie instalować konkretną jave, której w repozytorium systemu nie ma pozostawiam do dyskusji oczekuje akceptacji warunków licencji "(...)wyrażasz zgodę na warunki korzystania z Minecraft..." pobiera silnik lub listę silników z pliku URL_Minecraft plik jest zagnieżdżony w skrypcie i tak jak pluginy MC wypluwają strukturę plików, katalogów, tak skrypt wypluwa dwa pliki w tym eula.txt. stworzy skrypt startowy z opcjami i parametrami dla naszego serwera Pliki do pobrania: Samouczek Ubuntu #na licencji "rób z tym chcesz Skrypt: mcs_install.sh #na licencji "rób z tym chcesz
  19. A kto to przyszedł? PanMaruda... Bardzo jestem wdzięczny za cenne informacje! Zaczynając przygodę z programowaniem od skryptów bash, który to słynie z jednego wielkiego chaosu i zlepku wszystkiego co dobre w programowaniu, zawsze dążyłem do uporządkowania tegoż właśnie chaosu. Kod musi być zrozumiały, uporządkowany i basta... Negacja, zaprzeczenie operatora Wydaje mi się, że jednak arg-1 jest czytelniejszy od arg 1 czy arg Nauczony jestem w innym języku, że argument to parametr a te często podstawiam do zmiennej, która może być np. ścieżka, więc cudzysłów jest wręcz wymagany... Wprowadziłem małe poprawki, żeby arg, arg 1 jak i arg-1 kolorował jednakowo i już jest lepiej
  20. Jest takie fajnie powiedzenie, że jeżeli coś jest głupie, a działa, to nie jest to głupie Dobrym przykładem jest twórca MC, który wykorzystał do tego java tylko dlatego, że najlepiej znał to środowisko i czuł się w nim najpewniej. Poprawcie mnie jeżeli palnąłem coś głupiego, ale gdzieś o tym czytałem. Ja sam pisałem dużo skryptów w BASHu, ale to tylko dlatego, że trafiłem na naprawdę dobrą książkę, dlatego że skrypty można łatwo integrować z GUI no i najważniejsze tj. "od terminala linuksowego do programowania jest krótka droga". Dlatego tu jestem bo "od czatu w MC do programowania jest krótka droga" o czym dzieciaki zapewne jeszcze nie wiedzą. I dodam na koniec jeszcze, że tak, skrypty nie są tak wydajne jak programy napisane w innych językach...nawet te napisane wręcz wzorowo, ale są i dobrze... Sprawdzę Obecnie używam Notepad++
  21. Nie ma co się denerwować bo to do niczego dobrego nie prowadzi. W życiu trzeba doświadczać, ponieważ tylko wtedy zmienia się postrzeganie czegoś. Dziś myślisz, że Twój projekt jest dobry, a po wielu latach zdajesz sobie sprawę, że można było to zrobić lepiej i inaczej...
  22. Szczerze, to komentarze zawsze mnie irytowały -zaśmiecały kod. To jest to złe podejście o którym pisałem wyżej. Zawsze używałem prostego edytora: Gedit, Kate z podstawowym kolorowaniem składni. Dopiero Skript nauczył mnie jak duże ma to znaczenie dla np. odbioru, pracy z projektem. PS. Dodam, że dawanie komuś /gamemode jest bardzo ważne, ponieważ wile dzieciaków w wieku 9 lat nie potrafią się nawet zalogować do serwera. Długo by pisać, a tego nie chce (nie chcę zaśmiecać forum)
  23. Zanim odpowiem, to muszę dodać, że pracuje, gram i zarządzam serwerem na Linuksie. Moje pierwsze kroki w Skript to był brak podstawowego narzędzia jakim jest "zdefiniowanie języka" , kolorowanie składni itd. Obecnie korzystam Notepad++ Kończąc dodam, że na początki nie dawałem rady z prostymi skryptami przez to złe podejście. Potem poszedłem drogą "poszukiwanie rozwiązań nurtujących problemów" szukając wszystkiego co działa w google command /gms [<player>]: #<- jezeli nie ma argumentu, gamemode wykonuje się dla tego, który go użyl trigger: if "%player's world%" is not "swiat_survival": #<- jezeli swiat != survival, pelny dostep do gm, glowny swiat to creative #Przetrwanie - Survival if arg 1 is not set: #<- brak argumentu to inaczej /gms czyli: gamemode wykonuje się dla tego, który go użyl set player's gamemode to survival send "&cGracz: &6%player% aktywował tryb: &bPrzetrwanie" to player else: #<- jezeli jest argument, to albo gamemode wykonuje się dla tego, który go użyl, albo dla drugiego, eskazanego gracza set gamemode of {player} to survival send "&cGracz: &6%player%! Zmieniono Twój tryb na: &bPrzetrwanie" #Ten tryb jest domyśłnym trybem świata_survival, więc użycie /gms nic nie zmieni / else nie jest potrzebne... czyli to będzie arg-1 Spotkałem się z tym o czym piszesz błąkając się po google. Niestety "każdy sobie" i potem skutkiem tego jest "czemu nie działa?" Sprawdzę zmiany i napisze... Mam 37 lat, czuje się na 25... luz xD
  24. command /gms [<player>]: trigger: if "%player's world%" is not "swiat_survival": #Przetrwanie - Survival if arg 1 is not set: set player's gamemode to survival send "&cGracz: &6%player% aktywował tryb: &bPrzetrwanie" to player else: set gamemode of {player} to survival send "&cGracz: &6%player%! Zmieniono Twój tryb na: &bPrzetrwanie" #Ten tryb jest domyśłnym trybem świata_survival, więc użycie /gms nic nie zmieni / else nie jest potrzebne... Ja kudłaty, durnowaty, nie wiedziałem... że deletem usuwa się kod
  25. Przyznam, że nie potrafię tego poprawnie podstawić...dostaje różne komunikaty Nauczony jestem w BASH'u podstawiać cokolwiek przez np. mechanizm podstawiania poleceń. #Mechanizmy podstawiania $() lub `` #Przypisanie listy plików 8.dat zmiennej x x=$(ls *.dat) #Usunięcie plików z rozszerzeniem *.dat rm $(ls *.dat) rm $x
×
×
  • Dodaj nową pozycję...