[HELP ME]What's wrong?
#1

I have this registration script:

Код:
// Register / Login Filterscript //

#include <a_samp>
#include <dudb>
#include <dutils>
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

//Colors//
#define COLOR_SYSTEM 0xEFEFF7AA
#define green 0x33FF33AA
#define blue 0x00FFFFAA

new PLAYERLIST_authed[MAX_PLAYERS];

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print("Register / Login System");
	print("--------------------------------------\n");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

#else

main()
{
	print("\n----------------------------------");
	print("Register / Login System");
	print("----------------------------------\n");
}

#endif

public OnPlayerRequestSpawn(playerid)
{
if (udb_Exists(PlayerName(playerid))){
if (!PLAYERLIST_authed[playerid]){
SendClientMessage(playerid,green,"Вы зарегестрированы, используйте /login чтобы войти.");
return 0;
}
}
return 1;
}

public OnPlayerDisconnect(playerid) {
 if (PLAYERLIST_authed[playerid]) {
   // If someone has logged in, it saves money and score.
  dUserSetINT(PlayerName(playerid)).("money",GetPlayerMoney(playerid));
  dUserSetINT(PlayerName(playerid)).("score",GetPlayerScore(playerid));
 }
 PLAYERLIST_authed[playerid]=false;
 return 1;
}

public OnPlayerConnect(playerid)
{

 	if (PLAYERLIST_authed[playerid]==0){
if (udb_Exists(PlayerName(playerid))){
SystemMsg(playerid,"Вы зарегестрированы, введите /login [пароль] чтобы войти.");
}
else{ SystemMsg(playerid,"Вы не зарегестрированы, введите /register [пароль] и введите /login [пароль] чтобы войти.");
}

return 0;
}
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
 dcmd(login,5,cmdtext);
 dcmd(register,8,cmdtext);
 return 0;
}

stock SystemMsg(playerid,msg[]) {
  if ((IsPlayerConnected(playerid))&&(strlen(msg)>0)) {
    SendClientMessage(playerid,COLOR_SYSTEM,msg);
  }
  return 1;
}

stock PlayerName(playerid) {
 new name[255];
 GetPlayerName(playerid, name, 255);
 return name;
}

 dcmd_register(playerid,params[]) {

  if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Вы уже зарегестрированы.");
  if (udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"Вы уже зарегестрированы, /login [пароль] чтобы войти.");
  if (strlen(params)==0) return SystemMsg(playerid,"Истпользование: /register [пароль]");
  if (udb_Create(PlayerName(playerid),params)) return SystemMsg(playerid,"Вы удачно зарегестрированы,теперь введите /login [пароль] чтобы войти.");
  return true;

 }

 dcmd_login(playerid,params[]) {

  if (PLAYERLIST_authed[playerid]) return SystemMsg(playerid,"Вы уже вошли.");
  if (!udb_Exists(PlayerName(playerid))) return SystemMsg(playerid,"У вас нет аккаунта, введите /register [пароль]");
  if (strlen(params)==0) return SystemMsg(playerid,"Использование: /login [password]");
  if (udb_CheckLogin(PlayerName(playerid),params)) {
    SetPlayerScore(playerid,dUserINT(PlayerName(playerid)).("score"));
 	  SetPlayerMoney(playerid,dUserINT(PlayerName(playerid)).("money"));
    PLAYERLIST_authed[playerid]=true;
    return SystemMsg(playerid,"Вы удачно вошли.");
  }
  return SystemMsg(playerid,"Не правильный пароль или никнейм!");
}
And This 2 includes what's needed for this script:

DUBD:

Код:
/*
 *      DUDB functions
 *    © Copyright 2006-2007 by DracoBlue
 *
 * @version  : 2.4
 * @author  : DracoBlue (http://dracoblue.net)
 * @date   : 8th May 2006
 * @update  : 12th July 2007
 * @require  : DUtils 1.10
 * @require  : DINI 1.5
 *
 * This Unit is provided as is (no warranties).
 * Feel free to use it, a little message in 
 * about box is honouring thing, isn't it?
 *
 */

#if defined _dudb_included
 #endinput
#endif

#define _dudb_included
#pragma library dutils

#include <dutils>
#include <dini>
#define dUser(%1).( udb_User(%1,
#define dUserINT(%1).( udb_UserInt(%1,
#define dUserSet(%1).( udb_UserSet(%1,
#define dUserSetINT(%1).( udb_UserSetInt(%1,
#define dUserSetFLOAT(%1).( udb_UserSetFloat(%1,
#define dUserFLOAT(%1).( udb_UserFloat(%1,

stock udb_hash(buf[]) {
	new length=strlen(buf);
  new s1 = 1;
  new s2 = 0;
  new n;
  for (n=0; n<length; n++)
  {
    s1 = (s1 + buf[n]) % 65521;
    s2 = (s2 + s1)   % 65521;
  }
  return (s2 << 16) + s1;
}

stock udb_encode(nickname[]) {
 new tmp[MAX_STRING];
 set(tmp,nickname);
 tmp=strreplace("_","_00",tmp);
 tmp=strreplace(";","_01",tmp);
 tmp=strreplace("!","_02",tmp);
 tmp=strreplace("/","_03",tmp);
 tmp=strreplace("\\","_04",tmp);
 tmp=strreplace("[","_05",tmp);
 tmp=strreplace("]","_06",tmp);
 tmp=strreplace("?","_07",tmp);
 tmp=strreplace(".","_08",tmp);
 tmp=strreplace("*","_09",tmp);
 tmp=strreplace("<","_10",tmp);
 tmp=strreplace(">","_11",tmp);
 tmp=strreplace("{","_12",tmp);
 tmp=strreplace("}","_13",tmp);
 tmp=strreplace(" ","_14",tmp);
 tmp=strreplace("\"","_15",tmp);
 tmp=strreplace(":","_16",tmp);
 tmp=strreplace("|","_17",tmp);
 tmp=strreplace("=","_18",tmp);
 return tmp;
}

stock udb_decode(nickname[]) {
 new tmp[MAX_STRING];
 set(tmp,nickname);
 tmp=strreplace("_01",";",tmp);
 tmp=strreplace("_02","!",tmp);
 tmp=strreplace("_03","/",tmp);
 tmp=strreplace("_04","\\",tmp);
 tmp=strreplace("_05","[",tmp);
 tmp=strreplace("_06","]",tmp);
 tmp=strreplace("_07","?",tmp);
 tmp=strreplace("_08",".",tmp);
 tmp=strreplace("_09","*",tmp);
 tmp=strreplace("_10","<",tmp);
 tmp=strreplace("_11",">",tmp);
 tmp=strreplace("_12","{",tmp);
 tmp=strreplace("_13","}",tmp);
 tmp=strreplace("_14"," ",tmp);
 tmp=strreplace("_15","\"",tmp);
 tmp=strreplace("_16",":",tmp);
 tmp=strreplace("_17","|",tmp);
 tmp=strreplace("_18","=",tmp);
 tmp=strreplace("_00","_",tmp);
 return tmp;
}


stock udb_Exists(nickname[]) {
 new tmp[MAX_STRING];
 format(tmp,sizeof(tmp),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return fexist(tmp);
}

stock udb_Remove(nickname[]) {
 new tmp[MAX_STRING];
 format(tmp,sizeof(tmp),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return dini_Remove(tmp);
}

stock udb_UserSetInt(nickname[],key[],value) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return dini_IntSet(fname,key,value);
}

stock udb_UserSetFloat(nickname[],key[],Float:value) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return dini_FloatSet(fname,key,value);
}

stock udb_UserSet(nickname[],key[],value[]) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return dini_Set(fname,key,value);
}

stock udb_User(nickname[],key[]) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 format(fname,sizeof(fname),dini_Get(fname,key));
 return fname;
}

stock Float:udb_UserFloat(nickname[],key[]) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return dini_Float(fname,key);
}

stock udb_UserInt(nickname[],key[]) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 return dini_Int(fname,key);
}

stock udb_CheckLogin(nickname[],pwd[]) {
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 if (udb_UserInt(nickname,"password_hash")==udb_hash(pwd)) return true;
 return false;
}


stock udb_Create(nickname[],pwd[]) {
 if (udb_Exists(nickname)) return false;
 new fname[MAX_STRING];
 format(fname,sizeof(fname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 dini_Create(fname);
 udb_UserSetInt(nickname,"password_hash",udb_hash(pwd));
 return true;
}

stock udb_RenameUser(nickname[],newnick[]) {
 new oldfname[MAX_STRING]; new newfname[MAX_STRING];
 format(oldfname,sizeof(oldfname),"/Accounts/%s.dudb.sav",udb_encode(nickname));
 format(newfname,sizeof(newfname),"/Accounts/%s.dudb.sav",udb_encode(newnick));
 return frenametextfile(oldfname,newfname);
}
Dutils:

Код:
/*
 *      DUtils functions 1.10
 *    © Copyright 2006-2007 by DracoBlue
 *
 * @author  : DracoBlue (http://dracoblue.com)
 * @date   : 8th April 2006
 * @update  : 12th July 2007
 *
 * This file is provided as is (no warranties).
 *
 */

#if defined _dutils_included
 #endinput
#endif

#define _dutils_included
#pragma library dutils

#define MAX_STRING 255

new PRIVATE_Last_Money[MAX_PLAYERS];

/*
 * First version released by mike, this one created by DracoBlue
 * Has also a fix to use "-" and "+" in the beginning of the number.
 */
stock isNumeric(const string[]) {
	new length=strlen(string);
	if (length==0) return false;
	for (new i = 0; i < length; i++) {
		if (
		(string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
		|| (string[i]=='-' && i!=0)                       // A '-' but not at first.
		|| (string[i]=='+' && i!=0)                       // A '+' but not at first.
		) return false;
	}
	if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
	return true;
}

/*
 * Originally created by mabako, tuned by DracoBlue
 */
stock mktime(hour,minute,second,day,month,year) {
	new timestamp2;

	timestamp2 = second + (minute * 60) + (hour * 3600);

	new days_of_month[12];

	if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
			days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
		} else {
			days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
		}
	new days_this_year = 0;
	days_this_year = day;
	if(month > 1) { // No January Calculation, because its always the 0 past months
		for(new i=0; i<month-1;i++) {
			days_this_year += days_of_month[i];
		}
	}
	timestamp2 += days_this_year * 86400;

	for(new j=1970;j<year;j++) {
		timestamp2 += 31536000;
		if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
	}

	return timestamp2;
}


/**
 * Return if a Email is valid or not
 * @param  value
 */
stock ValidEmail(email[]) {
 new len=strlen(email);
 new cstate=0;
 new i;
 for(i=0;i<len;i++) {
  if ((cstate==0 || cstate==1) && (email[i]>='A' && email[i]<='Z') || (email[i]>='a' && email[i]<='z') || (email[i]=='.') || (email[i]=='-') || (email[i]=='_'))
  {
  } else {
    // Ok no A..Z,a..z,_,.,-
    if ((cstate==0) &&(email[i]=='@')) {
     // its an @ after the name, ok state=1;
     cstate=1;
    } else {
     // Its stuff which is not allowed
     return false;
    }
  }
 }
 if (cstate<1) return false;
 if (len<6) return false;
 // A toplevel domain has only 3 to 4 signs :-)
 if ((email[len-3]=='.') || (email[len-4]=='.') || (email[len-5]=='.')) return true;
 return false;
}

/**
 * Return a timestamp
 */
stock Time() {
 new hour,minute,second;
 new year, month,day;
 gettime(hour, minute, second);
 getdate(year, month, day);
 return mktime(hour,minute,second,day,month,year);
}


/**
 * Return a timestamp
 */
stock Now() {
 new hour,minute,second;
 new year, month,day;
 gettime(hour, minute, second);
 getdate(year, month, day);
 return mktime(hour,minute,second,day,month,year);
}


/**
 * Return the value of an hex-string
 * @param string
 */
stock HexToInt(string[]) {
 if (string[0]==0) return 0;
 new i;
 new cur=1;
 new res=0;
 for (i=strlen(string);i>0;i--) {
  if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  cur=cur*16;
 }
 return res;
}

/**
 * Return the int as string
 * @param  number
 */
stock IntToHex(number)
{
	new m=1;
	new depth=0;
	while (number>=m) {
		m = m*16;
		depth++;
	}
	depth--;
	new str[MAX_STRING];
	for (new i = depth; i >= 0; i--)
	{
		str[i] = ( number & 0x0F) + 0x30; // + (tmp > 9 ? 0x07 : 0x00)
		str[i] += (str[i] > '9') ? 0x07 : 0x00;
		number >>= 4;
	}
	str[8] = '\0';
	return str;
}

/**
 * Return the string as int
 * @param  string
 */
stock StrToInt(string[]) {
 return strval(string);
}

/**
 * Return the value as string
 * @param  value
 */
stock IntToStr(value) {
 new tmp[MAX_STRING];
 valstr(tmp, value);
 return tmp;
}

/**
 * Return the truncated value
 * @param  Float:value
 */
stock trunc(Float:value) {
	return floatround(value,floatround_floor);
}

/**
 * Sets money for player
 * @param  playerid
 *      howmuch
 */
stock SetPlayerMoney(playerid,howmuch) {
 PRIVATE_Last_Money[playerid]=howmuch;
 GivePlayerMoney(playerid,howmuch-GetPlayerMoney(playerid));
}

/**
 * Copies a file (Source file won't be deleted!)
 * @param  oldname
 *      newname
 * @requires WINDOWS
 */
stock fcopy(oldname[],newname[]) {
	new File:ohnd,File:nhnd;
	if (!fexist(oldname)) return false;
	ohnd=fopen(oldname,io_read);
	nhnd=fopen(newname,io_write);
	new buf2[1];
	new i;
	for (i=flength(ohnd);i>0;i--) {
		fputchar(nhnd, fgetchar(ohnd, buf2[0],false),false);
	}
	fclose(ohnd);
	fclose(nhnd);
	return true;
}


/**
 * Copies a textfile (Source file won't be deleted!)
 * @param  oldname
 *      newname
 */
stock fcopytextfile(oldname[],newname[]) {
	new File:ohnd,File:nhnd;
	if (!fexist(oldname)) return false;
	ohnd=fopen(oldname,io_read);
	nhnd=fopen(newname,io_write);
	new tmpres[MAX_STRING];
	while (fread(ohnd,tmpres)) {
		StripNewLine(tmpres);
		format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
		fwrite(nhnd,tmpres);
	}
	fclose(ohnd);
	fclose(nhnd);
	return true;
}


/**
 * Renames a file (Source file will be deleted!)
 * @param  oldname
 *      newname
 * @requires WINDOWS (because fcopy does)
 */
stock frename(oldname[],newname[]) {
  if (!fexist(oldname)) return false;
  fremove(newname);
  if (!fcopy(oldname,newname)) return false;
  fremove(oldname);
  return true;
}

/**
 * Renames a file (Source file will be deleted!)
 * @param  oldname
 *      newname
 */
stock frenametextfile(oldname[],newname[]) {
  if (!fexist(oldname)) return false;
  fremove(newname);
  if (!fcopytextfile(oldname,newname)) return false;
  fremove(oldname);
  return true;
}

/**
 * Strips Newline from the end of a string.
 * Idea: ******, Bugfixing (when length=1) by DracoBlue
 * @param  string
 */
stock StripNewLine(string[])
{
	new len = strlen(string);
	if (string[0]==0) return ;
	if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
		string[len - 1] = 0;
		if (string[0]==0) return ;
		if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
	}
}

/**
 * Copies items from one array/string into return.
 * @param  source
 *      index (where to start, 0 is first)
 *      numbytes (how much)
 */
ret_memcpy(source[],index=0,numbytes) {
	new tmp[MAX_STRING];
	new i=0;
	tmp[0]=0;
	if (index>=strlen(source)) return tmp;
	if (numbytes+index>=strlen(source)) numbytes=strlen(source)-index;
	if (numbytes<=0) return tmp;
	for (i=index;i<numbytes+index;i++) {
		tmp[i-index]=source[i];
		if (source[i]==0) return tmp;
	}
	tmp[numbytes]=0;
	return tmp;
}

/**
 * Copies items from one array/string into another.
 * @param  dest
 *      source
 *      count
 */
stock copy(dest[],source[],count) {
	dest[0]=0;
	if (count<0) return false;
	if (count>strlen(source)) count=strlen(source);
	new i=0;
	for (i=0;i<count;i++) {
		dest[i]=source[i];
		if (source[i]==0) return true;
	}
	dest[count]=0;
	return true;
}


/**
 * Deletes the first 'count' items of a array/string
 * @param  string[]
 *      count
 */
stock delete(string[],count) {
	new tmp[MAX_STRING];
	tmp[0]=0;
	if (count<=0) {
		format(tmp,sizeof(tmp),"%s",string);
		return tmp;
	}
	tmp=ret_memcpy(string,count,strlen(string));
	return tmp;
}

/**
 * Sets a string's value to source.
 * @param  dest
 *      source
 *      count
 */
stock set(dest[],source[]) {
	new count = strlen(source);
	new i=0;
	for (i=0;i<count;i++) {
		dest[i]=source[i];
	}
	dest[count]=0;
}

/**
 * Checks wether two strings are equal (case insensetive)
 * @param  str1
 *      str2
 */
stock equal(str1[],str2[],bool:ignorecase) {
  if (strlen(str1)!=strlen(str2)) return false;
  if (strcmp(str1,str2,ignorecase)==0) return true;
  return false;
}

/**
 * Returns an element of a string splitted by ' ', default index is 0.
 * @param  string
 *      index
 */
stock strtok(const string[], &index,seperator=' ')
{
	new length = strlen(string);
	new offset = index;
	new result[MAX_STRING];
	while ((index < length) && (string[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}

	result[index - offset] = EOS;
	if ((index < length) && (string[index] == seperator))
	{
		index++;
	}
	return result;
}

stock mod(up,down) {
 return up-(floatround((up/down),floatround_floor))*down;
}

stock div(up,down) {
 return (floatround((up/down),floatround_floor));
}

/**
 * Returns a hashed value in adler32 as int
 * @param  buf
 */
stock num_hash(buf[])
 {
	new length=strlen(buf);
  new s1 = 1;
  new s2 = 0;
  new n;
  for (n=0; n<length; n++) {
    s1 = (s1 + buf[n]) % 65521;
    s2 = (s2 + s1)   % 65521;
  }
  return (s2 << 16) + s1;
 }

/**
 * Returns a hashed value in adler32 as string
 * @param  buf
 */
stock hash(str2[]) {
  new tmpdasdsa[MAX_STRING];
  tmpdasdsa[0]=0;
  valstr(tmpdasdsa,num_hash(str2));
  return tmpdasdsa;
}

/**
 * Returns a string which has 'newstr' where 'trg' was before
 * @param  trg
 *      newstr
 *      src
 */
stock strreplace(trg[],newstr[],src[]) {
  new f=0;
  new s1[MAX_STRING];
  new tmp[MAX_STRING];
  format(s1,sizeof(s1),"%s",src);
  f = strfind(s1,trg);
  tmp[0]=0;
  while (f>=0) {
    strcat(tmp,ret_memcpy(s1, 0, f));
    strcat(tmp,newstr);
    format(s1,sizeof(s1),"%s",ret_memcpy(s1, f+strlen(trg), strlen(s1)-f));
    f = strfind(s1,trg);
  }
  strcat(tmp,s1);
  return tmp;
}

/**
 * Returns the string with lowercase
 * @param  txt
 */
stock strlower(txt[]) {
	new tmp[MAX_STRING];
	tmp[0]=0;
	if (txt[0]==0) return tmp;
	new i=0;
	for (i=0;i<strlen(txt);i++) {
		tmp[i]=tolower(txt[i]);
	}
	tmp[strlen(txt)]=0;
	return tmp;
}

/**
 * Returns the string with uppercase
 * @param  txt
 */
stock strupper(txt[]) {
	new tmp[MAX_STRING];
	tmp[0]=0;
	if (txt[0]==0) return tmp;
	new i=0;
	for (i=0;i<strlen(txt);i++) {
		tmp[i]=toupper(txt[i]);
	}
	tmp[strlen(txt)]=0;
	return tmp;
}
but my problem is:
when i enter the /register *password*< my server going down

Please say why?
Reply
#2

do you have a 'scriptfiles' folder?
Reply
#3

Quote:
Originally Posted by Vetle
do you have a 'scriptfiles' folder?
yeah
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)