Advertisement
Guest User

Dynamic Whitelist SAMP

a guest
Sep 25th, 2013
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.58 KB | None | 0 0
  1. //==============================================================================
  2. //Das Skript wurde von Music4You aka. Items4Landwirt geschrieben
  3. //Es ist verboten meinen Namen zu löschen, ebenfalls das erneute Hochladen ist verboten
  4. //In sofern wünsche ich viel Spaß mit dem Skript
  5. // Schaut doch mal auf meinem Youtube Kanal vorbei http://www.youtube.com/user/Music4You43
  6. //==============================================================================
  7.  
  8. //=============== Includes ===============
  9. #include <a_samp>
  10. #include <banfix>
  11.  
  12. //=============== MCMD ===============
  13. #define mcmd:%1(%2) forward mcmd_%1(%2); public mcmd_%1(%2)
  14. forward MCMD_OnPlayerCommandText(playerid,cmdtext[]);
  15.  
  16. //=============== News ===============
  17. new DB:Database,dbid;
  18.  
  19. //=============== Defines ===============
  20. #define rot 0xFF1400FF
  21. #define gruen 0x5FFF00FF
  22. #define SCM SendClientMessage
  23.  
  24. //=============== Enums ===============
  25. enum
  26. {
  27. DIALOG_CFG=1000,
  28. DIALOG_SHOW,
  29. DIALOG_ADD,
  30. DIALOG_DEL,
  31. DIALOG_RESET,
  32. }
  33.  
  34. public OnFilterScriptInit()
  35. {
  36. Database=db_open("list.db");
  37. db_query(Database,"CREATE TABLE IF NOT EXISTS `list` (`ID`, `Name`,`IP`)");
  38. print("\n=================================================");
  39. print(" Dynamic Whitelist by Music4You aka. Items4Landwirt");
  40. print("=================================================\n");
  41. return 1;
  42. }
  43.  
  44. public OnFilterScriptExit()
  45. {
  46. return 1;
  47. }
  48.  
  49. public OnPlayerConnect(playerid)
  50. {
  51. new DBResult:Result,str[75],query[256],rows,string[128];
  52. #pragma unused rows
  53. format(str,sizeof(str),"SELECT * FROM `list` WHERE `Name`='%s'",SpielerName(playerid));
  54. Result=db_query(Database,str);
  55. if(db_num_rows(Result)>0)
  56. {
  57. format(string,sizeof(string),"Spieler: %s hat sich eingeloggt",SpielerName(playerid));
  58. format(query,sizeof(query),"UPDATE `list` SET `IP`='%s' WHERE `Name`='%s'",SpielerIP(playerid),SpielerName(playerid));
  59. SendClientMessageToAll(gruen,string);
  60. db_query(Database,query);
  61. }
  62. else
  63. {
  64. SCM(playerid,rot,"Dein Name steht nicht auf der Whitelist, melde dich bei einem Admin!");
  65. Kick(playerid);
  66. }
  67. return 1;
  68. }
  69.  
  70. public OnPlayerCommandText(playerid, cmdtext[])
  71. {
  72. cmdtext[0] = '_';
  73. new blacmd[37]="mcmd_",s[91]=" ",i=1,j;
  74. for(;i!=32;i++)
  75. {
  76. switch(cmdtext[i])
  77. {
  78. case ' ','\0': break;
  79. default: blacmd[i+4] = tolower(cmdtext[i]);
  80. }
  81. }
  82. for(;i!=128;j++,i++)
  83. {
  84. switch(cmdtext[i])
  85. {
  86. case '\0': break;
  87. default: s[j]=cmdtext[i];
  88. }
  89. }
  90. if(CallLocalFunction(blacmd,"is",playerid,s)) return true;
  91. cmdtext[0] = '/';
  92. return CallLocalFunction("MCMD_OnPlayerCommandText","ds",playerid,cmdtext);
  93. }
  94. mcmd:whitelistcfg(playerid,params[])
  95. {
  96. if(!IsPlayerAdmin(playerid))return SCM(playerid,-1,"Du bist nicht befugt!");
  97. ShowPlayerDialog(playerid,DIALOG_CFG,DIALOG_STYLE_LIST,"Whitelist","Alle einträge anzeigen\nUser Hinzufügen\nUser löschen\nWhitelist Reset","Auswählen","Abbrechen");
  98. return 1;
  99. }
  100.  
  101. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  102. {
  103. new string1[128],str[128],str1[128],string[128],DBResult:Result,rows,i=1,query[256];
  104. switch(dialogid)
  105. {
  106. case DIALOG_CFG:
  107. {
  108. if(response)
  109. {
  110. switch(listitem)
  111. {
  112. case 0:
  113. {
  114. for(;i<MAX_PLAYERS;i++)
  115. {
  116. format(str,sizeof(str),"SELECT * FROM `list` WHERE `ID`='%i'",i);
  117. Result = db_query(Database,str);
  118. rows = db_num_rows(Result);
  119. if(rows == 0)continue;
  120.  
  121. db_get_field_assoc(Result,"Name",str,sizeof(str));
  122. format(string1,MAX_PLAYER_NAME,"%s",str);
  123.  
  124. format(string,sizeof(string),"%s%s\n",string,string1);
  125. }
  126. ShowPlayerDialog(playerid,DIALOG_SHOW,DIALOG_STYLE_LIST,"Whitelist",string,"Ok","");
  127. db_free_result(Result);
  128. }
  129. case 1:
  130. {
  131. ShowPlayerDialog(playerid,DIALOG_ADD,DIALOG_STYLE_INPUT,"Useradd","Gebe den Namen des Benutzers ein, welcher Hinzugefügt werden soll!","Auswählen","Abbrechen");
  132. }
  133. case 2:
  134. {
  135. ShowPlayerDialog(playerid,DIALOG_DEL,DIALOG_STYLE_INPUT,"Userdel","Gebe den Namen des Benutzers ein, welcher gelöscht werden soll!","Auswählen","Abbrechen");
  136. }
  137. case 3:
  138. {
  139. ShowPlayerDialog(playerid,DIALOG_RESET,DIALOG_STYLE_MSGBOX,"Whitelist Reset","Bist du dir sicher das du Die gesamte Whitelist Resetten möchtest?\nAlle benutzer werden Gelösch!","Akzeptieren","Abbrechen");
  140. }
  141. }
  142. }
  143. }
  144. case DIALOG_ADD:
  145. {
  146. if(response)
  147. {
  148. for(;i<MAX_PLAYERS;i++)
  149. {
  150. format(str,sizeof(str),"SELECT * FROM `list` WHERE `ID`='%i'",i);
  151. Result = db_query(Database,str);
  152. rows = db_num_rows(Result);
  153. if(rows == 0)continue;
  154.  
  155. db_get_field_assoc(Result,"ID",str,sizeof(str));
  156. dbid=strval(str);
  157. }
  158. format(str1,sizeof(str1),"SELECT * FROM `list` WHERE `Name`='%s'",inputtext);
  159. Result=db_query(Database,str1);
  160. if(db_num_rows(Result)>0)return SCM(playerid,rot,"Der Spieler ist bereits auf der Whitelist!");
  161.  
  162. format(query,sizeof(query),"INSERT INTO `list` (`ID`,`Name`,`IP`) VALUES ('%i','%s','0')",dbid+1,inputtext);
  163. format(string,sizeof(string),"Du hast %s auf die Whitelist gesetzt.",inputtext);
  164. db_query(Database,query);
  165. SCM(playerid,gruen,string);
  166. ShowPlayerDialog(playerid,DIALOG_CFG,DIALOG_STYLE_LIST,"Whitelist","Alle einträge anzeigen\nUser Hinzufügen\nUser löschen\nWhitelist Reset","Auswählen","Abbrechen");
  167. }
  168. }
  169. case DIALOG_DEL:
  170. {
  171. if(response)
  172. {
  173. format(str1,sizeof(str1),"SELECT * FROM `list` WHERE `Name`='%s'",inputtext);
  174. Result=db_query(Database,str1);
  175. if(db_num_rows(Result)>0)
  176. {
  177. format(query,sizeof(query),"DELETE FROM `list` WHERE `Name`='%s'",inputtext);
  178. format(string,sizeof(string),"Du hast %s von der Whitelist gelöscht!",inputtext);
  179. db_query(Database,query);
  180. SCM(playerid,rot,string);
  181. ShowPlayerDialog(playerid,DIALOG_CFG,DIALOG_STYLE_LIST,"Whitelist","Alle einträge anzeigen\nUser Hinzufügen\nUser löschen\nWhitelist Reset","Auswählen","Abbrechen");
  182. }
  183. else return SCM(playerid,rot,"Der Spieler ist nicht auf der Whitelist!");
  184. }
  185. }
  186. case DIALOG_RESET:
  187. {
  188. if(response)
  189. {
  190. format(query,sizeof(query),"DELETE FROM `list`");
  191. db_query(Database,query);
  192. SCM(playerid,rot,"Du hast die Whitelist resettet!");
  193. dbid=0;
  194. ShowPlayerDialog(playerid,DIALOG_CFG,DIALOG_STYLE_LIST,"Whitelist","Alle einträge anzeigen\nUser Hinzufügen\nUser löschen\nWhitelist Reset","Auswählen","Abbrechen");
  195. }
  196. }
  197. }
  198. return 1;
  199. }
  200.  
  201. stock SpielerName(playerid)
  202. {
  203. new name[MAX_PLAYER_NAME];
  204. GetPlayerName(playerid,name,sizeof(name));
  205. return name;
  206. }
  207. stock SpielerIP(playerid)
  208. {
  209. new getip[20];
  210. GetPlayerIp(playerid,getip,sizeof(getip));
  211. return getip;
  212. }
  213. stock sscanf(string[], format[], {Float,_}:...)
  214. {
  215. #if defined isnull
  216. if (isnull(string))
  217. #else
  218. if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  219. #endif
  220. {
  221. return format[0];
  222. }
  223. #pragma tabsize 4
  224. new
  225. formatPos = 0,
  226. stringPos = 0,
  227. paramPos = 2,
  228. paramCount = numargs(),
  229. delim = ' ';
  230. while (string[stringPos] && string[stringPos] <= ' ')
  231. {
  232. stringPos++;
  233. }
  234. while (paramPos < paramCount && string[stringPos])
  235. {
  236. switch (format[formatPos++])
  237. {
  238. case '\0':
  239. {
  240. return 0;
  241. }
  242. case 'i', 'd':
  243. {
  244. new
  245. neg = 1,
  246. num = 0,
  247. ch = string[stringPos];
  248. if (ch == '-')
  249. {
  250. neg = -1;
  251. ch = string[++stringPos];
  252. }
  253. do
  254. {
  255. stringPos++;
  256. if ('0' <= ch <= '9')
  257. {
  258. num = (num * 10) + (ch - '0');
  259. }
  260. else
  261. {
  262. return -1;
  263. }
  264. }
  265. while ((ch = string[stringPos]) > ' ' && ch != delim);
  266. setarg(paramPos, 0, num * neg);
  267. }
  268. case 'h', 'x':
  269. {
  270. new
  271. num = 0,
  272. ch = string[stringPos];
  273. do
  274. {
  275. stringPos++;
  276. switch (ch)
  277. {
  278. case 'x', 'X':
  279. {
  280. num = 0;
  281. continue;
  282. }
  283. case '0' .. '9':
  284. {
  285. num = (num << 4) | (ch - '0');
  286. }
  287. case 'a' .. 'f':
  288. {
  289. num = (num << 4) | (ch - ('a' - 10));
  290. }
  291. case 'A' .. 'F':
  292. {
  293. num = (num << 4) | (ch - ('A' - 10));
  294. }
  295. default:
  296. {
  297. return -1;
  298. }
  299. }
  300. }
  301. while ((ch = string[stringPos]) > ' ' && ch != delim);
  302. setarg(paramPos, 0, num);
  303. }
  304. case 'c':
  305. {
  306. setarg(paramPos, 0, string[stringPos++]);
  307. }
  308. case 'f':
  309. {
  310.  
  311. new changestr[16], changepos = 0, strpos = stringPos;
  312. while(changepos < 16 && string[strpos] && string[strpos] != delim)
  313. {
  314. changestr[changepos++] = string[strpos++];
  315. }
  316. changestr[changepos] = '\0';
  317. setarg(paramPos,0,_:floatstr(changestr));
  318. }
  319. case 'p':
  320. {
  321. delim = format[formatPos++];
  322. continue;
  323. }
  324. case '\'':
  325. {
  326. new
  327. end = formatPos - 1,
  328. ch;
  329. while ((ch = format[++end]) && ch != '\'') {}
  330. if (!ch)
  331. {
  332. return -1;
  333. }
  334. format[end] = '\0';
  335. if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  336. {
  337. if (format[end + 1])
  338. {
  339. return -1;
  340. }
  341. return 0;
  342. }
  343. format[end] = '\'';
  344. stringPos = ch + (end - formatPos);
  345. formatPos = end + 1;
  346. }
  347. case 'u':
  348. {
  349. new
  350. end = stringPos - 1,
  351. id = 0,
  352. bool:num = true,
  353. ch;
  354. while ((ch = string[++end]) && ch != delim)
  355. {
  356. if (num)
  357. {
  358. if ('0' <= ch <= '9')
  359. {
  360. id = (id * 10) + (ch - '0');
  361. }
  362. else
  363. {
  364. num = false;
  365. }
  366. }
  367. }
  368. if (num && IsPlayerConnected(id))
  369. {
  370. setarg(paramPos, 0, id);
  371. }
  372. else
  373. {
  374. #if !defined foreach
  375. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  376. #define __SSCANF_FOREACH__
  377. #endif
  378. string[end] = '\0';
  379. num = false;
  380. new
  381. name[MAX_PLAYER_NAME];
  382. id = end - stringPos;
  383. foreach (Player, playerid)
  384. {
  385. GetPlayerName(playerid, name, sizeof (name));
  386. if (!strcmp(name, string[stringPos], true, id))
  387. {
  388. setarg(paramPos, 0, playerid);
  389. num = true;
  390. break;
  391. }
  392. }
  393. if (!num)
  394. {
  395. setarg(paramPos, 0, INVALID_PLAYER_ID);
  396. }
  397. string[end] = ch;
  398. #if defined __SSCANF_FOREACH__
  399. #undef foreach
  400. #undef __SSCANF_FOREACH__
  401. #endif
  402. }
  403. stringPos = end;
  404. }
  405. case 's', 'z':
  406. {
  407. new
  408. i = 0,
  409. ch;
  410. if (format[formatPos])
  411. {
  412. while ((ch = string[stringPos++]) && ch != delim)
  413. {
  414. setarg(paramPos, i++, ch);
  415. }
  416. if (!i)
  417. {
  418. return -1;
  419. }
  420. }
  421. else
  422. {
  423. while ((ch = string[stringPos++]))
  424. {
  425. setarg(paramPos, i++, ch);
  426. }
  427. }
  428. stringPos--;
  429. setarg(paramPos, i, '\0');
  430. }
  431. default:
  432. {
  433. continue;
  434. }
  435. }
  436. while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  437. {
  438. stringPos++;
  439. }
  440. while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  441. {
  442. stringPos++;
  443. }
  444. paramPos++;
  445. }
  446. do
  447. {
  448. if ((delim = format[formatPos++]) > ' ')
  449. {
  450. if (delim == '\'')
  451. {
  452. while ((delim = format[formatPos++]) && delim != '\'') {}
  453. }
  454. else if (delim != 'z')
  455. {
  456. return delim;
  457. }
  458. }
  459. }
  460. while (delim > ' ');
  461. return 0;
  462. }
  463.  
  464. #if defined _ALS_OnPlayerCommandText
  465. #undef OnPlayerCommandText
  466. #else
  467. #define _ALS_OnPlayerCommandText
  468. #endif
  469. #define OnPlayerCommandText MCMD_OnPlayerCommandText
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement