Ранк Система Еррор

Въпроси и проблеми свързани с AMXModX.
Аватар
AbeN
Извън линия
Потребител
Потребител
Мнения: 21
Регистриран на: 08 Яну 2018, 21:44
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Ранк Система Еррор

Мнение от AbeN » 10 Яну 2018, 21:03

Това е от конзолата
01/11/2018 - 16:10:07: [MySQL] Invalid info tuple handle: 0
01/11/2018 - 16:10:07: [AMXX] Displaying debug trace (plugin "army_rank.amxx", version "1.3.1")
01/11/2018 - 16:10:07: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
01/11/2018 - 16:10:07: [AMXX] [0] army_ranks.sma::client_infochanged (line 836)

Код за потвърждение: Избери целия код

/*    
Обещанного три года ждут ;)
*/
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <hamsandwich>
#include <fakemeta> 
//
#define PLUGIN "Army Ranks"
#define VERSION "1.3.1"
#define AUTHOR "Arctic"
#pragma tabsize 0
#define ADM_MENU    ADMIN_IMMUNITY // menu access flag
//
new g_vault;
new Handle:g_SqlTuple;
new g_Error[512]; 
enum _:PlData {
	gId,gExp,gLevel,gTempKey
};
new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText,gStatusText
new bool:restr_blocked;
new const gRankNames[][] = {
	"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",      
	"I_15","I_16","I_17","I_18","I_19","I_20"
};
new const gLevels[] = {
	0,30,60,100,160,220,350,400,600,1000,1500,2200,3200,4200,5600,7020,10000,14000,15000,22000
};
new const gNades[][] = {
	{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
	{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
	{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}
}
new const restrict_bonus[][] = {
	"35hp",
	"most_wanted",
	"ka_wintershank"
};
new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel
,gArmyChat,gSaveType,gTableName,gHost,gUser,gPassword,gDbName,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat,gProgressBar,gBombDefuseXp,gBombPlantXp,gBomb, gMinPlayers
//
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar("army_ranks",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
	set_cvar_string("army_ranks",VERSION);
	//
	gRestrictMaps    = register_cvar( "restrict_maps",        "0");// вкл запрет бонусов на карте.   
	gBonusLevel   = register_cvar( "level_bonus",        "0");// вкл оружие при получении уровня.
	gFlash      = register_cvar( "flash_nades",        "0");// вкл бонуса флешек
	gSmoke      = register_cvar( "smoke_nades",        "1");// вкл бонуса дымовых
	gHe      = register_cvar( "he_nades",        "1");// вкл бонуса осколочных
	gHpbylevel   = register_cvar( "hp_by_level",        "3");// кол-во хп, которое дается за лвл, если = 0 - то выкл
	gApbylevel   = register_cvar( "ap_by_level",        "5");// кол-во брони, которое дается за лвл, если = 0 - то выкл
	gArmyChat   = register_cvar( "army_chat",        "1");// использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
	gAdminGMsg   = register_cvar( "admin_color",       "1");// 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
	gSaveType    = register_cvar( "save_type",        "1");// 0 - nvault, 1- mysql.
	gSlash       = register_cvar( "slash_messages",        "1");// не отображать команды со слэшем
	gTk       = register_cvar( "team_kill_lost_xp",      "1");// терять exp при тимкилле
	gLostXpTk    = register_cvar( "lost_xp_val",        "3");// кол-во теряемых exp при тк
	gLevelUpmsg   = register_cvar( "level_up_msg",        "1");// сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
	gAllChat   = register_cvar( "all_chat",        "0");// 1 - чат для всех(метвые и живые), 0-живые не видят чат мертвых и наоборот
	/***/   gProgressBar   = register_cvar( "progress_bar_pos",      "0");// расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
	gMinPlayers   = register_cvar( "min_players",        "4");// мин.кол-во игроков для получения опыта за действия с бомбой
	gBomb      = register_cvar( "bomb_xp",           "1");// вкл получения опыта над действиями с бомбой
	gBombDefuseXp   = register_cvar( "bdefuse_xp",        "5");// кол-во получаемых exp при разминировании бомбы
	gBombPlantXp   = register_cvar( "bplant_xp",        "4");// кол-во получаемых exp при минировании бомбы
	// для mysql   
	gHost      = register_cvar( "mysql_host",       "localhost");    // host
	gUser      = register_cvar( "mysql_user",       "root");   // username
	gPassword   = register_cvar( "mysql_password",    "qwerty");    // password
	gDbName      = register_cvar( "mysql_db_name",    "database");    // database name
	gTableName   = register_cvar( "mysql_table_name",    "army_ranks");    // название таблицы mysql
	//
	register_logevent( "EventRoundStart", 2, "1=Round_Start" );
	register_forward(FM_Sys_Error, "fw_ServerDown");
	register_forward(FM_GameShutdown, "fw_ServerDown");
	register_forward(FM_ServerDeactivate, "fw_ServerDown");
	RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)  
	register_event( "DeathMsg","EventDeath","a");
	if(get_pcvar_num(gProgressBar) != 0){
		set_task(1.0,"StatusText",_,_,_, "b");
		} else { 
		set_task(1.0,"Info",_,_,_, "b");
	}
	//
	register_message(get_user_msgid("SayText"), "msg_SayText");
	gStatusText = get_user_msgid("StatusText");
	gSayText = get_user_msgid ("SayText");
	//
	g_MsgHud = CreateHudSyncObj();
	MaxPlayers = get_maxplayers();
	register_dictionary("army.txt" );
	//
	if(get_pcvar_num(gRestrictMaps))
	{
		new szMapName[64];
		get_mapname(szMapName,63);
		for(new a = 0; a < sizeof restrict_bonus; a++)
		{
			if(equal(szMapName, restrict_bonus[a]))
			{
				restr_blocked = true;
				log_amx("[army ranks] weapon menu is blocked on map [%s].",restrict_bonus[a]);
				break;
				} else {
				restr_blocked = false;
			}   
		}
	}
	//
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			g_vault = nvault_open("army_ranks");
		}
		case 1: 
		{
			set_task(0.1, "sql_init");
		}
		default: {
			g_vault = nvault_open("army_ranks");
		}
	}
	//
	if(get_pcvar_num(gArmyChat))
	{
		register_clcmd("say", "hookSay") 
		register_clcmd("say_team", "hookSayTeam");
	}
	register_clcmd("add_exp", "add_exp_post")
	register_clcmd("amx_setlevel", "admin_menu")
}
public plugin_cfg()
{
	new szCfgDir[64], szFile[192];
	get_configsdir(szCfgDir, charsmax(szCfgDir));
	formatex(szFile,charsmax(szFile),"%s/army_ranks.cfg",szCfgDir);
	if(file_exists(szFile))
		server_cmd("exec %s", szFile);
}
public fwHamPlayerSpawnPost(id)
{
	if(is_user_alive(id) && is_user_connected(id))
	{
		if(restr_blocked)
			return PLUGIN_CONTINUE;
		
		if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
			give_item(id,"weapon_flashbang");
		
		if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
			give_item(id,"weapon_smokegrenade");
		
		if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
			give_item(id,"weapon_hegrenade");
		
		if(get_pcvar_num(gHpbylevel) != 0)
			set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gLevel]);
		
		if(get_pcvar_num(gApbylevel) != 0)
			set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLevel]);   
		
		if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
		{
			GetWeapon(id);
			levelUp[id] = 0;
		}
	}
	return PLUGIN_CONTINUE
}
public bomb_defused(id)
{
	if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 2 || get_pcvar_num(gBombDefuseXp) < 1 || get_pcvar_num(gBomb) !=1)
		return
	
	if(get_playersnum() <= get_pcvar_num(gMinPlayers))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
		} else {
		UserData[id][gExp] += get_pcvar_num(gBombDefuseXp);
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"DEFUSE_XP",get_pcvar_num(gBombDefuseXp))
	}
}
public bomb_planted(id)
{
	if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 1 || get_pcvar_num(gBombPlantXp) < 1 || get_pcvar_num(gBomb) !=1)
		return
	
	if(get_playersnum() <= get_pcvar_num(gMinPlayers))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
		} else {
		UserData[id][gExp] += get_pcvar_num(gBombPlantXp);
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"PLANT_XP",get_pcvar_num(gBombPlantXp))
	}
}
//
public sql_init()
{
	new szTableName[64],szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
	get_pcvar_string(gTableName,szTableName,63);
	get_pcvar_string(gHost,szHost,63);
	get_pcvar_string(gUser,szUser,63);
	get_pcvar_string(gPassword,szPassword,63);
	get_pcvar_string(gDbName,szDbName,63);
	g_SqlTuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
	new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
	if(SqlConnection == Empty_Handle)
		set_fail_state(g_Error);
	
	new Handle:Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`exp` INT(10) NOT NULL,`level` INT(10) NOT NULL,PRIMARY KEY (id));", szTableName)
	if(!SQL_Execute(Queries))
	{
		SQL_QueryError(Queries,g_Error,charsmax(g_Error))
		set_fail_state(g_Error);
	}
	SQL_FreeHandle(Queries)
	SQL_FreeHandle(SqlConnection);
}
//
public plugin_end()
{
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			nvault_close(g_vault);
		}
		case 1: 
		{
			if(g_SqlTuple != Empty_Handle)
				SQL_FreeHandle(g_SqlTuple);
		}
		default: 
	{
		nvault_close(g_vault);
	}
}
}
//
public client_putinserver(id) // путинсервер)
{
for(new i = 0; i<PlData ; i++)
	UserData[id][i] = 0;
	
	load_data(id);
}
//
public client_disconnect(id)
{
	save_usr(id);
	for(new i = 0; i<PlData ; i++)
		UserData[id][i] = 0;
}
//
public check_level(id)
{
	if(UserData[id][gLevel] <= 0)
		UserData[id][gLevel] = 1;
	
	if(UserData[id][gExp] < 0)
		UserData[id][gExp] = 0;
	
	while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]]) 
	{
		UserData[id][gLevel]++;
		levelUp[id] = 1;
		switch(get_pcvar_num(gLevelUpmsg))
		{
			case 1: 
			{
				new szName[33];
				get_user_name(id, szName, 32);
				static buffer[192],len;
				len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
				len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL"); 
				len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
				len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
				ColorChat(0,NORMAL,buffer);
			}
			case 2:
			{
				new szName[33];
				get_user_name(id, szName, 32);
				static buffer[192],len;
				len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
				len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL"); 
				len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
				len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
				ColorChat(id,NORMAL,buffer);
			}
		}
	}
}
public EventDeath()
{
	new iKiller = read_data(1);
	new iVictim = read_data(2);
	new head = read_data(3);
	if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
	{
		// if tk?
		if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
		{
			UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
			return PLUGIN_CONTINUE;
		}
		new weapon = get_user_weapon(iKiller);
		UserData[iKiller][gExp] += 1;
		if(weapon == CSW_KNIFE)
			UserData[iKiller][gExp] += 3;
		
		if(head)
			UserData[iKiller][gExp] += 2;
		
		if(weapon == CSW_HEGRENADE)
			UserData[iKiller][gExp] += 1;
		
		check_level(iKiller);
	}
	return PLUGIN_CONTINUE;
}
public EventRoundStart()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(is_user_alive(id) && is_user_connected(id))
		{
			if(restr_blocked)
				return PLUGIN_CONTINUE;
			
			if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
				give_item(id,"weapon_flashbang");
			
			if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
				give_item(id,"weapon_smokegrenade");
			
			if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
				give_item(id,"weapon_hegrenade");
			
			if(get_pcvar_num(gHpbylevel) != 0)
				set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gLevel]);
			
			if(get_pcvar_num(gApbylevel) != 0)
				set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLevel]);   
			
			if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
			{
				GetWeapon(id);
				levelUp[id] = 0;
			}
		}
	}
	return PLUGIN_CONTINUE;
}
////////// save
public load_data(id)
{
	new szName[33];
	get_user_name(id,szName,32);
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			static data[256], timestamp;
			if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
			{
				next_load_data(id, data, sizeof(data) - 1);
				return;
				} else {
				register_player(id,"");
			}
		}
		case 1: 
		{
			new szTableName[32],ErrorCode;
			new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
			SQL_QuoteString(SqlConnection, szName, 32, szName);
			get_pcvar_string(gTableName,szTableName,31);
			if(SqlConnection == Empty_Handle)
			{
				log_amx(g_Error);
				return ;
			}
			new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM %s WHERE name = '%s';",szTableName,szName)
			if(!SQL_Execute(Query))
			{
				SQL_QueryError(Query,g_Error,511);
				log_amx(g_Error);
				return ;
			}
			if(SQL_NumResults(Query) > 0 )
			{
				next_load_data(id, "", 0);
				} else {
				register_player(id,"");
			}
			SQL_FreeHandle(Query);
			SQL_FreeHandle(SqlConnection);
		}
		default: 
	{
		static data[256], timestamp;
		if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
		{
			next_load_data(id, data, sizeof(data) - 1);
			return;
			} else {
			register_player(id,"");
		}
	}
}
}
public next_load_data(id,data[],len)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
	case 0: 
	{
		replace_all(data,len,"|"," ");
		new exp[5],level[5];
		parse(data,exp,4,level,4);
		UserData[id][gExp]= str_to_num(exp);
		UserData[id][gLevel]= str_to_num(level);
	}
	case 1: 
	{
		new szTableName[32],ErrorCode;
		new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
		SQL_QuoteString(SqlConnection, szName, 32, szName);
		get_pcvar_string(gTableName,szTableName,31);
		if(SqlConnection == Empty_Handle)
		{
			log_amx(g_Error);
			return ;
		}
		new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id,exp,level FROM %s WHERE name = '%s';",szTableName,szName)
		if(!SQL_Execute(Query))
		{
			SQL_QueryError(Query,g_Error,511)
			log_amx(g_Error)
		}
		if( SQL_NumResults(Query) > 0)
		{
			UserData[id][gId]= SQL_ReadResult(Query,0); 
			UserData[id][gExp]= SQL_ReadResult(Query,1); 
			UserData[id][gLevel]= SQL_ReadResult(Query,2); 
		}
		SQL_FreeHandle(Query);
		SQL_FreeHandle(SqlConnection);
	}
	default: 
{
	replace_all(data,len,"|"," ");
	new exp[5],level[5];
	parse(data,exp,4,level,4);
	UserData[id][gExp]= str_to_num(exp);
	UserData[id][gLevel]= str_to_num(level);
}
}
// mini-check lvl_up
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]]) 
	UserData[id][gLevel]++;
}
public register_player(id,data[])
{
	new szName[33];
	get_user_name(id,szName,32);
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			UserData[id][gExp]= 0
			UserData[id][gLevel]= 1;
		}
		case 1: 
		{
			new szTableName[32],ErrorCode;
			new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
			SQL_QuoteString(SqlConnection, szName, 32, szName);
			get_pcvar_string(gTableName,szTableName,31);
			if(SqlConnection == Empty_Handle)
			{
				log_amx(g_Error);
				return ;
			}
			new Handle:Query = SQL_PrepareQuery(SqlConnection,"INSERT INTO %s (`id`,`name`,`exp`,`level`) VALUES (NULL,'%s','0','1');",szTableName,szName);
			if(!SQL_Execute(Query))
			{
				SQL_QueryError(Query,g_Error,511)
				log_amx(g_Error)
			}
			SQL_FreeHandle(Query);
			SQL_FreeHandle(SqlConnection);
			UserData[id][gExp] = 0;
			UserData[id][gLevel] = 1;
			get_user_id(id);
		}
		default: 
	{
		UserData[id][gExp]= 0;
		UserData[id][gLevel]= 1;
	}
}
}
public save_usr(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
	case 0: 
	{
		static data[256];
		formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
		nvault_set(g_vault, szName, data);
	}
	case 1: 
	{
		new szTemp[512],szTable[64];
		get_pcvar_string(gTableName,szTable,63);
		format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
		SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)
		
		server_print("==========================================");
		server_print("UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
		
	}
	default: 
{
	static data[256];
	formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
	nvault_set(g_vault, szName, data);
}
}
}
stock get_user_id(id)
{
new szName[33],ErrorCode;
get_user_name(id,szName,32);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM hmm WHERE name = '%s';",szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return;
}
if(SQL_NumResults(Query) > 0 )
UserData[id][gId]= SQL_ReadResult(Query,0);
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
///////// chat event
public hookSay(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
	return PLUGIN_CONTINUE;
	
	new message[192],Len;
	read_args(message, 191);
	remove_quotes(message);
	if(is_admin_msg(message))
		return PLUGIN_CONTINUE;
	
	if(is_empty_message(message))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG")
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(gSlash))
	{
		if(is_has_slash(message))
			return PLUGIN_HANDLED_MAIN
	}
	new szName[32];
	get_user_name(id,szName,31);
	if(is_user_admin(id))
	{
		Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
		switch(get_pcvar_num(gAdminGMsg))
		{
			case 1:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
			}
			case 2:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
			}
			default:
		{
			Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
			Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
		}
	}
	Chat(id,0,get_pcvar_num(gAllChat));
}
else 
{
	Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
	Chat(id,0,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
public hookSayTeam(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
	return PLUGIN_CONTINUE;
	
	new message[192],Len;
	read_args(message, 191);
	remove_quotes(message);
	if(is_admin_msg(message))
		return PLUGIN_CONTINUE;
	
	if(is_empty_message(message))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG");
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(gSlash))
	{
		if(is_has_slash(message))
			return PLUGIN_HANDLED_MAIN
	}
	new szName[32];
	get_user_name(id,szName,31);
	if(is_user_admin(id))
	{
		Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);      
		switch(get_pcvar_num(gAdminGMsg))
		{
			case 1:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
			}
			case 2:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
			}
			default:
		{
			Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
		}
	}
	Chat(id,1,get_pcvar_num(gAllChat));
}
else 
{
	Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
	Chat(id,1,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
stock is_admin_msg(const Message[])
{
if(Message[0] == '@')
	return true;
	
	return false;
}
stock is_empty_message(const Message[])
{
	if(equal(Message, "") || !strlen(Message))
		return true;
	
	return false;
}
stock Chat(id,team,chat_type)
{
	if(team)
	{
		if(chat_type)
		{
			for(new i = 0; i <= MaxPlayers; i++)
			{
				if(!is_user_connected(i))
					continue
				
				if(get_user_team(id) == get_user_team(i))
					send_message(gMessage, id, i);
			}
			} else {
			if(is_user_alive(id))
			{
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || !is_user_alive(i))
						continue
					
					if(get_user_team(id) == get_user_team(i))
						send_message(gMessage, id, i);
				}
				} else if(!is_user_alive(id)){
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || is_user_alive(i))
						continue
					
					if(get_user_team(id) == get_user_team(i))
						send_message(gMessage, id, i);
				}
			}
		}
		} else{
		if(chat_type)
		{
			for(new i = 0; i <= MaxPlayers; i++)
			{
				if(!is_user_connected(i))
					continue
				
				send_message(gMessage, id, i);
			}
			} else {
			if(is_user_alive(id))
			{
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || !is_user_alive(i))
						continue
					
					send_message(gMessage, id, i);
				}
				} else if(!is_user_alive(id)){
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || is_user_alive(i))
						continue
					
					send_message(gMessage, id, i);
				}
			}
		}
	}
}
stock send_message(const message[], const id, const i)
{
	message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
	write_byte(id)
	write_string(message)
	message_end()
}
stock is_has_slash(const Message[])
{
	if(Message[0] == '/')
		return true;
	
	return false;
}

public client_infochanged(id)
{
	new newname[32],oldname[32]
	get_user_info(id, "name", newname,31)
	get_user_name(id,oldname,31)
	if(!is_user_connected(id) || is_user_bot(id)) 
		return PLUGIN_CONTINUE
	
	if(!equali(newname, oldname))
	{
		new szTemp[512],szTable[64];
		get_pcvar_string(gTableName,szTable,63);
		format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `name`='%s' WHERE `id`='%d';",szTable,newname,UserData[id][gId]);
		SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)   
	}
	return PLUGIN_CONTINUE
}
public msg_SayText()
{
	new arg[32]
	get_msg_arg_string(2, arg, 31)
	if(containi(arg,"name")!=-1)
		return PLUGIN_HANDLED
	
	return PLUGIN_CONTINUE
}
/////////// natives
public plugin_natives()
{
	register_native("get_user_exp", "native_get_user_exp", 1);
	register_native("get_user_lvl", "native_get_user_lvl", 1);
	register_native("set_user_exp", "native_set_user_exp", 1);
	register_native("set_user_lvl", "native_set_user_lvl", 1);
	register_native("get_user_rankname", "native_get_user_rankname", 1);
}
public native_set_user_exp(id,num)
{
	UserData[id][gExp] = num;
}
public native_set_user_lvl(id,num)
{
	UserData[id][gLevel] = num;
}
public native_get_user_exp(id)
{
	return UserData[id][gExp];
}
public native_get_user_lvl(id)
{
	return UserData[id][gLevel];
}
public native_get_user_rankname(id)
{
	static szRankName[64];
	format(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	return szRankName;
}
//////// informer
public Info()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(!is_user_bot(id) && is_user_connected(id))
		{
			set_hudmessage(100, 100, 100, 0.01, 0.13, 0, 1.0, 1.0, _, _, -1)
			
			static buffer[192], len;
			len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
			len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
			if(UserData[id][gLevel] <= 19)
			{
				len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
				} else {
				len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
			}
			ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
		}
	}
	return PLUGIN_CONTINUE
}
public StatusText()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(!is_user_bot(id) && is_user_connected(id) && is_user_alive(id))
		{
			static buffer[100], len;
			len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
			if(UserData[id][gLevel] <= 19)
			{
				len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_XP_STEXT",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
				} else {
				len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_MAX");
			}
			message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
			write_byte(0)
			write_string(buffer)
			message_end();
		}
	}
}
/////// weap menu per lvl
public GetWeapon(id)
{
	new szText[700 char];
	formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
	new menu = menu_create( szText, "gw_menu" );
	//
	formatex( szText, charsmax( szText ), "awp");
	menu_additem( menu, szText, "1", 0 );
	//
	formatex( szText, charsmax( szText ), "ak-47");
	menu_additem( menu, szText, "2", 0 );
	//
	formatex( szText, charsmax( szText ), "m4a1");
	menu_additem( menu, szText, "3", 0 );
	//
	formatex( szText, charsmax( szText ), "famas");
	menu_additem( menu, szText, "4", 0 );
	//
	menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
	if( item == MENU_EXIT )
	{
		return PLUGIN_HANDLED;
	}
	
	new data[ 6 ], iName[ 64 ], access, callback;
	menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
	new key = str_to_num( data );
	switch( key )
	{
		case 1:
		{
			give_item(id,"weapon_awp");
			cs_set_user_bpammo( id, CSW_AWP, 100);
		}
		case 2:
		{
			give_item(id,"weapon_ak47");
			cs_set_user_bpammo( id, CSW_AK47, 200);
		}
		case 3:
		{
			give_item(id,"weapon_m4a1");
			cs_set_user_bpammo( id, CSW_M4A1, 200);
		}
		case 4:
		{
			give_item(id,"weapon_famas");
			cs_set_user_bpammo( id, CSW_FAMAS, 200);
		}
	}
	
	return PLUGIN_HANDLED;
}
public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
	switch(FailState)
	{
		case -2: log_amx("[Army Ranks] Failed to connect (%d): %s", Errcode, Error);
			case -1: log_amx("[Army Ranks] (%d): %s", Errcode, Error);
		}
	return PLUGIN_HANDLED
}
public fw_ServerDown() 
{ 
	for(new i = 0; i <= MaxPlayers; i++)
	{
		if(is_user_connected(i))
			save_usr(i)
	}
}
public admin_menu(id)
{
	new szText[700 char];
	formatex( szText, charsmax( szText ), "%L", id, "ARMY_MENU");
	new menu = menu_create( szText, "admin_menu_hl" );
	//
	formatex( szText, charsmax( szText ), "%L", id, "ADD_EXP");
	menu_additem( menu, szText, "1", 0 );
	formatex( szText, charsmax( szText ), "%L", id, "SET_LVL");
	menu_additem( menu, szText, "2", 0 );
	//
	menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}
public admin_menu_hl(id,menu,item)
{
	if( item == MENU_EXIT )
	{
		return PLUGIN_HANDLED;
	}
	
	new data[ 6 ], iName[ 64 ], access, callback;
	menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
	new key = str_to_num( data );
	switch( key )
	{
		case 1:
		{
			give_exp_menu(id);
		}
		case 2:
		{
			set_level_menu(id)
		}
	}
	
	return PLUGIN_HANDLED;
}
public give_exp_menu(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		new players[32], num;
		get_players(players, num)
		new tempname[32], info[10];
		new players_menu = menu_create("Выберите игрока :", "give_exp_hl")
		for(new i = 0; i < num; i++)
		{
			get_user_name(players[i], tempname, 31);
			num_to_str(players[i], info, 9);
			menu_additem(players_menu, tempname, info, 0);
		}
		menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, players_menu, 0);
	}
	return PLUGIN_CONTINUE
}
public give_exp_hl(id, players_menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(players_menu)
		return PLUGIN_HANDLED
	}
	new data[6],accessmenu, iName[64], callback;
	menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
	new player = str_to_num(data)
	client_cmd(id, "messagemode ^"add_exp %i^"", player);
	ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"TYPE_AMOUNT");
	return PLUGIN_CONTINUE
}

public add_exp_post(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		new param[10]
		read_argv(2, param, charsmax(param))
		for (new x; x < strlen(param); x++)
		{
			if(!isdigit(param[x]))
			{ 
				ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MUST_NUM")
				give_exp_menu(id)
				return PLUGIN_HANDLED
			}
		}
		new amount = str_to_num(param);
		if (amount < 1)
		{
			ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_EXP") 
			give_exp_menu(id)
			return PLUGIN_HANDLED
		}
		if (amount > 999)
		{
			ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MAX_EXP")  
			give_exp_menu(id)
			return PLUGIN_HANDLED
		}
		read_argv(1, param, charsmax(param))
		new player = str_to_num(param)   
		//
		UserData[player][gExp] += amount;
		if(UserData[player][gLevel] <= 0)
			UserData[player][gLevel] = 1;
		
		while(UserData[player][gExp] >= gLevels[UserData[player][gLevel]]) 
			UserData[player][gLevel]++;
		//      
		new names[2][32]
		get_user_name(id, names[0], 31)
		get_user_name(player, names[1], 31)
		ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"ADMIN_ADD", names[0], amount, names[1]);
		save_usr(player);
	}
	return PLUGIN_HANDLED
}
public set_level_menu(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		UserData[id][gTempKey] = 0;
		new players[32], num;
		get_players(players, num)
		new tempname[32], info[10];
		new players_menu = menu_create("Выберите игрока :", "set_level_hl")
		for(new i = 0; i < num; i++)
		{
			get_user_name(players[i], tempname, 31);
			num_to_str(players[i], info, 9);
			menu_additem(players_menu, tempname, info, 0);
		}
		menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, players_menu, 0);
	}
	return PLUGIN_CONTINUE
}
public set_level_hl(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], _access, callback;
	menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
	UserData[id][gTempKey] = str_to_num(data);
	set_level_pl(id);
	return PLUGIN_CONTINUE
}
public set_level_pl(id)
{
	static szText[1024];
	formatex(szText,charsmax(szText), "%L", id, "CHOOSE_RANKN");
	new menu = menu_create( szText, "set_level_phl");
	//======
	for(new i = 1; i < sizeof(gRankNames); i++)
	{
		new szItem[100],lang[10],num[5];
		format(lang,9,"I_%d",i);
		format(num,4,"%d",i);
		formatex(szItem,charsmax(szItem),"%L",id,lang);
		menu_additem(menu,szItem,num);
	}
	//======
	menu_setprop(menu, MPROP_BACKNAME, "Назад ");
	menu_setprop(menu, MPROP_NEXTNAME, "Далее ");
	menu_setprop(menu, MPROP_EXITNAME, "Выход ");
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}
public set_level_phl(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], _access, callback;
	menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
	new level = str_to_num(data);
	if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
	{
		UserData[UserData[id][gTempKey]][gLevel] = level;
		UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
		new szName[2][32];
		get_user_name(id, szName[0], 31);
		get_user_name(UserData[id][gTempKey], szName[1], 31);
		ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L %L %s",LANG_PLAYER,"ADMIN_LEVEL", szName[0],LANG_PLAYER,gRankNames[level],szName[1])
		save_usr(UserData[id][gTempKey]);
		} else {
		set_level_menu(id);
	}
	UserData[id][gTempKey] = 0;
	return PLUGIN_HANDLED;
}
Последно промяна от AbeN на 11 Яну 2018, 17:53, променено общо 1 път.

Аватар
LuciFeR
Извън линия
Потребител
Потребител
Мнения: 154
Регистриран на: 03 Яну 2017, 11:47
Се отблагодари: 3 пъти
Получена благодарност: 2 пъти

Ранк Система Еррор

Мнение от LuciFeR » 11 Яну 2018, 09:28

Тествай:

Код за потвърждение: Избери целия код

/*    
Обещанного три года ждут ;)
*/
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <hamsandwich>
#include <fakemeta> 
//
#define PLUGIN "Army Ranks"
#define VERSION "1.3.1"
#define AUTHOR "Arctic"
#pragma tabsize 0
#define ADM_MENU    ADMIN_IMMUNITY // menu access flag
//
new g_vault;
new Handle:g_SqlTuple;
new g_Error[512]; 
enum _:PlData {
	gId,gExp,gLevel,gTempKey
};
new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText,gStatusText
new bool:restr_blocked;
new const gRankNames[][] = {
	"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",      
	"I_15","I_16","I_17","I_18","I_19","I_20"
};
new const gLevels[] = {
	0,30,60,100,160,220,350,400,600,1000,1500,2200,3200,4200,5600,7020,10000,14000,15000,22000
};
new const gNades[][] = {
	{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
	{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
	{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}
}
new const restrict_bonus[][] = {
	"35hp",
	"most_wanted",
	"ka_wintershank"
};
new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel
,gArmyChat,gSaveType,gTableName,gHost,gUser,gPassword,gDbName,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat,gProgressBar,gBombDefuseXp,gBombPlantXp,gBomb, gMinPlayers
//
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_cvar("army_ranks",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
	set_cvar_string("army_ranks",VERSION);
	//
	gRestrictMaps    = register_cvar( "restrict_maps",        "0");// вкл запрет бонусов на карте.   
	gBonusLevel   = register_cvar( "level_bonus",        "0");// вкл оружие при получении уровня.
	gFlash      = register_cvar( "flash_nades",        "0");// вкл бонуса флешек
	gSmoke      = register_cvar( "smoke_nades",        "1");// вкл бонуса дымовых
	gHe      = register_cvar( "he_nades",        "1");// вкл бонуса осколочных
	gHpbylevel   = register_cvar( "hp_by_level",        "3");// кол-во хп, которое дается за лвл, если = 0 - то выкл
	gApbylevel   = register_cvar( "ap_by_level",        "5");// кол-во брони, которое дается за лвл, если = 0 - то выкл
	gArmyChat   = register_cvar( "army_chat",        "1");// использовать чат плагина, то есть приставка в чате, цвет сообщ. для админа
	gAdminGMsg   = register_cvar( "admin_color",       "1");// 1 = сообщ.админа зеленое,0 = желтое, 2 = цвета команды
	gSaveType    = register_cvar( "save_type",        "1");// 0 - nvault, 1- mysql.
	gSlash       = register_cvar( "slash_messages",        "1");// не отображать команды со слэшем
	gTk       = register_cvar( "team_kill_lost_xp",      "1");// терять exp при тимкилле
	gLostXpTk    = register_cvar( "lost_xp_val",        "3");// кол-во теряемых exp при тк
	gLevelUpmsg   = register_cvar( "level_up_msg",        "1");// сообщение при лвл-апе игрока : 1- вкл (всем), 2 - только игроку
	gAllChat   = register_cvar( "all_chat",        "0");// 1 - чат для всех(метвые и живые), 0-живые не видят чат мертвых и наоборот
	/***/   gProgressBar   = register_cvar( "progress_bar_pos",      "0");// расположение данных игрока: 0 - hud(под радаром), 1 - под чатом
	gMinPlayers   = register_cvar( "min_players",        "4");// мин.кол-во игроков для получения опыта за действия с бомбой
	gBomb      = register_cvar( "bomb_xp",           "1");// вкл получения опыта над действиями с бомбой
	gBombDefuseXp   = register_cvar( "bdefuse_xp",        "5");// кол-во получаемых exp при разминировании бомбы
	gBombPlantXp   = register_cvar( "bplant_xp",        "4");// кол-во получаемых exp при минировании бомбы
	// для mysql   
	gHost      = register_cvar( "mysql_host",       "localhost");    // host
	gUser      = register_cvar( "mysql_user",       "root");   // username
	gPassword   = register_cvar( "mysql_password",    "qwerty");    // password
	gDbName      = register_cvar( "mysql_db_name",    "database");    // database name
	gTableName   = register_cvar( "mysql_table_name",    "army_ranks");    // название таблицы mysql
	//
	register_logevent( "EventRoundStart", 2, "1=Round_Start" );
	register_forward(FM_Sys_Error, "fw_ServerDown");
	register_forward(FM_GameShutdown, "fw_ServerDown");
	register_forward(FM_ServerDeactivate, "fw_ServerDown");
	RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)  
	register_event( "DeathMsg","EventDeath","a");
	if(get_pcvar_num(gProgressBar) != 0){
		set_task(1.0,"StatusText",_,_,_, "b");
		} else { 
		set_task(1.0,"Info",_,_,_, "b");
	}
	//
	register_message(get_user_msgid("SayText"), "msg_SayText");
	gStatusText = get_user_msgid("StatusText");
	gSayText = get_user_msgid ("SayText");
	//
	g_MsgHud = CreateHudSyncObj();
	MaxPlayers = get_maxplayers();
	register_dictionary("army.txt" );
	//
	if(get_pcvar_num(gRestrictMaps))
	{
		new szMapName[64];
		get_mapname(szMapName,63);
		for(new a = 0; a < sizeof restrict_bonus; a++)
		{
			if(equal(szMapName, restrict_bonus[a]))
			{
				restr_blocked = true;
				log_amx("[army ranks] weapon menu is blocked on map [%s].",restrict_bonus[a]);
				break;
				} else {
				restr_blocked = false;
			}   
		}
	}
	//
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			g_vault = nvault_open("army_ranks");
		}
		case 1: 
		{
			set_task(0.1, "sql_init");
		}
		default: {
			g_vault = nvault_open("army_ranks");
		}
	}
	//
	if(get_pcvar_num(gArmyChat))
	{
		register_clcmd("say", "hookSay") 
		register_clcmd("say_team", "hookSayTeam");
	}
	register_clcmd("add_exp", "add_exp_post")
	register_clcmd("amx_setlevel", "admin_menu")
}
public plugin_cfg()
{
	new szCfgDir[64], szFile[192];
	get_configsdir(szCfgDir, charsmax(szCfgDir));
	formatex(szFile,charsmax(szFile),"%s/army_ranks.cfg",szCfgDir);
	if(file_exists(szFile))
		server_cmd("exec %s", szFile);
}
public fwHamPlayerSpawnPost(id)
{
	if(is_user_alive(id) && is_user_connected(id))
	{
		if(restr_blocked)
			return PLUGIN_CONTINUE;
		
		if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
			give_item(id,"weapon_flashbang");
		
		if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
			give_item(id,"weapon_smokegrenade");
		
		if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
			give_item(id,"weapon_hegrenade");
		
		if(get_pcvar_num(gHpbylevel) != 0)
			set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gLevel]);
		
		if(get_pcvar_num(gApbylevel) != 0)
			set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLevel]);   
		
		if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
		{
			GetWeapon(id);
			levelUp[id] = 0;
		}
	}
	return PLUGIN_CONTINUE
}
public bomb_defused(id)
{
	if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 2 || get_pcvar_num(gBombDefuseXp) < 1 || get_pcvar_num(gBomb) !=1)
		return
	
	if(get_playersnum() <= get_pcvar_num(gMinPlayers))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
		} else {
		UserData[id][gExp] += get_pcvar_num(gBombDefuseXp);
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"DEFUSE_XP",get_pcvar_num(gBombDefuseXp))
	}
}
public bomb_planted(id)
{
	if(!is_user_connected(id)|| !is_user_alive(id) || get_user_team(id) != 1 || get_pcvar_num(gBombPlantXp) < 1 || get_pcvar_num(gBomb) !=1)
		return
	
	if(get_playersnum() <= get_pcvar_num(gMinPlayers))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_PLAYERS")
		} else {
		UserData[id][gExp] += get_pcvar_num(gBombPlantXp);
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"PLANT_XP",get_pcvar_num(gBombPlantXp))
	}
}
//
public sql_init()
{
	new szTableName[64],szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
	get_pcvar_string(gTableName,szTableName,63);
	get_pcvar_string(gHost,szHost,63);
	get_pcvar_string(gUser,szUser,63);
	get_pcvar_string(gPassword,szPassword,63);
	get_pcvar_string(gDbName,szDbName,63);
	g_SqlTuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
	new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
	if(SqlConnection == Empty_Handle)
		set_fail_state(g_Error);
	
	new Handle:Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`exp` INT(10) NOT NULL,`level` INT(10) NOT NULL,PRIMARY KEY (id));", szTableName)
	if(!SQL_Execute(Queries))
	{
		SQL_QueryError(Queries,g_Error,charsmax(g_Error))
		set_fail_state(g_Error);
	}
	SQL_FreeHandle(Queries)
	SQL_FreeHandle(SqlConnection);
}
//
public plugin_end()
{
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			nvault_close(g_vault);
		}
		case 1: 
		{
			if(g_SqlTuple != Empty_Handle)
				SQL_FreeHandle(g_SqlTuple);
		}
		default: 
	{
		nvault_close(g_vault);
	}
}
}
//
public client_putinserver(id) // путинсервер)
{
for(new i = 0; i<PlData ; i++)
	UserData[id][i] = 0;
	
	load_data(id);
}
//
public client_disconnect(id)
{
	save_usr(id);
	for(new i = 0; i<PlData ; i++)
		UserData[id][i] = 0;
}
//
public check_level(id)
{
	if(UserData[id][gLevel] <= 0)
		UserData[id][gLevel] = 1;
	
	if(UserData[id][gExp] < 0)
		UserData[id][gExp] = 0;
	
	while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]]) 
	{
		UserData[id][gLevel]++;
		levelUp[id] = 1;
		switch(get_pcvar_num(gLevelUpmsg))
		{
			case 1: 
			{
				new szName[33];
				get_user_name(id, szName, 32);
				static buffer[192],len;
				len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
				len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL"); 
				len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
				len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
				ColorChat(0,NORMAL,buffer);
			}
			case 2:
			{
				new szName[33];
				get_user_name(id, szName, 32);
				static buffer[192],len;
				len = format(buffer, charsmax(buffer), "^4[^3Army Ranks^4]^1 %L ^4%s^1",LANG_PLAYER,"PLAYER",szName);
				len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL"); 
				len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
				len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
				ColorChat(id,NORMAL,buffer);
			}
		}
	}
}
public EventDeath()
{
	new iKiller = read_data(1);
	new iVictim = read_data(2);
	new head = read_data(3);
	if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
	{
		// if tk?
		if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
		{
			UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
			return PLUGIN_CONTINUE;
		}
		new weapon = get_user_weapon(iKiller);
		UserData[iKiller][gExp] += 1;
		if(weapon == CSW_KNIFE)
			UserData[iKiller][gExp] += 3;
		
		if(head)
			UserData[iKiller][gExp] += 2;
		
		if(weapon == CSW_HEGRENADE)
			UserData[iKiller][gExp] += 1;
		
		check_level(iKiller);
	}
	return PLUGIN_CONTINUE;
}
public EventRoundStart()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(is_user_alive(id) && is_user_connected(id))
		{
			if(restr_blocked)
				return PLUGIN_CONTINUE;
			
			if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
				give_item(id,"weapon_flashbang");
			
			if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
				give_item(id,"weapon_smokegrenade");
			
			if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
				give_item(id,"weapon_hegrenade");
			
			if(get_pcvar_num(gHpbylevel) != 0)
				set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gLevel]);
			
			if(get_pcvar_num(gApbylevel) != 0)
				set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLevel]);   
			
			if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
			{
				GetWeapon(id);
				levelUp[id] = 0;
			}
		}
	}
	return PLUGIN_CONTINUE;
}
////////// save
public load_data(id)
{
	new szName[33];
	get_user_name(id,szName,32);
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			static data[256], timestamp;
			if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
			{
				next_load_data(id, data, sizeof(data) - 1);
				return;
				} else {
				register_player(id,"");
			}
		}
		case 1: 
		{
			new szTableName[32],ErrorCode;
			new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
			SQL_QuoteString(SqlConnection, szName, 32, szName);
			get_pcvar_string(gTableName,szTableName,31);
			if(SqlConnection == Empty_Handle)
			{
				log_amx(g_Error);
				return ;
			}
			new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM %s WHERE name = '%s';",szTableName,szName)
			if(!SQL_Execute(Query))
			{
				SQL_QueryError(Query,g_Error,511);
				log_amx(g_Error);
				return ;
			}
			if(SQL_NumResults(Query) > 0 )
			{
				next_load_data(id, "", 0);
				} else {
				register_player(id,"");
			}
			SQL_FreeHandle(Query);
			SQL_FreeHandle(SqlConnection);
		}
		default: 
	{
		static data[256], timestamp;
		if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
		{
			next_load_data(id, data, sizeof(data) - 1);
			return;
			} else {
			register_player(id,"");
		}
	}
}
}
public next_load_data(id,data[],len)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
	case 0: 
	{
		replace_all(data,len,"|"," ");
		new exp[5],level[5];
		parse(data,exp,4,level,4);
		UserData[id][gExp]= str_to_num(exp);
		UserData[id][gLevel]= str_to_num(level);
	}
	case 1: 
	{
		new szTableName[32],ErrorCode;
		new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
		SQL_QuoteString(SqlConnection, szName, 32, szName);
		get_pcvar_string(gTableName,szTableName,31);
		if(SqlConnection == Empty_Handle)
		{
			log_amx(g_Error);
			return ;
		}
		new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id,exp,level FROM %s WHERE name = '%s';",szTableName,szName)
		if(!SQL_Execute(Query))
		{
			SQL_QueryError(Query,g_Error,511)
			log_amx(g_Error)
		}
		if( SQL_NumResults(Query) > 0)
		{
			UserData[id][gId]= SQL_ReadResult(Query,0); 
			UserData[id][gExp]= SQL_ReadResult(Query,1); 
			UserData[id][gLevel]= SQL_ReadResult(Query,2); 
		}
		SQL_FreeHandle(Query);
		SQL_FreeHandle(SqlConnection);
	}
	default: 
{
	replace_all(data,len,"|"," ");
	new exp[5],level[5];
	parse(data,exp,4,level,4);
	UserData[id][gExp]= str_to_num(exp);
	UserData[id][gLevel]= str_to_num(level);
}
}
// mini-check lvl_up
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;

while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]]) 
	UserData[id][gLevel]++;
}
public register_player(id,data[])
{
	new szName[33];
	get_user_name(id,szName,32);
	switch(get_pcvar_num(gSaveType))
	{
		case 0: 
		{
			UserData[id][gExp]= 0
			UserData[id][gLevel]= 1;
		}
		case 1: 
		{
			new szTableName[32],ErrorCode;
			new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
			SQL_QuoteString(SqlConnection, szName, 32, szName);
			get_pcvar_string(gTableName,szTableName,31);
			if(SqlConnection == Empty_Handle)
			{
				log_amx(g_Error);
				return ;
			}
			new Handle:Query = SQL_PrepareQuery(SqlConnection,"INSERT INTO %s (`id`,`name`,`exp`,`level`) VALUES (NULL,'%s','0','1');",szTableName,szName);
			if(!SQL_Execute(Query))
			{
				SQL_QueryError(Query,g_Error,511)
				log_amx(g_Error)
			}
			SQL_FreeHandle(Query);
			SQL_FreeHandle(SqlConnection);
			UserData[id][gExp] = 0;
			UserData[id][gLevel] = 1;
			get_user_id(id);
		}
		default: 
	{
		UserData[id][gExp]= 0;
		UserData[id][gLevel]= 1;
	}
}
}
public save_usr(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
	case 0: 
	{
		static data[256];
		formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
		nvault_set(g_vault, szName, data);
	}
	case 1: 
	{
		new szTemp[512],szTable[64];
		get_pcvar_string(gTableName,szTable,63);
		format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
		SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)
		
		server_print("==========================================");
		server_print("UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';",szTable,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId]);
		
	}
	default: 
{
	static data[256];
	formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
	nvault_set(g_vault, szName, data);
}
}
}
stock get_user_id(id)
{
new szName[33],ErrorCode;
get_user_name(id,szName,32);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM hmm WHERE name = '%s';",szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return;
}
if(SQL_NumResults(Query) > 0 )
UserData[id][gId]= SQL_ReadResult(Query,0);
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
///////// chat event
public hookSay(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
	return PLUGIN_CONTINUE;
	
	new message[192],Len;
	read_args(message, 191);
	remove_quotes(message);
	if(is_admin_msg(message))
		return PLUGIN_CONTINUE;
	
	if(is_empty_message(message))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG")
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(gSlash))
	{
		if(is_has_slash(message))
			return PLUGIN_HANDLED_MAIN
	}
	new szName[32];
	get_user_name(id,szName,31);
	if(is_user_admin(id))
	{
		Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
		switch(get_pcvar_num(gAdminGMsg))
		{
			case 1:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
			}
			case 2:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
			}
			default:
		{
			Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
			Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
		}
	}
	Chat(id,0,get_pcvar_num(gAllChat));
}
else 
{
	Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
	Chat(id,0,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
public hookSayTeam(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
	return PLUGIN_CONTINUE;
	
	new message[192],Len;
	read_args(message, 191);
	remove_quotes(message);
	if(is_admin_msg(message))
		return PLUGIN_CONTINUE;
	
	if(is_empty_message(message))
	{
		ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"EMPTY_MSG");
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(gSlash))
	{
		if(is_has_slash(message))
			return PLUGIN_HANDLED_MAIN
	}
	new szName[32];
	get_user_name(id,szName,31);
	if(is_user_admin(id))
	{
		Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);      
		switch(get_pcvar_num(gAdminGMsg))
		{
			case 1:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
			}
			case 2:
			{
				Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
			}
			default:
		{
			Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
		}
	}
	Chat(id,1,get_pcvar_num(gAllChat));
}
else 
{
	Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
	Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
	Chat(id,1,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
stock is_admin_msg(const Message[])
{
if(Message[0] == '@')
	return true;
	
	return false;
}
stock is_empty_message(const Message[])
{
	if(equal(Message, "") || !strlen(Message))
		return true;
	
	return false;
}
stock Chat(id,team,chat_type)
{
	if(team)
	{
		if(chat_type)
		{
			for(new i = 0; i <= MaxPlayers; i++)
			{
				if(!is_user_connected(i))
					continue
				
				if(get_user_team(id) == get_user_team(i))
					send_message(gMessage, id, i);
			}
			} else {
			if(is_user_alive(id))
			{
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || !is_user_alive(i))
						continue
					
					if(get_user_team(id) == get_user_team(i))
						send_message(gMessage, id, i);
				}
				} else if(!is_user_alive(id)){
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || is_user_alive(i))
						continue
					
					if(get_user_team(id) == get_user_team(i))
						send_message(gMessage, id, i);
				}
			}
		}
		} else{
		if(chat_type)
		{
			for(new i = 0; i <= MaxPlayers; i++)
			{
				if(!is_user_connected(i))
					continue
				
				send_message(gMessage, id, i);
			}
			} else {
			if(is_user_alive(id))
			{
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || !is_user_alive(i))
						continue
					
					send_message(gMessage, id, i);
				}
				} else if(!is_user_alive(id)){
				for(new i = 0; i <= MaxPlayers; i++)
				{
					if(!is_user_connected(i) || is_user_alive(i))
						continue
					
					send_message(gMessage, id, i);
				}
			}
		}
	}
}
stock send_message(const message[], const id, const i)
{
	message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
	write_byte(id)
	write_string(message)
	message_end()
}
stock is_has_slash(const Message[])
{
	if(Message[0] == '/')
		return true;
	
	return false;
}

public client_infochanged(id)
{
	new newname[32],oldname[32]
	get_user_info(id, "name", newname,31)
	get_user_name(id,oldname,31)
	if(!is_user_connected(id) || is_user_bot(id)) 
		return PLUGIN_CONTINUE
	
	if(!equali(newname, oldname))
	{
		new szTemp[512],szTable[64];
		get_pcvar_string(gTableName,szTable,63);
		format(szTemp,charsmax(szTemp),"UPDATE `%s` SET `name`='%s' WHERE `id`='%d';",szTable,newname,UserData[id][gId]);
		SQL_ThreadQuery(g_SqlTuple,"QueryHandler",szTemp)   
	}
	return PLUGIN_CONTINUE
}
public msg_SayText()
{
	new arg[32]
	get_msg_arg_string(2, arg, 31)
	if(containi(arg,"name")!=-1)
		return PLUGIN_HANDLED
	
	return PLUGIN_CONTINUE
}
/////////// natives
public plugin_natives()
{
	register_native("get_user_exp", "native_get_user_exp", 1);
	register_native("get_user_lvl", "native_get_user_lvl", 1);
	register_native("set_user_exp", "native_set_user_exp", 1);
	register_native("set_user_lvl", "native_set_user_lvl", 1);
	register_native("get_user_rankname", "native_get_user_rankname", 1);
}
public native_set_user_exp(id,num)
{
	UserData[id][gExp] = num;
}
public native_set_user_lvl(id,num)
{
	UserData[id][gLevel] = num;
}
public native_get_user_exp(id)
{
	return UserData[id][gExp];
}
public native_get_user_lvl(id)
{
	return UserData[id][gLevel];
}
public native_get_user_rankname(id)
{
	static szRankName[64];
	format(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
	
}
//////// informer
public Info()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(!is_user_bot(id) && is_user_connected(id))
		{
			set_hudmessage(100, 100, 100, 0.01, 0.13, 0, 1.0, 1.0, _, _, -1)
			
			static buffer[192], len;
			len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
			len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
			if(UserData[id][gLevel] <= 19)
			{
				len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
				} else {
				len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
			}
			ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
		}
	}
	return PLUGIN_CONTINUE
}
public StatusText()
{
	for(new id = 0; id <= MaxPlayers; id++)
	{
		if(!is_user_bot(id) && is_user_connected(id) && is_user_alive(id))
		{
			static buffer[100], len;
			len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
			if(UserData[id][gLevel] <= 19)
			{
				len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_XP_STEXT",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
				} else {
				len += format(buffer[len], charsmax(buffer) - len, " | %L",LANG_PLAYER,"PL_MAX");
			}
			message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
			write_byte(0)
			write_string(buffer)
			message_end();
		}
	}
}
/////// weap menu per lvl
public GetWeapon(id)
{
	new szText[700 char];
	formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
	new menu = menu_create( szText, "gw_menu" );
	//
	formatex( szText, charsmax( szText ), "awp");
	menu_additem( menu, szText, "1", 0 );
	//
	formatex( szText, charsmax( szText ), "ak-47");
	menu_additem( menu, szText, "2", 0 );
	//
	formatex( szText, charsmax( szText ), "m4a1");
	menu_additem( menu, szText, "3", 0 );
	//
	formatex( szText, charsmax( szText ), "famas");
	menu_additem( menu, szText, "4", 0 );
	//
	menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
	if( item == MENU_EXIT )
	{
		return PLUGIN_HANDLED;
	}
	
	new data[ 6 ], iName[ 64 ], access, callback;
	menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
	new key = str_to_num( data );
	switch( key )
	{
		case 1:
		{
			give_item(id,"weapon_awp");
			cs_set_user_bpammo( id, CSW_AWP, 100);
		}
		case 2:
		{
			give_item(id,"weapon_ak47");
			cs_set_user_bpammo( id, CSW_AK47, 200);
		}
		case 3:
		{
			give_item(id,"weapon_m4a1");
			cs_set_user_bpammo( id, CSW_M4A1, 200);
		}
		case 4:
		{
			give_item(id,"weapon_famas");
			cs_set_user_bpammo( id, CSW_FAMAS, 200);
		}
	}
	
	return PLUGIN_HANDLED;
}
public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
	switch(FailState)
	{
		case -2: log_amx("[Army Ranks] Failed to connect (%d): %s", Errcode, Error);
			case -1: log_amx("[Army Ranks] (%d): %s", Errcode, Error);
		}
	return PLUGIN_HANDLED
}
public fw_ServerDown() 
{ 
	for(new i = 0; i <= MaxPlayers; i++)
	{
		if(is_user_connected(i))
			save_usr(i)
	}
}
public admin_menu(id)
{
	new szText[700 char];
	formatex( szText, charsmax( szText ), "%L", id, "ARMY_MENU");
	new menu = menu_create( szText, "admin_menu_hl" );
	//
	formatex( szText, charsmax( szText ), "%L", id, "ADD_EXP");
	menu_additem( menu, szText, "1", 0 );
	formatex( szText, charsmax( szText ), "%L", id, "SET_LVL");
	menu_additem( menu, szText, "2", 0 );
	//
	menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}
public admin_menu_hl(id,menu,item)
{
	if( item == MENU_EXIT )
	{
		return PLUGIN_HANDLED;
	}
	
	new data[ 6 ], iName[ 64 ], access, callback;
	menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
	new key = str_to_num( data );
	switch( key )
	{
		case 1:
		{
			give_exp_menu(id);
		}
		case 2:
		{
			set_level_menu(id)
		}
	}
	
	return PLUGIN_HANDLED;
}
public give_exp_menu(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		new players[32], num;
		get_players(players, num)
		new tempname[32], info[10];
		new players_menu = menu_create("Выберите игрока :", "give_exp_hl")
		for(new i = 0; i < num; i++)
		{
			get_user_name(players[i], tempname, 31);
			num_to_str(players[i], info, 9);
			menu_additem(players_menu, tempname, info, 0);
		}
		menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, players_menu, 0);
	}
	return PLUGIN_CONTINUE
}
public give_exp_hl(id, players_menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(players_menu)
		return PLUGIN_HANDLED
	}
	new data[6],accessmenu, iName[64], callback;
	menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback)
	new player = str_to_num(data)
	client_cmd(id, "messagemode ^"add_exp %i^"", player);
	ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"TYPE_AMOUNT");
	return PLUGIN_CONTINUE
}

public add_exp_post(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		new param[10]
		read_argv(2, param, charsmax(param))
		for (new x; x < strlen(param); x++)
		{
			if(!isdigit(param[x]))
			{ 
				ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MUST_NUM")
				give_exp_menu(id)
				return PLUGIN_HANDLED
			}
		}
		new amount = str_to_num(param);
		if (amount < 1)
		{
			ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MIN_EXP") 
			give_exp_menu(id)
			return PLUGIN_HANDLED
		}
		if (amount > 999)
		{
			ColorChat(id,NORMAL,"^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"MAX_EXP")  
			give_exp_menu(id)
			return PLUGIN_HANDLED
		}
		read_argv(1, param, charsmax(param))
		new player = str_to_num(param)   
		//
		UserData[player][gExp] += amount;
		if(UserData[player][gLevel] <= 0)
			UserData[player][gLevel] = 1;
		
		while(UserData[player][gExp] >= gLevels[UserData[player][gLevel]]) 
			UserData[player][gLevel]++;
		//      
		new names[2][32]
		get_user_name(id, names[0], 31)
		get_user_name(player, names[1], 31)
		ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L",LANG_PLAYER,"ADMIN_ADD", names[0], amount, names[1]);
		save_usr(player);
	}
	return PLUGIN_HANDLED
}
public set_level_menu(id)
{
	if(get_user_flags(id) & ADM_MENU)
	{
		UserData[id][gTempKey] = 0;
		new players[32], num;
		get_players(players, num)
		new tempname[32], info[10];
		new players_menu = menu_create("Выберите игрока :", "set_level_hl")
		for(new i = 0; i < num; i++)
		{
			get_user_name(players[i], tempname, 31);
			num_to_str(players[i], info, 9);
			menu_additem(players_menu, tempname, info, 0);
		}
		menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL);
		menu_display(id, players_menu, 0);
	}
	return PLUGIN_CONTINUE
}
public set_level_hl(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], _access, callback;
	menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
	UserData[id][gTempKey] = str_to_num(data);
	set_level_pl(id);
	return PLUGIN_CONTINUE
}
public set_level_pl(id)
{
	static szText[1024];
	formatex(szText,charsmax(szText), "%L", id, "CHOOSE_RANKN");
	new menu = menu_create( szText, "set_level_phl");
	//======
	for(new i = 1; i < sizeof(gRankNames); i++)
	{
		new szItem[100],lang[10],num[5];
		format(lang,9,"I_%d",i);
		format(num,4,"%d",i);
		formatex(szItem,charsmax(szItem),"%L",id,lang);
		menu_additem(menu,szItem,num);
	}
	//======
	menu_setprop(menu, MPROP_BACKNAME, "Назад ");
	menu_setprop(menu, MPROP_NEXTNAME, "Далее ");
	menu_setprop(menu, MPROP_EXITNAME, "Выход ");
	menu_display( id, menu,0);
	return PLUGIN_CONTINUE;
}
public set_level_phl(id,menu,item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	new data[6], _access, callback;
	menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
	new level = str_to_num(data);
	if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
	{
		UserData[UserData[id][gTempKey]][gLevel] = level;
		UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
		new szName[2][32];
		get_user_name(id, szName[0], 31);
		get_user_name(UserData[id][gTempKey], szName[1], 31);
		ColorChat(0, NORMAL, "^4[^3Army Ranks^4]^1 %L %L %s",LANG_PLAYER,"ADMIN_LEVEL", szName[0],LANG_PLAYER,gRankNames[level],szName[1])
		save_usr(UserData[id][gTempKey]);
		} else {
		set_level_menu(id);
	}
	UserData[id][gTempKey] = 0;
	return PLUGIN_HANDLED;
}
We are Anonymous
We are Legion
We Fight Corruption
We Fight for The Truth
We Fight for Freedom
We Do NOT Forgive
We Do NOT Forget

EXPECT US!

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Ранк Система Еррор

Мнение от OciXCrom » 11 Яну 2018, 12:42

@LuciFeR - махнал си един ред с което изцяло си развалил въпросната функция и нищо друго. Грешката изобщо не е там, където си направил промяната. Точно и ясно си пише, че има проблем с ползването на SQL_ThreadQuery. Не мога да помогна, тъй като никога не съм работил със sql.

Аватар
AbeN
Извън линия
Потребител
Потребител
Мнения: 21
Регистриран на: 08 Яну 2018, 21:44
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Ранк Система Еррор

Мнение от AbeN » 11 Яну 2018, 13:13

а опцията да се премахне въпросния SQL_ThreadQuery има ли

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Ранк Система Еррор

Мнение от TheRedShoko » 11 Яну 2018, 16:26

Научете се, че плъгина си казва точно и ясно какъв му е проблема. От вас се иска само да копирате цялата грешка. Реда, който е преди Displaying debug trace е изключително важен. Има поне 3 причини, които ще доведат до тази грешка, но ако не видя първият ред от грешката...

Аватар
AbeN
Извън линия
Потребител
Потребител
Мнения: 21
Регистриран на: 08 Яну 2018, 21:44
Се отблагодари: 2 пъти
Получена благодарност: 2 пъти
Обратна връзка:

Ранк Система Еррор

Мнение от AbeN » 03 Фев 2018, 18:41

Може ли някой да премахне всичко свързано с mysql-а

Аватар
DoPe ;]]
Извън линия
Потребител
Потребител
Мнения: 402
Регистриран на: 27 Фев 2017, 22:10
Обратна връзка:

Ранк Система Еррор

Мнение от DoPe ;]] » 03 Фев 2018, 19:34

Код за потвърждение: Избери целия код

#include             <amxmodx>
#include             <amxmisc>
#include             <cstrike>
#include             <fvault>
#include             <colorchat>
#include             <fakemeta>
#include            <fakemeta_util>
#include             <fun>
#include             <hamsandwich>

#define ADMIN_ONE        ADMIN_CVAR
#define ADMIN_TWO        ADMIN_LEVEL_D
#define ADMIN_THREE        ADMIN_BAN
#define ADMIN_FOUR        ADMIN_LEVEL_A
#define ADMIN_FIVE        ADMIN_LEVEL_B
#define ADMIN_SIX        ADMIN_RESERVATION

#define MaxLevels         21
#define IsPlayer(%1)         (1 <= %1 <=  g_iMaxPlayers)

new MaxPlayers, syncObj, Lvl[33], XP[33], iPrefix
new ranks_hud, knife_xp, he_xp, hs_xp, kill_xp, suicide_xp, killer_msg
new UseAdminPrefixes, UseRankSystem, UseBoth
new HUDR,HUDG,HUDB,HUDX,HUDY, HUDEFFECT
new sayText, teamInfo, szArgs[192], temp_flag[2]
new Vip, VipFlag

new const g_vault_name[] = "ranks";

new const Levels[MaxLevels+1] =
{
25,
50,
75,
100,
130,
160,
200,
240,
280,
350,
400,
450,
500,
600,
700,
800,
1000,
1500,
2000
}

new const Prefix[MaxLevels][] =
{
"Bronze I",
"Bronze II",
"Bronze III",
"Bronze IV",
"Bronze V",
"Silver I",
"Silver II",
"Silver III",
"Silver IV",
"Silver V",
"Gold I",
"Gold II",
"Gold III",
"Gold IV",
"Gold V",
"Diamond I",
"Diamond II",
"Diamond III",
"Diamond IV",
"Diamond V",
"Server God"
}

new const szTag[][] = {
    "",
    "Head Admin",               //Flag from users.ini <l>
    "Moderator",                //Flag from users.ini <g>
    "Server Admin",             //Flag from users.ini <d>
    "Test Admin",               //Flag from users.ini <m>
    "SMS Admin",                //Flag from users.ini <n>
    "V.I.P"                     //Flag from users.ini <b>
}

public plugin_init()
{
    register_plugin("Admin Prefixes & Rank System", "1.1", "YankoNL");
    
    register_clcmd ("say", "hook_say")
    register_clcmd ("say_team", "hook_teamsay")
    
    Vip = register_cvar("Vip_On/Off", "1")
    VipFlag = register_cvar("Vip_Flag", "b")
    
    register_event("DeathMsg","DeathMessage","a")
    
    register_clcmd("say /myrank", "cmdRank")
    register_clcmd("say_team /myrank", "cmdRank")
    register_clcmd("say /xp", "cmdRank")
    register_clcmd("say_team /xp", "cmdRank")

    UseAdminPrefixes = register_cvar("Admin_Prefixes_On/Off", "0")
    UseRankSystem = register_cvar("Rank_Prefixes_On/Off", "0")
    UseBoth = register_cvar("Use_Both_AdminPrefix_Rank", "1")

    ranks_hud = register_cvar("ranks_hud", "1")
    iPrefix = register_cvar("rank_prefix", "Ranks");
    knife_xp = register_cvar("knife_xp", "3")
    he_xp = register_cvar("he_grenade_xp", "3")
    hs_xp = register_cvar("headshot_xp", "2")
    kill_xp = register_cvar("kill_xp", "1")
    suicide_xp = register_cvar("suicide_xp", "0")
    killer_msg = register_cvar("kill_message", "0")
    
    
    HUDR = register_cvar("hud_color_red", "139")
    HUDG = register_cvar("hud_color_green", "0")
    HUDB = register_cvar("hud_color_blue", "139")
    HUDX = register_cvar("hud_position_X", "0.01")
    HUDY = register_cvar("hud_position_Y", "0.14")
    HUDEFFECT = register_cvar("hud_effects", "0")
    
    sayText = get_user_msgid("SayText")
    teamInfo = get_user_msgid("TeamInfo")
    register_message(sayText, "avoid_duplicated")
    
    
    register_concmd ("rank_givexp", "CmdAddXP", ADMIN_LEVEL_A, "<nick | ct | t | @all> <xp>")
    register_concmd ("rank_takexp", "CmdRemoveXP", ADMIN_LEVEL_A, "<nick | ct | t | @all> <xp>")
    
    register_forward( FM_ClientKill, "Fwd_Kill" );
    
    MaxPlayers = get_maxplayers()

    syncObj = CreateHudSyncObj()

    fvault_load(g_vault_name)
}
public getPrefix()
{
    new Prefix[33]
    get_pcvar_string(iPrefix, Prefix, 32)
    return Prefix
}
public ShowHud(id)
{
set_hudmessage(get_pcvar_num(HUDR), get_pcvar_num(HUDG), get_pcvar_num(HUDB), get_pcvar_float(HUDX), get_pcvar_float(HUDY), get_pcvar_num(HUDEFFECT), 6.0, 1.0, 0.0, 0.0, -1)
if(MaxLevels == Lvl[id]+1)
ShowSyncHudMsg(id, syncObj,"Rank: %s^nXP: %d", Prefix[Lvl[id]], XP[id])
else
ShowSyncHudMsg(id, syncObj,"Rank: %s/%s^nXP: %d/%d",Prefix[Lvl[id]], Prefix[Lvl[id]+1], XP[id], Levels[Lvl[id]+1])
}
public cmdRank(id)
{
    if(MaxLevels == Lvl[id]+1)
        ColorChat(id, NORMAL, "^4[%s]^3 My Rank^1:^4 %s^1 | ^3Level^1: ^4%d ^1| ^3XP^1: ^4%d^1.", getPrefix(), Prefix[Lvl[id]], Lvl[id]+1, XP[id])
    else
        ColorChat(id, NORMAL, "^4[%s]^3 My Rank^1:^4 %s^1 | ^3Level^1: ^4%d ^1/ ^4%d ^1| ^3XP^1: ^4 %d ^1/ ^4%d ^1to become ^4%s^1.",getPrefix(), Prefix[Lvl[id]], Lvl[id]+1, MaxLevels, XP[id], Levels[Lvl[id]+1], Prefix[Lvl[id]+1])
}

public client_putinserver(id)
{
if(get_pcvar_num(ranks_hud) == 1)
set_task(1.0, "ShowHud", id, _, _, "b")

new currentPlayerRank = 0;
while(currentPlayerRank < (MaxLevels - 1))
{       
    if(XP[id] >= Levels[currentPlayerRank + 1])
        ++currentPlayerRank;     
    else         
        break;
}
Lvl[id] = currentPlayerRank;
}
public Fwd_Kill(id)
{
    if(is_user_alive(id)) {
        XP[id] -= get_pcvar_num(suicide_xp)
        CheckLevel(id)
        Save(id)
        if(get_pcvar_num(killer_msg) == 1)
            ColorChat(id, RED, "^4[%s]^1 You committed ^3suicide ^1and ^3lost^4 %d XP^1.", getPrefix(),  get_pcvar_num(suicide_xp))

            
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public DeathMessage()
{       
    new killer = read_data(1);
    new victim = read_data(2);
    new headshot = read_data(3);
    new Weapon[ 32 ];
    read_data( 4, Weapon, charsmax( Weapon ) );
    
    format( Weapon, charsmax( Weapon ), "weapon_%s", Weapon );
    
    if( contain( Weapon, "nade" ) >= 0 )
    Weapon = "weapon_hegrenade"
    
    
    new iWeapon = get_weaponid( Weapon );
    
    if(killer == victim)
        return PLUGIN_CONTINUE;
    if(!killer || killer > MaxPlayers)
        return PLUGIN_CONTINUE;
    
    new victim_name[32];
    get_user_name(victim, victim_name, 31);
    
    get_pcvar_string(VipFlag, temp_flag, charsmax(temp_flag));
    
    
    if(iWeapon == CSW_HEGRENADE)
    {
    
        if(get_pcvar_num(Vip) == 1 && get_user_flags(killer) & read_flags(temp_flag)) {
            XP[killer] += get_pcvar_num(he_xp)*2
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1) {
                ColorChat(killer, RED, "^4[%s]^1 You killed ^4%s^1 with ^3HE Grenade^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus 2X^1]" , getPrefix(),victim_name,  get_pcvar_num(he_xp)*2)
                return PLUGIN_CONTINUE
            }
        } else {
            XP[killer] += get_pcvar_num(he_xp)
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1){
                ColorChat(killer, RED, "^4[%s]^1 You killed ^4%s^1 with ^3HE Grenade^1 and got^4 %d XP^1.", getPrefix(),victim_name,  get_pcvar_num(he_xp))
                return PLUGIN_CONTINUE
            }
        }
    }
    if(iWeapon == CSW_KNIFE)
    {
        if(get_pcvar_num(Vip) == 1 && get_user_flags(killer) & read_flags(temp_flag)) {
            XP[killer] += get_pcvar_num(knife_xp)*2
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1) {
                ColorChat(killer, RED, "^4[%s]^1 You killed ^4%s^1 with ^3Knife^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus 2X^1]", getPrefix(),victim_name,  get_pcvar_num(knife_xp)*2)
                return PLUGIN_CONTINUE
            }
        } else {
            XP[killer] += get_pcvar_num(knife_xp)
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1){
                ColorChat(killer, GREY, "^4[%s]^1 You killed ^4%s^1 with ^3Knife^1 and got^4 %d XP^1.", getPrefix(),victim_name, get_pcvar_num(knife_xp))
                return PLUGIN_CONTINUE
            }
        }
    }
    
    
    if(headshot)
    {
        if(get_pcvar_num(Vip) == 1 && get_user_flags(killer) & read_flags(temp_flag)) {
            XP[killer] += get_pcvar_num(hs_xp)*2
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1){
                ColorChat(killer, BLUE, "^4[%s]^1 You killed ^4%s^1 with ^3Head^4Shot^1 and got^4 %d XP^1.[ ^4 V.I.P Bonus 2X^1]", getPrefix(),victim_name, get_pcvar_num(hs_xp)*2)
                return PLUGIN_CONTINUE
            }
        } else {
            XP[killer] += get_pcvar_num(hs_xp)
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1) {
                ColorChat(killer, BLUE, "^4[%s]^1 You killed ^4%s^1 with ^3Head^4Shot^1 and got^4 %d XP^1.", getPrefix(),victim_name, get_pcvar_num(hs_xp))
                return PLUGIN_CONTINUE
            }
        }
    }
    else
    {
        if(get_pcvar_num(Vip) == 1 && get_user_flags(killer) & read_flags(temp_flag)) {
            XP[killer] += get_pcvar_num(kill_xp)*2
            CheckLevel(killer)
            Save(killer)
            if(get_pcvar_num(killer_msg) == 1) {
                ColorChat(killer, NORMAL, "^4[%s]^1 You killed ^4%s^1 and got^4 %d XP^1.[ ^4V.I.P Bonus 2X^1]", getPrefix(),victim_name, get_pcvar_num(kill_xp)*2)
                return PLUGIN_CONTINUE
            }
        } else {
        XP[killer] += get_pcvar_num(kill_xp)
        CheckLevel(killer)
        Save(killer)
        if(get_pcvar_num(killer_msg) == 1){
            ColorChat(killer, RED, "^4[%s]^1 You killed ^4%s^1 and got^4 %d XP^1.", getPrefix(),victim_name, get_pcvar_num(kill_xp))
            return PLUGIN_CONTINUE
            }
        }
    }
    CheckLevel(killer)
    Save(killer)
    return PLUGIN_CONTINUE
}

public CheckLevel(id)
{        
    new currentPlayerRank = 0;
    while(currentPlayerRank < (MaxLevels - 1))
    {       
        if(XP[id] >= Levels[currentPlayerRank + 1])
            ++currentPlayerRank;     
        else         
            break;
    }
    Lvl[id] = currentPlayerRank;
}

public client_connect(id)
{
    Load(id)
}


public client_disconnect(id)
{
    Save(id)
    XP[id] = 0
    Lvl[id] = 0
    remove_task(id)
}

public CmdAddXP (index, level, cid)
{
    if(!cmd_access(index, level, cid, 3)) return PLUGIN_HANDLED;
    
    new arg [32]
    read_argv (1, arg, 31)
    
    new AddXP [32]
    read_argv (2, AddXP, charsmax (AddXP))
    
    new XPtoGive = str_to_num (AddXP)
    
    new AdminName [32]
    new TargetName [32]
    get_user_name (index, AdminName, charsmax (AdminName))
    
    if(arg[0]=='@')
    {
        if(equali(arg[1],"All") || equali(arg[1],"ALL"))
        {
            new players[32], totalplayers, All
            get_players(players, totalplayers)
            
            for (new i = 0; i < totalplayers; i++)
            {
                All = players[i]
                
                XP[All] += XPtoGive
            }
            
            CheckLevel(All)
            ColorChat(0, NORMAL, "^4[%s] ^1ADMIN: ^3%s^1 gave^4 %i XP^1 to everyone!", getPrefix(), AdminName, XPtoGive)
        }
        else if(equali(arg[1],"T") || equali(arg[1],"t"))
        {
            new players[32], totalplayers, T
            get_players(players, totalplayers)
            
            for (new i = 0; i < totalplayers; i++)
            {
                if (get_user_team(players[i]) == 1)
                {
                    T = players[i]
                    
                    XP[T] += XPtoGive
                }
            }
            
            CheckLevel(T)
            ColorChat(0, RED, "^4[%s]^1 ADMIN: ^4%s ^1gave ^4%i XP ^1to all ^3Terrorists^1.", getPrefix(), AdminName, XPtoGive)
        }
        else if(equali(arg[1],"CT") || equali(arg[1],"ct"))
        {
            new players[32], totalplayers, CT
            get_players(players, totalplayers)
            
            for(new i = 0; i < totalplayers; i++)
            {
                if(get_user_team(players[i]) == 2)
                {
                    CT = players[i]
                    
                    XP[CT] += XPtoGive
                }
            }
            
            CheckLevel(CT)
            ColorChat(0, BLUE, "^4[%s]^1ADMIN: ^4%s^1 gave^4 %i XP^1to all ^3Counter-Terrorists^1.", getPrefix(), AdminName, XPtoGive)
        }
    }
    else
    {
        new iTarget = cmd_target(index, arg, 3)
        get_user_name (iTarget, TargetName, charsmax (TargetName))
        
        if(iTarget)
        {
            XP[iTarget] += XPtoGive
            
            CheckLevel(iTarget)
            ColorChat(0, NORMAL, "^4[%s]^1 ADMIN: ^3%s^1 gave^4 %i XP^1 to^4 %s^1.", getPrefix(), AdminName, XPtoGive, TargetName)
        }
    }
    return PLUGIN_HANDLED
}
public CmdRemoveXP (index, level, cid)
{
    if(!cmd_access(index, level, cid, 3)) return PLUGIN_HANDLED;
    
    new arg [32]
    read_argv (1, arg, 31)
    
    new RemoveXP [32]
    read_argv (2, RemoveXP, charsmax (RemoveXP))
    
    new XPtoTook = str_to_num (RemoveXP)
    
    new AdminName [32]
    new TargetName [32]
    get_user_name (index, AdminName, charsmax (AdminName))
    
    if(arg[0]=='@')
    {
        if(equali(arg[1],"All") || equali(arg[1],"ALL"))
        {
            new players[32], totalplayers, All
            get_players(players, totalplayers)
            
            for (new i = 0; i < totalplayers; i++)
            {
                All = players[i]
                
                XP[All] -= XPtoTook
            }
            
            CheckLevel(All)
            ColorChat(0, NORMAL, "^4[%s] ^1ADMIN: ^3%s^1 took^4 %i XP^1 from everyone!", getPrefix(), AdminName, XPtoTook)
        }
        else if(equali(arg[1],"T") || equali(arg[1],"t"))
        {
            new players[32], totalplayers, T
            get_players(players, totalplayers)
            
            for (new i = 0; i < totalplayers; i++)
            {
                if (get_user_team(players[i]) == 1)
                {
                    T = players[i]
                    
                    XP[T] -= XPtoTook
                }
            }
            
            CheckLevel(T)
            ColorChat(0, RED, "^4[%s]^1 ADMIN: ^4%s ^1took ^4%i XP ^1from all ^3Terrorists^1.", getPrefix(), AdminName, XPtoTook)
        }
        else if(equali(arg[1],"CT") || equali(arg[1],"ct"))
        {
            new players[32], totalplayers, CT
            get_players(players, totalplayers)
            
            for(new i = 0; i < totalplayers; i++)
            {
                if(get_user_team(players[i]) == 2)
                {
                    CT = players[i]
                    
                    XP[CT] -= XPtoTook
                }
            }
            
            CheckLevel(CT)
            ColorChat(0, BLUE, "^4[%s]^1ADMIN: ^4%s^1 took^4 %i XP^1from all ^3Counter-Terrorists^1.", getPrefix(), AdminName, XPtoTook)
        }
    }
    else
    {
        new iTarget = cmd_target(index, arg, 3)
        get_user_name (iTarget, TargetName, charsmax (TargetName))
        
        if(iTarget)
        {
            XP[iTarget] -= XPtoTook
            
            CheckLevel(iTarget)
            ColorChat(0, NORMAL, "^4[%s]^1 ADMIN: ^3%s^1 took^4 %i XP^1 from^4 %s^1.", getPrefix(), AdminName, XPtoTook, TargetName)
        }
    }
    return PLUGIN_HANDLED
}

public avoid_duplicated(msgId, msgDest, receiver)
{
    return PLUGIN_HANDLED
}

public hook_say(id)
{
if(!is_user_connected(id)) {
    return PLUGIN_HANDLED_MAIN
}

read_args(szArgs, 191)
remove_quotes(szArgs)
    
// Gungame commands and empty messages
if(szArgs[0] == '@' || szArgs[0] == '/' || szArgs[0] == '!' || szArgs[0] == '#' || szArgs[0] == '$' || equal(szArgs, "")) // Ignores Admin Hud Messages, Admin Slash commands
    return PLUGIN_CONTINUE

new iAlive = is_user_alive(id)
new CsTeams:iTeam = cs_get_user_team(id)

new iPlayers[ 32 ], iNum
get_players(iPlayers, iNum)

new szName[32]
get_user_name(id, szName, sizeof szName-1)

new const szPrefixes[2][CsTeams][] = {
{
    "^1*DEAD* ",
    "^1*DEAD* ",
    "^1*DEAD* ",
    "^1*SPEC* "
},
{
    "",
    "",
    "",
    ""
}
}
if(get_pcvar_num(UseAdminPrefixes) == 1){

set_pcvar_num(UseRankSystem, 0)
set_pcvar_num(UseBoth, 0)

new iAdmin = 0, iFlags = get_user_flags(id)

if(iFlags & ADMIN_ONE)
                iAdmin = 1
else if(iFlags & ADMIN_TWO)
                iAdmin = 2
else if(iFlags & ADMIN_THREE)
                iAdmin = 3
else if(iFlags & ADMIN_FOUR)
                iAdmin = 4
else if(iFlags & ADMIN_FIVE)
                iAdmin = 5
else if(iFlags & ADMIN_SIX)
                iAdmin = 6

    
    
if(iFlags & ADMIN_ONE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_TWO) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_THREE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FOUR) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FIVE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_SIX) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else {
if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
}else if(cs_get_user_team(id) == CS_TEAM_T) {
    ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
    }
}

return PLUGIN_HANDLED_MAIN
}

if(get_pcvar_num(UseRankSystem) == 1){
    
set_pcvar_num(UseAdminPrefixes, 0)
set_pcvar_num(UseBoth, 0)
    
new iFlags = get_user_flags(id)
    
if(iFlags & ADMIN_ONE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_TWO) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_THREE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FOUR) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FIVE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_SIX) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else {
if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
}else if(cs_get_user_team(id) == CS_TEAM_T) {
    ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
    }
}

return PLUGIN_HANDLED_MAIN
}

if(get_pcvar_num(UseBoth) == 1){
    
set_pcvar_num(UseAdminPrefixes, 0)
set_pcvar_num(UseRankSystem, 0)
    
new iAdmin = 0, iFlags = get_user_flags(id)

if(iFlags & ADMIN_ONE)
                iAdmin = 1
else if(iFlags & ADMIN_TWO)
                iAdmin = 2
else if(iFlags & ADMIN_THREE)
                iAdmin = 3
else if(iFlags & ADMIN_FOUR)
                iAdmin = 4
else if(iFlags & ADMIN_FIVE)
                iAdmin = 5
else if(iFlags & ADMIN_SIX)
                iAdmin = 6

    
    
if(iFlags & ADMIN_ONE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_TWO) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_THREE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FOUR) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FIVE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_SIX) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^1[^4%s^1] ^3[^4%s^3] ^3%s : ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
}  else {
if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, BLUE, "%s^1[^4%s^1] ^3%s : ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
}else if(cs_get_user_team(id) == CS_TEAM_T) {
    ColorChat(0, RED, "%s^1[^4%s^1] ^3%s : ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
    }
}
return PLUGIN_HANDLED_MAIN
}

if(get_pcvar_num(UseAdminPrefixes) == 0 && get_pcvar_num(UseRankSystem) == 0 && get_pcvar_num(UseBoth) == 0)
{
    if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, NORMAL, "%s^3%s^1: %s", szPrefixes[iAlive][iTeam], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, NORMAL, "%s^3%s^1: %s", szPrefixes[iAlive][iTeam],szName, szArgs)
    }
    
}
return PLUGIN_HANDLED_MAIN
}

public hook_teamsay(id) {
if(!is_user_connected(id)) {
    return PLUGIN_HANDLED_MAIN
}

read_args(szArgs, 191)
remove_quotes(szArgs)
    
// Gungame commands and empty messages
if(szArgs[0] == '@' || szArgs[0] == '/' || szArgs[0] == '!' || szArgs[0] == '#' || szArgs[0] == '$' || equal(szArgs, "")) // Ignores Admin Hud Messages, Admin Slash commands
    return PLUGIN_CONTINUE

new iAlive = is_user_alive(id)
new CsTeams:iTeam = cs_get_user_team(id)

new iPlayers[32], iNum
get_players(iPlayers, iNum)

new szName[32]
get_user_name(id, szName, sizeof szName-1)

new const szPrefixes[2][CsTeams][] = {
{
    "^3(Spectator) ",
    "^1*DEAD* ^3(Terrorist) ",
    "^1*DEAD* ^3(Counter-Terrorist) ",
    "^3(Spectator) "
},
{
"^3(Spectator) ",
"^3(Terrorist) ",
"^3(Counter-Terrorist) ",
"^3(Spectator) "
}
}
if(get_pcvar_num(UseAdminPrefixes) == 1){

set_pcvar_num(UseRankSystem, 0)
set_pcvar_num(UseBoth, 0)

new iAdmin = 0, iFlags = get_user_flags(id)

if(iFlags & ADMIN_ONE)
                iAdmin = 1
else if(iFlags & ADMIN_TWO)
                iAdmin = 2
else if(iFlags & ADMIN_THREE)
                iAdmin = 3
else if(iFlags & ADMIN_FOUR)
                iAdmin = 4
else if(iFlags & ADMIN_FIVE)
                iAdmin = 5
else if(iFlags & ADMIN_SIX)
                iAdmin = 6

    
    
if(iFlags & ADMIN_ONE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_TWO) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_THREE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FOUR) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FIVE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_SIX) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],szTag[iAdmin], szName, szArgs)
    }
} else {
if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^4: ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
}else if(cs_get_user_team(id) == CS_TEAM_T) {
    ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^4: ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
    }
}

return PLUGIN_HANDLED_MAIN
}

if(get_pcvar_num(UseRankSystem) == 1){
    
set_pcvar_num(UseAdminPrefixes, 0)
set_pcvar_num(UseBoth, 0)
    
new iFlags = get_user_flags(id)
    
if(iFlags & ADMIN_ONE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_TWO) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_THREE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FOUR) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FIVE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_SIX) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam],Prefix[Lvl[id]], szName, szArgs)
    }
} else {
if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^4: ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
}else if(cs_get_user_team(id) == CS_TEAM_T) {
    ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^4: ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
    }
}

return PLUGIN_HANDLED_MAIN
}

if(get_pcvar_num(UseBoth) == 1){
    
set_pcvar_num(UseAdminPrefixes, 0)
set_pcvar_num(UseRankSystem, 0)
    
new iAdmin = 0, iFlags = get_user_flags(id)

if(iFlags & ADMIN_ONE)
                iAdmin = 1
else if(iFlags & ADMIN_TWO)
                iAdmin = 2
else if(iFlags & ADMIN_THREE)
                iAdmin = 3
else if(iFlags & ADMIN_FOUR)
                iAdmin = 4
else if(iFlags & ADMIN_FIVE)
                iAdmin = 5
else if(iFlags & ADMIN_SIX)
                iAdmin = 6

    
    
if(iFlags & ADMIN_ONE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_TWO) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_THREE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FOUR) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_FIVE) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else 
if(iFlags & ADMIN_SIX) {
    if(cs_get_user_team(id) == CS_TEAM_CT) {
        ColorChat(0, BLUE, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, RED, "%s^3[^4%s^3] ^3[^4%s^3] ^3%s^1: ^4%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szTag[iAdmin], szName, szArgs)
    }
} else {
if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, BLUE, "%s^3[^4%s^3] ^3%s^4: ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
}else if(cs_get_user_team(id) == CS_TEAM_T) {
    ColorChat(0, RED, "%s^3[^4%s^3] ^3%s^4: ^1%s", szPrefixes[iAlive][iTeam], Prefix[Lvl[id]], szName, szArgs)
    }
}
return PLUGIN_HANDLED_MAIN
}

if(get_pcvar_num(UseAdminPrefixes) == 0 && get_pcvar_num(UseRankSystem) == 0 && get_pcvar_num(UseBoth) == 0)
{
    if(cs_get_user_team(id) == CS_TEAM_CT) {
    ColorChat(0, NORMAL, "%s^3%s^1: %s", szPrefixes[iAlive][iTeam], szName, szArgs)
    } else if(cs_get_user_team(id) == CS_TEAM_T) {
        ColorChat(0, NORMAL, "%s^3%s^1: %s", szPrefixes[iAlive][iTeam],szName, szArgs)
    }
    
}
return PLUGIN_HANDLED_MAIN
}

public Save(id)
{
    new name[32];
    get_user_name(id,name,31);
    new vaultkey[64],vaultdata[256];
    
    format(vaultkey,63,"%s", name);
    format(vaultdata,255,"%i#%i#",XP[id],Lvl[id]);
    fvault_set_data(g_vault_name,vaultkey,vaultdata);
    
    return PLUGIN_CONTINUE;
}
public Load(id)
{
    new name[32];
    get_user_name(id,name,31);
    new vaultkey[64],vaultdata[256];
    
    format(vaultkey,63,"%s",name);
    format(vaultdata,255,"%i#%i#",XP[id],Lvl[id]);
    fvault_get_data(g_vault_name,vaultkey,vaultdata,charsmax(vaultdata));
    
    replace_all(vaultdata, 255, "#", " ");
    new playerxp[32], playerlevel[32];
    parse(vaultdata, playerxp, 31, playerlevel, 31);
    
    XP[id] = str_to_num(playerxp);
    Lvl[id] = str_to_num(playerlevel);
    
    return PLUGIN_CONTINUE;
}
public changeTeamInfo(player, team[])
{
    message_begin(MSG_ONE, teamInfo, _, player)    // Tells to to modify teamInfo(Which is responsable for which time player is)
    write_byte(player)                // Write byte needed
    write_string(team)                // Changes player's team
    message_end()                    // Also Needed
}

public writeMessage(player, szArgs[])
{
    message_begin(MSG_ONE, sayText, {0, 0, 0}, player)    // Tells to modify sayText(Which is responsable for writing colored messages)
    write_byte(player)                    // Write byte needed
    write_string(szArgs)                    // Effectively write the message, finally, afterall
    message_end()                        // Needed as always
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1026\\ f0\\ fs16 \n\\ par }
*/
Ползвай този, няма да имаш никакви грешки! :oo
The Best Deathrun Server: 79.124.49.91:27019
The Best Respawn Server: 79.124.49.88:27021

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Поддръжка / Помощ”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 18 госта