#include <a_samp>
#include <sscanf2>
#include <SII>
#include <zcmd>
enum PlayerInfo
{
Logged,//To check if the player is logged in
Level,//To check the player's admin level
}
new PInfo[MAX_PLAYERS][PlayerInfo];
if(Logged[playerid] == 1)
if(PInfo[playerid][Logged] == 1)
public OnPlayerConnect(playerid)
{
new file[64],PlayerName[25];//Creating a variable where we can store the file path, and the variable to store the player's name.
GetPlayerName(playerid,PlayerName,sizeof PlayerName);//Storing the players name in the PlayerName variable.
format(file,sizeof file,"Admin/%s.ini",PlayerName);//Storing the file path with the players name.
if(!fexist(file))//Checking if the file exists
{//Here goes the stuff you want to do if the user is not registered.
SendClientMessage(playerid,-4,"You are not registered! Please use /register <password>");
}
else
{//Here goes the stuff you want to do if the user is registered.
SendClientMessage(playerid,-4,"You are registered! Use /login <password>");
}
return 1;
}
CMD:register(playerid,params[])
{
if(PInfo[playerid][Logged] == 1) return SendClientMessage(playerid,-4,"You are already logged in!");//Checking if the player is logged in, if he is, it won't allow him to re-register
new password[23];//Creating a variable to store the password
if(sscanf(params,"s[23]",password)) return SendClientMessage(playerid,-1,"USAGE: /register <password>");//Here we're checking if the player inputs any password, if not, it will return to him a message saying the proper usage.
new file[64],PlayerName[24];//Creating a variable to store the file path, and a variable to store the players name.
GetPlayerName(playerid,PlayerName,sizeof PlayerName);
format(file,sizeof file,"Admin/%s.ini",PlayerName);
if(fexist(file)) return SendClientMessage(playerid,-4,"Somehow you're already registered!");//Checking if the player is already registered, again....
INI_Open(file);//Opening the file with SII include (with this function, if the file is not created, it will automatically create the file.)
INI_WriteString("Password",password);//Writing in the file the password the player has inputted.
INI_WriteInt("Level",PInfo[playerid][Level]);//Writing in the file, the variable of the admin level.
INI_Save();//After we write something to the file, we already have to use this to save the information in the player's file.
INI_Close();//"Closing the file", that means that we're not using it anymore :P
SendClientMessage(playerid,-1,"You have successfully registered!");
PInfo[playerid][Logged] = 1;//Setting the logged in variable to 1
return 1;
}
CMD:login(playerid,params[])
{
if(PInfo[playerid][Logged] == 1) return SendClientMessage(playerid,-4,"You are already logged in!");//Checking if the player is logged in, if he is, it won't allow him to login
new password[23],password2[23];//Creating a variable to store the password, and another one to store the password from the user's file.
if(sscanf(params,"s[23]",password)) return SendClientMessage(playerid,-1,"USAGE: /login <password>");//Here we're checking if the player inputs any password, if not, it will return to him a message saying the proper usage.
new file[64],PlayerName[24];//Creating a variable to store the file path, and a variable to store the players name.
GetPlayerName(playerid,PlayerName,sizeof PlayerName);
format(file,sizeof file,"Admin/%s.ini",PlayerName);
if(!fexist(file)) return SendClientMessage(playerid,-4,"Please use /register");//Checking if the player is not registered, again....
INI_Open(file);//Opening the file with SII include
INI_ReadString(password2,"Password");
if(strcmp(password,password2) != 0) return SendClientMessage(playerid,-4,"Wrong password!"),INI_Close();//Checking if he inputted the correct password, if not, retrieve him a message and closing the file;
PInfo[playerid][Level] = INI_ReadInt("Level");//Setting the admin level variable, to the one thats in his file.
INI_Close();//"Closing the file", that means that we're not using it anymore :P
SendClientMessage(playerid,-1,"You have been successfully logged in!");
PInfo[playerid][Logged] = 1;//Setting the logged in variable to 1
return 1;
}
CMD:kick(playerid,params[])
{
if(PInfo[playerid][Level] < 3) return SendClientMessage(playerid,-4,"You need to be level 3 to kick players");//Checking if the player has admin level 3, if not it sends him a message.
new id;//Creating a variable to store the selected id;
if(sscanf(params,"u",id)) return SendClientMessage(playerid,-1,"USAGE: /kick <id>");//Checking if the player has selected an id, other wise it sends him a message. We used the "u" specifier, because he can put a name or an id.
if(!IsPlayerConnected(id)) return SendClientMessage(playerid,-4,"That player is not connected!");//Checking if the selected user is connected or not.
Kick(id);
SendClientMessage(playerid,-1,"You have kicked the selected user!");
return 1;
}
CMD:setlevel(playerid,params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-4,"Only rcon admins can set admin levels!");//Checking if the player is rcon admin to set an admin level
new id, level;//Creating the id variable to store the selected id and a level variable for the chosen admin level.
if(sscanf(params,"ui",id,level)) return SendClientMessage(playerid,-1,"USAGE: /setlevel <id> <level>");//Check if the player inputted a username or id and a admin level.
if(!IsPlayerConnected(id)) return SendClientMessage(playerid,-4,"That player is not connected!");//Checking if the selected user is connected or not.
new file[64],PlayerName[24];//Creating a variable to store the file path, and a variable to store the players name.
GetPlayerName(id,PlayerName,sizeof PlayerName);//Retrieving the selected id's name,
format(file,sizeof file,"Admin/%s.ini",PlayerName);
if(!fexist(file)) return SendClientMessage(playerid,-4,"That player is not registered");//Checking if the player is not registered
INI_Open(file);//Opening the file with SII include
INI_WriteInt("Level",level);//Writing the line "Level" the selected admin level.
INI_Save();//Saving the file
INI_Close();//Closing the file
PInfo[id][Level] = level;
SendClientMessage(playerid,-1,"You have changed the selected user's admin level");
SendClientMessage(id,-1,"Your admin level has been changed");
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
PInfo[playerid][Logged] = 0;//Setting the logged in variable to 0.
return 1;
}
Well, you can update the tutorial and user Y_INI because I think is the fastest way, or maybe, you should create a MySQL version.
|
CMD:setlevel(playerid, params[])
{
if(!IsPlayerAdmin(playerid))
return SendClientMessage(playerid, -4, "Only rcon admins can set admin levels!"); //Checking if the player is rcon admin to set an admin level
new
id,
level; //Creating the id variable to store the selected id and a level variable for the chosen admin level.
if(sscanf(params, "ui", id, level))
return SendClientMessage(playerid, -1, "USAGE: /setlevel <id> <level>");//Check if the player inputted a username or id and a admin level.
if(!IsPlayerConnected(id))
return SendClientMessage(playerid, -4, "That player is not connected!"); //Checking if the selected user is connected or not.
new
file[64],
PlayerName[24]; //Creating a variable to store the file path, and a variable to store the players name.
GetPlayerName(id, PlayerName, sizeof PlayerName); //Retrieving the selected id's name,
format(file, sizeof file, "Admin/%s.ini", PlayerName);
if(!fexist(file))
return SendClientMessage(playerid, -4, "That player is not registered"); //Checking if the player is not registered
INI_Open(file); //Opening the file with SII include
INI_WriteInt("Level", level); //Writing the line "Level" the selected admin level.
INI_Save(); //Saving the file
INI_Close(); //Closing the file
PInfo[id][Level] = level;
SendClientMessage(playerid, -1, "You have changed the selected user's admin level");
SendClientMessage(id, -1, "Your admin level has been changed");
return 1;
}
Spacing helps, you know. I don't quite like code where everything is crammed together. The compiler ignores whitespace anyway. I'd rather space it out like this:
pawn Code:
|
It's way easier to overlook it though. If not for yourself, then at least for the people reading this tutorial. If I'd have to make a reply to this topic, it'd be this http://i.qkme.me/354sgw.jpg
|