Advertisement
kaZax

[FS] kRegister System

Jun 29th, 2013
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.82 KB | None | 0 0
  1. //////////////////////////////////////////////
  2. // Система регистраций by kaZax             //
  3. // Создайте папку Accounts в scriptfiles    //
  4. // Команда вызова меню /аккаунт             //
  5. // Сохраняет:                               //
  6. // - Пароль                                 //
  7. // - Деньги                                 //
  8. // - Убийства                               //
  9. // - Смерти                                 //
  10. // - Жизнь                                  //
  11. // - Броня                                  //
  12. // kRegister System © SAMP-RU.ORG           //
  13. // 20.06.2013 03:56                         //
  14. //////////////////////////////////////////////
  15. #include <a_samp>
  16. #include <mxINI>
  17.  
  18. #define FILTERSCRIPT
  19.  
  20. #define data "Accounts/%s.ini"
  21. #define ServerName "РУССКИЙ ДМ СЕРВЕР"
  22.  
  23. #define DIALOG_LOGIN 4500
  24. #define DIALOG_REGISTER 4501
  25. #define DIALOG_ACCOUNT 4502
  26. #define DIALOG_SWNICK 4503
  27. #define DIALOG_SWPASS 4504
  28.  
  29. #define green 0x22FF22FF
  30. #define red 0xFF2222FF
  31. #define infocolor 0x00BBFFFF
  32.  
  33. enum Data
  34. {
  35.     Pass,
  36.     Cash,
  37.     Kills,
  38.     Deaths,
  39.     Float:Health,
  40.     Float:Armour,
  41.     bool:Logged,
  42.     Text:Stats
  43. };
  44. new PlayerData[MAX_PLAYERS][Data];
  45.  
  46. public OnFilterScriptInit()
  47. {
  48.     for(new i = 0; i < MAX_PLAYERS; i++)
  49.     {
  50.         PlayerData[i][Stats] = TextDrawCreate(490.000000, 413.000000, " ");
  51.         TextDrawFont(PlayerData[i][Stats] , 2);
  52.         TextDrawLetterSize(PlayerData[i][Stats] , 0.3, 2.8000000000000003);
  53.         TextDrawColor(PlayerData[i][Stats] ,0xFFFFFFFF);
  54.         TextDrawSetOutline(PlayerData[i][Stats] , 1);
  55.         TextDrawSetProportional(PlayerData[i][Stats] , 1);
  56.         TextDrawSetShadow(PlayerData[i][Stats] , 1);
  57.     }
  58.     print("kRegisterSystem Loaded");
  59.     return true;
  60. }
  61. public OnFilterScriptExit()
  62. {
  63.     print("kRegisterSystem Unloaded");
  64.     return true;
  65. }
  66. public OnPlayerConnect(playerid)
  67. {
  68.     PlayerData[playerid][Cash]=0;
  69.     PlayerData[playerid][Kills]=0;
  70.     PlayerData[playerid][Deaths]=0;
  71.     PlayerData[playerid][Health]=100;
  72.     PlayerData[playerid][Armour]=0.0;
  73.     if(fexist(userdata(playerid)))
  74.     {
  75.         new file = ini_openFile(userdata(playerid));
  76.         ini_getInteger(file,"Pass",PlayerData[playerid][Pass]);
  77.         ini_getInteger(file,"Cash",PlayerData[playerid][Cash]);
  78.         ini_getInteger(file,"Kills",PlayerData[playerid][Kills]);
  79.         ini_getInteger(file,"Deaths",PlayerData[playerid][Deaths]);
  80.         ini_getFloat(file,"Health",PlayerData[playerid][Health]);
  81.         ini_getFloat(file,"Armour",PlayerData[playerid][Armour]);
  82.         ini_closeFile(file);
  83.         new DialogStr[256];
  84.         format(DialogStr,256,"{FFFFFF}Добро пожаловать на %s !\nВведите свой пароль для входа в игру.",ServerName);
  85.         ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Авторизация",DialogStr,"Войти","Отмена");
  86.     }
  87.     else
  88.     {
  89.         new DialogStr[256];
  90.         format(DialogStr,256,"{FFFFFF}Добро пожаловать на %s !\nВведите пароль для регистраций на сервере:",ServerName);
  91.         ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Регистрация",DialogStr,"Ввести","Отмена");
  92.     }
  93.     return true;
  94. }
  95. public OnPlayerDisconnect(playerid, reason)
  96. {
  97.     SavePlayerData(playerid);
  98.     return true;
  99. }
  100. public OnPlayerCommandText(playerid, cmdtext[])
  101. {
  102.     if(!strcmp(cmdtext, "/аккаунт", true))
  103.     {
  104.         ShowPlayerDialog(playerid,DIALOG_ACCOUNT,DIALOG_STYLE_LIST,"Меню аккаунта","[1] Сменить ник\r\n[2] Сменить пароль","Выбрать", "Отмена");
  105.         return true;
  106.     }
  107.     return false;
  108. }
  109. public OnPlayerDeath(playerid, killerid, reason)
  110. {
  111.  
  112.         PlayerData[playerid][Deaths]++,  
  113.         UpdateStats(playerid);
  114.         if ( killerid == 0xFFFF ) return true ;  
  115.         SetPlayerScore(killerid, GetPlayerScore(killerid) + 1 ),  
  116.         UpdateStats(killerid);
  117.         return true;
  118. }  
  119. public OnPlayerSpawn(playerid)
  120. {
  121.     if(PlayerData[playerid][Logged] == false)
  122.     {
  123.         new str[128];
  124.         format(str,128,"Игрок %s был кикнут. (Не залогинен)",name(playerid));
  125.         SendClientMessageToAll(red,str);
  126.         Kick(playerid);
  127.     }
  128.     return true;
  129. }
  130. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  131. {
  132.     if(dialogid == DIALOG_LOGIN)
  133.     {
  134.         if(!response)
  135.         {
  136.             new str[128];
  137.             format(str,128,"Игрок %s был кикнут.(Отказ от логина)",name(playerid));
  138.             print(str);
  139.             SendClientMessageToAll(red,str);
  140.             Kick(playerid);
  141.         }
  142.         else
  143.         {
  144.             if(hash(inputtext) == PlayerData[playerid][Pass])
  145.             {
  146.                 SetPlayerMoney(playerid,PlayerData[playerid][Cash]);
  147.                 SetPlayerScore(playerid,PlayerData[playerid][Kills]);
  148.                 SetPlayerHealth(playerid,PlayerData[playerid][Health]);
  149.                 SetPlayerArmour(playerid,PlayerData[playerid][Armour]);
  150.                 TextDrawShowForPlayer(playerid,PlayerData[playerid][Stats]);
  151.                 PlayerData[playerid][Logged] = true;
  152.             }
  153.             else
  154.             {
  155.                 new DialogStr[256];
  156.                 format(DialogStr,256,"\r{FFFFFF}Добро пожаловать на %s !\n\rВведите свой пароль для входа в игру. \n\r{FF0000}Не правильный пароль!",ServerName);
  157.                 ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Авторизация",DialogStr,"Войти","Отмена");
  158.             }
  159.         }
  160.     }
  161.     if(dialogid == DIALOG_REGISTER)
  162.     {
  163.         if(!response)
  164.         {
  165.             new str[128];
  166.             format(str,128,"Игрок %s был кикнут.(Отказ от регистраций)",name(playerid));
  167.             print(str);
  168.             SendClientMessageToAll(red,str);
  169.             Kick(playerid);
  170.         }
  171.         else
  172.         {
  173.             new str[128];
  174.             format(str,128,"Успешная регистрация! Ваш пароль: %s",inputtext);
  175.             SendClientMessage(playerid,infocolor,str);
  176.             new file = ini_createFile(userdata(playerid));
  177.             if(file < 0)file = ini_openFile(userdata(playerid));
  178.             if(file >= 0)
  179.             {
  180.                 ini_setInteger(file,"Pass",hash(inputtext));
  181.                 ini_closeFile(file);
  182.             }
  183.             PlayerData[playerid][Logged] = true;
  184.         }
  185.     }
  186.     if(dialogid == DIALOG_ACCOUNT)
  187.     {
  188.         if(response)
  189.         {
  190.             if(listitem == 0)ShowPlayerDialog(playerid,DIALOG_SWNICK,DIALOG_STYLE_INPUT,"Смена ника","Введите новый ник:","Ввести","Отмена");
  191.             if(listitem == 1)ShowPlayerDialog(playerid,DIALOG_SWPASS,DIALOG_STYLE_INPUT,"Смена пароля","Введите новый пароль:","Ввести","Отмена");
  192.         }
  193.     }
  194.     if(dialogid == DIALOG_SWNICK)
  195.     {
  196.         if(response)
  197.         {
  198.             new nick[64],str[128];
  199.             format(nick,64,"/Accounts/%s.ini",inputtext);
  200.             if(fexist(nick))return ShowPlayerDialog(playerid, DIALOG_SWNICK,DIALOG_STYLE_INPUT,"Смена ника","Этот ник занят!\nВведите другой ник:","Сменить","Отмена");
  201.             fcopytextfile(userdata(playerid),nick);
  202.             format(nick,64,"/Accounts/%s.ini",name(playerid));
  203.             fremove(nick);
  204.             format(str,128,"Игрок %s изменил свой ник на \"%s\"",name(playerid),inputtext);
  205.             SendClientMessageToAll(infocolor,str);
  206.             print(str);
  207.             SendClientMessage(playerid,infocolor,"Перезайди в игру с новым ником!");
  208.             return Kick(playerid);
  209.         }
  210.     }
  211.     if(dialogid == DIALOG_SWPASS)
  212.     {
  213.         if(response)
  214.         {
  215.             PlayerData[playerid][Pass] = hash(inputtext);
  216.             new str[128];
  217.             format(str,128,"Вы изменили свой пароль на \"%s\" ",inputtext);
  218.             SendClientMessage(playerid,infocolor,str);
  219.         }
  220.     }
  221.     return 0;
  222. }
  223. stock SavePlayerData(playerid)
  224. {
  225.     if(PlayerData[playerid][Logged])
  226.     {
  227.         PlayerData[playerid][Cash] = GetPlayerMoney(playerid);
  228.         PlayerData[playerid][Kills] = GetPlayerScore(playerid);
  229.         GetPlayerHealth(playerid,PlayerData[playerid][Health]);
  230.         GetPlayerArmour(playerid,PlayerData[playerid][Armour]);
  231.         new file = ini_openFile(userdata(playerid));
  232.         if(file >= 0)
  233.         {
  234.             ini_setInteger(file,"Pass",PlayerData[playerid][Pass]);
  235.             ini_setInteger(file,"Cash",PlayerData[playerid][Cash]);
  236.             ini_setInteger(file,"Kills",PlayerData[playerid][Kills]);
  237.             ini_setInteger(file,"Deaths",PlayerData[playerid][Deaths]);
  238.             ini_setFloat(file,"Health",PlayerData[playerid][Health]);
  239.             ini_setFloat(file,"Armour",PlayerData[playerid][Armour]);
  240.             ini_closeFile(file);
  241.         }
  242.     }
  243. }
  244. stock StripNewLine(string[]) {
  245.     new len = strlen(string);
  246.     if (string[0]==0) return ;
  247.     if ((string[len - 1] == '\n') || (string[len - 1] == '\r')) {
  248.         string[len - 1] = 0;
  249.         if (string[0]==0) return ;
  250.         if ((string[len - 2] == '\n') || (string[len - 2] == '\r')) string[len - 2] = 0;
  251.     }
  252. }
  253. stock fcopytextfile(oldname[],newname[])
  254. {
  255.     new File:ohnd,File:nhnd;
  256.     if (!fexist(oldname)) return false;
  257.     ohnd=fopen(oldname,io_read);
  258.     if (!ohnd) return false;
  259.     nhnd=fopen(newname,io_write);
  260.     if (!nhnd) {
  261.         fclose(ohnd);
  262.         return false;
  263.     }
  264.     new tmpres[255];
  265.     while (fread(ohnd,tmpres)) {
  266.         StripNewLine(tmpres);
  267.         format(tmpres,sizeof(tmpres),"%s\r\n",tmpres);
  268.         fwrite(nhnd,tmpres);
  269.     }
  270.     fclose(ohnd);
  271.     fclose(nhnd);
  272.     return true;
  273. }
  274. stock UpdateStats(playerid)
  275. {
  276.     new str[64];
  277.     format(str,64,"Kills: %d Deaths: %d",GetPlayerScore(playerid),PlayerData[playerid][Deaths]);
  278.     TextDrawSetString(PlayerData[playerid][Stats], str);
  279. }
  280. stock hash(buf[])
  281. {
  282.     new length=strlen(buf);
  283.     new s1 = 1;
  284.     new s2 = 0;
  285.     new n;
  286.     for (n=0; n<length; n++)
  287.     {
  288.        s1 = (s1 + buf[n]) % 65521;
  289.        s2 = (s2 + s1)     % 65521;
  290.     }
  291.     return (s2 << 16) + s1;
  292. }
  293. stock userdata(playerid){new str[64];format(str,64,data,name(playerid));return str;}
  294. stock name(playerid){new str[24+1];GetPlayerName(playerid,str,sizeof(str));return str;}
  295. stock SetPlayerMoney(playerid,ammount){ResetPlayerMoney(playerid);return GivePlayerMoney(playerid,ammount);}
  296. //////////////////////////////////////////////
  297. // Система регистраций by kaZax             //
  298. // Создайте папку Accounts в scriptfiles    //
  299. // Команда вызова меню /аккаунт             //
  300. // Сохраняет:                               //
  301. // - Пароль                                 //
  302. // - Деньги                                 //
  303. // - Убийства                               //
  304. // - Смерти                                 //
  305. // - Жизнь                                  //
  306. // - Броня                                  //
  307. // kRegister System © SAMP-RU.ORG           //
  308. // 20.06.2013 03:56                         //
  309. //////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement