Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 4 1 2 3 ... ПоследняяПоследняя
Показано с 1 по 10 из 38
  1. #1
    Аватар для AlexDizaro
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Сообщений
    6
    Репутация:
    0 ±

    Настройки мода.

    Как реализовать настройки в моде? Хотел на defin'ах :

    PHP код:
    #define MySQL_ConfigFile 

    #if !defined MySQL_ConfigFile
    #define    MYSQL_HOST       "localhost"
    #define    MYSQL_USER       "root"
    #define    MYSQL_DATABASE   "palladium"
    #define    MYSQL_PASSWORD   ""
    #endif 
    Но комментировать (//#define MySQL_ConfigFile) что бы отключить не очень
    Делать на переменных или все же можно как то сделать?

    Хотелось бы что бы было примерно так :

    PHP код:
    #define MySQL_ConfigFile true 

    #if !MySQL_ConfigFile == true
    #define ... 

    Может глупо, но все же хочу реализовать настройку мода, где надо будет поменять лишь значение бинда
    Последний раз редактировалось AlexDizaro; 01.01.2016 в 11:09.

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Как-то так, карочи, если следовать вашей идее. Но варианта с таким вот использованием - его нет.

    PHP код:
    #if !defined MYSQL_CONNECT_SETTINGS
        
        #define MYSQL_HOST "localhost"
        #define MYSQL_USER "root"
        #define MYSQL_DATABASE "palladium"
        #define MYSQL_PASSWORD ""
        
        #define MYSQL_CONNECT_ALL MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD
        
        #define MYSQL_CONNECT_SETTINGS
    #endif 
    Я давно делал себе инклуд, который и подключался к бд, и отключался при рестарте и выключении мода. Не люблю я этот момент, когда надо ползти в низ и что-то искать, да и информация для разового использования мне сверху не очень, напрягает только.

     a_mysql_settings.inc
    PHP код:
    /* 
     *        Настройка подключения игрового мода с MySQL базой данных
     *
     */
     
     #if !defined mysql_included
        #error File a_mysql.inc is not included
    #endif

     // Настройки подключения
    #define MYSQL_HOST "localhost"
    #define MYSQL_USER "root"
    #define MYSQL_PASSWORD ""
    #define MYSQL_DATABASE "base"

    // id подключения
    new cHandle;

    // Подключение соединения с базой данных
    // при старте сервера
    public OnGameModeInit()
    {
        
    cHandle mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_DATABASEMYSQL_PASSWORD);
        if(
    mysql_errno())
            print(
    "[MySQL] Связь с базой данных не установлена\n* Проверьте введенные вами данные\n\n");
        else 
            print(
    "[MySQL]  Связь с базой данных установлена\n\n");
    #if defined MySQL__OnGameModeInit
        
    MySQL__OnGameModeInit();
        return 
    1;
    #endif
    }

    #if defined _ALS_OnGameModeInit
        #undef OnGameModeInit
    #else
        #define _ALS_OnGameModeInit
    #endif

    #define OnGameModeInit MySQL__OnGameModeInit

    #if defined MySQL__OnGameModeInit
    forward MySQL__OnGameModeInit();
    #endif

    // Отключение соединения с базой данных
    // при рестарте сервера
    public OnGameModeExit()
    {
        
    mysql_close(cHandle);
        print(
    "[MySQL] Связь с базой данных была отключена\nИдет подключение ...\n\n");
    #if defined MySQL__OnGameModeExit
        
    MySQL__OnGameModeExit();
        return 
    1;
    #endif
    }

    #if defined _ALS_OnGameModeExit
        #undef OnGameModeExit
    #else
        #define _ALS_OnGameModeExit
    #endif

    #define OnGameModeExit MySQL__OnGameModeExit

    #if defined MySQL__OnGameModeExit
    forward MySQL__OnGameModeExit();
    #endif 

  3. #3
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Не есть хорошим метод. Почему информацию о базе данных нельзя хранить в. * .cfg?
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Как-то так, карочи, если следовать вашей идее. Но варианта с таким вот использованием - его нет.

    PHP код:
    #if !defined MYSQL_CONNECT_SETTINGS
        
        #define MYSQL_HOST "localhost"
        #define MYSQL_USER "root"
        #define MYSQL_DATABASE "palladium"
        #define MYSQL_PASSWORD ""
        
        #define MYSQL_CONNECT_ALL MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD
        
        #define MYSQL_CONNECT_SETTINGS
    #endif 
    Я давно делал себе инклуд, который и подключался к бд, и отключался при рестарте и выключении мода. Не люблю я этот момент, когда надо ползти в низ и что-то искать, да и информация для разового использования мне сверху не очень, напрягает только.

     a_mysql_settings.inc
    PHP код:
    /* 
     *        Настройка подключения игрового мода с MySQL базой данных
     *
     */
     
     #if !defined mysql_included
        #error File a_mysql.inc is not included
    #endif

     // Настройки подключения
    #define MYSQL_HOST "localhost"
    #define MYSQL_USER "root"
    #define MYSQL_PASSWORD ""
    #define MYSQL_DATABASE "base"

    // id подключения
    new cHandle;

    // Подключение соединения с базой данных
    // при старте сервера
    public OnGameModeInit()
    {
        
    cHandle mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_DATABASEMYSQL_PASSWORD);
        if(
    mysql_errno())
            print(
    "[MySQL] Связь с базой данных не установлена\n* Проверьте введенные вами данные\n\n");
        else 
            print(
    "[MySQL]  Связь с базой данных установлена\n\n");
    #if defined MySQL__OnGameModeInit
        
    MySQL__OnGameModeInit();
        return 
    1;
    #endif
    }

    #if defined _ALS_OnGameModeInit
        #undef OnGameModeInit
    #else
        #define _ALS_OnGameModeInit
    #endif

    #define OnGameModeInit MySQL__OnGameModeInit

    #if defined MySQL__OnGameModeInit
    forward MySQL__OnGameModeInit();
    #endif

    // Отключение соединения с базой данных
    // при рестарте сервера
    public OnGameModeExit()
    {
        
    mysql_close(cHandle);
        print(
    "[MySQL] Связь с базой данных была отключена\nИдет подключение ...\n\n");
    #if defined MySQL__OnGameModeExit
        
    MySQL__OnGameModeExit();
        return 
    1;
    #endif
    }

    #if defined _ALS_OnGameModeExit
        #undef OnGameModeExit
    #else
        #define _ALS_OnGameModeExit
    #endif

    #define OnGameModeExit MySQL__OnGameModeExit

    #if defined MySQL__OnGameModeExit
    forward MySQL__OnGameModeExit();
    #endif 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не есть хорошим метод. Почему информацию о базе данных нельзя хранить в. * .cfg?
    Действительно, почему?

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

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Сообщений
    6
    Репутация:
    0 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Не есть хорошим метод. Почему информацию о базе данных нельзя хранить в. * .cfg?
    Я и хотел это реализовать.
    Что бы можно было переключаться между конфигом в файле и макросу.
    Т.е можно в моде поставить
    #define MySQL_ConfigFile true - и тогда данные будут в файле храниться иначе #define MySQL_Host...

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от AlexDizaro Посмотреть сообщение
    Я и хотел это реализовать.
    Что бы можно было переключаться между конфигом в файле и макросу.
    Т.е можно в моде поставить
    #define MySQL_ConfigFile true - и тогда данные будут в файле храниться иначе #define MySQL_Host...
    Как я уже говорил, такого варианта использования кода с вашей целью - его нет! Но можете взять mxINI или же стандартный file.INC и загружать инфу от туда, если данные не указывать, то ставится значение по умолчанию. Я делал команду (клицкай) с похожим алгоритмом. Можете как за основу посмотреть. Если найду время, то выложу в эту тему свой рабочий вариант, его только написать надо :3

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

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Как я уже говорил, такого варианта использования кода с вашей целью - его нет! Но можете взять mxINI или же стандартный file.INC и загружать инфу от туда, если данные не указывать, то ставится значение по умолчанию. Я делал команду (клицкай) с похожим алгоритмом. Можете как за основу посмотреть. Если найду время, то выложу в эту тему свой рабочий вариант, его только написать надо :3
    ADD: не совсем кфг файл, но ФАЙЛ.
     Открыть/закрыть

    PHP код:
    /*

        Загрузка данных из '../scriptfiles/mysql_settings.txt' для подключения с базой данных
        (C) Copyright 2015, Untonyst =3
        
        Пример содержимого файла mysql_settings.txt:
        
            localhost,tensa,123qwe,base
            хост, имя пользователя, пароль, имя базы данных
            
        Аля большой костыль!
    */

    // если нет инклуда a_mysql.inc, то исключим НАШ инклуд на стадии компиляции
    #if !defined mysql_included
        //#error File a_mysql.inc is not included
        #endinput
    #endif

    // если нет инклуда sscanf2.inc, то исключим НАШ инклуд на стадии компиляции
    #if !defined sscanf
        //#error File sscanf2.inc is not included
        #endinput
    #endif

    // настройки подключения по умолчанию, если файла настроек не обнаружено
    #define DEFAUL_MYSQL_HOST "127.0.0.1"
    #define DEFAUL_MYSQL_USER "root"
    #define DEFAUL_MYSQL_PASSWORD "" 
    #define DEFAUL_MYSQL_DATABASE "base"

    // id подключения
    new cHandle;

    public 
    OnGameModeInit()
    // подключение соединения с базой данных при старте сервера
    {
        new 
    File:file_handle fopen("mysql_settings.txt"io_read), buf[20*4+1], mysql_host[20], mysql_user[20], mysql_password[20], mysql_database[20];
        
        if (!
    fexist("mysql_settings.txt"))
        
    // если файла настроек нет, то используем данные по умолчанию
        
    {
            
    mysql_host DEFAUL_MYSQL_HOST;
            
    mysql_user DEFAUL_MYSQL_USER;
            
    mysql_password DEFAUL_MYSQL_PASSWORD;
            
    mysql_database DEFAUL_MYSQL_DATABASE;
        }
        else
        {
            
    fread(file_handlebuf);
            
    sscanf(buf"p<,>s[20]s[20]s[20]s[20]"mysql_hostmysql_usermysql_passwordmysql_database);
            
    fclose(file_handle);
            
    // это так, для сведения
            
    printf("===============\nХост: %s\nПользователь: %s\nПароль: %s\nБД: %s\n===============\n\n",mysql_hostmysql_usermysql_passwordmysql_database);
        }
        
        
    cHandle mysql_connect(mysql_hostmysql_usermysql_databasemysql_password);
        
        if(
    mysql_errno())
            print(
    "[MySQL] Связь с базой данных не установлена\n* Проверьте введенные вами данные\n\n");
        else
            print(
    "[MySQL]  Связь с базой данных установлена\n\n");
        
    #if defined MySQL__OnGameModeInit
        
    MySQL__OnGameModeInit();
        return 
    1;
    #endif
    }

    #if defined _ALS_OnGameModeInit
        #undef OnGameModeInit
    #else
        #define _ALS_OnGameModeInit
    #endif

    #define OnGameModeInit MySQL__OnGameModeInit

    #if defined MySQL__OnGameModeInit
    forward MySQL__OnGameModeInit();
    #endif

    public OnGameModeExit()
    // отключение соединения с базой данных при рестарте сервера
    {
        
    mysql_close(cHandle);
        print(
    "[MySQL] Связь с базой данных была отключена\nИдет подключение ...\n\n");
    #if defined MySQL__OnGameModeExit
        
    MySQL__OnGameModeExit();
        return 
    1;
    #endif
    }

    #if defined _ALS_OnGameModeExit
        #undef OnGameModeExit
    #else
        #define _ALS_OnGameModeExit
    #endif

    #define OnGameModeExit MySQL__OnGameModeExit

    #if defined MySQL__OnGameModeExit
    forward MySQL__OnGameModeExit();
    #endif 


    Все удовлетворены?

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от AlexDizaro Посмотреть сообщение
    Я и хотел это реализовать.
    Что бы можно было переключаться между конфигом в файле и макросу.
    Т.е можно в моде поставить
    #define MySQL_ConfigFile true - и тогда данные будут в файле храниться иначе #define MySQL_Host...
    В таком случае, работайте с файловыми функциями: fopen, fclose, fread, fexist.
    Впрочем, не могу сказать, что понимаю вашу логику. Зачем делать настройки в отдельном файле, когда возможности Pawn позволяют с лёгкостью сделать их в моде?

    В английском языке ситуацию, в которой убивают два зайца одним выстрелом, называют "win-win". Так вот, здесь, наоборот, получается ситуация "lose-lose". Вы не только усложняете разработку для себя, но ещё и упрощаете жизнь хакерам, ведь скопипастить текст из файла куда легче, чем извлекать его из бинарника, да ещё и в 4-байтовой кодировке.

    Для сравнения, в моде можно не просто сохранить настройки, но и зашифровать их и расшифровывать только при запуске сервера. Если кто-то украдёт ваш мод, то этому "кому-то" придётся изрядно попотеть, чтобы получить настройки: как минимум, нужно будет извлечь зашифрованные данные и вручную восстановить из опкодов AMX функцию для расшифровки, т.к. нормальных декомпиляторов для Pawn нет.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. 2 пользователя(ей) сказали cпасибо:
    Dobryak (03.01.2016) vovandolg (01.01.2016)
  10. #9
    Аватар для AlexDizaro
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Сообщений
    6
    Репутация:
    0 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В таком случае, работайте с файловыми функциями: fopen, fclose, fread, fexist.
    Впрочем, не могу сказать, что понимаю вашу логику. Зачем делать настройки в отдельном файле, когда возможности Pawn позволяют с лёгкостью сделать их в моде?

    В английском языке ситуацию, в которой убивают два зайца одним выстрелом, называют "win-win". Так вот, здесь, наоборот, получается ситуация "lose-lose". Вы не только усложняете разработку для себя, но ещё и упрощаете жизнь хакерам, ведь скопипастить текст из файла куда легче, чем извлекать его из бинарника, да ещё и в 4-байтовой кодировке.

    Для сравнения, в моде можно не просто сохранить настройки, но и зашифровать их и расшифровывать только при запуске сервера. Если кто-то украдёт ваш мод, то этому "кому-то" придётся изрядно попотеть, чтобы получить настройки: как минимум, нужно будет извлечь зашифрованные данные и вручную восстановить из опкодов AMX функцию для расшифровки, т.к. нормальных декомпиляторов для Pawn нет.
    Я хочу сделать мод-платформу для себя
    У которого будет гибкая настройка под мои нужды.

  11. #10
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В таком случае, работайте с файловыми функциями: fopen, fclose, fread, fexist.
    Впрочем, не могу сказать, что понимаю вашу логику. Зачем делать настройки в отдельном файле, когда возможности Pawn позволяют с лёгкостью сделать их в моде?

    В английском языке ситуацию, в которой убивают два зайца одним выстрелом, называют "win-win". Так вот, здесь, наоборот, получается ситуация "lose-lose". Вы не только усложняете разработку для себя, но ещё и упрощаете жизнь хакерам, ведь скопипастить текст из файла куда легче, чем извлекать его из бинарника, да ещё и в 4-байтовой кодировке.

    Для сравнения, в моде можно не просто сохранить настройки, но и зашифровать их и расшифровывать только при запуске сервера. Если кто-то украдёт ваш мод, то этому "кому-то" придётся изрядно попотеть, чтобы получить настройки: как минимум, нужно будет извлечь зашифрованные данные и вручную восстановить из опкодов AMX функцию для расшифровки, т.к. нормальных декомпиляторов для Pawn нет.
    В чем проблема, хранить зашифрованный пароль и прочии настройки в файле? (Ну или .cfg)
    Linux же никто не мешает хранить Пароди от пользователей в файле.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

 

 
Страница 1 из 4 1 2 3 ... ПоследняяПоследняя

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

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

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

Ваши права

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