- #include <amxmodx> 
- #include <cstrike> 
- #include <sqlx> 
-   
- enum Color 
- { 
- 	NORMAL = 1, // clients scr_concolor cvar color 
- 	GREEN, // Green Color 
- 	TEAM_COLOR, // Red, grey, blue 
- 	GREY, // grey 
- 	RED, // Red 
- 	BLUE, // Blue 
- } 
-   
- new TeamName[][] =  
- { 
- 	"", 
- 	"TERRORIST", 
- 	"CT", 
- 	"SPECTATOR" 
- } 
-   
- new Host[]     	= "host" 
- new User[]    	= "user" 
- new Pass[]     	= "password" 
- new Db[]     	= "db" 
-   
- new Handle:g_SqlTuple 
- new g_Error[512] 
-   
- enum _:Achieves // Define the available Achievements, dont forget commas 
- { 
- 	MURDER,		// Done 
- 	SURVIVOR,	// Done 
- 	AIMKEY,		// Done 
- 	EXECUTION,	// Done 
- 	ONEHPHERO	// Done 
- } 
-   
- new const AchName[Achieves][] = // Define the Achievements Names, dont forget commas 
- { 
- 	"Kivgz", 
- 	"Tllsre szletett", 
- 	"Mester", 
- 	"Vgrehajts kre", 
- 	"Hs" 
- } 
-   
- new const AchDescription[Achieves][] = // Define the Achievements Description, dont forget commas 
- { 
- 	"lj meg 500 ellensget", 
- 	"lj tl 250 krt", 
- 	"lj 125 fejlvssel", 
- 	"lj meg 5 ellenfelet egy krben", 
- 	"lj meg 5 ellenfelet 1 HP-val" 
- } 
-   
- new const AchRequirement[Achieves] = // Define Requirements. For non progress achievements use 1 (Like Secret Phrase), dont forget commas 
- { 
- 	500, 
- 	250, 
- 	125, 
- 	5, 
- 	5 
- } 
-   
- new const prefix[] = "^4[ClanTag] Achievements:^3" 
-   
- new Achievement[33][Achieves] 
- new iAchTag[33] 
- new szTemp[555 char] 
-   
- public plugin_init()  
- { 
- 	register_plugin("Achievements", "5.0", "fLaXXiE") 
-   
- 	register_event("DeathMsg", "Event_DeathMsg", "a") 
- 	register_logevent("EventRoundStart", 2, "1=Round_Start") 
-   
- 	register_clcmd("say /achievements", "CmdAch") 
- 	register_clcmd("say /ach", "CmdAch") 
- 	register_clcmd("say /a", "CmdAch") 
-   
- 	register_clcmd("say", "CmdSay") 
- 	register_clcmd("say_team", "CmdSayTeam") 
-   
- 	set_task(1.0, "MySql_Init") 
- } 
-   
- public CmdSayTeam(iPlayer) 
- { 
- 	new iTag[120] 
- 	switch(iAchTag[iPlayer]) 
- 	{ 
- 		case 0: return PLUGIN_CONTINUE 
- 		case 1: formatex(iTag, charsmax(iTag), "Kivgz") 
- 		case 2: formatex(iTag, charsmax(iTag), "Tllsre szletett") 
- 		case 3: formatex(iTag, charsmax(iTag), "Mester") 
- 		case 4: formatex(iTag, charsmax(iTag), "Vgrehajts kre") 
- 		case 5: formatex(iTag, charsmax(iTag), "Hs") 
- 	} 
-   
- 	new iMessage[192], szName[32], None[2][32], iChat[192] 
- 	read_args(iMessage, 191) 
- 	remove_quotes(iMessage) 
-   
- 	formatex(None[0], 31, ""), formatex(None[1], 31, " ") 
-   
- 	if(equal(iMessage, "")) 
- 		return PLUGIN_HANDLED 
-   
- 	if(!equali(iMessage, None[0]) && !equali(iMessage, None[1])) 
- 	{ 
- 		get_user_name(iPlayer, szName, 31) 
-   
- 		if(is_user_alive(iPlayer))  
- 		{ 
- 			switch(cs_get_user_team(iPlayer)) 
- 			{ 
- 				case 1: formatex(iChat, 191, "^4[%s]^1 (Terrorist)^3 %s^1 :  %s", iTag, szName, iMessage) 
- 				case 2: formatex(iChat, 191, "^4[%s]^1 (Counter-Terrorist)^3 %s^1 :  %s", iTag, szName, iMessage) 
- 				case 3: formatex(iChat, 191, "^4[%s]^1 (Spectator)^3 %s^1 :  %s", iTag, szName, iMessage) 
- 			} 
- 		} 
- 		else 
- 		{ 
- 			switch(cs_get_user_team(iPlayer)) 
- 			{ 
- 				case 1: formatex(iChat, 191, "^1*DEAD* ^4[%s]^1 (Terrorist)^3 %s^1 :  %s", iTag, szName, iMessage) 
- 				case 2: formatex(iChat, 191, "^1*DEAD* ^4[%s]^1 (Counter-Terrorist)^3 %s^1 :  %s", iTag, szName, iMessage) 
- 				case 3: formatex(iChat, 191, "^1*DEAD* ^4[%s]^1 (Spectator)^3 %s^1 :  %s", iTag, szName, iMessage) 
- 			} 
- 		} 
-   
- 		switch(cs_get_user_team(iPlayer)) 
- 		{ 
- 			case 1: ColorChat(0, RED, iChat) 
- 			case 2: ColorChat(0, BLUE, iChat) 
- 			case 3: ColorChat(0, GREY, iChat) 
- 		} 
- 		return PLUGIN_HANDLED_MAIN 
- 	} 
- 	return PLUGIN_CONTINUE 
- } 
-   
- public CmdSay(iPlayer) 
- { 
- 	new iTag[120] 
- 	switch(iAchTag[iPlayer]) 
- 	{ 
- 		case 0: return PLUGIN_CONTINUE 
- 		case 1: formatex(iTag, charsmax(iTag), "Kivgz") 
- 		case 2: formatex(iTag, charsmax(iTag), "Tllsre szletett") 
- 		case 3: formatex(iTag, charsmax(iTag), "Mester") 
- 		case 4: formatex(iTag, charsmax(iTag), "Vgrehajts kre") 
- 		case 5: formatex(iTag, charsmax(iTag), "Hs") 
- 	} 
-   
- 	new iMessage[192], szName[32], None[2][32], iChat[192] 
- 	read_args(iMessage, 191) 
- 	remove_quotes(iMessage) 
-   
- 	formatex(None[0], 31, ""), formatex(None[1], 31, " ") 
-   
- 	if(equal(iMessage, "")) 
- 		return PLUGIN_HANDLED 
-   
- 	if(!equali(iMessage, None[0]) && !equali(iMessage, None[1])) 
- 	{ 
- 		get_user_name(iPlayer, szName, 31) 
-   
- 		if(is_user_alive(iPlayer)) formatex(iChat, 191, "^4[%s]^3 %s^1 :  %s", iTag, szName, iMessage) 
- 		else formatex(iChat, 191, "^1*DEAD* ^4[%s]^3 %s^1 :  %s", iTag, szName, iMessage) 
-   
- 		switch(cs_get_user_team(iPlayer)) 
- 		{ 
- 			case 1: ColorChat(0, RED, iChat) 
- 			case 2: ColorChat(0, BLUE, iChat) 
- 			case 3: ColorChat(0, GREY, iChat) 
- 		} 
- 		return PLUGIN_HANDLED_MAIN 
- 	} 
- 	return PLUGIN_CONTINUE 
- } 
-   
- public client_putinserver(iPlayer) 
- 	Load_MySql(iPlayer) 
-   
- public client_disconnect(iPlayer) 
- { 
- 	Save_MySql(iPlayer) 
- 	iAchTag[iPlayer] = 0 
- } 
-   
- public plugin_end() 
- 	SQL_FreeHandle(g_SqlTuple) 
-   
- public CmdAch(iPlayer) 
- { 
- 	new g_AchMenu = menu_create("\wAchievements^n^n", "Achievements_Handler") 
-   
- 	new Key[6] 
-   
- 	for(new iAch = 0; iAch < Achieves; iAch++) 
- 	{ 
- 		if(Achievement[iPlayer][iAch] == 0) formatex(szTemp, charsmax(szTemp), "\d%s - [%s] [%d/%d]", AchName[iAch], AchDescription[iAch], Achievement[iPlayer][iAch], AchRequirement[iAch]) 
- 		else if(Achievement[iPlayer][iAch] >= AchRequirement[iAch]) formatex(szTemp, charsmax(szTemp), "\y%s \w- [\rCOMPLETED\w]", AchName[iAch]) 
- 		else formatex(szTemp, charsmax(szTemp), "\y%s \w- [\r%s\w]\w [\r%d\w/\r%d\w]", AchName[iAch], AchDescription[iAch], Achievement[iPlayer][iAch], AchRequirement[iAch]) 
- 		menu_additem(g_AchMenu, szTemp, Key) 
- 	} 
-   
- 	menu_setprop(g_AchMenu, MPROP_EXIT, MEXIT_ALL) 
- 	menu_display(iPlayer, g_AchMenu, 0) 
- } 
-   
- public Achievements_Handler(iPlayer, g_AchMenu, item)  
- {  
- 	if(item == MENU_EXIT)  
- 	{  
- 		menu_destroy(g_AchMenu) 
- 		return PLUGIN_HANDLED  
- 	} 
- 	else 
- 	{ 
- 		if(Achievement[iPlayer][item] >= AchRequirement[item])  
- 		{  
- 			iAchTag[iPlayer] = item+1 
- 			ColorChat (iPlayer, GREY, "%s Te kivlasztottad^4 %s^3 ezt", prefix, AchName[item])  
- 		}  
- 		else  
- 		{  
-            	 ColorChat(iPlayer, GREY, "%s Nincs feloldva a kvetkez teljestmny.", prefix)  
- 		}  
- 	}  
- 	return PLUGIN_CONTINUE  
- }   
-   
- /////////////////////////////////////////////////// 
- ///////// START OF ACHIEVEMENT ACTIONS //////////// 
- /////////////////////////////////////////////////// 
-   
- public Event_DeathMsg() 
- { 
- 	new iKiller = read_data(1) 
- 	new iVictim = read_data(2) 
- 	new szName[33]; get_user_name(iKiller, szName, charsmax(szName)) 
-   
- 	if(is_user_alive(iKiller) && get_user_team(iKiller) != get_user_team(iVictim)) 
- 	{ 
- 		Achievement[iKiller][EXECUTION]++ 
-   
- 		if(Achievement[iKiller][EXECUTION] == AchRequirement[EXECUTION]) 
- 		{ 
- 			ColorChat(0, GREY, "%s %s sikeresen feloldottad a kvetkez teljestmnyt %s!", prefix, szName, AchName[EXECUTION]) 
- 		} 
-   
- 		if(is_user_alive(iKiller) && get_user_team(iKiller) != get_user_team(iVictim)) 
- 		{ 
- 			Achievement[iKiller][MURDER]++ 
-   
- 			if(Achievement[iKiller][MURDER] == AchRequirement[MURDER]) 
- 			{ 
- 				ColorChat(0, GREY, "%s %s sikeresen feloldottad a kvetkez teljestmnyt %s!", prefix, szName, AchName[MURDER]) 
- 			} 
-   
- 		} 
-   
- 		if(get_user_health(iKiller) == 1) 
- 		{ 
- 			Achievement[iKiller][ONEHPHERO]++ 
-   
- 			if(Achievement[iKiller][ONEHPHERO] == AchRequirement[ONEHPHERO]) 
- 			{ 
- 				ColorChat(0, GREY, "%s %s sikeresen feloldottad a kvetkez teljestmnyt %s!", prefix, szName, AchName[ONEHPHERO]) 
- 			} 
- 		} 
- 		if(read_data(3)) 
- 		{	 
- 			Achievement[iKiller][AIMKEY]++ 
-   
- 			if(Achievement[iKiller][AIMKEY] == AchRequirement[AIMKEY]) 
- 			{ 
- 				ColorChat(0, GREY, "%s %s sikeresen feloldottad a kvetkez teljestmnyt %s!", prefix, szName, AchName[AIMKEY]) 
- 			} 
- 		} 
- 	} 
- 	return PLUGIN_CONTINUE 
- } 
-   
- public EventRoundStart() 
- { 
- 	new iPlayers[32], iNum, iPlayer, szName[33] 
- 	get_players(iPlayers, iNum, "a") 
-   
- 	for(new i = 0; i < iNum; i++) 
- 	{ 
- 		iPlayer = iPlayers[i] 
- 		get_user_name(iPlayer, szName, charsmax(szName)) 
-   
- 		if(Achievement[iPlayer][EXECUTION] < 5) 
- 			Achievement[iPlayer][EXECUTION] = 0 
-   
- 		if(is_user_alive(iPlayer)) 
- 		{ 
- 			Achievement[iPlayer][SURVIVOR]++ 
-   
- 			if(Achievement[iPlayer][SURVIVOR] == AchRequirement[SURVIVOR]) 
- 			{ 
- 				ColorChat(0, GREY, "%s %s sikeresen feloldottad a kvetkez teljestmnyt %s!", prefix, szName, AchName[SURVIVOR]) 
- 			} 
- 		} 
- 	} 
- 	return PLUGIN_CONTINUE 
- } 
-   
- /////////////////////////////////////////////////// 
- ////////// END OF ACHIEVEMENT ACTIONS ///////////// 
- /////////////////////////////////////////////////// 
-   
- /////////////////////////////////////////////////// 
- ///////// START OF ACHIEVEMENT SAVING ///////////// 
- /////////////////////////////////////////////////// 
-   
- public MySql_Init() 
- { 
- 	g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db) 
-   
- 	new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,charsmax(g_Error)) 
-   
- 	if(SqlConnection == Empty_Handle) 
- 		set_fail_state(g_Error) 
-   
- 	new Handle:Queries 
- 	Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS achievements(steamid varchar(32), tag varchar(32), murder SMALLINT(1), survivor SMALLINT(1), aimkey SMALLINT(1), threesome SMALLINT(1), onehphero SMALLINT(1))") 
-   
- 	if(!SQL_Execute(Queries)) 
- 	{ 
- 		SQL_QueryError(Queries,g_Error,charsmax(g_Error)) 
- 		set_fail_state(g_Error) 
- 	} 
-   
- 	SQL_FreeHandle(Queries) 
- 	SQL_FreeHandle(SqlConnection)    
- } 
-   
- public Load_MySql(iPlayer) 
- { 
- 	new szSteamId[32], szTemp[512] 
- 	get_user_authid(iPlayer, szSteamId, charsmax(szSteamId)) 
-   
- 	new Data[1] 
- 	Data[0] = iPlayer 
-   
- 	format(szTemp,charsmax(szTemp),"SELECT * FROM `achievements` WHERE (`achievements`.`steamid` = '%s')", szSteamId) 
- 	SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp,Data,1) 
- } 
-   
- public register_client(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) 
- { 
- 	if(FailState == TQUERY_CONNECT_FAILED) 
- 	{ 
- 		log_amx("Load - Could not connect to SQL database.  [%d] %s", Errcode, Error) 
- 	} 
- 	else if(FailState == TQUERY_QUERY_FAILED) 
- 	{ 
- 		log_amx("Load Query failed. [%d] %s", Errcode, Error) 
- 	} 
-   
- 	new iPlayer 
- 	iPlayer = Data[0] 
-   
- 	if(SQL_NumResults(Query) < 1)  
- 	{	 
- 		new szSteamId[32] 
- 		get_user_authid(iPlayer, szSteamId, charsmax(szSteamId)) 
-   
- 		if (equal(szSteamId,"ID_PENDING")) 
- 			return PLUGIN_HANDLED 
-   
- 		new szTemp[512] 
-   
- 		format(szTemp,charsmax(szTemp),"INSERT INTO `achievements` (`steamid` , `tag`, `murder`, `survivor`, `aimkey`, `execution`, `onehphero`)VALUES ('%s', '0', '0', '0', '0', '0', '0')", szSteamId) 
- 		SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp) 
- 	}  
- 	else  
- 	{ 
- 		iAchTag[iPlayer]		= SQL_ReadResult(Query, 1) 
- 		Achievement[iPlayer][MURDER]	= SQL_ReadResult(Query, 2) 
- 		Achievement[iPlayer][SURVIVOR]	= SQL_ReadResult(Query, 3) 
- 		Achievement[iPlayer][AIMKEY]	= SQL_ReadResult(Query, 4) 
- 		Achievement[iPlayer][EXECUTION]	= SQL_ReadResult(Query, 5) 
- 		Achievement[iPlayer][ONEHPHERO]	= SQL_ReadResult(Query, 6) 
- 	} 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public Save_MySql(iPlayer) 
- { 
- 	new szSteamId[32], szTemp[512] 
- 	get_user_authid(iPlayer, szSteamId, charsmax(szSteamId)) 
-   
- 	format(szTemp,charsmax(szTemp),"UPDATE `achievements` SET `tag` = '%d', `murder` = '%d', `survivor` = '%d', `aimkey` = '%d', `execution` = '%d', `onehphero` = '%d' WHERE `achievements`.`steamid` = '%s';", iAchTag[iPlayer], Achievement[iPlayer][MURDER], Achievement[iPlayer][SURVIVOR], Achievement[iPlayer][AIMKEY], Achievement[iPlayer][EXECUTION], Achievement[iPlayer][ONEHPHERO], szSteamId) 
-   
- 	SQL_ThreadQuery(g_SqlTuple,"IgnoreHandle",szTemp) 
- } 
-   
- public IgnoreHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) 
- { 
- 	SQL_FreeHandle(Query) 
- 	return PLUGIN_HANDLED 
- } 
- /////////////////////////////////////////////////// 
- ////////// END OF ACHIEVEMENT SAVING ////////////// 
- /////////////////////////////////////////////////// 
-   
- /////////////////////////////////////////////////// 
- ///////// START OF ACHIEVEMENT COLORCHAT ////////// 
- /////////////////////////////////////////////////// 
-   
- ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...) 
- { 
- 	static message[256]; 
-   
- 	switch(type) 
- 	{ 
- 		case NORMAL: // clients scr_concolor cvar color 
- 		{ 
- 			message[0] = 0x01; 
- 		} 
- 		case GREEN: // Green 
- 		{ 
- 			message[0] = 0x04; 
- 		} 
- 		default: // White, Red, Blue 
- 		{ 
- 			message[0] = 0x03; 
- 		} 
- 	} 
-   
- 	vformat(message[1], 251, msg, 4); 
-   
- 	// Make sure message is not longer than 192 character. Will crash the server. 
- 	message[192] = '^0'; 
-   
- 	static team, ColorChange, index, MSG_Type; 
-   
- 	if(id) 
- 	{ 
- 		MSG_Type = MSG_ONE; 
- 		index = id; 
- 	} else { 
- 		index = FindPlayer(); 
- 		MSG_Type = MSG_ALL; 
- 	} 
-   
- 	team = get_user_team(index); 
- 	ColorChange = ColorSelection(index, MSG_Type, type); 
-   
- 	ShowColorMessage(index, MSG_Type, message); 
-   
- 	if(ColorChange) 
- 	{ 
- 		Team_Info(index, MSG_Type, TeamName[team]); 
- 	} 
- } 
-   
- ShowColorMessage(id, type, message[]) 
- { 
- 	message_begin(type, get_user_msgid("SayText"), _, id); 
- 	write_byte(id)		 
- 	write_string(message); 
- 	message_end();	 
- } 
-   
- Team_Info(id, type, team[]) 
- { 
- 	message_begin(type, get_user_msgid("TeamInfo"), _, id); 
- 	write_byte(id); 
- 	write_string(team); 
- 	message_end(); 
-   
- 	return 1; 
- } 
-   
- ColorSelection(index, type, Color:Type) 
- { 
- 	switch(Type) 
- 	{ 
- 		case RED: 
- 		{ 
- 			return Team_Info(index, type, TeamName[1]); 
- 		} 
- 		case BLUE: 
- 		{ 
- 			return Team_Info(index, type, TeamName[2]); 
- 		} 
- 		case GREY: 
- 		{ 
- 			return Team_Info(index, type, TeamName[0]); 
- 		} 
- 	} 
-   
- 	return 0; 
- } 
-   
- FindPlayer() 
- { 
- 	static i; 
- 	i = -1; 
-   
- 	while(i <= get_maxplayers()) 
- 	{ 
- 		if(is_user_connected(++i)) 
- 		{ 
- 			return i; 
- 		} 
- 	} 
-   
- 	return -1; 
- } 
- /////////////////////////////////////////////////// 
- ///////// END OF ACHIEVEMENT COLORCHAT //////////// 
- /////////////////////////////////////////////////// 
-   
- /////////////////////////////////////////////////// 
- ///////// Stock Start////////////////////////////// 
- /////////////////////////////////////////////////// 
- stock print_color(const id, const input[], any:...) 
- { 
-         new count = 1, players[32] 
-         static msg[191] 
-         vformat(msg, 190, input, 3) 
-   
-         replace_all(msg, 190, "!g", "^4") 
-         replace_all(msg, 190, "!y", "^1") 
-         replace_all(msg, 190, "!t", "^3") 
-         replace_all(msg, 190, "", "á") 
-         replace_all(msg, 190, "", "é") 
-         replace_all(msg, 190, "", "í") 
-         replace_all(msg, 190, "", "ó") 
-         replace_all(msg, 190, "", "ö") 
-         replace_all(msg, 190, "", "ő") 
-         replace_all(msg, 190, "", "ú") 
-         replace_all(msg, 190, "", "ü") 
-         replace_all(msg, 190, "", "ű") 
-         replace_all(msg, 190, "", "Á") 
-         replace_all(msg, 190, "", "É") 
-         replace_all(msg, 190, "", "Í") 
-         replace_all(msg, 190, "", "Ó") 
-         replace_all(msg, 190, "", "Ö") 
-         replace_all(msg, 190, "", "Ő") 
-         replace_all(msg, 190, "", "Ú") 
-         replace_all(msg, 190, "", "Ü") 
-         replace_all(msg, 190, "", "Ű")        
-   
-         if (id) players[0] = id; else get_players(players, count, "ch") 
-         { 
-                 for (new i = 0; i < count; i++) 
-                 { 
-                         if (is_user_connected(players[i])) 
-                         { 
-                                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]) 
-                                 write_byte(players[i]) 
-                                 write_string(msg) 
-                                 message_end() 
-                         } 
-                 } 
-         } 
-         return PLUGIN_HANDLED 
- } 
- /////////////////////////////////////////////////// 
- ///////// Stock END//////////////////////////////// 
- ///////////////////////////////////////////////////