Арми ранк

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
Just
Извън линия
Потребител
Потребител
Мнения: 427
Регистриран на: 23 Дек 2016, 19:10
Местоположение: http://cs-ultragaming.info
Се отблагодари: 5 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Арми ранк

Мнение от Just » 30 Дек 2016, 23:22

Здравейте, кой ще ми помогне със пългина арми ранк всичко съм оправил но единствено не мога да оправя. хп-то демек при всяко възраждане да дава толкова хп колко е определено от сма файла имам предвит кат сам генерал трябва при всяко възраждане да ми дава 160 хп а то само първия рунд го дава и след това само по 100 хп дава
Последно промяна от OciXCrom на 31 Дек 2016, 02:39, променено общо 1 път.
Изображение


NEW CS 1.6 SERVERS IP: 45.144.155.176:27015

Изображение

Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 582
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 15 пъти

Re: Арми ранк

Мнение от JustInCase » 31 Дек 2016, 00:18

Нали се сещаш, че без да дадеш кода няма как да стане.
MANSION - HNS : 45.144.155.99:27026
ONLINE

Аватар
Just
Извън линия
Потребител
Потребител
Мнения: 427
Регистриран на: 23 Дек 2016, 19:10
Местоположение: http://cs-ultragaming.info
Се отблагодари: 5 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Re: Арми ранк

Мнение от Just » 31 Дек 2016, 01:00

Знам за това съм написал кой ще помогне

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

/* 	
	Обещанного три года ждут ;)
*/
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#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");
	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 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;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Изображение


NEW CS 1.6 SERVERS IP: 45.144.155.176:27015

Изображение

Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 582
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 15 пъти

Re: Арми ранк

Мнение от JustInCase » 31 Дек 2016, 01:43

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

/*    
   Обещанного три года ждут ;)
*/
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#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)
{
    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;
}
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;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n{\\ colortbl ;\\ red0\\ green0\\ blue0;}\n\\ viewkind4\\ uc1\\ pard\\ cf1\\ lang1033\\ f0\\ fs16 \n\\ par }
*/


Тествай. Не знам даже дали се компилира пробвай, защото го писах от телефона.
MANSION - HNS : 45.144.155.99:27026
ONLINE

Аватар
Just
Извън линия
Потребител
Потребител
Мнения: 427
Регистриран на: 23 Дек 2016, 19:10
Местоположение: http://cs-ultragaming.info
Се отблагодари: 5 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Re: Арми ранк

Мнение от Just » 31 Дек 2016, 02:23

Не става пак
Изображение


NEW CS 1.6 SERVERS IP: 45.144.155.176:27015

Изображение

Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 582
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 15 пъти

Re: Арми ранк

Мнение от JustInCase » 31 Дек 2016, 02:32

Списък с плъгини
MANSION - HNS : 45.144.155.99:27026
ONLINE

Аватар
Just
Извън линия
Потребител
Потребител
Мнения: 427
Регистриран на: 23 Дек 2016, 19:10
Местоположение: http://cs-ultragaming.info
Се отблагодари: 5 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Re: Арми ранк

Мнение от Just » 31 Дек 2016, 02:54

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

adminlisten.amxx
army_ranks.amxx
gag.amxx
crx_demorecorder.amxx
crx_randomhp.amxx
crx_showip.amxx
crx_simplers.amxx
crx_becomevip.amxx
descriptive_fire_in_the_hole.amxx
headshot_deluxe.amxx
IP.amxx
ad_manager.amxx 
vampire.amxx
bullet_damage.amxx
multijump.amxx
refill_ammo.amxx 
quakesounds.amxx
admin_spec_esp.amxx
spawnprotection.amxx
shopmenu.amxx
auto_join_on_connect.amxx
csdm_teambalancer.amxx
crx_vipstuff.amxx
TimeleftRoundtime.amxx
Изображение


NEW CS 1.6 SERVERS IP: 45.144.155.176:27015

Изображение

Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 582
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 15 пъти

Re: Арми ранк

Мнение от JustInCase » 31 Дек 2016, 12:19

Значи наистина не знам как си компилирал кода, който ти дадох и дори си го пробвал при положение, че не се компилира даже..
Ето ти го компилиран + сма.
Последно промяна от JustInCase на 31 Дек 2016, 13:25, променено общо 1 път.
MANSION - HNS : 45.144.155.99:27026
ONLINE

Аватар
Just
Извън линия
Потребител
Потребител
Мнения: 427
Регистриран на: 23 Дек 2016, 19:10
Местоположение: http://cs-ultragaming.info
Се отблагодари: 5 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Re: Арми ранк

Мнение от Just » 31 Дек 2016, 12:43

Аз не искам на всеки един играч да е с 450 хп искам когато някой ми се вдигне левела и хп-то да се вдига с по 3 хп ако си редниг и сега влизаш и имаш 103 хп ставаш войник и трябва да станеш на 106 хп
Изображение


NEW CS 1.6 SERVERS IP: 45.144.155.176:27015

Изображение

Аватар
JustInCase
Извън линия
Потребител
Потребител
Мнения: 582
Регистриран на: 14 Окт 2016, 23:31
Се отблагодари: 4 пъти
Получена благодарност: 15 пъти

Re: Арми ранк

Мнение от JustInCase » 31 Дек 2016, 13:24

Извинявам се грешката е моя не видях. Тествай сега.

Army Rank FIXED @ amxx-bg.info .rar
(44.12 KiB) Свалено 158 пъти
Army Rank FIXED @ amxx-bg.info .rar
(44.12 KiB) Свалено 158 пъти
MANSION - HNS : 45.144.155.99:27026
ONLINE

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

Обратно към “Заявки за плъгини”

Кой е на линия

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