SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Scripting Help > Tutorials

Reply
 
Thread Tools Display Modes
Old 29/11/2014, 08:57 AM   #1
nogh445
Big Clucker
 
nogh445's Avatar
 
Join Date: Sep 2011
Posts: 130
Reputation: 10
Thumbs up Faction system [Y_INI]

FACTION SYSTEM

FOR BEST RESULTS I SUGGEST USING THIS YINI LOGIN/REGISTER TUTORIAL:CLICK ME





This faction system uses y_ini and includes 1 faction. you can easily add more.
lets start!

First of all you're going to want to get a few includes,

- ZCMD - CLICK
- SSCANF - CLICK
- YSI/Y_ini - CLICK

You can search for these includes and then include them at the top of your script like this:
pawn Code:
#include <a_samp>
#include <zcmd>
#include <YSI\y_ini>
#include <sscanf2>


Now lets establish some colors!
pawn Code:
#define COLOR_RED  0xFF0000AA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_CYAN 0x00FFFFFF
#define COLOR_PDRAD 0x297CCFFF

Assuming you have a normal Y_ini system you are going to want to add to your playerinfo enumerator

pawn Code:
enum pInfo
{
    pFaction, //saves the ID of the faction the player is in, in the players file
    pFacrank,//saves the faction rank of the player, in the players file
    pFacleader// saves weather the player is a leader of the faction and what faction that is
}
new PlayerInfo[MAX_PLAYERS][pInfo];

Next you're going to want to place it where you load the users file:
pawn Code:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Faction",PlayerInfo[playerid][pFaction]);//when the player logs in it will load his faction id
    INI_Int("Facrank",PlayerInfo[playerid][pFacrank]);// when the player logs in it will load his faction rank
    INI_Int("Facleader",PlayerInfo[playerid][pFacleader]);//when the player logs in it will load his leadership status

    return 1;
}

Next up, you're going to want to add a few things for when the player disconnects
pawn Code:
public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");

    INI_WriteInt(File,"Faction",PlayerInfo[playerid][pFaction]);//saves the players faction id on disconnect
    INI_WriteInt(File,"Facrank",PlayerInfo[playerid][pFacrank]);//saves the players faction rank on disconnect
    INI_WriteInt(File,"Facleader",PlayerInfo[playerid][pFacleader]);//saves the players faction leadership status on disconnect
    INI_Close(File);
    return 1;
}

Under the registration dialog you're going to want to add this:
pawn Code:
INI_WriteInt(File,"Faction",0);//sets the players faction to none when they connect for the first time
INI_WriteInt(File,"Facrank",0);sets the players faction rank to none when they connect for the first time
INI_WriteInt(File,"Facleader",0);//sets the players factions leadership status to none when they connect for the first time

Now you've added everything that need to be in the players file, now we need to make some commands to access this faction system!

Here are Admin related commands to set a player as the leader of the faction and kick a player from the faction
pawn Code:
CMD:fackick(playerid,params[])
{
    if(PlayerInfo[playerid][pAdmin] >= 3)//Replace this with your player variable
    {
        new targetid;//establishes a person on the server to use the command on
        if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, COLOR_RED, "/fackick [id]");//tells you how to use the command if you use it incorrectly
        if(targetid != INVALID_PLAYER_ID)//checks if the id you type in is an id that is not connected to the server
        {
            PlayerInfo[targetid][pFaction] = 0; //kicks the player from his faction
            PlayerInfo[targetid][pFacrank] = 0;//sets his rank to 0
            PlayerInfo[targetid][pFacleader] = 0;// revokes his leadership status
            SendClientMessage(targetid,COLOR_CYAN,"You have been kicked from your faction by an admin.");//tells them they have been kicked out of their faction by an admin.
        }
    }
    else//if they arent an admin then it will send them they message below telling them they may not use the command
    {
        SendClientMessage(playerid, COLOR_RED, "Only certain levels of Administration have access to this command.");
    }
    return 1;
}
CMD:makeleader(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] >= 4) //Replace this with your player variable
    {
        new targetid, facid;//establishes a player and a faction id, to be typed in
        if(sscanf(params,"ui",targetid, facid)) return SendClientMessage(playerid, COLOR_RED,"/makeleader [id][Faction id]");//if the command is misused it will tell them the correct way to use it
        if(targetid != INVALID_PLAYER_ID)//checks if the id you type in is an id that is not connected to the server
        {
            PlayerInfo[targetid][pFaction] = facid; //sets the players faction to the faction you choose
            PlayerInfo[targetid][pFacrank] = 10;//sets their rank to the highest rank
            PlayerInfo[targetid][pFacleader] = facid;//sets their leadership to the id of the faction
            if(facid == 1)//checks if the factionid typed was 1, and tells them they are the leader of the police below
            {
                SendClientMessage(targetid,COLOR_CYAN,"You have been made the leader of the police department");
            }
        }
    }
    else //if the player is not an admin it will show the below message telling them they are not an admin.
    {
        SendClientMessage(playerid, COLOR_RED, "Only certan levels of Administration have access to this command.");
    }
    return 1;
}


Next we're going to want some commands for the leaders to invite/uninvite and give ranks.


Inviting/accepting invites/uninviting:
pawn Code:
CMD:invite(playerid, params[])
{
    if(PlayerInfo[playerid][pFacleader] > 0 || PlayerInfo[playerid][pFacrank] >= 8)//checks if the player is the leader of a faction or a high rank in it
    {
        new tarid, facid;//establishes a player in the server and a faction id for you to type in
        if(sscanf(params, "u", tarid)) return SendClientMessage(playerid, COLOR_RED, "> USAGE: /invite [playerid]");//if the command is not typed correctly, it will show you the correct way to use the command.
        facid = PlayerInfo[playerid][pFaction];//sets the faction the player is being invited to, as the faction the player that is inviting is in.
        SetPVarInt(tarid, "invitefac", facid);//saves the invite, to /accept it
        SendClientMessage(tarid, COLOR_GREEN, "You have been invited into a faction, use /acceptinvite to join");//tells you that you have been invited to a faction
    }
    else //if you're not the correct rank it will display the message below stating that the player is not the rank to invite
    {
        SendClientMessage(playerid, COLOR_RED, "You do not have the rank to invite");
    }
    return 1;
}
CMD:acceptinvite(playerid, params[])
{

    new facid, string[128];//creates a faction id and some text on the players screen
    facid = GetPVarInt(playerid, "invitefac");//calls the saved invite from the previous command
    PlayerInfo[playerid][pFaction] = facid; //sets the players faction to that of the person inviting.
    PlayerInfo[playerid][pFacrank] = 1;//sets the players faction rank to 1
    format(string, sizeof(string), "> You have accepted the invite to faction %d", facid);//tells the player they have accepted the faction invite
    SendClientMessage(playerid, COLOR_CYAN, string);//shows the above message in the color of CYAN
    DeletePVar(playerid, "invitefac");//deletes the saved invite
    return 1;
}
CMD:uninvite(playerid,params[])
{
    if(PlayerInfo[playerid][pFacleader] > 0 || PlayerInfo[playerid][pFacrank] >= 8)//checks if the player is high enough rank to uninvite
    {
        new targetid;//establishes a person to use the command on in the server
        if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, COLOR_RED, "/copuninvite [id]");//if the command is not typed correctly it will display how to do it the right way.
        if(targetid != INVALID_PLAYER_ID)//checks if the id typed is an actual player on the server
        {
            PlayerInfo[targetid][pFaction] = 0;//uninvites the player from the faction
            PlayerInfo[targetid][pFacrank] = 0;//sets the players rank to 0
            PlayerInfo[targetid][pFacleader] = 0;//revokes leadership status
            SendClientMessage(targetid,COLOR_CYAN,"You have been kicked from your faction.");//states you've been kicked from the faction to the player the command is used on.
        }
    }
    else //if the player is not the sufficient rank to uninvinte it will state that in the chat
    {
        SendClientMessage(playerid, COLOR_RED, "You do not have the rank to uninvite");
    }
    return 1;
}

Giving ranks:
pawn Code:
CMD:giverank(playerid, params[])
{
    if(PlayerInfo[playerid][pFacleader] > 0 || PlayerInfo[playerid][pFacrank] >= 8)//checks if the player is high enough rank
    {
        new targetid, rank, string[128];//establishes a player to use the command on, the rank you want to set, and some words to tell the players the actions used on them.
        if(sscanf(params, "ui", targetid, rank)) return SendClientMessage(playerid, COLOR_RED, "Usage: /coprank [playerid][rank]");//checks if the command was typed correctly
        if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, COLOR_RED, "That player is not connected!");//if the player id typed is not connected it will state that to you.
        if(PlayerInfo[targetid][pFaction] != PlayerInfo[playerid][pFaction]) return SendClientMessage(playerid, COLOR_RED, "That player is not in your faction!");//if the player is not in the same faction it will not let him set the rank.
        if(rank < 1 || rank > 10) return SendClientMessage(playerid, COLOR_RED,"Rank must be 1-10");//checks if the rank number typed is above or below the correct numbers
        PlayerInfo[targetid][pFacrank] = rank;//sets the players rank to the rank you choose
        format(string, sizeof(string), "Your rank has been changed to rank %d!", rank);
        SendClientMessage(targetid, COLOR_GREEN, string);//states that the players rank was changed
    }
    else //if the player is not the correct rank it will display this message below
    {
        SendClientMessage(playerid, COLOR_RED, "You do not have the rank to set ranks");
    }
    return 1;
}


Now we need to make a way for the faction members to communicate, this can be done with a /radio command:
pawn Code:
CMD:r(playerid, params[]) return cmd_radio(playerid, params);
CMD:radio(playerid, params[])
{
    new string[128], text[128], ctext[60], pname[MAX_PLAYER_NAME+1];//establishes a few things needed to tell the players name, rank, and the text he has written.
    GetPlayerName(playerid, pname, sizeof(pname));//gets the name of the player using /radio
    if(sscanf(params, "s[128]", text)) return SendClientMessage(playerid, 0x46E850FF, "SERVER:{FFFFFF} /r(adio) [text]");//if /r is not used correctly it will tell you the correct way to use it
    if(PlayerInfo[playerid][pFaction] == 1)//checks if the player is in the first faction
    {

        if(PlayerInfo[playerid][pFacrank] == 1){ ctext = "Cadet"; }//all of these check the players rank and
        if(PlayerInfo[playerid][pFacrank] == 2){ ctext = "Officer"; }// sets each rank to a specific name
        if(PlayerInfo[playerid][pFacrank] == 3){ ctext = "Senior Officer"; }
        if(PlayerInfo[playerid][pFacrank] == 4){ ctext = "Corporal"; }
        if(PlayerInfo[playerid][pFacrank] == 5){ ctext = "Sergeant"; }
        if(PlayerInfo[playerid][pFacrank] == 6){ ctext = "Lieutenant"; }
        if(PlayerInfo[playerid][pFacrank] == 7){ ctext = "Captain"; }
        if(PlayerInfo[playerid][pFacrank] == 8){ ctext = "Commander"; }
        if(PlayerInfo[playerid][pFacrank] == 9){ ctext = "Deputy Chief"; }
        if(PlayerInfo[playerid][pFacrank] == 10){ ctext = "Chief"; }
        format(string, sizeof(string), "%s %s: %s", ctext, pname, text);
        if(PlayerInfo[playerid][pFaction] > 0)//if the player is not in a faction it will not send him any messages
        {
            SendCopMessage(COLOR_PDRAD, string);//calls a stock below that checks who the /r should be sent to
        }

    }
    return 1;
}

Now lets create a stock at the bottom to create the cop radio that will only send /r to other faction members
pawn Code:
stock SendCopMessage(col, string[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {                
        if(PlayerInfo[i][pFaction] == 1)
            SendClientMessage(i, col, string);         //goes through all the players checking who is and isint in faction 1
    }

    return 1;
}

Now lets make some vehicle models restricted for police use only. We can do this using a stock:
pawn Code:
stock IsACopCar(vehicleid)
{
    switch(GetVehicleModel(vehicleid))
    {
        case 523,427,528,596,598,597,599,601,497,430: return 1; //checks if the vehicle id is a faction restricted vehicle
    }
    return 0;
}

Now find in the script where the player enters a vehicle:
pawn Code:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(IsACopCar(vehicleid) && PlayerInfo[playerid][pFaction] == 0  && !ispassenger) //checks if the car is a faction car,and checks if the player is not in a faction or is not a passenger
    {
        ClearAnimations(playerid);//if they are a civillian and aren't a passenger it will put them out
        SendClientMessage(playerid, COLOR_GREY, "   You are not a Cop !");//will send them a message telling them only police can access this vehicle
    }
    return 1;
}



This is my first tutorial, hope i did a good job explaining everything out


EDIT:

ADDING MORE FACTIONS
Its pretty easy adding a second faction, first of all you're gonna want to go to the makeleader command and edit that a bit, ill do it below with the same code i used in the tutorial:
pawn Code:
CMD:makeleader(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] >= 4) //Replace this with your player variable
    {
        new targetid, facid;//establishes a player and a faction id, to be typed in
        if(sscanf(params,"ui",targetid, facid)) return SendClientMessage(playerid, COLOR_RED,"/makeleader [id][Faction id]");//if the command is misused it will tell them the correct way to use it
        if(targetid != INVALID_PLAYER_ID)//checks if the id you type in is an id that is not connected to the server
        {
            PlayerInfo[targetid][pFaction] = facid; //sets the players faction to the faction you choose
            PlayerInfo[targetid][pFacrank] = 10;//sets their rank to the highest rank
            PlayerInfo[targetid][pFacleader] = facid;//sets their leadership to the id of the faction
            if(facid == 1)//checks if the factionid typed was 1, and tells them they are the leader of the police below
            {
                SendClientMessage(targetid,COLOR_CYAN,"You have been made the leader of the police department");
            }
            if(facid == 2)//checks if the factionid typed was 2, and tells them below, they are the leader of the faction
            {
                SendClientMessage(targetid,COLOR_CYAN,"You have been made the leader of blank");//change this to  the faction name you want
            }
        }
    }
    else //if the player is not an admin it will show the below message telling them they are not an admin.
    {
        SendClientMessage(playerid, COLOR_RED, "Only certan levels of Administration have access to this command.");
    }
    return 1;
}
All we're adding here is this
pawn Code:
if(facid == 2)//checks if the factionid typed was 2, and tells them below, they are the leader of the faction
{
        SendClientMessage(targetid,COLOR_CYAN,"You have been made the leader of blank");//change this to  the faction name you want
}
Once you've done that now you want to go to the radio command and add a few things to it:
pawn Code:
CMD:r(playerid, params[]) return cmd_radio(playerid, params);
CMD:radio(playerid, params[])
{
    new string[128], text[128], ctext[60], pname[MAX_PLAYER_NAME+1];//establishes a few things needed to tell the players name, rank, and the text he has written.
    GetPlayerName(playerid, pname, sizeof(pname));//gets the name of the player using /radio
    if(sscanf(params, "s[128]", text)) return SendClientMessage(playerid, 0x46E850FF, "SERVER:{FFFFFF} /r(adio) [text]");//if /r is not used correctly it will tell you the correct way to use it
    if(PlayerInfo[playerid][pFaction] == 1)//checks if the player is in the first faction
    {
        if(PlayerInfo[playerid][pFacrank] == 1){ ctext = "Cadet"; }//all of these check the players rank and
        if(PlayerInfo[playerid][pFacrank] == 2){ ctext = "Officer"; }// sets each rank to a specific name
        if(PlayerInfo[playerid][pFacrank] == 3){ ctext = "Senior Officer"; }
        if(PlayerInfo[playerid][pFacrank] == 4){ ctext = "Corporal"; }
        if(PlayerInfo[playerid][pFacrank] == 5){ ctext = "Sergeant"; }
        if(PlayerInfo[playerid][pFacrank] == 6){ ctext = "Lieutenant"; }
        if(PlayerInfo[playerid][pFacrank] == 7){ ctext = "Captain"; }
        if(PlayerInfo[playerid][pFacrank] == 8){ ctext = "Commander"; }
        if(PlayerInfo[playerid][pFacrank] == 9){ ctext = "Deputy Chief"; }
        if(PlayerInfo[playerid][pFacrank] == 10){ ctext = "Chief"; }
        format(string, sizeof(string), "%s %s: %s", ctext, pname, text);
        if(PlayerInfo[playerid][pFaction] > 0)//if the player is not in a faction it will not send him any messages
        {
            SendCopMessage(COLOR_PDRAD, string);//calls a stock below that checks who the /r should be sent to
        }
    }
    if(PlayerInfo[playerid][pFaction] == 2)//checks if the player is in the second faction
    {
        if(PlayerInfo[playerid][pFacrank] == 1){ ctext = "rank 1 name"; }//all of these check the players rank and
        if(PlayerInfo[playerid][pFacrank] == 2){ ctext = "rank 2 name"; }// sets each rank to a specific name
        if(PlayerInfo[playerid][pFacrank] == 3){ ctext = "rank 3 name"; }
        if(PlayerInfo[playerid][pFacrank] == 4){ ctext = "rank 4 name"; }
        if(PlayerInfo[playerid][pFacrank] == 5){ ctext = "rank 5 name"; }
        if(PlayerInfo[playerid][pFacrank] == 6){ ctext = "rank 6 name"; }
        if(PlayerInfo[playerid][pFacrank] == 7){ ctext = "rank 7 name"; }
        if(PlayerInfo[playerid][pFacrank] == 8){ ctext = "rank 8 name"; }
        if(PlayerInfo[playerid][pFacrank] == 9){ ctext = "rank 9 name"; }
        if(PlayerInfo[playerid][pFacrank] == 10){ ctext = "rank 10 name"; }
        format(string, sizeof(string), "%s %s: %s", ctext, pname, text);
        if(PlayerInfo[playerid][pFaction] > 0)//if the player is not in a faction it will not send him any messages
        {
            SendfacnameMessage(COLOR_PDRAD, string);//calls a stock below that checks who the /r should be sent to
        }
    }
    return 1;
}
For the radio command all you'll be adding is:
pawn Code:
if(PlayerInfo[playerid][pFaction] == 2)//checks if the player is in the second faction
    {
        if(PlayerInfo[playerid][pFacrank] == 1){ ctext = "rank 1 name"; }//all of these check the players rank and
        if(PlayerInfo[playerid][pFacrank] == 2){ ctext = "rank 2 name"; }// sets each rank to a specific name
        if(PlayerInfo[playerid][pFacrank] == 3){ ctext = "rank 3 name"; }
        if(PlayerInfo[playerid][pFacrank] == 4){ ctext = "rank 4 name"; }
        if(PlayerInfo[playerid][pFacrank] == 5){ ctext = "rank 5 name"; }
        if(PlayerInfo[playerid][pFacrank] == 6){ ctext = "rank 6 name"; }
        if(PlayerInfo[playerid][pFacrank] == 7){ ctext = "rank 7 name"; }
        if(PlayerInfo[playerid][pFacrank] == 8){ ctext = "rank 8 name"; }
        if(PlayerInfo[playerid][pFacrank] == 9){ ctext = "rank 9 name"; }
        if(PlayerInfo[playerid][pFacrank] == 10){ ctext = "rank 10 name"; }
        format(string, sizeof(string), "%s %s: %s", ctext, pname, text);
        if(PlayerInfo[playerid][pFaction] > 0)//if the player is not in a faction it will not send him any messages
        {
            SendfacnameMessage(COLOR_PDRAD, string);//calls a stock below that checks who the /r should be sent to
        }
    }

Lastly, you'll want to create another stock to send it to the second faction:
pawn Code:
stock SendfacnameMessage(col, string[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(PlayerInfo[i][pFaction] == 2)
            SendClientMessage(i, col, string);         //goes through all the players checking who is and isint in faction 1
    }

    return 1;
}

Last edited by nogh445; 07/01/2017 at 12:13 AM.
nogh445 is offline   Reply With Quote
Old 30/11/2014, 09:31 AM   #2
Sparke
Banned
 
Join Date: Sep 2014
Location: USA
Posts: 107
Reputation: 23
Default Re: Faction system [Y_INI]

Really good
Sparke is offline   Reply With Quote
Old 30/11/2014, 02:38 PM   #3
nogh445
Big Clucker
 
nogh445's Avatar
 
Join Date: Sep 2011
Posts: 130
Reputation: 10
Default Re: Faction system [Y_INI]

Quote:
Originally Posted by Sparke View Post
Really good
Thanks man!
nogh445 is offline   Reply With Quote
Old 01/01/2015, 03:17 PM   #4
Lukasz56
Big Clucker
 
Join Date: Aug 2010
Posts: 100
Reputation: 1
Default Re: Faction system [Y_INI]

So how i make second job ?
Lukasz56 is offline   Reply With Quote
Old 01/01/2015, 08:35 PM   #5
UploaD
Big Clucker
 
UploaD's Avatar
 
Join Date: Dec 2014
Location: Chile
Posts: 112
Reputation: 19
Default Re: Faction system [Y_INI]

This is pretty good and really understable.I'll practice with this.
Thank you sir!.
UploaD is offline   Reply With Quote
Old 01/01/2015, 08:50 PM   #6
nogh445
Big Clucker
 
nogh445's Avatar
 
Join Date: Sep 2011
Posts: 130
Reputation: 10
Thumbs up Re: Faction system [Y_INI]

Quote:
Originally Posted by Lukasz56 View Post
So how i make second job ?
Added to the thread

Last edited by nogh445; 03/01/2015 at 10:29 PM.
nogh445 is offline   Reply With Quote
Old 01/01/2015, 09:22 PM   #7
nogh445
Big Clucker
 
nogh445's Avatar
 
Join Date: Sep 2011
Posts: 130
Reputation: 10
Cool Re: Faction system [Y_INI]

Quote:
Originally Posted by UploaD View Post
This is pretty good and really understable.I'll practice with this.
Thank you sir!.
No problem at all! if you find any bugs at all let me know, ill look into them
nogh445 is offline   Reply With Quote
Old 06/01/2015, 05:10 AM   #8
TheRaGeLord
Banned
 
Join Date: Jun 2014
Posts: 314
Reputation: 24
Default Re: Faction system [Y_INI]

Nice Tutorial... It Helped me In Creating Gangs/Faction System For my Server. ++Rep'd.
TheRaGeLord is offline   Reply With Quote
Old 06/01/2015, 12:17 PM   #9
Wipe
Big Clucker
 
Wipe's Avatar
 
Join Date: Nov 2013
Location: Croatia
Posts: 56
Reputation: 56
Default Re: Faction system [Y_INI]

Really good guide, I've understood everything. Repped.
Wipe is offline   Reply With Quote
Old 18/01/2015, 02:53 PM   #10
mrikill
Little Clucker
 
Join Date: Jul 2014
Posts: 8
Reputation: 0
Default Re: Faction system [Y_INI]

When a player uses / acceptinvite command does not work! please fix it = rep +
__________________
if(HelpedMe[playerid] == 1)
{
Rep++;
}
mrikill is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[FilterScript] [Request]Dynaimc Faction System and Crates System Doros Filterscripts 6 05/11/2017 05:48 PM
[FilterScript] Cross Admin System V1.2 [updated] + Added IRC System + Anti Cheat(sscanf, dcmd,y_ini) No.1 Admin System CROSS_Hunter Filterscripts 21 02/01/2013 06:32 PM
[FilterScript] Cross Admin System V1.1 [updated] + Added V.I.P System(sscanf, dcmd,y_ini) No.1 Admin System CROSS_Hunter Filterscripts 8 10/09/2012 11:18 AM
Way to make a Simple Faction system with Y_INI? seanny Scripting Help 0 16/10/2011 12:25 PM


All times are GMT. The time now is 07:21 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.