KILL > 1

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

Анатолий

Пользователь
Регистрация
8 Июн 2017
Сообщения
621
Симпатии
217
Пол
Мужской
VKcom
e1337ace
#1
Как правильно реализовать такое?
DoubleKill - Двойное убийство — Даётся за убийство 2 врагов за 1.5 секунды.
TripleKill - Тройное убийство — Даётся за убийство трех врагов за 2,5 секунды.
QuadKill - Четверное убийство — Даётся за убийство 4 врагов за 4.5 секунды.
DoubleHeadshot - Двойное убийство в голову — Даётся за убийство 2 человек в голову за 1.5 секунды.
Это из игры Contract Wars

Пример с DoubleKill но как я понял он не правильный. инфы в гугле по такому я больше не нашёл да и плагинов подобных тоже
Код:
new Float:fGameTime = get_gametime()
if (g_fLastKillTimeStamp[Killer] > fGameTime)
{
    // Code...
}
g_fLastKillTimeStamp[Killer] = fGameTime + 0.1
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
499
Симпатии
303
#3
мультикиллы идут в одно тоже время (gametime будет ровным) так что сравнение lastkill с gametime бесполезный. самый простой способ это временный счетчик
 

Vaqtincha

Разработчик
Регистрация
28 Янв 2018
Сообщения
499
Симпатии
303
#5
Анатолий,
C++:
new Float:g_flLastKill[MAX_CLIENTS + 1]
new g_iCountKill[MAX_CLIENTS + 1]

public CBasePlayer_Killed(const pPlayer, const pevAttacker, const iGib)
{
    if (!is_user_connected(pevAttacker))
        return

    new Float:flTime = get_gametime()

    static const szText[][] = { "", "DOUBLE", "TRIPLE", "QUAD" }

    if (g_iCountKill[pevAttacker] >= 3 || (flTime - g_flLastKill[pevAttacker]) > 4.5) // обнулить после "QUAD" или 4.5 сек
    {
        g_iCountKill[pevAttacker] = 0
    }
    else
    {
        g_iCountKill[pevAttacker]++
    }

    if (g_iCountKill[pevAttacker] >= 1)
    {
        client_print(pevAttacker, print_chat, "%s kill", szText[g_iCountKill[pevAttacker]])   
    }

    g_flLastKill[pevAttacker] = flTime // время посл. килла
}
8 Сен 2019
new Float:g_flLastKill[MAX_CLIENTS + 1] new g_iCountKill[MAX_CLIENTS + 1]
я думаю можно и статик внутри функции вместо глобала
 

Анатолий

Пользователь
Регистрация
8 Июн 2017
Сообщения
621
Симпатии
217
Пол
Мужской
VKcom
e1337ace
#6
Анатолий,
C++:
new Float:g_flLastKill[MAX_CLIENTS + 1]
new g_iCountKill[MAX_CLIENTS + 1]

public CBasePlayer_Killed(const pPlayer, const pevAttacker, const iGib)
{
    if (!is_user_connected(pevAttacker))
        return

    new Float:flTime = get_gametime()

    static const szText[][] = { "", "DOUBLE", "TRIPLE", "QUAD" }

    if (g_iCountKill[pevAttacker] >= 3 || (flTime - g_flLastKill[pevAttacker]) > 4.5) // обнулить после "QUAD" или 4.5 сек
    {
        g_iCountKill[pevAttacker] = 0
    }
    else
    {
        g_iCountKill[pevAttacker]++
    }

    if (g_iCountKill[pevAttacker] >= 1)
    {
        client_print(pevAttacker, print_chat, "%s kill", szText[g_iCountKill[pevAttacker]])  
    }

    g_flLastKill[pevAttacker] = flTime // время посл. килла
}
8 Сен 2019

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