v1.2.2: фикс лог-файла (OpenFile вместо LogToFileEx) + HUD overlay backup для MOTD
- Лог: переход на OpenFile с относительным путём — на MyArena LogToFileEx с absolute путём от BuildPath молча не создавал файл - MOTD: используется стандартный ShowMOTDPanel (правильный KeyValues format) - Добавлен гарантированный HUD-overlay в центре экрана с названием+описанием режима (~6 сек). Покажется даже если клиент отключил HTML MOTD
This commit is contained in:
@@ -33,7 +33,7 @@ public Plugin myinfo =
|
||||
name = "ArcaneGame Custom Rounds Core",
|
||||
author = "deidara.dev",
|
||||
description = "Core plugin for custom rounds with AG Coin integration",
|
||||
version = "1.2.1",
|
||||
version = "1.2.2",
|
||||
url = "https://deidara.dev"
|
||||
};
|
||||
|
||||
@@ -1226,14 +1226,9 @@ void ShowFreezeImageToAll(CustomRoundType mode)
|
||||
char url[256];
|
||||
Format(url, sizeof(url), "%s%s.html", CR_MOTD_BASE_URL, slug);
|
||||
|
||||
char title[64];
|
||||
char title[64], description[128];
|
||||
GetRoundDisplayName(mode, title, sizeof(title));
|
||||
|
||||
KeyValues kv = new KeyValues("data");
|
||||
kv.SetString("title", title);
|
||||
kv.SetNum("type", 2); // MOTDPANEL_TYPE_URL
|
||||
kv.SetString("msg", url);
|
||||
kv.SetNum("customsvr", 1);
|
||||
GetRoundDescription(mode, description, sizeof(description));
|
||||
|
||||
for (int i = 1; i <= MaxClients; i++)
|
||||
{
|
||||
@@ -1241,10 +1236,33 @@ void ShowFreezeImageToAll(CustomRoundType mode)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ShowVGUIPanel(i, "info", kv, true);
|
||||
}
|
||||
|
||||
delete kv;
|
||||
// 1) Попытка показать MOTD-картинку (требует cl_disablehtmlmotd 0 на клиенте)
|
||||
ShowMOTDPanel(i, title, url, MOTDPANEL_TYPE_URL);
|
||||
|
||||
// 2) Гарантированный визуальный fallback — большой текст в центре экрана
|
||||
// Покажется даже если у клиента отключён HTML MOTD
|
||||
SetHudTextParams(-1.0, 0.18, 6.0, 255, 140, 0, 100, 0, 0.3, 0.3, 0.5);
|
||||
ShowHudText(i, -1, "★ КАСТОМНЫЙ РАУНД ★\n%s\n\n%s", title, description);
|
||||
}
|
||||
}
|
||||
|
||||
void GetRoundDescription(CustomRoundType roundType, char[] buffer, int maxlen)
|
||||
{
|
||||
switch (roundType)
|
||||
{
|
||||
case CR_AWP: strcopy(buffer, maxlen, "Только AWP и нож");
|
||||
case CR_NoScope: strcopy(buffer, maxlen, "AWP без прицела");
|
||||
case CR_HE: strcopy(buffer, maxlen, "Только гранаты HE, бесконечный боезапас");
|
||||
case CR_Knife: strcopy(buffer, maxlen, "Только ножи");
|
||||
case CR_Scout: strcopy(buffer, maxlen, "Только SSG-08 и нож");
|
||||
case CR_ScoutNoScope: strcopy(buffer, maxlen, "Scout без прицела");
|
||||
case CR_Deagle: strcopy(buffer, maxlen, "Только Deagle и нож");
|
||||
case CR_DeagleHS: strcopy(buffer, maxlen, "Только хедшоты наносят урон");
|
||||
case CR_LowGravity: strcopy(buffer, maxlen, "Низкая гравитация");
|
||||
case CR_OneHP: strcopy(buffer, maxlen, "У всех 1 HP");
|
||||
default: strcopy(buffer, maxlen, "");
|
||||
}
|
||||
}
|
||||
|
||||
void LogCRAction(int client, const char[] format, any ...)
|
||||
@@ -1252,9 +1270,6 @@ void LogCRAction(int client, const char[] format, any ...)
|
||||
char message[256];
|
||||
VFormat(message, sizeof(message), format, 3);
|
||||
|
||||
char path[PLATFORM_MAX_PATH];
|
||||
BuildPath(Path_SM, path, sizeof(path), CR_LOG_FILE);
|
||||
|
||||
char timestamp[32];
|
||||
FormatTime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S");
|
||||
|
||||
@@ -1283,9 +1298,20 @@ void LogCRAction(int client, const char[] format, any ...)
|
||||
strcopy(roleTag, sizeof(roleTag), "REG");
|
||||
}
|
||||
|
||||
// Дублируем в стандартный SM лог (L<date>.log) — для гарантии что запись проходит
|
||||
// Стандартный SM лог — для надёжности на shared-хостингах
|
||||
LogMessage("[CR] [%s] %s (%s) -> %s [раунд %d]", roleTag, adminName, adminSteam, message, g_RoundCounter);
|
||||
|
||||
// Основной лог в отдельный файл
|
||||
LogToFileEx(path, "[%s] [%s] %s (%s) -> %s [раунд %d]", timestamp, roleTag, adminName, adminSteam, message, g_RoundCounter);
|
||||
// Свой файл — через OpenFile с относительным путём (LogToFileEx с absolute путём от BuildPath
|
||||
// на MyArena не создавал файл).
|
||||
File logFile = OpenFile("addons/sourcemod/logs/custom_rounds.log", "a");
|
||||
if (logFile != null)
|
||||
{
|
||||
logFile.WriteLine("[%s] [%s] %s (%s) -> %s [раунд %d]",
|
||||
timestamp, roleTag, adminName, adminSteam, message, g_RoundCounter);
|
||||
delete logFile;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogError("[CR] Не удалось открыть addons/sourcemod/logs/custom_rounds.log на запись.");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user