/ ************************************************* *******************************
* AMX Mod X Script .
*
* Prędkość Hack Detector
* Formatright ( C ) 2009 OT
*
* Ten program jest wolnym oprogramowaniem ; możesz go rozprowadzać dalej i / lub
* Modyfikować zgodnie z warunkami GNU General Public License
* Opublikowanej przez Free Software Foundation w wersji 2
* Z tej licencji lub (według Twojego wyboru ) dowolnej późniejszej.
*
* Ten program jest rozpowszechniany w nadziei, że będzie użyteczny ,
* Ale BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji
* SPRZEDAŻY LUB PRZYDATNOŚCI DO OKREŚLONEGO CELU . Zobacz
* GNU General Public License więcej szczegółów.
*
* Powinieneś otrzymać kopię GNU General Public License
* Wraz z tym programem , jeśli nie, napisz do Free Software
* Foundation , Inc , 59 Temple Place - Suite 330 , Boston, MA 02111-1307 , USA .
*
* Ponadto , jako wyjątek specjalny ,autor wyraża zgodę na
* Odwołuje się kod programu z Half-Life Game Engine ( " HL
* Silnik " ) i modyfikowane Biblioteki gier (" modów ") opracowany przez Valve ,
* L.L.C ( "zawór " ) . Musisz przestrzegać GNU General Public License w ogóle
* Szanuje za cały kod stosowany inny niż silnik HL i modami
* Od Valve. Jeśli zmodyfikować ten plik , można rozszerzyć ten wyjątek
* Do wersji pliku , ale nie są do tego zobowiązani . jeśli
* Nie chcesz to zrobić, to oświadczenie usunąć wyjątek z konta
* Wersja .
*
************************************************** ******************************** /
/ * [Zobacz link ]
http://forums.allied...ad.php?t=131219
* /
/ * [ Zmiany ]
- 2.0 - poprawione wszystko , udoskonalił metodę detekcji , stały LGD problem serwera, który zakazywał graczy! Poprawiono i dodano cvar wykrycia detekcji clockwindow .
- 1.6 - Usunięto problemwtyczki nie wykrywa cvar developer
- 1,5 - dodał cvar na granicy , ulepszoną rejestrację
- 1.4 - dodaje deweloper akcja cvar
- 1.3 - lepsze rejestrowanie , increaced tolerancji
- 1.2 - dodano więcej CVARs za dostosowanie
- 1.1 - dodano jedną opcję do punishtype cvar
- 1.0 - pierwsza wersja
* /
/ * [ Kredyty ]
Mobilizacja - pisał wszystkie fałszywe zakazy , sugeruje ulepszenia , serwer lag Problem fałszywe wykrywanie , clockwindow informacji
Connor - Informacje o corectly wykrywania cvar developer
* /
# include <amxmodx>
# include <fakemeta>
# include <hamsandwich>
# define add_bot_property ( % 1 ) gBS_cl_bot | = ( 1 << ( % 1 - 1 ) )
# define del_bot_property ( % 1 ) gBS_cl_bot & = ~ ( 1 << ( % 1 - 1 ) )
# define has_bot_property ( % 1 ) ( gBS_cl_bot & ( 1 << ( % 1 - 1 ) ) )
# define add_alive_property ( % 1 ) gBS_cl_alive | = ( 1 << ( % 1 - 1 ) )
# define del_alive_property ( % 1 ) gBS_cl_alive & = ~ ( 1 << ( % 1 - 1 ) )
# define has_alive_property ( % 1 ) ( gBS_cl_alive & ( 1 << ( % 1 - 1 ) ) )
const gC_MaxIdle = 2500
const gC_MaxSlots = 32
Nowy gBS_cl_alive , gBS_cl_bot
Nowy gPV_punishtype , gPV_enable , gCV_enable , gPV_bantime , gPV_adminonly , gPV_logbans , gPV_limit
Nowy gCLI_count [ gC_MaxSlots + 1 ]
Nowy gCLI_loss [ gC_MaxSlots + 1 ]
Nowy gCLI_ping [ gC_MaxSlots + 1 ]
nowe gCLI_buttons [ gC_MaxSlots + 1 ]
Nowy gCLI_idlecount [ gC_MaxSlots + 1 ]
Nowy Float : gCLF_lasttime [ gC_MaxSlots + 1 ]
Nowy Float : gCLV_views [ gC_MaxSlots + 1] [ 3 ]
Nowy Float : gCLV_pviews [ gC_MaxSlots + 1] [ 3 ]
plugin_init publicznego ( )
{
register_plugin ( "Speed Hack Detector ", " 2.0 ", " OT ")
gPV_enable = register_cvar ( " spd_enable ", "1")
gPV_punishtype = register_cvar ( " spd_punishtype ", " 0")
gPV_bantime = register_cvar ( " spd_bantime ", " 0")
gPV_adminonly = register_cvar ( " spd_adminonly ", "1")
gPV_logbans = register_cvar ( " spd_logbans " , "1" )
gPV_limit = register_cvar ( " spd_limit ", " 150 " )
RegisterHam ( Ham_Spawn , " gracz ", " pfw_PlayerHandleAD " , 1 )
RegisterHam ( Ham_Killed , " gracz ", " pfw_PlayerHandleAD " , 1 )
register_forward ( FM_CmdStart " pfw_CmdStart " 1 )
set_task (1,0 , " tsk_ChacheCvars " , 0, " ", 0 , "b" , 0 )
}
client_putinserver publicznych (id )
{
del_alive_property (id )
if ( is_user_bot (id ) )
add_bot_property (id )
więcej
del_bot_property (id )
}
client_disconnect publicznych (id )
{
del_alive_property (id )
del_bot_property (id )
}
tsk_ChacheCvars publicznych (id )
{
/ /! Oznacza to, że chcemy lub 0 lub 1, nie 34183 wartości
gCV_enable = ! get_pcvar_num ( gPV_enable )
powrót PLUGIN_CONTINUE
}
publicznych pfw_CmdStart (id , pUC , nasiona )
{
if ( ! gCV_enable )
powrót FMRES_IGNORED
if ( has_alive_property (id ) | ! | has_bot_property (id ) )
powrót FMRES_IGNORED
Nowy Float : fGameTime , iButtons
Nowy Float : vView [ 3 ]
PEV (id , pev_v_angle , vView )
fGameTime = get_gametime ( )
get_uc (PUC , UC_Buttons , iButtons )
jeśli ( gCLI_count [ id ] > 0 )
{
jeśli ( gCLI_buttons [ id] == iButtons )
{
jeśli ( gCLV_pviews [ id ] [ 0 ] == vView [ 0 ] && gCLV_pviews [ id ] [ 1 ] == vView [ 1 ] && gCLV_pviews [ id ] [ 2 ] == vView [ 2 ] )
gCLI_idlecount [ id ] + +
więcej
gCLI_idlecount [ id ] = 0
jeśli ( gCLI_idlecount [ id ] > gC_MaxIdle )
{
gCLV_views [ id ] [ 0 ] == -8000,0
gCLI_idlecount [ id ] = 0
}
}
więcej
{
gCLI_idlecount [ id ] = 0
gCLI_buttons [ id ] = iButtons
}
gCLV_pviews [ id] [ 0 ] = vView [ 0]
gCLV_pviews [ id] [ 1 ] = vView [ 1 ]
gCLV_pviews [ id] [ 2 ] = vView [ 2 ]
}
jeśli ( gCLI_count [ id ] < 0 )
{
gCLI_idlecount [ id ] = 0
gCLI_buttons [ id ] = iButtons
gCLV_pviews [ id] [ 0 ] = vView [ 0]
gCLV_pviews [ id] [ 1 ] = vView [ 1 ]
gCLV_pviews [ id] [ 2 ] = vView [ 2 ]
}
jeśli ( gCLV_views [ id ] [ 0 ] == -8000,0 && gCLI_count [ id ] ! = -9 )
{
gCLI_count [ id ] = -9
powrót FMRES_IGNORED
}
jeśli ( gCLI_count [ id ] < -2 )
{
gCLI_buttons [ id ] = iButtons
gCLV_views [ id] [ 0 ] = vView [ 0]
gCLV_views [ id] [ 1 ] = vView [ 1 ]
gCLV_views [ id] [ 2 ] = vView [ 2 ]
gCLI_count [ id ] + +
powrót FMRES_IGNORED
}
/ / Jeśliużytkownik rozpoczął kierowanie graczy
jeśli ( gCLV_views [ id ] [ 0 ] == vView [ 0 ] && gCLV_views [ id ] [ 1 ] == vView [ 1 ] && gCLV_views [ id ] [ 2 ] == vView [ 2 ] )
{
gCLI_count [ id ] = -2
powrót FMRES_IGNORED
}
jeśli ( fGameTime - gCLF_lasttime [ id ] > 1.0 )
{
jeśli ( gCLI_count [ id ] > get_pcvar_num ( gPV_limit ) )
punish_player (id )
jeśli ( gCLI_count [ id ] < 0 )
gCLI_count [ id ] + +
więcej
gCLI_count [ id ] = 0
gCLF_lasttime [ id ] = fGameTime
powrót FMRES_IGNORED
}
jeśli ( gCLI_count [ id ] > = 0 )
{
Nowy straty , ping
get_user_ping (id , ping , strata)
gCLI_loss [ id ] = floatround (float ( gCLI_loss [ id ] * gCLI_count [ id ] + strata) / float ( gCLI_count [ id ] ) )
gCLI_ping [ id ] = floatround (float ( gCLI_ping [ id ] * gCLI_count [ id ] + ping ) / float ( gCLI_count [ id ] ) )
gCLI_count [ id ] + +
jeśli ( gCLI_count [ id ] % 10 == 0 )
{
query_client_cvar (id , " programista ", " qcv_developer " )
query_client_cvar (id , " clockwindow ", " qcv_clockwindow " )
}
}
powrót FMRES_IGNORED
}
publicznych pfw_PlayerHandleAD (id )
{
if ( is_user_alive (id ) )
{
if ( ! has_bot_property (id ) )
{
query_client_cvar (id , " programista ", " qcv_developer " )
query_client_cvar (id , " clockwindow ", " qcv_clockwindow " )
}
gCLF_lasttime [ id ] = get_gametime ( )
gCLV_views [ id ] [ 0 ] = -8000,0
gCLI_idlecount [ id ] = 0
add_alive_property (id )
}
więcej
del_alive_property (id )
powrót HAM_IGNORED
}
qcv_developer publicznych (id , const cvar [ ] , wartość const [ ] )
{
/ / Dziękuję Connor !
nowy len , licznik, C, I
len = strlen (wartość )
licznik = 0
for (i = 0 ; i < len , i + + )
{
c = wartość [i]
if ( c ! = 48 )
{
if ( c == 46)
{
if ( + licznik > 1)
{
kick_user (id , " Kicked szybkością Hack Detector ", " Powód : Nie można grać z deweloperem inną niż 0 " " . Aby połączyć zestaw developer 0 i pozostawić go w ten sposób , albo będzie zakazane " , )
}
}
więcej
{
kick_user (id , " Kicked szybkością Hack Detector ", " Powód : Nie można grać z deweloperem inną niż 0 " " . Aby połączyć zestaw developer 0 i pozostawić go w ten sposób , albo będzie zakazane " , )
}
}
}
}
qcv_clockwindow publicznych (id , const cvar [ ] , wartość const [ ] )
{
jeśli (wartość [ 0 ] = '0 ! " | | ! wartość [ 1 ] = '.' | | ! wartość [ 2 ] = '5 ' | | ! wartość [ 3 ] = " ^ 0 ")
kick_user (id , " Kicked szybkością Hack Detector ", " Powód : Nie można grać z clockwindow inna niż 0,5 " " . Aby połączyć zestaw clockwindow 0,5 i pozostawić go w ten sposób , albo będzie zakazane " , )
}
punish_player (id )
{
Nowa nazwa [ 32 ]
get_user_name (id , name, 31 )
Nowy SteamID [ 32 ]
get_user_authid (id , SteamID , 31 )
Nowy ping , utrata
get_user_ping (id , ping , strata)
/ / Nie ping = okres Lag (prawdopodobnie fałszywe wykrycia ) . Dzięki Mobilizacja !
if ( ping )
return 0
Przełącznik ( get_pcvar_num ( gPV_punishtype ) )
{
case 1: / / AMX zakazów wsparcia
{
server_cmd ( " amx_ban % d # % d ^ " Speed Hack ^ " " , abs ( get_pcvar_num ( gPV_bantime ) ) , get_user_userid (id ) )
}
case 2 : / /normalny zakaz zawarte w admincmd.sma
{
server_cmd ( " amx_ban # % d% d ^ " Speed Hack ^ " " , get_user_userid (id ) , abs ( get_pcvar_num ( gPV_bantime ) ) )
}
case 3 : / /sam jak poprzedni , ale bez Zewnętrzne wtyczki potrzebne .
{
server_cmd ( " akcja # % d ^ " Speed Hack ( Zbanowany na stałe ) ^ " ; czekać ; banid ^ " % D.0 ^ " ^ " % s ^ " ; czekać ; writeid " , get_user_userid (id ) , abs ( get_pcvar_num ( gPV_bantime ) ) , SteamID )
}
case 4 : / ban / IP , zawarte w admincmd.sma
{
server_cmd ( " amx_banip # % d% d ^ " Speed Hack ^ " " , get_user_userid (id ) , abs ( get_pcvar_num ( gPV_bantime ) ) )
}
domyślnie:
{
jeśli ( get_pcvar_num ( gPV_adminonly ) )
print_toadmin (nazwa )
więcej
client_print ( 0 , print_chat , " [ SHD ] Gracz% s został wykryty za pomocą prędkości siekać . " , nazwa )
powrót 1
}
}
Nowa wiadomość [ 200 ]
formatex ( wiadomość , charsmax ( komunikat ) , " [ SHD ] Nazwa : % s | Steam ID : % s | hrabiów : % d | Ping : % d | Straty : % d " , nazwa , SteamID , gCLI_count [ id ] , gCLI_ping [ id ] , gCLI_loss [ id ] )
jeśli ( get_pcvar_num ( gPV_logbans ) )
log_to_file ( " shd_bans.log " , wiadomość )
console_print ( 0 , wiadomość )
jeśli ( get_pcvar_num ( gPV_adminonly ) )
print_toadmin (nazwa )
więcej
client_print ( 0 , print_chat , " [ SHD ] Gracz% s ", name , ( 0 < get_pcvar_num ( gPV_punishtype ) < = 4 ) " został zakazany z powodu hack prędkości " : " został wykryty za pomocą prędkości hack" )
powrót 1
}
print_toadmin ( nazwa [ ] )
{
nowych graczy [ 32 ] , num , id
get_players ( gracze , num )
for ( i = 0 nowy , i < num , i + + )
{
id = gracze [i]
if ( get_user_flags (id ) i ADMIN_CHAT )
client_print (id , print_chat , " [ SHD ] [ Admin ] Gracz% s ", name , ( 0 < get_pcvar_num ( gPV_punishtype ) < = 4 ) " został zakazany z powodu hack prędkości " : " został wykryty za pomocą prędkości hack" )
}
}
kick_user (id , line1 [ ] = " " , line2 [ ] = " " , line3 [ ] = " " )
{
Nowy msg_content [ 1024 ] , pl_name [ 32 ] , pl_userid , pl_authid [ 35 ]
/ * Informacje o pozyskiwanie grab * /
pl_userid = get_user_userid (id )
get_user_name (id , pl_name , 31 )
get_user_authid (id , pl_authid , 34 )
/ * Czy kick gracza * /
Format ( msg_content , 1023 , " % s ^ n% s ^ n% s " , wiersz 1 , line2 , line3 )
message_begin ( MSG_ONE , SVC_DISCONNECT , { 0,0,0 } , id )
write_string ( msg_content )
message_end ( )
/ * Log kopa jak <kick> polecenia zrobić * /
log_message ( " Kick_ML : ^ " % s < % d > < % s > < > ^ " został wyrzucony przez ^ " ^ Konsola "(komunikat ^ " % s ^ " ^ " % s ^ " ^ " % s ^ " ) " pl_name , pl_userid , pl_authid , wiersz 1 , line2 , line3 )
po pierwsze ip_banviolators 0 // 1 - banowanie, 0 - sama podmiana tekstu
ip_banminutes 10 // czas BAN'a w minutach, 0 = perm. tego nie ma !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! kur.wa