Descărcare:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#define MAX_ENTITYS 900+15*32 // (900+15*SERVER_SLOTS) is the calculation cs uses but it can be bypassed by the "-num_edicts <x>"-parameter
new bool:g_bPlayerInvisible[33];
new bool:g_bWaterInvisible[33];
new bool:g_bWaterEntity[MAX_ENTITYS];
new bool:g_bWaterFound;
new g_iSpectatedId[33];
public plugin_init( )
{
register_plugin( "Invis", "2.0", "SchlumPF" );
register_clcmd( "say /invis", "menuInvisDisplay" );
register_menucmd( register_menuid( "\r[DR] \wCrestere FPS:^n^n" ), 1023, "menuInvisAction" );
register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 );
RegisterHam( Ham_Spawn, "player", "hamSpawnPlayer_Post", 1 );
register_event( "SpecHealth2", "eventSpecHealth2", "bd" );
}
public plugin_cfg( )
{
new ent = -1;
while( ( ent = find_ent_by_class( ent, "func_water" ) ) != 0 )
{
// pev( ent, pev_skin ) == CONTENTS_WATER is also true on func_water entities
if( !g_bWaterFound )
{
g_bWaterFound = true;
}
g_bWaterEntity[ent] = true;
}
// thanks to connor for finding the following two detections
ent = -1;
while( ( ent = find_ent_by_class( ent, "func_illusionary" ) ) != 0 )
{
if( pev( ent, pev_skin ) == CONTENTS_WATER )
{
if( !g_bWaterFound )
{
g_bWaterFound = true;
}
g_bWaterEntity[ent] = true;
}
}
ent = -1;
while( ( ent = find_ent_by_class( ent, "func_conveyor" ) ) != 0 )
{
if( pev( ent, pev_spawnflags ) == 3 )
{
if( !g_bWaterFound )
{
g_bWaterFound = true;
}
g_bWaterEntity[ent] = true;
}
}
}
public fwdAddToFullPack_Post( es_handle, e, ent, host, hostflags, player, pset )
{
if( player && g_bPlayerInvisible[host] && host != ent && ent != g_iSpectatedId[host] && get_user_team(host) == get_user_team(ent) )
{
static const Float:corner[8][3] =
{
{ -4096.0, -4096.0, -4096.0 },
{ -4096.0, -4096.0, 4096.0 },
{ -4096.0, 4096.0, -4096.0 },
{ -4096.0, 4096.0, 4096.0 },
{ 4096.0, -4096.0, -4096.0 },
{ 4096.0, -4096.0, 4096.0 },
{ 4096.0, 4096.0, -4096.0 },
{ 4096.0, 4096.0, 4096.0 }
};
// rounded; distance from the map's center to the corners; sqrt( 4096^2 + 4096^2 + 4096^2 )
static const Float:map_distance = 7094.480108;
static Float:origin[3];
get_es( es_handle, ES_Origin, origin );
static i;
while( get_distance_f( origin, corner ) > map_distance )
{
if( ++i >= sizeof( corner ) )
{
// better to nullify the varibale now then doing it each time before the loop
i = 0;
}
}
set_es( es_handle, ES_Origin, corner );
set_es( es_handle, ES_Effects, get_es( es_handle, ES_Effects ) | EF_NODRAW );
}
else if( g_bWaterInvisible[host] && g_bWaterEntity[ent])
{
set_es( es_handle, ES_Effects, get_es( es_handle, ES_Effects ) | EF_NODRAW );
}
}
public hamSpawnPlayer_Post( id )
{
g_iSpectatedId[id] = 0;
}
// thanks to xPaw who told me about this event
public eventSpecHealth2( id )
{
g_iSpectatedId[id] = read_data( 2 );
}
public menuInvisDisplay( id )
{
static menu[256];
new len = formatex( menu, 255, "\r[DR] \wCrestere FPS:^n^n" );
len += formatex( menu[len], 255 - len, "\r1. \wCoechipierii: \y%s^n", g_bPlayerInvisible[id] ? "Invizibili" : "Vizibili" );
if( g_bWaterFound )
{
len += formatex( menu[len], 255 - len, "\r2. \wApa: \y%s^n", g_bWaterInvisible[id] ? "Invizibila" : "Vizibila" );
}
else
{
len += formatex( menu[len], 255 - len, "\r2. \wApa: \yNu exista apa pe harta!^n" );
}
len += formatex( menu[len], 255 - len, "^n\r0. \wIesire" );
show_menu( id, ( 1<<0 | 1<<1 | 1<<9 ), menu, -1 );
return PLUGIN_HANDLED;
}
public menuInvisAction( id, key )
{
switch( key )
{
case 0:
{
g_bPlayerInvisible[id] = !g_bPlayerInvisible[id];
menuInvisDisplay( id );
}
case 1:
{
if( g_bWaterFound )
{
g_bWaterInvisible[id] = !g_bWaterInvisible[id];
}
menuInvisDisplay( id );
}
case 9: show_menu( id, 0, "" );
}
}
public client_connect( id )
{
g_bPlayerInvisible[id] = false;
g_bWaterInvisible[id] = false;
g_iSpectatedId[id] = 0;
}
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#define MAX_ENTITYS 900+15*32 // (900+15*SERVER_SLOTS) is the calculation cs uses but it can be bypassed by the "-num_edicts <x>"-parameter
new bool:g_bPlayerInvisible[33];
new bool:g_bWaterInvisible[33];
new bool:g_bWaterEntity[MAX_ENTITYS];
new bool:g_bWaterFound;
new g_iSpectatedId[33];
public plugin_init( )
{
register_plugin( "Invis", "2.0", "SchlumPF" );
register_clcmd( "say /invis", "menuInvisDisplay" );
register_menucmd( register_menuid( "\r[DR] \wCrestere FPS:^n^n" ), 1023, "menuInvisAction" );
register_forward( FM_AddToFullPack, "fwdAddToFullPack_Post", 1 );
RegisterHam( Ham_Spawn, "player", "hamSpawnPlayer_Post", 1 );
register_event( "SpecHealth2", "eventSpecHealth2", "bd" );
}
public plugin_cfg( )
{
new ent = -1;
while( ( ent = find_ent_by_class( ent, "func_water" ) ) != 0 )
{
// pev( ent, pev_skin ) == CONTENTS_WATER is also true on func_water entities
if( !g_bWaterFound )
{
g_bWaterFound = true;
}
g_bWaterEntity[ent] = true;
}
// thanks to connor for finding the following two detections
ent = -1;
while( ( ent = find_ent_by_class( ent, "func_illusionary" ) ) != 0 )
{
if( pev( ent, pev_skin ) == CONTENTS_WATER )
{
if( !g_bWaterFound )
{
g_bWaterFound = true;
}
g_bWaterEntity[ent] = true;
}
}
ent = -1;
while( ( ent = find_ent_by_class( ent, "func_conveyor" ) ) != 0 )
{
if( pev( ent, pev_spawnflags ) == 3 )
{
if( !g_bWaterFound )
{
g_bWaterFound = true;
}
g_bWaterEntity[ent] = true;
}
}
}
public fwdAddToFullPack_Post( es_handle, e, ent, host, hostflags, player, pset )
{
if( player && g_bPlayerInvisible[host] && host != ent && ent != g_iSpectatedId[host] && get_user_team(host) == get_user_team(ent) )
{
static const Float:corner[8][3] =
{
{ -4096.0, -4096.0, -4096.0 },
{ -4096.0, -4096.0, 4096.0 },
{ -4096.0, 4096.0, -4096.0 },
{ -4096.0, 4096.0, 4096.0 },
{ 4096.0, -4096.0, -4096.0 },
{ 4096.0, -4096.0, 4096.0 },
{ 4096.0, 4096.0, -4096.0 },
{ 4096.0, 4096.0, 4096.0 }
};
// rounded; distance from the map's center to the corners; sqrt( 4096^2 + 4096^2 + 4096^2 )
static const Float:map_distance = 7094.480108;
static Float:origin[3];
get_es( es_handle, ES_Origin, origin );
static i;
while( get_distance_f( origin, corner ) > map_distance )
{
if( ++i >= sizeof( corner ) )
{
// better to nullify the varibale now then doing it each time before the loop
i = 0;
}
}
set_es( es_handle, ES_Origin, corner );
set_es( es_handle, ES_Effects, get_es( es_handle, ES_Effects ) | EF_NODRAW );
}
else if( g_bWaterInvisible[host] && g_bWaterEntity[ent])
{
set_es( es_handle, ES_Effects, get_es( es_handle, ES_Effects ) | EF_NODRAW );
}
}
public hamSpawnPlayer_Post( id )
{
g_iSpectatedId[id] = 0;
}
// thanks to xPaw who told me about this event
public eventSpecHealth2( id )
{
g_iSpectatedId[id] = read_data( 2 );
}
public menuInvisDisplay( id )
{
static menu[256];
new len = formatex( menu, 255, "\r[DR] \wCrestere FPS:^n^n" );
len += formatex( menu[len], 255 - len, "\r1. \wCoechipierii: \y%s^n", g_bPlayerInvisible[id] ? "Invizibili" : "Vizibili" );
if( g_bWaterFound )
{
len += formatex( menu[len], 255 - len, "\r2. \wApa: \y%s^n", g_bWaterInvisible[id] ? "Invizibila" : "Vizibila" );
}
else
{
len += formatex( menu[len], 255 - len, "\r2. \wApa: \yNu exista apa pe harta!^n" );
}
len += formatex( menu[len], 255 - len, "^n\r0. \wIesire" );
show_menu( id, ( 1<<0 | 1<<1 | 1<<9 ), menu, -1 );
return PLUGIN_HANDLED;
}
public menuInvisAction( id, key )
{
switch( key )
{
case 0:
{
g_bPlayerInvisible[id] = !g_bPlayerInvisible[id];
menuInvisDisplay( id );
}
case 1:
{
if( g_bWaterFound )
{
g_bWaterInvisible[id] = !g_bWaterInvisible[id];
}
menuInvisDisplay( id );
}
case 9: show_menu( id, 0, "" );
}
}
public client_connect( id )
{
g_bPlayerInvisible[id] = false;
g_bWaterInvisible[id] = false;
g_iSpectatedId[id] = 0;
}
Nume plugin: Invis Deathrun
Versiune: 2.0
Cvar-uri (daca necesita): -
Comenzi (daca necesita): /invis
Module necesare (pentru rularea si activarea pluginului corect):
Instalare:
1. Fișierul invis.sma îl puneți in addons/amxmodx/scripting
2. Fișierul invis.amxx îl puneți in addons/amxmodx/plugins
3. Intrați în fișierul addons/amxmodx/configs/plugins.ini si adaugati la urma: invis.amxx