PDA

Просмотр полной версии : [Вопрос] timerfix - багнутый ?



Pro_Coder
22.11.2020, 06:04
Здравствуйте, форумчане!

Решил я использовать https://github.com/udan11/samp-plugin-timerfix

Но наткнулся на баг
1. Почему-то не удаляются таймеры, ну либо не успевают удалиться. Что я сделал? Профлудил в чат, и мне в ответ таймер нафлудил, хотя так не должно, ибо перед тем как отправляю сообщение, таймер удаляется. На стандартной таймере нет такого бага
2. Баг это непонятные иды таймеров, почему большими размерами суммируются, нежели стандартного таймера, результат теста снизу


1.

if (test_TimerID[playerid] != -1) {
#if defined KillPlayerTimer
KillPlayerTimer(test_TimerID[playerid]);
#else
KillTimer(test_TimerID[playerid]);
#endif
}
#if defined SetPlayerTimerEx_
test_TimerID[playerid] = SetPlayerTimerEx_(playerid, "@__OnPlayerTimerText", 0, 5000, 1, "i", playerid);
#else
test_TimerID[playerid] = SetTimerEx("@__OnPlayerTimerText", 5000, false, "i", playerid);
#endif
printf("%i", test_TimerID[playerid]);


@__OnPlayerTimerText(playerid);
@__OnPlayerTimerText(playerid)
{
SendClientMessage(playerid, -1, "Тест");
return 1;
}


2.

/* // Ид таймера фикса
57
60
66
71
95
99
102
106
110
115
*/


/* // Ид таймера стандартного
5
6
8
10
12
14
16
18
20
*/

UPD: Но заметил одно, что нативная функция этого плагина KillPlayerTimers(playerid); работает, но не использовать же мне ее, она для дисконнекта

Kovshevoy
22.11.2020, 11:21
Releases · ziggi/samp-plugin-timerfix · GitHub (https://github.com/ziggi/samp-plugin-timerfix/releases)

Pro_Coder
22.11.2020, 13:22
Releases · ziggi/samp-plugin-timerfix · GitHub (https://github.com/ziggi/samp-plugin-timerfix/releases)

Таймеры все равно не удаляются

speeyx
22.11.2020, 13:39
А пробовали использовать SetPlayerTimerEx?

UPD: Я склонен предполагать, что всё дело в задержке вызова.

Pro_Coder
22.11.2020, 13:58
А пробовали использовать SetPlayerTimerEx?

UPD: Я склонен предполагать, что всё дело в задержке вызова.

Только что проверил, тоже самое. KillTimer как-то криво удаляет

speeyx
22.11.2020, 14:23
Таймеры все равно не удаляются

Протестировал у себя — удаляются (протестировал с инклудом timerfix v1.8 от ziggi).

Pro_Coder
22.11.2020, 14:34
Протестировал у себя — удаляются (протестировал с инклудом timerfix v1.8 от ziggi).

Щас в чистом моде проверю

- - - Добавлено - - -

Да в чистом моде все норм, на видать с каким-то плагином или инклудом конфликтует, как решу проблему дам знать

Pro_Coder
22.11.2020, 15:08
Почему-то он даже в таком варианте конфликтует

Отключаю fixes и nex-ac , баг пропадет


//#include "../include/fixes.inc"
#if !defined DEBUG
#define DEBUG
#endif
#include "../include/nex-ac_ru.lang"
#include "../include/nex-ac.inc"
#include "../include/timerfix.inc"

Есть у кого-то варианты, как они взаимосвязаны с нативами плагина?


UPD: А ziggi куда пропал, он посещает форум?

Pro_Coder
22.11.2020, 22:34
UPD: Отключая даже эти инклуды, что выше описал, баг остается в моем моде. Мне стало интересно как он работает и что препятствует ему

Pa4enka
23.11.2020, 00:21
if (test_TimerID[playerid]) {
#if defined KillPlayerTimer
KillPlayerTimer(test_TimerID[playerid]);
#else
KillTimer(test_TimerID[playerid]);
#endif
test_TimerID[playerid] = -1;
}
#if defined SetPlayerTimerEx_
test_TimerID[playerid] = SetPlayerTimerEx_(playerid, "@__OnPlayerTimerText", 0, 5000, 1, "i", playerid);
#else
test_TimerID[playerid] = SetTimerEx("@__OnPlayerTimerText", 5000, false, "i", playerid);
#endif
printf("%i", test_TimerID[playerid]);

Pro_Coder
23.11.2020, 02:09
Это не поможет, ибо я выше указал что на стандартном все норм. Но я все же проверил, не помогает

Всем спасибо кто откликнулся, пока отказался от данного плагина. Надеюсь зигги прочитает эту тему, и даст внятный ответ, мб фикс даже

Pa4enka
23.11.2020, 04:37
Попробуй плагин от KashCarry.

Pro_Coder
23.11.2020, 11:38
Попробуй плагин от KashCarry.

Плохие отзывы о этом плагине

Pa4enka
23.11.2020, 22:02
Плохие отзывы о этом плагине

Судя по темам на официальном форуме, именно KashCarry имеет наименьшую погрешность и более стабильный. Поэтому, я бы тебе настоятельно советовал обратить на него внимания, хотя бы, ради теста.

Kovshevoy
24.11.2020, 17:06
Судя по темам на официальном форуме, именно KashCarry имеет наименьшую погрешность и более стабильный. Поэтому, я бы тебе настоятельно советовал обратить на него внимания, хотя бы, ради теста.
Много кто из опытных юзеров говорил, что у него плагин странно работает
Я и сам замечал странные штуки связанные с плагином, но не в коем случае не говорю, что он плохой
Просто юзаю форк пингвина, который обновляется до сих пор, он получше будет (имхо)

Pa4enka
25.11.2020, 02:51
Много кто из опытных юзеров говорил, что у него плагин странно работает
Я и сам замечал странные штуки связанные с плагином, но не в коем случае не говорю, что он плохой
Просто юзаю форк пингвина, который обновляется до сих пор, он получше будет (имхо)

Да дело даже не в стабильности плагина, а в том, что автору нужно перебирать разные варианты, дабы решить проблему. Уж не царское это дело не проверять даже самую глупою теорию. Да и мне почему то кажется, что проблема кроется не в плагинах, а в моде автора. Но, вроде бы, топикстартер утверждает обратное.

Pro_Coder
25.11.2020, 05:29
Нашел время проверил от KashCarry, все норм, бага такого нет

Ребят, если хотите помочь в тестах, в начале теме есть примеры и какие инклуды использовать, чтобы воспроизвести баг

speeyx
18.01.2021, 16:48
TimerFix от ziggi крашит сервер при онлайне от 5 человек. Причина: ежесекундные таймеры.

Nexius_Tailer
19.01.2021, 03:36
TimerFix от ziggi крашит сервер при онлайне от 5 человек. Причина: ежесекундные таймеры.
Логи бы, да какую-то более конкретную инфу/минимальный пример для воспроизведения проблемы.

speeyx
20.01.2021, 12:55
Логи бы, да какую-то более конкретную инфу/минимальный пример для воспроизведения проблемы.


SetTimerEx(playerid, !#__test, (1_000), false, !#i, playerid); // OnPlayerConnect

@__test(playerid);
@__test(playerid) {

// no connected return

return SetTimerEx(playerid, !#__test, (1_000), false, !#i, playerid);
}


К сожалению, логи уже отсутствуют. По памяти помню, что просто резкий server shut down и лист опкодов. После отключения плагина сервер падать перестал. Посторонних плагинов нет, набор обычный (mysql, streamer ...) – без чего-то нестандартного, что может конфликтовать.

DeimoS
22.01.2021, 16:57
SetTimerEx(playerid, !#__test, (1_000), false, !#i, playerid); // OnPlayerConnect

@__test(playerid);
@__test(playerid) {

// no connected return

return SetTimerEx(playerid, !#__test, (1_000), false, !#i, playerid);
}


К сожалению, логи уже отсутствуют. По памяти помню, что просто резкий server shut down и лист опкодов. После отключения плагина сервер падать перестал. Посторонних плагинов нет, набор обычный (mysql, streamer ...) – без чего-то нестандартного, что может конфликтовать.

Предоставленный тобой код работать не будет

speeyx
26.01.2021, 21:07
Предоставленный тобой код работать не будет

@ забыл поставить. Но суть проблемы не меняется.

DeimoS
28.01.2021, 07:46
@ забыл поставить. Но суть проблемы не меняется.

Там не только в этом проблема)
В любом случае, тебе, как минимум, стоит уточнить какой из плагинов timerfix ты используешь, ибо их есть несколько. Есть плагин от KashCherry, у которого лично мной наблюдались какие-то проблемы (но не вспомню какие именно), а так же есть плагин от udan11 (который сейчас, вроде, Ziggi обновляет), за которым никаких проблем не было замечено (уже кучу раз подключал его для проектов, которые курирую). Если у тебя плагин от udan11/Ziggi и он обновлён до последней версии, то я бы советовал искать проблему на своей стороне, даже с учётом того, что без плагина крашей нет. Ибо может оказаться так, что краш с плагином - это не первопричина, а следствие какой-то другой проблемы.

speeyx
09.03.2021, 19:55
Там не только в этом проблема)
В любом случае, тебе, как минимум, стоит уточнить какой из плагинов timerfix ты используешь, ибо их есть несколько. Есть плагин от KashCherry, у которого лично мной наблюдались какие-то проблемы (но не вспомню какие именно), а так же есть плагин от udan11 (который сейчас, вроде, Ziggi обновляет), за которым никаких проблем не было замечено (уже кучу раз подключал его для проектов, которые курирую). Если у тебя плагин от udan11/Ziggi и он обновлён до последней версии, то я бы советовал искать проблему на своей стороне, даже с учётом того, что без плагина крашей нет. Ибо может оказаться так, что краш с плагином - это не первопричина, а следствие какой-то другой проблемы.

От ziggi (я выше отвечал в теме, но ладно). Сейчас уточнил на пустом моде – краш.
Пример кода:


public OnGameModeInit() {

SetTimerEx(!#@__test, (1_000), false, #i, 1);

return 1;
}

@__test(i);
@__test(i) {

i++;

SetTimerEx(!#@__test, (1_000), false, #i, i);

return 1;
}

execution
09.03.2021, 23:45
От ziggi (я выше отвечал в теме, но ладно). Сейчас уточнил на пустом моде – краш.
Пример кода:


public OnGameModeInit() {

SetTimerEx(!#@__test, (1_000), false, #i, 1);

return 1;
}

@__test(i);
@__test(i) {

i++;

SetTimerEx(!#@__test, (1_000), false, #i, i);

return 1;
}

А теперь попробуй без упаковки строк

speeyx
10.03.2021, 11:54
Нашёл ещё краш, если сначала вызвать SetTimer на функцию, а потом вызвать SetTimerEx на эту же функцию.


@__test(i);
@__test(i) {

i++;

SetTimerEx(#@__test, (1_000), false, #i, i);

return 1;
}

public OnGameModeInit() {

SetTimer(#@__test, (1_000), false);

return 1;
}


UPD: Просто написал про краш. Знаю, что просто нужно вызвать с нулевым параметром.