Guest User

Spendensystem

a guest
Dec 24th, 2011
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.63 KB | None | 0 0
  1. #include <a_samp>
  2. #include <SII>
  3. #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
  4. #define MAX_NUMBER 9999
  5. #define MIN_NUMBER 1000
  6.  
  7. stock PrintCreatedCodes()
  8. {
  9.     new count = 0;
  10.     for(new i=MIN_NUMBER;i<MAX_NUMBER;i++)
  11.     {
  12.         if(IsValidCode(i))
  13.         {
  14.             count++;
  15.         }
  16.     }
  17.     printf("%i Codes sind aktiv.", count);
  18.     return 1;
  19. }
  20.  
  21. stock IsValidCode(code)
  22. {
  23.     new folder[50];
  24.     format(folder, 50, "/InsaneSolutions/DonatorCodes/%i.txt", code);
  25.     if(fexist(folder)) return 1;
  26.     return 0;
  27. }
  28.  
  29. stock CreateCode(code, money, score)
  30. {
  31.         new folder[50];
  32.         format(folder, 50, "/InsaneSolutions/DonatorCodes/%i.txt", code);
  33.         if(INI_Open(folder))
  34.         {
  35.             INI_WriteInt("Money", money);
  36.             INI_WriteInt("Score", score);
  37.             INI_Save();
  38.             INI_Close();
  39.         }
  40.         printf("Code %i wurde erstellt. (Money: %i Score: %i)", code, money, score);
  41.         return 1;
  42. }
  43. public OnFilterScriptInit()
  44. {
  45.     PrintCreatedCodes();
  46.     return 1;
  47. }
  48.  
  49. public OnPlayerCommandText(playerid, cmdtext[])
  50. {
  51.     dcmd(code, 4, cmdtext);
  52.     dcmd(createcode, 10, cmdtext);
  53.     return 0;
  54. }
  55.  
  56. dcmd_createcode(playerid, params[])
  57. {
  58.     if(!IsPlayerAdmin(playerid)) return 0;
  59.     new score, money;
  60.     if(sscanf(params, "ii", money, score)) SendClientMessage(playerid, 0xFFFFFF, "Benutze /createcode [money] [score]");
  61.     else
  62.     {
  63.         new rand;
  64.         for(new i=MIN_NUMBER;i<MAX_NUMBER;i++)
  65.         {
  66.             rand = random(MAX_NUMBER-MIN_NUMBER) + MIN_NUMBER;
  67.             if(!IsValidCode(rand))
  68.             {
  69.                 CreateCode(rand, money, score);
  70.                 new success[128];
  71.                 format(success, 128, "{00FF00}Erfolg{FFFFFF}! Code mit Nummer %i wurde erstellt! (Wert: %i $ %i Score)", rand, money, score);
  72.                 SendClientMessage(playerid, 0xFFFFFF, success);
  73.                 break;
  74.             }
  75.             else if(i == MAX_NUMBER)
  76.             {
  77.                 SendClientMessage(playerid, 0xFFFFFF, "{FFFFFF}Es konnte {FF0000}kein{FFFFFF} Code erstellt werden!");
  78.                 break;
  79.             }
  80.         }
  81.     }
  82.     return 1;
  83. }
  84.  
  85. dcmd_code(playerid, params[])
  86. {
  87.     ShowPlayerDialog(playerid, 7777, 1, "{FFFFFF}Code eingeben", "{FFFFFF}Gebe hier deinen Code ein.", "Weiter", "Abbrechen");
  88.     return 1;
  89.     #pragma unused params
  90. }
  91.  
  92. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  93. {
  94.     if(response==1)
  95.     {
  96.         switch(dialogid)
  97.         {
  98.             case 7777:
  99.             {
  100.                     new id=strval(inputtext);
  101.                     if(id < MIN_NUMBER || id > MAX_NUMBER) ShowPlayerDialog(playerid, 7777, 1, "{FF0000}Ungültiger Code!", "{FF0000}Der eingegebende Code war ungültig!\n\n{FFFFFF}Gebe deinen Code ein:", "Weiter", "Abbrechen");
  102.                     else if(IsValidCode(id))
  103.                     {
  104.                         if(IsPlayerConnected(playerid))
  105.                         {
  106.                             new achievedmoney, achievedscore;
  107.                             new folder[50];
  108.                             format(folder, 50, "/InsaneSolutions/DonatorCodes/%i.txt", id);
  109.                             if(INI_Open(folder))
  110.                             {
  111.                                 GivePlayerMoney(playerid, INI_ReadInt("Money"));
  112.                                 achievedmoney = INI_ReadInt("Money");
  113.                                 SetPlayerScore(playerid, INI_ReadInt("Score"));
  114.                                 achievedscore = INI_ReadInt("Score");
  115.                                 INI_Close();
  116.                             }
  117.                             INI_Remove(folder);
  118.                             new success[256];
  119.                             format(success, 256, "{FFFFFF}Code akzeptiert.\n{00FF00}%i{FFFFFF}$ und {00FF00}%i{FFFFFF} Score erhalten.\nVielen Dank für die Nutzung des Spendensystems.\nSollten sie einen weiteren Code besitzen,drücken sie Weiter.", achievedmoney, achievedscore);
  120.                             ShowPlayerDialog(playerid, 7778, 0, "{00FF00}Erfolg{FFFFFF}!", success, "Weiter", "Verlassen");
  121.                         }
  122.                     }
  123.                     else ShowPlayerDialog(playerid, 7777, 1, "{FF0000}Ungültiger Code!", "{FF0000}Der eingegebende Code war ungültig!\n\n{FFFFFF}Gebe deinen Code ein:", "Weiter", "Abbrechen");
  124.             }
  125.             case 7778:
  126.             {
  127.                 ShowPlayerDialog(playerid, 7777, 1, "{FFFFFF}Code eingeben", "{FFFFFF}Gebe hier deinen Code ein.", "Weiter", "Abbrechen");
  128.             }
  129.         }
  130.     }
  131.     return 0;
  132. }
  133.        
  134.  
  135.  
  136. stock sscanf(string[], format[], {Float,_}:...)
  137. {
  138.     #if defined isnull
  139.         if (isnull(string))
  140.     #else
  141.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  142.     #endif
  143.         {
  144.             return format[0];
  145.         }
  146.     #pragma tabsize 4
  147.     new
  148.         formatPos = 0,
  149.         stringPos = 0,
  150.         paramPos = 2,
  151.         paramCount = numargs(),
  152.         delim = ' ';
  153.     while (string[stringPos] && string[stringPos] <= ' ')
  154.     {
  155.         stringPos++;
  156.     }
  157.     while (paramPos < paramCount && string[stringPos])
  158.     {
  159.         switch (format[formatPos++])
  160.         {
  161.             case '\0':
  162.             {
  163.                 return 0;
  164.             }
  165.             case 'i', 'd':
  166.             {
  167.                 new
  168.                     neg = 1,
  169.                     num = 0,
  170.                     ch = string[stringPos];
  171.                 if (ch == '-')
  172.                 {
  173.                     neg = -1;
  174.                     ch = string[++stringPos];
  175.                 }
  176.                 do
  177.                 {
  178.                     stringPos++;
  179.                     if ('0' <= ch <= '9')
  180.                     {
  181.                         num = (num * 10) + (ch - '0');
  182.                     }
  183.                     else
  184.                     {
  185.                         return -1;
  186.                     }
  187.                 }
  188.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  189.                 setarg(paramPos, 0, num * neg);
  190.             }
  191.             case 'h', 'x':
  192.             {
  193.                 new
  194.                     num = 0,
  195.                     ch = string[stringPos];
  196.                 do
  197.                 {
  198.                     stringPos++;
  199.                     switch (ch)
  200.                     {
  201.                         case 'x', 'X':
  202.                         {
  203.                             num = 0;
  204.                             continue;
  205.                         }
  206.                         case '0' .. '9':
  207.                         {
  208.                             num = (num << 4) | (ch - '0');
  209.                         }
  210.                         case 'a' .. 'f':
  211.                         {
  212.                             num = (num << 4) | (ch - ('a' - 10));
  213.                         }
  214.                         case 'A' .. 'F':
  215.                         {
  216.                             num = (num << 4) | (ch - ('A' - 10));
  217.                         }
  218.                         default:
  219.                         {
  220.                             return -1;
  221.                         }
  222.                     }
  223.                 }
  224.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  225.                 setarg(paramPos, 0, num);
  226.             }
  227.             case 'c':
  228.             {
  229.                 setarg(paramPos, 0, string[stringPos++]);
  230.             }
  231.             case 'f':
  232.             {
  233.  
  234.                 new changestr[16], changepos = 0, strpos = stringPos;
  235.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  236.                 {
  237.                     changestr[changepos++] = string[strpos++];
  238.                     }
  239.                 changestr[changepos] = '\0';
  240.                 setarg(paramPos,0,_:floatstr(changestr));
  241.             }
  242.             case 'p':
  243.             {
  244.                 delim = format[formatPos++];
  245.                 continue;
  246.             }
  247.             case '\'':
  248.             {
  249.                 new
  250.                     end = formatPos - 1,
  251.                     ch;
  252.                 while ((ch = format[++end]) && ch != '\'') {}
  253.                 if (!ch)
  254.                 {
  255.                     return -1;
  256.                 }
  257.                 format[end] = '\0';
  258.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  259.                 {
  260.                     if (format[end + 1])
  261.                     {
  262.                         return -1;
  263.                     }
  264.                     return 0;
  265.                 }
  266.                 format[end] = '\'';
  267.                 stringPos = ch + (end - formatPos);
  268.                 formatPos = end + 1;
  269.             }
  270.             case 'u':
  271.             {
  272.                 new
  273.                     end = stringPos - 1,
  274.                     id = 0,
  275.                     bool:num = true,
  276.                     ch;
  277.                 while ((ch = string[++end]) && ch != delim)
  278.                 {
  279.                     if (num)
  280.                     {
  281.                         if ('0' <= ch <= '9')
  282.                         {
  283.                             id = (id * 10) + (ch - '0');
  284.                         }
  285.                         else
  286.                         {
  287.                             num = false;
  288.                         }
  289.                     }
  290.                 }
  291.                 if (num && IsPlayerConnected(id))
  292.                 {
  293.                     setarg(paramPos, 0, id);
  294.                 }
  295.                 else
  296.                 {
  297.                     #if !defined foreach
  298.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  299.                         #define __SSCANF_FOREACH__
  300.                     #endif
  301.                     string[end] = '\0';
  302.                     num = false;
  303.                     new
  304.                         name[MAX_PLAYER_NAME];
  305.                     id = end - stringPos;
  306.                     foreach (Player, playerid)
  307.                     {
  308.                         GetPlayerName(playerid, name, sizeof (name));
  309.                         if (!strcmp(name, string[stringPos], true, id))
  310.                         {
  311.                             setarg(paramPos, 0, playerid);
  312.                             num = true;
  313.                             break;
  314.                         }
  315.                     }
  316.                     if (!num)
  317.                     {
  318.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  319.                     }
  320.                     string[end] = ch;
  321.                     #if defined __SSCANF_FOREACH__
  322.                         #undef foreach
  323.                         #undef __SSCANF_FOREACH__
  324.                     #endif
  325.                 }
  326.                 stringPos = end;
  327.             }
  328.             case 's', 'z':
  329.             {
  330.                 new
  331.                     i = 0,
  332.                     ch;
  333.                 if (format[formatPos])
  334.                 {
  335.                     while ((ch = string[stringPos++]) && ch != delim)
  336.                     {
  337.                         setarg(paramPos, i++, ch);
  338.                     }
  339.                     if (!i)
  340.                     {
  341.                         return -1;
  342.                     }
  343.                 }
  344.                 else
  345.                 {
  346.                     while ((ch = string[stringPos++]))
  347.                     {
  348.                         setarg(paramPos, i++, ch);
  349.                     }
  350.                 }
  351.                 stringPos--;
  352.                 setarg(paramPos, i, '\0');
  353.             }
  354.             default:
  355.             {
  356.                 continue;
  357.             }
  358.         }
  359.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  360.         {
  361.             stringPos++;
  362.         }
  363.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  364.         {
  365.             stringPos++;
  366.         }
  367.         paramPos++;
  368.     }
  369.     do
  370.     {
  371.         if ((delim = format[formatPos++]) > ' ')
  372.         {
  373.             if (delim == '\'')
  374.             {
  375.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  376.             }
  377.             else if (delim != 'z')
  378.             {
  379.                 return delim;
  380.             }
  381.         }
  382.     }
  383.     while (delim > ' ');
  384.     return 0;
  385. }
Advertisement
Add Comment
Please, Sign In to add comment