Как сделать?
…
ejikplains,
при назначении
ejikplains:
$глава1 = t4r6
вы пытаетесь строковой переменной присвоить численное значение. Правильно будет взять нужное значение в кавычки:
$глава1 = ‘t4r6’
ejikplains,
Пишешь
wait 3000
И три секунды код в принципе не выполняется, как и возможность игрока что-то делать.
Прямой пример:
Spoiler
'текст текст текст'
act 'что-то сделать':
*clr
'текст'
'текст'
wait 3000
end
act 'что-то тут сделать':
*clr
'текст'
'текст'
wait 5000
end
act 'еще что-то':
*clr
'текст'
'текст'
wait 2000
end
А можно и так)
Spoiler
'- Мы ведь ведём с вами разумный разговор?'
act '- Это что ещё за оборот речи такой?': dialog45 = 2 & gt curloc
if dialog45=2:
*clr
cla
'- От детворы услышал. Показалось вразумительным объяснением происходящего.'
act '- Нет, ну вы гений!': dialog45=4 & gt curloc
act '- Да простит меня Иисус, но Вы, крайне неодобрительный персонаж.': dialog45=3 & gt curloc
end
if dialog45=3:
*clr
cla
'Затянулась драка, никто не смог предугадать победителя.'
wait 7000
'Победитель ...!'
end
if dialog45=4:
*clr
cla
'- На том и порешили.'
end
ejikplains,
Можно вопрос, от человека не очень понимающего, но жгче желающего разобраться в qsp?
Как этот код работает вообше?
UPD.:В предыдущем разобрался, извините.
Как работает gs $curloc +’название метки’?
Думаю, что сначала лучше создать действие, а потом его удалять :-)
Уверен, что старейшины ответят, я не из их числа. Однако, поделюсь мнением насчет остроты темы. Локации со скроллами очень тяжело воспринимаются. Вплоть до неприязни. Это я не только от себя говорю. Намного легче читать текст, который не огромной портянкой, а разбит на блоки/абзацы с отступами или двойным Enter. Если длинны не избежать, лучше разбить на несколько локаций. Чтобы при чтении не требовался скролл. Все только спасибо скажут. Желаю успехов в разработке.
ejikplains,
про скорлл незнаю. Соглашусь с Wol4ik’ом.
Насчет же затухания. Есть только идея. Тебе придется сделать что-то вроде такого.
ОТСЧЕТ - КОМАНДА а команда по смене цвета текста на более прозрачный. Вроде есть такое. - ОТСЧЕТ - КОМАНДА… и так далее.
Идею не проверял ибо мне оно не очень нужно. Но если сильно нужно попробуй вдруг прокатит. В RGB вроде должен быть параметр прозрачности. Альфа или что-то такое он. Отсчет должен быть небольшим, чтобы была эта самая плавность.
ejikplains:
ещё такой вопрос: при добавлении гиф картинок они воспроизводятся коряво и то пропадают, то их почти не видно(кроме стартовой картинки внутри гифа). можно ли как-то наладить воспроизведение гиф да и из-за чего такое?
Да, есть такое, если картинка соптимизированная. Потому что показываются все кадры, как анимация. В данном случае поможет использование любого графического редактора. Я обычно в гимпе редактирую. Берёшь картинку, разоптимизируешь, убеждаешься, что все кадры целые, без обрезов, и сохраняешь обратно.
Всем привет! Подскажите пожалуйста в чем ошибка.
Идея следующая: создать два аэропорта + самолет(процедуры полета).
Соответственно таким образом приобретается билет ( проблем вроде нет, все работает):
Spoiler
if tiket=0:
act’Спросить про билеты’:
cla
‘- Здравствуйте девушка я бы хотел преобрести билет.’
‘- Здравствуйте, да конечно куда летим?’
act ‘Спросить про билеты на Москву’:
cla
‘- Да конечно есть самолеты на москву на 07:00, 11:00, 17:00, и 22:00.’
‘- Сколько стоит?’
‘- До обеда 6 500 рублей после 8 000 эконом. Если бизнес класс, то 10 000 рублей’
act ‘Беру билет эконом.’:
cla
act ‘Беру на Москву на 07:00’:
cla
set tiket_msk_07 = 1
set money=money-6500
act ‘Идти к стойке с билетами’:gt’aeroport_tiket’,’start’
end
act ‘Беру на Москву на 11:00’:
cla
tiket_msk_011 = 1
set money=money-6500
act ‘Идти к стойке с билетами’:gt’aeroport_tiket’,’start’
end
act ‘Беру на Москву на 17:00’:
cla
tiket_msk_017 = 1
set money=money-8000
act ‘Идти к стойке с билетами’:gt’aeroport_tiket’,’start’
end
act ‘Беру на Москву на 22:00’:
cla
tiket_msk_022 = 1
set money=money-8000
act ‘Идти к стойке с билетами’:gt’aeroport_tiket’,’start’
end
act ‘Нет спасибо.’:gt’aeroport_tiket’,’start’
end
end
end
end
end
end
И собственно процесс после покупки нужно билета:
if hour >=6 and hour <=7 and tiket_msk_07 = 1:
act ’Подойти к стойке регистрации на посадку (рейс 07:00)’:
cla
’ - Здравствуйте, у меня рейс на 7:00.
-
Ваш билет пожалуйста.’ act ‘Идти на посадку’:
cla
tiket_msk_07 = 0
act ‘Идти в самолет’:gt ‘avia_tvr_swo’,’start’
end
act ‘Отойти от стойки’:gt ‘aeroport_hol’,’1’
end
end
if hour >=10 and hour <=11 and tiket_msk_11 = 1:
act ’Подойти к стойке регистрации на посадку (рейс 11:00)’:
cla
’ - Здравствуйте, у меня рейс на 11:00. -
Ваш билет пожалуйста.’ act ‘Подойти к стойке регистрации на посадку’:
cla
tiket_msk_11 = 0
act ‘Идти в самолет’:gt ‘avia_tvr_swo’,’start’
end
act ‘Отойди от стойки регистрации’:gt ‘aeroport_hol’,’1’
end
end
if hour >=16 and hour <=17 and tiket_msk_17 = 1:
act ’Подойти к стойке регистрации на посадку (рейс 17:00)’:
cla
’ - Здравствуйте, у меня рейс на 17:00. -
Ваш билет пожалуйста.’ act ‘Подойти к стойке регистрации на посадку’:
cla
tiket_msk_17 = 0
act ‘Идти в самолет’:gt ‘avia_tvr_swo’,’start’
end
act ‘Отойди от стойки’:gt ‘aeroport_hol’,’1’
end
end
if hour >=21 and hour <=22 and tiket_msk_22 = 1:
act ’Подойти к стойке регистрации на посадку (рейс 22:00)’:
cla
’ - Здравствуйте, у меня рейс на 22:00. -
Ваш билет пожалуйста.’ act ‘Подойти к стойке регистрации на посадку’:
cla
tiket_msk_22 = 0
act ‘Идти в самолет’:gt ‘avia_tvr_swo’,’start’
end
act ‘Отойди от стойки’:gt ‘aeroport_hol’,’1’
end
end
end
Первая связка if-end полностью работает, действие “act ’Подойти к стойке регистрации на посадку (рейс 07:00)’:” выполняется и тд. Аналогичные if-end 2,3,4 не выполняются, не видит их. Заранее спасибо за помощь!
Насчитал два лишних enda в первом куске, и один лишний во втором. Но это мелочь.
Не работает по одной простой причине:
В первом куске:
tiket_msk_011 = 1
Во втором куске:
... and tiket_msk_11 = 1:
Разные переменные.
Большая просьба, помещайте код в блок CODE.
Привет парни, помогите создать реальное время в игре, пример (юлианского календаря прошу не предлагать). Заранее благодарен.
playerqsp,
что ты имеешь ввиду под реальным временем?
типа того? :
# start
$counter='counter'
--- start ---------------------------------
# counter
halfsec+=1
if halfsec=2:
halfsec=0
sec+=1
end
if sec=60:
sec=0
minute+=1
end
if minute=60:
minute=0
hour+=1
end
clr
pl "<<hour>>:<<minute>>:<<sec>>"
--- counter ---------------------------------
Всем доброго времени суток.
У меня несколько вопросов на которые я надеюсь получить ответ.
Сразу уточню, я - новичек.
Итак. К примеру у меня написано х=1. И еще есть кнопка с командой х=х+1. Вот только я никак не могу увидеть/вывести на экран эту переменную. (Уже понял)
Второй вопрос. В документациях я столкнулся с понятием массив ARGS. Что это? Как пользоваться им?
Третий. Как сделать стакающиеся предметы. И лучше просто покажите простейший пример такого, чем кидать меня в документации ибо там я никак и не смог понять как оно должно работать. Был еще (http://qsp.su/index.php?option=com_content&view=article&id=70:qsp-inventory-advanced-lib-076&catid=36:2009-02-19-06-11-21&Itemid=76) этот но я тоже не совсем понял как он работает. Вроде он требует доп файл с библиотекой.
В общем пока все. Надеюсь на вашу помощь.
Spoiler
Почему же никто не пользуется поиском?
Десять минут чтения выдачи расширенного поиска по запросу “ARGS” (по сообщениям):
Spoiler
Форум: Обсуждение и разработка игр 03.Ноя.16 13:29:00 — тема “Как сделать?”
args[] - это переменные, которым можно передавать значения “на один раз”. Делал ты это так:
gosub 'Скретч диалог',2Двойка после запятой, как раз и указывает, что когда плеер обратится к локации “Скретч диалог”, значение args[0] - должно быть равно 2. Это называется передача аргументов. Можно передавать девять значений, т.е. задавать на начало локации значения переменным от args[0] до args[8]. В общем виде это выглядит так:
gosub 'имя_локации',args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8]
Форум: Обсуждение и разработка игр 28.Фев.16 23:34:46 — тема “Как сделать?”
массив args[] можно использовать в качестве локальных переменных на определённой локации. Помимо этого в массив args[] передаются аргументы, если вызываешь локацию разными командами. Например:
!#гостинная act 'Воспользоваться камнем телепортации': goto 'кухня', 7Число семь будет передано в локацию кухня. Получить его в этой локации можно из нулевого элемента массива args[]
!#кухня if args[0]=7: *pl "Вы воспользовались камнем телепортации и очутились в кухне."Для каждой локации значения args[] своё. Т.е. если на локации “гостинная” у тебя args[0] равнялось 10, то это никак не скажется на значении args[0] в локации “кухня”. Пример:
#начало args[0] = 9 args[1] = 12 gosub 'конец',14,15 *pl args[0] *pl args[1] - #конец *pl args[0] *pl args[1] -
Справка — Пользовательские функции и процедуры
Полезная тема: вложенные вызовы подпрограмм
Форум: Обсуждение и разработка игр 10.Апр.16 22:57:53 — тема “Как сделать?”
args - это локальные переменные. Они работают только на определённой локации и только во время так сказать сессии на этой локации. Так же они используются для получения каких-то данных во время обращения к локации. Например:
goto 'Лес','Заяц',23, при выполнении этой команды будет осуществлён переход на локацию “Лес”, при этом переменной $args[0] на локации “Лес” присвоится значение Заяц, а переменной args[1] - значение 23.
Если ты делаешь по этому примеру, можешь видеть, что переключение между ветками там задаётся как раз таки значением, которое получает args[0] при обращении к локации:
gs 'Диалог_А',1 .... if args[0]=1: act 'Как реализован твой диалог?': '<font color=blue>(Вы) — <<$selact>></font>' cla wait 500 ........
Стакающиеся предметы — это считаемые, как я понимаю. Деньги, патроны, одинаковые мечи и прочее. Тема довольно интересная и сложная. Но новичкам обычно предлагают начать с этого:
убрал тут цитату сообщения, почему-то ведёт всё на библиотечку
В старой справке был такой вопрос “Как сделать в игре деньги?”. Но сейчас я не могу его найти.
Всё на самом деле просто. Допустим, есть у нас предмет “меч”.
Когда добавляем его в инвентарь, например, по действию, то ведём подсчёт числа мечей в отдельной переменной.
act "Поднять меч":
! проверяем есть ли мечи
if меч_количество = 0:
! если мечей нет, добавляем меч в инвентарь
addobj "Меч"
end
! увеличиваем количество мечей на 1
меч_количество = меч_количество+1
end
Чтобы проверять число мечей при щелчке в окне инвентаря, заводим локацию с названием onObjSel, а на самой первой локации в игре пишем:
$onobjsel="onObjSel"
Если воспользоваться поиском по форуму с запросом “onobjsel”, можно узнать, что таким образом мы создали локацию-обработчик выбора предмета с именем onObjSel, а с помощью строчки кода в самой первой локации игры показали плееру, какую именно локацию он должен использовать в этом качестве.
Теперь на локации onObjSel для меча пишем такой код:
if $selobj = "Меч":
! если вы выбрали объект меч
! выводим информацию в окно доп.описаний
pl "Обычный одноручный меч. В рюкзаке <<меч_количество>> шт."
end
в конце onObjSel обязательно ставим
unsel
Не знаю почему, но я сел за написание игрушки в qsp.
Программист, как и писатель из меня никакой, но тем не менее.
При создании моего шедевра у меня возникла проблема:
при тесте локации проигрыватель выдаёт мне ошибку и говорит, что не хватает
[end] в “многострочной форме операторов” и указывает мне строку (84),
которой в данной локации вообще нет (код заканчивается на 77).
Вопрос: что делать?
P.S. Код не могу сюда выложить, так как он достаточно длинный.
Если что пишите в ЛС.
Заранее спасибо.
Экспортируйте файл игры в текстовый документ. Смотрите через блокнот (с выключенными переносами) - вот в нем и найдете все точно по номеру строки. А так ошибки удобнее всего находить через анализатор - https://qsp.org/forum/281-analizator-koda-qsp
А код можно не бояться выкладывать, если что - если слишком длинный, то под спойлер)