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

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

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

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

таймер не работает

Статус пользователя rus26
сообщение 20.8.2013, 17:24
Сообщение #1


Стаж: 12 лет

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

проблема такая, до началало игры таймер все ок работает, ну когда игра начинается таймер тупо проподает куда-то вот сам код паблика таймера.

Скрытый текст
Код
    public Timer(id)
{
    if(task_exists(41170))
        remove_task(41170)


    if(g_TimerStatus == 1 || g_TimerStatus == 2)
    {
        g_Time = 30
        set_task(1.0, "Timer_go", 41170, _, _, "b")
        return PLUGIN_HANDLED
    }

    if(thide == 1)
    {
        g_Time = 170
    }
    else
    {
        g_Time = 99
    }
      
        set_task(1.0, "Timer_go", 41170, _, _, "b")
    return PLUGIN_HANDLED
}}

а вот строка в играх добавлена
Код
Timer(i)

вот TIMER_GO

Скрытый текст
Код
public Timer_go()
{
    if(g_TimerStatus == 1)
    {
        g_Time -= 1
        set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
        show_dhudmessage(0, "Игра будет активирована через %d секунд", g_Time)
        if(g_Time == 0)
        {
            g_TimerStatus = 0
            remove_task(41170)
            set_task(0.1, "Timer")
        }
    }
    else if(g_TimerStatus == 2)
    {
        g_Time -= 1
        set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
        show_dhudmessage(0, "Бессмертие будет отключено через %d секунд", g_Time)
        new iPlayerP[32], iNumP
        get_players(iPlayerP, iNumP)

        for(new i; i < iNumP; i++)
        {
            set_user_godmode(iPlayerP[i], 1)
            if(g_Time == 0)
            {
                g_TimerStatus = 0
                remove_task(41170)
                set_task(0.1, "Timer")
                set_user_godmode(iPlayerP[i], 0)
            }
        }
    }
    else
    {
        g_Time--

        set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
        show_dhudmessage(0, "Игра закончится через: %d секунд", g_Time)
        if(info_viche == 1)
        {
            set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
            show_dhudmessage(0, "^n%L", LANG_PLAYER, "INFO_VICHE")    
        }

        if(g_Time == 0)
        {
            remove_task(41170)
            new iPlayer[32], iNum
            get_players(iPlayer, iNum)

            for(new i; i < iNum; i++)
            {
                if(get_user_team(iPlayer[i]) == 2)
                {
                    user_kill(iPlayer[i])
                }
            }
        }
    }
}


Отредактировал: rus26, - 20.8.2013, 17:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 20.8.2013, 17:31
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Код надо класть под спойлер. Из ваших кусков не складывается картина. Не хотите светить плагин целиком - приведите нужные в виде целостного плагина.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rus26
сообщение 20.8.2013, 17:46
Сообщение #3


Стаж: 12 лет

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

так я сам таймер скинул, игры то зачем нужны сами?тут вроде я все паблики таймеры выложил остальное к играм уже
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
eckoecko
сообщение 20.8.2013, 18:04
Сообщение #4
Стаж: 14 лет

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

Вы нормально опишите проблему. Мы не экстрасенсы чтобы вам предсказывать. До какой началы игры? Что за таймер? Что он активирует?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 20.8.2013, 18:09
Сообщение #5
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ещё раз.
Цитата(Safety1st @ 20.8.2013, 19:31) *
Из ваших кусков не складывается картина.

'Игры' нам никакие не нужны.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rus26
сообщение 20.8.2013, 18:22
Сообщение #6


Стаж: 12 лет

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

Цитата(eckoecko @ 20.8.2013, 20:04) *
Вы нормально опишите проблему. Мы не экстрасенсы чтобы вам предсказывать. До какой началы игры? Что за таймер? Что он активирует?

когда в голосования выпадает из 7 список игр, народ голосует и выбирается игра за какую больше всего проголосовали. Потом пишет сверху игра будет активна через столько то секунд. И как это проходит то таймер пропадает и игра так идет бесконечно.

Цитата(Safety1st @ 20.8.2013, 20:09) *
Ещё раз.

'Игры' нам никакие не нужны.

какие вам еще code не хватает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 20.8.2013, 18:43
Сообщение #7
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(rus26 @ 20.8.2013, 20:22) *
какие вам еще code не хватает?

Для начала - блока plugin_init(). Вы поймите, надо, чтобы из кода получился полноценный плагин, пусть даже конечных действий типа 'выбирается игра' в нём не будет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rus26
сообщение 20.8.2013, 18:55
Сообщение #8


Стаж: 12 лет

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

Цитата(Safety1st @ 20.8.2013, 20:43) *
Для начала - блока plugin_init(). Вы поймите, надо, чтобы из кода получился полноценный плагин, пусть даже конечных действий типа 'выбирается игра' в нём не будет.

вот
Код
public plugin_init()
{
    RegisterHam(Ham_Touch, "weapon_hegrenade", "player_touchweapon")
    RegisterHam(Ham_Touch, "weaponbox", "player_touchweapon")
    RegisterHam(Ham_Touch, "armoury_entity", "player_touchweapon")
    register_concmd("block_weapons", "blockweapons")
    register_concmd("unblock_weapons", "unblockweapons")
    WeaponsLocked = false
    register_logevent("round_end", 2, "1=Round_End")

    register_plugin("admingames", "0.2", "26_RUSSS / TweIk")

    RegisterHam( Ham_Killed, "player", "Ham_Player_Killed", 1 )
    register_clcmd("jbgame", "gms11");
    RegisterHam(Ham_Spawn, "player", "event_PlayerSpawn_post",1)
    register_dictionary("jb_mod.txt")
    
    maxplayers = get_maxplayers()
    msgScreenFade = get_user_msgid("ScreenFade")
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 20.8.2013, 19:03
Сообщение #9
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

rus26,
после какого периода пропадает??
а именно, на чем?? например

показывает
Код
Игра будет активирована через 2 секунд

и потом пропадает...

в public Timer(id)
ты ловишь id, хотя потом ты его не передаешь....
убери отловку....

также в конце кода

Код
   g_Time = 99
    }
      
        set_task(1.0, "Timer_go", 41170, _, _, "b")
    return PLUGIN_HANDLED
}}


почему у тебя }} ???

попробуй вместо set_task(0.1, "Timer") писать просто Timer()
и делай не большой set_task а меньше, т.е.

Код
else
    {
        g_Time--

        set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
        show_dhudmessage(0, "Игра закончится через: %d секунд", g_Time)
        if(info_viche == 1)
        {
            set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
            show_dhudmessage(0, "^n%L", LANG_PLAYER, "INFO_VICHE")    
        }

        if(g_Time == 0)
        {
            new iPlayer[32], iNum
            get_players(iPlayer, iNum)

            for(new i; i < iNum; i++)
            {
                if(get_user_team(iPlayer[i]) == 2)
                    user_kill(iPlayer[i])
            }
           return PLUGIN_HANDLED
        }
         set_task(1.0, "Timer_go")
    }


также set_dhudmessage() в конце добавь ещё например -1 или 1, 2, 3 или 4 (чтоб у всех одинаковый был)

попробуй.... вероятней всего где-то не стычки...

например у меня было что я в квар вношу текущею дату а мне вносит разницу в 40-120сек.
я исправил...
потом при выводе тот-же прикол был... тоже долго мучался..

Отредактировал: Orty_Hart, - 20.8.2013, 19:11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rus26
сообщение 21.8.2013, 4:22
Сообщение #10


Стаж: 12 лет

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

Цитата(Orty_Hart @ 20.8.2013, 21:03) *
rus26,
после какого периода пропадает??
а именно, на чем?? например

показывает
Код
Игра будет активирована через 2 секунд

и потом пропадает...

в public Timer(id)
ты ловишь id, хотя потом ты его не передаешь....
убери отловку....

также в конце кода

Код
   g_Time = 99
    }
      
        set_task(1.0, "Timer_go", 41170, _, _, "b")
    return PLUGIN_HANDLED
}}


почему у тебя }} ???

попробуй вместо set_task(0.1, "Timer") писать просто Timer()
и делай не большой set_task а меньше, т.е.

Код
else
    {
        g_Time--

        set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
        show_dhudmessage(0, "Игра закончится через: %d секунд", g_Time)
        if(info_viche == 1)
        {
            set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
            show_dhudmessage(0, "^n%L", LANG_PLAYER, "INFO_VICHE")    
        }

        if(g_Time == 0)
        {
            new iPlayer[32], iNum
            get_players(iPlayer, iNum)

            for(new i; i < iNum; i++)
            {
                if(get_user_team(iPlayer[i]) == 2)
                    user_kill(iPlayer[i])
            }
           return PLUGIN_HANDLED
        }
         set_task(1.0, "Timer_go")
    }


также set_dhudmessage() в конце добавь ещё например -1 или 1, 2, 3 или 4 (чтоб у всех одинаковый был)

попробуй.... вероятней всего где-то не стычки...

например у меня было что я в квар вношу текущею дату а мне вносит разницу в 40-120сек.
я исправил...
потом при выводе тот-же прикол был... тоже долго мучался..

так же прежде работает sad.gif, тут такая вот проблема таймер исчезает когда игрок соед.на сервер щас вот только увидел, пробовал проверку ставить вот
Скрытый текст
Код
public Timer(id)
{
    if(is_user_connected(id))
    {
    if(task_exists(41170))
        remove_task(41170)


    if(g_TimerStatus == 1 || g_TimerStatus == 2)
    {
        g_Time = 30
        set_task(1.0, "Timer_go", 41170, _, _, "b")
        return PLUGIN_HANDLED
    }

    if(thide == 1)
    {
        g_Time = 170
    }
    else
    {
        g_Time = 99
    }
}      
        set_task(1.0, "Timer_go", 41170, _, _, "b")
    return PLUGIN_HANDLED
}

все-ровно не помогает проподает. Может где-то не там ставлю проверку а в public Timer_go() не могу поставить проверку так как id символ пишет не найден
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 21.8.2013, 14:54
Сообщение #11
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

rus26,
ты не там проверку поставил is_user_connected(id)
эта проверка проверяет чтоб игрок был соединен с сервером

попробуй сделай так

Скрытый текст
Код
public Timer_go()
{
    g_Time -= 1
    set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2, -1)
    
    if(g_TimerStatus == 1)
    {
        show_dhudmessage(0, "Игра будет активирована через %d секунд", g_Time)
        if(g_Time == 0)
        {
            g_TimerStatus = 0
            remove_task(41170)
            Timer()
        }
    }
    else
    {
        new iPlayer[32], iNum
        get_players(iPlayer, iNum)
        
        if(g_TimerStatus == 2)
        {
            show_dhudmessage(0, "Бессмертие будет отключено через %d секунд", g_Time)
            
            for(new i; i < iNum; i++)
            {
                set_user_godmode(iPlayer[i], 1)
                if(g_Time == 0)
                    set_user_godmode(iPlayer[i], 0)
            }
            
            if(g_Time == 0)
            {
                g_TimerStatus = 0
                remove_task(41170)
                Timer()
            }
            
        }
        else
        {
            show_dhudmessage(0, "Игра закончится через: %d секунд", g_Time)
            
            if(info_viche == 1)
            {
                set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2, -1)  
                show_dhudmessage(0, "^n%L", LANG_PLAYER, "INFO_VICHE")    
            }

            if(g_Time == 0)
            {
                for(new i; i < iNum; i++)
                {
                    if(is_user_connected(iPlayer[i]) && get_user_team(iPlayer[i]) == 2)
                        user_kill(iPlayer[i])
                }
                
                remove_task(41170)
            }
        }
    }
    return PLUGIN_HANDLED
}


у тебя ошибки в коде

1. ГЛАВНАЯ ОШИБКА БАГА
Код
for(new i; i < iNumP; i++)
        {
            set_user_godmode(iPlayerP[i], 1)
            if(g_Time == 0)
            {
                g_TimerStatus = 0
                remove_task(41170)
                set_task(0.1, "Timer")
                set_user_godmode(iPlayerP[i], 0)
            }
        }


тут ты ВСЕМ игрокам говоришь чтоб выключить уже выключенный set_task с id 41170 и запускаешь для каждого игрока новый set_task
а теперь я скажу так, ты послал 1 раз, потом отменил и перезапустил task, потом послал его 10 раз (если на сервере 10 игроков) 20 - если 20 игроков, и тем самым ты мгновенно спустил свой g_TimerStatus на 0
там сработал скрипт.... но прикол в том, что после запуска функции Timer_go() ты закончил функцию Timer(id) и g_Time не дошел до 0
и так, в результате мы имеем: нет hud, игроки не здыхают и в этом твой вопрос

2. в set_dhudmessage в конце добавь -1 чтоб использовался новый канал
3.

Код
new iPlayer[32], iNum
get_players(iPlayer, iNum)


для них for можно делать 10000 раз
ненужно создавать по 30 раз новые массивы.

тестируй :)
P.S. - в моем коде могут быть ошибки при компиляции, исправь их сам)) там не трудно будет))

но как на меня, прощеб было сделать просто так:

Скрытый текст
Код
public Timer(id)
{
    if(task_exists(41170))
        remove_task(41170)
    
    g_Time = 30
    set_task(1.0, "Timer_go", 41170, _, _, "b")
    return PLUGIN_HANDLED
}

public Timer_go()
{
    g_Time -= 1
    set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2, -1)
    
    if(g_TimerStatus == 1)
    {
        show_dhudmessage(0, "Игра будет активирована через %d секунд", g_Time)
        if(g_Time == 0)
        {
            g_TimerStatus = 0
            g_Time = 30
        }
    }
    else
    {
        new iPlayer[32], iNum
        get_players(iPlayer, iNum)
        
        if(g_TimerStatus == 2)
        {
            show_dhudmessage(0, "Бессмертие будет отключено через %d секунд", g_Time)
            
            for(new i; i < iNum; i++)
            {
                set_user_godmode(iPlayer[i], 1)
                if(g_Time == 0)
                    set_user_godmode(iPlayer[i], 0)
            }
            
            if(g_Time == 0)
            {
                g_TimerStatus = 0
                g_Time = 90
            }
            
        }
        else
        {
            show_dhudmessage(0, "Игра закончится через: %d секунд", g_Time)
            
            if(info_viche == 1)
            {
                set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2, -1)  
                show_dhudmessage(0, "^n%L", LANG_PLAYER, "INFO_VICHE")    
            }

            if(g_Time == 0)
            {
                for(new i; i < iNum; i++)
                {
                    if(is_user_connected(iPlayer[i]) && get_user_team(iPlayer[i]) == 2)
                        user_kill(iPlayer[i])
                }
                
                remove_task(41170)
            }
        }
    }
    return PLUGIN_HANDLED
}


Отредактировал: Orty_Hart, - 21.8.2013, 15:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя rus26
сообщение 21.8.2013, 18:08
Сообщение #12


Стаж: 12 лет

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

в прицепи так сделал
Код
public Timer(id)
{
    if(task_exists(41170))
        remove_task(41170)
    
if(thide == 1)
    {
        g_Time = 170
    }
    else
    {
        g_Time = 99
    }

    g_Time = 30
    set_task(1.0, "Timer_go", 41170, _, _, "b")
    return PLUGIN_HANDLED
}

public Timer_go()
{
    g_Time -= 1
    set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)
    
    if(g_TimerStatus == 1)
    {
        show_dhudmessage(0, "Игра будет активирована через %d секунд", g_Time)
        if(g_Time == 0)
        {
            g_TimerStatus = 0
            g_Time = 30
        }
    }
    else
    {
        new iPlayer[32], iNum
        get_players(iPlayer, iNum)
        
        if(g_TimerStatus == 2)
        {
            show_dhudmessage(0, "Бессмертие будет отключено через %d секунд", g_Time)
            
            for(new i; i < iNum; i++)
            {
                set_user_godmode(iPlayer[i], 1)
                if(g_Time == 0)
                    set_user_godmode(iPlayer[i], 0)
            }
            
            if(g_Time == 0)
            {
                g_TimerStatus = 0
                g_Time = 90
            }
            
        }
        else
        {
            show_dhudmessage(0, "Игра закончится через: %d секунд", g_Time)
            
            if(info_viche == 1)
            {
                set_dhudmessage(255, 255, 255, 1.0, 0.1, 0, 1.0, 1.0, 0.1, 0.2)  
                show_dhudmessage(0, "^n%L", LANG_PLAYER, "INFO_VICHE")    
            }

            if(g_Time == 0)
            {
                for(new i; i < iNum; i++)
                {
                    if(is_user_connected(iPlayer[i]) && get_user_team(iPlayer[i]) == 2)
                        user_kill(iPlayer[i])
                }
                
                remove_task(41170)
            }
        }
    }
    return PLUGIN_HANDLED
}

проподает, а если нет
Код
if(thide == 1)
    {
        g_Time = 170
    }
    else
    {
        g_Time = 99
    }

то он пишет не найдена переменная thide.
И добавил -1 в hud - пишет варинг tag match.
и в этого голосования есть на половину пропадает, и сам таймер sad.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 22.8.2013, 14:44
Сообщение #13
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

rus26,
видишь этот кусок?

Код
if(g_Time == 0)
        {
            g_TimerStatus = 0
            g_Time = 30
        }


тут когда время истекает, ты наново ставишь время и меняешь g_TimerStatus = 0

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

и ложи большие коды под spoiler

Отредактировал: Orty_Hart, - 22.8.2013, 14:45
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: