Skocz do zawartości
  • 0

dlugi skript


Bartek123344

Pytanie

on join:
    if player has permission "vip.wiadomosc":
        if player doesn't have permission "*" or "join.wiadomosc":
            send "VIP +" to all players
    else:
        if player has permission "svip.wiadomosc":
            if player doesn't have permission "*" or "join.wiadomosc":
                send "SVIP +" to all players
        else:
            if player has permission "Uvip.wiadomosc":
                if player doesn't have permission "*" or "join.wiadomosc":
                    send "UVIP +" to all players
            else:
                if player has permission "swag.wiadomosc":
                    if player doesn't have permission "*" or "join.wiadomosc":
                        send "SWAG +" to all players
                else:
                    if player has permission "hero.wiadomosc":
                        if player doesn't have permission "*" or "join.wiadomosc":
                            send "HERO +" to all players
                    else:
                        if player has permission "rekrut.wiadomosc":
                            if player doesn't have permission "*" or "join.wiadomosc":
                                send "SVIP +" to all players
                        else:
                            if player has permission "support.wiadomosc":
                                if player doesn't have permission "*" or "join.wiadomosc":
                                    send "UVIP +" to all players
                            else:
                                if player has permission "helper.wiadomosc":
                                    if player doesn't have permission "*" or "join.wiadomosc":
                                        send "SWAG +" to all players
                                else:
                                    if player has permission "mod.wiadomosc":
                                        if player doesn't have permission "*" or "join.wiadomosc":
                                            send "HERO +" to all players
on quit:
    if player has permission "vip.wiadomosc":
        if player doesn't have permission "*":
            send "VIP -" to all players

Czy to bedzie lagowac serwer? 

Lacznie rang jest 16 wiec on quit bedzie 16 i on join

Odnośnik do komentarza
https://skript.pl/temat/57385-dlugi-skript/
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Dlaczego nie korzystasz z warunku "else if"?

example

on join:
	if player has permission "vip.wiadomosc":
		if player doesn't have permission "*" or "join.wiadomosc":
			send "VIP +" to all players
	else if player has permission "svip.wiadomosc":
		if player doesn't have permission "*" or "join.wiadomosc":
			send "SVIP +" to all players
	else if player has permission "Uvip.wiadomosc":
		if player doesn't have permission "*" or "join.wiadomosc":
			send "UVIP +" to all players

 

Odnośnik do komentarza
https://skript.pl/temat/57385-dlugi-skript/#findComment-341749
Udostępnij na innych stronach

  • 0
9 godzin temu, Bartek123344 napisał:

Czy to bedzie lagowac serwer? 

Lacznie rang jest 16 wiec on quit bedzie 16 i on join

W mojej ocenie Pana kod nie powinien wpłynąć w większym stopniu na wydajność pracy serwera (można utożsamiać z licznikiem TPS (ticks per second)).

Niemniej jednak stwierdzam, że takie podejście jest skrajnie niewydajne, ponieważ przy dodaniu każdej kolejnej rangi, którą gracz może posiadać, wymaga to dodania kolejnego zagnieżdżonego warunku, co jest zabójcze dla czytelności kodu, a więc i jego dalszego rozwoju.

2 godziny temu, makstale napisał:

Dlaczego nie korzystasz z warunku "else if"?

Co prawda Pan wykonał krok w dobrą stronę dodając tę drobną optymalizację do kodu, lecz jest ona zdecydowanie niewystarczająca.

 

Wracając do istoty sprawy -  sugeruję utworzenie dwóch list, w których będzie Pan zapisywał nazwy permisji oraz wiadomości witające/żegnające graczy, a następnie zapętlał je.

Poniżej udostępniam kod, który prezentuje w jaki sposób podjąłbym się napisania takiego skryptu.

function joinLeaveMessage(p: player, join: boolean):
	set {_permissions::*} to "uvip", "svip", "vip"
	set {_messages::*} to "UVIP", "SVIP", "VIP"
	loop {_permissions::*}:
		if {_p} doesn't have permission "%loop-value%.wiadomosc":
			continue
		if {_p} has permission "*" or "join.wiadomosc":
			stop
		if {_join} is true:
			send "%{_messages::%loop-index%}% +" to all players
			stop
		send "%{_messages::%loop-index%}% -" to all players
		stop

on join:
	joinLeaveMessage(player, true)
		
on quit:
	joinLeaveMessage(player, false)

Wart odnotowania jest fakt, iż rangi zapisałem do listy malejąco według ich priorytetu na serwerze. Zabieg ten ma na celu obsłużenie wyjątku, w którym gracz posiada więcej niż jedną permisję - wtedy skrypt wybierze permisję o wyższym priorytecie.

Instrukcje "stop" w funkcji są po to, aby skrypt nie próbował wysyłać więcej wiadomości w przypadku gdy gracz ma co najmniej dwie rangi. Rzecz jasna, samą funkcję napisałem w celu skrócenia kodu.

Na koniec chciałbym zaznaczyć, że nie sprawdziłem poprawności działania skryptu, gdyż to nie jest to dział zleceń. Mój kod ma jedynie na celu pokazanie pewnej idei, podejścia do problemu.

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/57385-dlugi-skript/#findComment-341752
Udostępnij na innych stronach

  • 0

Jeszcze lepszym rozwiązaniem może się okazać po prostu przypisanie rangi do zmiennej lub po prostu odczytanie jej z %group of player% i po prostu wyświetlenie na chacie.

Odnośnik do komentarza
https://skript.pl/temat/57385-dlugi-skript/#findComment-341758
Udostępnij na innych stronach

  • 0
5 godzin temu, CoFFeIN04 napisał:

Jeszcze lepszym rozwiązaniem może się okazać po prostu przypisanie rangi do zmiennej lub po prostu odczytanie jej z %group of player% i po prostu wyświetlenie na chacie.

Nie wiedzialem ze istnieje %group of player% 

dziekuje wszystkich za pomoc juz zrobilem <3 

Odnośnik do komentarza
https://skript.pl/temat/57385-dlugi-skript/#findComment-341769
Udostępnij na innych stronach

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