Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

RSSSeparate plugin only for the Roundtimer fix after change map


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
I want to extract the code for the fix that makes the roundtimer not disappear when changing map to a cs_ map if the bomb was still planted in a de_ map.
And make it a separate plugin.

Can anyone take this please?


Code:

HTML Code:

/**
 *
 * Grenade/C4 Fixes & Hud Enhancement
 *  by Numb
 *
 *
 * Description:
 *  This plugin is designed to fix variety of grenade and c4 related bugs, while introducing
 *  some amount of hud improvements and editions.
 *  Bomb Fixes:
 *  + When bomb is planted in water it will explode if not defused, instead of resulting in
 *    an infinite round.
 *  + Bomb cannot be moved by movable objects any longer.
 *  + Bomb cannot explode and be defused at the same time anymore.
 *  + Silent defuse by pressing use key twice, or using knife secondary attack, or
 *    activating flashlight is no longer possible.
 *  + Defuse cannot be started from air - log stays clean.
 *  + Bomb cannot squeeze itself through objects, to be planted outside the map.
 *  + "Counter-Terrorists win" sound doesn't overwrite "Bomb has been defused" one.
 *  + At new round reload isn't canceled if you have the bomb.
 *  + When dropped from large distance, bomb location on radar is accurate.
 *  + Secondary attack cancels the defuse.
 *  Grenade Fixes:
 *  + Grenades have reasonable velocities when breaking glass.
 *  + Flash grenades exploded underwater can blind players on land, and the opposed way
 *    around.
 *  + Underwater explosions have ability to damage players who are on land.
 *  + Grenades cannot squeeze themselves out of map.
 *  Other Fixes:
 *  + When disconnecting from a server where bomb was planted, and connecting into your
 *    non-bomb objective server, round timer is present anyway.
 *  + After playing a map with built-in echo system, echo glitch is fixed (however client
 *    must have s_eax set to 0 for it to work).
 *  + BarTime (loading bar) is canceled for spectators when planter or defuser dies.
 *  + BarTime (loading bar) is canceled when switching weapons during defuse or bomb plant.
 *  HUD Changes:
 *  + If bomb is planted, round timer shows seconds remaining until detonation.
 *  + Condition-Zero style c4 scenario icon near round timer when bomb is planted.
 *  + Silver defuse kit icon when bomb isn't planted, when planted - green.
 *  + Defuse kit icon is blinking in red and green when defusing without a kit.
 *  + Red defuse kit icon when defusing with a kit.
 *  + While planting the bomb, c4 icon is red.
 *  + Silver buyzone icon when buytime passed.
 *  Other Features:
 *  + Angle of planted bomb is the same as planter had when planting.
 *  + Flashbangs and he-grenades have a light effect when exploding.
 *
 *
 * Requires:
 *  FakeMeta
 *  HamSandWich
 *
 *
 * Additional info:
 *  Tested in Counter-Strike 1.6 with amxmodx 1.8.2 (dev build hg21). Should also work in
 *  Condition-Zero.
 *
 *
 * Credits:
 *  Special thanks to Arkshine ( http://forums.alliedmods.net/member.php?u=7779 ) for
 *  Counter-Strike SDK ( https://github.com/Arkshine/CSSDK/ ), and for providing other
 *  useful information! Thanks to xPaw ( http://forums.alliedmods.net/member.php?u=39377 )
 *  for method of fixing "bomb has been defused" sound as well - method taken from his
 *  "The bomb has been defused" ( http://forums.alliedmods.net/showthread.php?p=883102 )
 *  plugin. Also thanks to FOUTA ( http://forums.alliedmods.net/member.php?u=96050 )
 *  for providing help by testing the plugin on live public server.
 *
 *
 * Change-Log:
 *
 *  + 1.2
 *  - Fixed: Crash when stopping the defuse.
 *  - Fixed: Error log due to client message.
 *  - Fixed: Custom team switching will now remove defuser kit icon at player hud update.
 *  - Fixed: Freezetime was not added to buytime - grey buy icon earlier than it should be.
 *  - Added: Compatibility with mission scenario plugin. Basically just auto-changes the cvar.
 *
 *  + 1.1
 *  - Added: Secondary attack now cancels the defuse.
 *  - Added: BarTime (loading bar) is canceled when switching weapons during defuse or bomb plant.
 *  - Fixed: Pausing the plugin is now more friendly.
 *
 *  + 1.0
 *  - First release.
 *
 *
 * Downloads:
 *  Amx Mod X forums: http://forums.alliedmods.net/showthread.php?p=1594580#post1594580
 *
**/

// ----------------------------------------- CONFIG START -----------------------------------------

// Light effect data for flashbangs
#define FLASH_RADIUS    50
#define FLASH_RED        255
#define FLASH_GREEN      255
#define FLASH_BLUE      255
#define FLASH_LIFE_MS    8
#define FLASH_DECAY_RATE 60

// Light effect data for he-grenades
#define HE_RADIUS    30
#define HE_RED        255
#define HE_GREEN      191
#define HE_BLUE      31
#define HE_LIFE_MS    12
#define HE_DECAY_RATE 20

// ------------------------------------------ CONFIG END ------------------------------------------


#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN_NAME        "Grenade/C4 Fixes & Hud Enhancement"
#define PLUGIN_VERSION        "1.2"
#define PLUGIN_AUTHOR        "Numb"

#define SetPlayerBit(%1,%2)    ( %1 |=  ( 1 << ( %2 & 31 ) ) )
#define ClearPlayerBit(%1,%2)  ( %1 &= ~( 1 << ( %2 & 31 ) ) )
#define CheckPlayerBit(%1,%2)  ( %1 &  ( 1 << ( %2 & 31 ) ) )

#define m_pPlayer 41
#define m_iId 43
#define m_flNextSecondaryAttack 47

#define m_fHasDefuseKit 193
#define HAS_DEFUSE_KIT (1<<16)
#define m_iTeam 114
#define CS_TEAM_UNASSIGNED 0
#define CS_TEAM_T 1
#define CS_TEAM_CT 2
#define CS_TEAM_SPECTATOR 3
#define m_fBombDefusing 232
#define BombStatus_BeingDefusing (1<<8)
#define m_iMapZone 235
#define CS_MAPZONE_BUY (1<<0)
#define CS_MAPZONE_BOMBTARGET (1<<1)
#define CS_MAPZONE_HOSTAGE_RESCUE (1<<2)
#define CS_MAPZONE_ESCAPE (1<<3)
#define CS_MAPZONE_VIP_SAFETY (1<<4)
#define m_pActiveItem 373
#define m_flProgressBarStartTime 605
#define m_flProgressBarEndTime 606

#define m_fBombStatus 96
#define BOMB_DEFUSING (1<<0) // m_fStartDefuse
#define BOMB_PLANTED (1<<8) // m_fPlantedC4
//#define m_hDefuser 97 // doesn't work - get_pdata_ent() doesn't return the expected value
#define m_flDefuseCountDown 99
#define m_flC4Blow 100
#define m_flNextBeep 102
#define m_flNextFreq 103
#define m_flNextBlink 106
#define m_flNextDefuseTime 107
#define m_bJustBlew 108
#define m_iC4Beep 110
#define m_usEvent 114

new g_iMsgId_StatusIcon;
new g_iMsgId_Scenario;
new g_iMsgId_SendAudio;
new g_iMsgId_BombDrop;
new g_iMsgId_BombPickup;
new g_iMsgId_ShowTimer;
new g_iMsgId_RoundTime;
new g_iMsgId_BarTime;
new g_iMsgId_TextMsg;

new bool:g_bIsCzero;
new bool:g_bPlanted;
new g_iMaxPlayers;

new Float:g_fOldSpeed;
new g_iIgnoreTimerFix;
new g_iConnected;
new g_iAlive;

new Float:g_fRoundStartedAt;
new Float:g_fFreezeTime;
new g_iCvar_buytime;
new g_iCvar_freezetime;
new g_iModifiedBuyZone;

new Float:g_fPlantedAt;
new g_iCvar_c4Timer;
new g_iCvar_MissionScenario
new g_iC4Timer;
new bool:g_bCheckTxtMsg;

new HamHook:g_hh_Think_grenade_Post;

new g_iBackupInfo[32][2];
new g_iBackupPlayerNum;

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
       
        register_logevent("LogEvent_Defused_The_Bomb", 3, "1=triggered", "2=Defused_The_Bomb");
       
        register_event("HLTV",      "Event_NewRound",  "a", "1=0", "2=0");
        register_event("ShowTimer", "Event_ShowTimer", "b");
        register_event("SendAudio", "Event_SendAudio", "a", "1=0", "2=%!MRAD_BOMBDEF");
        register_event("BombDrop",  "Event_BombPlant", "a", "4=1");
        register_event("ResetHUD",  "Event_ResetHUD",  "b");
        register_event("BarTime",  "Event_BarTime",  "b");
        register_event("BarTime2",  "Event_BarTime2",  "b");
        register_event("CurWeapon", "Event_CurWeapon", "be");
       
        g_iMsgId_SendAudio  = get_user_msgid("SendAudio");
        g_iMsgId_BombDrop  = get_user_msgid("BombDrop");
        g_iMsgId_BombPickup = get_user_msgid("BombPickup");
        g_iMsgId_StatusIcon = get_user_msgid("StatusIcon");
        g_iMsgId_BarTime    = get_user_msgid("BarTime");
        g_iMsgId_Scenario  = get_user_msgid("Scenario");
        g_iMsgId_ShowTimer  = get_user_msgid("ShowTimer");
        g_iMsgId_RoundTime  = get_user_msgid("RoundTime");
        g_iMsgId_TextMsg    = get_user_msgid("TextMsg");
       
        register_message(g_iMsgId_StatusIcon, "Message_StatusIcon");
        register_message(g_iMsgId_BombDrop,  "Message_BombDrop");
        register_message(g_iMsgId_RoundTime,  "Message_RoundTime");
        register_message(g_iMsgId_TextMsg,    "Message_TextMsg");
       
        set_task(0.5, "find_c4", 33, "", 0, "b");
       
        register_forward(FM_EmitSound, "FM_EmitSound_Pre", 0);
        register_forward(FM_SetModel,  "FM_SetModel_Pre",  0);
       
        new iGameMod[8];
        get_modname(iGameMod, 7);
        if( equali(iGameMod, "czero") )
                g_bIsCzero = true;
       
        RegisterHam(Ham_Spawn,                  "player",      "Ham_Spawn_player_Post",  1);
        RegisterHam(Ham_Killed,                "player",      "Ham_Killed_player_Post", 1);
        RegisterHam(Ham_Spawn,                  "grenade",      "Ham_Spawn_grenade_Post", 1);
        RegisterHam(Ham_Use,                    "grenade",      "Ham_Use_grenade_Pre",    0);
        RegisterHam(Ham_Touch,                  "grenade",      "Ham_Touch_grenade_Pre",  0);
        RegisterHam(Ham_Touch,                  "grenade",      "Ham_Touch_grenade_Post", 1);
        RegisterHam(Ham_Think,                  "grenade",      "Ham_Think_grenade_Pre",  0);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "Ham_Wpn_SecAttack_Post", 1);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_awp",  "Ham_Wpn_SecAttack_Post", 1);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "Ham_Wpn_SecAttack_Post", 1);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_g3sg1", "Ham_Wpn_SecAttack_Post", 1);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg550", "Ham_Wpn_SecAttack_Post", 1);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg552", "Ham_Wpn_SecAttack_Post", 1);
        RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_aug",  "Ham_Wpn_SecAttack_Post", 1);
       
        g_hh_Think_grenade_Post = RegisterHam(Ham_Think, "grenade", "Ham_Think_grenade_Post", 1);
        DisableHamForward(g_hh_Think_grenade_Post);
       
        register_clcmd("say /hud", "Event_ResetHUD");
}

public plugin_cfg()
{
        if( !g_iCvar_MissionScenario )
                g_iCvar_MissionScenario = get_cvar_pointer("mp_mission_scenario");
}

public plugin_precache()
{
        g_iCvar_buytime = get_cvar_pointer("mp_buytime");
        g_iCvar_freezetime = get_cvar_pointer("mp_freezetime");
        g_iCvar_c4Timer = get_cvar_pointer("mp_c4timer");
        g_iC4Timer = clamp(get_pcvar_num(g_iCvar_c4Timer), 10, 90);
       
        g_iMaxPlayers = clamp(get_maxplayers(), 1, 32);
}

public plugin_pause()
{
        new iEnt, iPlayer;
        while( (iEnt=engfunc(EngFunc_FindEntityByString, iEnt, "classname", "grenade"))>
0 )
        {
                if( pev_valid(iEnt) )
                {
                        if( fm_cs_get_grenade_type(iEnt)==CSW_C4 && pev(iEnt, pev_movetype)!=MOVETYPE_NONE )
                        {
                                engfunc(EngFunc_SetSize, iEnt, Float:{-0.021, -0.021, -0.021}, Float:{0.021, 0.021, 0.021});
                                set_pev(iEnt, pev_solid, SOLID_NOT);
                               
                                set_pev(iEnt, pev_effects, (pev(iEnt, pev_effects)&~EF_NODRAW));
                               
                                iPlayer = pev(iEnt, pev_owner);
                                if( 0<iPlayer<=g_iMaxPlayers )
                                {
                                        if( CheckPlayerBit(g_iConnected, iPlayer) )
                                        {
                                                new Float:fAngles[3], Float:fAngle;
                                                pev(iPlayer, pev_v_angle, fAngles);
                                                fAngle = (fAngles[1]+90.0);
                                                pev(iEnt, pev_angles, fAngles);
                                                fAngles[1] = fAngle;
                                                set_pev(iEnt, pev_angles, fAngles);
                                        }
                                }
                               
                                g_iBackupPlayerNum = 0;
                                for( iPlayer=1; iPlayer<=g_iMaxPlayers; iPlayer++ )
                                {
                                        if( CheckPlayerBit(g_iConnected, iPlayer) )
                                        {
                                                g_iBackupInfo[g_iBackupPlayerNum][0] = iPlayer;
                                                g_iBackupInfo[g_iBackupPlayerNum][1] = pev(iPlayer, pev_solid);
                                                set_pev(iPlayer, pev_solid, SOLID_NOT);
                                                g_iBackupPlayerNum++;
                                        }
                                }
                                engfunc(EngFunc_DropToFloor, iEnt);
                                for( iPlayer=0; iPlayer<g_iBackupPlayerNum; iPlayer++ )
                                        set_pev(g_iBackupInfo[iPlayer][0], pev_solid, g_iBackupInfo[iPlayer][1]);
                                g_iBackupPlayerNum = 0;
                               
                                set_pev(iEnt, pev_movetype, MOVETYPE_NONE);
                        }
                }
        }
       
        for( iPlayer=1; iPlayer<=g_iMaxPlayers; iPlayer++ )
        {
                if( CheckPlayerBit(g_iConnected, iPlayer) )
                {
                        if( CheckPlayerBit(g_iAlive, iPlayer) )
                        {
                                iEnt = get_pdata_int(iPlayer, m_iMapZone, 5);
                                if( iEnt&CS_MAPZONE_BUY && CheckPlayerBit(g_iModifiedBuyZone, iPlayer) )
                                {
                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                        write_byte(1);
                                        write_string("buyzone");
                                        write_byte(0);
                                        write_byte(160);
                                        write_byte(0);
                                        message_end();
                                }
                               
                                switch( get_pdata_int(iPlayer, m_iTeam, 5) )
                                {
                                        case CS_TEAM_T:
                                        {
                                                if( get_user_weapon(iPlayer)==CSW_C4 )
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                                        write_byte(((iEnt&CS_MAPZONE_BOMBTARGET)?2:1));
                                                        write_string("c4");
                                                        write_byte(0);
                                                        write_byte(160);
                                                        write_byte(0);
                                                        message_end();
                                                }
                                        }
                                        case CS_TEAM_CT:
                                        {
                                                if( get_pdata_int(iPlayer, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                                        write_byte(1);
                                                        write_string("defuser");
                                                        write_byte(0);
                                                        write_byte(160);
                                                        write_byte(0);
                                                        message_end();
                                                }
                                                else
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                                        write_byte(0);
                                                        write_string("defuser");
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        message_end();
                                                }
                                        }
                                }
                        }
                        else if( pev(iPlayer, pev_iuser1)==4 )
                        {
                                if( 0<(iEnt=pev(iPlayer, pev_iuser2))<=g_iMaxPlayers )
                                {
                                        if( CheckPlayerBit(g_iAlive, iEnt) )
                                        {
                                                switch( get_pdata_int(iEnt, m_iTeam, 5) )
                                                {
                                                        case CS_TEAM_T:
                                                        {
                                                                if( get_user_weapon(iEnt)==CSW_C4 )
                                                                {
                                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                                                        write_byte(((get_pdata_int(iEnt, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET)?2:1));
                                                                        write_string("c4");
                                                                        write_byte(0);
                                                                        write_byte(160);
                                                                        write_byte(0);
                                                                        message_end();
                                                                }
                                                        }
                                                        case CS_TEAM_CT:
                                                        {
                                                                if( get_pdata_int(iEnt, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                                                                {
                                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                                                        write_byte(1);
                                                                        write_string("defuser");
                                                                        write_byte(0);
                                                                        write_byte(160);
                                                                        write_byte(0);
                                                                        message_end();
                                                                }
                                                                else
                                                                {
                                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlayer);
                                                                        write_byte(0);
                                                                        write_string("defuser");
                                                                        //write_byte(0);
                                                                        //write_byte(0);
                                                                        //write_byte(0);
                                                                        message_end();
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
}

public plugin_unpause()
{
        g_iIgnoreTimerFix = 0;
        g_iConnected = 0;
        g_iAlive = 0;
       
        new iPlayers[32], iPlayerNum;
        get_players(iPlayers, iPlayerNum);
       
        for( new iPlayer; iPlayer<iPlayerNum; iPlayer++ )
        {
                SetPlayerBit(g_iConnected, iPlayers[iPlayer]);
               
                if( is_user_alive(iPlayers[iPlayer]) )
                        SetPlayerBit(g_iAlive, iPlayers[iPlayer]);
        }
       
        DisableHamForward(g_hh_Think_grenade_Post);
        g_bCheckTxtMsg = false;
       
        new iEnt;
        while( (iEnt=engfunc(EngFunc_FindEntityByString, iEnt, "classname", "grenade"))>
0 )
        {
                if( pev_valid(iEnt) )
                {
                        if( fm_cs_get_grenade_type(iEnt)==CSW_C4 )
                        {
                                g_bPlanted = true;
                               
                                if( !get_pdata_int(iEnt, m_bJustBlew, 5) )
                                {
                                        message_begin(MSG_ALL, g_iMsgId_Scenario);
                                        write_byte(1);
                                        write_string("bombticking");
                                        write_byte(255);
                                        switch( clamp((get_pdata_int(iEnt, m_iC4Beep, 5)-1), 0, 4) )
                                        {
                                                case 0: write_short(140);
                                                case 1: write_short(70);
                                                case 2: write_short(40);
                                                case 3: write_short(30);
                                                default: write_short(20);
                                        }
                                        write_short(0);
                                        message_end();
                                }
                               
                                g_fPlantedAt = get_gametime();
                                g_iC4Timer = (floatround(get_pdata_float(iEnt, m_flC4Blow, 5)-g_fPlantedAt));
                               
                                if( g_iC4Timer<0 )
                                        g_iC4Timer = 0;
                               
                                message_begin(MSG_ALL, g_iMsgId_ShowTimer);
                                message_end();
                               
                                message_begin(MSG_ALL, g_iMsgId_RoundTime);
                                if( g_iC4Timer>
0 )
                                        write_short(g_iC4Timer);
                                else
                                        write_short(1);
                                message_end();
                               
                                break;
                        }
                }
        }
        if( iEnt<=0 )
        {
                g_bPlanted = false;
                g_iC4Timer = clamp(get_pcvar_num(g_iCvar_c4Timer), 10, 90);
        }
       
        g_iBackupPlayerNum = 0;
        g_fRoundStartedAt = -1.0;
        g_iModifiedBuyZone = 0;
}

public client_connect(iPlrId)
{
        ClearPlayerBit(g_iIgnoreTimerFix, iPlrId);
        ClearPlayerBit(g_iConnected, iPlrId);
        ClearPlayerBit(g_iAlive, iPlrId);
        ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
       
        client_cmd(iPlrId, "room_type 0"); // note: this fix works only if client had s_eax 0 when game was launched
}

public client_putinserver(iPlrId)
{
        ClearPlayerBit(g_iIgnoreTimerFix, iPlrId);
        SetPlayerBit(g_iConnected, iPlrId);
        ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
               
        if( g_bPlanted )
        {
                new iTimerLeft = (g_iC4Timer-floatround((get_gametime()-g_fPlantedAt)));
               
                if( iTimerLeft<1 )
                        iTimerLeft = 1;
               
                message_begin(MSG_ONE, g_iMsgId_ShowTimer, _, iPlrId);
                message_end();
               
                message_begin(MSG_ONE, g_iMsgId_RoundTime, _, iPlrId);
                write_short(iTimerLeft);
                message_end();
        }
}

public client_disconnect(iPlrId)
{
        ClearPlayerBit(g_iIgnoreTimerFix, iPlrId);
        ClearPlayerBit(g_iConnected, iPlrId);
        ClearPlayerBit(g_iAlive, iPlrId);
        ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
}

public LogEvent_Defused_The_Bomb()
{
        new iArg[64], iName[32];
        read_logargv(0, iArg, 63);
        parse_loguser(iArg, iName, 31);
        new iDefuser = find_player("a", iName);
       
        if( 0<iDefuser<=g_iMaxPlayers )
        {
                if( CheckPlayerBit(g_iAlive, iDefuser) )
                {
                        new bool:bHasKit = ((get_pdata_int(iDefuser, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT)?true:false);
                       
                        for( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
                        {
                                if( CheckPlayerBit(g_iConnected, iPlrId) )
                                {
                                        if( (iDefuser==iPlrId) || (!CheckPlayerBit(g_iAlive, iPlrId) && pev(iPlrId, pev_iuser1)==4 && pev(iPlrId, pev_iuser2)==iDefuser) )
                                        {
                                                if( bHasKit )
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(1);
                                                        write_string("defuser");
                                                        write_byte(0);
                                                        write_byte(160);
                                                        write_byte(0);
                                                        message_end();
                                                }
                                                else
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(0);
                                                        write_string("defuser");
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        message_end();
                                                }
                                        }
                                }
                        }
                }
        }
}

public Event_NewRound()
{
        g_fFreezeTime = floatclamp(get_pcvar_float(g_iCvar_freezetime), 0.0, 30.0);
       
        if( g_iCvar_MissionScenario )
        {
                new iMissionScenarioCvarNum = clamp(get_pcvar_num(g_iCvar_MissionScenario), 0, 3);
                if( iMissionScenarioCvarNum>
1 && iMissionScenarioCvarNum!=2 )
                        set_pcvar_num(g_iCvar_MissionScenario, 2);
        }
       
        new iEnt, iUserWeapons;
       
        for( new iPlrId=1; iPlrId<g_iMaxPlayers; iPlrId++ )
        {
                if( CheckPlayerBit(g_iAlive, iPlrId) )
                {
                        if( (iUserWeapons=pev(iPlrId, pev_weapons))&(1<<CSW_C4) && get_user_weapon(iPlrId)!=CSW_C4 )
                        {
                                iEnt = 0;
                                while( (iEnt=engfunc(EngFunc_FindEntityByString, iEnt, "classname", "weapon_c4"))>
0 )
                                {
                                        if( pev_valid(iEnt) )
                                        {
                                                if( pev(iEnt, pev_owner)==iPlrId && get_pdata_cbase(iEnt, m_pPlayer, 4)==iPlrId )
                                                        break;
                                        }
                                }
                                if( iEnt<=g_iMaxPlayers )
                                        continue;
                               
                                if( !ExecuteHamB(Ham_RemovePlayerItem, iPlrId, iEnt) )
                                        continue;
                               
                                ExecuteHamB(Ham_Item_Kill, iEnt);
                               
                                set_pev(iPlrId, pev_weapons, (iUserWeapons&~(1<<CSW_C4)));
                        }
                }
        }
       
        g_iC4Timer = clamp(get_pcvar_num(g_iCvar_c4Timer), 10, 90);
        g_bPlanted = false;
        g_fRoundStartedAt = get_gametime();
        g_iModifiedBuyZone = 0;
       
        remove_task(33);
        set_task(0.5, "find_c4", 33, "", 0, "b");
}

public Event_ShowTimer(iPlrId)
        SetPlayerBit(g_iIgnoreTimerFix, iPlrId);

public Event_SendAudio()
{
        if( get_msg_block(g_iMsgId_SendAudio)==BLOCK_NOT )
                set_msg_block(g_iMsgId_SendAudio, BLOCK_ONCE);
       
        g_fPlantedAt = (get_gametime()-float(g_iC4Timer));
       
        message_begin(MSG_ALL, g_iMsgId_ShowTimer);
        message_end();
       
        message_begin(MSG_ALL, g_iMsgId_RoundTime);
        write_short(1);
        message_end();
}

public Event_BombPlant()
{
        if( g_bPlanted )
        {
                message_begin(MSG_ALL, g_iMsgId_ShowTimer);
                message_end();
               
                message_begin(MSG_ALL, g_iMsgId_RoundTime);
                if( g_iC4Timer>
0 )
                        write_short(g_iC4Timer);
                else
                        write_short(1);
                message_end();
        }
}

public Event_ResetHUD(iPlrId)
{
        if( g_bPlanted )
        {
                new iTimerLeft = (g_iC4Timer-floatround((get_gametime()-g_fPlantedAt)));
               
                if( iTimerLeft<1 )
                        iTimerLeft = 1;
               
                message_begin(MSG_ONE, g_iMsgId_ShowTimer, _, iPlrId);
                message_end();
               
                message_begin(MSG_ONE, g_iMsgId_RoundTime, _, iPlrId);
                write_short(iTimerLeft);
                message_end();
        }
       
        if( get_pdata_int(iPlrId, m_iTeam, 5)==CS_TEAM_T )
        {
                static s_iKitInfo;
                s_iKitInfo = get_pdata_int(iPlrId, m_fHasDefuseKit, 5);
                if( s_iKitInfo&HAS_DEFUSE_KIT )
                {
                        set_pdata_int(iPlrId, m_fHasDefuseKit, (s_iKitInfo&~HAS_DEFUSE_KIT), 5);
                       
                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                        write_byte(0);
                        write_string("defuser");
                        message_end();
                }
        }
}

public Event_BarTime(iPlrId)
{
        if( CheckPlayerBit(g_iAlive, iPlrId) )
        {
                switch( read_data(1) )
                {
                        case 10: write_statusicon(iPlrId, 2, "defuser", 0, 160, 0);
                        case 5: write_statusicon(iPlrId, 1, "defuser", 255, 0, 0);
                        case 3: write_statusicon(iPlrId, 1, "c4", 255, 0, 0);
                        case 0:
                        {
                                switch( get_pdata_int(iPlrId, m_iTeam, 5) )
                                {
                                        case CS_TEAM_T:
                                        {
                                                if( pev(iPlrId, pev_weapons)&(1<<CSW_C4) )
                                                {
                                                        if( g_bPlanted )
                                                                write_statusicon(iPlrId, ((get_pdata_int(iPlrId, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET)?2:1), "c4", 160, 160, 160, true);
                                                        else
                                                                write_statusicon(iPlrId, ((get_pdata_int(iPlrId, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET)?2:1), "c4", 0, 160, 0, true);
                                                }
                                                else
                                                        write_statusicon(iPlrId, -1, "", 0, 0, 0, true);
                                        }
                                        case CS_TEAM_CT:
                                        {
                                                if( get_pdata_int(iPlrId, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                                                        write_statusicon(iPlrId, 1, "defuser", 0, 160, 0, true);
                                                else
                                                        write_statusicon(iPlrId, 0, "defuser", 0, 0, 0, true);
                                        }
                                }
                        }
                }
        }
        else if( !read_data(1) )
        {
                if( pev(iPlrId, pev_iuser1)==4 )
                {
                        static s_iSpectated;
                        if( 0<(s_iSpectated=pev(iPlrId, pev_iuser2))<=g_iMaxPlayers )
                        {
                                if( CheckPlayerBit(g_iAlive, s_iSpectated) )
                                {
                                        switch( get_pdata_int(s_iSpectated, m_iTeam, 5) )
                                        {
                                                case CS_TEAM_T:
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(0);
                                                        write_string("defuser");
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        message_end();
                                                       
                                                        if( pev(s_iSpectated, pev_weapons)&(1<<CSW_C4) )
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(((get_pdata_int(s_iSpectated, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET)?2:1));
                                                                write_string("c4");
                                                                if( g_bPlanted )
                                                                {
                                                                        write_byte(160);
                                                                        write_byte(160);
                                                                        write_byte(160);
                                                                }
                                                                else
                                                                {
                                                                        write_byte(0);
                                                                        write_byte(160);
                                                                        write_byte(0);
                                                                }
                                                                message_end();
                                                        }
                                                        else
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(0);
                                                                write_string("c4");
                                                                //write_byte(0);
                                                                //write_byte(0);
                                                                //write_byte(0);
                                                                message_end();
                                                        }
                                                }
                                                case CS_TEAM_CT:
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(0);
                                                        write_string("c4");
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        message_end();
                                                       
                                                        if( get_pdata_int(s_iSpectated, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(1);
                                                                write_string("defuser");
                                                                if( g_bPlanted )
                                                                {
                                                                        write_byte(0);
                                                                        write_byte(160);
                                                                        write_byte(0);
                                                                }
                                                                else
                                                                {
                                                                        write_byte(160);
                                                                        write_byte(160);
                                                                        write_byte(160);
                                                                }
                                                                message_end();
                                                        }
                                                        else
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(0);
                                                                write_string("defuser");
                                                                //write_byte(0);
                                                                //write_byte(0);
                                                                //write_byte(0);
                                                                message_end();
                                                        }
                                                }
                                                default:
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(0);
                                                        write_string("defuser");
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        message_end();
                                                       
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(0);
                                                        write_string("c4");
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        //write_byte(0);
                                                        message_end();
                                                }
                                        }
                                        return;
                                }
                        }
                }
               
                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                write_byte(0);
                write_string("defuser");
                message_end();
               
                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                write_byte(0);
                write_string("c4");
                message_end();
        }
}

public Event_BarTime2(iPlrId)
{
        if( !CheckPlayerBit(g_iAlive, iPlrId) )
        {
                if( pev(iPlrId, pev_iuser1)==4 )
                {
                        static s_iSpectated;
                        if( 0<(s_iSpectated=pev(iPlrId, pev_iuser2))<=g_iMaxPlayers )
                        {
                                if( CheckPlayerBit(g_iAlive, s_iSpectated) )
                                {
                                        switch( get_pdata_int(s_iSpectated, m_iTeam, 5) )
                                        {
                                                case CS_TEAM_T:
                                                {
                                                        if( pev(s_iSpectated, pev_weapons)&(1<<CSW_C4) && get_pdata_int(s_iSpectated, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET )
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(1);
                                                                write_string("c4");
                                                                write_byte(255);
                                                                write_byte(0);
                                                                write_byte(0);
                                                                message_end();
                                                        }
                                                }
                                                case CS_TEAM_CT:
                                                {
                                                        if( get_pdata_int(s_iSpectated, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(1);
                                                                write_string("defuser");
                                                                write_byte(255);
                                                                write_byte(0);
                                                                write_byte(0);
                                                                message_end();
                                                        }
                                                        else
                                                        {
                                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                write_byte(2);
                                                                write_string("defuser");
                                                                write_byte(0);
                                                                write_byte(160);
                                                                write_byte(0);
                                                                message_end();
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
}

public Event_CurWeapon(iPlrId)
{
        static Float:s_fGameTime;
        s_fGameTime = get_gametime();
       
        if( get_pdata_float(iPlrId, m_flProgressBarEndTime, 5)>
s_fGameTime )
        {
                switch( get_pdata_int(iPlrId, m_iTeam, 5) )
                {
                        case CS_TEAM_T:
                        {
                                set_pdata_float(iPlrId, m_flProgressBarEndTime, s_fGameTime, 5);
                               
                                message_begin(MSG_ONE, g_iMsgId_BarTime, _, iPlrId);
                                write_short(0);
                                message_end();
                               
                                if( pev(iPlrId, pev_weapons)&(1<<CSW_C4) )
                                {
                                        if( g_bPlanted )
                                                write_statusicon(iPlrId, ((get_pdata_int(iPlrId, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET)?2:1), "c4", 160, 160, 160, true);
                                        else
                                                write_statusicon(iPlrId, ((get_pdata_int(iPlrId, m_iMapZone, 5)&CS_MAPZONE_BOMBTARGET)?2:1), "c4", 0, 160, 0, true);
                                }
                                else
                                        write_statusicon(iPlrId, -1, "", 0, 0, 0, true);
                        }
                        case CS_TEAM_CT:
                        {
                                // We don't need to disable the bar and reset defuser icon, cause we execute C4Think, and eventually it should execute Event_BarTime(), where I'm configurating everything anyway.
                                //if( get_pdata_int(iPlrId, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                                //        write_statusicon(iPlrId, 1, "defuser", 0, 160, 0, true);
                                //else
                                //        write_statusicon(iPlrId, 0, "defuser", 0, 0, 0, true);
                               
                                if( g_bPlanted && get_pdata_int(iPlrId, m_fBombDefusing, 5)&BombStatus_BeingDefusing )
                                        cancel_defuse_now(iPlrId, (s_fGameTime+1.0));
                        }
                }
               
                //set_pdata_float(iPlrId, m_flProgressBarEndTime, s_fGameTime, 5);
               
                //message_begin(MSG_ONE, g_iMsgId_BarTime, _, iPlrId);
                //write_short(0);
                //message_end();
        }
}

public Message_StatusIcon(iMsgId, iMsgType, iPlrId)
{
        if( CheckPlayerBit(g_iAlive, iPlrId) )
        {
                static s_iSprite[9];
                get_msg_arg_string(2, s_iSprite, 8);
               
                if( equal(s_iSprite, "buyzone") )
                {
                        if( !get_msg_arg_int(1) )
                                ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
                        else if( g_fRoundStartedAt>
=0.0 )
                        {
                                static Float:s_fBuyTime;
                                s_fBuyTime = (get_pcvar_float(g_iCvar_buytime)*60.0);
                                if( s_fBuyTime<15.0 )
                                        s_fBuyTime = 15.0;
                                s_fBuyTime += g_fFreezeTime;
                               
                                if( (get_gametime()-g_fRoundStartedAt)>
s_fBuyTime )
                                {
                                        SetPlayerBit(g_iModifiedBuyZone, iPlrId);
                                        set_msg_arg_int(3, ARG_BYTE, 160);
                                        set_msg_arg_int(4, ARG_BYTE, 160);
                                        set_msg_arg_int(5, ARG_BYTE, 160);
                                }
                                else
                                        ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
                        }
                       
                }
                else if( get_msg_arg_int(1) )
                {
                        if( g_bPlanted )
                        {
                                if( equal(s_iSprite, "c4") )
                                {
                                        set_msg_arg_int(1, ARG_BYTE, 1);
                                        set_msg_arg_int(3, ARG_BYTE, 160);
                                        set_msg_arg_int(4, ARG_BYTE, 160);
                                        set_msg_arg_int(5, ARG_BYTE, 160);
                                }
                        }
                        else if( equal(s_iSprite, "defuser") )
                        {
                                set_msg_arg_int(3, ARG_BYTE, 160);
                                set_msg_arg_int(4, ARG_BYTE, 160);
                                set_msg_arg_int(5, ARG_BYTE, 160);
                        }
                }
        }
        else if( pev(iPlrId, pev_iuser1)==4 )
        {
                static s_iSpectated;
                if( 0<(s_iSpectated=pev(iPlrId, pev_iuser2))<=g_iMaxPlayers )
                {
                        if( CheckPlayerBit(g_iAlive, s_iSpectated) )
                        {
                                static s_iSprite[9];
                                get_msg_arg_string(2, s_iSprite, 8);
                               
                                if( g_bPlanted )
                                {
                                        if( equal(s_iSprite, "c4") )
                                        {
                                                if( get_msg_arg_int(1) )
                                                {
                                                        set_msg_arg_int(1, ARG_BYTE, 1);
                                                        set_msg_arg_int(3, ARG_BYTE, 160);
                                                        set_msg_arg_int(4, ARG_BYTE, 160);
                                                        set_msg_arg_int(5, ARG_BYTE, 160);
                                                }
                                        }
                                        else if( equal(s_iSprite, "defuser") )
                                        {
                                                switch( get_msg_arg_int(1) )
                                                {
                                                        case 1:
                                                        {
                                                                if( get_pdata_int(s_iSpectated, m_fBombDefusing, 5)&BombStatus_BeingDefusing )
                                                                {
                                                                        set_msg_arg_int(3, ARG_BYTE, 255);
                                                                        set_msg_arg_int(4, ARG_BYTE, 0);
                                                                        set_msg_arg_int(5, ARG_BYTE, 0);
                                                                }
                                                        }
                                                        case 0:
                                                        {
                                                                if( get_pdata_int(s_iSpectated, m_fBombDefusing, 5)&BombStatus_BeingDefusing )
                                                                {
                                                                        //set_msg_arg_int(1, ARG_BYTE, 2);
                                                                        //set_msg_arg_int(3, ARG_BYTE, 0); // it appears that color code isn't sent when status is 0
                                                                        //set_msg_arg_int(4, ARG_BYTE, 160);
                                                                        //set_msg_arg_int(5, ARG_BYTE, 0);
                                                                       
                                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                                        write_byte(2);
                                                                        write_string("defuser");
                                                                        write_byte(0);
                                                                        write_byte(160);
                                                                        write_byte(0);
                                                                        message_end();
                                                                       
                                                                        return PLUGIN_HANDLED;
                                                                }
                                                        }
                                                }
                                        }
                                }
                                else if( equal(s_iSprite, "defuser") )
                                {
                                        if( get_msg_arg_int(1) )
                                        {
                                                set_msg_arg_int(3, ARG_BYTE, 160);
                                                set_msg_arg_int(4, ARG_BYTE, 160);
                                                set_msg_arg_int(5, ARG_BYTE, 160);
                                        }
                                }
                                else if( equal(s_iSprite, "c4") )
                                {
                                        if( get_msg_arg_int(1)==2 )
                                        {
                                                static Float:s_fGameTime;
                                                s_fGameTime = get_gametime();
                                               
                                                if( s_fGameTime<get_pdata_float(s_iSpectated, m_flProgressBarEndTime, 5) )
                                                {
                                                        if( pev(s_iSpectated, pev_weapons)&(1<<CSW_C4) && get_user_weapon(s_iSpectated)==CSW_C4 )
                                                        {
                                                                set_msg_arg_int(1, ARG_BYTE, 1);
                                                                set_msg_arg_int(3, ARG_BYTE, 255);
                                                                set_msg_arg_int(4, ARG_BYTE, 0);
                                                                set_msg_arg_int(5, ARG_BYTE, 0);
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
       
        return PLUGIN_CONTINUE;
}

public Message_BombDrop(iMsgId, iMsgType, iPlrId)
{
        if( get_msg_arg_int(4) )
        {
                message_begin(MSG_ALL, g_iMsgId_BombPickup, _, _)
                message_end();
               
                if( !g_bPlanted )
                {
                        g_bPlanted = true;
                        g_fPlantedAt = get_gametime();
                       
                        new iSpectated;
                        for( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
                        {
                                if( CheckPlayerBit(g_iConnected, iPlrId) )
                                {
                                        if( CheckPlayerBit(g_iAlive, iPlrId) )
                                                check_status_icon_at_planted(iPlrId, iPlrId);
                                        else
                                        {
                                                if( pev(iPlrId, pev_iuser1)==4 )
                                                {
                                                        if( 0<(iSpectated=pev(iPlrId, pev_iuser2))<=g_iMaxPlayers )
                                                        {
                                                                if( CheckPlayerBit(g_iAlive, iSpectated) )
                                                                        check_status_icon_at_planted(iSpectated, iPlrId);
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
        else if( g_bPlanted )
                return PLUGIN_HANDLED;
       
        return PLUGIN_CONTINUE;
}

public Message_RoundTime(iMsgId, iMsgType, iPlrId)
{
        if( g_bPlanted )
        {
                SetPlayerBit(g_iIgnoreTimerFix, iPlrId);
                message_begin(iMsgType, g_iMsgId_ShowTimer, _, iPlrId);
                message_end();
               
                new iTimerLeft = (g_iC4Timer-floatround((get_gametime()-g_fPlantedAt)));
               
                if( iTimerLeft<1 )
                        iTimerLeft = 1;
               
                set_msg_arg_int(1, ARG_SHORT, iTimerLeft);
        }
        else
        {
                if( get_msg_arg_int(1)<=0 )
                        set_msg_arg_int(1, ARG_SHORT, 1);
               
                if( !CheckPlayerBit(g_iIgnoreTimerFix, iPlrId) )
                {
                        SetPlayerBit(g_iIgnoreTimerFix, iPlrId);
                        message_begin(iMsgType, g_iMsgId_ShowTimer, _, iPlrId);
                        message_end();
                }
        }
       
        return PLUGIN_CONTINUE;
}

public Message_TextMsg(iMsgId, iMsgType, iPlrId)
{
        if( g_bCheckTxtMsg )
        {
                if( iMsgType==MSG_ONE && get_msg_arg_int(1)==print_center )
                {
                        g_iBackupPlayerNum *= -1;
                        if( CheckPlayerBit(g_iBackupPlayerNum, iPlrId) )
                        {
                                new iText[32];
                                get_msg_arg_string(2, iText, 31);
                               
                                if( equal(iText, "#C4_Defuse_Must_Be_On_Ground") )
                                {
                                        set_pev(iPlrId, pev_flags, (pev(iPlrId, pev_flags)|FL_ONGROUND));
                                       
                                        ClearPlayerBit(g_iBackupPlayerNum, iPlrId);
                                        if( g_iBackupPlayerNum )
                                                g_iBackupPlayerNum *= -1;
                                        else
                                        {
                                                DisableHamForward(g_hh_Think_grenade_Post);
                                                g_bCheckTxtMsg = false;
                                        }
                                       
                                        return PLUGIN_HANDLED;
                                }
                        }
                        g_iBackupPlayerNum *= -1;
                }
        }
       
        return PLUGIN_CONTINUE;
}

public FM_EmitSound_Pre(iEnt, iChannel, iSample[], Float:fVolume, Float:fAttenuation, iFlags, iPitch)
{
        if( g_bPlanted && iChannel==CHAN_ITEM && 0<iEnt<=g_iMaxPlayers )
        {
                if( CheckPlayerBit(g_iAlive, iEnt) )
                {
                        if( equal(iSample, "weapons/c4_disarm.wav") )
                                return FMRES_SUPERCEDE;
                }
               
                return FMRES_IGNORED;
        }
       
        static s_iClassName[9];
        pev(iEnt, pev_classname, s_iClassName, 8);
        if( s_iClassName[0]=='g' && s_iClassName[1]=='r' && s_iClassName[2]=='e' && s_iClassName[3]=='n' && s_iClassName[4]=='a' && s_iClassName[5]=='d' && s_iClassName[6]=='e' && !s_iClassName[7] )
        {
                switch( fm_cs_get_grenade_type(iEnt) )
                {
                        case CSW_FLASHBANG:
                        {
                                if( equal(iSample, "weapons/flashbang-1.wav") || equal(iSample, "weapons/flashbang-2.wav") )
                                {
                                        new Float:fOrigin[3];
                                        pev(iEnt, pev_origin, fOrigin);
                                       
                                        message_begin(MSG_ALL, SVC_TEMPENTITY);
                                        write_byte(TE_DLIGHT);
                                        engfunc(EngFunc_WriteCoord, fOrigin[0]);
                                        engfunc(EngFunc_WriteCoord, fOrigin[1]);
                                        engfunc(EngFunc_WriteCoord, fOrigin[2]);
                                        write_byte(FLASH_RADIUS);
                                        write_byte(FLASH_RED);
                                        write_byte(FLASH_GREEN);
                                        write_byte(FLASH_BLUE);
                                        write_byte(FLASH_LIFE_MS);
                                        write_byte(FLASH_DECAY_RATE);
                                        message_end();
                                }
                        }
                        case CSW_HEGRENADE:
                        {
                                if( equal(iSample, "weapons/debris1.wav") || equal(iSample, "weapons/debris2.wav") || equal(iSample, "weapons/debris3.wav") )
                                {
                                        new Float:fOrigin[3];
                                        pev(iEnt, pev_origin, fOrigin);
                                       
                                        message_begin(MSG_ALL, SVC_TEMPENTITY);
                                        write_byte(TE_DLIGHT);
                                        engfunc(EngFunc_WriteCoord, fOrigin[0]);
                                        engfunc(EngFunc_WriteCoord, fOrigin[1]);
                                        engfunc(EngFunc_WriteCoord, fOrigin[2]);
                                        write_byte(HE_RADIUS);
                                        write_byte(HE_RED);
                                        write_byte(HE_GREEN);
                                        write_byte(HE_BLUE);
                                        write_byte(HE_LIFE_MS);
                                        write_byte(HE_DECAY_RATE);
                                        message_end();
                                }
                        }
                }
        }
       
        return FMRES_IGNORED;
}

public FM_SetModel_Pre(iEnt, iModel[])
{
        if( equal(iModel, "models/w_c4.mdl") )
        {
                static s_iClassName[9];
                pev(iEnt, pev_classname, s_iClassName, 8);
               
                if( equal(s_iClassName, "grenade") )
                        set_pev(iEnt, pev_effects, (pev(iEnt, pev_effects)|EF_NODRAW));
        }
}

public Ham_Spawn_player_Post(iPlrId)
{
        if( CheckPlayerBit(g_iConnected, iPlrId) )
        {
                if( is_user_alive(iPlrId) )
                        SetPlayerBit(g_iAlive, iPlrId);
                else
                        ClearPlayerBit(g_iAlive, iPlrId);
        }
        else
                ClearPlayerBit(g_iAlive, iPlrId);
}

public Ham_Killed_player_Post(iPlrId, iAttackerId, iShouldGib)
{
        if( CheckPlayerBit(g_iConnected, iPlrId) )
        {
                if( is_user_alive(iPlrId) )
                        SetPlayerBit(g_iAlive, iPlrId);
                else
                {
                        ClearPlayerBit(g_iAlive, iPlrId);
                        ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
                }
        }
        else
                ClearPlayerBit(g_iAlive, iPlrId);
       
        message_begin(MSG_ONE, g_iMsgId_BarTime, _, iPlrId);
        write_short(0);
        message_end();
       
        write_statusicon(iPlrId, 0, "defuser", 0, 0, 0, true);
}

public Ham_Spawn_grenade_Post(iEnt)
{
        if( pev_valid(iEnt) )
                engfunc(EngFunc_SetSize, iEnt, Float:{-0.021, -0.021, -0.021}, Float:{0.021, 0.021, 0.021});
}

public Ham_Use_grenade_Pre(iEnt, iCallerId, iActivatorId, iUseType, Float:fValue)
{
        static s_iBombStatus;
        s_iBombStatus = get_pdata_int(iEnt, m_fBombStatus, 5);
       
        if( (~s_iBombStatus&BOMB_PLANTED) || (s_iBombStatus&BOMB_DEFUSING) || get_pdata_int(iEnt, m_bJustBlew, 5) )
                return HAM_IGNORED;
       
        if( 0<iCallerId<=g_iMaxPlayers )
        {
                if( CheckPlayerBit(g_iAlive, iCallerId) )
                {
                        if( get_pdata_int(iCallerId, m_iTeam, 5)==CS_TEAM_CT )
                        {
                                if( pev(iCallerId, pev_flags)&FL_ONGROUND )
                                {
                                        if( is_user_in_secondary_attack(iCallerId, true) )
                                                return HAM_SUPERCEDE;
                                       
                                        emit_sound(iEnt, CHAN_WEAPON, "weapons/c4_disarm.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
                                }
                                else if( is_user_in_secondary_attack(iCallerId, true) )
                                        return HAM_SUPERCEDE;
                                else
                                {
                                        static Float:s_fGameTime;
                                        s_fGameTime = get_gametime();
                                        if( (get_pdata_float(iCallerId, m_flProgressBarEndTime, 5)+0.5)<s_fGameTime )
                                        {
                                                set_pdata_float(iCallerId, m_flProgressBarEndTime, s_fGameTime, 5);
                                               
                                                message_begin(MSG_ONE, g_iMsgId_TextMsg, _, iCallerId);
                                                write_byte(print_center);
                                                write_string("#C4_Defuse_Must_Be_On_Ground");
                                                message_end();
                                        }
                                       
                                        return HAM_SUPERCEDE;
                                }
                        }
                }
        }
       
        return HAM_IGNORED;
}

public Ham_Think_grenade_Pre(iEnt)
{
        switch( fm_cs_get_grenade_type(iEnt) )
        {
                case CSW_FLASHBANG: check_grenade_pre_explosion(iEnt);
                case CSW_HEGRENADE:
                {
                        if( pev(iEnt, pev_waterlevel) )
                                check_grenade_pre_explosion(iEnt);
                }
                case CSW_C4:
                {
                        if( pev(iEnt, pev_movetype)!=MOVETYPE_NONE )
                        {
                                engfunc(EngFunc_SetSize, iEnt, Float:{-0.021, -0.021, -0.021}, Float:{0.021, 0.021, 0.021});
                                set_pev(iEnt, pev_solid, SOLID_NOT);
                               
                                set_pev(iEnt, pev_effects, (pev(iEnt, pev_effects)&~EF_NODRAW));
                               
                                new iPlayer = pev(iEnt, pev_owner);
                                if( 0<iPlayer<=g_iMaxPlayers )
                                {
                                        if( CheckPlayerBit(g_iConnected, iPlayer) )
                                        {
                                                new Float:fAngles[3], Float:fAngle;
                                                pev(iPlayer, pev_v_angle, fAngles);
                                                fAngle = (fAngles[1]+90.0);
                                                pev(iEnt, pev_angles, fAngles);
                                                fAngles[1] = fAngle;
                                                set_pev(iEnt, pev_angles, fAngles);
                                        }
                                }
                               
                                g_iBackupPlayerNum = 0;
                                for( iPlayer=1; iPlayer<=g_iMaxPlayers; iPlayer++ )
                                {
                                        if( CheckPlayerBit(g_iConnected, iPlayer) )
                                        {
                                                g_iBackupInfo[g_iBackupPlayerNum][0] = iPlayer;
                                                g_iBackupInfo[g_iBackupPlayerNum][1] = pev(iPlayer, pev_solid);
                                                set_pev(iPlayer, pev_solid, SOLID_NOT);
                                                g_iBackupPlayerNum++;
                                        }
                                }
                                engfunc(EngFunc_DropToFloor, iEnt);
                                for( iPlayer=0; iPlayer<g_iBackupPlayerNum; iPlayer++ )
                                        set_pev(g_iBackupInfo[iPlayer][0], pev_solid, g_iBackupInfo[iPlayer][1]);
                                g_iBackupPlayerNum = 0;
                               
                                set_pev(iEnt, pev_movetype, MOVETYPE_NONE);
                        }
                       
                        static Float:s_fGameTime;
                        s_fGameTime = get_gametime();
                        if( get_pdata_float(iEnt, m_flC4Blow, 5)<=s_fGameTime )
                        {
                                if( pev(iEnt, pev_waterlevel) )
                                {
                                        set_pev(iEnt, pev_waterlevel, 0);
                                        set_pev(iEnt, pev_flags, (pev(iEnt, pev_flags)|FL_INWATER));
                                }
                                else if( pev(iEnt, pev_flags)&FL_INWATER )
                                        grenade_pre_explosion();
                                set_pdata_float(iEnt, m_flDefuseCountDown, (s_fGameTime+0.5), 5); // prevent defuse and explosion at the same time
                        }
                        else
                        {
                                if( !g_bIsCzero )
                                {
                                        if( get_pdata_float(iEnt, m_flNextFreq, 5)<=s_fGameTime )
                                        {
                                                message_begin(MSG_ALL, g_iMsgId_Scenario);
                                                write_byte(1);
                                                write_string("bombticking");
                                                write_byte(255);
                                                switch( get_pdata_int(iEnt, m_iC4Beep, 5) )
                                                {
                                                        case 0: write_short(140);
                                                        case 1: write_short(70);
                                                        case 2: write_short(40);
                                                        case 3: write_short(30);
                                                        default: write_short(20);
                                                }
                                                write_short(0);
                                                message_end();
                                        }
                                }
                               
                                if( get_pdata_int(iEnt, m_fBombStatus, 5)&BOMB_DEFUSING )
                                {
                                        /*static s_iDefuser;
                                        s_iDefuser = get_pdata_ent(iEnt, m_hDefuser, 5); // this doesn't work - get_pdata_ent() doesn't work for this
                                       
                                        if( 0<s_iDefuser<=g_iMaxPlayers )
                                        {
                                                if( CheckPlayerBit(g_iAlive, s_iDefuser) )
                                                {
                                                        if( get_pdata_int(s_iDefuser, m_fBombDefusing, 5)&BombStatus_BeingDefusing && (get_pdata_float(s_iDefuser, m_flProgressBarStartTime, 5)+0.5)<=s_fGameTime && ~pev(s_iDefuser, pev_button)&IN_USE )
                                                                set_pdata_float(iEnt, m_flNextDefuseTime, 1.0, 5);
                                                }
                                        }*/
                                       
                                        g_iBackupPlayerNum = 0;
                                        static s_iPlayer, s_iFlags;
                                        for( s_iPlayer=1; s_iPlayer<=g_iMaxPlayers; s_iPlayer++ )
                                        {
                                                if( CheckPlayerBit(g_iAlive, s_iPlayer) )
                                                {
                                                        if( get_pdata_int(s_iPlayer, m_fBombDefusing, 5)&BombStatus_BeingDefusing
                                                        && (((get_pdata_float(s_iPlayer, m_flProgressBarStartTime, 5)+0.5)<=s_fGameTime
                                                        && ~pev(s_iPlayer, pev_button)&IN_USE) || is_user_in_secondary_attack(s_iPlayer)) )
                                                        {
                                                                if( (s_iFlags=pev(s_iPlayer, pev_flags))&FL_ONGROUND )
                                                                {
                                                                        SetPlayerBit(g_iBackupPlayerNum, s_iPlayer);
                                                                        set_pev(s_iPlayer, pev_flags, (s_iFlags&~FL_ONGROUND));
                                                                }
                                                        }
                                                }
                                        }
                                       
                                        if( g_iBackupPlayerNum )
                                        {
                                                g_iBackupPlayerNum *= -1;
                                                g_bCheckTxtMsg = true;
                                                EnableHamForward(g_hh_Think_grenade_Post);
                                        }
                                }
                        }
                }
        }
}

public Ham_Think_grenade_Post(iEnt)
{
        if( g_iBackupPlayerNum>
0 )
        {
                for( new iLoop; iLoop<g_iBackupPlayerNum; iLoop++ )
                        set_pev(g_iBackupInfo[iLoop][0], pev_waterlevel, g_iBackupInfo[iLoop][1]);
        }
        else if( g_iBackupPlayerNum<0 )
        {
                g_iBackupPlayerNum *= -1;
                for( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
                {
                        if( CheckPlayerBit(g_iBackupPlayerNum, iPlrId) && CheckPlayerBit(g_iAlive, iPlrId) )
                                set_pev(iPlrId, pev_flags, (pev(iPlrId, pev_flags)|FL_ONGROUND));
                }
                g_bCheckTxtMsg = false;       
        }
       
        g_iBackupPlayerNum = 0;
       
        DisableHamForward(g_hh_Think_grenade_Post);
}

public Ham_Touch_grenade_Pre(iGrenEnt, iEnt)
{
        if( pev_valid(iGrenEnt) && pev_valid(iEnt) )
        {
                static s_iClassName[16];
                pev(iEnt, pev_classname, s_iClassName, 15);
               
                if( equal(s_iClassName, "func_breakable") && pev(iEnt, pev_rendermode) )
                {
                        static Float:s_fVelocity[3];
                        pev(iGrenEnt, pev_velocity, s_fVelocity);
                        g_fOldSpeed = vector_length(s_fVelocity);
                }
                else
                        g_fOldSpeed = 0.0;
        }
        else
                g_fOldSpeed = 0.0;
}

public Ham_Touch_grenade_Post(iGrenEnt, iEnt)
{
        if( g_fOldSpeed )
        {
                if( pev_valid(iGrenEnt) )
                {
                        static Float:s_fVelocity[3], Float:s_fFraction;
                        pev(iGrenEnt, pev_velocity, s_fVelocity);
                       
                        s_fFraction = (vector_length(s_fVelocity)/g_fOldSpeed);
                       
                        if( s_fFraction>
1.0 )
                        {
                                s_fVelocity[0] /= s_fFraction;
                                s_fVelocity[1] /= s_fFraction;
                                s_fVelocity[2] /= s_fFraction;
                        }
                       
                        if( s_fFraction>0.5 )
                        {
                                s_fVelocity[0] *= 0.5;
                                s_fVelocity[1] *= 0.5;
                                s_fVelocity[2] *= 0.5;
                        }
                       
                        set_pev(iGrenEnt, pev_velocity, s_fVelocity);
                }
        }
}

public Ham_Wpn_SecAttack_Post(iWpnEnt)
{
        if( g_bPlanted && pev_valid(iWpnEnt) )
        {
                if( get_pdata_float(iWpnEnt, m_flNextSecondaryAttack, 4)>0.0 )
                {
                        static s_iPlrId;
                        if( 0<(s_iPlrId=get_pdata_cbase(iWpnEnt, m_pPlayer, 4))<=g_iMaxPlayers )
                        {
                                if( CheckPlayerBit(g_iAlive, s_iPlrId) )
                                {
                                        if( get_pdata_int(s_iPlrId, m_fBombDefusing, 5)&BombStatus_BeingDefusing )
                                                cancel_defuse_now(s_iPlrId, (get_gametime()+1.0));
                                }
                        }
                }
        }
}

public find_c4()
{
        if( g_fRoundStartedAt>
=0.0 )
        {
                new Float:fBuyTime = (get_pcvar_float(g_iCvar_buytime)*60.0);
                if( fBuyTime<15.0 )
                        fBuyTime = 15.0;
                fBuyTime += g_fFreezeTime;
                new bool:bBuyTimePassed = (((get_gametime()-g_fRoundStartedAt)>
fBuyTime)?true:false);
               
                for( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
                {
                        if( CheckPlayerBit(g_iAlive, iPlrId) )
                        {
                                if( get_pdata_int(iPlrId, m_iMapZone, 5)&CS_MAPZONE_BUY )
                                {
                                        if( CheckPlayerBit(g_iModifiedBuyZone, iPlrId) )
                                        {
                                                if( !bBuyTimePassed )
                                                {
                                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                        write_byte(1);
                                                        write_string("buyzone");
                                                        write_byte(0);
                                                        write_byte(160);
                                                        write_byte(0);
                                                        message_end();
                                                       
                                                        ClearPlayerBit(g_iModifiedBuyZone, iPlrId);
                                                }
                                        }
                                        else if( bBuyTimePassed )
                                        {
                                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iPlrId);
                                                write_byte(1);
                                                write_string("buyzone");
                                                write_byte(160);
                                                write_byte(160);
                                                write_byte(160);
                                                message_end();
                                               
                                                SetPlayerBit(g_iModifiedBuyZone, iPlrId);
                                        }
                                }
                        }
                }
        }
       
        if( !g_bPlanted )
        {
                new iEnt, iOwner;
                while( (iEnt=engfunc(EngFunc_FindEntityByString, iEnt, "classname", "weapon_c4"))>
0 )
                {
                        if( pev_valid(iEnt) )
                        {
                                iOwner = pev(iEnt, pev_owner);
                                if( iOwner>g_iMaxPlayers && pev_valid(iOwner) )
                                {
                                        message_begin(MSG_ALL, g_iMsgId_BombPickup);
                                        message_end();
                                       
                                        new Float:fOrigin[3];
                                        pev(iOwner, pev_origin, fOrigin);
                                       
                                        message_begin(MSG_ALL, g_iMsgId_BombDrop);
                                        engfunc(EngFunc_WriteCoord, fOrigin[0]);
                                        engfunc(EngFunc_WriteCoord, fOrigin[1]);
                                        engfunc(EngFunc_WriteCoord, fOrigin[2]);
                                        write_byte(0);
                                        message_end();
                                       
                                        break;
                                }
                        }
                }
        }
}

write_statusicon(iPlrId, iEffect, iSprite[], iRed, iGreen, iBlue, bool:bRemoveBarTime=false)
{
        for( new iSpectator=1; iSpectator<=g_iMaxPlayers; iSpectator++ )
        {
                if( iPlrId==iSpectator )
                {
                        if( iEffect>
=0 )
                        {
                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iSpectator);
                                write_byte(iEffect);
                                write_string(iSprite);
                                if( iEffect )
                                {
                                        write_byte(iRed);
                                        write_byte(iGreen);
                                        write_byte(iBlue);
                                }
                                message_end();
                        }
                }
                else if( CheckPlayerBit(g_iConnected, iSpectator) && !CheckPlayerBit(g_iAlive, iSpectator) )
                {
                        if( pev(iSpectator, pev_iuser2)==iPlrId && pev(iSpectator, pev_iuser1)==4 )
                        {
                                if( iEffect>=0 )
                                {
                                        message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iSpectator);
                                        write_byte(iEffect);
                                        write_string(iSprite);
                                        if( iEffect )
                                        {
                                                write_byte(iRed);
                                                write_byte(iGreen);
                                                write_byte(iBlue);
                                        }
                                        message_end();
                                }
                               
                                if( bRemoveBarTime )
                                {
                                        message_begin(MSG_ONE, g_iMsgId_BarTime, _, iSpectator);
                                        write_short(0);
                                        message_end();
                                }
                        }
                }
        }
}

check_status_icon_at_planted(iSpectated, iSpectator)
{
        switch( get_pdata_int(iSpectated, m_iTeam, 5) )
        {
                case CS_TEAM_CT:
                {
                        if( get_pdata_int(iSpectated, m_fHasDefuseKit, 5)&HAS_DEFUSE_KIT )
                        {
                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iSpectator);
                                write_byte(1);
                                write_string("defuser");
                                write_byte(0);
                                write_byte(160);
                                write_byte(0);
                                message_end();
                        }
                }
                case CS_TEAM_T:
                {
                        if( pev(iSpectated, pev_weapons)&(1<<CSW_C4) )
                        {
                                message_begin(MSG_ONE, g_iMsgId_StatusIcon, _, iSpectator);
                                write_byte(1);
                                write_string("c4");
                                write_byte(160);
                                write_byte(160);
                                write_byte(160);
                                message_end();
                        }
                }
        }
}

check_grenade_pre_explosion(iEnt)
{
        static Float:s_fDmgTime;
        pev(iEnt, pev_dmgtime, s_fDmgTime);
       
        if( s_fDmgTime<=get_gametime() )
                grenade_pre_explosion();
}

grenade_pre_explosion()
{
        g_iBackupPlayerNum = 0;
        for( new iPlayer=1; iPlayer<=g_iMaxPlayers; iPlayer++ )
        {
                if( CheckPlayerBit(g_iAlive, iPlayer) )
                {
                        g_iBackupInfo[g_iBackupPlayerNum][0] = iPlayer;
                        g_iBackupInfo[g_iBackupPlayerNum][1] = pev(iPlayer, pev_waterlevel);
                        set_pev(iPlayer, pev_waterlevel, 1);
                        g_iBackupPlayerNum++;
                }
        }
        if( g_iBackupPlayerNum )
                EnableHamForward(g_hh_Think_grenade_Post);
}

bool:is_user_in_secondary_attack(iPlrId, bool:bCheckPreAttack=false)
{
        new iWpnEnt = get_pdata_cbase(iPlrId, m_pActiveItem, 5);
        if( pev_valid(iWpnEnt) )
        {
                if( get_pdata_float(iWpnEnt, m_flNextSecondaryAttack, 4)>
0.0 )
                        return true;
                else if( bCheckPreAttack )
                {
                        if( pev(iPlrId, pev_button)&IN_ATTACK2 )
                        {
                                switch( get_pdata_int(iWpnEnt, m_iId, 4) )
                                {
                                        case CSW_AWP, CSW_SCOUT, CSW_G3SG1, CSW_SG550, CSW_SG552, CSW_AUG: return true;
                                        default: return false;
                                }
                        }
                }
        }
       
        return false;
}

cancel_defuse_now(iPlrId, Float:fSafeGameTime) // fSafeGameTime is get_gametime()+1.0
{
        new iEnt, Float:fNextThink, Float:fNextFreq, Float:fNextBeep, Float:fNextBlink, Float:fC4Blow, Float:fDefuseCountDown, iFlags, bool:bIsOnGround;
       
        new bool:bMsgBackUp = g_bCheckTxtMsg;
        new iPlrBackup = g_iBackupPlayerNum;
        iFlags = pev(iPlrId, pev_flags);
        if( iFlags&FL_ONGROUND )
        {
                set_pev(iPlrId, pev_flags, (iFlags&~FL_ONGROUND));
                bIsOnGround = true;
        }
       
        if( bMsgBackUp )
        {
                DisableHamForward(g_hh_Think_grenade_Post);
                g_bCheckTxtMsg = false;
        }
       
        while( (iEnt=engfunc(EngFunc_FindEntityByString, iEnt, "classname", "grenade"))>0 )
        {
                if( pev_valid(iEnt) )
                {
                        if( get_pdata_int(iEnt, m_fBombStatus, 5)&(BOMB_PLANTED|BOMB_DEFUSING) )
                        {
                                pev(iEnt, pev_nextthink, fNextThink);
                                fNextFreq = get_pdata_float(iEnt, m_flNextFreq, 5);
                                fNextBeep = get_pdata_float(iEnt, m_flNextBeep, 5);
                                fNextBlink = get_pdata_float(iEnt, m_flNextBlink, 5);
                                fC4Blow = get_pdata_float(iEnt, m_flC4Blow, 5);
                                fDefuseCountDown = get_pdata_float(iEnt, m_flDefuseCountDown, 5);
                               
                                set_pev(iEnt, pev_nextthink, fSafeGameTime);
                                set_pdata_float(iEnt, m_flNextFreq, fSafeGameTime, 5);
                                set_pdata_float(iEnt, m_flNextBeep, fSafeGameTime, 5);
                                set_pdata_float(iEnt, m_flNextBlink, fSafeGameTime, 5);
                                set_pdata_float(iEnt, m_flC4Blow, fSafeGameTime, 5);
                                set_pdata_float(iEnt, m_flDefuseCountDown, fSafeGameTime, 5);
                               
                                if( bIsOnGround )
                                {
                                        g_iBackupPlayerNum = 0;
                                        SetPlayerBit(g_iBackupPlayerNum, iPlrId);
                                       
                                        g_iBackupPlayerNum *= -1;
                                        g_bCheckTxtMsg = true;
                                        ExecuteHam(Ham_Think, iEnt);
                                        g_bCheckTxtMsg = false;
                                }
                                else
                                        ExecuteHam(Ham_Think, iEnt);
                               
                                set_pev(iEnt, pev_nextthink, fNextThink);
                                set_pdata_float(iEnt, m_flNextFreq, fNextFreq, 5);
                                set_pdata_float(iEnt, m_flNextBeep, fNextBeep, 5);
                                set_pdata_float(iEnt, m_flNextBlink, fNextBlink, 5);
                                set_pdata_float(iEnt, m_flC4Blow, fC4Blow, 5);
                                if( get_pdata_int(iEnt, m_fBombStatus, 5)&BOMB_DEFUSING )
                                        set_pdata_float(iEnt, m_flDefuseCountDown, fDefuseCountDown, 5);
                        }
                }
        }
       
        if( bIsOnGround && CheckPlayerBit(g_iAlive, iPlrId) )
                set_pev(iPlrId, pev_flags, (pev(iPlrId, pev_flags)|FL_ONGROUND));
       
        if( bMsgBackUp )
        {
                g_bCheckTxtMsg = true;
                g_iBackupPlayerNum = iPlrBackup;
                EnableHamForward(g_hh_Think_grenade_Post);
        }
}

fm_cs_get_grenade_type(iEnt)
{
        // you can comment/remove this
        // if you are sure that the entity
        // with the given index are valid
        //if( !pev_valid(iEnt) )
        //        return 0;
       
        // you can comment/remove this
        // if you are sure that the entity
        // with the given index are "grenade"
        //new iClassname[9];
        //pev(iEnt, pev_classname, iClassname, 8);
        //if( !equal(classname, "grenade") )
        //        return 0;
       
        //if( get_pdata_int(iEnt, 96, 5)&(1<<8) ) // m_fBombStatus & m_fPlantedC4 || m_bIsC4 & IS_C4
        if( get_pdata_int(iEnt, m_fBombStatus, 5)&BOMB_PLANTED )
                return CSW_C4;
       
        //new iBits = get_pdata_int(iEnt, 114, 5); // m_usEvent || m_iGrenadeType
        new iBits = get_pdata_int(iEnt, m_usEvent, 5);
        if( iBits&(1<<0) )
                return CSW_HEGRENADE;
        else if( iBits&(1<<1) )
                return CSW_SMOKEGRENADE;
        else if( !iBits )
                return CSW_FLASHBANG;
       
        return 0
}

Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...