Page 1 of 1

Bug player/zm

Posted: 25 Jul 2019, 01:55
by MarcoReusNr1
Salut, folosesc un plugin pentru leader iar player ul care e leader si e infectat ramane jumate om jumate zm, sau uneori complet om doar maini de zm, poate rezolva cineva asta? modul e zm biohazard
Sursa:
| Afiseaza codul
/*
* CREDITS:
* - tuty			*for Trail Player
*/

#include <amxmodx> 
#include <fun>
#include <fakemeta>
#include <biohazard>

#define TASK_AURA 1292

enum attributes
{
	GLOW = 0,
	TRAIL,
	AURA
};
new cvar[attributes];
new trail_randomcolor[3], trail[33], Float:bflNextCheck[33];
new leader = -1, last_leader = -1, g_rounds = 0, trail_sprite;

new const g_trail_sprite[] = "sprites/zbeam2.spr";
const IN_MOVING = IN_FORWARD | IN_BACK | IN_MOVELEFT | IN_MOVERIGHT | IN_JUMP;

public plugin_init()
{
	register_plugin("[Biohazard] Leader", "1.0", "YONTU");

	register_logevent("le_RoundStart", 2, "1=Round_Start");
	register_logevent("le_RoundRestart", 2, "1&Restart_Round_");
	register_logevent("le_RoundRestart", 2, "1=Game_Commencing");

	register_event("DeathMsg", "event_DeathMsg", "a");

	register_forward(FM_CmdStart, "fw_CmdStart");

	cvar[GLOW] = register_cvar("bio_leader_glow", "1");
	cvar[TRAIL] = register_cvar("bio_leader_trail", "1");
	cvar[AURA] = register_cvar("bio_leader_aura", "1");
}

public plugin_precache()
{
	trail_sprite = precache_model(g_trail_sprite);
}

public le_RoundRestart()
{
	g_rounds = 0;
}

public client_disconnect(id)
{
	return_to_default(leader);
	set_task(0.1, "check_leader");
}

public le_RoundStart()
{
	if(g_rounds == 1)
	{
		g_rounds = -1;
	}
	else if(g_rounds != -1)
	{
		g_rounds = 1;
	}
	
	return_to_default(leader);
	return_to_default(last_leader);
	last_leader = -1;
}

public event_infect(victim, attacker)
{
	set_task(0.5, "check_leader");
}

public event_DeathMsg()
{
	set_task(0.5, "check_leader");
}

public event_gamestart()
{
	set_task(0.5, "check_leader");
}

public check_leader()
{
	if(!game_started() || g_rounds == 0 || g_rounds == 1)
	{
		return;
	}

	leader = get_leader();
	
	if(last_leader != leader && last_leader != -1)
	{
		return_to_default(leader);
		return_to_default(last_leader);
		last_leader = -1;
	}

	if(leader != last_leader)
	{
		trail_randomcolor[0] = random_num(0, 255);
		trail_randomcolor[1] = random_num(0, 255);
		trail_randomcolor[2] = random_num(0, 255);
		
		if(get_pcvar_num(cvar[GLOW]))
		{
			set_user_rendering(leader, kRenderFxGlowShell, trail_randomcolor[0], trail_randomcolor[1], trail_randomcolor[2], kRenderNormal, 15);
		}

		if(get_pcvar_num(cvar[TRAIL]))
		{
			trail[leader] = 1;
		}

		if(get_pcvar_num(cvar[AURA]))
		{
			set_task(0.1, "leader_aura", leader + TASK_AURA, _, _, "b");
		}

		new name[32];
		get_user_name(leader, name, charsmax(name));
		ColorChat(0, "!4[Biohazard]!1 Noul lider al acestei runde este!3 %s!1.", name);
		
		last_leader = leader;
	}
}

public fw_CmdStart(id, handle)
{
	if(!get_pcvar_num(cvar[TRAIL]))
	{
		return FMRES_HANDLED;
	}

	if(leader != last_leader)
	{
		id = leader;
	}
	
	if(!is_user_alive(id) || trail[id] == 0)
	{
		return FMRES_IGNORED;
	}
	
	new iButton = get_uc(handle, UC_Buttons);

	if(!(iButton & IN_MOVING))
    	{
		new Float:flGameTime = get_gametime();
	
		if(bflNextCheck[id] < flGameTime)
		{
			UTIL_KillBeamFollow(id);
			UTIL_BeamFollow(id);
		
			bflNextCheck[id] = flGameTime + (15 / 8);
		}
	}
	
	return FMRES_IGNORED;
}

public get_leader_handler(id1, id2)
{
	if(get_user_frags(id1) > get_user_frags(id2) || get_user_frags(id1) == get_user_frags(id2) && get_user_deaths(id1) < get_user_deaths(id2))
		return -1;

	return 1;
}

public get_leader()
{
	new players[32], num;
	get_players(players, num, "aeh", "CT");

	if(num < 2)
	{
		return -1;
	}

	SortCustom1D(players, num, "get_leader_handler");

	return players[0];
}

public leader_aura(taskid)
{
	new id = taskid - TASK_AURA;

	new origin[3];
	get_user_origin(id, origin);
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin);
	write_byte(TE_DLIGHT);
	write_coord(origin[0]);
	write_coord(origin[1]);
	write_coord(origin[2]);
	write_byte(20);
	write_byte(trail_randomcolor[0]);
	write_byte(trail_randomcolor[1]);
	write_byte(trail_randomcolor[2]);
	write_byte(2);
	write_byte(0);
	message_end();
}
		
stock UTIL_BeamFollow(const id)
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_BEAMFOLLOW);
	write_short(id);
	write_short(trail_sprite);
	write_byte(15);
	write_byte(20);
	write_byte(trail_randomcolor[0]);
	write_byte(trail_randomcolor[1]);
	write_byte(trail_randomcolor[2]);
	write_byte(255);
	message_end();
}

stock UTIL_KillBeamFollow(const id)
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(TE_KILLBEAM);    
	write_short(id);
	message_end();
}

stock return_to_default(id)
{
	if(!(1 <= id <= 32) || !is_user_connected(id))
		return;

	set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
	trail[id] = 0;
	bflNextCheck[id] = -1.0;
	UTIL_KillBeamFollow(id);
	remove_task(id + TASK_AURA);
}

stock ColorChat(id, String[], any:...)
{
	static szMesage[192];
	vformat(szMesage, charsmax(szMesage), String, 3);
	
	replace_all(szMesage, charsmax(szMesage), "!1", "^1");
	replace_all(szMesage, charsmax(szMesage), "!3", "^3");
	replace_all(szMesage, charsmax(szMesage), "!4", "^4");
	
	static g_msg_SayText = 0;
	if(!g_msg_SayText)
		g_msg_SayText = get_user_msgid("SayText");
	
	new Players[32], iNum = 1, i;

 	if(id) Players[0] = id;
	else get_players(Players, iNum, "ch");
	
	for(--iNum; iNum >= 0; iNum--)
	{
		i = Players[iNum];
	
		message_begin(MSG_ONE_UNRELIABLE, g_msg_SayText, _, i);
		write_byte(i);
		write_string(szMesage);
		message_end();
	}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1048\\ f0\\ fs16 \n\\ par }
*/

Re: Bug player/zm

Posted: 25 Jul 2019, 15:56
by levin
nu are legătură