Last players sound

Last players sound 1.0

Нет прав для скачивания
Сообщения
316
Реакции
131
Помог
4 раз(а)
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
В плагине используется ReAPI:
1) cs_get_user_team(id) можно поменять на get_member(id, m_iTeam)
2) Сток SendAudio на натив rg_send_audio + не нужно добавлять fmt() а сразу указывать нужный звук.
3) Проверки на 52-60 лучше else if
4) Можно было бы еще небольшую оптимизацию сделать за счет того что в AMXX 1.9.0 и выше есть MaxClients.
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
используй get_players дабы сократить код
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
C++:
if(tt_count == 0) // если тт остался 1    {  
     SendAudio(lastCT, fmt("sound/%s", MUSIC_FILE));    
} 

  if(ct_count == 1) // если кт остался 1    {
        SendAudio(lastCT, fmt("sound/%s", MUSIC_FILE));    
}
Добрый день, помойму тут кт будет слышать в обоих случаях, а тт не будет
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
w0w,
Код:
#include <amxmodx>
#include <cstrike>
#include <reapi>

#if AMXX_VERSION_NUM < 183
    #define MaxClients get_maxplayers();
#endif

// to /cstrike/sound
new const MUSIC_FILE[] = "lasthuman.wav"; // sound .wav

new g_maxpls;

public plugin_precache()
{
    precache_sound(MUSIC_FILE);
}

public plugin_init()
{
    register_plugin("Last Players","0.1","alabamaster1337");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);

    //g_maxpls = get_maxplayers();
    g_maxpls = MaxClients;
}

// amx-x.ru
public HC_CBasePlayer_Killed_Post()
{
    new tt_count = 0, ct_count = 0, lastT = 0, lastCT = 0;

    for(new i = 1; i <= g_maxpls; i++)
    {
        if( is_user_alive(i) )
        {
            if( /*cs_get_user_team(i)*/get_member(i, m_iTeam) == CS_TEAM_T )
            {
                tt_count++;
                lastT = i;
            }
            if( /*cs_get_user_team(i)*/get_member(i, m_iTeam) == CS_TEAM_CT )
            {
                ct_count++;
                lastCT = i;
            }
        }
    }

    if( tt_count == 1 && ct_count == 1 ) // если тт и кт 1х1
    {
        rg_send_audio(lastT, MUSIC_FILE);
        rg_send_audio(lastCT, MUSIC_FILE);
    }
    else if( tt_count == 1 ) // если тт остался 1
    {
        rg_send_audio(lastT, MUSIC_FILE);
    }
    else if( ct_count == 1 ) // если кт остался 1
    {
        rg_send_audio(lastCT, MUSIC_FILE);
    }
}
Так нормас?
Denzer, сложно
 
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
Код:
#if AMXX_VERSION_NUM < 183
    new MaxClients;
#endif

#if AMXX_VERSION_NUM < 183
    MaxClients = get_maxplayers();
#endif

for(new i = 1; i <= MaxClients; i++)
#include <cstrike> уже удалять можно.
 
Сообщения
316
Реакции
131
Помог
4 раз(а)
zhorzh78, это можно без цикла сделать?
Код:
new AliveCt = get_playersnum_ex (GetPlayers_ExcludeDead | GetPlayers_MatchTeam, "CT");
new AliveTt = get_playersnum_ex (GetPlayers_ExcludeDead | GetPlayers_MatchTeam, "T");
public HC_CBasePlayer_Killed_Post()
{
    if( AliveCt == 1 && AliveTt == 1 ) // если тт и кт 1х1
    {
        rg_send_audio(lastT, MUSIC_FILE);
        rg_send_audio(lastCT, MUSIC_FILE);
    } // ...
}
3 Авг 2019
Иили переменные в внутри функции сделать :crazy:
 
Сообщения
133
Реакции
441
Помог
2 раз(а)
Соответственно я скорее всего бред сделал, но индекс players[0] без цикла не хрена не сработает наверное как нужно? :):):):):)
Код:
#include <amxmodx>
#include <reapi>

// to /cstrike/sound
new const MUSIC_FILE[] = "lasthuman.wav"; // sound .wav

public plugin_precache()
{
    precache_sound(MUSIC_FILE);
}

public plugin_init()
{
    register_plugin("Last players sound","0.1","alabamaster1337");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);
}

public HC_CBasePlayer_Killed_Post()
{
    new players[MAX_PLAYERS], num_tt, num_ct;
    get_players(players, num_tt, "ae", "TERRORIST");
    get_players(players, num_ct, "ae", "CT");
    
    if( (num_tt == 1 && num_ct == 1) || num_tt == 1 || num_ct == 1 )
        SendAudio(players[0], fmt("sound/%s", MUSIC_FILE));
}

// https://dev-cs.ru/threads/6785/#post-61715
stock SendAudio(id, audio[], pitch = 100) {
    static iMsgSendAudio;

    if(!iMsgSendAudio) {
        iMsgSendAudio = get_user_msgid("SendAudio");
    }

    message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iMsgSendAudio, .player = id);
    write_byte(id);
    write_string(audio);
    write_short(pitch);
    message_end();
}
 
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
medusa,

Какой смысл в этом?

Код:
    get_players(players, num_tt, "ae", "TERRORIST");
    get_players(players, num_ct, "ae", "CT");
Идёт перезапись массива players
Ну и собственно ненужный сток, уже есть натив в ReAPI.
 
Последнее редактирование:
Сообщения
271
Реакции
347
Помог
15 раз(а)
Ещё бы RH_SV_DropClient хукнуть и там тоже проверять
 
Сообщения
1,419
Реакции
2,509
Помог
59 раз(а)
alabamaster1337,

Код:
#if AMXX_VERSION_NUM < 183
    MaxClients = get_maxplayers();
#endif
Эту часть кода я имел ввиду в plugin_init() добавить
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
Еще такой момент, а в плагине учтено, если например на сервере всего 1 игрок?
 

d3m37r4

111111
Сообщения
1,425
Реакции
1,166
Помог
10 раз(а)
wellasgood, if( (num_tt == 1 && num_ct == 1) || num_tt == 1 || num_ct == 1 )
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
наверно нужна проверка на кол-во игроков на сервере, что бы плагин работал только если больше такого то колва игроков..
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
всмысле если всего 1 игрок например Tероррист то для него сработает? зачем, если он 1 на сервере
3 Авг 2019
помойму нужны проверка именно по количеству игроков, типа при старте раунда или еще чего, что бы плагин работал только от 2 игроков или сделать квар
 

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

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