# 00044. Работа с панелями ( таблицами )

Работа с панелями ( таблицами )|В этом уроке мы рассмотрим примеры и опкоды для работы с панелями.|wmysterio|wmysterio||||Думаю, Вы замечали панели покупок в магазине, где при выборе строки, например "Куртка с капюшоном" мы меняли скин CJ. Именно о таких панелях будет идти речь. Прежде всего создадим таблицу с двумя колонками и 4 строками:

```
08D4: $PANEL = create_panel_with_title 'GXTNAME' position 29.0 170.0 width 180.0 columns 2 interactive 1 background 1 alignment 1
08DB: set_panel $PANEL column 0 header 'GXTHED1' data 'GXTROW1' 'ЗАПИСЬ 2' 'ЗАПИСЬ 3' 'ЗАПИСЬ 4' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
08DB: set_panel $PANEL column 1 header 'ЗАГОЛОВОК 2' data 'ЗАПИСЬ 5' 'ЗАПИСЬ 6' 'ЗАПИСЬ 7' 'ЗАПИСЬ 8' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 
```

Здесь ( опкод 08D4 ):\
$PANEL - указывает переменную в которой будет храниться панель\
GXTNAME - указываем имя таблицы ( см. рисунок ниже: "Имя таблицы" )\
29.0 170.0 - указываем место на экране, где должна появится таблица\
180.0 - указываем длину таблицы\
columns 2 - указываем количество колонок в нашей таблице\
interactive 1 - даёт возможность выбирать строки в таблице, если поставить 0 - то только просмотр\
background 1 - обозначает цвет таблицы. Если поставить 1 - то таблица будет чёрная с небольшой прозрачностью, если поставить 0 - то будет прозрачной\
alignment 1 - указывает стиль записей. Если поставить 1 - записи будут выравниваться по левому краю, если 0, то по-центруЗдесь ( опкод 08DB ):\
$PANEL - указывает переменную в которой будет храниться панель\
column 0 - указываем номер колонки для создания строк. Номера колонок всегда начинаются с нуля!\
GXTHED1 - указываем заголовок для каждой из колонок ( см. рисунок ниже: "Заголовок 1" )\
GXTROW1 - указываем названия для строк по очереди ( см. рисунок ниже: "Запись 1" ). Тексты будут расположены именно так, в каком порядке вы их задали\
'DUMMY' - это специальный параметр. Его присутствие - знак того, что запись будет пустой. То есть её просто не выводят на экран, тем самым уменьшая высоту таблицы

Если сейчас у вас возникают трудности, то этот рисунок поможет вам представить как формируется таблица:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/48891377.png)

Как видите никакого "DUMMY" здесь нет. Но в опкодах его присутствие должно быть обязательно, если количество строк меньше 12. Пример строки обозначен зелёным цветом. Рассмотрим опкоды, связаны с панелями

Что бы изменить выравнивание текста в нужной колонке, используем:

```
08D6: set_panel $PANEL column 0 alignment 1
```

Здесь:\
$PANEL - имя панели\
0 - указываем номер строки\
1 - смотрите описание к опкоду 08D4: alignment 1<br>

Что бы записать в переменную номер выделенной ( активной ) строки, используем:

```
08D7: 0@ = panel $PANEL active_row
```

Что бы занести в переменную выбранную строку:

```
08D8: 0@ = panel $PANEL selected_row
```

Что бы запретить ( разрешить ) выбирать какую-то строку, используем опкод:

```
08D9: set_panel $PANEL row 2 enable 0
```

Здесь:\
$PANEL - хэндл панельки\
2 - номер нужной строки\
0 - запретить выбирать эту строку ( если поставить 1 - то разрешить )

Можно также указать длину выбранной колонки:

```
09DB: set_panel $PANEL column 0 width 192
```

Здесь:\
$PANEL - имя переменной панельки\
0 - указываем номер колонки\
192 - указываем длину<br>

Так же мы можем установить номер активной строки:

```
090E: set_panel $PANEL active_row 2
```

Здесь:\
$PANEL - имя панельки\
2 - указываем номер строки

Таким образом при появлении таблицы на экране, сразу будет выделена строка с номером 2.

× \*\*ВАЖНО:\*\* Никогда не используйте этот опкод в циклах, так как пользователь не сможет выбрать другую строку

Что бы убрать панель с экрана, используем:

```
08DA: remove_panel $PANEL
```

Рассмотрим опкоды для вывода чисел в панельках. Вывод целого числа в панельке:

```
08EE: set_panel $PANEL column 1 row 3 text_1number GXT 'DOLLAR' number $NUMBER // $~1~
```

Здесь:\
$PANEL - имя панельки\
1 - указываем в которой колонке вывести число\
3 - указываем в которой строке вывести число\
'DOLLAR' - GXT-запись с выводом числа. Содержание записи, для примера, смотрите в таблице ниже\
$NUMBER - переменная, которая содержит целое число, ибо можно просто указать число без перемененной

| Пример записи |
| ------------- |
| \~1\~         |
| Цена: \~1\~   |

Вывести 2-а целых чисела на панельку можно так:

```
08EF: set_panel 206@ column 2 row 34@ text_2numbers GXT 'DES1_66' numbers 48@ 49@ // ~1~ : ~1~
```

Есть ещё специальные панели, использующиеся для автомобилей, но о них мы поговорим немного позже.

Давайте напишем простой пример для вызова таблицы и её использования. Например: при нажатии кнопки K\`, появится панель одежды с её ценами, и при выборе пункта с нас будет забрано денюжку и СЖ получит одежду. Таким образом, в нас будет панель с 3-мя строками и 2-мя колонками.

Создадим необходимую GXT- или FXT-запись. Вот пример моей:

| Записи, читаемые игрой                                                                   | Перевод записей на русский                                                               |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| ![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/23140964.png) | ![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/40273458.png) |

Далее напишем скрипт таблицы, с необходимыми условиями и параметрами:

```
:TABLE
wait 0
08D4: $PANEL = create_panel_with_title 'TABNAME' position 20.0 20.0 width 150.0 columns 2 interactive 1 background 1 alignment 1
09DB: set_panel $PANEL column 0 width 100
09DB: set_panel $PANEL column 1 width 50
08DB: set_panel $PANEL column 0 header 'TABHEA1' data 'TABROW1' 'TABROW2' 'TABROW3' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
08DB: set_panel $PANEL column 1 header 'TABHEA2' data 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY'
08EE: set_panel $PANEL column 1 row 0 text_1number GXT 'TABMONE' number 1200
08EE: set_panel $PANEL column 1 row 1 text_1number GXT 'TABMONE' number 800
08EE: set_panel $PANEL column 1 row 2 text_1number GXT 'TABMONE' number 300
```

В результате получится такая панелька:

![](https://github.com/wmysterio/scm-scripting-lessons/raw/resources/_pu/0/69611556.png)

Дальше необходимо создать цикл, к котором проверяются условия выбора строки, проверка денег, а так же условия, при которых убирается паньль с экрана. Сделает это:

```
:TABLE_1
wait 0
08D7: 0@ = panel $PANEL active_row
1@ = player.Money($PLAYER_CHAR)

if OR
actor.Dead($PLAYER_ACTOR)
0741: actor $PLAYER_ACTOR busted
0AB0: key_pressed 13 // ENTER
then
jump @TABLE_2
end

if AND
0@ == 0 // Выбрана строка 0
0AB0: key_pressed 32 // SPACE
then
 if
 1@ > 1199
 then
 Player.SetClothes($PLAYER_CHAR, "WORKTRCAMOGRN", "WORKTR", 2)
 Player.Build($PLAYER_CHAR)
 player.Money($PLAYER_CHAR) += -1200
 jump @TABLE_2
 end
end

if AND
0@ == 1 // Выбрана строка 1
0AB0: key_pressed 32 // SPACE
then
 if
 1@ > 799
 then
 Player.SetClothes($PLAYER_CHAR, "TSHIRTERISORN", "TSHIRT", 0)
 Player.Build($PLAYER_CHAR)
 player.Money($PLAYER_CHAR) += -800
 jump @TABLE_2
 end
end

if AND
0@ == 2 // Выбрана строка 2
0AB0: key_pressed 32 // SPACE
then
 if
 1@ > 299
 then
 Player.SetClothes($PLAYER_CHAR, "bandred", "bandana", 16)
 Player.Build($PLAYER_CHAR)
 player.Money($PLAYER_CHAR) += -300
 jump @TABLE_2
 end
end

jump @TABLE_1

:TABLE_2
wait 0
08DA: remove_panel $PANEL
```

Таким образом при выборе строки, СЖ будет одевать одежду со списка и с его счета будет снята сумма денег, если денег хватит конечно :)

Основная часть скрипта сделана. Теперь добавим пример скрипта в мейн: [смотреть](https://github.com/wmysterio/scm-scripting-lessons/blob/main/data_base/sa/TABLE.txt).

Наша задача решена! Но вы можете ( даже должны ) экспериментировать! Создать больше строк или колонок, написать другие условия или добавить комментарии внизу панели ;)|1403|1|0|69611556`png`640`400`400`250``\|48891377`png`640`204`400`127``\|23140964`png`438`346`400`315``|40273458`png`437`347`400\`317\`\`||rabota\_s\_paneljami\_tablicami|1498996840


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00100/00200/00044.-rabota-s-panelyami-tablicami.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
