[CS: Source] Auto Demo Record

jatow

Участник
Сообщения
15
Реакции
0
@mumuxtarka,
пробуй эту версию.

Вопрос! В название демки указывается время включения сервера, а не время начало записи. (сервер по расписанию в 7.00 рестартится) на демках время всегда 7.02. Если перезапустишь сервер в дргое время, то в демках будет указано время включения. Как это исправить?
Компилировал из 48 поста.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,145
Реакции
2,346
время начало записи
PHP:
#pragma semicolon 1
#include <sourcemod>

#define PATH_DEMO_RECORD	"SAVE"

new Handle:KV, Handle:ST,
	String:g_sMap[32];

public Plugin:myinfo = 
{
	name	=	"DemoRecord client",
	author	=	"Mumuxtarka & AlmazON edition",
	version	=	"1.3.1e"
};

public OnPluginStart()
{
	HookEvent("player_team", Event_PlayerTeam);
	KV = CreateKeyValues("DemoRecord");
	KvSetString(ST = CreateKeyValues("DemoStoped"), "msg", "[DemoRecord] Вы отказались от записи демо");
	KvSetString(ST, "cmd", "stop");
}

public OnConfigsExecuted() GetCurrentMap(g_sMap, sizeof(g_sMap));

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 Handle:panel, String:buffer[66];

	SetPanelTitle(panel = CreatePanel(), "[DemoRecord] Автоматическая запись демо");

	FormatEx(buffer, sizeof(buffer), "Добро пожаловать, %N!", client);
	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:
			{
				decl String:time_show[6], String:time_demo[17], String:message_record[256];

				FormatTime(time_show, sizeof(time_show), "%H:%M");
				FormatTime(time_demo, sizeof(time_demo), "%d-%m-%Y_%H-%M");
				FormatEx(message_record, sizeof(message_record), "stop;record %s/%s_%s", PATH_DEMO_RECORD, time_demo, g_sMap);
				KvSetString(KV, "cmd", message_record);

				FormatEx(message_record, sizeof(message_record), "[DemoRecord] Запись демо началась в %s на %s\n[DemoRecord] Место хранения демо css/cstrike/%s", time_show, g_sMap, PATH_DEMO_RECORD);

				KvSetString(KV, "msg", message_record);
				ShowVGUIPanel(client, "info", KV);
			}
			case 2:	ShowVGUIPanel(client, "info", ST);
			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, MENU_TIME_FOREVER);
	CloseHandle(panel);
}

public Select_Rules_Panel(Handle:panel, MenuAction:action, client, index)
{
	if (action == MenuAction_Select)
		WelcomePanel(client);
}
Где:
PATH_DEMO_RECORD "SAVE" - папка, в которую будут вестись записи демо-роликов.
 

jatow

Участник
Сообщения
15
Реакции
0
PHP:
#pragma semicolon 1
#include <sourcemod>

#define PATH_DEMO_RECORD    "SAVE"

new Handle:KV, Handle:ST,
    String:g_sMap[32];

public Plugin:myinfo =
{
    name    =    "DemoRecord client",
    author    =    "Mumuxtarka & AlmazON edition",
    version    =    "1.3.1e"
};

public OnPluginStart()
{
    HookEvent("player_team", Event_PlayerTeam);
    KV = CreateKeyValues("DemoRecord");
    KvSetString(ST = CreateKeyValues("DemoStoped"), "msg", "[DemoRecord] Вы отказались от записи демо");
    KvSetString(ST, "cmd", "stop");
}

public OnConfigsExecuted() GetCurrentMap(g_sMap, sizeof(g_sMap));

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 Handle:panel, String:buffer[66];

    SetPanelTitle(panel = CreatePanel(), "[DemoRecord] Автоматическая запись демо");

    FormatEx(buffer, sizeof(buffer), "Добро пожаловать, %N!", client);
    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:
            {
                decl String:time_show[6], String:time_demo[17], String:message_record[256];

                FormatTime(time_show, sizeof(time_show), "%H:%M");
                FormatTime(time_demo, sizeof(time_demo), "%d-%m-%Y_%H-%M");
                FormatEx(message_record, sizeof(message_record), "stop;record %s/%s_%s", PATH_DEMO_RECORD, time_demo, g_sMap);
                KvSetString(KV, "cmd", message_record);

                FormatEx(message_record, sizeof(message_record), "[DemoRecord] Запись демо началась в %s на %s\n[DemoRecord] Место хранения демо css/cstrike/%s", time_show, g_sMap, PATH_DEMO_RECORD);

                KvSetString(KV, "msg", message_record);
                ShowVGUIPanel(client, "info", KV);
            }
            case 2:    ShowVGUIPanel(client, "info", ST);
            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, MENU_TIME_FOREVER);
    CloseHandle(panel);
}

public Select_Rules_Panel(Handle:panel, MenuAction:action, client, index)
{
    if (action == MenuAction_Select)
        WelcomePanel(client);
}
Где:
PATH_DEMO_RECORD "SAVE" - папка, в которую будут вестись записи демо-роликов.

Благодарю, всё работает исправно.
 

Длинный204

Участник
Сообщения
39
Реакции
1
Хм мне кажется будет лучше без согласия писать демо . Вошел игрок пошла запись , чтобы Читер этого незнал . Я думаю так лучше будет . Но за плагин спасибо
 

vovchik21rus

Участник
Сообщения
9
Реакции
0
public Plugin:myinfo =
{
name = "DemoRecord client",
author = "Mumuxtarka & AlmazON edition",
version = "1.3.1e"
};

public
OnPluginStart()
{
HookEvent("player_team", Event_PlayerTeam);
KV = CreateKeyValues("DemoRecord");
KvSetString(ST = CreateKeyValues("DemoStoped"), "msg", "[DemoRecord] Вы отказались от записи демо");
KvSetString(ST, "cmd", "stop");
}

Извините,а после } этот символ нужен ; ?
 

П@Ц@Н4Ик

Участник
Сообщения
1
Реакции
0
Как исправить?

L 08/24/2020 - 19:07:07: [SM] Exception reported: Client index 0 is invalid
L 08/24/2020 - 19:07:07: [SM] Blaming: DemoRecord.smx
L 08/24/2020 - 19:07:07: [SM] Call stack trace:
L 08/24/2020 - 19:07:07: [SM] [0] GetClientUserId
L 08/24/2020 - 19:07:07: [SM] [1] Line 38, C:\Users\1\Desktop\addons\sourcemod\scripting\DemoRecord.sp::RecordPanel
 

DENZEL519

Участник
Сообщения
62
Реакции
10
А для последней css не реально такое сделать?
 
Сверху