Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #101
01.04.2014 10:42

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

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

Приветствую! Добро пожаловать в клуб "тех, кто пишет RPG на AXMA"! wink

Сразу по приведённому кусочку кода:

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

попробуйте просто переместить в самый низ параграфа.

Неактивен

0    0    #102
01.04.2014 13:14

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

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

Да, если ни с того ни с сего бац и умер, это, конечно, не очень хорошо.
Т.е. больничную палату и надпись "Здоровье -1" надо показать. Я так понимаю, там в зависимости от какого-то действия здоровье уменьшается (не согласился на клизму?)
Значит в конце этого параграфа ставим условие "если здоровье больше нуля", то показываем дальнейшие возможные действия, а иначе ставим единственную ссылку вроде "Далее" или "Почувствовать себя хуже". И эта ссылка, конечно же, ведёт на параграф "Смерть хр".
Таким образом можно сделать такую проверку на смерть только там, где уменьшается здоровье, и смерть теоретически возможна.

Неактивен

0    0    #103
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    #104
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    #105
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    #106
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    #107
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    #108
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    #109
25.07.2014 11:57

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

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

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

Неактивен

0    0    #110
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    #111
30.07.2014 12:51

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

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

Aruny написал:

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

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

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

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

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

Неактивен

0    0    #112
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    #113
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    #114
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    #115
31.07.2014 17:42

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

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

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

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

И точно, там проблема в условиях.
Нужно писать либо <<if $event eq 1 and !$event1>> либо <<if ($event eq 1) and (not $event1)>>
Сейчас подправлю и текст примера.

Неактивен

0    0    #116
03.08.2014 13:31

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

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

Думаю, это не столько АСМ режет пробелы, сколько браузер убирает лишние по его мнению пробелы из текста.

Действительно, вместо пробелов в этом случае надо использовать &nbsp; а чтобы не набирать эту последовательность символов, можно выделить пробел(ы) в редакторе и нажать кнопку "Текст в символы HTML". Ну и любые символы Юникода, конечно, тоже можно использовать.

Неактивен

0    0    #117
04.08.2014 11:52

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

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

Aruny написал:

Спасибо smile Но добавить символы типа этого ▒  (альт+177) почему-то не получилось big_smile и на  &nbsp; тоже что-то "компилятор" ругается big_smile

И моноширинный текст на самом деле не моноширинный.

Вышла из положения чисто по женски - подобрала символы, совпадающие по ширине. То есть в заглавной букве "Ш" умещается четыре точки подряд (....), а значок человечка - три символа: .о.   


Зато теперьу меня есть двумерный лабиринт big_smile

Поздравляю! Когда можно будет поиграть? smile

А вообще любопытно взглянуть на код, должно всё получаться и с символами, и с моноширинным шрифтом. Сейчас могу предположить, что внутри текста, помеченного как моноширинный, встречаются конструкции <<if>>...<<endif>> или <<loop>> - они сбивают форматирование.  Выход - сначала формировать цельные строки лабиринта, и только потом делать <<print $labirint>>.

Неактивен

0    0    #118
04.08.2014 13:23

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

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

Aruny написал:

И да, там именно в выводе присутствуют макросы <if>

Ну вот об этом я и говорил. Я чуть-чуть подправил:

Код:

<<set $flag=0>>
<<set $flag2=0>>
вы начали от <<print $откуда>>
<<nop>>
<<set $w="▒">>
<<set $q="&nbsp;">>
<<set $me="ö">>
­<<set $i=0>>
<<set $j=0>>
# строка для "сборки" карты
­<<set $screen = "">>
<<loop $город.length>>
    <<if $i==$координаты[0]>>
        <<set $screen = $screen + $me>>
        <<if $город[$i] > 0>>
            <<set $flag=1>>
            <<set $flag2=$город[$i]>>
        <<endif>>
    <<else>>
        <<if $город[$i] == 0 >> 
            <<set $screen = $screen + $w>>
        <<elseif $город[$i] == 'x'>>
            <<set $screen = $screen + $q>>
        <<else>>
            <<if $город[$i] == 1>>
                <<set $screen = $screen + $город[$i]>>    
            <<endif>>
            <<if $город[$i] == 2>>
                <<set $screen = $screen + $город[$i]>>    
            <<endif>>
            <<if $город[$i] == 3>> <<if $дом_Константина[0]>0 >>
                <<set $screen = $screen + $город[$i]>>    
                <<else>> <<set $screen = $screen + $q>> <<endif>> <<endif>>
            <<if $город[$i] == 4 >> <<if $рынок[0]>0 >>
                <<set $screen = $screen + $город[$i]>>    
                <<else>> <<set $screen = $screen + $q>> <<endif>> <<endif>> 
            <<if $город[$i] == 5 >> <<if $ночлежка[0]>0 >>
                <<set $screen = $screen + $город[$i]>>    
                <<else>> <<set $screen = $screen + $q>> <<endif>> <<endif>>
            <<if $город[$i] == 6 >><<if $бордель[0]>0 >>
                <<set $screen = $screen + $город[$i]>>    
                <<else>> <<set $screen = $screen + $q>> <<endif>> <<endif>>
            <<if $город[$i] == 7 >><<if $таверна[0]>0 >>
                <<set $screen = $screen + $город[$i]>>    
                <<else>> <<set $screen = $screen + $q>> <<endif>> <<endif>>
        <<endif>>
    <<endif>>
    <<set $i++>>
    <<set $j++>>
    <<if $j == $xmax>>
        <<set $j=0>>
    <<set $screen = $screen + "<br>">>
    <<endif>>
<<endloop>>
==={{{<<print $screen>>}}}===
<<if $город[$координаты[0]-1] != 0>>
    [[-влево|гулять город 1{$координаты[0] = $координаты[0]-1}{$flag=0}{$flag2=0}]]
    <<else>>
    влево
<<endif>> 
<<if $город[$координаты[0]+1] != 0>>
    [[-вправо|гулять город 1{$координаты[0] = $координаты[0]+1}{$flag=0}{$flag2=0}]]
    <<else>>
    вправо
<<endif>> 
<<if $город[$координаты[0]+$xmax] != 0>>
    [[-вниз|гулять город 1{$координаты[0] = $координаты[0]+$xmax}{$flag=0}{$flag2=0}]]
    <<else>>
    вниз
<<endif>> 
<<if $город[$координаты[0]-$xmax] != 0>>
    [[-вверх|гулять город 1{$координаты[0] = $координаты[0]-$xmax}{$flag=0}{$flag2=0}]]
    <<else>>
    вверх
<<endif>> 
<<br>>
#выводим "легенду"
1 - ворота в город, 2 - дом мага
    <<if $дом_Константина[0]>0 >>, 3 - дом Константина<<endif>>
    <<if $рынок[0]>0 >>, 4 - рынок<<endif>>
    <<if $ночлежка[0]>0 >>, 5 - ночлежка<<endif>>
    <<if $бордель[0]>0 >>, 6 - бордель<<endif>>
    <<if $таверна[0]>0 >>, 7 - таверна<<endif>>
<<endnop>>
<<if $flag == 1>>
    <<if     $flag2==1>>
        === вы вышли к воротам в город ===
#        [[перейти к воротам|ворота в город 1]]
    <<endif>>
    <<if     $flag2==2>>
        === вы вышли к дому мага ===
#        [[перейти к дому мага|дом мага 1]]
    <<endif>>
    <<if     $flag2==3>>
        === вы вышли к дому Константина ===
#        [[перейти к дому Константина|дом Константина 1]]
    <<endif>>
    <<if     $flag2==4>>
        === вы вышли к рынку ===
        <<set $рынок[0]=1>>
#        [[перейти к рынку|рынок 1]]
    <<endif>>
    <<if     $flag2==5>>
        === вы вышли к ночлежке ===
        <<set $ночлежка[0]=1>>
#        [[перейти к ночлежке|ночлежка 1]]
    <<endif>>
    <<if     $flag2==7>>
        === вы вышли к таверне ===
        <<set $таверна[0]=1>>
#        [[перейти к таверне|ночлежка 1]]
    <<endif>>
<<endif>>
[[-вернуться в начальную точку|$откуда]]

И вот, что у нас тогда получается (я подправил StoryStyle, чтобы убрать расстояние между строками):

 спойлер…

Вроде бы, даже работать стало немного быстрее. Однако всё равно у меня на машине подтормаживает. Слишком уж большую карту показываем сразу. Опять же есть риск, что на смартфоне карта поплывёт. Советую подумать в сторону ограничения видимой области карты. Например 10 на 10 клеток. Подходим к краю за 2-3 клетки, карта сдвигается.

А так всё очень хорошо работает, почти полноценный рогалик smile

P.S. Рейтингом 18++ нас не испугаешь! Цензура цензурой, а в песочницу-то гарантированно пройдёт wink

Неактивен

0    0    #119
04.08.2014 14:29

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

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

Вслепую ходить по такому большому лабиринту никто не захочет, даже вам надоест smile А вот с визуализацией - это совсем другое дело. Можно ещё выводить текстом, что находится около гг на севере, на юге, западе и востоке. И ссылки навигации лучше сделать "крестиком", а не в одну строку.

Жёсткая порнография, написанная девочкой... так это ведь женский любовный роман smile

Неактивен

0    0    #120
07.08.2014 18:16

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

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

Delakha написал:

Можно ли поставить ударение в слове?

Можно попробовать использовать все эти буковки из "Таблицы символов", всякие á, ó, é, ý. Или выделить курсивом или жирным шрифтом нужную букву.

Неактивен

0    0    #121
09.08.2014 02:18

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

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

Привет! Уточни, пожалуйста, задачу. Как должно выглядеть это в игре?

Неактивен

0    0    #122
11.08.2014 09:45

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

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

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

Примерно я так себе это представляю

Код:

::Start
<<set $den = 1>>

Далее я сделал параграф Состояния куда вывожу информацию

Код:

''Время:'' <<if $time gte 5 and $time lte 11>>Утро<<elseif $time gte 12 and $time lte 17>>День
<<elseif $time gte 18 and $time lte 23>>Вечер<<elseif $time gte 24 and $time lte 4>>Ночь<<endif>> 
| ''День недели:'' <<if $den eq 1>>Понедельник<<elseif $den eq 2>>Вторник<<elseif $den eq 3>>Среда
<<elseif $den eq 4>>Четверг<<elseif $den eq 5>>Пятница<<elseif $den eq 6>>Суббота<<elseif $den eq 7>>Воскресенье<<endif>>

А вот где мне запускать обнуление я не представляю или нужно через if добавлять доп. параметр или делать цикл...

А параграф "ПрошлоВермя" есть? Я приводил его код, когда мы обсуждали игровое время. Можно его подправить так:

:: ПрошлоВремя
<<set $time = $time + $timeAdd>>
<<set $timeAdd = 0>>
<<if $time gt 23>>
     <<set $time = $time - 24>>
     <<set $day = $day + 1>>
     <<set $den = $den + 1>>
     <<if $den gt 7>>
          <<set $den = 1>>
     <<endif>>

<<endif>>

А в параграфе "Start" можно сделать:

<<random $den = 6>>
<<set $den = $den + 1>>

Неактивен

0    0    #123
28.08.2014 09:52

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

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

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

Как мне сделать так, что бы к примеру в ссылке отображалось сколько очков будет тратиться на действие
К примеру:
"Нарубить дров (2)", где 2 соответственно очки затраченные на это действие.

И второй как сделать ссылку неактивной если очков не хватает (то есть, что бы она была видна но использовать её было невозможно)

Допустим, мы определили, что для выполнения действия требуется определенное число очков действий, и пусть это значение у нас записано в переменной $apCost, а в переменной $ap - доступные очки действий гг, тогда:

<<set $text = "Нарубить дров (" + $apCost + ")">>
<<if $apCost lte $ap>>
     [[$text|НарубитьДров]]
<<else>>
     <<print $text>>
<<endif>>

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

И еще один как ограничить очки так что бы они не уходили в минус а останавливались на 0.

Можно использовать при каждом уменьшении переменной if или Math.max:

<<set $ap = Math.max(0, $ap)>>

или

<<if $ap lt 0>>
     <<set $ap = 0>>
<<endif>>

Неактивен

0    0    #124
08.09.2014 09:42

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

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

Aruny написал:

А можно ли сделать передачу адреса изображения через переменную?

Пока вижу только прямое указание адреса вида [[File: 01-02.jpg]]

А мне бы хотелось сделать вида [[File: $картинка]], где $картинка = '01' + '-' + '02' + '.jpg'

Это надо писать в Предложения по новому функционалу. А пока можно лишь наделать много параграфов вида "img_01_02", где будет только [[File: 01-02.jpg]] и вызывать их через <<$картинка = "img_01_02">> <<display $картинка>>

Неактивен

0    0    #125
01.11.2014 12:13

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

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

Alex842 написал:

Подскажите, что-то никак не могу разобраться со списками, а точнее как мне добавить ссылки в списки. Т.е. чтобы можно было вывести список элементов и при клике на каждый элемент происходил переход на многоразовый абзац с описанием предмета.

Ссылки в список не добавишь, но можно добавить строки-названия параграфов. Эта идея использована, например, в модуле Инвентарь. А суть такова. Для каждого предмета создаём параграф вида:

:: кольцо всевластья
[[*кольцо всевластья|описание {$item = "кольцо всевластья"} {$desc = "Оба-на, колечко!.. Вот свезло, так свезло!.."}]]


В наш список где-то добавляем название предмета:

<<set $itemsList.push("кольцо всевластья")>>

И где-то нам надо отобразить список:

У вас в карманцах:
<<set $i = 0>>
<<loop $itemsList.length>>
<<display $itemsList[$i]>>
<<set $i++>>
<<endloop>>


Таким образом на экране получаем список многоразовых ссылок на параграф "описание", в который передаём разные параметры, в зависимости от выбранного предмета. Сам параграф "описание" выглядит как-то так:

:: описание
''<<print $item>>''
<<print $desc>>
(и ещё тут могут быть разные действия для разных предметов)


Очевидный недостаток метода - необходимость создавать отдельный мелкий параграф для каждого из существующих в игре предметов. Можно об этом забыть при добавлении новых предметов в игру. При этом Асм 2.х ругается на отсутствующий параграф, а в 3-й версии ссылка просто нажимается без какой-либо реакции.

П.С. Прошу прощения за поздний ответ.

Неактивен

Powered by PunBB
© copyright 2001–2023 iFiction.Ru