RSS
Pages: 1 2 3 4 5
[>] 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-14 22:13:42


Спасибо. Попробую.

[>] Re: А как сделать, чтобы...
std.prog
Пэ(syscall,48) — Peter
2019-06-16 03:00:55


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

Похоже, что это - не тот вариант (перемещаться через объекты):
obj {
    -"детская";
    nam = "nursery";
    before_Walk = function(s)
        move(pl, 'room3')
end; 
}

[>] Re: А как сделать, чтобы...
std.prog
Peter(syscall,1) — Пэ
2019-06-16 10:34:15


В моей игре есть реализация класса path. https://github.com/gl00my/instead-game-summerday

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

[>] Использование аудиозаписей
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
kolobod(syscall,30) — Peter
2020-02-01 14:00:13


http://instead-games.ru/forum/index.php?p=/discussion/706/glupye-voprosy-ot-kolobod#latest
Удалось прикрепить - только переименовав в main.txt. Как lua - почему-то не прикреплялся.

[>] Re: еще вопросец (СТИД 2)
std.prog
Peter(syscall,1) — kolobod
2020-02-01 14:17:40


Ну там у тебя стоит [[ ]] - это и есть пустая реакция. Убери ее, а слудующую строку явно пометь как code =
		{ tag = 'ВЫЙТИ', 
		    'ВЫЙТИ', 
			code = [[ pon 'ВЫЙТИ'; walkback(); ]] --walkback(); walk 'groop_camp';	
		},					
P.S. Забыл я уже старое API. Переходи на новое потом. )

[>] 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 функциям. Если нет, подскажите наиболее оптимальную (проверенную) библиотеку для работы с юникодом. Заранее спасибо.
P.S. Edited: 2020-09-22 12:39:51 [изменено название]

[>] 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
Frost(ping,10) — Frost
2020-09-22 13:04:52


Спасибо. Я благодарен за уделенное внимание моему вопросу. Однако на текущем этапе мне сложно разбираться в коде метапарсера. Многое в ответе мне не ясно, например вы говорите, что "в последней версии INSTEAD есть и C реализация"; или "А вот как определяется, какую из реализаций брать - на Lua или на C. Чтобы работало и со старым и с новым INSTEAD". Это меня приводит в замешательство. Поэтому я продолжал искал ответ, который будет мне понятен на моем уровне изучения LUA. Кое что мне удалось найти. Ниже приведу несколько ссылок для тех, кто как и я имеет начальный уровень знаний.

Статья "Могу ли я использовать строки Юникода? Lua поддерживает Юникод?" http://lua-users.org/wiki/LuaUnicode" (на английском) в конце статьи даны ссылки на разные библиотеки для работы с Юникодом. Для себя я выделил две:

https://github.com/alexander-yakushev/awesompd/blob/master/utf8.lua самый простой вариант и

https://github.com/wikimedia/mediawiki-extensions-Scribunto/tree/master/includes/engines/LuaCommon/lualib/ustring имеет больший функционал
P.S. Edited: 2020-09-22 13:09:07

Вытекающий вопрос: можно ли перевести Instead на работу с LUA версии 5.3, в которой есть встроенная поддержка Юникода?

[>] 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
Frost(ping,10) — hugeping
2020-09-22 14:54:41


Файл с игрой называется main3.lua
P.S. Edited: 2020-09-22 14:59:01

Содержимое файла main3.lua

require 'sprite'
sprite.direct(true)
print(std.game.codepage)

[>] Re: Unicode строки в Instead
std.prog
hugeping(ping,1) — Frost
2020-09-22 15:00:55


> print(std.game.codepage)

Конечно, так не сработает, в этот момент game ещё нет. Но в моём коде std.game проверяется внутри функции, запуск которой предполагается в момент, когда игра уже запущена. Например, в start() и позже...

[>] Читшит с функциями INSTEAD
std.prog
hugeping(ping,1) — All
2020-10-11 21:10:23


Lucky_Ook некоторое время назад запилил читшиты с функциями INSTEAD. Чтобы не потерять, оставлю здесь: https://github.com/luckyuk/Instead-cheatsheet
P.S. Edited: 2020-10-11 21:10:56

[>] 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 ), но штатного механизма - нет.

[>] Как сделать переход из одной комнаты в две другие?
std.prog
hopkins1988(ping,34) — All
2021-06-23 15:30:07


Как сделать?
room{
title='первая комната'
name='первая комната'
way={path{'вторая комната','room2'}}
way={path{третья комната,'room3}}
}

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

Pages: 1 2 3 4 5