AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   HELP with antiblock (https://forums.alliedmods.net/showthread.php?t=221628)

Podarok 07-24-2013 12:03

HELP with antiblock
 
Here is the plugin :
PHP Code:

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>

#define DISTANCE 120

new g_iTeam[33]
new 
bool:g_bSolid[33]
new 
bool:g_bHasSemiclip[33]
new 
Float:g_fOrigin[33][3]

new 
bool:g_bSemiclipEnabled

new g_iForwardId[3]
new 
g_iMaxPlayers
new g_iCvar[3]

public 
plugin_init( )
{
    
register_plugin"[ZP] Antiblock""0.1""Maslyak" )
    
    
g_iCvar[0] = register_cvar"semiclip_enabled""1" )
    
g_iCvar[1] = register_cvar"semiclip_teamclip""1" )
    
g_iCvar[2] = register_cvar"semiclip_transparancy""1" )
    
    
register_forwardFM_ClientCommand"fwdClientCommand" )
    
    if( 
get_pcvar_numg_iCvar[0] ) )
    {
        
g_iForwardId[0] = register_forwardFM_PlayerPreThink"fwdPlayerPreThink" )
        
g_iForwardId[1] = register_forwardFM_PlayerPostThink"fwdPlayerPostThink" )
        
g_iForwardId[2] = register_forwardFM_AddToFullPack"fwdAddToFullPack_Post")
        
        
g_bSemiclipEnabled true
    
}
    else
        
g_bSemiclipEnabled false
    
    g_iMaxPlayers 
get_maxplayers( )
}

public 
fwdPlayerPreThinkplr )
{
    static 
idlast_think

    
if( last_think plr )
    {
        for( 
id 1id <= g_iMaxPlayersid++ )
        {
            if( 
is_user_aliveid ) )
            {
                if( 
get_pcvar_numg_iCvar[1] ) )
                    
g_iTeam[id] = zp_get_user_zombieid )
                
                
g_bSolid[id] = pevidpev_solid ) == SOLID_SLIDEBOX true false
                pev
idpev_origing_fOrigin[id] )
            }
            else
                
g_bSolid[id] = false
        
}
    }

    
last_think plr

    
if( g_bSolid[plr] )
    {
        for( 
id 1id <= g_iMaxPlayersid++ )
        {
            if( 
g_bSolid[id] && get_distance_fg_fOrigin[plr], g_fOrigin[id] ) <= DISTANCE && id != plr )
            {
                if( 
get_pcvar_numg_iCvar[1] ) && g_iTeam[plr] != g_iTeam[id] )
                    return 
FMRES_IGNORED
                
                
if(!(pev(plrpev_button) & IN_USE))    
                    return 
FMRES_IGNORED
                
                set_pev
idpev_solidSOLID_NOT )
                
g_bHasSemiclip[id] = true
            
}
        }
    }

    return 
FMRES_IGNORED
}

public 
fwdPlayerPostThinkplr )
{
    static 
id

    
for( id 1id <= g_iMaxPlayersid++ )
    {
        if( 
g_bHasSemiclip[id] )
        {
            
set_pevidpev_solidSOLID_SLIDEBOX )
            
g_bHasSemiclip[id] = false
        
}
    }
}

public 
fwdAddToFullPack_Postes_handleeenthosthostflagsplayerpset )
{
    if( 
player )
    {
        if( 
g_bSolid[host] && g_bSolid[ent] && get_distance_fg_fOrigin[host], g_fOrigin[ent] ) <= DISTANCE )
        {
            if( 
get_pcvar_numg_iCvar[1] ) && g_iTeam[host] != g_iTeam[ent] )
                return 
FMRES_IGNORED
            
            
if(!(pev(hostpev_button) & IN_USE))    
                return 
FMRES_IGNORED
                
            set_es
es_handleES_SolidSOLID_NOT // makes semiclip flawless
            
            
if( get_pcvar_numg_iCvar[2] ) == )
            {
                
set_eses_handleES_RenderModekRenderTransAlpha )
                
set_eses_handleES_RenderAmt85 )
            }
            else if( 
get_pcvar_numg_iCvar[2] ) == )
            {
                
set_eses_handleES_EffectsEF_NODRAW )
                
set_eses_handleES_SolidSOLID_NOT )
            }
        }
    }
    
    return 
FMRES_IGNORED
}

// is there a better way to detect changings of g_iCvar[0]?
public fwdClientCommandplr )
{
    
// use the forwards just when needed, for good performance
    
if( !get_pcvar_numg_iCvar[0] ) && g_bSemiclipEnabled )
    {
        
unregister_forwardFM_PlayerPreThinkg_iForwardId[0] )
        
unregister_forwardFM_PlayerPostThinkg_iForwardId[1] )
        
unregister_forwardFM_AddToFullPackg_iForwardId[2], )
        
        
g_bSemiclipEnabled false
    
}
    else if( 
get_pcvar_numg_iCvar[0] ) && !g_bSemiclipEnabled )
    {
        
g_iForwardId[0] = register_forwardFM_PlayerPreThink"fwdPlayerPreThink" )
        
g_iForwardId[1] = register_forwardFM_PlayerPostThink"fwdPlayerPostThink" )
        
g_iForwardId[2] = register_forwardFM_AddToFullPack"fwdAddToFullPack_Post")
        
        
g_bSemiclipEnabled true
    
}


I wanna add a feature so that when players they could pass through lasermine entity (here is the spawn code)
PHP Code:

public Spawn(id)
{
    
id -= TASK_PLANT
    
// motor
    
new i_Ent engfunc(EngFunc_CreateNamedEntity,g_EntMine);
    if(!
i_Ent)
    {
        
client_print(idprint_chat,"[Laesrmine Debug] Can't Create Entity");
        return 
PLUGIN_HANDLED_MAIN;
    }
    
set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);

    
engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);

    
set_pev(i_Ent,pev_solid,SOLID_NOT);
    
set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);

    
set_pev(i_Ent,pev_frame,0);
    
set_pev(i_Ent,pev_body,3);
    
set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
    
set_pev(i_Ent,pev_framerate,0);
    
set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
    
set_pev(i_Ent,pev_dmg,100.0);
    
set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
    new 
Float:vOrigin[3];
    new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];
    
pev(idpev_originvOrigin);
    
velocity_by_aim(id128vTraceDirection);
    
xs_vec_add(vTraceDirectionvOriginvTraceEnd);
    
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSid0);
    new 
Float:fFraction;
    
get_tr2(0TR_flFractionfFraction);

    
// -- We hit something!
    
if(fFraction 1.0)
    {
        
// -- Save results to be used later.
        
get_tr2(0TR_vecEndPosvTraceEnd);
        
get_tr2(0TR_vecPlaneNormalvNormal);
    }


    
xs_vec_mul_scalar(vNormal8.0vNormal);
    
xs_vec_add(vTraceEndvNormalvNewOrigin);

    
engfunc(EngFunc_SetSizei_EntFloat:{ -4.0, -4.0, -4.0 }, Float:{ 4.04.04.0 });
    
engfunc(EngFunc_SetOrigini_EntvNewOrigin);

    
// -- Rotate tripmine.
    
vector_to_angle(vNormal,vEntAngles);
    
set_pev(i_Ent,pev_angles,vEntAngles);

    
// -- Calculate laser end origin.
    
new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
         
    
xs_vec_mul_scalar(vNormal8192.0vNormal);
    
xs_vec_add(vNewOriginvNormalvBeamEnd);

    
engfunc(EngFunc_TraceLinevNewOriginvBeamEndIGNORE_MONSTERS, -10);

    
get_tr2(0TR_vecPlaneNormalvNormal);
    
get_tr2(0TR_vecEndPosvTracedBeamEnd);

    
// -- Save results to be used later.
    
set_pev(i_EntLASERMINE_OWNERid);
    
set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
    
set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
    new 
Float:fCurrTime get_gametime();

    
set_pev(i_Ent,LASERMINE_POWERUPfCurrTime 2.5);
    
set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
    
set_pev(i_Ent,pev_nextthinkfCurrTime 0.2);

    
PlaySound(i_Ent,POWERUP_SOUND);
    
g_deployed[id]++;
    
g_havemine[id]--;
    
DeleteTask(id);
    
ShowAmmo(id);
    return 
1;


Im not even sure what do i have to do to make it work, please help me, at least show me the path what to do to make player pass by the entity


All times are GMT -4. The time now is 06:25.

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