Advertisement
Guest User

Untitled

a guest
Sep 19th, 2011
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 17.59 KB | None | 0 0
  1. //INCLUDES
  2. #include <a_samp>
  3. #include <dini>
  4. #include <ocmd>
  5.  
  6. //forwards
  7. forward tot(playerid);
  8. //Jobs
  9. #define jobname1 "Muellmann"
  10. #define jobname2 "Bauer"
  11.  
  12. //News
  13. new Stadthalleneingang;
  14. new Stadthallenausgang;
  15. new Stadthallenii;
  16. new Text:LifeOfSanAndreas;
  17.  
  18. //Farben
  19. #define Rot 0xFF0000FF
  20. #define Blau 0x0000FFFF
  21. #define Gelb 0xFFFF00FF
  22. #define Gruen 0x00FF00FF
  23. #define Schwarz 0x000000FF
  24. #define Grau 0x0000005B
  25. #define Lila 0x9800FFFF
  26. #define Hellgruen 0xA9FE00FF
  27. #define Hellgrau 0xC8C8C8FF
  28. #define Weiss 0xFFFFFFFF
  29. #define COLOR_RED 0xFF0000FF
  30. #define COLOR_GREEN 0x00FF00FF
  31. #define COLOR_TOMATO 0xFF0000FF
  32.  
  33. //Dialoge
  34. #define Dialog_Register 1
  35. #define Dialog_Login 2
  36. #define Stadthalleni 3
  37. #define Jobs 4
  38. #define Stadtplankaufen 5
  39. #define Dialog_Stadtplan 6
  40.  
  41. //OCMDS//
  42. ocmd:stadtplan(playerid,params[])
  43. {
  44.     if(HatSpielerStadtplan(playerid,1))
  45.     {
  46.         ShowPlayerDialog(playerid,Dialog_Stadtplan,DIALOG_STYLE_LIST,"Stadtplan","Police Departments\nStadthalle\nBurgershot Nord\nFahrschule\nKrankenhaus","Auswählen","Abbrechen");
  47.     }
  48.     else
  49.     {
  50.         SendClientMessage(playerid,Hellgrau,"Du besitzt keinen Stadtplan.");
  51.         SendClientMessage(playerid,Hellgrau,"In der Stadthalle kannst du dir einen kaufen.");
  52.     }
  53.     return 1;
  54. }
  55.  
  56. ocmd:info(playerid,params[])
  57. {
  58.     if(IsPlayerInRangeOfPoint(playerid,1,361.9689,173.7600,1008.3828))
  59.     {
  60.         ShowPlayerDialog(playerid,Stadthalleni,DIALOG_STYLE_LIST,"Stadthalle","Jobs\nStadtplan","Weiter","Abbrechen");
  61.     }
  62.     else
  63.     {
  64.         SendClientMessage(playerid,Hellgrau,"Du bist in keinem Infopunkt.");
  65.     }
  66.     return 1;
  67. }
  68.  
  69. ocmd:restart(playerid, params[])
  70. {
  71.     SendRconCommand("gmx");
  72.     return 1;
  73. }
  74. main()
  75. {
  76.     print("\n----------------------------------");
  77.     print("Life of San Andreas");
  78.     print("----------------------------------\n");
  79. }
  80.  
  81.  
  82.  
  83. public OnGameModeInit()
  84. {
  85.     LifeOfSanAndreas = TextDrawCreate(480.0,424.0,"~Y~Life_of_San_Andreas");
  86.     TextDrawTextSize(LifeOfSanAndreas, 4.0, 5.6);
  87.     TextDrawSetShadow(LifeOfSanAndreas,6);
  88.     EnableStuntBonusForAll(0);
  89.     LimitGlobalChatRadius(10);
  90.     DisableInteriorEnterExits();
  91.     UsePlayerPedAnims();
  92.     for(new i=0; i < MAX_PLAYERS; i++)
  93.     SetPlayerColor(i,Weiss);
  94.     SetGameModeText("Life of San Andreas");
  95.     AddPlayerClass(233, 1479.4275,-1670.7856,14.5532,179.3545, 0, 0, 0, 0, 0, 0);
  96.     return 1;
  97. }
  98.  
  99. public OnGameModeExit()
  100. {
  101.     return 1;
  102. }
  103.  
  104. public OnPlayerRequestClass(playerid, classid)
  105. {
  106.     SetPlayerPos(playerid, 1478.5636,-1674.2318,14.0469);
  107.     SetPlayerCameraPos(playerid, 1479.4275,-1670.7856,14.5532);
  108.     SetPlayerCameraLookAt(playerid, 1479.4275,-1670.7856,14.5532);
  109.     SetPlayerFacingAngle(playerid,179.3545);
  110.     return 1;
  111. }
  112.  
  113. public OnPlayerConnect(playerid)
  114. {
  115.     Stadthallenausgang=CreatePickup(1318,1,390.1907,173.7712,1008.3828,-1);
  116.     Stadthallenii=CreatePickup(1239,1,361.9689,173.7600,1008.3828,-1);
  117.     Create3DTextLabel("/info",Gelb,361.9689,173.7600,1008.3828+0.2,18,0,0);//StadthallenI
  118.     Stadthalleneingang=CreatePickup(1318, 1, 1481.0096,-1770.6169,18.7958, -1);
  119.     new Spielerdatei[64];
  120.     new name[MAX_PLAYER_NAME];
  121.     GetPlayerName(playerid,name,sizeof(name));
  122.     format (Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
  123.     if(dini_Exists(Spielerdatei))
  124.     {
  125.         ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"Login","Du hast bereits einen Account \n Bitte gebe dein Passwort ein","Login","Abbrechen");
  126.     }
  127.     else
  128.     {
  129.         ShowPlayerDialog(playerid,Dialog_Register,DIALOG_STYLE_INPUT,"Register","Willkommen auf Life of San Andreas\n Du hast noch keinen Account !\n Bitte gib ein Passwort ein um dich zu Registrieren","Registrieren","Abbrechen");
  130.         GivePlayerMoney(playerid,2400);
  131.         SendClientMessage(playerid,Lila,"Du hast einen Startbonus von 2400€ erhalten.");
  132.         return 1;
  133.     }
  134.     new string[128];
  135.     new Spielername[MAX_PLAYER_NAME];
  136.     GetPlayerName(playerid,Spielername,sizeof(Spielername));
  137.     format(string,sizeof(string),"%s hat den Server betreten.",Spielername);
  138.     SendClientMessageToAll(Hellgrau,string);
  139.     return 1;
  140. }
  141.  
  142. public OnPlayerDisconnect(playerid, reason)
  143. {
  144.     new string[128];
  145.     new Spielername[MAX_PLAYER_NAME];
  146.     GetPlayerName(playerid,Spielername,sizeof(Spielername));
  147.     format(string,sizeof(string),"%s hat den Server verlassen.",Spielername);
  148.     SendClientMessageToAll(Hellgrau,string);
  149.     SpielerSpeichern(playerid);
  150.     return 1;
  151. }
  152.  
  153. public OnPlayerSpawn(playerid)
  154. {
  155.     TextDrawShowForPlayer(playerid,LifeOfSanAndreas);
  156.     return 1;
  157. }
  158.  
  159. public OnPlayerDeath(playerid, killerid, reason)
  160. {
  161.     TogglePlayerControllable(playerid, 0); // Das Bringt das der spieler gefrezzt ist = er kann sich nicht bewegen.
  162.     SetPlayerPos(playerid,1162.871704, -1339.109619, 14.297291); // Hier Stellt ihr ein wo euer spieler beim krankenhaus stehen soll
  163.     SetPlayerCameraPos(playerid, 1223.379028, -1333.354126, 33.809105); // Die Kamera Positision
  164.     SetPlayerCameraLookAt(playerid, 1178.824829, -1325.804077, 13.284119); //Die Kamera Blickrichtung
  165.     SetPlayerInterior(playerid, 0); // Das bringt das die Kamera nicht im haus ist
  166.     SendClientMessage(playerid,Weiss,"|____ Krankenhaus ____|");
  167.     SendClientMessage(playerid,Weiss,"Du bist nun im Krankenhaus. Du wirst gerade behandelt.");
  168.     SendClientMessage(playerid,Weiss,"Die Behandlung dauert 30 Sekunden.");
  169.     SendClientMessage(playerid,Weiss,"|_____________________|");  //Ihr Müsst nicht unbedingt diesen text nehmen ihr könnt ihn beliebig  editieren oder einfach nur eine zeile behalten
  170.     SetPlayerVirtualWorld(playerid,55);
  171.     SetTimerEx("tot",30000,0,"i",playerid);  // Das ist der timer, das heißt nach 1ner minute wird mann entlassen  kann mann Belibig verändern.
  172.     return 1;
  173. }
  174.  
  175. public OnVehicleSpawn(vehicleid)
  176. {
  177.     return 1;
  178. }
  179.  
  180. public OnVehicleDeath(vehicleid, killerid)
  181. {
  182.     return 1;
  183. }
  184.  
  185. public OnPlayerText(playerid, text[])
  186. {
  187.     return 1;
  188. }
  189.  
  190. public OnPlayerCommandText(playerid, cmdtext[])
  191. {
  192.     if (strcmp("/mycommand", cmdtext, true, 10) == 0)
  193.     {
  194.         // Do something here
  195.         return 1;
  196.     }
  197.     return 0;
  198. }
  199.  
  200. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  201. {
  202.     return 1;
  203. }
  204.  
  205. public OnPlayerExitVehicle(playerid, vehicleid)
  206. {
  207.     return 1;
  208. }
  209.  
  210. public OnPlayerStateChange(playerid, newstate, oldstate)
  211. {
  212.     return 1;
  213. }
  214.  
  215. public OnPlayerEnterCheckpoint(playerid)
  216. {
  217.     return 1;
  218. }
  219.  
  220. public OnPlayerLeaveCheckpoint(playerid)
  221. {
  222.     return 1;
  223. }
  224.  
  225. public OnPlayerEnterRaceCheckpoint(playerid)
  226. {
  227.     return 1;
  228. }
  229.  
  230. public OnPlayerLeaveRaceCheckpoint(playerid)
  231. {
  232.     return 1;
  233. }
  234.  
  235. public OnRconCommand(cmd[])
  236. {
  237.     return 1;
  238. }
  239.  
  240. public OnPlayerRequestSpawn(playerid)
  241. {
  242.     return 1;
  243. }
  244.  
  245. public OnObjectMoved(objectid)
  246. {
  247.     return 1;
  248. }
  249.  
  250. public OnPlayerObjectMoved(playerid, objectid)
  251. {
  252.     return 1;
  253. }
  254.  
  255. public OnPlayerPickUpPickup(playerid, pickupid)
  256. {
  257.     if(pickupid==Stadthallenii)
  258.     {
  259.         SetCameraBehindPlayer(playerid);
  260.     }
  261.     if(pickupid==Stadthallenausgang)
  262.     {
  263.         SetPlayerPos(playerid,1481.2158,-1763.9629,18.7958);
  264.         SetPlayerFacingAngle(playerid,358.8962);
  265.         SetCameraBehindPlayer(playerid);
  266.         SetPlayerInterior(playerid,0);
  267.     }
  268.  
  269.     if(pickupid==Stadthalleneingang)
  270.     {
  271.         SetPlayerPos(playerid,385.3457,174.0808,1008.3828);
  272.         SetPlayerFacingAngle(playerid,89.7637);
  273.         SetCameraBehindPlayer(playerid);
  274.         SetPlayerInterior(playerid,3);
  275.     }
  276.     return 1;
  277. }
  278.  
  279. public OnVehicleMod(playerid, vehicleid, componentid)
  280. {
  281.     return 1;
  282. }
  283.  
  284. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  285. {
  286.     return 1;
  287. }
  288.  
  289. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  290. {
  291.     return 1;
  292. }
  293.  
  294. public OnPlayerSelectedMenuRow(playerid, row)
  295. {
  296.     return 1;
  297. }
  298.  
  299. public OnPlayerExitedMenu(playerid)
  300. {
  301.     return 1;
  302. }
  303.  
  304. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  305. {
  306.     return 1;
  307. }
  308.  
  309. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  310. {
  311.     return 1;
  312. }
  313.  
  314. public OnRconLoginAttempt(ip[], password[], success)
  315. {
  316.     return 1;
  317. }
  318.  
  319. public OnPlayerUpdate(playerid)
  320. {
  321.     return 1;
  322. }
  323.  
  324. public OnPlayerStreamIn(playerid, forplayerid)
  325. {
  326.     return 1;
  327. }
  328.  
  329. public OnPlayerStreamOut(playerid, forplayerid)
  330. {
  331.     return 1;
  332. }
  333.  
  334. public OnVehicleStreamIn(vehicleid, forplayerid)
  335. {
  336.     return 1;
  337. }
  338.  
  339. public OnVehicleStreamOut(vehicleid, forplayerid)
  340. {
  341.     return 1;
  342. }
  343.  
  344. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  345. {
  346. if(dialogid==Stadtplankaufen)
  347. {
  348.     if(response==1)
  349.     {
  350.         new Spielerdatei[64];
  351.         new name[MAX_PLAYER_NAME];
  352.         GetPlayerName(playerid,name,sizeof(name));
  353.         format (Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
  354.         SetPVarInt(playerid, "Stadtplan", 1);
  355.         SendClientMessage(playerid,Hellgrau,"Du hast nun einen Stadtplan.");
  356.         GivePlayerMoney(playerid,-80);
  357.         SpielerSpeichern(playerid);
  358.     }
  359. }
  360.  
  361. if(dialogid==Stadthalleni)
  362. {
  363.     if(response==1)
  364.     {
  365.         if(listitem==0)
  366.         {
  367.             ShowPlayerDialog(playerid,Jobs,DIALOG_STYLE_LIST,"Jobs","Arbeitsloser\nMüllmann\nBauer","Job_Annehmen","Abbrechen");
  368.         }
  369.         if(listitem==1)
  370.         {
  371.             ShowPlayerDialog(playerid,Stadtplankaufen,DIALOG_STYLE_MSGBOX,"Stadtplan","Der Stadtplan ist dein bester Freund.\nEr zeigt dir die Orte an , die du wissen musst.\nDu kannst ihn ganz einfach mit /Stadtplan aufrufen.\nDer Stadtplan kostet 80€.","Kaufen","Abbrechen");
  372.         }
  373.     }
  374. }
  375.  
  376. if(dialogid==Dialog_Login)
  377. {
  378.     if(response==0)
  379.     {
  380.         SendClientMessage(playerid,Rot,"Du hast den Vorgang abgebrochen.");
  381.         Kick(playerid);
  382.         return 1;
  383.     }
  384.     if(response==1)
  385.     {
  386.         if(!strlen(inputtext))
  387.         {
  388.             SendClientMessage(playerid,Rot,"Du musst ein Passwort angeben");
  389.             ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"Login","Du hast bereits einen Account \n Bitte gebe dein Passwort ein","Login","Abbrechen");
  390.             return 1;
  391.         }
  392.         else
  393.         {
  394.             Login(playerid,inputtext);
  395.             return 1;
  396.         }
  397.     }
  398. }
  399.  
  400. if(dialogid==Dialog_Register)
  401. {
  402.     if(response==0)
  403.     {
  404.         SendClientMessage(playerid,Rot,"Du hast den Vorgang abgebrochen.");
  405.         Kick(playerid);
  406.         return 1;
  407.     }
  408.     if(response==1)
  409.     {
  410.         if(!strlen(inputtext))
  411.         {
  412.             SendClientMessage(playerid,Rot,"Du musst ein Passwort angeben");
  413.             ShowPlayerDialog(playerid,Dialog_Register,DIALOG_STYLE_INPUT,"Register","Willkommen auf XXX\n Du hast noch keinen Account !\n Bitte gib ein Passwort ein um dich zu Registrieren","Registrieren","Abbrechen");
  414.             return 1;
  415.         }
  416.         else
  417.         {
  418.             Register(playerid,inputtext);
  419.             return 1;
  420.         }
  421.     }
  422. }
  423. return 1;
  424. }
  425.  
  426. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  427. {
  428.     return 1;
  429. }
  430.  
  431. public tot(playerid)
  432. {
  433.     SetPlayerPos(playerid,1176.5959,-1323.6019,14.0291); // Hier eintragen wo mann nachdem man aus den krankenhaus entlassen wurde spawn soll
  434.     SetPlayerHealth(playerid,100); // Hier könnt ihr einsellen wie viel leben mann haben soll nachdem mann entlassen wurde
  435.     GivePlayerMoney(playerid,  -250); // Ganz hinten kannst du einstellen wie viel geld mann verlieren  soll das - heißt abziehen das + dazu "Kann auch ganz weggemacht werden"
  436.     SendClientMessage(playerid,Weiss,"|____ Krankenhaus ____|");
  437.     SendClientMessage(playerid,Weiss,"Du wurdest entlassen.");
  438.     SendClientMessage(playerid,Weiss,"Kosten der Behandlung: 80$");
  439.     SendClientMessage(playerid,Weiss,"|_____________________|");  // Ihr Müsst nicht unbedingt diesen text nehmen ihr könnt ihn beliebig  editieren oder einfach nur eine zeile behalten
  440. }
  441.  
  442. stock HatSpielerStadtplan(playerid,level)
  443. {
  444.     if(GetPVarInt(playerid,"Stadtplan")>=level)return 1;
  445.     return 0;
  446. }
  447.  
  448. stock Register(playerid,key[])
  449. {
  450.     new Spielerdatei[64];
  451.     new name[MAX_PLAYER_NAME];
  452.     GetPlayerName(playerid,name,sizeof(name));
  453.     format (Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
  454.     dini_Create(Spielerdatei);
  455.     dini_Set(Spielerdatei,"Passwort",key);
  456.     SetPlayerScore(playerid,1);
  457.     return 1;
  458. }
  459.  
  460. stock Login(playerid,key[])
  461. {
  462.     new Spielerdatei[64];
  463.     new name[MAX_PLAYER_NAME];
  464.     GetPlayerName(playerid,name,sizeof(name));
  465.     format (Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
  466.     if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),true))
  467.     {
  468.         Spielerladen(playerid);
  469.         return 1;
  470.     }
  471.     else
  472.     {
  473.         SendClientMessage(playerid,Rot,"Falsches Passwort.");
  474.         ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"Login","Du hast bereits einen Account \n Bitte gebe dein Passwort ein","Login","Abbrechen");
  475.         return 1;
  476.     }
  477.  
  478. }
  479.  
  480. stock Spielerladen(playerid)
  481. {
  482.     new Spielerdatei[64];
  483.     new name[MAX_PLAYER_NAME];
  484.     GetPlayerName(playerid,name,sizeof(name));
  485.     format (Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
  486.     SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
  487.     GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
  488.     return 1;
  489. }
  490.  
  491. stock SpielerSpeichern(playerid)
  492. {
  493.     new Spielerdatei[64];
  494.     new name[MAX_PLAYER_NAME];
  495.     GetPlayerName(playerid,name,sizeof(name));
  496.     format (Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
  497.     dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
  498.     dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
  499.     return 1;
  500. }
  501.  
  502. stock ResetVariablen(playerid)
  503. {
  504.     SpielerInfo[playerid][Stadtplan]=0;
  505. }
  506.  
  507. stock SpielerName(playerid)
  508. {
  509.     new name[MAX_PLAYER_NAME];
  510.     GetPlayerName(playerid,name,sizeof(name));
  511.     return name;
  512. }
  513.  
  514. stock sscanf(sstring[], format[], {Float,_}:...)
  515. {
  516.     #if defined isnull
  517.         if (isnull(sstring))
  518.     #else
  519.         if (sstring[0] == 0 || (sstring[0] == 1 && sstring[1] == 0))
  520.     #endif
  521.         {
  522.             return format[0];
  523.         }
  524.     #pragma tabsize 4
  525.     new
  526.         formatPos = 0,
  527.         sstringPos = 0,
  528.         paramPos = 2,
  529.         paramCount = numargs(),
  530.         delim = ' ';
  531.     while (sstring[sstringPos] && sstring[sstringPos] <= ' ')
  532.     {
  533.         sstringPos++;
  534.     }
  535.     while (paramPos < paramCount && sstring[sstringPos])
  536.     {
  537.         switch (format[formatPos++])
  538.         {
  539.             case '\0':
  540.             {
  541.                 return 0;
  542.             }
  543.             case 'i', 'd':
  544.             {
  545.                 new
  546.                     neg = 1,
  547.                     num = 0,
  548.                     ch = sstring[sstringPos];
  549.                 if (ch == '-')
  550.                 {
  551.                     neg = -1;
  552.                     ch = sstring[++sstringPos];
  553.                 }
  554.                 do
  555.                 {
  556.                     sstringPos++;
  557.                     if ('0' <= ch <= '9')
  558.                     {
  559.                         num = (num * 10) + (ch - '0');
  560.                     }
  561.                     else
  562.                     {
  563.                         return -1;
  564.                     }
  565.                 }
  566.                 while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
  567.                 setarg(paramPos, 0, num * neg);
  568.             }
  569.             case 'h', 'x':
  570.             {
  571.                 new
  572.                     num = 0,
  573.                     ch = sstring[sstringPos];
  574.                 do
  575.                 {
  576.                     sstringPos++;
  577.                     switch (ch)
  578.                     {
  579.                         case 'x', 'X':
  580.                         {
  581.                             num = 0;
  582.                             continue;
  583.                         }
  584.                         case '0' .. '9':
  585.                         {
  586.                             num = (num << 4) | (ch - '0');
  587.                         }
  588.                         case 'a' .. 'f':
  589.                         {
  590.                             num = (num << 4) | (ch - ('a' - 10));
  591.                         }
  592.                         case 'A' .. 'F':
  593.                         {
  594.                             num = (num << 4) | (ch - ('A' - 10));
  595.                         }
  596.                         default:
  597.                         {
  598.                             return -1;
  599.                         }
  600.                     }
  601.                 }
  602.                 while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
  603.                 setarg(paramPos, 0, num);
  604.             }
  605.             case 'c':
  606.             {
  607.                 setarg(paramPos, 0, sstring[sstringPos++]);
  608.             }
  609.             case 'f':
  610.             {
  611.  
  612.                 new changestr[16], changepos = 0, strpos = sstringPos;
  613.                 while(changepos < 16 && sstring[strpos] && sstring[strpos] != delim)
  614.                 {
  615.                     changestr[changepos++] = sstring[strpos++];
  616.                     }
  617.                 changestr[changepos] = '\0';
  618.                 setarg(paramPos,0,_:floatstr(changestr));
  619.             }
  620.             case 'p':
  621.             {
  622.                 delim = format[formatPos++];
  623.                 continue;
  624.             }
  625.             case '\'':
  626.             {
  627.                 new
  628.                     end = formatPos - 1,
  629.                     ch;
  630.                 while ((ch = format[++end]) && ch != '\'') {}
  631.                 if (!ch)
  632.                 {
  633.                     return -1;
  634.                 }
  635.                 format[end] = '\0';
  636.                 if ((ch = strfind(sstring, format[formatPos], false, sstringPos)) == -1)
  637.                 {
  638.                     if (format[end + 1])
  639.                     {
  640.                         return -1;
  641.                     }
  642.                     return 0;
  643.                 }
  644.                 format[end] = '\'';
  645.                 sstringPos = ch + (end - formatPos);
  646.                 formatPos = end + 1;
  647.             }
  648.             case 'u':
  649.             {
  650.                 new
  651.                     end = sstringPos - 1,
  652.                     id = 0,
  653.                     bool:num = true,
  654.                     ch;
  655.                 while ((ch = sstring[++end]) && ch != delim)
  656.                 {
  657.                     if (num)
  658.                     {
  659.                         if ('0' <= ch <= '9')
  660.                         {
  661.                             id = (id * 10) + (ch - '0');
  662.                         }
  663.                         else
  664.                         {
  665.                             num = false;
  666.                         }
  667.                     }
  668.                 }
  669.                 if (num && IsPlayerConnected(id))
  670.                 {
  671.                     setarg(paramPos, 0, id);
  672.                 }
  673.                 else
  674.                 {
  675.                     #if !defined foreach
  676.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  677.                         #define __SSCANF_FOREACH__
  678.                     #endif
  679.                     sstring[end] = '\0';
  680.                     num = false;
  681.                     new
  682.                         name[MAX_PLAYER_NAME];
  683.                     id = end - sstringPos;
  684.                     foreach (Player, playerid)
  685.                     {
  686.                         GetPlayerName(playerid, name, sizeof (name));
  687.                         if (!strcmp(name, sstring[sstringPos], true, id))
  688.                         {
  689.                             setarg(paramPos, 0, playerid);
  690.                             num = true;
  691.                             break;
  692.                         }
  693.                     }
  694.                     if (!num)
  695.                     {
  696.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  697.                     }
  698.                     sstring[end] = ch;
  699.                     #if defined __SSCANF_FOREACH__
  700.                         #undef foreach
  701.                         #undef __SSCANF_FOREACH__
  702.                     #endif
  703.                 }
  704.                 sstringPos = end;
  705.             }
  706.             case 's', 'z':
  707.             {
  708.                 new
  709.                     i = 0,
  710.                     ch;
  711.                 if (format[formatPos])
  712.                 {
  713.                     while ((ch = sstring[sstringPos++]) && ch != delim)
  714.                     {
  715.                         setarg(paramPos, i++, ch);
  716.                     }
  717.                     if (!i)
  718.                     {
  719.                         return -1;
  720.                     }
  721.                 }
  722.                 else
  723.                 {
  724.                     while ((ch = sstring[sstringPos++]))
  725.                     {
  726.                         setarg(paramPos, i++, ch);
  727.                     }
  728.                 }
  729.                 sstringPos--;
  730.                 setarg(paramPos, i, '\0');
  731.             }
  732.             default:
  733.             {
  734.                 continue;
  735.             }
  736.         }
  737.         while (sstring[sstringPos] && sstring[sstringPos] != delim && sstring[sstringPos] > ' ')
  738.         {
  739.             sstringPos++;
  740.         }
  741.         while (sstring[sstringPos] && (sstring[sstringPos] == delim || sstring[sstringPos] <= ' '))
  742.         {
  743.             sstringPos++;
  744.         }
  745.         paramPos++;
  746.     }
  747.     do
  748.     {
  749.         if ((delim = format[formatPos++]) > ' ')
  750.         {
  751.             if (delim == '\'')
  752.             {
  753.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  754.             }
  755.             else if (delim != 'z')
  756.             {
  757.                 return delim;
  758.             }
  759.         }
  760.     }
  761.     while (delim > ' ');
  762.     return 0;
  763. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement