Как сделать?
…
Aleks Versus,
https://ifwiki.ru/%D0%A2%D0%9E%D0%9C_2
Нашел вроде то что искал, буду пробовать, спасибо)
Ребят, объясните как отображать разную информацию для различных предметов, которые были сгенерированы с помощью рандома.
Вот, например, есть магазин, я планирую сделать так, чтобы оружие в нём менялось с помощью рандома раз в день.
И есть разное оружие. У каждого оружия должно быть своё описание, сила атаки и так далее. Так вот, как сделать так, чтобы при выборе в инвентаре, например, оружия “Ледяной меч”, то у этого оружия показывалось бы 50-68 атаки и описание, которое я задумала для этого оружия. А когда выберу другой меч, то у него уже будут другие показатели атаки и другое описание.
P.S.
Простите, что я такой нуб в создании игр и не могу пока сама во всём разобраться.
ShadowX2,
Post Scriptum был излишним, все с этого начинают, вы не исключение :)
То что вы описываете решаться с помощью массивов. Только я хотел бы понять каким образом у вас существуют объекты? С помощью addobj и интерфейса “Предметы” или же переменные и вывод в отдельной локации?
Ибо от этого зависит тонкости решения поставленной задачи.
Ок, соглашусь, Post Scriptum я наверное зря добавила :)
Названия предметов я храню в массиве, при покупке они добавляются в панель предметов с помощью addobj
ShadowX2,
Первое, что взбрело в голову. Не считаю вариант оптимальным или простым, но решение вполне себе рабочее. Если что-то не понятно, пишите, будем объяснять.
Доброго времени суток. Пару дней назад решил заняться написанием игры на qsp классическом. Идей и сюжета в голове очень много.
А вот в коде я мягко говоря нуб полнейший. Посмотрел порядка 20 часов разных гайдов. Но так и не нашёл ответы на свои основные вопросы.
1.Как создать в игре параметр времени? который будет изменяться при действиях персонажа и переходах на локации.
2.Как создать систему характеристик и навыков видимую, например при нажатии на объект “характеристики” в разделе объектов.
3.Как в тот же раздел добавить инвентарь, и чтоб все подбираемые предметы попадали туда, а не в общий раздел объектов, при нажатии на который я бы мог попасть в отельную комнату и уже там взаимодействовать с ними.
4.Касаем самих предметов как их сделать юзабельными, с влиянием на те же самые характеристики.
5.Как создать систему голода и жажды зависимую от времени.
6.Ну и конечно же как создать боевую систему, хотя бы самую простенькую, но чтоб она зависела от характеристик и навыков персонажа.
nelsonrose777,
Прежде советую прошерстить эту тему (это ссылка если что), многие вопросы начнут отпадать сами собой.
1) Например:
Spoiler
# start
time = 0
# prolog
act 'Пойти вот туда, да':
time += 5
end
2) Ещё пример:
Spoiler
# start
$skills[] = 'Быстрее света'
$skills[] = 'Повышает ловкость до заоблачных высот. Позволяет двигаться быстрее света (антинаучный навык)'
skills_name = 1
skills_desc = 2
skills_columns = 2
skills_rows = arrSize('$items') / skills_columns
strength = 1
agility = 1
playerSkills[] = arrPos('$skills', 'Быстрее света')
# onObjSel
if $selObj = "Характеристики":
PL 'Сила: ' + strength
PL 'Ловкость: ' + agility
if arrSize('playerSkills') > 0:
*nl
index = 0
:renderSkills
PL 'Название навыка: ' + $skills[ playerSkills[index] + skills_name ]
PL 'Описание навыка: ' + $skills[ playerSkills[index] + skills_desc ]
if index < arrSize('playerSkills'): index += 1 & jump 'renderSkills'
end
end
unSelect
#
Но реализовать можно множеством иных способов, пытливый ум да найдёт решение)
3) Есть служебная локация $onObjSel и оператор позволяющий получить название предмета по которому был произведён клик – $selObj. Думаю дальше можно предположить что делать (второй пример в помощь)
4) Проверить что за предмет выбран, выполнить код и удалить предмет (delobj) если одноразовый или уменьшить количество если многоразовый.
5) Зависит от того, как у вас время течёт. Реал-таймом (то бишь используем $counter) или же через действия (в самом действии меняем время или через служебную локацию $onNewLoc). В первом случае мы делаем проверку в $counter используя всякие переменные флажки, во втором можно сказать то же самое, только в служебной локации $onNewLoc.
6) Тут универсального ответа нет, поиск ответа ложиться тяжким грузом на плечи самого автора. Можно посмотреть реализации в других играх, особенно где боёвка вам понравилась, можно ещё вот эту тему почитать.
nelsonrose777,
Все шесть вопросов требуют ответа в виде шести огромных статей, которые скорей всего в совокупности по объёму вытянут на целую книгу, потому что всё, перечисленное в этих вопросах, это игровые механики. Сложность реализации игровой механики зависит от упорства и целеустремлённости автора игры, а так же от структуры игры самой по себе. Для последовательно рассказываемой истории и для бродилки — реализация будет разная. Для маленького квеста и масштабной рпг - реализация будет разная. Даже банальные “характеристики персонажа” могут быть реализованы десятком различных способов. Сложно дать универсальный ответ по каждой из этих механик, расписывать по три четыре распространённых примера - долго. А ещё, в таком описании обязательно будут моменты, в которых человек, впервые пришедший в QSP, а то и в программирование вообще, запутается.
Поэтому всем, кто только начал знакомство с QSP, рекомендуют начинать с простых игр. С игр, для которых QSP в первую очередь предназначался: с квестов, или с книг-игр. Если у вас есть и идеи, и сюжеты, и миры, то на первых порах вам хватит инструментария, описанного в гайдах. Чтобы создать “Башню Абиссы” - игру, победившую в последнем конкурсе QSP-Compo, не нужны все эти сложности с течением времени, уймой характеристик и тому подобным. De@th K!d постоянно выпускает интереснейшие и пользующиеся популярностью игры, сделанные исключительно с помощью базовых возможностей языка и платформы. Даже экспериментальные форматы игр Mioirel не требуют каких-то обширных знаний в структурировании кода, написании механик, геймдизайне и прочем. Для всего этого игрового наследия QSP достаточно только той информации, что изложена в уже существующих гайдах.
К сожалению, писать гайды по механикам пока некому. Авторы, которые уже реализовали сложные механики в своих играх, не торопятся написать статейку-другую о том, как и что у них в игре устроено. Если сделаешь сам, надеюсь увидеть подобные статьи от тебя.
У себя на канале давно хочу запустить серию роликов по разработке игры с подвязкой тем по выбору механик, их реализации и прочему, но дело это не быстрое.
Доброго времени суток! Возможно где-то на форуме это обсуждалось, но потратив N-число времени, я так и не нашёл. Подскажите пожалуйста текст кода для воспроизведения видео файла в игре. Речь идёт о классическом qsp.
7Юрий3,
в классическом QSP нельзя воспроизводить видео. Это возможно только в Quest Navigator и qSpider. Причём в Quest Navigator сделать это сложнее.
А код простой. Выводите видео с помощью html:
*p '<video width="400" height="300" controls="controls" poster="video/duel.jpg">'
*p '<source src="video/duel.webm" type=''video/webm; codecs="vp8, vorbis"''>'
*p '</video>'
Описание тега: http://htmlbook.ru/html/video
Ответ на ваш вопрос есть так же здесь: FAQ/HowDo/Как вставить в игру видео?
Может быть найдёте там ответы и на другие вопросы
Спасибо очень помог совет. Перешёл по ссылке, почитал и узнал, что плеер от sonnix может открывать видео. Правда текст кода такой: *pl ‘<center><video loop src=“video/home/morning.webm” width=“800” height=“400” autoplay />’
Всем привет. Интересует вопрос, возможно ли получить значение массива (и вообще полноценно работать с этим массивом), переданным как параметр в func?
Например как-нибудь так:
func('arrays', 'get_array_value', $array)
Или так:
func('arrays', 'get_array_value', 'array')
У меня в коде функции получается ошибка из-за обращения через $ARGS1, QSP при проверке пишет “Недопустимое название переменной/массива”
P.S.
Искал ответ на этот вопрос на форуме и в гугле, но не нашел ничего. Если было, направьте, пожалуйста.
studentik,
Для работы с массивом есть arrpos.
Запись $ARGS1 некорректна с позиции синтаксиса. В $ARGS[1] что хранится, название массива?
dmvikar,
Да, по логике, $ARGS[1] хранит либо название массива, либо “ссылку” на него (если так можно выразиться в реалиях QSP).
Сам массив ассоциативный, т.е. выглядит примерно так:
$array['key_1'] = 'value'
array['key_2'] = 100
То есть, названия ключей служат их адресации, как-раз для того, чтобы не производить поиск с помощью arrpos или arrcomp. Только как обратиться к этому массиву (получить значение по ключу, изменить это значение, и прочие операции, выполняемые в том случае, когда мы обращаемся к известному массиву напрямую, типа $array[’key_1’] = ‘value 1’) из функции, если название этого массива было передано в виде параметра? $ARGS1 - было моим предположением, но очевидно, что это в QSP не работает.
UPD:
В справке по массивам сегодня появилось описание некой функции ARRITEM, которая как-раз и должна возвращать значение неизвестного заранее имени массива, но ни QGen, ни QSP плеер этой функции не понимают. Возникает вопрос, это новая функция плеера? Если да, то когда ждать релизной версии? (Использую 5.7.0)
P.S.
Опять же, не хватает функции, аналогичной ARRITEM, только для (пере)записи значения по индексу массива.
studentik,
ARRITEM - это для версии 5.8.0. Сейчас есть только qspider для этой версии.
Массив в версии 5.7.0 крайне не рекомендуется использовать для строковых и числовых значений одновременно. в 5.8.0 это невозможно.
Для передачи названия массива через args нужно использовать копирование
copyarr'$m',$args[0]
и уже работать с массивом $m. После использования - удаляешь.
Т.е. у тебя $m[’key_1’] будет иметь значение value.