RU 📌 Pinned

Как сделать?

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

Бармаглот #2072 18.05.2019 04:58 (6 years ago)

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 не выполняются, не видит их. Заранее спасибо за помощь!

Aleks Versus Moderator 18.05.2019 04:58 (6 years ago)

Насчитал два лишних enda в первом куске, и один лишний во втором. Но это мелочь.

Не работает по одной простой причине:
В первом куске:

tiket_msk_011 = 1

Во втором куске:

... and tiket_msk_11 = 1:

Разные переменные.

Большая просьба, помещайте код в блок CODE.

Привет парни, помогите создать реальное время в игре, пример (юлианского календаря прошу не предлагать). Заранее благодарен.

Aleks Versus Moderator 18.05.2019 05:00 (6 years ago)

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) этот но я тоже не совсем понял как он работает. Вроде он требует доп файл с библиотекой.
В общем пока все. Надеюсь на вашу помощь.

Edited at 07.02.2018 08:05 (8 years ago)
Aleks Versus Moderator 18.05.2019 05:06 (6 years ago)
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
Последний из Гаяр Moderator 18.05.2019 05:06 (6 years ago)

Не знаю почему, но я сел за написание игрушки в qsp.
Программист, как и писатель из меня никакой, но тем не менее.
При создании моего шедевра у меня возникла проблема:
при тесте локации проигрыватель выдаёт мне ошибку и говорит, что не хватает
[end] в “многострочной форме операторов” и указывает мне строку (84),
которой в данной локации вообще нет (код заканчивается на 77).
Вопрос: что делать?
P.S. Код не могу сюда выложить, так как он достаточно длинный.
Если что пишите в ЛС.
Заранее спасибо.

Экспортируйте файл игры в текстовый документ. Смотрите через блокнот (с выключенными переносами) - вот в нем и найдете все точно по номеру строки. А так ошибки удобнее всего находить через анализатор - https://qsp.org/forum/281-analizator-koda-qsp
А код можно не бояться выкладывать, если что - если слишком длинный, то под спойлер)

Log in or Register to post comments.