Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    Не создается файл .ini (mxINI)

    Здравствуйте, у меня почему-то не создается файл. Странно, что при использовании как пути к файлу "scriptfiles/accounts", то файл создается, а если "../src/accounts/", то ничего.

    Вот весь код:

    PHP код:
    // Подключение всех стандартных инклюдов
    #include "a_samp"
    // Подключение всех нестандартных инклюдов
    #include "src"

    #if defined MAX_PLAYERS
        #undef MAX_PLAYERS
        #define MAX_PLAYERS (50)
        #else
        #define MAX_PLAYERS (50)
    #endif

    new player_name[MAX_PLAYERS][MAX_PLAYER_NAME],
        
    player_password[MAX_PLAYERS][MAX_PLAYER_PASSWORD];
        
    main()
    {
        
    //print("\n\t- - -\n\tAuthor: Darge\n\tEmail: [email protected]\n\t- - -\n");
    }

    public 
    OnGameModeInit()
    {
        
    SetGameModeText("Blank Script");
        
    AddPlayerClass(01958.37831343.157215.3746269.1425000000);
        return 
    1;
    }

    public 
    OnPlayerConnect(playerid)
    {
        
    GetPlayerName(playeridplayer_name[playerid], MAX_PLAYER_NAME);

        new 
    account[21+MAX_PLAYER_NAME];
        
    format(accountsizeof(account), "../src/accounts/%s.ini"player_name[playerid]);
        if(!
    fexist(account))
        {
            
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Регистрация""Для регистрации введите пароль:""Далее""Выход");
        }
        else if(
    fexist(account))
        {
            
    ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Авторизация""Для авторизации введите пароль:""Далее""Выход");
        }
        return 
    1;
    }

    public 
    OnPlayerDisconnect(playeridreason)
    {
        
    SavePlayer(playerid);
        return 
    1;
    }

    public 
    OnDialogResponse(playeriddialogidresponselistiteminputtext[])
    {
        switch(
    dialogid)
        {
            case 
    1:
            {
                if(!
    response)
                {
                    return 
    Kick(playerid);
                }
                else if(
    response)
                {
                    if(!
    strlen(inputtext))
                    {
                        return 
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Ошибка""Введите ваш пароль:""Далее""Выход");
                    }
                    new 
    account[21+MAX_PLAYER_NAME];
                    
    format(accountsizeof(account), "../src/accounts/%s.ini"player_name[playerid]);
                    if(
    fexist(account))
                    {
                        return 
    ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Авторизация""Для авторизации введите пароль:""Далее""Выход");
                    }
                    else
                    {
                        return 
    CreateAccount(playeridinputtext);
                    }
                }
            }
            case 
    2:
            {
                if(!
    response)
                {
                    return 
    Kick(playerid);
                }
                else if(
    response)
                {
                    new 
    account[21+MAX_PLAYER_NAME];
                    if(!
    strlen(inputtext))
                    {
                        return 
    ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Ошибка""Введите ваш пароль:""Далее""Выход");
                    }
                    
    format(accountsizeof(account), "../src/accounts/%s.ini"player_name[playerid]);
                    if(!
    fexist(account))
                    {
                        return 
    ShowPlayerDialog(playeridDIALOG_STYLE_INPUT"Регистрация""Для регистрации введите пароль:""Далее""Выход");
                    }
                    else
                    {
                        new 
    iniFile ini_openFile(account);
                        
    ini_getString(iniFile"Пароль"player_password[playerid]);
                        
    ini_closeFile(iniFile);
                        if(!
    strcmp(inputtextplayer_password[playerid], true))
                        {
                            return 
    OnPlayerLogin(playerid);
                        }
                        else
                        {
                            return 
    ShowPlayerDialog(playerid2DIALOG_STYLE_INPUT"Ошибка""Вы ввели неверный пароль!""Далее""Выход");
                        }
                    }
                }
            }
        }
        return 
    1;
    }

    stock CreateAccount(playeridpassword[])
    {
        new 
    account[21+MAX_PLAYER_NAME];
        
    format(accountsizeof(account), "../src/accounts/%s.ini"player_name[playerid]);
        if(
    fexist(account))
        {
            return 
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"Авторизация""Введите пароль:""Далее""Выход");
        }
        new 
    iniFile ini_createFile(account);
        if(
    iniFile 0ini_openFile (account);
        {
            
    ini_setString(iniFile"Пароль"password);
            
    ini_setInteger(iniFile"Деньги"10000);
            
    ini_closeFile(iniFile);
            
    OnPlayerLogin(playerid);
        }
        return 
    1;
    }

    stock OnPlayerLogin(playerid)
    {
        new 
    account[21+MAX_PLAYER_NAME];
        
    format(accountsizeof(account), "../src/accounts/%s.ini"player_name[playerid]);
        new 
    iniFile ini_openFile(account);
        
    ini_getString(iniFile"Пароль"player_password[playerid], MAX_PLAYER_PASSWORD);
        
    ini_closeFile(iniFile);
        
    ResetPlayerMoney(playerid);
        
    SpawnPlayer(playerid);
        return 
    1;
    }

    stock SavePlayer(playerid)
    {
        new 
    account[21+MAX_PLAYER_NAME];
        
    format(accountsizeof(account), "../src/accounts/%s.ini"player_name[playerid]);
        new 
    iniFile ini_openFile(account);
        
    ini_setString(iniFile"Пароль"player_password[playerid]);
        
    ini_closeFile(iniFile);
        return 
    1;

    Или это значит, что mxINI создает файлы только в папке scriptfiles?

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Файловые функции в Pawn не поддерживают символические ссылки. По крайней мере, в той версии интерпретатора, которая используется в SA:MP. Логично, что и в mxINI такие ссылки тоже не будут поддерживаться.
    Так что либо оперируйте файлами в папке scriptfiles. Либо можно форкнуть mxINI и заменить в нём обращения к стандартным файловым функциям на функции из какого-нибудь плагина, который специально создан для обхода лимита на хранение файлов только в scriptfiles. Наверняка на forum.sa-mp.com есть что-то подобное.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. 2 пользователя(ей) сказали cпасибо:
    Desulaid (25.09.2015) Outsider (04.10.2017)
  4. #3
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Файловые функции в Pawn не поддерживают символические ссылки. По крайней мере, в той версии интерпретатора, которая используется в SA:MP. Логично, что и в mxINI такие ссылки тоже не будут поддерживаться.
    Так что либо оперируйте файлами в папке scriptfiles. Либо можно форкнуть mxINI и заменить в нём обращения к стандартным файловым функциям на функции из какого-нибудь плагина, который специально создан для обхода лимита на хранение файлов только в scriptfiles. Наверняка на forum.sa-mp.com есть что-то подобное.
    Лень рыться, лучше буду по старому доброму методу scriptfiles/accounts/игрок.ini. Тему можно закрывать :)

  5. #4
    Аватар для Gressie
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.05.2013
    Сообщений
    258
    Репутация:
    6 ±
    Проверьте созданы ли у вас папки: .., src, accounts. А вообще попробуйте использовать без папки .. а путь указать: src/accounts/%s.ini При этом, создайте папки в scriptfiles с названиями: src, accounts.

  6. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Maks5 Посмотреть сообщение
    Проверьте созданы ли у вас папки: .., src, accounts. А вообще попробуйте использовать без папки .. а путь указать: src/accounts/%s.ini При этом, создайте папки в scriptfiles с названиями: src, accounts.
    Забыл написать, что проблема решена. Решение - не пытаться создавать файл вне scriptfiles :) Тему можно закрыть.

  7. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Maks5 Посмотреть сообщение
    Проверьте созданы ли у вас папки: .., src, accounts.
    Нельзя сделать папку с именем "..", эта комбинация зарезервирована для обозначения родительских папок в символических ссылках.
    И да, если обратите внимание на предыдущие посты, то сможете увидеть, что на вопрос уже был дан развёрнутый ответ и проблема решена (вернее, найден обход, "в лоб" её не решить).

    Тема закрыта и перемешена в архив вопросов.

    UPD: Ninja'd by the topic starter.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •