Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. /*
  2. Filter include 1.4
  3. Made by: Haruka
  4.  
  5. Usage:
  6. Load_Filter(const path_name[])
  7. ^ Load a filter into our list
  8.  
  9. filter(const bad_word[], censored_output[], const delimeter_checks[] = " ", const delimteter_censor_str[] = "*", just_check = 1)
  10. ^ Check string and replace it into your variable
  11.  
  12. IsTextContainsBad(const filter_content[], const parameter_content[])
  13. ^ Check if text contains bad (return false if not bad, true if string is contain bad word)
  14.  
  15. Example:
  16. public OnGameModeInt()
  17. {
  18. Load_Filter("/core/bad_word/list.txt");
  19. return 1;
  20. }
  21.  
  22. public OnPlayerConnect(playerid)
  23. {
  24. if(IsTextContainsBad(playername))
  25. return Kick(playerid);
  26.  
  27. return 1;
  28. }
  29.  
  30. public OnPlayerText(playerid, text[])
  31. {
  32. filter(text, safetext);
  33. SendClientMessage(playerid, -1, "%s says: %s", GetName(playerid), safetext);
  34. return 0;
  35. }
  36.  
  37. Note:
  38. This include may be slowest, because i don't know #emit stuff, you can translate this to #emit
  39. or amx thing like Slice did.
  40.  
  41. And also this include still didn't tested yet, but i guaranted filter function works 100% legit
  42. With no false detection (also weak on number).
  43.  
  44. And make sure your list are ALL UPPERCASE OTHERWISE IT WILL BROKK I GUESS?
  45.  
  46. */
  47.  
  48. #include <a_samp>
  49. #tryinclude <strlib>
  50.  
  51. #if !defined STRLIB_INC
  52. #error The strlib library is required, get it here: github.com/oscar-broman/strlib
  53. #endif
  54.  
  55. #if !defined MAX_BAD_WORDS
  56. #define MAX_BAD_WORDS (255)
  57. #endif
  58.  
  59. #if defined MAX_WORDS
  60. #undef MAX_WORDS
  61. #define MAX_WORDS (32)
  62. #else
  63. #define MAX_WORDS (32)
  64. #endif
  65.  
  66. // native filter(const bad_word[], censored_output[], const delimeter_checks[] = " ", const delimteter_censor_str[] = "*", just_check = 1)
  67.  
  68. new gArrPenyaring[MAX_BAD_WORDS][128];
  69.  
  70. forward Load_Filter(const path_name[]);
  71. public Load_Filter(const path_name[])
  72. {
  73. new
  74. loadx = 0,
  75. strBuilder[128],
  76. File:load_scripts = fopen(path_name, io_read);
  77.  
  78. if (!load_scripts) {
  79. print("[FILTER.INC]: path not found, please put your path to scriptfiles/your_path");
  80. return 0;
  81. }
  82.  
  83. while(fread(load_scripts, strBuilder))
  84. {
  85. if (!str_containSpecialChar(strBuilder)) {
  86. format(gArrPenyaring[loadx], sizeof(gArrPenyaring), strBuilder);
  87. loadx++;
  88. }
  89. }
  90. fclose(load_scripts);
  91. printf("[FILTER.INC]: Successfully load %d word filter into databases.", loadx);
  92. return 1;
  93. }
  94.  
  95. stock bool:IsTextContainsBad(const filter_content[], const parameter_content[])
  96. {
  97. new gXChecker[1];
  98. if (!filter(filter_content, gXChecker, parameter_content, " ", 1))
  99. return false;
  100.  
  101. return true;
  102. }
  103.  
  104. stock filter(const bad_word[], censored_output[], const delimeter_checks[] = " ", const delimteter_censor_str[] = "*", just_check = 0)
  105. {
  106. new
  107. cell_count = 0,
  108. same_check = 0,
  109. xlen = 0;
  110.  
  111. new
  112. str_same[24],
  113. seperator[10][64],
  114. lllxoop[64];
  115.  
  116. if (sizeof(gArrPenyaring) < 1) {
  117. print("[FILTER.INC]: Put Load_Filter into OnGameModeInit or OnFilterScriptInit !");
  118. return 0;
  119. }
  120.  
  121. strexplode(seperator, bad_word, delimeter_checks);
  122.  
  123. if (bad_word[0] == 0 || strlen(bad_word) > 128)
  124. return 0;
  125.  
  126. for (new i = 0; i < sizeof(seperator); i ++)
  127. {
  128. str_upper(seperator[i], strlen(seperator[i]));
  129. for (new k = 0; k < strlen(seperator[i]); k ++)
  130. {
  131. xlen = k + 1;
  132. if (seperator[i][k] == seperator[i][xlen]) {
  133. str_same[k] = seperator[i][xlen];
  134. xlen = k;
  135. break;
  136. }
  137. }
  138. same_check = strcount(seperator[i], str_same[xlen], .ignorecase = true, .count_overlapped = true);
  139. strdel(seperator[i], xlen, same_check);
  140.  
  141. if (strfind(seperator[i], str_same[xlen], true, xlen+1) != -1)
  142. strdel(seperator[i], xlen+1, same_check+3);
  143.  
  144. break;
  145. }
  146. for (new m = 0; m < sizeof(seperator); m ++) {
  147. if (m < sizeof(seperator)) {
  148. for (new j = 0; j < sizeof(gArrPenyaring); j ++) {
  149. if (strfind(gArrPenyaring[j], seperator[m], true) != -1) {
  150. cell_count++;
  151. }
  152. }
  153. }
  154. }
  155. if (!cell_count) {
  156. return 0;
  157. }
  158.  
  159. if (!just_check)
  160. strins(censored_output, delimteter_censor_str, 0, sizeof(bad_word));
  161.  
  162. return 1;
  163. }
  164.  
  165. stock str_upper(str[], dest)
  166. {
  167. while(dest--)
  168. str[dest] = toupper(str[dest]);
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement