atleast i can set how much time it will took to explode ....ppl enjoy this plugin a lot ...in my server ...and they always request to blast it urgent ...bcz they wan't to save themselves by getting knifed
Code:
/*
Suicide Bomber Information Center:
The 'Suicide Bomber' idea came to me from a
somewhat old mod that Exolent made (I've
also made a version myself). Once you've
gotten enough cash (cvar controlled), you
will be permitted to purchase a 'Suicide Bomb'.
You will then be able to activate it and blow
anyone up in a certain radius of yourself,
thus creating an epic death scene.
*/
#include <amxmodx>
#include <hamsandwich>
#include <engine>
#include <cstrike>
#define PLUGIN "Suicide Bomb"
#define AUTHOR "GXLZPGX"
#define VERSION "1.4"
#define is_player(%1) (1 <= %1 <= g_iMaxPlayers)
#define BOMB 100
/* Self explanitory private variables */
new g_BombTimer[33];
/* Self explanitory private bools */
new bool:g_HasBomb[33];
new bool:g_BombRemoved[33];
/* Self explanitory public variables */
new pcvar_BombEnable;
new pcvar_BombPrice;
new pcvar_BombRadius;
new pcvar_BombFF;
/* Self explanitory public bools */
new bool:g_RoundEnded;
/* Self explanitory sound path */
new const gszC4[] = "weapons/c4_beep4.wav"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
/* Player commands */
register_clcmd( "say /buybomb", "Bomb_Buy" )
register_clcmd( "say /bb", "Bomb_Buy" )
register_clcmd( "say_team /buybomb", "Bomb_Buy" )
register_clcmd( "say_team /bb", "Bomb_Buy" )
/* Server vars */
pcvar_BombEnable = register_cvar( "sb_enabled", "1" )
pcvar_BombPrice = register_cvar( "sb_price", "8000" )
pcvar_BombRadius = register_cvar( "sb_radius", "400" )
pcvar_BombFF = register_cvar( "sb_friendlyfire", "0" )
/* Hooking flashlight */
register_impulse( 100, "Event_Flashlight" )
/* Round beginning */
register_logevent( "Event_RoundBegin", 2, "1=Round_Start" );
/* Round ending */
register_logevent( "Event_RoundEnd", 2, "1=Round_End" )
}
public client_disconnect(id)
{
g_HasBomb[id] = false;
}
public plugin_precache()
{
precache_sound( gszC4 )
}
public Event_RoundEnd()
{
g_RoundEnded = true;
}
public Event_RoundBegin()
{
g_RoundEnded = false;
arrayset( g_HasBomb, false, charsmax(g_HasBomb) )
arrayset( g_BombRemoved, false, charsmax(g_BombRemoved) )
}
public Bomb_Buy(id)
{
if( get_pcvar_num(pcvar_BombEnable) == 0 )
{
client_print( id, print_chat, "[Suicide Bomb] Suicide bombs are currently disabled." )
return PLUGIN_HANDLED;
}
new szBombMenu[104];
formatex( szBombMenu, charsmax(szBombMenu), "\ySuicide Bomb Shop^n\rCurrent Price:\w %d^n^n\w Are you sure you want to buy a suicide bomb?", get_pcvar_num(pcvar_BombPrice) )
new menu = menu_create( szBombMenu, "BombMenu_Handler" )
menu_additem( menu, "Yes", "1", 0 )
menu_additem( menu, "No", "2", 0 )
menu_display( id, menu, 0 )
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL )
return PLUGIN_HANDLED
}
public BombMenu_Handler(id, menu, item)
{
if( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo( menu, item, access, data, 6, iName, 63, callback )
new key = str_to_num( data );
switch( key )
{
case 1:
{
new money = cs_get_user_money(id)
if( (money >= get_pcvar_num(pcvar_BombPrice)) && g_BombRemoved[id] == false )
{
cs_set_user_money( id, money - get_pcvar_num(pcvar_BombPrice) )
client_print( id, print_chat, "[Suicide Bomb] You're now armed with a suicide bomb. Use your flashlight to activate it." )
g_HasBomb[id] = true;
g_BombRemoved[id] = true;
} else {
client_print( id, print_chat, "[Suicide Bomb] You're not permitted to use that, soldier!" )
}
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public Event_Flashlight(id)
{
if( !is_user_alive(id) )
{
return PLUGIN_HANDLED;
}
if( g_HasBomb[id] == true && g_RoundEnded == false )
{
g_BombTimer[id] = 3;
if( task_exists( BOMB + id ) || g_BombTimer[id] < 3 )
{
return PLUGIN_HANDLED;
}
set_task( 1.0, "CountDownExplode", BOMB + id, _, _, "b" )
}
return PLUGIN_CONTINUE;
}
public CountDownExplode(id)
{
id -= BOMB
if( !is_user_alive(id) || g_RoundEnded == true )
{
remove_task( id + BOMB )
return PLUGIN_HANDLED;
}
if( g_BombTimer[id] > 1 )
{
if( g_BombTimer[id] > 2 )
{
emit_sound(id, CHAN_AUTO, gszC4, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
g_BombTimer[id] -= 1
} else {
Explode(id)
new iPlayers[32], iNum, plr;
get_players(iPlayers, iNum, "ah" )
new origin[3];
for( new i = 0; i < iNum; i++ )
{
plr = iPlayers[i]
new origin2[3];
get_user_origin( id, origin, 0 )
get_user_origin( plr, origin2, 0 )
if( get_distance( origin, origin2 ) <= get_pcvar_num(pcvar_BombRadius) && is_user_alive(plr) )
{
if( get_pcvar_num(pcvar_BombFF) == 1 )
{
user_silentkill(plr)
Create_DeathMsg( plr, id )
} else {
if( (cs_get_user_team(id) != cs_get_user_team(plr)) )
{
user_silentkill(plr)
Create_DeathMsg( plr, id )
}
}
}
}
user_silentkill(id)
remove_task( id + BOMB )
}
return PLUGIN_HANDLED;
}
Explode(id)
{
new origin[3]
get_user_origin(id, origin, 0)
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_TAREXPLOSION)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
message_end()
}
public Create_DeathMsg( Victim, Attacker )
{
message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg"), {0,0,0});
write_byte(Attacker);
write_byte(Victim);
write_byte(1)
write_string("worldspawn");
message_end();
}