Как сделать?
…
dmvikar,
Проверил, работает. Спасибо за решение.
А почему не рекомендуется использовать массив для строковых и числовых значений одновременно? Какие подводные?
dmvikar:
ARRITEM - это для версии 5.8.0. Сейчас есть только qspider для этой версии.
нет. Уже вышел классический 5.8.0. :P
dmvikar:
Массив в версии 5.7.0 крайне не рекомендуется использовать для строковых и числовых значений одновременно. в 5.8.0 это невозможно.
studentik:
А почему не рекомендуется использовать массив для строковых и числовых значений одновременно? Какие подводные?
Здесь имеется ввиду возможность в одну ячейку запихнуть и текстовое и числовое значение:
$mass[0]='текст' & mass[0]=137
В 5.7.0 оба значения будут лежать в нулевой ячейке, но в 5.8.0. в данном случае окажется только числовое.
Но вообще хранить одновременно в одном массиве и числовые и текстовые значения неудобно. Это не рекомендуется делать, чтобы избегать проблем с кодом при расширении проекта. Допустим нужно вывести все значения массива на экран, а у тебя в нём и числовые значения, среди которых может быть 0, и текстовые, среди которых может быть пустая строка. Вывести значения такого массива на экран уже проблематично.
Aleks Versus:
нет. Уже вышел классический 5.8.0. :P
Уже релиз? Или пока только Бета 7?
Aleks Versus:
Но вообще хранить одновременно в одном массиве и числовые и текстовые значения неудобно. Это не рекомендуется делать, чтобы избегать проблем с кодом при расширении проекта. Допустим нужно вывести все значения массива на экран, а у тебя в нём и числовые значения, среди которых может быть 0, и текстовые, среди которых может быть пустая строка. Вывести значения такого массива на экран уже проблематично.
Спасибо за разъяснение, а то мне показалось, что это некое ограничение QSP, из-за которого плеер может вылететь с ошибкой - независимо от того, насколько я осторожен с данными :)
studentik:
Уже релиз? Или пока только Бета 7?
пока только бета, но это Байт осторожничает. Все ошибки, которые пока всплывали, были общие для библиотеки 5.8.0, он их уже устранил, новых ошибок за почти пол года не нашли.
Справка на вики переписана под плееры версии 5.8.0. Можно смело пользоваться. Чем больше людей начнут пользоваться, тем быстрее бета станет полноценным релизом.
Aleks Versus,
Скачал 5.8.0, пока вроде никаких проблем нет с игрой, написанной для 5.7.0.
Другой вопрос: когда-нибудь будет изменена работа menu на более удобную? Я имею в виду обработку самих пунктов, где вместо параметра “название локации” можно было бы писать код для динамического выполнения БЕЗ посещения какой-либо локации, потому что это накладывает кучу ограничений и плодит кучу ненужных локаций в игре. Да, я понимаю, что в локацию-обработчик передается параметр с индексом нажатого пункта меню, но если мне это не надо? Допустим, мне нужно изменить одну переменную или вызвать одну функцию - в зависимости от игровой ситуации, мне для этого придется дополнительно как-то эту ситуацию отдельно программировать в условиях локации-обработчика, чтобы в игре произошло то, что нужно. В то время как если бы у меню было поведение аналогичное гиперссылке с exec, мне достаточно было бы в параметре “название локации” написать только то, что нужно, без всяких костылей.
Меню ведь сами по себе очень полезные, информативные и компактные, но очень ограниченные и неудобные в плане работы с ними - уверен, что именно поэтому они так мало встречаются в играх на QSP.
studentik,
это не ко мне вопрос, это к Байту. :) Лучше зайти в Дискорд на канал qsp_dev и там тегнуть Байта и спросить. Но я сразу вижу ограничение твоего варианта: в коде для пункта меню нельзя будет использовать двоеточие, а захочется. И начнутся претензии к Байту, почему он это не предусмотрел.
Вообще, ты мог бы и сам реализовать нужный тебе функционал. Есть костыльный вариант: засунуть код пункта вместо пути к изображению:
$stone_menu[0]='Взять камень:run_code:stone+=1 & pl"Взял камень"'
$stone_menu[1]='Выбросить камень:run_code:stone-=1 & pl"Выбросил камень"'
act "Камень": menu "$stone_menu"
При выборе пункта будет вызываться локация, которая будет извлекать код на выполнение и запускать его:
!# run_code
! получаем индекс пункта в массиве
local index = args[0]-1
! получаем пункт меню
local $menu_item = $stone_menu[index]
! локальные переменные
local $code, in_string
! проходимся циклом и вырезаем последнюю часть (с кодом) из пункта
loop local run=1 while run:
in_string = instr($menu_item, ':')
if in_string <> 0:
$menu_item = $mid($menu_item, in_string+1)
else:
$code = $menu_item
run = 0
end
end
if $code<>'': dynamic $code
Но этот вариант мне сразу не нравится, он костыльный и неудобный. Плюс ограничение на двоеточие. Я бы сделал такой вариант:
! первый пункт меню
$stone_menu[0]='Взять камень:run_code'
$stone_menu_code[0]={
stone+=1
pl "Взял камень."
pl "Теперь у меня <<stone>> камней."
}
! второй пункт меню
$stone_menu[1]='Выбросить камень:run_code'
$stone_menu_code[1]={
stone-=1
pl "Выбросил камень."
pl "Теперь у меня <<stone>> камней."
}
act "Камень": menu "$stone_menu"
!# run_code
! получаем индекс пункта в массиве
local index = args[0]-1
! получаем код
local $code = $stone_menu_code[index]
if $code<>'': dynamic $code
Есть ещё вариант. Делаем надстройку над оператором menu, не вызывая его напрямую, а через обращение к отдельной локации. Тогда ты можешь в массив с пунктами меню вообще запихивать всё, что пожелаешь (как это было в первом варианте, например), а уже на этой локации вытаскивать информацию из пунктов, распихивать по специально отведённым массивам и после выбора пунктов меню выполнять тот или иной код из этих массивов.
Короче, вариантов масса, и ты их можешь сделать сам, чтобы облегчить жизнь себе.
Aleks Versus,
Примерно так я и решил проблему, определив для себя заранее переменную для выполнения кода через dynamic в локации-обработчике, и заполняя ее “на лету” необходимым кодом.
Я согласен, что варианты есть (я не говорил, что их нет), но подобные костыли очень часто раздувают код, который впоследствии становится трудно читать. Как всегда, хотелось бы более простого и изящного решения.
Подскажите, пожалуйста, есть ли функция для получения суммы (содержимого) всех ячеек массива? Что-то не могу найти ничего похожего в справке.
ss4,
таких функций в самом плеере нет, но ты всегда можешь написать собственную функцию: https://wiki.qsp.org/help:organizing
Также можешь воспользоваться уже написанной функцией из моей библиотечки easy.math:
Aleks Versus,
Спасибо! Очень помогло.
по какой то неведомой причине, финальное отображение кнопки не появляется после проверки там где нужно, а тупо оказывается под таблицей мож я тупой, или синтаксис поменялся?
КОД
Spoiler
*nl'<table border="0" cellpadding="0" cellspacing="0"/>'
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/1.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/2.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/3.png" /></td>'
*p'</tr>'
if 0 = 0:
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/4.png" /></td>'
*p "<a href='EXEC: a = 1 & gosub ""Gmenu"" '>"+"<img src='pic/Other/GSmenu/5.png' ></a>"
*p'<td><img src="pic/Other/GSmenu/6.png" /></td>'
*p'</tr>'
end
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/7.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/8.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/9.png" /></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/10.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/11.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/12.png" /></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/13.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/14.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/15.png" /></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/16.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/17.png" /></td>'
*p'<td><img src="pic/Other/GSmenu/18.png" /></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/19.gif" /></td>'
*p'<td><img src="pic/Other/GSmenu/20.gif" /></td>'
*p'<td><img src="pic/Other/GSmenu/21.gif" /></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img src="pic/Other/GSmenu/22.gif" /></td>'
*p'<td><img src="pic/Other/GSmenu/23.gif" /></td>'
*p'<td><img src="pic/Other/GSmenu/24.gif" /></td>'
*p'</tr>'
*p'</table>'
Результат
Spoiler
Справился сам
Spoiler
*p' <table align="center" border="0" cellpadding="0" cellspacing="0">'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/1.png" style="width: 250px;"></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/2.png" style="width: 167px;"></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/3.png" style="width: 265px;"></td>'
*p' </tr>'
*p' <tr border="0" cellpadding="0" cellspacing="0">'
*p' <td style="height: 29px"><img alt="" src="pic/Other/GSmenu/4.png" style="width: 250px; height: 29px;"></td>'
*p' <td><a href="EXEC: temp = 5 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/5.png" style="height: 29px; width: 167px;"></a></td>'
*p' <td style="height: 29px"><img alt="" src="pic/Other/GSmenu/6.png" style="width: 265px; height: 29px;"></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/7.png" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 8 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/8.png" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/9.png" style="width: 265px;"></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/10.png" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 11 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/11.png" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/12.png" style="width: 265px;"></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/13.png" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 14 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/14.png" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/15.png" style="width: 265px;"></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/16.png" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 17 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/17.png" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/18.png" style="width: 265px;"></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/19.gif" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 20 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/20.gif" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/21.gif" style="width: 265px;"></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/22.gif" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 23 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/23.gif" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/24.gif" style="width: 265px;"></td>'
*p' </tr>'
*p' </table>'
тперь в белые полосы, типо стыков свеху и снизу у 2 6 7 ряд. пока хз как решить
Преформатирование не внутри строки делай, а в коде QSP. Не:
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/22.gif" style="width: 250px;"></td>'
*p' <td><a href="EXEC: temp = 23 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/23.gif" style="width: 167px;"></a></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/24.gif" style="width: 265px;"></td>'
*p' </tr>'
а
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/22.gif" style="width: 250px;"></td>'
*p'<td><a href="EXEC: temp = 23 & gosub ""Gmenu"" "><img alt="" src="pic/Other/GSmenu/23.gif" style="width: 167px;"></a></td>'
*p'<td><img alt="" src="pic/Other/GSmenu/24.gif" style="width: 265px;"></td>'
*p'</tr>'
Насчёт белых полос не понял, приложи скриншот.
Спасибо!
Там проблема оказалась в ГИМПЕ, Он криво по направляющим нарезал, в некоторых картинках на 1 пиксель ошибся, пришлось в ручную резать проблемные части.
кастельнотельно кода, то проблему ссилками тоже решил. Просто там кавычки не так использовал.
вот результат (Пока не успел отступі переделать)
Spoiler
*p' <center><table align="center" border="10" cellpadding="0" cellspacing="0" style="width: 50%; height: 50%;">'
*p'<tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/1.png" ></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/2.png" ></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/3.png" ></td>'
*p' </tr>'
*p' <tr >'
*p' <td style="height: 30px"><img alt="" src="pic/Other/GSmenu/4.png" ></td>'
*P" <td><a href='EXEC: temp = 5 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/5.png" >'+"</a></td>"
*p' <td><a href="#" style="border:none;"><img alt="" src="pic/Other/GSmenu/6.png" ></a></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/7.png" ></td>'
*P" <td><a href='EXEC: temp = 8 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/8.png" >'+"</a></td>"
*p' <td><img alt="" src="pic/Other/GSmenu/9.png" ></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/10.png" ></td>'
*P" <td><a href='EXEC: temp = 11 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/11.png" >'+"</a></td>"
*p' <td><img alt="" src="pic/Other/GSmenu/12.png" ></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/13.png" ></td>'
*P" <td><a href='EXEC: temp = 14 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/14.png" >'+"</a></td>"
*p' <td><img alt="" src="pic/Other/GSmenu/15.png" ></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/16.png" ></td>'
*P" <td><a href='EXEC: temp = 17 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/17.png" >'+"</a></td>"
*p' <td><img alt="" src="pic/Other/GSmenu/18.png" ></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/19.gif" ></td>'
*P" <td><a href='EXEC: temp = 20 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/20.gif" >'+"</a></td>"
*p' <td><img alt="" src="pic/Other/GSmenu/21.gif" ></td>'
*p' </tr>'
*p' <tr>'
*p' <td><img alt="" src="pic/Other/GSmenu/22.gif" ></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/23.gif" ></td>'
*p' <td><img alt="" src="pic/Other/GSmenu/24.gif" ></td>'
*p' </tr>'
*p' </table></center>'
P.S - мы с тобой на ютубе про billder для txt2game говорили) хотелось бы узнать что думаешь, я уже выложил тему в средствах разработки. он уневерсальный,и лог батник добавил, что бы отображало какие файлы импортировало.
И вот рукапопый я снова тут!
все работает идеально, но адаптация размера… не работает.
Spoiler
# Gmenu
*clr
*p' <center><table align="center" border="0" cellpadding="0" cellspacing="0" style="height: 100%;" >'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/1.png" style="height: 100%;"></td>'
*p'<td><img alt="" src="pic/Other/GSmenu/2.png" style="height: 100%;"></td>'
*p'<td><img alt="" src="pic/Other/GSmenu/3.png" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr >'
*p'<td style="height: 30px"><img alt="" src="pic/Other/GSmenu/4.png" style="height: 100%;"></td>'
if temp = 5:
*p'<td><img alt="" src="pic/Other/GSmenu/5a.png" style="height: 100%;"></td>'
else
*P"<td><a href='EXEC: temp = 5 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/5.png" style="height: 100%;">'+"</a></td>"
end
*p'<td><img alt="" src="pic/Other/GSmenu/6.png" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/7.png" style="height: 100%;"></td>'
if temp = 8:
*p'<td><img alt="" src="pic/Other/GSmenu/8a.png" style="height: 100%;"></td>'
else
*P"<td><a href='EXEC: temp = 8 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/8.png" style="height: 100%;">'+"</a></td>"
end
*p'<td><img alt="" src="pic/Other/GSmenu/9.png" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/10.png" style="height: 100%;"></td>'
if temp = 11:
*p'<td><img alt="" src="pic/Other/GSmenu/11a.png"style="height: 100%;" ></td>'
else
*P"<td><a href='EXEC: temp = 11 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/11.png" style="height: 100%;">'+"</a></td>"
end
*p'<td><img alt="" src="pic/Other/GSmenu/12.png" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/13.png" style="height: 100%;"></td>'
if temp = 14:
*p'<td><img alt="" src="pic/Other/GSmenu/14a.png" style="height: 100%;"></td>'
else
*P"<td><a href='EXEC: temp = 14 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/14.png" style="height: 100%;">'+"</a></td>"
end
*p'<td><img alt="" src="pic/Other/GSmenu/15.png" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/16.png" style="height: 100%;"></td>'
if temp = 17:
*p'<td><img alt="" src="pic/Other/GSmenu/17a.png" style="height: 100%;"></td>'
else
*P"<td><a href='EXEC: temp = 17 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/17.png" style="height: 100%;">'+"</a></td>"
end
*p'<td><img alt="" src="pic/Other/GSmenu/18.png" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/19.gif" style="height: 100%;"></td>'
if temp = 20:
*p'<td><img alt="" src="pic/Other/GSmenu/20a.gif" style="height: 100%;"></td>'
else
*P"<td><a href='EXEC: temp = 20 & gosub ""Gmenu"" '>"+'<img alt="" src="pic/Other/GSmenu/20.gif" style="height: 100%;">'+"</a></td>"
end
*p'<td><img alt="" src="pic/Other/GSmenu/21.gif" style="height: 100%;"></td>'
*p'</tr>'
*p'<tr>'
*p'<td><img alt="" src="pic/Other/GSmenu/22.gif" style="height: 100%;"></td>'
*p'<td><img alt="" src="pic/Other/GSmenu/23.gif" style="height: 100%;"></td>'
*p'<td><img alt="" src="pic/Other/GSmenu/24.gif" style="height: 100%;"></td>'
*p'</tr>'
*p'</table></center>'
if temp = 0:
else
PLAY $BUTTON_OK,SE &
temp = 0
wait 5
gosub "Gmenu"
end
--
Teemo228,
в QSP работает только абсолютный height. Указание через style не помню вообще работоспособно или нет.