![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
доброго времени суток.
Пытаюсь сделать эдитор файла для игры CS 1.6 "CommandMenu.txt". Сам файл который нужно редактировать выглядит таким образом: Код:
"1" "ADD ZBOT"
{
"1" "Quick add zbot" "bot_add"
"2" "Set zbot"
{
"1" "Easy" "bot_difficulty 0"
"2" "Normal" "bot_difficulty 1"
"3" "Hard" "bot_difficulty 2"
"5" "Expert" "bot_difficulty 3"
}
"3" "Add a specific zbot"
{
"1" "Add a terrorist" "bot_add_t"
"2" "Add a counter-terrorist" "bot_add_ct"
}
"4" "add 7x8 team" "exec addbot.cfg"
}
"2" "ZBOT MISC"
{
"1" "Endround" "bot_kill"
"2" "Kick all (or 'bot_kick name')" "bot_kick"
"3" "ZBot quota"
{
"1" "min 12" "bot_quota 12"
"2" "min 14" "bot_quota 14"
"3" "min 16" "bot_quota 16"
"4" "min 18 " "bot_quota 18"
"5" "min 20" "bot_quota 20"
}
....
....
....
}![]() Во первых, как называется данный язык с блоками? Мне нужно в программе создать древовидную структуру, и сохранять её как в файле, со скобочками и тд.. Как мне правильнее это сделать? Использовать TreeView, или есть что-то более подходящее? И как всё таки называется этот язык с блоками? |
|
#2
|
|||
|
|||
|
Да нет такого языка. Это что-то специфическое.
В принцпе, не самая сложная структура. Узел дерева либо содержит строку, либо список (я имею в виду 3й параметр). Да, для отображения лучше использовать что-то вроде TTreeView. Вообще, видел компоненты, реализующие что-то типа TTreeList, т.е. дерево с колонками в итемах. Вроде, TVirtualTreeView позволяет твкое делать, но сам с ним не работал (не нужно было пока). Сохранять можно просто обходом дерева. Код:
// Класс с данными, привязанный к TTreeNode.Data
type
TCommandNode = class
Number : String;
Name : String;
Command : String;
end;
...
function toString(Node : TTreeNode) : String;
var
d : TCommandNode;
i : Integer;
begin
d := TCommandNode(Node.Data);
result := Format('"%s" "%s"',[d.Number,d.Name]);
If (Node.Items.Count = 0 Then
result := result + Format(' "%s"'#13#10,[d.Command])
Else
Begin
result := result + #13#10 + '{' + #13#10;
For I := 0 To Node.Items.Count Do
result := result + toString(Node.Items[i]);
result := result + '}' + #13#10;
End;
end;Как-то так. Не проверял и писал по памяти, но суть должна быть понятна. Параметр вызова - корневой узел дерева. Если из несколько, то надо в цикле перебрать их все и результат объединипть. Последний раз редактировалось lmikle, 17.09.2022 в 00:34. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Gareth (12.09.2022)
| ||