2.	[ZP] Anti Infect Bomb 
3.	- other name - 
4.	Gas Mask
5.	Description: 
6.	[ Removes bombs that is thrown at zombie ] 
7.	[ (it will remove everything in range of 150) ]
8.	Credits to : 
9.	[ AmineKyo ]
10.	[ Nick Haldem ]
11.	[ Excalibur ]
12.	[ micapat ]
13.	[ Y060N ]
14.	Version : 
15.	[2.1 - Final modifying]
16.	*/
17.	#include < amxmodx >
18.	#include < hamsandwich >
19.	#include < engine >
20.	#include < zombieplague >
21.	#define _PLUGIN "[ZP] Extra item: Gas Mask"
22.	#define _VERSION "2.1"
23.	#define _AUTHOR "H.RED.ZONE"
24.	#define _MarkPlayerInMask(%0) _bitPlayerInMask |= (1 << (%0 & 31))
25.	#define _ClearPlayerInMask(%0) _bitPlayerInMask &= ~(1 << (%0 & 31))
26.	#define _IsPlayerInMask(%0) _bitPlayerInMask & (1 << (%0 & 31))
27.	#define _MarkPlayerConnected(%0) _bitPlayerConnected |= (1 << (%0 & 31))
28.	#define _ClearPlayerConnected(%0) _bitPlayerConnected &= ~(1 << (%0 & 31))
29.	#define _IsPlayerConnected(%0) _bitPlayerConnected & (1 << (%0 & 31))
30.	#define _MarkPlayerAlive(%0) _bitPlayerAlive |= (1 << (%0 & 31))
31.	#define _ClearPlayerAlive(%0) _bitPlayerAlive &= ~(1 << (%0 & 31))
32.	#define _IsPlayerAlive(%0) _bitPlayerAlive & (1 << (%0 & 31))
33.	#define EV_INT_nadetype EV_INT_flTimeStepSound
34.	#define NADETYPE_INFECTION 1111 
35.	#define COST 90 // Item Cost
36.	new g_itemid_buyremoverh
37.	new g_icon 
38.	new _pcvar_range
39.	,_pcvar_after_remove
40.	,_pcvar_prefix
41.	new _bitPlayerInMask
42.	,_bitPlayerAlive
43.	,_bitPlayerConnected
44.	new g_MsgSayText
45.	,g_MaxPlayers 
46.	new const plr_command[][] = {
47.	"say /mask",
48.	"say_team /mask" 
49.	} 
50.	public plugin_init() {
51.	register_plugin( "[ZP] Extra item: Gas Mask", "2.1", "H.RED.ZONE" )
52.	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
53.	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1 )
54.	RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade", 1)
55.	g_itemid_buyremoverh = zp_register_extra_item("Gazmaszk \r(Fertozes ellen)" , COST , ZP_TEAM_HUMAN )
56.	register_event( "HLTV", "NewRound", "a", "1=0", "2=0" )
57.	for ( new Index; Index < sizeof plr_command; Index++)
58.	register_clcmd(plr_command[Index], "buy_mask")
59.	_pcvar_range = register_cvar( "zp_gas_remover_range", "200" )
60.	_pcvar_after_remove = register_cvar( "zp_gas_remover_after", "1" )
61.	_pcvar_prefix = register_cvar("zp_gas_mask_prefix", "Mask", 0, 0.0)
62.	g_MsgSayText = get_user_msgid("SayText");
63.	g_MaxPlayers = get_maxplayers()
64.	g_icon = get_user_msgid("StatusIcon") 
65.	}
66.	public zp_extra_item_selected( plr, itemid ) {
67.	if ( itemid == g_itemid_buyremoverh ) {
68.	if( ~_IsPlayerInMask( plr ) ) {
69.	_MarkPlayerInMask( plr )
70.	ProtoChat(plr, "Gázmaszkot vásároltál.")
71.	Icon_On(plr)
72.	} 
73.	}
74.	}
75.	public buy_mask(id) {
76.	new ammopacks = zp_get_user_ammo_packs(id)
77.	if( _IsPlayerInMask( id ) ) {
78.	ProtoChat(id, "Felvetted a Gázmaszkot.")
79.	}
80.	else if( ammopacks > COST) {
81.	_MarkPlayerInMask(id)
82.	zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - COST);
83.	}
84.	else {
85.	ProtoChat(id, "Most nem vásárolhatsz Gázmaszkot.")
86.	} 
87.	}
88.	public fw_ThinkGrenade( entity ) {
89.	if( is_valid_ent( entity ) && entity_get_int( entity, EV_INT_nadetype ) == NADETYPE_INFECTION ) { 
90.	new _cvar_range = get_pcvar_num( _pcvar_range ) 
91.	new _cvar_after_remove = get_pcvar_num( _pcvar_after_remove )
92.	for( new id = 1 ; id <= g_MaxPlayers ; id++ ) {
93.	if( _IsPlayerAlive( id ) && _IsPlayerInMask( id )) {
94.	if( get_entity_distance( entity, id ) <= _cvar_range ) {
95.	remove_entity( entity )
96.	if( _cvar_after_remove ) {
97.	_ClearPlayerInMask( id )
98.	Icon_Off(id) 
99.	ProtoChat(id, "A fertőző gránát melleted robbant és a Gáz Maszkod elrohadt.")
100.	}
101.	}
102.	}
103.	}
104.	}
105.	return HAM_IGNORED;
106.	} 
107.	public NewRound() {
108.	_bitPlayerInMask = 0
109.	}
110.	public client_connect( plr ) {
111.	_MarkPlayerConnected( plr ) 
112.	}
113.	public client_disconnect( plr ) {
114.	_ClearPlayerConnected( plr )
115.	Icon_Off( plr ) 
116.	}
117.	public zp_user_infected_post( id ) {
118.	_ClearPlayerInMask( id )
119.	Icon_Off( id ) 
120.	}
121.	public zp_user_infected_pre( id ) {
122.	_ClearPlayerInMask( id )
123.	Icon_Off( id ) 
124.	} 
125.	public Icon_On(plr) {
126.	message_begin( MSG_ONE_UNRELIABLE, g_icon, { 0, 0, 0 }, plr );
127.	write_byte( 1 );
128.	write_string( "dmg_gas" );
129.	write_byte( 0 );
130.	write_byte( 255 );
131.	write_byte( 0 );
132.	message_end( );
133.	}
134.	public Icon_Off(plr) {
135.	message_begin( MSG_ONE_UNRELIABLE, g_icon, { 0, 0, 0 }, plr );
136.	write_byte( 0 );
137.	write_string( "dmg_gas" );
138.	write_byte( 0 );
139.	write_byte( 255 );
140.	write_byte( 0 );
141.	message_end( );
142.	}
143.	public fw_PlayerKilled(plr, attacker, shouldgib) {
144.	if(_IsPlayerConnected(plr)) {
145.	_ClearPlayerAlive(plr)
146.	}
147.	}
148.	public fw_PlayerSpawn(plr) {
149.	if(_IsPlayerConnected(plr)) {
150.	_MarkPlayerAlive(plr)
151.	}
152.	}
153.	ProtoChat (plr, const sFormat[], any:...) {
154.	static i; i = plr ? plr : get_player();
155.	if ( !i ) {
156.	return PLUGIN_HANDLED;
157.	}
158.	new sPrefix[16];
159.	get_pcvar_string(_pcvar_prefix, sPrefix, 15);
160.	new sMessage[256];
161.	new len = formatex(sMessage, 255, "^x01[^x04%s^x01] ", sPrefix);
162.	vformat(sMessage[len], 255-len, sFormat, 3)
163.	sMessage[192] = '^0' 
164.	Make_SayText(plr, i, sMessage)
165.	return PLUGIN_CONTINUE;
166.	}
167.	get_player() {
168.	for ( new plr; plr <= g_MaxPlayers; plr++) {
169.	if (_IsPlayerConnected(plr)) {
170.	return plr;
171.	}
172.	}
173.	return PLUGIN_HANDLED
174.	}
175.	Make_SayText(Receiver, Sender, sMessage[]) {
176.	if (!Sender) {
177.	return PLUGIN_HANDLED;
178.	}
179.	message_begin(Receiver ? MSG_ONE_UNRELIABLE : MSG_ALL, g_MsgSayText, {0,0,0}, Receiver)
180.	write_byte(Sender)
181.	write_string(sMessage)
182.	message_end()
183.	return PLUGIN_CONTINUE;
184.	}
185.	/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
186.	*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang10266\\ f0\\ fs16 \n\\ par }
187.	*/