Problem with my admin system
#1

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

#define Database_File "Server.db"
#undef MAX_PLAYERS
#define MAX_PLAYERS 50
#define COLOR_RED "{FF0000}"
#define COLOR_DARK_RED "{BB0000}"
#define COLOR_GREEN "{00FF00}"
#define COLOR_DARK_GREEN "{00BB00}"
#define COLOR_BLUE "{00FFFF}"
#define COLOR_DARK_BLUE "{00BBBB}"

new DB:Database;
new DBResult:DatabaseResult;
new PlayerName[MAX_PLAYERS][25];
new PlayerAdministratorLevel[MAX_PLAYERS];
new PlayerModerator[MAX_PLAYERS];
new PlayerVip[MAX_PLAYERS];

main()
{
}

public OnGameModeInit()
{
	AddPlayerClass(0,0,0,0,0,0,0,0,0,0,0);
	Database = db_open(Database_File);
	DatabaseResult = db_query(Database,"CREATE TABLE IF NOT EXISTS `Administration` (`Name` CHAR(25),`AdministratorLevel` INT(1),`Moderator` INT(1),`Vip` INT(10))");
	db_free_result(DatabaseResult);
	return 1;
}

public OnGameModeExit()
{
	db_close(Database);
	return 1;
}

public OnPlayerConnect(playerid)
{
	GetPlayerName(playerid,PlayerName[playerid],25);
	PlayerAdministratorLevel[playerid] = 0;
	PlayerModerator[playerid] = 0;
	PlayerVip[playerid] = 0;
	new String[150];
	format(String,150,"SELECT * FROM `Administration` WHERE `Name` = '%s'",PlayerName[playerid]);
	DatabaseResult = db_query(Database,String);
	if(db_num_rows(DatabaseResult))
	{
		db_get_field_assoc(DatabaseResult,"AdministratorLevel",String,1);
		PlayerAdministratorLevel[playerid] = strval(String);
		db_get_field_assoc(DatabaseResult,"Moderator",String,1);
		PlayerModerator[playerid] = strval(String);
		db_get_field_assoc(DatabaseResult,"Vip",String,10);
		PlayerVip[playerid] = strval(String);
		db_free_result(DatabaseResult);
		if(PlayerAdministratorLevel[playerid] > 0)
		{
		    format(String,150,""COLOR_BLUE"Gracz "COLOR_DARK_BLUE"%s (%d) "COLOR_BLUE"zalogował się jako administrator poziomy "COLOR_DARK_BLUE"%d"COLOR_BLUE".",PlayerName[playerid],playerid,PlayerAdministratorLevel[playerid]);
			SendClientMessageToAll(-1,String);
			SetPlayerColor(playerid,0xFF0000FF);
		}
		if(PlayerModerator[playerid] == 1)
		{
		    format(String,150,""COLOR_BLUE"Gracz "COLOR_DARK_BLUE"%s (%d) "COLOR_BLUE"zalogował się jako moderator.",PlayerName[playerid],playerid);
			SendClientMessageToAll(-1,String);
			SetPlayerColor(playerid,0x00FFFFFF);
		}
		if(PlayerVip[playerid] > gettime())
		{
		    format(String,150,""COLOR_BLUE"Gracz "COLOR_DARK_BLUE"%s (%d) "COLOR_BLUE"zalogował się jako vip.",PlayerName[playerid],playerid);
			SendClientMessageToAll(-1,String);
			SetPlayerColor(playerid,0xFFFF00FF);
		}
	}
	if(!db_num_rows(DatabaseResult))
	{
	    db_free_result(DatabaseResult);
	    format(String,150,"INSERT INTO `Administration` (`Name`,`AdministratorLevel`,`Moderator`,`Vip`) VALUES('%s','%d','%d','%d')",PlayerName[playerid],PlayerAdministratorLevel[playerid],PlayerModerator[playerid],PlayerVip[playerid]);
		DatabaseResult = db_query(Database,String);
		db_free_result(DatabaseResult);
	}
	return 1;
}

COMMAND:setadmin(playerid,params[])
{
	if(!GetPlayerAdministratorLevel(playerid,5)) return SendClientMessage(playerid,-1,""COLOR_RED"Nie posiadasz uprawnień do używania tej komendy.");
	new PlayerID,Level;
	if(sscanf(params,"dd",PlayerID,Level)) return SendClientMessage(playerid,-1,""COLOR_RED"Wpisz /Setadmin <ID> <Poziom Administratora>.");
	if(!IsPlayerConnected(PlayerID)) return SendClientMessage(playerid,-1,""COLOR_RED"Gracz o podanym id nie jest podłączony.");
	if(Level < 0 || Level > 5) return SendClientMessage(playerid,-1,""COLOR_RED"Poziom administratora nie możesz być mniejszy od 0 ani większy od 5.");
	new String[150];
	format(String,150,""COLOR_GREEN"Administrator "COLOR_DARK_GREEN"%s (%d) "COLOR_GREEN"mianował gracza "COLOR_DARK_GREEN"%s (%d) "COLOR_GREEN"administratorem poziomu "COLOR_DARK_GREEN"%d.",PlayerName[playerid],playerid,PlayerName[PlayerID],PlayerID,Level);
	SendClientMessageToAll(-1,String);
	PlayerAdministratorLevel[PlayerID] = Level;
	format(String,150,"UPDATE `Administration` SET `AdministratorLevel` = '%d' WHERE `Name` = '%s'",Level,PlayerName[PlayerID]);
	DatabaseResult = db_query(Database,String);
	db_free_result(DatabaseResult);
	return 1;
}

COMMAND:setmoderator(playerid,params[])
{
    if(!GetPlayerAdministratorLevel(playerid,5)) return SendClientMessage(playerid,-1,""COLOR_RED"Nie posiadasz uprawnień do używania tej komendy.");
    new PlayerID,Level;
    if(sscanf(params,"dd",PlayerID,Level)) return SendClientMessage(playerid,-1,""COLOR_RED"Wpisz /Setmoderator <ID> <1/0>.");
    if(!IsPlayerConnected(PlayerID)) return SendClientMessage(playerid,-1,""COLOR_RED"Gracz o podanym id nie jest podłączony.");
    if(Level < 0 || Level > 1) return SendClientMessage(playerid,-1,""COLOR_RED"Poziom moderatora nie może być mniejszy od 0 ani większy od 1.");
    new String[150];
    if(Level == 1) format(String,150,""COLOR_GREEN"Administrator "COLOR_DARK_GREEN"%s (%d) "COLOR_GREEN"mianował gracza "COLOR_DARK_GREEN"%s (%d) "COLOR_GREEN"moderatorem.",PlayerName[playerid],playerid,PlayerName[PlayerID],PlayerID);
	if(Level == 0) format(String,150,""COLOR_RED"Administrator "COLOR_DARK_RED"%s (%d) "COLOR_RED"zabrał moderatora graczowi "COLOR_DARK_RED"%s (%d)"COLOR_RED".",PlayerName[playerid],playerid,PlayerName[PlayerID],PlayerID);
	SendClientMessageToAll(-1,String);
	PlayerModerator[PlayerID] = Level;
	format(String,150,"UPDATE `Administration` SET `Moderator` = '%d' WHERE `Name` = '%s'",Level,PlayerName[PlayerID]);
	DatabaseResult = db_query(Database,String);
	db_free_result(DatabaseResult);
	return 1;
}

COMMAND:setvip(playerid,params[])
{
    if(!GetPlayerAdministratorLevel(playerid,5)) return SendClientMessage(playerid,-1,""COLOR_RED"Nie posiadasz uprawnień do używania tej komendy.");
    new PlayerID,Time;
	if(sscanf(params,"dd",PlayerID,Time)) return SendClientMessage(playerid,-1,""COLOR_RED"Wpisz /Setip <ID> <Czas W Dniach/0>.");
	if(!IsPlayerConnected(PlayerID)) return SendClientMessage(playerid,-1,""COLOR_RED"Gracz o podanym id nie jest podłączony.");
	if(Time < 0) return SendClientMessage(playerid,-1,""COLOR_RED"Czas nie może być mniejszy od 0.");
	if(Time * 60 * 60 * 24 > 31104000) return SendClientMessage(playerid,-1,""COLOR_RED"Czas nie może przekraczać 6 miesięcy.");
	new String[150];
	if(Time > 0) format(String,150,""COLOR_GREEN"Administrator "COLOR_DARK_GREEN"%s (%d) "COLOR_GREEN"mianował gracza "COLOR_DARK_GREEN"%s (%d) "COLOR_GREEN"vipem na "COLOR_DARK_GREEN"%d "COLOR_GREEN"dni.",PlayerName[playerid],playerid,PlayerName[PlayerID],PlayerID,Time);
    if(Time == 0) format(String,150,""COLOR_RED"Administrator "COLOR_DARK_RED"%s (%d) "COLOR_RED"zabrał vipa graczowi "COLOR_DARK_RED"%s (%d)"COLOR_RED".",PlayerName[playerid],playerid,PlayerName[PlayerID],PlayerID);
	SendClientMessageToAll(-1,String);
	PlayerVip[PlayerID] = gettime() + Time;
	format(String,150,"UPDATE `Administration` SET `Vip` = '%d' WHERE `Name` = '%s'",Time,PlayerName[PlayerID]);
	DatabaseResult = db_query(Database,String);
	db_free_result(DatabaseResult);
	return 1;
}

stock GetPlayerAdministratorLevel(playerid,AdministratorLevel)
{
	if(PlayerAdministratorLevel[playerid] >= AdministratorLevel) return 1;
	return 0;
}

stock GetPlayerModerator(playerid)
{
	if(IsPlayerAdmin(playerid)) return 1;
	if(PlayerAdministratorLevel[playerid] > 0) return 1;
	if(PlayerModerator[playerid] == 1) return 1;
	return 0;
}

stock GetPlayerVip(playerid)
{
	if(IsPlayerAdmin(playerid)) return 1;
	if(PlayerAdministratorLevel[playerid] > 0) return 1;
	if(PlayerModerator[playerid] == 1) return 1;
	if(PlayerVip[playerid] > gettime()) return 1;
	return 0;
}
I think is problem with this.
Код:
public OnPlayerConnect(playerid)
{
	GetPlayerName(playerid,PlayerName[playerid],25);
	PlayerAdministratorLevel[playerid] = 0;
	PlayerModerator[playerid] = 0;
	PlayerVip[playerid] = 0;
	new String[150];
	format(String,150,"SELECT * FROM `Administration` WHERE `Name` = '%s'",PlayerName[playerid]);
	DatabaseResult = db_query(Database,String);
	if(db_num_rows(DatabaseResult))
	{
		db_get_field_assoc(DatabaseResult,"AdministratorLevel",String,1);
		PlayerAdministratorLevel[playerid] = strval(String);
		db_get_field_assoc(DatabaseResult,"Moderator",String,1);
		PlayerModerator[playerid] = strval(String);
		db_get_field_assoc(DatabaseResult,"Vip",String,10);
		PlayerVip[playerid] = strval(String);
		db_free_result(DatabaseResult);
		if(PlayerAdministratorLevel[playerid] > 0)
		{
		    format(String,150,""COLOR_BLUE"Gracz "COLOR_DARK_BLUE"%s (%d) "COLOR_BLUE"zalogował się jako administrator poziomy "COLOR_DARK_BLUE"%d"COLOR_BLUE".",PlayerName[playerid],playerid,PlayerAdministratorLevel[playerid]);
			SendClientMessageToAll(-1,String);
			SetPlayerColor(playerid,0xFF0000FF);
		}
		if(PlayerModerator[playerid] == 1)
		{
		    format(String,150,""COLOR_BLUE"Gracz "COLOR_DARK_BLUE"%s (%d) "COLOR_BLUE"zalogował się jako moderator.",PlayerName[playerid],playerid);
			SendClientMessageToAll(-1,String);
			SetPlayerColor(playerid,0x00FFFFFF);
		}
		if(PlayerVip[playerid] > gettime())
		{
		    format(String,150,""COLOR_BLUE"Gracz "COLOR_DARK_BLUE"%s (%d) "COLOR_BLUE"zalogował się jako vip.",PlayerName[playerid],playerid);
			SendClientMessageToAll(-1,String);
			SetPlayerColor(playerid,0xFFFF00FF);
		}
	}
	if(!db_num_rows(DatabaseResult))
	{
	    db_free_result(DatabaseResult);
	    format(String,150,"INSERT INTO `Administration` (`Name`,`AdministratorLevel`,`Moderator`,`Vip`) VALUES('%s','%d','%d','%d')",PlayerName[playerid],PlayerAdministratorLevel[playerid],PlayerModerator[playerid],PlayerVip[playerid]);
		DatabaseResult = db_query(Database,String);
		db_free_result(DatabaseResult);
	}
	return 1;
}
Problem is this, if my name is not available in table Administration it
Код:
	if(!db_num_rows(DatabaseResult))
	{
	    db_free_result(DatabaseResult);
	    format(String,150,"INSERT INTO `Administration` (`Name`,`AdministratorLevel`,`Moderator`,`Vip`) VALUES('%s','%d','%d','%d')",PlayerName[playerid],PlayerAdministratorLevel[playerid],PlayerModerator[playerid],PlayerVip[playerid]);
		DatabaseResult = db_query(Database,String);
		db_free_result(DatabaseResult);
	}
this not working.

//Sorry for bad english.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)