m0re Napisano 11 Marca 2019 Witam! Poszukuję Pluginu, który będzie wyrzucał nowych graczy (którzy wbijają na serwer) z serwera przy określonej liczbie osób z danym powodem. Nie chodzi mi o Plugin na rezerwację slota. Cytuj Przez MAGNET, 11 Marca 2019 Nazwa "Szukam pluginu" nie sugeruje zbyt wiele. Pamiętaj, aby choć w minimalnym stopniu wyróżniała się i mówiła czego potrzebujesz. Poprawiłem temat Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
zorix 1 1 Napisano 11 Marca 2019 Cześć. Chodzi ci o coś jak ten plugin? : https://forums.alliedmods.net/showthread.php?p=2302217Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
m0re Napisano 11 Marca 2019 1 minutę temu, zorix napisał: Cześć. Chodzi ci o coś jak ten plugin? : https://forums.alliedmods.net/showthread.php?p=2302217Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Coś podobnego do tego Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
zorix Napisano 11 Marca 2019 Podobnego czyli miało by tak działać jak ten + wyświetlać komunikat jakiś ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
m0re Napisano 11 Marca 2019 1 minutę temu, zorix napisał: Podobnego czyli miało by tak działać jak ten + wyświetlać komunikat jakiś ? Dokładnie tak. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
zorix Napisano 11 Marca 2019 @Mesharsky Dałbyś radę przerobić ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Mesharsky 2 Napisano 11 Marca 2019 Przecież ten plugin ma komunikat. Spoiler public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); KickClient(client, "Serwer jest pełny"); return Plugin_Handled; } Chyba że chodzi ci o coś takiego: Spoiler public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); PrintToChatAll("Gracz %N został wyrzucony z serwera, serwer jest pełny!", client); KickClient(client, "Serwer jest pełny"); return Plugin_Handled; } To masz cały kod: Spoiler #pragma semicolon 1 #include <sourcemod> #include <adt_array> Handle sm_admin_slots; Handle Arr_SteamIDs = INVALID_HANDLE; Handle fSteamIDList = INVALID_HANDLE; char steamIDlist[PLATFORM_MAX_PATH]; public Plugin myinfo = { name = "Client limiter", author = "Wilk", description = "Don't allow clients to connect if the server is full (supporting reserved slots)", version = "0.6.1", url = "http://hejk.pl" }; public OnPluginStart() { sm_admin_slots = CreateConVar("sm_admin_slots", "0", "number of reserved slots", FCVAR_NOTIFY, true, 0.0); BuildPath(Path_SM, steamIDlist, sizeof(steamIDlist), "configs/admin_slots.txt"); LoadSteamIDList(); } public OnClientPostAdminCheck(client) { //Temporary flags for non-admin users found in the admin_slots.txt file char auth[32]; GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); if (FindStringInArray(Arr_SteamIDs, auth) != -1) { SetUserFlagBits(client, ADMFLAG_RESERVATION); } //Reserved slots mechanism int limit = GetMaxHumanPlayers(); if (GetClientCount(false) > (limit - GetConVarInt(sm_admin_slots))) { if (hasReservedSlotAccess(GetUserFlagBits(client))) { char playername[50]; GetClientName(client, playername, 49); LogMessage("player %s connected to a reserved slot", playername); if (GetClientCount(false) > limit) { CreateTimer(0.1, OnTimedKickForReject, GetClientUserId(client)); } } else { CreateTimer(0.1, OnTimedKickForReject, GetClientUserId(client)); } } } public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); PrintToChatAll("Gracz %N został wyrzucony z serwera, serwer jest pełny!", client); KickClient(client, "Serwer jest pełny"); return Plugin_Handled; } // return true if this user is allowed to connect to a reserved slot bool hasReservedSlotAccess(const userFlags) { // admin flag based if (userFlags & ADMFLAG_ROOT || userFlags & ADMFLAG_RESERVATION) { return true; } else { return false; } } LoadSteamIDList() { if (FileExists(steamIDlist, false)) { fSteamIDList = OpenFile(steamIDlist, "rt"); } else { fSteamIDList = OpenFile(steamIDlist, "at+"); LogMessage("Created a config file at the file path: %s", steamIDlist); } if (fSteamIDList == INVALID_HANDLE) LogMessage("Error - unable to load or create file: %s", steamIDlist); Arr_SteamIDs = CreateArray(256); char sReadBuffer[256]; int len; while (!IsEndOfFile(fSteamIDList) && ReadFileLine(fSteamIDList, sReadBuffer, sizeof(sReadBuffer))) { if(sReadBuffer[0] == '/' || IsCharSpace(sReadBuffer[0])) continue; ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\n", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\r", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\t", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), " ", ""); // Support for comments on end of line len = strlen(sReadBuffer); for(new i; i < len; i++) { if(sReadBuffer[i] == ' ' || sReadBuffer[i] == '/') { sReadBuffer[i] = '\0'; break; } } //LogMessage("Pushing %s to Arr_SteamIDs", sReadBuffer); PushArrayString(Arr_SteamIDs, sReadBuffer); } //LogMessage("Reached EOF on %s", steamIDlist); CloseHandle(fSteamIDList); } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
m0re Napisano 11 Marca 2019 @Mesharsky W którym miejscu edytować od jakiej ilości graczy wyrzuca z serwera. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Mesharsky Napisano 11 Marca 2019 Tutaj nie ma na coś takiego ConVara bądź takiej opcji bo plugin pobiera wszystkie sloty serwera dostępne i jeżeli są pełne to nie pozwala graczowi wbić ewentualnie możesz zamiast GetMaxHumanPlayers zmienić na ilość slotów twojego serwera, bądź mniejszą liczbę i ogarnąć coś, nigdy nie pisałem takiego pluginu więc nie wiem, ale jest on prosty do edycji ?. Tak off topic: plugin nawet spoko ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
zorix 1 Napisano 11 Marca 2019 Przed chwilą, Mesharsky napisał: Tutaj nie ma na coś takiego ConVara ewentualnie możesz zamiast GetMaxHumanPlayers zmienić na ilość slotów twojego serwera, bądź mniejszą liczbę i ogarnąć coś, nigdy nie pisałem takiego pluginu więc nie wiem, ale jest on prosty do edycji ?. Tak off topic: plugin nawet spoko ? Przecież są: sv_visiblemaxplayers sm_admin_slots Cytat If I set sm_admin_slots 2 sv_visiblemaxplayers 20 There will be 2 hidden slots for admins? Do I need to change the actually amount of players in the server gamemodes_server.txt to 22? Or 20? _______________________________________________________________________________________________________________________________________________________ Yes, there will be 2 hidden slots. Value of "maxplayers" parameter in gamemodes_server.cfg should represent the overall number of available slots - in your case it should be 22. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Mesharsky Napisano 11 Marca 2019 1 minutę temu, zorix napisał: Przecież są: sv_visiblemaxplayers sm_admin_slots No to w takim razie w taki sposób, nie czytałem tematu ani nic na szybko patrzyłem tylko to KickClient ?. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
zorix Napisano 11 Marca 2019 W skrócie @m0re musisz skompilować ten kod co dał @Mesharsky wgrać na serwer do plugins plik .smx i ustawić te cvary :sv_visiblemaxplayers,sm_admin_slots pod swoje potrzeby, jak dobrze zrozumiałem to pierwszy cvar odpowiada za liczbę widzianych slotów a drugi pod rezerwacje. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
m0re Napisano 11 Marca 2019 3 minuty temu, zorix napisał: W skrócie @m0re musisz skompilować ten kod co dał @Mesharsky wgrać na serwer do plugins plik .smx i ustawić te cvary :sv_visiblemaxplayers,sm_admin_slots pod swoje potrzeby, jak dobrze zrozumiałem to pierwszy cvar odpowiada za liczbę widzianych slotów a drugi pod rezerwacje. 19 minut temu, Mesharsky napisał: Przecież ten plugin ma komunikat. Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); KickClient(client, "Serwer jest pełny"); return Plugin_Handled; } Chyba że chodzi ci o coś takiego: Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); PrintToChatAll("Gracz %N został wyrzucony z serwera, serwer jest pełny!", client); KickClient(client, "Serwer jest pełny"); return Plugin_Handled; } To masz cały kod: Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść #pragma semicolon 1 #include <sourcemod> #include <adt_array> Handle sm_admin_slots; Handle Arr_SteamIDs = INVALID_HANDLE; Handle fSteamIDList = INVALID_HANDLE; char steamIDlist[PLATFORM_MAX_PATH]; public Plugin myinfo = { name = "Client limiter", author = "Wilk", description = "Don't allow clients to connect if the server is full (supporting reserved slots)", version = "0.6.1", url = "http://hejk.pl" }; public OnPluginStart() { sm_admin_slots = CreateConVar("sm_admin_slots", "0", "number of reserved slots", FCVAR_NOTIFY, true, 0.0); BuildPath(Path_SM, steamIDlist, sizeof(steamIDlist), "configs/admin_slots.txt"); LoadSteamIDList(); } public OnClientPostAdminCheck(client) { //Temporary flags for non-admin users found in the admin_slots.txt file char auth[32]; GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)); if (FindStringInArray(Arr_SteamIDs, auth) != -1) { SetUserFlagBits(client, ADMFLAG_RESERVATION); } //Reserved slots mechanism int limit = GetMaxHumanPlayers(); if (GetClientCount(false) > (limit - GetConVarInt(sm_admin_slots))) { if (hasReservedSlotAccess(GetUserFlagBits(client))) { char playername[50]; GetClientName(client, playername, 49); LogMessage("player %s connected to a reserved slot", playername); if (GetClientCount(false) > limit) { CreateTimer(0.1, OnTimedKickForReject, GetClientUserId(client)); } } else { CreateTimer(0.1, OnTimedKickForReject, GetClientUserId(client)); } } } public Action OnTimedKickForReject(Handle timer, any userid) { int client = GetClientOfUserId(userid); if (!client || !IsClientInGame(client)) { return Plugin_Handled; } char sPlayername[50], sPlayerid[50]; GetClientName(client, sPlayername, 49); GetClientAuthId(client, AuthId_Steam2, sPlayerid, 49); int iClientsingame = GetClientCount(false); int iLimit = GetMaxHumanPlayers(); LogMessage("kicking rejected player %s<%s> - [%d/%d] players", sPlayername, sPlayerid, iClientsingame, iLimit); PrintToChatAll("Gracz %N został wyrzucony z serwera, serwer jest pełny!", client); KickClient(client, "Serwer jest pełny"); return Plugin_Handled; } // return true if this user is allowed to connect to a reserved slot bool hasReservedSlotAccess(const userFlags) { // admin flag based if (userFlags & ADMFLAG_ROOT || userFlags & ADMFLAG_RESERVATION) { return true; } else { return false; } } LoadSteamIDList() { if (FileExists(steamIDlist, false)) { fSteamIDList = OpenFile(steamIDlist, "rt"); } else { fSteamIDList = OpenFile(steamIDlist, "at+"); LogMessage("Created a config file at the file path: %s", steamIDlist); } if (fSteamIDList == INVALID_HANDLE) LogMessage("Error - unable to load or create file: %s", steamIDlist); Arr_SteamIDs = CreateArray(256); char sReadBuffer[256]; int len; while (!IsEndOfFile(fSteamIDList) && ReadFileLine(fSteamIDList, sReadBuffer, sizeof(sReadBuffer))) { if(sReadBuffer[0] == '/' || IsCharSpace(sReadBuffer[0])) continue; ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\n", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\r", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), "\t", ""); ReplaceString(sReadBuffer, sizeof(sReadBuffer), " ", ""); // Support for comments on end of line len = strlen(sReadBuffer); for(new i; i < len; i++) { if(sReadBuffer[i] == ' ' || sReadBuffer[i] == '/') { sReadBuffer[i] = '\0'; break; } } //LogMessage("Pushing %s to Arr_SteamIDs", sReadBuffer); PushArrayString(Arr_SteamIDs, sReadBuffer); } //LogMessage("Reached EOF on %s", steamIDlist); CloseHandle(fSteamIDList); } Wielkie dzięki ? Po testuje i dam znać czy działa. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
szogun 1 Napisano 11 Marca 2019 Co jak co ale ten plugin jest taki sobie na forum tu jest jego przerobiona wersja, jezeli dodasz admina do pliku od pluginu aby dać mu rezerwacje slota to mu nadpisze flagi ;p Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach