Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include <dini>
- #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
- #define DIALOG_LOGIN 3
- #define DIALOG_REG 4
- enum spieler_daten
- {
- wanted,
- skin,
- Float:lastx,Float:lasty,Float:lastz,
- eingeloggt,
- AdminLevel
- }
- new Spieler[MAX_PLAYERS][spieler_daten];
- public OnFilterScriptInit()
- {
- print("\n--------------------------------------");
- print(" Blank Filterscript by your name here");
- print("--------------------------------------\n");
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- //anderer Code
- dcmd(setlevel,8,cmdtext);
- dcmd(kick, 4, cmdtext);
- return 0;
- }
- public OnPlayerConnect(playerid)
- {
- new pname[MAX_PLAYERS],accFormat[128];
- GetPlayerName(playerid,pname,sizeof pname);
- format(accFormat,sizeof accFormat,"%s.datei",pname);
- if(fexist(accFormat)) ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter"); // Falls der Acc existiert
- else ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter"); // Falls er nicht existiert
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- new pname[MAX_PLAYERS],accFormat[128];
- GetPlayerName(playerid,pname,sizeof pname);
- format(accFormat,sizeof accFormat,"%s.datei",pname);
- if(fexist(accFormat) && Spieler[playerid][eingeloggt])
- {
- dini_IntSet(accFormat,"wanted",Spieler[playerid][wanted]);
- dini_IntSet(accFormat,"skin",Spieler[playerid][skin]);
- dini_FloatSet(accFormat,"lastx",Spieler[playerid][lastx]);
- dini_FloatSet(accFormat,"lasty",Spieler[playerid][lasty]);
- dini_FloatSet(accFormat,"lastz",Spieler[playerid][lastz]);
- dini_IntSet(accFormat,"Geld",GetPlayerMoney(playerid));
- dini_IntSet(accFormat,"Score",GetPlayerScore(playerid));
- dini_IntSet(accFormat, "AdminLevel", Spieler[playerid][AdminLevel]);
- }
- Spieler[playerid][eingeloggt] = 0;
- Spieler[playerid][wanted] = 0;
- Spieler[playerid][skin] = 0;
- Spieler[playerid][lastx] = (0.0);
- Spieler[playerid][lasty] = (0.0);
- Spieler[playerid][lastz] = (0.0);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- new pname[MAX_PLAYERS],accFormat[128];
- GetPlayerName(playerid,pname,sizeof pname);
- format(accFormat,sizeof accFormat,"%s.datei",pname);
- if(dini_Isset(accFormat,"lastx"))return SetPlayerPos(playerid,Spieler[playerid][lastx],Spieler[playerid][lasty],Spieler[playerid][lastz]);
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- new pname[MAX_PLAYERS],accFormat[128];
- GetPlayerName(playerid,pname,sizeof pname);
- format(accFormat,sizeof accFormat,"%s.datei",pname);
- if(response)
- {
- switch(dialogid) // dialogid auswählen
- {
- case DIALOG_LOGIN: // ID Login
- {
- if(!strlen(inputtext))
- {
- ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
- return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
- }
- if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
- {
- Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
- Spieler[playerid][skin] = dini_Int(accFormat,"skin");
- Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
- Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
- Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
- GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
- SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
- Spieler[playerid][AdminLevel] = dini_Int(accFormat, "AdminLevel"); // Das Level wird aus der Datei geladen
- Spieler[playerid][eingeloggt] = 1;
- SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
- }
- else
- {
- ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
- return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
- }
- }
- case DIALOG_REG: // ID Registrieren
- {
- if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
- {
- ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
- return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
- }
- dini_Create(accFormat);
- dini_Set(accFormat,"Passwort",inputtext);
- dini_IntSet(accFormat, "AdminLevel" , 0); // Das Adminlevel auf 0 setzen.
- Spieler[playerid][AdminLevel] = 0;
- Spieler[playerid][eingeloggt] = 1;
- SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
- }
- }
- }
- else
- {
- switch(dialogid)
- {
- case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
- case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
- }
- }
- return 1;
- }
- dcmd_setlevel(playerid,params[])
- {
- new pID, Level;
- if(sscanf(params, "ud",pID,Level))return SendClientMessage(playerid,0xFF0000FF,"Benutze: /setlevel [ID][Level]!"); //Falls nur /setlevel eingegeben wurde
- if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"Spielerid ist nicht vorhanden!");
- // Falls eine falsche ID angegeben wurde, wird 0 returnt ;)
- if(Spieler[playerid][AdminLevel] > 3) // Hier wird abgefragt ob das Level des Spielers der den Befehl eingegeben hat größer als 3 ist.
- {
- new adminstring[128],levelsetter[MAX_PLAYER_NAME], playername[MAX_PLAYER_NAME];
- GetPlayerName(pID,playername,sizeof playername);
- format(adminstring,sizeof(adminstring),"Admins/%s.sav",playername);
- GetPlayerName(playerid,levelsetter,sizeof(levelsetter));
- Spieler[pID][AdminLevel] = Level; //Hier wird die Levelvariable mit dem neu eingegebenen Level überschrieben
- dini_IntSet(adminstring,"AdminLevel",Level); // Und hier das neue Level in der Datei gespeichert.
- format(adminstring,sizeof(adminstring),"%s hat dein Level auf %d gesetzt!",levelsetter, Level);
- SendClientMessage(pID,0x33FF33FF, adminstring);
- }
- else return SendClientMessage(playerid, 0xFF0000FF, "Dein Level reicht nicht aus!");
- // Falls das Level nicht ausreicht wird dieser Text gesendet.
- return 1;
- }
- dcmd_kick(playerid,params[])
- {
- new pID, str[64];
- if(sscanf(params, "uz",pID,str))return SendClientMessage(playerid,0xFF0000FF,"USAGE: /kick ID Grund");
- //Falls nur /Kick eingegeben wurde
- if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit angegebener ID Online!");
- //Falsche Id
- if (pID == playerid)return SendClientMessage(playerid,0xFF0000FF,"Du kannst dich nicht selber kicken!");
- // Falls man seine eigene ID angegeben hat ;)
- if(Spieler[playerid][AdminLevel] > 0) // Wenn das Level größer ist als 0
- {
- new ThePlayer[MAX_PLAYER_NAME], str2[128];
- GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
- format(str2,sizeof(str2),"%s wurde vom Server gekickt!(Grund: %s)",ThePlayer,str[0] ? str : "<Kein Grund>");
- // Falls kein Grund angegeben wird als Grund <Kein Grund> angegeben
- SendClientMessageToAll(0xFF0000FF,str);
- Kick(pID);
- }
- else return SendClientMessage(playerid, 0xFF0000FF, "Dein Level reicht nicht aus!");
- return 1;
- }
- /*----------------------------------------------------------------------------*-
- Function:
- sscanf
- Params:
- string[] - String to extract parameters from.
- format[] - Parameter types to get.
- {
- Float,_
- }
- :... - Data return variables.
- Return:
- 0 - Successful, not 0 - fail.
- Notes:
- A fail is either insufficient variables to store the data or insufficient
- data for the format string - excess data is disgarded.
- A string in the middle of the input data is extracted as a single word, a
- string at the end of the data collects all remaining text.
- The format codes are:
- c - A character.
- d, i - An integer.
- h, x - A hex number (e.g. a colour).
- f - A float.
- s - A string.
- z - An optional string.
- pX - An additional delimiter where X is another character.
- '' - Encloses a litteral string to locate.
- u - User, takes a name, part of a name or an id and returns the id if they're connected.
- Now has IsNumeric integrated into the code.
- Added additional delimiters in the form of all whitespace and an
- optioanlly specified one in the format string.
- -*----------------------------------------------------------------------------*/
- stock sscanf(string[], format[], {Float,_}:...)
- {
- #if defined isnull
- if (isnull(string))
- #else
- if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
- #endif
- {
- return format[0];
- }
- #pragma tabsize 4
- new
- formatPos = 0,
- stringPos = 0,
- paramPos = 2,
- paramCount = numargs(),
- delim = ' ';
- while (string[stringPos] && string[stringPos] <= ' ')
- {
- stringPos++;
- }
- while (paramPos < paramCount && string[stringPos])
- {
- switch (format[formatPos++])
- {
- case '\0':
- {
- return 0;
- }
- case 'i', 'd':
- {
- new
- neg = 1,
- num = 0,
- ch = string[stringPos];
- if (ch == '-')
- {
- neg = -1;
- ch = string[++stringPos];
- }
- do
- {
- stringPos++;
- if ('0' <= ch <= '9')
- {
- num = (num * 10) + (ch - '0');
- }
- else
- {
- return -1;
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num * neg);
- }
- case 'h', 'x':
- {
- new
- num = 0,
- ch = string[stringPos];
- do
- {
- stringPos++;
- switch (ch)
- {
- case 'x', 'X':
- {
- num = 0;
- continue;
- }
- case '0' .. '9':
- {
- num = (num << 4) | (ch - '0');
- }
- case 'a' .. 'f':
- {
- num = (num << 4) | (ch - ('a' - 10));
- }
- case 'A' .. 'F':
- {
- num = (num << 4) | (ch - ('A' - 10));
- }
- default:
- {
- return -1;
- }
- }
- }
- while ((ch = string[stringPos]) > ' ' && ch != delim);
- setarg(paramPos, 0, num);
- }
- case 'c':
- {
- setarg(paramPos, 0, string[stringPos++]);
- }
- case 'f':
- {
- new changestr[16], changepos = 0, strpos = stringPos;
- while(changepos < 16 && string[strpos] && string[strpos] != delim)
- {
- changestr[changepos++] = string[strpos++];
- }
- changestr[changepos] = '\0';
- setarg(paramPos,0,_:floatstr(changestr));
- }
- case 'p':
- {
- delim = format[formatPos++];
- continue;
- }
- case '\'':
- {
- new
- end = formatPos - 1,
- ch;
- while ((ch = format[++end]) && ch != '\'') {}
- if (!ch)
- {
- return -1;
- }
- format[end] = '\0';
- if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
- {
- if (format[end + 1])
- {
- return -1;
- }
- return 0;
- }
- format[end] = '\'';
- stringPos = ch + (end - formatPos);
- formatPos = end + 1;
- }
- case 'u':
- {
- new
- end = stringPos - 1,
- id = 0,
- bool:num = true,
- ch;
- while ((ch = string[++end]) && ch != delim)
- {
- if (num)
- {
- if ('0' <= ch <= '9')
- {
- id = (id * 10) + (ch - '0');
- }
- else
- {
- num = false;
- }
- }
- }
- if (num && IsPlayerConnected(id))
- {
- setarg(paramPos, 0, id);
- }
- else
- {
- #if !defined foreach
- #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
- #define __SSCANF_FOREACH__
- #endif
- string[end] = '\0';
- num = false;
- new
- name[MAX_PLAYER_NAME];
- id = end - stringPos;
- foreach (Player, playerid)
- {
- GetPlayerName(playerid, name, sizeof (name));
- if (!strcmp(name, string[stringPos], true, id))
- {
- setarg(paramPos, 0, playerid);
- num = true;
- break;
- }
- }
- if (!num)
- {
- setarg(paramPos, 0, INVALID_PLAYER_ID);
- }
- string[end] = ch;
- #if defined __SSCANF_FOREACH__
- #undef foreach
- #undef __SSCANF_FOREACH__
- #endif
- }
- stringPos = end;
- }
- case 's', 'z':
- {
- new
- i = 0,
- ch;
- if (format[formatPos])
- {
- while ((ch = string[stringPos++]) && ch != delim)
- {
- setarg(paramPos, i++, ch);
- }
- if (!i)
- {
- return -1;
- }
- }
- else
- {
- while ((ch = string[stringPos++]))
- {
- setarg(paramPos, i++, ch);
- }
- }
- stringPos--;
- setarg(paramPos, i, '\0');
- }
- default:
- {
- continue;
- }
- }
- while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
- {
- stringPos++;
- }
- while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
- {
- stringPos++;
- }
- paramPos++;
- }
- do
- {
- if ((delim = format[formatPos++]) > ' ')
- {
- if (delim == '\'')
- {
- while ((delim = format[formatPos++]) && delim != '\'') {}
- }
- else if (delim != 'z')
- {
- return delim;
- }
- }
- }
- while (delim > ' ');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment