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

Почему сбивается таймер?

Статус
В этой теме нельзя размещать новые ответы.

xAntiKillerx

Изучающий
Пользователь
Регистрация
13 Янв 2012
Сообщения
128
Лучшие ответы
0
Репутация
7
Всем привет.
В общем, проблема следующего характера. Есть таймер с текстом, который вылезает каждые 4 секунды. Вся эта "система" предназначена для имитации диалога игрока с актёрами, выдающими квесты.

Когда все выглядело примерно вот так, то работало без нареканий:
Код:
            if(kv3ac[playerid] == 2)
            {
                SendClientMessage(playerid, -1, "{F9AE4E}Владислав: {FFFFFF}О-о-о, а вот и мой приятель-кладоискатель, хе-хе. Ну что, как там?");
                TogglePlayerControllable(playerid, 0);
                QuestDialogNumber[playerid] = 6;
                questdialogtimer[playerid] = SetTimerEx("ActorQuestMessages", 4000, 1, "d", playerid);
            }
Код:
    switch(QuestDialogNumber[playerid])
    {
         case 6:
        {
            message_questid{playerid} ++;
            switch(message_questid{playerid})
            {
                case 1: {
                    new string[128];
                    format(string, sizeof(string), "{FFFFFF}%s: Извини, но ничего ценного там не было. Видимо кто-то успел раньше меня.", player_info_pName[playerid]);
                    SendClientMessage(playerid, -1, string);
                    }
                case 2: return SendClientMessage(playerid, -1, "{F9AE4E}Владислав: {FFFFFF}Мда уж... Ожидаемо, блин. Ну, ладно. У нас любой труд в почёте. Держи, заслужил!");
                case 3: {
                    SendClientMessage(playerid, -1, "{F9AE4E}Владислав: {FFFFFF}И да, спасибо! Приходи чуть позже, может ещё дельце будет.");
                    SCM(playerid, 0x00FFA2FF, "Вы получили: {00FFD5}+ 10 ЕХР, + 20 копеек.");
                    GivePlayerMoney(playerid, 20);
                    player_info_pExp[playerid] +=10;
                    player_info_pMoney[playerid] +=20;
                    player_info_pCooldown[playerid] = 12;
                    kv3ac[playerid] = 0;
                    KillTimer(questdialogtimer[playerid]);
                    return 1;
                }
                default: return 1;
            }
        }
        }
Однако когда у некоторых актёров стало больше "фраз" в case, то таймер начал бесоёбить -- 50/50 вероятность того, что при нахождении одного игрока на сервере всё сработает правильно, а как заходит ещё хотя бы 2-3 человека, то после фразы "Ого, ты так быстро!" (код будет ниже) игрока фризит и таймер не запускается. Бывали случаи, что при определённых обстоятельствах (невыясненных), спустя 4-6 минут таймер всё-таки запускался, а иногда мог также и зациклиться.
Код:
        else if(player_info_pQuestInProcess[playerid] == 1 && player_info_pStep[playerid] == 0)
        {
               SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}Ого, как ты быстро. Неужели уже все?");
             TogglePlayerControllable(playerid, 0);
             QuestDialogNumber[playerid] = 11;
             questdialogtimer[playerid] = SetTimerEx("ActorQuestMessages", 4000, 1, "d", playerid);
        }
Код:
        case 11:
        {
            message_questid{playerid} ++;
            switch(message_questid{playerid})
            {
                case 1: return SendClientMessage(playerid, -1, "> {CCFF33}По интонации и выражению лица Лизы было довольно сложно определить: она шутит или же действительно такая наивная?");
                case 2: {
                    new string[128];
                    format(string, sizeof(string), "{FFFFFF}%s: Я ищу кого-нибудь из кружка кибернетиков, кто смог бы подписать обходной лист, не знаешь, где они?", player_info_pName[playerid]);
                    SendClientMessage(playerid, -1, string);
                }
                case 3: return SendClientMessage(playerid, -1, "> {CCFF33}Лиза хитро сощурилась и заулыбалась. Что-то подсказывало, что добра ждать не стоит.");
                case 4: return SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}Знаю, но тебе не скажу...");
                case 5: return SendClientMessage(playerid, -1, "> {CCFF33}— девушка выдержала драматическую паузу и, нарочно переигрывая, будто играет роль на детском утреннике, продолжила, —");
                case 6: return SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}...за просто так! А вот если бы я могла получить о тебя что-то взамен... ");
                case 7: return SendClientMessage(playerid, -1, "{F9AE4E}Лиза: {FFFFFF}Знаю! Люблю сладкое, хочу сладкое! Принеси мне пару булочек из столовой, и тогда я тебе подскажу.");
                case 8: return SendClientMessage(playerid, -1, "> {CCFF33}Пионерка широко заулыбалась и уставилась в кипу обходных листов, давая понять, что разговор закончен.");
                case 9: {
                    SendClientMessage(playerid, -1, "> {CCFF33}~ Ладно, будем играть по их правилам. Надо найти столовую и забрать эти булочки. ~");
                    SetPVarInt(playerid, "bulkebi", 1);
                    KillTimer(questdialogtimer[playerid]);
                    TogglePlayerControllable(playerid, 1);
                    return 1;
                }
                default: return 1;
            }
        }
Я также в курсе насчёт того, что таймеры не переваривают тексты, но с этим ли сейчас проблема?
Короче говоря, в чём может быть проблема и как её решить/обойти?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу