• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Система Таймера

Dmitriy Makarov

Умник
Привет. Столкнулся со странной проблемой, которая, вроде бы должна работать нормально.
Как было до:
C++:
new MuteTimer[MAX_PLAYERS]; // global variable

// stock LoadDataFromDataBase(playerid) - (Это сток, который берёт данные из БД)
if(pInfo[playerid][pMute] != 0) MuteTimer[playerid] = SetTimerEx("MuteSecondTimer", 1000, true, "d", playerid);



// timer
forward MuteSecondTimer(playerid);
public MuteSecondTimer(playerid)
{
    if(--pInfo[playerid][pMute] == 0)
    {
        KillTimer(MuteTimer[playerid]);
        new query[70];
        format(query, sizeof(query), "UPDATE users SET Mute = '%d' WHERE id= '%d' LIMIT 1", pInfo[playerid][pMute], pInfo[playerid][pID]);
        mysql_tquery(dbHandle, query);
        SCM(playerid, COLOR_LIMEGREEN, !"Доступ в чат разблокирован");
    }
    return true;
}

// public OnPlayerDisconnect
KillTimer(MuteTimer[playerid]);
Это обычный таймер, который я создал, когда делал команду /mute. Мне посоветовали создать 1 общий таймер для подобных вещей: Мут/КПЗ/Время каптов и т.д.
Это теперь общий таймер. Единственное, название я забываю всегда менять.

Окей. Решил тогда сделать команду /jail.
Сделал. Но таймер нагнулся и теперь не работает ни /jail, ни /mute.
P.S: Не работает в смысле мне пишет, что у меня уже есть мут/кпз.

Что теперь стало:
C++:
// global variable
new MuteTimer[MAX_PLAYERS];
new JailTimer[MAX_PLAYERS];


// OnGameModeInit()
SetTimer("MuteSecondTimer", 1000, 1);


// Timer
forward MuteSecondTimer(playerid);
public MuteSecondTimer(playerid)
{
    if(--pInfo[playerid][pMute] == 0)
    {
        KillTimer(MuteTimer[playerid]);
        new query[70];
        format(query, sizeof(query), "UPDATE users SET Mute = '%d' WHERE id= '%d' LIMIT 1", pInfo[playerid][pMute], pInfo[playerid][pID]);
        mysql_tquery(dbHandle, query);
        SCM(playerid, COLOR_LIMEGREEN, !"Доступ в чат разблокирован");
    }
    if(--pInfo[playerid][pJail] == 0)
    {
        KillTimer(JailTimer[playerid]);
        new query[70];
        format(query, sizeof(query), "UPDATE users SET JailTimer = '%d' WHERE id= '%d' LIMIT 1", pInfo[playerid][pJail], pInfo[playerid][pID]);
        mysql_tquery(dbHandle, query);
        SCM(playerid, COLOR_LIMEGREEN, !"Вы отсидели свой срок в тюрьме и можете идти на свободу");
    }
    return true;
}

// OnplayerDisconnect
KillTimer(MuteTimer[playerid]);
KillTimer(JailTimer[playerid]);

// Проверки в командах /jail, /mute
if(pInfo[params[0]][pMute] != 0) return SCM(playerid, COLOR_GREY, "У этого игрока уже заблокирован чат"); // Mute
if(pInfo[params[0]][pJail] != 0) return SCM(playerid, COLOR_GREY, "Этот игрок уже находится в тюрьме"); // Jail
Прикол в том, что я команду /jail сделал точно так же, как и команду /mute. Т.е, я в /jail не добавлял того, чего нету в /mute, ибо команды практически одинаковые в плане времени.
Может я где-то что-то упустил?


P.S: Таймер до добавления команды /jail работал нормально.
 
Сверху Снизу