|
BANNED
Join Date: Jan 2011
Location: Narnia
|

07-24-2013
, 12:03
HELP with antiblock
|
#1
|
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_forward( FM_ClientCommand, "fwdClientCommand" )
if( get_pcvar_num( g_iCvar[0] ) )
{
g_iForwardId[0] = register_forward( FM_PlayerPreThink, "fwdPlayerPreThink" )
g_iForwardId[1] = register_forward( FM_PlayerPostThink, "fwdPlayerPostThink" )
g_iForwardId[2] = register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 )
g_bSemiclipEnabled = true
}
else
g_bSemiclipEnabled = false
g_iMaxPlayers = get_maxplayers( )
}
public fwdPlayerPreThink( plr )
{
static id, last_think
if( last_think > plr )
{
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( is_user_alive( id ) )
{
if( get_pcvar_num( g_iCvar[1] ) )
g_iTeam[id] = zp_get_user_zombie( id )
g_bSolid[id] = pev( id, pev_solid ) == SOLID_SLIDEBOX ? true : false
pev( id, pev_origin, g_fOrigin[id] )
}
else
g_bSolid[id] = false
}
}
last_think = plr
if( g_bSolid[plr] )
{
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( g_bSolid[id] && get_distance_f( g_fOrigin[plr], g_fOrigin[id] ) <= DISTANCE && id != plr )
{
if( get_pcvar_num( g_iCvar[1] ) && g_iTeam[plr] != g_iTeam[id] )
return FMRES_IGNORED
if(!(pev(plr, pev_button) & IN_USE))
return FMRES_IGNORED
set_pev( id, pev_solid, SOLID_NOT )
g_bHasSemiclip[id] = true
}
}
}
return FMRES_IGNORED
}
public fwdPlayerPostThink( plr )
{
static id
for( id = 1; id <= g_iMaxPlayers; id++ )
{
if( g_bHasSemiclip[id] )
{
set_pev( id, pev_solid, SOLID_SLIDEBOX )
g_bHasSemiclip[id] = false
}
}
}
public fwdAddToFullPack_Post( es_handle, e, ent, host, hostflags, player, pset )
{
if( player )
{
if( g_bSolid[host] && g_bSolid[ent] && get_distance_f( g_fOrigin[host], g_fOrigin[ent] ) <= DISTANCE )
{
if( get_pcvar_num( g_iCvar[1] ) && g_iTeam[host] != g_iTeam[ent] )
return FMRES_IGNORED
if(!(pev(host, pev_button) & IN_USE))
return FMRES_IGNORED
set_es( es_handle, ES_Solid, SOLID_NOT ) // makes semiclip flawless
if( get_pcvar_num( g_iCvar[2] ) == 1 )
{
set_es( es_handle, ES_RenderMode, kRenderTransAlpha )
set_es( es_handle, ES_RenderAmt, 85 )
}
else if( get_pcvar_num( g_iCvar[2] ) == 2 )
{
set_es( es_handle, ES_Effects, EF_NODRAW )
set_es( es_handle, ES_Solid, SOLID_NOT )
}
}
}
return FMRES_IGNORED
}
// is there a better way to detect changings of g_iCvar[0]?
public fwdClientCommand( plr )
{
// use the forwards just when needed, for good performance
if( !get_pcvar_num( g_iCvar[0] ) && g_bSemiclipEnabled )
{
unregister_forward( FM_PlayerPreThink, g_iForwardId[0] )
unregister_forward( FM_PlayerPostThink, g_iForwardId[1] )
unregister_forward( FM_AddToFullPack, g_iForwardId[2], 1 )
g_bSemiclipEnabled = false
}
else if( get_pcvar_num( g_iCvar[0] ) && !g_bSemiclipEnabled )
{
g_iForwardId[0] = register_forward( FM_PlayerPreThink, "fwdPlayerPreThink" )
g_iForwardId[1] = register_forward( FM_PlayerPostThink, "fwdPlayerPostThink" )
g_iForwardId[2] = register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 )
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(id, print_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(id, pev_origin, vOrigin);
velocity_by_aim(id, 128, vTraceDirection);
xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
new Float:fFraction;
get_tr2(0, TR_flFraction, fFraction);
// -- We hit something!
if(fFraction < 1.0)
{
// -- Save results to be used later.
get_tr2(0, TR_vecEndPos, vTraceEnd);
get_tr2(0, TR_vecPlaneNormal, vNormal);
}
xs_vec_mul_scalar(vNormal, 8.0, vNormal);
xs_vec_add(vTraceEnd, vNormal, vNewOrigin);
engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });
engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);
// -- 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(vNormal, 8192.0, vNormal);
xs_vec_add(vNewOrigin, vNormal, vBeamEnd);
engfunc(EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0);
get_tr2(0, TR_vecPlaneNormal, vNormal);
get_tr2(0, TR_vecEndPos, vTracedBeamEnd);
// -- Save results to be used later.
set_pev(i_Ent, LASERMINE_OWNER, id);
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_POWERUP, fCurrTime + 2.5);
set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
set_pev(i_Ent,pev_nextthink, fCurrTime + 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
|
|