Advertisement
Guest User

Untitled

a guest
Nov 3rd, 2014
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.71 KB | None | 0 0
  1. //==============================[includes]======================================
  2. #include <a_samp>
  3. #include <a_mysql>
  4. //===============================[MySQL данные]=================================
  5. #define MySQL_DEBUG 1//Включаем вывод всех запросов в лог(файл mysql_log).Значение 0-нет|1-да
  6. #define MySQL_HOST "localhost"//Хостинг нашей БД, чаще всего это именно "localhost"
  7. #define MySQL_USER "root"//Аккаунт от нашей БД, если ваш сервер на хостинге, то данные вам выдаёт ваш хостер
  8. #define MySQL_PASS ""//Пароль от нашей БД, если ваш сервер на хостинге, то данные вам выдаёт ваш хостер
  9. #define MySQL_DB "root"//Название базы данных, тут мы вписываем то, что вы вписали при создании базы данных в первом пункте(Denwer)
  10. //===============================[variable]=====================================
  11. new dbHandle;
  12. enum _player//объявление enuma
  13. {
  14. ID,//Сюда запишется ид аккаунта игрока
  15. AGE,//Сюда запишется возраст игрока
  16. SEX
  17. }
  18. new PLAYER [ MAX_PLAYERS ] [ _player ] ;//Создаём переменную, с помощью которой мы будем работать с данными из enum`а. С помощью этой переменной мы создаём макет, по которому будем работать с данными
  19. new PlayerName[MAX_PLAYERS];//Переменная с именем игрока
  20. //==============================================================================
  21. stock MySQLConnect ( )
  22. {
  23. dbHandle = mysql_connect ( MySQL_HOST, MySQL_USER, MySQL_DB, MySQL_PASS ) ;//Подключение к базе данных и объявление её переменной dbHandle
  24. switch ( mysql_ping ( ) )//Проверяем через пинг активность подключения
  25. {
  26. case 1: print ( "MySQL подключение: подключено." ) ;//Выводим в консоль активность
  27. case -1: print ( "MySQL подключение: не подключено." ) ;//Выводим в консоль отсутствие соединения
  28. }
  29. mysql_debug ( MySQL_DEBUG ) ;//Включаем вывод всех запросов в лог(файл mysql_log)
  30. mysql_function_query( dbHandle, "SET NAMES cp1251", false, "", "" ) ;//Придаём именам необходимый формат для записи в базу
  31. return 1;
  32. }
  33. stock ClearPlayerData ( playerid )
  34. {
  35. PLAYER [ playerid ] [ ID ] = 0;
  36. PLAYER [ playerid ] [ AGE ] = 0;
  37. PLAYER [ playerid ] [ SEX ] = 0;
  38. }
  39. main()
  40. {
  41. print(" RolePlay");
  42. }
  43. stock SaveAccount ( playerid )
  44. {
  45. new query [ 144 ] ;
  46. format ( query, sizeof query, "UPDATE `users` SET \
  47. `sex` = '%d' \
  48. `age` = '%d' \
  49. WHERE `id` = '%d' LIMIT 1",
  50. PLAYER [ playerid ] [ SEX ] ,
  51. PLAYER [ playerid ] [ AGE ] ,
  52. PLAYER [ playerid ] [ ID ] ) ;
  53. mysql_function_query ( dbHandle, query, false, "", "" ) ;
  54. return 1;
  55. }
  56.  
  57. public OnGameModeInit()
  58. {
  59. //===================================[MySQL connection]=========================
  60. MySQLConnect ( ) ;
  61. return 1;
  62. }
  63. forward connection( playerid );
  64. public connection( playerid )
  65. {
  66. new query [ 60 + MAX_PLAYER_NAME ];
  67. format ( query, sizeof query, "SELECT `id` FROM `users` WHERE `login` = '%s' LIMIT 1", PlayerName [ playerid ] ) ;//Наш SQL запрос.SELECT-Выбираем ID из таблицы `users` где наш логин равен нашему имени
  68. mysql_function_query ( dbHandle, query, true, "CheckPlayerRegistered", "ii", playerid, 0 ) ;//вызываем коллбэк, проверку зарегистрирован игрок или нет
  69. SetPlayerPos(playerid, 1767.1313, -1897.1318, 15.3746);//Координаты для камеры(интро)
  70. SetCameraBehindPlayer(playerid);//камера за спиной
  71. SetPlayerCameraPos(playerid, 1767.1313, -1897.1318, 15.3746);//Координаты для камеры(интро)
  72. SetPlayerCameraLookAt(playerid, 1767.1313, -1897.1318, 15.3746);//Координаты для камеры(интро)
  73. return 1;
  74. }
  75.  
  76. forward CheckPlayerRegistered ( playerid );
  77. public CheckPlayerRegistered ( playerid )
  78. {
  79. new rows, fields ;
  80. cache_get_data ( rows, fields ) ;
  81. if ( rows )//если нашли аккаунт,то авторизация
  82. {
  83. ShowPlayerDialog ( playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "{FFFFFF}Добро пожаловать на сервер.\nВведите ваш пароль:", "Вход", "" ) ;
  84. }
  85. else//если не нашли аккаунт,то регистрация
  86. {
  87. ShowPlayerDialog ( playerid, 0, DIALOG_STYLE_PASSWORD, "Регистрация", "{FFFFFF}Добро пожаловать на сервер.\nВведите пароль для аккаунта:", "Ввод", "" ) ;
  88. }
  89. return 1;
  90. }
  91. forward PlayerLogin ( playerid );
  92. public PlayerLogin ( playerid )
  93. {
  94. new rows, fields, temp [ 128 ] ;
  95. cache_get_data ( rows, fields ) ;
  96. if ( rows )
  97. {
  98. cache_get_field_content ( 0, "id", temp )/*записываем на temp,а с temp на переменную игрока*/ , PLAYER [ playerid ] [ ID ] = strval ( temp );//загружаем ID аккаунта игрока,где "id" это колонка таблицы,a strval ( temp )-целое число
  99. cache_get_field_content ( 0, "age", temp )/*записываем на temp,а с temp на переменную игрока*/ , PLAYER [ playerid ] [ AGE ] = strval ( temp );//загружаем возраст игрока,где "age" это колонка таблицы
  100. cache_get_field_content ( 0, "sex", temp )/*записываем на temp,а с temp на переменную игрока*/ , PLAYER [ playerid ] [ SEX ] = strval ( temp );//загружаем возраст игрока,где "age" это колонка таблицы
  101. SetSpawnInfo ( playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ;//дабы избежать краша игры
  102. SetPVarInt ( playerid, "Logged", 1 ) ;//ПВар,авторизован игрок или нет
  103. DeletePVar ( playerid, "WrongPassword" ) ;//кол-во неверных вводов пароля
  104. if(PLAYER[playerid][AGE] != 0)//еси возраст не равен нулю(таким образом мы проверяем до конца ли зарегестрировался игрок)
  105. {
  106. SpawnPlayer ( playerid ) ;
  107. }//если же равен,то регистрация продолжается
  108. else ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Возраст","{FFFFFF}Введите Ваш игровой возраст\n","Ввести","Назад");
  109. }
  110. else
  111. {
  112. if ( GetPVarInt ( playerid, "WrongPassword" ) == 4 ){ Kick ( playerid ) ; return 1; }
  113. SetPVarInt ( playerid, "WrongPassword", GetPVarInt ( playerid, "WrongPassword" ) + 1 ) ;
  114. ShowPlayerDialog ( playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", "{FFFFFF}Добро пожаловать на сервер.\nВведите ваш пароль:", "Вход", "" ) ;
  115. }
  116. return 1;
  117. }
  118. public OnGameModeExit()
  119. {
  120. return 1;
  121. }
  122.  
  123. public OnPlayerConnect(playerid)
  124. {
  125. GetPlayerName ( playerid, PlayerName [ playerid ] , MAX_PLAYER_NAME ) ;//Получаем имя
  126. connection( playerid );
  127. ClearPlayerData ( playerid );//очищаем данные игрока
  128. return 1;
  129. }
  130.  
  131. public OnPlayerDisconnect(playerid, reason)
  132. {
  133. SaveAccount ( playerid );
  134. return 1;
  135. }
  136.  
  137. public OnPlayerSpawn(playerid)
  138. {
  139. if ( GetPVarInt ( playerid, "Logged" ) == 0)return true;
  140. SetCameraBehindPlayer(playerid);//камера за спиной
  141. SetPlayerPos(playerid, 1767.1313, -1897.1318, 15.3746);
  142. return 1;
  143. }
  144.  
  145. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  146. {
  147. if(dialogid == 0)
  148. {
  149. if(response)
  150. {
  151. new query [ 144 ], temp [ 32 ] ;
  152. mysql_real_escape_string ( inputtext, temp ) ;
  153. format ( query, sizeof query, "INSERT INTO `users` ( `login`, `password` ) VALUES ( '%s', '%s' )", PlayerName [ playerid ], temp ) ;//Делаем запрос,создать аккаунт где логин и пароль равны имени игрока и введённому в диалог тексту
  154. mysql_function_query ( dbHandle, query, false, "", "" ) ;//Отправка запроса
  155. format ( query, sizeof query, "SELECT * FROM `users` WHERE `login` = '%s' AND `password` = '%s' LIMIT 1", PlayerName [ playerid ], temp ) ;//Выводим в коллбэк аккаун где логин и пароль равны мени игрока и введённому паролю
  156. mysql_function_query ( dbHandle, query, true, "PlayerLogin", "i", playerid ) ;//наш коллбэк
  157. }
  158. return 1;}
  159. if(dialogid == 1)
  160. {
  161. if(response)
  162. {
  163. new query [ 144 ], temp [ 32 ] ;
  164. mysql_real_escape_string ( inputtext, temp ) ;
  165. format ( query, sizeof query, "SELECT * FROM `users` WHERE `login` = '%s' AND `password` = '%s' LIMIT 1", PlayerName [ playerid ] , temp ) ;//Выводим в коллбэк аккаун где логин и пароль равны мени игрока и введённому паролю
  166. mysql_function_query ( dbHandle, query, true, "PlayerLogin", "i", playerid ) ;//наш коллбэк
  167. }
  168. return 1;}
  169. if(dialogid == 2)
  170. {
  171. if (!response)ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Возраст","{FFFFFF}Введите Ваш игровой возраст\n","Ввести","Назад");
  172. if(response)
  173. {
  174. if(strval(inputtext) < 18 || strval(inputtext) > 95)return SendClientMessage(playerid,-1,"[Регистрация]Возраст не может быть меньше 18 и не больше 95"),ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Возраст","{FFFFFF}Введите Ваш игровой возраст\n","Готово","Назад");//если значение меньше 12 и больше 120,то заного диалог
  175. PLAYER[playerid][AGE] = strval(inputtext);//Присвоили введённое значение
  176. ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Пол","Мужик\nБаба","Выбрать","Назад");
  177. }
  178. return 1;}
  179. if(dialogid == 3)
  180. {
  181. if(response)
  182. {
  183. if(listitem == 0){PLAYER[playerid][SEX] = 1; SendClientMessage(playerid,-1,"Вы Мужик");}
  184. if(listitem == 1){PLAYER[playerid][SEX] = 2; SendClientMessage(playerid,-1,"Вы Баба");}
  185. SpawnPlayer(playerid);//спавним игрока
  186. }
  187. return 1;}
  188. return 1;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement