RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2424045 views

Всем здравия!
Не так давно начал делать игры на 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м столбиком?
Или надо рассчитывать количество и под каждый столбик свой стиль?

Белый Шарик #100 12.10.2015 08:29 (10 years ago)

Товарищи, подскажите, как можно кодировать значение переменных на Куспе, что бы их не ломали всякие АРтМани? Вообще возможно это?
И есть ли действенный способ закрыть доступ к редактированию игры сторонними людьми?

Белый Шарик:

Товарищи, подскажите, как можно кодировать значение переменных на Куспе, что бы их не ломали всякие АРтМани? Вообще возможно это?
И есть ли действенный способ закрыть доступ к редактированию игры сторонними людьми?

Самому интересно, но может если работать с текстовыми значениями или скрывать числовые под текстовые, однако всё равно можно пробить и найти то или иное значение числа - вопрос времени.

Белый Шарик,
1. Спасти от читерства не получится, потому что см. 2
2. Код закрыть нельзя.

Делайте интересную игру, тогда её не будет необходимости ломать.

Aleks Versus Moderator 14.10.2015 09:58 (10 years ago)

Белый Шарик,
Олегусу удалось закрыть код от просмотра в 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"]>>'

передача данных не работает и как это исправить я не знаю.

Aleks Versus Moderator 21.10.2015 19:57 (10 years ago)

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.

Edited at 21.10.2015 20:52 (10 years ago)
$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

поздоровается с Димой, а не Вовой.

Log in or Register to post comments.