Raised This Month: $32 Target: $400
 8% 

Team Semiclip Only For CT


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
romi
Member
Join Date: Jul 2014
Location: Far Far AwaY From YoU!
Old 07-06-2015 , 05:23   Team Semiclip Only For CT
Reply With Quote #1

Hello ... I Have a basebuilder server and i was wondering if there is the way that the plugin team semiclip work only for ct . Here is the plugin
PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <xs>

#if AMXX_VERSION_NUM < 180
    #assert AMX Mod X v1.8.0 or later library required!
#endif

#include <hamsandwich>

/*================================================================================
 [Constants, Offsets, Macros]
=================================================================================*/

new const PLUGIN_VERSION[] = "2.0.0"

const MAX_RENDER_AMOUNT 255 // do not change this
const SEMI_RENDER_AMOUNT 200
const Float:SPEC_INTERVAL 0.2 // do not change this
const Float:RANGE_INTERVAL 0.1 // do not change this

const PEV_SPEC_TARGET pev_iuser2

enum 
(+= 35)
{
    
TASK_SPECTATOR 3000,
    
TASK_RANGE,
    
TASK_DURATION
}
#define ID_SPECTATOR    (taskid - TASK_SPECTATOR)
#define ID_RANGE        (taskid - TASK_RANGE)

const OFFSET_WEAPONOWNER 41
const OFFSET_WEAPONID 43
const OFFSET_LINUX 5
const OFFSET_LINUX_WEAPONS 4
const PDATA_SAFE 2

new const WEAPON_ENTITY_NAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014",
"weapon_c4""weapon_mac10""weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven",
"weapon_ump45""weapon_sg550""weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp",
"weapon_mp5navy""weapon_m249""weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang",
"weapon_deagle""weapon_sg552""weapon_ak47""weapon_knife""weapon_p90" }

new const 
CT_SPAWN_ENTITY_NAME[] = "info_player_start"
new const TER_SPAWN_ENTITY_NAME[] = "info_player_deathmatch"

new const Float:random_own_place[][3] =
{
    { 
0.00.00.0 },
    { -
32.50.00.0 },
    { 
32.50.00.0 },
    { 
0.0, -32.50.0 },
    { 
0.032.50.0 },
    { -
32.5, -32.50.0 },
    { -
32.532.50.0 },
    { 
32.532.50.0 },
    { 
32.5, -32.50.0 }
}

/*================================================================================
 [Global Variables]
=================================================================================*/

new cvar_iSemiClipRenderRadiuscvar_iSemiClipEnemiescvar_iSemiClipButton,
cvar_flSemiClipUnstuckDelaycvar_iSemiClipBlockTeamscvar_iSemiClipUnstuck,
cvar_iSemiClipRenderModecvar_iSemiClipRenderAmtcvar_iSemiClipRenderFade,
cvar_iSemiClipRenderFadeMincvar_iSemiClipRenderFadeSpeccvar_iSemiClip,
cvar_iSemiClipRenderFxcvar_iSemiClipKnifeTracecvar_flSemiClipDuration,
cvar_iSemiClipColorTer[3], cvar_iSemiClipColorCTs[3], cvar_iSemiClipRender,
cvar_iSemiClipColorAdmin[3], cvar_szSemiClipColorFlagcvar_iBotQuota

new bool:g_bHamCzBotsg_iMaxPlayersbool:g_bPreparation,
g_iAddToFullPackg_iTraceLineg_iCmdStart

new g_iSpawnCountCTsFloat:g_flSpawnsCTs[32][3],
g_iSpawnCountTerFloat:g_flSpawnsTer[32][3],
g_iSpawnCountCSDMFloat:g_flSpawnsCSDM[128][3]

new 
g_iCachedSemiClipg_iCachedEnemiesg_iCachedBlockTeamsg_iCachedUnstuck,
Float:g_flCachedUnstuckDelayg_iCachedFadeMing_iCachedFadeSpec,
g_iCachedModeg_iCachedRadiusg_iCachedAmtg_iCachedFxg_iCachedRender,
g_iCachedFadeg_iCachedButtong_iCachedKnifeTraceg_iCachedColorTer[3],
g_iCachedColorCTs[3], g_iCachedColorAdmin[3], g_iCachedColorFlag

new bs_IsAlivebs_IsConnectedbs_IsBotbs_IsSolidbs_InSemiClipbs_InButtonbs_IsAdmin
new g_iTeam[33], g_iSpectating[33], g_iSpectatingTeam[33], g_iCurrentWeapon[33], g_iRange[33][33]

#define add_bitsum(%1,%2)    (%1 |= (1<<(%2-1)))
#define del_bitsum(%1,%2)    (%1 &= ~(1<<(%2-1)))
#define get_bitsum(%1,%2)    (%1 & (1<<(%2-1)))

#define is_user_valid_alive(%1)        (1 <= %1 <= g_iMaxPlayers && get_bitsum(bs_IsAlive, %1))
#define is_same_team(%1,%2)            (g_iTeam[%1] == g_iTeam[%2])

// tsc_set_user_rendering
enum
{
    
SPECIAL_MODE 0,
    
SPECIAL_AMT,
    
SPECIAL_FX,
    
MAX_SPECIAL
}
new 
bs_IsSpecial
new g_iRenderSpecial[33][MAX_SPECIAL]
new 
g_iRenderSpecialColor[33][MAX_SPECIAL]

/*================================================================================
 [Natives, Init and Cfg]
=================================================================================*/

public plugin_natives()
{
    
register_native("tsc_set_user_rendering""native_set_rendering"1)
}

public 
plugin_init()
{
    
register_plugin("Team Semiclip"PLUGIN_VERSION"schmurgel1983")
    
    
register_event("HLTV""event_round_start""a""1=0""2=0")
    
    
RegisterHam(Ham_Spawn"player""fwd_PlayerSpawn_Post"1)
    
RegisterHam(Ham_Killed"player""fwd_PlayerKilled")
    
RegisterHam(Ham_Player_PreThink"player""fwd_Player_PreThink_Post"1)
    
RegisterHam(Ham_Player_PostThink"player""fwd_Player_PostThink")
    
    
g_iAddToFullPack register_forward(FM_AddToFullPack"fwd_AddToFullPack_Post"1)
    
g_iTraceLine register_forward(FM_TraceLine"fwd_TraceLine_Post"1)
    
g_iCmdStart register_forward(FM_CmdStart"fwd_CmdStart")
    
    
register_message(get_user_msgid("TeamInfo"), "message_TeamInfo")
    for (new 
1sizeof WEAPON_ENTITY_NAMESi++)
        if (
WEAPON_ENTITY_NAMES[i][0]) RegisterHam(Ham_Item_DeployWEAPON_ENTITY_NAMES[i], "fwd_Item_Deploy_Post"1)
    
    
cvar_iSemiClip register_cvar("semiclip""1")
    
cvar_iSemiClipBlockTeams register_cvar("semiclip_blockteam""0")
    
cvar_iSemiClipEnemies register_cvar("semiclip_enemies""0")
    
cvar_iSemiClipUnstuck register_cvar("semiclip_unstuck""1")
    
cvar_flSemiClipUnstuckDelay register_cvar("semiclip_unstuckdelay""0.1")
    
cvar_iSemiClipButton register_cvar("semiclip_button""0")
    
cvar_iSemiClipKnifeTrace register_cvar("semiclip_knife_trace""0")
    
cvar_flSemiClipDuration register_cvar("semiclip_duration""0")
    
    
cvar_iSemiClipRender register_cvar("semiclip_render""1")
    
cvar_iSemiClipRenderMode register_cvar("semiclip_rendermode""2")
    
cvar_iSemiClipRenderAmt register_cvar("semiclip_renderamt""129")
    
cvar_iSemiClipRenderFx register_cvar("semiclip_renderfx""0")
    
cvar_iSemiClipRenderRadius register_cvar("semiclip_renderradius""250")
    
cvar_iSemiClipRenderFade register_cvar("semiclip_renderfade""0")
    
cvar_iSemiClipRenderFadeMin register_cvar("semiclip_renderfademin""25")
    
cvar_iSemiClipRenderFadeSpec register_cvar("semiclip_renderfadespec""1")
    
    
cvar_szSemiClipColorFlag register_cvar("semiclip_color_admin_flag""b")
    
cvar_iSemiClipColorAdmin[0] = register_cvar("semiclip_color_admin_R""0")
    
cvar_iSemiClipColorAdmin[1] = register_cvar("semiclip_color_admin_G""0")
    
cvar_iSemiClipColorAdmin[2] = register_cvar("semiclip_color_admin_B""0")
    
cvar_iSemiClipColorTer[0] = register_cvar("semiclip_color_ter_R""0")
    
cvar_iSemiClipColorTer[1] = register_cvar("semiclip_color_ter_G""0")
    
cvar_iSemiClipColorTer[2] = register_cvar("semiclip_color_ter_B""0")
    
cvar_iSemiClipColorCTs[0] = register_cvar("semiclip_color_ct_R""0")
    
cvar_iSemiClipColorCTs[1] = register_cvar("semiclip_color_ct_G""0")
    
cvar_iSemiClipColorCTs[2] = register_cvar("semiclip_color_ct_B""0")
    
    
register_cvar("Team_Semiclip_version"PLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY)
    
set_cvar_string("Team_Semiclip_version"PLUGIN_VERSION)
    
    
cvar_iBotQuota get_cvar_pointer("bot_quota")
    
    
g_iMaxPlayers get_maxplayers()
}

public 
plugin_cfg()
{
    new 
configsdir[32]
    
get_configsdir(configsdircharsmax(configsdir))
    
server_cmd("exec %s/team_semiclip.cfg"configsdir)
    
    new 
ent
    ent 
engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString"info_target"))
    
    if (
pev_valid(ent))
    {
        
register_think("ent_cache_cvars""cache_cvars_think")
        
        
set_pev(entpev_classname"ent_cache_cvars")
        
set_pev(entpev_nextthinkget_gametime() + 1.0)
    }
    else
    {
        
set_task(1.0"cache_cvars")
        
set_task(12.0"cache_cvars"___"b")
    }
    
    
set_task(1.5"load_spawns")
}

public 
plugin_pause()
{
    
unregister_forward(FM_AddToFullPackg_iAddToFullPack1)
    
unregister_forward(FM_TraceLineg_iTraceLine1)
    
unregister_forward(FM_CmdStartg_iCmdStart)
    
    static 
id
    
for (id 1id <= g_iMaxPlayersid++)
    {
        if (!
get_bitsum(bs_IsConnectedid) || !get_bitsum(bs_IsAliveid)) continue
        
        if (
get_bitsum(bs_InSemiClipid))
        {
            
set_pev(idpev_solidSOLID_SLIDEBOX)
            
del_bitsum(bs_InSemiClipid);
        }
    }
}

public 
plugin_unpause()
{
    
g_iAddToFullPack register_forward(FM_AddToFullPack"fwd_AddToFullPack_Post"1)
    
g_iTraceLine register_forward(FM_TraceLine"fwd_TraceLine_Post"1)
    
g_iCmdStart register_forward(FM_CmdStart"fwd_CmdStart")
}

public 
client_putinserver(id)
{
    
add_bitsum(bs_IsConnectedid);
    
set_cvars(id)
    
    
set_task(RANGE_INTERVAL"range_check"id+TASK_RANGE__"b")
    
    if (
is_user_bot(id))
    {
        
add_bitsum(bs_IsBotid);
        
add_bitsum(bs_InButtonid);
        
        if (!
g_bHamCzBots && cvar_iBotQuota)
            
set_task(0.1"register_ham_czbots"id)
    }
    else
    {
        
set_task(SPEC_INTERVAL"spec_check"id+TASK_SPECTATOR__"b")
    }
}

public 
client_disconnect(id)
{
    
del_bitsum(bs_IsConnectedid);
    
set_cvars(id)
    
remove_task(id+TASK_RANGE)
    
remove_task(id+TASK_SPECTATOR)
}

/*================================================================================
 [Main Events]
=================================================================================*/

public event_round_start()
{
    
remove_task(TASK_DURATION)
    
    if (
get_pcvar_float(cvar_flSemiClipDuration) > 0.0)
    {
        
set_pcvar_num(cvar_iSemiClip1)
        
g_iCachedSemiClip 1
        g_bPreparation 
true
        
        set_task
(get_pcvar_float(cvar_flSemiClipDuration), "duration_disable_plugin"TASK_DURATION)
    }
}

/*================================================================================
 [Main Forwards]
=================================================================================*/

public fwd_PlayerSpawn_Post(id)
{
    if (!
is_user_alive(id) || !g_iTeam[id])
        return
    
    
add_bitsum(bs_IsAliveid);
    
remove_task(id+TASK_SPECTATOR)
}

public 
fwd_PlayerKilled(id)
{
    
del_bitsum(bs_IsAliveid);
    
del_bitsum(bs_InSemiClipid);
    
g_iTeam[id] = 3
    
    
if (!get_bitsum(bs_IsBotid))
        
set_task(SPEC_INTERVAL"spec_check"id+TASK_SPECTATOR__"b")
}

public 
fwd_Player_PreThink_Post(id)
{
    if (!
g_iCachedSemiClip || !get_bitsum(bs_IsAliveid))
        return 
FMRES_IGNORED
    
    
static i
    
for (1<= g_iMaxPlayersi++)
    {
        if (!
get_bitsum(bs_IsConnectedi) || !get_bitsum(bs_IsAlivei)) continue
        
        if (!
get_bitsum(bs_InSemiClipi)) add_bitsum(bs_IsSolidi);
        else 
del_bitsum(bs_IsSolidi);
    }
    
    if (
get_bitsum(bs_IsSolidid))
        for (
1<= g_iMaxPlayersi++)
        {
            if (!
get_bitsum(bs_IsConnectedi) || !get_bitsum(bs_IsAlivei) || !get_bitsum(bs_IsSolidi)) continue
            if (
g_iRange[id][i] == MAX_RENDER_AMOUNT || == id) continue
            if (
g_bPreparation)
            {
                
set_pev(ipev_solidSOLID_NOT)
                
add_bitsum(bs_InSemiClipi);
            }
            else
            {
                switch (
g_iCachedButton)
                {
                    case 
3// BOTH
                    
{
                        if (
get_bitsum(bs_InButtonid))
                        {
                            if (!
g_iCachedEnemies && !is_same_team(iid)) continue
                        }
                        else if (
query_enemies(idi)) continue
                    }
                    case 
12// CT or TERROR
                    
{
                        if (
get_bitsum(bs_InButtonid) && g_iCachedButton == g_iTeam[id] && g_iCachedButton == g_iTeam[i])
                        {
                            if (
g_iCachedEnemies && !is_same_team(iid)) continue
                        }
                        else if (
query_enemies(idi)) continue
                    }
                    default: if (
query_enemies(idi)) continue;
                }
                
                
set_pev(ipev_solidSOLID_NOT)
                
add_bitsum(bs_InSemiClipi);
            }
        }
    
    return 
FMRES_IGNORED
}

public 
fwd_Player_PostThink(id)
{
    if (!
g_iCachedSemiClip || !get_bitsum(bs_IsAliveid))
        return 
FMRES_IGNORED
    
    
static i
    
for (1<= g_iMaxPlayersi++)
    {
        if (!
get_bitsum(bs_IsConnectedi) || !get_bitsum(bs_IsAlivei)) continue
        
        if (
get_bitsum(bs_InSemiClipi))
        {
            
set_pev(ipev_solidSOLID_SLIDEBOX)
            
del_bitsum(bs_InSemiClipi);
        }
    }
    
    return 
FMRES_IGNORED
}

public 
fwd_AddToFullPack_Post(es_handleeenthostflagsplayerpSet)
{
    if (!
g_iCachedSemiClip || !player) return FMRES_IGNORED
    
    
if (g_iTeam[host] == 3)
    {
        if (!
g_iCachedRender || get_bitsum(bs_IsBothost) || !get_bitsum(bs_IsAliveg_iSpectating[host]) || !get_bitsum(bs_IsAliveent)) return FMRES_IGNORED
        
if (g_iRange[g_iSpectating[host]][ent] == MAX_RENDER_AMOUNT) return FMRES_IGNORED
        
if (!g_iCachedFadeSpec && g_iSpectating[host] == ent) return FMRES_IGNORED
        
if (g_bPreparation)
        {
            if (
get_bitsum(bs_IsSpecialent))
            {
                
set_es(es_handleES_RenderModeg_iRenderSpecial[ent][SPECIAL_MODE])
                
set_es(es_handleES_RenderAmtg_iRenderSpecial[ent][SPECIAL_AMT])
                
set_es(es_handleES_RenderFxg_iRenderSpecial[ent][SPECIAL_FX])
                
set_es(es_handleES_RenderColorg_iRenderSpecialColor[ent])
            }
            else
            {
                
set_es(es_handleES_RenderModeg_iCachedMode)
                
set_es(es_handleES_RenderAmtg_iRange[g_iSpectating[host]][ent])
                
set_es(es_handleES_RenderFxg_iCachedFx)
                switch (
g_iTeam[ent])
                {
                    case 
1get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorTer);
                    case 
2get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorCTs);
                }
            }
            
            return 
FMRES_IGNORED
        
}
        else
        {
            switch (
g_iCachedButton)
            {
                case 
3// BOTH
                
{
                    if (
get_bitsum(bs_InButtong_iSpectating[host]))
                    {
                        if (!
g_iCachedEnemies && !is_same_team(entg_iSpectating[host])) return FMRES_IGNORED
                    
}
                    else if (
query_enemies(g_iSpectating[host], ent)) return FMRES_IGNORED
                
}
                case 
12// CT or TERROR
                
{
                    if (
get_bitsum(bs_InButtong_iSpectating[host]) && g_iCachedButton == g_iTeam[g_iSpectating[host]] && g_iCachedButton == g_iTeam[ent])
                    {
                        if (
g_iCachedEnemies && !is_same_team(entg_iSpectating[host])) return FMRES_IGNORED
                    
}
                    else if (
query_enemies(g_iSpectating[host], ent)) return FMRES_IGNORED
                
}
                default: if (
query_enemies(g_iSpectating[host], ent)) return FMRES_IGNORED;
            }
            
            if (
get_bitsum(bs_IsSpecialent))
            {
                
set_es(es_handleES_RenderModeg_iRenderSpecial[ent][SPECIAL_MODE])
                
set_es(es_handleES_RenderAmtg_iRenderSpecial[ent][SPECIAL_AMT])
                
set_es(es_handleES_RenderFxg_iRenderSpecial[ent][SPECIAL_FX])
                
set_es(es_handleES_RenderColorg_iRenderSpecialColor[ent])
            }
            else
            {
                
set_es(es_handleES_RenderModeg_iCachedMode)
                
set_es(es_handleES_RenderAmtg_iRange[g_iSpectating[host]][ent])
                
set_es(es_handleES_RenderFxg_iCachedFx)
                switch (
g_iTeam[ent])
                {
                    case 
1get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorTer);
                    case 
2get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorCTs);
                }
            }
            
            return 
FMRES_IGNORED
        
}
    }
    
    if (!
get_bitsum(bs_IsAlivehost) || !get_bitsum(bs_IsAliveent) || !get_bitsum(bs_IsSolidhost) || !get_bitsum(bs_IsSolident)) return FMRES_IGNORED
    
if (g_iRange[host][ent] == MAX_RENDER_AMOUNT) return FMRES_IGNORED
    
if (g_bPreparation)
    {
        
set_es(es_handleES_SolidSOLID_NOT)
        
        if (!
g_iCachedRender) return FMRES_IGNORED
        
        
if (get_bitsum(bs_IsSpecialent))
        {
            
set_es(es_handleES_RenderModeg_iRenderSpecial[ent][SPECIAL_MODE])
            
set_es(es_handleES_RenderAmtg_iRenderSpecial[ent][SPECIAL_AMT])
            
set_es(es_handleES_RenderFxg_iRenderSpecial[ent][SPECIAL_FX])
            
set_es(es_handleES_RenderColorg_iRenderSpecialColor[ent])
        }
        else
        {
            
set_es(es_handleES_RenderModeg_iCachedMode)
            
set_es(es_handleES_RenderAmtg_iRange[host][ent])
            
set_es(es_handleES_RenderFxg_iCachedFx)
            switch (
g_iTeam[ent])
            {
                case 
1get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorTer);
                case 
2get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorCTs);
            }
        }
        
        return 
FMRES_IGNORED
    
}
    else
    {
        switch (
g_iCachedButton)
        {
            case 
3// BOTH
            
{
                if (
get_bitsum(bs_InButtonhost))
                {
                    if (!
g_iCachedEnemies && !is_same_team(enthost)) return FMRES_IGNORED
                
}
                else if (
query_enemies(hostent)) return FMRES_IGNORED
            
}
            case 
12// CT or TERROR
            
{
                if (
get_bitsum(bs_InButtonhost) && g_iCachedButton == g_iTeam[host] && g_iCachedButton == g_iTeam[ent])
                {
                    if (
g_iCachedEnemies && !is_same_team(enthost)) return FMRES_IGNORED
                
}
                else if (
query_enemies(hostent)) return FMRES_IGNORED
            
}
            default: if (
query_enemies(hostent)) return FMRES_IGNORED;
        }
        
        
set_es(es_handleES_SolidSOLID_NOT)
        
        if (!
g_iCachedRender) return FMRES_IGNORED
        
        
if (get_bitsum(bs_IsSpecialent))
        {
            
set_es(es_handleES_RenderModeg_iRenderSpecial[ent][SPECIAL_MODE])
            
set_es(es_handleES_RenderAmtg_iRenderSpecial[ent][SPECIAL_AMT])
            
set_es(es_handleES_RenderFxg_iRenderSpecial[ent][SPECIAL_FX])
            
set_es(es_handleES_RenderColorg_iRenderSpecialColor[ent])
        }
        else
        {
            
set_es(es_handleES_RenderModeg_iCachedMode)
            
set_es(es_handleES_RenderAmtg_iRange[host][ent])
            
set_es(es_handleES_RenderFxg_iCachedFx)
            switch (
g_iTeam[ent])
            {
                case 
1get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorTer);
                case 
2get_bitsum(bs_IsAdminent) ? set_es(es_handleES_RenderColorg_iCachedColorAdmin) : set_es(es_handleES_RenderColorg_iCachedColorCTs);
            }
        }
    }
    
    return 
FMRES_IGNORED
}

public 
fwd_TraceLine_Post(Float:vStart[3], Float:vEnd[3], noMonstersidtrace)
{
    if (!
g_iCachedSemiClip || !g_iCachedKnifeTrace || !is_user_valid_alive(id) || g_iCurrentWeapon[id] != CSW_KNIFE)
        return 
FMRES_IGNORED
    
    
new Float:flFraction
    get_tr2
(traceTR_flFractionflFraction)
    if (
flFraction >= 1.0)
        return 
FMRES_IGNORED
    
    
new pHit get_tr2(traceTR_pHit)
    if (!
is_user_valid_alive(pHit) || !is_same_team(idpHit) || entity_range(idpHit) > 48.0)
        return 
FMRES_IGNORED
    
    
new    Float:start[3], Float:view_ofs[3], Float:direction[3], Float:tlStart[3], Float:tlEnd[3]
    
    
pev(idpev_originstart)
    
pev(idpev_view_ofsview_ofs)
    
xs_vec_add(startview_ofsstart)
    
    
velocity_by_aim(id22direction)
    
xs_vec_add(directionstarttlStart)
    
velocity_by_aim(id48direction)
    
xs_vec_add(directionstarttlEnd)
    
    
engfunc(EngFunc_TraceLinetlStarttlEndnoMonsters|DONT_IGNORE_MONSTERSpHit0)
    
    new 
tHit get_tr2(0TR_pHit)
    if (!
is_user_valid_alive(tHit) || is_same_team(idtHit))
        return 
FMRES_IGNORED
    
    set_tr2
(traceTR_AllSolidget_tr2(0TR_AllSolid))
    
set_tr2(traceTR_StartSolidget_tr2(0TR_StartSolid))
    
set_tr2(traceTR_InOpenget_tr2(0TR_InOpen))
    
set_tr2(traceTR_InWaterget_tr2(0TR_InWater))
    
set_tr2(traceTR_iHitgroupget_tr2(0TR_iHitgroup))
    
set_tr2(traceTR_pHittHit)
    
    return 
FMRES_IGNORED
}

public 
fwd_CmdStart(idhandle)
{
    if (!
g_iCachedSemiClip || !g_iCachedButton || !get_bitsum(bs_IsAliveid) || get_bitsum(bs_IsBotid))
        return
    
    (
get_uc(handleUC_Buttons) & IN_USE) ? add_bitsum(bs_InButtonid) : del_bitsum(bs_InButtonid);
}

public 
fwd_Item_Deploy_Post(ent)
{
    static 
owner owner ham_cs_get_weapon_ent_owner(ent)
    
    if (!
is_user_valid_alive(owner))
        return 
HAM_IGNORED
    
    g_iCurrentWeapon
[owner] = fm_cs_get_weapon_id(ent)
    
    return 
HAM_IGNORED
}

/*================================================================================
 [Other Functions and Tasks]
=================================================================================*/

// credits to MeRcyLeZZ
public register_ham_czbots(id)
{
    if (
g_bHamCzBots || !is_user_connected(id) || !get_pcvar_num(cvar_iBotQuota))
        return
    
    
RegisterHamFromEntity(Ham_Spawnid"fwd_PlayerSpawn_Post"1)
    
RegisterHamFromEntity(Ham_Killedid"fwd_PlayerKilled")
    
RegisterHamFromEntity(Ham_Player_PreThinkid"fwd_Player_PreThink_Post"1)
    
RegisterHamFromEntity(Ham_Player_PostThinkid"fwd_Player_PostThink")
    
    
g_bHamCzBots true
    
    
if (is_user_alive(id))
        
fwd_PlayerSpawn_Post(id)
}

public 
cache_cvars()
{
    
g_iCachedSemiClip = !!get_pcvar_num(cvar_iSemiClip)
    
g_iCachedEnemies = !!get_pcvar_num(cvar_iSemiClipEnemies)
    
g_iCachedBlockTeams clamp(get_pcvar_num(cvar_iSemiClipBlockTeams), 03)
    
g_iCachedUnstuck clamp(get_pcvar_num(cvar_iSemiClipUnstuck), 03)
    
g_flCachedUnstuckDelay floatclamp(get_pcvar_float(cvar_flSemiClipUnstuckDelay), 0.03.0)
    
g_iCachedButton clamp(get_pcvar_num(cvar_iSemiClipButton), 03)
    
g_iCachedKnifeTrace = !!get_pcvar_num(cvar_iSemiClipKnifeTrace)
    
    
g_iCachedRender = !!get_pcvar_num(cvar_iSemiClipRender)
    
g_iCachedMode clamp(get_pcvar_num(cvar_iSemiClipRenderMode), 05)
    
g_iCachedAmt clamp(get_pcvar_num(cvar_iSemiClipRenderAmt), 0255)
    
g_iCachedFx clamp(get_pcvar_num(cvar_iSemiClipRenderFx), 020)
    
g_iCachedFade = !!get_pcvar_num(cvar_iSemiClipRenderFade)
    
g_iCachedFadeMin clamp(get_pcvar_num(cvar_iSemiClipRenderFadeMin), 0SEMI_RENDER_AMOUNT)
    
g_iCachedFadeSpec = !!get_pcvar_num(cvar_iSemiClipRenderFadeSpec)
    
g_iCachedRadius clamp(get_pcvar_num(cvar_iSemiClipRenderRadius), SEMI_RENDER_AMOUNT g_iCachedFadeMin4095)
    
    static 
szFlags[24] ; get_pcvar_string(cvar_szSemiClipColorFlagszFlagscharsmax(szFlags))    
    
g_iCachedColorFlag read_flags(szFlags)
    
g_iCachedColorTer[0] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[0]), 0255)
    
g_iCachedColorTer[1] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[1]), 0255)
    
g_iCachedColorTer[2] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[2]), 0255)
    
g_iCachedColorCTs[0] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[0]), 0255)
    
g_iCachedColorCTs[1] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[1]), 0255)
    
g_iCachedColorCTs[2] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[2]), 0255)
    
g_iCachedColorAdmin[0] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[0]), 0255)
    
g_iCachedColorAdmin[1] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[1]), 0255)
    
g_iCachedColorAdmin[2] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[2]), 0255)
    
    static 
id
    
for (id 1id <= g_iMaxPlayersid++)
    {
        if (!
get_bitsum(bs_IsConnectedid)) continue
        
        (
get_user_flags(id) & g_iCachedColorFlag) ? add_bitsum(bs_IsAdminid) : del_bitsum(bs_IsAdminid);
    }
}

public 
cache_cvars_think(ent)
{
    if (!
pev_valid(ent)) return;
    
    
g_iCachedSemiClip = !!get_pcvar_num(cvar_iSemiClip)
    
g_iCachedEnemies = !!get_pcvar_num(cvar_iSemiClipEnemies)
    
g_iCachedBlockTeams clamp(get_pcvar_num(cvar_iSemiClipBlockTeams), 03)
    
g_iCachedUnstuck clamp(get_pcvar_num(cvar_iSemiClipUnstuck), 03)
    
g_flCachedUnstuckDelay floatclamp(get_pcvar_float(cvar_flSemiClipUnstuckDelay), 0.03.0)
    
g_iCachedButton clamp(get_pcvar_num(cvar_iSemiClipButton), 03)
    
g_iCachedKnifeTrace = !!get_pcvar_num(cvar_iSemiClipKnifeTrace)
    
    
g_iCachedRender = !!get_pcvar_num(cvar_iSemiClipRender)
    
g_iCachedMode clamp(get_pcvar_num(cvar_iSemiClipRenderMode), 05)
    
g_iCachedAmt clamp(get_pcvar_num(cvar_iSemiClipRenderAmt), 0255)
    
g_iCachedFx clamp(get_pcvar_num(cvar_iSemiClipRenderFx), 020)
    
g_iCachedFade = !!get_pcvar_num(cvar_iSemiClipRenderFade)
    
g_iCachedFadeMin clamp(get_pcvar_num(cvar_iSemiClipRenderFadeMin), 0SEMI_RENDER_AMOUNT)
    
g_iCachedFadeSpec = !!get_pcvar_num(cvar_iSemiClipRenderFadeSpec)
    
g_iCachedRadius clamp(get_pcvar_num(cvar_iSemiClipRenderRadius), SEMI_RENDER_AMOUNT g_iCachedFadeMin4095)
    
    static 
szFlags[24] ; get_pcvar_string(cvar_szSemiClipColorFlagszFlagscharsmax(szFlags))    
    
g_iCachedColorFlag read_flags(szFlags)
    
g_iCachedColorTer[0] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[0]), 0255)
    
g_iCachedColorTer[1] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[1]), 0255)
    
g_iCachedColorTer[2] = clamp(get_pcvar_num(cvar_iSemiClipColorTer[2]), 0255)
    
g_iCachedColorCTs[0] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[0]), 0255)
    
g_iCachedColorCTs[1] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[1]), 0255)
    
g_iCachedColorCTs[2] = clamp(get_pcvar_num(cvar_iSemiClipColorCTs[2]), 0255)
    
g_iCachedColorAdmin[0] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[0]), 0255)
    
g_iCachedColorAdmin[1] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[1]), 0255)
    
g_iCachedColorAdmin[2] = clamp(get_pcvar_num(cvar_iSemiClipColorAdmin[2]), 0255)
    
    static 
id
    
for (id 1id <= g_iMaxPlayersid++)
    {
        if (!
get_bitsum(bs_IsConnectedid)) continue
        
        (
get_user_flags(id) & g_iCachedColorFlag) ? add_bitsum(bs_IsAdminid) : del_bitsum(bs_IsAdminid);
    }
    
    
set_pev(entpev_nextthinkget_gametime() + 12.0)
}

public 
load_spawns()
{
    new 
cfgdir[32], mapname[32], filepath[100], linedata[64]
    
    
get_configsdir(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(filepathcharsmax(filepath), "%s/csdm/%s.spawns.cfg"cfgdirmapname)
    
    if (
file_exists(filepath))
    {
        new 
csdmdata[10][6], file
        
if ((file fopen(filepath,"rt")) != 0)
        {
            while (!
feof(file))
            {
                
fgets(filelinedatacharsmax(linedata))
                
                if (!
linedata[0] || str_count(linedata,' ') < 2) continue;
                
                
parse(linedata,csdmdata[0],5,csdmdata[1],5,csdmdata[2],5,csdmdata[3],5,csdmdata[4],5,csdmdata[5],5,csdmdata[6],5,csdmdata[7],5,csdmdata[8],5,csdmdata[9],5)
                
                
g_flSpawnsCSDM[g_iSpawnCountCSDM][0] = floatstr(csdmdata[0])
                
g_flSpawnsCSDM[g_iSpawnCountCSDM][1] = floatstr(csdmdata[1])
                
g_flSpawnsCSDM[g_iSpawnCountCSDM][2] = floatstr(csdmdata[2])
                
                
g_iSpawnCountCSDM++
                if (
g_iSpawnCountCSDM >= sizeof g_flSpawnsCSDM) break;
            }
            
fclose(file)
        }
    }
    else if (
g_iCachedUnstuck == 2)
    {
        
set_pcvar_num(cvar_iSemiClipUnstuck1)
        
g_iCachedUnstuck 1
    
}
    
    
cs_collect_spawns_ents()
}

public 
random_spawn_delay(id)
{
    
do_random_spawn(idg_iCachedUnstuck)
}

// credits to MeRcyLeZZ
do_random_spawn(idmode)
{
    if (!
get_bitsum(bs_IsConnectedid) || !get_bitsum(bs_IsAliveid))
        return
    
    static 
hullsp_indexi
    hull 
= (pev(idpev_flags) & FL_DUCKING) ? HULL_HEAD HULL_HUMAN
    
    
switch (mode)
    {
        case 
1// Specified team
        
{
            switch (
g_iTeam[id])
            {
                case 
1// TERRORIST
                
{
                    if (!
g_iSpawnCountTer)
                        return
                    
                    
sp_index random_num(0g_iSpawnCountTer 1)
                    for (
sp_index 1/*no condition*/i++)
                    {
                        if (
>= g_iSpawnCountTer0
                        
                        
if (is_hull_vacant(g_flSpawnsTer[i], hull))
                        {
                            
engfunc(EngFunc_SetOriginidg_flSpawnsTer[i])
                            break
                        }
                        
                        if (
== sp_index)
                            break
                    }
                }
                case 
2// CT
                
{
                    if (!
g_iSpawnCountCTs)
                        return
                    
                    
sp_index random_num(0g_iSpawnCountCTs 1)
                    for (
sp_index 1/*no condition*/i++)
                    {
                        if (
>= g_iSpawnCountCTs0
                        
                        
if (is_hull_vacant(g_flSpawnsCTs[i], hull))
                        {
                            
engfunc(EngFunc_SetOriginidg_flSpawnsCTs[i])
                            break
                        }
                        
                        if (
== sp_index)
                            break
                    }
                }
            }
        }
        case 
2// CSDM
        
{
            if (!
g_iSpawnCountCSDM)
                return
            
            
sp_index random_num(0g_iSpawnCountCSDM 1)
            for (
sp_index 1/*no condition*/i++)
            {
                if (
>= g_iSpawnCountCSDM0
                
                
if (is_hull_vacant(g_flSpawnsCSDM[i], hull))
                {
                    
engfunc(EngFunc_SetOriginidg_flSpawnsCSDM[i])
                    break
                }
                
                if (
== sp_index)
                    break
            }
        }
        case 
3// Random around own place
        
{
            new 
Float:origin[3], Float:new_origin[3], Float:final[3]
            
pev(idpev_originorigin)
            
            for (new 
test 0test sizeof random_own_placetest++)
            {
                final[
0] = new_origin[0] = (origin[0] + random_own_place[test][0])
                final[
1] = new_origin[1] = (origin[1] + random_own_place[test][1])
                final[
2] = new_origin[2] = (origin[2] + random_own_place[test][2])
                
                new 
0
                
do
                {
                    if (
is_hull_vacant(final, hull))
                    {
                        
test sizeof random_own_place
                        engfunc
(EngFunc_SetOriginid, final)
                        break
                    }
                    
                    final[
2] = new_origin[2] + (++z*20)
                }
                while (
5)
            }
        }
    }
}

// credits to MeRcyLeZZ (I rewritten it.)
cs_collect_spawns_ents()
{
    
// CT
    
new ent = -1
    
    
while ((ent engfunc(EngFunc_FindEntityByStringent"classname"CT_SPAWN_ENTITY_NAME)) != 0)
    {
        new 
Float:originF[3]
        
pev(entpev_originoriginF)
        
g_flSpawnsCTs[g_iSpawnCountCTs][0] = originF[0]
        
g_flSpawnsCTs[g_iSpawnCountCTs][1] = originF[1]
        
g_flSpawnsCTs[g_iSpawnCountCTs][2] = originF[2]
        
        
g_iSpawnCountCTs++
        if (
g_iSpawnCountCTs >= sizeof g_flSpawnsCTs) break
    }
    
    
// TERROR
    
ent = -1
    
    
while ((ent engfunc(EngFunc_FindEntityByStringent"classname"TER_SPAWN_ENTITY_NAME)) != 0)
    {
        new 
Float:originF[3]
        
pev(entpev_originoriginF)
        
g_flSpawnsTer[g_iSpawnCountTer][0] = originF[0]
        
g_flSpawnsTer[g_iSpawnCountTer][1] = originF[1]
        
g_flSpawnsTer[g_iSpawnCountTer][2] = originF[2]
        
        
g_iSpawnCountTer++
        if (
g_iSpawnCountTer >= sizeof g_flSpawnsTer) break
    }
}

public 
range_check(taskid)
{
    if (!
g_iCachedSemiClip)
        return
    
    static 
id
    
for (id 1id <= g_iMaxPlayersid++)
    {
        if (!
get_bitsum(bs_IsConnectedid) || !get_bitsum(bs_IsAliveid)) continue
        
        
g_iRange[ID_RANGE][id] = calc_fade(ID_RANGEidg_iCachedFade)
    }
}

public 
spec_check(taskid)
{
    if (!
g_iCachedSemiClip || get_bitsum(bs_IsAliveID_SPECTATOR))
        return
    
    static 
spec
    spec 
pev(ID_SPECTATORPEV_SPEC_TARGET)
    
    if (
get_bitsum(bs_IsAlivespec))
    {
        
g_iSpectating[ID_SPECTATOR] = spec
        g_iSpectatingTeam
[ID_SPECTATOR] = g_iTeam[spec]
    }
}

public 
duration_disable_plugin()
{
    
set_pcvar_num(cvar_iSemiClip0)
    
g_iCachedSemiClip 0
    g_bPreparation 
false
    
    
for (new id 1id <= g_iMaxPlayersid++)
    {
        if (!
get_bitsum(bs_IsConnectedid) || !get_bitsum(bs_IsAliveid)) continue
        
        if (
get_bitsum(bs_InSemiClipid))
        {
            
set_pev(idpev_solidSOLID_SLIDEBOX)
            
del_bitsum(bs_InSemiClipid);
        }
        
        if (
g_iCachedUnstuck && is_player_stuck(id))
            
do_random_spawn(idg_iCachedUnstuck)
    }
}

calc_fade(hostentmode)
{
    if (
mode)
    {
        if (
g_iCachedFadeMin g_iCachedRadius)
            return 
MAX_RENDER_AMOUNT;
        
        static 
range range floatround(entity_range(hostent))
        
        if (
range >= g_iCachedRadius)
            return 
MAX_RENDER_AMOUNT;
        
        static 
amount
        amount 
SEMI_RENDER_AMOUNT g_iCachedFadeMin
        amount 
g_iCachedRadius amount
        amount 
range amount g_iCachedFadeMin
        
        
return amount;
    }
    else
    {
        static 
range range floatround(entity_range(hostent))
        
        if (
range g_iCachedRadius)
            return 
g_iCachedAmt;
    }
    
    return 
MAX_RENDER_AMOUNT;
}

query_enemies(hostent)
{
    if (
g_iCachedBlockTeams == 3) return 1;
    
    switch (
g_iCachedEnemies)
    {
        case 
0: if (!is_same_team(enthost) || g_iCachedBlockTeams == g_iTeam[ent]) return 1;
        case 
1: if (g_iCachedBlockTeams == g_iTeam[ent] && is_same_team(enthost)) return 1;
    }
    
    return 
0;
}

set_cvars(id)
{
    
del_bitsum(bs_IsAliveid);
    
del_bitsum(bs_IsBotid);
    
del_bitsum(bs_IsSolidid);
    
del_bitsum(bs_InSemiClipid);
    
del_bitsum(bs_IsSpecialid);
    
g_iTeam[id] = 0
}

/*================================================================================
 [Message Hooks]
=================================================================================*/

/*
    TeamInfo:
    read_data(1)    byte    EventEntity
    read_data(2)    string    TeamName
    
    type |                   name |      calls | time     / min      / max
       p |       message_TeamInfo |        629 | 0.000116 / 0.000000 / 0.000002
    
    fast enough!
*/
public message_TeamInfo(msg_idmsg_dest)
{
    if (
msg_dest != MSG_ALL && msg_dest != MSG_BROADCAST)
        return
    
    static 
idteam[2]
    
id get_msg_arg_int(1)
    
get_msg_arg_string(2teamcharsmax(team))
    
    switch (
team[0])
    {
        case 
'T'g_iTeam[id] = 1// TERRORIST
        
case 'C'g_iTeam[id] = 2// CT
        
case 'S'g_iTeam[id] = 3// SPECTATOR
        
default: g_iTeam[id] = 0;
    }
    
    if (
g_iCachedUnstuck && get_bitsum(bs_IsAliveid) && g_iCachedBlockTeams == g_iTeam[id])
    {
        if (!
is_player_stuck(id))
            return
        
        if (
g_flCachedUnstuckDelay 0.0)
            
set_task(g_flCachedUnstuckDelay"random_spawn_delay"id)
        else
            
do_random_spawn(idg_iCachedUnstuck)
    }
}

/*================================================================================
 [Custom Natives]
=================================================================================*/

// tsc_set_rendering(id, special = 0, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
public native_set_rendering(idspecialfxrgbrenderamount)
{
    if (!
is_user_connected(id))
    {
        
log_error(AMX_ERR_NATIVE"[Team Semiclip] Player is not in game (%d)"id)
        return 
0;
    }
    
    switch (
special)
    {
        case 
0:
        {
            
del_bitsum(bs_IsSpecialid);
            
            return 
1;
        }
        case 
1:
        {
            
add_bitsum(bs_IsSpecialid);
            
            
g_iRenderSpecial[id][SPECIAL_MODE] = clamp(render05)
            
g_iRenderSpecial[id][SPECIAL_AMT] = clamp(amount0255)
            
g_iRenderSpecial[id][SPECIAL_FX] = clamp(fx020)
            
            
g_iRenderSpecialColor[id][0] = clamp(r0255)
            
g_iRenderSpecialColor[id][1] = clamp(g0255)
            
g_iRenderSpecialColor[id][2] = clamp(b0255)
            
            return 
1;
        }
    }
    
    return 
0;
}

/*================================================================================
 [Stocks]
=================================================================================*/

// credits to VEN
stock is_player_stuck(id)
{
    static 
Float:originF[3]
    
pev(idpev_originoriginF)
    
    
engfunc(EngFunc_TraceHulloriginForiginF0, (pev(idpev_flags) & FL_DUCKING) ? HULL_HEAD HULL_HUMANid0)
    
    if (
get_tr2(0TR_StartSolid) || get_tr2(0TR_AllSolid) || !get_tr2(0TR_InOpen))
        return 
true;
    
    return 
false;
}

// credits to VEN
stock is_hull_vacant(Float:origin[3], hull)
{
    
engfunc(EngFunc_TraceHulloriginorigin0hull00)
    
    if (!
get_tr2(0TR_StartSolid) && !get_tr2(0TR_AllSolid) && get_tr2(0TR_InOpen))
        return 
true;
    
    return 
false;
}

// Stock by (probably) Twilight Suzuka -counts number of chars in a string
stock str_count(str[], searchchar)
{
    new 
countilen strlen(str)
    
    for (
0<= leni++)
    {
        if (
str[i] == searchchar)
            
count++
    }
    
    return 
count;
}

// credits to Exolent[jNr]
stock fm_cs_get_weapon_id(ent)
{
    if (
pev_valid(ent) != PDATA_SAFE)
        return 
0;
    
    return 
get_pdata_int(entOFFSET_WEAPONIDOFFSET_LINUX_WEAPONS);
}

// credits to MeRcyLeZZ
stock ham_cs_get_weapon_ent_owner(ent)
{
    if (
pev_valid(ent) != PDATA_SAFE)
        return 
0;
    
    return 
get_pdata_cbase(entOFFSET_WEAPONOWNEROFFSET_LINUX_WEAPONS);
}

// amxmisc.inc
stock get_configsdir(name[], len)
{
    return 
get_localinfo("amxx_configsdir"namelen);

romi is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 19:46.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode