Login/register
#1

guys i am trying to make login and register system but i cant make

Code
Код:
//NGF By Anshu

#include <a_samp>
#include <a_mysql> //Without this, we won't be able to use all mysql functions

#if defined FILTERSCRIPT

//Let's define our mysql settings
#define host	"localhost" //This will be your mysql host. Default for xampp is localhost
#define user	"root" //This will be your mysql username. Default for xampp is root
#define db		"server" //This is your database name. Remember we have created a database called server before.
#define pass 	"" //This is your mysql password. In xampp, the password didn't set. So leave it empty.

//dialogs
#define dregister    6287 //dialog register id
#define dlogin        6288 // ^

static
	mysql, //This variable will be used to manage our database
	Name[MAX_PLAYERS][24], //We will use this variable to store player's name.
	IP[MAX_PLAYERS][16];
	
public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Blank Filterscript by your name here");
	print("--------------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

#else

native WP_Hash(buffer[], len, const str[]); //whirlpool, for hashing our password

//Now let's create an enumerator that holds player's information
enum PDATA //We name our enumerator as PDATA (which stands for PlayerDATA). You can name it however you want.
{
	ID, //Will be used later to store player's ID from database so we can use it anywhere later
	Password[129], //We will load player's password into this varible from database
	Admin, //We will load player's admin level from database into this variable so we can use it anywhere later.
	VIP, //We will load player's VIP level from database into this variable so we can use it anywhere later.
	Money, //We will load player's money from database into this variable so we can use it anywhere later.
	Float:posX, //We will load player's X position from database into this variable so we can use it anywhere later.
	Float:posY, //We will load player's Y position from database into this variable so we can use it anywhere later.
	Float:posZ //We will load player's Z from database into this variable so we can use it anywhere later.

}
new pInfo[MAX_PLAYERS][PDATA]; //Variable that stores enumerator above

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

#endif

public OnGameModeInit()
{
	mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG); //Let's enable debugging so we can detect a problem(if there is)
	mysql = mysql_connect(host, user, db, pass); //This function will connect your server to database. Remember we have defined our host, username, database and password. It's time to use it here.
	if(mysql_errno(mysql) != 0) print("Could not connect to database!"); //This will tell if your connection to database is successful or not. If it's not, check your host, username, database and password. Make sure they all right.
	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)
{
	// This is to see wherther player is register or not ..
	new query[128];
	GetPlayerName(playerid, Name[playerid], 24); //Getting player's name
	GetPlayerIp(playerid, IP[playerid], 16);
	mysql_format(mysql, query, sizeof(query),"SELECT `Password`, `ID` FROM `players` WHERE `Username` = '%e' LIMIT 1", Name[playerid]);
	mysql_tquery(mysql, query, "OnAccountCheck", "i", playerid);

	
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	new query[128], Float:pos[3]; //query[128] is for formatting our query and Float:pos[3] is for getting and saving player's position
	GetPlayerPos(playerid, pos[0], pos[1], pos[2]); //let's get player's position when they leave your server
	mysql_format(mysql, query, sizeof(query), "UPDATE `players` SET `Admin`=%d, `VIP`=%d, `Money`=%d, `posX`=%f, `posY`=%f, `posZ`=%f WHERE `ID`=%d",\
	pInfo[playerid][Admin], pInfo[playerid][VIP], pInfo[playerid][Money], pos[0], pos[1], pos[2], pInfo[playerid][ID]);
	//We update the table(`players`) by getting player's admin level, vip level, money, and positions and save them in the database
	mysql_tquery(mysql, query, "", "");
	//let's execute the query.
	return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerPos(playerid, pInfo[playerid][posX], pInfo[playerid][posZ], pInfo[playerid][posZ]);
    //Set player's position to the last saved position.
    return 1;
}
forward OnAccountCheck(playerid);
public OnAccountCheck(playerid)
{
	new rows, fields; 
	cache_get_data(rows, fields, mysql);
	if(rows) 
	{
		cache_get_field_content(0, "PASS", pInfo[playerid][Password], mysql, 129);
		pInfo[playerid][ID] = cache_get_field_content_int(0, "ID"); 
		printf("%s", pInfo[playerid][Password]); 
		ShowPlayerDialog(playerid, dlogin, DIALOG_STYLE_INPUT, "Login", "In order to play, you need to login", "Login", "Quit"); 
	}
	else 
	{
		ShowPlayerDialog(playerid, dregister, DIALOG_STYLE_INPUT, "Register", "In order to play, you need to register.", "Register", "Quit");
	}
	return 1;
}
forward OnAccountLoad(playerid);
forward OnAccountRegister(playerid);
//let's load player's information
public OnAccountLoad(playerid)
{
 	pInfo[playerid][Admin] = cache_get_field_content_int(0, "Admin"); //we're getting a field 4 from row 0. And since it's an integer, we use cache_get_row_int
 	pInfo[playerid][VIP] = cache_get_field_content_int(0, "VIP"); //Above
 	pInfo[playerid][Money] = cache_get_field_content_int(0, "Money");//Above
 	pInfo[playerid][posX] = cache_get_field_content_float(0, "PosX");//Above. Since player's position is a float, we use cache_get_field_content_float
 	pInfo[playerid][posY] = cache_get_field_content_float(0, "PosY");//Above
 	pInfo[playerid][posZ] = cache_get_field_content_float(0, "PosZ");//Above

 	GivePlayerMoney(playerid, pInfo[playerid][Money]);//Let's set their money
 	//For player's position, set it once they spawn(OnPlayerSpawn)
	SendClientMessage(playerid, -1, "Successfully logged in"); //tell them that they have successfully logged in
	return 1;
}

public OnAccountRegister(playerid)
{
    pInfo[playerid][ID] = cache_insert_id(); //loads the ID of the player in the variable once they registered.
    printf("New account registered. ID: %d", pInfo[playerid][ID]); //just for debugging.
    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;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
	return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
	return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
	return 1;
}

public OnPlayerUpdate(playerid)
{
	return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
	return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
	return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
	return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch(dialogid)
	{
	    case dlogin: //login dialog
	    {
	        if(!response) Kick(playerid); //if they clicked Quit, we will kick them
	        new hpass[129]; //for password hashing
        new query[100]; // for formatting our query.
	        WP_Hash(hpass, 129, inputtext); //hashing inputtext
	        if(!strcmp(hpass, pInfo[playerid][Password])) //remember we have loaded player's password into this variable, pInfo[playerid][Password] earlier. Now let's use it to compare the hashed password with password that we load
	        { //if the hashed password matches with the loaded password from database
	            mysql_format(mysql, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e' LIMIT 1", Name[playerid]);
				//let's format our query
				//We select all rows in the table that has your name and limit the result to 1
				mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid);
				//lets execute the formatted query and when the execution is done, a callback OnAccountLoad will be called
				//You can name the callback however you like
			}
			else //if the hashed password didn't match with the loaded password(pInfo[playerid][Password])
			{
			    //we tell them that they have inserted a wrong password
				ShowPlayerDialog(playerid, dlogin, DIALOG_STYLE_INPUT, "Login", "In order to play, you need to login\nWrong password!", "Login", "Quit");
			}
		}
		case dregister: //register dialog
		{
		    if(!response) return Kick(playerid); //if they clicked Quit, we will kick them
		    if(strlen(inputtext) < 6) return ShowPlayerDialog(playerid, dregister, DIALOG_STYLE_INPUT, "Register", "In order to play, you need to register.\nYour password must be at least 6 characters long!", "Register", "Quit");
			//strlen checks a lenght of a string. so if player types their password that is lower than 6, we tell them; Your password must be at least 6 characters long!
                new query[300];
			WP_Hash(pInfo[playerid][Password], 129, inputtext); //hashing inputtext
			mysql_format(mysql, query, sizeof(query), "INSERT INTO `players` (`Username`, `Password`, `IP`, `Admin`, `VIP`, `Money`, `PosX` ,`PosY`, `PosZ`) VALUES ('%e', '%s', '%s', 0, 0, 0, 0.0, 0.0, 0.0)", Name[playerid], pInfo[playerid][Password], IP[playerid]);
			//Now let's create a new row and insert player's information in it
			mysql_tquery(mysql, query, "OnAccountRegister", "i", playerid);
			//let's execute the query
		}
	}
	return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
	return 1;
}
Error
E:\GTA San Andreas\server\gamemodes\NGF.pwn(67) : error 017: undefined symbol "mysql"
E:\GTA San Andreas\server\gamemodes\NGF.pwn(67) : error 017: undefined symbol "host"
E:\GTA San Andreas\server\gamemodes\NGF.pwn(6 : error 017: undefined symbol "mysql"
E:\GTA San Andreas\server\gamemodes\NGF.pwn(89) : error 017: undefined symbol "Name"
E:\GTA San Andreas\server\gamemodes\NGF.pwn(89) : warning 215: expression has no effect
E:\GTA San Andreas\server\gamemodes\NGF.pwn(89) : error 001: expected token: ";", but found "]"
E:\GTA San Andreas\server\gamemodes\NGF.pwn(89) : error 029: invalid expression, assumed zero
E:\GTA San Andreas\server\gamemodes\NGF.pwn(89) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


7 Errors.
[/code]
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)