> For the complete documentation index, see [llms.txt](https://lessons.sannybuilder.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lessons.sannybuilder.com/00100/00200/00044.-rabota-s-panelyami-tablicami.md).

# 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
