Guest User

Untitled

a guest
Oct 18th, 2010
348
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.25 KB | None | 0 0
  1. #include <a_samp>
  2. #include <dini>
  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 DIALOG_LOGIN 3
  5. #define DIALOG_REG 4
  6. enum spieler_daten
  7. {
  8.     wanted,
  9.     skin,
  10.     Float:lastx,Float:lasty,Float:lastz,
  11.     eingeloggt,
  12.     AdminLevel
  13. }
  14. new Spieler[MAX_PLAYERS][spieler_daten];
  15.  
  16. public OnFilterScriptInit()
  17. {
  18.     print("\n--------------------------------------");
  19.     print(" Blank Filterscript by your name here");
  20.     print("--------------------------------------\n");
  21.     return 1;
  22. }
  23. public OnPlayerRequestClass(playerid, classid)
  24. {
  25.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  26.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  27.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  28.     return 1;
  29. }
  30.  
  31. public OnPlayerCommandText(playerid, cmdtext[])
  32. {
  33.     //anderer Code
  34.     dcmd(setlevel,8,cmdtext);
  35.     dcmd(kick, 4, cmdtext);
  36.     return 0;
  37. }
  38.  
  39. public OnPlayerConnect(playerid)
  40. {
  41.     new pname[MAX_PLAYERS],accFormat[128];
  42.     GetPlayerName(playerid,pname,sizeof pname);
  43.     format(accFormat,sizeof accFormat,"%s.datei",pname);
  44.     if(fexist(accFormat)) ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter"); // Falls der Acc existiert
  45.     else ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter"); // Falls er nicht existiert
  46.     return 1;
  47. }
  48.  
  49. public OnPlayerDisconnect(playerid, reason)
  50. {
  51.     new pname[MAX_PLAYERS],accFormat[128];
  52.     GetPlayerName(playerid,pname,sizeof pname);
  53.     format(accFormat,sizeof accFormat,"%s.datei",pname);
  54.     if(fexist(accFormat) && Spieler[playerid][eingeloggt])
  55.     {
  56.         dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
  57.         dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
  58.         dini_FloatSet(accFormat,"lastx",Spieler[playerid][lastx]);
  59.         dini_FloatSet(accFormat,"lasty",Spieler[playerid][lasty]);
  60.         dini_FloatSet(accFormat,"lastz",Spieler[playerid][lastz]);
  61.         dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
  62.         dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
  63.         dini_IntSet(accFormat, "AdminLevel", Spieler[playerid][AdminLevel]);
  64.     }
  65.     Spieler[playerid][eingeloggt] = 0;
  66.     Spieler[playerid][wanted] = 0;
  67.     Spieler[playerid][skin] = 0;
  68.     Spieler[playerid][lastx] = (0.0);
  69.     Spieler[playerid][lasty] = (0.0);
  70.     Spieler[playerid][lastz] = (0.0);
  71.     return 1;
  72. }
  73.  
  74. public OnPlayerSpawn(playerid)
  75. {
  76.     new pname[MAX_PLAYERS],accFormat[128];
  77.     GetPlayerName(playerid,pname,sizeof pname);
  78.     format(accFormat,sizeof accFormat,"%s.datei",pname);
  79.     if(dini_Isset(accFormat,"lastx"))return SetPlayerPos(playerid,Spieler[playerid][lastx],Spieler[playerid][lasty],Spieler[playerid][lastz]);
  80.     return 1;
  81. }
  82. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  83. {
  84.     new pname[MAX_PLAYERS],accFormat[128];
  85.     GetPlayerName(playerid,pname,sizeof pname);
  86.     format(accFormat,sizeof accFormat,"%s.datei",pname);
  87.     if(response)
  88.     {
  89.         switch(dialogid) // dialogid auswählen
  90.         {
  91.             case DIALOG_LOGIN: // ID Login
  92.             {
  93.                 if(!strlen(inputtext))
  94.                 {
  95.                     ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
  96.                     return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
  97.                 }
  98.                 if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
  99.                 {
  100.                     Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
  101.                     Spieler[playerid][skin] = dini_Int(accFormat,"skin");
  102.                     Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
  103.                     Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
  104.                     Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
  105.                     GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
  106.                     SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
  107.                     Spieler[playerid][AdminLevel] = dini_Int(accFormat, "AdminLevel"); // Das Level wird aus der Datei geladen
  108.                     Spieler[playerid][eingeloggt] = 1;
  109.                     SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
  110.                 }
  111.                 else
  112.                 {
  113.                     ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
  114.                     return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
  115.                 }
  116.             }
  117.             case DIALOG_REG: // ID Registrieren
  118.             {
  119.                 if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
  120.                 {
  121.                         ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
  122.                         return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
  123.                 }
  124.                 dini_Create(accFormat);
  125.                 dini_Set(accFormat,"Passwort",inputtext);
  126.                 dini_IntSet(accFormat, "AdminLevel" , 0); // Das Adminlevel auf 0 setzen.
  127.                 Spieler[playerid][AdminLevel] = 0;
  128.                 Spieler[playerid][eingeloggt] = 1;
  129.                 SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
  130.             }
  131.         }
  132.     }
  133.     else
  134.     {
  135.         switch(dialogid)
  136.         {
  137.             case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
  138.             case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
  139.         }
  140.     }
  141.     return 1;
  142. }
  143.  
  144. dcmd_setlevel(playerid,params[])
  145. {
  146.     new pID, Level;
  147.     if(sscanf(params, "ud",pID,Level))return SendClientMessage(playerid,0xFF0000FF,"Benutze: /setlevel [ID][Level]!"); //Falls nur /setlevel eingegeben wurde
  148.     if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"Spielerid ist nicht vorhanden!");
  149.     // Falls eine falsche ID angegeben wurde, wird 0 returnt ;)
  150.     if(Spieler[playerid][AdminLevel] > 3) // Hier wird abgefragt ob das Level des Spielers der den Befehl eingegeben hat größer als 3 ist.
  151.     {
  152.         new adminstring[128],levelsetter[MAX_PLAYER_NAME], playername[MAX_PLAYER_NAME];
  153.         GetPlayerName(pID,playername,sizeof playername);
  154.         format(adminstring,sizeof(adminstring),"Admins/%s.sav",playername);
  155.         GetPlayerName(playerid,levelsetter,sizeof(levelsetter));
  156.         Spieler[pID][AdminLevel] = Level; //Hier wird die Levelvariable mit dem neu eingegebenen Level überschrieben
  157.         dini_IntSet(adminstring,"AdminLevel",Level); // Und hier das neue Level in der Datei gespeichert.
  158.         format(adminstring,sizeof(adminstring),"%s hat dein Level auf %d gesetzt!",levelsetter, Level);
  159.         SendClientMessage(pID,0x33FF33FF, adminstring);
  160.     }
  161.     else return SendClientMessage(playerid, 0xFF0000FF, "Dein Level reicht nicht aus!");
  162.      // Falls das Level nicht ausreicht wird dieser Text gesendet.
  163.     return 1;
  164. }
  165.  
  166. dcmd_kick(playerid,params[])
  167. {
  168.     new pID, str[64];
  169.     if(sscanf(params, "uz",pID,str))return SendClientMessage(playerid,0xFF0000FF,"USAGE: /kick ID Grund");
  170.     //Falls nur /Kick eingegeben wurde
  171.     if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit angegebener ID Online!");
  172.     //Falsche Id
  173.     if (pID == playerid)return SendClientMessage(playerid,0xFF0000FF,"Du kannst dich nicht selber kicken!");
  174.     // Falls man seine eigene ID angegeben hat ;)
  175.     if(Spieler[playerid][AdminLevel] > 0) // Wenn das Level größer ist als 0
  176.     {
  177.         new ThePlayer[MAX_PLAYER_NAME], str2[128];
  178.         GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
  179.         format(str2,sizeof(str2),"%s wurde vom Server gekickt!(Grund: %s)",ThePlayer,str[0] ? str : "<Kein Grund>");
  180.         // Falls kein Grund angegeben wird als Grund <Kein Grund> angegeben
  181.         SendClientMessageToAll(0xFF0000FF,str);
  182.         Kick(pID);
  183.     }
  184.     else return SendClientMessage(playerid, 0xFF0000FF, "Dein Level reicht nicht aus!");
  185.     return 1;
  186. }
  187. /*----------------------------------------------------------------------------*-
  188. Function:
  189. sscanf
  190. Params:
  191. string[] - String to extract parameters from.
  192. format[] - Parameter types to get.
  193.  
  194. {
  195.     Float,_
  196. }
  197. :... - Data return variables.
  198. Return:
  199. 0 - Successful, not 0 - fail.
  200. Notes:
  201. A fail is either insufficient variables to store the data or insufficient
  202. data for the format string - excess data is disgarded.
  203.  
  204. A string in the middle of the input data is extracted as a single word, a
  205. string at the end of the data collects all remaining text.
  206.  
  207. The format codes are:
  208.  
  209. c - A character.
  210. d, i - An integer.
  211. h, x - A hex number (e.g. a colour).
  212. f - A float.
  213. s - A string.
  214. z - An optional string.
  215. pX - An additional delimiter where X is another character.
  216. '' - Encloses a litteral string to locate.
  217. u - User, takes a name, part of a name or an id and returns the id if they're connected.
  218.  
  219. Now has IsNumeric integrated into the code.
  220.  
  221. Added additional delimiters in the form of all whitespace and an
  222. optioanlly specified one in the format string.
  223. -*----------------------------------------------------------------------------*/
  224. stock sscanf(string[], format[], {Float,_}:...)
  225. {
  226.     #if defined isnull
  227.         if (isnull(string))
  228.     #else
  229.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  230.     #endif
  231.         {
  232.             return format[0];
  233.         }
  234.     #pragma tabsize 4
  235.     new
  236.         formatPos = 0,
  237.         stringPos = 0,
  238.         paramPos = 2,
  239.         paramCount = numargs(),
  240.         delim = ' ';
  241.     while (string[stringPos] && string[stringPos] <= ' ')
  242.     {
  243.         stringPos++;
  244.     }
  245.     while (paramPos < paramCount && string[stringPos])
  246.     {
  247.         switch (format[formatPos++])
  248.         {
  249.             case '\0':
  250.             {
  251.                 return 0;
  252.             }
  253.             case 'i', 'd':
  254.             {
  255.                 new
  256.                     neg = 1,
  257.                     num = 0,
  258.                     ch = string[stringPos];
  259.                 if (ch == '-')
  260.                 {
  261.                     neg = -1;
  262.                     ch = string[++stringPos];
  263.                 }
  264.                 do
  265.                 {
  266.                     stringPos++;
  267.                     if ('0' <= ch <= '9')
  268.                     {
  269.                         num = (num * 10) + (ch - '0');
  270.                     }
  271.                     else
  272.                     {
  273.                         return -1;
  274.                     }
  275.                 }
  276.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  277.                 setarg(paramPos, 0, num * neg);
  278.             }
  279.             case 'h', 'x':
  280.             {
  281.                 new
  282.                     num = 0,
  283.                     ch = string[stringPos];
  284.                 do
  285.                 {
  286.                     stringPos++;
  287.                     switch (ch)
  288.                     {
  289.                         case 'x', 'X':
  290.                         {
  291.                             num = 0;
  292.                             continue;
  293.                         }
  294.                         case '0' .. '9':
  295.                         {
  296.                             num = (num << 4) | (ch - '0');
  297.                         }
  298.                         case 'a' .. 'f':
  299.                         {
  300.                             num = (num << 4) | (ch - ('a' - 10));
  301.                         }
  302.                         case 'A' .. 'F':
  303.                         {
  304.                             num = (num << 4) | (ch - ('A' - 10));
  305.                         }
  306.                         default:
  307.                         {
  308.                             return -1;
  309.                         }
  310.                     }
  311.                 }
  312.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  313.                 setarg(paramPos, 0, num);
  314.             }
  315.             case 'c':
  316.             {
  317.                 setarg(paramPos, 0, string[stringPos++]);
  318.             }
  319.             case 'f':
  320.             {
  321.  
  322.                 new changestr[16], changepos = 0, strpos = stringPos;
  323.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  324.                 {
  325.                     changestr[changepos++] = string[strpos++];
  326.                     }
  327.                 changestr[changepos] = '\0';
  328.                 setarg(paramPos,0,_:floatstr(changestr));
  329.             }
  330.             case 'p':
  331.             {
  332.                 delim = format[formatPos++];
  333.                 continue;
  334.             }
  335.             case '\'':
  336.             {
  337.                 new
  338.                     end = formatPos - 1,
  339.                     ch;
  340.                 while ((ch = format[++end]) && ch != '\'') {}
  341.                 if (!ch)
  342.                 {
  343.                     return -1;
  344.                 }
  345.                 format[end] = '\0';
  346.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  347.                 {
  348.                     if (format[end + 1])
  349.                     {
  350.                         return -1;
  351.                     }
  352.                     return 0;
  353.                 }
  354.                 format[end] = '\'';
  355.                 stringPos = ch + (end - formatPos);
  356.                 formatPos = end + 1;
  357.             }
  358.             case 'u':
  359.             {
  360.                 new
  361.                     end = stringPos - 1,
  362.                     id = 0,
  363.                     bool:num = true,
  364.                     ch;
  365.                 while ((ch = string[++end]) && ch != delim)
  366.                 {
  367.                     if (num)
  368.                     {
  369.                         if ('0' <= ch <= '9')
  370.                         {
  371.                             id = (id * 10) + (ch - '0');
  372.                         }
  373.                         else
  374.                         {
  375.                             num = false;
  376.                         }
  377.                     }
  378.                 }
  379.                 if (num && IsPlayerConnected(id))
  380.                 {
  381.                     setarg(paramPos, 0, id);
  382.                 }
  383.                 else
  384.                 {
  385.                     #if !defined foreach
  386.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  387.                         #define __SSCANF_FOREACH__
  388.                     #endif
  389.                     string[end] = '\0';
  390.                     num = false;
  391.                     new
  392.                         name[MAX_PLAYER_NAME];
  393.                     id = end - stringPos;
  394.                     foreach (Player, playerid)
  395.                     {
  396.                         GetPlayerName(playerid, name, sizeof (name));
  397.                         if (!strcmp(name, string[stringPos], true, id))
  398.                         {
  399.                             setarg(paramPos, 0, playerid);
  400.                             num = true;
  401.                             break;
  402.                         }
  403.                     }
  404.                     if (!num)
  405.                     {
  406.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  407.                     }
  408.                     string[end] = ch;
  409.                     #if defined __SSCANF_FOREACH__
  410.                         #undef foreach
  411.                         #undef __SSCANF_FOREACH__
  412.                     #endif
  413.                 }
  414.                 stringPos = end;
  415.             }
  416.             case 's', 'z':
  417.             {
  418.                 new
  419.                     i = 0,
  420.                     ch;
  421.                 if (format[formatPos])
  422.                 {
  423.                     while ((ch = string[stringPos++]) && ch != delim)
  424.                     {
  425.                         setarg(paramPos, i++, ch);
  426.                     }
  427.                     if (!i)
  428.                     {
  429.                         return -1;
  430.                     }
  431.                 }
  432.                 else
  433.                 {
  434.                     while ((ch = string[stringPos++]))
  435.                     {
  436.                         setarg(paramPos, i++, ch);
  437.                     }
  438.                 }
  439.                 stringPos--;
  440.                 setarg(paramPos, i, '\0');
  441.             }
  442.             default:
  443.             {
  444.                 continue;
  445.             }
  446.         }
  447.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  448.         {
  449.             stringPos++;
  450.         }
  451.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  452.         {
  453.             stringPos++;
  454.         }
  455.         paramPos++;
  456.     }
  457.     do
  458.     {
  459.         if ((delim = format[formatPos++]) > ' ')
  460.         {
  461.             if (delim == '\'')
  462.             {
  463.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  464.             }
  465.             else if (delim != 'z')
  466.             {
  467.                 return delim;
  468.             }
  469.         }
  470.     }
  471.     while (delim > ' ');
  472.     return 0;
  473. }
Advertisement
Add Comment
Please, Sign In to add comment