Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- addons/amxmodx/configs/Guard/cvars.ini
- net_graph 0 !2 3 // 0,1,3 good
- !not ==
- cvar Vmin Vmid Vmax
- */
- #include <amxmodx>
- #include <amxmisc>
- #define CVARS_FILE "cvars.ini"
- #if (AMXX_VERSION_NUM > 182)
- #define client_disconnect(%1) client_disconnected(%1, bool:drop, message[], maxlen)
- #endif
- new g_dCvarCvars //cvars
- new g_dCvarCvarsBanTime
- new g_dProtocol
- new g_dCvarsNumInList[33]
- new Trie:g_sCvars
- new bool:g_dPlayerStatus[33]
- new sLen;
- new g_dCvarLogs //logs
- new g_dCvarBanType //ban type
- public plugin_init(){
- static sFile[1024];
- register_plugin("Cvar Guard","1","Seroff");
- get_configsdir(sFile, charsmax(sFile));
- formatex(sFile, charsmax(sFile), "%s/Guard/", sFile);
- if(dir_exists(sFile))mkdir(sFile);
- formatex(sFile, charsmax(sFile), "%s/%s", sFile, CVARS_FILE);
- g_dProtocol=get_cvar_pointer("dp_r_protocol")
- g_dCvarCvars=register_cvar("guard_cvars","1");
- g_dCvarCvarsBanTime=register_cvar("guard_cvars_ban_time","1440");
- g_dCvarBanType=register_cvar("guard_ban_type","0");
- g_dCvarLogs=register_cvar("guard_logs","1")
- g_sCvars=TrieCreate();
- sLen=0;
- new sBuffer[512],sLine[10],isFile= fopen(sFile,"r");//,dLine,dLen
- /*dLine=0
- while(read_file(CVARS_FILE,dLine,sBuffer,255,dLen)!=0){
- if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/')){
- dLine++
- continue
- }
- ArrayPushString(g_sCvars,sBuffer)
- dLine++
- }*/
- while(!feof(isFile)){
- fgets(isFile,sBuffer,511);
- if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/')){
- continue
- }
- trim(sBuffer);
- if(strlen(sBuffer)>10){
- sLen++
- num_to_str(sLen-1,sLine,charsmax(sLine));
- TrieSetString(g_sCvars,sLine,sBuffer);
- }
- }
- }
- new szChecks[32];
- public client_putinserver(iPlayer){
- szChecks[iPlayer]=0;
- if(is_user_bot(iPlayer)||is_user_hltv(iPlayer)){
- return PLUGIN_CONTINUE
- }
- g_dPlayerStatus[iPlayer]=true
- g_dCvarsNumInList[iPlayer]=0
- set_task(random_float(0.5,5.0),"start_scan",iPlayer)
- return PLUGIN_CONTINUE
- }
- public informers(iPlayer){
- console_print(iPlayer,"[Anti-Cheat] *************************************");
- console_print(iPlayer,"[Anti-Cheat] доуступные значения:");
- new dSize=sLen,sLine[10];
- new sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64];
- for(new i;i<dSize;i++){
- num_to_str ( i, sLine, charsmax(sLine) );
- TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
- parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63);
- if(!equal(sMiddle,sMax)){
- if(sMiddle[0]=='!'){
- console_print(iPlayer,"[Anti-Cheat] %s %s | %s %s (не доступное %s %s)",sCvar,sMin,sCvar,sMax,sCvar,sMiddle[1]);
- }else{
- if(!(sMiddle[0]=='!')){
- if(!equal(sMiddle,sMin)){
- console_print(iPlayer,"[Anti-Cheat] %s %s | %s %s | %s %s",sCvar,sMin,sCvar,sMiddle,sCvar,sMax);
- }else{
- console_print(iPlayer,"[Anti-Cheat] %s %s | %s %s",sCvar,sMiddle,sCvar,sMax);
- }
- }
- }
- }else{
- console_print(iPlayer,"[Anti-Cheat] %s %s",sCvar,sMiddle);
- }
- }
- console_print(iPlayer,"[Anti-Cheat] *************************************");
- }
- public client_disconnect(iPlayer){
- reset(iPlayer)
- }
- public reset(iPlayer){
- szChecks[iPlayer]=0;
- g_dPlayerStatus[iPlayer]=false
- if(task_exists(iPlayer)){
- remove_task(iPlayer)
- }
- }
- public start_scan(iPlayer){
- set_task(0.5,"informers",iPlayer);
- new iCvars=get_pcvar_num(g_dCvarCvars)
- server_cmd("dp_clientinfo %d",iPlayer)
- server_exec()
- new iProtocol=get_pcvar_num(g_dProtocol)
- if(!iProtocol)
- {
- new iUserid=get_user_userid(iPlayer)
- server_cmd("kick #%d [Anti-Cheat] cann't get protocol: server has problem with dproto!",iUserid)
- }
- if(iCvars){
- switch(iProtocol){
- case 47:set_task(0.5,"check_cvars_47",iPlayer,_,_,"b")
- case 48:set_task(6.5,"check_cvars_48",iPlayer,_,_,"b")
- }
- }
- }
- public check_cvars_47(iPlayer){
- new sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64]
- new dNum=g_dCvarsNumInList[iPlayer],sLine[10];
- new dSize=sLen;
- num_to_str ( dNum, sLine, charsmax(sLine) );
- TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
- parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63);
- if(sMiddle[0]=='!'){
- client_cmd(iPlayer,"%s %s",sCvar,sMax);
- console_cmd(iPlayer,"%s %s",sCvar,sMax);
- }else{
- client_cmd(iPlayer,"%s %s",sCvar,sMiddle);
- console_cmd(iPlayer,"%s %s",sCvar,sMiddle);
- }
- if(dNum==dSize-1){
- g_dCvarsNumInList[iPlayer]=0
- }
- else
- {
- g_dCvarsNumInList[iPlayer]++
- }
- }
- public check_cvars_48(iPlayer){
- new dSize=sLen;
- new sBuffer[64],sCvar[64],sLine[10];
- set_task(1.5,"checkeds",iPlayer);
- szChecks[iPlayer]=dSize;
- for(new i;i<dSize;i++){
- num_to_str ( i, sLine, charsmax(sLine) );
- TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
- parse(sBuffer,sCvar,63);
- query_client_cvar(iPlayer,sCvar,"cvar_results")
- }
- }
- public cvar_results(iPlayer,const cvar[],const value[]){
- szChecks[iPlayer]--;
- new dSize=sLen,sLine[10];
- new sBanReason[64],sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64],Float:dMin,Float:dMid,Float:dMax,Float:dValue
- for(new i;i<dSize;i++){
- num_to_str ( i, sLine, charsmax(sLine) );
- TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
- parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63)
- dMin=str_to_float(sMin);
- dMax=str_to_float(sMax);
- dMid=str_to_float(sMiddle[1]);
- if(equal(sCvar,cvar)){
- dValue=str_to_float(value)
- if(dValue<dMin||dValue>dMax || (sMiddle[0]=='!') && dMid==dValue){
- if(g_dPlayerStatus[iPlayer]==true){
- //ban cvars
- new iBanTime=get_pcvar_num(g_dCvarCvarsBanTime)
- console_print(iPlayer,"[Anti-Cheat] *************************************");
- console_print(iPlayer,"[Anti-Cheat] %s не доуступное значение: %s",cvar,value);
- console_print(iPlayer,"[Anti-Cheat] %s рекомендованное значение: %s",cvar,sMiddle);
- console_print(iPlayer,"[Anti-Cheat] *************************************");
- format(sBanReason,63,"%s %0.2f",cvar,dValue)
- ban(iPlayer,sBanReason,iBanTime)
- }
- }
- }
- }
- }
- public checkeds(iPlayer){
- if(szChecks[iPlayer]!=0){
- new iBanTime=get_pcvar_num(g_dCvarCvarsBanTime)
- ban(iPlayer,"Не возможно проверить у вас квары, выключите блокер в ini файле защиты игры!",iBanTime)
- }
- }
- public plugin_end() {
- TrieDestroy(g_sCvars);
- }
- public ban(iPlayer,sBanReason[],dBanTime){
- reset(iPlayer)
- new iBanType=get_pcvar_num(g_dCvarBanType)
- new iLogsEnable=get_pcvar_num(g_dCvarLogs)
- new sIp[16],sAuthid[34],sName[33]
- get_user_ip(iPlayer,sIp,15,1)
- get_user_authid(iPlayer,sAuthid,33)
- get_user_name(iPlayer,sName,32)
- new dUserid=get_user_userid(iPlayer)
- switch(iBanType){
- case 0:server_cmd("kick #%d [Anti-Cheat] %s detected!",dUserid,sBanReason)
- case 1:server_cmd("addip %d %s;writeip",dBanTime,sIp)
- case 2:{
- if(containi(sAuthid,"STEAM_0:")!=-1){
- server_cmd("amx_ban #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
- }
- else
- {
- server_cmd("amx_banip #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
- }
- }
- case 3:server_cmd("amx_ban %d #%d ^"[Anti-Cheat] %s detected!^"",dBanTime,dUserid,sBanReason)
- case 4:server_cmd("amx_ban #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
- case 5:server_cmd("amx_superban #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
- }
- ChatColor(iPlayer,"^1Игрок ^3[^4%s^3] ^1наказан ^3за ^1[^4%s^1]",sName,sBanReason);
- if(iLogsEnable){
- log_to_file("addons\amxmodx\logs\Anti_cvars.txt","<%s> <%s> <%s> <%s>",sBanReason,sName,sIp,sAuthid)
- }
- set_hudmessage(255,0,0,-1.0,0.75,0,0.0,5.0,0.0,0.0,-1)
- show_hudmessage(0,"[Anti-Cheat] %s: %s detected!",sName,sBanReason)
- }
- /* Сток цветного чата */
- stock ChatColor(const id, const input[], any:...)
- {
- new count = 1, players[32]
- static msg[191]
- vformat(msg, 190, input, 3)
- replace_all(msg, 190, "!g", "^4") // Зелёный
- replace_all(msg, 190, "!y", "^1") // Стандартный
- replace_all(msg, 190, "!t", "^3") // Цвет команды
- if (id) players[0] = id; else get_players(players, count, "ch")
- {
- for (new i = 0; i < count; i++)
- {
- if (is_user_connected(players[i]))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
- write_byte(players[i]);
- write_string(msg);
- message_end();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement