Текущая версия |
Ваш текст |
Строка 78: |
Строка 78: |
| | | |
| Но это, кажется, чересчур амбициозно и сложно. Надо подумать, что можно упростить. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 16:44, 6 февраля 2024 (MSK) | | Но это, кажется, чересчур амбициозно и сложно. Надо подумать, что можно упростить. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 16:44, 6 февраля 2024 (MSK) |
− | : Да, звучит как что-то чем только ты и я сможем пользоваться, а мне и JavaScript вполне удобен.
| |
− | : Я думала о чём-то вроде модуль «Генератор таблиц вероятностей», параметра у которого были бы «тип броска» (2d6-2) и «условие успеха» (5+). Но, возможно, в этом и есть главная сложность — можно ли описать подобные проверки какой-то простой системой параметров? Или хотя бы вынести в слой абстракции, который человек с опытом Lua 1 месяц сможет напиать (функции «бросок» и «условие успеха»). Ладно, буду думать. [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 17:12, 6 февраля 2024 (MSK)
| |
− | :: А я сделал прототип на Lua! Вот: https://paste.mozilla.org/5c6PANo0/raw (запускать в консоли — или, например, тут: https://onecompiler.com/lua/423pauc7x ) Парсер DSL'а ещё не сделал (входные данные задаю как массивы Lua), но я думаю взять формат типа Лиспа, для которого парсер пишется тривиально. (По сути я хочу формат примерно как выше, но с изобилием скобок, как в Лиспе — чтобы не мучиться с приоритетом операторов и т.п.).
| |
− | :: Эта версия не расставляет <code>rowspan</code>/<code>colspan</code> и в ней нет части нужных функций, но как прототип по-моему неплохо получилось. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 23:17, 6 февраля 2024 (MSK)
| |
− | :: Ещё мысли. Кажется, в Scribunto используется Lua 5.1? Вроде в ней аналог eval'а — <code>loadstring</code>, и вроде он не позволяет получить аргументы (и их надо передавать через глобальные переменные?). Звучит как-то некруто, не знаю (хотя в принципе можно и в глобальных... не знаю.) Если останоситься на написании условий на Lua, и не хочется глобальных переменных, то тогда логику условий придётся описывать в модулях отдельно от игры. ИМХО это чуть менее наглядно. (Мой DSL, конечно, труднее понять, чем Lua [особенно когда я его упростил до лиспоида] — но он будет прямо в коде статьи.)
| |
− | :: Впрочем, думаю, в любом случае вряд ли в ближайшее время этим будет заниматься кто-то кроме нас. Так что можно на JS писать и вставлять уже сгенерированное. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 02:38, 7 февраля 2024 (MSK)
| |
− | ::: Вот [https://ru.wikifur.com/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%93%D0%B5%D0%BD%D0%B5%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F пример подобного сложного модуля] из другой вики — если открыть для правки, там будет удобный редактор. Можно посмотреть на шаблон, который его использует, и на страницы, которые его используют. [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 09:02, 7 февраля 2024 (MSK)
| |
− | :::: Я верю, что на десктопе он удобный (сейчас с телефона, в нём этот редактор неюзабелен), но мне кажется менее удобным, что описание таблицы будет сильно далеко от текста статьи. Хотя, наверное, это не принципиально, можно и таким пользоваться. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 10:47, 7 февраля 2024 (MSK)
| |
− | ::::: Я надеялась, ты доберёшься до [https://ru.wikifur.com/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%93%D0%B5%D0%BD%D0%B5%D0%B0%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%C2%AB%D0%9A%D0%BE%D1%80%D0%BE%D0%BB%D1%8F_%D0%9B%D1%8C%D0%B2%D0%B0%C2%BB подобных шаблонов] и посмотришь, как там устроено задание параметров, которым случалось пользоваться с другим людям кроме автора %) [[Участник:EvilCat|EvilCat]] ([[Обсуждение участника:EvilCat|обсуждение]]) 11:06, 7 февраля 2024 (MSK)
| |
− | :::::: Ну на первый взгляд выглядит, что там что-то типа моего DSL'а, с такими отличиями:
| |
− | ::::::* (а) у меня новые строки, в этом шаблоне разные аргументы шаблона (мне мой вариант нраваится больше, но не принципиально)
| |
− | ::::::* (б) есть вспомогательные шаблоны, которые генерируют отдельные строки для (у нас такое тоже можно сделать, хотя ИМХО это не принципиально).
| |
− | :::::: Вынесу в отдельную подветку, а то у нас что-то много вложенности уже. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 15:55, 7 февраля 2024 (MSK)
| |
− |
| |
− | === Сравнение моего прототипа с модулем Генеалогии ===
| |
− |
| |
− | Общий принцип же такой же: на вход шаблону Генеалогия поступает текст типа такого (только вместо новых строк — |, каждая строка — отдельный аргумент):
| |
− |
| |
− | <pre>
| |
− | child, Симба , Нала , Копа ,border-color: crimson
| |
− | child, Симба , Нала , Киара ,
| |
− | child, Симба , Нала , Кайон ,
| |
− | </pre>
| |
− |
| |
− | Просто пользователь не пишет данные в этом формате, а добавляет их через шаблоны типа Генеалогия/Персонаж, Генеалогия/Союз, Генеалогия/Потомок.
| |
− |
| |
− | Это не так уж и отличается от моего
| |
− | <pre>
| |
− | (столбец Атрибут список d6 d8 d10 d12)
| |
− | (столбец Умение список (0 —) d6 d8 d10 d12)
| |
− | (столбец "Вероятность без переброски" вероятность (- 1 (* (< Атрибут 6) (< Умение 6))))
| |
− | </pre>
| |
− |
| |
− | Я взял S-выражения, потому что я хотел иметь произвольную математическую нотацию с возможностью добавлять новые функции. <code>loadstring</code> (аналог <code>eval</code>'а в Lua 5.1) я не брал потому, что передача данных через глобальные переменные или переменные окружения звучит... плохо. А парсер S-выражений написать довольно тривиально.)
| |
− |
| |
− | Кстати, доп. шаблоны можно использовать, чтобы распарсить математическую нотацию. Типа, чтобы писать <code><nowiki>{{Вероятность/Столбец|Вероятность без переброски|1 - (Атрибут < 6)*(Умение < 6)}}</nowiki></code>, и Шаблон:Вероятность/Столбец превращал формулу в S-выражения для основного шаблона. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 15:55, 7 февраля 2024 (MSK)
| |
− |
| |
− | '''Добавлено:''' возможно, для ясности стоит в математической нотации писать не <code>Атрибут < 6</code>, а <code>P(Атрибут < 6)</code>. Чтобы было ясно, что мы вероятность берём и дальше её умножает/отнимаем/etc. [[Участник:Demetrius|Demetrius]] ([[Обсуждение участника:Demetrius|обсуждение]]) 16:03, 7 февраля 2024 (MSK)
| |