1
0

DUDB2.inc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /*
  2. * DUDB 2.1
  3. * (c) Copyright 2006 by DracoBlue
  4. *
  5. * @version : 2.1
  6. * @author : DracoBlue (http://dracoblue.com)
  7. * @date : 8th May 2006
  8. * @update : 2nd Dec 2006
  9. * @require : DUtils 1.6
  10. * @require : DINI 1.4
  11. *
  12. * This file is provided as is (no warranties).
  13. *
  14. * Feel free to use it, a little message in
  15. * about box is honouring thing, isn't it?
  16. *
  17. */
  18. #if defined _dudb_included
  19. #endinput
  20. #endif
  21. #define _dudb_included
  22. #pragma library dutils
  23. #include <dutils>
  24. #include <dini>
  25. #define dUser(%1).( udb_User(%1,
  26. #define dUserINT(%1).( udb_UserInt(%1,
  27. #define dUserSet(%1).( udb_UserSet(%1,
  28. #define dUserSetINT(%1).( udb_UserSetInt(%1,
  29. public udb_hash(buf[]) {
  30. new length=strlen(buf);
  31. new s1 = 1;
  32. new s2 = 0;
  33. new n;
  34. for (n=0; n<length; n++)
  35. {
  36. s1 = (s1 + buf[n]) % 65521;
  37. s2 = (s2 + s1) % 65521;
  38. }
  39. return (s2 << 16) + s1;
  40. }
  41. public udb_encode(nickname[]) {
  42. new tmp[MAX_STRING];
  43. set(tmp,nickname);
  44. tmp=strreplace("_","_00",tmp);
  45. tmp=strreplace(";","_01",tmp);
  46. tmp=strreplace("!","_02",tmp);
  47. tmp=strreplace("/","_03",tmp);
  48. tmp=strreplace("\\","_04",tmp);
  49. tmp=strreplace("[","_05",tmp);
  50. tmp=strreplace("]","_06",tmp);
  51. tmp=strreplace("?","_07",tmp);
  52. tmp=strreplace(".","_08",tmp);
  53. tmp=strreplace("*","_09",tmp);
  54. tmp=strreplace("<","_10",tmp);
  55. tmp=strreplace(">","_11",tmp);
  56. tmp=strreplace("{","_12",tmp);
  57. tmp=strreplace("}","_13",tmp);
  58. tmp=strreplace(" ","_14",tmp);
  59. tmp=strreplace("\"","_15",tmp);
  60. tmp=strreplace(":","_16",tmp);
  61. tmp=strreplace("|","_17",tmp);
  62. tmp=strreplace("=","_18",tmp);
  63. return tmp;
  64. }
  65. public udb_decode(nickname[]) {
  66. new tmp[MAX_STRING];
  67. set(tmp,nickname);
  68. tmp=strreplace("_01",";",tmp);
  69. tmp=strreplace("_02","!",tmp);
  70. tmp=strreplace("_03","/",tmp);
  71. tmp=strreplace("_04","\\",tmp);
  72. tmp=strreplace("_05","[",tmp);
  73. tmp=strreplace("_06","]",tmp);
  74. tmp=strreplace("_07","?",tmp);
  75. tmp=strreplace("_08",".",tmp);
  76. tmp=strreplace("_09","*",tmp);
  77. tmp=strreplace("_10","<",tmp);
  78. tmp=strreplace("_11",">",tmp);
  79. tmp=strreplace("_12","{",tmp);
  80. tmp=strreplace("_13","}",tmp);
  81. tmp=strreplace("_14"," ",tmp);
  82. tmp=strreplace("_15","\"",tmp);
  83. tmp=strreplace("_16",":",tmp);
  84. tmp=strreplace("_17","|",tmp);
  85. tmp=strreplace("_18","=",tmp);
  86. tmp=strreplace("_00","_",tmp);
  87. return tmp;
  88. }
  89. public udb_Exists(nickname[]) {
  90. new tmp[MAX_STRING];
  91. format(tmp,sizeof(tmp),"%s.dudb.sav",udb_encode(nickname));
  92. return fexist(tmp);
  93. }
  94. public udb_Remove(nickname[]) {
  95. new tmp[MAX_STRING];
  96. format(tmp,sizeof(tmp),"%s.dudb.sav",udb_encode(nickname));
  97. return dini_Remove(tmp);
  98. }
  99. public udb_UserSetInt(nickname[],key[],value) {
  100. new fname[MAX_STRING];
  101. format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  102. return dini_IntSet(fname,key,value);
  103. }
  104. public udb_UserSet(nickname[],key[],value[]) {
  105. new fname[MAX_STRING];
  106. format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  107. return dini_Set(fname,key,value);
  108. }
  109. public udb_User(nickname[],key[]) {
  110. new fname[MAX_STRING];
  111. format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  112. format(fname,sizeof(fname),dini_Get(fname,key));
  113. return fname;
  114. }
  115. public udb_UserInt(nickname[],key[]) {
  116. new fname[MAX_STRING];
  117. format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  118. return dini_Int(fname,key);
  119. }
  120. public udb_CheckLogin(nickname[],pwd[]) {
  121. new fname[MAX_STRING];
  122. format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  123. if (udb_UserInt(nickname,"password_hash")==udb_hash(pwd)) return true;
  124. return false;
  125. }
  126. public udb_Create(nickname[],pwd[]) {
  127. if (udb_Exists(nickname)) return false;
  128. new fname[MAX_STRING];
  129. format(fname,sizeof(fname),"%s.dudb.sav",udb_encode(nickname));
  130. dini_Create(fname);
  131. udb_UserSetInt(nickname,"password_hash",udb_hash(pwd));
  132. return true;
  133. }