Spring RTS Lua: function widget:UnitFinished(unitID, unitDefID, unitTeam) if (unitDefID == HEAVY_TANK) then …

В движке Spring RTS виджеты (widgets) — это клиентские Lua-скрипты, которые позволяют расширять интерфейс и логику игры на стороне клиента. Функция `widget:UnitFinished(unitID, unitDefID, unitTeam)` является колбэком (callback), который вызывается каждый раз, когда какой-либо юнит завершает постройку на карте.

**Параметры функции:**
— `unitID` — уникальный числовой идентификатор конкретного экземпляра юнита в текущей игре.
— `unitDefID` — идентификатор *типа* юнита (ссылается на запись в UnitDefs). Именно это значение используется для определения, что за юнит был построен.
— `unitTeam` — номер команды (игрока), которому принадлежит юнит.

**Типичный паттерн использования:**

Сначала в теле виджета объявляется константа с нужным DefID:
lua
local HEAVY_TANK = UnitDefNames[«heavy_tank»].id

Затем в колбэке проверяется тип построенного юнита:
lua
function widget:UnitFinished(unitID, unitDefID, unitTeam)
if unitDefID == HEAVY_TANK then
— реакция на постройку тяжёлого танка
Spring.Echo(«Тяжёлый танк построен! ID: » .. unitID)
end
end

**Важные нюансы:**
1. `UnitDefNames` — глобальная таблица, доступная в Lua Spring RTS, которая индексируется по внутреннему имени юнита (строка из конфига).
2. Колбэк срабатывает для *всех* команд, поэтому если нужно реагировать только на своих юнитов, следует добавить проверку `unitTeam == Spring.GetMyTeamID()`.
3. Функция вызывается как для юнитов, построенных зданиями, так и для тех, что появляются через скрипты или читы.
4. Если нужно отслеживать несколько типов, удобно использовать таблицу-множество:
lua
local TRACKED_UNITS = {
[UnitDefNames[«heavy_tank»].id] = true,
[UnitDefNames[«artillery»].id] = true,
}
function widget:UnitFinished(unitID, unitDefID, unitTeam)
if TRACKED_UNITS[unitDefID] then
— обработка
end
end

Такой подход позволяет эффективно создавать автоматические реакции: уведомления, автоприказы, статистику и многое другое.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.