Автор | Сообщение |
|
Отправлено: 14.06.09 11:02. Заголовок: Диалог
Здраствуйте. вот недавно (дня 4 назад) занялся изучением движка. Намного больше понравилось писать все действия через команды, выполняемые при посещении. Вот у меня диалог: цитата: | *pl '- Чай, кофе?' act 'Благодарю': $selact DELACT $SELACT Delact 'Не - спасибо, я сегодня уже что-то не то съел... ' end act 'Не - спасибо, я сегодня уже что-то не то съел... ': $selact DELACT $SELACT delact 'Благодарю' end |
| Дальше у меня при любом варианте ответа будет одно и тоже продолжение. пока кроме как в вставки в каждый ответ действия не знаю как сделать иначе. Но у меня там ещё на 150 строк текста, а там ещё не единожды встречаются подобные действия. Вот вопрос, что тут можно сделать? Пока кроме как присвоить какой-то переменной выполнение программы (макрос по сути) либо сделать ссылку на часть программы мыслей других не приходит. Но из-за своего незнания не знаю как и это сделать =))
|
|
Профиль
Цитата
Ответить
|
Новых ответов нет
[см. все]
|
|
|
| менеджер по рекламе
|
|
|
Отправлено: 14.06.09 12:11. Заголовок: Если у тебя один и т..
Если у тебя один и тот же кусок кода повторяется много раз, можешь вынести его на отдельную локацию, а вызывать в нужных местах через gs'локация с кодом' Или ты имеешь в виду что у тебя большой диалог который при любом выборе в конце концов закончится одинаково?
|
|
Профиль
Цитата
Ответить
|
|
| менеджер по рекламе
|
|
|
Отправлено: 14.06.09 12:20. Заголовок: можно, кстати, упрос..
можно, кстати, упростить код. *pl писать не обязательно, 'текст' по умолчанию выводится именно так. $selact - это по моему было в одном из примеров... Тоже необязательно, то действие которое ты выбрал по умолчанию хранится в переменной $selact цитата: | '- Чай, кофе?' act 'Благодарю': DELACT $SELACT Delact 'Не - спасибо, я сегодня уже что-то не то съел... ' end act 'Не - спасибо, я сегодня уже что-то не то съел... ': DELACT $SELACT delact 'Благодарю' end |
| Так же, если у тебя всего два варианта выбора, не обязательно использовать: цитата: | DELACT $SELACT delact 'Благодарю' |
| оператор cla убирает все действия. то есть, тот же код в ещё более сокращённом варианте: цитата: | '- Чай, кофе?' act 'Благодарю': cla end act 'Не - спасибо, я сегодня уже что-то не то съел... ': cla end |
| единственно, после совершения действия должен происходить хоть какой-то код, кроме очистки списка действий) Если тебе нужно встроить туда один и тот же ответ для обоих вариантов, можно либо скопировать его, либо, если таких мест много - попробовать через gs: цитата: | '- Чай, кофе?' act 'Благодарю': cla gs 'локация с действием' end act 'Не - спасибо, я сегодня уже что-то не то съел... ': cla gs 'локация с действием' end |
|
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 12:24. Заголовок: WladySpb пишет: Или..
WladySpb пишет: цитата: | Или ты имеешь в виду что у тебя большой диалог который при любом выборе в конце концов закончится одинаково? |
| Да, именно так. Пробвал через JUMP, но наверно пишу что-то не так.... цитата: | act 'прыжок': Jump 'LABEL' :LABEL |
| что в этой записи может быть не правильно?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 12:28. Заголовок: WladySpb пишет: $se..
WladySpb пишет: цитата: | $selact - это по моему было в одном из примеров... Тоже необязательно, то действие которое ты выбрал по умолчанию хранится в переменной $selact |
| $selact выводит название этого действие в окно как текст как я понял
|
|
Профиль
Цитата
Ответить
|
|
| менеджер по рекламе
|
|
|
Отправлено: 14.06.09 12:29. Заголовок: jump работает только..
jump работает только в "текущем" куске кода.. это не указано в хелпе, но такая конструкция не прокатит. не совсем понимаю почему, это Байт лучше объяснит, но в данном случае, оператор jump ищет label в пределах кода выполняемого после выбора действия. jump подходит только для организации циклов. Создай новую локацию и помести в неё код вывода действия, это проще.
|
|
Профиль
Цитата
Ответить
|
|
| менеджер по рекламе
|
|
|
Отправлено: 14.06.09 12:31. Заголовок: Molok Ну, если текст..
Molok Ну, если текст не отличается, то можно оставить.. Я обычно отдельно вывожу, плюс, обычно нужно ещё вывести ответ.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 12:34. Заголовок: WladySpb пишет: Соз..
WladySpb пишет: цитата: | Создай новую локацию и помести в неё код вывода действия, это проще |
| таких развилок выходить довольно много. под каждую создавать локацию выйдет слишком грамоздко. А что можно использовать за место Jump? Вроде в бейсике работало goto "номер строки", но тут тоже не прокатило....
|
|
Профиль
Цитата
Ответить
|
|
| менеджер по рекламе
|
|
|
Отправлено: 14.06.09 12:47. Заголовок: Molok если хочешь вс..
Molok если хочешь всё в одной локации замутить, попробуй через аргументы. Предположим, локация называется диалог. код у нас будет выглядеть так: цитата: | if $ARGS[0]!'': jump $ARGS[0] *pl '- Чай, кофе?' act 'Благодарю': $selact DELACT $SELACT delact 'Не - спасибо, я сегодня уже что-то не то съел... ' gs 'диалог','LABEL' end act 'Не - спасибо, я сегодня уже что-то не то съел... ': $selact DELACT $SELACT delact 'Благодарю' gs 'диалог','LABEL' end exit :LABEL 'У нас в меню есть фирменное блюдо!' act'следующее действие': end |
| В массиве $ARGS хранится передаваемая в локацию информация, то есть, строчкой gs 'диалог','LABEL' мы переходим на локацию диалог с аргументом LABEL а в начале локации проверяем аргументы, и если массив не пуст, переходим jump'ом (здесь он сработает) в место указанное аргументом. exit нужен, чтобы код после LABEL не начал выполнятся раньше чем нужно.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 13:12. Заголовок: Я конечно понимаю чт..
Я конечно понимаю что тебя уже достал этот нуб, хотя может ещё и не достал =) В общем вот кусок игры, собственно локация на которой расположен диалог: http://slil.ru/27756055 Понимаю что можно было всё сделать компактней но я на этом учусь =) Ближе к концу тот кусок, на котором мне надо сделать этот переход. Как его сделать я не пойму =( В примерах ничего дельного не нашёл. Может покажешь на примере? А то так я не догоняю....
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 13:19. Заголовок: Если речь всё ещё о ..
Если речь всё ещё о цитата: | act 'прыжок': Jump 'LABEL' :LABEL |
| то вставляем в начало локации if $ARGS!'':jump $ARGS и далее вместо всех подобных Jump 'LABEL' вставляем gt 'название_текущей_локации', 'LABEL' Конечно, можно вместо gt указать gs - программа будет вести себя соответственно оператору.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 13:27. Заголовок: Код ошибки 120. Неве..
Код ошибки 120. Неверное количество числа функций/аргументов....
|
|
Профиль
Цитата
Ответить
|
|
|
Отправлено: 14.06.09 13:29. Заголовок: Molok, какая версия ..
Molok, какая версия QSP?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 13:31. Заголовок: 5.4.3..
Спасибо за подсказку) вот обновить я не догадался, вроде работает =)
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 13:38. Заголовок: Molok, текущая верси..
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 14.06.09 13:39. Заголовок: OK...
OK.
|
|
Профиль
Цитата
Ответить
|
|
| менеджер по рекламе
|
|
|
Отправлено: 16.06.09 09:16. Заголовок: И, кстати, по мотива..
И, кстати, по мотивам этой темы на сайте появился новый пример диалога) Так что, при наличии вопросов "как сделать" можно попробовать покопаться в коде, а если что будет непонятно - мучить меня вопросами "как сделано"
|
|
Профиль
Цитата
Ответить
|
|