> > > > >

Killstreak Announcer

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
544
Рейтинг
120
#1
Накидал по-быстрому под себя самый простой Killstreak Announcer. Хотелось бы услышать совета опытных скриптеров, что можно было бы улучшить.
Код:
#include <amxmodx>
#include <reapi>

#define VERSION "0.1"

new g_Kills[MAX_PLAYERS + 1];

public plugin_init()
{
    register_plugin("KillStreakAnnouncer", VERSION, "Nordic Warrior");

    RegisterHookChain(RG_CSGameRules_PlayerKilled, "PlayerKilled", 1);
}

public plugin_precache()
{
    precache_sound("sky/dominating.wav");
    precache_sound("sky/megakill.wav");
    precache_sound("sky/unstopable.wav");
    precache_sound("sky/rampage.wav");
    precache_sound("sky/mosnterkill.wav");
    precache_sound("sky/lidacriskill.wav");
    precache_sound("sky/wickedsick.wav");
    precache_sound("sky/holyshit.wav");
    precache_sound("sky/godlike.wav");
}

public PlayerKilled(victim, killer)
{
    g_Kills[killer]++;
    g_Kills[victim] = 0;

    set_hudmessage(80, 160, 255, 0.85, 0.45, 1, 0.0, 3.0, 0.1, 0.2, -1);

    switch(g_Kills[killer])
    {
        case 5:
        {
            rg_send_audio(0, "sky/dominating.wav");
            show_hudmessage(0, "%n делает комбо 5!", killer);
        }
        case 8:
        {
            rg_send_audio(0, "sky/megakill.wav")
            show_hudmessage(0, "%n делает комбо 8!", killer);
        }
        case 10:
        {
            rg_send_audio(0, "sky/unstopable.wav")
            show_hudmessage(0, "%n делает комбо 10!", killer);
        }
        case 13:
        {
            rg_send_audio(0, "sky/rampage.wav")
            show_hudmessage(0, "%n делает комбо 13!", killer);
        }
        case 15:
        {
            rg_send_audio(0, "sky/mosnterkill.wav")
            show_hudmessage(0, "%n делает комбо 15!", killer);
        }
        case 17:
        {
            rg_send_audio(0, "sky/lidacriskill.wav")
            show_hudmessage(0, "%n делает комбо 17!", killer);
        }
        case 20:
        {
            rg_send_audio(0, "sky/wickedsick.wav")
            show_hudmessage(0, "%n делает комбо 20!", killer);
        }
        case 23:
        {
            rg_send_audio(0, "sky/holyshit.wav")
            show_hudmessage(0, "%n делает комбо 23!", killer);
        }
        case 25:
        {
            rg_send_audio(0, "sky/godlike.wav")
            show_hudmessage(0, "%n делает комбо 25!", killer);
        }
    }
}
 
 
Сообщения
101
Рейтинг
103
#2
Проверка на суицид, проверка ффа, проверка на коннект убийцы, использовать ShowSyncHudMsg ибо сейчас у тебя мессаги тупо накладываются друг на друга, обнуление киллов в начале раунда.

Ах, блин. Надо было мнение опытных скриптеров.
 
2  
Сообщения
544
Рейтинг
120
#3
Jumper, про синкХуд и проверку на суицид думал, остальное не понадобится, т.к. у меня кнф дм. Спасибо
11 Янв 2019
Jumper, мб глупый вопрос, но в каком случае понадобится проверка на коннект убийцы?
если даже чел выйдет из кс без дисконнекта, и будет еще висеть на серве, то он никак никого не сможет убить
 
 
Сообщения
106
Рейтинг
121
#4
sbelov020, убийцей может быть не только игрок
 
Последнее редактирование:
 
Сообщения
544
Рейтинг
120
#5
Denzer, понял, спасибо.

Jumper, ну что-то вроде того получилось. Сойдет?
Код:
#include <amxmodx>
#include <reapi>

#define VERSION "0.2"

new g_KillsCounter[MAX_PLAYERS + 1], g_SyncHud;

public plugin_init()
{
    register_plugin("KillStreakAnnouncer", VERSION, "Nordic Warrior");

    RegisterHookChain(RG_CSGameRules_PlayerKilled, "PlayerKilled", 1);
    
    g_SyncHud = CreateHudSyncObj();
}

public plugin_precache()
{
    precache_sound("sky/dominating.wav");
    precache_sound("sky/megakill.wav");
    precache_sound("sky/unstopable.wav");
    precache_sound("sky/rampage.wav");
    precache_sound("sky/mosnterkill.wav");
    precache_sound("sky/lidacriskill.wav");
    precache_sound("sky/wickedsick.wav");
    precache_sound("sky/holyshit.wav");
    precache_sound("sky/godlike.wav");
}

public client_putinserver(id)
    g_KillsCounter[id] = 0;

public PlayerKilled(victim, killer)
{
    if(!is_user_connected(killer))
        return;
    
    if(killer != victim)
        g_KillsCounter[killer]++;

    g_KillsCounter[victim] = 0;

    set_hudmessage(80, 160, 255, 0.85, 0.45, 1, 0.0, 3.0, 0.1, 0.2, -1);

    switch(g_KillsCounter[killer])
    {
        case 5:
        {
            rg_send_audio(0, "sky/dominating.wav");
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 5!", killer);
        }
        case 8:
        {
            rg_send_audio(0, "sky/megakill.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 8!", killer);
        }
        case 10:
        {
            rg_send_audio(0, "sky/unstopable.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 10!", killer);
        }
        case 13:
        {
            rg_send_audio(0, "sky/rampage.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 13!", killer);
        }
        case 15:
        {
            rg_send_audio(0, "sky/mosnterkill.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 15!", killer);
        }
        case 17:
        {
            rg_send_audio(0, "sky/lidacriskill.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 17!", killer);
        }
        case 20:
        {
            rg_send_audio(0, "sky/wickedsick.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 20!", killer);
        }
        case 23:
        {
            rg_send_audio(0, "sky/holyshit.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 23!", killer);
        }
        case 25:
        {
            rg_send_audio(0, "sky/godlike.wav")
            ShowSyncHudMsg(0, g_SyncHud, "%n делает комбо 25!", killer);
        }
    }
}
 
 
Сообщения
106
Рейтинг
121
#6
sbelov020,
1. killer == victim и !victim - разные вещи, надо их тоже учитывать
2. Почему не пользуешься массивом?
3. g_KillsCounter[victim] = 0; как костыль получается (чтобы при суициде свитч не вызывался) или это для того чтобы сбрасывать серию убийств? Если да, то тогда лучше сбрасывать при спавне думаю.
 
 
Сообщения
1.430
Рейтинг
1486
#7
Код:
#include <amxmodx>
#include <reapi>


enum _:Sound {
    KillsCount,
    SoundPath[32]
}

new const SOUNDS[][Sound] = {
    { 5, "sky/dominating.wav" },
    { 8, "sky/megakill.wav" },
    { 10, "sky/unstopable.wav" },
    { 13, "sky/rampage.wav" },
    { 15, "sky/mosnterkill.wav" },
    { 17, "sky/lidacriskill.wav" },
    { 20, "sky/wickedsick.wav" },
    { 23, "sky/holyshit.wav" },
    { 25, "sky/godlike.wav" }
};

new SyncHud, KillsCounter[MAX_PLAYERS + 1];

public plugin_precache() {
    for (new i = 0; i < sizeof SOUNDS; i++) {
        precache_sound(SOUNDS[i][SoundPath]);
    }
}

public plugin_init() {
    RegisterHookChain(RG_CSGameRules_PlayerKilled, "CSGameRules_PlayerKilled_Post", true);
    SyncHud = CreateHudSyncObj();
}

public client_putinserver(id) {
    KillsCounter[id] = 0;
}

public CSGameRules_PlayerKilled_Post(victim, killer) {
    KillsCounter[victim] = 0;
    if (!is_user_connected(killer) || killer == victim) {
        return;
    }
    
    KillsCounter[killer]++;
    
    new sound = getSound(KillsCounter[victim]);
    if (sound == -1) {
        return;
    }
    
    rg_send_audio(0, SOUNDS[sound][SoundPath]);
    set_hudmessage(80, 160, 255, 0.85, 0.45, 1, 0.0, 3.0, 0.1, 0.2, -1);
    ShowSyncHudMsg(0, SyncHud, "%n делает комбо %i!", killer, KillsCounter[killer]);
}

getSound(const kills) {
    for (new i = 0; i < sizeof SOUNDS; i++) {
        if (SOUNDS[i][KillsCount] == kills) {
            return i;
        }
    }
    
    return -1;
}
 
1  
Сообщения
544
Рейтинг
120
#8
Denzer, 1. у меня !=. 2. Пока не догнал как сделать, вот сейчас fantom показал вариант, плюс у меня был вариант от w0w, сейчас переделаю. Да и код писался за 10 мин на коленке, тогда не было времени.
3. Да, это для сброса серии убийств.

fantom, спасибо, интересный вариант. А что значит sound == -1?
 
 
Сообщения
1.430
Рейтинг
1486
#9
sbelov020, звук для такого количества убийств не найден
 
 
Сообщения
1.430
Рейтинг
1486
#11
sbelov020,
Код:
- new sound = getSound(KillsCounter[victim]);
+ new sound = getSound(KillsCounter[killer]);
 
 
Сообщения
544
Рейтинг
120
#12
fantom, теперь отлично, благодарю.

Конечный код:
Код:
/* Thanks to [email protected] */

#include <amxmodx>
#include <reapi>

#define VERSION "0.3"

#pragma semicolon 1

enum _:Sound
{
    KillsCount,
    SoundPath[MAX_PLAYERS]
}

new const SOUNDS[][Sound] = {
    { 7, "sky/dominating.wav" },
    { 10, "sky/megakill.wav" },
    { 12, "sky/unstopable.wav" },
    { 15, "sky/rampage.wav" },
    { 17, "sky/mosnterkill.wav" },
    { 20, "sky/lidacriskill.wav" },
    { 22, "sky/wickedsick.wav" },
    { 25, "sky/holyshit.wav" },
    { 30, "sky/godlike.wav" }
};

new SyncHud, KillsCounter[MAX_PLAYERS + 1];

public plugin_init()
{
    register_plugin("KillStreakAnnouncer", VERSION, "Nordic Warrior");

    RegisterHookChain(RG_CSGameRules_PlayerKilled, "CSGameRules_PlayerKilled_Post", true);
    SyncHud = CreateHudSyncObj();
}

public plugin_precache()
{
    for(new i = 0; i < sizeof SOUNDS; i++)
        precache_sound(SOUNDS[i][SoundPath]);
}

public client_putinserver(id)
    KillsCounter[id] = 0;

public CSGameRules_PlayerKilled_Post(victim, killer)
{
    KillsCounter[victim] = 0;

    if(!is_user_connected(killer) || killer == victim)
        return;

    KillsCounter[killer]++;

    new sound = getSound(KillsCounter[killer]);
    if(sound == -1)
        return;

    rg_send_audio(0, SOUNDS[sound][SoundPath]);

    set_hudmessage(80, 160, 255, 0.85, 0.45, 1, 0.0, 3.0, 0.1, 0.2);
    ShowSyncHudMsg(0, SyncHud, "%n делает комбо %i!", killer, KillsCounter[killer]);
}

getSound(const kills)
{
    for(new i = 0; i < sizeof SOUNDS; i++)
    {
        if(SOUNDS[i][KillsCount] == kills)
            return i;
    }
    return -1;
}

Не совсем понимаю, какую роль тут играет SoundPath ?
 
 
Сообщения
544
Рейтинг
120
#14
fantom, была такая догадка, спасибо.
Если ни у кого не найдется замечаний, тему можно закрывать.
 
 
Статус
В этой теме нельзя размещать новые ответы.

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

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

Похожие темы

Ответы
28
Просмотры
2.274
Ответы
9
Просмотры
446
> > > > >