Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #426
14.06.2014 16:46

Мартын Вачикпян
Участник
Зарегистрирован: 14.06.2014
Сообщений: 1

Re: Как сделать что-то или "я вот не понимаю"

Уважаемые знатоки, вопрос от нубья. Вот я в AXMA Story Maker делаю креатив по типу интерактивного рассказа с "ветвящимся" по переходам сюжетом. При выборе одного из вариантов перехода (к примеру, [[+Действие 1|Вариант 1]], [[+Действие 2|Вариант 2]], и [[+Действие 3|Вариант 3]]) части рассказа выстраиваются единым текстом, одна за другой - так, как мне  хотелось бы для удобочитаемости. Но при этом при выборе  Действие 1 никуда не исчезают Действие 2 и Действие 3 соответственно. А возможно ли сделать так, чтобы при выборе одного варианта перехода другие исчезали либо становились "неактивными", и воспользоваться ими можно было бы только при повторном запуске рассказа (т.е. чтобы рассказ был "необратим", но при этом выбираемые части выстраивались друг за другом в единый текст, а не сменяли одна другую)?
В случае если выше это уже рассматривалось - прощения прошу ).

Неактивен

0    0    #427
20.06.2014 19:52

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Мартын Вачикпян написал:

Уважаемые знатоки, вопрос от нубья. Вот я в 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>>

Это первое, что пришло в голову. Подумаю ещё.

Неактивен

0    0    #428
24.07.2014 15:45

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Доброго времени суток. Я только-только начал знакомство с программой и уже возник такой вопрос. По ходу сюжета мне нужно что бы выйдя из комнаты (которая является постоянной и гг. будет в неё возвращаться) к примеру, в коридор гг. попадал в обязательное ответвление, для знакомства с персонажем которого он если бы я не направил его так он мог бы и пропустить и по возвращении с этого побочного «знакомства» он больше туда из комнаты не мог вернуться (тесть ссылка на эту часть исчезла и была заменена обычным выходом в коридор)
Обычная Комната – (параграф с сюжетным коридором) –обычный коридор –обычная комната (сюжетный коридор мы больше не видим)

Неактивен

0    0    #429
24.07.2014 16:30

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Василий Новойдарский написал:

Доброго времени суток. Я только-только начал знакомство с программой и уже возник такой вопрос. По ходу сюжета мне нужно что бы выйдя из комнаты (которая является постоянной и гг. будет в неё возвращаться) к примеру, в коридор гг. попадал в обязательное ответвление, для знакомства с персонажем которого он если бы я не направил его так он мог бы и пропустить и по возвращении с этого побочного «знакомства» он больше туда из комнаты не мог вернуться (тесть ссылка на эту часть исчезла и была заменена обычным выходом в коридор)
Обычная Комната – (параграф с сюжетным коридором) –обычный коридор –обычная комната (сюжетный коридор мы больше не видим)

Привет! Если я правильно понял, то можно так:

Код:

:: Start
<<set $коридор = 0>>
[[Начать игру|Комната]]

:: Комната
Описание комнаты.
<<if $коридор eq 0>>
[[Выйти из комнаты|СюжетныйКоридор]]
<<else>>
[[Выйти из комнаты|Коридор]]
<<endif>>

:: СюжетныйКоридор
Описание знакомства.
<<set $коридор = 2>>
[[Вернуться в комнату|Комната]]

:: Коридор
Описание обычного коридора.
<<set $коридор = 1>>
[[Вернуться в комнату|Комната]]

Неактивен

0    0    #430
24.07.2014 17:17

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Morych написал:

Привет! Если я правильно понял, то можно так:

Спасибо  большое помогло.

Неактивен

0    0    #431
24.07.2014 21:15

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Я сразу хочу извиняться, понимаю, что справку легче прочесть и прочее, но я там, что-то туго информацию воспринимаю. Мне всегда было проще если мне что-то объясняли.
В общем, с

Первое это ввести скажем так «Усталость» персонажа, ну к примеру, что бы за сутки он мог совершить ограниченное количество действий (нарубить дров, натаскать воды, потренироваться) и что бы количество очков действий со временем росло (то есть что бы характеристики в совокупности своей влияли на эту "усталость" ну или, что бы не усложнять жизнь зависела она от характеристики "выносливость")
Второе это ввести проверку на объекты которые на нем (например, одел он броню, взял меч - может сходить в пещеру, которая без наличия эквпипа просто была бы не доступна, но с другой стороны в броне и при оружии его не пустят к старейшине, то есть локация "старейшина" не доступна) и в то же время в броне он выглядит внушительно, то есть у некоторых НПС появляются новые ветки диалогов.
Третье наложить на это все еще и проверку характеристик (то есть броню он не может носить, пока у него нет определенного значения силы, а что бы её повысить нужно к примеру, поколоть дрова)
И последние отношения с НПС (то есть понравилась к примеру, нашему гг. Василиса и пошел он для неё подвиги совершать, подарки дарить, улучшая тем самым её отношение к себе, а на определенном моменте открывается спец. квест от неё, по выполнении которого герой получает возможность дальнейшего развития отношений то есть появляются новые ветки диалога)
И возник новый вопрос, можно ли как то числовое значение навыка прикрыть словом? ( к примеру Сила =1, а на параграфе где стоят характеристики навыки отображается Сила - "Хилый")
И еще парочка вопросов, в которых за ночь так и не смог разобраться:
Первый я создал отдельный параграф с описанием характеристик, персонажей, подсказками, доступный из любой локации но вот как сделать обратный переход  не пойму.
Второй как сделать смену дня и ночи,  что бы было разделение на утро, день, вечер и ночь (хочу завязать появление некоторых квестов на определенное время суток) ну и соответственно как сделать глобальный перезапуск тобишь гг лег спать, очки действий обновились (возможно произошли какие то события пока он спал)



Понимаю, что прошу многовато, до чего-то может и сам дойду, но пока не получается. Захотелось сделать что-то в стиле олдскульных РПГ, только в текстовом варианте, и в древнерусской стилистике.
Скажу сразу боевку пока даже и не планирую, скорее это будет что то типа квеста.

Отредактировано Василий Новойдарский (25.07.2014 07:01)

Неактивен

0    0    #432
25.07.2014 10:04

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Вопросов много, будем разбираться по порядку.

Василий Новойдарский написал:

можно ли как то числовое значение навыка прикрыть словом? ( к примеру Сила =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 (тогда как в варианте с условиями при запредельной силе всё равно будет выводиться "наисильнейший").

Неактивен

0    0    #433
25.07.2014 10:33

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Василий Новойдарский написал:

«Усталость» персонажа, ну к примеру, что бы за сутки он мог совершить ограниченное количество действий (нарубить дров, натаскать воды, потренироваться) и что бы количество очков действий со временем росло (то есть что бы характеристики в совокупности своей влияли на эту "усталость" ну или, что бы не усложнять жизнь зависела она от характеристики "выносливость")

В параграфе, который запускается каждый раз после сна:

<<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>>

Неактивен

0    0    #434
25.07.2014 10:56

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

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)

Неактивен

0    0    #435
25.07.2014 11:27

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Василий Новойдарский написал:

я создал отдельный параграф с описанием характеристик, персонажей, подсказками, доступный из любой локации но вот как сделать обратный переход

Можно использовать стандартный макрос <<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    0    #436
25.07.2014 11:32

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Василий Новойдарский написал:

можно сделать диапазон значений (ну что бы к примеру Вялый был от 0 до 10)

Вот знал, что сразу надо про диапазоны написать smile

Сила: <<if $sila lte 10>>вялый<<elseif $sila lte 20>>хилый<<elseif $sila lte 30>>слабый<<elseif $sila lte 40>>не такой уж и слабый<<elseif $sila lte 50>>сильный<<else>>наисильнейший<<endif>>

lte — меньше либо равно

Неактивен

0    0    #437
25.07.2014 11:45

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Уххх спасибо огромное сильно выручили. Я за эти 40 минут продвинулся дальше, чем за всю ночь (а ведь залип даже и не заметил как утро настало, благо отпуск)

Неактивен

0    0    #438
25.07.2014 11:57

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Пожалуйста! Если что, спрашивайте ещё. Будет интересно поиграть в текстовую рпг по древней руси smile

Неактивен

0    0    #439
28.07.2014 15:26

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Доброго времени суток. Такой вопрос, по поводу параграфа характеристик с которого нужно вернуться на предыдущую локацию. Если я для каждого персонажа сделал отдельный параграф с описанием, то по возвращении на параграф "Характеристики" ссылка типа  <<return 'Назад'>> перестает возвращать в игру.

Неактивен

0    0    #440
30.07.2014 09:04

Oldrik
Участник
Зарегистрирован: 12.11.2012
Сообщений: 35

Re: Как сделать что-то или "я вот не понимаю"

Вопрос по макросу "goto".
В описании сказано: "Этот макрос совершает мгновенный переход на указанный параграф, прерывая выполнение текущего параграфа"

Пример:

Параграф_0
<<if $условие eq 10>>
<<goto 'Параграф_1'>>
<<endif>>
Какой-то текст

Если $условие равно десяти происходит переход на "Параграф_1" и отображается текст как из "Параграфа_1", так и из "Параграфа_0". Так и должно быть? Я понимал, что исходя из "прерывая выполнение текущего параграфа" текст из "Параграфа_0" не должен отображаться.

Неактивен

0    0    #441
30.07.2014 11:17

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

Re: Как сделать что-то или "я вот не понимаю"

Вроде не нашла тут подобный вопрос.

Столкнулась с проблемой в циклах.
У меня есть некий массив, список одежды в гардеробе. Он не постоянный, меняется при получении новой вещи или выбрасывания старой.
При заходе в шкаф хочу сделать возможность одеть эту вещь.

Следующий код по логике выглядит рабочим

$одежда[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] = $вещь} в ссылке в любом случае получается равной последнему элементу списка, хотя выводимые значения под ссылкой показаны верны.
Получается, что при создании ссылок с изменением величин на используется последнее значение этой величины.

Или это я тормоз и что-то не то делаю и не так понимаю, или это и вправду не очень удобный косяк sad

Неактивен

0    0    #442
30.07.2014 12:10

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

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] = $вещь} в ссылке в любом случае получается равной последнему элементу списка, хотя выводимые значения под ссылкой показаны верны.
Получается, что при создании ссылок с изменением величин на используется последнее значение этой величины.

Или это я тормоз и что-то не то делаю и не так понимаю, или это и вправду не очень удобный косяк sad

Вы всё понимаете абсолютно правильно, но в то же время это и не косяк. Во многих случаях нужно, чтобы в качестве параметра в ссылке передавалось именно текущее значение переменной. Текущее на момент нажатия ссылки игроком, а не на момент вывода ссылки на экран. Я тоже сразу же столкнулся с этой особенностью, когда делал свой инвентарь. Я решаю это следующим образом:

- добавляем в игру много однотипных параграфов вида:

Код:

:: вещь_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>>

Теперь все ссылки передают разные значения параметра, и в параграфе "шкаф" надеваем вещь $гардероб[$индекс]. Число мини-параграфов со ссылками равно максимальному теоретическому числу элементов массива $гардероб. Это число вам, скорее всего, будет известно — количество всех предметов одежды в игре.

Неактивен

0    0    #443
30.07.2014 12:23

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

Re: Как сделать что-то или "я вот не понимаю"

Да я так же вышла из положения - при выводе информации о вещи выставляю типа "если зашли из шкафа, то выводим возможность надеть", "если зашли из магазина, то выводим информацию о возможности купить".

Просто так получается множество однотипных лишних строк, которые можно было бы уместить в одну. Двадцать вещей - двадцать строк вида [[надеть|шкаф {$одежда = ...}]] и ещё двадцать на покупку. И ещё двадцать на выброс...   

Никакой оптимизации кода и уважения к ресурсам big_smile

Неактивен

0    0    #444
30.07.2014 12:51

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Aruny написал:

Да я так же вышла из положения - при выводе информации о вещи выставляю типа "если зашли из шкафа, то выводим возможность надеть", "если зашли из магазина, то выводим информацию о возможности купить".

Просто так получается множество однотипных лишних строк, которые можно было бы уместить в одну. Двадцать вещей - двадцать строк вида [[надеть|шкаф {$одежда = ...}]] и ещё двадцать на покупку. И ещё двадцать на выброс...   

Никакой оптимизации кода и уважения к ресурсам big_smile

А попробуйте использовать ссылки вида: [[$текстСсылки|$переход {$одежда = ...}]]
Перед циклом задаём <<set $текстСсылки = "надеть">> <<set $переход = "шкаф">> или <<set $текстСсылки = "купить">> <<set $переход = "бутик">>

Можно сделать ещё понятнее для игрока, если устанавливать <<set $текстСсылки = "Надеть " + $вещь>> (только названия вещей нужно изначально задать в винительном падеже)

Неактивен

0    0    #445
30.07.2014 12:57

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Oldrik написал:

Вопрос по макросу "goto".
В описании сказано: "Этот макрос совершает мгновенный переход на указанный параграф, прерывая выполнение текущего параграфа"

Пример:

Параграф_0
<<if $условие eq 10>>
<<goto 'Параграф_1'>>
<<endif>>
Какой-то текст

Если $условие равно десяти происходит переход на "Параграф_1" и отображается текст как из "Параграфа_1", так и из "Параграфа_0". Так и должно быть? Я понимал, что исходя из "прерывая выполнение текущего параграфа" текст из "Параграфа_0" не должен отображаться.

Насколько я помню, текст старого параграфа после goto всё равно отображается под новым параграфом. Тут нужно мнение разработчика, а пока могу посоветовать:

Код:

:: Параграф_0
<<if $условие eq 10>>
     <<goto 'Параграф_1'>>
<<else>>
     Какой-то текст
<<endif>>

Неактивен

0    0    #446
30.07.2014 13:26

DoubleDragon
Модератор (+391, -32)
Откуда: Москва
Зарегистрирован: 07.04.2012
Сообщений: 1760
Вебсайт

Разработчик "AXMA Story Maker"

Re: Как сделать что-то или "я вот не понимаю"

Да, действительно, это ошибка. Код после goto выполняется. Подумаю, что можно сделать.

Неактивен

0    0    #447
30.07.2014 15:01

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Василий Новойдарский написал:

Доброго времени суток. Такой вопрос, по поводу параграфа характеристик с которого нужно вернуться на предыдущую локацию. Если я для каждого персонажа сделал отдельный параграф с описанием, то по возвращении на параграф "Характеристики" ссылка типа  <<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 (название предыдущего параграфа) — это системные переменные

Неактивен

0    0    #448
31.07.2014 12:08

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Еще один вопрос :
По поводу рандомных событий.
Есть параграф со ссылками появляющимися при определенных условиях:
К примеру

Код:

::Перекресток
<<if $sila lte 10 and ustal gte 15>>
Иван собрался с силами и пошел в темноту леса.
[[Идти в лес| Лес]]
<<elseif $sila lte 15 and ustal gte 20>>
Иван собрал всю волю в кулак, перехватил покрепче меч и зашел в источающее  смрад, темное лоно пещеры.
[[Идти в пещеру| Пещера]]
 <<endif>>

И вот в этот параграф я хочу добавить рандомные события которые бы при срабатывании перекрывали собой все доступные варианты.
Т.е. выйдя на перекресток наш герой внезапно наткнулся на дриаду сидящую на камне. И пока она с ней не поговорит остальные варианты не будут видны.

Неактивен

0    0    #449
31.07.2014 13:50

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Как сделать что-то или "я вот не понимаю"

Василий Новойдарский написал:

хочу добавить рандомные события которые бы при срабатывании перекрывали собой все доступные варианты.
Т.е. выйдя на перекресток наш герой внезапно наткнулся на дриаду сидящую на камне. И пока она с ней не поговорит остальные варианты не будут видны.

И снова нам поможет макрос <<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, чтобы у игрока был выбор, пойти в лес или в пещеру, если параметры позволяют выбирать. А тексты описаний леса и пещеры лучше располагать в соответствующих параграфах.

Неактивен

0    0    #450
31.07.2014 17:26

Василий Новойдарский
Участник
Зарегистрирован: 24.07.2014
Сообщений: 12

Re: Как сделать что-то или "я вот не понимаю"

Почему то эта конструкция выдает мне белый экран...

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru