Иконка ресурса

Auto Demo Record 1.0

mumuxtarka

Участник
Сообщения
46
Реакции
5
  • Автор ресурса
  • #1
Auto Demo Record

Описание:
Плагин предлагает записать игрокам демо при входе на сервер. Подойдет для серверов CS:S V34.
Требования:
SourceMod
P/S За помощь спасибо R1KO
 
Последнее редактирование модератором:

vovchik21rus

Участник
Сообщения
9
Реакции
0
Auto Demo Record
Текущая версия : 1.0
Описание:
Плагин предлагает записать игрокам демо при входе на сервер. Подойдет для серверов CS:S V34.

Требования:
SourceMod

P/S За помощь спасибо R1KO
Отличный плагин,всё работает,демки пишет.
Но было бы удобней не в папку SAVE сохранять,а в корень игры.Так будет удобней воспроизводить.Не все пользуются плеером,для воспроизведения.
Или это только мне кажется :ab:
Поставил бы плюсик,да не нашёл.Спасибо за плагин
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #4
Отличный плагин,всё работает,демки пишет.
Но было бы удобней не в папку SAVE сохранять,а в корень игры.Так будет удобней воспроизводить.Не все пользуются плеером,для воспроизведения.
Или это только мне кажется :ab:
Поставил бы плюсик,да не нашёл.Спасибо за плагин

какая разница куда сохранять?
 

SkorP1onS

Участник
Сообщения
156
Реакции
4
@mumuxtarka, CS:S v34
L 02/13/2016 - 17:15:54: SourceMod error session started
L 02/13/2016 - 17:15:54: Info (map "35hp_2_2010") (file "errors_20160213.log")
L 02/13/2016 - 17:15:54: [SM] Native "GetClientUserId" reported: Client index 0 is invalid
L 02/13/2016 - 17:15:54: [SM] Displaying call stack trace for plugin "DemoRecord.smx":
L 02/13/2016 - 17:15:54: [SM] [0] Line 37, C:\Users\\Downloads\DemoRecord.sp::RecordPanel()
L 02/13/2016 - 17:20:09: [SM] Native "GetClientUserId" reported: Client index 0 is invalid
L 02/13/2016 - 17:20:09: [SM] Displaying call stack trace for plugin "DemoRecord.smx":
L 02/13/2016 - 17:20:09: [SM] [0] Line 37, C:\Users\\Downloads\DemoRecord.sp::RecordPanel()
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Более адекватный вариант, версия 1.1:[HIDE-REPLY-THANKS]
PHP:
#pragma semicolon 1
#include <sourcemod>

#define PATH_DEMO_RECORD    "SAVE"

new Handle:KV;

public Plugin:myinfo =
{
    name    =    "DemoRecord client",
    author    =    "Mumuxtarka",
    version    =    "1.1"
};

public OnPluginStart()
{
    HookEvent("player_team", Event_PlayerTeam);
    KV = CreateKeyValues("DemoRecord");
}

public OnConfigsExecuted()
{
    decl String:command_record[128], String:map[32],
         String:time[17];

    GetCurrentMap(map, sizeof(map));
    FormatTime(time, sizeof(time), "%d-%m-%Y_%H-%M");
    FormatEx(command_record, sizeof(command_record), "record %s/%s_%s", PATH_DEMO_RECORD, time, map);
    KvSetString(KV, "cmd", command_record);
}

public Event_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (GetEventInt(event, "oldteam") == 0 && GetEventBool(event, "disconnect") == false) WelcomePanel(GetClientOfUserId(GetEventInt(event, "userid")));
}

WelcomePanel(client)
{
    decl String:name[MAX_NAME_LENGTH],
         String:buffer[66], Handle:panel;
    GetClientName(client, name, MAX_NAME_LENGTH);

    SetPanelTitle(panel = CreatePanel(), "[DemoRecord] Автоматическая запись демо\n");
  
    FormatEx(buffer, sizeof(buffer), "Добро пожаловать, %s!", name);
    DrawPanelText(panel, buffer);

    DrawPanelText(panel, "Хочешь записать свою игру?\n \n");
    DrawPanelItem(panel, "Да");
    DrawPanelItem(panel, "Нет\n \n");
    DrawPanelItem(panel, "Как это работает?");

    SendPanelToClient(panel, client, Select_Record_Panel, 90);

    CloseHandle(panel);
}

public Select_Record_Panel(Handle:panel, MenuAction:action, client, index)
{
    if (action == MenuAction_Select)
    {
        switch(index)
        {
            case 1: ShowVGUIPanel(client, "info", KV);
            case 2:
            {
                PrintToChat(client, "\x01\x04[DemoRecord] \x01Вы отказались от записи \x03демо\x01!");
                //KickClient(client, "Вы отказались от записи демо!");
            }
            case 3:    RulesPanel(client);
        }
    }
}

RulesPanel(client)
{
    decl String:buffer[128], Handle:panel;
    SetPanelTitle(panel = CreatePanel(), "[DemoRecord] Как это работает?\n \n");

    DrawPanelText(panel, "С Вашего соглашения автоматически запишется демо,");
    FormatEx(buffer, sizeof(buffer), "которое будет сохранено в папке cssv34/cstrike/%s/", PATH_DEMO_RECORD);
    DrawPanelText(panel, buffer);
    DrawPanelText(panel, "В случае бана или других спорных моментов,");
    DrawPanelText(panel, "при предоставлении демо, вопросы будут решаться быстрей.\n \n");
    DrawPanelText(panel, "С уважением, администрация!");
    DrawPanelItem(panel, "Вернуться назад...");

    SendPanelToClient(panel, client, Select_Rules_Panel, 0);

    CloseHandle(panel);
}

public Select_Rules_Panel(Handle:panel, MenuAction:action, client, index)
{
    if (action == MenuAction_Select) WelcomePanel(client);
}
[/HIDE-REPLY-THANKS]Где:
PATH_DEMO_RECORD - ваш путь записи демо-роликов клиенту после папки cstrike (будет отображён и в меню помощи);
//KickClient - если слэши // переместить выше (закрыть сообщение в чат), то отказавшегося в записи игрока кикнет.
 

Webman

Nevermind
Сообщения
803
Реакции
330
Оффтоп
 

Felton

Участник
Сообщения
799
Реакции
59
Удалено
 
Последнее редактирование:

SkorP1onS

Участник
Сообщения
156
Реакции
4
@Серый™, Теперь вот так:
L 02/14/2016 - 13:24:15: Info (map "awp_lego_2") (file "errors_20160214.log")
L 02/14/2016 - 13:24:15: [SM] Native "GetClientTeam" reported: Client 4 is not in game
L 02/14/2016 - 13:24:15: [SM] Displaying call stack trace for plugin "DemoRecord.smx":
L 02/14/2016 - 13:24:15: [SM] [0] Line 31, C:\Users\МАКС\Downloads\DemoRecord.sp::RecordPanel()
L 02/14/2016 - 14:03:52: Error log file session closed.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Если автор не собирается дополнять плагин, используй Auto Demo Record v1.1. Оффтоп
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
@AlmazON, можно сделать как обычное приветствие когда заходишь на север.
 

SkorP1onS

Участник
Сообщения
156
Реакции
4
Оно перебьёт настоящее приветствие, разве нет? Да и это хитрость, суть то не меняется.
Ну у нас просто тупо воспроизводится 2 окна, 1 приветствие, закрываешь его, и потом окно с записью демки. - Трудностей это не вызывает.
Если можно, сделайте без согласия игрока)

UP - немного не заметил, в 17 посте, это без согласия игрока?)
UP2 - Спасибо, работает отлично)
 
Последнее редактирование:

Monomizer

Держу JDW в бане.
Сообщения
1,947
  • Команда форума
  • #19

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Вот кому надо, запись демо сразу при заходе на сервер. sm_auto_demo_url ссылка на мод окно, квар прописываем в server.cfg .
PHP:
new String:g_sMsg[PLATFORM_MAX_PATH], String:g_sHostname[150], String:g_sMap[32];

public Plugin:myinfo =
{
    name = "Auto demo",
    author = "Grey™ edit AlmazON",
    description = "Auto demo client",
    version = "1.2",
    url = "HLmod.ru"
};

public OnPluginStart()
{
    decl Handle:hCvar;
    GetConVarString(hCvar = CreateConVar("sm_auto_demo_url", "", ""), g_sMsg, PLATFORM_MAX_PATH);
    HookConVarChange(hCvar, AutoDemoUrlChange);
    HookConVarChange(hCvar = FindConVar("hostname"), HostName);
    GetConVarString(hCvar, g_sHostname, 150);
    CloseHandle(hCvar);
    HookEvent("player_activate", Event_PlayerActivate);
}

public AutoDemoUrlChange(Handle:convar, const String:oldValue[], const String:newValue[]) strcopy(g_sMsg, PLATFORM_MAX_PATH, newValue);

public HostName(Handle:convar, const String:oldValue[], const String:newValue[]) strcopy(g_sHostname, 150, newValue);

public OnConfigsExecuted()
{
    if (!GetCurrentMap(g_sMap, 32)) g_sMap = "MAP";
}

public Event_PlayerActivate(Handle:event, String:name[], bool:dontBroadcast) CreateTimer(0.2, start_demo, GetEventInt(event, "userid"));

public Action:start_demo(Handle:hTimer, any:userid)
{
    new iClient = GetClientOfUserId(userid);
    if (iClient && IsClientInGame(iClient))
    {
        decl String:sBuffer[192];
        WritePackCell(hTimer = CreateDataPack(), userid);
        FormatTime(sBuffer, 20, "%d.%m.%y|%H:%M:%S", userid = GetTime());
        WritePackString(hTimer, sBuffer);
        CreateTimer(10.0, advet_demo, hTimer, TIMER_DATA_HNDL_CLOSE|TIMER_FLAG_NO_MAPCHANGE);
        FormatTime(sBuffer, 20, "%d-%m-%y_%H-%M-%S", userid);
        if (Format(sBuffer, 192, "record save//%s_%s; joingame", sBuffer, g_sMap) > 14)
        {
            KvSetString(hTimer = CreateKeyValues("data"), "title", g_sHostname);
            KvSetString(hTimer, "type", "2");
            KvSetString(hTimer, "cmd", sBuffer);
            KvSetString(hTimer, "msg", g_sMsg);
            ShowVGUIPanel(iClient, "info", hTimer);
        }
        CloseHandle(hTimer);
    }
    return Plugin_Stop;
}

public Action:advet_demo(Handle:hTimer, Handle:hPack)
{
    ResetPack(hPack);
    new iClient = GetClientOfUserId(ReadPackCell(hPack));
    if (iClient)
    {
        decl String:sTime[20];
        ReadPackString(hPack, sTime, 20);
        TeamColorPrintToChat(iClient, "\x01\x04[\x03Team-Magic\x04]\x01: Запись демо началась \x03%s \x01на \x04%s", sTime, g_sMap);
        TeamColorPrintToChat(iClient, "\x01\x04[\x03Team-Magic\x04]\x01: Место хранения демок \x04cstrike/save");
    }
    return Plugin_Stop;
} 

stock TeamColorPrintToChat(client, const String:text[], any:...)
{
    decl String:buffer[192], player[1], Handle:h;
    player[0] = client;
    if ((h = StartMessage("SayText2", player, 1, 0)) != INVALID_HANDLE)
    {
        SetGlobalTransTarget(client);
        VFormat(buffer, 192, text, 3);
        BfWriteByte(h, client);
        BfWriteByte(h, true);
        BfWriteString(h, buffer);
        EndMessage();
    }
}
 
Сверху Снизу