.........
Da ich gerade nichts zu tun hatte, setzte ich mich an eine Whitelist für TW. Eigentlich richtig unnötig, aber ich habs trotzdem gemacht...
Kurze Erklärung für diejenigen, die nicht wissen was eine Whitelist ist: Eine Whitelist ist eine Textdatei in der pro Zeile ein (Spieler-) Name steht.
[cpp]Bsp:
Schwarztee
Kamillentee
Nameless Tee
[/cpp]
Alle Spieler die in der Whitelist eingetragen sind, haben die Erlaubnis den Server zu betreten. Die, die nicht eingetragen sind dürfen auch nicht in den Server.
Jetzt zum Code:
server.h (src/engine/server/server.h)
Spoiler anzeigen
server.cpp (src/engine/server/server.cpp)
Spoiler anzeigen
config_variables.h (src/engine/shared/config_variables.h)
Spoiler anzeigen
--------------------------------------------------------------------------------------------------------------------------------
Screenshot
Bin/Source/Download
Spoiler anzeigen
server.h: file-upload.net/download-7296287/server.h.html
server.cpp: file-upload.net/download-7297816/server.cpp.html
config_variables.h: file-upload.net/download-7296290/config_variables.h.html
linux-x86_64: file-upload.net/download-7297833/teeworlds_srv.zip.html
linux-x32: (ALT) (von "RafaelXl", keine Gewähr für die Richtigkeit dieser datei) mega.co.nz/#!6FpxUJoC!VtzdymCd…Nl72YpvRYu_KmW5bti4Oqx1fU
win32: file-upload.net/download-7297924/teeworlds_srv.exe.html
PS: Hatte keine Lust mehr das richtig zu formatieren. :D
Da ich gerade nichts zu tun hatte, setzte ich mich an eine Whitelist für TW. Eigentlich richtig unnötig, aber ich habs trotzdem gemacht...
Kurze Erklärung für diejenigen, die nicht wissen was eine Whitelist ist: Eine Whitelist ist eine Textdatei in der pro Zeile ein (Spieler-) Name steht.
[cpp]Bsp:
Schwarztee
Kamillentee
Nameless Tee
[/cpp]
Alle Spieler die in der Whitelist eingetragen sind, haben die Erlaubnis den Server zu betreten. Die, die nicht eingetragen sind dürfen auch nicht in den Server.
Jetzt zum Code:
server.h (src/engine/server/server.h)
[cpp]
//~zeile 184
void CheckWhiteList(int ClientID);
[/cpp]
//~zeile 184
void CheckWhiteList(int ClientID);
[/cpp]
server.cpp (src/engine/server/server.cpp)
[cpp]
//Benötigte includes:
#include <string>
#include <fstream>
[.....]
//~zeile 691
void CServer::CheckWhiteList(int ClientID)
{
char aBuf[256];
bool bPlayerIsOnWl = false;
std::string sEnteredPlayer = ClientName(ClientID);
std::string sPlayersOnWl[256]; //number of max. players (256) you can change it
short shL=0;
std::string sOneLine;
std::ifstream wlFile (g_Config.m_SvWhiteListPath);
if (wlFile.is_open())
{
while (! wlFile.eof() )
{
getline (wlFile, sOneLine);
sPlayersOnWl[shL] = sOneLine;
if(sPlayersOnWl[shL] == sEnteredPlayer)
{
//player is on whitelist, let him join
bPlayerIsOnWl = true;
break;
}
else
{
bPlayerIsOnWl = false;
}
shL++;
}
wlFile.close();
if(bPlayerIsOnWl == false)
{
//player is not whitelisted, kick
Kick(ClientID, "You are not on the Whitelist on this server!");
}
}
//can't find whitelist-path
else
{
str_format(aBuf, sizeof(aBuf), "Can not open Whitelist, check path! (given path: %s)", g_Config.m_SvWhiteListPath);
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
}
}
[.....]
else if(Msg == NETMSG_ENTERGAME)
{
[....]
//~zeile 849
if(g_Config.m_SvWhiteList == 1)
{
CheckWhiteList(ClientID);
}
else
{
str_format(aBuf, sizeof(aBuf), "Whitelist is OFF, player can join");
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
}
[...]
//~zeile 1076
//if whitelist is on hide playernames
if(g_Config.m_SvWhiteList == 1)
{
p.AddString("Whitelist is ON", MAX_NAME_LENGTH); // if whitelist is on (1), hide players
}
else
{
for(i = 0; i < MAX_CLIENTS; i++)
{
if(m_aClients.m_State != CClient::STATE_EMPTY)
{
p.AddString(ClientName(i), MAX_NAME_LENGTH); // client name
p.AddString(ClientClan(i), MAX_CLAN_LENGTH); // client clan
str_format(aBuf, sizeof(aBuf), "%d", m_aClients[i].m_Country); p.AddString(aBuf, 6); // client country
str_format(aBuf, sizeof(aBuf), "%d", m_aClients[i].m_Score); p.AddString(aBuf, 6); // client score
str_format(aBuf, sizeof(aBuf), "%d", GameServer()->IsClientPlayer(i)?1:0); p.AddString(aBuf, 2); // is player?
}
}
}
[/cpp]
//Benötigte includes:
#include <string>
#include <fstream>
[.....]
//~zeile 691
void CServer::CheckWhiteList(int ClientID)
{
char aBuf[256];
bool bPlayerIsOnWl = false;
std::string sEnteredPlayer = ClientName(ClientID);
std::string sPlayersOnWl[256]; //number of max. players (256) you can change it
short shL=0;
std::string sOneLine;
std::ifstream wlFile (g_Config.m_SvWhiteListPath);
if (wlFile.is_open())
{
while (! wlFile.eof() )
{
getline (wlFile, sOneLine);
sPlayersOnWl[shL] = sOneLine;
if(sPlayersOnWl[shL] == sEnteredPlayer)
{
//player is on whitelist, let him join
bPlayerIsOnWl = true;
break;
}
else
{
bPlayerIsOnWl = false;
}
shL++;
}
wlFile.close();
if(bPlayerIsOnWl == false)
{
//player is not whitelisted, kick
Kick(ClientID, "You are not on the Whitelist on this server!");
}
}
//can't find whitelist-path
else
{
str_format(aBuf, sizeof(aBuf), "Can not open Whitelist, check path! (given path: %s)", g_Config.m_SvWhiteListPath);
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
}
}
[.....]
else if(Msg == NETMSG_ENTERGAME)
{
[....]
//~zeile 849
if(g_Config.m_SvWhiteList == 1)
{
CheckWhiteList(ClientID);
}
else
{
str_format(aBuf, sizeof(aBuf), "Whitelist is OFF, player can join");
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "server", aBuf);
}
[...]
//~zeile 1076
//if whitelist is on hide playernames
if(g_Config.m_SvWhiteList == 1)
{
p.AddString("Whitelist is ON", MAX_NAME_LENGTH); // if whitelist is on (1), hide players
}
else
{
for(i = 0; i < MAX_CLIENTS; i++)
{
if(m_aClients.m_State != CClient::STATE_EMPTY)
{
p.AddString(ClientName(i), MAX_NAME_LENGTH); // client name
p.AddString(ClientClan(i), MAX_CLAN_LENGTH); // client clan
str_format(aBuf, sizeof(aBuf), "%d", m_aClients[i].m_Country); p.AddString(aBuf, 6); // client country
str_format(aBuf, sizeof(aBuf), "%d", m_aClients[i].m_Score); p.AddString(aBuf, 6); // client score
str_format(aBuf, sizeof(aBuf), "%d", GameServer()->IsClientPlayer(i)?1:0); p.AddString(aBuf, 2); // is player?
}
}
}
[/cpp]
config_variables.h (src/engine/shared/config_variables.h)
[cpp]
//~zeile 76
MACRO_CONFIG_INT(SvWhiteList, sv_whitelist, 0, 0, 0, CFGFLAG_SERVER, "Turn whitelist on/off (0=off, 1=on)")
MACRO_CONFIG_STR(SvWhiteListPath, sv_whitelistpath, 512, "whitelist.txt", CFGFLAG_SERVER, "Path to Whitelistfile (use absolute path! e.g.: /home/server/whitelist.txt)")
[/cpp]
//~zeile 76
MACRO_CONFIG_INT(SvWhiteList, sv_whitelist, 0, 0, 0, CFGFLAG_SERVER, "Turn whitelist on/off (0=off, 1=on)")
MACRO_CONFIG_STR(SvWhiteListPath, sv_whitelistpath, 512, "whitelist.txt", CFGFLAG_SERVER, "Path to Whitelistfile (use absolute path! e.g.: /home/server/whitelist.txt)")
[/cpp]
--------------------------------------------------------------------------------------------------------------------------------
Screenshot
Bin/Source/Download
server.h: file-upload.net/download-7296287/server.h.html
server.cpp: file-upload.net/download-7297816/server.cpp.html
config_variables.h: file-upload.net/download-7296290/config_variables.h.html
linux-x86_64: file-upload.net/download-7297833/teeworlds_srv.zip.html
linux-x32: (ALT) (von "RafaelXl", keine Gewähr für die Richtigkeit dieser datei) mega.co.nz/#!6FpxUJoC!VtzdymCd…Nl72YpvRYu_KmW5bti4Oqx1fU
win32: file-upload.net/download-7297924/teeworlds_srv.exe.html
PS: Hatte keine Lust mehr das richtig zu formatieren. :D
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von 0!=1 () aus folgendem Grund: +win32