Как сделать?
…
Давай я код времени на каждой локации пропишу? Только как?
Одиночка, я попытаюсь объяснить доступно. В твоем случаи лучше создать локацию под названием “Статус”, она будет хранить в себе данные о здоровье твоего персонажа и о игровом времени, и её можно будет вызвать по надобности через оператор GS. В начальной локации игры(с которой игра запускается) пишешь:
$ONNEWLOC="Статус"
Переменная $ONNEWLOC хранит название локации, код на которой должен выполняться каждый раз когда игрок переходит на любую другую локации из любой текущей. В локации “Статус” пишем такой код:
время=время+5
дни=время/(24*60)
часы=(время-дни*24*60)/60
минуты=время-часы*60-дни*24*60
clr
p 'Здоровье:<<Здоровье>>
Время: <<дни>> день, <<часы>>:<<минуты>>'
Формулы времени я взял отсюда. В них, как видишь, всё завязано на переменной “время” в которой храниться игровое время в минутах. Что происходит, когда мы переходим на любую другую локацию: в нашу переменную время добавляется 5 минут судя из этой строчки “время=время+5”, затем производится вычисления дней, часов и минут. Оператор “clr” нужен для того, чтобы удалить содержимое дополнительного окна. Это наше так называемое “обновление”, иначе бы у нас показатели параметра времени и здоровья громоздились бы в дополнительном окне. После этого оператора мы выводим в дополнительное окно описания здоровье и время. Можно задать начальное игровое время, допустим, “1 день, 23:0”. Мы считаем его эквивалент в минутах, значить переменная время=2820, прописываем её в стартовой локации игры. Обрати внимание на то, что код на локации “Статус” выполняется даже при первом запуске игры, поэтому время у нас будет записано в таком формате “Время: 1 день, 23:5”. То есть в счетчик добавились наши 5 минут. Можешь сам задать интервал какой тебе надо, меняя пять минут на какое-то другое значение. Если допустим в игровом времени переход на определенную локацию должен занимать больше времени, то ты должен к действию перехода дописать формулу “время=время+[твоё число определяющее время перехода на ту локацию]”.
Народ, есть один вопрос. У меня есть код:
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. Как сделать так, чтобы программа понимала десятичные дроби?