Skocz do zawartości

Rekomendowane odpowiedzi

Opis

 

Przedstawiam plugin, który udostępnia na serwerze komendę !serwery. Wyświetlana jest wówczas lista serwerów (skonfigurowana w pliku *.cfg), z którymi możemy się połączyć bezpośrednio po wybraniu ich z menu

 

Przykładowy plik konfiguracyjny (edycja w sourcemod/configs/ServerList.cfg):

"Serwery"
{
	"CodMod"
	{
		"Name" "[siec.pl] CodMod"
		"IP" "54.38.58.72:27015"
	}
	"AWP"
	{
		"Name" "[siec.pl] AWP"
		"IP" "145.239.24.170:27190"
	}
}

image.png

 

 

Instalacja

 

Do poprawnego działania pluginu potrzebne jest wgranie dodatkowo:

[Redirect] Core

LobbySessionFixer (musi być wgrane na każdym serwerze, którego dodaliśmy do listy!)

PTaH

 

Spoiler
#include <sourcemod>
#include <multicolors>
#include <redirect_core>

#define TAG "{purple}[Serwery]{default}"

public void OnPluginStart() {
    RegConsoleCmd("sm_serwery", ListaSerwerow);
}

public Action ListaSerwerow(int client, int args) {
    char nameBuffer[256];
    char ipBuffer[64];
    char pathBuffer[1024];
    BuildPath(Path_SM, pathBuffer, sizeof(pathBuffer), "configs/ServerList.cfg");
    KeyValues kv = new KeyValues("List");
    kv.ImportFromFile(pathBuffer);

    if (!kv.GotoFirstSubKey()) {
        CPrintToChat(client, "%s Brak dostępnych serwerów!", TAG);
        return Plugin_Handled;
    }

    Menu menu = new Menu(ListaSerwerow_Handler);
    menu.SetTitle("Wybierz serwer:");

    do {
        kv.GetString("Name", nameBuffer, sizeof(nameBuffer));
        kv.GetString("IP", ipBuffer, sizeof(ipBuffer));
        menu.AddItem(ipBuffer, nameBuffer);
    }
    while (kv.GotoNextKey(false))

    delete kv;
    menu.Display(client, 0);

    return Plugin_Continue;
}

int IPToNum(const char[] sIP) {
	char sResult[4][4];
	return (ExplodeString(sIP, ".", sResult, 4, 4) == 4) ? GetIP32FromIPv4(sResult) : 0;
}

public int ListaSerwerow_Handler(Menu menu, MenuAction action, int client, int item) {
    switch (action) {
    case MenuAction_Select:
        {
            char IP[64];
            GetMenuItem(menu, item, IP, sizeof(IP));
            int port = -1;
            for (int x = strlen(IP) - 1; x >= 0; x--) {
                if (IP[x] == ':') {
                    port = StringToInt(IP[x + 1]);
                    IP[x] = '\0';
                    break;
                }
            }
            RedirectClientOnServer(client, IPToNum(IP), port);
        }
    case MenuAction_End:
        delete menu;
    }
}

 

 

server_redirect.zip

 

Sygnatura użytkownika

Użytkowniku! Pamiętaj, że nic tak nie motywuje jak porządna łapka w górę!

Nie mówię tylko o sobie - honoruj każdego, kto na to zasługuje 🙂

YouTube | SteamGitHub | MailboxGO | AchievementsGO | MuteGO

  • Lubię to!
  • Kocham to
  • Dobry pomysł!
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ahh CS:GO w końcu się udało komuś zrobić redirecta. Ciekawe rozwiązanie

Sygnatura użytkownika

__________________________________________________________________________________________________________________________________________________________________________
【 Deathrun    |    Deathrun Sklep    |    Deathrun VIP    |    Deathrun AutoRespawn    |    Jackpot    |    Losowy VIP    |    Modele  |   NoScope Detector    |    C4 Timer 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

Odnośnik do odpowiedzi
Udostępnij na innych stronach
Teraz, Brum Brum napisał:

Ahh CS:GO w końcu się udało komuś zrobić redirecta. Ciekawe rozwiązanie

 

Ja jedynie użyłem funkcji przekierowania napisanej przez ruskich

 

Posiłkowałem się tym: https://forums.alliedmods.net/showthread.php?p=2686650#post2686650

Sygnatura użytkownika

Użytkowniku! Pamiętaj, że nic tak nie motywuje jak porządna łapka w górę!

Nie mówię tylko o sobie - honoruj każdego, kto na to zasługuje 🙂

YouTube | SteamGitHub | MailboxGO | AchievementsGO | MuteGO

Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 minutę temu, MAGNET napisał:

 

Ja jedynie użyłem funkcji przekierowania napisanej przez ruskich

 

Posiłkowałem się tym: https://forums.alliedmods.net/showthread.php?p=2686650#post2686650

Nie napisałem, że Ty xD Tylko ogólnie, że ktoś wpadł na dobry i ciekawy pomysł

Sygnatura użytkownika

__________________________________________________________________________________________________________________________________________________________________________
【 Deathrun    |    Deathrun Sklep    |    Deathrun VIP    |    Deathrun AutoRespawn    |    Jackpot    |    Losowy VIP    |    Modele  |   NoScope Detector    |    C4 Timer 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • Lubię to!
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • 2 tygodnie później...
  • 2 tygodnie później...

Zdecydowanie taka operacja wymaga obliczeń. Ja jednak nie chciałem niepotrzebne zaśmiecać pamięci (nie ma tego dużo, ale jednak kilka stringów tam siedzi). Dodatkowo nie jest to jakoś bardzo wymagające obliczeniowo i, co najważniejsze, nie jest ono wykonywane zbyt często - bo jak często ktoś patrzy na listę serwerów? Myślę, że 20 razy na mapę to sufit

Sygnatura użytkownika

Użytkowniku! Pamiętaj, że nic tak nie motywuje jak porządna łapka w górę!

Nie mówię tylko o sobie - honoruj każdego, kto na to zasługuje 🙂

YouTube | SteamGitHub | MailboxGO | AchievementsGO | MuteGO

  • Lubię to!
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ostatnio przeglądający ten temat (5 użytkowników)

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...