register and login system
#1

Код:
Hello everybody
I want that when player types /register so there is a folder or something else in which his name gets stored and when he again connect the server so no need for again /register








[PAWN code]if(strcmp(cmd, "/register", true) == 0)
  {
  new tmp[256];
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
      SendClientMessage(playerid, COLOR_WHITE, "USAGE: /register [password]");
    }
    else
    {
      if (!dini_Exists(udb_encode(playername)))
      {
        dini_Create(udb_encode(playername));
        dini_IntSet(udb_encode(playername), "password", udb_hash(tmp));
        format(string, sizeof(string), "Account %s created! You can now login with /login %s", playername, tmp);
        SendClientMessage(playerid, COLOR_YELLOW, string);
        adminlevel[playerid] = -1;
      }
      else
      {
        format(string, sizeof(string), "%s is already registered.", playername,tmp);
        SendClientMessage(playerid, COLOR_BRIGHTRED, string);
      }
    }
    return 1;
  }

if(strcmp(cmd, "/login", true) == 0)
  {
  new tmp[256], tmp2[256];
    if(logged[playerid] == 1)
    {
      SendClientMessage(playerid, COLOR_BRIGHTRED, "You are already logged in.");
      return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
      SendClientMessage(playerid, COLOR_WHITE, "USAGE: /login [password]");
    }
    else
    {
      if (dini_Exists(udb_encode(playername)))
      {
        tmp2 = dini_Get(udb_encode(playername), "password");
        if (udb_hash(tmp) != strval(tmp2))
        {
          SendClientMessage(playerid, COLOR_BRIGHTRED, "Invalid Password");
        }
        else
        {
          logged[playerid] = 1;
          format(string, sizeof(string), "%s, you are now logged in .", playername);
          SendClientMessage(playerid, COLOR_GREEN, string);
          GivePlayerMoney(playerid, money[playerid]);
        }
      }
      else
      {
        format(string, sizeof(string), "You are not registered Type /register [password] to create an account!", playername);
        SendClientMessage(playerid, COLOR_BRIGHTRED, string);
      }
    }
    return 1;
  }
Reply
#2

i still have bug in it .when i type /register or /login its not saving anything in scriptfiles can anyone tell me why ?
Reply
#3

Where do you get playername ?
Reply
#4

Quote:
Originally Posted by dice7
Where do you get playername ?
i think there is something wrong in it but when i use mapcreator its also not working ,nothing is save in scriptfiles .

thats right one
Код:
#include <a_samp>

#define FILTERSCRIPT

#if defined FILTERSCRIPT
#define COLOR_GREY 0xBEBEBEAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_GRAD5 0xE3E3E3FF
#define COLOR_GRAD1 0xB4B5B7FF
#define COLOR_BRIGHTRED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA

forward ShowStats(playerid,targetid);
forward OnPlayerUpdate(playerid);
forward Encrypt(string[]);
forward OnPlayerLogin(playerid,const string[]);

enum pInfo
{
	pPassword[128],
	pKills,
	pDeaths,
	pCash,
};

new PlayerInfo[MAX_PLAYERS][pInfo];
new gPlayerLogged[MAX_PLAYERS];
new gPlayerAccount[MAX_PLAYERS];


public OnFilterScriptInit()
{

	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
	return 1;
}

public OnPlayerConnect(playerid)
{
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
  OnPlayerUpdate(playerid);
  gPlayerLogged[playerid] = 0;
	return 1;
}

public OnPlayerSpawn(playerid)
{
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
  new kills = PlayerInfo[playerid][pKills];
  SetPlayerScore(playerid, kills);
  new Float:Health;
  GetPlayerHealth(playerid, Health);
  if(Health == 0.0)
  {
  PlayerInfo[playerid][pDeaths] += 1;
  }
  GivePlayerMoney(killerid,2000);
  PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills] + 1;
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
  new cmd[256];
  new idx;
  cmd = strtok(cmdtext, idx);
  	new tmp[256];
  new playername[MAX_PLAYER_NAME];
  if (strcmp(cmd, "/login", true) ==0 )
	{
	  if(IsPlayerConnected(playerid))
	  {
	    new tmppass[64];
			if(gPlayerLogged[playerid] == 1)
			{
				SendClientMessage(playerid, COLOR_BRIGHTRED, "	You are already logged in.");
				return 1;
			}
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_WHITE, "	USAGE: /login [password]");
				return 1;
			}
			strmid(tmppass, tmp, 0, strlen(cmdtext), 255);
			Encrypt(tmppass);
			OnPlayerLogin(playerid,tmppass);
		}
		return 1;
	}
	if (strcmp(cmd, "/register", true)==0)
	{
		new string[265];
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp))
		{
			SendClientMessage(playerid, COLOR_WHITE, "USAGE: /register [password]");
			return 1;
		}
		if (gPlayerAccount[playerid] == 1)
		{
			SendClientMessage(playerid, COLOR_BRIGHTRED, "This name is already registered");
			return 1;
		}

		strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255);
		Encrypt(PlayerInfo[playerid][pPassword]);
		GetPlayerName(playerid, playername, sizeof(playername));
		format(string, sizeof(string), "%s.cer", playername);
		new File: file = fopen(string, io_read);
		if (file)
		{
			SendClientMessage(playerid, COLOR_BRIGHTRED, "This name is already registered");
			fclose(file);
			return 1;
		}
		new File:hFile;
		hFile = fopen(string, io_append);
		new var[32];//
    format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
    format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
    format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
    PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
    format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
		fclose(hFile);
		SendClientMessage(playerid, COLOR_YELLOW, "Succesfully Registered!");
	  SendClientMessage(playerid, COLOR_YELLOW, "Next time when you connect, type /login [password] to log in.");
		OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]);
		return 1;
	}
	if (strcmp(cmd, "/mystats", true) == 0)
	{
	  if(IsPlayerConnected(playerid))
	  {
			if (gPlayerLogged[playerid] != 0)
			{
				ShowStats(playerid,playerid);
			}
			else
			{
				SendClientMessage(playerid, COLOR_BRIGHTRED, "  You are not Logged in !");
			}
		}
		return 1;
	}
	return 0;
}

public Encrypt(string[])
{
	for(new x=0; x < strlen(string); x++)
	 {
		 string[x] += (3^x) * (x % 15);
		 if(string[x] > (0xff))
		 {
			 string[x] -= 64;
		 }
	 }
	return 1;
}


public OnPlayerLogin(playerid,const string[])
{
  new pname2[MAX_PLAYER_NAME];
	new pname3[MAX_PLAYER_NAME];
	new string2[64];
	new string3[128];
	GetPlayerName(playerid, pname2, sizeof(pname2));
	format(string2, sizeof(string2), "%s.cer", pname2);
	new File: UserFile = fopen(string2, io_read);

	if (UserFile)
	{
		new valtmp[128];
		fread(UserFile, valtmp);strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255);

		if ((strcmp(PlayerInfo[playerid][pPassword], string, true, strlen(valtmp)-1) == 0))
		{
			new key[128],val[128];
 			new Data[128];
 			while(fread(UserFile,Data,sizeof(Data)))
			{
				key = ini_GetKey(Data);
        if( strcmp( key , "Kills" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); }
        if( strcmp( key , "Deaths" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); }
        if( strcmp( key , "Money" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); }
        GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
			}
			fclose(UserFile);
			gPlayerLogged[playerid] = 1;
			gPlayerAccount[playerid] = 1;
		  new kills = PlayerInfo[playerid][pKills];
      SetPlayerScore(playerid, kills);
			GetPlayerName(playerid, pname3, sizeof(pname3));
			format(string3, sizeof(string3), "Welcome %s, you have been succesfully logged in!", pname3);
			SendClientMessage(playerid, COLOR_YELLOW,string3);
		}
		else
		{
			SendClientMessage(playerid, COLOR_BRIGHTRED, "	Password does not match your name");
			fclose(UserFile);
		}
	}
	return 1;
}

public OnPlayerUpdate(playerid)
{
	if(IsPlayerConnected(playerid))
	{
		if(gPlayerLogged[playerid])
		{
			new string3[32];
			new pname3[MAX_PLAYER_NAME];
			GetPlayerName(playerid, pname3, sizeof(pname3));
			format(string3, sizeof(string3), "%s.cer", pname3);
			new File: pFile = fopen(string3, io_write);
			if (pFile)
			{
				new var[32];
				format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(pFile, var);
				fclose(pFile);
				new File: hFile = fopen(string3, io_append);
				PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
				format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
				format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
				format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
				fclose(hFile);
			}
		}
	}
	return 1;
}

stock ini_GetKey( line[] )
{
	new keyRes[128];
	keyRes[0] = 0;
  if ( strfind( line , "=" , true ) == -1 ) return keyRes;
  strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
  return keyRes;
}

stock ini_GetValue( line[] )
{
	new valRes[128];
	valRes[0]=0;
	if ( strfind( line , "=" , true ) == -1 ) return valRes;
	strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
	return valRes;
}


strtok(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
		index++;
	}

	new offset = index;
	new result[20];
	while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}
	result[index - offset] = EOS;
	return result;
}

public ShowStats(playerid,targetid)
{
  if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid))
	{
		new cash = GetPlayerMoney(targetid);
		new deaths = PlayerInfo[targetid][pDeaths];
		new kills = PlayerInfo[targetid][pKills];
		new name[MAX_PLAYER_NAME];
		GetPlayerName(targetid, name, sizeof(name));
		new Float:px,Float:py,Float:pz;
		GetPlayerPos(targetid, px, py, pz);
		new coordsstring[256];
		SendClientMessage(playerid, COLOR_GREEN,"_______________________________________");
		format(coordsstring, sizeof(coordsstring)," %s ",name);
		SendClientMessage(playerid, COLOR_GREEN,coordsstring);
		format(coordsstring, sizeof(coordsstring), "You have killed somone %d times and died %d times.You currently have $%d",kills,deaths,cash);
		SendClientMessage(playerid, COLOR_GRAD5,coordsstring);
		SendClientMessage(playerid, COLOR_GREEN,"_______________________________________");
	}
}

#endif
Reply
#5

Mate "OnPlayerRegister" is missing in your script so when you type /register it will forward you to "OnPlayerRegister" but cause there is no such thing in your script it will do nothing.Get some register/login system or recheck your old.

Cheers
Reply
#6

Quote:
Originally Posted by Naruto4
Mate "OnPlayerRegister" is missing in your script so when you type /register it will forward you to "OnPlayerRegister" but cause there is no such thing in your script it will do nothing.Get some register/login system or recheck your old.

Cheers
you are right but why mapcreator is not working when i type /createmapicon etc
it giving me that its saved in database in scriptfiles but its not ? why its happening then
Reply
#7

Probably something is missing like:
Код:
public mapcreator(w/e)
{
functions for creating files in scriptfiles
saveing cords and things like that
}
It says that is saved when you execute the command.
/createmap
but it aint saved cause there aint any mapcreator function to forward to and thats the problem.
Check the script source again

Cheers
Reply
#8

Quote:
Originally Posted by Naruto4
Probably something is missing like:
Код:
public mapcreator(w/e)
{
functions for creating files in scriptfiles
saveing cords and things like that
}
It says that is saved when you execute the command.
/createmap
but it aint saved cause there aint any mapcreator function to forward to and thats the problem.
Check the script source again

Cheers
its the FS already present in server and there is no bug with it i think but the bug is maybe with my GM i may forget something to add thats why anykind of saving anything Scriptfiles wont work
Reply
#9

so now iam using Seif_ for login and register

http://forum.sa-mp.com/index.php?topic=77756.0

and its also not saving anything in my scriptfiles

i think i missed something in server.cfg of in scriptfiles
Код:
echo Executing Server Config...
lanmode 0
rcon_password changme
maxplayers 50
port 7777
hostname Changme
gamemode0 lvdm
filterscripts gl_actions gl_realtime seif
announce 0
query 1
weburl forum.sa-mp.com
maxnpc 10
onfoot_rate 100
incar_rate 100
weapon_rate 100
stream_distance 300.0
stream_rate 1000
and in scriptfiles there are two folders that are already present

"Vehicles , Properties"
Reply
#10

+ my npc_record FS also not saving anything in scriptfiles
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)