Настройки сервера и песочницы разложены по разделам
Полторы сотни параметров сплошным списком читать невозможно. Теперь они разбиты на разделы — «Основное», «PVP и урон», «Убежища», «Античит» и так далее, — свёрнутые по умолчанию, кроме первого. Поиск раскрывает разделы с совпадениями и прячет остальные, а раскрытые разделы не схлопываются при возврате на вкладку. Категории составлены по настоящим конфигам Build 41 и 42: все 144 ключа .ini и 270 параметров песочницы раскладываются без остатка. Нумерованные и однотипные ключи (AntiCheatProtectionType1..24, *Loot, Animal*, Firearm*) подхватываются по префиксу, а незнакомые попадают в «Прочее» — в новых версиях игры ключи добавляют, и терять их со страницы нельзя. Описания параметров панель больше не выдумывает, а берёт из самого конфига: игра пишет их комментариями на языке сервера. Полный текст — во всплывающей подсказке, начало — под полем; поиск ищет и по описанию, так что параметр можно найти по-русски. Заодно исправлено сохранение файлов с виндовыми переводами строк: панель переписывала их в LF, и правка одного параметра меняла каждую строку файла. Проверено на реальном SandboxVars.lua: правка одного значения меняет ровно одну строку, размер файла не меняется. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -154,3 +154,34 @@ func TestSandboxEntriesFollowFileOrder(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestKeepsWindowsLineEndings: конфиги, созданные игрой на Windows, приходят с
|
||||
// CRLF. Если при сохранении переписать их в LF, изменится каждая строка файла —
|
||||
// правка одного параметра превратится в полную перезапись.
|
||||
func TestKeepsWindowsLineEndings(t *testing.T) {
|
||||
ini := ParseINI([]byte("# Комментарий\r\nMaxPlayers=32\r\nPVP=true\r\n"))
|
||||
ini.Set("MaxPlayers", "64")
|
||||
|
||||
got := string(ini.Render())
|
||||
if strings.Count(got, "\r\n") != 3 {
|
||||
t.Errorf("переводы строк не сохранены:\n%q", got)
|
||||
}
|
||||
if strings.Contains(strings.ReplaceAll(got, "\r\n", ""), "\n") {
|
||||
t.Errorf("в файле появились одиночные LF:\n%q", got)
|
||||
}
|
||||
|
||||
// Файл с LF таким и остаётся.
|
||||
unix := ParseINI([]byte("MaxPlayers=32\nPVP=true"))
|
||||
unix.Set("PVP", "false")
|
||||
if strings.Contains(string(unix.Render()), "\r") {
|
||||
t.Error("в файл с LF добавились CR")
|
||||
}
|
||||
|
||||
sandbox := ParseSandbox([]byte("SandboxVars = {\r\n Zombies = 3,\r\n}\r\n"))
|
||||
if err := sandbox.Set("Zombies", "1"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if strings.Count(string(sandbox.Render()), "\r\n") != 3 {
|
||||
t.Errorf("песочница потеряла CRLF:\n%q", string(sandbox.Render()))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user