Advertisement
DraKiNs

[COD] sscanf beta

Aug 16th, 2011
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.92 KB | None | 0 0
  1.  
  2. //Wait for new version
  3. // s,u and i scanf.
  4. // By Bruno da Silva
  5. // www.ips-team.blogspot.com
  6.  
  7. sscanf(string[], format[],{Float,_}:...)
  8. {
  9.     if((!string[0] || string[0] == '\1' && !string[1]) || (!format[0] || format[0] == '\1' && !format[1])||numargs()-2 != strlen(format)) return false;
  10.     new ultimoCaractere = 0;
  11.  
  12.     for(new f; format[f]; f++) {
  13.         switch(format[f]) {
  14.  
  15.             case 'i','d':
  16.             {
  17.                 new
  18.                     i = ultimoCaractere,
  19.                     valorArmazenar = 0;
  20.  
  21.                 for( ; string[i] > ' '; ++i) {
  22.  
  23.                     if(('0' <= string[i] <= '9')) {
  24.                         valorArmazenar = (valorArmazenar * 10) + (string[i] - '0');
  25.                     }
  26.                     else if(string[i] != '-') {
  27.                         return false;
  28.                     }
  29.                 }
  30.                 setarg(f + 2, 0, string[ultimoCaractere] == '-' ? ~valorArmazenar + 1 : valorArmazenar );
  31.                 ultimoCaractere = i + 1;
  32.             }
  33.  
  34.             case 's','z':
  35.             {
  36.                 new i = ultimoCaractere;
  37.                 for( ; string[i] > ' '; i++) {
  38.                     setarg(f + 2, i - ultimoCaractere, string[i]);
  39.                 }
  40.                 ultimoCaractere = i + 1;
  41.             }
  42.             case 'u', 'j':
  43.             {
  44.                 new
  45.                     i = ultimoCaractere,
  46.                     nomeJogador[MAX_PLAYER_NAME],
  47.                     jogadorDigitado = INVALID_PLAYER_ID;
  48.  
  49.                 for( ; string[i] > ' '; i++) {
  50.                     nomeJogador[i - ultimoCaractere] = string[i];
  51.                 }
  52.  
  53.                 if(IsNumeric(nomeJogador)) {
  54.                     for(new x ; nomeJogador[x] ; ++x) {
  55.                         jogadorDigitado = (jogadorDigitado * 10) + (nomeJogador[i] - '0');
  56.                     }
  57.                 }
  58.  
  59.                 if(IsPlayerConnected(jogadorDigitado)) {
  60.                     setarg(f + 2, 0, jogadorDigitado);
  61.                 }
  62.                 else {
  63.                     jogadorDigitado = GetPlayerByPartName(nomeJogador);
  64.                 }
  65.                 if(IsPlayerConnected(jogadorDigitado)) {
  66.                     setarg(f + 2, 0, jogadorDigitado);
  67.                 }
  68.                 else {
  69.                     setarg(f + 2, 0, INVALID_PLAYER_ID);
  70.                 }
  71.             }
  72.         }
  73.     }
  74.     return true;
  75. }
  76.  
  77.  
  78. GetPlayerByPartName(sNome[])
  79. {
  80.     if(strlen(sNome) < 3) return INVALID_PLAYER_ID;
  81.     static sName[MAX_PLAYER_NAME];
  82.     for(new x = 0; x != MAX_PLAYERS; x++) if(IsPlayerConnected(x)) {
  83.         GetPlayerName(x, sName, MAX_PLAYER_NAME);
  84.         if(strfind(sName, sNome, true)) {
  85.             return x;
  86.         }
  87.     }
  88.     return INVALID_PLAYER_ID;
  89. }
  90.  
  91. IsNumeric(const string[])
  92. {
  93.     for (new i = 0, j = strlen(string); i < j; i++)
  94.         if (string[i] > '9' || string[i] < '0')
  95.             return 0;
  96.     return 1;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement