Работа с панелями ( таблицами )|В этом уроке мы рассмотрим примеры и опкоды для работы с панелями.|wmysterio|wmysterio||||Думаю, Вы замечали панели покупок в магазине, где при выборе строки, например "Куртка с капюшоном" мы меняли скин CJ. Именно о таких панелях будет идти речь. Прежде всего создадим таблицу с двумя колонками и 4 строками:
Здесь ( опкод 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' - это специальный параметр. Его присутствие - знак того, что запись будет пустой. То есть её просто не выводят на экран, тем самым уменьшая высоту таблицы
Если сейчас у вас возникают трудности, то этот рисунок поможет вам представить как формируется таблица:
Как видите никакого "DUMMY" здесь нет. Но в опкодах его присутствие должно быть обязательно, если количество строк меньше 12. Пример строки обозначен зелёным цветом. Рассмотрим опкоды, связаны с панелями
Что бы изменить выравнивание текста в нужной колонке, используем:
08D6: set_panel $PANEL column 0 alignment 1
Здесь:
$PANEL - имя панели
0 - указываем номер строки
1 - смотрите описание к опкоду 08D4: alignment 1
Что бы записать в переменную номер выделенной ( активной ) строки, используем:
08D7: 0@ = panel $PANEL active_row
Что бы занести в переменную выбранную строку:
08D8: 0@ = panel $PANEL selected_row
Что бы запретить ( разрешить ) выбирать какую-то строку, используем опкод:
08D9: set_panel $PANEL row 2 enable 0
Здесь:
$PANEL - хэндл панельки
2 - номер нужной строки
0 - запретить выбирать эту строку ( если поставить 1 - то разрешить )
Можно также указать длину выбранной колонки:
Здесь:
$PANEL - имя переменной панельки
0 - указываем номер колонки
192 - указываем длину
Так же мы можем установить номер активной строки:
Здесь:
$PANEL - имя панельки
2 - указываем номер строки
Таким образом при появлении таблицы на экране, сразу будет выделена строка с номером 2.
× **ВАЖНО:** Никогда не используйте этот опкод в циклах, так как пользователь не сможет выбрать другую строку
Что бы убрать панель с экрана, используем:
Рассмотрим опкоды для вывода чисел в панельках. Вывод целого числа в панельке:
Здесь:
$PANEL - имя панельки
1 - указываем в которой колонке вывести число
3 - указываем в которой строке вывести число
'DOLLAR' - GXT-запись с выводом числа. Содержание записи, для примера, смотрите в таблице ниже
$NUMBER - переменная, которая содержит целое число, ибо можно просто указать число без перемененной
Пример записи
~1~
Цена: ~1~
Вывести 2-а целых чисела на панельку можно так:
Есть ещё специальные панели, использующиеся для автомобилей, но о них мы поговорим немного позже.
Давайте напишем простой пример для вызова таблицы и её использования. Например: при нажатии кнопки K`, появится панель одежды с её ценами, и при выборе пункта с нас будет забрано денюжку и СЖ получит одежду. Таким образом, в нас будет панель с 3-мя строками и 2-мя колонками.
Создадим необходимую GXT- или FXT-запись. Вот пример моей:
Записи, читаемые игрой
Перевод записей на русский
Далее напишем скрипт таблицы, с необходимыми условиями и параметрами:
В результате получится такая панелька:
Дальше необходимо создать цикл, к котором проверяются условия выбора строки, проверка денег, а так же условия, при которых убирается паньль с экрана. Сделает это:
Таким образом при выборе строки, СЖ будет одевать одежду со списка и с его счета будет снята сумма денег, если денег хватит конечно :)
Основная часть скрипта сделана. Теперь добавим пример скрипта в мейн: смотреть.
Наша задача решена! Но вы можете ( даже должны ) экспериментировать! Создать больше строк или колонок, написать другие условия или добавить комментарии внизу панели ;)|1403|1|0|69611556png640400400250``\|48891377png640204400127\|23140964`png`438`346`400`315|40273458png437347400`317``||rabota_s_paneljami_tablicami|1498996840
: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