Описания параметров на русском независимо от локали сервера
Панель показывала комментарии из самого конфига, а игра пишет их на языке сервера: на Windows-клиенте они русские, на Linux-сервере почти всегда английские — и вся вкладка оказывалась на английском. Теперь у панели свой словарь: подпись и описание для всех 153 параметров servertest.ini, встречающихся в Build 41 и 42, плюс подписи для 182 параметров песочницы. Комментарий из файла остаётся запасным вариантом для ключей, которых словарь не знает, — в новых версиях игры их добавляют. Песочница заодно научилась отдавать свои комментарии: игра расписывает там смысл каждого значения, и даже английский текст лучше пустоты. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,9 @@ import (
|
||||
type SandboxEntry struct {
|
||||
Path string `json:"path"`
|
||||
Value string `json:"value"`
|
||||
// Comment — строки "--" перед параметром: игра расписывает там смысл
|
||||
// значения и расшифровку вариантов.
|
||||
Comment string `json:"comment,omitempty"`
|
||||
}
|
||||
|
||||
// Sandbox — разбор <server>_SandboxVars.lua. Файл генерируется игрой и имеет
|
||||
@@ -24,6 +27,8 @@ type Sandbox struct {
|
||||
lines []string
|
||||
// index сопоставляет путь параметра с номером строки.
|
||||
index map[string]int
|
||||
// comments хранит описание параметра по его пути.
|
||||
comments map[string]string
|
||||
// crlf — файл был с виндовыми переводами строк; сохраняем как было.
|
||||
crlf bool
|
||||
}
|
||||
@@ -35,16 +40,24 @@ var (
|
||||
|
||||
// ParseSandbox разбирает содержимое SandboxVars.lua.
|
||||
func ParseSandbox(data []byte) *Sandbox {
|
||||
s := &Sandbox{index: make(map[string]int)}
|
||||
s := &Sandbox{index: make(map[string]int), comments: make(map[string]string)}
|
||||
raw := string(data)
|
||||
s.crlf = strings.Contains(raw, "\r\n")
|
||||
text := strings.ReplaceAll(raw, "\r\n", "\n")
|
||||
s.lines = strings.Split(text, "\n")
|
||||
|
||||
var stack []string
|
||||
// Комментарии копим до ближайшего параметра, как и в .ini.
|
||||
var comment []string
|
||||
|
||||
for n, line := range s.lines {
|
||||
trimmed := strings.TrimSpace(line)
|
||||
if trimmed == "" || strings.HasPrefix(trimmed, "--") {
|
||||
if strings.HasPrefix(trimmed, "--") {
|
||||
comment = append(comment, strings.TrimSpace(strings.TrimPrefix(trimmed, "--")))
|
||||
continue
|
||||
}
|
||||
if trimmed == "" {
|
||||
comment = nil
|
||||
continue
|
||||
}
|
||||
if sandboxCloseRe.MatchString(line) {
|
||||
@@ -66,6 +79,7 @@ func ParseSandbox(data []byte) *Sandbox {
|
||||
} else {
|
||||
stack = stack[:0]
|
||||
}
|
||||
comment = nil
|
||||
continue
|
||||
}
|
||||
path := name
|
||||
@@ -73,6 +87,10 @@ func ParseSandbox(data []byte) *Sandbox {
|
||||
path = strings.Join(stack, ".") + "." + name
|
||||
}
|
||||
s.index[path] = n
|
||||
if len(comment) > 0 {
|
||||
s.comments[path] = strings.Join(comment, " ")
|
||||
}
|
||||
comment = nil
|
||||
}
|
||||
return s
|
||||
}
|
||||
@@ -99,7 +117,11 @@ func (s *Sandbox) Entries() []SandboxEntry {
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
out = append(out, SandboxEntry{Path: path, Value: s.valueAt(n)})
|
||||
out = append(out, SandboxEntry{
|
||||
Path: path,
|
||||
Value: s.valueAt(n),
|
||||
Comment: s.comments[path],
|
||||
})
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user