Aditu 0 Opublikowano 22 października 2020 Udostępnij Opublikowano 22 października 2020 (edytowane) ========== 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 Wiadomość o braku permisji Spoiler Wiadomość o wyczyszczeniu czatu Spoiler Wyczyszczenie czatu bez permisji achat.cc.bypass Spoiler 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 25 października 2020 przez xAxee poprawa błędu Poprawiam formatowanie Notatka dodana przez xAxee Odnośnik do komentarza https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/ Udostępnij na innych stronach Więcej opcji udostępniania...
Kormic 1951 Opublikowano 22 października 2020 Udostępnij Opublikowano 22 października 2020 (edytowane) 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 22 października 2020 przez Kormic Aditu 1 Odnośnik do komentarza https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264696 Udostępnij na innych stronach Więcej opcji udostępniania...
Aditu 0 Opublikowano 22 października 2020 Autor Udostępnij Opublikowano 22 października 2020 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 Więcej opcji udostępniania...
PanMaruda 624 Opublikowano 22 października 2020 Udostępnij Opublikowano 22 października 2020 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 Więcej opcji udostępniania...
Aditu 0 Opublikowano 22 października 2020 Autor Udostępnij Opublikowano 22 października 2020 (edytowane) 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 22 października 2020 przez Aditu Odnośnik do komentarza https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264701 Udostępnij na innych stronach Więcej opcji udostępniania...
PanMaruda 624 Opublikowano 22 października 2020 Udostępnij Opublikowano 22 października 2020 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 Aditu 1 Odnośnik do komentarza https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-264704 Udostępnij na innych stronach Więcej opcji udostępniania...
xAxee 1968 Opublikowano 25 października 2020 Udostępnij Opublikowano 25 października 2020 Ten temat został przeniesiony. Odnośnik do komentarza https://skript.pl/temat/42216-aclearchat-rozbudowane-czyszczenie-czatu/#findComment-265029 Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi