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

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

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

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

Проблема с ExecuteForward

, Expected 0 parameters, got 3
Статус пользователя Metal Messiah
сообщение 29.7.2023, 21:23
Сообщение #1


Иконка группы

Стаж: 13 лет

Сообщений: 2458
Благодарностей: 1482
Полезность: 772

HostGame.cf
Плагин CSStatsX SQL от serfreeman1337, версия 0.7.4+2

Возникает вот такая ошибка:
Цитата
Expected 0 parameters, got 3
[AMXX] Displaying debug trace (plugin "csstatsx_sql.amxx", version "0.7.4+2")
[AMXX] Run time error 10: native error (native "ExecuteForward")
[AMXX] [0] csstatsx_sql.sma::Stats_SaveAssist (line 1804)
[AMXX] [1] csstatsx_sql.sma::Stats_SaveKill (line 1968)
[AMXX] [2] csstatsx_sql.sma::EventHook_Damage (line 1611)


1804я строка кода:
Код
ExecuteForward(FW_Assist,dummy_ret,player,victim,assisted)

Форвард объявлен следующим образом:
Код
FW_Assist = CreateMultiForward("client_assist_sql",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL)

(то есть как бы должно быть 3 параметра, 3 и передаются)

Шутка в том что плагин стоит на 3 серверах, база данных общая (только таблицы разные), и на 2 серверах данные о фрагах пишутся, а на третьем нет.

Кто понимает что вообще происходит?


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя murlemur
сообщение 29.7.2023, 22:02
Сообщение #2
Стаж: 5 лет 5 месяцев

Сообщений: 28
Благодарностей: 8
Полезность: 174

Metal Messiah,

1. Раньше все работало нормально и вдруг поламалось - никакие изменения не вносились ?
2. Могла ли побиться таблица в БД - попробовать ее чекнуть ?
3. Проверить конфиг файлы в которых хранятся данные для подключения к БД, и во всех ли конфигах одинаковые учетки с одинаковым доступом к БД ? Маловероятно - но мог побиться и конфиг файл.
4. Если сам конфиг файл не побился мог побиться плагин , попробовать перезаписать/перекомпилить ...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 29.7.2023, 23:50
Сообщение #3


Иконка группы

Стаж: 13 лет

Сообщений: 2458
Благодарностей: 1482
Полезность: 772

HostGame.cf
Именно так, работало но сломалось. Правда, не совсем так.
Я упомянутый плагин нашел в сентябре прошлого года, удивился что плагин оказался рабочим (все предыдущие системы статистики на MySQL которые мне попадались имели серьезные проблемы и переделывать их было дольше чем бы написать с нуля). Поставил его сразу на 3 сервера.

Конфигурация:
Сервер 1 - Арена, MySQL там же Арена.
Сервер 2, 3 - свои VPS, MySQL - тоже свой VPS (другой), на нем одна база данных но разные таблицы.

Сегодня клонирую Сервер 3 на другой адрес и называю это Сервер 4. Архивировал, скопировал, разархивировал, запустил - все просто.
Далее клонировал 2 таблицы базы данных необходимых для работы статистики с другими именами и подправил имя таблицы в конфиге (структура правильная, новые таблицы пустые после TRUNCATE). Логин-пароль к базе тот же. Знаю что так делать нельзя но было лень создавать отдельного юзера с правами на эти таблицы.

Вижу ошибку из 1 поста в конце раунда когда должна происходить запись статистики согласно настройкам.
Квары доступа к БД проверил - значения правильные в консоли.
Подключений к базе перманентных нет (SHOW PROCESSLIST показывает пусто) но на Сервере 2 все идеально работает и данные пишутся - значит так задумано автором плагина, в принципе это правильно.
На всякий случай из консоли подключился к удаленной базе
Цитата
mysql -u user -h host -p
как бы все работает, подключение устанавливается.
Включил на сервере mysql функцию general log (все запросы в файл) и с удивлением обнаруживаю что с сервера 4 ничего не пытается писаться в таблицу статистики, подключения есть только от плагина банлиста (логин тот же).

Ну а теперь самое интересное - на сервере 3 кажется тоже неадекватное, он немножко беременный. Это когда все работало когда я поставил плагин, когда в таблице игроков около 3000 записей (то есть что-то туда писалось) и даже поле last_join имеет самые последние значения пару часов назад, но есть смутное впечатление что новые данные туда пишутся не все или не пишутся все. Но с сервера 4 точно не пишется ничего т.к. таблицы пусты.

Как я это понимаю? Вызывается форвард client_assist_sql который должен получать 3 параметра и которому передаются 3 параметра, но какого-то черта он ждет 0 параметров (ну бред, не может учет помощи при убийстве получать 0 параметров в принципе. Ну и дальше ничего не выполняется.

Итого:
1. сервера 1 и 2 работает все идеально. Сервер 3 раньше работал сейчас не факт, но на нем мало кто играет и я это не замечал. Сервер 4 - таблицы пусты.
2. с таблицами все нормально
3. с конфигом подключения к БД все нормально, квары в консоль выдаются правильные, подключения с этой машины к той машине где база - есть, проверял mysql клиентом.
4. сам плагин дернут с рабочего сервера, версии AMXModX у них одинаковые потому перекомпилировать смысла нет (сначала был с сервера 3, потом от греха подальше с сервера 1 взял, со 2го не подходит там другая версия AMXModX).

Сейчас еще идейку одну проверю, выключу оптимизацию а именно пусть пишет в базу каждое событие сразу, а не в конце раунда...

-------------
SQL_MakeDbTuple в плагине вызывается только в одном месте, в функции plugin_cfg() и больше нигде. Добавил логи вызова основных функций и пришел к выводу что она не вызывается вообще.

Код
#if AMXX_VERSION_NUM < 183
    public plugin_cfg()
#else
    public OnConfigsExecuted()
#endif
{
log_amx("[X] OnConfigsExecuted")
    #if AMXX_VERSION_NUM < 183
        // форсируем выполнение exec addons/amxmodx/configs/amxx.cfg
        server_exec()
    #endif
    
    // читаем квары на подключение
    new host[128],user[64],pass[64],db[64],type[10]

(дальше идет получение значений логина-пароля и т.д. и само подключение, этот код ни разу не был вызван судя по логу). У меня AMX 1.9.0, потому функция объявлена как OnConfigsExecuted. Видимо, в этом причина того что она не вызывается, что там за новомодные заморочки напридумали в AMX последних версий я понятия не имею.

Вот в таком варианте вроде бы заработало
Код
//#if AMXX_VERSION_NUM < 183
//    public plugin_cfg()
//#else
//    public OnConfigsExecuted()
//#endif
public plugin_cfg()
{

#if AMXX_VERSION_NUM < 183
    log_amx("[X] OnConfigsExecuted OLD AMX")
#else
    [b]log_amx("[X] OnConfigsExecuted NEW AMX")
#endif

Причем, заметьте, в логе присутствует именно строчка OnConfigsExecuted NEW AMX, но если функция названа OnConfigsExecuted() - ее никто не вызывает... Попробую пока обойтись одним переименованием, 2 строчки в базу записались.

Отредактировал: Metal Messiah, - 30.7.2023, 1:23


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BlackSignature
сообщение 30.7.2023, 1:17
Сообщение #4


Стаж: 15 лет
Город: Москва

Сообщений: 36
Благодарностей: 106
Полезность: < 0

Metal Messiah, Привет. Если у тебя плагин скомпилен под 183 или старше, то форвард регается в OnConfigsExecuted(). У меня подозрение, что OnConfigsExecuted() не срабатывает (не вызывается вообще). Такое может быть, я не помню фиксили это в более новых версиях AMXX или нет. Ты можешь попробовать залогировать момент регистрации форварда, добавив под
Код
FW_Assist = CreateMultiForward("client_assist_sql",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL)

строку
Код
log_amx("It works!")

Оно должно в стандартный amxx-лог выплёвывать эту фразу. Если не выплёвывает, значит форвард не отрабатывает. Отлечить это можно либо сменой логики на таск, либо на plugin_cfg(), как это задумано в варианте компиляции для версий < 183

Отредактировал: BlackSignature, - 30.7.2023, 1:18


Написание и правка плагинов, услуги гаранта
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 30.7.2023, 19:06
Сообщение #5


Иконка группы

Стаж: 13 лет

Сообщений: 2458
Благодарностей: 1482
Полезность: 772

HostGame.cf
Вот как-то так и происходит что OnConfigsExecuted() не вызывается вообще. Компилировал под 1.9.0 винда, запускал под ним же Linux, причем на одном сервере работает, на других нет. Переименовал в plugin_cfg() и так проблему пока решил.

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


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Metal Messiah
сообщение 2.9.2023, 0:31
Сообщение #6


Иконка группы

Стаж: 13 лет

Сообщений: 2458
Благодарностей: 1482
Полезность: 772

HostGame.cf
Опять попал на те же грабли с другим билдом (использовал оригинальный а не модифицированный мною же в июле код), и обнаружил интереснейшую вещь.
Если стоит admin_sql.amxx проблема наблюдается и стата не может подключиться к базе.
Если fresh bans + admin loader то проблемы вроде бы нет. Если admin.sql то ее точно нет.

А учитывая расколбас
Цитата
[csstatsx_sql.amxx] SQL connection failed
[csstatsx_sql.amxx] [ 2002 ] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

на директивы типа #if AMXX_VERSION_NUM < 183 вообще нельзя полагаться... к счастью большинство плагинов которые я использую этого в коде не имеют.

Это еще не все приколы связанные с отвалами одного из плагинов в случае если несколько разных плагинов используют базы данных (и разные подключения), с остальными еще разбираюсь.


Полезные публикации - ссылки у меня в профиле. Ссылка на плагин против спама на сервере StopServerSpam там же.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: