/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <codmod>
#include <hamsandwich>
#include <fakemeta_util>
#include <csx>
#define m_fBombState 96
#define m_fBombDefusing 232
#define m_flProgressBarStartTime 605
#define m_flProgressBarEndTime 606
// m_fBombState - flagi
#define BombState_StartDefusing 1<<0
#define BombState_PlantedC4 1<<8
// m_fBombDefusing - flagi
#define BombStatus_BeingDefusing 1<<8
#define m_flDefuseCountDown 99 // Czas w ktorym zostanie rozbrojona paka
#define m_flNextPrimaryAttack 46 // Czas do nastepnego ataku
#define m_bStartedArming 78 // Zwraca true, jesli uzbrajanie paki sie zaczelo
#define m_bBombPlacedAnimation 79 // Zwraca true, jesli ruszyla animacja (nie wiem czy paki czy gracza).
#define m_fArmedTime 80 // Czas w ktorym zostanie podlozona paka.
#define IsBombPlanted(%0) (!!(get_pdata_int(%0, m_fBombState) & BombState_PlantedC4))
#define IsBombStartDefusing(%0) (!!(get_pdata_int(%0, m_fBombState) & BombState_StartDefusing))
#define IsBombDefusing(%0) (!!(get_pdata_int(%0, m_fBombDefusing) & BombStatus_BeingDefusing))
#define SetDefuseCountDown(%0,%1) ( set_pdata_float( %0, m_flDefuseCountDown, get_gametime() + %1 ) )
#define SetProgressBarTime(%0,%1) ( set_pdata_float( %0, m_flProgressBarStartTime, get_gametime() ), set_pdata_float( %0, m_flProgressBarEndTime, get_gametime() + %1 ) )
new const nazwa[] = "Narzedzia Pirotechnika";
new const opis[] = "Natychmiastowo rozbrajasz/podkladasz bombe.";
new MessageBarTime;
new HandleHookBarTime;
new bool: ma_perk[33];
public plugin_init()
{
register_plugin(nazwa, "1.0", "Alelluja");
cod_register_perk(nazwa, opis);
RegisterHam(Ham_Use, "grenade", "Defuse_Pre", false);
RegisterHam(Ham_Use, "grenade", "Defuse_Post", true);
MessageBarTime = get_user_msgid("BarTime");
}
public cod_perk_enabled(id)
{
ma_perk[id] = true;
}
public cod_perk_disabled(id)
{
ma_perk[id] = false;
}
public bomb_planting(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE;
if(!ma_perk[id])
return PLUGIN_CONTINUE;
new ent = fm_find_ent_by_owner(-1, "weapon_c4", id)
if(ent)
{
message_begin(MSG_ONE,MessageBarTime,{0,0,0},id)
write_byte(0)
write_byte(0)
message_end()
set_pdata_float(ent, m_flNextPrimaryAttack , 0.0, 4);
set_pdata_int(ent, m_bStartedArming, true, 4)
set_pdata_int(ent, m_bBombPlacedAnimation, true, 4)
set_pdata_float(ent, m_fArmedTime, get_pdata_float(ent, 80, 4)-3.0, 4)
}
return PLUGIN_CONTINUE;
}
public Defuse_Pre( const grenade, const caller, const activator, const useType, const Float:value )
{
if(IsBombPlanted(grenade) && is_user_connected(activator) && get_user_team(activator) == 2 && !IsBombStartDefusing(grenade) && ma_perk[activator])
{
HandleHookBarTime = register_message(MessageBarTime, "OnMessageBarTime" );
}
}
public Defuse_Post( const grenade, const caller, const activator, const useType, const Float:value )
{
if( HandleHookBarTime )
{
SetProgressBarTime(activator, 0);
SetDefuseCountDown(grenade, 0);
unregister_message( HandleHookBarTime, MessageBarTime );
HandleHookBarTime = 0;
}
}
public OnMessageBarTime( msgId, msgDest, msgEntity )
{
if( IsBombDefusing( msgEntity ) )
{
set_msg_arg_int(1, ARG_SHORT, 0);
}
}