Как сделать?
…
Всем здравия!
Не так давно начал делать игры на qsp, пишу под AeroQSP, вопрос возник, а точнее проблема.
‘<div id = “menu”>
if a = 1: <div id = “ss”><a href = exec: dynamic $hshsh>Надеть а</a></div>
if b = 1: <div id = “ss”><a href = exec: dynamic $hshsh2>Надеть б</a></div>
if c = 1: <div id = “ss”><a href = exec: dynamic $hshsh3>Надеть в</a></div>
</div>’
В чем вопрос. Как сделать, чтобы заданный список, который в стиле css выполнялся на проверку условия каждого пункта
к примеру в игре есть система крафта, и чтобы скрафченные вещи появлялись красиво в нужный css список(как вот в примере)
проблема, что условие не читается внутри div или я что-то не умею/не знаю
простите, если где-то такой вопрос был - не нашел =(
anizein,
'<div id = "menu">'
if a = 1: '<div id = "ss"><a href = exec: ' + $hshsh + '>Надеть а</a></div>'
if b = 1: '<div id = "ss"><a href = exec: ' + $hshsh2 + '>Надеть б</a></div>'
if c = 1: '<div id = "ss"><a href = exec: ' + $hshsh3 + '>Надеть в</a></div>'
'</div>'
Спасибо, только не очень понял, для чего плюсики и почему не надо ли писать dynamic перед $hshsh?
Можно слегка разъяснить?
И еще вопрос, можно ли сделать так, чтобы при заполнении до низа экрана список не шел в никуда, а выстраивался 2м столбиком?
Или надо рассчитывать количество и под каждый столбик свой стиль?
Товарищи, подскажите, как можно кодировать значение переменных на Куспе, что бы их не ломали всякие АРтМани? Вообще возможно это?
И есть ли действенный способ закрыть доступ к редактированию игры сторонними людьми?
Белый Шарик:
Товарищи, подскажите, как можно кодировать значение переменных на Куспе, что бы их не ломали всякие АРтМани? Вообще возможно это?
И есть ли действенный способ закрыть доступ к редактированию игры сторонними людьми?
Самому интересно, но может если работать с текстовыми значениями или скрывать числовые под текстовые, однако всё равно можно пробить и найти то или иное значение числа - вопрос времени.
Белый Шарик,
1. Спасти от читерства не получится, потому что см. 2
2. Код закрыть нельзя.
Делайте интересную игру, тогда её не будет необходимости ломать.
Белый Шарик,
Олегусу удалось закрыть код от просмотра в QGen. Даже зная пароль, открыть нельзя. Но, при наличии мозгов в теле читера, даже этот способ не спасает.)
Эти пароли - пятая нога QSP. Атавизм.
Здравствуйте, форумчане. Помогите пожалуйста с небольшой задачкой. У меня есть код:
$Ability='$cell["<<AGRS[0]>>,<<ARGS[1]>>"]="hide"'
DYNAMIC '<<$Ability>>',1,3
'<<$cell["1,3"]>>'
Вопрос: почему последняя строчка кода мне выводит пустую строку вместо слова “hide” и как это исправить?
Storm, дело в том, что значения ARGS[0] и ARGS[1] подставляются сразу же в первой строке, а не во время выполнения оператора DYNAMIC.
Насколько я понимаю, это какое-то упрощение более сложной задачи. Поэтому советовать, как сделать, не буду, чтоб не запудрить мозги :)
Скажу только, что вместо
'<<$Ability>>'
проще оставить просто
$Ability
Rivvil, да это упрощение более сложной задачи, но меня волнует именно та часть кода, которую я написал. Не пойму почему написанное не хочет работать. Что самое интересное в другом случаи передача данных через ARGS[0] и ARGS[1] работает. Приведу пример. Создаем локацию, допустим под названием “Тест” и пишем на ней код:
$Ability='gs "Тест2",ARGS[0],ARGS[1]'
DYNAMIC $Ability,1,3
И создаем локацию “Тест2”, на которой пишем код:
'<<ARGS[0]>> <<ARGS[1]>>'
При запуске локации “Тест” всё работает корректно и нам напишет на экране значение ARGS[0] и ARGS[1].
Но почему в этом коде:
$Ability='$cell["<<AGRS[0]>>,<<ARGS[1]>>"]="hide"'
DYNAMIC '<<$Ability>>',1,3
'<<$cell["1,3"]>>'
передача данных не работает и как это исправить я не знаю.
Storm,
Rivvil правильно указал тебе на обработку переменных в угловых скобках.
Storm:
$Ability=‘$cell[”<<AGRS[0]>>,<<ARGS[1]>>”]=“hide”’
DYNAMIC ‘<<$Ability>>’,1,3
‘<<$cell[”1,3”]>>’
Подвыражения в двойных угловых скобках вычисляются на лету, т.е. при присвоении строки. Поэтому фактически у тебя получается строка кода:
$ability='$cell["0,0"]="hide"'
Чтобы воспользоваться аргументами правильно, убери угловые скобки:
$Ability='$cell["AGRS[0],ARGS[1]"]="hide"'
DYNAMIC '<<$Ability>>',1,3
'<<$cell["1,3"]>>'
Можно, как сказал Rivvil, убрать лишние знаки после оператора dynamic, ибо
'<<$Ability>>'
эквивалентно
$Ability
Чтобы яснее представить себе, как работают подвыражения, попробуй создать новую игру и запустить в ней вот такой код:
args[0] = 1
dynamic "*pl <<args[0]>>
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'",3
Aleks Versus, даже при написании такого кода:
$Ability='$cell["AGRS[0],ARGS[1]"]="hide"'
DYNAMIC $Ability,1,3
'<<$cell["1,3"]>>'
я всё равно получаю пустую строку :(
А в этом коде:
args[0] = 1
dynamic "*pl <<args[0]>>
*pl '=<<args[0]>>'
*pl args[0]
*pl '=args[0]'",3
тройка выводиться только в одном случаи, но это всё равно не даёт мне понимания почему под мою задачу код не работает.
Подстановка почему-то не хочет работать, когда мне нужно подставить элементы массива ARGS как индекс массива $cell.
$Ability = {
*nl 'Index = '
*p "<<AGRS[0]>>,<<ARGS[1]>>"
$cell["<<AGRS[0]>>,<<ARGS[1]>>"] = "hide"
}
dynamic $Ability,1,3
*nl 'Test'
*nl $cell["0,3"]
Результат:
Index = 0,3
Test
hide
Это надо осмыслить. Нужно немного времени.
Все очень просто. Вот так работает:
$Ability = {
$cell["<<ARGS[0]>>,<<ARGS[1]>>"] = "hide"
}
dynamic $Ability, 1, 3
*nl $cell["1,3"]
Надо было всего-лишь писать ARGS[0], а не AGRS[0].
Storm, посмотрите внимательно на первую строку своего кода:
$Ability='$cell["AGRS[0],ARGS[1]"]="hide"'
Вот что попадает на съедение оператору DYNAMIC:
$cell["AGRS[0],ARGS[1]"]="hide"
Именно этот код он пытается выполнить. То есть, прямым текстом, элементу массива $cells с ключом “ARGS[0],ARGS[1]” (без всяких подстановок, это обычная строка, не код) присваивается значение “hide”. Поэтому и не работает.
UPD. Кроме того, как выше заметил evp, в названии ARGS была совершена опечатка.
Чтобы сформировать ключ из двух числовых аргументов, можно сделать так:
$Ability='$cell[STR(ARGS[0]) + "," + STR(ARGS[1])]="hide"'
DYNAMIC $Ability, 1, 3
Если числа 1 и 3, например, хранятся в переменных row и column, то можно без STR и аргументов. Получится более приятно на вид:
! Где-то раньше присвоили значения...
$row = 1
$column = 3
! ...а теперь используем их.
$Ability='$cell["<<row>>,<<column>>"]="hide"'
DYNAMIC $Ability
UPD. Выше имеется решение от evp с фигурными скобками вместо одинарных кавычек. Пожалуй, наиболее правильное, поскольку код обычно лучше заключать именно в фигурные скобки, а не в кавычки. Как минимум, в редакторе нагляднее выглядит :)
Однако в зависимости от вашей реальной задачи, могут быть нюансы, из-за которых тот или другой метод не подойдёт.
Будьте внимательны с подстановками и динамическим выполнением кода. Легко запутаться и что-нибудь перепутать, как Aleks Versus, случайно посоветовавший неправильное решение :) Главное - помнить, что подстановки вида <<переменная>> производятся равно в тот момент, когда обрабатывается строка. Так, например:
$name = "Дима"
$hello = "Привет, <<$name>>"
$name = "Вова"
*p $hello
поздоровается с Димой, а не Вовой.