Вопрос ещё, вот к примеру
хост можно же указать без файла вот тут или обязательно ковырять всё переделывать чтобы с инклуда читалось?PHP код:
#define DATABASE__DEFAULT_HOST "localhost"
Вопрос ещё, вот к примеру
хост можно же указать без файла вот тут или обязательно ковырять всё переделывать чтобы с инклуда читалось?PHP код:
#define DATABASE__DEFAULT_HOST "localhost"
[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Вот вариант для mxINI. Файл будет выглядеть так:PHP код:
#define USE_MYSQL_CONFIG_FILE//Включение работы с файлом (если закомментировать, данные будут сразу браться из макросов)
//Значения по умолчанию
#define DATABASE__DEFAULT_HOST "localhost"
#define DATABASE__DEFAULT_USER "root"
#define DATABASE__DEFAULT_NAME "sa-mp"
#define DATABASE__DEFAULT_PASSWORD ""
#if !defined USE_MYSQL_CONFIG_FILE
new const database_host[] = DATABASE__DEFAULT_HOST;
new const database_user[] = DATABASE__DEFAULT_USER;
new const database_name[] = DATABASE__DEFAULT_NAME;
new const database_pass[] = DATABASE__DEFAULT_PASSWORD;
#else // !defined USE_MYSQL_CONFIG_FILE
#define DATABASE_CONFIG_FILE_NAME "dbconf.txt"//Имя файла, в котором будут хранится данные
#define DB_CONFIG_FIELD_HOST_NAME "Host"//Имя строки, в которой будет хранится адрес хостинга
#define DB_CONFIG_FIELD_USER_NAME "User"//Имя строки, в которой будет имя пользователя
#define DB_CONFIG_FIELD_DB_NAME "Database"//Имя строки, в которой будет хранится имя БД
#define DB_CONFIG_FIELD_PASS_NAME "Password"//Имя строки, в которой будет хранится пароль от БД
new database_host[64] = DATABASE__DEFAULT_HOST;
new database_user[16] = DATABASE__DEFAULT_USER;
new database_name[32] = DATABASE__DEFAULT_NAME;
new database_pass[32] = DATABASE__DEFAULT_PASSWORD;
public OnGameModeInit()
{
new config_file_handle = ini_openFile(DATABASE_CONFIG_FILE_NAME);
if (config_file_handle == -1)
{
printf("Warning: Не удалось открыть файл \"%s\"! Применение параметров по умолчанию ...", DATABASE_CONFIG_FILE_NAME);
config_file_handle = ini_createFile (DATABASE_CONFIG_FILE_NAME);
if (config_file_handle >= 0)
{
ini_setString (config_file_handle, DB_CONFIG_FIELD_HOST_NAME, database_host);
ini_setString (config_file_handle, DB_CONFIG_FIELD_USER_NAME, database_user);
ini_setString (config_file_handle, DB_CONFIG_FIELD_DB_NAME, database_name);
ini_setString (config_file_handle, DB_CONFIG_FIELD_PASS_NAME, database_pass);
printf("Файл \"%s\" успешно создан.", DATABASE_CONFIG_FILE_NAME);
}
else printf("Не удалось создать файл \"%s\". Код ошибки: %d", DATABASE_CONFIG_FILE_NAME, config_file_handle);
}
else
{
static const read_warning_str[] =
"Warning: Длина строки %s превышает лимит в %d символов.";
new read_error;
if (ini_getString(config_file_handle, "host", database_host) > sizeof(database_host) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_HOST_NAME, sizeof(database_host) - 1), read_error = 1;
if (ini_getString(config_file_handle, "user", database_user) > sizeof(database_user) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_USER_NAME, sizeof(database_user) - 1), read_error = 1;
if (ini_getString(config_file_handle, "user", database_name) > sizeof(database_name) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_DB_NAME, sizeof(database_name) - 1), read_error = 1;
if (ini_getString(config_file_handle, "user", database_pass) > sizeof(database_pass) - 1)
printf(read_warning_str, DB_CONFIG_FIELD_PASS_NAME, sizeof(database_pass) - 1), read_error = 1;
if(!read_error) printf("Данные из \"%s\" успешно загружены", DATABASE_CONFIG_FILE_NAME);
}
ini_closeFile(config_file_handle);
#if defined mysql_config__OnGameModeInit
return mysql_config__OnGameModeInit();
#endif
}
#if defined _ALS_OnGameModeInit
#undef OnGameModeInit
#else
#define _ALS_OnGameModeInit
#endif
forward mysql_config__OnGameModeInit();
#define OnGameModeInit mysql_config__OnGameModeInit
#endif // !defined USE_MYSQL_CONFIG_FILE
Если файла нет, сервер сам его создаст и запишет в него значения из макросов, в которых указаны значения по умолчанию.
Последний раз редактировалось DeimoS; 29.02.2016 в 09:08.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Кстати, говоря - велосипеды изобритаете.
Можно воспользоваться, готовой, накатыной лыжней.
тыч, тыч, тыч, тыщ по ссылке
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
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Он читается из текстового файла, а если допустим в этом же инклуде замутить?
[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
vovandolg (27.02.2016)
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Почитаю потом о других лыжах, может и пригодится куда)
- - - Добавлено - - -
Попытал вариант с mxINI:
PHP код:
[00:20:42] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
[00:20:42] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
[00:21:38] [ERROR] CMySQLQuery::Execute[OnPlayerRegCheck(d)] - (error #2006) MySQL server has gone away
[00:21:38] [WARNING] CMySQLQuery::Execute[OnPlayerRegCheck(d)] - lost connection, reconnecting..
[00:21:38] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
[00:21:45] [ERROR] CMySQLQuery::Execute[()] - (error #2006) MySQL server has gone away
[00:21:45] [WARNING] CMySQLQuery::Execute[()] - lost connection, reconnecting..
[00:21:45] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'тут_название_бд'@'localhost' (using password: YES)
Забыл сказать если это важно юзаю mysql R34PHP код:
[00:20:42] Данные из "dbconf.txt" успешно загружены
[00:20:42] Подключиться к базе не удалось
____________________________________________
Решил проблему, в не обратил внимание что в файле наименование значений от предыдущего варианта..
Последний раз редактировалось vovandolg; 27.02.2016 в 03:34.
[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Только, что начал писать систему, попробовал использовать mysql_connect_file, оказывается в сурсах на GitHub она есть, ещё, ещё, ещё ещё и ещё, а вот в скомпилированом плагине (release) - ее нет. Даже если прописать:
Сервер все равно будет возвращать ошибку о не задекларированной функции:PHP код:
native MySQL:mysql_connect_file(const file_name[] = "mysql.ini");
Интересно в чем профит было в сурсах оставить функцию но из release ее удалить? (Я отпишусь на GitHub - maddinat0r/BlueG)
В итоге у меня вышло, что то такое: (не дописанный код, может быть все таки они скомпилируют плагин с данной функцией и тогда можно будет дописать систему. Ну или на крайний случаи можно собрать плагин самому)
Глобально:
Собственно, сама функция:PHP код:
const SETTING_MYSQl_NOT_FILE = 0;
const SETTING_MYSQL_FILE = 1;
static const NAME_MYSQl_CONFIG[] = !"mysql.ini";
static const MYSQL_HOST[] = !"127.0.0.1";
static const MYSQL_USER[] = !"root";
static const MYSQL_DATABASE[] = !"database";
static const MYSQL_PASSW0RD[] = !"pass";
Кому интересно - вопрос на GitHub'ePHP код:
/*
Если верить логам, то mysql_connect адекватно работает с запакованными строками:
[02:06:00] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on '127.0.0.1' (10061)
*/
ConfigMySQL(status_setting = SETTING_MYSQl_NOT_FILE)
{
if(status_setting == SETTING_MYSQl_NOT_FILE)
{
static host[(sizeof(MYSQL_HOST)) * (cellbits / charbits) + 1];
static user[(sizeof(MYSQL_USER)) * (cellbits / charbits) + 1];
static database[(sizeof(MYSQL_DATABASE)) * (cellbits / charbits) + 1];
static password[(sizeof(MYSQL_PASSW0RD)) * (cellbits / charbits) + 1];
strunpack(host, MYSQL_HOST, sizeof(host)); // дабы избежать багов в printf/format
strunpack(user, MYSQL_USER, sizeof(user)); // дабы избежать багов в printf/format
strunpack(database, MYSQL_DATABASE, sizeof(database)); // дабы избежать багов в printf/format
strunpack(password, MYSQL_PASSW0RD, sizeof(password)); // дабы избежать багов в printf/format
print(#Подключения к базе данных из стандартных настроек...);
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSW0RD);
printf("Host: %s | User: %s | Database: %s | Password: %s", host, user, database, password);
}
else
{
// тут блок должен был заполнен работой с mysql_connect_file
}
}
Последний раз редактировалось $continue$; 27.02.2016 в 04:21.
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 (пользователей: 0 , гостей: 1)