Инструменты пользователя

Инструменты сайта


ru:rpd:mods_scripts

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Последняя версияСледующая версия справа и слева
ru:rpd:mods_scripts [2017/11/11 16:56] mikeru:rpd:mods_scripts [2020/01/13 18:38] mike
Строка 7: Строка 7:
 Благодаря библиотеке luajava ( её реализации в luaj ) с помощью скриптов можно менять **всё**, однако такой  подход потребует хорошего знания java, lua и всей кодовой базы rpd, наша же цель сделать моддинг (процесс создания модов ) - максимально простым (насколько это возможно при разумных затратах времени на создание инструментов). Благодаря библиотеке luajava ( её реализации в luaj ) с помощью скриптов можно менять **всё**, однако такой  подход потребует хорошего знания java, lua и всей кодовой базы rpd, наша же цель сделать моддинг (процесс создания модов ) - максимально простым (насколько это возможно при разумных затратах времени на создание инструментов).
  
 +Общая структура скриптов в моде:
  
 +  * корневая папка мода
 +    * scripts - корневая папка для скриптов
 +      * lib - библиотеки RPD и другие, как правило модам здесь менять ничего не нужно
 +      * actors - тут лежат уже готовые акторы
 +      * traps - тут лежат уже готовые ловушки
 +
 +Скрипты основных библиотек имеют имена файлов в camelCase, пользовательские же скрипты предпочтительно именовать в CamelCase.
 +
 +Все файлы скриптов должны быть в кодировке UTF-8 без BOM.
 +
 +Ниже последует описание некоторых уже реализованных возможностей скриптинга:
 +
 +====== Ловушки (Они же триггеры) ======
 +
 +Ловушка ( LevelObject - Trap ) объект, который активируется когда на него наступает герой (или моб, или падает предмет в зависимости от параметров). При активации Trap может имитировать поведение одной из базовых ловушек или выполнить скрипт.
 +
 +На вход скрипт получает индекс клетки где должен сработать, существо, которое привело триггер в действие и строку указанную в описании ловушки.
 +
 +Например так будет выглядеть описание триггера который просто покажет текст:
 +
 +  {
 +  "kind":"Trap",
 +  "x":9,
 +  "y":9,
 +  "uses":1,
 +  "trapKind":"scriptFile",
 +  "script":"scripts/TrapMessage",
 +  "data":"This is test Message",
 +  }
 +
 +Посмотрите для примера на код файла [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/traps/Message.lua|scripts/traps/Message.lua]]
 +
 +====== Акторы ======
 +
 +Актор - это такая бесплотная сущность которая существует на уровне и периодически что-то делает.
 +
 +В отличие от ловушки актор может реализовывать 3 метода:
 +  * act - собственно действие, метод возвращает true - если другие акторы ( в том числе и встроенные ) действовать или же им нужно ждать. 
 +  * actionTime - возвращает время через которое актор активируется ещё раз
 +  * activate - выполняется один раз при добавлении актора на уровень
 +
 +Актора можно подцепить к уровню в Dungeon.json например так:
 +  "hotLevel":{"kind":"PredesignedLevel", "depth":0, "file":"levelsDesc/TestLevelSewers.json","script":"scripts/actors/Burn"}
 +  
 +  "script":"scripts/actors/Burn"
 +
 +Или же можно подцепить актора к уровню из любого другого скрипта ( например активируемого триггером ) примерно так:
 +  
 +''RPD.Dungeon.level:addScriptedActor(RPD.new(RPD.Objects.Actors.ScriptedActor,"scripts/actors/Burn"))''
 +  
 +А вот и пример [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/actors/Burn.lua|scripts/actors/Burn.lua]]
 +
 +====== Мобы ======
 +Мобы ( а с ними и NPC ) в обилии населяют город и подземелье.
 +
 +Для некоторых из них ( [[custommob|для кастомных]] ) можно задавать скрипты описывающие некоторые события в его жизни. 
 +
 +Сейчас это:
 +
 +  * Смерть ( пример - [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/mobs/Hydra.lua|Hydra]] )
 +  * Взаимодействие с героем ( пример - [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/mobs/Talkie.lua|Talkie]] )
 +  * Добавление моба на уровень (spawn)
 +  * Получение урона
 +  * Перемещение моба (move) - (пример - [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/mobs/NatureAura.lua|NatureAura]])
 +  * Задание характеристик (stats) (пример - [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/mobs/NatureAura.lua|NatureAura]])
 +
 +====== Библиотеки ======
 +
 +В этом разделе будут описаны встроенные библиотеки облегчающие жизнь мододела
 +
 +===== CommonClasses =====
 +
 +Модуль ''scripts/lib/commonClasses'' - содержит в себе объект RPD, а в нем привязки и id java классов, доступ к которым нам понадобится. Причём RPD.Objects содержит классы экземпляры которых можно создавать с помощью метода RPD.new
 +
 +Например: ''local msgWnd = RPD.new(RPD.Objects.Ui.WndMessage,"Message Text")''
 +
 +Остальные элементы RPD содержат привязки классов которые интересны для скриптов только статическими методами и/или  членами.
 +
 +Списки некоторых классов приведены ниже:
 +
 +==== Основные классы RPD ====
 +
 +Общий список доступных для lua классов можно увидеть по [[https://nyrds.github.io/RemixedDocs/|ссылке]]
 +
 +=== Блобы ===
 +Блобы - это жидкости, газы и что-то непонятное что можно выставить на карту вызовом:
 +
 +''RPD.Blobs.Blob:seed(cell,amount, blob )'' - где cell - куда, amount сколько, а blob - класс блоба.
 +
 +Где оно будет (или нет) как-то взаимодействовать с героем, мобами или с другими блобами.
 +
 +Список блобов:
 +<spoiler>
 +  * Fire
 +  * Foliage 
 +  * ConfusionGas
 +  * LiquidFlame
 +  * ParalyticGas
 +  * Darkness
 +  * Web
 +  * ToxicGas
 +  * Regrowth
 +</spoiler>
 +
 +===== Storage =====
 +
 +Модуль ''scripts/lib/storage'' позволяет сохранять данные привязанные к уровню, или же игровой сессии в целом. 
 +
 +Для этого он предоставляет 4 метода:
 +  * ''put(ключ, значение)'' - сохраняет значение для текущего уровня
 +  * ''gamePut(ключ, значение)''  - сохраняет значение для игровой сессии
 +
 +  * ''get(ключ)'' - возвращает ранее сохранённое значение для текущего уровня
 +  * ''gameGet(ключ)'' - возвращает ранее сохранённое значение для игровой сессии
 +
 +Ключом - может быть строка или число, значением же строка, число или же таблица
 +
 +Данные сохраняются в тех же файлах что и сейвы, а значит подчиняются всем правилам связанным классами и модами. Для сериализации/десериализации сейчас используется библиотека [[https://github.com/pkulchenko/serpent|serpent]]
 +
 +В качестве примера давайте рассмотрим [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/traps/Counter.lua|ловушку]], которая считает сколько на неё раз наступили и показывает соответствующий текст.
 +
 +===== Quest =====
 +
 +Модуль ''scripts/lib/quest'' существует для облегчения подготовки квестов.
 +
 +===== Mob =====
 +
 +Модуль ''scripts/lib/mob'' содержит методы позволяющие создавать собственных мобов.
ru/rpd/mods_scripts.txt · Последнее изменение: 2020/07/30 19:59 — mike