RU 📌 Pinned

Как сделать?

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

Организовал входящий звонок, то бишь в определённое время в любой локации появляется действие “Входящий вызов”, ведущее к диалогам :
Создал локацию “Вызов” с кодом:
if year=2016 and month=5 and day=20 and hour>=11 and hour<=12:act’<font color=red><center>Входящий вызов</center></font>’:gs’Диалог_Хлоя_Т’
end
В стартовой локации написал:
$counter=‘Вызов’
Всё работает , но действие “Входящий вызов” не пропадает после применения.
delact $selact куда только не писал - то qgen ругается , то основное окно диалогами забивает.
Может я в принципе неправильную схему сделал ?
Или ещё что-то добавить надо?

Сергей,
А вы прочитали что такое $counter и как там код выполняется?

Aleks Versus Moderator 23.10.2016 15:26 (9 years ago)

Сергей,
надо так:

if year=2016 and month=5 and day=20 and hour>=11 and  hour<=12 and флаг_входящий_вызов<>1:
     act'<font color=red><center>Входящий вызов</center></font>': gs'Диалог_Хлоя_Т'
     флаг_входящий_вызов=1
end

Тогда действие будет выводиться один раз. Время в игре привязано к действительному? Если нет, тогда от локации $counter вообще лучше избавиться.

Здравствуйте! У меня тут, возможно, очень нубовский вопрос, но все же.
Возникал проблема с переменными. Нужно что бы в зависимости от выбора в тексте менялась переменная. Есть переменная $f и я не понимаю, как менять ее значение в зависимости от выбора игрока.

Aleks Versus Moderator 23.10.2016 17:54 (9 years ago)

Straginski,
рассмотри пример:

Spoiler
! задаём значение переменной? если ещё не задано
if $f='': $f = 'яблоко'
! выводим текст на экран
*pl 'Миша сорвал с ёлки '+$f+'.'
! создаём действия
act 'яблоко':
	! задаём значение переменной
	$f = 'яблоко'
	! чтобы текст на экране изменился
	! нужно стереть текст и вывести заново
	! команда goto автоматически стирает текст
	! и выполняет код на локации
	! поэтому возвращаемся обратно на эту локацию
	goto $curloc
end
act 'апельсин':
	$f = 'апельсин'
	goto $curloc
end
act 'ананас':
	$f = 'ананас'
	goto $curloc
end
act 'бензопилу':
	! а можно так
	$f = 'бензопилу'
	*clr
	*pl 'Миша сорвал с ёлки '+$f+'.'
end

Aleks Versus,
Спасибо. Работает. Время не привязано к действительному. Но мне нужна локация с которой можно активировать действия не привязанные к какой то определённой локации , но привязанные к игровому времени или к развитию сюжета. Посоветуйте как это лучше исполнить .В onnewloc у меня календарь.

Aleks Versus Moderator 24.10.2016 15:36 (9 years ago)

Сергей,
по идее, каждый раз, как у тебя в игре меняется время, тебе нужно пересчитывать все значения (minute hour и т.д.). Лучше всего это делать на специальной локации, которая лишь этим и будет заниматься. У меня такая локация называется “календарь”. Ты календарь собрал в onnewloc, что в принципе неплохо, если всякое действие возвращает тебя на локацию через goto. Например:

act 'съесть печеньку':
   time=time+3
   goto $curloc
end

Так вот. На той локации, где у тебя пересчитывается время, и нужно проверять достигло ли время нужных значений (т.е. у тебя на onnewloc). Чтобы не загромождать onnewloc кучей разного кода, можно написать отдельную локацию, где будут собраны все проверки времени с выводами событий, назвать например “события по времени”, а уже к ней из onnewloc обратиться через gosub:

gosub 'события по времени'

Aleks Versus,
Спасибо за совет. Так и сделал. Работает. В связи с этим возникает другой вопрос: ограничивается ли число локаций к которым onnewloc может одновременно обращаться через gosub?

Aleks Versus Moderator 24.10.2016 20:54 (9 years ago)

Сергей,
нет, число не ограничивается. Но об ограничениях в QSP всё же советую почитать вот тут.

Добрый день. Пытаюсь сделать игру, где развитие событий зависит от «кармы» игрока. Для этого создал две переменные «Белая_карма» и «Черная_карма», которые записал в специальной локации «Карма» у каждой значение 5. В одной локации написал код:
if Офис = 0:
act “Сообщить службе безопасности”:
PL “Свяжись с Робертсом, опиши ситуацию в общих чертах. Я выезжаю в офис, встретимся все там.”
Белая_карма = Белая_карма + 1
Офис = Офис + 1
GOTO $CURLOC
end
end
в другой локации:
if Белая_карма = 6:
pl”В офисе полумрак, его освещают только мониторы, на которые выводятся изображения с камер из Barbie land. Джон Робертс и Марк о чем-то спорят, сильно жестикулируя.”
act “Подойти к Робертсону и Марку”:
goto “Робертс и Марк”
end
end
Однако действие не запускается. Я так понимаю, что значение кармы не изменилось. Догадываюсь, что нужно сообщить системе где находятся данные кармы (чтобы не писать ее каждый раз), но не знаю как? Подскажите, пожалуйста.

Nikus,
А специальная локация «Карма» инициирована? Что-то вроде: gs ‘Карма’ на начальной локации.

St-john, Не очень понял вопрос. Я нуб в QSP и програминге. Скорее всего нет просто создал локацию вбил туда в код описания данные

А что за “специальная локация”? Если у карм должно быть стартовое значение “5”, то достаточно в стартовой локации это записать

А вообще советую сделать себе возможность проверять все переменные и менять их в самой игре, пока тестируете. Мне это когда-то посоветовали, и я советую тоже:.
1. В стартовой локации пусть, например, будет строка $usercom = ‘USERCOM’
2. Создайте локацию “usercom”
3. В ней напишите:
if USER_TEXT = ‘Чит’:
$cheat = input (”Введите исполняемый код”)
dynamic $cheat
end
4. Теперь в самой игре вы можете ввести в строке ввода сначала “Чит”, а потом, например, <<Белая_карма>> и точно знать, изменилась ли она и когда.
Ну, и все что угодно можно вводить)


И еще, попытаюсь, объяснить. Если вы просто, как говорите, сделали “специальную” локацию, то, конечно, в игре она не прочлась. Я тоже совсем не программист и вообще гуманитарий, но ведь тут же понятно: qsp не считывает все коды подряд, а только те, которые вы ему даете считать (исключение - counter, считывающий коды через определенные промежутки времени, и onnewloc - при обновлении локации). Если вы создали отдельную локацию (хотя зачем?), то команда gs ‘Карма’ - считает с нее информацию. Где уж эту команду ставить - вам решать.

mkir,
Спасибо. Я пытаюсь создать вариант разветвленного сюжета, сценарий запускается исходя из значения черной или белой кармы. Последовал вашему совету и система сообщила, что значение кармы = 1 (хотя в коде написано Белая_карма = Белая_карма + 1 и я ожидал, что получу значение “6”) Т.е. я так понимаю, что системе нужно объяснить где храниться изначальные данные кармы и куда за ними обращаться. Только я не знаю, как это сделать

приветы! а дайте пожалуйста ссылку на навигатор, а то чего то не нашел…

Log in or Register to post comments.