Skocz do zawartości
  • 0

problem z wyrzucaniem gracza podczas połączenia innego o tym samym nicku


Sołtys™

Pytanie

Witam serdecznie

Załóżmy sytuację hipotetyczną. Gracz o nicku XXX korzystający z launchera non-premium aka pirata gra sobie spokojnie na serwerze. Inny gracz również przy pomocy takiego launchera próbuje sie zalogować wpisując ten sam nick "XXX", a spigot w swojej naturze ma tak ze wyrzuca tego co był dotychczas, a nie tego co dołączył wyrzucając mu komunikat "you are logged in from another location". 

Zaznaczmy tu że na serwerze nie ma żadnego z popularnych pluginów do logowania typu AuthMe / xAuth / Authblablabla

Tu pojawia się pytanie do magicznych wszechwiedzących elfów z tego forum. Czy da się odwrócić tą sytuację, tak by zamiast wyrzucać gracza który był dotychczas, uniemożliwiało połączenie temu który próbuje sie połączyć? Coś na zasadzie "Gracz o tym nicku jest już na serwerze!"

Próbowałem już wielu kombinacji typu/

on connect:
    loop all players:
        "%name of player%" is "%name of loop-player%":
            kick player by reason of "&cGracz o tym nicku jest już na serwerze!"

jednakże nie przynoszą one oczekiwanego rezultatu. Jakieś pomysły?

PS. Tak wiem ze wgranie gotowego pluginu na logowanie (AuthMe) załatwia ten problem, ale nie satysfakcjonuje mnie takie rozwiązanie. 

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

9 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
3 minuty temu, kapi. napisał:

on join:
	loop all players:
		if player is "%loop-player%":
			kick player due to "&cTen gracz jest juz na serwerze."
			exit loop
			stop
		stop
	stop

 

to głupie... Poza tym przy takim ustawieniu to najpierw loga tego co był,  a potem tego co wszedł (czyli obydwaj zostają wyrzuceni)... poza tym jak dodasz taki kod nie da się w ogóle zalogować bo zaraz po połączeniu gracz zostaje wyrzucony bo przecież on sam też jest loop-player, gdy loopujesz wszystkich. GŁUPIE I BARDZO SZKODLIWE! 
(przemilczę to ze  z jakiegoś powodu 3x zakończyłeś wątek..)
 

Kombinuje jeszcze z on kick i wychwytywać to wstecz, z tym ze jak w takim przypadku odnieść się do reasone?

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
on join:
	set {_playerip} to player's ip
	loop all players:
		if player is "%loop-player%":
			set {_loop player ip} to loop-player's ip
			if {_playerip} isn't "%{_loop player ip}%":
				kick player due to "&cTen gracz jest juz na serwerze."
				exit loop
				stop
			stop
		stop
	stop

tak możesz sobie dopisać i po prostu dwóch wyrzuci no niestety nic nie zrobisz chyba

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

PRZY EVENTCIE ON JOIN DZIAŁASZ W MOMENCIE GDY TAMTEGO GRACZA JUŻ NIE MA NA SERWERZE. Tak więc to co napisałeś teraz jest jeszcze większa bzdurą.
Ale nawet jeśli by to tak działało jak ci się wydaje to pomyśl chwilę... Co takie rozwiązanie da twoim zdaniem? 

Jeśli nie wiesz jak coś zrobić to nie pisz " nic nie zrobisz chyba" bo to tylko sztuczne nabijanie sobie odpowiedzi.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Gościu opanuj emocję trochę, bo mam nieco większy staż od Ciebie i potrafię już ocenić czy w danej sytuacji jest jakieś wyjście.
Uszanuj to, że ktoś ma zamiar Tobie pomóc.

Zapłać komuś niech Tobie napisze fix addon i będziesz mieć, bo Skript nie da Ci takiej możliwości jako iż wyłapuje tylko jednego gracza.
Gdyby w evencie on join można było dać cancel event miałbyś rozwiązanie, ale takiego czegoś jeszcze nie ma.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Emocje emocjami ale piszesz BARDZO NIEBEZPIECZNY kod kolego. :P Postujesz go bez sprawdzenia jak działa i czy w ogóle działa (a działa tak że blokuje jakiekolwiek połączenie z serwerem). A co do stażu to szczerze wątpię. (popatrz sobie na datę dołączenia do forum młodzieńcze). Fakt że mało się udzielam na forum wynika z tego że rzadko kiedy potrzebuję jakiejkolwiek pomocy. 

Dobra inne pytanie. 
Da się jakoś sprawdzić Reason w momencie gdy kogoś kicka? (bo event On kick: już da się wstrzymać.)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

No nie moge z Ciebie. O TO PYTAM PRZECIEŻ. Jak zapisać do zmiennej reason z kicka wywoływanego przez serwer... skUnity milczy na temat on Kick.

A odnośnie twoich uwag co do kupowania addonów.
Gdybym chciał to zrobić pluginem to jest 10 linijek roboty.  

@Override
public void onPlayerKick(PlayerKickEvent event) {
        if (event.getReason() == "Logged in from another location.") {
            event.setCancelled(true);
        }
    }

    @Override
    public void onPlayerLogin(PlayerLoginEvent event) {
        for (Player p : plugin.getServer().getOnlinePlayers()) {
            if (p != event.getPlayer() && p.getName().equalsIgnoreCase(event.getPlayer().getName())) {
                event.setResult(Result.KICK_OTHER);
                event.setKickMessage("Gracz o tym nicku jest już na serwerze!");
                break;
            }
        }
    }

 EDIT:

Chce się tylko dowiedzieć czy da się to zrobić skryptem.

Edytowane przez Sołtys™
Odnośnik do komentarza
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ę...