/* .: Drop Or Hide The Bomb :.
By K.K.Lv
.: Version List :.
1.0 Original Version
1.1 Add a menu to choose the hide time of the Bomb!
1.2 Add a func to resend the bomb to the Terrorists!(this func wrote by Bugsy)
1.3 remove the 'get_c4' func when end round!
1.4 accept crazyeffect suggestion, add a "drop_or_hide_bomb.txt" that can be add multi language in it !!
.: Cvar :.
amx_doh <0|1> <off|on>
*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta_util>
#include <fakemeta>
#define PLUGIN_NAME "Drop Or Hide Bomb"
#define PLUGIN_VERSION "1.4"
#define PLUGIN_AUTHOR "K.K.Lv"
#define KEY_1 MENU_KEY_1
#define KEY_2 MENU_KEY_2
#define KEY_3 MENU_KEY_3
#define KEY_4 MENU_KEY_4
#define KEY_0 MENU_KEY_0
new g_doh_cvar
new g_MaxPlayers
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_logevent("eRoundEnd", 2, "1=Round_End")
register_menucmd(register_menuid("Drop Or Hide Bomb"), 1023, "Menu_handle")
register_menucmd(register_menuid("Hide Bomb Menu"), 1023, "Hide_menu")
register_clcmd("drop", "cmdMenu")
g_doh_cvar = register_cvar("amx_doh", "1")
register_dictionary("drop_or_hide_bomb.txt")
g_MaxPlayers = get_maxplayers()
}
public cmdMenu(id)
{
if (is_user_alive(id) && get_pcvar_num(g_doh_cvar) && get_user_weapon(id) == CSW_C4)
{
new menubody[512], iLen
iLen = formatex(menubody, 511, "%L", id, "MENU_TITLE")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "DROP_THE_BOMB")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "HIDE_THE_BOMB")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "EXIT_MENU")
show_menu(id, KEY_1|KEY_2|KEY_0, menubody, -1, "Drop Or Hide Bomb")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public Menu_handle(id, key)
{
switch (key)
{
case 0:
{
engclient_cmd(id, "drop", "weapon_c4")
return PLUGIN_HANDLED
}
case 1:
{
displaymenu(id)
}
}
return PLUGIN_HANDLED
}
public displaymenu(id)
{
if (get_pcvar_num(g_doh_cvar))
{
new menubody[512], iLen
iLen = formatex(menubody, 511, "%L", id, "HIDE_MENU_TITLE")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_ONE")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_TWO")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_THREE")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "TIME_FOUR")
iLen += formatex(menubody[iLen], 511 - iLen, "%L", id, "EXIT_MENU")
show_menu(id, KEY_1|KEY_2|KEY_3|KEY_4|KEY_0, menubody, -1, "Hide Bomb Menu")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public Hide_menu(id, key)
{
switch (key)
{
case 0:
{
new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
engclient_cmd(id, "drop", "weapon_c4")
new iBox = pev(iEnt, pev_owner)
if (!iBox || iBox == id)
return false
dllfunc(DLLFunc_Think, iBox)
set_task(30.0, "get_c4", id)
return PLUGIN_HANDLED
}
case 1:
{
new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
engclient_cmd(id, "drop", "weapon_c4")
new iBox = pev(iEnt, pev_owner)
if (!iBox || iBox == id)
return false
dllfunc(DLLFunc_Think, iBox)
set_task(60.0, "get_c4", id)
}
case 2:
{
new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
engclient_cmd(id, "drop", "weapon_c4")
new iBox = pev(iEnt, pev_owner)
if (!iBox || iBox == id)
return false
dllfunc(DLLFunc_Think, iBox)
set_task(75.0, "get_c4", id)
}
case 3:
{
new iEnt = fm_find_ent_by_owner(-1, "weapon_c4", id)
engclient_cmd(id, "drop", "weapon_c4")
new iBox = pev(iEnt, pev_owner)
if (!iBox || iBox == id)
return false
dllfunc(DLLFunc_Think, iBox)
set_task(90.0, "get_c4", id)
}
case 4:
{
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}
public get_c4(id)
{
if (!is_user_alive(id))
{
new iTeammate = FindTeammate(id)
if (iTeammate)
{
give_item(iTeammate, "weapon_c4")
cs_set_user_plant(iTeammate, 1, 1)
return PLUGIN_HANDLED
}
}
else if (is_user_alive(id))
{
give_item(id, "weapon_c4")
cs_set_user_plant(id, 1, 1)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public FindTeammate(id)
{
new Float: fOriginBomb1[3]
new Float: fOriginBomb2[3]
new Float: fMinDist = 99999.0
new Float: fDist
new iTeammate
new iPlayers[32]
new iPlayersNum
new iPlayer
pev(id, pev_origin, fOriginBomb1)
get_players(iPlayers, iPlayersNum)
if (!iPlayersNum)
return 0
for (new i = 0; i < iPlayersNum; i++)
{
iPlayer = iPlayers[i]
if ((get_user_team(iPlayer) == 1) && is_user_alive(iPlayer) && (iPlayer != id))
{
pev(iPlayer, pev_origin, fOriginBomb2)
fDist = get_distance_f(fOriginBomb1 , fOriginBomb2)
if (fDist < fMinDist)
{
fMinDist = fDist
iTeammate = iPlayer
}
}
}
return iTeammate
}
public eRoundEnd()
{
for (new id = 1; id <= g_MaxPlayers; id++)
if (is_user_connected(id) && task_exists(id))
remove_task(id)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg936\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset134 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang2052\\ f0\\ fs16 \n\\ par }
*/