/* AMX Mod X script.
*
* Follow The Bomb
*
* by The Specialist
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, the author gives permission to
* link the code of this program with the Half-Life Game Engine ("HL
* Engine") and Modified Game Libraries ("MODs") developed by Valve,
* L.L.C ("Valve"). You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve. If you modify this file, you may extend this exception
* to your version of the file, but you are not obligated to do so. If
* you do not wish to do so, delete this exception statement from your
* version.
*/
#include <amxmodx>
#include <engine>
#include <fun>
#include <cstrike>
new g_iFollow_Bomb;
new g_iPunish;
new g_iRadius;
new g_Mode[8];
new Float:c4origin[3];
new Float:pOrigin[3];
public plugin_init()
{
register_plugin("Kövesd a bombát","1.1","The Specialist");
register_dictionary("follow_the_bomb.txt");
register_event("ResetHUD","reset_hud","be");
register_event("BarTime", "bomb_planting", "be", "1=3");
register_logevent("bomb_is_planted", 3, "2=Planted_The_Bomb");
register_logevent("bomb_is_dropped", 3, "2=Dropped_The_Bomb");
register_logevent("bomb_defuse_no_kit", 3, "2=Begin_Bomb_Defuse_Without_Kit");
register_logevent("bomb_defuse_kit", 3, "2=Begin_Bomb_Defuse_With_Kit");
g_iFollow_Bomb = register_cvar("ftb_switch","1");
g_iPunish = register_cvar("ftb_punishment","a");
g_iRadius = register_cvar("ftb_radius","1000");
set_task(2.0,"find_bomb",0,"",0,"b");
}
// hud nullázása
public reset_hud(id)
{
if( cs_get_user_team(id) == CS_TEAM_T && find_ent_by_class(-1 , "weapon_c4"))
{
set_hudmessage(255, 255, 255, -1.0, 0.31, 0, 6.0, 12.0);
show_hudmessage(id, "%L",id,"FOLLOW",get_pcvar_num(g_iRadius));
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
// bomba és a közel/távol lévők keresése
public find_bomb(id)
{
new g_iBomb = find_ent_by_class(-1,"weapon_c4");
if(get_pcvar_num(g_iFollow_Bomb)==0 || g_iBomb == 0)
{
return PLUGIN_HANDLED;
}else{
entity_get_vector(g_iBomb,EV_VEC_origin,c4origin);
new players[32];
new num;
get_players(players,num,"ace","TERRORIST");
for(new i=0;i<num;i++)
{
entity_get_vector(players[i],EV_VEC_origin,pOrigin);
new Float: g_Dist = get_distance_f(c4origin,pOrigin);
new g_iDist = floatround(g_Dist);
set_hudmessage(255, 255, 255, -1.0, 0.79, 0, 6.0, 2.0);
show_hudmessage(players[i], "%L",players,"METER",g_iDist);
if( g_Dist > get_pcvar_num(g_iRadius))
{
punish_mode(players[i]);
}else if(g_Dist > get_pcvar_num(g_iRadius) / 2)
{
set_hudmessage(255, 0, 0, -1.0, 0.31, 0, 6.0, 12.0);
show_hudmessage(players[i], "%L",players,"WARNING");
}
}
}
return PLUGIN_HANDLED;
}
// büntetés funkció
public punish_mode(players)
{
get_pcvar_string(g_iPunish,g_Mode,7);
new g_iMode = read_flags(g_Mode);
new g_iArmor = get_user_armor(players);
new g_iMoney = cs_get_user_money(players);
new g_iHealth = get_user_health(players);
set_hudmessage(255, 255, 255, -1.0, 0.34, 0, 6.0, 2.0);
show_hudmessage(players, "%L",players,"LEAVING");
if(g_iMode & 1 ) // flag a
{
user_slap(players,0);
}
if(g_iMode & 2 ) // flag b
{
set_user_armor(players,(g_iArmor - 1));
}
if(g_iMode & 4 ) // flag c
{
strip_user_weapons(players);
}
if(g_iMode & 8 ) // flag d
{
cs_set_user_money(players,(g_iMoney - 10));
}
if(g_iMode & 16) // flag e
{
user_kill(players);
}
if(g_iMode & 32 ) // flag f
{
return PLUGIN_HANDLED;
}
if(g_iMode & 64) // flag g
{
set_user_health(players,(g_iHealth - 1));
}
return PLUGIN_HANDLED;
}
// az állapotjelző csíkon át észleli az élesítést
public bomb_planting(id)
{
new i,num;
new g_Name[32];
new players[32];
get_user_name(id,g_Name,31);
get_players(players,num,"ace","TERRORIST");
for(i = 0; i < num ; ++i)
{
set_hudmessage(255, 255, 255, -1.0, 0.35, 0, 6.0, 12.0);
show_hudmessage(players[i], "%L",id,"PLANTING",g_Name);
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
// észleli a bomba élesítve üzenetet
public bomb_is_planted()
{
new players[32],num;
get_players(players,num,"ace","TERRORIST");
for(new i = 0; i < num ; ++i)
{
set_hudmessage(255, 255, 255, -1.0, 0.34, 0, 6.0, 12.0);
show_hudmessage(players[i], "%L",players,"PLANTED");
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
// figyeli a bomba eldobását
public bomb_is_dropped()
{
new players = get_loguser_index();
punish_mode(players);
set_hudmessage(255, 255, 255, -1.0, 0.19, 0, 6.0, 12.0);
show_hudmessage(players, "%L",players,"DROPPED");
new ct_players[32]
new num,i;
entity_get_vector(ct_players[i],EV_VEC_origin,pOrigin);
new Float: g_Dist = get_distance_f(c4origin,pOrigin);
new g_iDist = floatround(g_Dist);
get_players(ct_players,num,"ace","CT");
for( i = 0 ; i < num ; ++i)
{
set_hudmessage(255, 255, 255, -1.0, 0.24, 0, 6.0, 12.0);
show_hudmessage(ct_players[i], "Bomb Down ^n %i Units Away!",g_iDist);
}
}
// észleli a bomba hatástalanítását defkit nélkül
public bomb_defuse_no_kit()
{
new id = get_loguser_index();
new g_Name[33];
new players[32],num;
get_user_name(id,g_Name,32);
get_players(players,num,"ace","CT");
for(new i = 0 ; i < num ; ++i)
{
set_hudmessage(255, 255, 255, -1.0, 0.3, 0, 6.0, 12.0);
show_hudmessage(players[i], "%L",players,"NO_KIT",g_Name);
}
}
// észleli a bomba hatástalanítását defkittel
public bomb_defuse_kit()
{
new id = get_loguser_index();
new g_Name[33];
new players[32],num;
get_user_name(id,g_Name,32);
get_players(players,num,"ace","CT");
for(new i = 0 ; i < num ; ++i)
{
set_hudmessage(255, 255, 255, -1.0, 0.3, 0, 6.0, 12.0);
show_hudmessage(players[i], "%L",players,"KIT",g_Name);
}
}
// index szerzése az eseményekből
stock get_loguser_index()
{
new loguser[80], name[32];
read_logargv(0, loguser, 79);
parse_loguser(loguser, name, 31);
return get_user_index(name);
}