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