Advertisement
seroff

Cvar Guard By Seroff

Feb 23rd, 2020
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.39 KB | None | 0 0
  1. /*
  2. addons/amxmodx/configs/Guard/cvars.ini
  3. net_graph 0 !2 3 // 0,1,3 good
  4. !not ==
  5. cvar Vmin Vmid Vmax
  6.  
  7. */
  8. #include <amxmodx>
  9. #include <amxmisc>
  10.  
  11. #define CVARS_FILE "cvars.ini"
  12.  
  13.  
  14. #if (AMXX_VERSION_NUM > 182)
  15. #define client_disconnect(%1) client_disconnected(%1, bool:drop, message[], maxlen)
  16.  
  17. #endif
  18.  
  19. new g_dCvarCvars //cvars
  20. new g_dCvarCvarsBanTime
  21. new g_dProtocol
  22. new g_dCvarsNumInList[33]
  23. new Trie:g_sCvars
  24. new bool:g_dPlayerStatus[33]
  25. new sLen;
  26. new g_dCvarLogs //logs
  27. new g_dCvarBanType //ban type
  28. public plugin_init(){
  29. static sFile[1024];
  30. register_plugin("Cvar Guard","1","Seroff");
  31. get_configsdir(sFile, charsmax(sFile));
  32. formatex(sFile, charsmax(sFile), "%s/Guard/", sFile);
  33. if(dir_exists(sFile))mkdir(sFile);
  34. formatex(sFile, charsmax(sFile), "%s/%s", sFile, CVARS_FILE);
  35. g_dProtocol=get_cvar_pointer("dp_r_protocol")
  36. g_dCvarCvars=register_cvar("guard_cvars","1");
  37. g_dCvarCvarsBanTime=register_cvar("guard_cvars_ban_time","1440");
  38. g_dCvarBanType=register_cvar("guard_ban_type","0");
  39. g_dCvarLogs=register_cvar("guard_logs","1")
  40. g_sCvars=TrieCreate();
  41. sLen=0;
  42. new sBuffer[512],sLine[10],isFile= fopen(sFile,"r");//,dLine,dLen
  43. /*dLine=0
  44. while(read_file(CVARS_FILE,dLine,sBuffer,255,dLen)!=0){
  45. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/')){
  46. dLine++
  47. continue
  48. }
  49. ArrayPushString(g_sCvars,sBuffer)
  50. dLine++
  51. }*/
  52.  
  53. while(!feof(isFile)){
  54. fgets(isFile,sBuffer,511);
  55. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/')){
  56. continue
  57. }
  58. trim(sBuffer);
  59. if(strlen(sBuffer)>10){
  60. sLen++
  61. num_to_str(sLen-1,sLine,charsmax(sLine));
  62. TrieSetString(g_sCvars,sLine,sBuffer);
  63. }
  64. }
  65. }
  66.  
  67. new szChecks[32];
  68.  
  69. public client_putinserver(iPlayer){
  70. szChecks[iPlayer]=0;
  71. if(is_user_bot(iPlayer)||is_user_hltv(iPlayer)){
  72. return PLUGIN_CONTINUE
  73. }
  74. g_dPlayerStatus[iPlayer]=true
  75. g_dCvarsNumInList[iPlayer]=0
  76. set_task(random_float(0.5,5.0),"start_scan",iPlayer)
  77. return PLUGIN_CONTINUE
  78. }
  79.  
  80. public informers(iPlayer){
  81. console_print(iPlayer,"[Anti-Cheat] *************************************");
  82. console_print(iPlayer,"[Anti-Cheat] доуступные значения:");
  83. new dSize=sLen,sLine[10];
  84. new sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64];
  85. for(new i;i<dSize;i++){
  86. num_to_str ( i, sLine, charsmax(sLine) );
  87. TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
  88. parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63);
  89. if(!equal(sMiddle,sMax)){
  90. if(sMiddle[0]=='!'){
  91. console_print(iPlayer,"[Anti-Cheat] %s %s | %s %s (не доступное %s %s)",sCvar,sMin,sCvar,sMax,sCvar,sMiddle[1]);
  92. }else{
  93. if(!(sMiddle[0]=='!')){
  94. if(!equal(sMiddle,sMin)){
  95. console_print(iPlayer,"[Anti-Cheat] %s %s | %s %s | %s %s",sCvar,sMin,sCvar,sMiddle,sCvar,sMax);
  96. }else{
  97. console_print(iPlayer,"[Anti-Cheat] %s %s | %s %s",sCvar,sMiddle,sCvar,sMax);
  98. }
  99. }
  100. }
  101. }else{
  102. console_print(iPlayer,"[Anti-Cheat] %s %s",sCvar,sMiddle);
  103. }
  104.  
  105. }
  106. console_print(iPlayer,"[Anti-Cheat] *************************************");
  107. }
  108.  
  109. public client_disconnect(iPlayer){
  110. reset(iPlayer)
  111. }
  112.  
  113.  
  114. public reset(iPlayer){
  115. szChecks[iPlayer]=0;
  116. g_dPlayerStatus[iPlayer]=false
  117. if(task_exists(iPlayer)){
  118. remove_task(iPlayer)
  119. }
  120. }
  121.  
  122. public start_scan(iPlayer){
  123. set_task(0.5,"informers",iPlayer);
  124. new iCvars=get_pcvar_num(g_dCvarCvars)
  125. server_cmd("dp_clientinfo %d",iPlayer)
  126. server_exec()
  127. new iProtocol=get_pcvar_num(g_dProtocol)
  128. if(!iProtocol)
  129. {
  130. new iUserid=get_user_userid(iPlayer)
  131. server_cmd("kick #%d [Anti-Cheat] cann't get protocol: server has problem with dproto!",iUserid)
  132. }
  133. if(iCvars){
  134. switch(iProtocol){
  135. case 47:set_task(0.5,"check_cvars_47",iPlayer,_,_,"b")
  136. case 48:set_task(6.5,"check_cvars_48",iPlayer,_,_,"b")
  137. }
  138. }
  139. }
  140.  
  141.  
  142. public check_cvars_47(iPlayer){
  143. new sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64]
  144. new dNum=g_dCvarsNumInList[iPlayer],sLine[10];
  145. new dSize=sLen;
  146. num_to_str ( dNum, sLine, charsmax(sLine) );
  147. TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
  148. parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63);
  149. if(sMiddle[0]=='!'){
  150. client_cmd(iPlayer,"%s %s",sCvar,sMax);
  151. console_cmd(iPlayer,"%s %s",sCvar,sMax);
  152. }else{
  153. client_cmd(iPlayer,"%s %s",sCvar,sMiddle);
  154. console_cmd(iPlayer,"%s %s",sCvar,sMiddle);
  155. }
  156. if(dNum==dSize-1){
  157. g_dCvarsNumInList[iPlayer]=0
  158. }
  159. else
  160. {
  161. g_dCvarsNumInList[iPlayer]++
  162. }
  163. }
  164.  
  165.  
  166. public check_cvars_48(iPlayer){
  167. new dSize=sLen;
  168. new sBuffer[64],sCvar[64],sLine[10];
  169. set_task(1.5,"checkeds",iPlayer);
  170. szChecks[iPlayer]=dSize;
  171. for(new i;i<dSize;i++){
  172. num_to_str ( i, sLine, charsmax(sLine) );
  173. TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
  174. parse(sBuffer,sCvar,63);
  175. query_client_cvar(iPlayer,sCvar,"cvar_results")
  176. }
  177. }
  178.  
  179. public cvar_results(iPlayer,const cvar[],const value[]){
  180. szChecks[iPlayer]--;
  181. new dSize=sLen,sLine[10];
  182. new sBanReason[64],sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64],Float:dMin,Float:dMid,Float:dMax,Float:dValue
  183. for(new i;i<dSize;i++){
  184. num_to_str ( i, sLine, charsmax(sLine) );
  185. TrieGetString(g_sCvars,sLine,sBuffer,charsmax(sBuffer));
  186. parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63)
  187. dMin=str_to_float(sMin);
  188. dMax=str_to_float(sMax);
  189. dMid=str_to_float(sMiddle[1]);
  190. if(equal(sCvar,cvar)){
  191. dValue=str_to_float(value)
  192. if(dValue<dMin||dValue>dMax || (sMiddle[0]=='!') && dMid==dValue){
  193. if(g_dPlayerStatus[iPlayer]==true){
  194. //ban cvars
  195. new iBanTime=get_pcvar_num(g_dCvarCvarsBanTime)
  196. console_print(iPlayer,"[Anti-Cheat] *************************************");
  197. console_print(iPlayer,"[Anti-Cheat] %s не доуступное значение: %s",cvar,value);
  198. console_print(iPlayer,"[Anti-Cheat] %s рекомендованное значение: %s",cvar,sMiddle);
  199. console_print(iPlayer,"[Anti-Cheat] *************************************");
  200. format(sBanReason,63,"%s %0.2f",cvar,dValue)
  201. ban(iPlayer,sBanReason,iBanTime)
  202. }
  203. }
  204. }
  205. }
  206. }
  207.  
  208. public checkeds(iPlayer){
  209. if(szChecks[iPlayer]!=0){
  210. new iBanTime=get_pcvar_num(g_dCvarCvarsBanTime)
  211. ban(iPlayer,"Не возможно проверить у вас квары, выключите блокер в ini файле защиты игры!",iBanTime)
  212. }
  213. }
  214.  
  215.  
  216. public plugin_end() {
  217. TrieDestroy(g_sCvars);
  218. }
  219.  
  220. public ban(iPlayer,sBanReason[],dBanTime){
  221. reset(iPlayer)
  222.  
  223. new iBanType=get_pcvar_num(g_dCvarBanType)
  224. new iLogsEnable=get_pcvar_num(g_dCvarLogs)
  225. new sIp[16],sAuthid[34],sName[33]
  226. get_user_ip(iPlayer,sIp,15,1)
  227. get_user_authid(iPlayer,sAuthid,33)
  228. get_user_name(iPlayer,sName,32)
  229. new dUserid=get_user_userid(iPlayer)
  230. switch(iBanType){
  231. case 0:server_cmd("kick #%d [Anti-Cheat] %s detected!",dUserid,sBanReason)
  232. case 1:server_cmd("addip %d %s;writeip",dBanTime,sIp)
  233. case 2:{
  234. if(containi(sAuthid,"STEAM_0:")!=-1){
  235. server_cmd("amx_ban #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
  236. }
  237. else
  238. {
  239. server_cmd("amx_banip #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
  240. }
  241. }
  242. case 3:server_cmd("amx_ban %d #%d ^"[Anti-Cheat] %s detected!^"",dBanTime,dUserid,sBanReason)
  243. case 4:server_cmd("amx_ban #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
  244. case 5:server_cmd("amx_superban #%d %d ^"[Anti-Cheat] %s detected!^"",dUserid,dBanTime,sBanReason)
  245. }
  246. ChatColor(iPlayer,"^1Игрок ^3[^4%s^3] ^1наказан ^3за ^1[^4%s^1]",sName,sBanReason);
  247. if(iLogsEnable){
  248. log_to_file("addons\amxmodx\logs\Anti_cvars.txt","<%s> <%s> <%s> <%s>",sBanReason,sName,sIp,sAuthid)
  249. }
  250.  
  251. set_hudmessage(255,0,0,-1.0,0.75,0,0.0,5.0,0.0,0.0,-1)
  252. show_hudmessage(0,"[Anti-Cheat] %s: %s detected!",sName,sBanReason)
  253. }
  254.  
  255.  
  256. /* Сток цветного чата */
  257. stock ChatColor(const id, const input[], any:...)
  258. {
  259. new count = 1, players[32]
  260. static msg[191]
  261. vformat(msg, 190, input, 3)
  262. replace_all(msg, 190, "!g", "^4") // Зелёный
  263. replace_all(msg, 190, "!y", "^1") // Стандартный
  264. replace_all(msg, 190, "!t", "^3") // Цвет команды
  265. if (id) players[0] = id; else get_players(players, count, "ch")
  266. {
  267. for (new i = 0; i < count; i++)
  268. {
  269. if (is_user_connected(players[i]))
  270. {
  271. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  272. write_byte(players[i]);
  273. write_string(msg);
  274. message_end();
  275. }
  276. }
  277. }
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement