help with whitelist
#1

Hello, My whitelist system won't kick players that aren't whitelisted.

Код:
#include <a_samp>
#include <Dini>
#include <sscanf2>
#include <zcmd>

new Whitelist[20] = "Whitelist.txt";
new pid;
new name2[MAX_PLAYER_NAME];

public OnFilterScriptInit()
{
	print("Whitelist loaded.");
	if(!dini_Exists(Whitelist))
	{
	    dini_Create(Whitelist);
	}
	return 1;
}

public OnPlayerConnect(playerid)
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid,name,MAX_PLAYER_NAME);
	if(dini_Int(Whitelist,name) != 1)
	{
    	if(dini_Int(Whitelist,name) != 0)
		{
		    dini_IntSet(Whitelist,name,0);
		}
	}
	if(dini_Int(Whitelist,name) != 1)
	{
		SendClientMessage(playerid,-1,"You are not Whitelisted!");
		Kick(playerid);
	    return 0;
	}
	return 1;
}

CMD:addtowhitelist(playerid,params[])
{
	if(IsPlayerAdmin(playerid))
	{
	    if(sscanf(params,"%u",pid)) return SendClientMessage(playerid,-1,"Usage: /addtowhitelist [playerid / name]");
        GetPlayerName(pid,name2,MAX_PLAYER_NAME);
	    dini_IntSet(Whitelist,name2,1);
	}
	return 1;
}
CMD:removefromwhitelist(playerid,params[])
{
	if(IsPlayerAdmin(playerid))
	{
	    if(sscanf(params,"%u",pid)) return SendClientMessage(playerid,-1,"Usage: /removefromwhitelist [playerid / name]");
        GetPlayerName(pid,name2,MAX_PLAYER_NAME);
	    dini_IntSet(Whitelist,name2,0);
	}
	return 1;
}
Reply
#2

dini ?
Reply
#3

Quote:
Originally Posted by vassilis
Посмотреть сообщение
dini ?
Changed from 'Dini' to 'dini'.

Still the same.
Reply
#4

Quote:
Originally Posted by Infinity001
Посмотреть сообщение
Changed from 'Dini' to 'dini'.

Still the same.
No, its a sarcasm. Why are you using dini at 2015?
Reply
#5

Quote:
Originally Posted by vassilis
Посмотреть сообщение
No, its a sarcasm? Why are you using dini at 2015
Umh??
Reply
#6

Quote:
Originally Posted by Infinity001
Посмотреть сообщение
Umh??
Dini is the most outdated method for saving/loading functions. You can use better database includes like Y_ini or MySQL
Reply
#7

Anyone?
Reply
#8

Instead of dini or any other system, use it's own file read/write system which is way more fast, I've made this one for you real quick, hopefully will work but didn't get time to test it, post errors if any.

Код:
#include <a_samp>
#include <sscanf2>
#include <zcmd>

new Whitelist[20] = "Whitelist.txt";

public OnFilterScriptInit()
{
	print("Whitelist loaded.");
	return 1;
}

public OnPlayerConnect(playerid)
{
	if(!IsWhitelisted(playerid))
	{
        SendClientMessage(playerid,-1,"You are not Whitelisted!");
		Kick(playerid);
	}
	return 1;
}

CMD:addtowhitelist(playerid,params[])
{
	new pid;
	if(IsPlayerAdmin(playerid))
	{
	    if(sscanf(params,"u",pid)) return SendClientMessage(playerid,-1,"Usage: /addtowhitelist [playerid / name]");
        AddPlayerToWhitelist(pid);
	}
	return 1;
}
CMD:removefromwhitelist(playerid,params[])
{
	new pid;
	if(IsPlayerAdmin(playerid))
	{
	    if(sscanf(params,"u",pid)) return SendClientMessage(playerid,-1,"Usage: /removefromwhitelist [playerid / name]");
	    RemovePlayerFromWhitelist(pid);
	}
	return 1;
}

stock IsWhitelisted(playerid)
{
    new string[128], name[32];
    GetPlayerName(playerid, name, 32);
    if(!fexist(Whitelist)) {new File:fhandle = fopen(Whitelist,io_write); fclose(fhandle);}
    new File:hfile = fopen("Whitelist.txt", io_read);
    while(fread(hfile, string))
    {
        if(!strcmp(string, name, false, strlen(name)) && strlen(string))
        {
            return true;
         }
    }
    fclose(hfile);
    return false;
}

stock AddPlayerToWhitelist(playerid)
{
	new name[32];
	if(!fexist(Whitelist)) {new File:fhandle = fopen(Whitelist,io_write); fclose(fhandle);}
	GetPlayerName(playerid, name, 32);
	new File:hfile = fopen(Whitelist, io_append);
	new str[128];
	format(str, 128, "%s\r\n", name);
	fwrite(hfile, str);
        fclose(hfile);
}

stock RemovePlayerFromWhitelist(playerid)
{
	new name[32], string[256], line=0;
	GetPlayerName(playerid, name, 32);
	if(!fexist(Whitelist)) {new File:fhandle = fopen(Whitelist,io_write); fclose(fhandle);}
	new File:hfile = fopen(Whitelist, io_read);
	while(fread(hfile, string))
	{
		if(!strcmp(string, name, false, strlen(name)) && strlen(string))
		{
			fdeleteline(Whitelist, line);
		}
		line++;
	}
        fclose(hfile);
}

stock fdeleteline(filename[], line)
{
  new count, string[256], File:file, File:temp;

  file= fopen(filename, io_read);
  temp = fopen("tmpfile.tmp", io_write);

  while (fread(file, string))
    if (++count != line)
      fwrite(temp, string);

  fclose(file);
  fclose(temp);

  file= fopen(filename, io_write);
  temp = fopen("tmpfile.tmp", io_read);

  while (fread(temp, string))
    fwrite(file, string);

  fclose(file);
  fclose(temp);
  fremove("tmpfile.tmp");
}
Reply
#9

Quote:
Originally Posted by Tamy
Посмотреть сообщение
Instead of dini or any other system, use it's own file read/write system which is way more fast, I've made this one for you real quick, hopefully will work but didn't get time to test it, post errors if any.

Код:
#include <a_samp>
#include <sscanf2>
#include <zcmd>

new Whitelist[20] = "Whitelist.txt";

public OnFilterScriptInit()
{
	print("Whitelist loaded.");
	return 1;
}

public OnPlayerConnect(playerid)
{
	if(!IsWhitelisted(playerid))
	{
        SendClientMessage(playerid,-1,"You are not Whitelisted!");
		Kick(playerid);
	}
	return 1;
}

CMD:addtowhitelist(playerid,params[])
{
	new pid;
	if(IsPlayerAdmin(playerid))
	{
	    if(sscanf(params,"u",pid)) return SendClientMessage(playerid,-1,"Usage: /addtowhitelist [playerid / name]");
        AddPlayerToWhitelist(pid);
	}
	return 1;
}
CMD:removefromwhitelist(playerid,params[])
{
	new pid;
	if(IsPlayerAdmin(playerid))
	{
	    if(sscanf(params,"u",pid)) return SendClientMessage(playerid,-1,"Usage: /removefromwhitelist [playerid / name]");
	    RemovePlayerFromWhitelist(pid);
	}
	return 1;
}

stock IsWhitelisted(playerid)
{
    new string[128], name[32];
    GetPlayerName(playerid, name, 32);
    if(!fexist(Whitelist)) {new File:fhandle = fopen(Whitelist,io_write); fclose(fhandle);}
    new File:hfile = fopen("Whitelist.txt", io_read);
    while(fread(hfile, string))
    {
        if(!strcmp(string, name, false, strlen(name)) && strlen(string))
        {
            return true;
         }
    }
    fclose(hfile);
    return false;
}

stock AddPlayerToWhitelist(playerid)
{
	new name[32];
	if(!fexist(Whitelist)) {new File:fhandle = fopen(Whitelist,io_write); fclose(fhandle);}
	GetPlayerName(playerid, name, 32);
	new File:hfile = fopen(Whitelist, io_append);
	new str[128];
	format(str, 128, "%s\r\n", name);
	fwrite(hfile, str);
        fclose(hfile);
}

stock RemovePlayerFromWhitelist(playerid)
{
	new name[32], string[256], line=0;
	GetPlayerName(playerid, name, 32);
	if(!fexist(Whitelist)) {new File:fhandle = fopen(Whitelist,io_write); fclose(fhandle);}
	new File:hfile = fopen(Whitelist, io_read);
	while(fread(hfile, string))
	{
		if(!strcmp(string, name, false, strlen(name)) && strlen(string))
		{
			fdeleteline(Whitelist, line);
		}
		line++;
	}
        fclose(hfile);
}

stock fdeleteline(filename[], line)
{
  new count, string[256], File:file, File:temp;

  file= fopen(filename, io_read);
  temp = fopen("tmpfile.tmp", io_write);

  while (fread(file, string))
    if (++count != line)
      fwrite(temp, string);

  fclose(file);
  fclose(temp);

  file= fopen(filename, io_write);
  temp = fopen("tmpfile.tmp", io_read);

  while (fread(temp, string))
    fwrite(file, string);

  fclose(file);
  fclose(temp);
  fremove("tmpfile.tmp");
}
Still makes me able to join even though I am not whitelisted.

EDIT: 2 warnings on lines -
70 and 87.
Reply
#10

Hey, i made this small script for him, i am using dini since years , it always worked fine for me, it may not be the best i know that but for such small things it is okay.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)