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

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


ru:rpd:mods_scripts

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ru:rpd:mods_scripts [2017/11/13 18:43]
mike
ru:rpd:mods_scripts [2020/07/30 19:59] (текущий)
mike
Строка 6: Строка 6:
  
 Благодаря библиотеке luajava ( её реализации в luaj ) с помощью скриптов можно менять **всё**, однако такой  подход потребует хорошего знания java, lua и всей кодовой базы rpd, наша же цель сделать моддинг (процесс создания модов ) - максимально простым (насколько это возможно при разумных затратах времени на создание инструментов). Благодаря библиотеке luajava ( её реализации в luaj ) с помощью скриптов можно менять **всё**, однако такой  подход потребует хорошего знания java, lua и всей кодовой базы rpd, наша же цель сделать моддинг (процесс создания модов ) - максимально простым (насколько это возможно при разумных затратах времени на создание инструментов).
 +
 +Общая структура скриптов в моде:
 +
 +  * корневая папка мода
 +    * scripts - корневая папка для скриптов
 +      * lib - библиотеки RPD и другие, как правило модам здесь менять ничего не нужно
 +      * actors - тут лежат уже готовые акторы
 +      * traps - тут лежат уже готовые ловушки
 +
 +Скрипты основных библиотек имеют имена файлов в camelCase, пользовательские же скрипты предпочтительно именовать в CamelCase.
 +
 +Все файлы скриптов должны быть в кодировке UTF-8 без BOM.
  
 Ниже последует описание некоторых уже реализованных возможностей скриптинга: Ниже последует описание некоторых уже реализованных возможностей скриптинга:
Строка 11: Строка 23:
 ====== Ловушки (Они же триггеры) ====== ====== Ловушки (Они же триггеры) ======
  
-Ловушка ( LevelObject - Trap ) объект который активируется когда на него наступает герой (или моб, или падает предмет в засимости от параметров). При активации Trap может имитировать поведение одной из базовых ловушек или выполнить скрипт.+Ловушка ( LevelObject - Trap ) объекткоторый активируется когда на него наступает герой (или моб, или падает предмет в зависимости от параметров). При активации Trap может имитировать поведение одной из базовых ловушек или выполнить скрипт.
  
-На вход скрипт получает индекс клетки где должен сработать, существо которое привело тригер в действие и строку указанную в описании ловушки.+На вход скрипт получает индекс клетки где должен сработать, существокоторое привело триггер в действие и строку указанную в описании ловушки.
  
-Например так будет выглядеть описание тригера который просто покажет текст:+Например так будет выглядеть описание триггера который просто покажет текст:
  
   {   {
Строка 27: Строка 39:
   }   }
  
-А код файла scripts/TrapMessage.lua будет таким: +Посмотрите для примера на код файла [[https://github.com/NYRDS/remixed-dungeon/blob/master/RemixedDungeon/src/main/assets/scripts/traps/Message.lua|scripts/traps/Message.lua]]
- +
-  local RPD = require "scripts/commonClasses" +
-  local trap = require"scripts/TrapCommon" +
-  -- +
-  return trap.init( +
-    function (cell, char, data) +
-        local wnd = RPD.new(RPD.Objects.Ui.WndMessage,data) +
-        RPD.GameScene:show(wnd) +
-    end +
-  ) +
  
 ====== Акторы ====== ====== Акторы ======
  
-Актор - это такая бесплотная сущность которая существует на уровне и переодически что-то делает.+Актор - это такая бесплотная сущность которая существует на уровне и периодически что-то делает.
  
 В отличие от ловушки актор может реализовывать 3 метода: В отличие от ловушки актор может реализовывать 3 метода:
Строка 50: Строка 51:
  
 Актора можно подцепить к уровню в Dungeon.json например так: Актора можно подцепить к уровню в Dungeon.json например так:
-  "hotLevel":{"kind":"PredesignedLevel", "depth":0, "file":"levelsDesc/TestLevelSewers.json","script":"scripts/Burn"}+  "hotLevel":{"kind":"PredesignedLevel", "depth":0, "file":"levelsDesc/TestLevelSewers.json","script":"scripts/actors/Burn"}
      
-  "script":"scripts/Burn"+  "script":"scripts/actors/Burn"
  
 Или же можно подцепить актора к уровню из любого другого скрипта ( например активируемого триггером ) примерно так: Или же можно подцепить актора к уровню из любого другого скрипта ( например активируемого триггером ) примерно так:
      
-  RPD.Dungeon.level:addScriptedActor(RPD.new(RPD.Objects.Actors.ScriptedActor,"scripts/Burn"))+''RPD.Dungeon.level:addScriptedActor(RPD.new(RPD.Objects.Actors.ScriptedActor,"scripts/actors/Burn"))''
      
-Сам же scripts/Burn.lua выглядет так:+А вот и пример [[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]])
  
-  local RPD = require "scripts/commonClasses" 
-  local actor = require "scripts/ActorCommon" 
-  return actor.init({ 
-    act = function() 
-        local levelSize = RPD.Dungeon.level:getLength() 
-        local cell = math.random(levelSize)-1 
-        if not RPD.Dungeon.level.solid[cell] then 
-            RPD.GameScene:add( RPD.Blobs.Blob:seed(cell,10, RPD.Blobs.Fire )) 
-        end 
-        return true 
-    end, 
-    actionTime = function() 
-        return 1 
-    end, 
-    activate = function() 
-       local wnd = RPD.new(RPD.Objects.Ui.WndStory,"It gonna be hot here...") 
-       RPD.GameScene:show(wnd) 
-    end 
-  }) 
-   
 ====== Библиотеки ====== ====== Библиотеки ======
  
Строка 86: Строка 81:
 ===== CommonClasses ===== ===== CommonClasses =====
  
-Модуль ''scripts/commonClasses'' - содержит в себе объект RPD, а в нем привязки и id java классов, доступ к которым нам понадобится. Причём RPD.Objects содержит классы экземпляры которых можно создавать с помощью метода RPD.new+Модуль ''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 - класс блоба. 
 + 
 +Где оно будет (или нет) как-то взаимодействовать с героем, мобами или с другими блобами. 
 + 
 +Список блобов: 
 + 
 +  * Fire 
 +  * Foliage  
 +  * ConfusionGas 
 +  * LiquidFlame 
 +  * ParalyticGas 
 +  * Darkness 
 +  * Web 
 +  * ToxicGas 
 +  * Regrowth
  
-Например: ''local msgWnd = RPD.new(RPD.Objects.Ui.WndMessage,"Message Text")'',  
  
 ===== Storage ===== ===== Storage =====
Строка 105: Строка 128:
 Данные сохраняются в тех же файлах что и сейвы, а значит подчиняются всем правилам связанным классами и модами. Для сериализации/десериализации сейчас используется библиотека [[https://github.com/pkulchenko/serpent|serpent]] Данные сохраняются в тех же файлах что и сейвы, а значит подчиняются всем правилам связанным классами и модами. Для сериализации/десериализации сейчас используется библиотека [[https://github.com/pkulchenko/serpent|serpent]]
  
-В качестве примера давайте рассмотрим [[https://github.com/NYRDS/pixel-dungeon-remix/blob/master/PixelDungeon/src/main/assets/scripts/traps/Counter.lua|ловушку]] которая считает сколько на неё раз наступили и показывает соответствующий текст+В качестве примера давайте рассмотрим [[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.1510598583.txt.gz · Последнее изменение: 2017/11/13 18:43 — mike