Forum.iFiction.Ru

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

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

Вы не зашли.

   #1
12.07.2012 19:07

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

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

Спасибо за консоль!

Но я вот не понимаю, при каком условии переменная в консоль попадает? Объявляю и использую я переменных больше, чем отображается в списке объектов (в редакторе) и соответственно в консоли.

Неактивен

   #2
21.08.2012 13:32

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

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

Вета написал:

А как сделать, чтобы выполняло тогда? В параграфе "о_заводе" нужно менять значение переменной?

Даже если поменять значение переменной в параграфе "о_заводе", результат будет тем же. А все потому, что описание завода добавляется к текущему параграфу, который был сформирован при старом значении переменной, и с тех пор не обновлялся.

Как вариант, можно вместе с частью описания завода выводить и дополнительную ссылку на продолжение описания:

Код:

параграф "о_заводе"
<<if $пролог eq 1>>
Это большой завод.
[[+Хочу знать больше|о_заводе {$пролог = 2}]]
<<elseif $пролог eq 2>>
У него есть высокая труба.
[[+Хочу знать больше|о_заводе {$пролог = 3}]]
<<elseif $пролог eq 3>>
Верх трубы теряется в облаках... или это дым?
<<endif>>

Не проверял, но по идее должно работать.

Неактивен

   #3
26.08.2012 17:36

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

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

Простейший пример:

Код:

###параграф "Комната 1"###
Вы видите дверь.
<<if $ключ>>
Дверь заперта, но, к счастью, у Вас есть ключ.
[[Открыть дверь|Комната 2]]
<<else>>
Похоже, без ключа эту дверь не откроешь.
[[Глянуть под ковриком|Коврик]]
<<endif>>

###параграф "Коврик"###
Под ковриком Вы нашли ключ.
<<set $ключ = 1>>
[[Вернуть коврик на место|Комната 1]]

Отредактировано Morych (26.08.2012 17:43)

Неактивен

   #4
27.08.2012 10:29

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

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

Я делаю инвентарь примерно так. Есть специальный параграф "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. А насчёт разных хитростей в игре, то, я думаю, профи их выложат, но после конкурса. wink

Неактивен

   #5
27.08.2012 12:24

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

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

Пожалуйста. На самом деле все просто. Для каждой вещи в инвентаре добавляйте блок:

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

Неактивен

   #6
27.08.2012 13:24

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

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

sosiskin написал:

<<set $n++>> - это что, инкремент переменной на единицу? я о двух плюсиках нигде в хелпе не встречал упоминаний.

Совершенно верно. Эквивалентно <<set $n = $n + 1>>

Еще есть инкремент на произвольную величину: <<set $n+=5>>

Теоретически должен работать синтаксис JavaScript. Нужно спросить у DoubleDragon.

Неактивен

   #7
28.08.2012 10:12

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

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

vinurd написал:

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

Это, скорее, сниппеты нежели макросы. Написал про них в тему предложений.

Неактивен

   #8
01.10.2012 15:05

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

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

Вета написал:

Подскажите, как сделать такую вещь, чтобы при вставке текста из другой локации, он бы не переносился на новую строку.

Пример:

#1

Стрелка указывает на <<display '2'>>

-------------------------------------------------------
Если есть несколько условий в параграфе 2, текст из параграфа 2 переносится почему-то в параграфе 1 на новую строку. А мне нужно чтобы он продолжал текст.

Все условия в параграфе 2 пишите в одну строку и убедитесь, что весь текст параграфа не содержит ни одного перевода строки:

<<if $strelka eq 0>>север<<elseif $strelka eq 1>>восток<<elseif $strelka eq 2>>юг<<else>>запад<<endif>>

UPD: Flash меня опередил smile

Отредактировано Morych (01.10.2012 15:08)

Неактивен

   #9
01.10.2012 18:01

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

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

Вета написал:

Соль в том,то даже если я не нажимаю "Взять книгу", он мне уже отображает условия (читайте - обновляет локацию). Дополнительную локацию создавать не хочу, их итак много. Как теперь сделать так, чтобы локация не обновлялась, пока не нажмешь действие.

Обработка кода не заканчивается на ссылках. Поэтому при первом же входе в локацию, пишется "Ряды книг", ниже ссылка "Взять книгу" и далее текст из условия. Поскольку стоит 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)

Неактивен

   #10
01.10.2012 21:36

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

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

Вета написал:

А когда второй раз в локацию зайдешь, он разве все не отобразит опять? Мне действия с книгой нужно чтобы появлялись, когда у меня в другой локации там сработает переменная часы_з1. В общем, так и так делать еще одну локацию. Печалька.

Главное без паники! Со всем разберемся! smile

Давай всё же определимся с задачей для ясности. Есть локация с описанием. На ней валяется предмет, который можно взять (если он не взят) и только при срабатывании какой-то переменной (в другой локации). В этом случае к описанию добавляется фраза о необходимости взять предмет и ссылка-действие. При подборе предмета также выводится соответствующая фраза, добавляясь к описанию. Самое главное - всё это должно быть втиснуто в один параграф. Верно? Если нет, поправь. Тогда код параграфа:

Код:

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

Неактивен

   #11
01.10.2012 22:13

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

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

kerber, в твоём варианте, если часы не сработали, при нажатии на ссылку - она станет недоступной, но к описанию локации ничего не добавится.

Ой, уже удолил smile

Отредактировано Morych (01.10.2012 22:14)

Неактивен

   #12
02.10.2012 09:37

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

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

Вета написал:

Спасибо, Морич, да как-то так. Дальше буду думкать smile

"Морич" - это по-буржуйски. Всё прогрессивное человечество говорит "Мóрыч" smile
Ну, если что, обращайся.

Неактивен

   #13
02.10.2012 16:59

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

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

Вета написал:

Кстати, еще вопрос по аудио.
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}]]

Неактивен

   #14
02.10.2012 20:47

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

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

Файл истории - *.sm, т.е. asm-проект.

Неактивен

   #15
15.10.2012 09:57

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

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

Вета, ты хочешь предоставить возможность игроку любой предмет попытаться соединить с любым другим? А стоит ли это делать, если в большинстве случаев мы увидим что-то вроде "Вы попытались соединить X и Y, но ничего не вышло"? Или большинство предметов у тебя как раз комбинируемые? Опиши, как ты хочешь, чтобы это выглядело? Может так: при выборе предмета инвентаря, после описания предмета есть ссылка "комбинировать...", при нажатии на которую выводится список предметов (кроме того, который соединяем). При выборе второго предмета переходим на параграф результата соединения. Попробую что-нибудь придумать. Но проще всего так, как, скорее всего, делаешь ты smile Только кучу параграфов можно всегда объединить благодаря передаче параметра.

Неактивен

   #16
15.10.2012 10:58

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

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

Пример комбинирования двух предметов инвентаря

Код:

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

Неактивен

   #17
15.10.2012 11:56

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

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

Вета написал:

Такие вещи на АКСМЕ пока сложно реализуются, честно говоря.

Приведённый выше код сложен? smile Можно по-другому: в параграфе описания предмета перечислить вручную все возможные действия с этим предметом (ссылка ведущая на этот же параграф, но с другим параметром, для уменьшения числа параграфов). Преимущество этого метода: действия будут оформлены более литературно.

Вета написал:

Я вот думаю, как мне условия сделать в зависимости от нахождения игрока на локации, но, кажется, придумала. )

Интересно, как?

Неактивен

   #18
15.10.2012 18:15

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

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

Вета написал:

if $curloc='Дом': дейтвие2

Надеюсь, так будет работать... Если "нет", Драгону срочно надо сделать ))

Вот так точно будет работать:

<<if $curloc eq 'Дом'>> [[+дейтвие2]] <<endif>>

Надо предложить Драгону сделать конвертер QSP --> ASM wink

Неактивен

   #19
18.10.2012 10:03

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

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

Debyr написал:

... но есть идея для одного проекта...

И этот проект "Война и мир 2: Интерактивная версия" smile

Ручной ввод -- это, наверно, возможность ввода какого-либо текста игроком в текстовом поле или в инпут боксе. Не иначе, чтобы организовать парсер smile

Неактивен

   #20
18.10.2012 10:50

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

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

Я как раз хотел предложить использовать текстовый ввод по методу Флэша (при помощи "экранной клавиатуры"), если мы верно истолковали термин "ручной ввод".

Неактивен

   #21
18.10.2012 13:11

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

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

Это да, но ты первый продемонстрировал реализацию (код) метода для асмоигры.

Неактивен

   #22
18.10.2012 16:34

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

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

Debyr написал:

Кстати, важный вопрос... А почему не видны изображения? Пробовал закидывать картинку в папку с сейвом sm, в папку с html документом, указывал путь, как указано в обучении, сохранял, запускаю - изображения нет. Что же с ним нужно на самом деле сделать, что бы появилось?

Изображения видны. Положите картинку в папку с файлом истории *.sm
И в тексте параграфа пишите [[File: yourimage.png]]

Неактивен

   #23
18.10.2012 18:09

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

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

Если картинка лежит локально, на компьютере, то действительно надо указывать путь, но относительный, а не абсолютный. Можно, например, в папке с игрой (где sm) сделать папку "content", в которой сделать папку "images", где и будут лежать все изображения для игры. Тогда для вставки изображения пишем:

[[File: content\images\filename.jpg]]

Весь медиаконтент игры действительно нужно хранить в папке с игрой. Кстати, советую для каждой игры делать свою отдельную папку. Если у вас одна картинка используется в двух играх, скопируйте её в оба места. Тогда можно будет выдать товарищу папку с игрой (и там точно всё будет). Один файл можно получить путём архивации папки. smile Напомню, что у товарища должен быть установлен asm, чтобы скомпилировать историю у себя. Либо вы можете опубликовать игру в библиотеке и поделиться полученной ссылкой.

Неактивен

   #24
16.01.2013 10:16

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

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

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

По вопросу. Многоразовая ссылка начинается с *. В параграфе "комната 1" выводи только ссылку [[*окне|окно]] (один раз) при этом совмести параграф "окно пуст." с параграфом "окно", а уже в параграфе "окно" выполняй все проверки. И при починенном бинокле попробуй сначала использовать макрос <<clrscr>> для очистки экрана.

Отредактировано Morych (16.01.2013 10:25)

Неактивен

   #25
16.01.2013 10:45

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

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

WeLLWar написал:

Как сделать, чтобы после определённого действия ссылка удалялась?

Кроме одноразовых +ссылок можно использовать более извращённый способ:
Пусть $действие = 0

Код:

:: параграф
В тексте параграфа присутствует <<if $действие>>ссылка<<else>>[[ссылка|параграф {$действие = 1}]]<<endif>>.
<<if $действие>>
     От нечего делать я нажал на ссылку, и та удалилась.
<<endif>>

или без фэйда (но зато при нажатии кнопки "Отменить" вместо отмены действия вернёшься на предыдущий параграф):

Код:

:: параграф
<<clrscr>>
В тексте параграфа присутствует <<if $действие>>ссылка<<else>>[[+ссылка|параграф {$действие = 1}]]<<endif>>.
<<if $действие>>
     От нечего делать я нажал на ссылку, и та удалилась.
<<endif>>

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru