Если у Вас есть вопросы, как сделать что-то в программе или Вы не понимаете чего-то (то ли это ошибка, то ли фича и т.д.), то спрашивайте в этой теме.
Неактивен
Спасибо за консоль!
Но я вот не понимаю, при каком условии переменная в консоль попадает? Объявляю и использую я переменных больше, чем отображается в списке объектов (в редакторе) и соответственно в консоли.
Неактивен
Попадают туда по мере присваивания им значений.
Неактивен
Как пофиксить проблему с кодировкой? Например, вот http://mutnosoft.ru/story.html. Проблема, вроде, с тем, что по-дефолту не та кодировка, что надо. И это можно пофиксить через htacces как-то.
Неактивен
Да, это у вас сервер неправильный заголовок выдаёт. Посмотрите инфу по настройке htaccess, например, здесь: http://www.askapache.com/htaccess/setti … cess.html. Нужно выставить именно UTF-8.
Неактивен
А почему пассажи, которые выводятся по [[+|] выводятся обязательно через три звёздочки? Можно это как-нибудь опционировать?
Отредактировано sosiskin (28.07.2012 13:26)
Неактивен
Есть две истории. Как их соединить вместе, не переписывая параграф за параграфом?
Неактивен
Есть две истории. Как их соединить вместе, не переписывая параграф за параграфом?
Открыть в код блокноте и скопировать? :)
Неактивен
Штатно. Через кнопку загрузить/добавить. Читайте мануал.
Неактивен
sosiskin написал:
А почему пассажи, которые выводятся по [[+|] выводятся обязательно через три звёздочки? Можно это как-нибудь опционировать?
Пока нет. Их отсутствие может запутать читателя, когда параграф длинный он может не понять что что-то произошло после нажатия на ссылку.
Неактивен
По звёздочкам в итоге сделаю так. При нажатии на ссылку с + они добавляться не будут. А при использовании макроса actions - будут. Думаю, это всех устроит
Неактивен
В общем я уже сделал изменение переменных по нажатию ссылок. Но пришлось серьёзно перетрясти парсер. Надо теперь шлифануть и оттестировать.
Неактивен
Доступна новая версия 0.8.5. Подробности см. здесь: https://forum.ifiction.ru/viewtopic.php … 471#p24471
Неактивен
Здравствуйте! Во время очередного тестирования проекта открылась пустая веб-страница. Как-будто пустой проект! Меню сверху было отображено. Писалась книга на версии программы 0.9. Сегодня попыталась открыть и протестировать в версии 0.9.6. Результат тот же. Браузер - Firefox.
Автор хватается за сердце... Подскажите, что это может быть?
Неактивен
Скиньте мне файл, который пытаетесь открыть. Это единственный вариант найти причину. Я напишу вам в личку мой e-mail.
Неактивен
Доступна релизная версия 1.0. Подробности здесь: https://forum.ifiction.ru/viewtopic.php … 600#p24600
Неактивен
Если из интернета, то просто укажите ссылку на неё.
Если с вашего диска, то скопируйте её туда же, где сохранён Ваш файл истории и просто укажите её имя.
Неактивен
1. Можно ли присваивать имя одной переменной - другой переменной? Например, $объект1 = $объект2
Просто при написании обширной работы заготовки текста удобно хранить в библиотеке с индексами, и при надобности просто присваивать нужное название переменной.
2. Можно ли в конце названия параграфа присваивать не одну, а несколько переменных? [[Текст, который будет виден | Название параграфа {$объект1 = выражение1; $объект2 = выражение2}]]
Неактивен
Цитирую руководство:Можно изменять значения нескольких объектов сразу:
{$объект1=25} {$объект2='Кирпич'} {$объект3=$объект1+10}
Неактивен
DoubleDragon написал:
Цитирую руководство:
Можно изменять значения нескольких объектов сразу:
{$объект1=25} {$объект2='Кирпич'} {$объект3=$объект1+10}
ок, спасибо, может я проглядел, но в онлайн хелпе я такого не видел
вообще, оглавление хелпа неплохо бы когда-нибудь с подпунктами написать, иногда очень долго листать приходится, ища нужную инфу.
Вот я по звуку хотел спросить в частности:
Звук по умолчанию играет один раз, или в цикле?
Ну, там может какой-нибудь <<cycle_sound>> макрос есть, чтоб файлик в петле игрался.
Второе - поддерживается ли OGG? У него на малых битрейтах компрессия лучше звучит, чем у МР3, и можно супермаленькими файлами оперировать, трафик мобильный экономя, опять же.
Неактивен
Звук в цикле играет. OGG поддерживается. Более того, для совместимости со всеми браузерами необходимо, чтобы имелись и OGG и MP3 файлы. Они должны иметь одинаковое имя и лежать в одной папке.
Неактивен
А еще было бы здорово, если бы локация обновлялась при нажатии на ссылку, ну или была бы такая возможность.
Например:
=========================
ТЕКСТ
[[+Первая.. | о_заводе {$пролог = 1}]]
<<if $пролог eq 1>>
[[+Вторая... | о_заводе {$пролог = 3}]]
<<endif>>
[[+Третья... | о_заводе {$пролог = 2}]]
========================
При нажатии на первую ссылку у меня появляется в локации текст и параграф становится равен 1. Но вторая ссылка не становится видимой, хотя условие выполняется.
Неактивен
Вета написал:
вторая ссылка не становится видимой, хотя условие выполняется.
но стоп, условие же находится внутри цикла if-then-endif, как же оно выполнится, если условие для его выполнения не выполнено?
Неактивен
sosiskin написал:
Вета написал:
вторая ссылка не становится видимой, хотя условие выполняется.
но стоп, условие же находится внутри цикла if-then-endif, как же оно выполнится, если условие для его выполнения не выполнено?
Почему не выполнено? Я нажимаю на первую ссылку, там у меня смена значения объекта (пролог=1) и условие становится выполненным. А вторая ссылка все равно не появляется.
Неактивен
Не выполнено, потому что при нажатии на первую ссылку, вы передаёте управлению параграфу, на который ведёт ссылка. В данном случае на параграф "о_заводе".
Неактивен
DoubleDragon написал:
Не выполнено, потому что при нажатии на первую ссылку, вы передаёте управлению параграфу, на который ведёт ссылка. В данном случае на параграф "о_заводе".
А как сделать, чтобы выполняло тогда? В параграфе "о_заводе" нужно менять значение переменной?
Неактивен
Вета написал:
DoubleDragon написал:
Не выполнено, потому что при нажатии на первую ссылку, вы передаёте управлению параграфу, на который ведёт ссылка. В данном случае на параграф "о_заводе".
А как сделать, чтобы выполняло тогда? В параграфе "о_заводе" нужно менять значение переменной?
А параграф с кодом как называется "о_заводе"? Или это другой параграф?
Неактивен
Это другой.
Неактивен
Вета написал:
А как сделать, чтобы выполняло тогда? В параграфе "о_заводе" нужно менять значение переменной?
Даже если поменять значение переменной в параграфе "о_заводе", результат будет тем же. А все потому, что описание завода добавляется к текущему параграфу, который был сформирован при старом значении переменной, и с тех пор не обновлялся.
Как вариант, можно вместе с частью описания завода выводить и дополнительную ссылку на продолжение описания:
параграф "о_заводе" <<if $пролог eq 1>> Это большой завод. [[+Хочу знать больше|о_заводе {$пролог = 2}]] <<elseif $пролог eq 2>> У него есть высокая труба. [[+Хочу знать больше|о_заводе {$пролог = 3}]] <<elseif $пролог eq 3>> Верх трубы теряется в облаках... или это дым? <<endif>>
Не проверял, но по идее должно работать.
Неактивен
третий день бьюсь, не могу понять ,как работают объекты. мне надо сделать например непроходимые двери пока не найдешь ключ. и после того как ключ взят на другой странице дверь рабочая ссылка это можно наглядно как нибудь сделать. виде примера. очень надо сделать
Неактивен
Простейший пример:
###параграф "Комната 1"### Вы видите дверь. <<if $ключ>> Дверь заперта, но, к счастью, у Вас есть ключ. [[Открыть дверь|Комната 2]] <<else>> Похоже, без ключа эту дверь не откроешь. [[Глянуть под ковриком|Коврик]] <<endif>> ###параграф "Коврик"### Под ковриком Вы нашли ключ. <<set $ключ = 1>> [[Вернуть коврик на место|Комната 1]]
Отредактировано Morych (26.08.2012 17:43)
Неактивен
Возможно ли сделать, чтобы носить инвентарь с собой? чтобы использывать его с определенной целю. Например есть трещина в сырой стене, текст не выделен, ходим дальше по лакациям, находим кирку-она срабатывает не как ключ, а только если игрок в определенном месте ее выбрит. Вообще было бы здорово если бы уже профи выложили примеры разных хитростей в игре, это бы помогло всем. Да и создавать интереснее.
Неактивен
Я делаю инвентарь примерно так. Есть специальный параграф "StoryMenu", там делаем ссылку с плюсом на параграф "Инвентарь", в котором выводим перечень предметов. Каждый предмет - тоже ссылка с плюсом, которая ведет на параграф описания предмета, а также доступных действий с этим предметом.
:: StoryMenu [[+Инвентарь]] :: Инвентарь <<set $n = 0>> У Вас в кармане: <<if $кирка>><<set $n++>>[[+кирка]]<<endif>><<if $топор>><<if $n gt 0>>, <<endif>><<set $n++>>[[+топор]]<<endif>><<if $золото gt 0>><<if $n gt 0>>, <<endif>><<set $n++>>[[+золотые монеты]] (<<print $золото>> шт.)<<endif>><<if $n eq 0>>ничего нет<<endif>>. :: кирка Старая ржавая кирка. [[+Чистить кирку]] <<if $трещина and !($стена_сломана)>> [[Долбить стену с трещиной|Стена с трещиной {$стена_сломана = 1}]] <<endif>> :: Стена с трещиной Вы в заброшенной штольне. <<if $стена_сломана>> В сырой стене теперь есть проход. [[Лезть в проход {$трещина = 0}]] <<else>> <<set $трещина = 1>> В глаза бросается трещина в сырой стене. <<endif>> [[Уйти|Выход из пещеры {$трещина = 0}]]
Вот и всё, пробуйте. Осталось только на какой-нибудь локации найти кирку, т.е. присвоить $кирка = 1. В инвентаре можно заметить переменную $n. Она считает имеющиеся предметы, чтобы дописывать запятые, если предметов больше 1 и вставить надпись "ничего нет", если число предметов = 0. А насчёт разных хитростей в игре, то, я думаю, профи их выложат, но после конкурса.
Неактивен
Пожалуйста. На самом деле все просто. Для каждой вещи в инвентаре добавляйте блок:
<<if $предмет gt 0>><<if $n gt 0>>, <<endif>><<set $n++>>[[+предмет]] (<<print $предмет>> шт.)<<endif>>
Это в общем случае, если экземпляров данного предмета может быть несколько. Т.о. переменная $предмет хранит количество.
Если немного поработать, можно описание инвентаря сделать более литературным. Например, если разных предметов у ГГ больше одного, то перед последним предметом вместо запятой можно поставить "и". Подскажу, что для этого сначала нужно посчитать количество разных предметов.
Кстати, повторяющиеся куски кода:
<<if $n gt 0>>, <<endif>><<set $n++>>
можно (и нужно) поместить в специальный параграф, назовем его, "Инв", который потом вызывать макросом <<display 'Инв'>> :
<<if $предмет gt 0>><<display 'Инв'>>[[+предмет]] (<<print $предмет>> шт.)<<endif>>
Отредактировано Morych (27.08.2012 13:19)
Неактивен
sosiskin написал:
<<set $n++>> - это что, инкремент переменной на единицу? я о двух плюсиках нигде в хелпе не встречал упоминаний.
Совершенно верно. Эквивалентно <<set $n = $n + 1>>
Еще есть инкремент на произвольную величину: <<set $n+=5>>
Теоретически должен работать синтаксис JavaScript. Нужно спросить у DoubleDragon.
Неактивен
Работает. Кроме $n--.
Неактивен
Morych написал:
Пожалуйста. На самом деле все просто. Для каждой вещи в инвентаре добавляйте блок:
<<if $предмет gt 0>><<if $n gt 0>>, <<endif>><<set $n++>>[[+предмет]] (<<print $предмет>> шт.)<<endif>>
Это в общем случае, если экземпляров данного предмета может быть несколько. Т.о. переменная $предмет хранит количество.
Если немного поработать, можно описание инвентаря сделать более литературным. Например, если разных предметов у ГГ больше одного, то перед последним предметом вместо запятой можно поставить "и". Подскажу, что для этого сначала нужно посчитать количество разных предметов.
Кстати, повторяющиеся куски кода:
<<if $n gt 0>>, <<endif>><<set $n++>>
можно (и нужно) поместить в специальный параграф, назовем его, "Инв", который потом вызывать макросом <<display 'Инв'>> :
<<if $предмет gt 0>><<display 'Инв'>>[[+предмет]] (<<print $предмет>> шт.)<<endif>>
вот такой бы блок для вещей сделать в макросы и было удобно если бы пользователь мог вносить в макросы свои блоки. У меня уже больше 41 параграфа я теряюсь периодически в них, тут как то по глупости нажал раставить- был взрыв мозга. Поэтому если создавать еще параграфы на макросы, то лабиринты нервно курят.
Отредактировано vinurd (28.08.2012 03:09)
Неактивен
vinurd написал:
вот такой бы блок для вещей сделать в макросы и было удобно если бы пользователь мог вносить в макросы свои блоки.
Это, скорее, сниппеты нежели макросы. Написал про них в тему предложений.
Неактивен
Подскажите, как сделать такую вещь, чтобы при вставке текста из другой локации, он бы не переносился на новую строку.
Пример:
#1
Стрелка указывает на <<display '2'>>
-------------------------------------------------------
Если есть несколько условий в параграфе 2, текст из параграфа 2 переносится почему-то в параграфе 1 на новую строку. А мне нужно чтобы он продолжал текст.
Неактивен
Вета написал:
Подскажите, как сделать такую вещь, чтобы при вставке текста из другой локации, он бы не переносился на новую строку.
Пример:
#1
Стрелка указывает на <<display '2'>>
-------------------------------------------------------
Если есть несколько условий в параграфе 2, текст из параграфа 2 переносится почему-то в параграфе 1 на новую строку. А мне нужно чтобы он продолжал текст.
Все условия в параграфе 2 пишите в одну строку и убедитесь, что весь текст параграфа не содержит ни одного перевода строки:
<<if $strelka eq 0>>север<<elseif $strelka eq 1>>восток<<elseif $strelka eq 2>>юг<<else>>запад<<endif>>
UPD: Flash меня опередил
Отредактировано Morych (01.10.2012 15:08)
Неактивен
О, спасибо )
Кстати, я поняла, какую фишку я еще хочу.
Чтобы в ссылках добавдляющих (+) была возможность обновлять текущий параграф (аналогия gs на qsp). А то приходится создавать еще один лишний параграф и действия.
Отредактировано Вета (01.10.2012 15:46)
Неактивен
О! еще непонятки есть
#книги_з1
Ряды книг
[[+Взять книгу|книги_з1]]
<<if $книга neq 1 and $часы_з1 eq 1>>
Нужно взять книгу
<<set $книга = 1>>
<<else>>
Книга не нужна
<<endif>>
===========================
Соль в том,то даже если я не нажимаю "Взять книгу", он мне уже отображает условия (читайте - обновляет локацию). Дополнительную локацию создавать не хочу, их итак много. Как теперь сделать так, чтобы локация не обновлялась, пока не нажмешь действие.
Неактивен
Вета написал:
Соль в том,то даже если я не нажимаю "Взять книгу", он мне уже отображает условия (читайте - обновляет локацию). Дополнительную локацию создавать не хочу, их итак много. Как теперь сделать так, чтобы локация не обновлялась, пока не нажмешь действие.
Обработка кода не заканчивается на ссылках. Поэтому при первом же входе в локацию, пишется "Ряды книг", ниже ссылка "Взять книгу" и далее текст из условия. Поскольку стоит else в условии, а не elseif, то в любом случае какой-то текст из условия напишется. На самом деле локация не обновлялась, просто код выполнился до конца.
А что нужно сделать? Чтобы описание локации и собирание предметов были в одном параграфе? Если так, то можно использовать передачу параметра при переходе:
#книги_з1 <<if !($take)>> #просто описание Ряды книг [[+Взять книгу|книги_з1 {$take = 1}]] <<elseif $take eq 1>> #действие с книгой <<if $книга neq 1 and $часы_з1 eq 1>> Нужно взять книгу <<set $книга = 1>> <<else>> Книга не нужна <<endif>> <<endif>>
Отредактировано Morych (01.10.2012 18:13)
Неактивен
Morych написал:
Вета написал:
Соль в том,то даже если я не нажимаю "Взять книгу", он мне уже отображает условия (читайте - обновляет локацию). Дополнительную локацию создавать не хочу, их итак много. Как теперь сделать так, чтобы локация не обновлялась, пока не нажмешь действие.
Обработка кода не заканчивается на ссылках. Поэтому при первом же входе в локацию, пишется "Ряды книг", ниже ссылка "Взять книгу" и далее текст из условия. Поскольку стоит else в условии, а не elseif, то в любом случае какой-то текст из условия напишется. На самом деле локация не обновлялась, просто код выполнился до конца.
А что нужно сделать? Чтобы описание локации и собирание предметов были в одном параграфе? Если так, то можно использовать передачу параметра при переходе:Код:
#книги_з1 <<if !($take)>> #просто описание Ряды книг [[+Взять книгу|книги_з1 {$take = 1}]] <<elseif $take eq 1>> #действие с книгой <<if $книга neq 1 and $часы_з1 eq 1>> Нужно взять книгу <<set $книга = 1>> <<else>> Книга не нужна <<endif>> <<endif>>
А когда второй раз в локацию зайдешь, он разве все не отобразит опять? Мне действия с книгой нужно чтобы появлялись, когда у меня в другой локации там сработает переменная часы_з1. В общем, так и так делать еще одну локацию. Печалька.
Отредактировано Вета (01.10.2012 19:22)
Неактивен
Вета написал:
А когда второй раз в локацию зайдешь, он разве все не отобразит опять? Мне действия с книгой нужно чтобы появлялись, когда у меня в другой локации там сработает переменная часы_з1. В общем, так и так делать еще одну локацию. Печалька.
Главное без паники! Со всем разберемся!
Давай всё же определимся с задачей для ясности. Есть локация с описанием. На ней валяется предмет, который можно взять (если он не взят) и только при срабатывании какой-то переменной (в другой локации). В этом случае к описанию добавляется фраза о необходимости взять предмет и ссылка-действие. При подборе предмета также выводится соответствующая фраза, добавляясь к описанию. Самое главное - всё это должно быть втиснуто в один параграф. Верно? Если нет, поправь. Тогда код параграфа:
<<if !($take)>> #по умолчанию выполняется это условие, покажем описание: Внезапно, ряды книг! Тысячи их! #и добавим к описанию ещё строчку и, возможно, ссылку: <<if $часы_з1 eq 1 and $книга eq 0>> #часы сработали и книг при себе нет: Нужно [[+взять книгу|книги_з1 {$take = 1}]]! <<else>> #иначе: Книга не нужна. <<endif>> [[Покинуть локацию|start]] <<elseif $take eq 1>> #перешли по +ссылке в эту же локу, но с другим значением параметра take: Вы берёте книгу. <<set $книга = 1>> #на всякий случай обнулим take <<set $take = 0>> <<endif>>
В стартовой локации не забудь инициализировать переменную <<set $книга = 0>>
Неактивен
kerber, в твоём варианте, если часы не сработали, при нажатии на ссылку - она станет недоступной, но к описанию локации ничего не добавится.
Ой, уже удолил
Отредактировано Morych (01.10.2012 22:14)
Неактивен
Спасибо, Морич, да как-то так. Дальше буду думкать
Неактивен
Вета написал:
Спасибо, Морич, да как-то так. Дальше буду думкать
"Морич" - это по-буржуйски. Всё прогрессивное человечество говорит "Мóрыч"
Ну, если что, обращайся.
Неактивен
Кстати, еще вопрос по аудио.
1. Можно ли вставлять мелодии в переходах (как объекты)?
2. Можно ли вставлять аудио из папки с игрой или только с сайта?
Неактивен
Вета написал:
Кстати, еще вопрос по аудио.
1. Можно ли вставлять мелодии в переходах (как объекты)?
2. Можно ли вставлять аудио из папки с игрой или только с сайта?
Мелодию можно запустить как из интернета:
[[File: http://sm.axmasoft.com/rsc/kr.mp3]]
так и с диска (проверено):
[[File: music\kr.mp3]] - в папке с игрой есть папка music, в которой лежит файл.
(Точно такая же ситуация с картинками.)
В переходах можно вставлять только переменные. Но зато можно сделать так:
:: Аудио <<if $music eq 0>> [[File: music\mus0.mp3]] <<elseif $music eq 1>> [[File: music\mus1.mp3]] <<endif>>
и вызывать эту локацию по разному: [[Музыка 0|Аудио {$music = 0}]] или [[Музыка 1|Аудио {$music = 1}]]
Неактивен
Подтверждаю слова Morych о том, что музыка вставляется также, как и картинки.
Неактивен
Flash написал:
У меня почему-то не пашет.
Чтобы разобраться с проблемой, нужен конкретный пример, где не работает.
Неактивен
ОС какая? Windows, Linux, OS X? Русские буквы в пути есть? Файл истории был сохранён?
Неактивен
XP, в пути были, но в относительном не было. Что еще за файл истории? Мб, я просто сам что-то напутал, но так и не удалось получить тогда звучания музыки, что маловероятно.
Неактивен
Нет, так было раньше. Теперь путь выстраивается относительно сохранённого sm файла. А, ну ещё, если у вас Firefox, используйте ogg файл.
Неактивен
kerber написал:
Насколько я понял, путь прописывается от файла asm-preview.html
Т.е. папка music должна лежать в папке Program Data.
Я сохранял в файл игру и путь верный был.
DoubleDragon написал:
Нет, так было раньше. Теперь путь выстраивается относительно сохранённого sm файла. А, ну ещё, если у вас Firefox, используйте ogg файл.
У меня Opera.
Неактивен
Opera тоже mp3 не умеет. В руководстве написано, что надо класть оба файла - mp3 и ogg с одинаковым именем в одну папку. Тогда будет работать везде.
Неактивен
Подскажите, пожалуйста, как попроще сделать комбинирование предметов в инвентаре друг с другом. А то у меня получается с кучей параграфов на каждый предмет.
Неактивен
Вета, ты хочешь предоставить возможность игроку любой предмет попытаться соединить с любым другим? А стоит ли это делать, если в большинстве случаев мы увидим что-то вроде "Вы попытались соединить X и Y, но ничего не вышло"? Или большинство предметов у тебя как раз комбинируемые? Опиши, как ты хочешь, чтобы это выглядело? Может так: при выборе предмета инвентаря, после описания предмета есть ссылка "комбинировать...", при нажатии на которую выводится список предметов (кроме того, который соединяем). При выборе второго предмета переходим на параграф результата соединения. Попробую что-нибудь придумать. Но проще всего так, как, скорее всего, делаешь ты Только кучу параграфов можно всегда объединить благодаря передаче параметра.
Неактивен
Пример комбинирования двух предметов инвентаря
:: Start[::]22-45-0 <<set $кирка = 1>> <<set $топор = 1>> <<set $золото = 1>> :: StoryMenu[::]623-10-0 [[+Инвентарь {$item1 = 0}]] :: Инвентарь[::]580-299-0 <<set $n = 0>> <<if $item1 eq 0>> У Вас в кармане: <<else>> Выберите второй предмет: <<endif>><<if $кирка gt 0 and $item1 neq 1>><<display Запятая>>[[+кирка]]<<endif>><<if $топор gt 0 and $item1 neq 2>><<display Запятая>>[[+топор]]<<endif>><<if $золото gt 0 and $item1 neq 3>><<display Запятая>>[[+золотые монеты]] (<<print $золото>> шт.)<<endif>><<if $n eq 0>>ничего нет<<endif>>. :: Запятая[::]792-216-0 <<if $n gt 0>>, <<endif>><<set $n++>> :: кирка[::]720-503-0 #номер предмета = 1 <<if $item1 eq 0>> Старая ржавая кирка. <<if $n gt 1>>[[+комбинировать с...|инвентарь {$item1 = 1}]]<<endif>> <<elseif $item1 eq 2>> Взяв в одну руку кирку, а в другую топор, вы представили себя рудокопом-лесорубом. <<elseif $item1 eq 3>> Размахнувшись киркой, вы пробили отверстие в золотой монетке. Теперь можно повесить её на шею. <<endif>> <<if $item1 gt 0>> <<set $item1 = 0>> <<endif>> :: топор[::]864-504-0 #номер предмета = 2 <<if $item1 eq 0>> Настоящий топор лесоруба. <<if $n gt 1>>[[+комбинировать с...|инвентарь {$item1 = 2}]]<<endif>> <<elseif $item1 eq 1>> <<set $item1 = 2>> <<display кирка>> <<elseif $item1 eq 3>> Ловко орудуя топором, вы разрубили все ваши монеты пополам. Теперь у вас в два раза больше золота. <<set $золото = $золото * 2>> <<endif>> <<if $item1 gt 0>> <<set $item1 = 0>> <<endif>> :: золотые монеты[::]1008-504-0 #номер предмета = 3 <<if $item1 eq 0>> Монеты из чистого золота. <<if $n gt 1>>[[+комбинировать с...|инвентарь {$item1 = 3}]]<<endif>> <<elseif $item1 eq 1>> <<set $item1 = 3>> <<display кирка>> <<elseif $item1 eq 2>> <<set $item1 = 3>> <<display топор>> <<endif>> <<if $item1 gt 0>> <<set $item1 = 0>> <<endif>>
Неактивен
Хм... Я пока никак не делаю, я себе это мысленно представила. Такие вещи на АКСМЕ пока сложно реализуются, честно говоря.
Я вот думаю, как мне условия сделать в зависимости от нахождения игрока на локации, но, кажется, придумала. )
Неактивен
Вета написал:
Такие вещи на АКСМЕ пока сложно реализуются, честно говоря.
Приведённый выше код сложен? Можно по-другому: в параграфе описания предмета перечислить вручную все возможные действия с этим предметом (ссылка ведущая на этот же параграф, но с другим параметром, для уменьшения числа параграфов). Преимущество этого метода: действия будут оформлены более литературно.
Вета написал:
Я вот думаю, как мне условия сделать в зависимости от нахождения игрока на локации, но, кажется, придумала. )
Интересно, как?
Неактивен
Morych написал:
Вета написал:
Такие вещи на АКСМЕ пока сложно реализуются, честно говоря.
Приведённый выше код сложен? Можно по-другому: в параграфе описания предмета перечислить вручную все возможные действия с этим предметом (ссылка ведущая на этот же параграф, но с другим параметром, для уменьшения числа параграфов). Преимущество этого метода: действия будут оформлены более литературно.
Вета написал:
Я вот думаю, как мне условия сделать в зависимости от нахождения игрока на локации, но, кажется, придумала. )
Интересно, как?
Задавать на каждой локации $curloc='название_локации'
А потом в инвентаре делать условие.
if $curloc='Беседка': дейтвие1
if $curloc='Дом': дейтвие2
Надеюсь, так будет работать... Если "нет", Драгону срочно надо сделать ))
Отредактировано Вета (15.10.2012 17:01)
Неактивен
Вета написал:
if $curloc='Дом': дейтвие2
Надеюсь, так будет работать... Если "нет", Драгону срочно надо сделать ))
Вот так точно будет работать:
<<if $curloc eq 'Дом'>> [[+дейтвие2]] <<endif>>
Надо предложить Драгону сделать конвертер QSP --> ASM
Неактивен
Пятнишный пост.
Лучше просто и по-русски -- "Дракон". Есть физические причины иметь такой ник. "Драгон", как и "Морич" -- слишком по-имперски
Неактивен
Morych написал:
Вета написал:
if $curloc='Дом': дейтвие2
Надеюсь, так будет работать... Если "нет", Драгону срочно надо сделать ))Вот так точно будет работать:
<<if $curloc eq 'Дом'>> [[+дейтвие2]] <<endif>>
Надо предложить Драгону сделать конвертер QSP --> ASM
Ну да. Просто я помню кусповую конструкцию лучше ))
Отредактировано Вета (16.10.2012 11:13)
Неактивен
Подскажите, пожалуйста, а сколько максимум может быть локаций в программе? Или неограниченно?
И близкий вопрос: размер "рабочего стола", то есть поля, в котором находятся древа и ветки параграфов и переходов - неизменен? То есть, если делать игру с тысячами локаций, придётся параграфы визуально перетаскивать друг на друга, что бы вместились в этом поле? Или поле будет автоматически расширяться? Или можно как-то руками изменить его размер?
Неактивен
Количество параграфов неограничено.
Размер "Рабочего стола" пока изменять нельзя.
Если у вас очень много параграфов, например, более тысячи, воспользуйтесь функцией расстановки. Параграфы будут уплотнены. Можете написать мне личное сообщение, если имеете трудности с работой программы.
Неактивен
Значит, планируется изменение размеров? Это было бы замечательно Если предложения по этому изменению не было, то вношу Кстати, а почему бы не сделать функцию очень сильного уменьшения окошек параграфов? Буквально маленький квадратик, выбранного цвета, в котором ничего кроме названия параграфа мелким шрифтом. Очень бы пригодилось для общего охвата карты локаций, а то сейчас уменьшаются незначительно.
Проблем пока нет, но есть идея для одного проекта, и для начала нужно решить, в какой программе начинать работу, что бы потом не спохватываться.
А максимальное количество знаков в одном параграфе не планируется увеличивать выше 20к ?
Неактивен
Вопрос ещё один А ручной ввод присутствует? В обучалке про него не увидел, в самой программе тоже... Где-то на форуме промелькнуло что-то насчёт ручного ввода, но пробежал мимо, а теперь не могу найти. Если нет ручного ввода слов, то планируется ли в будущем? А если уже есть, то как его сотворить?
Неактивен
Извините, не понял, что такое "ручной ввод"?
А используя автоматическую расстановку можно вместить хоть 10000 параграфов, просто они будут сложены стопочками. Если же увеличивать размер рабочего стола, то программа будет неизбежно тормозить.
Неактивен
Debyr написал:
... но есть идея для одного проекта...
И этот проект "Война и мир 2: Интерактивная версия"
Ручной ввод -- это, наверно, возможность ввода какого-либо текста игроком в текстовом поле или в инпут боксе. Не иначе, чтобы организовать парсер
Неактивен
Текстовый ввод нужен не только для парсера (например, ввод имени, а у меня в игре есть сейф, например), а для парсера и не обязателен текстовй ввод (бывают игры где нужно выбирать глаголы и существительные из готового списка).
Неактивен
Я как раз хотел предложить использовать текстовый ввод по методу Флэша (при помощи "экранной клавиатуры"), если мы верно истолковали термин "ручной ввод".
Неактивен
Flash написал:
... для парсера и не обязателен текстовый ввод ...
Как раз таки обязателен. "Парсерная игра" эта ввод игроком команд вручную с клавиатуры. Выбор вариантов действий из готового списка, как и составление команды из готовых списков глаголов и существительных, называть "парсером", мягко говоря, не совсем корректно.
http://ifwiki.ru/Парсер
http://ifwiki.ru/Категория:Парсерные_платформы
Неактивен
Серый Волк написал:
Flash написал:
... для парсера и не обязателен текстовый ввод ...
Как раз таки обязателен. "Парсерная игра" эта ввод игроком команд вручную с клавиатуры. Выбор вариантов действий из готового списка, как и составление команды из готовых списков глаголов и существительных, называть "парсером", мягко говоря, не совсем корректно.
Парсинг подразумевает синтаксический анализ введеного текста. Как именно он будет вводиться вообщем-то по барабану. В играх Legend (Eric the Unready, Gataway) была возможность выбора необходимых глаголов и существительных из меню.
Отредактировано zerrr (18.10.2012 12:06)
Неактивен
Morych написал:
Я как раз хотел предложить использовать текстовый ввод по методу Флэша (при помощи "экранной клавиатуры"), если мы верно истолковали термин "ручной ввод".
Этот метод явно не мой, он был еще во всяких jRPG в 80х годах на консолях, а, мб, и где-то еще раньше.
Отредактировано Flash (18.10.2012 14:59)
Неактивен
Поскольку вчера в ходе обсуждения на каналах топика "Адвентюры vs Квесты" я говорил Адженте, какой Zerrr молодец, и что я всецело согласен со всем, что он уже сюда написал и заранее готов подписаться под всем, что он скажет ещё... (какое отвратительно-длинное получается предложение)... то да, если брать распознование (синтаксический анализ) составленной из выбранных слов фразы и вывод на неё реакции - тогда по барабану. Но есть (даже у нас) игры, где ввод организован выбором констукции глагол+существительное, но синтаксический анализ никакой там не проводится, программа просто даёт отклик именно на это действие. Точно так же, как даёт отклик на нажатие кнопки в любой менюшной игре. Именно такие игры я имел в виду.
P.S. Не ясно только, почему три последних поста перенесены (как мне показалось) в эту ветку.
UPD. Вернулись.
Отредактировано Серый Волк (18.10.2012 15:37)
Неактивен
Форум чудит
Серый Волк написал:
P.S. Не ясно только, почему три последних поста перенесены (как мне показалось) в эту ветку.
Не показалось )) почему перенесли - без понятия.
Серый Волк написал:
Но есть (даже у нас) игры, где ввод организован выбором констукции глагол+существительное, но синтаксический анализ никакой там не проводится, программа просто даёт отклик именно на это действие. Точно так же, как даёт отклик на нажатие кнопки в любой менюшной игре. Именно такие игры я имел в виду.
Ясно. Приведенная чуть выше игра "звездное наследие" в этом странном топике и есть пример псевдопарсинга (если я правильно помню). А вот приведенная мной "Gateway" (если вдруг ты не в курсе) - это полноценный парсинг с возможностью использования меню.
Отредактировано zerrr (18.10.2012 14:58)
Неактивен
Нет, не Война и Мир 2, конечно же. Просто история Вселенной от Большого Взрыва до тепловой её смерти.
10000 скорее всего будет мало, и если не стоит менять размер окна, то как насчёт суперуменьшения иконок параграфов?
Ручной ввод, это, если хотите, ручное присвоение значения какой-то переменной. Например, тому же имени.
Сначала записывается, что существует такая-то переменная, затем через специальный оператор предлагается выбор, какое значением ему придать. Скажем, как-нибудь так:
<<set $name=>>
input $name
Где вторая строчка в игре проявится как поле для ввода значения. Игрок напишет, скажем, "Вася", и переменной $name присвоится значение "Вася".
Ну или может быть можно сделать автоматически, если у команды <<set $object=>> стоит равно и ничего после него, то это само по себе будет проявляться в игре предложением ввода? Или как-то так.
Пример, как это используется и работает, есть, скажем, в программке для текстовых квестов URQEdit. Там можно ещё и определять, является ли переменная текстовой, или циферной, или любой. И тогда, например, можно будет сделать, что в предложении ввести имя можно будет вводить только буквы, а в предложении ввести возраст - только цифры. Хорошо бы ещё придумать, как внести пределы, например, чтоб нельзя было написать возраст в 200 или 300 лет, а, например, только от 18 до 40.
Короче, если это у вас есть, подскажите, как пользоваться, если нет, очевидно, нужно сделать Вряд ли это будет сложно, как мне кажется
Неактивен
Кстати, важный вопрос... А почему не видны изображения? Пробовал закидывать картинку в папку с сейвом sm, в папку с html документом, указывал путь, как указано в обучении, сохранял, запускаю - изображения нет. Что же с ним нужно на самом деле сделать, что бы появилось?
Неактивен
Debyr написал:
Короче, если это у вас есть, подскажите, как пользоваться, если нет, очевидно, нужно сделать Вряд ли это будет сложно, как мне кажется
Нет, сейчас такого нет. Сделать, конечно, не очень сложно, но это потребует дополнительного тестирования. Поэтому до конца КРИЛ (15 ноября с. г.) не появится точно. А так да, можно подумать.
Неактивен
Ручной ввод, это, если хотите, ручное присвоение значения какой-то переменной (с) Debyr
Вон оно что имелось в виду. А мы тут уже развели в сторону дебатов...
Зер, тоже ясно. Да, с "Gateway" я не знаком, а "Звёздное наследие", ты верно помнишь, как раз из "таких"
Неактивен
Большая просьба писать по теме. Для флейма есть другие темы.
Неактивен
Debyr написал:
Кстати, важный вопрос... А почему не видны изображения? Пробовал закидывать картинку в папку с сейвом sm, в папку с html документом, указывал путь, как указано в обучении, сохранял, запускаю - изображения нет. Что же с ним нужно на самом деле сделать, что бы появилось?
Изображения видны. Положите картинку в папку с файлом истории *.sm
И в тексте параграфа пишите [[File: yourimage.png]]
Неактивен
Нет, сейчас такого нет. Сделать, конечно, не очень сложно, но это потребует дополнительного тестирования. Поэтому до конца КРИЛ (15 ноября с. г.) не появится точно. А так да, можно подумать.
Ничего страшного, года два у вас есть в запасе
Кстати, этого вроде в урке нету, но тоже может понадобиться - переход по вписанным значениям... То есть, к примеру, выводится текст:
Вы видите комнату, здесь восемь дверей, какую хотите открыть?
И поле ввода, куда можно ввести цифры от 1 до 8. Ввёл число - попал в задуманный под единицей параграф. Даже можно будет один параграф сделать для всех восьми дверей, просто сделать проверку if, что если число было введено 1, то выдаёт такой текст, если число 3, другой, и так далее. Я имею ввиду, что и просто имея возможность ввода значения переменной, это можно замутить, но будет, скорее всего, сложно, а может это как-то упростить?
Если кратко, в целом интересен вариант свободного перемещения.. Скажем, выбираю я кнопками, на какую улицу придти. А там поле ввода "дом:" и "квартира". И вводишь, например, значение Дом: 19, квартира 3, жмёшь кнопку (или щёлкаешь энтер, или что-то ещё), и оказываешься в параграфе с, так сказать, такими координатами. Или в с такими условиями, не суть важно. Главное, что требуется, это что бы такое было удобно написать, не путаясь при этом сильно в вариантах и не ломая голову, как хитро извернуться с задаванием и проверками переменных... Если такое получится - будет просто шикарно
И ещё, можно включить проверку числовых переменных в диапазоне? Скажем, у вас есть хп от 0 до 100, включаете посмотреть, сколько сейчас, а под числом комментарий, и например от 1 до 20 хп - пишет что "вы при смерти", если от 20 до 50 - "вы тяжело ранены", и так далее. А то не нашёл вроде как это можно замутить, есть ли такое?
Кроме того, как насчёт картинок на задний фон, над которым будет размещаться текст? Текст при этом можно сделать с тенью, что бы было видно на любом цвете, и не сливалось.
Неактивен
Morych написал:
Изображения видны. Положите картинку в папку с файлом истории *.sm
И в тексте параграфа пишите [[File: yourimage.png]]
О, благодарю... Предлагаю внести изменения в описание руководства и в самой программе, так как в руководстве написано "вставьте специальную ссылку, начинающуюся с префикса Файл: или File: и содержащую адрес изображения и его расширение. Поддерживаются форматы png, jpeg, gif."
И ведь это относится к изображениям, хранящимся на компе, и единственно верное, что можно понять, это что нужно вставить собственно адрес, то есть указать путь, то есть написать, например "С:\хрень\картинки\ололо.jpg" и никак иначе. А оказывается, что нужно поместить картинку в одну папку с сейвом, и, видимо, хранить её там... Ведь это совсем отличается от написанного О,О а [[File: path_to_image.jpg]] тоже намекает на то, что нужно вписать сюда путь к файлу, хотя должно быть, выходит, написано что-то вроде "name_image" ?
Очень запутывает, я даже нервничал вчера по поводу, что всё делаю по инструкции, но ничего не получается
Кстати, ээ... А что, если я кому-то даю игру, я должен дать ему html файл, sm-сейв игры и изображения в одной с ним папке? В смысле, нельзя всё упаковать в один файл, что бы любому скинул файлик, он открыл, и увидел и изображения и музыку?
Неактивен
А то не нашёл вроде как это можно замутить, есть ли такое?
<<if ($hp >= 20) and ($hp < 50)>>
вы тяжело ранены
<<elseif ($hp > 0) and ($hp < 20)>>
вы при смерти
#итд
<<endif>>
И поле ввода, куда можно ввести цифры от 1 до 8. Ввёл число - попал в задуманный под единицей параграф. Даже можно будет один параграф сделать для всех восьми дверей, просто сделать проверку if, что если число было введено 1, то выдаёт такой текст, если число 3, другой, и так далее. Я имею ввиду, что и просто имея возможность ввода значения переменной, это можно замутить, но будет, скорее всего, сложно, а может это как-то упростить?
Не часто я вижу комнаты, из которых можно попасть сразу в 8 других комнат, но тут же сомнительно преимущество текстового ввода над менюшкой.
А оказывается, что нужно поместить картинку в одну папку с сейвом
Не обязательно. Просто можно, да и нужно указывать относительный путь. Можно сунуть все картинки в папку с игрой и тогда нужно будет указывать [[File: имя_папки/название_файла.расширение]]
Кстати, ээ... А что, если я кому-то даю игру, я должен дать ему html файл, sm-сейв игры и изображения в одной с ним папке? В смысле, нельзя всё упаковать в один файл, что бы любому скинул файлик, он открыл, и увидел и изображения и музыку?
*.sm - исходник, его давать не надо. Можно и дать, но это ничего не даст другу при игре. Графику и музыку, как уже выше написано, можно поместить в отдельную папку в папке с игрой.
Отредактировано Flash (18.10.2012 17:54)
Неактивен
<<if ($hp >= 20) and ($hp < 50)>>
вы тяжело ранены
<<elseif ($hp > 0) and ($hp < 20)>>
вы при смерти
#итд
<<endif>>
Не знал, что так можно Спасибо
Не часто я вижу комнаты, из которых можно попасть сразу в 8 других комнат, но тут же сомнительно преимущество текстового ввода над менюшкой.
Ну так это же пример использования, а не пример, почему так будет преимущественней. Если хотите преимущества, я уже писал про улицы, например, на каждой из которых может быть по 10 домов и по 20 квартир в каждой.
Не обязательно. Просто можно, да и нужно указывать относительный путь. Можно сунуть все картинки в папку с игрой и тогда нужно будет указывать [[File: имя_папки/название_файла.расширение]]
Вот видите... Хорошо бы подробное внятное описание этого момента, а то приходится спрашивать, и даже в ответах не сразу все нюансы узнаешь о.о
Неактивен
Если картинка лежит локально, на компьютере, то действительно надо указывать путь, но относительный, а не абсолютный. Можно, например, в папке с игрой (где sm) сделать папку "content", в которой сделать папку "images", где и будут лежать все изображения для игры. Тогда для вставки изображения пишем:
[[File: content\images\filename.jpg]]
Весь медиаконтент игры действительно нужно хранить в папке с игрой. Кстати, советую для каждой игры делать свою отдельную папку. Если у вас одна картинка используется в двух играх, скопируйте её в оба места. Тогда можно будет выдать товарищу папку с игрой (и там точно всё будет). Один файл можно получить путём архивации папки. Напомню, что у товарища должен быть установлен asm, чтобы скомпилировать историю у себя. Либо вы можете опубликовать игру в библиотеке и поделиться полученной ссылкой.
Неактивен
Я внесу изменения в руководство, чтобы про адрес к картинке было понятнее.
Неактивен
Напомню, что у товарища должен быть установлен asm, чтобы скомпилировать историю у себя.
это необязательно. Можно просто опубликовать в html файл и передать его вместе с папкой картинок.
Неактивен
Доступна версия 1.4. Подробнее здесь: https://forum.ifiction.ru/viewtopic.php … 372#p25372
Неактивен
Эпиграфа действительно нет, т.к. пока никто не просил. Предполагалось, что его можно вносить в параграф StorySubtitle. Но если нужно, сделаю.
Тогда возникает вопрос. Эпиграфов может быть несколько?
UPD. Или быть может просто добавить выравнивание текста по правому краю?
Неактивен
DoubleDragon написал:
UPD. Или быть может просто добавить выравнивание текста по правому краю?
Универсальное решение — самое лучшее.
Отредактировано Cheshire (25.10.2012 07:43)
Неактивен
Согласен. Добавил кнопку выравнивания по правому краю. Будет доступно 1-го ноября в версии 1.5.
Неактивен
Times.
Неактивен
Вы не представляете, насколько это полезная тема. Я сегодня три раза точно начинала писать сообщение а-ля "помогите, как же это сделать". Придумывала хорошее решение к пятому слову описания проблемы.
Спасибо за помощь в виде хорошего пинка соображалке.
Неактивен
Спасибо за добрые слова и добро пожаловать!
Неактивен
Ребят, нужна помощь.
Сразу скажу, вчера было всё нормально. Сегодня нечто изменилось (обновил версию до 1,6,1?). При компиляции и тестировании файла ссылки на картинки исчезают, и в браузере не отображаются.
Картинка задана в файле таким образом:
[[File: pict\3.png]]
В браузере (Хром) преображается в такую ссылку
file:///C:/Monomach/pict/3.%20png
Вот эти самые %20 всё и портят. Не пойму, откуда они берутся, но мешают.
Если кто в курсе, подскажите срочно пожалуйста.
Отредактировано Ergistal (19.11.2012 18:57)
Неактивен
%20 — это пробел. Разработчик знает о проблеме: https://forum.ifiction.ru/viewtopic.php … 920#p25920
Неактивен
Ошибку исправил. Качайте версию 1.6.2.
Неактивен
Подскажите пожалуйста, как организовать циклическую перестановку значений переменных по щелчку на ссылке.
Хочу сделать что-то типа плоского кубик - рубика 3х3:
|1||2||3|
|4||5||6|
|7||8||0|
Уф! Разобрался с перестановками:
Оказывается, при изменении значения нескольких объектов сразу в конструкции типа:
[[ |game_logic {$ac=$_a}{$ab = $ac}{$aa = $ab}{$_a = $aa}]]
сначала выполняется:
{$_a = $aa}
затем:
{$aa = $ab}
после этого:
{$ab = $ac}
и наконец:
{$ac=$_a}
$_a - вспомогательная переменная.
Отредактировано kerber (25.11.2012 21:19)
Неактивен
Спасибо, посмотрю, почему так происходит.
Неактивен
DoubleDragon написал:
Спасибо, посмотрю, почему так происходит.
А может быть это такая фича, которую надо просто описать в руководстве?
Неактивен
Korwin написал:
DoubleDragon написал:
Спасибо, посмотрю, почему так происходит.
А может быть это такая фича, которую надо просто описать в руководстве?
Да, простого описания, на мой взгляд, вполне достаточно.
Неактивен
1. Можно ли при выводе таблицы убрать её контуры? То есть, чтобы только текст был виден?
2. Можно ли задавать для звукового файла опции "играть один раз" и "повторять в цикле"?
Отредактировано sosiskin (06.01.2013 22:27)
Неактивен
Кельта написал:
sosiskin, а как Вам такой вариант решения вашей проблемы? Например, если бы параграф назывался "пример"
Код:
На столе стоит [[*чайник|пример {$объект = 1}]] и [[*чашка|пример {$объект = 2}]] ---- <<if $объект eq 1>> описание чайника <<elseif $объект eq 2>> описание чашки <<else>> # пустое поле <<endif>>
Попробовал как предложила Кельта, и действительно, надобность в всплывающем контекстном меню вроде отпадает. (Единственное, добавил звёздочки перед каждой ссылкой, чтоб работало как надо.)
Неактивен
sosiskin написал:
1. Можно ли при выводе таблицы убрать её контуры? То есть, чтобы только текст был виден?
2. Можно ли задавать для звукового файла опции "играть один раз" и "повторять в цикле"?
1. Да, сделаю.
2. Надо делать отдельный макрос sound, не в следующей версии.
Неактивен
WeLLWar написал:
Люди пподскажите, почему у меня иногда после создания параграфа АСМ выводит ошибку и вылетает. Приходится каждый раз сохранятся:(
Было так же на версии 1.6.2 С версии 1.6.6 - все нормально.
Мало информации для понимания что происходит: какая ОС, какой компьютер, какое именно сообщение об ошибке пишет программа?
Неактивен
Было так же на версии 1.6.2 С версии 1.6.6 - все нормально.
Мало информации для понимания что происходит: какая ОС, какой компьютер, какое именно сообщение об ошибке пишет программа?
версия 1.7, ОС винХР, компьютер смешно конечно, но 64мб видео, 1гиг РАМ, ну ошибку проглядел, повторится скину сюда...
Отредактировано WeLLWar (11.01.2013 10:21)
Неактивен
Главное напишите, после каких действий это происходит, чтобы можно было воспроизвести ошибку.
Неактивен
Главное напишите, после каких действий это происходит, чтобы можно было воспроизвести ошибку.
Это происходит после создания параграфа, ну... прям царство рандома... может произойти, а может - нет...
Неактивен
А пробовали чисто по програмисстски? Удалить, почистить, по новой скачать переустановить.
Часто спасает от непонятных ошибок.
Неактивен
WeLLWar написал:
прям царство рандома... может произойти, а может - нет...
Из своего опыта советую, во-первых, перегрузиться, и поубирать разные (ненужные) резидентные программы. Всякие виселки, майлрушки, смайлогенераторы и т.п.
Мне, по крайней мере, помогло, и заработали сочетания клавиш.
Неактивен
Не нашёл в официальной справке, каким образом задаётся цвет какого-либо фрагмента текста. Пример: я хочу, чтобы объект был выделен красным жирным.
Неактивен
Такого пока нет.
Неактивен
Можно использовать одноразовые ссылки, начинающиеся с +.
Неактивен
Товарищи, скажите пожалуйста, есть ли возможность менять содержимое параграфа в реальном времени не обновляя страницы. Например поменять фоновую картинку или адрес многоразовой ссылки?
К примеру у меня обстоятельства следующие: есть некий бинокль и есть окно в которое я должен посмотреть. Бинокль сломан и я чиню его в инвентаре. Если я смотрю в окно без бинокля выводится один текст, со сломанным биноклем - другой и с починенным выводит в следующий параграф с картинкой с видом из бинокля. Вероятно я тупой, но тем не менее не хватает мне логики.
Перепробовал несколько вариантов на этот момент пришел примерно к следующему:
:: бинокль
Обычный театральный бинокль. Внутри что то стучит как будто один из окуляров плохо держится на своем месте.
[[*{{{потрясти}}}|трясти]]
:: трясти
<<random $бинокль = 99>>
<<if $бинокль gt 70>>
<<set $починил = 1>>
замечательно!
<<endif>>
<<if $бинокль lte 70>>
не получилось!
<<endif>>
:: комната 1
С права на <<if !($бинокль)>>[[+окне|окно пуст.]]<<endif>><<if ($бинокль)>>[[+окне|окно]]<<endif>><<if $бинокль and $починил>>[[окне|окно]]<<endif>><<if ($заметил_окно)>>окне<<endif>> засохшее растение.
:: окно пуст.
Под окном гудит желтый фонарь. Кажется что он единственный источник света в ночном дворе.
::окно
<<style 'dark'>>
<<if $бинокль and $починил>>[[File: images/vid_iz_okna.jpg]] В бинокль я вижу что в силуэте противоположного дома горит одно окно. Интересно кто там? <<endif>>
<<if $бинокль>> Двумя глазами смотреть невозможно.<<endif>>
То есть мне хочется что бы ссылка "окно" была многоразовой и при первых двух обстоятельствах выводила текст в тот же параграф, а при починенном бинокле отсылала в следующий и все это происходило в одном параграфе.
p.s. спасибо большое, сильно нравится ваша программа!
Отредактировано avatarka (17.01.2013 01:05)
Неактивен
avatarka, будь другом, замени нецензурные словечки в своём примере. Я понимаю, что русские люди обычно с такими словами и чинят что-либо, но как бы на бан не нарваться.
По вопросу. Многоразовая ссылка начинается с *. В параграфе "комната 1" выводи только ссылку [[*окне|окно]] (один раз) при этом совмести параграф "окно пуст." с параграфом "окно", а уже в параграфе "окно" выполняй все проверки. И при починенном бинокле попробуй сначала использовать макрос <<clrscr>> для очистки экрана.
Отредактировано Morych (16.01.2013 10:25)
Неактивен
WeLLWar написал:
Как сделать, чтобы после определённого действия ссылка удалялась?
Кроме одноразовых +ссылок можно использовать более извращённый способ:
Пусть $действие = 0
:: параграф В тексте параграфа присутствует <<if $действие>>ссылка<<else>>[[ссылка|параграф {$действие = 1}]]<<endif>>. <<if $действие>> От нечего делать я нажал на ссылку, и та удалилась. <<endif>>
или без фэйда (но зато при нажатии кнопки "Отменить" вместо отмены действия вернёшься на предыдущий параграф):
:: параграф <<clrscr>> В тексте параграфа присутствует <<if $действие>>ссылка<<else>>[[+ссылка|параграф {$действие = 1}]]<<endif>>. <<if $действие>> От нечего делать я нажал на ссылку, и та удалилась. <<endif>>
Неактивен
Morych написал:
avatarka, будь другом, замени нецензурные словечки в своём примере.
Ну, черновик у меня такой - за литературностью не слежу.)
Morych написал:
попробуй сначала использовать макрос <<clrscr>> для очистки экрана.
Вроде что то понял, буду пробовать.
Неактивен
Вопрос по генератору случайных чисел:
если мне нужно задать промежуток для случайного числа, но не от 0 до Х, а от L>0 до Х.
Можно это сделать?
Я представляю как это сделать, скажем, на LUA, но можно ли сделать средствами АКСМА?
Отредактировано sosiskin (30.01.2013 13:10)
Неактивен
Задаёшь от 0 до X-L, к результату прибавляешь L
Неактивен
пасибо!
ещё вопрос: а можно ли выводить в столбец таблицы повторяющийся параграф (макрос <<repeat>>)?
Допустим, я планирую выводить данные о битве в двух разных столбцах. Эдакий real-time бой. Можно так пользоваться таблицей?
Отредактировано sosiskin (30.01.2013 21:21)
Неактивен
Не, в таблицах вообще нельзя использовать макросы, можно только переменные.
Неактивен
Это пожалуйста.
Неактивен
Хочу сделать следующее:
В локации иногда (по условию) находится персонаж, который блуждает между локациями по определенному алгоритму. Если игрок видит его он может выбрать его и поговорить. Разговор может оказаться длинным, т.е. затрагивать немало параграфов. Вопрос - как потом игрока вернуть в тот же параграф, где начался разговор?
Попробовал сначала запомнить лекущую локацию в переменную <<set $place=$$title>>
А после разговора предложить [[Закончить разговор|$place]] - Ничего не получилось. Что я делаю неправильно, точнее как сделать правильно?
Неактивен
Просто переменные в ссылках не поддерживаются. Можно в параграфе "Закончить разговор" сделать очистку экрана макросом <<clrscr>> и вставить параграф, где начался разговор: <<display $place>>.
Неактивен
Подскажите пожалуйста как сделать следующее:
Вверху параграфа выставлено значение
Оставшееся время работы фильтров:<<print $фильтр>>
, которое должно изменятся при нажатии на ссылку
<<set $локация = 1>> [[*Двигаемся дальше|Локации поверхности {$локация=$номер} {$фильтр=$фильтр-5}]]
где установкой
{$локация=$номер}
устанавливается текст который появится, а
{$фильтр=$фильтр-5}
уменьшает значение.
значение переменной то уменьшается, а так как параграф не обновлялся то
Оставшееся время работы фильтров:<<print $фильтр>>
не изменяется.
Пробовал решить проблему с помощью повторяющегося параграфа и очисткой экрана, но добился лишь того что при нажатии на ссылку значение меняется, но текст появившийся при нажатии естественно быстро исчез из за того что в повторяющемся параграфе стоит очистка параграфа.
Как сделать что бы и значение менялось и текст появившейся по ссылке оставался до следующего нажатия. Может есть идеи.
Неактивен
Может просто вызывать параграф Локации поверхности из себя же обычной ссылкой и в нём же выводить значение $фильтр?
<<print $фильтр>> [[Двигаемся дальше|Локации поверхности {$локация=$номер} {$фильтр=$фильтр-5}]]
Неактивен
DoubleDragon написал:
Может просто вызывать параграф Локации поверхности из себя же обычной ссылкой и в нём же выводить значение $фильтр?
Код:
<<print $фильтр>> [[Двигаемся дальше|Локации поверхности {$локация=$номер} {$фильтр=$фильтр-5}]]
Да сделал так - перенес отображение значения в параграф "локации поверхности" все отображает и значение меняется, но по команде <<return>> из этого параграфа попадая на параграф старт значение фильтр измененное не сохранилось, как было 50, так и есть.
Неактивен
по команде <<return>> из этого параграфа попадая на параграф старт значение фильтр измененное не сохранилось, как было 50, так и есть
Это наверное потому, что в параграфе "старт" старое значение заново присваивается.
Неактивен
Oreolek написал:
Как пользоваться макросом <<input>>
Цитирую руководство пользователя (раздел "Объекты и выражения"):
Чтобы дать возможность читателю ввести с клавиатуры какой-либо текст или число, а потом присвоить его нужному объекту, используйте макрос input:
<<input 'Параграф' $объект>>
После окончания ввода набранное значение будет присвоено указанному объекту, и будет произведён автоматический переход на страницу указанного параграфа.
Неактивен
я начал осваивать axma story maker и возникла трудность я вставил в параграф start звуковой файл но мне не надо чтобы во всех остальных он проигрывался придется создавать пустой звуковой файл или есть другой способ?
Неактивен
Desfir написал:
я начал осваивать axma story maker и возникла трудность я вставил в параграф start звуковой файл но мне не надо чтобы во всех остальных он проигрывался придется создавать пустой звуковой файл или есть другой способ?
используйте макрос <<noaudio>> - он останавливает проигрывание музыки и убирает плеер.
Неактивен
Morych написал:
Desfir написал:
я начал осваивать axma story maker и возникла трудность я вставил в параграф start звуковой файл но мне не надо чтобы во всех остальных он проигрывался придется создавать пустой звуковой файл или есть другой способ?
используйте макрос <<noaudio>> - он останавливает проигрывание музыки и убирает плеер.
Спасибо получилось просто по макросам я еще не читал информацию
Неактивен
Макрос <<display 'название параграфа'>> не изменяет переменную $$title - это логично. Но иногда требуется сделать переход типа goto так, чтобы $$title стало равным параграфу, куда осуществлен переход. Посоветуйте, как сделать?
:: Start <<set $place = $$title>> [[Переход в описание игры|Help]] [[Начало игры|Game]] :: StoryTitle Проверка макроса DISPLAY :: StorySubtitle Проверка справки по игре и работы макроса display. :: StoryMenu [[Об этой истории|Story]] :: StoryAuthor Korwin [[Возврат|place]] :: Game <<set $place = $$title>> Игра началась! [[И так далее...|game2]] [[Переход в описание игры|Help]] :: game2 Игра началась! [[И так далее...|game2]] [[Переход в описание игры|Help]] :: Help Здесь написано как играть в эту игру [[Возврат|place]] :: place <<display $place>> :: Story <<set $place = $$title>> [[Переход в описание игры|Help]] [[Об авторе|StoryAuthor]]
В примере выше попытка дважды вызвать помощь по игре в том же месте приводит нас на пустой экран, так как переменная $$title становится равной 'place'. Подскажите, как это исправить?
Пока сделал так:
[[Вернуться к началу игры|astart]] или <<back>>
Но макрос <<back>> выводит слово <- Назад всегда с новой строки и не подчиняется центрированию, что не всегда удобно...
Отредактировано Korwin (16.03.2013 09:39)
Неактивен
Попробуй такой код:
:: Start [[Переход в описание игры|Help]] [[Начало игры|Game]] :: StoryTitle Проверка макроса DISPLAY :: StorySubtitle Проверка справки по игре и работы макроса display. :: StoryAuthor Korwin :: Game Игра началась! [[И так далее...|game2]] [[Переход в описание игры|Help]] :: game2 Игра началась-2! [[И так далее...|game2]] [[Переход в описание игры|Help]] :: Help Здесь написано как играть в эту игру <<display 'SetFromLoc'>> ===[[Возврат|place]]=== :: place <<display $loc>> :: StoryMenu [[Об этой истории|Story]] :: Story [[Переход в описание игры|Help]] [[Об авторе|Author]] :: Author Автор этой истории: <<display 'StoryAuthor'>> <<display 'SetFromLoc'>> ===[[Возврат|place]]=== :: SetFromLoc <<if ($$from neq 'place') and ($$from neq 'Help') and ($$from neq 'Author')>> <<set $loc = $$from>> <<endif>>
Вроде бы, всё окей
UPD: Упс, не заметил один параграф. Подправил код.
Отредактировано Morych (16.03.2013 13:16)
Неактивен
Morych, спасибо! Переписал твой код руками, сначала не заработало, но я тебе верил! И нашел ошибку у себя! Отладка - может доставлять удовольствие!
Неактивен
Пожалуйста, помогите, очень нужно реализовать в программе "группу +ссылок".
===
Объясняю, что это такое:
Идет диалог персонажей, внизу три ссылки (три варианта ответов). Все три "+вые", то есть при нажатии на них результат появится на той же странице. А теперь вопрос - как же сделать так, чтобы при нажатии на одну из этих ссылок, все разом становились недоступными? Это необходимо, чтобы игрок не подглядел, что будет, если бы он выбрал другой вариант.
===
Иными словами, я хочу объединить "+ ссылку" и "невозвратную ссылку", только в совокупности с другими ссылками на этой странице.
Я знаю, что проще делать обычные невозвратные ссылки, но уж очень нужно остаться на той же странице.
Это нужно также для того, чтобы игрок не просто видел результат а виде:
1) что было
2) что он выбрал
3) результат
И все на одной страничке. Удобно.
===
Или вот еще вариант, даже лучше:
Нужно, чтобы после того, как игрок выбрал один из трех вариантов, случилось следующее:
а) внизу появился результат
б) ссылка, на которую он нажал, стала недействительна
в) другие две ссылки вообще изчезли!
Можно так сделать?
Отредактировано Anderman (08.04.2013 17:05)
Неактивен
Anderman написал:
Пожалуйста, помогите, очень нужно реализовать в программе "группу +ссылок".
===
Объясняю, что это такое:
Идет диалог персонажей, внизу три ссылки (три варианта ответов). Все три "+вые", то есть при нажатии на них результат появится на той же странице. А теперь вопрос - как же сделать так, чтобы при нажатии на одну из этих ссылок, все разом становились недоступными? Это необходимо, чтобы игрок не подглядел, что будет, если бы он выбрал другой вариант.
===
Иными словами, я хочу объединить "+ ссылку" и "невозвратную ссылку", только в совокупности с другими ссылками на этой странице.
Я знаю, что проще делать обычные невозвратные ссылки, но уж очень нужно остаться на той же странице.
Это нужно также для того, чтобы игрок не просто видел результат а виде:
1) что было
2) что он выбрал
3) результат
И все на одной страничке. Удобно.
Пока деактивировать +ссылки без нажатия невозможно. Могу предложить следующее. Создать объект $ответ = false. В параграфах, на которые ссылаются +ссылки написать:
<<if !$ответ>>
Текст параграфа
<<set $ответ = true>>
<<endif>>
Т.е. все ссылки можно будет нажать, но текст покажет только один раз.
Неактивен
Другой вариант. Вместо +ссылок использовать обычные ссылки на этот же параграф, с параметром:
Параграф
Написано, что было
<<if $ответ eq "Вариант 1">>
Выбран 1 вариант
Результат 1
<<elseif $ответ eq "Вариант 2">>
Выбран 2 вариант
Результат 2
<<elseif $ответ eq "Вариант 3">>
Выбран 3 вариант
Результат 3
<<else>>
[[Вариант 1|Параграф {$ответ = "Вариант 1"}]]
[[Вариант 2|Параграф {$ответ = "Вариант 2"}]]
[[Вариант 3|Параграф {$ответ = "Вариант 3"}]]
<<endif>>
Неактивен
Anderman написал:
Пожалуйста, помогите, очень нужно реализовать в программе "группу +ссылок".
===
Объясняю, что это такое:
Идет диалог персонажей, внизу три ссылки (три варианта ответов). Все три "+вые", то есть при нажатии на них результат появится на той же странице. А теперь вопрос - как же сделать так, чтобы при нажатии на одну из этих ссылок, все разом становились недоступными? Это необходимо, чтобы игрок не подглядел, что будет, если бы он выбрал другой вариант.
===
Иными словами, я хочу объединить "+ ссылку" и "невозвратную ссылку", только в совокупности с другими ссылками на этой странице.
Я знаю, что проще делать обычные невозвратные ссылки, но уж очень нужно остаться на той же странице.
Это нужно также для того, чтобы игрок не просто видел результат а виде:
1) что было
2) что он выбрал
3) результат
И все на одной страничке. Удобно.
http://hyperbook.ru/blog.php?id=13636642398167 - вот тут есть хорошая подсказка по теме
А если конкретнее:
:: камень
Перед тобой три наперстка.
<<if !($условие)>>[[Взять левый|камень {$условие=1} {$left=1}]]<<else>>Взять левый<<endif>>
<<if !($условие)>>[[Взять средний|камень {$условие=1} {$center=1}]]<<else>>Взять средний<<endif>>
<<if !($условие)>>[[Взять правый|камень {$условие=1} {$right=1}]]<<else>>Взять правый<<endif>>
<<if $left>>Под левым наперстком пусто<<endif>>
<<if $center>>Под средним наперстком пусто<<endif>>
<<if $right>>Под правым наперстком пусто<<endif>>
Поправил код по подсказке Morych'a
Отредактировано Korwin (08.04.2013 17:11)
Неактивен
Например, так:
<<set $список[2] = $список[2] + 1>>
Неактивен
Да, добавлю.
Неактивен
Oldrik написал:
Как увеличить или уменьшить элемент списка? Не присвоить новое значение, а просто изменить.
По-моему, изменяя значение элемента списка, ты и присваиваешь ему новое значение. Вот в примере выше мы присваиваем новое значение, которое больше текущего значения на 1.
Неактивен
Morych написал:
Oldrik написал:
Как увеличить или уменьшить элемент списка? Не присвоить новое значение, а просто изменить.
По-моему, изменяя значение элемента списка, ты и присваиваешь ему новое значение. Вот в примере выше мы присваиваем новое значение, которое больше текущего значения на 1.
Просто был нужен пример кода.
Неактивен
Вопрос по javascript.
Нашёл очень интересные глитч-скрипты, создающие эффект сбоя монитора или графики (глитч). Вот страничка разработки, примеры можно посмотреть здесь.
Можно ли встраивать такой скрипт в АХМА? (особенно интересует Glitch Transition, вызывающий эффект лишь на какое-то время).
И можно ли присвоить ему, скажем, макрос?
Отредактировано sosiskin (01.05.2013 10:49)
Неактивен
Есть идея встроить различные фильтры для обработки изображений.
Неактивен
sosiskin написал:
Вопрос по javascript.
Нашёл очень интересные глитч-скрипты, создающие эффект сбоя монитора или графики (глитч). Вот страничка разработки, примеры можно посмотреть здесь.
Можно ли встраивать такой скрипт в АХМА? (особенно интересует Glitch Transition, вызывающий эффект лишь на какое-то время).
И можно ли присвоить ему, скажем, макрос?
1. С одной стороны, встраивание произвольных скриптов в ASM - любопытно... Расширяет возможности. Но потенциально - уже вероятны некоторые риски, например переходы на произвольные страницы, встраивание рекламы и так далее. Впрочем я не очень компетентен в таких вопросах.
2. А зачем глитч-эффекты в текстовом квесте? Почему нельзя сделать пару картинок и подменять их по условию?.
Неактивен
Korwin написал:
2. А зачем глитч-эффекты в текстовом квесте? Почему нельзя сделать пару картинок и подменять их по условию?.
То-то и ценно, что глитч происходит именно с текстом, а не картинкой. Например, по сюжету вы управляете слегка неисправным роботом, система которого заражена вирусом. Время от времени текст глитчует (как экран парсера вот в этой игре).
Или (ещё лучше) сделать глитчем смену параграфов на экране. Чтобы при надобности один параграф превращался так в другой.
Отредактировано sosiskin (01.05.2013 23:15)
Неактивен
Народ, подсобите с организацией кода, пожалуйста.
Есть такая задача, похожая на АХМА игру Asteroids, но с урезанной математикой, попроще: нужно чтоб в табличном окошке с заданной скоростью падали слова из списка (по принципу звёзд в игре Asteroids, но быстрее).
Направьте мысль в нужную сторону, плиз! Очень буду благодарен. Код "астероидов" меня сбивает с толку, гуманитарий, чо. ))
Неактивен
sosiskin написал:
Народ, подсобите с организацией кода, пожалуйста.
Есть такая задача, похожая на АХМА игру Asteroids, но с урезанной математикой, попроще: нужно чтоб в табличном окошке с заданной скоростью падали слова из списка (по принципу звёзд в игре Asteroids, но быстрее).
Направьте мысль в нужную сторону, плиз! Очень буду благодарен. Код "астероидов" меня сбивает с толку, гуманитарий, чо. ))
Насколько я помню, минимальный интервал таймера - 1 секунда. Чтобы слова падали быстрее, можно изменять их позицию не на одну строку, а на две, например.
Слова из списка должны падать по одному?
Неактивен
Morych написал:
Слова из списка должны падать по одному?
Нет, в том-то и дело, нужно чтобы они падали вниз (или вверх) толпой, как старые текстовые скринсейверы, словно медленный снег из слов. Причём список хотелось бы подставлять динамически.
Я взял Астероиды, повставлял вместо символов точек и звёздочек слова. Но хочется чтобы код линий (строк) был одним, а подставлять просто из массива переменные по очереди, в каждой линии.
Как такое лучше сделать?
Отредактировано sosiskin (07.05.2013 17:02)
Неактивен
Хм, попробую что-нибудь придумать
А пока может это натолкнёт на верный путь:
:: StoryTitle Падающие слова :: Start <<set $lstWords = ("Эти слова будут падать, пока не закончатся...").split(" ")>> <<set $i = 0>> <<set $y = 0>> <<set $ymax = 4>> [[Пуск!|Пуск]] :: Пуск <<repeat "Словопад" 1>> <<display "Словопад">> :: Словопад <<clrscr>> ===''Словопад''=== <<set $j = $i + 1>><<set $p = $lstWords.length - $i - 1>><<loop $p>><<print $lstWords[$j]>> <<set $j++>><<endloop>><<br>><<loop $y>><<br>><<endloop>><<if $i lt $lstWords.length>><<print $lstWords[$i]>><<endif>><<set $p = $ymax - $y>><<loop $p>><<br>><<endloop>><<set $j = 0>><<loop $i>><<print $lstWords[$j]>> <<set $j++>><<endloop>> <<set $y++>> <<if $y eq $ymax>> <<set $i++>> <<set $y = 0>> <<if $i eq $lstWords.length + 1>> <<stop "Словопад">> ===''Конец''=== <<elseif $i eq $lstWords.length>> <<set $y = $ymax - 1>> <<endif>> <<endif>>
Отредактировано Morych (07.05.2013 17:10)
Неактивен
Кстати, именно для этой разработки я спрашивал про визуальные эффекты на javascript, потому как если на такой "падающий текст" натравить глитч-скрипт, получится очень интересное окошко, цветной спрайт из обычного текста.
Неактивен
sosiskin написал:
нужно чтобы они падали вниз (или вверх) толпой, как старые текстовые скринсейверы, словно медленный снег из слов. Причём список хотелось бы подставлять динамически.
Вот:
:: StoryTitle Падающие слова :: Start [[Скринсейвер|Пуск2]] :: Пуск2 <<set $lstWords = ["AXMA Story Maker", "DoubleDragon", "Morych", "sosiskin", "Суперскринсейвер"]>> <<set $lstLines = []>> <<set $newWord = "">> <<loop 10>> <<set $lstLines.push(" ")>> <<endloop>> <<repeat "Словопад2" 1>> <<display "Словопад2">> :: Словопад2 <<set $r = Math.round(Math.random() * ($lstWords.length - 1))>> <<set $x = Math.round(Math.random() * (40 - $lstWords[$r].length))>> <<set $k = "">> <<loop $x>><<set $k = $k + " ">><<endloop>> <<if Math.round(Math.random())>> <<set $lstLines.unshift($k + $lstWords[$r])>> <<else>> <<set $lstLines.unshift($lstWords[$r] + $k)>> <<endif>> <<set $k = $lstLines.pop()>> <<clrscr>> ---- <<set $i = 0>> <<loop $lstLines.length>>==={{{<<print $lstLines[$i] + "<br>">>}}}===<<set $i++>><<endloop>> ---- [[Добавить слов|Добавить {$newWord = ""}]] :: Добавить <<if not $newWord.length>> <<stop "Словопад2">> Новое слово: <<input "Добавить" $newWord>> <<else>> <<set $lstWords.push($newWord)>> <<repeat "Словопад2" 1>> <<display "Словопад2">> <<endif>>
Текстовый скринсейвер (можно динамически добавлять слова).
Неактивен
Morych написал:
А пока может это натолкнёт на верный путь:
я чёто не могу понять, как сделать, чтоб целиком набор слов не виден было изначально, и чтобы они не по порядку один за другим падали по левому краю, а на разном отступе.
Может, всё-таки через списки (массив) как-то можно сделать?
В общем, я пока кое-как запилил на основе кода Астероидов, вставив туда списки.
Отредактировано sosiskin (07.05.2013 19:39)
Неактивен
sosiskin написал:
Morych написал:
А пока может это натолкнёт на верный путь:
я чёто не могу понять, как сделать, чтоб целиком набор слов не виден было изначально, и чтобы они не по порядку один за другим падали по левому краю, а на разном отступе.
Может, всё-таки через списки (массив) как-то можно сделать?
В общем, я пока кое-как запилил на основе кода Астероидов, вставив туда списки.
А как же моё предыдущее сообщение #194? Там через списки, изначально не видно ничего, не по порядку и на разном отступе.
Неактивен
Я проверил - всё работает. Для этого примера нужна последняя версия - 1.9.9.
Неактивен
Большущее спасибо!
Кстати, за этой придумкой вспомнил про Asciimator.
Отредактировано sosiskin (08.05.2013 10:25)
Неактивен
А напомните мне, пожалуйста, как сделать сл. конструкцию:
#1
<<display 'служ'>>
#2
<<display 'служ'>>
#служ
===[[ГЛАВНАЯ|???]] | [[СТАТУС|статус]] | [[ПЕРЕМЕЩЕНИЯ|перемещения]]===
----
------------
Как сделать ссылку в служебной локации, чтобы при нажатии на ГЛАВНАЯ меня всегда возвращало в текущую локацию, даже если она сменилась.
Неактивен
Вета, хочу уточнить, "перемещения" - это вкладка с перечнем выходов из данной локации?
UPD: Если да, то что-то вроде того:
:: StoryTitle Интерфейс на вкладках :: Start [[Старт|Лок1 {$main = true}]] :: Обновить <<clrscr>> <<display $loc>> :: Лок1 <<set $loc = 'Лок1'>> <<display 'служ'>> <<if $main>> Это локация 1. <<else>> [[Пойти на локацию 2|Лок2 {$main = true}]] [[Пойти на локацию 3|Лок3 {$main = true}]] <<endif>> :: Лок2 <<set $loc = 'Лок2'>> <<display 'служ'>> <<if $main>> Вы находитесь на локации 2. <<else>> [[Вернуться на локацию 1|Лок1 {$main = true}]] <<endif>> :: Лок3 <<set $loc = 'Лок3'>> <<display 'служ'>> <<if $main>> А это локация 3. <<else>> [[Идти на локацию 2|Лок2 {$main = true}]] <<endif>> :: статус ===[[ГЛАВНАЯ|Обновить {$main = true}]] | СТАТУС | [[ПЕРЕМЕЩЕНИЯ|Обновить {$main = false}]]=== ---- Имя: ''Вета'' Класс: ''Волшебница'' Жизнь: ''100/100'' Мана: ''90/200'' :: служ <<if $main>> ===ГЛАВНАЯ | [[СТАТУС|статус]] | [[ПЕРЕМЕЩЕНИЯ|Обновить {$main = false}]]=== <<else>> ===[[ГЛАВНАЯ|Обновить {$main = true}]] | [[СТАТУС|статус]] | ПЕРЕМЕЩЕНИЯ=== <<endif>> ----
Отредактировано Morych (08.05.2013 13:22)
Неактивен
Напомните мне, как сохранить игру с "Гиперкниги" с иллюстрациями?
Отредактировано Korwin (08.05.2013 14:35)
Неактивен
Пока, к сожалению, никак.
Неактивен
прошу прощения, одно уточнение по "Словопаду":
Я так понял, перед тем как вызвать $input, вы останавливаете "Словопад", чтобы окно ввода не сбивалось. А почему оно сбивается и исчезает от "словопада"? Это обусловлено приростом количества строк или свойством самого окна ввода? Его никак нельзя оставить на экране при включении словопада? например, так
:: Добавить #<<if not $newWord.length>> # <<stop "Словопад2">> Новое слово: <<input "Добавить" $newWord>> <<else>>
Попробовал убрать <<stop>>, словопад сбивал поле ввода после первого цикла.
Отредактировано sosiskin (08.05.2013 23:55)
Неактивен
Пока мы не вызовем макрос <<stop>>, параграф, указанный ранее в макросе <<repeat>>, будет вызываться снова и снова. Поле ввода можно показать и на параграфе со словопадом, но и в этом случае нужно остановить таймер, иначе через 1 секунду экран обновится, и будет показано новое поле ввода. Всё, что мы за эту секунду туда ввели, естественно, пропадёт. Ниже приведён вариант кода, где поле ввода отображается на главном экране. Добавил ещё ссылку "отмена", если вводить новые слова расхотелось.
:: StoryTitle Падающие слова :: Start [[Скринсэйвер|Пуск2]] :: Пуск2 <<set $lstWords = ["AXMA Story Maker", "DoubleDragon", "Morych", "sosiskin", "Суперскринсэйвер"]>> <<set $lstLines = []>> <<set $newWord = "-">> <<loop 20>> <<set $lstLines.push(" ")>> <<endloop>> <<repeat "Словопад2" 1>> <<display "Словопад2">> :: Словопад2 <<if not $newWord.length>> <<stop "Словопад2">> <<else>> <<set $r = Math.round(Math.random() * ($lstWords.length - 1))>> <<set $x = Math.round(Math.random() * (40 - $lstWords[$r].length))>> <<set $k = "">> <<loop $x>><<set $k = $k + " ">><<endloop>> <<if Math.round(Math.random())>> <<set $lstLines.unshift($k + $lstWords[$r])>> <<else>> <<set $lstLines.unshift($lstWords[$r] + $k)>> <<endif>> <<set $k = $lstLines.pop()>> <<endif>> <<clrscr>> ---- <<set $i = 0>> <<loop $lstLines.length>>==={{{<<print $lstLines[$i] + "<br>">>}}}===<<set $i++>><<endloop>> ---- <<if $newWord.length>> [[Добавить слово|Словопад2 {$newWord = ""}]] <<else>> Новое слово: <<input "Добавить" $newWord>> [[Отмена]] <<endif>> :: Добавить <<set $lstWords.push($newWord)>> <<repeat "Словопад2" 1>> <<display "Словопад2">> :: Отмена <<set $newWord = "-">> <<repeat "Словопад2" 1>> <<display "Словопад2">>
Неактивен
sosiskin написал:
А где задаётся количество строк в словопаде? Как сделать их меньше и, например, сам колодец уже? Я что-то в коде не могу врубиться, где это задаётся.
Количество строк - это число элементов списка $lstLines, задаётся в параграфе "Пуск2". Там где оператор цикла, мы 20 раз добавляем новый элемент в список.
Чтобы сузить "колодец" нужно поменять в строке
<<set $x = Math.round(Math.random() * (40 - $lstWords[$r].length))>>
число 40 на меньшее. Вообще $x - это число неразрывных пробелов, которые добавляются к слову справа или слева.
Неактивен
Ух, спасибо!
Самое последнее: в начале, когда я брал за основу код Астероидов, словопад получился плотнее, т.к. там запускалось не по одному слову в строке, а по несколько.
:: StoryTitle словопад 1 :: StoryAuthor Sosiskin :: StoryMenu :: Start <<style 'sepia'>> ===[[Запустить словопад|Начать]]=== *** :: Начать <<display 'миелопан'>> :: что-то Ты стоишь прямо у закрытой двери. На двери горит слово ''"калбер-"'' Небольшая панель с подсвеченными кнопками предлагает ввести ответное слово. <<input 'Проверка пароля 1' $пароль>> (Чтобы слушать подсказки в информационном эфире, вы можете [[включить ''миелофон''|миелофон]].) :: Пространство <<clrscr>> <<set $расстояние = 1>> <<if $расстояние lte 0>> <<stop 'Пространство'>> ---- <<else>> <<set $код_последний = $код8>> <<display 'Новая линия'>> <<set $линия8 = $линия7>> <<set $код8 = $код7>> <<set $линия7 = $линия6>> <<set $код7 = $код6>> <<set $линия6 = $линия5>> <<set $код6 = $код5>> <<set $линия5 = $линия4>> <<set $код5 = $код4>> <<set $линия4 = $линия3>> <<set $код4 = $код3>> <<set $линия3 = $линия2>> <<set $код3 = $код2>> <<set $линия2 = $линия1>> <<set $код2 = $код1>> <<set $линия1 = $линия>> <<set $код1 = $код>> <<display 'Вывод'>> # переводим положение в двоичный код <<if $положение eq 1>> <<set $положение_код = '10000000'>> <<elseif $положение eq 2>> <<set $положение_код = '01000000'>> <<elseif $положение eq 3>> <<set $положение_код = '00100000'>> <<elseif $положение eq 4>> <<set $положение_код = '00010000'>> <<elseif $положение eq 5>> <<set $положение_код = '00001000'>> <<elseif $положение eq 6>> <<set $положение_код = '00000100'>> <<elseif $положение eq 7>> <<set $положение_код = '00000010'>> <<elseif $положение eq 8>> <<set $положение_код = '00000001'>> <<endif>> <<endif>> :: Новая линия <<set $линия = ''>> <<set $код = ''>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [1]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [2]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [3]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [4]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [5]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [6]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + $словосписок [7]>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> <<random $объект = 8>> <<if $объект eq 0>> <<set $линия = $линия + '*'>> <<set $код = $код + '1'>> <<else>> <<set $линия = $линия + ' '>> <<set $код = $код + '0'>> <<endif>> # обрамление слева <<display 'Прочие объекты'>> <<set $н4 = $н1>><<set $н5 = $н2>><<set $н6 = $н3>> <<display 'Прочие объекты'>> <<set $линия = '==={{{' + $н4+$н5+$н6 + $линия + $н1+$н2+$н3 + '}}}==='>> :: Прочие объекты # использовать $н1, $н2, $н3 <<random $объект = 9>> <<if $объект eq 0>> <<set $н1 = '•'>> <<elseif $объект eq 1>> <<set $н1 = '.'>> <<else>> <<set $н1 = ' '>> <<endif>> <<random $объект = 9>> <<if $объект eq 0>> <<set $н2 = '•'>> <<elseif $объект eq 1>> <<set $н2 = '.'>> <<else>> <<set $н2 = ' '>> <<endif>> <<random $объект = 9>> <<if $объект eq 0>> <<set $н3 = '•'>> <<elseif $объект eq 1>> <<set $н3 = '.'>> <<else>> <<set $н3 = ' '>> <<endif>> :: Влево <<if $положение>1>> <<set $положение = $положение-1>> <<endif>> :: Вправо <<if $положение<8>> <<set $положение = $положение+1>> <<endif>> :: Вывод # положения звездолёта <<set $линия_звездолёта = ' '>> <<if $положение eq 1>> <<set $линия_звездолёта = '▲ '>> <<elseif $положение eq 2>> <<set $линия_звездолёта = ' ▲ '>> <<elseif $положение eq 3>> <<set $линия_звездолёта = ' ▲ '>> <<elseif $положение eq 4>> <<set $линия_звездолёта = ' ▲ '>> <<elseif $положение eq 5>> <<set $линия_звездолёта = ' ▲ '>> <<elseif $положение eq 6>> <<set $линия_звездолёта = ' ▲ '>> <<elseif $положение eq 7>> <<set $линия_звездолёта = ' ▲ '>> <<elseif $положение eq 8>> <<set $линия_звездолёта = ' ▲'>> <<endif>> # вывод пространства #<<print $линия1>><<print $линия2>><<print $линия3>><<print $линия4>><<print $линия5>><<print $линия6>><<print $линия7>><<print $линия8>>==={{{<<print $линия_звездолёта>>}}}=== # вывод пространства @@@<<print $линия1>><<print $линия2>><<print $линия3>><<print $линия4>><<print $линия5>><<print $линия6>><<print $линия7>><<print $линия8>>@@@ # вывод кнопок # вывод расстояния :: StorySubtitle :: Проверка пароля 1 <<if $пароль == $словосписок [4]>> Правильно! <<print $пароль>>! Вы угадали. Дверь открывается. <<else>> Что? Это не правильный пароль. Попробуйте ещё раз. <<input 'неправильно раз' $пароль>> <<endif>> :: неправильно раз Очевидно, вы не знаете пароля. Вводить слова наугад может занять много времени. Попробуйте [[воспользоваться ''миелофоном''|миелофон]]. :: миелофон <<display 'миелопан'>> <<display 'ground'>> :: ground Ты стоишь у закрытой двери. На двери горит слово ''"калбер-"'' Небольшая панель с подсвеченными кнопками предлагает ввести ответное слово. <<input 'Проверка пароля 1' $пароль>> :: миелопан <<set $словосписок = ["sosiskin","{{{Morych}}}", "//ifiction//","''weird''","axma","story","словопад","мнемо",".", "•",".","•"]>> #<<set $расстояние = 6000>> #<<set $энергия = 3>> # подготовка пространства <<set $линия = '==={{{ }}}==='>> <<set $линия1 = $линия>> <<set $линия2 = $линия>> <<set $линия3 = $линия>> <<set $линия4 = $линия>> <<set $линия5 = $линия>> <<set $линия6 = $линия>> <<set $линия7 = $линия>> <<set $линия8 = $линия>> # подготовка двоичных кодов линий <<set $код = '00000000'>> <<set $код1 = $код>> <<set $код2 = $код>> <<set $код3 = $код>> <<set $код4 = $код>> <<set $код5 = $код>> <<set $код6 = $код>> <<set $код7 = $код>> <<set $код8 = $код>> # начальная позиция звездолёта <<set $положение = 5>> <<set $положение_код = '00001000'>> # запускаем движение <<display 'Пространство'>> <<repeat 'Пространство' 1>>
Можно ли добиться такого с новым кодом?
Неактивен
Morych, нет. На перемещения не обращай внимание, это просто название ссылки такое. Меня интересует, чтобы я всегда попадала из любой локации в главную, то есть там, где текст основного описания. У тебя так вроде в принцессе было.
Например, я зашла в инвентарь, потом в статус, а потом хочу вернуться в локацию, где изначально была.
Неактивен
Вета, в том примере так и сделано. Суть такова. На каждом параграфе-сцене, где есть описание, ты устанавливаешь значение переменной $loc равным названию параграфа. А ссылка "Главная" ведёт на служебный параграф "Обновить", который очищает экран и показывает параграф-сцену:
:: Обновить
<<clrscr>>
<<display $loc>>
Неактивен
Можно, кстати, использовать системную переменную $$title, которая содержит имя текущего параграфа:
:: Обновить <<clrscr>> <<display $$title>>
Неактивен
DoubleDragon написал:
Можно, кстати, использовать системную переменную $$title, которая содержит имя текущего параграфа:
Код:
:: Обновить <<clrscr>> <<display $$title>>
Это так для обновления текущего параграфа. Но если Вета походит по вкладкам "Статус" и "Перемещения", а потом нажмёт "Главная":
===[[ГЛАВНАЯ|Обновить]] | [[СТАТУС|статус]] | [[ПЕРЕМЕЩЕНИЯ|перемещения]]===
то вновь окажется в обновлённом Статусе или Перемещениях. Поэтому нужно запоминать название параграфа-сцены, где описание.
Неактивен
Да, спасибо
Неактивен
Morych написал:
В редакторе есть кнопочка "Тёмная тема". Наде её нажать.
Тьфу ты чёрт! Век живи - дураком помрешь! Попробовал темную тему - решил, что светлая нравится больше :-) Но всё равно спасибо большое!
Неактивен
В анонсе версии 2.0 прочел о возможности конвертации в ePub. Отсюда вопрос - какие требования к квесту предъявляются, чтобы его можно было конвертировать в данный формат? Только картинки и гиперссылки? Условия и объекты уже нельзя?
Неактивен
Korwin написал:
В анонсе версии 2.0 прочел о возможности конвертации в ePub. Отсюда вопрос - какие требования к квесту предъявляются, чтобы его можно было конвертировать в данный формат? Только картинки и гиперссылки? Условия и объекты уже нельзя?
Насколько я знаю, будут разрешены макросы «display» и «br». Больше ничего нельзя, только текст, картинки и ссылки.
Неактивен
Здравствуйте. Хотел поинтересоваться макросом random. Цель-добиться свободного перемещения по квартире, но при первом посещении комнат, обстановка в них должна забиваться рандомно, и вроде бы одного макроса random хватает, но проблема вот в чем. При возвращении на предыдущий экран, и очередном входе в уже зарандомированную комнату, обстановка вновь рандомится. Можно ли было сделать так, чтобы обстановка рандомировалась единожды и сохраняла своё положение без лишней сети сцен?
Неактивен
NekronMono
Вариант А.
Сделать генерацию новой комнаты раньше, чем в неё вошёл. Например в стартовом параграфе.
Вариант Б.
Сделать по условию, при первом посещении.
: Старт
<<set $посещение = 0>>
: Комната
<<if $посещение eq 0>>
<<random $Генерация = 9>>
<<set $посещение = 1>>
#Задаём стартовую обстановку
<<endif>>
#Текст параграфа
Неактивен
NekronMono написал:
При возвращении на предыдущий экран... обстановка вновь рандомится.
Если речь идёт о кнопке "Отменить" в левом верхнем углу экрана (и макросе «back»), то избежать перегенерации комнаты можно, только воспользовавшись вариантом А от Ergistal-а. Вариант Б поможет при обычном повторном переходе в комнату, но от кнопки "Отменить" не спасёт.
Неактивен
Спасибо большое.
Есть еще такой вопрос.
У нас есть деревня разбитая на координаты. Количество домов в каждой клеточке рандомируются во время старта вместе с генерированием вариантов домов (то есть у меня написано 10 вариантов обустройства дома, персонажи и события в нем, программа рандомно выбирает какой из вариантов выбрать). Но нужно добиться такого результата, чтобы при повторении варианта, переменные не смешивались и не сбивались, то есть если я разбил окно в доме номер 1, то в доме номер 8 (где у меня попался такой же вариант развития событий) окно стояла на месте, но у первого окно оставалось разбитым. Неужели придётся каждой координате, дому и варианту писать одинаковые скрипты, только с разными переменными?
Неактивен
http://sm.axmasoft.com/ru/help.html
В руководстве пользователя Вам помогут в подразделе "Для опытных авторов"
* Циклы (многократное исполнение набора команд)
* Списки (одномерные массивы)
Вам придётся параметры с помощью цикла загонять в список, потом извлекать оттуда с помощью цикла.
А обработку команд (создание случайного расположения, отображение комнаты и.т.д) достаточно написать один раз, и вызывать её командой "display".
Пример не напишу, он довольно громоздкий получится, а времени сейчас нет.
Неактивен
Большое спасибо.
Может кто нибудь подсобить примером?
Хорошим примером работы со списками хотя бы, я не совсем отчетливо понял, что это такое.
Неактивен
NekronMono написал:
Спасибо большое.
Есть еще такой вопрос.
У нас есть деревня разбитая на координаты. Количество домов в каждой клеточке рандомируются во время старта вместе с генерированием вариантов домов (то есть у меня написано 10 вариантов обустройства дома, персонажи и события в нем, программа рандомно выбирает какой из вариантов выбрать). Но нужно добиться такого результата, чтобы при повторении варианта, переменные не смешивались и не сбивались, то есть если я разбил окно в доме номер 1, то в доме номер 8 (где у меня попался такой же вариант развития событий) окно стояла на месте, но у первого окно оставалось разбитым. Неужели придётся каждой координате, дому и варианту писать одинаковые скрипты, только с разными переменными?
Одинаковые скрипты точно писать не надо. Попробуем разобраться. Ergistal правильно подсказал насчёт списков и циклов. Все свойства дома можно поместить в списки. Например список, который отвечает за состояние окна во всех домах:
<<set $window = [true, true, true]>>
Пусть у нас есть три дома, а true означает, что окно целое. Теперь разбиваем окно в первом доме:
<<set $window[0] = false>>
Индекс первого дома = 0. И разобьем окно в третьем доме:
<<set $window[2] = false>>
Теперь можно задать другой список с другим свойством. Цвет стен, например:
<<set $color = ["синие", "чёрные", "красные"]>>
Теперь нам надо знать в который по счёту дом мы зашли. Индекс дома занесём в переменную $n, тогда для любого дома:
:: Дома Вы зашли в дом номер <<print $n>>. У этого дома <<print $color[$n]>> стены. Окно <<if $window[$n]>>целёхонько<<else>>разбито<<endif>>.
А переходы в разные дома могут выглядеть так:
[[Идти в первый дом|Дома {$n = 0}]] [[Идти во второй дом|Дома {$n = 1}]] [[Идти в третий дом|Дома {$n = 2}]]
Неактивен
Если вопросы были отвечены, я спрошу еще раз, уж простите)
1. Я хочу, что бы игрок нашел предмет, но он мог поленится и не зайти. Дальше я делаю проверку с if, т.е есть предмет\нету предмета, но мне выдает ошибку. Уточните как правильно это сделать пжста
2. Я хочу, что бы игрок ввел свое имя с клавиатуры, как мне сделать так, что бы по ходу квесте, нпс к нему обращались и запомнили его имя
Отредактировано Nabusan (08.07.2013 19:01)
Неактивен
Nabusan написал:
Если вопросы были отвечены, я спрошу еще раз, уж простите)
1. Я хочу, что бы игрок нашел предмет, но он мог поленится и не зайти. Дальше я делаю проверку с if, т.е есть предмет\нету предмета, но мне выдает ошибку. Уточните как правильно это сделать пжста
2. Я хочу, что бы игрок ввел свое имя с клавиатуры, как мне сделать так, что бы по ходу квесте, нпс к нему обращались и запомнили его имя
1. В начале игры пишем <<set $predmet = 0>> это будет означать, что предмета у гг нет. Там, где он его находит, пишем <<set $predmet = 1>> Тогда проверка наличия предмета:
<<if $predmet>> Предмет есть. <<else>> Нет предмета. <<endif>>
2. Например:
:: ВводИмени Как звать-то тебя, дружище? <<input 'Нпц' $name>> :: Нпц Ну привет, <<print $name>>!
А вообще советую посмотреть учебник в блоге "Гиперкниги", там про все это подробно писано. Например, в этой главе кроме всего прочего говорится, что делать, если игрок вздумает ввести имя капсом.
Неактивен
Но вот ситуация:
в окне, герою нужно щелкнуть на обыск, не нажал-не нашел.
А у меня почему то все равно находит
Осталось послднее - Ваш Класс Хотя, человечеческие закрома полны сюрпризов [[+Обыскать закрома|Меч {$Меч=1}]] <<set $Меч = 1>> [[-Воин|Воин]] [[-Маг|Маг]] [[-Вор|Вор]]
Неактивен
Nabusan написал:
Но вот ситуация:
в окне, герою нужно щелкнуть на обыск, не нажал-не нашел.
А у меня почему то все равно находит
Осталось послднее - Ваш Класс Хотя, человечеческие закрома полны сюрпризов [[+Обыскать закрома|Меч {$Меч=1}]] <<set $Меч = 1>> <--- так вот поэтому и находит :) [[-Воин|Воин]] [[-Маг|Маг]] [[-Вор|Вор]]
При построении страницы весь код параграфа выполняется последовательно и до конца. Т.е. когда вы видите на экране текст со ссылками, объект $меч уже равен 1. А вот присваивание значений в ссылках (в фигурных скобках) выполняется только при нажатии на ссылку.
Неактивен
Приветствую, уважаемые!! Я новичок.
Пытаюсь сделать на платформе AXMA Story Maker интерактивный тренинг.
В тренинге есть задания, на которые пользователь может ответить письменно прямо в тексте, онлайн.
Подскажите как сделать, чтобы текст, который вводит пользователь сохранялся. И как реализовать возможность распечатки сохраненных пользователем результатов, отправки на e-mail
Неактивен
plusova написал:
Приветствую, уважаемые!! Я новичок.
Пытаюсь сделать на платформе AXMA Story Maker интерактивный тренинг.
В тренинге есть задания, на которые пользователь может ответить письменно прямо в тексте, онлайн.
Подскажите как сделать, чтобы текст, который вводит пользователь сохранялся. И как реализовать возможность распечатки сохраненных пользователем результатов, отправки на e-mail
Добро пожаловать в сообщество Аксмавторов!
Значения всех объектов (в том числе и те, которые вводит пользователь) сохраняются при нажатии кнопки "Сохранить состояние" в Меню.
Распечатку можно реализовать средствами браузера, в котором будет проигрываться тренинг. Если вы будете использовать "Хром", то там, знаю, можно
распечатать в pdf-файл. А вот автоматическую отправку на почту, боюсь, реализовать невозможно. Если только кто-нибудь не подскажет нестандартное решение.
Неактивен
Morych, спасибочки за скорый ответ.
Morych написал:
Значения всех объектов (в том числе и те, которые вводит пользователь) сохраняются при нажатии кнопки "Сохранить состояние" в Меню.
нажатие кнописьки это понятно. Вопрос: как бы сделать ссылку на эту кнопиську сразу под окошком ввода? и
чтобы текст при этом сразу же на странице просмотра отражался?
Неактивен
Нажатие, извините, чего?
Ссылку под окошком ввода никак не сделаешь, она всегда в определённом месте. Можно только сообщить пользователю про такую возможность. Вообще я говорю про сохранение значений между сеансами. Т.е. сохранение значений после закрытия браузера. А текущие значения объектов и так хранятся в памяти, их можно показывать макросом «print».
Неактивен
Morych написал:
Возможно, если вы более подробно расскажете про задачу, мне удастся помочь примером кода.
Есть описание задания данное автором.
Под ним окошко для ввода текста пользователем.
Задача 1: чтобы введенный пользователем текст сразу отображался на этой же странице и был виден пользователю (в принципе вы это объяснили, но я пока не разобралась как объект создать).
Задача 2: чтобы у меня была возможность посмотреть что написал пользователь
Неактивен
plusova написал:
Есть описание задания данное автором.
Под ним окошко для ввода текста пользователем.
Задача 1: чтобы введенный пользователем текст сразу отображался на этой же странице и был виден пользователю (в принципе вы это объяснили, но я пока не разобралась как объект создать).
Задача 2: чтобы у меня была возможность посмотреть что написал пользователь
Создать объект можно при помощи макроса «set». Пример задачи 1:
:: Start (<-- это название параграфа) # Создаем объект «$ответ», изначально его значение равно пустой строке <<set $ответ = "">> [[Приступить к выполнению задания|Задание]] :: Задание Описание задания. <<if $ответ eq "">> # Если ответа ещё не было, показываем текстовое поле ввода Введите ваш ответ: <<input "Задание" $ответ>> <<else>> # Иначе показываем ответ пользователя Ваш ответ: <<print $ответ>> <<endif>>
По поводу задачи 2, вы сможете посмотреть, что написал пользователь, только если будете сидеть рядом с пользователем и смотреть на его монитор. Наверно, вы хотели отправлять лог работы пользователя себе на e-mail? Если такая фича и будет реализована, не думаю, что это произойдёт скоро.
Неактивен
Спасибо за пример. Разобралась наконец с объектами.
С параграфом не очень удобно. он добавляет текст внизу страницы, а надо в месте вставки. или я что-то не так делаю.
и почему-то ответ пользователя так и не отображается.
Morych написал:
По поводу задачи 2, вы сможете посмотреть, что написал пользователь, только если будете сидеть рядом с пользователем и смотреть на его монитор. Наверно, вы хотели отправлять лог работы пользователя себе на e-mail? Если такая фича и будет реализована, не думаю, что это произойдёт скоро.
Задачу два Вы перевели совершенно верно, жаль что так.
Неактивен
Как вариант малой автоматизации:
поздравляем вы выполнили задание!
Скопируйте текст с этой страницы и отправьте на ящик Sobaka@jambux.ru
Неактивен
plusova написал:
С параграфом не очень удобно. он добавляет текст внизу страницы, а надо в месте вставки. или я что-то не так делаю.
и почему-то ответ пользователя так и не отображается.
А дайте посмотреть код вашей истории. Если не хотите светить текст заданий, можно в личку или замените всю секретную инфу.
Неактивен
Morych написал:
А дайте посмотреть код вашей истории. Если не хотите светить текст заданий, можно в личку или замените всю секретную инфу.
Да ничего секретного. Все равно планируют бесплатно в общий доступ выложить. Пока у меня с разметкой мозг в кучку сбивается и на историю "это" мало похоже.
Показать по сути нечего, похоже на обычный pdf файл . Еж ли есть у Вас такая возможность запишите, пожалуйста (пожалуйста, пожалуйста, пожалуйста), толковый видео урок "для начинающих" по использованию макросов. Желательно с пошаговыми демо примерами типа: делаешь это (код) - получаешь это (пример в интерактивной книжке). Буду крайне признательна, и есть подозрение что не только я. Видео с экрана можно записать программой jing или camtasia
Отредактировано plusova (11.07.2013 00:44)
Неактивен
Morych написал:
А дайте посмотреть код вашей истории. .
Есть два варианта, первый не подошел, т.к. текст пользователя выводится на новой странице
Вар 1
:: Start <<set $ответ = "">> Здравствуй, дорогой друг! Не пора ли нам потренироваться? [[+Приступить к заданию|Задание {$ответ=""}]] :: Задание Описание задания. <<if $ответ eq "">> # Если ответа ещё не было, показываем текстовое поле ввода Введите ваш ответ: <<input "Задание" $ответ>> <<else>> # Иначе показываем ответ пользователя Ваш ответ: <<print $ответ>> <<endif>>
В этом варианте на странице отображается задание и строка ввода, а ответ пользователя открывается на новой странице. Нужно чтобы ответ отображался здесь же.
Вар 2.
Бог с ней со стартовой страницей, попробуем все сделать на странице задания. И оооо... эврика, работает как надо.
::Start <<set $ответ = "">> <<set $ответ2 = "">> <<set $ответ3 = "">> :: День 1 Здравствуй, дорогой друг! начнем выполнение упражнения! 1. первый замечательный вопрос? <<if $ответ eq "">> # Если ответа ещё не было, показываем текстовое поле ввода Введите ваш ответ: <<input "день 1" $ответ>> <<else>> # Иначе показываем ответ пользователя Ваш ответ: <<print $ответ>> <<endif>> 2. второй замечательный вопрос? <<if $ответ2 eq "">> # Если ответа ещё не было, показываем текстовое поле ввода Введите ваш ответ: <<input "день 1" $ответ2>> <<else>> # Иначе показываем ответ пользователя Ваш ответ: <<print $ответ2>> <<endif>> 3. третий замечательный вопрос? <<if $ответ3 eq "">> # Если ответа ещё не было, показываем текстовое поле ввода Введите ваш ответ: <<input "день 1" $ответ3>> <<else>> # Иначе показываем ответ пользователя Ваш ответ: <<print $ответ3>> <<endif>>
Теперь все работает. А что все
<<set $ответ = "">>
надо на стартовой странице вводить? Почему-то когда сеты вводила прямо в параграфе "День 1" ответы пользователя вообще неотображались
_________________________________________
Отредактировано plusova (11.07.2013 02:57)
Неактивен
Да. Они не отображались, ибо каждый раз выполнялся код
<<set $ответ = "">> <<set $ответ2 = "">> <<set $ответ3 = "">>
и введенный ответ "затирался". Но
<<set $ответ = "">> <<set $ответ2 = "">> <<set $ответ3 = "">>
в параграфе Start можно и не задавать, а изменить условия
<<if $ответ eq "">> <<if $ответ2 eq "">> <<if $ответ3 eq "">>
на
<<if !($ответ)>> <<if !($ответ2)>> <<if !($ответ3)>>
! используются для проверки объекта на существование.
Неактивен
Flash написал:
в параграфе Start можно и не задавать, а изменить условия.
Здравствуйте, Flash!
Если я не правильно поняла, то поправьте меня: set можно вообще не задавать?
И поясните где изменить условия: в Start или в параграфе "День1"?
Спасибо за интересный ответ.
Неактивен
Пока вы не зададите set или не присвоите переменным $ответ..$ответ3 значения каким-нибудь другим способом (через фигурные скобки в ссылке или макросом input) значения этих переменных буду равны undefined (не определённое значение).
Имелось ввиду, что можно сделать так:
:: Start [[День 1]] :: День 1 Здравствуй, дорогой друг! начнем выполнение упражнения! 1. первый замечательный вопрос? <<if !($ответ)>> Введите ваш ответ: <<input "день 1" $ответ>> <<else>> Ваш ответ: <<print $ответ>> <<endif>> 2. второй замечательный вопрос? <<if !($ответ2)>> Введите ваш ответ: <<input "день 1" $ответ2>> <<else>> Ваш ответ: <<print $ответ2>> <<endif>> 3. третий замечательный вопрос? <<if !($ответ3)>> Введите ваш ответ: <<input "день 1" $ответ3>> <<else>> Ваш ответ: <<print $ответ3>> <<endif>>
Т.е. в параграфе Start ничего не задаём, никаких set, там только ссылка на параграф День 1. А условия меняем в параграфе День 1 (условия — это if). Может вам будет удобней использовать вместо восклицательного знака в условии оператор not:
<<if !($ответ3)>> то же самое что и <<if not $ответ3>>
Неактивен
Что же касается видеоуроков, то их делает Илья Богомолов, ссылки есть в соседней теме.
Также на сайте «Гиперкниги» есть специальный раздел помощи для авторов.
Неактивен
Гайз, простите блондинковопрос, но я сейчас свихнусь. Что-то нажала, и пропала визуализация ссылок (белые стрелочки). Сейчас отображаются только ссылки, ведущие из активного параграфа (желтые стрелочки). Как вернуть белые стрелочки?
Неактивен
Alina написал:
Гайз, простите блондинковопрос, но я сейчас свихнусь. Что-то нажала, и пропала визуализация ссылок (белые стрелочки). Сейчас отображаются только ссылки, ведущие из активного параграфа (желтые стрелочки). Как вернуть белые стрелочки?
Смею предположить, вы только что создали сто первый параграф. Именно при таком числе параграфов (более сотни) визуализация стрелок-связей автоматически отключается. Но, возможно, разработчик пофиксит эту фичу в следующей версии программы.
Неактивен
Вопрос. Если я ставлю
<<random $вызов = 2>>
У меня могут появиться числа 1 и 2 или 0, 1 и 2?
Отредактировано Вета (18.07.2013 20:57)
Неактивен
0,1,2.
Неактивен
Есть такая конструкция:
#инвентарь
<<display 'Вкладки'>>
__''НА СЕБЕ:''__
Шелковое розовое платье -> [[-Снять|платье]]
Туфельки -> [[-Снять|туфли]]
------------------
#платье
<<clrscr>>
<<display 'инвентарь'>>
//описание1//
------------------
#туфли
<<clrscr>>
<<display 'Инвентарь'>>
//описание2//
-------------------
#вкладки
<<if $$title.toLowerCase() eq 'заметки'>>
===^^[[Сцена|Обновить]] | Заметки | [[Инвентарь|Инвентарь]]^^===
<<elseif $$title.toLowerCase() eq 'инвентарь'>>
===^^[[Сцена|Обновить]] | [[Заметки|Заметки]] | Инвентарь^^===
<<else>>
<<if $$title.toLowerCase() neq 'обновить'>>
<<set $passage = $$title>>
<<endif>>
===^^Сцена | [[Заметки|Заметки]] | [[Инвентарь|Инвентарь]]^^===
<<endif>>
-----------------------
Что собственно получается.
Когда нажимаю на "снять платье" , внизу появляется описание1, когда нажимаю на "снять туфли", описание1 пропадает, появляется описание2, то есть текст меняется в зависимости от использования предметов в инвентаре, а не нагромождается вниз. Это и было нужно. Но теперь, при переходе на Сцену (во вкладках) почему - то отображается текст инвентаря, а не сцены. Причем, он почему-то сразу мне перескакивает на сцену, когда нажимаю "снять". Где я не права?
Отредактировано Вета (30.07.2013 19:03)
Неактивен
Еще вопрос - есть ли в аксме зачеркнутый текст?
Неактивен
Вета написал:
Еще вопрос - есть ли в аксме зачеркнутый текст?
Пока нет. Будет в 2.0.
Неактивен
А что делать по предыдущему вопросу? Игра стоит, а срок идет (
Кажется, смогла сделать.
Но появился еще вопрос: как сделать условие на наименование локации, типа:
Если локация = дом, то ......
Причем, это надо сделать так:
сцена(тайтл) у нас=комната, если переключаться по вкладкам комната-инвентарь.
#инвентарь
<<display 'Вкладки'>>
__''НА СЕБЕ:''__
Шелковое розовое платье -> [[*Снять|платье]]
Туфельки -> [[*Снять|туфли]]
#платье
вот тут условие: если тайтл=комната, то ....
иначе....
===
Не работает.
Отредактировано Вета (30.07.2013 21:21)
Неактивен
Сорри. Сейчас на даче в экстремальных условиях
Смогу посмотреть не ранее, чем через несколько дней.
Неактивен
Вета написал:
как сделать условие на наименование локации ... если тайтл=комната, то
$$title — системная переменная, в которой хранится название текущего параграфа. А игровая локация или сцена может состоять из нескольких параграфов, и наоборот, в один параграф можно запихнуть несколько локаций. Поэтому лучшим решением будет завести дополнительную переменную, в которой будет храниться название именно локации, сцены. Тут уж ты сможешь единолично контролировать изменение значения этой переменной. Т.е. в нужном месте сделаешь <<set $curloc = "комната">> и все условия будут работать.
В твоём примере подозреваю, что $$title всегда равно "инвентарь". Можно это проверить макросом print или в консоли.
Неактивен
Ага, спасибо, Морыч, так получается. Локация, действительно, инвентарь. Просто я знаю, как в том же куспе это сделать и пытаюсь подстроиться по аналогии, но не выходит Жаль, что в аксме нет резкого goto, чтобы сразу уходил на другой параграф, иногда бы пригодилось. Ну и всплывающие подменю в ссылках, конечно. Хотя, может, с помощью явы скрипта их и можно как-то реализовать.
Неактивен
Вета написал:
Жаль, что в аксме нет резкого goto, чтобы сразу уходил на другой параграф, иногда бы пригодилось.
А как же последовательность макросов:
<<clrscr>>
<<display 'GoToLocation'>>
Единственное, тут уже будут нюансы с переменной $$title (она не поменяется) и с кнопкой "Отмена" (соответственно и с макросами back и return). Просто физически мы остаёмся на том же параграфе. А можно пример, для чего нужен оператор goto?
Ну и всплывающие подменю в ссылках, конечно. Хотя, может, с помощью явы скрипта их и можно как-то реализовать.
Меню по ссылке, как в куспе, конечно, пока нет, но можно сделать аналог. Задача какая? Я нажимаю ссылку и появляются несколько дополнительных действий. Верно? Попробуй как-то так:
:: локация Вы в своей комнате. Тут есть [[*окно|меню {$объект = "окно"}]]. :: меню <<if $объект eq "окно">> ---- [[посмотреть в окно]] [[открыть окно]] [[выпрыгнуть из окна]] <<endif>>
Неактивен
Пример для goto-например, в том же драконьем кодексе. В локации логово у меня существовала проверка номера дня. Когда наступал пятый день, там стояло goto 'праздник' и персонажа сразу перекидывало в другую локацию. А так приходилось делать дополнительное условие и дополнительную ссылку-перехода "Идти на праздник" + снова выводилось описание логова.
А подменю удобно тем, что меньше загромождает экран кучей ссылок и при смене предмета, вообще убирается без последствий.
Неактивен
Так можешь попробовать в "Кодексе" сделать внутри условия вместо ссылки очистку экрана и следом display 'праздник'. Или в параграфе "праздник" первой строкой поставь очистку экрана.
Насчёт подменю, оно будет меняться при выборе разных предметов (при наличии у предметов каких-то действий). А убирать без последствий его можно при выборе того же самого предмета второй раз подряд: нажал предмет — появились действия, нажал ещё раз — исчезли. И экран не загромождается. Для этого просто надо будет запоминать последний выбранный предмет.
Неактивен
Помогите сделать боевую систему... думал сделать что-то типа поставить на рандом объект сила и если у персонажа есть меч он увеличает урон, а броня снижает получаемый урон, плюс удача, которая позволяет увернуться от удара, мастерство отбить и прочее. Вот только все это реализовать не получается я в АСМе ньюби:(
Неактивен
WeLLWar написал:
Помогите сделать боевую систему... думал сделать что-то типа поставить на рандом объект сила и если у персонажа есть меч он увеличает урон, а броня снижает получаемый урон, плюс удача, которая позволяет увернуться от удара, мастерство отбить и прочее. Вот только все это реализовать не получается я в АСМе ньюби:(
Попробую набросать пример поединка по предложенному техзаданию.
Неактивен
В какой-то игре я наблюдал, как прозвучал одиночный звук, и тут же прекратился, не стал играть в цикле (параграф не менялся при этом). Как такого можно добиться? С помощью $$time задавать <<noaudio>> в какой-то момент, или ещё как?
Неактивен
Можно попробовать <<noaudio>> запихнуть в параграф, который вызывать по <<repeat>>. И после остановки звука останавливать повтор этого параграфа по <<stop>>. Но проблема, по-правде в том, что неизвестно, когда читателю загрузится аудиофайл из инета - скорости-то у всех разные
Неактивен
Можно ещё просто делать аудиофайл с длинной тишиной в конце, а при переходе на другой параграф делать <<noaudio>>. Тишина не должна сильно влиять на размер файла.
Неактивен
А вот и боевая система "Арена"! http://hyperbook.ru/file13764029087384
Неактивен
А DD как всегда меня опередил
Ну в общем да. Там боевая система «Арена», а обсуждения боевых систем предлагаю перенести в эту тему.
Неактивен
Подскажите, пожалуйста, как сделать следующее:
Есть Параграф1, в котором сначала пару секунд должен выводиться прогресс бар в виде добавляющихся точек (......), после чего выводится Параграф2.
Заранее премного благодарю!
Неактивен
:: тест1 <<set $takt = 0>> <<repeat 'Повтор' 1>> :: Повтор .<<set $takt = $takt + 1>><<if $takt eq 5>><<stop 'Повтор'>><<br>>Конец отсчёта<<endif>>
Вот такой код из двух параграфов. В параграфе Повтор важно написать весь код в одну строку без единого пробела между командами, для того чтобы точки выводились в линию, а не перескакивали каждая на следующую строчку.
Параграф Тест1
<<set $takt = 0>>
Здесь задаём счётчик такт.
<<repeat 'Повтор' 1>>
Включаем повторение, с задержкой в 1 секунду.
Параграф Повтор
.
Выводим точку
<<set $takt = $takt + 1>>
Увеличиваем значение счётчика на единицу.
<<if $takt eq 5>>
Проверяем число повторений, в данном случае выводится 5 точек, за 5 секунд реального времени.
<<stop 'Повтор'>><<br>>Конец отсчёта<<endif>>
Если условие соблюдается (5 повторений), тогда повторение останавливается и на новой строке выводится сообщение (или ссылка).
Отредактировано Ergistal (20.08.2013 00:36)
Неактивен
Ergistal, огромное спасибо! Особенно за подробное разъяснение.
А задержка может быть меньше секунды? Скажем, полсекунды?
Уже прочитал в руководстве. Нельзя.
Отредактировано sosiskin (20.08.2013 00:49)
Неактивен
А через Loop сразу попробовал, но там есть очень хитрая загвоздочка в тех-задании. Попробуй.
Неактивен
Ergistal написал:
А через Loop сразу попробовал, но там есть очень хитрая загвоздочка в тех-задании. Попробуй.
У меня вот что получилось:
:: Start [[Test]] :: Test # Начальное значение счётчика <<set $time = 0>> # Запускаем повтор параграфа1 с интервалом 1 сек. <<repeat 'Passage1' 1>> # И сразу же показываем параграф <<display 'Passage1'>> :: Passage1 # Очистка экрана (т.к. параграф по таймеру добавляется к текущему) <<clrscr>> # Увеличиваем счётчик на 1 <<set $time++>> <<if $time eq 6>> # Если параграф1 вызывается 6-й раз (нарисовано уже 5 точек) останавливаем повторение <<stop 'Passage1'>> # И показываем параграф2 <<display 'Passage2'>> <<else>> # Иначе выводим точки в цикле. Который раз вызывается параграф1, столько и точек Loading<<loop $time>>.<<endloop>> <<endif>> :: Passage2 Hello world!
Неактивен
Morych
Да, отлично вышло обошёл загвоздку с задержкой! но для этого пришлось лишний repeat прицеплять. Зато у меня короче код вышел
Отредактировано Ergistal (20.08.2013 11:04)
Неактивен
Как можно в ссылке сделать переход на переменную?
<<if $сутки eq 1>>
__===''День [[(сменить)| {$сутки=2}$curloc]]''===__
<<else>>
__===''Ночь [[(сменить)| {$сутки=1}$curloc]]''=== __
<<endif>>
$curloc - переменная наименования локации задана в каждой локации.
напр.
#горы
<<set $curloc = 'горы'>>
-----------------------------
#лес
<<set $curloc = 'лес'>>
Отредактировано Вета (20.08.2013 14:57)
Неактивен
Вета написал:
Как можно в ссылке сделать переход на переменную?
<<if $сутки eq 1>>
__===''День [[(сменить)| {$сутки=2}$curloc]]''===__
<<else>>
__===''Ночь [[(сменить)| {$сутки=1}$curloc]]''=== __
<<endif>>
$curloc - переменная наименования локации задана в каждой локации.
напр.
#горы
<<set $curloc = 'горы'>>
-----------------------------
#лес
<<set $curloc = 'лес'>>
Я давно мечтаю про такую фичу))
Сейчас можно сделать таким образом:
:: горы <<set $curloc = 'горы'>> ===''Ночь [[(сменить)|Переход {$сутки=1}]]''=== :: Переход <<clrscr>> <<display $curloc>>
Неактивен
Morych написал:
Вета написал:
Как можно в ссылке сделать переход на переменную?
<<if $сутки eq 1>>
__===''День [[(сменить)| {$сутки=2}$curloc]]''===__
<<else>>
__===''Ночь [[(сменить)| {$сутки=1}$curloc]]''=== __
<<endif>>
$curloc - переменная наименования локации задана в каждой локации.
напр.
#горы
<<set $curloc = 'горы'>>
-----------------------------
#лес
<<set $curloc = 'лес'>>Я давно мечтаю про такую фичу))
Сейчас можно сделать таким образом:Код:
:: горы <<set $curloc = 'горы'>> ===''Ночь [[(сменить)|Переход {$сутки=1}]]''=== :: Переход <<clrscr>> <<display $curloc>>
Боюсь, как бы у меня остальное не нарушилось... Там же вкладки... Давай пилить Драгона, пусть сделает эту фичу.
К тому же мне надо сменить на день... И там еще с числами будет завязано потом...
ЗЫ: попробовала, не получается, как нужно
Отредактировано Вета (20.08.2013 15:55)
Неактивен
А вообще такая фича планируется?
А то у меня внезапно игра на КРИЛ на Аксме без нее перекочует на кусп, ибо альтернативной замены я не вижу, чтобы не порушилась конструкция геймплея.
ЗЫ: В версии 2.0 вроде планируется, да?
Отредактировано Вета (20.08.2013 16:35)
Неактивен
Вета написал:
А вообще такая фича планируется?
А то у меня внезапно игра на КРИЛ на Аксме без нее перекочует на кусп, ибо альтернативной замены я не вижу, чтобы не порушилась конструкция геймплея.
Итак, Вета пустила в ход мягкий шантаж, что же будет дальше?
Если не опасаешься, что я похищу твою идею для КРИЛа, можешь мне куда-нибудь в личку полный код игры показать. Так, по кусочку трудно сказать, где баг.
Неактивен
Написала
ЗЫ: Никакого шантажа, констатация факта в связи с невозможностью реализации )))
Неактивен
Возможно всё
Но только если мне вменяемо скажут, что надо сделать, а то сейчас и так голова пухнет
PS. И в тему предложений, пожалуйста.
Неактивен
Морыч, ты можешь это для Драгона правильно сформулировать?
Неактивен
Вета написал:
Морыч, ты можешь это для Драгона правильно сформулировать?
Попробовал сформулировать здесь. Посмотри и дополни при необходимости, а то ведь я написал, чего мне хочется. Вдруг, ты другое имела ввиду
Неактивен
Cheshire написал:
А можно как-нибудь отключить затухание/проявление текста при переходе? В определённых условиях очень мешает это «мигание».
Я у себя использую такую хитрость, как переход по добавляющей ссылке (с плюсом) и очистку экрана. При этом обязательно нужно передавать в ссылке параметр. Например:
:: Passage1 <<clrscr>> ===Text 1=== [[+Go to 2|Passage2 {$a = $a}]] :: Passage2 <<clrscr>> ===Text 2=== [[+Go to 1|Passage1 {$a = $a}]]
Неактивен
Просто изначально стоял запрет на вызов параграфа из самого себя. А указание параметра это обходит.
Неактивен
arudzo написал:
Ребята подскажите как сделать раскрывыющеюся ссылку? Урок данный на этом форуме прочёл, сделал как там написано (наверное?) но ничего не получается! Может кто нибудь покажет код готовой ссылки для ознакомления? Спасибо!
Параграф с такой ссылкой выглядит следующим образом:
:: НазваниеПараграфа <<clrscr>> [[+Название ссылки|НазваниеПараграфа {$признак1 = !$признак1}]]<<if $признак1>> ▼<<br>>Содержимое, которое появляется или прячется при нажатии на ссылку. Может быть не только текст, но и картинки.<<else>> ►<<endif>>
А в параграфе «Start» обязательно нужно указать изначальное значение признака:
<<set $признак1 = false>>
Неактивен
romz написал:
как вставить активную ссылку (url), чтобы при клике переходило на указанный сайт
[[текст ссылки|https://forum.ifiction.ru]]
так должно работать
Неактивен
подскажите пожалуйста, возможно ли как-то сделать генерацию футбольного матча и результаты конкретного игрока если он главный персонаж... типа наподобие PRO Soccer Стань Легендой
Неактивен
Max написал:
подскажите пожалуйста, возможно ли как-то сделать генерацию футбольного матча и результаты конкретного игрока если он главный персонаж... типа наподобие PRO Soccer Стань Легендой
Честно даже не понимаю, зачем это надо.. причем в текстовой реализации...
Так-то можно сделать все. Главное придумать алгоритм. Графическое отображение естественно будет отсутствовать, скорее всего только словесное сопровождение, где будут рандомно выдаваться события.
А результаты конкретного игрока... да тоже, почему нет.
Редко когда бывает, что что-то сделать нельзя) тут скорее вопрос возникает "Зачем" и "Кому это надо".
Неактивен
Fahrengeit, ну если Max запостил тут вопрос, значит ему надо
Max, я увы не играл в "PRO Soccer Стань Легендой", но, например, можно так: команды некоторое число раз бегают то к одним воротам, то к другим - используем цикл со случайным числом повторений. А внутри цикла при помощи генератора случайных чисел проверяем, удалось ли команде добежать до ворот противника, удалось ли пробить по воротам, и, собственно, был ли гол. Затем то же самое для команды противника. Шанс того или иного события должен зависеть от уровня команды. Чтобы отметить действия отдельного игрока, в атаке проверяем, получил ли герой мяч или сделал голевую передачу и т.п. (опять при помощи рандома). Чтобы описать алгоритм подробней, нужно хорошо разбираться в футболе, а не как я.
Неактивен
Я видимо не правильно задал вопрос)))
я не программист и вообще далекий от этого человек, игры делать не могу, но у меня есть мечта сделать что-то вроде симулятора жизни футболиста, как с профессиональной стороны, так и с описанием личной жизни (попал из простого клуба, например, в Барсу - появилось бало, тратит его, может быть выбор ходить по клубам как Чипсоид ))) или посвящать себя только футболу, как относится к нему пресса, болельщики и .т.п.). Я совершенно случайно наткнулся на AXMA Story Maker, и мне кажется в этой проге возможно хоть как-то реализовать задуманное.
прописать текст представляю как, но вот как генерировать матчи - не знаю...
вижу так -
молодой футболист имеет определенные показатели, генерируется матч (не знаю как учитывать его данные на игру) и потом показывается, забил ли гол, и вообще попал в основной состав... если все ОК - развивается и т.п.
Вопрос: как сделать систему генерации матчей?? предполагаю, что матчи будут генерироваться не все, допустим за месяц - сыграл столько-то, забил столько-то с такими-то командами...
В общем идея есть, а как реализовать пока не представляю(((
Буду признателен если что-нибудь посоветуете.
Неактивен
Max написал:
Я совершенно случайно наткнулся на AXMA Story Maker, и мне кажется в этой проге возможно хоть как-то реализовать задуманное.
Конечно, возможно! Самое главное, представлять, что ты хочешь видеть на экране, а как это сделать — будем разбираться, тем более, если мечта
Я сначала подумал, что ты хочешь получить сгенерированное описание всего матча, а не только его результатов. И, возможно, генерировать весь матч было бы интереснее, особенно, если в процессе матча можно управлять героем: самому вдарить по воротам, отдать пас или прислушаться, что орёт тренер.
Ну а результаты матча в простейшем случае можно сделать так:
<<random $goals1 = 10>> <<random $goals2 = 10>> ===Результат матча=== ===<<print $goals1>> : <<print $goals2>>===
В приведённом примере результат всегда случайный, т.е. никак не зависит от силы команд.
Если у нас есть параметры, которые отвечают за силу команд, можно их использовать, чтобы определить, какая команда победила, и только потом определить счёт.
Допустим параметр "сила команды" может принимать значения от 0 до 10. У команды с силой 0 нет никаких шансов победить команду с силой 10 (можно надеяться только на ничью). У команд с равными силами шансы 50/50.
параграф Матч
<<set $sila1 = 9>> <<set $sila2 = 4>> <<random $goals1 = 5>> <<random $goals2 = 5>> <<random $rnd = 99>> <<if $rnd lt 50 + ($sila1 - $sila2) * 5>> <<set $goals1 = $goals1 + $goals2>> <<else>> <<set $goals2 = $goals2 + $goals1>> <<endif>> ===Результат матча=== ===<<print $goals1>> : <<print $goals2>>=== [[Сыграть ещё раз|Матч]]
В этом примере чаще будет побеждать первая команда, хотя у второй тоже есть шанс и победить, и сыграть вничью. Поизменяй параметры $sila1 и $sila2 и посмотри, как меняются результаты матчей.
Неактивен
Такой вопрос. Вставляю вот этот код диалога (приведен в обучении):
Параграф-диалог
<<display 'Параграф-диалог'>>
<<if $диалог_персонаж eq 1>>
Реплика главного героя.
Реплика второстепенного персонажа.
[[Реплика героя, вариант 1|Параграф-диалог {$диалог_персонаж = 2}]]
[[Реплика героя, вариант 2|Параграф-диалог {$диалог_персонаж = 3}]]
<<elseif $диалог_персонаж eq 2>>
Реплика героя, вариант 1.
Реакция второстепенного персонажа.
[[Закончить разговор|Параграф-сцена {$диалог_персонаж = 4}]]
<<elseif $диалог_персонаж eq 3>>
Реплика героя, вариант 2.
Реакция второстепенного персонажа.
[[Закончить разговор|Параграф-сцена {$диалог_персонаж = 4}]]
<<elseif $диалог_персонаж eq 4>>
Реплика героя.
Второстепенный персонаж напоминает, что уже разговаривали.
[[Закончить разговор|Параграф-сцена]]
<<endif>>
У меня отображается только название диалога - Параграф-диалог и все. Что не правильно делаю?
Неактивен
alfa10 написал:
У меня отображается только название диалога - Параграф-диалог и все. Что не правильно делаю?
Думаю, что не определена переменная $диалог_персонаж. Перед тем как вызывать параграф-диалог нужно задать начальное значение переменной:
<<set $диалог_персонаж = 1>>
А зачем параграф вызывается сам из себя (<<display 'Параграф-диалог'>>)?
Неактивен
Oldrik написал:
О, уже ответили.
А зачем ты удалил свой пример? У тебя ведь там было как раз про то, как сделать показатели гг-футболиста, а у меня в примере только общий счёт.
Неактивен
Morych написал:
alfa10 написал:
У меня отображается только название диалога - Параграф-диалог и все. Что не правильно делаю?
Думаю, что не определена переменная $диалог_персонаж. Перед тем как вызывать параграф-диалог нужно задать начальное значение переменной:
<<set $диалог_персонаж = 1>>
А зачем параграф вызывается сам из себя (<<display 'Параграф-диалог'>>)?
Дык вот это именно пример из обучения. Если присваивать переменную <<set $диалог_персонаж = 1>>, то:
[[Реплика героя, вариант 1|Параграф-диалог {$диалог_персонаж = 2}]]
[[Реплика героя, вариант 2|Параграф-диалог {$диалог_персонаж = 3}]]
уже не срабатывают
Неактивен
Morych написал:
<<set $диалог_персонаж = 1>> нужно написать не в параграфе-диалоге, а в самом начале истории, в параграфе "Start".
Точняк! Все заработало! Спасибо тебе, дружище!
Неактивен
alfa10 написал:
Точняк! Все заработало! Спасибо тебе, дружище!
Обращайся!
alfa10 написал:
Дык вот это именно пример из обучения.
Я вот заглянул в учебник, и там на самом деле <<display 'Заголовок'>>
Неактивен
Morych, код самому не понравился.
Немного переделал:
<<set $gg = [0,0]>> - Где 0 - опыт Главного Героя (ГГ)(например опыт = забитых мячей), 1 - навык.
<<set $com_gg = [0,0]>> - команда ГГ, где 0 - название, 1 - навык.
<<set $match = [0,0,0,0]>> - Где 0 - с кем играли, 1 - сколько пропустили, 2 - сколько забили, 3 - сколько забил ГГ.
<<set $random $a0 = 3>> - выбирается с кем играли.
<<set $match[0] = $a0>>
<<display 'com'>> - тут названия команд и их характеристики. (<<set $com = ['Газмяс',1]>> Название и навык команды).
<<random $a1 = 10>>
<<random $a2 = 10>>
<<if $com[1] gt $com_gg[1]>>
<<set $a1 = $a1 + 1>>
<<elseif $com[1] lt $com_gg[1]>>
<<set $a2 = $a2 + 1>>
<<endif>>
#Какая команда опытнее та и забила один гарантированный гол. Можно сделать шанс на забитие.#
<<random $b = 9>>
<<if $gg[1] gte 3 and $gg[1] lt 6>>
<<set $b = $b + 1>>
<<elseif $gg[1] gte 6 and $gg[1] lt 9>>
<<set $b = $b + 2>>
<<elseif $gg[1] gte 9>>
<<set $b = $b + 3>>
<<endif>>
#Чем больше навык игрока - тем больше его шанс забить гол.#
<<if $b gte 4 and $b lt 6>>
<<set $match[3] = $match[3] + 1>>
Игрок забил один мяч.
<<elseif $b gte 6 and $b lt 9>>
<<set $match[3] = $match[3] + 2>>
Игрок забил два мяча.
<<elseif $b gte 9>>
<<set $match[3] = $match[3] + 3>>
Игрок забил три мяча.
<<endif>>
#Участие игрока в матче#
<<set $a2 = $a2 + $match[3]>> - результат команды игрока.
<<set $gg[0] = $gg[0] + $match[3]>> - прокачка ГГ.
<<if $a1 gt $a2>>
Проиграли.
<<elseif $a1 eq $a2>>
Ничья.
<<else>>
Победа.
<<endif>>
#Результат матча#
Счёт - <<print $a1>> : <<print $a2>>
Отредактировано Oldrik (29.10.2013 13:05)
Неактивен
Ребят, такой вопрос: создаю книгу, вставляю в нею фотки. Потом сохраняю книгу в файл HTML. На другом компьютере запускаю этот сохраненный файл - а фоток нет. Как делать так, чтобы фотографии были в книге, даже если я смотрю файл на другом компьютере? Например, вот напишу я книгу, захочу ее сохранить в файл и отослать друзьям - а фотки получается, пропадут?
Неактивен
alfa10 написал:
Ребят, такой вопрос: создаю книгу, вставляю в нею фотки. Потом сохраняю книгу в файл HTML. На другом компьютере запускаю этот сохраненный файл - а фоток нет. Как делать так, чтобы фотографии были в книге, даже если я смотрю файл на другом компьютере? Например, вот напишу я книгу, захочу ее сохранить в файл и отослать друзьям - а фотки получается, пропадут?
Картинки не встраиваются в html-файл, там только изображения кнопок. Если ты добавляешь картинки пунктом меню "Выбрать локальный файл", они копируются в папку files рядом с sm-файлом. Соответственно отсылай друзьям ещё и папку files вместе с html-файлом. Для пересылки по почте можно всё предварительно упаковать в архив.
Неактивен
Morych написал:
alfa10 написал:
Ребят, такой вопрос: создаю книгу, вставляю в нею фотки. Потом сохраняю книгу в файл HTML. На другом компьютере запускаю этот сохраненный файл - а фоток нет. Как делать так, чтобы фотографии были в книге, даже если я смотрю файл на другом компьютере? Например, вот напишу я книгу, захочу ее сохранить в файл и отослать друзьям - а фотки получается, пропадут?
Картинки не встраиваются в html-файл, там только изображения кнопок. Если ты добавляешь картинки пунктом меню "Выбрать локальный файл", они копируются в папку files рядом с sm-файлом. Соответственно отсылай друзьям ещё и папку files вместе с html-файлом. Для пересылки по почте можно всё предварительно упаковать в архив.
Получается только так? А если публиковать книгу из программы в библиотеку - тогда все нормально пропишется и фотографии останутся?
И еще вопрос - почему то вставляю музыку, а она не играется на странице, хотя значок динамика отображается на странице. Код такого вида вставляю:
[[File: files/Scooter - Fire.mp3]]
Неактивен
alfa10 написал:
Получается только так? А если публиковать книгу из программы в библиотеку - тогда все нормально пропишется и фотографии останутся?
Когда будешь публиковать в библиотеку, редактор закачает все картинки и музыку на сайт, и у всех будет всё отображаться (при условии подключения к Интернету )
alfa10 написал:
И еще вопрос - почему то вставляю музыку, а она не играется на странице, хотя значок динамика отображается на странице. Код такого вида вставляю:
Код:
[[File: files/Scooter - Fire.mp3]]
А какой браузер ты используешь, случайно не Оперу? Для неё нужен звуковой файл с таким же именем, но в формате ogg. Если вставляешь музыку в игру, придётся каждый звуковой файл в двух форматах рядышком класть mp3 и ogg, чтобы у всех проигрывалась музыка независимо от браузера.
Неактивен
Morych написал:
А какой браузер ты используешь, случайно не Оперу? Для неё нужен звуковой файл с таким же именем, но в формате ogg. Если вставляешь музыку в игру, придётся каждый звуковой файл в двух форматах рядышком класть mp3 и ogg, чтобы у всех проигрывалась музыка независимо от браузера.
Firefox.
А музыка будет играть только на одной странице, или пока не закрою в параграфе тег <<noaudio>>?
Неактивен
А музыка будет играть только на одной странице, или пока не закрою в параграфе тег <<noaudio>>?
Во всех параграфах. Пока не встретится тег <<noaudio>>.
P.S. в Firefox нужно использовать ogg формат. Но лучше сделать и mp3 файл, чтобы не зависеть от браузера.
Неактивен
Oldrik написал:
Morych, код самому не понравился.
Немного переделал:
<<set $gg = [0,0]>> - Где 0 - опыт Главного Героя (ГГ)(например опыт = забитых мячей), 1 - навык.
<<set $com_gg = [0,0]>> - команда ГГ, где 0 - название, 1 - навык.
<<set $match = [0,0,0,0]>> - Где 0 - с кем играли, 1 - сколько пропустили, 2 - сколько забили, 3 - сколько забил ГГ.
<<set $random $a0 = 3>> - выбирается с кем играли.
<<set $match[0] = $a0>>
<<display 'com'>> - тут названия команд и их характеристики. (<<set $com = ['Газмяс',1]>> Название и навык команды).
<<random $a1 = 10>>
<<random $a2 = 10>>
<<if $com[1] gt $com_gg[1]>>
<<set $a1 = $a1 + 1>>
<<elseif $com[1] lt $com_gg[1]>>
<<set $a2 = $a2 + 1>>
<<endif>>
#Какая команда опытнее та и забила один гарантированный гол. Можно сделать шанс на забитие.#
<<random $b = 9>>
<<if $gg[1] gte 3 and $gg[1] lt 6>>
<<set $b = $b + 1>>
<<elseif $gg[1] gte 6 and $gg[1] lt 9>>
<<set $b = $b + 2>>
<<elseif $gg[1] gte 9>>
<<set $b = $b + 3>>
<<endif>>
#Чем больше навык игрока - тем больше его шанс забить гол.#
<<if $b gte 4 and $b lt 6>>
<<set $match[3] = $match[3] + 1>>
Игрок забил один мяч.
<<elseif $b gte 6 and $b lt 9>>
<<set $match[3] = $match[3] + 2>>
Игрок забил два мяча.
<<elseif $b gte 9>>
<<set $match[3] = $match[3] + 3>>
Игрок забил три мяча.
<<endif>>
#Участие игрока в матче#
<<set $a2 = $a2 + $match[3]>> - результат команды игрока.
<<set $gg[0] = $gg[0] + $match[3]>> - прокачка ГГ.
<<if $a1 gt $a2>>
Проиграли.
<<elseif $a1 eq $a2>>
Ничья.
<<else>>
Победа.
<<endif>>
#Результат матча#
Счёт - <<print $a1>> : <<print $a2>>
Я долго пытался разобраться в этом.. пробовал и так и так...
мне кажется, что здесь
<<set $random $a0 = 3>> - выбирается с кем играли. ---->>> ошибка
ни как не могу врубиться в следующее:
- что означает объект и рядом с ним []. например - $match[3]
- если возможно для чайника объясните по -шагово... я не понимаю, почему ставятся те или иные числа (((
Неактивен
<<if $диалог eq 1>> <<clrscr>> <<random $rnd = 8>> <<set $маги = 5>> <<set $удача = $удача>> ===Ваш рейтинг удачи равен ''<<print $удача>>''===
Интересует вот эта строка из кода:
<<set $удача = $удача>>
Правильно ли я понимаю, что в этом параграфе текущий параметр удачи берется от предыдущего параметра удачи?
Неактивен
мне кажется, что здесь
<<set $random $a0 = 3>> - выбирается с кем играли. ---->>> ошибка
ни как не могу врубиться в следующее:
- что означает объект и рядом с ним []. например - $match[3]
- если возможно для чайника объясните по -шагово... я не понимаю, почему ставятся те или иные числа (((
Да, разумеется ошибка. Надо было хоть разок глазами пробежать.
<<random $a0 = 3>> - Так правильно.
Неактивен
Flash написал:
alfa10, эта строчка ничего не делает. Переменная приравнивпется сама себе.
а как тогда сделать, чтобы в текущем параграфе переменная брала то значение, которое она имела до этого параграфа? Может так тогда?
<<set $удача1 = $удача>>
Неактивен
Max написал:
что означает объект и рядом с ним []. например - $match[3]
Это означает, что объект $match является списком (одномерным массивом), а $match[3] - это элемент списка с индексом 3. Как верно подметил Flash, можно почитать в руководстве пользователя про списки.
Вообще мне кажется, в примере Oldrik'а можно вполне обойтись без списков, заменив их на простые объекты. Например, вместо $match[3] --> $сколькоЗабилГГ
Неактивен
alfa10 написал:
Flash написал:
alfa10, эта строчка ничего не делает. Переменная приравнивпется сама себе.
а как тогда сделать, чтобы в текущем параграфе переменная брала то значение, которое она имела до этого параграфа? Может так тогда?
Код:
<<set $удача1 = $удача>>
Все переменные глобальные. Т.е. если задать значение переменной на одном параграфе, на всех следующих параграфах переменная сохранит это значение. До тех пор пока ты не перезапустишь игру.
Неактивен
Вопросов у меня много, так что сорри. Я начинающий интерактивовод
Музыка работает если файл OGG. Разобрался. Спасибо за помощь. Теперь вопрос - а как сделать так, чтобы мелодии игрались по-очереди по ходу книги?
Еще вопрос. Вот фрагмент кода:
<<set $ясила = 3>> <<set $врагсила = 6>> <<set $жизнь = 10>> <<set $жизнь1 = 5>> <<random $кубик = 10>> <<if $кубик > ($врагсила-$ясила)>> <<print $я>> - <<print $жизнь>> <<print $враг>> - <<print $жизнь1-1>> <<else>> <<print $я>> - <<print $жизнь-1>> <<print $враг>> -<<print $жизнь1>> <<endif>>
Как я его вижу:
даю значение силы мне - 3
даю значение силы врагу - 6
даю значение жизни себе - 10
даю значение жизни врагу - 5
даю рендомное значение кубику от 0 (или все-таки 1) до 5
если значение кубика больше значения (сила врага - моя сила) то
выводится имя переменной $я (вводил в прошлом параграфе) - выводится значение (моя жизнь) // например, Сергей - 10
выводится имя переменной $враг (вводил в прошлом параграфе) - выводится значение (жизнь врага минус 1)// например, Сергей - 4
иначе
выводится имя переменной $я (вводил в прошлом параграфе) - выводится значение (моя жизнь минус 1)
выводится имя переменной $враг (вводил в прошлом параграфе) - выводится значение (жизнь врага)
закрытие кода
Но, почему то, у меня ничего не выводится. Пишется NaN. Где моя ошибка?
Отредактировано alfa10 (30.10.2013 22:56)
Неактивен
<<set $ясила = 3>>
<<set $врагсила = 6>>
<<set $жизнь = 10>>
<<set $жизнь1 = 5>>
<<random $кубик = 10>>
<<if $кубик gte ($врагсила-$ясила)>>
<<set $жизнь1 = $жизнь1 - 1>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>
<<else>>
<<set $жизнь = $жизнь - 1>>
<<print $я>> - <<print $жизнь>>
<<print $враг>> - <<print $жизнь1>>
<<endif>>
Так должно работать.
Ошибка в <<print $жизнь-1>>. Print служит для вывода значения объекта, а не его изменения.
Неактивен
alfa10 написал:
Теперь вопрос - а как сделать так, чтобы мелодии игрались по-очереди по ходу книги?
Если есть несколько мелодий и нужно, чтобы они игрались друг за другом независимо от параграфа, можно соединить их в один файл. Правда он будет загружаться некоторое, возможно, продолжительное время.
Неактивен
alfa10 написал:
А что означает gte ? Значение "больше"?
gte = Greater Than or Equals - больше либо равно. Лучше используй в макросах if именно такие, буквенные операторы.
alfa10 написал:
Как можно сделать так, чтобы при значении параметра $жизнь - 0 бой заканчивался?
Ещё один макрос if. Попробуй так:
<<if $жизнь lte 0>> (меньше либо равно)
<<goto 'ГеймОвер'>> (переход на другой параграф)
<<endif>>
Неактивен
Ну, вот, получается видимо так:
<<set $жизнь = 1>> <<set $жизнь1 = 1>> <<random $кубик = 10>> <<if $кубик gte 3>> <<set $жизнь1 = $жизнь1 - 1>> <<if $жизнь1 lte 0>> <<goto 'GameOver1'>> <<else>> <<print $я>> - <<print $жизнь>> <<print $враг>> - <<print $жизнь1>> <<endif>> <<else>> <<set $жизнь = $жизнь - 1>> <<if $жизнь lte 0>> <<goto 'GameOver'>> <<else>> <<print $я>> - <<print $жизнь>> <<print $враг>> - <<print $жизнь1>> <<endif>> <<endif>>
А как зациклить код? Чтобы значения уменьшались до того момента, пока переменная жизнь не примет нулевое значение?
Отредактировано alfa10 (31.10.2013 11:28)
Неактивен
alfa10 написал:
А как зациклить код? Чтобы значения уменьшались до того момента, пока переменная жизнь не примет нулевое значение?
Допустим, сражение у нас в параграфе "Битва". Начальное значение жизней нужно установить до этого параграфа:
:: Параграф_до_битвы <<set $жизнь = 7>> <<set $жизнь1 = 6>> Внезапно путь преграждает <<print $враг>>! <<print $я>> - <<print $жизнь>> <<print $враг>> - <<print $жизнь1>> [[Начать битву|Битва]] [[Убежать|Бегство]] :: Битва <<random $кубик = 10>> <<if $кубик gte 3>> <<print $я>> наносит удар! <<set $жизнь1 = $жизнь1 - 1>> <<else>> <<print $враг>> наносит удар! <<set $жизнь = $жизнь - 1>> <<endif>> <<print $я>> - <<print $жизнь>> <<print $враг>> - <<print $жизнь1>> <<if $жизнь lte 0>> <<print $я>> падает на землю без чувств... [[Это конец|GameOver]] <<elseif $жизнь1 lte 0>> <<print $враг>> падает на землю, путь свободен! [[Праздновать победу|Победа]] <<else>> [[Продолжать битву|Битва]] [[Убежать|Бегство]] <<endif>>
Лучше зацикливать так, на ссылках, чтобы у игрока создавалось ощущение, что он на что-то влияет.
Неактивен
Спасибо тебе большое! очень сильно помогаешь мне И всем вам ребята - большое спасибо
А есть ли при создании книги ограничение в количестве параграфов? А то, у меня тут глобальная книга намечается
Еще вопрос - можно ли сделать, чтобы во время боя страница автоматически обновлялась, а не клацать каждый раз на продолжить?
Отредактировано alfa10 (31.10.2013 13:23)
Неактивен
Ограничений на количество параграфов нет.
А для автообновления параграфа рекомендую использовать макрос <<repeat>> (см. мануал).
Неактивен
alfa10 написал:
Спасибо тебе большое! очень сильно помогаешь мне И всем вам ребята - большое спасибо
Пожалуйста
alfa10 написал:
Еще вопрос - можно ли сделать, чтобы во время боя страница автоматически обновлялась, а не клацать каждый раз на продолжить?
Как заметил DD, можно через макрос repeat:
:: Параграф_до_битвы ... [[Начать битву|НачалоБитвы]] (всё то же самое кроме этой строчки) :: НачалоБитвы <<repeat 'Битва' 2>> (здесь число - это время обновления в секундах) <<display 'Битва'>> (сразу показываем параграф "Битва", чтобы не ждать первый раз) :: Битва <<clrscr>> (в самом начале очищаем экран, если не очищать - будет "лог" битвы) <<random $кубик = 10>> <<if $кубик gte 3>> <<print $я>> наносит удар! <<set $жизнь1 = $жизнь1 - 1>> <<else>> <<print $враг>> наносит удар! <<set $жизнь = $жизнь - 1>> <<endif>> <<print $я>> - <<print $жизнь>> <<print $враг>> - <<print $жизнь1>> <<if $жизнь lte 0>> <<print $я>> падает на землю без чувств... <<stop 'Битва'>> (битва окончена - останавливаем авто обновление) [[Это конец|GameOver]] <<elseif $жизнь1 lte 0>> <<print $враг>> падает на землю, путь свободен! <<stop 'Битва'>> (и в этом случае тоже останавливаем) [[Праздновать победу|Победа]] <<endif>>
И да, Руководство пользователя AXMA Story Maker - очень хорошая вещь, рекомендую!
Неактивен
Господа, а есть ли возможность на этом движке запилить рогалик? Я в программирование не силен, поэтому у меня даже нет особых идей по алгоритму передвижения героя-символа по пустому полю.
Неактивен
NeoMatrix777 написал:
Господа, а есть ли возможность на этом движке запилить рогалик? Я в программирование не силен, поэтому у меня даже нет особых идей по алгоритму передвижения героя-символа по пустому полю.
Ну а что, списки и циклы есть, моноширинный шрифт есть - значит теоретически возможно Только карта будет монохромной, разве что некоторые объекты на карте будут ссылками. Ещё один нюанс: на мелких экранах мобильных устройств карта может отображаться неверно из-за переносов строк (но в меню можно попробовать изменить размер шрифта). А идея алгоритма передвижения проста: у героя есть координаты X и Y. Если герой идёт на север или юг, изменяем вертикальную координату, на запад или восток - горизонтальную. Заодно с изменением координаты проверяем границы окна и карты, наличие на пути непроходимых объектов, затем перерисовываем карту.
Неактивен
Вот ковырялся ковырялся, пытаясь сгенерировать футбольный матч и получилось так:
:: матч
<<set $ком_ГГ = ['Барса',20]>>
<<set $ком = ['Атлетико',15]>>
<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[1]) * 5>>
<<set $гол1 = $гол1 + $гол2>>
<<else>>
<<set $гол2 = $гол2 + $гол1>>
<<endif>>
''===результат матча===''
===<<print $гол1>> : <<print $гол2>>===
===<<print $ком_ГГ[0]>> : <<print $ком[0]>>===
<<if $гол1 gt $гол2>>
Победили хозяева
<<elseif $гол1 eq $гол2>>
у нас ничья
<<elseif $гол1 lt $гол2>>
Хозяева проиграли
<<endif>>
[[узнать результаты ГГ|забил гг]]
:: забил гг
<<set $ГГ = 10>>
<<random $игра_ГГ = 9>>
<<if $ГГ lte 9 and $игра_ГГ lte 7>>
<<set $голГГ = 0>>
<<elseif $ГГ gte 9 and $ГГ lte 7 and $ком_ГГ[1] eq 1>>
<<set $голГГ = 0>>
<<elseif $ГГ gte 9 and $ГГ gt 8 and $ком_ГГ[1] gt 1>>
<<set $голГГ = $гол1>>
<<endif>>
''===результат игрока===''
<<if $голГГ eq 0>>
игрок не забил
<<elseif $голГГ eq $гол1>>
игрок забил <<print $голГГ>> голов
<<endif>>
... все равно меня как-то это не устраивает... хочется, чтобы в данный на команду было и атака и защита и мораль... и чтобы эти показатели как-то влияли на матч... также и по игроку...
Неактивен
Oldrik написал:
А ещё ТриДэ, стотыщь полигонов только на мяч, фото текстуры и Лондонский Симфонический на подпевке. Начинай с малого, с чем-то большим ты перегоришь раньше времени.
все таки хочется сделать игру от первого лица и чтобы именно он влиял на игру, а не из результатов игры высчитывать сколько он забил...
А так согласен - лучше начинать с малого)))
Неактивен
подскажите, как понимать эту запись
<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[1]) * 5>>
особенно последняя строчка...
я хочу использовать силу атаки и силу защиты, так, чтобы атака слабее имела меньше вероятности пробиться через сильную защиту
пробую так, но все равно криво(((
<<set $ком_ГГ = ['Барса',90,70]>>
<<set $ком = ['Атлетико',70,60]>>
<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[2]) * 5>>
<<set $гол_ком_ГГ = $гол1 + $гол2>>
<<else>>
<<set $гол_ком_ГГ = 0>>
<<endif>>
<<random $rnd1 = 99>>
<<if $rnd1 lt 50 + ($ком[1] - $ком_ГГ[2]) * 5>>
<<set $гол_ком = $гол1 + $гол2>>
<<else>>
<<set $гол_ком = 0>>
<<endif>>
почему-то не получается ((( вообще ничего не высвечивается(((
Отредактировано Max (01.11.2013 16:03)
Неактивен
Max написал:
подскажите, как понимать эту запись
<<random $гол1 = 2>>
<<random $гол2 = 2>>
<<random $rnd = 99>>
<<if $rnd lt 50 + ($ком_ГГ[1] - $ком[1]) * 5>>
особенно последняя строчка...
Ну <<random $rnd = N>> означает случайное целое число от 0 до N включительно.
Рандом от 0 до 99 я использую, когда известна вероятность какого-то события, и надо определить, произошло ли событие:
<<random $rnd = 99>>
<<if $rnd lt M>>
# Событие произошло!
<<endif>>
где M - это вероятность события в процентах (от 0 до 100).
Теперь, допустим, если силы команд равны, то вероятность победы первой команды = 50%. Иначе разница в силе команд на 1 изменяет вероятность победы/поражения на 5%. Соответственно, если первая команда сильнее хотя бы на 10, вероятность её победы = 100%.
Попробуй просто перед матчем рассчитывать общую "силу" команды. А вот сила в данном случае уже зависит от атаки, защиты, и морали (дома играем или в гостях).
Неактивен
Morych написал:
Попробуй просто перед матчем рассчитывать общую "силу" команды. А вот сила в данном случае уже зависит от атаки, защиты, и морали (дома играем или в гостях).
тогда каждый раз выбирая команду, нужно в ручную прописывать влияние Ат, Защ, Мор на СИЛУ???
Неактивен
То, что требуется система координат - достаточно естественно. Однако каким более конкретным образом она пилиться? Я вот думал как-нибудь через массивы, но чего-то ни к чему толковому не пришел...
Неактивен
NeoMatrix777 написал:
Господа, а есть ли возможность на этом движке запилить рогалик? Я в программирование не силен, поэтому у меня даже нет особых идей по алгоритму передвижения героя-символа по пустому полю.
Подводных камней слишком много, если делать это на АСМе.
Max написал:
Morych написал:
Попробуй просто перед матчем рассчитывать общую "силу" команды. А вот сила в данном случае уже зависит от атаки, защиты, и морали (дома играем или в гостях).
тогда каждый раз выбирая команду, нужно в ручную прописывать влияние Ат, Защ, Мор на СИЛУ???
Нет, если я правильно понял вопрос.
Неактивен
Там может быть только текст. Вставляйте в параграф Start.
Неактивен
Max написал:
тогда каждый раз выбирая команду, нужно в ручную прописывать влияние Ат, Защ, Мор на СИЛУ???
Морыч категорически одобряет параметр "Мор"
Вручную не надо, формула же будет. Только нужно определиться с диапазоном изменения Атк, Защ и Мор. Например, от 1 до 10.
Тогда можно, к примеру, так:
<<if команда1_играет_дома>> <<set $K = 1>> (коэф. влияния морали) <<else>> <<set $K = 0.5>> <<endif>> <<set $Сила1 = Math.round(Math.max(1, $Атк1 - $Защ2 + $Мор1 * $К))>> (при помощи max ограничиваем силу, чтобы не получилась меньше 1, round - округление до целого) <<set $Сила2 = Math.round(Math.max(1, $Атк2 - $Защ1 + $Мор2 * (1.5 - $К)))>> (если первая команда играет у себя, то вторая в гостях, и наоборот)
Получается, Сила может принимать значения от 1 до 19, а разница сил от -18 до 18. Значит условие для определения победителя немного изменится:
<<random $rnd = 99>>
<<if $rnd lt 50 + ($Сила1 - $Сила2) * 2.6>>
Т.о. при самом лучшем раскладе шанс победы 96.8%, оставшиеся проценты - шанс критической неудачи. То же самое и с критическим успехом при наихудшем раскладе.
Неактивен
NeoMatrix777 написал:
То, что требуется система координат - достаточно естественно. Однако каким более конкретным образом она пилиться? Я вот думал как-нибудь через массивы, но чего-то ни к чему толковому не пришел...
Через массивы, всё верно, массивы строк. Например, в цикле вывести все строки массива карты до координаты Y гг. Затем выводим часть строки до координаты X, рисуем @ (гг), выводим оставшуюся часть строки, затем выводим оставшиеся строки карты.
Неактивен
Фух, загрузил свою первую интерактивную книгу в библиотеку. Правда, почему-то, при загрузке ругалось на музыкальный файл формата OGG. Пришлось музыку исключить из книги
Неактивен
Надо было и ogg и mp3 - оба файла сделать.
А так - поздравляю с успешным дебютом!
Неактивен
DoubleDragon написал:
Надо было и ogg и mp3 - оба файла сделать.
А так - поздравляю с успешным дебютом!
Спасибо! А насколько он успешный - покажет время и участие в конкурсе 31
Неактивен
Просьба помочь разобраться в ошибке кода:
<<set $жизнь = $жизнь>> <<set $жизнь1 = $жизнь1>> Мое здоровье - ''<<print $жизнь>>'' Здоровье вора - ''<<print $жизнь1>>'' Вор поворачивается ко мне. Его лицо скрывает балахон. Не говоря ни слова, гость направляется на меня... <<if $успех eq 1>> [b]----------------------------------------возврат сюда[/b] [[Ударить в лицо|БойВорНеус {$успех = 2}]] [[Ударить в живот|БойВорНеус {$успех = 3}]] [[Кинуть в вора стул|БойВорНеус {$успех = 4}]] <<endif>> <<if $успех eq 2>> <<clrscr>> <<random $кубик = 6>> <<if $кубик gte 5>> Я ударяю вора в голову. Великолепный удар! <<set $жизнь1 = $жизнь1 - 3>> Мое здоровье - ''<<print $жизнь>>'' Здоровье вора - ''<<print $жизнь1>>'' <<else>> Вор ставит блок и проводит ответный удар! <<set $жизнь = $жизнь - 1>> Мое здоровье - ''<<print $жизнь>>'' Здоровье вора - ''<<print $жизнь1>>'' <<endif>> <<if $жизнь1 lte 0>> <<goto 'ОсмотретьсяЖив'>> <<else>> <<goto 'БойВорНеус' {$успех = 1}>> <<elseif $жизнь lte 0>> <<goto 'Конец1'>> <<else>> <<goto 'БойВорНеус' {$успех = 1}>> <<endif>> <<endif>>
Почему-то у меня назад не возвращает. Как можно сделать так, чтобы если жизни остаются, параграф продолжался заново с начала?
Неактивен
alfa10 написал:
Просьба помочь разобраться в ошибке кода:
Почему-то у меня назад не возвращает. Как можно сделать так, чтобы если жизни остаются, параграф продолжался заново с начала?
Давай попробуем разобраться, но сначала небольшая работа над ошибками Читай закомментированные строки (после символа #)
<<set $жизнь = $жизнь>> <<set $жизнь1 = $жизнь1>> # Две верхние строчки не нужны Мое здоровье - ''<<print $жизнь>>'' Здоровье вора - ''<<print $жизнь1>>'' Вор поворачивается ко мне. Его лицо скрывает балахон. Не говоря ни слова, гость направляется на меня... <<if $успех eq 1>> [[Ударить в лицо|БойВорНеус {$успех = 2}]] [[Ударить в живот|БойВорНеус {$успех = 3}]] [[Кинуть в вора стул|БойВорНеус {$успех = 4}]] <<endif>> # Советую выделять внутренности блока if-endif # при помощи табуляции, код будет легче читать <<if $успех eq 2>> <<clrscr>> <<random $кубик = 6>> <<if $кубик gte 5>> Я ударяю вора в голову. Великолепный удар! <<set $жизнь1 = $жизнь1 - 3>> Мое здоровье - ''<<print $жизнь>>'' Здоровье вора - ''<<print $жизнь1>>'' <<else>> Вор ставит блок и проводит ответный удар! <<set $жизнь = $жизнь - 1>> Мое здоровье - ''<<print $жизнь>>'' Здоровье вора - ''<<print $жизнь1>>'' <<endif>> # Выше дважды написано одно и то же (про жизни гг и противника) # такого быть не должно. Лучше вынести эти две строки за endif, # вот прям сюда <<if $жизнь1 lte 0>> <<goto 'ОсмотретьсяЖив'>> <<else>> <<goto 'БойВорНеус' {$успех = 1}>> <<elseif $жизнь lte 0>> <<goto 'Конец1'>> <<else>> <<goto 'БойВорНеус' {$успех = 1}>> <<endif>> # Программа никогда не дойдёт до двух нижних goto, # поскольку при истинности первого условия выполнится первый goto, # а второй goto выполнится во всех остальных случаях. # В блоке if-endif внутри может быть сколько угодно elseif, # но всегда только один else, причём стоять он должен самым последним! <<endif>>
Неактивен
Вот есть код:
:: Пещера <<display 'Инвентарь0'>> Здоровье охотника - <<print $жизнь1>> Здоровье охотницы - <<print $жизнь2>> # Начало цикла <<if $жизнь lte 0>> <<goto 'Конец'>> <<elseif $жизнь1 lte 0>> <<display 'Пещера'>> <<elseif $жизнь2 lte 0>> <<display 'Пещера'>> <<elseif $жизнь1 + $жизнь2 lte 0>> <<goto 'пещера2'>> <<else>> ''Выберите действие против охотника:'' # Магия огня <<if $мана gte 3>> [[Огонь I (шанс 50%, урон 20, мана - 3)|Пещера1 {$действие = 2}]] <<endif>> # Магия огня [[Бросить камень (шанс 20%, урон - 30)|Пещера1 {$действие = 3}]] [[Ударить рукой (шанс 50%, урон - 10)|Пещера1 {$действие = 4}]] [[Бросить ногой (шанс 50%, урон - 10)|Пещера1 {$действие = 5}]] <<endif>> # Начало цикла
Получается так: мой герой бьется против двух врагов. Хочу, чтобы при гибели первого врага шло сражение с другим врагом. Но при гибели одного из врагов игра виснет. Полагаю, что из-за:
вот этой записи в коде
<<if $жизнь lte 0>> <<goto 'Конец'>> <<elseif $жизнь1 lte 0>> <<display 'Пещера'>> <<elseif $жизнь2 lte 0>> <<display 'Пещера'>> <<elseif $жизнь1 + $жизнь2 lte 0>> <<goto 'пещера2'>> <<else>>
Я вижу ее так: если моя жизнь меньше или равна 0, то идем в параграф "Конец". Если жизнь противника1 меньше или равна 0, то продолжаем бой. Если жизнь противника2 меньше или равно 0, то продолжаем бой. Если жизни соперников 1 и 2 вместе меньше или равны 0 (т.е. обо уничтожены), то переходим в параграф "Пещера 2"
Неактивен
Есть ли параграф "Пещера"? Если есть, то, скорее всего, в нем и содержится ошибка. А тут две ошибки:
<<if $жизнь lte 0>> <<goto 'Конец'>> <<elseif $жизнь1 lte 0>> <<display 'Пещера'>> <<elseif $жизнь2 lte 0>> <<display 'Пещера'>> <<elseif $жизнь1 + $жизнь2 lte 0>> (1) <<goto 'пещера2'>> (2) <<else>>
(2) никогда не выполнится, ибо до него тупо никогда не доберется очередь.
(1) неправильно производится проверка. Если значение одной из переменных будет отрицательным, а другой положительным, то их сумма может оказаться равной либо меньше нуля. Правильно будет:
<<if $жизнь lte 0>> <<goto 'Конец'>> <<elseif ($жизнь1 lte 0) and ($жизнь2 lte 0)>> <<goto 'пещера2'>> <<elseif $жизнь1 lte 0>> <<display 'Пещера'>> <<elseif $жизнь2 lte 0>> <<display 'Пещера'>> <<else>>
Неактивен
Не, чет не то... если прописываю так:
<<if $жизнь lte 0>> <<goto 'Конец'>> <<elseif ($жизнь1 lte 0) and ($жизнь2 lte 0)>> <<goto 'пещера2'>> <<elseif $жизнь1 lte 0>> <<display 'Пещера'>> <<elseif $жизнь2 lte 0>> <<display 'Пещера'>> <<else>>
то игра виснет... Да и получается, если убивают врага (жизнь1, например), а второй жив, то получается первый опять ходит, даже если он мертв уже
P.S. Все, разобрался в коде... Пришлось упростить боевку (хотел, чтобы по очереди атаковался сперва первый враг, затем второй). Сделал, что сам выбираю кого атаковать
Отредактировано alfa10 (08.11.2013 22:42)
Неактивен
Хочу сделать программу, где при вводе улицы и номера дома выдается наименование района. Получается, в одном параграфе нужно ввести нечто типа:
<<input '0' $адрес>>
В параграфе 0 нужно прописать некий код:
<<if $адрес eq '12марта130'>> <<set $адрес = 1>> <<elseif $адрес eq 'калинина215'>> <<set $адрес = 2>> <<endif>> <<goto '2'>>
где на выводе (параграф 2) уже есть код:
<<if $адрес eq 1>> Черемушки <<elseif $адрес eq 2>> Вокзал <<else>> Район не определен! <<endif>>
Так все работает! А как сделать, чтобы не прописывать каждый номер дома на улице, а сделать например, чтобы улица Калинина от 1 до 50 автоматически попадала под район Возкал?
Отредактировано alfa10 (13.11.2013 12:28)
Неактивен
:: vvod Введите адрес: <<input '0' $адрес>> Пример: Калинина, 155 :: 0 <<set $адрес = $адрес.replace(/ /g,"").toLowerCase()>> <<set $улица = "">> <<set $дом = "">> <<set $зап = 0>> <<set $i = -1>> <<loop $адрес.length>> <<set $i++>> <<if $адрес[$i] eq ",">> <<set $зап = 1>> <<continue>> <<endif>> <<if $зап eq 0>> <<set $улица = $улица + $адрес[$i]>> <<else>> <<set $дом = $дом + $адрес[$i]>> <<endif>> <<endloop>> <<if $улица eq "калинина" and $дом gte 1 and $дом lte 50>> Вокзал <<elseif $улица eq "калинина" and $дом gte 51 and $дом lte 200>> Черемушки <<elseif $улица eq "красныхпартизан" and $дом gte 1 and $дом lte 100>> Центральный район <<else>> Район не определен! <<endif>>
Неактивен
alfa10 написал:
Спасибо! Еще б расшифровал бы код - вообще круто было бы
Этот код разбивает введённую строку $адрес на две строки: $улица и $дом. Разделение строк происходит в цикле посимвольно: до запятой - собирается название улицы, после запятой - номер дома.
Есть другой способ сделать то же самое:
:: vvod Введите адрес: <<input '0' $адрес>> :: 0 <<set $адрес = $адрес.replace(/ /g,"").toLowerCase()>> ---- удалить все пробелы из строки $адрес, преобразовать в нижний регистр <<set $улица = "">> <<set $дом = "">> <<set $i = $адрес.indexOf(",")>> ---- индекс первой запятой в строке $адрес <<if $i gt -1>> ---- если есть запятая <<set $улица = $адрес.substr(0, $i)>> ---- название улицы - это часть строки до запятой <<set $дом = $адрес.substr($i + 1)>> ---- номер дома - часть строки после запятой <<endif>> Улица: <<print $улица>>; Дом: <<print $дом>>;
Неактивен
Поясню тогда из своего примера, чего нет в примере Морыча:
<<set $зап = 0>> ---- переменная дающая понять попалась уже запятая в цикле или нет. 0 - не попадалась, 1 - попадалась <<set $i = -1>> ---- эта переменная будет обозначать индекс символа в строке $адрес <<loop $адрес.length>> ---- объявление цикла, цикл будет выполняться столько раз, сколько символов в строке $адрес <<set $i++>> ---- увеличиваем $i, таким образом в первый раз $i будет равен 0, а индекс в строке как раз и начинается с нуля <<if $адрес[$i] eq ",">> ---- проверяем не является ли символ в строке $адрес с индексом $i запятой и если да, то <<set $зап = 1>> ---- устанавливаем значение переменной $зап = 1 <<continue>> ---- не выполняем все что ниже идет по циклу, а снова возвращаемся на его начало. Еще существует полезная штукенция как <<break>>, которая вообще полностью прекращает цикл. О ней и вообще о всем остальном можно прочитать в справке <<endif>> <<if $зап eq 0>> ---- если $зап равен 0, то <<set $улица = $улица + $адрес[$i]>> ---- прибавляем к строке $улица символ с индексом $i из строки $адрес <<else>> ---- иначе <<set $дом = $дом + $адрес[$i]>> ---- прибавляем к строке $дом символ с индексом $i из строки $адрес <<endif>> <<endloop>> ---- конец цикла
Изменение регистра нужно по причине того, что, например, строка "Каланина" не равна строке "каланина", а пробелы я удалил для удобства. Кстати, также тут
<<if $улица eq "калинина" and $дом gte 1 and $дом lte 50>> Вокзал <<elseif $улица eq "калинина" and $дом gte 51 and $дом lte 200>> Черемушки <<elseif $улица eq "красныхпартизан" and $дом gte 1 and $дом lte 100>> Центральный район <<else>> Район не определен! <<endif>>
можно увидеть что переменная $дом, где хранится номер дома в виде строки, сравнивается с числами. Так можно делать далеко не во всех языках программирования, но тут так делать можно.
Отредактировано Flash (14.11.2013 20:24)
Неактивен
Flash, ты уже достиг достаточного уровня просветления
Когда же, наконец, мы увидим твою работу в библиотеке?
Неактивен
Кстати, в примере выше есть баг: если ввести в поле ввода число и нажать enter, то произойдет вылет на стартовый параграф. Это можно вылечить, если перед
<<set $адрес = $адрес.replace(/ /g,"").toLowerCase()>>
добавить строку
<<set $адрес = $адрес + "">>
Таким приемом мы преобразуем число в строку.
Неактивен
Подскажите пожайлуста, можно ли в книгу-игру вставлять видео ролики. Без участия интернета, тоесть можно ли вставлять ролики кроме ютуба. Если ролик будет лежать в папке с игрой например. Как это сделать?
Неактивен
Нет, нельзя. Дело в том, что в этом случае размер файлов становится слишком большим для публикации в библиотеке.
Неактивен
Всем привет. Разрешите несколько вопросов от новичка (пока разбираюсь с программированием):
1. Разъясните пожалуйста на примере полезности и необходимость использования массивов.
2. Где-то в блоге (не помню где) обмолвились о недокументированных многомерных массивах, больше ни где этого не видел. Есть ли такое, можно ли это использовать, если да, то где?
3. Можно ли сохранить рассказ, т.е. нельзя ли вывести линейный рассказ, полученный во время прочтения пользователем, т.е. прочитать то, что получилось от начала до конца во время чтения?
4. Можно ли, и если да, то как протестировать выполняются ли все участки кода (т.е. есть ли теоретическая возможность того, что все параграфы будут воспроизведены или наоборот есть пути с тупиками)? Подобный тест был бы полезен в виду появления в программе динамических ссылок.
Неактивен
Отвечаю
1. Не используйте массивы, пока не почувствуете необходимость в них.
2. Такого нет и не планируется.
3. Такого пока нет.
4. Не представляю, как сделать это
Неактивен
Нет, пока так сделать нельзя. В планах.
Неактивен
Flash написал:
А почему же у меня тогда это работает?
А как? Пример в студию
Неактивен
Ого, а я не знал
Морыч, я сделал это
Неактивен
Очень может быть Flash, спасибо!
Неактивен
Помогите с кодом:
Условие: есть три навыка (Навык Тяжелого оружия ближнего боя, Легкого оружия ближнего боя и Оружия дальнего боя). Есть один дар и два таланта, которым можно придать значение навыка. Дар и талант не могут быть обозначены одним навыком, как и два таланта. Если обозначить навык как дар, то возможность выбрать как талант исчезнет. Однако если выбрать даром другой навык, то возможность опять появится. С талантами то же самое. Если выбрать один для навыка, возможность выбрать этот навык вторым талантом должна исчезнуть.
Я разобралась с даром, однако проблема с талантами. Как сделать так, чтобы выбрав один, исчезала возможность выбрать второй и дар? (если выбрать сначала дар, возможность выбрать талант все таки исчезала.... раньше)
Параграф "анкета8":
[[Тяжёлое оружие ближнего боя|анкета9 {$0001=1}]] [[Лёгкое оружие ближнего боя|анкета9 {$0001=2}]] [[Оружие дальнего боя|анкета9 {$0001=3}]]
(Не буквеннык объекты, так как нажимая на ссылки сверху, играющий лишь попадает на страницу с описанием навыка, а не выбирает его)
Параграф "анкета9":
<<if $0001 eq 1>> Описание навыка "Тяжелое оружие". <<if !$дар >>[[Выбрать как дар|анкета9{$дар = 'тяжелое оружие'}]]<<elseif $дар neq 'тяжелое оружие'>>[[Выбрать этот дар вместо прежнего|анкета9{$дар = 'тяжелое оружие'}]]<<endif>> <<if $дар neq 'тяжелое оружие' and (!$талант1 or $талант1 neq 'тяжелое оружие')>>[[Выбрать как талант|анкета9 {$талант1 eq 'тяжелое оружие'}]] <<elseif $дар neq 'тяжелое оружие' and (!$талант2 or $талант2 neq 'тяжелое оружие' and $талант1>>[[Выбрать как талант|анкета9 {$талант2 eq 'тяжелое оружие'}]] <<endif>> <<elseif $0001 eq 2>> Описание навыка "Легкое оружие". <<if !$дар>>[[Выбрать как дар|анкета9{$дар = 'легкое оружие'}]]<<elseif $дар neq 'легкое оружие'>>[[Выбрать этот дар вместо прежнего|анкета9{$дар = 'легкое оружие'}]]<<endif>> <<if $дар neq 'легкое оружие' and (!$талант1 or $талант1 neq 'легкое оружие')>>[[Выбрать как талант|анкета9 {$талант1 eq 'легкое оружие'}]] <<elseif $дар neq 'легкое оружие' and (!$талант2 or $талант2 neq 'легкое оружие' and $талант1>>[[Выбрать как талант|анкета9 {$талант2 eq 'легкое оружие'}]] <<endif>> <<elseif $0001 eq 3>> Описание навыка "Дальнее оружие". <<if !$дар>>[[Выбрать как дар|анкета9{$дар = 'дальнее оружие'}]]<<elseif $дар neq 'дальнее оружие'>>[[Выбрать этот дар вместо прежнего|анкета9{$дар = 'дальнее оружие'}]]<<endif>> <<endif>> <<if $дар neq 'дальнее оружие' and (!$талант1 or $талант1 neq 'дальнее оружие')>>[[Выбрать как талант|анкета9 {$талант1 eq 'дальнее оружие'}]] <<elseif $дар neq 'дальнее оружие' and (!$талант2 or $талант2 neq 'дальнее оружие' and $талант1>>[[Выбрать как талант|анкета9 {$талант2 eq 'дальнее оружие'}]] <<endif>> ---- [[Вернуться|анкета8]]
Без добавления условного оператора с $талант1 и $талант2, объект $дар работает как нужно, однако при нынешнем коде вообще ничего не отображается. Почему?
Неактивен
Delakha написал:
Условие: есть три навыка (Навык Тяжелого оружия ближнего боя, Легкого оружия ближнего боя и Оружия дальнего боя). Есть один дар и два таланта, которым можно придать значение навыка. Дар и талант не могут быть обозначены одним навыком, как и два таланта. Если обозначить навык как дар, то возможность выбрать как талант исчезнет. Однако если выбрать даром другой навык, то возможность опять появится. С талантами то же самое. Если выбрать один для навыка, возможность выбрать этот навык вторым талантом должна исчезнуть.
Я тут покрутил немного, и получилось вот что:
:: Start <<display 'Объекты'>> [[Навыки]] :: Объекты <<set $навык = "">> <<set $нет = "нет">> <<set $дар = $нет>> <<set $талант1 = $нет>> <<set $талант2 = $нет>> <<set $выбрано = 0>> :: Навыки <<if ($выбрано neq 1) and ($дар eq $навык)>> <<set $дар = $нет>> <<endif>> <<if ($выбрано neq 2) and ($талант1 eq $навык)>> <<set $талант1 = $нет>> <<endif>> <<if ($выбрано neq 3) and ($талант2 eq $навык)>> <<set $талант2 = $нет>> <<endif>> Дар: <<print $дар>> Талант первый: <<print $талант1>> Талант второй: <<print $талант2>> [[Тяжёлое оружие ближнего боя|ОписаниеНавыков {$навык = "тяжёлое оружие"}]] [[Лёгкое оружие ближнего боя|ОписаниеНавыков {$навык = "лёгкое оружие"}]] [[Оружие дальнего боя|ОписаниеНавыков {$навык = "дальнее оружие"}]] :: ОписаниеНавыков <<if $навык eq "тяжёлое оружие">> Описание навыка «Тяжёлое оружие». <<elseif $навык eq "лёгкое оружие">> Описание навыка «Лёгкое оружие». <<else>> Описание навыка «Дальнее оружие». <<endif>> <<if $навык neq $дар>> [[Выбрать как дар|Навыки {$дар = $навык} {$выбрано = 1}]] <<endif>> <<if ($навык neq $талант1) and ($навык neq $талант2)>> <<if ($талант1 eq $нет) or ($талант2 neq $нет)>> [[Выбрать как талант|Навыки {$талант1 = $навык} {$выбрано = 2}]] <<else>> [[Выбрать как талант|Навыки {$талант2 = $навык} {$выбрано = 3}]] <<endif>> <<endif>> [[Назад|Навыки {$навык = ""}]]
Посмотрите, правильно ли работает.
У вас, я заметил, отсутствует закрывающая скобка в таких условиях:
<<elseif $дар neq 'тяжелое оружие' and (!$талант2 or $талант2 neq 'тяжелое оружие' and $талант1>>
Неактивен
Начал изучать ASM и в третьем уроке http://hyperbook.ru/blog.php?id=13628097918637 какие-то нелады с разнообразием описаний. Если сделать все по уроку, то получается, то первое описание совсем не выводится, а остальные чередуются. В чем загвоздка? Спасибо.
Неактивен
Из учебника:
В самом начале истории мы создадим объект «$селение», в котором будем запоминать номер описания сцены «Старое селение». Первоначально значение объекта «$селение» будет равно 1.
Т.е. в параграфе Start нужно написать:
<<set $селение = 1>>
Этой командой мы явно задаём начальное значение объекта. Если этого не сделать, значение объекта будет неопределённым (undefinied).
В учебнике все начальные значения объектов задаются в специальном параграфе "Создание объектов", который вызывается во вступлении. Смотрите главу "Инициализация объектов" в четвёртой части.
Неактивен
Как из своего (скачанного) конструктора перенести игру в онлайновый? Путем копирование исходного кода (кнопой "Новая", затем "Из буфера обмена") не выходит , "ок" жмется, но увы, игра не появляется (окно, также, не закрывается).
Неактивен
Да, только так. А размер большой? Может просто тормозит и надо подождать? А вы копируете sm файл или исходник из режима редактора?
Неактивен
Собственно, дело именно в этом. Если копировать из редактора, то не выходит, а если открыть файл sm в блокноте и скопировать оттуда, то все отлично.
(В окошке онлайн конструктора так и написано: скопируйте исходный текст из файла *.sm)
Неактивен
Кстати, в грядущем обновлении я это уже поправил и можно будет вставлять и оттуда и оттуда.
Неактивен
Здравствуйте! Я здесь человек новый, уж простите. если что не так. А вопрос у меня вот какой: можно ли сделать так, чтобы числовые переменные из одного параграфа прочитывались при нажатии на ссылку в другом параграфе.
Допустим, мы создаем примитивный симулятор жизни, где у героя есть 3 параметра: возраст. сила и интеллект. И вот наш герой размышляет над выбором профессии: кузнец или библиотекарь. Если станет кузнецом - то будет прокачивать силу, а если библиотекарем - то интеллект. Параграф Установка объектов выглядит так:
спойлер…
Вступление выглядит вот так:
спойлер…
А Основной параграф - так:
спойлер…
Как ни странно, если нажимать ссылку "дальше", то увеличивается лишь возраст героя, а его сила и интеллект не обсчитываются!. Можно, конечно, прописать кусок:
<<If $кузнец eq true>>
<<set $сила = $сила + 1>>
<<elseIf $библиотекарь eq true>>
<<set $интеллект = $интеллект + 1>>
<<endIf>>
...прямо в основном параграфе, но для меня это не вариант (ведь таких кусков будет очень много). Как же быть? Как заставить их работать? Пробовал и так и эдак, но ничего не выходит, так что я уже в полной прострации... Помогите!
Файл с игрой здесь:
http://yadi.sk/d/W-aW_tn0Hnchj
Отредактировано Atoll2 (12.02.2014 23:24)
Неактивен
Привет! Просить прощения не нужно, это специальная тема для вопросов и ответов Программа работает совсем не странно, а вполне себе логично. Параграф «Установка объектов» выполнился один раз и всё. Чтобы какой-то код выполнился ещё раз, соответствующий параграф нужно вызвать (макросом <<display>>, <<goto>> или перейти в параграф по ссылке). Предлагаю перенести проверку профессии в новый параграф «Увеличение возраста», и написать там так:
<<set $время = $время + 1>> <<If $кузнец>> <<set $сила = $сила + 1>> <<elseIf $библиотекарь>> <<set $интеллект = $интеллект + 1>> <<endIf>> <<goto 'Основной параграф'>>
Конечно же из параграфа «Установки объектов» этот кусок кода надо убрать, т.к. ни одна из проверок там не работает (и $кузнец и $библиотекарь = false).
А в «Основном параграфе» внизу напишем так:
[[Повзрослеть|Увеличение возраста]]
П.С. И ещё один момент, относящийся к стилю программирования. Если мы проверяем логическую переменную на истинность, то пишем просто <<if $объект>>, если на ложность, то <<if not $объект>> или <<if !$объект>>.
Неактивен
П.С. И ещё один момент, относящийся к стилю программирования. Если мы проверяем логическую переменную на истинность, то пишем просто <<if $объект>>, если на ложность, то <<if not $объект>> или <<if !$объект>>.
Кстати есть один подводный камень при такой проверке. <<if $объект>> не будет истиной, если $объект = "" (пустая строка) или $объект = 0. Такое поведение ASM унаследовал от Javascript.
P.S. Наверное ещё стоит написать, что соответственно <<if $объект>> будет истиной, если $объект имеет любое значение, кроме 0, "" и false
Неактивен
Нене, я про проверку значения объектов, которые используются для хранения исключительно true либо false. В остальных случаях лучше использовать eq, чтобы код легче читался.
Неактивен
Morych написал:
Предлагаю перенести проверку профессии в новый параграф «Увеличение возраста»
Попробовал - РАБОТАЕТ!!! Большое человеческое спасибо! Я так и знал, что есть какое-то очень простое решение, но вот никак не мог до него додуматься...
Неактивен
Morych написал:
Пожалуйста! Обращайтесь, если что
Ну коли так, то у меня ещё вопрос
Допустим, тот же самый герой зарабатывает по 100 монет в год и тут же кладёт их в банк под 5% годовых. И всё бы ничего, но print выдает точное значение переменной, в результате получается вот какая фигня:
Профессия: кузнец
Возраст: 25
Сила: 30
Интеллект: 20
Деньги: 1257.7892535548833 монет
Выглядит ужасно. Можно ли сделать так, чтобы print выдавал только целую часть (1257 монет) и отсекал то, что после запятой?
Отредактировано Atoll2 (14.02.2014 21:18)
Неактивен
Очень просто, даже я смогу ответить
Используйте Math.floor(x), где x - число, от которого требуется отбросить дробную часть.
См. статью в блоге: http://hyperbook.ru/blog.php?id=13633403734658
Неактивен
DoubleDragon написал:
Очень просто, даже я смогу ответить
Используйте Math.floor(x), где x - число, от которого требуется отбросить дробную часть.
См. статью в блоге: http://hyperbook.ru/blog.php?id=13633403734658
Спасибо.
Неактивен
Нет, это запрещено.
Неактивен
Что-то у меня не получается с динамическими ссылками сделать в облачном конструкторе
#инт
===[[Главная|ДИНАМИЧЕСКАЯ ССЫЛКА]]||[[Инвентарь|инвентарь]]===
#1
<<display 'инт'>>
Текст-текст-текст
#2
<<display 'инт'>>
Текст-текст-текст
=====================================
Что я должна написать в ссылке "Главная", чтобы он мне из инвентаря каждый раз возвращался на параграф, где я нахожусь? Что-то я туплю...
Неактивен
Вета, прошу прощения за поздний ответ, праздники, сама понимаешь. Собственно вот:
:: Start [[Старт|параграф 1]] :: параграф 1 <<display 'инт'>> Текст, текст, текст... [[Идти в 2|параграф 2]] :: параграф 2 <<display 'инт'>> Текст 2, текст 2, текст 2... [[Идти в 1|параграф 1]] :: инвентарь <<display 'инт'>> Список предметов... :: инт <<if $$title neq "инвентарь">> ===Главная || [[Инвентарь|инвентарь {$passage = $$title}]]=== <<else>> ===[[Главная|$passage]] || Инвентарь=== <<endif>>
Неактивен
Да ничего, нормально. ))) А что означает $passage = $$title?
Неактивен
И еще, как мне в инвентаре сделать проверку такого вида:
предмет - НИТКИ (ссылка)
Щелкаем по ниткам.
Если локация=1, то переходим на эту локацию и там появляется ссылка "Использовать нитки"
иначе
появляется надпись в инвентаре: "Нитки тут не применимы".
Неактивен
Вета написал:
Да ничего, нормально. ))) А что означает $passage = $$title?
$$title - это название текущего параграфа.
$$from - это название предыдущего параграфа.
См. руководство пользователя, раздел "Системные объекты": http://sm.axmasoft.com/ru/help.html
Неактивен
Вета написал:
И еще, как мне в инвентаре сделать проверку такого вида:
предмет - НИТКИ (ссылка)
Щелкаем по ниткам.
Если локация=1, то переходим на эту локацию и там появляется ссылка "Использовать нитки"
иначе
появляется надпись в инвентаре: "Нитки тут не применимы".
Вот попробуй так:
:: Start <<fade = 500>> <<set $item = "">> <<set $nitki = 1>> [[Старт|параграф 1]] :: параграф 1 <<display 'инт'>> Тут нет ничего интересного. Только дверь в другую комнату. [[Идти в другую комнату|параграф 2]] <<display 'предметы'>> :: параграф 2 <<display 'инт'>> Здесь стоит швейная машинка.<<if $nitki eq 2>> Вы заправили в машинку свои нитки. Осталось найти занавеску и можно сшить плащ.<<endif>> [[Вернуться в пустую комнату|параграф 1]] <<display 'предметы'>> :: инт <<if $$title neq "инвентарь">> ===Главная || [[Инвентарь|инвентарь {$passage = $$title}]]=== <<else>> ===[[Главная|$passage]] || Инвентарь=== <<endif>> :: инвентарь <<display 'инт'>> Содержимое карманов: <<if $nitki eq 1>> * [[Нитки|$passage {$item = "нитки"}]] <<endif>> <<if (not $use) and ($item neq "")>> Вы не представляете, как здесь можно использовать <<print $item>>. <<endif>> <<set $item = "">> :: предметы <<set $use = false>> <<if $item eq "нитки">> <<if $passage eq "параграф 2">> [[Заправить нитки в машинку|$passage {$nitki = 2}]] <<set $use = true>> <<endif>> <<endif>> <<if (not $use) and ($item neq "")>> <<goto 'инвентарь'>> <<else>> <<set $item = "">> <<endif>>
Неактивен
Здравствуйте, пишу RPG-кинигу на АХМА, возникла небольшая проблемка. Попробую описать как можно подробнее.
1. Поскольку игра RPG, мне нужно сделать так, чтобы в случае, если здоровье героя ($xp_vip) станет равно нулю, игра перекинула бы его на экран смерти.
2. Делаю это методом задания условия в начале параграфа
<<if $xp_vip eq 0>> <<goto 'Смерть хр'>> <<endif>>
Вроде все должно работать, НО. На деле меня отправляет на параграф смерти, при этом под ним отображается текст следующего действия предыдушего параграфа (подробнее на скринах).
Посоветуйте что-нибудь.
P.s. Параграфы сделаны как в обучении, т.е по схеме:
Параграф1
<<if !$параграф_1>> Какой-то текст [[Действие1|Параграф1 {$параграф_1=1}]] [[Действие2|Параграф1 {$параграф_1=2}]] <<elseif !$параграф_1 eq 1>> Какой-то текст [[Действие1|Параграф1 {$параграф_1=3}]] [[Действие2|Параграф1 {$параграф_1=4}]] ... <<endif>>
Скрины (большой размер):
спойлер…
Зараниее спасибо!
Неактивен
Приветствую! Добро пожаловать в клуб "тех, кто пишет RPG на AXMA"!
Сразу по приведённому кусочку кода:
<<if !$параграф_1>> ---- здесь, чтобы было понятнее, можно заменить на <<if $параграф_1 eq 0>> при условии, что где-то перед этим задано <<set $параграф_1 = 0>>
Какой-то текст
[[Действие1|Параграф1 {$параграф_1=1}]]
[[Действие2|Параграф1 {$параграф_1=2}]]
<<elseif !$параграф_1 eq 1>> ---- а вот тут ошибка, надо убрать восклицательный знак, оставить <<elseif $параграф_1 eq 1>> (! - это логическое отрицание, "не")
Какой-то текст
[[Действие1|Параграф1 {$параграф_1=3}]]
[[Действие2|Параграф1 {$параграф_1=4}]]
...
<<endif>>
А этот код
<<if $xp_vip eq 0>>
<<goto 'Смерть хр'>>
<<endif>>
попробуйте просто переместить в самый низ параграфа.
Неактивен
Morych написал:
А этот код
<<if $xp_vip eq 0>>
<<goto 'Смерть хр'>>
<<endif>>
попробуйте просто переместить в самый низ параграфа.
Да, это сработало Но теперь проблема другая: Тот экран, где у читателя отнимается последнее очко здоровья, не отображается. Выглядит не очень красиво, читал-читал человек, вдруг ни с того ни с сего бац и умер.
Хотелось бы, чтобы код работал так, чтобы последний параграф (где отображаются сведения о том, при каких обстоятельствах у игрока было отнято последнее очко здоровья) отображался, а уже потом появлялось сообщение о смерти.
Можно было бы как-то вывести этот текст на экран смерти тегом <<display>> или как-то так, но я же не знаю когда именно персонаж игрока умрет.
Получается, самое простое решение, прописывать к каждому условию <<if .... and $xp_vip neq 0>>?
Спасибо за исправления У меня все переменные в начале параграфа задаются, поэтому первый параграф с условием !$var, потому что иначе (если я задам <<set $var=0>>), при обновлении страницы (которое происходит при переходе по ссылке действия), мое значение будет сбрасываться на 0, если я правильно все понимаю. Либо писать: <<if !$var>><<set $var=0>><<endif>>, что, на мой взгляд, просто лишняя строчка кода.
Неактивен
Да, если ни с того ни с сего бац и умер, это, конечно, не очень хорошо.
Т.е. больничную палату и надпись "Здоровье -1" надо показать. Я так понимаю, там в зависимости от какого-то действия здоровье уменьшается (не согласился на клизму?)
Значит в конце этого параграфа ставим условие "если здоровье больше нуля", то показываем дальнейшие возможные действия, а иначе ставим единственную ссылку вроде "Далее" или "Почувствовать себя хуже". И эта ссылка, конечно же, ведёт на параграф "Смерть хр".
Таким образом можно сделать такую проверку на смерть только там, где уменьшается здоровье, и смерть теоретически возможна.
Неактивен
Вопрос: можно ли в профессиональной версии АХМА пользоваться скриптами jQuery для оформления абзацев?
Вот такими, например.
Неактивен
По идее, можно. Но придётся вручную править html файл (включать туда ссылки на js-скрипты). Автоматическое внесение изменение в html пока не предусмотрено, поэтому в библиотеке такой модифицированный файл разместить не удастся.
Неактивен
Подскажите, пжл., а что значит в профессиональной версии пункт: Лицензия на редактирование сгенерированного HTML файла. Т.е. я смогу редактировать сгенерированные файлы html?
Неактивен
Alex842 написал:
Подскажите, пжл., а что значит в профессиональной версии пункт: Лицензия на редактирование сгенерированного HTML файла. Т.е. я смогу редактировать сгенерированные файлы html?
Да, именно так. В обычной версии это запрещено.
Неактивен
Alex842 написал:
А как это сделать? Просто я решил поддержать Вашу разработку и приобрел про-версию. Но как в ней редактировать хтмл-файл я не понимаю.
Редактировать непосредственно из программы можно только параграф стилей StoryStyle. Готовый HTML придётся редактировать в любом стороннем текстовом редакторе, поддерживающем кодировку UTF-8.
Неактивен
DoubleDragon написал:
Alex842 написал:
А как это сделать? Просто я решил поддержать Вашу разработку и приобрел про-версию. Но как в ней редактировать хтмл-файл я не понимаю.
Редактировать непосредственно из программы можно только параграф стилей StoryStyle. Готовый HTML придётся редактировать в любом стороннем текстовом редакторе, поддерживающем кодировку UTF-8.
Понятно. Спасибо!
Неактивен
Уважаемые знатоки, вопрос от нубья. Вот я в AXMA Story Maker делаю креатив по типу интерактивного рассказа с "ветвящимся" по переходам сюжетом. При выборе одного из вариантов перехода (к примеру, [[+Действие 1|Вариант 1]], [[+Действие 2|Вариант 2]], и [[+Действие 3|Вариант 3]]) части рассказа выстраиваются единым текстом, одна за другой - так, как мне хотелось бы для удобочитаемости. Но при этом при выборе Действие 1 никуда не исчезают Действие 2 и Действие 3 соответственно. А возможно ли сделать так, чтобы при выборе одного варианта перехода другие исчезали либо становились "неактивными", и воспользоваться ими можно было бы только при повторном запуске рассказа (т.е. чтобы рассказ был "необратим", но при этом выбираемые части выстраивались друг за другом в единый текст, а не сменяли одна другую)?
В случае если выше это уже рассматривалось - прощения прошу ).
Неактивен
Мартын Вачикпян написал:
Уважаемые знатоки, вопрос от нубья. Вот я в AXMA Story Maker делаю креатив по типу интерактивного рассказа с "ветвящимся" по переходам сюжетом. При выборе одного из вариантов перехода (к примеру, [[+Действие 1|Вариант 1]], [[+Действие 2|Вариант 2]], и [[+Действие 3|Вариант 3]]) части рассказа выстраиваются единым текстом, одна за другой - так, как мне хотелось бы для удобочитаемости. Но при этом при выборе Действие 1 никуда не исчезают Действие 2 и Действие 3 соответственно. А возможно ли сделать так, чтобы при выборе одного варианта перехода другие исчезали либо становились "неактивными", и воспользоваться ими можно было бы только при повторном запуске рассказа (т.е. чтобы рассказ был "необратим", но при этом выбираемые части выстраивались друг за другом в единый текст, а не сменяли одна другую)?
В случае если выше это уже рассматривалось - прощения прошу ).
Прошу прощения за поздний ответ, я тут был довольно далеко от компа. Такой ундумоподобный стиль как бы противоречит идеологии АСМа, при которой текст предыдущего параграфа как раз должен стираться. Но с добавляющими ссылками можно сделать, например, так:
:: StoryAuthor Morych :: StoryTitle Сплошной текст :: StorySubtitle Заготовка интерактивной истории. :: Start [[Начало|начало]] :: начало <<set $selected_1 = false>> <<set $selected_2 = false>> <<set $selected_3 = false>> Начало истории. [[+Действие 1|развилка1 {$action = 1}]] [[+Действие 2|развилка1 {$action = 2}]] [[+Действие 3|развилка1 {$action = 3}]] :: развилка1 <<if not $selected_1>> <<if $action eq 1>> Первый вариант развития событий. [[+Действие 1|развилка2 {$action = 1}]] [[+Действие 2|развилка2 {$action = 2}]] <<elseif $action eq 2>> Второй вариант событий. [[+Действие 1|развилка2 {$action = 3}]] [[+Действие 2|развилка2 {$action = 4}]] <<else>> Ну и третий вариант. [[+Действие 1|развилка2 {$action = 5}]] <<endif>> <<set $selected_1 = true>> <<endif>> :: развилка2 <<if not $selected_2>> <<if $action eq 1>> Продолжение первого пути. [[+Действие 1|финал {$action = 3}]] <<elseif $action eq 2>> Второе продолжение первого пути. [[+Действие 1|финал {$action = 2}]] [[+Действие 2|финал {$action = 5}]] <<elseif $action eq 3>> Первый вариант продолжения второго пути. [[+Действие 1|финал {$action = 1}]] [[+Действие 2|финал {$action = 2}]] <<elseif $action eq 4>> Второй вариант продолжения второго же пути. [[+Действие 1|финал {$action = 4}]] <<else>> Продолжение третьего пути. [[+Действие 1|финал {$action = 5}]] [[+Действие 2|финал {$action = 3}]] <<endif>> <<set $selected_2 = true>> <<endif>> :: финал <<if not $selected_3>> <<if $action eq 1>> Первый финал. <<elseif $action eq 2>> Второй финал. <<elseif $action eq 3>> Третий финал. <<elseif $action eq 4>> Четвёртый финал. <<else>> Пятый финал. <<endif>> <<set $selected_3 = true>> [[Начать заново|начало]] <<endif>>
Это первое, что пришло в голову. Подумаю ещё.
Неактивен
Доброго времени суток. Я только-только начал знакомство с программой и уже возник такой вопрос. По ходу сюжета мне нужно что бы выйдя из комнаты (которая является постоянной и гг. будет в неё возвращаться) к примеру, в коридор гг. попадал в обязательное ответвление, для знакомства с персонажем которого он если бы я не направил его так он мог бы и пропустить и по возвращении с этого побочного «знакомства» он больше туда из комнаты не мог вернуться (тесть ссылка на эту часть исчезла и была заменена обычным выходом в коридор)
Обычная Комната – (параграф с сюжетным коридором) –обычный коридор –обычная комната (сюжетный коридор мы больше не видим)
Неактивен
Василий Новойдарский написал:
Доброго времени суток. Я только-только начал знакомство с программой и уже возник такой вопрос. По ходу сюжета мне нужно что бы выйдя из комнаты (которая является постоянной и гг. будет в неё возвращаться) к примеру, в коридор гг. попадал в обязательное ответвление, для знакомства с персонажем которого он если бы я не направил его так он мог бы и пропустить и по возвращении с этого побочного «знакомства» он больше туда из комнаты не мог вернуться (тесть ссылка на эту часть исчезла и была заменена обычным выходом в коридор)
Обычная Комната – (параграф с сюжетным коридором) –обычный коридор –обычная комната (сюжетный коридор мы больше не видим)
Привет! Если я правильно понял, то можно так:
:: Start <<set $коридор = 0>> [[Начать игру|Комната]] :: Комната Описание комнаты. <<if $коридор eq 0>> [[Выйти из комнаты|СюжетныйКоридор]] <<else>> [[Выйти из комнаты|Коридор]] <<endif>> :: СюжетныйКоридор Описание знакомства. <<set $коридор = 2>> [[Вернуться в комнату|Комната]] :: Коридор Описание обычного коридора. <<set $коридор = 1>> [[Вернуться в комнату|Комната]]
Неактивен
Morych написал:
Привет! Если я правильно понял, то можно так:
Спасибо большое помогло.
Неактивен
Я сразу хочу извиняться, понимаю, что справку легче прочесть и прочее, но я там, что-то туго информацию воспринимаю. Мне всегда было проще если мне что-то объясняли.
В общем, с
Первое это ввести скажем так «Усталость» персонажа, ну к примеру, что бы за сутки он мог совершить ограниченное количество действий (нарубить дров, натаскать воды, потренироваться) и что бы количество очков действий со временем росло (то есть что бы характеристики в совокупности своей влияли на эту "усталость" ну или, что бы не усложнять жизнь зависела она от характеристики "выносливость")
Второе это ввести проверку на объекты которые на нем (например, одел он броню, взял меч - может сходить в пещеру, которая без наличия эквпипа просто была бы не доступна, но с другой стороны в броне и при оружии его не пустят к старейшине, то есть локация "старейшина" не доступна) и в то же время в броне он выглядит внушительно, то есть у некоторых НПС появляются новые ветки диалогов.
Третье наложить на это все еще и проверку характеристик (то есть броню он не может носить, пока у него нет определенного значения силы, а что бы её повысить нужно к примеру, поколоть дрова)
И последние отношения с НПС (то есть понравилась к примеру, нашему гг. Василиса и пошел он для неё подвиги совершать, подарки дарить, улучшая тем самым её отношение к себе, а на определенном моменте открывается спец. квест от неё, по выполнении которого герой получает возможность дальнейшего развития отношений то есть появляются новые ветки диалога)
И возник новый вопрос, можно ли как то числовое значение навыка прикрыть словом? ( к примеру Сила =1, а на параграфе где стоят характеристики навыки отображается Сила - "Хилый")
И еще парочка вопросов, в которых за ночь так и не смог разобраться:
Первый я создал отдельный параграф с описанием характеристик, персонажей, подсказками, доступный из любой локации но вот как сделать обратный переход не пойму.
Второй как сделать смену дня и ночи, что бы было разделение на утро, день, вечер и ночь (хочу завязать появление некоторых квестов на определенное время суток) ну и соответственно как сделать глобальный перезапуск тобишь гг лег спать, очки действий обновились (возможно произошли какие то события пока он спал)
Понимаю, что прошу многовато, до чего-то может и сам дойду, но пока не получается. Захотелось сделать что-то в стиле олдскульных РПГ, только в текстовом варианте, и в древнерусской стилистике.
Скажу сразу боевку пока даже и не планирую, скорее это будет что то типа квеста.
Отредактировано Василий Новойдарский (25.07.2014 07:01)
Неактивен
Вопросов много, будем разбираться по порядку.
Василий Новойдарский написал:
можно ли как то числовое значение навыка прикрыть словом? ( к примеру Сила =1, а на параграфе где стоят характеристики навыки отображается Сила - "Хилый")
Самый очевидный вариант — выводить нужное слово через блок условий.
<<random $sila = 5>> (случайное значение силы от 0 до 5)
В параграфе характеристик:
Сила: <<if $sila eq 0>>вялый<<elseif $sila eq 1>>хилый<<elseif $sila eq 2>>слабый<<elseif $sila eq 3>>не такой уж и слабый<<elseif $sila eq 4>>сильный<<else>>наисильнейший<<endif>>
Более прикольный вариант — сделать через массив:
<<set $silaText = ["вялый", "хилый", "слабый", "не такой уж и слабый", "сильный", "наисильнейший"]>> (этот массив объявить в самом начале игры)
В параграфе характеристик:
Сила: <<print $silaText[$sila]>>
Но здесь уже надо следить, чтобы значение переменной $sila не ушло за пределы диапазона 0...5 (тогда как в варианте с условиями при запредельной силе всё равно будет выводиться "наисильнейший").
Неактивен
Василий Новойдарский написал:
«Усталость» персонажа, ну к примеру, что бы за сутки он мог совершить ограниченное количество действий (нарубить дров, натаскать воды, потренироваться) и что бы количество очков действий со временем росло (то есть что бы характеристики в совокупности своей влияли на эту "усталость" ну или, что бы не усложнять жизнь зависела она от характеристики "выносливость")
В параграфе, который запускается каждый раз после сна:
<<set $ustal = $sila * 3 + $vynos * 5>> (определяем "усталость" — она зависит от силы и в большей степени от выносливости)
В параграфе, где возможны тренировки:
<<if $ustal gte 5>>
[[Натаскать воды|ТаскатьВоду]]
<<endif>>
<<if $ustal gte 10>>
[[Наколоть дров|КолотьДрова]]
<<endif>>
<<if $ustal gte 15>>
[[Потренироваться|Тренироваться]]
<<endif>>
В каждом из параграфов-тренировок уменьшаем "усталость", например, для дров:
Схватил тут наш <<print $name>> топор, да как принялся им помахивать, только щепки от дров летят во все стороны. Притомился малость, зато все дрова переколол да в поленницу их уложил.
<<set $ustal = $ustal - 10>> (уменьшаем "усталость")
<<set $sila = $sila + 1>> (но, допустим, это занятие прибавило силы)
Если надо, можно ввести ещё переменную-признак для каждой тренировки, чтобы нельзя было колоть дрова несколько раз в день:
<<if $ustal gte 10 and not $drova>>
[[Наколоть дров|КолотьДрова]]
<<endif>>
После сна ставим <<set $drova = false>> а после рубки дров <<set $drova = true>>
Неактивен
Morych написал:
<<random $sila = 5>> (случайное значение силы от 0 до 5)
В параграфе характеристик:
Сила: <<if $sila eq 0>>вялый<<elseif $sila eq 1>>хилый<<elseif $sila eq 2>>слабый<<elseif $sila eq 3>>не такой уж и слабый<<elseif $sila eq 4>>сильный<<else>>наисильнейший<<endif>>
Сразу такой вопрос, а к примеру можно сделать диапазон значений (ну что бы к примеру Вялый был от 0 до 10)
Неактивен
Василий Новойдарский написал:
я создал отдельный параграф с описанием характеристик, персонажей, подсказками, доступный из любой локации но вот как сделать обратный переход
Можно использовать стандартный макрос <<return 'Закрыть подсказку'>> (выводит ссылку, которая возвращает на предыдущий параграф)
Василий Новойдарский написал:
как сделать смену дня и ночи, что бы было разделение на утро, день, вечер и ночь (хочу завязать появление некоторых квестов на определенное время суток) ну и соответственно как сделать глобальный перезапуск тобишь гг лег спать, очки действий обновились (возможно произошли какие то события пока он спал)
Нужно ввести переменную "время", которая будет принимать значения от 0 до 23:
<<set $time = 7>> (игра начинается с 7 утра)
И ещё нам понадобятся:
<<set $timeAdd = 0>> (переменная для увеличения времени)
<<set $day = 0>> (переменная для подсчёта прошедших игровых дней, если надо)
Теперь заводим отдельный параграф для увеличения времени:
:: ПрошлоВремя
<<set $time = $time + $timeAdd>>
<<set $timeAdd = 0>>
<<if $time gt 23>>
<<set $time = $time - 24>>
<<set $day = $day + 1>>
<<endif>>
При каждом продолжительном действии надо вызывать этот параграф, предварительно задав значение переменной $timeAdd. Например, при рубке дров:
...все дрова переколол да в поленницу их уложил.
<<set $timeAdd = 2>>
<<display 'ПрошлоВремя'>> (незаметно прошло 2 часа)
Действия зависящие от времени суток:
<<if $time lt 5 or $time gt 21>>
[[Посетить сеновал|Сеновал]] (на сеновал можно отправиться только в тёмное время суток)
<<endif>>
Вот в то же самое тёмное время суток можно отправиться спать. Везде, где герой может прилечь, поставь такую же ссылку, зависящую от времени, которая отправляет на параграф "Сон".
:: Сон
<<random $timeAdd = 3>>
<<set $timeAdd = $timeAdd + 5>>
<<set $ustal = $sila * 3 + $vynos * 5 + $timeAdd * 2>> (чем больше поспал, тем больше очков действия)
<<display 'ПрошлоВремя'>> (герой поспал от 5 до 8 часов)
<<random $rnd = 99>>
<<if $rnd lt 35>>
За это время случилось событие, которое может случиться с вероятностью 35%.
<<endif>>
<<return 'Проснуться'>> (возвращаемся на предыдущий параграф, где и засыпали)
Неактивен
Василий Новойдарский написал:
можно сделать диапазон значений (ну что бы к примеру Вялый был от 0 до 10)
Вот знал, что сразу надо про диапазоны написать
Сила: <<if $sila lte 10>>вялый<<elseif $sila lte 20>>хилый<<elseif $sila lte 30>>слабый<<elseif $sila lte 40>>не такой уж и слабый<<elseif $sila lte 50>>сильный<<else>>наисильнейший<<endif>>
lte — меньше либо равно
Неактивен
Уххх спасибо огромное сильно выручили. Я за эти 40 минут продвинулся дальше, чем за всю ночь (а ведь залип даже и не заметил как утро настало, благо отпуск)
Неактивен
Доброго времени суток. Такой вопрос, по поводу параграфа характеристик с которого нужно вернуться на предыдущую локацию. Если я для каждого персонажа сделал отдельный параграф с описанием, то по возвращении на параграф "Характеристики" ссылка типа <<return 'Назад'>> перестает возвращать в игру.
Неактивен
Вопрос по макросу "goto".
В описании сказано: "Этот макрос совершает мгновенный переход на указанный параграф, прерывая выполнение текущего параграфа"
Пример:
Параграф_0
<<if $условие eq 10>>
<<goto 'Параграф_1'>>
<<endif>>
Какой-то текст
Если $условие равно десяти происходит переход на "Параграф_1" и отображается текст как из "Параграфа_1", так и из "Параграфа_0". Так и должно быть? Я понимал, что исходя из "прерывая выполнение текущего параграфа" текст из "Параграфа_0" не должен отображаться.
Неактивен
Вроде не нашла тут подобный вопрос.
Столкнулась с проблемой в циклах.
У меня есть некий массив, список одежды в гардеробе. Он не постоянный, меняется при получении новой вещи или выбрасывания старой.
При заходе в шкаф хочу сделать возможность одеть эту вещь.
Следующий код по логике выглядит рабочим
$одежда[0] - то, что прямо сейчас надето.
<<set $i=0>> <<if $гардероб.length > 0>> <<loop $гардероб.length>> <<set $вещь = $гардероб[$i]>> <<if $вещь != $одежда[0] >> [[-надеть|шкаф {$одежда[0] = $вещь}]] вещь = <<print $вещь>>, i = <<print $i>>, гардероб = <<print $гардероб[$i]>> <<endif>> <<set $i++>> <<endloop>> <<endif>>
Но в реальности оказывается, что {$одежда[0] = $вещь} в ссылке в любом случае получается равной последнему элементу списка, хотя выводимые значения под ссылкой показаны верны.
Получается, что при создании ссылок с изменением величин на используется последнее значение этой величины.
Или это я тормоз и что-то не то делаю и не так понимаю, или это и вправду не очень удобный косяк
Неактивен
Aruny написал:
Вроде не нашла тут подобный вопрос.
Столкнулась с проблемой в циклах.
У меня есть некий массив, список одежды в гардеробе. Он не постоянный, меняется при получении новой вещи или выбрасывания старой.
При заходе в шкаф хочу сделать возможность одеть эту вещь.
Следующий код по логике выглядит рабочим
$одежда[0] - то, что прямо сейчас надето.Код:
<<set $i=0>> <<if $гардероб.length > 0>> <<loop $гардероб.length>> <<set $вещь = $гардероб[$i]>> <<if $вещь != $одежда[0] >> [[-надеть|шкаф {$одежда[0] = $вещь}]] вещь = <<print $вещь>>, i = <<print $i>>, гардероб = <<print $гардероб[$i]>> <<endif>> <<set $i++>> <<endloop>> <<endif>>Но в реальности оказывается, что {$одежда[0] = $вещь} в ссылке в любом случае получается равной последнему элементу списка, хотя выводимые значения под ссылкой показаны верны.
Получается, что при создании ссылок с изменением величин на используется последнее значение этой величины.
Или это я тормоз и что-то не то делаю и не так понимаю, или это и вправду не очень удобный косяк
Вы всё понимаете абсолютно правильно, но в то же время это и не косяк. Во многих случаях нужно, чтобы в качестве параметра в ссылке передавалось именно текущее значение переменной. Текущее на момент нажатия ссылки игроком, а не на момент вывода ссылки на экран. Я тоже сразу же столкнулся с этой особенностью, когда делал свой инвентарь. Я решаю это следующим образом:
- добавляем в игру много однотипных параграфов вида:
:: вещь_0 [[-надеть|шкаф {$индекс = 0}]] :: вещь_1 [[-надеть|шкаф {$индекс = 1}]] :: вещь_255 [[-надеть|шкаф {$индекс = 255}]]
- в цикле используем дисплей, чтобы показать параграф с нужной ссылкой
<<set $i=0>> # <<if $гардероб.length > 0>> -- эта проверка не обязательна <<loop $гардероб.length>> <<set $вещь = $гардероб[$i]>> <<if $вещь neq $одежда[0]>> <<set $ссылка = "вещь_" + $i>> <<display $ссылка>> вещь = <<print $вещь>>, i = <<print $i>>, гардероб = <<print $гардероб[$i]>> <<endif>> <<set $i++>> <<endloop>>
Теперь все ссылки передают разные значения параметра, и в параграфе "шкаф" надеваем вещь $гардероб[$индекс]. Число мини-параграфов со ссылками равно максимальному теоретическому числу элементов массива $гардероб. Это число вам, скорее всего, будет известно — количество всех предметов одежды в игре.
Неактивен
Да я так же вышла из положения - при выводе информации о вещи выставляю типа "если зашли из шкафа, то выводим возможность надеть", "если зашли из магазина, то выводим информацию о возможности купить".
Просто так получается множество однотипных лишних строк, которые можно было бы уместить в одну. Двадцать вещей - двадцать строк вида [[надеть|шкаф {$одежда = ...}]] и ещё двадцать на покупку. И ещё двадцать на выброс...
Никакой оптимизации кода и уважения к ресурсам
Неактивен
Aruny написал:
Да я так же вышла из положения - при выводе информации о вещи выставляю типа "если зашли из шкафа, то выводим возможность надеть", "если зашли из магазина, то выводим информацию о возможности купить".
Просто так получается множество однотипных лишних строк, которые можно было бы уместить в одну. Двадцать вещей - двадцать строк вида [[надеть|шкаф {$одежда = ...}]] и ещё двадцать на покупку. И ещё двадцать на выброс...
Никакой оптимизации кода и уважения к ресурсам
А попробуйте использовать ссылки вида: [[$текстСсылки|$переход {$одежда = ...}]]
Перед циклом задаём <<set $текстСсылки = "надеть">> <<set $переход = "шкаф">> или <<set $текстСсылки = "купить">> <<set $переход = "бутик">>
Можно сделать ещё понятнее для игрока, если устанавливать <<set $текстСсылки = "Надеть " + $вещь>> (только названия вещей нужно изначально задать в винительном падеже)
Неактивен
Oldrik написал:
Вопрос по макросу "goto".
В описании сказано: "Этот макрос совершает мгновенный переход на указанный параграф, прерывая выполнение текущего параграфа"
Пример:
Параграф_0
<<if $условие eq 10>>
<<goto 'Параграф_1'>>
<<endif>>
Какой-то текст
Если $условие равно десяти происходит переход на "Параграф_1" и отображается текст как из "Параграфа_1", так и из "Параграфа_0". Так и должно быть? Я понимал, что исходя из "прерывая выполнение текущего параграфа" текст из "Параграфа_0" не должен отображаться.
Насколько я помню, текст старого параграфа после goto всё равно отображается под новым параграфом. Тут нужно мнение разработчика, а пока могу посоветовать:
:: Параграф_0 <<if $условие eq 10>> <<goto 'Параграф_1'>> <<else>> Какой-то текст <<endif>>
Неактивен
Да, действительно, это ошибка. Код после goto выполняется. Подумаю, что можно сделать.
Неактивен
Василий Новойдарский написал:
Доброго времени суток. Такой вопрос, по поводу параграфа характеристик с которого нужно вернуться на предыдущую локацию. Если я для каждого персонажа сделал отдельный параграф с описанием, то по возвращении на параграф "Характеристики" ссылка типа <<return 'Назад'>> перестает возвращать в игру.
Ссылка <<return>> возвращает на предыдущий параграф, который не всегда будет игровым при такой организации характеристик.
Можно сделать так:
:: Start <<set $currentPassage = $$title>> :: Характеристики <<if $$from neq "Характеристики" and $$from neq "Описание 1" and $$from neq "Описание 2" and $$from neq "Описание 3">> # В этом условии перечисляем названия всех параграфов, которые не являются игровыми, но могут быть предыдущими для параграфа "Характеристики" <<set $currentPassage = $$from>> <<endif>> [[Смотреть описание 1|Описание 1]] [[Смотреть описание 2|Описание 2]] [[Смотреть описание 3|Описание 3]] [[Назад в игру|$currentPassage]] :: Описание 1 Описание первого персонажа [[Назад|Характеристики]] :: Описание 2 Описание второго персонажа [[Назад|Характеристики]] :: Описание 3 Описание третьего персонажа [[Назад|Характеристики]]
В том случае, если характеристики доступны из меню, нужно в условие добавить: and $$from neq "StorySubtitle" and $$from neq "Об авторе", и другие параграфы, которые также доступны из меню. Кроме того, желательно все эти StoryMenu-параграфы переделать по аналогии с характеристиками (добавить условие и ссылку). Иначе ссылка характеристик "Назад в игру" будет возвращать не туда, если в игре сначала открыть "Об авторе", а потом "Характеристики".
Конечно же сам параграф "StorySubtitle" переделывать не нужно, там должно быть только описание игры и всё. Вместо этого нужно добавить новый параграф "Об игре", где уже выполнить <<display 'StorySubtitle'>>.
Вариант 2: вместо длинного условия в параграфе "Характеристики" можно в каждом игровом параграфе выполнять <<set $currentPassage = $$title>>
$$title (название текущего параграфа) и $$from (название предыдущего параграфа) — это системные переменные
Неактивен
Еще один вопрос :
По поводу рандомных событий.
Есть параграф со ссылками появляющимися при определенных условиях:
К примеру
::Перекресток <<if $sila lte 10 and ustal gte 15>> Иван собрался с силами и пошел в темноту леса. [[Идти в лес| Лес]] <<elseif $sila lte 15 and ustal gte 20>> Иван собрал всю волю в кулак, перехватил покрепче меч и зашел в источающее смрад, темное лоно пещеры. [[Идти в пещеру| Пещера]] <<endif>>
И вот в этот параграф я хочу добавить рандомные события которые бы при срабатывании перекрывали собой все доступные варианты.
Т.е. выйдя на перекресток наш герой внезапно наткнулся на дриаду сидящую на камне. И пока она с ней не поговорит остальные варианты не будут видны.
Неактивен
Василий Новойдарский написал:
хочу добавить рандомные события которые бы при срабатывании перекрывали собой все доступные варианты.
Т.е. выйдя на перекресток наш герой внезапно наткнулся на дриаду сидящую на камне. И пока она с ней не поговорит остальные варианты не будут видны.
И снова нам поможет макрос <<if>>
# Признаки для случайных событий: false - события не было, true - событие было <<set $event1 = false>> <<set $event2 = false>> :: Перекресток Иван вышел на перекресток, к большому и каменному камню. # Получаем случайное число от 0 до 10 <<random $event = 10>> <<if $event eq 1 and !$event1>> <<set $event1 = true>> И тут внезапно на камне появилась дриада. Иван хотел было дать дёру, но дриада молвила: -- Не пытайся дать дёру, добрый молодец, иначе я кину рут, а потом шадоу болт. Ваня понял, что ему остаётся только одно... [[Поговорить с дриадой|Дриада]] <<elseif $event eq 2 and !$event2>> <<set $event2 = true>> Другое случайное событие... <<else>> # Случайных событий не было, выводим список обычных действий На камне, конечно же, красовалась надпись: Налево -- тёмный лес (1 верста) Направо -- зловонная пещера (3 версты) <<if $sila lte 10 and $ustal gte 15>> [[Идти в лес|Лес]] <<endif>> <<if $sila lte 15 and $ustal gte 20>> [[Идти в пещеру|Пещера]] <<endif>> [[Побродить вокруг перекрёстка|Перекресток]] [[Вернуться в деревню|Деревня]] <<endif>>
Я расположил обычные действия в отдельных блоках if-endif, чтобы у игрока был выбор, пойти в лес или в пещеру, если параметры позволяют выбирать. А тексты описаний леса и пещеры лучше располагать в соответствующих параграфах.
Неактивен
Почему то эта конструкция выдает мне белый экран...
Неактивен
Василий Новойдарский написал:
Почему то эта конструкция выдает мне белый экран...
И точно, там проблема в условиях.
Нужно писать либо <<if $event eq 1 and !$event1>> либо <<if ($event eq 1) and (not $event1)>>
Сейчас подправлю и текст примера.
Неактивен
А как сделать слияние строк в переменную? Чтобы можно было выводить в ссылке типа [[согласиться на $money|agree1 ]] ? А то вариант [[согласиться на <<print $money>> |agree1 ]] выводит вместо переходной ссылки только это: <>
А [[согласиться на $money |agree1 ]] выводит "согласиться на asm_var0"
Ложная тревога.
Нашла
перед выводом ссылки сделать
<<set $i = "согласиться на " + $i >>
и в ссылке просто [[$i | agree1]]
Не привыкла складывать текст с числами
Отредактировано Aruny (02.08.2014 10:37)
Неактивен
А как сделать, чтобы нормально моноширинный был? А то {{{}}} не очень-то помогает, всё равно символы разной ширины получаются и из-за этого не могу выстроить лабиринт Немного, но сдвигаются ряды.
Или можно ли вывести символы из расширенной таблицы ASCII, там, где закрашенные прямоугольники?
И можно ли сделать, чтобы множественные пробелы не заменялись на один, а выводилось сколько их надо., или это ограничение HTML не обходится?
Неактивен
Aruny написал:
И можно ли сделать, чтобы множественные пробелы не заменялись на один, а выводилось сколько их надо., или это ограничение HTML не обходится?
Можно использовать неразрывные пробелы, АХМА их не режет.
Отредактировано Cheshire (02.08.2014 20:25)
Неактивен
Думаю, это не столько АСМ режет пробелы, сколько браузер убирает лишние по его мнению пробелы из текста.
Действительно, вместо пробелов в этом случае надо использовать а чтобы не набирать эту последовательность символов, можно выделить пробел(ы) в редакторе и нажать кнопку "Текст в символы HTML". Ну и любые символы Юникода, конечно, тоже можно использовать.
Неактивен
Morych написал:
Думаю, это не столько АСМ режет пробелы, сколько браузер убирает лишние по его мнению пробелы из текста.
Верно, прошу прощения за дезинформацию.
Неактивен