Skocz do zawartości

AClearChat - Rozbudowane czyszczenie czatu


Rekomendowane odpowiedzi

==========

Wstęp:

Hej, chciałbym wam zaprezentować mój pierwszy publiczny skrypt.
Jest to prosty skrypt na czyszczenie czatu, ale posiada kilka feature'ów, których nie widziałem na tym forum.
Skrypt jest częścią trochę większego projektu, nad którym pracuje w ramach nauki, dlatego do prefiksów używam opcji (żeby było wygodniej).
Jako że dopiero zaczynam przygodę ze skryptami, byłbym wdzięczny za wszelkie rady i uwagi.

==========
Komendy:
/cc/clearchat, /achat:cc  czyści czat
Komend skryptu można używać zarówno przez graczy, jak i konsole.

==========
Permisje:

achat.cc — używanie komendy

achat.cc.bypass — omijanie czyszczenia czatu

==========
Screeny:

Spoiler

rfSLh8d.png

Wiadomość o braku permisji

Spoiler

NmZECMS.png

0yswt7F.png

Wiadomość o wyczyszczeniu czatu

Spoiler

2ZjtnNK.png

Wyczyszczenie czatu bez permisji achat.cc.bypass

Spoiler

zNcGVj8.png

Wyczyszczenie czatu z permisją achat.cc.bypass

==========
Skrypt:

options:
    prefix: &8&l»
command /achat:cc:
    aliases: cc, clearchat
    usage: {@prefix} &7Użyj /cc
    permission: achat.cc
    permission message: {@prefix} &eKomenda nie istnieje lub nie posiadasz do niej uprawnień.
    executable by: player and console
    trigger:
    	loop all players:
    		loop-player does not have permission "achat.cc.bypass"
    		loop 256 times:
    			send " " to loop-player
    	set {_message} to "{@prefix} &eCzat został wyczyszczony przez&b %player%&e."
    	if {_message} contains "<none>":
    		broadcast "{@prefix} &eCzat został wyczyszczony przez&b Console&e."
    	else:
    		broadcast "%{_message}%"

==========

Edytowane przez xAxee
poprawa błędu
xAxee

Poprawiam formatowanie

Notatka dodana przez xAxee

Odnośnik do komentarza
https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/
Udostępnij na innych stronach

  • Aditu zmienił(a) tytuł na AClearChat - Rozbudowane czyszczenie czatu

Co do drugiego fragmentu kodu, nie musisz ustawiać wiadomości i sprawdzać czy zawiera <none>. Po prostu zamiast %player% użyj zmiennej %sender%.

Co do samego skryptu, szczerze to nic wielkiego, powinien się raczej znaleźć w dziale Nauka.

EDIT:

Długość tabulacji w kodzie jest różna od siebie. Powinieneś je poprawić.

 

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264696
Udostępnij na innych stronach

3 minuty temu, Kormic napisał:

Co do drugiego fragmentu, nie musisz ustawiać wiadomości i sprawdzać czy zawiera <none>. Po prostu zamiast %player% użyj zmiennej %sender%.

Co do samego skryptu, szczerze to nic wielkiego, powinien się raczej znaleźć w dziale Nauka.

Dzięki wielkie,  faktycznie %sender% będzie lepsze

Odnośnik do komentarza
https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264697
Udostępnij na innych stronach

Cytat

Jest to prosty skrypt na czyszczenie czatu, ale posiada kilka feature'ów, których nie widziałem na tym forum.

wymienisz te "feature'y"? bo ja niestety żadnych nie widzę.

 

Cytat

dlatego do prefiksów używam opcji (żeby było wygodniej).

innowacja dla ciebie - zwykła sprawa dla obcujących w temacie

 

Cytat

Jako że dopiero zaczynam przygodę ze skryptami, byłbym wdzięczny za wszelkie rady i uwagi.

oczywiście:

 

15 minut temu, Aditu napisał:

 


options:
    prefix: &8&l»
command /achat:cc:
    aliases: cc, clearchat
    usage: {@prefix} &7Użyj /cc
    permission: achat.cc
    permission message: {@prefix} &eKomenda nie istnieje lub nie posiadasz do niej uprawnień.
    executable by: player and console
    trigger:
    	loop all players:
    		loop-player does not have permission "achat.cc.bypass"
    		loop 256 times:
    			send " " to loop-player
    	set {_message} to "{@prefix} &eCzat został wyczyszczony przez&b %player%&e."
    	if {_message} contains "<none>":
    		broadcast "{@prefix} &eCzat został wyczyszczony przez&b Console&e."
    	else:
    		broadcast "%{_message}%"

 

 

  • im więcej działań wykonuje skrypt, tym bardziej obciążamy procesor, tym mniej skrypt jest optymalny, dlatego:
    • zamiast 256 iteracji w pętli zrób ich gdzieś 50-100 - tyle wiadomości wystarczy żeby zakryć chat
    • zamiast wysyłać za każdym razem osobno te 100 wiadomości do każdego gracza - dodaj 100 pustych wiadomości do zmiennej i wyślij ją do wszystkich graczy
      loop 100 times:
      	add "" to {_lista::*}
      send {_lista::*} to all players
      
      #ewentualnie można dodać warunek sprawdzający permisję (https://skriptlang.github.io/Skript/expressions.html#ExprFilter)
      #send {_lista::*} to all players where [input has permission "chat.bypass"]
  • żeby nie bawić się z nullem (<none>) lepiej użyć wyrażenia "SENDER", które nie może być nullem - zwróci albo nick gracz, albo konsolę, którzy użyli komendy - wtedy nie będziesz musiał w kodzie bawić się z takimi warunkami
Odnośnik do komentarza
https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264698
Udostępnij na innych stronach

9 minut temu, PanMaruda napisał:

wymienisz te "feature'y"? bo ja niestety żadnych nie widzę.

 

innowacja dla ciebie - zwykła sprawa dla obcujących w temacie

 

oczywiście:

 

 

  • im więcej działań wykonuje skrypt, tym bardziej obciążamy procesor, tym mniej skrypt jest optymalny, dlatego:
    • zamiast 256 iteracji w pętli zrób ich gdzieś 50-100 - tyle wiadomości wystarczy żeby zakryć chat
    • zamiast wysyłać za każdym razem osobno te 100 wiadomości do każdego gracza - dodaj 100 pustych wiadomości do zmiennej i wyślij ją do wszystkich graczy
      
      
      
      loop 100 times:
      	add "" to {_lista::*}
      send {_lista::*} to all players
      
      #ewentualnie można dodać warunek sprawdzający permisję (https://skriptlang.github.io/Skript/expressions.html#ExprFilter)
      #send {_lista::*} to all players where [input has permission "chat.bypass"]
  • żeby nie bawić się z nullem (<none>) lepiej użyć wyrażenia "SENDER", które nie może być nullem - zwróci albo nick gracz, albo konsolę, którzy użyli komendy - wtedy nie będziesz musiał w kodzie bawić się z takimi warunkami

1. Żaden ze skryptów na czyszczenie czatu, które widziałem na forum nie miał opcji bypass'u, i to jest ten dodatek.

2. Tu bardziej chodzi o to że do tak prostego skryptu nie wydaje mi się aby był sens używać opcji, ale tak wiem że jest to standardem w obszerniejszych skryptach.

3a. W sumie racja, zupełnie starczyło by 100

3b. Jako że jestem nowy w temacie, to chciałbym zapytać w jaki sposób to usprawni działanie?

Dzięki za rady

Edytowane przez Aditu
Odnośnik do komentarza
https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264701
Udostępnij na innych stronach

19 minut temu, Aditu napisał:

3b. Jako że jestem nowy w temacie, to chciałbym zapytać w jaki sposób to usprawni działanie?

  • pierwsza sprawa jest taka, że skrócimy kod i poprawimy go wizualnie, ale patrząc bardziej praktycznie
  • druga - skript jest jaki jest - ma swoje słabe i gorsze strony - trzeba je analizować i skutecznie omijać \ eliminować żeby nie wsadzić sobie na serwer wielkiego, zasobożernego kloca
    • pamiętaj na przyszłość - im więcej mniejszych operacji tym gorzej:
      (załóżmy że mamy 10 graczy na serwerze) twój kod zapętli ich wszystkich i do każdego z nich wyśle 256 wiadomości - daje nam to 2500 pojedynczych operacji, więcej przesłanych pakietów i tak dalej - w skrócie mówiąc chujnia
    • jeżeli stworzymy sobie zmienną z listą 100 pustych wiadomości (czyli tak jak w kodzie podałem) to wykonamy 100 operacji w pętli
      jeżeli wyślemy do gracza tą listę, to zostanie ona (a przynajmniej tak mi się wydaje) wysłana w postaci jednego pakietu - zatem wychodzi nam 10 operacji (pakietów) - w sumie daje nam to 110 operacji

      2500   i   110 - jest różnica
       
    • kolejna sprawa - zauważyłem niejednokrotnie że jeżeli w składni można podać listę zamiast pojedynczej wartości - to lepiej jest ją podać, zamiast ją zapętlać i wykonywać kod dla każdej z jej wartości, czyli np.
      #zamiast
      
      loop all players:
      	loop {_lista::*}:
      		send loop-value to loop-player
      
      #lepiej użyć
      
      send {_lista::*} to all players

      jeżeli zrobimy swoją pętlę to znowu - kod wygląda mniej czytelnie oraz procesor jest bardziej obciążany

Odnośnik do komentarza
https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264704
Udostępnij na innych stronach

  • 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ę...