Двойно съобщение в ранк система

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Двойно съобщение в ранк система

Мнение от mi0 » 30 Мар 2018, 21:42

Здравейте!
Имам проблем с ранк система, а той е, че когато съм умрял и пиша в all чата, съобщенията са двойни.
Ето код:

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

#include             <amxmodx>
#include             <amxmisc>
#include             <fvault>
#include             <cromchat>
#include             <fakemeta>

#define MaxLevels         17
#define IsPlayer(%1)         (1 <= %1 <=  g_iget_maxplayers())


//Tuk poakzvate kak da izglejdat syobshteniqta!!!
//Info:
//&dead& - tova pokazva dali e otboren chat i dali e umrql igracha!
//&rank& - tova pokazva ranka na igracha!
//&name& - tova pokazva imeto na igracha!
//&message& - tova pokazva syobshtenieto na igracha!
//&prefix& - tova pokazva admin prefixa na igracha samo za admin syobshteniq!
//&team&  - tova pokazva otbora na igracha(moje da se polzva vyv vsichki syobshteniq)!

//Tuk syobshtenie na chata za vsichki koeto ne ot admin
#define SayMsg 			"&dead&^1[^4&rank&^1] ^3&name&^1 : &message&"
//Tuk syobshtenie na chata za vsichki koeto e ot admin
#define SayMsgAdmin 		"&dead&^1[^4&rank&^1] ^3[^4&prefix&^3] ^3&name&^1 : &message&"
//Tuk syobshtenie na otborniq chat koeto ne ot admin
#define SayTeamMsg 		"&dead&^4(^3&team&^4) ^1[^4&rank&^1] ^3&name&^1 : &message&"
//Tuk syobshtenie na otborniq chat koeto e ot admin
#define SayTeamMsgAdmin 	"&dead&^4(^3&team&^4) ^1[^4&rank&^1] ^3[^4&prefix&^3] ^3&name&^1 : &message&"

new syncObj, sayText, teamInfo, g_iLevel[33], g_iXPl[33]
new Cvar_Hud, Cvar_KnifeXP, Cvar_HEXP, Cvar_HSXP, Cvar_KillXP, Cvar_SuicideXP, Cvar_Msg, Cvar_AdmListen, Cvar_AdmListenFlag, Cvar_RankUPMsg, Cvar_HudRed,Cvar_HudGreen,Cvar_HudBlue,Cvar_HudX,Cvar_HudY, Cvar_HudEff, Cvar_Prefix
new Vip, VipFlag, VipX

new const g_vault_name[] = "RankSystem1";

new const Levels[MaxLevels+1] =
{
	0,
	25,
	50,
	100,
	150,
	250,
	300,
	350,
	400,
	500,
	550,
	600,
	700,
	735,
	780,
	1500,
	2000
}

new const Prefix[MaxLevels][] =
{
	"Rednik",
	"Novak",
	"Mladshi Serjant",
	"Serjant",
	"Starshi Serjant",
	"Starshina",
	"Mladshi Leitenant",
	"Leitenant",
	"Starshi Leitenant",
	"Kapitan",
	"Kapitan Leitenant",
	"Maior",
	"General Leitenant",
	"General Maior",
	"General",
	"Admiral",
	"Bate Boiko"
}

new const szTag[][] = 
{
	"",
	"OwneR",
	"GlobaL AdmiN",
	"LocaL AdmiN",
	"TesT AdmiN",
	"SmS AdmiN",
	"ViP"
}

new const szFlags[][] = 
{
	"",
	"l",
	"a",
	"d",
	"c",
	"e",
	"b"
}

new const szBadStarts[][] = 
{
	"",
	"@",
	"/",
	"$",
	"!",
	"#"
}

new const szDead[4][] = 
{
	"",
	"^4*^1DEAD^4*", 	//Za Treroristite
	"^4*^1DEAD^4*", 	//Za Counter Treroristite
	"^4*^1SPEC^4*"	 	//Za Spektatorite
}

new const szTeams[4][] = 
{
	"",
	"Terrorist", 		//Za Treroristite
	"CT", 			//Za Counter Treroristite
	"Spec" 			//Za Spketatorite
}

public plugin_init()
{
	register_plugin("AdminPreifx+RankSystem", "1.5", "mi0");
	
	register_clcmd ("say", "hook_say")
	register_clcmd ("say_team", "hook_teamsay")
	
	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")
	
	Vip = 			register_cvar("rsys_vipxp", "0")
	VipFlag = 		register_cvar("rsys_vipflag", "b")
	VipX = 			register_cvar("rsys_vipmultiple", "2")
	Cvar_Hud = 		register_cvar("rsys_hud", "1")
	Cvar_Prefix = 		register_cvar("rsys_prefix", "Ranks");
	Cvar_KnifeXP = 		register_cvar("rsys_knifexp", "2")
	Cvar_HEXP = 		register_cvar("rsys_hexp", "3")
	Cvar_HSXP = 		register_cvar("rsys_hsxp", "2")
	Cvar_KillXP = 		register_cvar("rsys_killxp", "1")
	Cvar_SuicideXP = 	register_cvar("rsys_suicxp", "0")
	Cvar_Msg = 		register_cvar("rsys_msg", "1")
	Cvar_AdmListen = 	register_cvar("rsys_admlisten", "1")
	Cvar_AdmListenFlag = 	register_cvar("rsys_admlistenflag", "i")
	Cvar_RankUPMsg = 	register_cvar("rsys_rankupmsg", "1")
	Cvar_HudRed = 		register_cvar("rsys_hudred", "139")
	Cvar_HudGreen = 	register_cvar("rsys_hudgreen", "0")
	Cvar_HudBlue = 		register_cvar("rsys_hudblue", "139")
	Cvar_HudX = 		register_cvar("rsys_hudx", "0.01")
	Cvar_HudY = 		register_cvar("rsys_hudy", "0.14")
	Cvar_HudEff = 		register_cvar("rsys_hudeff", "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")
	
	syncObj = CreateHudSyncObj()
	
	fvault_load(g_vault_name)
}
public getPrefix()
{
	new Prefix[33]
	get_pcvar_string(Cvar_Prefix, Prefix, 32)
	return Prefix
}
public ShowHud(id)
{
	if(get_pcvar_num(Cvar_Hud) == 1)
	{
		set_hudmessage(get_pcvar_num(Cvar_HudRed), get_pcvar_num(Cvar_HudGreen), get_pcvar_num(Cvar_HudBlue), get_pcvar_float(Cvar_HudX), get_pcvar_float(Cvar_HudY), get_pcvar_num(Cvar_HudEff), 6.0, 1.0, 0.0, 0.0, -1)
		if(MaxLevels == g_iLevel[id]+1)
			ShowSyncHudMsg(id, syncObj,"Rank: %s^nXP: %d^nLVL: MAX", Prefix[g_iLevel[id]], g_iXPl[id])
		else
			ShowSyncHudMsg(id, syncObj,"Rank: %s/%s^nXP: %d/%d^nLVL: %d/%d",Prefix[g_iLevel[id]], Prefix[g_iLevel[id]+1], g_iXPl[id], Levels[g_iLevel[id]+1], g_iLevel[id]+1, MaxLevels)
	}
}
public cmdRank(id)
{
	if(MaxLevels == g_iLevel[id]+1)
		CC_SendMatched(id, CC_COLOR_RED, "^4[%s]^3 My Rank^1:^4 %s^1 | ^3Level^1: ^4%d ^1| ^3XP^1: ^4%d^1.", getPrefix(), Prefix[g_iLevel[id]], g_iLevel[id]+1, g_iXPl[id])
	else
		CC_SendMatched(id, CC_COLOR_RED, "^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[g_iLevel[id]], g_iLevel[id]+1, MaxLevels, g_iXPl[id], Levels[g_iLevel[id]+1], Prefix[g_iLevel[id]+1])
}

public client_putinserver(id)
{
	set_task(1.0, "ShowHud", id, _, _, "b")
	
	new currentPlayerRank = 0;
	while(currentPlayerRank < (MaxLevels - 1))
	{       
		if(g_iXPl[id] >= Levels[currentPlayerRank + 1])
			++currentPlayerRank;     
		else         
			break;
	}
	g_iLevel[id] = currentPlayerRank;
}
public Fwd_Kill(id)
{
	if(is_user_alive(id)) {
		g_iXPl[id] -= get_pcvar_num(Cvar_SuicideXP)
		CheckLevel(id)
		Save(id)
		if(get_pcvar_num(Cvar_Msg) == 1)
			CC_SendMatched(id, CC_COLOR_RED, "^4[%s]^1 You committed ^3suicide ^1and ^3lost^4 %d XP^1.", getPrefix(),  get_pcvar_num(Cvar_SuicideXP))
	}
	return PLUGIN_CONTINUE
}

public DeathMessage()
{       
	new killer = read_data(1)
	new victim = read_data(2)
	new headshot = read_data(3)
	new Weapon[32]
	new szMsg[100]
	new temp_flag[2]
	
	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 > get_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(get_pcvar_num(Vip) == 1 && get_user_flags(killer) & read_flags(temp_flag)) {
		if(iWeapon == CSW_HEGRENADE)
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_HEXP)*get_pcvar_float(VipX)
			format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3HE Grenade^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus %dX^1 ]" , getPrefix(),victim_name,  get_pcvar_num(Cvar_HEXP)*2, get_pcvar_float(VipX))
		}
		else if(iWeapon == CSW_KNIFE)
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_KnifeXP)*get_pcvar_float(VipX)
			format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3Knife^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus %dX^1 ]", getPrefix(),victim_name,  get_pcvar_num(Cvar_KnifeXP)*2, get_pcvar_float(VipX))
		}
		else if(headshot)
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_HSXP)*get_pcvar_float(VipX)
			format(szMsg, charsmax(szMsg), "^4[%s]^1 You killed ^4%s^1 with ^3Head^4Shot^1 and got^4 %d XP^1. [ ^4 V.I.P Bonus %dX^1 ]", getPrefix(),victim_name, get_pcvar_num(Cvar_HSXP)*2, get_pcvar_float(VipX))
		}
		else
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_KillXP)*get_pcvar_float(VipX)
			format(szMsg, charsmax(szMsg), "^4[%s]^1 You killed ^4%s^1 and got^4 %d XP^1.[ ^4V.I.P Bonus %dX^1 ]", getPrefix(),victim_name, get_pcvar_num(Cvar_KillXP)*2, get_pcvar_float(VipX))
		}
	}
	else
	{
		if(iWeapon == CSW_HEGRENADE)
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_HEXP)
			format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3HE Grenade^1 and got^4 %d XP^1." , getPrefix(),victim_name,  get_pcvar_num(Cvar_HEXP))
		}
		else if(iWeapon == CSW_KNIFE)
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_KnifeXP)
			format(szMsg, charsmax(szMsg), "^1 You killed ^4%s^1 with ^3Knife^1 and got^4 %d XP^1.", getPrefix(),victim_name,  get_pcvar_num(Cvar_KnifeXP))
		}
		else if(headshot)
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_HSXP)
			format(szMsg, charsmax(szMsg), "^4[%s]^1 You killed ^4%s^1 with ^3Head^4Shot^1 and got^4 %d XP^1.", getPrefix(),victim_name, get_pcvar_num(Cvar_HSXP))
		}
		else
		{
			g_iXPl[killer] += get_pcvar_num(Cvar_KillXP)
			format(szMsg, charsmax(szMsg), "^4[%s]^1 You killed ^4%s^1 and got^4 %d XP^1.", getPrefix(),victim_name, get_pcvar_num(Cvar_KillXP))
		}
	}
	if(get_pcvar_num(Cvar_Msg) == 1){
		CC_SendMatched(killer, CC_COLOR_RED, "%s",szMsg)
		return PLUGIN_CONTINUE
	}
	
	CheckLevel(killer)
	Save(killer)
	
	return PLUGIN_CONTINUE
}

public CheckLevel(id)
{        
	new currentPlayerRank = 0;
	while(currentPlayerRank < (MaxLevels - 1))
	{       
		if(g_iXPl[id] >= Levels[currentPlayerRank + 1])
			++currentPlayerRank;     
		else         
			break;
	}
	if(g_iLevel[id] != currentPlayerRank)
	{
		g_iLevel[id] = currentPlayerRank;
		if(get_pcvar_num(Cvar_RankUPMsg) == 1)
		{
			new szName[33]
			get_user_name(id, szName, charsmax(szName))
			CC_SendMatched(0, CC_COLOR_RED, "^4[%s]^3 %s ^1is now rank ^3%s^1!", getPrefix(), szName, Prefix[g_iLevel[id]])
		}
	}
}

public client_connect(id)
{
	Load(id)
}


public client_disconnect(id)
{
	Save(id)
	g_iXPl[id] = 0
	g_iLevel[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))
	
	new players[32], totalplayers
	
	get_players(players, totalplayers)
	
	if(arg[0]=='@')
	{
		if(equali(arg[1],"All") || equali(arg[1],"ALL"))
		{			
			for (new i = 0; i < totalplayers; i++)
			{
				if(g_iXPl[players[i]] + XPtoGive < 0)
					g_iXPl[players[i]] = 0
				else
					g_iXPl[players[i]] += XPtoGive
			}
			format(TargetName, charsmax(TargetName), "everyone")
		}
		else if(equali(arg[1],"CT") || equali(arg[1],"Ct"))
		{			
			for (new i = 0; i < totalplayers; i++)
				if(get_user_team(i) == 2)
				{
					if(g_iXPl[players[i]] + XPtoGive < 0)
						g_iXPl[players[i]] = 0
					else
						g_iXPl[players[i]] += XPtoGive
				}

			format(TargetName, charsmax(TargetName), "Counter-Terrorists")
		}
		else if(equali(arg[1],"T") || equali(arg[1],"t"))
		{			
			for (new i = 0; i < totalplayers; i++)
				if(get_user_team(i) == 1)
				{
					if(g_iXPl[players[i]] + XPtoGive < 0)
						g_iXPl[players[i]] = 0
					else
						g_iXPl[players[i]] += XPtoGive
				}

			format(TargetName, charsmax(TargetName), "Terrorists")
		}
	}
	else
	{
		new iTarget = cmd_target(index, arg, 3)
		get_user_name (iTarget, TargetName, charsmax (TargetName))
		
		if(iTarget)
		{
			if(g_iXPl[players[iTarget]] + XPtoGive < 0)
				g_iXPl[players[iTarget]] = 0
			else
				g_iXPl[iTarget] += XPtoGive
		}
	}
	CC_SendMatched(0, CC_COLOR_RED, "^4[%s] ^3%s^1 gave^3 %i XP^1 to ^3%s^1!", getPrefix(), AdminName, XPtoGive, TargetName)
	
	for(new i = 1; i < 33; i++)
		CheckLevel(i)
		
	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))
	
	new players[32], totalplayers
	
	get_players(players, totalplayers)
	
	if(arg[0]=='@')
	{
		if(equali(arg[1],"All") || equali(arg[1],"ALL"))
		{			
			for (new i = 0; i < totalplayers; i++)
			{
				if(g_iXPl[players[i]] - XPtoTook < 0)
					g_iXPl[players[i]] = 0
				else
					g_iXPl[players[i]] -= XPtoTook
			}
			format(TargetName, charsmax(TargetName), "everyone")
		}
		else if(equali(arg[1],"CT") || equali(arg[1],"Ct"))
		{			
			for (new i = 0; i < totalplayers; i++)
				if(get_user_team(i) == 2)
				{
					if(g_iXPl[players[i]] - XPtoTook < 0)
						g_iXPl[players[i]] = 0
					else
						g_iXPl[players[i]] -= XPtoTook
				}

			format(TargetName, charsmax(TargetName), "Counter-Terrorists")
		}
		else if(equali(arg[1],"T") || equali(arg[1],"t"))
		{			
			for (new i = 0; i < totalplayers; i++)
				if(get_user_team(i) == 1)
				{
					if(g_iXPl[players[i]] - XPtoTook < 0)
						g_iXPl[players[i]] = 0
					else
						g_iXPl[players[i]] -= XPtoTook
				}

			format(TargetName, charsmax(TargetName), "Terrorists")
		}
	}
	else
	{
		new iTarget = cmd_target(index, arg, 3)
		get_user_name (iTarget, TargetName, charsmax (TargetName))
		
		if(iTarget)
		{
			if(g_iXPl[players[iTarget]] - XPtoTook < 0)
				g_iXPl[players[iTarget]] = 0
			else
				g_iXPl[iTarget] -= XPtoTook
		}
	}
	CC_SendMatched(0, CC_COLOR_RED, "^4[%s] ^3%s^1 took^3 %i XP^1 to ^3%s^1!", getPrefix(), AdminName, XPtoTook, TargetName)
	
	for(new i = 1; i < 33; i++)
		CheckLevel(i)
		
	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
	}
	
	new szArgs[192]
	
	read_args(szArgs, 191)
	remove_quotes(szArgs)
	
	if(!IsValidMessage(szArgs[0]))
		return PLUGIN_CONTINUE
	
	new iPlayers[ 32 ], iNum
	get_players(iPlayers, iNum)
	
	new szName[32]
	get_user_name(id, szName, charsmax(szName))

	new PlayerFlags[32]
	get_flags(get_user_flags(id), PlayerFlags, charsmax(PlayerFlags))
	new szMsg[100]
	new iTeam = get_user_team(id)
		
	if(is_user_admin(id))
	{
		for(new i = 0; i < sizeof(szFlags); i++)	
		{
			if(containi(PlayerFlags, szFlags[i]) != -1)
			{
				format(szMsg, charsmax(szMsg), SayMsgAdmin)
				if(!is_user_alive(id))
					replace_all(szMsg, charsmax(szMsg), "&dead&", szDead[iTeam])
				else
					replace_all(szMsg, charsmax(szMsg), "&dead&", "")
				replace_all(szMsg, charsmax(szMsg), "&rank&", Prefix[g_iLevel[id]])
				replace_all(szMsg, charsmax(szMsg), "&prefix&", szTag[i])
				replace_all(szMsg, charsmax(szMsg), "&name&", szName)
				replace_all(szMsg, charsmax(szMsg), "&message&", szArgs)
				replace_all(szMsg, charsmax(szMsg), "&team&", szTeams[iTeam])
				break;
			}
		}
	}
	else
	{
		format(szMsg, charsmax(szMsg), SayMsg)
		if(!is_user_alive(id))
			replace_all(szMsg, charsmax(szMsg), "&dead&", szDead[iTeam])
		else
			replace_all(szMsg, charsmax(szMsg), "&dead&", "")
		replace_all(szMsg, charsmax(szMsg), "&rank&", Prefix[g_iLevel[id]])
		replace_all(szMsg, charsmax(szMsg), "&name&", szName)
		replace_all(szMsg, charsmax(szMsg), "&message&", szArgs)
		replace_all(szMsg, charsmax(szMsg), "&team&", szTeams[iTeam])
	}
	
	
	replace_all(szMsg, charsmax(szMsg), "   ", "")
	if(equal(szArgs, "") || equal(szArgs, " ") || equal(szArgs, "  "))
		return PLUGIN_HANDLED_MAIN
	
	
	for(new j; j <= 32; j++)
	{
		new JFlags[32], AdmFlags[2]
		get_flags(get_user_flags(id), JFlags, charsmax(JFlags))
		get_pcvar_string(Cvar_AdmListenFlag, AdmFlags, charsmax(AdmFlags))
		if(is_user_alive(id) == is_user_alive(j) && get_pcvar_num(Cvar_AdmListen) != 1)
			CC_SendMatched(j, id, "%s", szMsg)
		else if(is_user_alive(id) == is_user_alive(j) && containi(JFlags, AdmFlags) != -1 && get_pcvar_num(Cvar_AdmListen) == 1)
			CC_SendMatched(j, id, "%s", szMsg)
	}
	return PLUGIN_HANDLED_MAIN
}

public hook_teamsay(id) {
	if(!is_user_connected(id)) {
		return PLUGIN_HANDLED_MAIN
	}
	
	new szArgs[192]
	
	read_args(szArgs, 191)
	remove_quotes(szArgs)
	
	if(!IsValidMessage(szArgs[0]))
		return PLUGIN_CONTINUE
	
	new iPlayers[32], iNum
	get_players(iPlayers, iNum)
	
	new szName[32]
	get_user_name(id, szName, charsmax(szName))

	new PlayerFlags[32]
	get_flags(get_user_flags(id), PlayerFlags, charsmax(PlayerFlags))
	new szMsg[100]
	new iTeam = get_user_team(id)
	
	if(is_user_admin(id))
	{
		for(new i = 0; i < sizeof(szFlags); i++)	
		{
			if(containi(PlayerFlags, szFlags[i]) != -1)
			{
				format(szMsg, charsmax(szMsg), SayTeamMsgAdmin)
				if(!is_user_alive(id))
					replace_all(szMsg, charsmax(szMsg), "&dead&", szDead[iTeam])
				else
					replace_all(szMsg, charsmax(szMsg), "&dead&", "")
				replace_all(szMsg, charsmax(szMsg), "&rank&", Prefix[g_iLevel[id]])
				replace_all(szMsg, charsmax(szMsg), "&prefix&", szTag[i])
				replace_all(szMsg, charsmax(szMsg), "&name&", szName)
				replace_all(szMsg, charsmax(szMsg), "&message&", szArgs)
				replace_all(szMsg, charsmax(szMsg), "&team&", szTeams[iTeam])
				break;
			}
		}
	}
	else
	{
		format(szMsg, charsmax(szMsg), SayTeamMsg)
		if(!is_user_alive(id))
			replace_all(szMsg, charsmax(szMsg), "&dead&", szDead[iTeam])
		else
			replace_all(szMsg, charsmax(szMsg), "&dead&", "")
		replace_all(szMsg, charsmax(szMsg), "&rank&", Prefix[g_iLevel[id]])
		replace_all(szMsg, charsmax(szMsg), "&name&", szName)
		replace_all(szMsg, charsmax(szMsg), "&message&", szArgs)
		replace_all(szMsg, charsmax(szMsg), "&team&", szTeams[iTeam])
	}
	
	
	replace_all(szMsg, charsmax(szMsg), "   ", "")
	if(equal(szArgs, "") || equal(szArgs, " ") || equal(szArgs, "  "))
		return PLUGIN_HANDLED_MAIN
	
	
	for(new j; j <= 32; j++)
	{
		new JFlags[32], AdmFlags[2]
		get_flags(get_user_flags(id), JFlags, charsmax(JFlags))
		get_pcvar_string(Cvar_AdmListenFlag, AdmFlags, charsmax(AdmFlags))
		if(get_user_team(id) == get_user_team(j) && get_pcvar_num(Cvar_AdmListen) != 1)
			CC_SendMatched(j, id, "%s", szMsg)
		else if(get_user_team(id) == get_user_team(j) && containi(JFlags, AdmFlags) != -1 && get_pcvar_num(Cvar_AdmListen) == 1)
			CC_SendMatched(j, id, "%s", szMsg)
	}
	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#",g_iXPl[id],g_iLevel[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#",g_iXPl[id],g_iLevel[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);
	
	g_iXPl[id] = str_to_num(playerxp);
	g_iLevel[id] = str_to_num(playerlevel);
	
	return PLUGIN_CONTINUE;
}

public IsValidMessage(szMsg[0])
{
	new bool:bValid = true
	
	for(new i = 0; i < sizeof(szBadStarts); i++)
	{
		if(equal(szMsg[0], szBadStarts[i]))
		{
			bValid = false
			break;
		}
	}
		
	return bValid
}

public changeTeamInfo(player, team[])
{
	message_begin(MSG_ONE, teamInfo, _, player)
	write_byte(player)
	write_string(team)
	message_end()
}
Последно промяна от mi0 на 30 Мар 2018, 21:47, променено общо 1 път.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

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

Двойно съобщение в ранк система

Мнение от OciXCrom » 30 Мар 2018, 21:45

Като за начало дай работещ код. Този не се компилира.

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Двойно съобщение в ранк система

Мнение от mi0 » 30 Мар 2018, 21:48

OciXCrom™ написа: 30 Мар 2018, 21:45 Като за начало дай работещ код. Този не се компилира.
Готово.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

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

Двойно съобщение в ранк система

Мнение от OciXCrom » 30 Мар 2018, 21:52

Не виждам нищо в този код, което може да създаде такъв проблем. Опитай да сложиш PLUGIN_HANDLED вместо PLUGIN_HANDLED_MAIN.

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

for(new j; j <= 32; j++)
{
	new JFlags[32], AdmFlags[2]
	get_flags(get_user_flags(id), JFlags, charsmax(JFlags))
	get_pcvar_string(Cvar_AdmListenFlag, AdmFlags, charsmax(AdmFlags))
	if(is_user_alive(id) == is_user_alive(j) && get_pcvar_num(Cvar_AdmListen) != 1)
		CC_SendMatched(j, id, "%s", szMsg)
	else if(is_user_alive(id) == is_user_alive(j) && containi(JFlags, AdmFlags) != -1 && get_pcvar_num(Cvar_AdmListen) == 1)
		CC_SendMatched(j, id, "%s", szMsg)
}
НИКОГА не дефинирай променливи в цикъл. По този начин създаваш променливата 32 пъти вместо само 1 път. Направи ги извън него или в самото му "тяло". Също така, в пъти по-бързо е да ползваш get_players вместо да луупваш всички 32 индекса.

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Двойно съобщение в ранк система

Мнение от mi0 » 30 Мар 2018, 22:00

OciXCrom™ написа: 30 Мар 2018, 21:52 Не виждам нищо в този код, което може да създаде такъв проблем. Опитай да сложиш PLUGIN_HANDLED вместо PLUGIN_HANDLED_MAIN.
Не е и от return-а.
Интересното е, че е, само когато си умрял и пишеш в all чата е двойно.
Може ли да е нещо от *dead* prefix-а, преди да го сложа, не правеше проблеми?

OciXCrom™ написа: 30 Мар 2018, 21:52 НИКОГА не дефинирай променливи в цикъл. По този начин създаваш променливата 32 пъти вместо само 1 път. Направи ги извън него или в самото му "тяло". Също така, в пъти по-бързо е да ползваш get_players вместо да луупваш всички 32 индекса.
Благодаря, оправих го.
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

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

Двойно съобщение в ранк система

Мнение от OciXCrom » 30 Мар 2018, 22:04

Току що тествах и при мен не се показват никакви съобщения, камо ли двойни. Тествай като спреш останалите плъгини, че явно съобщенията идват от напълно друг плъгин, понеже при мен нищо не се изписва в чата.

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Двойно съобщение в ранк система

Мнение от mi0 » 30 Мар 2018, 22:14

Няма други плъгини освен него и тези от AMXMODX.
При мен има съобщения:
При say жив -
Изображение
При say мъртъв -
Изображение
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

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

Двойно съобщение в ранк система

Мнение от OciXCrom » 30 Мар 2018, 22:32

Направи ли това с get_players? Възможно е от това да е проблемът, тъй като в луупа ползваш и индекс 0, което е id-то на сървъра, демек изпращаш съобщението с индекс 0, което означава всички играчи. Изпращаш го на всички наведнъж, както и на всеки играч по-отделно. Направи това ако не си, в противен случай дай новия код.

Аватар
mi0
Извън линия
AMXX Скриптър
AMXX Скриптър
Мнения: 534
Регистриран на: 09 Дек 2016, 22:02
Се отблагодари: 97 пъти
Получена благодарност: 120 пъти
Обратна връзка:

Двойно съобщение в ранк система

Мнение от mi0 » 30 Мар 2018, 22:40

Благодаря!
Не се бях сетил, че цикъла трябва да започва от 1...
Сега всичко е наред.
Лок :lock:
aka kurdokoleno
Catch Mod - 87.121.112.232:27021

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

Обратно към “Помощ в скриптирането”

Кой е на линия

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