Lua Scripting System
Configuration
{
//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
-- 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
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 Установка переменных