Problem writing a simple login/register thing
#1

Hello, so I started scripting again.
So I am planning to remake one of my servers but this time withouth anything downloaded (especially the admin system), so I made a login / Register system based on a tutorial I saw here (I basically copied the code, but I know what's happening in the code so...)

So the problem is, when I connect, and I click spawn the game flashes and I get the message 'stay within the world boundaries', already deleted the addplayerclass and requestclass things, but still the same problem...

Here's the OnPlayerConnect code:
pawn Код:
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, COLOR_RED ,"You are not registered! Please use /register <password>");
    }
    else
    {//Here goes the stuff you want to do if the user is registered.
        SendClientMessage(playerid, COLOR_RED ,"You are registered! Use /login <password>");
    }
    return 1;
}
Do you know what could be wrong?
Thanks in advance
Reply
#2

Use AddPlayerClass in OnGameModeInit. Atleast one is needed.
Reply
#3

Still the same :/

I'm guessing the part where the file writing happens is the problem?
Reply
#4

Reset the boundaries then.
pawn Код:
// In OnPlayerConnect
SetPlayerWorldBounds( playerid, 20000.0000, -20000.0000, 20000.0000, -20000.0000 );
And use atleast 1 class.
Reply
#5

Put one class, reset the boundaries, but still the same problem.
Class not showing, and when clicking spawn it still says the boundaries thing...
Reply
#6

Show the rest of the code, I'm going to test it to my computer.
Reply
#7

pawn Код:
#include <a_samp>
#include <sscanf2>
#include <SII>
#include <zcmd>

#define COLOR_RED    0xFFFF00AA

enum PlayerInfo
{
    Logged,
    Level,
    Money,
    Score,
}
new PInfo[MAX_PLAYERS][PlayerInfo];

main()
{
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
}

public OnGameModeInit()
{
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnGameModeExit()
{
    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 OnPlayerConnect(playerid)
{
    SetPlayerWorldBounds( playerid, 20000.0000, -20000.0000, 20000.0000, -20000.0000 );
    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, COLOR_RED ,"You are not registered! Please use /register <password>");
    }
    else
    {//Here goes the stuff you want to do if the user is registered.
        SendClientMessage(playerid, COLOR_RED ,"You are registered! Use /login <password>");
    }
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    PInfo[playerid][Logged] = 0;

    new file[64],PlayerName[24];
    GetPlayerName(playerid,PlayerName,sizeof PlayerName);
    format(file,sizeof file,"Admin/%s.ini",PlayerName);
    PInfo[playerid][Score] = GetPlayerScore(playerid);
    PInfo[playerid][Money] = GetPlayerMoney(playerid);
    if(fexist(file))
    {
        INI_Open(file);
        INI_WriteInt("Money",PInfo[playerid][Money]);
        INI_WriteInt("Score",PInfo[playerid][Money]);
        INI_Close();
    }

    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

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.
    GivePlayerMoney(playerid, INI_ReadInt("Money"));
    SetPlayerScore(playerid, INI_ReadInt("Score"));
    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;
}

/*CMD:setcash(playerid,params[])
{
    new id, amount:
    if(sscanf(params,"ui",id,amount)) return SendClientMessage(playerid,-1,"USAGE: /setcash <id> <amount>");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,-4,"That player is not connected!");
    GivePlayerMoney(id,amount);
    SendClientMessage(id,-1,"You have been given some cash");
    return 1;
}*/


CMD:setmyscore(playerid,params[])
{
    SetPlayerScore(playerid, GetPlayerScore(playerid) + 1000);
    return 1;
}
Reply
#8

Wait, the problem is not caused by the code but by the includes... I started a new gm and added only the includes to the code, and I get the same problem...
Turns out it's the sscanf include that causes the problem...
So how do I fix it?
Reply
#9

Hmm, updating sscanf include? I never had such as problems with any of my includes.
Reply
#10

Maybe I installed it wrong?
After installing sscanf do I need to add a line 'plugin' in the server.cfg?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)