Updated use This
Place this on the top of the main.nut
const blue = "[#4682B4]";
const blank = "[#ffffff]";
function onScriptLoad()
{
LoadModule( "sq_lite" );
database <- ConnectSQL( "Data.sqlite" );
QuerySQL( database, "CREATE TABLE IF NOT EXISTS Banned( ban_nick TEXT, ban_ip TEXT, ban_time TEXT, ban_expire TEXT, ban_expireratio TEXT, ban_admin TEXT, ban_reason TEXT )" );
print("[RBAN] Rocky's Ban system Loaded (v0.1)");
}
function onPlayerJoin( player )
{
Banned( player );
}
function onPlayerCommand( player, cmd, text )
{
cmd = cmd.tolower();
if ( cmd == "tempban" )
{
local txt_Split;
if( !text ) MessagePlayer(""+blue+"[RBAN] "+blank+"tempban <player> <day:hour:min> <reason>", player);
else
{
if( NumTok( text, " " ) == 2 )
{
txt_Split = split( text, " " );
local plr = FindPlayer( txt_Split[ 0 ] ), expire = txt_Split[ 1 ];
if( plr ) AddBan( player, plr, expire );
else MessagePlayer(""+blue+"[RBAN] "+blank+"No such player.", player );
}
else if( NumTok( text, " " ) >= 3 )
{
txt_Split = split( text, " " );
local plr = FindPlayer( txt_Split[ 0 ] ), expire = txt_Split[ 1 ], reason = txt_Split[ 2 ];
if( plr ) AddBan( player, plr, expire, reason );
else MessagePlayer(""+blue+"[RBAN] "+blank+" No such player.", player );
}
else MessagePlayer(""+blue+"[RBAN] "+blank+"tempban <player> <day:hour:min> <reason>", player);
}
}
else MessagePlayer(""+blue+"[CMD] "+blank+"Invalid command",player)
if ( text == null ) text = "NOTHING";
return 1;
}
function AddBan( admin, player, expire, reason = "Not Specified" )
{
//Equation = (DAYS*24*60*60) + (HOUR*60*60) + (MIN*60)
local ban_Expire = split( expire, ":" ); //days:hours:minutes
if( NumTok( expire, ":" ) == 3 )
{
if( IsNum( ban_Expire[ 0 ] ) && IsNum( ban_Expire[ 1 ] ) && IsNum( ban_Expire[ 2 ] ) )
{
if( ban_Expire[ 0 ].tointeger() <= 31 && ban_Expire[ 1 ].tointeger() <= 24 && ban_Expire[ 2 ].tointeger() <= 60 )
{
local ban_Expires = ( (ban_Expire[ 0 ].tointeger()*24*60*60) + (ban_Expire[ 1 ].tointeger()*60*60) + (ban_Expire[ 2 ].tointeger()*60) ),
Calc = ban_Expire[ 0 ] + " Day(s), " + ban_Expire[ 1 ] + " Hour(s), " + ban_Expire[ 2 ] + " Minute(s).",
query = QuerySQL( database, "INSERT INTO Banned( ban_nick, ban_ip, ban_time, ban_expire, ban_expireratio, ban_admin, ban_reason ) VALUES ( '"+ player.Name.tostring() +"','"+ player.IP.tostring() +"','"+ time().tostring() +"', '"+ ban_Expires.tostring() +"', '" + expire.tostring() + "', '"+ admin.Name.tostring() +"', '"+ reason.tostring() +"')");
Message("[#FF1111][BANNED] "+blank+"Admin "+blue+""+admin.Name+" "+blank+" Banned [#FF1111]"+player.Name+" "+blue+" "+blank+"Time: [#ac6000]"+Calc+"")
MessagePlayer(""+blue+"[RBAN] "+blank+"You have been temporarily banned by " + admin.Name, player);
MessagePlayer(""+blue+"[RBAN] "+blank+"Your ban is set to expire in: " + Calc, player);
KickPlayer( player );
}
}
else MessagePlayer(""+blue+"[RBAN] "+blank+"Time should be numeric (day:hour:min)", admin );
}
else MessagePlayer(""+blue+"[RBAN] "+blank+" Wrong format, day:hour:min (Numeric)", admin );
}
function Banned( player )
{
local query = QuerySQL( database, "SELECT * FROM Banned WHERE ban_nick='" + player.Name + "' COLLATE NOCASE" ), Ip = player.IP.tostring();
if( query == null ) return print("player no banned");
else if( GetSQLColumnData( query, 0 ) )
{
if( ( time() - GetSQLColumnData( query, 2 ).tointeger() ) >= GetSQLColumnData( query, 3 ).tointeger() )
{
local query2 = QuerySQL( database, "DELETE FROM Banned WHERE ban_nick='" + player.Name.tostring() + "'" );
MessagePlayer(""+blue+"[RBAN] "+blank+"Your ban has been expired.", player );
MessagePlayer(""+blue+"[RBAN] "+blank+"Stick to the rules or you will get permanently banned.", player );
}
else
{
local Time_Left = TimeRem( GetSQLColumnData( query, 2 ).tointeger(), GetSQLColumnData( query, 4 ) );
//local splitban = split( GetSQLColumnData( query, 4 ), ":" ), Calc = splitban[ 0 ] + " Day(s), " + splitban[ 1 ] + " Hour(s), " + splitban[ 2 ] + " Minute(s).";
Message("[#FF1111][BANNED] "+blue+""+player.Name+" "+blank+"Is Banned. Time: [#FF1111]"+Time_Left)
MessagePlayer(""+blue+"[RBAN] "+blank+"Your ban has not expired.", player );
MessagePlayer(""+blue+"[RBAN] "+blank+" Your ban is set to expire in. " + Time_Left, player );
KickPlayer( player );
}
}
else if( GetSQLColumnData( QuerySQL( database, "SELECT * FROM Banned WHERE ban_ip='" + Ip + "'" ), 0 ) )
{
local query = QuerySQL( database, "SELECT * FROM Banned WHERE ban_ip='" + Ip + "'" );
if( ( time() - GetSQLColumnData( query, 2 ).tointeger() ) >= GetSQLColumnData( query, 3 ).tointeger() )
{
local query2 = QuerySQL( database, "DELETE FROM Banned WHERE ban_ip='" + player.IP.tostring() + "'" );
FreeSQLQuery( query2 );
MessagePlayer(""+blue+"[RBAN] "+blank+"Your ban has been expired.", player );
MessagePlayer(""+blue+"[RBAN] "+blank+"Stick to the rules or you will get permanently banned.", player );
}
else
{
local Time_Left = TimeRem( GetSQLColumnData( query, 2 ).tointeger(), GetSQLColumnData( query, 4 ).tostring() );
//local splitban = split( GetSQLColumnData( query, 4 ), ":" ), Calc = splitban[ 0 ] + " Day(s), " + splitban[ 1 ] + " Hour(s), " + splitban[ 2 ] + " Minute(s).";
Message("[#FF1111][BANNED] "+blue+""+player.Name+" "+blank+"Is Banned. Time: [#FF1111]"+Time_Left)
MessagePlayer(""+blue+"[RBAN] "+blank+"Your ban has not expired.", player );
MessagePlayer(""+blue+"[RBAN] "+blank+"Your ban is set to expire in. " + Time_Left , player );
KickPlayer( player );
}
}
FreeSQLQuery( query );
}
function TimeRem( bantime, banratio )
{
local ban_current = time()-bantime, sp = split(banratio,":"), ban_Days, ban_Hours, ban_Minutes,
ban_Day = sp[ 0 ].tointeger(),
ban_Hour = sp[ 1 ].tointeger(),
ban_Minute = sp[ 2 ].tointeger();
ban_Days = ban_current/86400;
ban_current = ban_current%86400;
ban_Hours = ban_current/3600;
ban_current = ban_current%3600;
ban_Minutes = ban_current/60;
ban_current = ban_current%60;
print( ban_Days + ":" + ban_Hours + ":" + ban_Minutes );
ban_Day -= ban_Days;
ban_Hour -= ban_Hours;
ban_Minute -= ban_Minutes;
return ban_Day + " Day(s), " + ban_Hour + " Hour(s), " + ban_Minute + " Minutes.";
}
And I'm where I want
function NumTok(string, separator)
{
local tokenized = split(string, separator);
return tokenized.len();
}