Move all players to spectators

wellasgood

Пользователь
Регистрация
22 Дек 2019
Сообщения
115
Симпатии
24
Пол
Мужской
kisspng-game-icon-computer-icons-table-organization-clip-a-5af304a7376ce9.029980601525875879227.jpg

Автор: wellasgood
Версия: 1.5.2
Краткое описание: перемещение всех живых игроков в наблюдатели.
Совместимость: Amx Mod X 1.9.0, Amx Mod X 1.10.0 dev
Мультиязычность: ru, en
Команды для чата: /spec, /back

Schokk - за идею :)
Алексеич и fantom - небольшие правки и доработка.
Izmayl7- предложение разных идей по улучшению.
voed - некоторая помощь.
BlackSignature - натолкнул на идею с иммунитетом от переброски.
Простенький плагин для перевода всех игроков за Спектаторов.

Что умеет:

1. Переводит всех живых игроков по команде за спектаторов
2. Не переводит того кто пишет команду
3. Не засчитывает смерть.

* - Остальное в обновлениях версий.
Скомпилируйте плагин.
Скопируйте скомпилированный файл .amxx в директорию: amxmodx/plugins/
Скопируйте словарь плагина .txt в директорию amxmodx/data/lang/
Пропишите .amxx в файле amxmodx/configs/plugins.ini
Смените карту или перезапустите сервер.
В .sma:

C++:
#define AUTO_CFG //Автосоздание конфига
#define FLAG_IMMUNITY ADMIN_BAN //Флаг, который должен быть у игрока для иммунитета от переброски.
Если закомментировано #define AUTO_CFG, то ищем в .sma строки и меняем значения:

sp_bots_en "1" //Перемещать ботов? (Вкл/Выкл - 1/0).
sp_chat_info "1" //Показывать инфо о команде /back? (Вкл/Выкл - 1/0).
sp_spawn_rebirth "1" //Возрождать игрока после применения игроком команды /back? (Вкл/Выкл - 1/0).

В .ini:

После установки и первого запуска, отредактируйте флаг для плагина в файле по пути: addons\amxmodx\configs\cmdaccess.ini
C++:
register_clcmd("say /spec", "funcallspec", ADMIN_CFG, "moving to the observation of all living") //команда доступная только по флагу, переброс всех живых в наблюдатели.
C++:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define AUTO_CFG //Автосоздание конфига
#define FLAG_IMMUNITY ADMIN_BAN //Флаг, который должен быть у игрока для иммунитета от переброски.

new const PLUGIN[] = "Move to spectators";
new const VERSION[] = "1.5.2";
new const AUTHOR[] = "wellasgood";

enum _:SpecData
{
    BOT_ACCOUNTING,
    CHAT_INFO_BACK,
    SPAWN_REBIRTH
};

new g_eSpecCvar[SpecData], CsTeams:g_Team[MAX_PLAYERS+1];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_dictionary("move-spect.txt");

    register_clcmd("say /spec", "funcallspec", ADMIN_CFG, "moving to the observation of all living") //команда доступная только по флагу, переброс всех живых в наблюдатели.
    register_clcmd("say /back", "funcback"); //команда доступная игрокам, которые были перекинуты командой /spec

    func_regcvars();

#if defined AUTO_CFG
    AutoExecConfig(true, "move-spect");
#endif
}

public func_regcvars()
{
    new g_Cvar;

    g_Cvar = create_cvar("sp_bots_en", "1", FCVAR_NONE, "Consider bots when transferring to viewers? (off/on; 0/1)", true, 0.0, true, 1.0);
    bind_pcvar_num(g_Cvar, g_eSpecCvar[BOT_ACCOUNTING]);

    g_Cvar = create_cvar("sp_chat_info", "1", FCVAR_NONE, "Show chatting information about a team '/back' to a player? (off/on; 0/1)", true, 0.0, true, 1.0);
    bind_pcvar_num(g_Cvar, g_eSpecCvar[CHAT_INFO_BACK]);

    g_Cvar = create_cvar("sp_spawn_rebirth", "1", FCVAR_NONE, "Rebirth of a player after using a team '/back'? (off/on; 0/1)", true, 0.0, true, 1.0);
    bind_pcvar_num(g_Cvar, g_eSpecCvar[SPAWN_REBIRTH]);
}

public client_connect(id)
{
    g_Team[id] = CS_TEAM_UNASSIGNED;
}

public funcallspec(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2, false)){
        return PLUGIN_HANDLED;
    }

    new iGamer[MAX_PLAYERS], iCount;

    if(!g_eSpecCvar[BOT_ACCOUNTING]){
        get_players_ex(iGamer, iCount, GetPlayers_ExcludeDead|GetPlayers_ExcludeBots|GetPlayers_ExcludeHLTV);
    }
    else{
        get_players_ex(iGamer, iCount, GetPlayers_ExcludeDead|GetPlayers_ExcludeHLTV);
    }

    for(new i; i < iCount; i++){
        if(iGamer[i] != id && !(get_user_flags(iGamer[i]) & FLAG_IMMUNITY)){
            user_kill(iGamer[i], 1);
            g_Team[iGamer[i]] = cs_get_user_team(iGamer[i]);
            cs_set_user_team(iGamer[i], CS_TEAM_SPECTATOR, 0);

            if(g_eSpecCvar[CHAT_INFO_BACK]){
                for(new k; k < 3; k++){
                    client_print_color(iGamer[i], print_team_default, "%l", "SPEC_CHATINFO_PLAYER", iGamer[i]);
                }
            }
        }
    }

    return PLUGIN_HANDLED;
}

public funcback(id)
{
    if(g_Team[id] != CS_TEAM_SPECTATOR && g_Team[id] != CS_TEAM_UNASSIGNED && !(get_user_flags(id) & FLAG_IMMUNITY)){
        cs_set_user_team(id, g_Team[id], 0);

        if(g_eSpecCvar[SPAWN_REBIRTH]){
            cs_user_spawn(id);
        }
    }
}
 

Вложения

Последнее редактирование:
Сверху Снизу