( Simple ) Account System.

Started by Gito Baloch, Nov 11, 2022, 01:42 PM

Previous topic - Next topic

Gito Baloch

CLASS.
[noae][noae][noae][noae]class PlayerStats
{


Reg = false;
Log = false;
Password = null;

Kills = 0;
Deaths = 0;

Money = 0;
Bank = 0;
Level = 0;

IP = null;
UID = null;
AutoLog = false;
}
[/noae][/noae][/noae][/noae]

onScriptLoad.

[noae][noae][noae][noae]stats <- array(GetMaxPlayers(), null);

db <- ConnectSQL("dataBase.db");
QuerySQL(db, "CREATE TABLE IF NOT EXISTS Account( Name TEXT, IP VARCHAR(15), Pass VARCHAR(255), Level NUMERIC DEFAULT 1, TimeReg VARCHAR(255) )");
QuerySQL(db, "CREATE TABLE IF NOT EXISTS Stats( Name TEXT, Money NUMERIC, Bank NUMERIC, Kills NUMERIC, Deaths NUMERIC ) ");
[/noae][/noae][/noae][/noae]

onPlayerJoin.
[noae][noae][noae][noae]    stats[player.ID] = PlayerStats();
    accInfo(player);
[/noae][/noae][/noae][/noae]


onPlayerPart.
[noae][noae][noae][noae]    if(stats[player.ID].Reg) {
     QuerySQL( db, "UPDATE Account SET Level='"+stats[ player.ID ].Level+"'WHERE Name LIKE '" + player.Name + "'" );
     QuerySQL( db, "UPDATE Stats SET Money='"+stats[ player.ID ].Money+"', Bank='"+stats[ player.ID ].Bank+"', Kills='"+stats[ player.ID ].Kills+"', Deaths='"+stats[ player.ID ].Deaths+"' WHERE Name LIKE '" + player.Name + "'" );
     }
[/noae][/noae][/noae][/noae]

accInfo function.
[noae][noae]function accInfo(player)
{
local q = QuerySQL(db, "SELECT * FROM Account WHERE Name = '" + escapeSQLString(player.Name) + "'");
if(q)
{
stats[ player.ID ].IP = GetSQLColumnData(q, 1);
stats[ player.ID ].Password = GetSQLColumnData(q, 2);
stats[ player.ID ].Level = GetSQLColumnData(q, 3);
}
local q = QuerySQL(db, "SELECT * FROM Stats WHERE Name = '" + escapeSQLString(player.Name) + "'");
if(q) {
stats[ player.ID ].Money = GetSQLColumnData(q, 1);
stats[ player.ID ].Bank = GetSQLColumnData(q, 2);
stats[ player.ID ].Kills = GetSQLColumnData(q, 3);
stats[ player.ID ].Deaths = GetSQLColumnData(q, 4);
stats[ player.ID ].Reg = true;
}

 if (player.IP == stats[ player.ID ].IP)
 {
    MessagePlayer("[#ffffff]"+player.Name+" [#1ABC9C]has auto-logged into the server.", player);
    player.Cash = stats[ player.ID ].Money;
    stats[ player.ID ].Log = true;
   }
       if (stats[player.ID].Reg == true && !stats[player.ID].Log)
       {
    stats[ player.ID ].Log = false;
        stats[ player.ID ].AutoLog = false;
       MessagePlayer("[#E74C3C]Your account is not logged-in, please type [#ffffff]/login <password> [#E74C3C]to access the account.",player);
   }
if (stats[player.ID].Reg == false && stats[player.ID].Log == false)
{
MessagePlayer("[#E74C3C]Your account is not registered. please type [#ffffff]/register <password>[#E74C3C] to access the server.",player);
}
}
[/noae][/noae][/noae][/noae]

Commands.
[noae][noae][noae][noae]if (cmd =="register")
{
        if(!text) MessagePlayer("[#1ABC9C]/register <your password>",player);
        else if (stats[player.ID].Reg == true) MessagePlayer("[#E74C3C]Your account is already registered.",player);
        else {
local password = SHA256(text);
        local now = date();
QuerySQL(db,"INSERT INTO Account(Name, IP, Pass, Level, TimeReg) VALUES('"+escapeSQLString(player.Name)+"', '"+player.IP+"', '"+password+"', '"+0+"', '"+now.year+"-"+now.month+"-"+now.day+"' ) ");
        QuerySQL(db,"INSERT INTO Stats(Name, Money, Bank, Kills, Deaths) VALUES('"+escapeSQLString(player.Name)+"','"+0+"','"+0+"','"+0+"', '"+0+"') ");
        {
            stats[player.ID].Reg = true;
            stats[player.ID].Log = true;
            stats[player.ID].Level = 1;
            stats[player.ID].Money = 0;
            stats[player.ID].Bank = 0;
            stats[player.ID].Kills = 0;
            stats[player.ID].Deaths = 0;
            stats[player.ID].AutoLog = true;
            accInfo(player);
Message(""+player.Name+" [#1ABC9C]has registered in the server.");
        }
}
}

else if (cmd == "login")
{
                if(!text) MessagePlayer("[#1ABC9C]/login <your password>",player);
                else if (stats[player.ID].Reg == false) MessagePlayer("[#E74C3C]Your account is not registered.",player);
                else if (stats[player.ID].Log == true) MessagePlayer("[#E74C3C]Your account is already logged-in.",player);
else {
local q = QuerySQL(db, "SELECT * FROM Account WHERE Name = '" + escapeSQLString(player.Name) + "'");
    if (q)
    {
        if ( SHA256(text) !=  GetSQLColumnData(q, 2)) MessagePlayer( "The password you entered is invalid.", player );
        else {
            stats[player.ID].Log = true;
Message(""+player.Name+" [#1ABC9C]has logged-in to the server.");
}
    }
    }
    }
 else if (cmd == "stats")
 {
        if (stats[player.ID].Reg == false) MessagePlayer("[#E74C3C]Your account is not registered.",player);
        else if (stats[player.ID].Reg == true && stats[player.ID].Log == false) MessagePlayer("[#E74C3C]Your account is not logged-in.",player);
                else {
MessagePlayer("[#1ABC9C]Kills: "+stats[player.ID].Kills+" | Deaths: "+stats[player.ID].Deaths+" | Money: $"+stats[player.ID].Money+" | Bank: $"+stats[player.ID].Bank+" | Level: "+stats[player.ID].Level+" ",player);
}
 }

 else if (cmd == "changepass")
 {
                if(!text) MessagePlayer("[#1ABC9C]/changepass <new password>",player);
                else if (stats[player.ID].Reg == false) MessagePlayer("[#E74C3C]Your account is not registered.",player);
                else if (stats[player.ID].Reg == true && stats[player.ID].Log == false) MessagePlayer("[#E74C3C]Your account is not logged-in.",player);
                else {
          local password = SHA256(text);
 QuerySQL(db, "UPDATE Account SET Pass = '" + password + "' WHERE Name = '" + escapeSQLString(player.Name) + "'");
          MessagePlayer("[#1ABC9C]Your password has been changed to: [#ffffff]"+text+"[#1ABC9C] (DO NOT FORGET IT)",player);
                }
 }
[/noae][/noae][/noae][/noae]
Commands - (4): /register | /login | /changepass | /stats

onPlayerDeath.
[noae][noae][noae][noae]        stats[player.ID].Deaths++;
[/noae][/noae][/noae][/noae]

onPlayerKill.
[noae][noae][noae][noae]    stats[player.ID].Deaths++;
    stats[killer.ID].Kills++;
[/noae][/noae][/noae][/noae]

onPlayerRequestSpawn.
[noae][noae][noae][noae] if(!stats[player.ID].Reg) { MessagePlayer([#E74C3C]Your account is not registered. please type [#ffffff]/register <password>[#E74C3C] to access the server.",player); return 0; }
     if(stats[player.ID].Reg && stats[player.ID].Log == false) {  MessagePlayer("[#E74C3C]Your account is not logged-in, please type [#ffffff]/login <password> [#E74C3C]to access the account.",player); return 0; }
[/noae][/noae][/noae][/noae]

Hello guys so it's me again ;D first time trying to make my own account system it might have alot of bugs if you encounter any so please let me know. The script is tested btw.


Programming is the language I speak, the world I shape, and the future I code

gamingpro


gamingpro


GasanZ07

hello brother
This system is very good and works, but there is a very small detail that you forgot. And I fixed this error. I use this system and it took me 2 minutes to realize the error. Here is the corrected version:

function onPlayerRequestSpawn( player )
{
if(!stats[player.ID].Reg) { MessagePlayer("[#E74C3C]Your account is not registered. please type [#ffffff]/register <password>[#E74C3C] to access the server.",player) ; return 0; }
if(stats[player.ID].Reg && stats[player.ID].Log == false) { MessagePlayer("[#E74C3C]Your account is not logged-in, please type [#ffffff]/login <password> [#E74C3C]to access the account.",player); return 0; }
else return 1;
}