[>]
Re: instead-js или instead-em
std.prog
techniX(syscall,26) — lnp3
2018-09-04 09:47:21
Да, keyboard работает. Ну или по крайней мере должен работать :)
По скорости загрузки - instead-em загружает около 10 мегабайт при первом запуске, потом чуть быстрее из кэша. А instead-js "весит" меньше 1 мегабайта.
Кроме того, в instead-js есть два режима загрузки. Можно загружать игру из zip-файла - но тогда нужно ждать пока вся игра целиком загрузится в клиентский браузер. А можно из каталога - тогда она практически мгновенно запускается, а картинки потом в фоне подгрузятся.
[>]
Re: instead-js или instead-em
std.prog
lnp3(syscall,35) — techniX
2018-09-04 10:08:39
> По скорости загрузки - instead-em загружает около 10 мегабайт при первом запуске, потом чуть быстрее из кэша. А instead-js "весит" меньше 1 мегабайта.
> Кроме того, в instead-js есть два режима загрузки. Можно загружать игру из zip-файла - но тогда нужно ждать пока вся игра целиком загрузится в клиентский браузер. А можно из каталога - тогда она практически мгновенно запускается, а картинки потом в фоне подгрузятся.
Вот это ценнейшая информация, спасибо большое! Положу в копилку.
[>]
А как сделать, чтобы...
std.prog
Пэ(syscall,48) — All
2019-06-13 08:31:13
Здравствуйте!
Простите, если я не в ту тему пишу :)
Вот заинтересовался я МЕТАПАРСЕРОМ3 (за что огромное спасибо Петру) и пробую что-то в нём написать. Кое-что даже получается. Программист с меня никакой и мне нужна помощь. Не откажите в любезности.
Есть задача использовать счётчик ходов в игре. Чтоб определённое событие случилось в определённый ход. Как этого добиться?
К примеру, на 50-м ходу игры Нео получает срочной бандеролью телефон, а через 10 ходов ему должен позвонить на этот телефон Морфеус. То же должно сработать и если Ное получит телефон на 39-м ходу и тот зазвонит через 10 ходов.
Спасибо.
[>]
Re: А как сделать, чтобы...
std.prog
Peter(syscall,1) — Пэ
2019-06-13 20:48:42
Привет, не могу развернуто сейчас ответить (с телефона не удобно) но можно прочитать про daemon метод. Грубо говоря, метод дергается каждый ход у объекта. А там уже можно делать что угодно. Для запуска StartDaemon кажется используется. В примерах должно быть и в существующих играх.
[>]
Re: А как сделать, чтобы...
std.prog
Пэ(syscall,48) — Peter
2019-06-16 03:00:55
Скажите, пожалуйста, Пётр, как сделать, чтоб перемещения в игре были не по сторонам света, а по названиям комнат? Когда персонаж находится в помещении, перемещение по сторонам света выглядят странно. Хотелось бы иметь возможность идти не на север и юг, а к примеру, в гостиную или в детскую.
Похоже, что это - не тот вариант (перемещаться через объекты):
obj {
-"детская";
nam = "nursery";
before_Walk = function(s)
move(pl, 'room3')
end;
}
[>]
Использование аудиозаписей
std.prog
vmg(syscall,52) — All
2019-08-27 19:19:50
> Если вам не достаточно описанных здесь функций по работе со звуком,используйте полное описание модуля “snd”.
Допустим, надо, чтобы на определённом шаге пользователь услышал запись речи. Есть ли в дополнительном описании модуля "snd" что-нибудь о такой возможности? И подскажите, пожалуйста (извините за тупёж), где читать описание модулей.
А ещё спрошу, в какой программе лучше преобразовывать разные форматы записи в ogg. Большинство профессиональных диктофонов сохраняет записи в wav.
[>]
Re: Использование аудиозаписей
std.prog
Peter(syscall,1) — vmg
2019-08-27 20:22:04
> Допустим, надо, чтобы на определённом шаге пользователь услышал запись речи.
Ну, это вроде бы просто проиграть звуковой файл? По идее, и базовых функций достаточно.
> И подскажите, пожалуйста (извините за тупёж), где читать описание модулей.
snd описан в той-же документации.
Здесь:
https://github.com/instead-hub/instead/blob/master/doc/stead3-ru.md#%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0
И здесь (расширенные возможности):
https://github.com/instead-hub/instead/blob/master/doc/stead3-ru.md#%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-snd
Кратко, можно играть звук в определенном канале с определенной громкостью и проверять - играет ли он ещё или уже перестал.
> А ещё спрошу, в какой программе лучше преобразовывать разные форматы записи в ogg.
Если хочется с gui, то audacity. Если консоль - то oggenc (vorbis-tools) или ffmpeg.
[>]
Re: Использование аудиозаписей
std.prog
vmg(syscall,52) — Peter
2019-08-27 20:56:29
Пётр, большое спасибо — теперь всё нашёл. Я въезжаю постепенно и иногда могу просить о помощи (в том числе) для моральной поддержки. Надеюсь, у нас это не возбраняется. До встречи в песочнице.
[>]
Re: Использование аудиозаписей
std.prog
Andrew Lobanov(tavern,1) — vmg
2019-08-28 04:38:30
vmg> Пётр, большое спасибо — теперь всё нашёл. Я въезжаю постепенно и иногда могу просить о помощи (в том числе) для моральной поддержки. Надеюсь, у нас это не возбраняется. До встречи в песочнице.
У нас тут уютно и лампово. Так что отвечаем на любые вопросы. Правда не всегда оперативно, но Пётр вон быстро сработал =)
[>]
Re: Использование аудиозаписей
std.prog
Peter(syscall,1) — vmg
2019-08-28 07:00:42
> Пётр, большое спасибо — теперь всё нашёл. Я въезжаю постепенно и иногда могу просить о помощи (в том числе) для моральной поддержки. Надеюсь, у нас это не возбраняется. До встречи в песочнице.
Да пиши свободно, конечно!
[>]
Re: Использование аудиозаписей
std.prog
vmg(syscall,52) — Andrew Lobanov
2019-08-28 08:20:21
> У нас тут уютно и лампово
На самом деле, радость, что у нас есть такой добрый гостеприимный дом и люди, которые дали ему появиться.
[>]
Рандом в СТИД 2
std.prog
kolobod(syscall,30) — All
2019-09-25 11:14:53
Всем огромный привет! Сразу приношу извинения, если вдруг пишу не в тот раздел. Давно не заходил, подзабыл что-как.
Вдруг кто еще помнит свои наработки по стид2?
Запнулся на таком моменте. Надо, что бы при срабатывании условия - в ответ РАНДОМНО включалось ОДНО из нескольких возможных событий.
Если конкретно: у меня игрок в какой-то момент делает персонажем действие, открывает найденным ключом дверь в бункер.
act = function(s)
if got_bunker_key then
bunker_door_open; --дверь открывается, если есть нужный ключ
random_action_on = true; --включается "разрешение" для запуска 1 из 3 рандомных событий
p [[Из темного коридора раздается рычание. В воздухе витает какой-то мерзкий запах.]];
end;
И есть три условия для запуска трех разных событий, одно из которых должно включится СЛУЧАЙНЫМ ОБРАЗОМ, после того как сработает random_action_on.
Это:
dead_attack --атака монстрами игрока
dead_blind --монстры не замечают, как игрок проник в бункер
poison_on --игрок получает отравление
Как сделать рандомный запуск одного из трех событий?
[>]
Re: Рандом в СТИД 2
std.prog
Peter(syscall,1) — kolobod
2019-09-25 14:28:03
Привет!
Не совсем понял, что тут имеется в виду:
act = function(s)
if got_bunker_key then
random_action_on = true; -- кто анализирует эту переменную?
end;
То-есть, не понятно, какой именно код запускает событие? life метод? Или непосредственно в act?
Так-то, сам random делается просто:
local n = rnd(3)
if n == 1 then
-- 1
elseif n == 2 then
-- 2
else
-- 3
end
Ну или в твоем примере можно сразу:
random_action_on = rnd(3) -- от 1 до 3
[>]
Re: Рандом в СТИД 2
std.prog
kolobod(syscall,30) — Peter
2019-09-25 19:23:10
Всё запускается из act.
То есть мне надо сделать так, верно понял?
local n = rnd(3) --Этот блок прописывается просто в любом месте кода, или его надо вставлять куда-то конкретно?
if n == 1 then dead_attack = true --срабатывает условие для запуска монстров
elseif n == 2 then dead_blind = true --срабатывает условие при котором монстры игрока не видят
elseif n == 3 then poison_on = true --срабатывает условие при котором персонаж получает отравление
else
end
act = function(s)
if got_bunker_key then
bunker_door_open = true; --дверь открывается, если есть нужный ключ
random_action_on = rnd(3); --включается "разрешение" для запуска 1 из 3 рандомных событий
end;
[>]
Re: Рандом в СТИД 2
std.prog
Peter(syscall,1) — kolobod
2019-09-25 20:32:27
Если я верно понял вопрос, то что то вроде этого?
Я просто не понял что такое "событие" и зачем столько переменных.
local -- это для временной переменной
Но у тебя random_action_on видимо глобальная переменная.
А так можно было сделать локальную, она бы существовала только во время работы act
act = function(s)
if got_bunker_key then
bunker_door_open = true; --дверь открывается, если есть нужный ключ
random_action_on = rnd(3); --включается "разрешение" для запуска 1 из 3 рандомных событий
if random_action_on == 1 then dead_attack = true --срабатывает условие для запуска монстров
elseif random_action_on == 2 then dead_blind = true --срабатывает условие при котором монстры игрока не видят
elseif random_action_on == 3 then poison_on = true --срабатывает условие при котором персонаж получает отравление
end
end;
end
[>]
Re: Рандом в СТИД 2
std.prog
kolobod(syscall,30) — Peter
2019-09-26 09:12:27
Супер! Похоже это вот именно то, что надо было!! Сегодня после работы сяду пробовать в деле)
Большущее спасибо.
[>]
Перемещение через... dsc - в СТИД 2
std.prog
kolobod(syscall,30) — All
2019-10-11 14:19:15
Ох, еще такой вопрос. Может знает кто? Заранее прошу прощения)
В общем, загнал я себя в ловушку. Забыл слова Петра о том, что dsc (в отличие от act) не предназначен для внесения каких-то глобальных изменений в игровой процесс, это только описательная часть. В итоге столкнулся с тем, что завязал часть игрового процесса на dsc все-таки. До какого-то момента все исправно работало. До тех пор, пока не понадобилось организовать "переход" в другую комнату нетрадиционным образом. Сделал так:
bunker = room {
...
dsc = function(s)
...
if global_nnn == 10 and global_yyy == 20 then
walk 'action_room_2';
return true;
end;
...
end;
}
Суть, если отбросить лишние детали: в комнате bunker можно переключать два параметра (условно nnn и yyy) и когда они доходят до значений "10" и "20" соответственно, игрок автоматически перемещается в другую комнату (происходят еще разные изменения в сюжете, в интерфейсе, но тут это не важно). В нынешнем виде, такая попытка перемещения не работает. Игрок, судя по всему остается в текущей комнате.
Вопрос: возможен ли в принципе walk из dsc (другие способы перехода именно в этом, конкретном случае не желательны) или про это можно сразу забыть?
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
kolobod(syscall,30) — kolobod
2019-10-11 15:34:05
Вроде решил проблему перехода в другую комнату убрав это из dsc в
lifeon (check);
check = obj {
life = function(s)
if global_nnn == 10 and global_yyy == 20 then
walk 'action_room_2';
return true;
end;
end;
};
Но радовался недолго)) Ибо игрок перемещаться-то перемещается из bunker в action_room_2 - но тема при этом не меняется, как сделано у меня при переходах в другие комнаты. И все оформление рушится. Реально не могу понять в чем засада, поскольку смена тем для всех комнат сделана через тот же check, и для всех один и тот же код, заставляющий тему меняться. При входе в комнату она идентифицируется по номеру, а под каждый номер прописано как меняется тема, типа такого:
===
if location == 4 then
theme.gfx.bg('theme/5.jpg');
theme.win.geom(700, 300, 600, 500);
end;
Везде это работает, а вот при переходе конкретно в action_room_2 почему-то нет.
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
kolobod(syscall,30) — kolobod
2019-10-11 16:14:36
Все даже еще загадочнее. Сделал для эксперимента - что игрок переходит не напрямую из bunker в action_room_2, а сначала идет в другую комнату (и все при этом отлично работает, тема комнаты bunker меняется на тему выбранной комнаты, переход проходит нормально). Потом уже только переходим в action_room_2 - и снова все отлично: и переходим, и тема меняется правильно. Но вот стоит только вернуть переход обратно напрямую, из bunker в action_room_2 - как оформление крашится.
И тут моя логика начала сходить с ума.
Ибо если проблема в комнате bunker - то почему из нее отлично работают переходы в другие комнаты?
Если проблема в комнате action_room_2 - то почему в нее нормально переходим из любой другой комнаты, кроме bunker?
Буду дальше копать))) Прям самому интересно)
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
kolobod(syscall,30) — kolobod
2019-10-11 17:11:34
В общем, я представляю как ржут программисты читая мой бред))
Потыкав свой "код" я уже понял, что корректно и красиво те переходы что я прописал - работают только если переход вызван:
-кликом по картинке в комнате (не подходит в моем случае),
-кликом по объекту в комнате, через act (опять же, не подходит в силу геймплея),
-кликом по предмету инвентаря (тоже не подходит, надо из комнаты),
-из диалога (аналогично)
Через life = function и dsc комнаты мой переход со сменой тем не пашет. Либо нельзя, либо неправильно прописываю.
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
Peter(syscall,1) — kolobod
2019-10-11 17:24:23
Тут такое дело, я совсем уже не помню STEAD2 и не хочется в нем снова разбираться, так как STEAD2 больше не развивается.
Но дам такой совет:
- в dsc игровую логику не делать;
- игровкую логику сделать в enter;
- если есть вопрос по life - нужен рабочий пример, который я смогу запустить и отладить. Тогда смогу помочь.
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
kolobod(syscall,30) — Peter
2019-10-11 18:15:43
Да, насчет dsc я уже осознал свой изначальный просчет)))
По enter пробовал - не получилось, насколько я понимаю он проверяет все при заходе в комнату, а там в ней дальше идут события. В общем перенос в enter
if global_nnn == 10 and global_yyy == 20 then
walk 'action_room_2';
return true;
end;
не срабатывает, потому что нужные условия достигаются игроком уже в ходе манипуляций в комнате, а не при заходе в нее.
Переход я все же сделал) Очень криворуким способом, но он работает)) Впрочем у меня все криворукое, и как благородный INSTEAD еще терпит мои дилетантские издевательства - я искренне не понимаю))))))
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
Peter(syscall,1) — kolobod
2019-10-11 21:00:27
А, я понял! То-есть мы хотим после какого-то действия сделать walk. Чтобы была функция, которая следит за событиями.
Ну да, тогда life в теории -- рабочий вариант. Но там нюансы были, в документации по STEAD2 было что то о том, как надо делать переходы из life метода.
Я могу посмотреть, но нужен демо-пример небольшой.
[>]
Re: Перемещение через... dsc - в СТИД 2
std.prog
kolobod(syscall,30) — Peter
2019-10-11 21:49:43
Я просто добавил маленькую прослойку: когда создается нужное условие, в становится true событие - которое само по себе переход не дает, но делает его возможным из другого места)))
Вообще, конечно, я изначально пошел по очень неверному пути. Надо было проще эти переходы организовать, как это предусмотрено в инстиде. Но нет, захотелось пооригинальничать, повыпендриваться) И это при отсутствии-то навыков программирования))) Вот и расхлебываю...
[>]
еще вопросец (СТИД 2)
std.prog
kolobod(syscall,30) — All
2020-01-31 21:17:02
Доброй ночи всем, кто не спит) Есть еще дурацкий вопрос.
БАЗА = room {
pic = function(s)
pr 'pic/ГОРЫ.jpg' --общий фон картинки для этой локации
if СЛУЧИЛОСЬ_СОБЫТИЕ then
pr ';pic/АЛАРМ.jpg@500,100' --показать поверх общей картинки локации табличку "у нас событие!"
end;
end;
click = function(s, x, y)
if x > 500 and x < 700 and y > 200 and y < 30 and СЛУЧИЛОСЬ_СОБЫТИЕ and ГОТОВ_ДИАЛОГ then --клик на табличку отправляет в диалог
walk 'НУЖНЫЙ_ДИАЛОГ';
return true;
end;
end;
}
Собственно, такая штука. Есть комната. Для иллюстрации происходящего в ней - задана картинка. При срабатывании условия СЛУЧИЛОСЬ_СОБЫТИЕ = true; поверх этой картинки появляется другая (табличка с приглашением запустить некое событие). И если при этом включено условие ГОТОВ_ДИАЛОГ = true; то клик на табличку запускать диалог НУЖНЫЙ_ДИАЛОГ.
В заданной конструкции все работает прекрасно. Но вот диалог заканчивается и я выпускаю из него игрока, ставя при выходе [[ СЛУЧИЛОСЬ_СОБЫТИЕ = false; ГОТОВ_ДИАЛОГ = true; walkback(); return true; ]]
То есть, на выходе я полностью убираю все условия и для отображения таблички, и для перехода снова в этот диалог. Но табличка не убирается и висит на месте, а если кликнуть на нее - снова попадаешь в диалог из которого вышел. Не могу понять почему?
[>]
Re: еще вопросец (СТИД 2)
std.prog
kolobod(syscall,30) — kolobod
2020-02-01 08:50:09
Опечатался в своих путанных пояснениях) На выходе из диалога false ставлю везде. То есть и СЛУЧИЛОСЬ_СОБЫТИЕ = false; ГОТОВ_ДИАЛОГ = false;
[>]
Re: еще вопросец (СТИД 2)
std.prog
Peter(syscall,1) — kolobod
2020-02-01 09:52:30
Ты понимаешь, сложно из описаний понять что происходит. Нужен законченный демо-пример который можно запустить и исправлять. Сделай такой тест в виде запускаемого мейна тогда можно помочь. Если некуда залить, можно на форум
http://instead-games.ru (сверху ссылка на форум)
[>]
Re: еще вопросец (СТИД 2)
std.prog
kolobod(syscall,30) — Peter
2020-02-01 10:14:33
Уже разобрался. Внезапно дошло, что я как обычно туплю и не вижу очевидного - на выходе из диалога я вывод дополнительной картинки действительно отключал!
Но при этом - условия для ее "включения" вывода таблички были выше по коду, и все еще оставались актуальными. То есть - они одновременно "включали" все обратно. Вроде совершенно простая вещь, но мне понадобилось несколько часов чтобы допереть.
Теперь заткнулся с другим моментом. Я из диалога выхожу через walkback(); и это создает мне в описании комнаты лишнюю пустую строчку - игра думает, что там должна быть какая-то фраза финализирующая диалог, а ее по задумке - нет. Вроде была еще одна команда возврата в предыдущую локацию, без вывода описания - но я ее вспомнить никак не могу, и не могу найти в старых файлах и доках примеры с ней.
[>]
Re: еще вопросец (СТИД 2)
std.prog
kolobod(syscall,30) — kolobod
2020-02-01 11:14:10
А, нет. Это была walkout(); но она не вызывает enter комнаты в которую возвращаешься, а его нужно вызвать - в нем важные условия прописаны.
[>]
Re: еще вопросец (СТИД 2)
std.prog
kolobod(syscall,30) — kolobod
2020-02-01 11:36:24
В общем на данный момент проблема только в одном. Как сделать - чтобы при выходе из диалога в комнату без каких-либо комментариев - в изначальном описании комнаты не добавлялась пустая строка? Пустая строчка - все равно сдвигает вниз описание комнаты, что рушит созданное оформление.
[>]
Re: еще вопросец (СТИД 2)
std.prog
Peter(syscall,1) — kolobod
2020-02-01 12:49:08
> В общем на данный момент проблема только в одном. Как сделать - чтобы при выходе из диалога в комнату без каких-либо комментариев - в изначальном описании комнаты не добавлялась пустая строка?
Вот и нужен от тебя пример. Вообще не понятно что там происходит. В стед3 никаких лишних строк быть не должно. В стед2, который я заюбыл, тоже можно их спрятать, но что именно у тебя происходит без кода примера понять невозможно.
[>]
Re: еще вопросец (СТИД 2)
std.prog
Peter(syscall,1) — kolobod
2020-02-01 14:17:40
Ну там у тебя стоит [[ ]] - это и есть пустая реакция. Убери ее, а слудующую строку явно пометь как code =
{ tag = 'ВЫЙТИ',
'ВЫЙТИ',
code = [[ pon 'ВЫЙТИ'; walkback(); ]] --walkback(); walk 'groop_camp';
},
[>]
Re: еще вопросец (СТИД 2)
std.prog
kolobod(syscall,30) — Peter
2020-02-01 15:04:33
Ууииии! Это просто волшебная опция, буду знать теперь. Спасибо!
>"P.S. Забыл я уже старое API. Переходи на новое потом"
Осилить бы это))) Если добью наконец игру (стыдно сказать, 5 лет уже прошло - 5, КАРЛ! ПЯТЬ!!) попробую поразбираться в стид3.
[>]
Re: еще вопросец (СТИД 2)
std.prog
Peter(syscall,1) — kolobod
2020-02-01 15:39:12
> Осилить бы это))) Если добью наконец игру (стыдно сказать, 5 лет уже прошло - 5, КАРЛ! ПЯТЬ!!) попробую поразбираться в стид3.
Новый попроще. )
[>]
Unicode строки в Instead
std.prog
Frost(ping,10) — All
2020-09-21 15:14:58
Приветствую, друзья. Подскажите пожалуйста как можно работать с кириллицей в Instead. Я имею ввиду функции len; sub и другие, работающие с однобайтовой кодировкой символов. Имеет ли ядро движка встроенную поддержку и если да, то как получить доступ к UTF8 функциям. Если нет, подскажите наиболее оптимальную (проверенную) библиотеку для работы с юникодом. Заранее спасибо.
[>]
Re: UTF8 строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-21 19:03:05
> Приветствую, друзья. Подскажите пожалуйста как можно работать с кириллицей в Instead. Я имею ввиду функции len; sub и другие, работающие с однобайтовой кодировкой символов.
Привет!
На самом деле, в метапарсере есть такой код. Он написан на Lua. Но, в последней версии INSTEAD есть и C реализация, которая помогает этому Lua коду.
Наверное, проще всего посмотреть как это сделано в МП. Даю наводку:
https://github.com/instead-hub/metaparser/blob/master/parser/mp.lua#L87
Функция, которая из строки делает массив литер.
Рядом есть более примитивные функции: utf_len, utf_char, utf_ff и utf_bb.
А вот как определяется, какую из реализаций брать -- на Lua или на C. Чтобы работало и со старым и с новым INSTEAD:
utf = {
bb = std.rawget(_G, 'utf8_prev') or utf_bb;
ff = std.rawget(_G, 'utf8_next') or utf_ff;
len = std.rawget(_G, 'utf8_len') or utf_len;
char = std.rawget(_G, 'utf8_char') or utf_char;
};
Прототипы функций если надо я могу вспомнить, но наверное есть смысл сначала посмотреть код, может быть там и так всё будет понятно. Навскидку:
utf_len, очевидно, возвращает число литер;
utf_char(строка, номер) - возвращает литеру по позиции;
utf_ff(строка, смещение) - возвращает смещение следующей литеры;
utf_bb(строка, смещение конца) - возвращает смещение предыдущей литеры;
[>]
Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 13:34:27
> Спасибо. Я благодарен за уделенное внимание моему вопросу. Однако на текущем этапе мне сложно разбираться в коде метапарсера.
Так там были готовые функции. Просто скопировать в свою игру.
local function utf_ff(b, pos)
if type(b) ~= 'string' or b:len() == 0 then
return 0
end
local utf8 = (std.game.codepage == 'UTF-8' or std.game.codepage == 'utf-8')
if not utf8 then return 1 end
local i = pos or 1
local l = 0
if b:byte(i) < 0x80 then
return 1
end
i = i + 1
l = l + 1
while b:byte(i) and b:byte(i) >= 0x80 and b:byte(i) <= 0xbf do
i = i + 1
l = l + 1
if i > b:len() then
break
end
end
return l
end
local function utf_chars(b)
local i = 1
local s
local res = {}
local ff = std.rawget(_G, 'utf8_next') or utf_ff
while i <= b:len() do
s = i
i = i + ff(b, i)
table.insert(res, b:sub(s, i - 1))
end
return res
end
Вот это реализация utf_chars, которая сделает массив с литерами из строки:
local a = utf_chars("привет")
Мне просто неизвестно, какие функции нужны.
> Вытекающий вопрос: можно ли перевести Instead на работу с LUA версии 5.3, в которой есть встроенная поддержка Юникода?
ИНСТЕД и так работает (может быть собран) с Lua от 5.1 до 5.4. Но если нужно, чтобы игра работала на всех видах установок (не только на собственной версии), нужно пользоваться 5.1. В основном это связано с тем, что бинарные сборки используют LuaJit, который 5.1 (с расширениями).
[>]
Re: Unicode строки в Instead
std.prog
Frost(ping,10) — hugeping
2020-09-22 14:17:47
Огромное спасибо за оперативную помощь! Мне ваши ответы действительно помогли. При анализе кода
local utf8 = (std.game.codepage == 'UTF-8' or std.game.codepage == 'utf-8')
выяснилось, что std.game приводит к ошибке. Мне пришлось удалить фрагмент
local utf8 = (std.game.codepage == 'UTF-8' or std.game.codepage == 'utf-8')
if not utf8 then return 1 end
Файл с кодом игры ведь обязан быть в кодировке UTF-8 (разве не так?). Зачем тогда эта проверка?
[>]
Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 14:36:39
> выяснилось, что std.game приводит к ошибке. Мне пришлось удалить фрагмент
Файл с игрой называется main3.lua или main.lua? Нужно, чтобы было main3.lua -- это новое INSTEAD API, старое API больше не поддерживается.
> Файл с кодом игры ведь обязан быть в кодировке UTF-8 (разве не так?). Зачем тогда эта проверка?
Формально, не обязан. Дело в том, что до сих пор есть поддержка разных кодировок, но по факту -- никто кроме utf-8 ничего не использует. И это хорошо.
[>]
Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 15:00:55
> print(std.game.codepage)
Конечно, так не сработает, в этот момент game ещё нет. Но в моём коде std.game проверяется внутри функции, запуск которой предполагается в момент, когда игра уже запущена. Например, в start() и позже...
[>]
scene_use в stead3
std.prog
Dima(ping,19) — All
2021-01-25 08:27:54
В стед2 был атрибут scene_use для действия элементом сцены на другой элемент. Вопрос: как реализовать данный метод в стед3 через классы. Например: в сцене есть свободный конец веревки и я хочу привязать его к другому объекту сцены или инвентаря, при этом не добавляя конец веревки в инвентарь.
[>]
Re: scene_use в stead3
std.prog
hugeping(ping,1) — Dima
2021-01-25 09:28:11
Dima> Вопрос: как реализовать данный метод в стед3 через классы. Например: в сцене есть свободный конец веревки и я хочу привязать его к другому объекту сцены или инвентаря, при этом не добавляя конец веревки в инвентарь.
В stead3 данный метод (use предмета сцены на предмет сцены) был признан ошибочным и упразднён.
Так что, предполагается, что конец верёвки таки добавится в инвентарь (или просто верёвка), а при выходе из сцены писать что-то вроде: ты бросил верёвку.
Если очень хочется, можно пытаться сделать что-то своё (например, меняя форму курсора как сделано в модуле use:
https://github.com/instead-hub/stead3-modules/tree/master/use ), но штатного механизма - нет.
[>]
Re: Как сделать переход из одной комнаты в две другие?
std.prog
hugeping(ping,1) — hopkins1988
2021-06-23 18:10:24
hopkins1988> Как сделать?
room {
nam = 'room2';
title = 'Зал';
dsc = 'Вы в огромном зале.';
way = { path { 'В главную комнату', 'main'},
path { 'В столовую', 'kitchen' } };
};
Но если не нужно менять название комнаты, то достаточно просто:
way = { 'main', 'kitchen' }