Das wird nicht ganz funktionieren (Glaube ich)
Wenn du eine Zeile ließt,wird dir die meistens falsch zurück gegeben (Bei windoof anders als Linux soweit ich weiss)
zB:
In der whitelist steht:
[KAQ]Noob
Brot
Beim lesen bekommst du aber:
'[KAQ]Noob ' zurück.Mit 1 oder 2 Leerzeichen am Ende.
StripNewLine(string[]) fixt das.
#include <a_samp>
#define RED 0xAA3333AA
#define YELLOW 0xFFFF00AA
forward Whitelist(playerid);
new gdebug = 0;
public Whitelist(playerid)
{
if (gdebug==1){printf("DEBUG Whitelist Check(%d) (%s)", playerid);}
new playername2[MAX_PLAYER_NAME];
new storedcopname[64];
GetPlayerName(playerid, playername2, sizeof(playername2));
new File: file = fopen("Whitelist.cfg", io_read);
if (file)
{
new valtmp[MAX_PLAYER_NAME];
while (fread(file, valtmp)) {
StripNewLine(valtmp);
if (!strcmp(valtmp, playername2, true, strlen(playername2))) {
fclose(file);
return 1;
}
}
}
fclose(file);
return 0;
}
public OnPlayerConnect(playerid)
{
if (Whitelist(playerid)) {
} else {
SendClientMessage(playerid, RED, "Du stehst nicht auf der Whitelist");
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/whitelist", true) == 0)
{
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
return SendClientMessage(playerid, YELLOW, "Benutze: /whitelist [spielername]");
}
if ((IsPlayerAdmin(playerid)))
{
new File:hFile,coordsstring[128];
format(coordsstring,128, "%s\r\n",result);
hFile = fopen("Whitelist.cfg", io_append);
fwrite(hFile, coordsstring);
fclose(hFile);
SendClientMessage(playerid, RED,"Der Spieler wurde zur Whitelist geaddet!");
}
return 1;
}
return 1;
}
//-----------------------strtok-----------------------------
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
//----------------------------------------------------
/**
* Strips Newline from the end of a string.
* Idea: Y_Less, Bugfixing (when length=1) by DracoBlue
* @param string
*/
stock StripNewLine(string[])
{
new len = strlen(string);
if (string[0]==0) return ;
if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
string[len - 1] = 0;
if (string[0]==0) return ;
if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
}
}
Hab eine Whitelist Funktion in meinem Adminscript.Falls du noch kein Adminscript hast und Whitelist/Blacklist brauchst dürfte das wohl was für dich sein.gAdmin aus meiner Sig :X