Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
09.07.2012 11:12

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

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

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

Если у Вас есть вопросы, как сделать что-то в программе или Вы не понимаете чего-то (то ли это ошибка, то ли фича и т.д.), то спрашивайте в этой теме.

Неактивен

0    0    #2
12.07.2012 19:07

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

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

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

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

Неактивен

0    0    #3
21.08.2012 13:32

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

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

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

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

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

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

Код:

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

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

Неактивен

0    0    #4
26.08.2012 17:36

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

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

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

Код:

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

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

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

Неактивен

0    0    #5
27.08.2012 10:29

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

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

Неактивен

0    0    #6
27.08.2012 12:24

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

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)

Неактивен

0    0    #7
27.08.2012 13:24

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

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

sosiskin написал:

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

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

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

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

Неактивен

0    0    #8
28.08.2012 10:12

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

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

vinurd написал:

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

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

Неактивен

0    0    #9
01.10.2012 15:05

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

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)

Неактивен

0    0    #10
01.10.2012 18:01

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

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)

Неактивен

0    0    #11
01.10.2012 21:36

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

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

Неактивен

0    0    #12
01.10.2012 22:13

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

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

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

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

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

Неактивен

0    0    #13
02.10.2012 09:37

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

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

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

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

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

Неактивен

0    0    #14
02.10.2012 16:59

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

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

Неактивен

0    0    #15
02.10.2012 20:47

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

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

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

Неактивен

0    0    #16
15.10.2012 09:57

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

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

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

Неактивен

0    0    #17
15.10.2012 10:58

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

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

Неактивен

0    0    #18
15.10.2012 11:56

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

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

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

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

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

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

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

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

Неактивен

0    0    #19
15.10.2012 18:15

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

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

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

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

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

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

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

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

Неактивен

0    0    #20
18.10.2012 10:03

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

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

Debyr написал:

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

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

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

Неактивен

0    0    #21
18.10.2012 10:50

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

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

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

Неактивен

0    0    #22
18.10.2012 13:11

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

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

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

Неактивен

0    0    #23
18.10.2012 16:34

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

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

Debyr написал:

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

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

Неактивен

0    0    #24
18.10.2012 18:09

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

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

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

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

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

Неактивен

0    0    #25
16.01.2013 10:16

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

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

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

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

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

Неактивен

0    0    #26
16.01.2013 10:45

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

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

WeLLWar написал:

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

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

Код:

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

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

Код:

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

Неактивен

0    0    #27
09.03.2013 14:01

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

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

Desfir написал:

я начал осваивать axma story maker и возникла трудность я вставил в параграф start звуковой файл но мне не надо чтобы во всех остальных он проигрывался придется создавать пустой звуковой файл или есть другой способ?

используйте макрос <<noaudio>> - он останавливает проигрывание музыки и убирает плеер.

Неактивен

0    0    #28
09.03.2013 14:20

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

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

Кстати в окне редактирования параграфа есть кнопка "макросы", по которой выпадает список всех макросов с кратким описанием их функций.

Неактивен

0    0    #29
16.03.2013 13:00

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

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

Попробуй такой код:

Код:

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

Вроде бы, всё окей smile

UPD: Упс, не заметил один параграф. Подправил код.

Отредактировано Morych (16.03.2013 13:16)

Неактивен

0    0    #30
08.04.2013 13:52

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

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

Anderman написал:

Пожалуйста, помогите, очень нужно реализовать в программе "группу +ссылок".
===
Объясняю, что это такое:
Идет диалог персонажей, внизу три ссылки (три варианта ответов). Все три "+вые", то есть при нажатии на них результат появится на той же странице. А теперь вопрос - как же сделать так, чтобы при нажатии на одну из этих ссылок, все разом становились недоступными? Это необходимо, чтобы игрок не подглядел, что будет, если бы он выбрал другой вариант.
===
Иными словами, я хочу объединить "+ ссылку" и "невозвратную ссылку", только в совокупности с другими ссылками на этой странице.
Я знаю, что проще делать обычные невозвратные ссылки, но уж очень нужно остаться на той же странице.
Это нужно также для того, чтобы игрок не просто видел результат а виде:
1) что было
2) что он выбрал
3) результат
И все на одной страничке. Удобно.

Пока деактивировать +ссылки без нажатия невозможно. Могу предложить следующее. Создать объект $ответ = false. В параграфах, на которые ссылаются +ссылки написать:
<<if !$ответ>>
Текст параграфа
<<set $ответ = true>>
<<endif>>
Т.е. все ссылки можно будет нажать, но текст покажет только один раз.

Неактивен

0    0    #31
08.04.2013 14:09

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

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

Другой вариант. Вместо +ссылок использовать обычные ссылки на этот же параграф, с параметром:

Параграф
Написано, что было
<<if $ответ eq "Вариант 1">>
Выбран 1 вариант
Результат 1
<<elseif $ответ eq "Вариант 2">>
Выбран 2 вариант
Результат 2
<<elseif $ответ eq "Вариант 3">>
Выбран 3 вариант
Результат 3
<<else>>
[[Вариант 1|Параграф {$ответ = "Вариант 1"}]]
[[Вариант 2|Параграф {$ответ = "Вариант 2"}]]
[[Вариант 3|Параграф {$ответ = "Вариант 3"}]]
<<endif>>

Неактивен

0    0    #32
22.04.2013 15:22

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

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

Oldrik написал:

Как увеличить или уменьшить элемент списка? Не присвоить новое значение, а просто изменить.

По-моему, изменяя значение элемента списка, ты и присваиваешь ему новое значение. Вот в примере выше мы присваиваем новое значение, которое больше текущего значения на 1.

Неактивен

0    0    #33
07.05.2013 15:51

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

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

sosiskin написал:

Народ, подсобите с организацией кода, пожалуйста.
Есть такая задача, похожая на АХМА игру Asteroids, но с урезанной математикой, попроще: нужно чтоб в табличном окошке с заданной скоростью падали слова из списка (по принципу звёзд в игре Asteroids, но быстрее).

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

Насколько я помню, минимальный интервал таймера - 1 секунда. Чтобы слова падали быстрее, можно изменять их позицию не на одну строку, а на две, например.
Слова из списка должны падать по одному?

Неактивен

0    0    #34
07.05.2013 17:01

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

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

Хм, попробую что-нибудь придумать smile
А пока может это натолкнёт на верный путь:

Код:

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

Неактивен

0    0    #35
07.05.2013 18:33

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

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

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 + "&nbsp;">><<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>>

Текстовый скринсейвер (можно динамически добавлять слова).

Неактивен

0    0    #36
07.05.2013 20:31

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

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

sosiskin написал:

Morych написал:

А пока может это натолкнёт на верный путь:

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

В общем, я пока кое-как запилил на основе кода Астероидов, вставив туда списки.

А как же моё предыдущее сообщение #194? Там через списки, изначально не видно ничего, не по порядку и на разном отступе.

Неактивен

0    0    #37
08.05.2013 12:38

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

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

Вета, хочу уточнить, "перемещения" - это вкладка с перечнем выходов из данной локации?

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)

Неактивен

0    0    #38
09.05.2013 00:02

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

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

Пока мы не вызовем макрос <<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 + "&nbsp;">><<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">>

Неактивен

0    0    #39
09.05.2013 03:03

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

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

sosiskin написал:

А где задаётся количество строк в словопаде? Как сделать их меньше и, например, сам колодец уже? Я что-то в коде не могу врубиться, где это задаётся.

Количество строк - это число элементов списка $lstLines, задаётся в параграфе "Пуск2". Там где оператор цикла, мы 20 раз добавляем новый элемент в список.
Чтобы сузить "колодец" нужно поменять в строке
<<set $x = Math.round(Math.random() * (40 - $lstWords[$r].length))>>
число 40 на меньшее. Вообще $x - это число неразрывных пробелов, которые добавляются к слову справа или слева.

Неактивен

0    0    #40
09.05.2013 16:45

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

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

Можно сделать случайное число слов в строке. Как освобожусь немного, постараюсь набросать код.

Неактивен

0    0    #41
13.05.2013 10:18

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

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

Вета, в том примере так и сделано. Суть такова. На каждом параграфе-сцене, где есть описание, ты устанавливаешь значение переменной $loc равным названию параграфа. А ссылка "Главная" ведёт на служебный параграф "Обновить", который очищает экран и показывает параграф-сцену:

:: Обновить
<<clrscr>>
<<display $loc>>

Неактивен

0    0    #42
13.05.2013 10:29

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

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

DoubleDragon написал:

Можно, кстати, использовать системную переменную $$title, которая содержит имя текущего параграфа:

Код:

:: Обновить
<<clrscr>>
<<display $$title>>

Это так для обновления текущего параграфа. Но если Вета походит по вкладкам "Статус" и "Перемещения", а потом нажмёт "Главная":

===[[ГЛАВНАЯ|Обновить]] | [[СТАТУС|статус]] | [[ПЕРЕМЕЩЕНИЯ|перемещения]]===

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

Неактивен

1    0    #43
27.05.2013 14:00

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

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

В редакторе есть кнопочка "Тёмная тема". Наде её нажать.

Неактивен

0    0    #44
04.06.2013 13:13

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

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

Korwin написал:

В анонсе версии 2.0 прочел о возможности конвертации в ePub. Отсюда вопрос - какие требования к квесту предъявляются, чтобы его можно было конвертировать в данный формат? Только картинки и гиперссылки? Условия и объекты уже нельзя?

Насколько я знаю, будут разрешены макросы «display» и «br». Больше ничего нельзя, только текст, картинки и ссылки.

Неактивен

1    0    #45
18.06.2013 03:42

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

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

NekronMono написал:

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

Если речь идёт о кнопке "Отменить" в левом верхнем углу экрана (и макросе «back»), то избежать перегенерации комнаты можно, только воспользовавшись вариантом А от Ergistal-а. Вариант Б поможет при обычном повторном переходе в комнату, но от кнопки "Отменить" не спасёт.

Неактивен

0    0    #46
20.06.2013 13:05

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

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

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

Неактивен

0    0    #47
08.07.2013 23:05

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

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

Nabusan написал:

Если вопросы были отвечены, я спрошу еще раз, уж простите)


1. Я хочу, что бы игрок нашел предмет, но он мог поленится и не зайти. Дальше я делаю проверку с if, т.е есть предмет\нету предмета, но мне выдает ошибку. Уточните как правильно это сделать пжста

2. Я хочу, что бы игрок ввел свое имя с клавиатуры, как мне сделать так, что бы по ходу квесте, нпс к нему обращались и запомнили его имя

1. В начале игры пишем <<set $predmet = 0>> это будет означать, что предмета у гг нет. Там, где он его находит, пишем <<set $predmet = 1>> Тогда проверка наличия предмета:

Код:

<<if $predmet>>
Предмет есть.
<<else>>
Нет предмета.
<<endif>>

2. Например:

Код:

:: ВводИмени
Как звать-то тебя, дружище?
<<input 'Нпц' $name>>

:: Нпц
Ну привет, <<print $name>>!

А вообще советую посмотреть учебник в блоге "Гиперкниги", там про все это подробно писано. smile Например, в этой главе кроме всего прочего говорится, что делать, если игрок вздумает ввести имя капсом.

Неактивен

0    0    #48
09.07.2013 09:28

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

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

Nabusan написал:

Но вот ситуация:
в окне, герою нужно щелкнуть на обыск, не нажал-не нашел.
А у меня почему то все равно находит

Код:

Осталось послднее - Ваш Класс
Хотя, человечеческие закрома полны сюрпризов
[[+Обыскать закрома|Меч {$Меч=1}]]
 <<set $Меч = 1>>    <--- так вот поэтому и находит :)
[[-Воин|Воин]]
[[-Маг|Маг]]
[[-Вор|Вор]]

При построении страницы весь код параграфа выполняется последовательно и до конца. Т.е. когда вы видите на экране текст со ссылками, объект $меч уже равен 1. А вот присваивание значений в ссылках (в фигурных скобках) выполняется только при нажатии на ссылку.

Неактивен

0    0    #49
10.07.2013 15:36

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

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

plusova написал:

Приветствую, уважаемые!! Я новичок.
Пытаюсь сделать на платформе AXMA Story Maker интерактивный тренинг.
В тренинге есть задания, на которые пользователь может ответить письменно прямо в тексте, онлайн.
Подскажите как сделать, чтобы текст, который вводит пользователь сохранялся. И как реализовать возможность распечатки сохраненных пользователем результатов, отправки на e-mail

Добро пожаловать в сообщество Аксмавторов!
Значения всех объектов (в том числе и те, которые вводит пользователь) сохраняются при нажатии кнопки "Сохранить состояние" в Меню.
Распечатку можно реализовать средствами браузера, в котором будет проигрываться тренинг. Если вы будете использовать "Хром", то там, знаю, можно
распечатать в pdf-файл. А вот автоматическую отправку на почту, боюсь, реализовать невозможно. Если только кто-нибудь не подскажет нестандартное решение. smile

Неактивен

0    0    #50
10.07.2013 15:53

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

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

Нажатие, извините, чего? smile
Ссылку под окошком ввода никак не сделаешь, она всегда в определённом месте. Можно только сообщить пользователю про такую возможность. Вообще я говорю про сохранение значений между сеансами. Т.е. сохранение значений после закрытия браузера. А текущие значения объектов и так хранятся в памяти, их можно показывать макросом «print».

Неактивен

0    0    #51
10.07.2013 16:15

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

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

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

Неактивен

0    0    #52
10.07.2013 17:08

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

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

plusova написал:

Есть описание задания данное автором.

Под ним  окошко для ввода текста пользователем.

Задача 1: чтобы введенный пользователем текст сразу отображался на этой же странице и был виден пользователю (в принципе вы это объяснили, но я пока не разобралась как объект создать).

Задача 2: чтобы у меня была возможность посмотреть что написал пользователь

Создать объект можно при помощи макроса «set». Пример задачи 1:

Код:

:: Start   (<-- это название параграфа)
# Создаем объект «$ответ», изначально его значение равно пустой строке
<<set $ответ = "">>
[[Приступить к выполнению задания|Задание]]

:: Задание
Описание задания.
<<if $ответ eq "">>
     # Если ответа ещё не было, показываем текстовое поле ввода
     Введите ваш ответ:
     <<input "Задание" $ответ>>
<<else>>
     # Иначе показываем ответ пользователя
     Ваш ответ: <<print $ответ>>
<<endif>>

По поводу задачи 2, вы сможете посмотреть, что написал пользователь, только если будете сидеть рядом с пользователем и смотреть на его монитор. smile Наверно, вы хотели отправлять лог работы пользователя себе на e-mail? Если такая фича и будет реализована, не думаю, что это произойдёт скоро.

Неактивен

0    0    #53
10.07.2013 22:46

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

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

plusova написал:

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

А дайте посмотреть код вашей истории. Если не хотите светить текст заданий, можно в личку или замените всю секретную инфу.

Неактивен

0    0    #54
11.07.2013 09:45

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

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

Пока вы не зададите 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>>

Неактивен

0    0    #55
11.07.2013 09:51

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

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

Что же касается видеоуроков, то их делает Илья Богомолов, ссылки есть в соседней теме.

Также на сайте «Гиперкниги» есть специальный раздел помощи для авторов.

Неактивен

0    0    #56
16.07.2013 01:25

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

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

Alina написал:

Гайз, простите блондинковопрос, но я сейчас свихнусь. Что-то нажала, и пропала визуализация ссылок (белые стрелочки). Сейчас отображаются только ссылки, ведущие из активного параграфа (желтые стрелочки). Как вернуть белые стрелочки?

Смею предположить, вы только что создали сто первый параграф. Именно при таком числе параграфов (более сотни) визуализация стрелок-связей автоматически отключается. Но, возможно, разработчик пофиксит эту фичу в следующей версии программы.

Неактивен

0    0    #57
30.07.2013 23:02

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

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

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

как сделать условие на наименование  локации ... если тайтл=комната, то

$$title — системная переменная, в которой хранится название текущего параграфа. А игровая локация или сцена может состоять из нескольких параграфов, и наоборот, в один параграф можно запихнуть несколько локаций. Поэтому лучшим решением будет завести дополнительную переменную, в которой будет храниться название именно локации, сцены. Тут уж ты сможешь единолично контролировать изменение значения этой переменной. Т.е. в нужном месте сделаешь <<set $curloc = "комната">> и все условия будут работать.

В твоём примере подозреваю, что $$title всегда равно "инвентарь". Можно это проверить макросом print или в консоли.

Неактивен

0    0    #58
31.07.2013 13:26

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

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

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

Жаль, что в аксме нет резкого goto, чтобы сразу уходил на другой параграф, иногда бы пригодилось. smile

А как же последовательность макросов:
<<clrscr>>
<<display 'GoToLocation'>>

Единственное, тут уже будут нюансы с переменной $$title (она не поменяется) и с кнопкой "Отмена" (соответственно и с макросами back и return). Просто физически мы остаёмся на том же параграфе. А можно пример, для чего нужен оператор goto?

Ну и всплывающие подменю в ссылках, конечно. Хотя, может, с помощью явы скрипта их и можно как-то реализовать.

Меню по ссылке, как в куспе, конечно, пока нет, но можно сделать аналог. Задача какая? Я нажимаю ссылку и появляются несколько дополнительных действий. Верно? Попробуй как-то так:

Код:

:: локация
Вы в своей комнате. Тут есть [[*окно|меню {$объект = "окно"}]].

:: меню
<<if $объект eq "окно">>
    ----
    [[посмотреть в окно]]
    [[открыть окно]]
    [[выпрыгнуть из окна]]
<<endif>>

Неактивен

0    0    #59
31.07.2013 17:04

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

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

Так можешь попробовать в "Кодексе" сделать внутри условия вместо ссылки очистку экрана и следом display 'праздник'. smile Или в параграфе "праздник" первой строкой поставь очистку экрана.

Насчёт подменю, оно будет меняться при выборе разных предметов (при наличии у предметов каких-то действий). А убирать без последствий его можно при выборе того же самого предмета второй раз подряд: нажал предмет — появились действия, нажал ещё раз — исчезли. И экран не загромождается. smile Для этого просто надо будет запоминать последний выбранный предмет.

Неактивен

0    0    #60
07.08.2013 15:13

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

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

WeLLWar написал:

Помогите сделать боевую систему... думал сделать что-то типа поставить на рандом объект сила и если у персонажа есть меч он увеличает урон, а броня снижает получаемый урон, плюс удача, которая позволяет увернуться от удара, мастерство отбить и прочее. Вот только все это реализовать не получается я в АСМе ньюби:(

Попробую набросать пример поединка по предложенному техзаданию. smile

Неактивен

0    0    #61
11.08.2013 19:55

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

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

WeLLWar, не переживай, я про тебя не забыл! smile Уже доделываю демку, почти готово. Думаю, тебе понравится smile

Неактивен

0    0    #62
13.08.2013 18:29

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

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

А DD как всегда меня опередил smile
Ну в общем да. Там боевая система «Арена», а обсуждения боевых систем предлагаю перенести в эту тему.

Неактивен

0    0    #63
20.08.2013 09:32

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

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

Ergistal написал:

Вот такой код из двух параграфов.

Отличный пример! Я бы через <<loop>> делал smile

Неактивен

0    0    #64
20.08.2013 10:32

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

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

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!

Неактивен

0    0    #65
20.08.2013 15:05

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

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

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

Как можно в ссылке сделать переход на переменную?

<<if $сутки eq 1>>
__===''День [[(сменить)| {$сутки=2}$curloc]]''===__
<<else>>
__===''Ночь [[(сменить)| {$сутки=1}$curloc]]''===    __
<<endif>>

$curloc - переменная наименования локации задана в каждой локации.

напр.

#горы

<<set $curloc = 'горы'>>

-----------------------------

#лес

<<set $curloc = 'лес'>>

Я давно мечтаю про такую фичу))
Сейчас можно сделать таким образом:

Код:

:: горы
<<set $curloc = 'горы'>>
===''Ночь [[(сменить)|Переход {$сутки=1}]]''===

:: Переход
<<clrscr>>
<<display $curloc>>

Неактивен

0    0    #66
20.08.2013 16:33

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

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

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

А вообще такая фича планируется?
А то у меня внезапно игра на КРИЛ на Аксме без нее перекочует на кусп, ибо альтернативной замены я не вижу, чтобы не порушилась конструкция геймплея.

Итак, Вета пустила в ход мягкий шантаж, что же будет дальше? smile
Если не опасаешься, что я похищу твою идею для КРИЛа, можешь мне куда-нибудь в личку полный код игры показать. Так, по кусочку трудно сказать, где баг.

Неактивен

0    0    #67
21.08.2013 10:13

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

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

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

Морыч, ты можешь это для Драгона правильно сформулировать?

Попробовал сформулировать здесь. Посмотри и дополни при необходимости, а то ведь я написал, чего мне хочется. Вдруг, ты другое имела ввиду smile

Неактивен

0    0    #68
22.08.2013 16:01

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

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

Cheshire написал:

А можно как-нибудь отключить затухание/проявление текста при переходе? В определённых условиях очень мешает это «мигание».

Я у себя использую такую хитрость, как переход по добавляющей ссылке (с плюсом) и очистку экрана. При этом обязательно нужно передавать в ссылке параметр. Например:

Код:

:: Passage1
<<clrscr>>
===Text 1===
[[+Go to 2|Passage2 {$a = $a}]]

:: Passage2
<<clrscr>>
===Text 2===
[[+Go to 1|Passage1 {$a = $a}]]

Неактивен

0    0    #69
23.08.2013 10:00

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

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

arudzo написал:

Ребята подскажите как сделать раскрывыющеюся ссылку? Урок данный на этом форуме прочёл, сделал как там написано (наверное?) но ничего не получается! Может кто нибудь покажет код готовой ссылки для ознакомления? Спасибо!

Параграф с такой ссылкой выглядит следующим образом:

Код:

:: НазваниеПараграфа
<<clrscr>>
[[+Название ссылки|НазваниеПараграфа {$признак1 = !$признак1}]]<<if $признак1>> ▼<<br>>Содержимое, которое появляется или прячется при нажатии на ссылку. Может быть не только текст, но и картинки.<<else>> ►<<endif>>

А в параграфе «Start» обязательно нужно указать изначальное значение признака:

Код:

<<set $признак1 = false>>

Неактивен

0    0    #70
18.10.2013 13:50

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

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

romz написал:

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

[[текст ссылки|https://forum.ifiction.ru]]
так должно работать

Неактивен

0    0    #71
26.10.2013 11:18

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

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

Fahrengeit, ну если Max запостил тут вопрос, значит ему надо wink

Max, я увы не играл в "PRO Soccer Стань Легендой", но, например, можно так: команды некоторое число раз бегают то к одним воротам, то к другим - используем цикл со случайным числом повторений. А внутри цикла при помощи генератора случайных чисел проверяем, удалось ли команде добежать до ворот противника, удалось ли пробить по воротам, и, собственно, был ли гол. Затем то же самое для команды противника. Шанс того или иного события должен зависеть от уровня команды. Чтобы отметить действия отдельного игрока, в атаке проверяем, получил ли герой мяч или сделал голевую передачу и т.п. (опять при помощи рандома). Чтобы описать алгоритм подробней, нужно хорошо разбираться в футболе, а не как я. smile

Неактивен

0    0    #72
29.10.2013 10:41

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

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

Max написал:

Я совершенно случайно наткнулся на AXMA Story Maker, и мне кажется в этой проге возможно хоть как-то реализовать задуманное.

Конечно, возможно! smile Самое главное, представлять, что ты хочешь видеть на экране, а как это сделать — будем разбираться, тем более, если мечта wink

Я сначала подумал, что ты хочешь получить сгенерированное описание всего матча, а не только его результатов. И, возможно, генерировать весь матч было бы интереснее, особенно, если в процессе матча можно управлять героем: самому вдарить по воротам, отдать пас или прислушаться, что орёт тренер.

Ну а результаты матча в простейшем случае можно сделать так:

Код:

<<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 и посмотри, как меняются результаты матчей.

Неактивен

0    0    #73
29.10.2013 12:14

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

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

alfa10 написал:

У меня отображается только название диалога - Параграф-диалог и все. Что не правильно делаю?

Думаю, что не определена переменная $диалог_персонаж. Перед тем как вызывать параграф-диалог нужно задать начальное значение переменной:
<<set $диалог_персонаж = 1>>

А зачем параграф вызывается сам из себя (<<display 'Параграф-диалог'>>)?

Неактивен

0    0    #74
29.10.2013 12:17

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

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

Oldrik написал:

О, уже ответили.

А зачем ты удалил свой пример? smile У тебя ведь там было как раз про то, как сделать показатели гг-футболиста, а у меня в примере только общий счёт.

Неактивен

0    0    #75
29.10.2013 12:28

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

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

<<set $диалог_персонаж = 1>> нужно написать не в параграфе-диалоге, а в самом начале истории, в параграфе "Start".

Неактивен

0    0    #76
29.10.2013 12:38

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

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

alfa10 написал:

Точняк! Все заработало! Спасибо тебе, дружище!

Обращайся! smile

alfa10 написал:

Дык вот это именно пример из обучения.

Я вот заглянул в учебник, и там на самом деле <<display 'Заголовок'>> wink

Неактивен

0    0    #77
29.10.2013 22:39

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

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

alfa10 написал:

Ребят, такой вопрос: создаю книгу, вставляю в нею фотки. Потом сохраняю книгу в файл HTML. На другом компьютере запускаю этот сохраненный файл - а фоток нет. Как делать так, чтобы фотографии были в книге, даже если я смотрю файл на другом компьютере? Например, вот напишу я книгу, захочу ее сохранить в файл и отослать друзьям - а фотки получается, пропадут?

Картинки не встраиваются в html-файл, там только изображения кнопок. Если ты добавляешь картинки пунктом меню "Выбрать локальный файл", они копируются в папку files рядом с sm-файлом. Соответственно отсылай друзьям ещё и папку files вместе с html-файлом. Для пересылки по почте можно всё предварительно упаковать в архив.

Неактивен

0    0    #78
30.10.2013 00:33

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

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

alfa10 написал:

Получается только так? А если публиковать книгу из программы в библиотеку - тогда все нормально пропишется и фотографии останутся?

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

alfa10 написал:

И еще вопрос - почему то вставляю музыку, а она не играется на странице, хотя значок динамика отображается на странице. Код такого вида вставляю:

Код:

[[File: files/Scooter - Fire.mp3]]

А какой браузер ты используешь, случайно не Оперу? Для неё нужен звуковой файл с таким же именем, но в формате ogg. Если вставляешь музыку в игру, придётся каждый звуковой файл в двух форматах рядышком класть mp3 и ogg, чтобы у всех проигрывалась музыка независимо от браузера.

Неактивен

0    0    #79
30.10.2013 15:54

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

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

Max написал:

что означает объект и рядом с ним []. например - $match[3]

Это означает, что объект $match является списком (одномерным массивом), а $match[3] - это элемент списка с индексом 3. Как верно подметил Flash, можно почитать в руководстве пользователя про списки.
Вообще мне кажется, в примере Oldrik'а можно вполне обойтись без списков, заменив их на простые объекты. Например, вместо $match[3] --> $сколькоЗабилГГ

Неактивен

0    0    #80
30.10.2013 15:59

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

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

alfa10 написал:

Flash написал:

alfa10,  эта строчка ничего не делает. Переменная приравнивпется сама себе.

а как тогда сделать, чтобы в текущем параграфе переменная брала то значение, которое она имела до этого параграфа? Может так тогда?

Код:

<<set $удача1 = $удача>>

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

Неактивен

0    0    #81
31.10.2013 10:54

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

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

alfa10 написал:

Теперь вопрос - а как сделать так, чтобы мелодии игрались по-очереди по ходу книги?

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

Неактивен

0    0    #82
31.10.2013 11:04

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

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

alfa10 написал:

А что означает gte ? Значение "больше"?

gte = Greater Than or Equals - больше либо равно. Лучше используй в макросах if именно такие, буквенные операторы.

alfa10 написал:

Как можно сделать так, чтобы при значении параметра $жизнь - 0 бой заканчивался?

Ещё один макрос if. Попробуй так:

<<if $жизнь lte 0>> (меньше либо равно)
<<goto 'ГеймОвер'>> (переход на другой параграф)
<<endif>>

Неактивен

0    0    #83
31.10.2013 12:02

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

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

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

Лучше зацикливать так, на ссылках, чтобы у игрока создавалось ощущение, что он на что-то влияет.

Неактивен

0    0    #84
31.10.2013 15:07

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

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

alfa10 написал:

Спасибо тебе большое! очень сильно помогаешь мне smile И всем вам ребята - большое спасибо

Пожалуйста smile

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 - очень хорошая вещь, рекомендую! wink

Неактивен

0    0    #85
01.11.2013 10:12

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

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

NeoMatrix777 написал:

Господа, а есть ли возможность на этом движке запилить рогалик? Я в программирование не силен, поэтому у меня даже нет особых идей по алгоритму передвижения героя-символа по пустому полю.

Ну а что, списки и циклы есть, моноширинный шрифт есть - значит теоретически возможно smile Только карта будет монохромной, разве что некоторые объекты на карте будут ссылками. Ещё один нюанс: на мелких экранах мобильных устройств карта может отображаться неверно из-за переносов строк (но в меню можно попробовать изменить размер шрифта). А идея алгоритма передвижения проста: у героя есть координаты X и Y. Если герой идёт на север или юг, изменяем вертикальную координату, на запад или восток - горизонтальную. Заодно с изменением координаты проверяем границы окна и карты, наличие на пути непроходимых объектов, затем перерисовываем карту.

Неактивен

0    0    #86
01.11.2013 17:24

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

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

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

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

Неактивен

0    0    #87
02.11.2013 17:03

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

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

Max написал:

тогда каждый раз выбирая команду, нужно в ручную прописывать влияние Ат, Защ, Мор на СИЛУ???

Морыч категорически одобряет параметр "Мор" smile
Вручную не надо, формула же будет. Только нужно определиться с диапазоном изменения Атк, Защ и Мор. Например, от 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%, оставшиеся проценты - шанс критической неудачи. То же самое и с критическим успехом при наихудшем раскладе.

Неактивен

0    0    #88
02.11.2013 17:22

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

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

NeoMatrix777 написал:

То, что требуется система координат - достаточно естественно. Однако каким более конкретным образом она пилиться? Я вот думал как-нибудь через массивы, но чего-то ни к чему толковому не пришел...

Через массивы, всё верно, массивы строк. Например, в цикле вывести все строки массива карты до координаты Y гг. Затем выводим часть строки до координаты X, рисуем @ (гг), выводим оставшуюся часть строки, затем выводим оставшиеся строки карты.

Неактивен

0    0    #89
05.11.2013 10:18

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

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

alfa10 написал:

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

Давай попробуем разобраться, но сначала небольшая работа над ошибками smile Читай закомментированные строки (после символа #)

Код:

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

Неактивен

0    0    #90
14.11.2013 11:58

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

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

alfa10 написал:

Спасибо! Еще б расшифровал бы код - вообще круто было бы smile

Этот код разбивает введённую строку $адрес на две строки: $улица и $дом. Разделение строк происходит в цикле посимвольно: до запятой - собирается название улицы, после запятой - номер дома.

Есть другой способ сделать то же самое:

Код:

:: 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 $дом>>;

Неактивен

0    0    #91
15.11.2013 09:50

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

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

Отличный баг выловил! Спасибо!

Неактивен

0    0    #92
17.01.2014 14:19

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

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

Прикольно smile Может ты ещё что-нибудь сделал из ToDo незаметно для себя, а никто кроме Flash'а и не знает? smile

Неактивен

0    0    #93
01.02.2014 02:14

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

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

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

Неактивен

0    0    #94
03.02.2014 15:50

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

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

Из учебника:

В самом начале истории мы создадим объект «$селение», в котором будем запоминать номер описания сцены «Старое селение». Первоначально значение объекта «$селение» будет равно 1.

Т.е. в параграфе Start нужно написать:
<<set $селение = 1>>
Этой командой мы явно задаём начальное значение объекта. Если этого не сделать, значение объекта будет неопределённым (undefinied).
В учебнике все начальные значения объектов задаются в специальном параграфе "Создание объектов", который вызывается во вступлении. Смотрите главу "Инициализация объектов" в четвёртой части.

Неактивен

0    0    #95
07.02.2014 09:43

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

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

Собственно, дело именно в этом. Если копировать из редактора, то не выходит, а если открыть файл sm в блокноте и скопировать оттуда, то все отлично.
(В окошке онлайн конструктора так и написано: скопируйте исходный текст из файла *.sm)

Неактивен

1    0    #96
13.02.2014 10:36

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

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

Привет! Просить прощения не нужно, это специальная тема для вопросов и ответов smile Программа работает совсем не странно, а вполне себе логично. Параграф «Установка объектов» выполнился один раз и всё. Чтобы какой-то код выполнился ещё раз, соответствующий параграф нужно вызвать (макросом <<display>>, <<goto>> или перейти в параграф по ссылке). Предлагаю перенести проверку профессии в новый параграф «Увеличение возраста», и написать там так:

Код:

<<set $время = $время + 1>>
<<If $кузнец>>
    <<set $сила = $сила + 1>>
<<elseIf $библиотекарь>>
    <<set $интеллект = $интеллект + 1>>
<<endIf>>
<<goto 'Основной параграф'>>

Конечно же из параграфа «Установки объектов» этот кусок кода надо убрать, т.к. ни одна из проверок там не работает (и $кузнец и $библиотекарь = false).

А в «Основном параграфе» внизу напишем так:
[[Повзрослеть|Увеличение возраста]]

П.С. И ещё один момент, относящийся к стилю программирования. Если мы проверяем логическую переменную на истинность, то пишем просто <<if $объект>>, если на ложность, то <<if not $объект>> или <<if !$объект>>.

Неактивен

0    0    #97
13.02.2014 11:25

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

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

Нене, я про проверку значения объектов, которые используются для хранения исключительно true либо false. В остальных случаях лучше использовать eq, чтобы код легче читался.

Неактивен

0    0    #98
13.02.2014 12:29

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

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

Пожалуйста! Обращайтесь, если что smile

Неактивен

0    0    #99
24.02.2014 10:07

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

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

Вета, прошу прощения за поздний ответ, праздники, сама понимаешь. Собственно вот:

Код:

:: Start
[[Старт|параграф 1]]

:: параграф 1
<<display 'инт'>>
Текст, текст, текст...
[[Идти в 2|параграф 2]]

:: параграф 2
<<display 'инт'>>
Текст 2, текст 2, текст 2...
[[Идти в 1|параграф 1]]

:: инвентарь
<<display 'инт'>>
Список предметов...

:: инт
<<if $$title neq "инвентарь">>
    ===Главная || [[Инвентарь|инвентарь {$passage = $$title}]]===
<<else>>
    ===[[Главная|$passage]] || Инвентарь===
<<endif>>

Неактивен

0    0    #100
24.02.2014 13:55

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

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

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

И еще, как мне в инвентаре сделать проверку такого вида:

предмет - НИТКИ (ссылка)

Щелкаем по ниткам.

Если локация=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>>

Неактивен

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-й версии ссылка просто нажимается без какой-либо реакции.

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

Неактивен

0    0    #126
31.12.2014 00:50

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

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

alfa10 написал:

Ребята, задумал сделать интерактивную игру про биатлон smile Пока не могу понять следующий момент как реализовать: спортсмены бегут спринт, у каждого свое время, финишируют, им присваивается их результат (время) - тут все понятно как делается, но... как сделать так, чтобы после финиша программа считала, у кого из спортсменов результат лучше, у кого хуже? Например, спортсмен А прошел трассу за 5 минут 10 секунд, спортсмен Б - за 5 минут 14 секунд, спортсмен В - за 4 минуты 59 секунд. Должно быть на финише так - первым будет В, вторым А, третьим - Б.  Как сделать, чтобы программа считала места по результатам?

Можно, например, так:

Код:

:: biatlon
<<set $name = ["Alex", "Bob", "Carl"]>>
<<set $time = [0, 0, 0]>>
<<set $place = []>>

<<set $i = 0>>
<<loop $time.length>>
    <<random $min = 2>>
    <<set $min = $min + 4>>
    <<random $sek = 59>>
    <<if $sek lt 10>>
        <<set $sek = "0" + $sek>>
    <<endif>>
    <<set $time[$i] = $min + ":" + $sek>>
    <<set $place.push($time[$i] + "|" + $name[$i])>>
    <<set $i++>>
<<endloop>>

<<set $place = $place.sort()>>

Results:
<<set $i = 0>>
<<loop $place.length>>
    <<set $position = $place[$i].split('|')>>
    <<print ($i + 1)>> - <<print $position[1]>> (<<print $position[0]>>)
    <<set $i++>>
<<endloop>>

[[Repeat|biatlon]]

Суть в том, что мы заносим время вместе с именами спортсменов в новый массив, который затем сортируем. Поскольку элементы этого массива начинаются с времени, он сортируется в порядке возрастания времени. Программа не учитывает случай, если спортсмены показали одинаковый результат. Не знаю, бывает ли такое в биатлоне.

Неактивен

0    0    #127
31.12.2014 15:07

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

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

alfa10 написал:

Morych, а можно расшифровку? Результаты будут заноситься не рандомные. Одинаковых результатов не будет, так что все норм.

Не пойму, что означает в коде параметр "i" и "$place.push".

И вот эта часть кода не ясна мне:

<<loop $place.length>>

    <<set $position = $place[$i].split('|')>>

    <<print ($i + 1)>> - <<print $position[1]>> (<<print $position[0]>>)

    <<set $i++>>

<<endloop>>

Давай попробуем разобраться. параметр $i - это просто переменная-счётчик, при помощи которой мы перебираем все индексы массива. От 0 до 2 в нашем случае, но в общем случае число элементов массива нам не известно, поэтому используем цикл и переменную $i.

При помощи $place.push мы заносим в массив новые элементы.

Теперь часть кода:

<<loop $place.length>> --- цикл, повторяющийся столько раз, сколько элементов в массиве $place.

    <<set $position = $place[$i].split('|')>> --- берём i-й элемент массива $place (это будет строка вида "5:09|Имя спортсмена") разделяем эту строку при помощи метода split по символу "|" и получаем массив из двух строк - отдельно время, отдельно имя биатлониста. Массив этот заносится в переменную $position.

    <<print ($i + 1)>> - <<print $position[1]>> (<<print $position[0]>>) --- выводим на экран номер места, затем имя спортсмена (первый элемент массива $position) и в скобках его время (нулевой элемент массива $position).

    <<set $i++>> --- увеличиваем переменную-счётчик на 1, чтобы перейти к следующему элементу массива $place при следующем повторении цикла.

<<endloop>> --- конец цикла.

Спрашивай ещё, если что! smile

Неактивен

0    0    #128
31.12.2014 15:56

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

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

Всё то же самое, как и со временем, только вместо времени добавляем в массив $place счётчики ходов вместе с именами:

<<set $place = []>> --- создадим новый массив

<<set $place.push($счетчик_хода_имя + "|" + $имя)>> --- добавили в массив счетчик ходов и имя первого спортсмена (значения разделены символом "|")

<<set $place.push($счетчик_хода_имя1 + "|" + $имя1)>> --- добавили в массив счетчик ходов и имя второго спортсмена

<<set $place = $place.sort()>> --- отсортировали массив

Теперь в массиве $place спортсмены расположены по возрастанию значений их ходов: нулевой элемент - первое место, первый элемент - второе место и так далее. Чтобы всё работало правильно, нужно перед занесением значений в массив $place убедиться, что число символов для параметра сортировки у всех спортсменов будет одинаково. Т.е. если число ходов может быть от 10 до 99 - все хорошо, но если число ходов может быть 100 и больше, то и все прочие счетчики ходов нужно дополнить до трёх символов: 064, 070, 125.

Неактивен

0    0    #129
01.01.2015 14:00

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

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

А соперников будет только двое?

Неактивен

0    0    #130
01.01.2015 21:57

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

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

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

Неактивен

0    0    #131
03.01.2015 21:40

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

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

alfa10 написал:

Будет, скажем 12 сборных, в каждой по 6 спортсменов. Итого - 72 спортсмена. Сперва все бегут спринт (то есть, тут все ходят по очереди, кто затратил на прохождение трассы меньше всего времени - тот победитель. Далее все бегут преследование. Тут разница (отставание от победителя спринта) ходов должна записываться в переменную длины пройденной трассы. То есть, если Петя в спринте был лучше Васи, и прошел за 64 хода трассу, а Вася за 70, то в преследовании Петя должен при старте иметь показатель <<$длина_пройденной_трассы_Петя = $длина_пройденной_трассы_Петя + 6>>. То есть, он раньше на 6 ходов, чем Вася стартанул в гонке. При чем, вместо "6" должна наверное быть некая переменная, типа <<$отставание_от_первого_места_в_спринте>>, которая на финише спринта формировала бы сразу разницу отставаний между местами автоматом.

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

<<set $ходы_спринт = [64, 70, ... 60]>> (итого в массиве 72 элемента)

Найдем число ходов лидера спринта (минимальное число ходов):

<<set $ходы_лидера = $ходы_спринт.sort()[0]>> --- сортируем массив и берем первый элемент отсортированного массива - минимальное значение

Перед началом преследования:

<<set $ходы_преследование = [0, 0, ... 0]>> --- число ходов, которые спортсмены затратят на прохождение гонки-преследования

и увеличим число ходов в зависимости от результата в спринте:

<<set $i = 0>>

<<loop $ходы_преследование.length>>
<<set $ходы_преследование[$i] = $ходы_спринт[$i] - $ходы_лидера>>
<<set $i++>>
<<endloop>>

теперь перед началом преследования у каждого спортсмена уже установлено стартовое число ходов, а у лидера спринта это число будет = 0.
Это то, что было нужно? smile

Неактивен

0    0    #132
03.01.2015 22:56

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

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

alfa10 написал:

<<set $ходы_спринт = [64, 70, ... 60]>> (итого в массиве 72 элемента)

А как система поймет, кто за сколько ходов прошел спринт? Я так понимаю, в массиве уже конкретные результаты тут указаны?

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

alfa10 написал:

теперь перед началом преследования у каждого спортсмена уже установлено стартовое число ходов, а у лидера спринта это число будет = 0.

Так у лидера наоборот, должен быть бонус перед другими, он же раньше второго номера уйдет на трассу на n-ходов.

Нам нужно определиться, что считать результатом. Если число затраченных ходов, как в спринте, то минимальное значение ходов будет лучшим результатом. Поэтому стартовое значение = 0 - это и есть самый лучший бонус, т.е. лидер стартует сразу, без ожидания. А тот, кто отстал от лидера в спринте на 10 ходов, и у кого значит стартовое значение ходов = 10 - тот, получается, как бы ждет 10 ходов прежде чем начать преследование.

Неактивен

0    0    #133
03.01.2015 22:58

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

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

alfa10 написал:

Вот получил такой вот результат при таком вот коде. Места определились некорректно!

Это как раз тот случай, о котором я говорил в этом сообщении. В массив для сортировки нужно заносить не "4", а "04"!

Неактивен

0    0    #134
04.01.2015 01:42

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

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

Если число ходов не может быть больше 999, то вместо:

<<set $place.push($счетчик_хода_имя + "|" + $имя)>>

Делаем так:

<<if $счетчик_хода_имя lt 10>>

<<set $place.push("00" + $счетчик_хода_имя + "|" + $имя)>> --- если значение ходов от 0 до 9, добавляем "00" к счетчику ходов

<<elseif $счетчик_хода_имя lt 100>>

<<set $place.push("0" + $счетчик_хода_имя + "|" + $имя)>> --- иначе, если значение ходов от 10 до 99, добавляем "0"

<<else>>

<<set $place.push($счетчик_хода_имя + "|" + $имя)>> --- иначе, если значение ходов больше либо равно 100, ничего не добавляем

<<endif>>

Таким образом число ходов всегда будет состоять из 3 символов, и мы будем сортировать такие значения:

"064|Вася"
"008|Петя"
"256|Ваня"

Неактивен

0    0    #135
04.01.2015 12:55

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

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

Да, тут надо использовать цикл и массивы. И не забыть про переменную $i

<<set $i = 0>>

<<loop 72>>

    <<if $счетчик_хода[$i] lt 10>>

        <<set $place.push("00" + $счетчик_хода[$i] + "|" + $имя[$i])>>

    <<elseif $счетчик_хода[$i] lt 100>>

        <<set $place.push("0" + $счетчик_хода[$i] + "|" + $имя[$i])>>

    <<else>>

        <<set $place.push($счетчик_хода[$i] + "|" + $имя[$i])>>

    <<endif>>

    <<set $i++>>

<<endloop>>

Неактивен

0    0    #136
04.01.2015 23:30

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

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

alfa10 написал:

Morych, а посмотри плиз мой сейв. Как тут код можно упростить?

Посмотрел и все переписал wink


Прикрепленные файлы:
Biatlon.sm, Размер: 2,541 байт, Скачано: 475

Неактивен

0    0    #137
05.01.2015 13:08

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

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

alfa10 написал:

Еще вопрос по другому моему проекту. Нужно сделать жеребьевку команд в турнирной сетке. Сперва будет 32 команды. Отсюда вопросы:
1) как сделать жеребьевку команд в турнирной сетке (1/32 финала)? Команды не должны повторяться
2) как сделать рандомные результаты матчей между соперниками? Более сильные команды должны иметь бонус при расчете результатов перед более слабыми командами.
3) как вывести из дальнейшей жеребьевки (1/16 финала) проигравшие команды?

Нечто похожее - рандомная выборка неповторяющихся элементов - есть в этой части учебника. Можно там пример кода глянуть. Делается при помощи массива и его метода splice:
- загоняем все 32 команды в общий массив;
- в цикле получаем рандомный индекс массива (рандом по длине);
- методом splice вырезаем этот рандомный элемент из общего массива.
На следующем шаге цикла рандом будет выбирать уже только из оставшихся команд.

Неактивен

0    0    #138
05.01.2015 14:26

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

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

alfa10 написал:

а как работать с таблицами можно? Можно где-нибудь примеры посмотреть?

Все есть в руководстве пользователя:

<<row 'Заголовок таблицы'>>
<<row 'Столбец 1' 'Столбец 2'>>
<<row 'Столбец 1' 'Столбец 2' noborder>>

Неактивен

0    0    #139
06.01.2015 20:20

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

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

alfa10 написал:

А как сделать сортировку наоборот, чтобы первым был тот, у кого больше всего очков?

Вместо
<<set $place = $place.sort()>>

Нужно написать
<<set $place = $place.sort().reverse()>>

Элементы массива будут отсортированы по убыванию.

Неактивен

0    0    #140
06.01.2015 22:17

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

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

Полезное замечание! Правда, применительно к биатлону такая сортировка не подходит, поскольку в массиве у нас не просто числа, а еще какая-то дополнительная информация, отделенная условным символом. Это может быть имя или индекс спортсмена. После сортировки нам нельзя потерять связь между числовым параметром и самим спортсменом. А поскольку сортируются строки, в числовом параметре мы добавляем нули вместо отсутствующих разрядов. Ничего лучше я не придумал. Может, есть более красивый способ?

Неактивен

0    0    #141
12.01.2015 15:22

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

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

alfa10 написал:

Такой еще вопрос: создал в начале игры массив <<set $имя = []>>. Также в начале игры называю своего спортсмена <<input '' $имя0>>. Как значение $имя0 вписать в массив?

<<set $имя.push($имя0)>>

Неактивен

0    0    #142
12.01.2015 15:46

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

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

alfa10 написал:

Можно ли, имея разные переменные, например (результат1, результат2, результат3, результат4), объединить их в массив, и сделать сортировку этого массива так, чтобы результаты с наименьшим числовым значением выводились выше, чем результаты с большим числовым значением?

Например:

Результат1 - 50 ходов
Результат2 - 75 ходов
Результат3 - 28 ходов
Результат4 - 52 хода

Выводится так:

1 место - Результат3 - 28 ходов
2 место - Результат1 - 50 ходов
3 место - Результат4 - 52 хода
4 место - Результат2 - 75 ходов

Это мы уже проходили wink

Код:

<<set $результат1 = 50>>
<<set $результат2 = 75>>
<<set $результат3 = 28>>
<<set $результат4 = 52>>

<<set $места = []>>

<<set $места.push($результат1 + "|Результат1")>>
<<set $места.push($результат2 + "|Результат2")>>
<<set $места.push($результат3 + "|Результат3")>>
<<set $места.push($результат4 + "|Результат4")>>

<<set $места = $места.sort()>>

<<set $номер = 0>>
<<loop $места.length>>
<<set $результат = $места[$номер].split("|")>>
<<set $место = $номер + 1>>
<<print $место>> место - <<print $результат[1]>> - <<print $результат[0]>> ходов
<<set $номер++>>
<<endloop>>

А чтобы в зависимости от числа выводить "ход", "хода" или "ходов", смотри эту заметку.

Неактивен

0    0    #143
12.01.2015 15:53

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

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

alfa10 написал:

Парни, сел окончательно с игрой. Совершенно не пойму с просчетом гонок. Нужно вводить по идее очень много параметров: ведь, кто-то может бежать дистанцию, а кто то в это время стрелять. Как это сделать, мне не понятно! Хочу спросить, может кто-то сможет мне помочь в реализации игры по моим консультациям? В знак благодарности, я готов буду оплатить Вашу помощь. Не крупно конечно, но пару тысяч выделить смогу.

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

Неактивен

0    0    #144
12.01.2015 23:08

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

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

Кстати, alfa10, когда появится поддержка функции sort(*), можно попробовать добавлять в массив без дополнительных нулей, но через точку, а не через вертикальную линию. Т.е. так:

<<set $place.push($счетчик_хода0[$i] + "." + $i)>>

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

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

Неактивен

0    0    #145
17.01.2015 11:22

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

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

alfa10 написал:

По идее, эта часть кода

Код:

<<if $счетчик_хода0[$i] lt 0>>
<<goto 'Результаты Гонки-1'>>
<<endif>>

говорит нам о том, что если значение меньше нуля, то переходим к другому параграфу, но почему то работает это вот так (указано на скриншоте). Почему появляется кнопка "далее", которой нет в параграфе "Результаты Гонки-1", но есть в параграфе с тем куском кода. И при нажатии на эту кнопку продолжается тот параграф?!

Макрос goto хоть и очищает экран, выводя содержимое нового параграфа, но не прерывает выполнение текущего параграфа! Поэтому использовать его нужно осторожно, убедившись, что в текущем параграфе после goto ничего выведено не будет.

В нашем случае по идее нужно сделать так:

Код:

<<set $нужен_переход = false>>

<<loop ...>>
   <<if $счетчик_хода0[$i] lt 0>>
      <<set $нужен_переход = true>>
      <<break>>  --- выходим из цикла!
   <<endif>>
   ...
<<endloop>>

<<if $нужен_переход>>
   <<goto 'Результаты Гонки-1'>>
<<else>>
   ...
   А здесь выполняется оставшаяся часть текущего параграфа!
   ...
<<endif>> --- после этой строки больше ничего не должно быть!

Неактивен

0    0    #146
10.04.2015 13:47

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

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

Здравствуйте! Я хоть и не DoubleDragon, но вижу, что здесь чего-то не хватает:

<<if $month eq 13>>
    <<set $month = 1>>
    <<set $year = $year + >>
<<endif>>

Неактивен

0    0    #147
10.04.2015 22:41

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

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

Сергей Соловьев написал:

Спасибо огромное! Модуль заработал.
И сразу появился еще один вопрос..
Прописал 2 тестовые ссылки в заголовок
[[*Подождать 15 минут| календарь {$мин = $мин + 15}]] | [[*Подождать 1 час| календарь {$мин = $мин + 60}]]
Календарь работает, но данные в текущем времени обновляются только при переходе в другой параграф. Есть ли возможность обновлять данные без перехода между параграфами?

Я думаю, тут речь идет не об обновлении в реальном времени. Если так, то макрос <<repeat>> не нужен.
Просто поменяйте в ссылке целевой параграф на параграф с текущей локацией:

[[Подождать 15 минут| квартира {$мин = $мин + 15}]] (и ссылка нужна обычная, а не многоразовая)

Параграф "календарь" судя по коду и так вызовется в заголовке.

Неактивен

0    0    #148
22.06.2015 12:54

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

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

Ну зачем же сразу удалять. Может, у кого похожий вопрос возникнет.

Неактивен

0    0    #149
10.10.2015 22:22

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

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

Константин Шарыкин написал:

И когда я прописываю такой код:

Код:

<<repeat 'Антивирусы' 15>>
<<stop 'Антивирусы' >>

То не отображает ничего. Вообще. Даже через 15 сек.

Ну все же логично, ничего отображать и не должно. Ты же запускаешь таймер и тут же его останавливаешь, он просто не успевает сработать. Если нужно, чтобы параграф "Антивирусы" отработал только один раз через 15 секунд после запуска таймера, макрос <<stop 'Антивирусы'>> нужно перенести в сам параграф "Антивирусы". Через 15 секунд он выполнится и сам же остановит таймер.

Неактивен

0    0    #150
10.10.2015 23:15

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

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

Константин Шарыкин написал:

Код:

.body {
 background-image: url(https://yadi.sk/i/2dvr2OurgPdDY);
 background-color: #c7b39b;
 }

Кстати говоря, у меня background не показывает

DoubleDragon уже ответил: в url() нужно просто запихнуть ссылку на саму картинку, а не на веб-страницу. В данном случае на странице https://yadi.sk/i/2dvr2OurgPdDY кликаем на картинку, она открывается в новом окне, и там в адресной строке мы берем ссылку на картинку:

 спойлер…

Помещаем всю эту страшную ссылку в url(), и фон появится. Только в версии Асм 4+ селектор должен быть не .body, а #body.

Неактивен

0    0    #151
13.10.2015 15:35

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

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

Константин Шарыкин написал:

Хочу допустим чтобы персонаж за определенное время, нашел смартфон!
Как это сделать? Можно случай с ходами!

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

Код:

<<set $turn = 0>>

Каждое действие в игре увеличивает значение этой переменной. Ну, например, гг находится в комнате и должен найти смартфон:

Код:

:: Комната

<<if $turn eq 0>>
Внезапно вы слышите где-то неподалеку урчание вибрирующего смартфона. Это, наверняка, очень важный звонок!
<<elseif $turn lt 10>>
Пусто. Смартфон тем временем продолжает звонить...
<<else>>
Все, смартфон замолк - вы понимаете, что это конец.
<<endif>>

<<if $turn lt 10>>
[[Глянуть под кроватью|Комната {$turn = $turn + 1}]]
[[Порыться в мусорном ведре|Комната {$turn = $turn + 6}]]
[[Проверить задний карман|Смартфон найден]]
[[Передохнуть|Комната {$turn = $turn + 3}]]
<<endif>>

Неактивен

Powered by PunBB
© copyright 2001–2022 iFiction.Ru