Guest User

AdminSystem.

a guest
Aug 12th, 2012
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.27 KB | None | 0 0
  1. //--------------------------------------------------------------------------------|
  2. #include <a_samp>
  3. #pragma unused ret_memcpy
  4. #define FILTERSCRIPT
  5. #define COLOR_GREY 0xAFAFAFAA
  6. #define COLOR_GREEN 0x33AA33AA
  7. #define COLOR_RED 0xFB0000FF
  8. #define COLOR_YELLOW 0xFFFF00AA
  9. #define COLOR_WHITE 0xFFFFFFAA
  10. #define COLOR_BLUE 0x0000FFAA
  11. #define COLOR_BROWN 0x993300AA
  12. #define COLOR_ORANGE 0xFF9933AA
  13. //--------------------------------------------------------------------------------|
  14. #define MAX_PING 700 // Change "700" to whatever you want.
  15. //--------------------------------------------------------------------------------|
  16. #include <dutils>
  17. #include <float>
  18. #include <dudb>
  19. #include <Dini>
  20. #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  21. new Jailed[MAX_PLAYERS];
  22. //--------------------------------------------------------------------------------|
  23.  
  24. public OnFilterScriptInit()
  25. {
  26. return 1;
  27. }
  28.  
  29. //--------------------------------------------------------------------------------|
  30.  
  31. public OnPlayerConnect(playerid)
  32. {
  33. Jailed[playerid] = 0;
  34. return 1;
  35. }
  36.  
  37. public OnPlayerDisconnect(playerid, reason)
  38. {
  39. return 1;
  40. }
  41.  
  42. //--------------------------------------------------------------------------------|
  43.  
  44. public OnPlayerUpdate(playerid)
  45. {
  46. new string[128];
  47. new PlayerName[32];
  48. GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
  49. if(GetPlayerPing(playerid) >= MAX_PING)
  50. {
  51. format(string, sizeof(string), "|| %s autómatikusan kirúgva a szerverről: (Magas Ping). Max: %d ||", PlayerName, MAX_PING);
  52. SendClientMessageToAll(COLOR_RED, string);
  53. Kick(playerid);
  54. }
  55. return 1;
  56. }
  57.  
  58. public OnPlayerCommandText(playerid, cmdtext[])
  59. {
  60. if(Jailed[playerid] == 1)
  61. {
  62. return 1;
  63. }
  64. dcmd(kick, 4, cmdtext);
  65. dcmd(ban, 3, cmdtext);
  66. dcmd(freeze, 6, cmdtext);
  67. dcmd(unfreeze, 8, cmdtext);
  68. dcmd(say, 3, cmdtext);
  69. dcmd(slap, 4, cmdtext);
  70. dcmd(heal, 4, cmdtext);
  71. dcmd(akill, 5, cmdtext);
  72. dcmd(jail, 4, cmdtext);
  73. dcmd(unjail, 6, cmdtext);
  74. dcmd(minigun, 7, cmdtext);
  75. dcmd(god, 3, cmdtext);
  76. return 0;
  77. }
  78.  
  79. dcmd_kick(playerid,params[])
  80. {
  81. if(IsPlayerAdmin(playerid))
  82. {
  83. new tmp[256], idx;
  84. tmp = strtok(params,idx);
  85. if(!strlen(tmp))
  86. {
  87. SendClientMessage(playerid,COLOR_RED,"HIBA: /kick [playerid] [indok]");
  88. return true;
  89. }
  90. new pid = strval(tmp);
  91. if(!IsPlayerConnected(pid))
  92. {
  93. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  94. return true;
  95. }
  96. tmp = strrest(params,idx);
  97. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  98. GetPlayerName(pid, pname, sizeof(pname));
  99. GetPlayerName(playerid, pname2, sizeof(pname2));
  100. format(string, sizeof(string), "|| Adminisztrátor %s kirúgta %s-t. Indok: %s ||", pname2, pname, tmp);
  101. SendClientMessageToAll(COLOR_ORANGE, string);
  102. Kick(pid);
  103. return true;
  104. }
  105. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  106. }
  107.  
  108. dcmd_ban(playerid,params[])
  109. {
  110. if(IsPlayerAdmin(playerid))
  111. {
  112. new tmp[256], idx;
  113. tmp = strtok(params,idx);
  114. if(!strlen(tmp))
  115. {
  116. SendClientMessage(playerid,COLOR_RED,"HIBA: /ban [playerid] [indok]");
  117. return true;
  118. }
  119. new pid = strval(tmp);
  120. if(!IsPlayerConnected(pid))
  121. {
  122. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  123. return true;
  124. }
  125. tmp = strrest(params,idx);
  126. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  127. GetPlayerName(pid, pname, sizeof(pname));
  128. GetPlayerName(playerid, pname2, sizeof(pname2));
  129. format(string, sizeof(string), "|| Adminisztrátor %s bannolta %s-t. Indok: %s ||", pname2, pname, tmp);
  130. SendClientMessageToAll(COLOR_ORANGE, string);
  131. Ban(pid);
  132. return true;
  133. }
  134. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  135. }
  136.  
  137. dcmd_freeze(playerid,params[])
  138. {
  139. if(IsPlayerAdmin(playerid))
  140. {
  141. new tmp[256], idx;
  142. tmp = strtok(params,idx);
  143. if(!strlen(tmp))
  144. {
  145. SendClientMessage(playerid,COLOR_RED,"HIBA: /freeze [playerid] [indok]");
  146. return true;
  147. }
  148. new pid = strval(tmp);
  149. if(!IsPlayerConnected(pid))
  150. {
  151. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  152. return true;
  153. }
  154. tmp = strrest(params,idx);
  155. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  156. GetPlayerName(pid, pname, sizeof(pname));
  157. GetPlayerName(playerid, pname2, sizeof(pname2));
  158. format(string, sizeof(string), "|| Adminisztrátor %s lefagyasztotta %s-t. Indok: %s ||", pname2, pname, tmp);
  159. SendClientMessageToAll(COLOR_ORANGE, string);
  160. TogglePlayerControllable(pid, false);
  161. return true;
  162. }
  163. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  164. }
  165.  
  166. dcmd_unfreeze(playerid,params[])
  167. {
  168. if(IsPlayerAdmin(playerid))
  169. {
  170. new tmp[256], idx;
  171. tmp = strtok(params,idx);
  172. if(!strlen(tmp))
  173. {
  174. SendClientMessage(playerid,COLOR_RED,"HIBA: /unfreeze [playerid] [indok]");
  175. return true;
  176. }
  177. new pid = strval(tmp);
  178. if(!IsPlayerConnected(pid))
  179. {
  180. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  181. return true;
  182. }
  183. tmp = strrest(params,idx);
  184. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  185. GetPlayerName(pid, pname, sizeof(pname));
  186. GetPlayerName(playerid, pname2, sizeof(pname2));
  187. format(string, sizeof(string), "|| Adminisztrátor %s kifagyasztotta %s-t. Indok: %s ||", pname2, pname, tmp);
  188. SendClientMessageToAll(COLOR_ORANGE, string);
  189. TogglePlayerControllable(pid, true);
  190. return true;
  191. }
  192. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  193. }
  194.  
  195. dcmd_say(playerid, params[])
  196. {
  197. new message[128], string[128], name[MAX_PLAYER_NAME];
  198. if (sscanf(params, "s", message)) SendClientMessage(playerid,COLOR_RED,"HIBA: /say [üzenet]");
  199. else
  200. {
  201. if(IsPlayerAdmin(playerid))
  202. {
  203. GetPlayerName(playerid, name, sizeof(name));
  204. format(string, sizeof(string), "|| Adminisztrátor %s: %s ||", name, message); // You will probably want to re-format this.
  205. SendClientMessageToAll(COLOR_ORANGE, string);
  206. }
  207. else
  208. {
  209. SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  210. }
  211. }
  212. return 1;
  213. }
  214. dcmd_slap(playerid,params[])
  215. {
  216. if(IsPlayerAdmin(playerid))
  217. {
  218. new tmp[256], idx;
  219. tmp = strtok(params,idx);
  220. if(!strlen(tmp))
  221. {
  222. SendClientMessage(playerid,COLOR_RED,"HIBA: /slap [playerid] [indok]");
  223. return true;
  224. }
  225. new pid = strval(tmp);
  226. if(!IsPlayerConnected(pid))
  227. {
  228. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  229. return true;
  230. }
  231. new Float:pX,Float:pY,Float:pZ;
  232. tmp = strrest(params,idx);
  233. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  234. GetPlayerName(pid, pname, sizeof(pname));
  235. GetPlayerName(playerid, pname2, sizeof(pname2));
  236. format(string, sizeof(string), "|| Adminisztrátor %s megsebesítette %s-t. Indok: %s ||", pname2, pname, tmp);
  237. SendClientMessageToAll(COLOR_ORANGE, string);
  238. GetPlayerPos(pid,pX,pY,pZ);
  239. SetPlayerPos(pid,pX,pY,pZ+5);
  240. return true;
  241. }
  242. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  243. }
  244.  
  245. dcmd_heal(playerid,params[])
  246. {
  247. if(IsPlayerAdmin(playerid))
  248. {
  249. new tmp[256], idx;
  250. tmp = strtok(params,idx);
  251. if(!strlen(tmp))
  252. {
  253. SendClientMessage(playerid,COLOR_RED,"HIBA: /heal [playerid]");
  254. return true;
  255. }
  256. new pid = strval(tmp);
  257. if(!IsPlayerConnected(pid))
  258. {
  259. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  260. return true;
  261. }
  262. tmp = strrest(params,idx);
  263. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  264. GetPlayerName(pid, pname, sizeof(pname));
  265. GetPlayerName(playerid, pname2, sizeof(pname2));
  266. format(string, sizeof(string), "|| Adminisztrátor %s feltöltötte az életét %s-nek. ||", pname2, pname);
  267. SendClientMessageToAll(COLOR_ORANGE, string);
  268. SetPlayerHealth(pid, 100);
  269. return true;
  270. }
  271. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  272. }
  273.  
  274. dcmd_akill(playerid,params[])
  275. {
  276. if(IsPlayerAdmin(playerid))
  277. {
  278. new tmp[256], idx;
  279. tmp = strtok(params,idx);
  280. if(!strlen(tmp))
  281. {
  282. SendClientMessage(playerid,COLOR_RED,"HIBA: /akill [playerid]");
  283. return true;
  284. }
  285. new pid = strval(tmp);
  286. if(!IsPlayerConnected(pid))
  287. {
  288. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  289. return true;
  290. }
  291. tmp = strrest(params,idx);
  292. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  293. GetPlayerName(pid, pname, sizeof(pname));
  294. GetPlayerName(playerid, pname2, sizeof(pname2));
  295. format(string, sizeof(string), "|| Adminisztrátor %s megölte %s-t. ||", pname2, pname);
  296. SendClientMessageToAll(COLOR_ORANGE, string);
  297. SetPlayerHealth(pid, 0);
  298. return true;
  299. }
  300. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  301. }
  302.  
  303. dcmd_jail(playerid,params[])
  304. {
  305. if(IsPlayerAdmin(playerid))
  306. {
  307. new tmp[256], idx;
  308. tmp = strtok(params,idx);
  309. if(!strlen(tmp))
  310. {
  311. SendClientMessage(playerid,COLOR_RED,"HIBA: /jail [playerid] [indok]");
  312. return true;
  313. }
  314. new pid = strval(tmp);
  315. if(!IsPlayerConnected(pid))
  316. {
  317. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  318. return true;
  319. }
  320. tmp = strrest(params,idx);
  321. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  322. GetPlayerName(pid, pname, sizeof(pname));
  323. GetPlayerName(playerid, pname2, sizeof(pname2));
  324. format(string, sizeof(string), "|| Adminisztrátor %s bebörtönözte %s-t. Indok: %s ||", pname2, pname, tmp);
  325. SendClientMessageToAll(COLOR_ORANGE, string);
  326. SetPlayerInterior(pid, 6);
  327. SetPlayerVirtualWorld(playerid, 1);
  328. SetPlayerPos(pid,947.3790,2501.9927,14.8659);
  329. ResetPlayerWeapons(pid);
  330. Jailed[playerid] = 1;
  331. return true;
  332. }
  333. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  334. }
  335.  
  336. dcmd_unjail(playerid,params[])
  337. {
  338. if(IsPlayerAdmin(playerid))
  339. {
  340. new tmp[256], idx;
  341. tmp = strtok(params,idx);
  342. if(!strlen(tmp))
  343. {
  344. SendClientMessage(playerid,COLOR_RED,"HIBA: /unjail [playerid]");
  345. return true;
  346. }
  347. new pid = strval(tmp);
  348. if(!IsPlayerConnected(pid))
  349. {
  350. SendClientMessage(playerid,COLOR_RED,"HIBA: Helytelen Játékos ID.");
  351. return true;
  352. }
  353. tmp = strrest(params,idx);
  354. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  355. GetPlayerName(pid, pname, sizeof(pname));
  356. GetPlayerName(playerid, pname2, sizeof(pname2));
  357. format(string, sizeof(string), "|| Adminisztrátor %s elengedte %s-t. ||", pname2, pname);
  358. SendClientMessageToAll(COLOR_RED, string);
  359. Jailed[playerid] = 0;
  360. SetPlayerHealth(pid,0);
  361. SetPlayerPos(pid,1934.8292,1329.2439,9.2501);
  362. SetPlayerInterior(playerid, 0);
  363. SetPlayerVirtualWorld(playerid, 0);
  364. return true;
  365. }
  366. else return SendClientMessage(playerid, COLOR_RED, "HIBA: Te nem vagy admin.");
  367. }
  368.  
  369. dcmd_minigun(playerid,params[])
  370. {
  371. if(IsPlayerAdmin(playerid))
  372. {
  373. new tmp[256], idx;
  374. tmp = strtok(params,idx);
  375. if(!strlen(tmp))
  376. {
  377. SendClientMessage(playerid,COLOR_GREY,"|| Usage: /minigun (playerid) ||");
  378. SendClientMessage(playerid,COLOR_GREY,"|| Function: Gives the player a minigun ||");
  379. return true;
  380. }
  381. new pid = strval(tmp);
  382. if(!IsPlayerConnected(pid))
  383. {
  384. SendClientMessage(playerid,COLOR_GREY,"[!] Incorrect ID.");
  385. return true;
  386. }
  387. tmp = strrest(params,idx);
  388. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  389. GetPlayerName(pid, pname, sizeof(pname));
  390. GetPlayerName(playerid, pname2, sizeof(pname2));
  391. format(string, sizeof(string), "|| Administrator %s gave %s a minigun. ||", pname2, pname);
  392. SendClientMessageToAll(COLOR_GREY, string);
  393. GivePlayerWeapon(pid, 38, 10000000);
  394. return true;
  395. }
  396. else return SendClientMessage(playerid, COLOR_RED, "[!] You are not logged into RCON.");
  397. }
  398.  
  399. dcmd_god(playerid,params[])
  400. {
  401. if(IsPlayerAdmin(playerid))
  402. {
  403. new tmp[256], idx;
  404. tmp = strtok(params,idx);
  405. if(!strlen(tmp))
  406. {
  407. SendClientMessage(playerid,COLOR_GREY,"|| Usage: /god (playerid) ||");
  408. SendClientMessage(playerid,COLOR_GREY,"|| Function: Makes the given player god ||");
  409. return true;
  410. }
  411. new pid = strval(tmp);
  412. if(!IsPlayerConnected(pid))
  413. {
  414. SendClientMessage(playerid,COLOR_GREY,"[!] Incorrect ID.");
  415. return true;
  416. }
  417. tmp = strrest(params,idx);
  418. new pname[MAX_PLAYER_NAME], pname2[MAX_PLAYER_NAME], string[256];
  419. GetPlayerName(pid, pname, sizeof(pname));
  420. GetPlayerName(playerid, pname2, sizeof(pname2));
  421. format(string, sizeof(string), "|| %s is now GODLIKE thanks to Adminstrator %s ||", pname, pname2);
  422. SendClientMessageToAll(COLOR_GREEN, string);
  423. GivePlayerWeapon(pid, 38, 10000000);
  424. GivePlayerWeapon(pid, 18, 10000000);
  425. GivePlayerWeapon(pid, 16, 10000000);
  426. SetPlayerHealth(pid,9999999999);
  427. SetPlayerSkin(pid,294);
  428. return true;
  429. }
  430. else return SendClientMessage(playerid, COLOR_RED, "[!] You are not logged into RCON.");
  431. }
  432.  
  433.  
  434.  
  435. stock strrest(const string[], index)
  436. {
  437. new length = strlen(string),offset = index,result[256];
  438. while ((index < length) && ((index - offset) < (sizeof(result) - 1)) && (string[index] > '\r'))
  439. {
  440. result[index - offset] = string[index];
  441. index++;
  442. }
  443. result[index - offset] = EOS;
  444. return result;
  445. }
  446.  
  447. /*----------------------------------------------------------------------------*-
  448. Function:
  449. sscanf
  450. Params:
  451. string[] - String to extract parameters from.
  452. format[] - Parameter types to get.
  453. {Float,_}:... - Data return variables.
  454. Return:
  455. 0 - Successful, not 0 - fail.
  456. Notes:
  457. A fail is either insufficient variables to store the data or insufficient
  458. data for the format string - excess data is disgarded.
  459.  
  460. A string in the middle of the input data is extracted as a single word, a
  461. string at the end of the data collects all remaining text.
  462.  
  463. The format codes are:
  464.  
  465. c - A character.
  466. d, i - An integer.
  467. h, x - A hex number (e.g. a colour).
  468. f - A float.
  469. s - A string.
  470. z - An optional string.
  471. pX - An additional delimiter where X is another character.
  472. '' - Encloses a litteral string to locate.
  473. u - User, takes a name, part of a name or an id and returns the id if they're connected.
  474.  
  475. Now has IsNumeric integrated into the code.
  476.  
  477. Added additional delimiters in the form of all whitespace and an
  478. optioanlly specified one in the format string.
  479. -*----------------------------------------------------------------------------*/
  480.  
  481. stock sscanf(string[], format[], {Float,_}:...)
  482. {
  483. #if defined isnull
  484. if (isnull(string))
  485. #else
  486. if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  487. #endif
  488. {
  489. return format[0];
  490. }
  491. #pragma tabsize 4
  492. new
  493. formatPos = 0,
  494. stringPos = 0,
  495. paramPos = 2,
  496. paramCount = numargs(),
  497. delim = ' ';
  498. while (string[stringPos] && string[stringPos] <= ' ')
  499. {
  500. stringPos++;
  501. }
  502. while (paramPos < paramCount && string[stringPos])
  503. {
  504. switch (format[formatPos++])
  505. {
  506. case '\0':
  507. {
  508. return 0;
  509. }
  510. case 'i', 'd':
  511. {
  512. new
  513. neg = 1,
  514. num = 0,
  515. ch = string[stringPos];
  516. if (ch == '-')
  517. {
  518. neg = -1;
  519. ch = string[++stringPos];
  520. }
  521. do
  522. {
  523. stringPos++;
  524. if ('0' <= ch <= '9')
  525. {
  526. num = (num * 10) + (ch - '0');
  527. }
  528. else
  529. {
  530. return -1;
  531. }
  532. }
  533. while ((ch = string[stringPos]) > ' ' && ch != delim);
  534. setarg(paramPos, 0, num * neg);
  535. }
  536. case 'h', 'x':
  537. {
  538. new
  539. num = 0,
  540. ch = string[stringPos];
  541. do
  542. {
  543. stringPos++;
  544. switch (ch)
  545. {
  546. case 'x', 'X':
  547. {
  548. num = 0;
  549. continue;
  550. }
  551. case '0' .. '9':
  552. {
  553. num = (num << 4) | (ch - '0');
  554. }
  555. case 'a' .. 'f':
  556. {
  557. num = (num << 4) | (ch - ('a' - 10));
  558. }
  559. case 'A' .. 'F':
  560. {
  561. num = (num << 4) | (ch - ('A' - 10));
  562. }
  563. default:
  564. {
  565. return -1;
  566. }
  567. }
  568. }
  569. while ((ch = string[stringPos]) > ' ' && ch != delim);
  570. setarg(paramPos, 0, num);
  571. }
  572. case 'c':
  573. {
  574. setarg(paramPos, 0, string[stringPos++]);
  575. }
  576. case 'f':
  577. {
  578. setarg(paramPos, 0, _:floatstr(string[stringPos]));
  579. }
  580. case 'p':
  581. {
  582. delim = format[formatPos++];
  583. continue;
  584. }
  585. case '\'':
  586. {
  587. new
  588. end = formatPos - 1,
  589. ch;
  590. while ((ch = format[++end]) && ch != '\'') {}
  591. if (!ch)
  592. {
  593. return -1;
  594. }
  595. format[end] = '\0';
  596. if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  597. {
  598. if (format[end + 1])
  599. {
  600. return -1;
  601. }
  602. return 0;
  603. }
  604. format[end] = '\'';
  605. stringPos = ch + (end - formatPos);
  606. formatPos = end + 1;
  607. }
  608. case 'u':
  609. {
  610. new
  611. end = stringPos - 1,
  612. id = 0,
  613. bool:num = true,
  614. ch;
  615. while ((ch = string[++end]) && ch != delim)
  616. {
  617. if (num)
  618. {
  619. if ('0' <= ch <= '9')
  620. {
  621. id = (id * 10) + (ch - '0');
  622. }
  623. else
  624. {
  625. num = false;
  626. }
  627. }
  628. }
  629. if (num && IsPlayerConnected(id))
  630. {
  631. setarg(paramPos, 0, id);
  632. }
  633. else
  634. {
  635. #if !defined foreach
  636. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  637. #define __SSCANF_FOREACH__
  638. #endif
  639. string[end] = '\0';
  640. num = false;
  641. new
  642. name[MAX_PLAYER_NAME];
  643. id = end - stringPos;
  644. foreach (Player, playerid)
  645. {
  646. GetPlayerName(playerid, name, sizeof (name));
  647. if (!strcmp(name, string[stringPos], true, id))
  648. {
  649. setarg(paramPos, 0, playerid);
  650. num = true;
  651. break;
  652. }
  653. }
  654. if (!num)
  655. {
  656. setarg(paramPos, 0, INVALID_PLAYER_ID);
  657. }
  658. string[end] = ch;
  659. #if defined __SSCANF_FOREACH__
  660. #undef foreach
  661. #undef __SSCANF_FOREACH__
  662. #endif
  663. }
  664. stringPos = end;
  665. }
  666. case 's', 'z':
  667. {
  668. new
  669. i = 0,
  670. ch;
  671. if (format[formatPos])
  672. {
  673. while ((ch = string[stringPos++]) && ch != delim)
  674. {
  675. setarg(paramPos, i++, ch);
  676. }
  677. if (!i)
  678. {
  679. return -1;
  680. }
  681. }
  682. else
  683. {
  684. while ((ch = string[stringPos++]))
  685. {
  686. setarg(paramPos, i++, ch);
  687. }
  688. }
  689. stringPos--;
  690. setarg(paramPos, i, '\0');
  691. }
  692. default:
  693. {
  694. continue;
  695. }
  696. }
  697. while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  698. {
  699. stringPos++;
  700. }
  701. while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  702. {
  703. stringPos++;
  704. }
  705. paramPos++;
  706. }
  707. do
  708. {
  709. if ((delim = format[formatPos++]) > ' ')
  710. {
  711. if (delim == '\'')
  712. {
  713. while ((delim = format[formatPos++]) && delim != '\'') {}
  714. }
  715. else if (delim != 'z')
  716. {
  717. return delim;
  718. }
  719. }
  720. }
  721. while (delim > ' ');
  722. return 0;
  723. }
Advertisement
Add Comment
Please, Sign In to add comment