Поиск плагин amx_hltvstart

blood2k

Пользователь
Регистрация
16 Июн 2017
Сообщения
64
Симпатии
2
Всем привет :Bye:,

Может кто-нибудь помочь создать этот маленький плагин. Мы хотим начать запись HLTV демо используя квар amx_hltvstart. И потом чтобы остановить запись, админ может написать amx_hltvstop. Я могу заплатить если кто-то может создать.
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Всем привет :Bye:,

Может кто-нибудь помочь создать этот маленький плагин. Мы хотим начать запись HLTV демо используя квар amx_hltvstart. И потом чтобы остановить запись, админ может написать amx_hltvstop. Я могу заплатить если кто-то может создать.
Зачем?
Rcon отменили уже что ли?
 

blood2k

Пользователь
Регистрация
16 Июн 2017
Сообщения
64
Симпатии
2
Я не думаю что возможно начать запись через консоль. HLTV на отдельном IP / VPS.
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский

blood2k

Пользователь
Регистрация
16 Июн 2017
Сообщения
64
Симпатии
2
Я только что попробовал и HLTV ничего не получает через rcon.
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский
Ясно.
Hlsw не подойдёт?
 

Safety1st

Заблокированные
Пользователь
Регистрация
10 Ноя 2017
Сообщения
114
Симпатии
36
Пол
Мужской
HLTV можно управлять через RCON:
1574027370569.png

Видимо, расхождение версий доброе.
Команды и квары не помогут.
 

blood2k

Пользователь
Регистрация
16 Июн 2017
Сообщения
64
Симпатии
2
Оооо так проблема может быть что версия HLTV которую я использую старая?
 
K

kapangaIII

Нет.
Скорее всего проблема лишь в том что вы не знаете о предназначении квара `rcon_address`.

А так, да, предоставляйте version с hltv.

Большая проблема лишь в том что скорее всего hltv не умеет динамически писать.
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
Честно говоря, не помню, закончил его или нет. Проверите- скажите.
C++:
#include <amxmodx>
#include <sockets>

#define QUERY_OFFSET            4
#define MAX_RESPONSE_LEN        128
#define TASK_ID_GET_CHALLENGE    5252
#define TASK_ID_GET_DATA        5255

new cpHltvIp, cpHltvPort, cpHltvPasswd, cpHltvDemoPath;
new cv_szHltvIp[MAX_IP_LENGTH], cv_iHltvPort, cv_szHltvPasswd[MAX_NAME_LENGTH], cv_szHltvDemoPath[MAX_NAME_LENGTH];
new g_hSocket, g_iSocketError, g_szRconChallenge[MAX_NAME_LENGTH];
new bool:g_bHltvIsReady;

enum eHltvCmd
{
    HltvCmdGetChallenge = 1,
    HltvCmdStartRecord,
    HltvCmdStopRecord
}

public plugin_init()
{
    cpHltvIp = register_cvar("hadr_hltv_ip", "127.0.0.1");
    cpHltvPort = register_cvar("hadr_hltv_port", "27020");
    
    cpHltvPasswd = register_cvar("hadr_hltv_rconpw", "123456", FCVAR_PROTECTED);
    cpHltvDemoPath = register_cvar("hadr_hltv_demo_path", "hltv/");
    
    register_concmd("amx_hltvstart", "CmdCommandStart", ADMIN_RCON);
    register_concmd("amx_hltvstop", "CmdCommandStop", ADMIN_RCON);
}

public CmdCommandStart(id)
    FnSendRconCommand(fmt("%d", HltvCmdStartRecord));
    
public CmdCommandStop(id)
    FnSendRconCommand(fmt("%d", HltvCmdStopRecord));

public plugin_cfg()
{
    get_pcvar_string(cpHltvIp, cv_szHltvIp, charsmax(cv_szHltvIp));
    get_pcvar_string(cpHltvPasswd, cv_szHltvPasswd, charsmax(cv_szHltvPasswd));
    get_pcvar_string(cpHltvDemoPath, cv_szHltvDemoPath, charsmax(cv_szHltvDemoPath));
    cv_iHltvPort = get_pcvar_num(cpHltvPort);
}

new bool:g_bHltvIsRecording

public client_authorized(id, const auth[])
{
    if(auth[0] == 'H')
    {
        log_amx( "HLTV connected");
        set_task(60.0, "FnCheckActiveRecord");
    }
        
}

public FnCheckActiveRecord()
    FnSendRconCommand(fmt("%d", HltvCmdStartRecord));

FnCreateSocket()
{
    if(g_hSocket)
        socket_close(g_hSocket);

    g_hSocket = socket_open(cv_szHltvIp, cv_iHltvPort, SOCKET_UDP, g_iSocketError);

    if(g_hSocket <= 0 || g_iSocketError)
    {
        switch( g_iSocketError )
        {
            case 1: log_amx( "Error creating TCP socket");
            case 2: log_amx( "Error resolving the hostname");
            case 3: log_amx( "Error connecting a TCP socket");
        }
        
        socket_close(g_hSocket);
    }
    
    return g_hSocket;
}

FnSendRconCommand(HltvCmd[])
{
    if(!(g_hSocket = FnCreateSocket()))
        return;

    new szData[MAX_RESPONSE_LEN];
    setc(szData, QUERY_OFFSET, 0xff);
    format(szData, charsmax(szData),"%schallenge rcon^n", szData);

    socket_send(g_hSocket, szData, charsmax(szData));
    set_task(3.0, "FnGetHltvChallengePost", !g_bHltvIsReady ? TASK_ID_GET_CHALLENGE : 0, HltvCmd, QUERY_OFFSET);   
}

public FnGetHltvChallengePost(HltvCmd[], iTaskId)
{
    new szData[MAX_RESPONSE_LEN];
    if(iTaskId == TASK_ID_GET_CHALLENGE)
    {
        if(socket_is_readable(g_hSocket))
        {
            socket_recv(g_hSocket, szData, charsmax(szData));

            parse(szData, g_szRconChallenge, charsmax(g_szRconChallenge), g_szRconChallenge, charsmax(g_szRconChallenge), g_szRconChallenge, charsmax(g_szRconChallenge));
            trim(g_szRconChallenge);
            
            g_bHltvIsReady = true;
            FnGetHltvChallengePost(HltvCmd, 0);
            return;
        }
    }
    else if(g_bHltvIsReady)
    {
        g_bHltvIsReady = false;
        setc(szData, QUERY_OFFSET, 0xff);
        switch(str_to_num(HltvCmd))
        {
            case HltvCmdStartRecord:
            {
                if(g_bHltvIsRecording)
                {
                    log_amx("Already recording");
                    return;
                }
                format(szData, charsmax(szData), "%srcon %s ^"%s^" record %s^n", szData, g_szRconChallenge, cv_szHltvPasswd, cv_szHltvDemoPath);
            }
            
            case HltvCmdStopRecord:
            format(szData, charsmax(szData), "%srcon %s ^"%s^" stoprecording^n", szData, g_szRconChallenge, cv_szHltvPasswd);
        }

        socket_send(g_hSocket, szData, charsmax(szData));
        set_task(5.0, "FnGetHltvChallengePost", TASK_ID_GET_DATA, HltvCmd, QUERY_OFFSET);
    }
    else
    {
        socket_close(g_hSocket);
    }
}
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
2.578
Симпатии
914
Пол
Женский

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
HLTV Guard 0.9 - AlliedModders
HLTV Report (v1.1.1) - AlliedModders[DOUBLEPOST=1574073313][/DOUBLEPOST]georgeml,
Код:
if(auth[0] == 'H')
Почему бы не пользоватся is_user_hltv вместо своих велосипедов
Ну и сокету лучше использовать ассинхронные дабы не блокировать основной поток
 

georgeml

Скриптер
Постоялец
Регистрация
12 Сен 2017
Сообщения
595
Симпатии
314
Почему бы не пользоватся is_user_hltv вместо своих велосипедов
1. Потому что это мой велосипед, а не ваш показ мод, и красота кода тут не к месту. Будто ваш "совет" сделает как-то по-другому
C++:
const char *authid = GETPLAYERAUTHID(pPlayer->pEdict);

    if (authid && stricmp(authid, "HLTV") == 0)
        return 1;
дабы не блокировать основной поток
2. Мне эта реализация не мешает. А вам на заметку: даже логер чата, записывающий каждый пук, не вызывает ни единого подозрения на десинхронизацию, соответственно, никак не отображается на сервере. + первое предложение первого ответа.
:Ok:
 

blood2k

Пользователь
Регистрация
16 Июн 2017
Сообщения
64
Симпатии
2
Ребята я проверил плагин и все работает:). Есть ли способ сохранить демо с разными именами? Потому что демки на одних и тех же картах будут переписывать друг друга.
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
blood2k, в хлтв все имена демок имеют время записи в названии, так что перезаписать врятли получится
 
Сверху Снизу