Скриптер
Участник
Пользователь
- Сообщения
- 74
- Реакции
- 61
- Помог
- 1 раз(а)
Всем привет! Нужен совет.
У меня есть самописный плагин на ЛИЧНЫЙ КАБИНЕТ. Там всё хорошо, но есть другие плагины, использующие этот плагин. К примеру, плагин статистики: берёт от ЛК дескриптор подключения к БД и форвардом логин зарегистрированного человека. В момент как игрок зарегистрировался статистика создает столбец под статистику в БД. Из-за того что на **дской MyARENA устаревшя БД,мне пришлось сделать квар для альтернативного синтаксиса:
В режиме работы через CheckCreateAccount мне часто пишет:
Кто может подсказать, как можно избавится от данной ошибки? Синхронный запрос нелать не вариант через SQL_PrepareQuery
Тасками всё фигарить тоже не охота, придётся все 1500 строк кода переписывать под задержки (и это в одном плагине только). Самих плагинов у меня около 5, (которые работают через форвард авторизации) и все бывает ругаются
Ошибка раздражает, у людей не всегда создаётся статистика. А с клиентами из MyArena этот вопрос можно решить лишь переездном на другую БД И правда, а чего я парюсь. Чего сразу не получить в этой функции данные для статистики, правда придётся везде переписать. Спасибо мне, что придумал решение, когда уже опубликовал тему Если у кого есть совет как по-другому реализовать этот момент, я буду очень благодарен
У меня есть самописный плагин на ЛИЧНЫЙ КАБИНЕТ. Там всё хорошо, но есть другие плагины, использующие этот плагин. К примеру, плагин статистики: берёт от ЛК дескриптор подключения к БД и форвардом логин зарегистрированного человека. В момент как игрок зарегистрировался статистика создает столбец под статистику в БД. Из-за того что на **дской MyARENA устаревшя БД,мне пришлось сделать квар для альтернативного синтаксиса:
C++:
//Заход/Регистрация (проверяем существует ли столбец с данными игрока, если нет - создаём)
//Регистрация и вход не срабатывает одновременно (если что). Если регистрация, то авторизация не вызывается
public dc_user_register(pId, szLogin[], szAuth[34]) {
dc_user_auth(pId, szAuth);
}
public dc_user_auth(pId, szAuth[34]) {
if(!g_iCvarDBSyntax) {
new szData[2], szBuffer[2048]; szData[0] = pId;
formatex(szBuffer, charsmax(szBuffer), "insert into `%s` (`%s`) Select '%s' Where not exists(select * from `%s` where `%s` = '%s');",
g_szTable, STATS_TABLE_LOGIN_NAME, szAuth, g_szTable, STATS_TABLE_LOGIN_NAME, szAuth);
SQL_ThreadQuery(g_hTupleSql, "@SQL_IgnoreHandle", szBuffer);
SQL_ThreadQuery(g_hTupleSql, "@SQL_ConnectHandle", fmt("SELECT * FROM `%s` WHERE `%s` = '%s'", g_szTable, STATS_TABLE_LOGIN_NAME, szAuth),
szData, sizeof szData);
} else {
CheckCreateAccount(pId, szAuth);
}
}
//Сама функция CheckCreateAccount
//Отправляем запрос в БД
CheckCreateAccount(pId, szLogin[]) {
new szData[2]; szData[0] = pId;
SQL_ThreadQuery(g_hTupleSql, "@SQL_CreateAccount", fmt("SELECT * FROM `%s` WHERE `%s` = '%s';",
g_szTable, STATS_TABLE_LOGIN_NAME, szLogin),
szData, sizeof szData);
}
@SQL_CreateAccount(iFailState, Handle:hQuery, const szError[], iError, const szData[], iDataSize) {
if(g_hTupleSql == Empty_Handle) return PLUGIN_HANDLED;
switch(iFailState) {
case TQUERY_CONNECT_FAILED: {
log_amx("ERROR: MySQL connection failed");
log_amx("[ %d ] %s", iError, szError );
return PLUGIN_HANDLED;
}
case TQUERY_QUERY_FAILED: {
log_amx("ERROR: MySQL query failed");
log_amx("[ %d ] %s", iError, szError );
return PLUGIN_HANDLED;
}
}
new pId = szData[0];
new szLogin[35];
if(is_user_connected(pId)) dc_account(DC_UserGetKey, pId, szLogin);
else copy(szLogin, charsmax(szLogin), "server");
//Столбцы не найдены с логином? Создаём
if(SQL_NumResults(hQuery) < 1) { //Игрок не найден
SQL_FreeHandle(hQuery);
SQL_ThreadQuery(g_hTupleSql, "@SQL_IgnoreHandle", fmt("INSERT INTO `%s`(`%s`) VALUES ('%s')",
g_szTable, STATS_TABLE_LOGIN_NAME, szLogin));
} else SQL_FreeHandle(hQuery);
//Так как запрос на создание столбца приходит быстрее, мы сразу же
//Загружаем уже в наши массивы данные игрока
new szDataNew[2]; szDataNew[0] = pId;
SQL_ThreadQuery(g_hTupleSql, "@SQL_ConnectHandle", fmt("SELECT * FROM `%s` WHERE `%s` = '%s'", g_szTable, STATS_TABLE_LOGIN_NAME, szLogin), szDataNew, sizeof szDataNew);
return PLUGIN_HANDLED;
}
C++:
L 08/02/2021 - 12:00:43: [MySQL] Thread worker was unable to start.
L 08/02/2021 - 12:00:43: [AMXX] Displaying debug trace (plugin "ujbl_dc_stats.amxx", version "vk/krisiso")
L 08/02/2021 - 12:00:43: [AMXX] Run time error 10: native error (native "SQL_ThreadQuery")
L 08/02/2021 - 12:00:43: [AMXX] [0] ujbl_dc_stats.sma::@SQL_CreateAccount (line 731)
L 08/02/2021 - 13:42:08: Start of error session.
Тасками всё фигарить тоже не охота, придётся все 1500 строк кода переписывать под задержки (и это в одном плагине только). Самих плагинов у меня около 5, (которые работают через форвард авторизации) и все бывает ругаются
Ошибка раздражает, у людей не всегда создаётся статистика. А с клиентами из MyArena этот вопрос можно решить лишь переездном на другую БД
2 Авг 2021
2 Авг 2021
Последнее редактирование: