Отлов победы команды

Сообщения
500
Реакции
110
Помог
16 раз(а)
Всем привет. Пытаюсь реализовать в AES выдачу опыта или бонусов команде которая победила. Очень давно я это делал но забыл как,тем более плагин был переписан на reAPI и не получается.

Код:
    register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
    register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")  
    register_event("SendAudio", "draw", "a", "2&%!MRAD_rounddraw")
и например при победе CT ничего естественно не происходит при

Код:
public ct_win(id)
{
  
    if( get_user_team( id ) == 1 ) //если поставить 2,то будет доступ только у ТТ
        aes_set_player_exp(id, aes_get_player_exp(id) + 10)  // выдаем 10 опыта
        client_print_color(id,0,"%L %L",id,"бла бла", id,"бла бла")

}
Который суем в aes_exp_cstrike

Очень мало разбираюсь в скриптинге в целом,поэтому)

17862
 

Download all Attachments

Сообщения
457
Реакции
262
Помог
9 раз(а)
Код:
RegisterHookChain(RG_RoundEnd, "HookChain_RoundEnd_Post", true);

public HookChain_RoundEnd_Post(WinStatus: winStatus, ScenarioEventEndRound: endEvent)    {
    if (winStatus != WINSTATUS_CTS || winStatus != WINSTATUS_TERRORISTS)
        return HC_CONTINUE;

    new TeamName: winTeam = (winStatus == WINSTATUS_CTS) ? TEAM_CT : TEAM_TERRORIST;

    for (new id = 1; id <= MaxClients; id++)
    {
        if (!is_user_connected(id) || !is_user_alive(id))
            continue;

        if (get_member(id, m_iTeam) != winTeam)
            continue;

        //give_experience(...);
        //
    }

    return HC_CONTINUE;
}
 
Последнее редактирование:
Сообщения
500
Реакции
110
Помог
16 раз(а)
w0w, Я незнаю как записать правильно,я логику то понимаю примерно,а вот сам синтаксис вообще хз.
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
r1nk0, нужно только живым выдавать опыт или всей команде?
 
Сообщения
500
Реакции
110
Помог
16 раз(а)
malniata, если@w0w, Да всем наверно
25 Июл 2019
malniata,

Код:
public HookChain_RoundEnd_Post(WinStatus: winStatus, ScenarioEventEndRound: endEvent)    {
    if (winStatus != WINSTATUS_CTS || winStatus != WINSTATUS_TERRORISTS)
        return HC_CONTINUE;

    new TeamName: winTeam = (winStatus == WINSTATUS_CTS) ? TEAM_CT : TEAM_TERRORISTS;

    for (new id = 1; id <= MaxClients; id++)
    {
        if (!is_user_connected(id) || !is_user_alive(id))
            continue;

        if (get_member(id, m_iTeam) != winTeam)
            continue;

            aes_set_player_exp(id, aes_get_player_exp(id) + 80)
    }

    return HC_CONTINUE;
}
17864
 

Вложения

Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Нужно ещё подключить инклуд AES чтобы нативы работали.

Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>

new const PLUGIN_VERSION[] = "1.0";

const NUM_EXP = 10;

public plugin_init()
{
    register_plugin("Give AES EXP on Win", PLUGIN_VERSION, "w0w");
    RegisterHookChain(RG_RoundEnd, "refwd_RoundEnd_Post", true);
}

public refwd_RoundEnd_Post(WinStatus:iStatus, ScenarioEventEndRound:iEvent, Float:flDelay)
{
    if(iStatus != WINSTATUS_CTS && iStatus != WINSTATUS_TERRORISTS)
        return;

    new iPlayers[MAX_PLAYERS], iPlayerCount;
    get_players_ex(iPlayers, iPlayerCount, GetPlayers_MatchTeam, iStatus == WINSTATUS_TERRORISTS ? "TERRORIST" : "CT");

    for(new i; i < iPlayerCount; i++)
        aes_set_player_exp(iPlayers[i], aes_get_player_exp(iPlayers[i]) + NUM_EXP);
}
 
Последнее редактирование:
Сообщения
500
Реакции
110
Помог
16 раз(а)
w0w, Проблема в том что если ты на сервере 1 и после завершения раунда например за КТ опыт выдается нахаляву. а так все работает только сообщение в чат немогу вывести)
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
r1nk0, если на сервере не важно в какой команде всего 1 игрок то ничего не выдавать а если больше 1 на сервере то уже выдавать?
 

d3m37r4

111111
Сообщения
1,444
Реакции
1,175
Помог
10 раз(а)
r1nk0, проверяй кол-во игроков в командах/на сервере. Мемберы: m_bGameStarted, m_bCompleteReset, m_iNumCT, m_iNumTerrorist помогут.
 
Сообщения
500
Реакции
110
Помог
16 раз(а)
w0w, да я вот и думал что должно быть как то связано с AES быть и поэтому пихал в aes_exp_cstrike,там же есть настройка что

Код:
// Минимальное кол-во игроков, при которых будет начисляться бонус за выполнение действий карты.
// Действии с заложниками, бомбой и VIP.
aes_xp_goal_min_players "4"
 
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Теперь будет работать с aes_xp_goal_min_players

Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>

new const PLUGIN_VERSION[] = "1.0";

/****************************************************************************************
****************************************************************************************/

const NUM_EXP = 10;

/****************************************************************************************
****************************************************************************************/

new g_iMinPlayers;

public plugin_init()
{
    register_plugin("Give AES EXP on Win", PLUGIN_VERSION, "w0w");
    RegisterHookChain(RG_RoundEnd, "refwd_RoundEnd_Post", true);
}

public plugin_cfg()
{
    new pCvar = get_cvar_pointer("aes_xp_goal_min_players");
    bind_pcvar_num(pCvar, g_iMinPlayers);
}

public refwd_RoundEnd_Post(WinStatus:iStatus, ScenarioEventEndRound:iEvent, Float:flDelay)
{
    if(iStatus != WINSTATUS_CTS && iStatus != WINSTATUS_TERRORISTS)
        return;

    // Получаем количество игроков на сервере за исключением ботов и HLTV
    new iPlayersNum = get_playersnum_ex(GetPlayers_ExcludeBots|GetPlayers_ExcludeHLTV);

    // Если количество игроков меньше чем указано в кваре то останавливаемся
    if(iPlayersNum < g_iMinPlayers)
        return;

    new iPlayers[MAX_PLAYERS], iPlayerCount, iPlayer;
    get_players_ex(iPlayers, iPlayerCount, GetPlayers_MatchTeam, iStatus == WINSTATUS_TERRORISTS ? "TERRORIST" : "CT");

    for(new i; i < iPlayerCount; i++)
    {
        iPlayer = iPlayers[i];

        // Выдаём опыт игроку
        aes_set_player_exp(iPlayer, aes_get_player_exp(iPlayer) + NUM_EXP);
        // Выводим сообщение игроку
        client_print_color(iPlayer, print_team_default, "^4* ^1Вы получили ^4%d ^1опыта", NUM_EXP);
    }
}
 
Сообщения
500
Реакции
110
Помог
16 раз(а)
w0w, да работает как надо,получилось отличное расширение для aes
 
Сообщения
2,746
Реакции
3,008
Помог
61 раз(а)
Сообщения
1,420
Реакции
2,511
Помог
58 раз(а)
Лучше тогда добавить квар и мультиязычность.

Код:
#include <amxmodx>
#include <amxmisc>
#include <reapi>
#include <aes_v>

new const PLUGIN_VERSION[] = "1.0";

/****************************************************************************************
****************************************************************************************/

new g_iExpNum;
new g_iMinPlayers;

public plugin_init()
{
    register_plugin("Give AES EXP on Win", PLUGIN_VERSION, "w0w");
    register_dictionary("aes_exp_on_win.txt");

    RegisterHookChain(RG_RoundEnd, "refwd_RoundEnd_Post", true);

    new pCvar = create_cvar("aes_exp_on_win", "10", FCVAR_NONE, fmt("%L", LANG_SERVER, "AES_EXP_ON_WIN_CVAR"), true, 0.0);
    bind_pcvar_num(pCvar, g_iExpNum);

    AutoExecConfig(true, "aes_exp_on_win");
}

public plugin_cfg()
{
    new pCvar = get_cvar_pointer("aes_xp_goal_min_players");
    bind_pcvar_num(pCvar, g_iMinPlayers);
}

public refwd_RoundEnd_Post(WinStatus:iStatus, ScenarioEventEndRound:iEvent, Float:flDelay)
{
    if(iStatus != WINSTATUS_CTS && iStatus != WINSTATUS_TERRORISTS)
        return;

    new iPlayersNum = get_playersnum_ex(GetPlayers_ExcludeBots|GetPlayers_ExcludeHLTV);

    if(iPlayersNum < g_iMinPlayers)
        return;

    new iPlayers[MAX_PLAYERS], iPlayerCount, iPlayer;
    get_players_ex(iPlayers, iPlayerCount, GetPlayers_MatchTeam, iStatus == WINSTATUS_TERRORISTS ? "TERRORIST" : "CT");

    for(new i; i < iPlayerCount; i++)
    {
        iPlayer = iPlayers[i];

        aes_set_player_exp(iPlayer, aes_get_player_exp(iPlayer) + g_iExpNum);
        client_print_color(iPlayer, print_team_default, "%l", "AES_EXP_ON_WIN_MSG", g_iExpNum);
    }
}
aes_exp_on_win.txt:
Код:
[ru]
AES_EXP_ON_WIN_CVAR = Количество денег что будет выдано победившей команде
AES_EXP_ON_WIN_MSG = ^4* ^1Вы получили ^4%d ^1опыта за победу!
 
Сообщения
432
Реакции
410
Помог
14 раз(а)
malniata, это не инкременты, а операторы. Соизвольте изучить хотя бы базовые термины
 
Сообщения
457
Реакции
262
Помог
9 раз(а)
voed, инкременты я так понимаю + / ++ / - / --?
 

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

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