Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2018
631
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 17.99 KB | None | 0 0
  1. // This is a comment
  2. // uncomment the line below if you want to write a filterscript
  3. //#define FILTERSCRIPT
  4.  
  5. #include <a_samp>
  6. #include <fix>
  7. #include "streamer"
  8. #include "a_actor"
  9. #include "a_mysql"
  10. #include "dc_cmd"
  11. #include "sscanf2"
  12. #include <mxdate>
  13. #include <foreach>
  14. //=======================================[ Дефайны ]========================================================================
  15.  
  16. //--------------База данных-------------
  17.  
  18. #define     SQL_HOST    "localhost"
  19. #define     SQL_USER    "root"
  20. #define     SQL_PASS    "mypwd"
  21. #define     SQL_DB      "mydb"
  22.  
  23. //-------------Дефайны функций----------
  24. #define     SCM             SendClientMessage
  25. #define     SCMTA           SendClientMessageToAll
  26. #define     SPD             ShowPlayerDialog
  27.  
  28. //-------------Дефайны цвета------------
  29. #define     COLOR_GREY          0xAFAFAFAA
  30. #define     COLOR_YELLOW        0xF7FF00FF
  31. #define     COLOR_WHITE         0xFFFFFFFF
  32. #define     COLOR_RED           0xF0320CFF
  33. #define     COLOR_ORANGEYELLOW  0xFFDF0FFF
  34. #define     COLOR_LIGHTRED      0xFF4530FF
  35. #define     COLOR_LIGHTGREY     0xD1D1D1FF
  36. #define     COLOR_BLUE          0x3657FFFF
  37. #define     COLOR_SALAD         0xA0FF33FF
  38. #define     COLOR_GREEN         0x4BCC2BFF
  39. #define     COLOR_ORANGE        0xFF7A05FF
  40.  
  41. #define     SERVER_NAME     "Dawn RolePlay"//название сервера
  42.  
  43. //----------------------Правила сервера-------------------
  44. new rules[] =
  45. "{FFDA1F}1. Основное{FFFFFF}\n"\
  46. "-Запрещено использовать любые читы, трейнеры, моды или CLEO скрипты\n"\
  47. "-Запрещен DeathMatch (DM) - убийство и нанесение вреда игрокам без причины\n"\
  48. "-Запрещено убивать игроков на спавне (на месте, где они появляются в игре)\n"\
  49. "-Запрещены убийства путем наезда на него или стрельбы из авто\n"\
  50. "-Запрещено уходить на паузу в целях спасения от нападающих\n"\
  51. "-Запрещено использование возможностей сервера для создания неудобств другим игрокам\n",
  52. rules_1[] =
  53. "{FFDA1F}2. Процесс общения{FFFFFF}\n"\
  54. "-Запрещен мат, оскорбление других игроков\n"\
  55. "-Запрещены угрозы другим игрокам (не относящиеся к игровому процессу)\n"\
  56. "-Запрещено писать транслитом (например ""ya zawel na server"")\n"\
  57. "-Запрещена любая реклама сторонних ресурсов\n"\
  58. "-Запрещено флудить (часто повторять одинаковые фразы, или фразы без смысловой нагрузки)\n",
  59. rules_2[] =
  60. "{FFDA1F}3. Администрация{FFFFFF}\n"\
  61. "-Необходимо сообщать администрации сервера о любых случаях нарушения данных правил\n"\
  62. "-Администрация самостоятельно выбирает штрафные санкции для каждого конкретного случая\n"\
  63. "-Санкции могут применяться сразу после нарушения или через время (например, впослдествии поступления жалобы)\n"\
  64. "-Если штрафная санкция была применена к вам ошибочно, свяжитесь с администрацией";
  65.  
  66. enum    player
  67. {
  68.     ID[6],
  69.     NAME[MAX_PLAYER_NAME +1],
  70.     MONEY[128],
  71.     LEVEL[4],
  72. }
  73. new pInfo[MAX_PLAYERS][player];
  74.  
  75. new query[256];
  76.  
  77. main()
  78. {
  79.     print("\n----------------------------------");
  80.     print(" Blank Gamemode by your name here");
  81.     print("----------------------------------\n");
  82. }
  83. //new MySQL: sql;
  84. new MySQL: cHandle;
  85. public OnGameModeInit()
  86. {
  87.     //=======================================[ Соединение с базой данных ]==================================================
  88.     new MySQLOpt: option_id = mysql_init_options(); //  Опции MySQL
  89.     mysql_set_option(option_id, AUTO_RECONNECT, true);  //  Авто переподключение
  90.     cHandle = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB, option_id);   // Ф-я подключения
  91.     if(cHandle == MYSQL_INVALID_HANDLE || mysql_errno(cHandle) != 0) // роверка на подключение к базе данных
  92.     {
  93.         print("[MySQL] Не удалось установить соединение с базой данных."); // Вывод сообщения в консоль
  94.  
  95.         SendRconCommand("exit"); // Остановка сервера
  96.         return 1;
  97.     }
  98.     print("[MySQL] Соединение с базой данных успешно установленно.");
  99.     //mysql_log(ERROR | WARNING);
  100.     mysql_log(ERROR | WARNING);
  101.  
  102.     DisableInteriorEnterExits();
  103.     EnableStuntBonusForAll(0);
  104.     SetGameModeText("test");
  105.     SendRconCommand("hostname "SERVER_NAME"");
  106.     rules[sizeof(rules)-1] = '\n';
  107.     rules_1[sizeof(rules_1)-1] = '\n';
  108.     rules_2[sizeof(rules_2)-1] = '\0';
  109.     AddPlayerClass(0,1755.1631,-1894.1062,13.5568,268.8526,0,0,0,0,0,0);
  110.     return 1;
  111. }
  112. public OnGameModeExit()
  113. {
  114.     mysql_close();  //  Закрываем соединение с базой данных
  115.     return 1;
  116. }
  117.  
  118. public OnPlayerRequestClass(playerid, classid)
  119. {
  120.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  121.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  122.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  123.     return 1;
  124. }
  125.  
  126. public OnPlayerConnect(playerid)
  127. {
  128.     GetPlayerName(playerid, pInfo[playerid][NAME], MAX_PLAYER_NAME);
  129.     SetTimerEx("CheckPlayerExistance", 1000, 0, "i", playerid);
  130.     return 1;
  131. }
  132. public OnPlayerDisconnect(playerid, reason)
  133. {
  134.     //save_account(playerid);
  135.     mysql_close();
  136.     return 1;
  137. }
  138.  
  139. public OnPlayerSpawn(playerid)
  140. {
  141.     clear_player(playerid);
  142.     return 1;
  143. }
  144.  
  145. public OnPlayerDeath(playerid, killerid, reason)
  146. {
  147.     return 1;
  148. }
  149.  
  150. public OnVehicleSpawn(vehicleid)
  151. {
  152.     return 1;
  153. }
  154.  
  155. public OnVehicleDeath(vehicleid, killerid)
  156. {
  157.     return 1;
  158. }
  159.  
  160. public OnPlayerText(playerid, text[])
  161. {
  162.     return 1;
  163. }
  164.  
  165. public OnPlayerCommandText(playerid, cmdtext[])
  166. {
  167.     if (strcmp("/test", cmdtext, true, 10) == 0)
  168.     {
  169.         GivePlayerMoney(playerid, 50000);
  170.         // Do something here
  171.         return 1;
  172.     }
  173.     return 0;
  174. }
  175.  
  176. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  177. {
  178.     return 1;
  179. }
  180.  
  181. public OnPlayerExitVehicle(playerid, vehicleid)
  182. {
  183.     return 1;
  184. }
  185.  
  186. public OnPlayerStateChange(playerid, newstate, oldstate)
  187. {
  188.     return 1;
  189. }
  190.  
  191. public OnPlayerEnterCheckpoint(playerid)
  192. {
  193.     return 1;
  194. }
  195.  
  196. public OnPlayerLeaveCheckpoint(playerid)
  197. {
  198.     return 1;
  199. }
  200.  
  201. public OnPlayerEnterRaceCheckpoint(playerid)
  202. {
  203.     return 1;
  204. }
  205.  
  206. public OnPlayerLeaveRaceCheckpoint(playerid)
  207. {
  208.     return 1;
  209. }
  210.  
  211. public OnRconCommand(cmd[])
  212. {
  213.     return 1;
  214. }
  215.  
  216. public OnPlayerRequestSpawn(playerid)
  217. {
  218.     return 1;
  219. }
  220.  
  221. public OnObjectMoved(objectid)
  222. {
  223.     return 1;
  224. }
  225.  
  226. public OnPlayerObjectMoved(playerid, objectid)
  227. {
  228.     return 1;
  229. }
  230.  
  231. public OnPlayerPickUpPickup(playerid, pickupid)
  232. {
  233.     return 1;
  234. }
  235.  
  236. public OnVehicleMod(playerid, vehicleid, componentid)
  237. {
  238.     return 1;
  239. }
  240.  
  241. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  242. {
  243.     return 1;
  244. }
  245.  
  246. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  247. {
  248.     return 1;
  249. }
  250.  
  251. public OnPlayerSelectedMenuRow(playerid, row)
  252. {
  253.     return 1;
  254. }
  255.  
  256. public OnPlayerExitedMenu(playerid)
  257. {
  258.     return 1;
  259. }
  260.  
  261. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  262. {
  263.     return 1;
  264. }
  265.  
  266. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  267. {
  268.     return 1;
  269. }
  270.  
  271. public OnRconLoginAttempt(ip[], password[], success)
  272. {
  273.     return 1;
  274. }
  275.  
  276. public OnPlayerUpdate(playerid)
  277. {
  278.     return 1;
  279. }
  280.  
  281. public OnPlayerStreamIn(playerid, forplayerid)
  282. {
  283.     return 1;
  284. }
  285.  
  286. public OnPlayerStreamOut(playerid, forplayerid)
  287. {
  288.     return 1;
  289. }
  290.  
  291. public OnVehicleStreamIn(vehicleid, forplayerid)
  292. {
  293.     return 1;
  294. }
  295.  
  296. public OnVehicleStreamOut(vehicleid, forplayerid)
  297. {
  298.     return 1;
  299. }
  300.  
  301. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  302. {
  303.     switch(dialogid)
  304.     {
  305.         case    1:
  306.         {
  307.             if(!response)
  308.             {
  309.                 SPD(playerid, 35, DIALOG_STYLE_MSGBOX, "{FFEF0D}Ошибка", "01", "Закрыть", "");
  310.                 SCM(playerid, COLOR_RED, "Введите /q(/quit) чтобы выйти.");
  311.                 Kick(playerid);
  312.                 return 1;
  313.             }
  314.             else
  315.             {
  316.                 if(!strlen(inputtext) || strlen(inputtext) < 8 || strlen(inputtext) > 16)
  317.                 {
  318.                     SCM(playerid, COLOR_RED, "[Система] Ошибка: Минимальная длинна пароля 8 символов, максимальная 16.");
  319.                 }
  320.                 else
  321.                 {
  322.                     new Characters[][2] = {"1","2","3","4","5","6","7","8","9"};
  323.                     for(new i=0; i<sizeof(Characters); i++)
  324.                     {
  325.                         if(strfind(pInfo[playerid][NAME], Characters[i], true) != -1)
  326.                         {
  327.                             {
  328.                                 SPD(playerid, 35, DIALOG_STYLE_MSGBOX, "{FFEF0D}Ошибка", "Ваш ник не должен содержать цифры. Измените его и повторите регистрацию", "Закрыть", "");
  329.                                 SCM(playerid, COLOR_RED, "Введите /q(/quit) чтобы выйти.");
  330.                                 Kick(playerid);
  331.                                 return 1;
  332.                             }
  333.                         }
  334.                     }
  335.                     SetPVarString(playerid, "reg_pass", inputtext);
  336.                     SPD(playerid, 2, DIALOG_STYLE_INPUT, "{1472FF}Регстрация - Электронная почта", "{FFFFFF}Введите адрес Вашей электронной почты\nИспользуя его, вы сможете восстановить доступ к аккаунту\nв случае взлома или если забудете пароль.\n\nНа email мы вышлем ссылку. В течение 14 дней Вы можете\nперейти по ней для подтверждения почты.\n\nУбедитесь в правильности ввода и нажмите \"Далее\"", "Далее", "");
  337.                 }
  338.             }
  339.         }
  340.         case    2:
  341.         {
  342.             if(!response)
  343.             {
  344.                
  345.             }
  346.             else
  347.             {
  348.                 SPD(playerid, 3, DIALOG_STYLE_INPUT, "{1472FF}Регистрация - Реферал", "{FFFFFF}Если вы узнали о нашем сервере от своего друга\nкоторый тут играет, укажите его ник в поле ниже\n\n{C3FF1F}При достижении вами 4-го уровня вы оба получити вознаграждение", "Далее", "Пропустить");
  349.                 SetPVarString(playerid, "email", inputtext);
  350.             }
  351.         }
  352.         case    3:
  353.         {
  354.             if(!response)
  355.             {
  356.                 SCM(playerid, COLOR_GREY, "Нет реферала");
  357.                 SetPVarString(playerid, "referal" , "");
  358.                 SPD(playerid, 4, DIALOG_STYLE_MSGBOX, "{1472FF}Регистрация - Пол", "Выберите пол вашего персонажа", "Мужской", "Женский");
  359.             }
  360.             else
  361.             {
  362.                 SetPVarString(playerid, "referal" , inputtext);
  363.                 SCM(playerid, COLOR_GREY, "Есть реферал");
  364.                 SPD(playerid, 4, DIALOG_STYLE_MSGBOX, "{1472FF}Регистрация - Пол", "Выберите пол вашего персонажа", "Мужской", "Женский");
  365.             }
  366.         }
  367.         case    4:
  368.         {
  369.             if(!response)
  370.             {
  371.                 SetPVarInt(playerid, "sex", 2);
  372.                 SCM(playerid, COLOR_GREY, "Вы выбрали Женский пол.");
  373.                 SPD(playerid, 5, DIALOG_STYLE_INPUT, "{1472FF}Регистрация - Возраст", "Укажите возраст вашего персонажа\nОт 18 до 50 Лет", "Далее", "");
  374.             }
  375.             else
  376.             {
  377.                 SetPVarInt(playerid, "sex", 1);
  378.                 SCM(playerid, COLOR_GREY, "Вы выбрали Мужской пол.");
  379.                 SPD(playerid, 5, DIALOG_STYLE_INPUT, "{1472FF}Регистрация - Возраст", "Укажите возраст вашего персонажа\nОт 18 до 50 Лет", "Далее", "");
  380.             }
  381.         }
  382.         case    5:
  383.         {
  384.             if(!response)
  385.             {
  386.                
  387.             }
  388.             else
  389.             {
  390.                 new reg_age = strval(inputtext);
  391.                 SetPVarInt(playerid, "age", reg_age);
  392.                 SPD(playerid, 6, DIALOG_STYLE_INPUT, "{1472FF}Регистрация - О себе", "Укажите пару слов о своём персонаже\nВажно! Информация проверяется администрацией.", "Далее", "");
  393.             }
  394.         }
  395.         case    6:
  396.         {
  397.             if(!response)
  398.             {
  399.                
  400.             }
  401.             else
  402.             {
  403.                 SPD(playerid, 7, DIALOG_STYLE_MSGBOX, "{1472FF}Регистрация - Опыт игры","{FFFFFF}Вы впервые играете в GTA San Andreas Multiplayer (SAMP)?\nМы покажем вам дополнительные подсказки для вас.", "Новичок", "Уже играл");
  404.                 SetPVarString(playerid, "about", inputtext);
  405.             }
  406.         }
  407.         case    7:
  408.         {
  409.             if(!response)
  410.             {
  411.                 SetPVarInt(playerid, "newbie", 0);
  412.                 SCM(playerid, COLOR_GREY, "Вы выбрали - Уже играл");
  413.                 SPD(playerid, 8, DIALOG_STYLE_MSGBOX, "{1472FF}Регистрация - Правила сервера", rules, "Принять", "Отмена");
  414.             }
  415.             else
  416.             {
  417.                 SetPVarInt(playerid, "newbie", 1);
  418.                 SCM(playerid, COLOR_GREY, "Вы выбрали - Новичок");
  419.                 SPD(playerid, 8, DIALOG_STYLE_MSGBOX, "{1472FF}Регистрация - Правила сервера", rules, "Принять", "Отмена");
  420.             }
  421.         }
  422.         case    8:
  423.         {
  424.             if(!response)
  425.             {
  426.                 SCM(playerid, COLOR_RED, "[Система] Ошибка: Для игры на нашем сервере вам необходимо согласится с правилами игры.");
  427.                 Kick(playerid);
  428.             }
  429.             else
  430.             {
  431.                 //new   query[256];
  432.                 new r_pass[32];
  433.                 new r_sex;
  434.                 new r_email[32];
  435.                 new r_referal[32];
  436.                 new r_age;
  437.                 new r_about[256];
  438.                 new r_newbie;
  439.                 GetPVarString(playerid, "reg_pass", r_pass, sizeof(r_pass));
  440.                 GetPVarString(playerid, "email", r_email, sizeof(r_email));
  441.                 GetPVarString(playerid, "referal", r_referal, sizeof(r_referal));
  442.                 r_sex = GetPVarInt(playerid, "sex");
  443.                 r_age = GetPVarInt(playerid, "age");
  444.                 GetPVarString(playerid, "about", r_about, sizeof(r_about));
  445.                 r_newbie = GetPVarInt(playerid, "newbie");
  446.                
  447.                 format(query, sizeof(query), "INSERT INTO `accounts` (`login`,`password`,`email`,`referal`,`sex`,`age`,`about`,`newbie`) VALUES ('%s','%s','%s','%s','%d','%d','%s','%d')", pInfo[playerid][NAME],r_pass,r_email,r_referal,r_sex,r_age,r_about,r_newbie);
  448.                 mysql_tquery(cHandle, query, "OnPlayerRegistered", "i", playerid);
  449.             }
  450.         }
  451.         case    9:
  452.         {
  453.                 if(!response)
  454.                 {
  455.                     // Если нажали выход
  456.                 }
  457.                 else
  458.                 {
  459.                     SetPVarString(playerid, "l_pass", inputtext);
  460.                     //new   query[128];
  461.                     format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `login` = '%s' AND `password` = '%s' LIMIT 1",playername(playerid), inputtext);
  462.                     mysql_tquery(cHandle, query, "OnPlayerLogin", "r", playername(playerid));
  463.                 }
  464.         }
  465.     }
  466.     return 1;
  467. }
  468.  
  469. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  470. {
  471.     return 1;
  472. }
  473. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  474. {
  475.         SetPlayerPos(playerid, fX, fY, fZ);
  476.         SetPlayerVirtualWorld(playerid, 0);
  477.         SetPlayerInterior(playerid, 0);
  478.     //return 0;
  479. }
  480. //====================================================================
  481. stock playername(playerid)
  482. {
  483.     new pName[MAX_PLAYER_NAME +1];
  484.     GetPlayerName(playerid, pName, sizeof(pName));
  485.     return  pName;
  486. }
  487. stock sendername(playerid)
  488. {
  489.     new newname[MAX_PLAYER_NAME];
  490.     GetPlayerName(playerid, newname, sizeof(newname));
  491.     return newname;
  492. }
  493. stock save_account(playerid)
  494. {
  495.     new string[256];
  496.     format(string, sizeof(string), "[SAVE ACCOUNT ON EXIT] User %s Money Ammount : %d", pInfo[playerid][NAME],pInfo[playerid][MONEY]);
  497.     printf(string);
  498.     //new query[256];
  499.     format(query, sizeof(query), "UPDATE `accounts` SET `money` = '%d' WHERE `id` = '%d' LIMIT 1", pInfo[playerid][MONEY], pInfo[playerid][ID]);
  500.     mysql_query(cHandle, query);
  501.    
  502. }
  503. stock give_money(playerid, amount)
  504. {
  505.     pInfo[playerid][MONEY] += amount;
  506.     GivePlayerMoney(playerid, amount);
  507. }
  508. stock clear_player(playerid)
  509. {
  510.     pInfo[playerid][MONEY] = 0;
  511.     pInfo[playerid][ID] = 0;
  512. }
  513. stock LoadPlayerData(playerid)
  514. {
  515.     new query[256];
  516.     format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `login` = '%s'", playername(playerid));
  517.     mysql_tquery(sql, query, "OnTest", "r", playerid);
  518.     cache_get_value_name_int(0, "money", pInfo[playerid][MONEY]);
  519.    
  520.    
  521. }
  522. //====================================================================
  523.  
  524. forward CheckPlayerExistance(playerid);
  525. public  CheckPlayerExistance(playerid)
  526. {
  527.         SetPlayerCameraPos(playerid, 1027.7542, -1075.3053, 109.6629);
  528.         SetPlayerCameraLookAt(playerid, 1028.7198, -1075.5803, 109.6678);
  529.         // в моем варианте камера будет на вид небоскребов Лос Сантоса
  530.        
  531.         //format(query, sizeof query, "SELECT * FROM `accounts` WHERE `login` = '%s'", pInfo[playerid][NAME]); // форматируем запрос с перебором таблицы accounts и поиском совпадения в поле name
  532.         //mysql_tquery(sql, query, "PlayerExists", "ii", playerid, THREAD_TESTING);
  533.  
  534.         mysql_format(cHandle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `login` = '%e' LIMIT 1",pInfo[playerid][NAME]);
  535.         // the variable 'query' contains now the formatted query (including the escaped string)
  536.         mysql_tquery(cHandle, query, "PlayerExists");
  537.         return 1;
  538. }
  539. forward PlayerExists(playerid);
  540. public  PlayerExists(playerid)
  541. {
  542.         if (cache_num_rows() < 1) // если найдено 0 совпадений, то игрок должен зарегистрироваться
  543.         {
  544.             SCM(playerid,COLOR_RED, "NOT REGISTERED");
  545.         }
  546.         else // ну, а если найдено - авторизация
  547.         {
  548.             SCM(playerid,COLOR_GREEN, "REGISTERED");
  549.         }
  550. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement