Как сделать?
…
Народ, есть один вопрос. У меня есть код:
ncm=0
:цикл
If ncm<=np:
n[ncm]=ncm
*pl'<a href="EXEC:gs ''Инвентарь персонажа'',n[ncm]"><<$char[ncm]>></a>'
ncm=ncm+1
jump 'цикл'
end
Код работает таким образом: выводит имена персонажей в виде ссылок в зависимости от количества персонажей. Они нумеруются начиная с нуля и их количество хранит переменная “np”. Думаю с циклом вывода всё понятно. Меня интересует массив “n[ncm]” в операторе GS. Почему-то в строке
*pl'<a href="EXEC:gs ''Инвентарь персонажа'',n[ncm]"><<$char[ncm]>></a>'
значение элемента массива “n[ncm]” после оператора GS всегда приравнивается к нулю. Из-за этого я не могу реализовать вывод данных, в которых бы использовалась переменная из массива ARGS, которая передается с оператором GS. Вопрос: это невозможно сделать в QSP, или у меня что-то не правильно в коде?
Storm,
это классическая “грабля”.
Нюанс заключается в том, что при нажатии ссылки, значения переменных будут посчитаны на момент нажатия, а не на момент прохождения очередного шага цикла.
В приведённом примере, решается достаточно просто. Нужно принудительно вычислить значения переменных в шаге цикла, сразу подставив готовые значения в строку. Это делается с помощью механизма “подвыражений”, обозначается двойными угловыми скобками.
! Неправильно:
! <a href="EXEC:GS 'Инвентарь персонажа', np">Хвост</a>
*PL '<a href="EXEC:GS ''Инвентарь персонажа'', n[ncm]"><<$char[ncm]>></a>'
! Правильно:
! <a href="EXEC:GS 'Инвентарь персонажа', 0">Хвост</a>
*PL '<a href="EXEC:GS ''Инвентарь персонажа'', <<ncm>>"><<$char[ncm]>></a>'
Nex, спасибо большое, всё заработало). А то я уже думал делать по другому)
Кто нибудь подскажите, как сделать тайник? Вот, допустим, у нас есть локация тайник и у ГГ есть пистолет, вода, и $Патроны (Равные 30). Как сделать так, чтобы в тайник можно было класть вещи, а также потом их забирать?
Одиночка,
выкладываю пример.
Также советую изучить библиотечку, дополняющую инвентарь, и файл objs.qsp в архиве примеров кода.
Здравствуйте,
у меня вопрос по меткам в локации. Когда-то давно тут объясняли, что не стоит пользоваться JUMP, если метка вынесена за пределы действия… Суть в том, что кем-то из корифеев описывался способ перейти на конкретное место в локации при помощи GT и метки, т.е. что-то вроде GT $curloc, ‘loop’
Про ARGS речи не было. Идея такая:
#forest
!Определяем случайный тип врага
i = rand(1,4)
:loop
IF hp > 25:
act 'Hit':
!Дальше проверяем сколько отнялось здоровья, денег, зубов...и пробуем вернуться на ту же локацию к метке, но так, чтобы не запускать по-новой рандомизатор.
gt $curloc, 'loop'
end
end
В общем у меня эта конструкция что-то не работает.
svandrus,
не могло такого быть, что не было речи про args[]. Ты ведь передаешь аргумент локации, к которой обращаешься. В начале локации попробуй такую строку:
if $args[0]='loop': jump 'loop'
Фактически, переменной $args[0] ты уже присвоил значение ‘loop’ вот этой командой
gosub $curloc,'loop'
, так почему не воспользоваться этим?
Aleks Versus,
В том-то и дело, что про ARGS речи не велось… Обычно я и разбиваю ими локацию на секции с его помощью и обращаюсь к нужному варианту, но в памяти сидит именно вот этот способ - через GT. Речь шла об организации циклов и неправильном использовании JUMP.
Я уже писал, что не понимаю как пользоваться местным поиском - какие-то совершенно рандомные результаты выдаются, чего бы я у него не спрашивал. Обсуждение было в этой теме, но просматривать 288 страниц… опять…
Может я, конечно, и не совсем правильно помню, но если кто-нибудь умеющий разговаривать на одном языке с поиском найдёт именно вот этот фрагмент обсуждения - буду благодарен.
svandrus,
через goto только так. Ты передаешь ‘loop’ аргументом. Можешь, конечно, засунуть метку в переменную, а потом при повторном вызове локации проверять значение переменной, но это будет практически то же самое, только с новой глобальной переменной.
Вот тема, где обсуждался этот вопрос. Попробую поискать ещё что-нибудь, но вряд ли найдутся иные способы.
Aleks Versus,
Во-во.. оно! Спасибо! Там про ARGS нет ничего, правда есть этот страшный XGT…
Я так и знал, что если написать много полезных сообщений выдаётся специальный пароль для общения с поиском на одном языке.
Как сделать так, чтобы в основном окне описаний отображались строки, содержащие теги html не отключая USEHTML?
Т.е. мне нужно вывести на экран строку:
<center>Text</center>
svandrus,
заменяй угловые скобки на спецсимволы “<” и “>”.
Я начинаю осваивать QSP. Столкнулся с вопросом по десятичным дробям. Во время назначения переменных, при использовании запятой пишет, “ошибка синтаксиса”, а при использовании точки “неизвестное действие”. Пришлось заменять десятичные дроби выражениями, вроде а = 1+7/10. Как сделать так, чтобы программа понимала десятичные дроби?
Талер,
в QSP подерживаются только целые числа.
То есть, если вычисляя формулу, у меня получится дробное значение он его округлит? А вывести его и использовать никак нельзя?