Don't Starve вики
Advertisement
Don't Starve вики
1944
страницы

Голова арфиста.png

Статья содержит неполную информацию.
Вы можете помочь Don't Starve вики, дополнив её.

API (Application Program Interface) — набор программных функций и переменных, которые Klei специально приготовили для разработчиков модов. Большая часть игры состоит из открытого кода на языке Lua. Поэтому, можно сказать, что весь код игры является огромным API. Но для более удобного понимания всё же следует выделить отдельные функции и переменные и описать их независимо друг от друга.

Элемент API — это название функции или переменной. Смысл его в том, что вы просто берёте готовый элемент и используете его. Когда вы меняете этот элемент, вам не нужно помнить обо всех местах, где он используется. Вам нужно лишь следить, чтобы элемент соответствовал своему названию и назначению. Большинство элементов уже созданы для нас, и их можно просто использовать, не вникая в тонкости внутреннего устройства. Каждый элемент обязан иметь говорящее за себя название.

Такая концепция позволяет творить, удобно оперируя комплексными элементами, не заморачиваясь деталями. Вся черновая работа скрыта от глаз разработчика мода, и он может сосредоточиться на творчестве, а не на рутине. Кроме того, такой подход позволяет разделять обязанности между несколькими разработчиками модов (и также разработчиками игры).

TUNING

Файл tuning содержит в себе постоянные величины, которые можно вызвать с помощью TUNING.ИМЯ_ПОСТОЯННОЙ. В основном это показатели мобов, предметов и структур.

Пример использования:

		health = TUNING.HEALING_MED,
		hunger = TUNING.CALORIES_LARGE,
		perishtime = TUNING.PERISH_SLOW,
		sanity = TUNING.SANITY_TINY,

В файле tuning содержатся следующие значения этих постоянных:

    HEALING_MED = 20,
    CALORIES_LARGE = calories_per_day/2,
    PERISH_SLOW = 15*total_day_time*perish_warp,
    SANITY_TINY = 5,

Как вы можете заметить, внутри файла TUNING используются внутренние переменные, как у нас в примере:

local calories_per_day = 75
local total_day_time = seg_time*16
local perish_warp = 1

Также существует файл tuning_override, в котором содержатся постоянные для разных настроек в меню создания мира.

Компоненты

Компоненты позволяют существенно сократить код. Вместо того, чтобы прописывать двум объектам одинаковые функции, где отличаться будут только значения, например, урона, компоненты позволяют назначить только эти самые различия через переменные.

Компоненты используются почти во всех объектах кода игры.

Глобальные функции

Глобальные функции могут быть вызваны из любого другого файла.

Пример глобальной функции:

function globalfunction(params)
    print("I am globalFunction")
end

Вызов:

globalFunction(param)

Разберём на примере глобальных функций компонентов:

    inst.components.childspawner:SetRegenPeriod(90)

Данный код вызывает глобальную функцию компонента childspawner и назначает параметру period значение в 90 секунд:

function ChildSpawner:SetRegenPeriod(period, variance)
    self.regenperiod = period
    self.regenvariance = variance or period * 0.1
end

Функции префаба

Локальные функции действуют только внутри файла и прописываются следующим образом:

local function namefunction(params)
    print("I am localfunction")
end

Вызвать локальную функцию можно только внутри файла.

Разберём на примере функции, заставляющей посох призывателя звёзд создавать звезду при вселении в него призрака персонажа:

local function onhauntlight(inst)
    if math.random() <= TUNING.HAUNT_CHANCE_RARE then
        local pos = inst:GetPosition()
        local start_angle = math.random() * 2 * PI
        local offset = FindWalkableOffset(pos, start_angle, math.random(3, 12), 60, false, true, NoHoles)
        if offset ~= nil then
            createlight(inst, nil, pos + offset)
            inst.components.hauntable.hauntvalue = TUNING.HAUNT_LARGE
            return true
        end
    end
    return false
end

Вызов функции внутри файла:

AddHauntableCustomReaction(inst, onhauntlight, true, false, true)

При этом функция вызывается в глобальной функции AddHauntableCustomReaction (см. предыдущий раздел).

Тэги

Тэги присуждаются префабу с помощью следующего кода:

inst:AddTag("name")

Тэги — это своеобразные категории объектов в коде. Они присуждаются нескольким префабам, и впоследствии служат для того, чтобы не прописывать каждый объект, а прописывать нужный тэг.

Пример использования в коде Абигейл:

local function auratest(inst, target)
    return target:HasTag("monster") or target:HasTag("prey")
end

В данном случае целью Абигейл назначаются объекты в игре, имеющие теги "monster" и "prey". Представьте, каково было бы прописывать каждого монстра по отдельности.

Разное, не сортированное

Advertisement