Попросили чтоб-бы я написал регистрацию простую для всех модов так я и написал)и сделаем регистрацию для мода!
верху мода прописываем

Код: Выделить всё
#define COLOR_GREY 0xBEBEBEAA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_GRAD5 0xE3E3E3FF
#define COLOR_GRAD1 0xB4B5B7FF

это у нас цвета!
так же верху мода прописываем forwad

Код: Выделить всё
forward ShowStats(playerid,targetid);
forward OnPlayerUpdate(playerid);
forward Encrypt(string[]);
forward OnPlayerLogin(playerid,const string[]);

это за какие public будут отвечать!
так же верху мода после forwad прописываем
Код: Выделить всё

enum pInfo
{
    pPassword[128],
    pKills,
    pDeaths,
    pCash,
};

это у нас отвечает за пароль за кил убийство и т.п!
так же верху мода прописываем
Код: Выделить всё
new PlayerInfo[MAX_PLAYERS][pInfo];
new gPlayerLogged[MAX_PLAYERS];
new gPlayerAccount[MAX_PLAYERS];

это у нас переменные!
Теперь ищем наш public
это у нас будет:
Код: Выделить всё
public OnPlayerDisconnect

и туда вставляем:

Код: Выделить всё
    OnPlayerUpdate(playerid);
       gPlayerLogged[playerid] = 0;

это у нас отвечает за выход с игры!
теперь ищем:
Код: Выделить всё
public OnPlayerDeath

туда вставляем:

Код: Выделить всё
   new kills = PlayerInfo[playerid][pKills];
       SetPlayerScore(playerid, kills);
       new Float:Health;
       GetPlayerHealth(playerid, Health);
       if(Health == 0.0)
       {
       PlayerInfo[playerid][pDeaths] += 1;
       }
       GivePlayerMoney(killerid,2000);
       PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills] + 1;

это у нас за килл убийство отвечает!
Теперь нам нужно добавить команды /register и /login и /stats
ищем

Код: Выделить всё
public OnPlayerCommandText
туда вставляем:
Код: Выделить всё
   if (strcmp(cmd, "/login", true) ==0 )
    {
        if(IsPlayerConnected(playerid))
        {
            new tmppass[64];
      if(gPlayerLogged[playerid] == 1)
      {
       SendClientMessage(playerid, COLOR_GREY, "Вы уже залогинились.");
       return 1;
      }
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp))
      {
       SendClientMessage(playerid, COLOR_GREY, "Использование: /login [Ваш пароль]");
       return 1;
      }
      strmid(tmppass, tmp, 0, strlen(cmdtext), 255);
      Encrypt(tmppass);
      OnPlayerLogin(playerid,tmppass);
     }
     return 1;
    }

Код: Выделить всё
    if (strcmp(cmd, "/register", true)==0)
    {
     new string[265];
     tmp = strtok(cmdtext, idx);
     if(!strlen(tmp))
     {
      SendClientMessage(playerid, COLOR_GREY, "Использование: /register [Ваш пароль]");
      return 1;
     }
     if (gPlayerAccount[playerid] == 1)
     {
      SendClientMessage(playerid, COLOR_GREY, "Этот ник уже зарегистрирован");
      return 1;
     }

     strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255);
     Encrypt(PlayerInfo[playerid][pPassword]);
     GetPlayerName(playerid, playername, sizeof(playername));
     format(string, sizeof(string), "%s.cer", playername);
     new File: file = fopen(string, io_read);
     if (file)
     {
      SendClientMessage(playerid, COLOR_GREY, "   Этот ник уже зарегистрирован");
      fclose(file);
      return 1;
     }
     new File:hFile;
     hFile = fopen(string, io_append);
     new var[32];//
           format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
           format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
           format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
           PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
           format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
     fclose(hFile);
     SendClientMessage(playerid, COLOR_WHITE, "Успешно зарегистрирован");
     SendClientMessage(playerid, COLOR_WHITE, "В следующий раз когда вы войдете в игру пропишите /login <и ваш пароль> чтобы вы смогли зайти под вашим аккаунтом.");
     OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]);
     return 1;
    }

Код: Выделить всё
    if (strcmp(cmd, "/stats", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
      if (gPlayerLogged[playerid] != 0)
      {
       ShowStats(playerid,playerid);
      }
      else
      {
       SendClientMessage(playerid, COLOR_GRAD1, "Вы не авторизовались !");
      }
     }
     return 1;
    }

примерно должен public выглядит так:
Код: Выделить всё
public OnPlayerCommandText(playerid, cmdtext[])
{
       new cmd[256];
       new idx;
       cmd = strtok(cmdtext, idx);
       new tmp[256];
       new playername[MAX_PLAYER_NAME];
       if (strcmp(cmd, "/login", true) ==0 )
    {
        if(IsPlayerConnected(playerid))
        {
            new tmppass[64];
      if(gPlayerLogged[playerid] == 1)
      {
       SendClientMessage(playerid, COLOR_GREY, " Вы уже залогинились.");
       return 1;
      }
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp))
      {
       SendClientMessage(playerid, COLOR_GREY, "    Использование: /login [ваш пароль]");
       return 1;
      }
      strmid(tmppass, tmp, 0, strlen(cmdtext), 255);
      Encrypt(tmppass);
      OnPlayerLogin(playerid,tmppass);
     }
     return 1;
    }
    if (strcmp(cmd, "/register", true)==0)
    {
     new string[265];
     tmp = strtok(cmdtext, idx);
     if(!strlen(tmp))
     {
      SendClientMessage(playerid, COLOR_GREY, "Использование: /register [Ваш пароль]");
      return 1;
     }
     if (gPlayerAccount[playerid] == 1)
     {
      SendClientMessage(playerid, COLOR_GREY, "   Этот ник уже зарегистрирован");
      return 1;
     }

     strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255);
     Encrypt(PlayerInfo[playerid][pPassword]);
     GetPlayerName(playerid, playername, sizeof(playername));
     format(string, sizeof(string), "%s.cer", playername);
     new File: file = fopen(string, io_read);
     if (file)
     {
      SendClientMessage(playerid, COLOR_GREY, "   Этот ник уже зарегистрирован");
      fclose(file);
      return 1;
     }
     new File:hFile;
     hFile = fopen(string, io_append);
     new var[32];//
           format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var);
           format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
           format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
           PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
           format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
     fclose(hFile);
     SendClientMessage(playerid, COLOR_WHITE, "Успешно зарегистрирован!");
     SendClientMessage(playerid, COLOR_WHITE, "В следующий раз когда вы войдете в игру пропишите /login <и ваш пароль> чтобы вы смогли зайти под вашим аккаунтом.");
     OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]);
     return 1;
    }
    if (strcmp(cmd, "/stats", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
      if (gPlayerLogged[playerid] != 0)
      {
       ShowStats(playerid,playerid);
      }
      else
      {
       SendClientMessage(playerid, COLOR_GRAD1, "   Вы не авторизовались !");
      }
     }
     return 1;
    }
    return 0;
}
Теперь добавляем public за которые отвечают за регистрацию,логина,и статуса.

в любое место вставляем:
Код: Выделить всё
public Encrypt(string[])
{
    for(new x=0; x < strlen(string); x++)
      {
       string[x] += (3^x) * (x % 15);
       if(string[x] > (0xff))
       {
        string[x] -= 64;
       }
      }
    return 1;
}

public OnPlayerLogin(playerid,const string[])
{
       new pname2[MAX_PLAYER_NAME];
    new pname3[MAX_PLAYER_NAME];
    new string2[64];
    new string3[128];
    GetPlayerName(playerid, pname2, sizeof(pname2));
    format(string2, sizeof(string2), "%s.cer", pname2);
    new File: UserFile = fopen(string2, io_read);

    if (UserFile)
    {
     new valtmp[128];
     fread(UserFile, valtmp);strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255);

     if ((strcmp(PlayerInfo[playerid][pPassword], string, true, strlen(valtmp)-1) == 0))
     {
      new key[128],val[128];
       new Data[128];
       while(fread(UserFile,Data,sizeof(Data)))
      {
       key = ini_GetKey(Data);
                   if( strcmp( key , "Kills" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); }
                   if( strcmp( key , "Deaths" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); }
                   if( strcmp( key , "Money" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); }
                   GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]);
      }
      fclose(UserFile);
      gPlayerLogged[playerid] = 1;
      gPlayerAccount[playerid] = 1;
         new kills = PlayerInfo[playerid][pKills];
               SetPlayerScore(playerid, kills);
      GetPlayerName(playerid, pname3, sizeof(pname3));
      format(string3, sizeof(string3), "Добро пожаловать %s, вы успешно зашли под своим ником!", pname3);
      SendClientMessage(playerid, COLOR_WHITE,string3);
     }
     else
     {
      SendClientMessage(playerid, COLOR_GREY, "Неверный пароль");
      fclose(UserFile);
     }
    }
    return 1;
}

теперь ищешь:
Код: Выделить всё
public OnPlayerUpdate
и туда добавляем:
Код: Выделить всё
    if(IsPlayerConnected(playerid))
    {
     if(gPlayerLogged[playerid])
     {
      new string3[32];
      new pname3[MAX_PLAYER_NAME];
      GetPlayerName(playerid, pname3, sizeof(pname3));
      format(string3, sizeof(string3), "%s.cer", pname3);
      new File: pFile = fopen(string3, io_write);
      if (pFile)
      {
       new var[32];
       format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(pFile, var);
       fclose(pFile);
       new File: hFile = fopen(string3, io_append);
       PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);
       format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var);
       format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var);
       format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var);
       fclose(hFile);
      }
     }
    }

потом сами функции добавляем в самый вниз мода:
Код: Выделить всё
stock ini_GetKey( line[] )
{
    new keyRes[128];
    keyRes[0] = 0;
       if ( strfind( line , "=" , true ) == -1 ) return keyRes;
       strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
       return keyRes;
}

stock ini_GetValue( line[] )
{
    new valRes[128];
    valRes[0]=0;
    if ( strfind( line , "=" , true ) == -1 ) return valRes;
    strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
    return valRes;
}

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
     index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
     result[index - offset] = string[index];
     index++;
    }
    result[index - offset] = EOS;
    return result;
}

и добавляем еще один public:
Код: Выделить всё
public ShowStats(playerid,targetid)
{
       if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid))
    {
     new cash =  GetPlayerMoney(targetid);
     new deaths = PlayerInfo[targetid][pDeaths];
     new kills = PlayerInfo[targetid][pKills];
     new name[MAX_PLAYER_NAME];
     GetPlayerName(targetid, name, sizeof(name));
     new Float:px,Float:py,Float:pz;
     GetPlayerPos(targetid, px, py, pz);
     new coordsstring[256];
     SendClientMessage(playerid, COLOR_GREEN,"_______________________________________");
     format(coordsstring, sizeof(coordsstring),"*** %s ***",name);
     SendClientMessage(playerid, COLOR_WHITE,coordsstring);
     format(coordsstring, sizeof(coordsstring), "Убил:[%d] Умер:[%d] Деньги:[$%d]",kills,deaths,cash);
     SendClientMessage(playerid, COLOR_GRAD5,coordsstring);
     SendClientMessage(playerid, COLOR_GREEN,"_______________________________________");
    }
}

все регистрация готова!урок от admin