瀏覽代碼

Added missing file

Ivan Savenko 2 年之前
父節點
當前提交
0f07870f4b
共有 1 個文件被更改,包括 209 次插入0 次删除
  1. 209 0
      docs/lua.md

+ 209 - 0
docs/lua.md

@@ -0,0 +1,209 @@
+# Configuration
+
+``` javascript
+{
+ 	//general purpose script, Lua or ERM, runs on server
+ 	"myScript":
+	{
+		"source":"path/to/script/with/ext",
+		"implements":"ANYTHING"
+	},
+
+
+ 	//custom battle spell effect, Lua only, runs on both client and server
+ 	//script ID will be used as effect 'type' (with mod prefix)
+ 	"mySpellEffect":
+	{
+		"source":"path/to/script/with/ext",
+		"implements":"BATTLE_EFFECT"
+	},
+
+	//TODO: object|building type
+ 	//custom map object or building, Lua only, runs on both client and server
+ 	//script ID will be used as 'handler' (with mod prefix)
+ 	"myObjectType":
+	{
+		"source":"path/to/script/with/ext",
+		"implements":"MAP_OBJECT"
+	},
+	//TODO: server query
+	//TODO: client query
+
+}
+```
+
+# Lua
+
+## API Reference
+
+TODO **In near future Lua API may change drastically several times.
+Information here may be outdated**
+
+### Globals
+
+-   DATA - persistent table
+    -   DATA.ERM contains ERM state, anything else is free to use.
+-   GAME - IGameInfoCallback API
+-   BATTLE - IBattleInfoCallback API
+-   EVENT_BUS - opaque handle, for use with events API
+-   SERVICES - root "raw" access to all static game objects
+    -   SERVICES:artifacts()
+    -   SERVICES:creatures()
+    -   SERVICES:factions()
+    -   SERVICES:heroClasses()
+    -   SERVICES:heroTypes()
+    -   SERVICES:spells()
+    -   SERVICES:skills()
+-   require(URI)
+    -   works similar to usual Lua require
+    -   require("ClassName") - loads additional API and returns it as
+        table (for C++ classes)
+    -   require("core:relative.path.to.module") - loads module from
+        "SCRIPTS/LIB"
+    -   TODO require("modName:relative.path.to.module") - loads module
+        from dependent mod
+    -   TODO require(":relative.path.to.module") - loads module from
+        same mod
+-   logError(text) - backup error log function
+
+### Low level events API
+
+``` Lua
+
+-- Each event type must be loaded first
+local PlayerGotTurn = require("events.PlayerGotTurn")
+
+-- in this example subscription handles made global, do so if there is no better place
+-- !!! do not store them in local variables
+sub1 = 	PlayerGotTurn.subscribeAfter(EVENT_BUS, function(event)
+		--do smth
+	end)
+
+sub2 = 	PlayerGotTurn.subscribeBefore(EVENT_BUS, function(event)
+		--do smth
+	end)
+```
+
+### Lua standard library
+
+VCMI uses LuaJIT, which is Lua 5.1 API, see [upstream
+documentation](https://www.lua.org/manual/5.1/manual.html)
+
+Following libraries are supported
+
+-   base
+-   table
+-   string
+-   math
+-   bit
+
+# ERM
+
+## Features
+
+-   no strict limit on function/variable numbers (technical limit 32 bit
+    integer except 0))
+-   TODO semi compare
+-   DONE macros
+
+## Bugs
+
+-   TODO Broken XOR support (clashes with \`X\` option)
+
+## Triggers
+
+-   TODO **!?AE** Equip/Unequip artifact
+-   WIP **!?BA** when any battle occurs
+-   WIP **!?BF** when a battlefield is prepared for a battle
+-   TODO **!?BG** at every action taken by any stack or by the hero
+-   TODO **!?BR** at every turn of a battle
+-   *!?CM (client only) click the mouse button.*
+-   TODO **!?CO** Commander triggers
+-   TODO **!?DL** Custom dialogs
+-   DONE **!?FU** function
+-   TODO **!?GE** "global" event
+-   TODO **!?GM** Saving/Loading
+-   TODO **!?HE** when the hero \# is attacked by an enemy hero or
+    visited by an allied hero
+-   TODO **!?HL** hero gains a level
+-   TODO **!?HM** every step a hero \# takes
+-   *!?IP Multiplayer support.*
+-   TODO **!?LE** (!$LE) An Event on the map
+-   WIP **!?MF** stack taking physical damage(before an action)
+-   TODO **!?MG** casting on the adventure map
+-   *!?MM scroll text during a battle*
+-   TODO **!?MR** Magic resistance
+-   TODO **!?MW** Wandering Monsters
+-   WIP **!?OB** (!$OB) visiting objects
+-   DONE **!?PI** Post Instruction.
+-   TODO **!?SN** Sound and ERA extensions
+-   *!?TH town hall*
+-   TODO **!?TL** Real-Time Timer
+-   TODO **!?TM** timed events
+
+## Receivers
+
+### VCMI
+
+-   **!!MC:S@varName@** - declare new "normal" variable (technically
+    v-var with string key)
+-   TODO Identifier resolver
+-   WIP Bonus system
+
+### ERA
+
+-   DONE !!if !!el !!en
+-   TODO !!br !!co
+-   TODO !!SN:X
+
+### WoG
+
+-   TODO !!AR Артефакт (ресурс) в определенной позиции
+-   TODO !!BA Битва
+    -   !!BA:A$ return 1 for battle evaluation
+-   TODO !!BF Препятствия на поле боя
+-   TODO !!BG Действий монстров в бою
+-   TODO !!BH Действия героя в бою
+-   TODO !!BM Монстр в битве
+-   WIP !!BU Универсальные параметры битвы
+-   TODO !!CA Замок
+-   TODO !!CD Разрушения замков
+-   TODO !!CE События в замке
+-   TODO !!CM Клика мышью
+-   TODO !!DL Нестандартный диалог (только ТЕ или выше)
+-   TODO !!CO Командиры
+-   WIP !!DO Многократный вызов функции
+-   TODO !!EA Бонусы опыта существ
+-   TODO !!EX Опыт стека
+-   DONE !!FU Однократный вызов функции
+-   TODO !!GE Глобальное событие
+-   WIP !!HE Герой
+-   TODO !!HL Новый уровень героя
+-   TODO !!HO Взаимодействия героев
+-   TODO !!HT Подсказки по правому клику
+-   WIP !!IF Диалоги и флагов
+-   TODO !!IP Сетевой сервис битвы
+-   TODO !!LE Локальное события
+-   WIP !!MA Общие параметры монстров
+-   DONE !!MC Макросы
+-   WIP !!MF Получение физ. урона в бою
+-   TODO !!MM Текст в битве
+-   WIP !!MO Монстр в определенной позиции
+-   TODO !!MP Контроль MP3
+-   TODO !!MR Сопротивления магии
+-   TODO !!MW Бродячих монстров
+-   WIP !!OB Объект в определенной позиции
+-   TODO !!OW Параметры игрока
+-   TODO !!PM Пирамиды или новые объекты
+-   TODO !!PO Информация квадрата карты
+-   TODO (???) !!QW Журнала
+-   TODO !!SN Проигрываемые звуков
+-   TODO !!SS Настройка заклинаний (только ТЕ или выше)
+-   TODO !!TL Контроль времени хода (только ТЕ или выше)
+-   TODO !!TM Временный таймер
+-   TODO !!TR Квадрата карты (почва, проходимость, т.п.)
+-   TODO !!UN Универсальная команда
+-   *!#VC Контроль переменных*
+-   WIP !!VR Установка переменных
+
+## Persistence