18.03.2015, 16:32
pawn Код:
#include <dini>
#include <YSI\y_ini>
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 temp[MAX_STRING];
set(temp, nickname);
temp=strreplace(";","_01",temp);
temp=strreplace("!","_02",temp);
temp=strreplace("/","_03",temp);
temp=strreplace("\\","_04",temp);
temp=strreplace("[","_05",temp);
temp=strreplace("]","_06",temp);
temp=strreplace("?","_07",temp);
temp=strreplace(".","_08",temp);
temp=strreplace("*","_09",temp);
temp=strreplace("<","_10",temp);
temp=strreplace(">","_11",temp);
temp=strreplace("{","_12",temp);
temp=strreplace("}","_13",temp);
temp=strreplace(" ","_14",temp);
temp=strreplace("\"","_15",temp);
temp=strreplace(":","_16",temp);
temp=strreplace("|","_17",temp);
temp=strreplace("=","_18",temp);
return temp;
}
stock udb_decode(nickname[])
{
new temp[MAX_STRING];
set(temp,nickname);
temp=strreplace("_01",";",temp);
temp=strreplace("_02","!",temp);
temp=strreplace("_03","/",temp);
temp=strreplace("_04","\\",temp);
temp=strreplace("_05","[",temp);
temp=strreplace("_06","]",temp);
temp=strreplace("_07","?",temp);
temp=strreplace("_08",".",temp);
temp=strreplace("_09","*",temp);
temp=strreplace("_10","<",temp);
temp=strreplace("_11",">",temp);
temp=strreplace("_12","{",temp);
temp=strreplace("_13","}",temp);
temp=strreplace("_14"," ",temp);
temp=strreplace("_15","\"",temp);
temp=strreplace("_16",":",temp);
temp=strreplace("_17","|",temp);
temp=strreplace("_18","=",temp);
return temp;
}
stock udb_Exists(nickname[])
{
new temp[MAX_STRING];
format(temp,sizeof(temp),"%s.dudb.sav",udb_encode(nickname));
return fexist(temp);
}
stock udb_Remove(nickname[])
{
new temp[MAX_STRING];
format(temp,sizeof(temp),"%s.dudb.sav",udb_encode(nickname));
return fremove(temp);
}
stock udb_UserSetInt(nickname[],key[],value)
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
new INI:File = INI_Open(fname);
INI_SetTag(File, "data");
INI_WriteInt(File,key,value);
INI_Close(File);
return 1;
}
stock udb_UserSetFloat(nickname[],key[],Float:value)
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
new INI:File = INI_Open(fname);
INI_SetTag(File, "data");
INI_WriteFloat(File,key,value);
INI_Close(File);
return 1;
}
stock udb_UserSet(nickname[],key[],value[])
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
new INI:File = INI_Open(fname);
INI_SetTag(File, "data");
INI_WriteString(File,key,value);
INI_Close(File);
return 1;
}
stock udb_User(nickname[],key[])
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
format(fname,sizeof(fname), dini_Get(fname,key));
return fname;
}
stock udb_UserFloat(nickname[],key[],Float:value)
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
new INI:File = INI_Open(fname);
INI_WriteFloat(File,key,value);
INI_Close(File);
return 1;
}
stock udb_UserInt(nickname[],key[],value)
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
new INI:File = INI_Open(fname);
INI_WriteInt(File,key,value);
INI_Close(File);
return 1;
}
stock udb_CheckLogin(nickname[],pwd[])
{
new fname[MAX_STRING];
format(fname,sizeof(fname),"%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),"%s.dudb.sav",udb_encode(nickname));
new INI:File = INI_Open(fname);
udb_UserSetInt(nickname,"password_hash",udb_hash(pwd));
INI_Close(File);
return true;
}
stock udb_RenameUser(nickname[],newnick[])
{
new oldfname[MAX_STRING];
new newfname[MAX_STRING];
format(oldfname,sizeof(oldfname),"%s.dudb.sav",udb_encode(nickname));
format(newfname,sizeof(newfname),"%s.dudb.sav",udb_encode(newnick));
frenametextfile(oldfname,newfname);
return 1;
}
stock strreplace(trg[],newstr[],src[])
{
new f=0;
new s1[MAX_STRING];
new temp[MAX_STRING];
format(s1,sizeof(s1),"%s",src);
f = strfind(s1,trg);
temp[0]=0;
while (f>=0)
{
strcat(temp,ret_memcpy(s1, 0, f));
strcat(temp,newstr);
format(s1,sizeof(s1),"%s",ret_memcpy(s1, f+strlen(trg), strlen(s1)-f));
f = strfind(s1,trg);
}
strcat(temp,s1);
return temp;
}
stock frenametextfile(oldname[],newname[])
{
if (!fexist(oldname)) return false;
fremove(newname);
if (!fcopytextfile(oldname,newname)) return false;
fremove(oldname);
return true;
}