Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

War3Ft 3.0 Краш сервера при подключении к БД

Статус пользователя Deimos7
сообщение 19.6.2022, 1:15
Сообщение #1
Стаж: 13 лет
Город: Киев

Сообщений: 93
Благодарностей: 5
Полезность: 47

Нужна помощь! Возможно кто-то на этом форуме имеет опыт работы с плагинами создающими подключение к БД и сможет дать хороший совет.

Пытаюсь развернуть War3FT мод версия 3.0 RC 13, которую можно скачать с официального форума авторов этого мода.

Я не буду сбрасывать содержимое всего wa3ft.cfg, так как мне лично кажется, что именно в этом случае это вовсе неважно. Сбрасываю только те настройки, которые непосредственно относяться к подключению к БД. Мне кажется важно отметить, что сервер не крашится если не подсоединять его к какой либо БД впринципи. Я имею введу если оставить cvar wc3_save_xp со значением 0. Именно так, я кстати определил, что имею проблему с неработающим модом именно из-за проблем с подключением к базе.

wa3ft.cfg
// Warcraft 3 Frozen Throne Configuration File

// Saving Options

wc3_save_xp 1 // Enables saving of experience (default is 0)
wc3_save_xp_db 1 // How should we save XP? (0 = SQLite, 1 = MySQL)

wc3_save_by 0 // What should I save this as? steam id = 0, IP = 1, name = 2 (default is 0)
wc3_save_pruning 0 // Automatically prunes the database of old users at a mapchange (default is 0)
wc3_days_before_delete 0 // However many days before deleting XP or pruning from the database (default is 31)
wc3_save_end_round 1 // Save xp at the end of each round (may cause lag, default is 1)

wc3_sql_dbhost "" // Host Name
wc3_sql_dbuser "" // User Name
wc3_sql_dbpass "" // Password
wc3_sql_dbname "" // Database Name

...

Конечно первая мысль возникает, что я мог неправильно ввести данные для подключения. Скажу, что я лично тестил подключение через Sequelize Pro (SQL клиент для Mac OS X).
Я даже пробовал разные базы данных. У меня уже есть БДшки, которые я держу на хостинге mirohost. Их поддержка сказала мне, что у них там стоит MariaDB 10.2. И кстати, с их базами данных не было никаких проблем ранее в контексте cs 1.6 серверов. Одна база сейчас прекрасно взаимодействует с FreshBans, а другая сейчас подключена к более старой версии варкрафт мода - War3FT 2.3.2, который у меня установлен на другом сервере, и тоже проблем с соединением нет. А второй тип БД, который я пробовал подключить - это MySQL 5.7 на хостинге Украина, и получил такой же результат - сервер сразу же падает.

Прикол в том, что падает он без каких либо ошибок в логах, дающих явно понять в чем причина. Сам игровой сервер я держу на хостинге cshost.com.ua и там в консоли выводит Segmentation Fault. Выглядит это примерно вот так из их веб версии консоли:

Cкрытый текст

Вообщем, я полез в исходники мода и начал вставлять server_print в разных местах, чтоб понять как далеко я зайду, и что именно распечатается в консоли перед крашем, а что нет.

В итоге, начиная с plugin_init() из scripting/war3ft.sma и продвигаясь дальше я стал выводить свои принты в консоли и дошел до иницизиализации соединения с базой данных, которая в этом моде описанна в файле scripting/war3ft/db/db_mysqlx.inl.
Результат - в консоли сервера вывелись все принты, которые я добавил до вызова SQL_Connect()

db_mysqlx.inl

Код
Код
// Initiate the connection to the MySQL database
MYSQLX_Init()
{
    server_print("MYSQLX_Init...");

    // Determine the database information
    new szHost[64], szUser[32], szPass[32], szDB[128], szError[256], iErrNum;

    get_pcvar_string( CVAR_wc3_sql_dbhost    , szHost        , 63    );
    get_pcvar_string( CVAR_wc3_sql_dbuser    , szUser        , 31    );
    get_pcvar_string( CVAR_wc3_sql_dbpass    , szPass        , 31    );
    get_pcvar_string( CVAR_wc3_sql_dbname    , szDB            , 127    );

    // Set up the tuple that will be used for threading
    g_DBTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );

    server_print("Created tuple.");

    // Attempt to connect
    g_DBConn = SQL_Connect( g_DBTuple, iErrNum, szError, 255 );

    server_print("iErrNum: %d", iErrNum);
    server_print("szError: %s", szError);

    if ( !g_DBConn )
    {
        WC3_Log( true, "[MYSQLX] Database Connection Failed: [%d] %s", iErrNum, szError );

        return;
    }

    server_print( "[WAR3FT] MySQL X database connection successful" );

    bDBAvailable = true;

    // Create tables!
    MYSQLX_CreateTables();

    // Do we need to update the skills/races ?
    MYSQLX_UpdateWebTable();

    // Do we need to run a conversion?
    MYSQLX_Convert();
}

Консоль с моими принтами:
Консоль после моих принтов

У меня пока закончились идеи как справиться с этой проблемой и подключиться к БД поэтому прошу помощи. Сам я далеко не скриптер и опыта у меня мало - буду благодарен любым идеям и советам. Желания исправить ошибку есть - советуйте, будем пробовать ;)

Я упомянул выше, что у меня есть так же сервер с этим же модом более ранней версии и там проблем с соединением к MySQL БД нету. Да, это так, но я могу здесь ошибаться (не было пока времени сравнивать исходный код обоих версий плагинов), но способ подключения к БД там кажется несколько другой. Версия варкрафт мода 2.3.2, о которой сейчас идет речь создавалась во времена очень старой версии amxmodx - еще во времена 1.7.1. У меня кстати стоит сейчас версия Amxmodx 1.8.2.

Отредактировал: Deimos7, - 19.6.2022, 1:51
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя georgeml
сообщение 19.6.2022, 7:53
Сообщение #2
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Deimos7, Сам коннект не должен крашить сервер.. Попробуйте уменьшить таймаут
Код:
g_DBTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );

=>
Код:
g_DBTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB, 10 );
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Gecko
сообщение 19.6.2022, 10:17
Сообщение #3
Стаж: 7 лет 4 месяца

Сообщений: 1247
Благодарностей: 518
Полезность: 346

Deimos7,

Попробуй так
Код
//...
new szHost[64], szUser[32], szPass[32], szDB[128], szError[512], iErrNum;

    get_pcvar_string( CVAR_wc3_sql_dbhost     , szHost    , 63        );
    get_pcvar_string( CVAR_wc3_sql_dbuser     , szUser    , 31        );
    get_pcvar_string( CVAR_wc3_sql_dbpass     , szPass    , 31        );
    get_pcvar_string( CVAR_wc3_sql_dbname  , szDB           , 127      );

g_DBTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB, 10);

g_DBConn = SQL_Connect(g_DBTuple, iErrNum, szError, charsmax(szError));

if (g_DBConn != Empty_Handle)
    {
        log_amx("[WAR3FT] MySQL X database connection successful")
        } else {
        log_amx("[MYSQLX] Database Connection Failed: [%d] %s", iErrNum, szError);
        pause("a")
}
//...


Тебе проще на форуме разработчика спросить, скачай плагин с официальной репы, проверь на совместимость и прочитай внимательно инструкцию по установке.
Если у других всё работает а у тебя нет, значит ты что-то делаешь не так.
Может допустил ошибку при редактировании настроек?


Не отвечаю на ЛС.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Deimos7
сообщение 19.6.2022, 11:36
Сообщение #4
Стаж: 13 лет
Город: Киев

Сообщений: 93
Благодарностей: 5
Полезность: 47

georgeml, я попробовал выставить timeout на 10 в SQL_MakeDbTuple и сделал проверку с паузой как написал Gecko.

Код:

...

// Initiate the connection to the MySQL database
MYSQLX_Init()
{
server_print("MYSQLX_Init...");

// Determine the database information
new szHost[64], szUser[32], szPass[32], szDB[128], szError[256], iErrNum;

get_pcvar_string( CVAR_wc3_sql_dbhost , szHost , 63 );
get_pcvar_string( CVAR_wc3_sql_dbuser , szUser , 31 );
get_pcvar_string( CVAR_wc3_sql_dbpass , szPass , 31 );
get_pcvar_string( CVAR_wc3_sql_dbname , szDB , 127 );

// Set up the tuple that will be used for threading
g_DBTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB, 10 );

server_print("Created tuple.");

// Attempt to connect
g_DBConn = SQL_Connect( g_DBTuple, iErrNum, szError, 255 );

if (g_DBConn != Empty_Handle)
{
log_amx("[WAR3FT] MySQL X database connection successful")
} else {
log_amx("[MYSQLX] Database Connection Failed: [%d] %s", iErrNum, szError);
pause("b");
}

// if ( !g_DBConn )
// {
// WC3_Log( true, "[MYSQLX] Database Connection Failed: [%d] %s", iErrNum, szError );

// return;
// }

// server_print( "[WAR3FT] MySQL X database connection successful" );

bDBAvailable = true;

// Create tables!
MYSQLX_CreateTables();

// Do we need to update the skills/races ?
MYSQLX_UpdateWebTable();

// Do we need to run a conversion?
MYSQLX_Convert();
}

...

Спасибо ребят, но пока результат такой же с точки зрения распечатки консоли.

Красным обвел свои собственно вставленные server_print
Консоль перед падением

georgeml, да логично, что сервер вроде бы и не должен падать на SQL_Connect, а возвращать как минимум ошибку, если что-то пойдет не так, но пока как видишь все выглядит именно так.

Кстати, если кто-то из толковых скриптеров будет проходить мимо этой темы и захочет в этом всем покопаться, можете даже писать мне в личку - обменяемся контактами, так будет оперативней.
Я в долгу точно не останусь. Если мы развернем мод именно этой версии и соединим его с БД у меня на голом сервере - я готов и денюжкой отблагодарить. Мне сейчас неплохо было бы сэкономить время на все эти разборки ))

Отредактировал: Deimos7, - 19.6.2022, 11:38
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deimos7
сообщение 19.6.2022, 12:01
Сообщение #5
Стаж: 13 лет
Город: Киев

Сообщений: 93
Благодарностей: 5
Полезность: 47

Цитата(Gecko @ 19.6.2022, 10:17) *
Тебе проще на форуме разработчика спросить, скачай плагин с официальной репы, проверь на совместимость и прочитай внимательно инструкцию по установке.
Если у других всё работает а у тебя нет, значит ты что-то делаешь не так.
Может допустил ошибку при редактировании настроек?

Да впринципи, вот тот сайт на который я бросал ссылку в первом посте и этот форум - это и есть те официальные ресурсы с которого, как мне верится и выгружают этот мод.

http://war3ft.com/downloads.php

Cкрытый текст

http://wc3mods.net/forums/viewforum.php?f=2
Cкрытый текст

P.S: То есть я не пробовал искать этот мод где то на гите потому что думаю, что если и найду, то найду там тоже самое ;)

Отредактировал: Deimos7, - 19.6.2022, 12:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deimos7
сообщение 19.6.2022, 13:04
Сообщение #6
Стаж: 13 лет
Город: Киев

Сообщений: 93
Благодарностей: 5
Полезность: 47

Еще есть вопрос. Как альтернатива MySQL, кто-то может подсказать где можно хостануть SQLite в UA зоне? Хочу попробовать протестировать такой тип соединения тоже - вдруг заработает.
Именно SQLite нужен, а то заказать VPS/VDS и установить туда все что угодно - я и сам могу, но делать это ради одной базы данных пока что как то смешно - ищу способы полегче и побыстрее. Ведь не факт что это сработает.

Может у кого то есть машинка и он уже пользуется SQLite, и может помочь под меня одну бдшку развернуть чтоб просто для начала проверить соединение? Буду очень благодарен!

Отредактировал: Deimos7, - 19.6.2022, 13:08
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deimos7
сообщение 19.6.2022, 14:03
Сообщение #7
Стаж: 13 лет
Город: Киев

Сообщений: 93
Благодарностей: 5
Полезность: 47

UPD: Проблему исправил. Пока что не знаю в чем именно была проблема, но соединится с БД получилось после обновления с amxmodx 1.8.2 до 1.8.3.

Отредактировал: Deimos7, - 19.6.2022, 14:04
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Affl
сообщение 20.6.2022, 12:40
Сообщение #8


Стаж: 15 лет

Сообщений: 1573
Благодарностей: 1182
Полезность: 1042

Привет!
Не знаю, в курсе ли ты, есть ещё апдейт от русского скриптера SMaster`a, он там много всего интересного придумал к вар3моду, что стало тоже своеобразной "классикой"
Чекнуть и скачать можно тут - http://perfect-soft.su/

Хотя может ты просто хочешь старый добрый олдовый варик запустить) тем не менее, ресурс может быть полезен


WAR3FT Пивка для Рывка 202 lvl
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя dimamelnic
сообщение 20.6.2022, 18:40
Сообщение #9
Стаж: 11 лет

Сообщений: 1862
Благодарностей: 229
Полезность: 9

Affl, как раз стоит версия 6.7 месяца как 3 уже

думаю снести. и поставить ксдм. ибо на варике постоянных сложно набирать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Deimos7
сообщение 20.6.2022, 22:08
Сообщение #10
Стаж: 13 лет
Город: Киев

Сообщений: 93
Благодарностей: 5
Полезность: 47

Цитата(Affl @ 20.6.2022, 12:40) *
Привет!
Не знаю, в курсе ли ты, есть ещё апдейт от русского скриптера SMaster`a, он там много всего интересного придумал к вар3моду, что стало тоже своеобразной "классикой"
Чекнуть и скачать можно тут - http://perfect-soft.su/

Хотя может ты просто хочешь старый добрый олдовый варик запустить) тем не менее, ресурс может быть полезен


Привет!
У нас идея пока что начать с классики и кастомизировать её под себя в будущем. Тем самым добавляя новые классы, предметы и всякие прочие эксклюзивные плюшки, о которых пока еще рано говорить - всему свое время.
Легче просто переписывать оригинал.

Но спасибо за линк. Может в будущем будем черпать идеи и оттуда ;)

Отредактировал: Deimos7, - 20.6.2022, 22:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: