Git Product home page Git Product logo

metaparser's Introduction

metaparser's People

Contributors

fireton avatar hugeping avatar oreolek avatar tseykovets avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

metaparser's Issues

Загрузка снапшота ломает транскрипт

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

Что должно быть:

  • транскрипт не должен записывать дважды то, чего даже не произошло
  • хорошо бы добавить какую-нибудь разделительную линию "ЗАГРУЗКА СНАПШОТА" в транскрипт

Прилагаю минимальный пример для проверки. Как проверять:

  • транскрипт

  • (сделать что угодно, например, осмотреть комнату или предметы)
  • нажать на кнопку

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

when_open у контейнера

obj {
-"кейс";
nam = "кейс";
when_closed = "Массивный стальной кейс.";
when_open = "Кейс стоит нараспашку.";
obj = {'предмет'};
with_key = 'ключ';
}:attr 'static, openable, lockable, locked, container';

При открытом кейсе на команду "осмотреть кейс" выводится: "В кейсе находится предмет."
when_open игнорируется.

Снимать атрибут "concealed" если объект был взят

Ну это просто логично. Потому что если его потом положить, то он «потеряется».

Это для тех объектов, которые можно взять, они присутствуют на сцене, но их надо как-то «проявить» другими действиями игрока.

Улучшения стандартной библиотеки

Варианты улучшений для потенциальной будущей версии Метапарсера. В виде сырых идей.

Расширения существующих глаголов:

  • читать [что-то] (см. #11)
  • налить [в что-то] [что-то] (см. 17 комнат - room10.lua)
  • надеть [что-то] [на что-то] (см. 17 комнат - room14.lua)
  • повесить = положить (см. 17 комнат - room8.lua, room17.lua)
  • помахать [кому-то]
  • идти [по чему-то]
  • перевернуть = повернуть (эти три - см. 17 комнат - room2.lua)
  • ударить [что-то] [чем-то] (используется в Башне-между-мирами Корвина на ТАДС)
  • купить [что-то] [у кого-то]

Новые глаголы:

  • играть [на чем-то] (см. 17 комнат - room4.lua)
  • покрасить [что-то] [чем-то]
  • починить [что-то] [чем-то]
  • помыть/почистить [что-то] [чем-то] (эти три тоже используются в Башне-между-мирами)
  • посыпать [что-то] [чем-то]
  • стрелять [в что-то] [из чего-то]
  • продать [что-то] [кому-то] (если купить можно, то должно быть и продать)
  • XYZZY

Псевдо-события для страдательных объектов:

  • привязать -> TieTo
  • резать, копать, жечь, налить, ударить (+ покрасить, починить, помыть, посыпать) -> MakeUse
  • купить -> life_Take
  • (продать) -> life_Give
  • (стрелять) -> ShotBy

Статусы предметов в инвентаре

Если предмет светит, статус не отображается вообще, желательно сделать по анологии с "открыт/закрыт", например "лампа (светит)".
Также - если у предмета два статуса (например, открыт и надет), выводится только один. Неплохо бы выводить все, например "сумка (открыта и надета)".

Метапарсер не имеет команды повтора

Такая фича есть в RTADS и RInform (команды «п», «еще» в RTADS и «снова» в RInform). В некоторых играх полезно.

Да, в инстеде можно нажать стрелку вверх и Enter. Но это получается зависимость от интерпретатора и не сработает, например, в ботах.

Реакции для вспомогательных объектов при резании, копании, привязывании

Для команд:

  • резать объект А объектом Б
  • копать объект А объектом Б
  • привязать объект А к объекту Б

прописаны обработчики для объекта А, но не для объекта Б. Может быть неудобно, если хочется прописать для объекта Б некую реакцию по умолчанию.
Т.е. нужен аналог ThrownAt/Recieve для действий резать/копать/привязать (возможно, и для других, но мне не хватало именно этих).

Опознавать объект по местоположению

Просто пожелание на подумать.

Например, в комнате есть два яблока. Одно красное — в инвентаре. И одно зелёное — на столе.
Если написать
> взять яблоко со стола
то ответ будет всё равно
Здесь есть красное яблоко и зелёное яблоко.

Мало того, что «взять» можно только то, что у тебя нет в инвентаре. Так ещё ж и игрок явно написал, что нужное ему яблоко — на столе.

В «Разломе» у меня были два баллона, пустой и полный. И игроки регулярно напарывались на то, что когда пишешь
> снять баллон со скафандра
то игра их не понимает.

Я понимаю, что МП оперирует понятием scope, но может как-то сужать этот scope, когда в строке уже есть какие-то уточнения помимо полного названия предмета?

Чтение по умолчанию

Сейчас команды "осмотреть книгу" и "читать книгу" делают одно и то же. Чтобы вызвать обработчик Consult, нужно вводить "читать в книге про <что-то>", что неудобно, т.к. игрок может не догадаться ввести это.
В принципе, в игре это можно обойти через костыль:

VerbRemove "#Consult"
Verb {
	"#Read",
	"[|про|по]чита/ть,проч/есть",
	"в|во {noun}/пр,2 о|об|обо|про * : Consult",
	"~ о|об|обо|про * в|во {noun}/пр,2 : Consult reverse",
	"~ {noun}/вн : Consult",
}
function mp:after_Consult(s, o)
	if not o then
		mp:xaction('Exam', s)
		return
	end
	mp:message 'Consult.CONSULT'
end

Но было бы неплохо, если бы такое было непосредственно в МП.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.