Advertisement
Hatedpain

Skinsystem

Oct 15th, 2011
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.58 KB | None | 0 0
  1. //Skinsystem von Pain aka. DeaThHoPe
  2. //Copyright by Pain aka. DeaThHoPe
  3. //Copyrights bitte NICHT entfernen
  4.  
  5. #if defined _skinsys_included
  6.     #endinput
  7. #endif
  8. #define _skinsys_included
  9.  
  10.  
  11. //Hier festlegen, wieviel Skins maximal gespeichert werden dürfen
  12. #define MAX_SKINS 128
  13.  
  14. stock GetSkin(krit[],&rows)
  15. {
  16.     new DB:skindb = db_open("skinlist.db"),
  17.         krit1[15],krit2[15],krit3[15], krit4[25],
  18.         query[256], DBResult:skinres;
  19.  
  20.     sscanf5(krit,"ssss",krit1,krit2,krit3,krit4);
  21.     format(query,sizeof(query),"SELECT skin FROM skinlist WHERE (krit LIKE '%%%s%%' AND krit LIKE '%%%s%%' AND krit LIKE '%%%s%%' AND krit LIKE '%%%s%%')",krit1,krit2,krit3,krit4);
  22.     skinres = db_query(skindb,query);
  23.     rows = db_num_rows(skinres);
  24.     new valskin[4], skin[MAX_SKINS];
  25.     for(new i = 1;i <= rows;i++)
  26.     {
  27.         db_get_field_assoc(skinres,"skin",valskin,5);
  28.         skin[i] = strval(valskin);
  29.         db_next_row(skinres);
  30.     }
  31.     db_free_result(skinres);
  32.     db_close(skindb);
  33.     return skin;
  34. }
  35.  
  36. stock sscanf5(string[], format[], {Float,_}:...)
  37. {
  38.     #if defined isnull
  39.         if (isnull(string))
  40.     #else
  41.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  42.     #endif
  43.         {
  44.             return format[0];
  45.         }
  46.     #pragma tabsize 4
  47.     new
  48.         formatPos = 0,
  49.         stringPos = 0,
  50.         paramPos = 2,
  51.         paramCount = numargs(),
  52.         delim = ' ';
  53.     while (string[stringPos] && string[stringPos] <= ' ')
  54.     {
  55.         stringPos++;
  56.     }
  57.     while (paramPos < paramCount && string[stringPos])
  58.     {
  59.         switch (format[formatPos++])
  60.         {
  61.             case '\0':
  62.             {
  63.                 return 0;
  64.             }
  65.             case 'i', 'd':
  66.             {
  67.                 new
  68.                     neg = 1,
  69.                     num = 0,
  70.                     ch = string[stringPos];
  71.                 if (ch == '-')
  72.                 {
  73.                     neg = -1;
  74.                     ch = string[++stringPos];
  75.                 }
  76.                 do
  77.                 {
  78.                     stringPos++;
  79.                     if ('0' <= ch <= '9')
  80.                     {
  81.                         num = (num * 10) + (ch - '0');
  82.                     }
  83.                     else
  84.                     {
  85.                         return -1;
  86.                     }
  87.                 }
  88.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  89.                 setarg(paramPos, 0, num * neg);
  90.             }
  91.             case 'h', 'x':
  92.             {
  93.                 new
  94.                     num = 0,
  95.                     ch = string[stringPos];
  96.                 do
  97.                 {
  98.                     stringPos++;
  99.                     switch (ch)
  100.                     {
  101.                         case 'x', 'X':
  102.                         {
  103.                             num = 0;
  104.                             continue;
  105.                         }
  106.                         case '0' .. '9':
  107.                         {
  108.                             num = (num << 4) | (ch - '0');
  109.                         }
  110.                         case 'a' .. 'f':
  111.                         {
  112.                             num = (num << 4) | (ch - ('a' - 10));
  113.                         }
  114.                         case 'A' .. 'F':
  115.                         {
  116.                             num = (num << 4) | (ch - ('A' - 10));
  117.                         }
  118.                         default:
  119.                         {
  120.                             return -1;
  121.                         }
  122.                     }
  123.                 }
  124.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  125.                 setarg(paramPos, 0, num);
  126.             }
  127.             case 'c':
  128.             {
  129.                 setarg(paramPos, 0, string[stringPos++]);
  130.             }
  131.             case 'f':
  132.             {
  133.  
  134.                 new changestr[16], changepos = 0, strpos = stringPos;
  135.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  136.                 {
  137.                     changestr[changepos++] = string[strpos++];
  138.                     }
  139.                 changestr[changepos] = '\0';
  140.                 setarg(paramPos,0,_:floatstr(changestr));
  141.             }
  142.             case 'p':
  143.             {
  144.                 delim = format[formatPos++];
  145.                 continue;
  146.             }
  147.             case '\'':
  148.             {
  149.                 new
  150.                     end = formatPos - 1,
  151.                     ch;
  152.                 while ((ch = format[++end]) && ch != '\'') {}
  153.                 if (!ch)
  154.                 {
  155.                     return -1;
  156.                 }
  157.                 format[end] = '\0';
  158.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  159.                 {
  160.                     if (format[end + 1])
  161.                     {
  162.                         return -1;
  163.                     }
  164.                     return 0;
  165.                 }
  166.                 format[end] = '\'';
  167.                 stringPos = ch + (end - formatPos);
  168.                 formatPos = end + 1;
  169.             }
  170.             case 'u':
  171.             {
  172.                 new
  173.                     end = stringPos - 1,
  174.                     id = 0,
  175.                     bool:num = true,
  176.                     ch;
  177.                 while ((ch = string[++end]) && ch != delim)
  178.                 {
  179.                     if (num)
  180.                     {
  181.                         if ('0' <= ch <= '9')
  182.                         {
  183.                             id = (id * 10) + (ch - '0');
  184.                         }
  185.                         else
  186.                         {
  187.                             num = false;
  188.                         }
  189.                     }
  190.                 }
  191.                 if (num && IsPlayerConnected(id))
  192.                 {
  193.                     setarg(paramPos, 0, id);
  194.                 }
  195.                 else
  196.                 {
  197.                     #if !defined foreach
  198.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  199.                         #define __SSCANF_FOREACH__
  200.                     #endif
  201.                     string[end] = '\0';
  202.                     num = false;
  203.                     new
  204.                         name[MAX_PLAYER_NAME];
  205.                     id = end - stringPos;
  206.                     foreach (Player, playerid)
  207.                     {
  208.                         GetPlayerName(playerid, name, sizeof (name));
  209.                         if (!strcmp(name, string[stringPos], true, id))
  210.                         {
  211.                             setarg(paramPos, 0, playerid);
  212.                             num = true;
  213.                             break;
  214.                         }
  215.                     }
  216.                     if (!num)
  217.                     {
  218.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  219.                     }
  220.                     string[end] = ch;
  221.                     #if defined __SSCANF_FOREACH__
  222.                         #undef foreach
  223.                         #undef __SSCANF_FOREACH__
  224.                     #endif
  225.                 }
  226.                 stringPos = end;
  227.             }
  228.             case 's', 'z':
  229.             {
  230.                 new
  231.                     i = 0,
  232.                     ch;
  233.                 if (format[formatPos])
  234.                 {
  235.                     while ((ch = string[stringPos++]) && ch != delim)
  236.                     {
  237.                         setarg(paramPos, i++, ch);
  238.                     }
  239.                     if (!i)
  240.                     {
  241.                         return -1;
  242.                     }
  243.                 }
  244.                 else
  245.                 {
  246.                     while ((ch = string[stringPos++]))
  247.                     {
  248.                         setarg(paramPos, i++, ch);
  249.                     }
  250.                 }
  251.                 stringPos--;
  252.                 setarg(paramPos, i, '\0');
  253.             }
  254.             default:
  255.             {
  256.                 continue;
  257.             }
  258.         }
  259.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  260.         {
  261.             stringPos++;
  262.         }
  263.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  264.         {
  265.             stringPos++;
  266.         }
  267.         paramPos++;
  268.     }
  269.     do
  270.     {
  271.         if ((delim = format[formatPos++]) > ' ')
  272.         {
  273.             if (delim == '\'')
  274.             {
  275.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  276.             }
  277.             else if (delim != 'z')
  278.             {
  279.                 return delim;
  280.             }
  281.         }
  282.     }
  283.     while (delim > ' ');
  284.     return 0;
  285. }
  286.  
  287.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement