Вопросы

Не сохраняется пароль MYSQL в бд.

Вот код:

 

Спойлер

#include <a_samp>

#include <dc_cmd>
#include <a_mysql>
#include <sscanf2>
#include <streamer>
#include <crashdetect>

#define MYSQL_HOST      "127.0.0.1"
#define MYSQL_USER      "root"
#define MYSQL_DATABASE  "sa-mp"
#define MYSQL_PASSWORD  ""
//127.0.0.1", "root", "sa-mp", "
/*==================[Подсказки]==================
%s - строка (привет, игрок_1)
%d - целое число (12345)
%f - число с точкой (123.123)
===============================================*/

#define MAX_PASSWORD 30

#define COLOR_RED 0xFF0000AA
//new MySQL:DBconnectID;
new DBconnectID;
//new regip[15];

enum e_pInfo{
    pID,
    pName[MAX_PLAYER_NAME],
    pPassword[MAX_PASSWORD],
    pMoney,
    Float:pX,
    Float:pY,
    Float:pZ,
    bool:pAdmin,
    bool:pInGame,
};
new pInfo[MAX_PLAYERS][e_pInfo];

enum{
    D_REG,
    D_LOG,
    D_SEX,
};
main()
{
    print("\n----------------------------------");
    print(" Мод успешно запущен! </>");
    print("----------------------------------\n");
}

public OnGameModeInit()
{
    //DBconnectID = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
    DBconnectID = mysql_connect("127.0.0.1""root""sa-mp""");
    switch(mysql_errno())
    {
            case 0: print("Подключение к базе данных - Успешно | </>");
            case 1044: print("Подключение к базе данных не удалось [Указано неизвестное имя пользователя]");
            case 1045: print("Подключение к базе данных не удалось [Указан неизвестный пароль]");
            case 1049: print("Подключение к базе данных не удалось [Указана неизвестная база данных]");
            case 2003: print("Подключение к базе данных не удалось [Хостинг с базой данных недоступен]");
            case 2005: print("Подключение к базе данных не удалось [Указан неизвестный адрес хостинга]");
            default: printf("Подключение к базе данных не удалось [Неизвестная ошибка. Код ошибки: %d]", mysql_errno());
    }
    SetGameModeText("Mode");
    AddPlayerClass(01154.1466,-1768.7874,16.5938,356.8533000000);
    SetTimer("SecondUpdate"1000true);
    return 1;
}

public OnGameModeExit()
{
    mysql_close(DBconnectID);
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid,1154.1466, -1768.787416.5938);
    SetPlayerCameraPos(playerid, 1230.5927,-1529.1538,62.4152);
    SetPlayerCameraLookAt(playerid, 1230.5927,-1529.1538,62.4152);
    
    
    if(!pInfo[playerid][pInGame])
    {
        SetSpawnInfo(playerid, 021154.1466, -1768.787416.59380000000);
        SpawnPlayer(playerid);
    }
    return 1;
}

public OnPlayerConnect(playerid)
{
    //new query[256];
    //mysql_format(DBconnectID, query,sizeof(query),"INSERT INTO `players` (`name`, `password`, `regip`, `lastip`) VALUES ('%s','%s','%s','%s')", pInfo[playerid][pName], pInfo[playerid][pPassword], pInfo[playerid][pRegIp], pInfo[playerid][pLastIp]);
    //mysql_query(DBconnectID, query);
    SendClientMessage(playerid, COLOR_RED, "Добро пожаловать на Server Builds!");
    SaveAcc(playerid);
    ClearVars(playerid);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    SaveAcc(playerid);
    ClearVars(playerid);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    if(!pInfo[playerid][pInGame])
    {
        GetPlayerName(playerid, pInfo[playerid][pName], MAX_PLAYER_NAME);
        new qString[42 + MAX_PLAYER_NAME];
        format(qString, sizeof(qString), "SELECT * FROM `players` WHERE `name` = '%s'", pInfo[playerid][pName]);
        mysql_function_query(DBconnectID, qString, true"CheckAcc""d", playerid);
    }
    return 1;
}


forward CheckAcc(playerid);
public CheckAcc(playerid)
{
    new rows, fields;
    cache_get_data(rows,fields);
    if(!rows)
    {
        ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Регистрация""Введите новый пароль для регистрации.","Окей","");
    }
    else
    {
        ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Введите свой пароль.","Окей","");
        cache_get_field_content(0"password", pInfo[playerid][pPassword], DBconnectID, MAX_PASSWORD);
    }

    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{


    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    if(IsPlayerConnected(playerid)) GetPlayerPos(playerid, pInfo[playerid][pX], pInfo[playerid][pY], pInfo[playerid][pZ]);
    if(GetPlayerMoney(playerid) != pInfo[playerid][pMoney])
    {
        ResetPlayerMoney(playerid);
        GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
    }
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case D_REG:
        {
            //GetPlayerIp(playerid,regip,15);
            if(!response) return ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Регистрация""Введите новый пароль для регистрации.","Окей","");
            if(strlen(inputtext) < 3 || strlen(inputtext) > 30return ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Регистрацияя""Пароль должен состоять от 3 до 30 символов.\nВведите новый пароль для регистрации.","Окей""");
            for(new i; i < strlen(inputtext); i++)
            {
                switch(inputtext[i])
                {
                    case '0'..'9''а'..'я',  'a'..'z''А'..'Я''A'..'Z'continue;
                    defaultreturn ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Регистрация""Пароль может состоть только из латинских символов и символы!(Aa - Zz, 0 - 9).\nВведите новый пароль для регистрации.","Окей""");
                }
            }
            CreateAcc(playerid, pInfo[playerid][pPassword]);
            format(pInfo[playerid][pPassword], MAX_PASSWORD, "%s", inputtext);
            /*pInfo[playerid][pPassword][0] = EOS;
            strins(pInfo[playerid][pPassword], inputtext, 0);
            return ShowPlayerDialog(playerid, D_SEX, DIALOG_STYLE_MSGBOX, "Пол", "Выберите пол персонажа", "Мужской", "Женский");*/
        }
        case D_LOG:
        {

            if(!response) return ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Введите свой пароль.","Окей","");
            if(strlen(inputtext) < 3 || strlen(inputtext) > 30return ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Длина пароля должна быть от 3 до 30 символов!\nВведите свой пароль.","Окей","");
            for(new i; i < strlen(inputtext); i++)
            {
                switch(inputtext[i])
                {
                    case '0'..'9''а'..'я',  'a'..'z''А'..'Я''A'..'Z'continue;
                    defaultreturn ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Пароль должен быть из латинских символов и символы!(Aa - Zz, 0 - 9).\nВведите свой пароль.","Окей""");
                }
            }
            if(!strcmp (pInfo[playerid][pPassword], inputtext))
            {
                new qString[42 + MAX_PLAYER_NAME];
                format(qString, sizeof(qString), "SELECT * FROM `players` WHERE `name` = '%s'", pInfo[playerid][pName]);
                mysql_function_query(DBconnectID, qString, true"LoadAcc""d", playerid);
            }
            else
            {
                if(GetPVarInt(playerid, "BadAttemp") >= 3return Kick(playerid);
                new string[78];
                format(string, sizeof(string), "Вы ввели неверный пароль! У вас осталось %d попытки(а)\nВведите свой пароль."3 - GetPVarInt(playerid, "BadAttemp"));
                ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация", string,"Окей""");
                SetPVarInt(playerid, "BadAttemp", GetPVarInt(playerid, "BadAttemp") + 1);
            }
        }
        /*case D_SEX:
        {
            pInfo[playerid][pSex] = response;
            return CreateAcc(playerid, pInfo[playerid][pPassword], response);
        }*/
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

CMD:givemoney(playerid, params[])
{
    new dlid, cash;
    if(sscanf(params, "dd", dlid, cash)) return SendClientMessage(playerid, -1"Используйте: /givemoney [id] [Кол-во]");
    if(!IsPlayerConnected(dlid)) return SendClientMessage(playerid, -1"Данного игрока нету на сервере.");
    GivePlayerMoney(dlid,cash);
    return 1;
}

CMD:sethp(playerid, params[])
{
    new Val;
    if(sscanf(params, "d", Val)) return SendClientMessage(playerid, -1"/sethp [число]");
    new Float:fVal = (Val);
    SetPlayerHealth(playerid, fVal);
    return 1;
}
ALT:sethp:hp;

stock ClearVars(playerid)
{
    pInfo[playerid][pID] = 0;
    pInfo[playerid][pName][0] = EOS;
    pInfo[playerid][pPassword][0] = EOS;
    pInfo[playerid][pMoney] = 0;
    pInfo[playerid][pX] = 0.0;
    pInfo[playerid][pY] = 0.0;
    pInfo[playerid][pZ] = 0.0;
    pInfo[playerid][pAdmin] = false;
    pInfo[playerid][pInGame] = false;
    return 1;
}
stock CreateAcc(playerid, password[])
{
    new qString[180 + MAX_PLAYER_NAME + MAX_PASSWORD + 11 + 1 + 33];
    format(qString, sizeof(qString), "INSERT INTO `players` (`name`, `password`, `money`, `admin`, `posx`, `posy`, `posz`) VALUES ('%s', '%s', %d, %d, %f, %f, %f)", pInfo[playerid][pName], password, pInfo[playerid][pMoney], pInfo[playerid][pAdmin], pInfo[playerid][pX], pInfo[playerid][pY], pInfo[playerid][pZ]);
    mysql_function_query(DBconnectID, qString, true"LoadAccID""d", playerid);
    SendClientMessage(playerid, -1"Ваш аккаунт успешно создан!");
    pInfo[playerid][pInGame] = true;
    SpawnPlayer(playerid);
    return 1;
}

forward LoadAccID(playerid);
public LoadAccID(playerid) return pInfo[playerid][pID] = cache_insert_id(DBconnectID);

forward LoadAcc(playerid);
public LoadAcc(playerid)
{
    pInfo[playerid][pID] = cache_get_field_content_int(0"id", DBconnectID);
    pInfo[playerid][pMoney] = cache_get_field_content_int(0"money", DBconnectID);
    pInfo[playerid][pAdmin] = !!cache_get_field_content_int(0"admin", DBconnectID);
    pInfo[playerid][pX] = cache_get_field_content_float(0"posx", DBconnectID);
    pInfo[playerid][pY] = cache_get_field_content_float(0"posy", DBconnectID);
    pInfo[playerid][pZ] = cache_get_field_content_float(0"posz", DBconnectID);
    SendClientMessage(playerid, -1"Вы успешно авторизовались!");
    pInfo[playerid][pInGame] = true;
    SpawnPlayer(playerid);
    return 1;
}

stock SaveAcc(playerid){

    new qString[165 + MAX_PLAYER_NAME + MAX_PASSWORD + 11 + 1 + 33 + 4];
    format(qString, sizeof(qString),"UPDATE `players` SET `name` = %s, `password` = %s,`money` = %d, `Admin` = %d, `posx` = %f, `posy` = %f, `posz` = %f, `level` = %d, `sex` = %d, `regip` = %f, `lastip` = %f WHERE `id` = %d", pInfo[playerid][pName], pInfo[playerid][pPassword], pInfo[playerid][pMoney], pInfo[playerid][pAdmin], pInfo[playerid][pX], pInfo[playerid][pY], pInfo[playerid][pZ], pInfo[playerid][pID]);
    //format(qString, sizeof(qString), "UPDATE `players` SET `name` = %s, `password` = %s, `money` = %d, `admin` = %d, `posx` = %f, `posy` = %f, `posz` = %f  WHERRE `id` = %d", pInfo[playerid][pName], pInfo[playerid][pPassword], pInfo[playerid][pMoney], pInfo[playerid][pAdmin], pInfo[playerid][pX], pInfo[playerid][pY], pInfo[playerid][pZ], pInfo[playerid][pID]);
    mysql_function_query(DBconnectID, qString, true"""");
    return 1;
    
    /*==================[Подсказки]==================
    %s - строка (привет, игрок_1)
    %d - целое число (12345)
    %f - число с точкой (123.123)
    ===============================================*/
    
    

}

/*stock GiveMoney(playerid, money)
{
    pInfo[playerid][pMoney] += money;
    static const fmt_query[] = "UPDATE `player` SET `money` = "%d" FROM `id` = "%d"";
    new query[sizeof(fmt_query)+(-2+9)+(-2+8)];
    format(query,sizeof(query), fmt_query, pInfo[playerid][pMoney], pInfo[playerid][pID]);
    mysql_tquery(DBconnectID, query);
    GivePlayerMoney(playerid, pInfo[playerid][pMoney]);
}
*/

 

 

Отредактировано пользователем Cawfee

Поделиться сообщением


Ссылка на сообщение

1 ответ на этот вопрос

  • 0
stock CreateAcc(playerid, password[])
{
    new qString[180 + MAX_PLAYER_NAME + MAX_PASSWORD + 11 + 1 + 33];
    format(qString, sizeof(qString), 
        "INSERT INTO `players` (`name`, `password`, `money`, `admin`, `posx`, `posy`, `posz`) VALUES ('%s', '%s', %d, %d, %f, %f, %f)", 
        pInfo[playerid][pName], password, pInfo[playerid][pMoney], pInfo[playerid][pAdmin], 
        pInfo[playerid][pX], pInfo[playerid][pY], pInfo[playerid][pZ]);
    
    mysql_function_query(DBconnectID, qString, true, "LoadAccID", "d", playerid); // Check if this event calls LoadAccID
    SendClientMessage(playerid, -1, "Ваш аккаунт успешно создан!");
    pInfo[playerid][pInGame] = true;
    SpawnPlayer(playerid);
    return 1;
} 

попробуй

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • От Sasha123452
      Слив мода LINE RP
      Скачать файл Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka и тд. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины). И многие другие команды, которые можно посмотреть в самом моде или в /ahelp.
      Добавил Sasha123452 Добавлено 14.10.2024 Категория Моды Автор Саша  
    • От Sasha123452
      Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka и тд. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины). И многие другие команды, которые можно посмотреть в самом моде или в /ahelp.
    • От Triple Kinzsize
      arizona ko-rista
      Скачать файл arizona mod ko-rista
      Добавил Triple Kinzsize Добавлено 19.12.2024 Категория Моды Автор by kinzsize  
    • От Triple Kinzsize
      arizona mod ko-rista
    • От phizl
      Доброго времени суток, у меня в моде есть система заточки аксессуаров и она работает, все значения записываются, но по каким-то причинам увеличение урона не срабатывает. У меня есть инклуд weapon-config, до этого в нём не было перехвата функции, я его сделал и по идее дефолтные паблики OnPlayerGiveDamage и OnPlayerTakeDamage щас срабатывают. Буду очень благодарен любой помощи! (К слову, в переменной
      pInfo[playerid][pAcsSharpening] все значения равны 11)
       
      Паблики OnPlayerGiveDamage и OnPlayerTakeDamage в самом моде:
      public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {     new damage;     switch(pInfo[playerid][pAcsSharpening][2])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][2]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     switch(pInfo[playerid][pAcsSharpening][3])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][3]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     return 1; } public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) {     new nodamage;     if(pInfo[playerid][pAcsSharpening][1] != 0)     {         switch(pInfo[playerid][pAcsSharpening][1])         {             case 1..3: nodamage = 0;             case 4: nodamage = 2;             case 5: nodamage = 4;             case 6: nodamage = 5;             case 7: nodamage = 6;             case 8: nodamage = 8;             case 9: nodamage = 10;             case 10: nodamage = 12;             case 11,12: nodamage = 15;         }     }     if(pInfo[playerid][pAcsSharpening][4] != 0)     {         switch(pInfo[playerid][pAcsSharpening][4])         {             case 1..3: nodamage = 0;             case 4..11: nodamage = pInfo[playerid][pAcsSharpening][4]-2;             case 12: nodamage = 9;         }     }     new damage;     switch(pInfo[playerid][pAcsSharpening][2])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][2]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     switch(pInfo[playerid][pAcsSharpening][3])     {         case 0..3: damage = 0;         case 4..11: damage = pInfo[playerid][pAcsSharpening][3]-3;         case 12: damage = 8;     }     amount += (amount / 100) * damage;     if(pInfo[playerid][pAcsSharpening][1] == 0 && pInfo[playerid][pAcsSharpening][4] == 1 || pInfo[playerid][pAcsSharpening][4] == 0 && pInfo[playerid][pAcsSharpening][2] == 1) amount -= (amount / 100) * nodamage;     if(pInfo[playerid][pAcsSharpening][4] == 1 && pInfo[playerid][pAcsSharpening][2] == 1) amount -= (amount / 100)*nodamage*2;     return 1; }  
      Эти же паблики, но в weapon-config с моим перехватом (расположен внизу каждого паблика), мало ли как-то не так сделал