Last players sound

Last players sound 1.0

Нет прав для скачивания
Сообщения
458
Реакции
263
Помог
9 раз(а)
malniata, если кт и тт останутся 1х1, то у последнего оставшегося звука не будет.
Код:
#include <amxmodx>
#include <reapi>

#if AMXX_VERSION_NUM < 183
    new MaxClients;
#endif

// to /cstrike/sound
new const MUSIC_FILE[] = "lasthuman.wav"; // sound .wav
new bool: g_alreadyPlayed[3];

public plugin_precache()
{
    precache_sound(MUSIC_FILE);
}

public plugin_init()
{
    register_plugin("Last Players","0.2","alabamaster1337 & dev-cs");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);
    RegisterHookChain(RH_SV_DropClient, "HookDropClient", .post=true);
    RegisterHookChain(RG_CSGameRules_RestartRound, "GameRules_RestartRound", .post=true);

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

public GameRules_RestartRound()
    for (new i; i < 3; i++)
        g_alreadyPlayed[i] = false;

public HookDropClient()
        check_last_players();

// amx-x.ru
public HC_CBasePlayer_Killed_Post()
        check_last_players();

check_last_players()    {
    new players[TeamName], playerId[TeamName];

    for (new id = 1; id <= MaxClients; id++)
    {
        if (is_user_alive(id) && (TEAM_UNASSIGNED < get_member(id, m_iTeam) < TEAM_SPECTATOR))
        {
            players[get_member(id, m_iTeam)]++;
            playerId[get_member(id, m_iTeam)] = id;
        }
    }

    new untitled = -1;

    if (!g_alreadyPlayed[0] && (players[TEAM_CT] < 2 > players[TEAM_TERRORIST]))
    {
        rg_send_audio([playerId[TEAM_CT], MUSIC_FILE);
        rg_send_audio([playerId[TEAM_TERRORIST], MUSIC_FILE);

        untitled = 0;
    }
    else if (!g_alreadyPlayed[1] && players[TEAM_CT] == 1 && players[TEAM_TERRORIST] > 1)
    {
        rg_send_audio([playerId[TEAM_CT], MUSIC_FILE);

        untitled = 1;
    }
    else if (!g_alreadyPlayed[2] && players[TEAM_TERRORIST] == 1 && players[TEAM_CT] > 1)
    {
        rg_send_audio([playerId[TEAM_TERRORIST], MUSIC_FILE);

        untitled = 2;
    }

    if (untitled == -1)
        return;

    g_alreadyPlayed[untitled] = true;
}
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
Или так
Код:
#include <amxmodx>
#include <reapi>
#include <amxmisc>

#if AMXX_VERSION_NUM < 183
    new MaxClients;
#endif

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

public plugin_precache()
{
    precache_sound(MUSIC_FILE);
}

public plugin_init()
{
    register_plugin("Last Players","0.2","alabamaster1337 & dev-cs");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);

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

public round_start()
{
    new iPlayers[MAX_PLAYERS], iPlayerCount;
    get_players_ex(iPlayers, iPlayerCount, GetPlayers_ExcludeDead/*|GetPlayers_ExcludeBots*/|GetPlayers_ExcludeHLTV);

    if(iPlayerCount > 2){
        log_amx("%d", iPlayerCount);
        return true;
    } else {
        log_amx("%d", iPlayerCount);
        return false;
    }
}

public HC_CBasePlayer_Killed_Post()
{
    if( !round_start() ) {
        return;
    } else {
        new tt_count = 0, ct_count = 0, lastT = 0, lastCT = 0;

        for(new i = 1; i <= MaxClients; i++)
        {
            if( is_user_alive(i) )
            {
                if( get_member(i, m_iTeam) == CS_TEAM_T )
                {
                    tt_count++;
                    lastT = i;
                }
                if( 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);
        }
    }
}
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
fox, на прошлых страницах я давал ссылку на архив под спойлером
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Код:
        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);
        }
=>
Код:
        if( tt_count == 1 )
            rg_send_audio(lastT, MUSIC_FILE);

        if( ct_count == 1 )
            rg_send_audio(lastCT, MUSIC_FILE);
4 Авг 2019
Ну а вообще чтоб без циклов, нужен массив для записи m_iNumTerrorist, m_iNumCT в начале раунда и с последующим уменьшением в смерти.
 

fox

Сообщения
176
Реакции
49
Помог
7 раз(а)
alabamaster1337, нашёл, спасибо, но по-хорошему, надо прикрепить в ресурсы.
4 Авг 2019
Один раз сработал плагин и всё. Остается один игрок, но звук о том, что он один не воспроизводится. В чем траблы?
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>

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

new NumTerrorists, NumCT;

public plugin_precache() {
    precache_sound(MUSIC_FILE);
}

public plugin_init() {
    RegisterHookChain(RG_CSGameRules_RestartRound, "CSGameRules_RestartRound_Post", true);
    RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", true);
}

public CSGameRules_RestartRound_Post() {
    NumTerrorists = get_member_game(m_iNumSpawnableTerrorist);
    NumCT = get_member_game(m_iNumSpawnableCT);
}

public CBasePlayer_Killed_Post(const id) {
    switch (TeamName:get_member(id, m_iTeam)) {
        case TEAM_TERRORIST: {
            NumTerrorists--;
        }
        
        case TEAM_CT: {
            NumCT--;
        }
    }
    
    new player;
    if (NumTerrorists == 1 && (player = getLastPlayer("TERRORIST")) > 0) {
        rg_send_audio(player, MUSIC_FILE);
    }
    
    if (NumCT == 1 && (player = getLastPlayer("CT")) > 0) {
        rg_send_audio(player, MUSIC_FILE);
    }
}

getLastPlayer(const team[]) {
    new players[MAX_PLAYERS], num;
    get_players_ex(players, num, GetPlayers_ExcludeDead | GetPlayers_ExcludeBots | GetPlayers_ExcludeHLTV | GetPlayers_MatchTeam, team);
    
    return num == 1 ? players[0] : 0;
}
 
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
Война скриптуров, кто на что горазд
// фантом вин, по совету цветка
 

fox

Сообщения
176
Реакции
49
Помог
7 раз(а)
Напишу снова, а то не углядели.
Один раз сработал плагин и всё. Остается один игрок, но звук о том, что он один не воспроизводится. В чем траблы?
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
fantom, у меня не работает, с ботамиget_players_ex(players, num, GetPlayers_ExcludeDead /*| GetPlayers_ExcludeBots*/ | GetPlayers_ExcludeHLTV | GetPlayers_MatchTeam, team);
4 Авг 2019
fox, этот должен работать как нормально, но писали что когда играют каждый раунд 1х1 он повторяет
Код:
#include <amxmodx>
#include <reapi>

#if AMXX_VERSION_NUM < 183
    new MaxClients;
#endif

// 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","0.2","alabamaster1337 & dev-cs");

    RegisterHookChain(RG_CBasePlayer_Killed, "HC_CBasePlayer_Killed_Post", true);

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

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

    for(new i = 1; i <= MaxClients; i++)
    {
        if( is_user_alive(i) )
        {
            if( get_member(i, m_iTeam) == CS_TEAM_T )
            {
                tt_count++;
                lastT = i;
            }
            if( 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);
    }
}
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
alabamaster1337, пожалуйста, убери меня с "благодарностей". Я не внес никакого импакта.
 

fox

Сообщения
176
Реакции
49
Помог
7 раз(а)
alabamaster1337, странности с плагином выходят. Играли 10 человек, ниразу ен сказал, сейчас на сервере 20 человек и я услышал заветные слова. Магия?
4 Авг 2019
alabamaster1337, и ещё вопрос, а слышать все или только игрок который остается 1?
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
fox, не знаю даже, либо и в правду колдовство, либо все из-за steelzzz`a
Сейчас поковыряю еще, посмотрим что получиться
 
Сообщения
317
Реакции
131
Помог
4 раз(а)
malniata,
Код:
// C:\Users\skynet\Desktop\cs\ъюьяшы ЄюЁ√ amxx\amx 1.9.0\last_players.sma(126) : error 029: invalid expression, assumed zero
// C:\Users\skynet\Desktop\cs\ъюьяшы ЄюЁ√ amxx\amx 1.9.0\last_players.sma(126) : warning 215: expression has no effect
// C:\Users\skynet\Desktop\cs\ъюьяшы ЄюЁ√ amxx\amx 1.9.0\last_players.sma(126) : warning 215: expression has no effect
// C:\Users\skynet\Desktop\cs\ъюьяшы ЄюЁ√ amxx\amx 1.9.0\last_players.sma(126) : error 001: expected token: ";", but found ")"
// C:\Users\skynet\Desktop\cs\ъюьяшы ЄюЁ√ amxx\amx 1.9.0\last_players.sma(126) : error 029: invalid expression, assumed zero
// C:\Users\skynet\Desktop\cs\ъюьяшы ЄюЁ√ amxx\amx 1.9.0\last_players.sma(126) : fatal error 107: too many error messages on one line
 

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

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