Просмотр файла game/2/datafunc.php

Размер файла: 9.22Kb
  1. <?
  2.  
  3. $gamedays = 27; // Оплачиваемый период
  4. $freedays = 3000; // Бесплатно дней можно играть
  5.  
  6. /*
  7.  
  8. Blade: 01.06.2004: В функцию SetData() и checkpass() внесены изменения, позволяющие записывать игровые данные без пароля (чтобы убрать возможность клонирования вещей)
  9. Blade: 16.09.2004: скопировал сюда функцию SetPartner()
  10. Blade: 18.01.2005: изменил GetData() с учетом сервера
  11. Blade: 20.04.2005: ввел проверку на вход только с одного сервера
  12. Blade: 21.04.2005: убрал проверки, т.к. изменил f_connect.php
  13.  
  14. Добавились 2 функции и 2 переменные (см.выше)
  15.  
  16. function GetGameTime($login, $pass, &$time)
  17. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  18. //Возвращает время (в $time) окончания оплаченного периода или 0 - если оплаты не было
  19.  
  20. function SetGameTime($login, $pass, $time)
  21. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  22. // Запрещает устанавливать $time > (time() + ($gamedays+$freedays)*24*3600)
  23. */
  24.  
  25. /*
  26. 3 функции: SetData, GetData, SetUser
  27.  
  28. function SetData($login,$pass,$data)
  29. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  30.  
  31. function GetData($login,$pass,&$data)
  32. { // Возвращает пустую строку в случае успеха (данные возвращаются в $data) или сообщение об ошибке.
  33.  
  34. function SetUser($login,$oldpass,$newpass)
  35. {// Регистрация нового пользователя (oldpass = "") или смена пароля.
  36. // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  37.  
  38. При авторизации login и pass - не более 10 символов, а также огрничения в синтаксисе (только
  39. латинские буквы и знак подчёркивания)
  40. При обращении к функциям авторизации стоит 30-секундная защита от подбора пароля.
  41.  
  42. */
  43.  
  44. $NOT_SET = "NOT_SET";
  45. require("items/i.w.s.steel.ssp"); // Настройки БД
  46. //require($GLOBALS["DOCUMENT_ROOT"]."/antimat.ssp"); // Антимат-фильтр ( чтобы ники матерные не регистрировали)
  47.  
  48.  
  49. function ValidNN($s)
  50. {
  51. return !eregi("[^a-z0-9_]",$s);
  52. }
  53.  
  54. function ValidPass($s)
  55. {
  56. return !eregi("[^a-z0-9]",$s);
  57. }
  58.  
  59. function InitParam($N,$V)
  60. {
  61. global $Names,$Values;
  62. $Names = $N;
  63. $Values = $V;
  64. }
  65.  
  66. function GetParam($Name)
  67. {
  68. global $Names,$Values,$NOT_SET;
  69. $Name = strtolower($Name);
  70. $Nlist = split(":",$Names);
  71. for ($i=0; $i<count($Nlist); $i++) if ($Nlist[$i] == $Name) break;
  72. if ($i == count($Nlist)) return $NOT_SET;
  73. $Vlist = split(":",$Values);
  74. return stripslashes(str_replace("!~!",":",$Vlist[$i]));
  75. }
  76.  
  77.  
  78. function SetParam($Name,$Value)
  79. {
  80. global $Names,$Values,$NOT_SET;
  81. $Nlist = split(":",$Names);
  82. $Name = strtolower($Name);
  83. $Value = addslashes(str_replace(":","!~!",$Value));
  84. for ($i=0; $i<count($Nlist); $i++) if ($Nlist[$i] == $Name) break;
  85.  
  86. if ($i == count($Nlist) and ($Value != $NOT_SET))
  87. { // Добавляем имя и значение
  88. $Names .= ":$Name";
  89. $Values .= ":$Value";
  90. }
  91. else
  92. {
  93. $Vlist = split(":",$Values);
  94. $Vlist[$i] = $Value;
  95. $Values = implode(":",$Vlist);
  96. if ($Value == $NOT_SET)
  97. { // Удаление имени и значения
  98. $Nlist[$i] = $NOT_SET;
  99. $Names = implode(":",$Nlist);
  100. $Names = str_replace(":$NOT_SET","",$Names);
  101. $Values = str_replace(":$NOT_SET","",$Values);
  102. }
  103. }
  104. }
  105.  
  106.  
  107. function checkpass($nick, $pass, $fields, &$result,$skippass=0)
  108. { //
  109. global $PassDelay;
  110. if ($fields == "") $fields = "pass,lastrefr";
  111. else if ($fields !== "*") $fields .= ",pass,lastrefr";
  112.  
  113. $now = time();
  114. $sql="select $fields from users where nick='$nick'";
  115. $result=mysql_query($sql) or die(mysql_error());
  116. if (mysql_num_rows($result)!=1) return "Логин не найден";
  117.  
  118. $row = mysql_fetch_array($result);
  119. $dt = $PassDelay - $now + $row['lastrefr'];
  120. if ($dt > 0) return "Повторите через $dt"."sec";
  121.  
  122. if ($row['pass']!=$pass && !$skippass)
  123. {
  124. $sql = "update users set lastrefr=$now where nick='$nick'";
  125. mysql_query($sql) or die(mysql_error());
  126. return "Неверный пароль";
  127. }
  128. return "";
  129. }
  130.  
  131. function openDB()
  132. {
  133. global $server,$user,$dbpass,$dbname;
  134. $sesDB = @mysql_connect($server,$user,$dbpass);
  135. mysql_query("SET NAMES 'cp1251'");
  136. mysql_query("SET CHARACTER SET 'cp1251'");
  137. mysql_query("SET collation_connection=cp1251_general_ci");
  138. mysql_query("SET character_set_results=cp1251");
  139. mysql_query("SET character_set_client=cp1251");
  140. mysql_query("SET collation_database=cp1251_general_ci");
  141. if (!$sesDB) return "База данных недоступна. Повторите через 5мин";
  142. $ok = @mysql_select_db($dbname,$sesDB);
  143. if (!$ok)return "База данных недоступна. Повторите через 5мин";
  144. return "";
  145. }
  146.  
  147. function SetData($login,$pass,$data)
  148. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  149. global $error, $Names, $Values;
  150. if (empty($login)) return "Логин не задан";
  151. if (empty($pass)) return "Пароль не задан";
  152.  
  153. $maxdata = 5000; // Максимальная длина данных
  154. if(strlen($data)>$maxdata) return "Слишком длинная строка.";
  155.  
  156. $error =openDB();
  157. if ($error != "") return $error;
  158.  
  159. $ok = checkpass($login,$pass,"names,vals",$result,1); // сохраняет без пароля!
  160. if ($ok != "") return $ok;
  161. InitParam(mysql_result($result,0, "names"),mysql_result($result,0, "vals"));
  162.  
  163. SetParam('gamedata',$data);
  164.  
  165. $sqlUpd = "update users set names='$Names', vals='$Values' where nick = '$login'";
  166. mysql_query($sqlUpd) or die(mysql_error());
  167. mysql_close();
  168. }
  169.  
  170. function GetData($login,$pass,&$data,$srv=0)
  171. { // Возвращает пустую строку в случае успеха (данные возвращаются в $data) или сообщение об ошибке.
  172. global $error, $Names, $Values, $NOT_SET;
  173. if (empty($login)) return "Логин не задан";
  174. if (empty($pass)) return "Пароль не задан";
  175.  
  176.  
  177. $error =openDB();
  178. if ($error != "") return $error;
  179.  
  180. $ok = checkpass($login,$pass,"names,vals",$result);
  181. if ($ok != "") return $ok;
  182. InitParam(mysql_result($result,0, "names"),mysql_result($result,0, "vals"));
  183. mysql_close();
  184. $data = GetParam("gamedata");
  185. if ($data == $NOT_SET) return "Данные не найдены";
  186.  
  187. /*
  188. // проверим сервер
  189. if ($srv>0) {
  190. $tus=unserialize($data);
  191. if (gettype($tus)!="array") return "";
  192. if ($tus["srv"]>0 && $srv!=$tus["srv"]) return "Чтобы играть на сервере ".$srv.", вначале зайдите на сервер ".$tus["srv"]." и сохранитесь на нем (персонаж должен покинуть игру), либо выберите Опции аккаунта и Сменить сервер.";
  193. }
  194. */
  195. return "";
  196. }
  197.  
  198. function SetUser($login,$oldpass,$newpass)
  199. { // Регистрация нового пользователя (oldpass = "") или смена пароля.
  200. // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  201. global $RegStatus,$DefRefrInt,$DefMessLim,$CommonMode;
  202.  
  203. if (empty($login)) return "Логин не задан";
  204. if (empty($newpass)) return "Пароль не задан";
  205. if (!ValidNN($login)) return "Неверный синтаксис в логине";
  206. if (!ValidPass($newpass)) return "Неверный синтаксис в пароле";
  207.  
  208. $login=substr($login,0,10);
  209. $newpass=substr($newpass,0,10);
  210.  
  211. $BadWord = GetBadWord($login);
  212. if ($BadWord != "") return "Логин содержит запрещённое слово";
  213.  
  214. $error =openDB();
  215. if ($error != "") return $error;
  216.  
  217. if ($oldpass !="")
  218. {
  219. $ok = checkpass($login,$oldpass,"",$result);
  220. if ($ok != "") return $ok;
  221. $sqlUpd = "update users set pass='$newpass' where nick = '$login' and pass='$oldpass'";
  222. mysql_query($sqlUpd) or die(mysql_error());
  223. }
  224. else
  225. {
  226. $sqlSel="select * from users where nick = '$login'";
  227. $result=mysql_query($sqlSel) or die(mysql_error());
  228. $Count=mysql_num_rows($result);
  229. if ($Count != 0) return "Такой логин уже зарегистирован";
  230. $now = time();
  231. $sqllogin ="insert into users (status,sent,regtime,refrint,messlim,mode,nick,pass) values ('$RegStatus','0', '$now', '$DefRefrInt','$DefMessLim', '$CommonMode','$login', '$newpass')";
  232. mysql_query($sqllogin) or die(mysql_error());
  233. }
  234. mysql_close();
  235. return "";
  236. }
  237.  
  238. function GetGameTime($login, $pass, &$time)
  239. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  240. //Возвращает время (в $time) окончания оплаченного периода или 0 - если оплаты не было
  241. global $error;
  242. if (empty($login)) return "Логин не задан";
  243. if (empty($pass)) return "Пароль не задан";
  244.  
  245. openDB();
  246. if ($error != "") return $error;
  247.  
  248. $ok = checkpass($login,$pass,"gametime",$result);
  249. if ($ok != "") return $ok;
  250. $time = mysql_result($result,0, "gametime");
  251. mysql_close();
  252. return "";
  253. }
  254.  
  255. function SetGameTime($login, $pass, $time)
  256. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  257. // Запрещает устанавливать $time > (time() + ($gamedays+$freedays)*24*3600)
  258. global $error, $gamedays, $freedays;
  259. if (empty($login)) return "Логин не задан";
  260. if (empty($pass)) return "Пароль не задан";
  261.  
  262. openDB();
  263. if ($error != "") return $error;
  264.  
  265. $ok = checkpass($login,$pass,"",$result);
  266. if ($ok != "") return $ok;
  267.  
  268. if ($time > (time() + ($gamedays+$freedays)*24*3600)) return "Период оплаты превышает ".($gamedays+$freedays)." дней";
  269. $sqlUpd = "update users set gametime='$time' where nick = '$login' and pass='$pass'";
  270. mysql_query($sqlUpd) or die(mysql_error());
  271. mysql_close();
  272. return "";
  273. }
  274.  
  275.  
  276.  
  277. function SetPartner($login, $pi)
  278. { // Возвращает пустую строку в случае успеха или сообщение об ошибке.
  279. // Фиксирует партнёра для ника (login)
  280. // Внимание - не проводится проверка на наличие login-а
  281. global $error;
  282. openDB();
  283. if ($error != "") return $error;
  284. $sqlUpd = "update users set pi='$pi' where nick = '$login'";
  285. mysql_query($sqlUpd) or die(mysql_error());
  286.  
  287. $now = time();
  288. $sqlIns ="insert into partners (time,nick,pi) values ('$now','$login','$pi')";
  289. mysql_query($sqlIns) or die(mysql_error());
  290. mysql_close();
  291. return "";
  292. }
  293.  
  294.  
  295.  
  296. ?>