Advertisement
Guest User

Untitled

a guest
Oct 7th, 2011
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.89 KB | None | 0 0
  1. /* Miniselfmade | Teamdeathmatch*/ /*
  2.  
  3. Gemacht ist:
  4. - MessageOfTheDay (/setnews) || Kann noch jeder User benutzen!
  5. - Login und Register System || Nicht alle Systeme Online!
  6. - OnPlayerRequestClass
  7.  
  8. ----------------------------------------------------------------------------------------------------------------------
  9.  
  10. ToDO:
  11. - Spieler nach Login Spawnen
  12. - 4Fraktionen (LVPD,ItalienMafia,RussischeMafia,MS13,TheAmis) || Standard ist er Zivilist ||
  13. - 3DLabel über Spieler in welcher Frak er ist.
  14. - Fraktion Aussuchbar (/teamchange) || Per Dialog - LVPD,ItalienMafia,RussischeMafia,MS13,TheAmis -
  15. - SpawnWaffen für die Fraktionen
  16. - WaffenMarkt
  17. - ReportSystem
  18.  
  19. ----------------------------------------------------------------------------------------------------------------------
  20. Bekannte Buggys:
  21. - Spawn Dialog (News) Steht "Eingeloggt..."
  22. ----------------------------------------------------------------------------------------------------------------------
  23.  
  24.  
  25. */
  26. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  27. /* Includes */
  28. #include <a_samp>
  29. #include <Dini>
  30. #pragma tabsize 0
  31.  
  32. #define grau 0xBFC0C2FF
  33. #define weiß 0xFFFFFFFF
  34. #define blau 0x0000CDFF
  35. #define rot 0xB50000FF
  36. #define orange 0xFF8500FF
  37. #define pink 0xFF00B5FF
  38.  
  39. #define DIALOG_LOGIN 1
  40. #define DIALOG_REG 2
  41. #define DIALOG_DYNNEWS 3
  42. #define TEAMCHANGE 4
  43.  
  44. enum pInfo
  45. {
  46. skin,
  47. eingeloggt,
  48. Admin,
  49. Premium,
  50. Geld,
  51. Score
  52. }
  53.  
  54. new Spieler[MAX_PLAYERS][pInfo];
  55. new newstext24;
  56. new string32[256];
  57. new newsanzeige[MAX_PLAYERS];
  58. new Text3D:wanted3d[MAX_PLAYERS];
  59.  
  60. forward Allgemein(playerid);
  61.  
  62. main()
  63. {
  64. print("\n----------------------------------");
  65. print(" Miniselfmade by Jones");
  66. print("----------------------------------\n");
  67. }
  68.  
  69. public OnGameModeInit()
  70. {
  71. SetGameModeText("Team - Deathmatch");
  72. /* Cars */
  73. AddStaticVehicle(560,2143.0220,926.1692,10.4509,180.4443,0,0); // Car1
  74. AddStaticVehicle(462,2002.0603,1081.6396,10.4128,91.1565,1,1); // Car2
  75. AddStaticVehicle(462,2002.1115,1080.5248,10.4158,88.8981,1,1); // Car3
  76. AddStaticVehicle(462,2002.0604,1079.2461,10.4190,93.5108,1,1); // Car4
  77. AddStaticVehicle(462,2002.0939,1077.6826,10.4127,94.3703,1,1); // Car5
  78. AddStaticVehicle(462,2002.0740,1076.2335,10.4203,92.4869,1,1); // Car6
  79. AddStaticVehicle(462,2002.0638,1074.9719,10.4199,91.0105,1,1); // Car7
  80. AddStaticVehicle(462,2002.1525,1073.6180,10.4201,92.0846,1,1); // Car8
  81. AddStaticVehicle(462,2002.1644,1072.1401,10.4202,92.3538,1,1); // Car9
  82. /* 3DLabel */
  83. Create3DTextLabel("Du willst dein Teamchangen?\nOder du willst einem Team Beitreten?\n\nEinfach /Teamchange eingeben um es zu Wechseln oder rein zu kommen!",weiß,2023.4618,1101.5831,10.8203,8.0,0,0);
  84. Create3DTextLabel("Du willst die Server News nicht mehr sehen?\n\nEinfach /nonews eingeben.",weiß,2013.5790,1101.0854,10.8203,8.0,0,0);
  85. Create3DTextLabel("Du willst doch die Server NEws wieder sehen?\n\nEinfach /shownews eingeben.",weiß,2024.6320,1108.1024,10.8130,8.0,0,0);
  86. return 1;
  87. }
  88.  
  89. public OnGameModeExit()
  90. {
  91. return 1;
  92. }
  93.  
  94. public OnPlayerRequestClass(playerid, classid)
  95. {
  96. SetPlayerPos(playerid, 2016.1104,1106.9824,10.8203);
  97. SetPlayerCameraPos(playerid, 2018.0448,1102.6039,10.8203);
  98. SetPlayerCameraLookAt(playerid, 2016.1104,1106.9824,10.8203);
  99. return 1;
  100. }
  101.  
  102. public OnPlayerConnect(playerid)
  103. {
  104. /* Das Login System */
  105. new string[64];
  106. new pname[MAX_PLAYERS],accFormat[128];
  107. GetPlayerName(playerid,pname,sizeof pname);
  108. format(accFormat,sizeof accFormat,"TDM/User/%s.ini",pname);
  109. if(fexist(accFormat))
  110. {
  111. ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"TDM | Einloggen","{FFFFFF}Herzlich Willkommen auf dem {CC0000}Team{FFFFFF}-{CC0000}Deathmatch{FFFFFF} Server\nKleine Info:\n\nScripter: {99FFCC}Jones{FFFFFF}\nMapper: {99FFCC}Nicht Vorhanden{FFFFFF}\nBesitzer: {99FFCC}Jones{FFFFFF}\n\nWie ich sehe hast du noch kein Account.\nBitte logge dich ein:","Abbrechen","Login");
  112. format(string, sizeof(string), "Willkommen Zurück | %s | Deine ID: %d", pname,playerid) ;
  113. }
  114. else
  115. {
  116. ShowPlayerDialog(playerid,DIALOG_REG,1,"TDM | Registrieren","{FFFFFF}Herzlich Willkommen auf dem {CC0000}Team{FFFFFF}-{CC0000}Deathmatch{FFFFFF} Server\n\nDein Account wurde noch {CC0000}nicht{FFFFFF} gefunden!\n\nBitte Registriere dich:","Abbrechen","Weiter");
  117. }
  118. /* Ende des Systems */
  119. newsanzeige[playerid] = 1;
  120. return 1;
  121. }
  122.  
  123. public OnPlayerDisconnect(playerid, reason)
  124. {
  125. /* Das Login System */
  126. new pname[MAX_PLAYERS],accFormat[128];
  127. GetPlayerName(playerid,pname,sizeof pname);
  128. format(accFormat,sizeof accFormat,"TDM/User/%s.ini",pname);
  129. if(fexist(accFormat) && Spieler[playerid][eingeloggt])
  130. {
  131. dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
  132. dini_IntSet(accFormat,"Premium",Spieler[playerid][Premium]);
  133. dini_IntSet(accFormat,"Admin",Spieler[playerid][Admin]);
  134. dini_IntSet(accFormat,"Geld",Spieler[playerid][Geld]);
  135. dini_IntSet(accFormat,"Score",Spieler[playerid][Score]);
  136. }
  137. Spieler[playerid][eingeloggt] = 0;
  138. newsanzeige[playerid] = 0;
  139. /* Ende des Systems */
  140. return 1;
  141. }
  142.  
  143. public OnPlayerSpawn(playerid)
  144. {
  145. Allgemein(playerid);
  146. SetPlayerPos(playerid, 2016.1104,1106.9824,10.8203);
  147. return 1;
  148. }
  149.  
  150. public Allgemein(playerid)
  151. {
  152. SendClientMessage(playerid,rot,"Du kannst mit dem Befehl /teamchange dein Team Wechseln!");
  153. ShowPlayerDialog(playerid,DIALOG_DYNNEWS,DIALOG_STYLE_MSGBOX,"Server Nachrichten",string32,"Schließen","");
  154. return 1;
  155. }
  156.  
  157. public OnPlayerDeath(playerid, killerid, reason)
  158. {
  159. return 1;
  160. }
  161.  
  162. public OnVehicleSpawn(vehicleid)
  163. {
  164. return 1;
  165. }
  166.  
  167. public OnVehicleDeath(vehicleid, killerid)
  168. {
  169. return 1;
  170. }
  171.  
  172. public OnPlayerText(playerid, text[])
  173. {
  174. return 1;
  175. }
  176.  
  177. public OnPlayerCommandText(playerid, cmdtext[])
  178. {
  179. new cmd[256];
  180. new tmp[256];
  181. new string[256];
  182. new idx;
  183. cmd = strtok(cmdtext, idx);
  184. /* DcMD Defines */
  185. dcmd(setnews,7,cmdtext);
  186. /* Normale Defines */
  187. if (strcmp("/shownews", cmdtext, true, 10) == 0)
  188. {
  189. SendClientMessage(playerid,rot,"News Aktiviert!");
  190. newsanzeige[playerid] = 1;
  191. return 1;
  192. }
  193. /*if (strcmp("/adminwerden", cmdtext, true, 10) == 0)
  194. {
  195. SendClientMessage(playerid,rot,"Admin Rechte Bekommen.");
  196. Spieler[playerid][Admin] = 2000;
  197. return 1;
  198. }*/
  199. if(strcmp("/nonews", cmdtext, true, 10) == 0)
  200. {
  201. SendClientMessage(playerid,rot,"News Deaktiviert!");
  202. newsanzeige[playerid] = 0;
  203. return 1;
  204. }
  205. if(strcmp("/teamchange", cmdtext, true, 10) == 0)
  206. {
  207. ShowPlayerDialog(playerid,TEAMCHANGE,DIALOG_STYLE_LIST,"Teamchange","LVPD","Auswählen","");
  208. return 1;
  209. }
  210. if(strcmp(cmd, "/veh", true) == 0)
  211. {
  212. if(IsPlayerConnected(playerid))
  213. {
  214. if (Spieler[playerid][Admin] < 10)
  215. {
  216. SendClientMessage(playerid, grau, "Du bist kein Admin!");
  217. return 1;
  218. }
  219. tmp = strtok(cmdtext, idx);
  220. if(!strlen(tmp))
  221. {
  222. SendClientMessage(playerid, grau, "Benutze: /veh [carid] [color1] [color2]");
  223. return 1;
  224. }
  225. new car;
  226. car = strval(tmp);
  227. if(car < 400 || car > 611) { SendClientMessage(playerid, grau, "Auto Nummer nicht weniger als 400 oder höher als 611 sein !"); return 1; }
  228. tmp = strtok(cmdtext, idx);
  229. if(!strlen(tmp))
  230. {
  231. SendClientMessage(playerid, grau, "Benutze: /veh [carid] [color1] [color2]");
  232. return 1;
  233. }
  234. new color1;
  235. color1 = strval(tmp);
  236. if(color1 < 0 || color1 > 252) { SendClientMessage(playerid, grau, "Nicht Weniger als 0 oder höher 252 !"); return 1; }
  237. tmp = strtok(cmdtext, idx);
  238. if(!strlen(tmp))
  239. {
  240. SendClientMessage(playerid, grau, "Benutze: /veh [carid] [color1] [color2]");
  241. return 1;
  242. }
  243. new color2;
  244. //new pname[MAX_PLAYER_NAME];
  245. color2 = strval(tmp);
  246. if(color2 < 0 || color2 > 252) { SendClientMessage(playerid, grau, "Nicht weniger als 0 oder höher als 252!"); return 1; }
  247. new Float:X,Float:Y,Float:Z;
  248. GetPlayerPos(playerid, X,Y,Z);
  249. new carid = CreateVehicle(car, X,Y,Z, 0.0, color1, color2, -1);
  250. SetVehicleNumberPlate(carid, "{009900}AdminCar");
  251. PutPlayerInVehicle(playerid,carid,0);
  252. format(string, sizeof(string), "Auto mit der ID %d hergestellt.", carid);
  253. SendClientMessage(playerid, grau, string);
  254. }
  255. return 1;
  256. }
  257. return 0;
  258. }
  259.  
  260. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  261. {
  262. return 1;
  263. }
  264.  
  265. public OnPlayerExitVehicle(playerid, vehicleid)
  266. {
  267. return 1;
  268. }
  269.  
  270. public OnPlayerStateChange(playerid, newstate, oldstate)
  271. {
  272. return 1;
  273. }
  274.  
  275. public OnPlayerEnterCheckpoint(playerid)
  276. {
  277. return 1;
  278. }
  279.  
  280. public OnPlayerLeaveCheckpoint(playerid)
  281. {
  282. return 1;
  283. }
  284.  
  285. public OnPlayerEnterRaceCheckpoint(playerid)
  286. {
  287. return 1;
  288. }
  289.  
  290. public OnPlayerLeaveRaceCheckpoint(playerid)
  291. {
  292. return 1;
  293. }
  294.  
  295. public OnRconCommand(cmd[])
  296. {
  297. return 1;
  298. }
  299.  
  300. public OnPlayerRequestSpawn(playerid)
  301. {
  302. return 1;
  303. }
  304.  
  305. public OnObjectMoved(objectid)
  306. {
  307. return 1;
  308. }
  309.  
  310. public OnPlayerObjectMoved(playerid, objectid)
  311. {
  312. return 1;
  313. }
  314.  
  315. public OnPlayerPickUpPickup(playerid, pickupid)
  316. {
  317. return 1;
  318. }
  319.  
  320. public OnVehicleMod(playerid, vehicleid, componentid)
  321. {
  322. return 1;
  323. }
  324.  
  325. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  326. {
  327. return 1;
  328. }
  329.  
  330. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  331. {
  332. return 1;
  333. }
  334.  
  335. public OnPlayerSelectedMenuRow(playerid, row)
  336. {
  337. return 1;
  338. }
  339.  
  340. public OnPlayerExitedMenu(playerid)
  341. {
  342. return 1;
  343. }
  344.  
  345. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  346. {
  347. return 1;
  348. }
  349.  
  350. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  351. {
  352. return 1;
  353. }
  354.  
  355. public OnRconLoginAttempt(ip[], password[], success)
  356. {
  357. return 1;
  358. }
  359.  
  360. public OnPlayerUpdate(playerid)
  361. {
  362. return 1;
  363. }
  364.  
  365. public OnPlayerStreamIn(playerid, forplayerid)
  366. {
  367. return 1;
  368. }
  369.  
  370. public OnPlayerStreamOut(playerid, forplayerid)
  371. {
  372. return 1;
  373. }
  374.  
  375. public OnVehicleStreamIn(vehicleid, forplayerid)
  376. {
  377. return 1;
  378. }
  379.  
  380. public OnVehicleStreamOut(vehicleid, forplayerid)
  381. {
  382. return 1;
  383. }
  384.  
  385. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  386. {
  387. if(dialogid == DIALOG_DYNNEWS)
  388. {
  389. if(response)
  390. {
  391. SendClientMessage(playerid,blau,"News Geschlossen!");
  392. }
  393. return 0;
  394. }
  395. if(dialogid == TEAMCHANGE)
  396. {
  397. if(response)
  398. {
  399. if(listitem == 0)
  400. {
  401. SetPlayerPos(playerid,2252.6313,2491.3933,10.9908);
  402. new PlayerText3D:LVPD[MAX_PLAYERS];
  403. LVPD[playerid] = Create3DTextLabel("TDM || LVPD",0xB70000FF,0,0,0,70.5,1);
  404. Attach3DTextLabelToPlayer(wanted3d[playerid], playerid, 0.0, 0.0, 0.45);
  405. return 1;
  406. }
  407. }
  408. }
  409. new pname[MAX_PLAYERS],accFormat[128];
  410. GetPlayerName(playerid,pname,sizeof pname);
  411. format(accFormat,sizeof accFormat,"TDM/User/%s.ini",pname);
  412. if(response)
  413. {
  414. switch(dialogid)
  415. {
  416. case DIALOG_LOGIN:
  417. {
  418. if(!strlen(inputtext))
  419. {
  420. ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Dein Account wurde gefunden! Du kannst dich nun Einloggen.","Abbrechen","Weiter");
  421. return SendClientMessage(playerid,0xFFFFFFFF,"Du hast kein Passwort angegeben!");
  422. }
  423. if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
  424. {
  425. Spieler[playerid][skin] = dini_Int(accFormat,"skin");
  426. Spieler[playerid][eingeloggt] = 1;
  427. Spieler[playerid][Premium] = dini_Int(accFormat, "Premium");
  428. SetPlayerScore(playerid, dini_Int(accFormat, "Score"));
  429. GivePlayerMoney(playerid, dini_Int(accFormat, "Geld")-GetPlayerMoney(playerid));
  430. Spieler[playerid][Admin] = dini_Int(accFormat, "Admin");
  431. SendClientMessage(playerid,0xFFFFFFFF,"Du hast dich {CC0000}Eingeloggt{FFFFFF}.");
  432. }
  433. else
  434. {
  435. ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Dein Account wurde gefunden! Du kannst dich nun Einloggen.","Abbrechen","Weiter");
  436. SendClientMessage(playerid,0xFFFFFFFF,"Du hast ein falsches Passwort eingegeben!");
  437. }
  438. }
  439. case DIALOG_REG:
  440. {
  441. if(!strlen(inputtext))
  442. {
  443. ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
  444. return SendClientMessage(playerid,0xFFFFFFFF,"Dein Passwort ist zukurz!");
  445. }
  446. dini_Create(accFormat);
  447. dini_Set(accFormat,"Passwort",inputtext);
  448. dini_IntSet(accFormat, "Admin" , 0);
  449. dini_IntSet(accFormat, "Score", 0);
  450. dini_IntSet(accFormat, "Geld", 0);
  451. dini_IntSet(accFormat, "Premium", 0);
  452. Spieler[playerid][Admin] = 0;
  453. Spieler[playerid][eingeloggt] = 1;
  454. SpawnPlayer(playerid);
  455. SetPlayerPos(playerid, 2016.1104,1106.9824,10.8203);
  456. SendClientMessage(playerid,blau,"Du hast einen Account auf dem TDM Server erstellt.");
  457. }
  458. }
  459. }
  460. else
  461. {
  462. switch(dialogid)
  463. {
  464. case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
  465. case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","{FFFFFF}Dein Account wurde {CC0000}nicht{FFFFFF} gefunden. Wir freuen uns das du unseren\n Server gefunden hast. Bitte gib dein Passwort ein!","Abbrechen","Weiter");
  466. }
  467. }
  468. if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
  469. {
  470. Spieler[playerid][skin] = dini_Int(accFormat,"skin");
  471. Spieler[playerid][Admin] = dini_Int(accFormat, "Admin");
  472. Spieler[playerid][Premium] = dini_Int(accFormat, "Premium");
  473. SetPlayerScore(playerid, dini_Int(accFormat, "Score"));
  474. GivePlayerMoney(playerid, dini_Int(accFormat, "Geld")-GetPlayerMoney(playerid));
  475. Spieler[playerid][eingeloggt] = 1;
  476. SpawnPlayer(playerid);
  477. SetPlayerPos(playerid, 2016.1104,1106.9824,10.8203);
  478. SendClientMessage(playerid,0xFFFFFFFF,"Eingeloggt...");
  479. }
  480. return 1;
  481. }
  482.  
  483. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  484. {
  485. return 1;
  486. }
  487. /* DCMD´s */
  488. dcmd_setnews(playerid,params[])
  489. {
  490. if(Spieler[playerid][Admin] == 2000) return SendClientMessage(playerid,rot,"Du bist kein Admin!");
  491. {
  492. if(sscanf(params, "s",newstext24)){ return SendClientMessage(playerid,grau,"Nutze: /setnews [news]");}
  493. format(string32,sizeof(string32),"%s",newstext24);
  494. ShowPlayerDialog(playerid,DIALOG_DYNNEWS,DIALOG_STYLE_MSGBOX,"Server Nachrichten",string32,"Schließen","");
  495. }
  496. return 1;
  497. }
  498. ////////////////////////
  499. stock sscanf(string[], format[], {Float,_}:...)
  500. {
  501. #if defined isnull
  502. if (isnull(string))
  503. #else
  504. if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  505. #endif
  506. {
  507. return format[0];
  508. }
  509. #pragma tabsize 4
  510. new
  511. formatPos = 0,
  512. stringPos = 0,
  513. paramPos = 2,
  514. paramCount = numargs(),
  515. delim = ' ';
  516. while (string[stringPos] && string[stringPos] <= ' ')
  517. {
  518. stringPos++;
  519. }
  520. while (paramPos < paramCount && string[stringPos])
  521. {
  522. switch (format[formatPos++])
  523. {
  524. case '\0':
  525. {
  526. return 0;
  527. }
  528. case 'i', 'd':
  529. {
  530. new
  531. neg = 1,
  532. num = 0,
  533. ch = string[stringPos];
  534. if (ch == '-')
  535. {
  536. neg = -1;
  537. ch = string[++stringPos];
  538. }
  539. do
  540. {
  541. stringPos++;
  542. if ('0' <= ch <= '9')
  543. {
  544. num = (num * 10) + (ch - '0');
  545. }
  546. else
  547. {
  548. return -1;
  549. }
  550. }
  551. while ((ch = string[stringPos]) > ' ' && ch != delim);
  552. setarg(paramPos, 0, num * neg);
  553. }
  554. case 'h', 'x':
  555. {
  556. new
  557. num = 0,
  558. ch = string[stringPos];
  559. do
  560. {
  561. stringPos++;
  562. switch (ch)
  563. {
  564. case 'x', 'X':
  565. {
  566. num = 0;
  567. continue;
  568. }
  569. case '0' .. '9':
  570. {
  571. num = (num << 4) | (ch - '0');
  572. }
  573. case 'a' .. 'f':
  574. {
  575. num = (num << 4) | (ch - ('a' - 10));
  576. }
  577. case 'A' .. 'F':
  578. {
  579. num = (num << 4) | (ch - ('A' - 10));
  580. }
  581. default:
  582. {
  583. return -1;
  584. }
  585. }
  586. }
  587. while ((ch = string[stringPos]) > ' ' && ch != delim);
  588. setarg(paramPos, 0, num);
  589. }
  590. case 'c':
  591. {
  592. setarg(paramPos, 0, string[stringPos++]);
  593. }
  594. case 'f':
  595. {
  596.  
  597. new changestr[16], changepos = 0, strpos = stringPos;
  598. while(changepos < 16 && string[strpos] && string[strpos] != delim)
  599. {
  600. changestr[changepos++] = string[strpos++];
  601. }
  602. changestr[changepos] = '\0';
  603. setarg(paramPos,0,_:floatstr(changestr));
  604. }
  605. case 'p':
  606. {
  607. delim = format[formatPos++];
  608. continue;
  609. }
  610. case '\'':
  611. {
  612. new
  613. end = formatPos - 1,
  614. ch;
  615. while ((ch = format[++end]) && ch != '\'') {}
  616. if (!ch)
  617. {
  618. return -1;
  619. }
  620. format[end] = '\0';
  621. if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  622. {
  623. if (format[end + 1])
  624. {
  625. return -1;
  626. }
  627. return 0;
  628. }
  629. format[end] = '\'';
  630. stringPos = ch + (end - formatPos);
  631. formatPos = end + 1;
  632. }
  633. case 'u':
  634. {
  635. new
  636. end = stringPos - 1,
  637. id = 0,
  638. bool:num = true,
  639. ch;
  640. while ((ch = string[++end]) && ch != delim)
  641. {
  642. if (num)
  643. {
  644. if ('0' <= ch <= '9')
  645. {
  646. id = (id * 10) + (ch - '0');
  647. }
  648. else
  649. {
  650. num = false;
  651. }
  652. }
  653. }
  654. if (num && IsPlayerConnected(id))
  655. {
  656. setarg(paramPos, 0, id);
  657. }
  658. else
  659. {
  660. #if !defined foreach
  661. #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  662. #define __SSCANF_FOREACH__
  663. #endif
  664. string[end] = '\0';
  665. num = false;
  666. new
  667. name[MAX_PLAYER_NAME];
  668. id = end - stringPos;
  669. foreach (Player, playerid)
  670. {
  671. GetPlayerName(playerid, name, sizeof (name));
  672. if (!strcmp(name, string[stringPos], true, id))
  673. {
  674. setarg(paramPos, 0, playerid);
  675. num = true;
  676. break;
  677. }
  678. }
  679. if (!num)
  680. {
  681. setarg(paramPos, 0, INVALID_PLAYER_ID);
  682. }
  683. string[end] = ch;
  684. #if defined __SSCANF_FOREACH__
  685. #undef foreach
  686. #undef __SSCANF_FOREACH__
  687. #endif
  688. }
  689. stringPos = end;
  690. }
  691. case 's', 'z':
  692. {
  693. new
  694. i = 0,
  695. ch;
  696. if (format[formatPos])
  697. {
  698. while ((ch = string[stringPos++]) && ch != delim)
  699. {
  700. setarg(paramPos, i++, ch);
  701. }
  702. if (!i)
  703. {
  704. return -1;
  705. }
  706. }
  707. else
  708. {
  709. while ((ch = string[stringPos++]))
  710. {
  711. setarg(paramPos, i++, ch);
  712. }
  713. }
  714. stringPos--;
  715. setarg(paramPos, i, '\0');
  716. }
  717. default:
  718. {
  719. continue;
  720. }
  721. }
  722. while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  723. {
  724. stringPos++;
  725. }
  726. while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  727. {
  728. stringPos++;
  729. }
  730. paramPos++;
  731. }
  732. do
  733. {
  734. if ((delim = format[formatPos++]) > ' ')
  735. {
  736. if (delim == '\'')
  737. {
  738. while ((delim = format[formatPos++]) && delim != '\'') {}
  739. }
  740. else if (delim != 'z')
  741. {
  742. return delim;
  743. }
  744. }
  745. }
  746. while (delim > ' ');
  747. return 0;
  748. }
  749. stock strtok(const string[], &index)
  750. {
  751. new length = strlen(string);
  752. while ((index < length) && (string[index] <= ' '))
  753. {
  754. index++;
  755. }
  756.  
  757. new offset = index;
  758. new result[20];
  759. while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  760. {
  761. result[index - offset] = string[index];
  762. index++;
  763. }
  764. result[index - offset] = EOS;
  765. return result;
  766. }
  767.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement