Остановка таймера бомбы

Сообщения
241
Реакции
224
Помог
2 раз(а)
Приветствую!
Можно ли поставить таймер бомбы на паузу после ее установки, а затем снова активировать его?
Необходимо, чтобы отсчет останавливался на время проведения голосования за карту (в середине раунда, когда игроки заморожены)
Изменение mp_c4timer действует только до установки бомбы.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
pheel, может перевести голосование на начало раунда. Там и фризтайм. Так что не должно мешать ничему
 
Сообщения
241
Реакции
224
Помог
2 раз(а)
fantom, это, конечно, очевидно)) Но хотелось бы голосование оставить спонтанным после окончания timelimit. Возможно cs_set_c4_explode_time(index, Float:value) подойдет, но 1) придется юзать модуль cstrike только ради этого :pardon:, 2) непонятно, что за index у бомбы, искать по entity, чтобы его узнать? Огород какой то, ради такой мелочи.
М.б. есть более удобные решения.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
pheel, Даже не наю. на ум пока что приходит только одно. Менять время взрыва бамбы на более длительное учитива голосование.
И тут два способа РеАПИ и без. Индекс бомбы можна получить перебрав все ентити или наверно есть мембер в gamerules или хукать установку бомбы. Но все равно это выглядит как огромный костыль честно говоря
 
Сообщения
432
Реакции
410
Помог
14 раз(а)
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
SetThink(iC4, NULL_STRING);
Ну это навсегда остановит.

А так: set_entvar(iC4, var_nextthink, get_gametime() + 9999.0);
или просто 0.0, хз, я не скриптер.
Но может поломаться, думаю ещё оффсеты надо ставить, всё три некст фрек, бип, блинк.
 
Последнее редактирование:
Сообщения
241
Реакции
224
Помог
2 раз(а)
Сделал так. Работает в связке с Map Manager [Modular] by Mistrick
Скриптер из меня, как обычно... :good2:
Код:
#include amxmodx
#include map_manager
#include reapi

new pcvar_c4timer, g_c4timer, ent_c4, count;
new bool:is_planted = false, bool:is_extend = false, bool:is_defusing = false;

public plugin_init()
{
    register_plugin("C4 Timer", "0.1", "phe");
    
    RegisterHookChain(RG_RoundEnd, "RoundEndPost", 1);
    RegisterHookChain(RG_PlantBomb, "PlantBombPost", 1);
    
    RegisterHookChain(RG_CGrenade_DefuseBombStart, "DefuseBombStart", 1);
    
    pcvar_c4timer = get_cvar_pointer("mp_c4timer");
}

public DefuseBombStart()
{
    is_defusing = true;
}

public RoundEndPost()
{
    g_c4timer = -1;
    count = 0;
    remove_task(9991);
    
    is_planted = false;
}

public PlantBombPost()
{
    is_planted = true;
    g_c4timer = get_pcvar_num(pcvar_c4timer);
    ent_c4 = rg_find_ent_by_class(ent_c4, "grenade");
    
    C4TimerCount();
    set_task(1.0, "C4TimerCount", 9991, .flags="b");
}

public C4TimerCount()
{   
    if(!is_planted)
    {
        remove_task(9991);
        return;
    }
    
    if(is_vote_started() && !is_defusing)
    {
        ++count;
        
        set_dhudmessage(100, 100, 100,  -1.0, 0.65, 0, 1.0, 1.0, 0.01, 0.01);
        show_dhudmessage(0,"Бомба взорвётся через: [PAUSED]");
        
        return;
    }
    
    if(is_vote_finished())
    {
        if(!is_extend)
        {
            new Float:time = get_member(ent_c4, m_Grenade_flC4Blow);
            set_member(ent_c4, m_Grenade_flC4Blow, time + count);
        }
        is_extend = true;
    }
    
    if(g_c4timer >= 0)
    {
        switch(g_c4timer)
        {
            case 0..8:     set_dhudmessage(255, 0, 0,  -1.0, 0.65, 0, 1.0, 1.0, 0.01, 0.01);
            case 9..14:     set_dhudmessage(255, 100, 0,  -1.0, 0.65, 0, 1.0, 1.0, 0.01, 0.01);
            case 15..59: set_dhudmessage(0, 255, 255,  -1.0, 0.65, 0, 1.0, 1.0, 0.01, 0.01);
        }

        show_dhudmessage(0, "Бомба взорвётся через: [%d]", --g_c4timer);
    }
}
 
Сообщения
241
Реакции
224
Помог
2 раз(а)
fantom, спасибо, буду знать. Поправлю на if
 

d3m37r4

111111
Сообщения
1,454
Реакции
1,194
Помог
10 раз(а)
pheel, для проверки "обезвреживается ли бомба", можно использовать мембер m_bIsDefusing. Значение квара таймера c4 можно забиндить на переменную глобальную, чтобы каждый раз в RG_PlantBomb его не получать (я про случай, когда игрок постоянно начинает/отменяет установку бомбы).
 
Последнее редактирование:
Сообщения
241
Реакции
224
Помог
2 раз(а)
d3m37r4, какая то выгода будет от m_bIsDefusing перед RG_CGrenade_DefuseBombStart? В моем случае я один раз проверил, начинали ли дефьюзить бомбу и либо запускаю таймер, либо оставляю на паузе. Если делать с m_bIsDefusing , то придется каждую секунду проверять условие, пока повторяется set_task.
А g_c4timer - мне же все равно надо получать каждый раз значение квара, т.к. оно в конце раунда в -1 устанавливается.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
Что мешает показывать таймер как (m_flC4Blow - get_gametime()) ?
Даже с реапи умудряетесь костыли пилить.
18 Янв 2019
Какие-то таски юзаете. Синк на гранату с проверкой m_bIsC4 не катит?
18 Янв 2019
ent_c4 = rg_find_ent_by_class(ent_c4, "grenade");
Зачем цикл по всем энтит, если она идет возвращемым аргументом?
18 Янв 2019
Тем более в посте она уже будет известна, так что можно сделать
new iEntity = GetHookChainReturn(ATYPE_INTEGER);
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
fl0wer, вопрос, а как после кастомного think-а вернуть родной c4 think?
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
bionext, никак (в реапи такого нет).
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
fl0wer, Вот и я об этом :smile3:
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
bionext, не понял к чему был вопрос.
 
Сообщения
1,701
Реакции
1,512
Помог
26 раз(а)
bionext, имелось ввиду Ham_Think, а не кастомный.
 
Сообщения
273
Реакции
424
Помог
5 раз(а)
Сообщения
241
Реакции
224
Помог
2 раз(а)
Что мешает показывать таймер как (m_flC4Blow - get_gametime()) ?
Даже с реапи умудряетесь костыли пилить.
18 Янв 2019
Какие-то таски юзаете. Синк на гранату с проверкой m_bIsC4 не катит?
18 Янв 2019
ent_c4 = rg_find_ent_by_class(ent_c4, "grenade");
Зачем цикл по всем энтит, если она идет возвращемым аргументом?
18 Янв 2019
Тем более в посте она уже будет известна, так что можно сделать
new iEntity = GetHookChainReturn(ATYPE_INTEGER);
1) Как вариант, буду пробовать на след неделе уже.
2) Никогда не юзал синки, попробую разобраться.
3) Спасибо, GetHookChainReturn(ATYPE_INTEGER) - то, чего не хватало.

Я же сразу написал, что навыков мало)) Будем переделывать.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу