std.prog: INSTEAD программирование


1 2 3
Reply to: zAJzWG3RvM0wVtbsy6Ol
From: Wol4ik (syscall,22) 10.08.17 07:43 UTC
To: Wol4ik
Subject: Re: Очистка всего и вся, полный рестарт игры
p.s. выкладывал только что код с красивым разбиением и отступами как ты советовал, но в сообщении все отступы с'елись и все ушло влево. (Редактирую и пишу на планшете, редактор Jota++).

Reply to: vnTRmTzelONzTwhWc19X
From: Andrew Lobanov (tavern,1) 10.08.17 09:27 UTC
To: Wol4ik
Subject: Re: Очистка всего и вся, полный рестарт игры
Wol4ik> p.s. выкладывал только что код с красивым разбиением и отступами как ты советовал, но в сообщении все отступы с'елись и все ушло влево. (Редактирую и пишу на планшете, редактор Jota++).

Потому что код должен обрамляться строками, состоящими из "====", а не "--".

Reply to: cVcCeW4hNY0sX0wHluwa
From: Wol4ik (syscall,22) 10.08.17 15:03 UTC
To: Andrew Lobanov
Subject: Re: Очистка всего и вся, полный рестарт игры
Peter> А так, смотри сам. При вставке кода используй 4 символа =, примерно так:

====

Да, спасибо, теперь понял. Пётр говорил, но я тогда не так понял (что это именно про вставку в сообщение). Буду знать. Может шпаргалку повесить? И про спойлеры в game. например тоже, а то сообщения рано или поздно утопятся новыми и кто не в курсе опять будет спрашивать одно и тоже. Вообще, я рад здесь находиться, и поучаствую материально по силам.

Reply to: HK6rYNqbubSPVSHeq8qo
From: Peter (syscall,1) 10.08.17 16:31 UTC
To: Wol4ik
Subject: Re: Очистка всего и вся, полный рестарт игры
> Может шпаргалку повесить?
А как ты сюда пишешь? У меня прямо под кнопкой отправить целый раздел ПОМОЩЬ.

====
Ну и снова не правильно.
====

Reply to: FAXUctsLFNgjmwcIqa0s
From: Wol4ik (syscall,22) 10.08.17 16:54 UTC
To: Peter
Subject: Re: Очистка всего и вся, полный рестарт игры
Пишу ответить (символ повернутой стрелочки) или новое сообщение. У меня мобильная версия.

Reply to: h61qllycX6sBaaZsH2a2
From: Wol4ik (syscall,22) 10.08.17 16:56 UTC
To: Wol4ik
Subject: Re: Очистка всего и вся, полный рестарт игры
P.S. Ааааа. Вижу. При создании нового сообщения внизу справка, я ее просто не видел, так как не прокручивал вниз, а просто писал в окне ввода. Прошу прощения за невнимательность.

Reply to: h61qllycX6sBaaZsH2a2
From: Peter (syscall,1) 10.08.17 16:57 UTC
To: Wol4ik
Subject: Re: Очистка всего и вся, полный рестарт игры
> Пишу ответить (символ повернутой стрелочки) или новое сообщение.
Вот проскроллируй вниз до самого конца. На странице, где пишешь текст. Там подсказка.

From: Peter (syscall,1) 12.08.17 13:39 UTC
To: All
Subject: События точскрина в INSTEAD
Обновил демку модуля finger. Находится демка тут:
https://github.com/gl00my/stead3/tree/master/tests /fingers

Если что, спрашивайте.
Обычно модуль не нужен, так как нажатия на экран ловятся и модулем click, но для аркад и поддержки одновременного нажатия на экран в нескольких местах -- пригодится модуль finger.

From: Wol4ik (syscall,22) 15.08.17 15:38 UTC
To: All
Subject: Синтаксис работы с way
Вопрос про то, как кодом добавлять и убирать со сцены переходы в зависимости от условий. Вот есть прямое добавление в инвентарь предмета
====
pl.obj:add ’нож’
====
А как добавлять way на сцену? Так?:
====
way():add 'локация5'
====

p.s. и еще вопрос, из учебника не совсем понял, как любое прямое стоковое значение dsc/way представлять в виде переменной? Например
====
global {
        rrt = 'локация5';
        }

room   {
        nam = 'локация4';
        way = { ..... здесь как-то должно быть значение переменной rrt....?????}
        }
====

Reply to: 6xJViZV7bkBlVDdAuIf6
From: Peter (syscall,1) 15.08.17 16:20 UTC
To: Wol4ik
Subject: Re: Синтаксис работы с way
> А как добавлять way на сцену?
В way может быть сама комната, и в этом случае можно просто добавить саму эту комнату:

====
ways():add 'локация'
====
Но есть и другие способы. Во первых, вместо добавления-удаления, можно делать open/close или disable/enable локации:

====
room {
    nam = 'дом';
...
}:close() -- закрытый дом

room {
    nam = 'main'
    way = { 'дом' }; -- переход невидим
}
где то в коде:

open 'дом' -- открыли дом -- появился переход
====

И, наконец, можно использовать path:

====
way = { path { nam = '#дом', 'В дом', 'дом'}:disable() };  -- выключенный переход

enable 'вдом' -- включили переход.
====

Можно еще создавать path на лету new и добавлять их... Но это лишнее...

Насчет переменных, не совсем понял вопрос, но вот варианты:

====
a = path('Выход', 'exit')
====
И вставляем везде где хотим:

====
way = { a };
====
Еще вариант:

====
exitroom = room {
    nam = 'exit';
....
}
====
И вставляем где хотим:
====
way = { exitroom };
====

В твоем примере с rtt, просто везде в момент загрузки игры в way вставится слово 'локация5', если это то, что тебе нужно - можно и так. Но изменение переменной rtt ничего не изменит в уже созданных комнатах.

Reply to: qVs0JfNlCMIzd9ZYqVPG
From: Wol4ik (syscall,22) 15.08.17 19:44 UTC
To: Peter
Subject: Re: Синтаксис работы с way
Спасибо! Ответы исчерпывающи.

From: Wol4ik (syscall,22) 07.10.17 20:55 UTC
To: All
Subject: Докладываю
v 3.1.2
При ошибках в расстановке круглых скобок синтаксис сыпется не только в случае с "наружным" кодом типа room {}, но и когда забыта вторая скобка в строковом значении, правильно выделенном знаками '' . Пример
====
obj {
	nam = 'уйти1';
	dsc = '{^> Выбраться наружу.'; -- вторая фигурная скобка отсутствует.
...
... }
====
При запуске игры сообщений об ошибке синтаксиса нет, как если бы это было в наружном коде (описание room или obj), но сам факт перехода на сцену, куда помещен такой объект приводит к зависанию игры (под Windows). Что снимается только закрытием этого окна.

From: Wol4ik (syscall,22) 08.10.17 06:06 UTC
To: All
Subject: p.s. еще
Вопрос вот в чём, что я делаю не так во здесь. У меня есть глобальная переменная, которая меняется от событий с объектами и на сценах - hot. hotmax - тоже глобальная переменная, но проблема не в ней. Изначальное значение hot задается перед игрой и оно не равно нулю. Допустим, = 20. hotmax тоже 20. Их значение отображается постоянно в инвентаре при помощи объекта Статуса тепла.

====
obj {
	nam = 'тепло';
	pri = -100;
	disp = function ()
		  p ('тепло ', hot,'/', hotmax);
	       end;
}
====
У меня много что на hot воздействует, но при вычитании десятичных дробей из hot (например hot = hot - 0.2) всё идет и отображается хорошо, но между нулём и единицей, а особенно когда вычитание ведёт к hot к чистому нулю - hot начинает отображаться в инвентаре некорректно. Измучившись в поисках своей ошибки, я создал объект который КОНТРОЛИРУЕМО и прозрачно вычитает из hot дробные значения. И положил его на сцену.
====
obj {
	nam = 'вычесть';
	dsc = '{^> Вычесть.}';
	act = function ()
			hot = hot - 0.2;
		  end;
}
====
Он имитирует падение тепла персонажа по нажатию. Вычитание и отображение hot в инвентаре происходит корректно пока не достигает единицы. Т.е. (19.8 ... 19.6 ... 19.4 ... ... 1.2 ...). Далее, при вычитании из единицы отображается уже число в каком-то некрасивом длинном виде и неточно. пишу в порядке убывания:
1.2 - норм. вычитаю еще 0.2
1 - норм. вычитаю еще 0.2
0.80000000000004- уже не норм. вычитаю еще 0.2
0.60000000000004- уже не норм. вычитаю еще 0.2
0.40000000000004- уже не норм. вычитаю еще 0.2
0.20000000000004- уже не норм. вычитаю еще 0.2
3.7581049383562e-014 - не норм.

Это касается случаев не только с десятыми, но и с сотыми (то есть при вычитании 0.02). В чём моя ошибка, что я сделал не так? Я хочу, чтобы, когда вес предметов (при их отсутствии) был равен нулю, то и объект статуса выводил ноль.

Reply to: fEXeLMybpzrwoXNMzb1D
From: Wol4ik (syscall,22) 08.10.17 06:23 UTC
To: Wol4ik
Subject: Re: p.s. еще
п.с. При многократном вычитании из целого по 0.5 - Всё отображается корректно и адекватно начинает уходить и отображаться в отрицательных значениях.
2
1.5
1
0.5
0
-0.5
-1
и т.д. всё нормально в общем.


Но уже при вычитании 0.4 проблемы (начал последовательно вычитать из двадцати, чтоб к нулю всё было ровно).
20
19.6
19.2
...
...
1.2
0.8
0.4 - далее вычитаю из этой оставшейся 0.4 еще 0.4 и по идее должен получиться чистый ноль, но следующее значение такое...
4.1078251911131

Возможно я не знаю всех свойств переменных и выбрал не тот тип.
У меня она задается так
====
global {
        hot = 20;
        hotmax = 20;
        ...
        (иные числовые переменные)
        }
====

From: Wol4ik (syscall,22) 08.10.17 06:46 UTC
To: All
Subject: Вот. сделал отдельный код для запуска, прошу проверить непосредственно в игровом режиме
Нажимать придется подольше, идти с 20 по кусочкам в 0.2, и я бы сделал не с 20, а с 2-х, чтобы облегчить тест программы, но обнаружил, что если изначальное число не 20, а например 2 или 3, то характер некрасивого отображения числа в инвентаре меняется. Даю полный текст файла main3.lua
====
-- $Name:Программа теста дробей$
-- $Version: 0.1$
-- $Author: Wol4ik$

require "fmt";

global {
             hotmax = 20;
             hot = 20;
       }
--
obj {
	nam = 'вычесть';
	dsc = '{Вычесть.}';
	act = function ()
			hot = hot - 0.2;
		  end;
     }
--
obj {
	nam = 'тепло';
	pri = -100;
	disp = function (s)
				p ('тепло ', hot,'/', hotmax);
		   end;
	}
--
room {
		nam = 'main';
		onenter = function (s)
					pl.obj:add 'тепло'; -- помещение в инвентарь статуса тепла.
				  end;
		decor = [[Для уменьшения тепла на 0,2 нажать на "вычесть".]];
		obj = {'вычесть'};
      }
-- конец кода.
====

Reply to: 22gMzfzAz0w1thz8JbJG
From: Peter (syscall,1) 08.10.17 07:24 UTC
To: Wol4ik
Subject: Округление чисел в Lua
Это "фича" Lua. Если нужно отображать с заданной точностью числа, придется их округлять при вычислении, или при выводе.
Примеры функций округления тут:
http://lua-users.org/wiki/SimpleRound

Я взял одну из них и немного поменял код.
====
function round(num, numDecimalPlaces)
  return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end
obj {
    nam = 'вычесть';
    dsc = '{Вычесть.}';
    act = function ()
        hot = round(hot - 0.2, 2) -- округляем!
    end;
     }
====

Reply to: z0FUzf4nmv7OUDL4ficH
From: Peter (syscall,1) 08.10.17 07:25 UTC
To: Wol4ik
Subject: Re: Докладываю
> При ошибках в расстановке круглых скобок синтаксис сыпется не только в случае с "наружным" кодом типа room {}, но и когда забыта вторая скобка в строковом значении, правильно выделенном знаками ''

Спасибо, изучу!

Reply to: z0FUzf4nmv7OUDL4ficH
From: Peter (syscall,1) 08.10.17 07:45 UTC
To: Wol4ik
Subject: Re: Докладываю
Wol4ik, я исправил в git, я очень прошу обновить *.lua файлы из каталога stead3 и работать уже с ними.

Конкретно это исправление вот:
https://github.com/instead-hub/instead/commit/61d4 e10b2ce2719bd17381a71bbd21060ebb6350

Теперь не должен зависать, а должен показать фрагмент текста с непарной {

Reply to: BJi4tCiYjG4aVpcWG0wL
From: Wol4ik (syscall,22) 08.10.17 08:27 UTC
To: Peter
Subject: Re: Докладываю
Пётр, спасибо. Всё сделал. И то, и то заработало, как надо.

From: Wol4ik (syscall,22) 08.10.17 18:57 UTC
To: All
Subject: Делюсь
...в продолжение выше опубликованных сообщений. Если идет работа с выводом дробной переменной, то я понял, что лучше ставить округление заведомо больше.
====
p ('тепло ', round(hot,2)); -- округление вывода hot c аргументом 2 по совету Петра.
====
В примере Петра, работало округление round (переменная, 2) при шаге вычитания не более 0.2. Но при шаге вычитания 0.4 округление ...,2 выдает при чистом нуле "-0" (минус ноль). Снимается это установкой избыточного округления ...,3 вместо 2.
====
p ('тепло ', round(hot,3)); -- округление вывода hot c аргументом 3. Если результат вычитания 
                            -- равен нулю, то выводится чистый обычный ноль без всяких знаков.
====

Reply to: krDLWsq8twGzYw2ZzQij
From: Peter (syscall,1) 09.10.17 04:32 UTC
To: Wol4ik
Subject: Re: Делюсь
Гм. А если взять 1й пример для round по той ссылке? Можешь попробовать?

Reply to: krDLWsq8twGzYw2ZzQij
From: Peter (syscall,1) 09.10.17 04:44 UTC
To: Wol4ik
Subject: Re: Делюсь
Ну то-есть вот эту попробуй? Я ее в git версию добавил как math.round:
====
function round(num, numDecimalPlaces)
  local mult = 10^(numDecimalPlaces or 0)
  return math.floor(num * mult + 0.5) / mult
end
====

Reply to: JiG1RyiHKEPNMz2yK9ZF
From: Wol4ik (syscall,22) 09.10.17 05:48 UTC
To: Peter
Subject: Re: Делюсь
Проверил на другом компьютере, там минус ноль не выводилось при старых параметрах. Странно. Обновленный Инстед и код ношу на флешке с собой. Проверю вечером на прежнем ПК, с новой функцией и без нее. Но совершенно точно вчера выдодился минус ноль при нуле и я это устранил изменением аргумента округления с 2 на 3. Тщательно перепроверю все, чтобы исключить неверное понимание.

Reply to: uXrvdNyOL6j5UDLmuUCU
From: Peter (syscall,1) 09.10.17 06:16 UTC
To: Wol4ik
Subject: Re: Делюсь
Это особенности float. Давай попробуем с другой функцией, а я еще полумаю.

Так то можно делать вывод с помощью string.format(), но это как то сложновато. Может быть я встрою ее в p функцию. Надо подумать.

Reply to: EiafbNb7EFWugxpJvHrG
From: Wol4ik (syscall,22) 09.10.17 09:02 UTC
To: Peter
Subject: Re: Делюсь
Пётр, а вдруг не у всех будет Инстед3 обновленный из гита. Я вот пока думаю переделать механику игры и не выводить само число тепла. А сделать так, вычисления с дробями проводить, как и раньше, но выводить результат словами - «холодно», «очень холодно», «прохладно», «жарко» и т.п.

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

П.с. все ранее оговоренные проверки функций я сделаю.

Reply to: LYXvPQrvP9DwdW17FNsD
From: Peter (syscall,1) 09.10.17 09:34 UTC
To: Wol4ik
Subject: Re: Делюсь
> Пётр, а вдруг не у всех будет Инстед3 обновленный из гита.
Не обязательно инстед из гита, просто раз ты столкнулся с проблемой я хочу ее решить в будущих версиях.

Я думаю, что вычисления точные.

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

По идее можно округлять рез-т только при вывроде: p(string.format("%02f", myvar)), но мне хотелось бы попробовать с round...

Reply to: dhRFexNqNUEOmZnnAA2D
From: Wol4ik (syscall,22) 09.10.17 10:13 UTC
To: Peter
Subject: Re: Делюсь
Да, конечно. Займусь сегодня. Раз мы это обсуждаем, спрошу еще одно на будущее. Как сделать вывод фиксированного количества знаков после запятой в дроби, даже если там нули? Да так, чтобы round работал при выводе? (Понял, что round проще делать только для вывода p, pn)
0.2 => 0.200

Reply to: C2ISwPRADtnnBbmg6zuX
From: Peter (syscall,1) 09.10.17 12:23 UTC
To: Wol4ik
Subject: Re: Делюсь
> Как сделать вывод фиксированного количества знаков после запятой в дроби, даже если там нули?
По идее, так: p(string.format("%.2f", 0.01234))
Вот это и надо как то упростить в след версиях, это lua конструкция форматированного вывода.

From: Wol4ik (syscall,22) 09.10.17 18:19 UTC
To: All
Subject: результваты
====
function round(num, numDecimalPlaces)
	local mult = 10^(numDecimalPlaces or 0)
	return math.floor(num * mult + 0.5) / mult
end
--
obj {
	nam = 'тепло';
	pri = -100;
	disp = function (s)
			p ('тепло ', string.format("%.3f", hot),'/', hotmax);
		   end;
     }
====
Вышеуказанное при вычитании из 24 чисел по 0.6 - при чистом нуле hot выводит -0.000
Далее, всё то же самое только заменена сторочка:
====
p ('тепло ', string.format("%.3f", round(hot,2)),'/', hotmax);
====
При достижении чистого нуля выводится всё корректно, т.е. 0.000

Reply to: nwMrrQDZx63aLwff6Av8
From: Peter (syscall,1) 09.10.17 18:26 UTC
To: Wol4ik
Subject: Re: результваты
Понял. Я подумаю, как это сделать удобным, а пока используй string.format. можно обернуть ее в функцию для удобства.

Reply to: 1yTjPS9zxsazRai1UuVu
From: Wol4ik (syscall,22) 09.10.17 18:41 UTC
To: Peter
Subject: Re: результваты
Если бы я был как-бы пользователем очередной новой функции или версии Stead 3.x.x, чисто гипотетически. Мне было бы проще задавать так. Если я хочу, чтобы данная переменная выводилась с нужной постоянной детализацией знаков после запятой, то при первичном присвоении значения сразу их и прописать. Например.
====
global {
         биткоины = 0.000; -- при любых вычислениях вывод p будет всегда с 3-мя знаками после запятой.
         выстота = 0.00; -- при любых вычислениях вывод p будет всегда с 2-мя знаками после запятой.
         тепло = 0; -- вывод будет иметь столько знаков после запятой,сколько нужно,
                    --- но без лишних нулей: 1.2 ... 1.000000002 ... 1 ... 6 .... 0 ....
        }
====
Это, разумеется не в плане советов, а на правах вольной фантазии.

Reply to: fbjwL3YiXfHxcEMgzi9r
From: Wol4ik (syscall,22) 09.10.17 20:06 UTC
To: Peter
Subject: Re: Докладываю
На всякий случай, вот еще наблюдение. Stead никак не реагирует на ошибки в фигурных скобках, но теперь уже в случае:
====
decor = [[...бескрайнее белое поле.^^
	{@ walk e38|> Отправиться к маленькому участку леса.]]; -- вторая фигурная скобка отсутствует.
====
Ранее же мы обсуждали то же самое но в одинарных кавычках. В этом же аналогичном случае ничего страшного не происходило. Не было зависаний. Просто вместо активной ссылки "> Отправиться..." , на экране отображалась неактивная ссылка "{@ walk e38|> Отправиться к маленькому участку леса."

Сообщений от ошибке синтаксиса @ walk внутри [[]] не выводилось.

Reply to: fEjqYFPBtuhqxUk29lRE
From: Peter (syscall,1) 10.10.17 04:44 UTC
To: Wol4ik
Subject: Re: результваты
> Если бы я был как-бы пользователем очередной новой функции или версии Stead 3.x.x, чисто гипотетически,
Согласен, но мы не все можем сделать, так как язык -- стандартный Lua. Я думал о том, чтобы вносить изменения в него и таскать измененную версию с инстедом, но пока решил так не делать.

Я вспомнил, в инстеде есть pf. Для начала, замени p(string.format( на:

pf("%.02f", переменная).

Хоть какое то упрощение. :)

Reply to: ZzQuFWgeOPfCSwrlM9ew
From: Peter (syscall,1) 10.10.17 04:50 UTC
To: Wol4ik
Subject: Re: Докладываю
> Сообщений от ошибке синтаксиса @ walk внутри [[]] не выводилось.
Спасибо. Это разные ситуации с тз инстеда. Обработка dsc объекта и общего вывода. Хорошо, что не виснет. :)
Детектирование незакрытых скобок в данном случае неудобно делать, но буду иметь в виду.

Reply to: oYyAVd5DJaLN0DjKuxhW
From: Wol4ik (syscall,22) 10.10.17 06:04 UTC
To: Peter
Subject: Re: результваты
pf станно себя ведет. Вот старый вид, он выводит смесь строковых заготовок и переменных.
====
p ('тепло ', string.format("%.3f", round(hot,2)),'/', hotmax);
====
Выводится следующее ..... тепло 19.600/24
При pf же с кодом
====
p ('тепло ', pf("%.3f", round(hot,2)),'/', hotmax);
====
"тепло и hot меняются местами, а то, что после hot, вообще не выводится. Выглядит вывод теперь так:
19.4000тепло

Reply to: 341EVKI167AznL0QzC2B
From: Peter (syscall,1) 10.10.17 06:20 UTC
To: Wol4ik
Subject: Re: результваты
Вот так надо:
pf ('тепло %.3f / %d',hot, hotmax);

Надо бы мне в документации написать.

Reply to: Fs7mPvAuqQDZUuHSaZjm
From: Wol4ik (syscall,22) 10.10.17 06:30 UTC
To: Peter
Subject: Re: результваты
Ага, теперь красиво. Только я пробелы убрал около слэша. То есть есть некие служебные меры
1. %d
2. %.3f
3. еще что-то...
Более мене пончл как их настраивать 3f 2f и тд.

From: Wol4ik (syscall,22) 11.10.17 12:07 UTC
To: Peter
Subject: Об'екты на сцене и в инвентаре
Добрый день. Возник еще один вопрос. При создании obj есть такой параметр pri. Он работает не только в инвентаре, но и на сцене. Вопрос вот в чем, если у двух и более выложенных на сцену об!ектов (drop или place) совпадают pri, то как происходит их визуальная компановка при добавлении новых?

То есть например "Лежит {коробка конфет}" (pri = -100) я на нее кликнул и на сцене появляется еще один об!ект "{конфета}" (тоже pri = -100). Вывод динамической части Инстед, что, сдвинет коробку и перед ней слева поставит конфету? Но она вроде позже по времени появилась.... Или как? Мне нужно, чтобы добавляемый об!ект помещался всегда слева перед предыдущими ранее выложенными об!ектами. Возможно ли это?

Вопрос2. Работает или как сделать чтоб заработал act об!екта, уже лежащего в инвентаре? Это лишает его use и inv, ну и пусть.

Reply to: M4dWF2wUAe5XtG2AJBZD
From: Peter (syscall,1) 11.10.17 13:03 UTC
To: Wol4ik
Subject: Re: Об'екты на сцене и в инвентаре
> То есть например "Лежит {коробка конфет}" (pri = -100) я на нее кликнул и на сцене появляется еще один об!ект "{конфета}" (тоже pri = -100). Вывод динамической части Инстед, что, сдвинет коробку и перед ней слева поставит конфету?

Я думал, что конфета будет после, если это не так - давай тест и я изучу.

> Работает или как сделать чтоб заработал act об!екта, уже лежащего в инвентаре? Это лишает его use и inv, ну и пусть.

Вопрос не понял. Предмет лежит и в сцене и в инвентаре одновременно? А так, в общем, и act и use и inv могут быть у любого объекта.

Reply to: M6X9xZqKZE0jS3Coy64u
From: Wol4ik (syscall,22) 11.10.17 13:59 UTC
To: Peter
Subject: Re: Об'екты на сцене и в инвентаре
Второй вопрос был про предмет, который лежит только в инвентаре. Я не нашел способ сделать реакцию игры на единичное нажатие на него в инвентаре. act это позволяет сделать, но только когда об!ект лежит на сцене.

Про конфеты, ты, к сожалению, прав. При разном значении pri об!екты на сцене конкурируют и двигают порядок. Но при одинаковом pri, вывод идет как ты сказал, то что позже, то после тгго что было выведено ранее.

Reply to: q1r2FEAKNTkEEOlRxUxf
From: Peter (syscall,1) 11.10.17 14:11 UTC
To: Wol4ik
Subject: Re: Об'екты на сцене и в инвентаре
> Второй вопрос был про предмет, который лежит только в инвентаре. Я не нашел способ сделать реакцию игры на единичное нажатие на него в инвентаре. act это позволяет сделать, но только когда об!ект лежит на сцене.

В доке про menu прочитай. Это реакция единичная как раз.

> Про конфеты, ты, к сожалению, прав. При разном значении pri об!екты на сцене конкурируют и двигают порядок. Но при одинаковом pri, вывод идет как ты сказал, то что позже, то после тгго что было выведено ранее.

Так это вроде и есть желательное поведение? Если pri одинаковы, то позиция определяется последовательностью? А так, в список objs() можно добавлять по конкретной позиции.
Но как то это сложновато. local o, i = objs():lookup('предмет'); obj():add('другой предмет', i) -- добавили другой предмет перед предметом

Reply to: wiYOms7DfChCkc7BYfhz
From: Wol4ik (syscall,22) 11.10.17 14:14 UTC
To: Peter
Subject: Re: Об'екты на сцене и в инвентаре
Спасибо. Теперь мне понятно.

From: Wol4ik (syscall,22) 14.10.17 16:07 UTC
To: All
Subject: Докладываю
Обнаружил вот что. Возможно это баг, а возможно это я нарушаю правила использования объектов типа obj. Вот код.
====
obj {
	nam = 'искать';
	state = 1;
	dsc = function(s)
			local dsc = {
					'{> Попытаться исследовать лес, несмотря на холод.^}',
					'> Лес исследован.{^}' --- !!! вот эта строчка, про нее доклад.
                                     }; 
					p(dsc[s.state])
			end;
	act = function (s)
			p [[Исследовав лес... (длинное описание найденного)]];
			s.state = 2;
			hot = hot - 5;
			return;
			end;
}
====
Представим, что таких объектов, подобных этому несколько. И если они помещены на сцену, то их dsc располагаются в столбик, так как присутствует символ ^. Почему я сделал '> Лес исследован.{^}' вместо того, чтобы сделать '> Лес исследован.^' ??? Дело в том, что dsc объектов типа obj игнорирует символ ^ если он не помещен в фигурные скобки {}. Возможно, так задумано. Я просто отчитался.

Reply to: coQDD3W9PiiyzzrxRDG7
From: Peter (syscall,1) 14.10.17 18:35 UTC
To: Wol4ik
Subject: Re: Докладываю
> Возможно это баг, а возможно это я нарушаю правила использования объектов

Вот ответ на вопрос:
 QV3PP7JKESPHRWCF74RA

Reply to: QV3PP7JKESPHRWCF74RA
From: Wol4ik (syscall,22) 15.10.17 09:11 UTC
To: Peter
Subject: Re: Переводы строк в конце dsc/decor и др. методов
Понял. Буду иметь в виду. Был не прав.

From: Wol4ik (syscall,22) 19.10.17 19:26 UTC
To: All
Subject: Музыка и звуки
Прошу прощения, но я не нашел способ воздействия кодом на громкость музыки (music). Делал ее при помощи snd.play.

Reply to: nNxAbDj5fhrEvlVHcEWT
From: Wol4ik (syscall,22) 19.10.17 21:48 UTC
To: Wol4ik
Subject: Re: Музыка и звуки
p.s. Вот, набросал программку.
snd.pan не действует на громкость проигрывания music (оно и логично, так как канал неизвестен),
в документации не сказано, как задавать громкость music. Может есть недокументированная команда для этого?
====
require "snd" -- модуль музыки и звуков
-- требуется два *.ogg файла с музыкой в корне папки с игрой и файлом main3.lua,
-- для этой программы их имена заданы как 'ice1.ogg' и 'basketcase.ogg'
--
global {
	volume = 50;
}
--
room {
	enter = function()
				put ('Включить музыку');
				put ('Отлючить музыку');
				put ('Включить звук');
				put ('Отлючить звук');
				put ('Увеличить');
				put ('Уменьшить');
				pl.obj:add 'громкость';
			end;
	nam = 'main';
	decor = 'Тест музыки и звуков';
}
--
obj {
	nam = 'Включить музыку';
	dsc = '{Play music^}';
	act = function()
			snd.music('ice1.ogg');
		  end;
}
--
obj {
	nam = 'Отлючить музыку';
	dsc = '{Stop music^}';
	act = function()
			snd.stop_music();
		  end;
	
}
--
obj {
	nam = 'Включить звук';
	dsc = '{Play sound^}';
	act = function()
			snd.play('basketcase.ogg', 1, 0);
		  end;
}
--
obj {
	nam = 'Отлючить звук';
	dsc = '{Stop sound^}';
	act = function()
		    snd.stop(1);
		  end;
}
--
obj {
	nam = 'Увеличить';
	dsc = '{+ volume^}';
	act = function()
		    volume = volume + 10;
		    snd.pan (1, volume, volume);
		    return;
		  end;
	
}
--
obj {
	nam = 'Уменьшить';
	dsc = '{- volume^}';
	act = function()
		    volume = volume - 10;
		    snd.pan (1, volume, volume);
		  end;
}
--
obj {
	nam = 'громкость';
	disp = function()
		    p (volume);
		    return;
		  end;
}
====

Reply to: aNtaNJTuZ2vNBqdU44Ui
From: Peter (syscall,1) 20.10.17 05:30 UTC
To: Wol4ik
Subject: Re: Музыка и звуки
> p.s. Вот, набросал программку.
Здорово, ее можно теперь показывать для демонстрации функций.

К сожалению, нет такой возможности. Есть только vol, которая меняет общую громкость.
С другой стороны, для проигрывания музыки можно использовать и звуки (правда, грузиться они будут дольше, чем музыка).

Reply to: ThNlAdNjKHrRRlbasCFI
From: Wol4ik (syscall,22) 20.10.17 06:39 UTC
To: Peter
Subject: Re: Музыка и звуки
Еще эта программа доказыват возможность управление громкостью заданного звука прямо во время его проигрывания. Это можно использовать например при создании эффекта приближения и удаления от источника звука, а также для плавного "перекатывания" звука с левого на правый динамик и обратно. Можно даже писать трекерную музыку из сеплов при помощи кода Инстед)))
Спасибо за пояснения про music, а то я думал, что опять что-то упустил в докумнтации.

Reply to: aNtaNJTuZ2vNBqdU44Ui
From: Peter (syscall,1) 20.10.17 11:44 UTC
To: Wol4ik
Subject: Re: Музыка и звуки
Кстати, pl.obj:add 'громкость';
можно заменить на take 'громкость'

:) На всякий случай написал.

1 2 3