Получить доступ или изменить локальную переменную, которая внутри функции, вне ее?

У меня возникла небольшая проблема при попытке сделать мод для конкретной игры. Возможно, вы слышали об этом, это называется не голодать вместе.

Внутри данных игры есть файл tuning.lua, который обрабатывает множество начальных переменных. Внутри него есть просто функция, в которой находятся некоторые локальные переменные и таблица / массив / список с именем TUNING, который содержит кучу глобальных переменных. Локальные переменные под функцией, к которой я не могу получить доступ, так как они локальные, но я тоже не могу ничего там изменить, потому что они являются локальными переменными.

Поэтому вместо этого я работаю из совершенно другого файла, который внутри моего мода называется modmain.lua. Итак, мой вопрос, как я могу взять локальную переменную из функции, которая находится внутри скрипта tuning.lua, и изменить ее / использовать изнутри modmain.lua? Вот фрагмент кода tuning.lua:

TUNING = {} -- the table is created


function Tune(overrides)
    if overrides == nil then
        overrides = {}
    end
    --the following are the local variables used in the game
    local seg_time = 30
    local total_day_time = seg_time*16

    local day_segs = 10
    local dusk_segs = 4
    local night_segs = 2

    --default day composition. changes in winter, etc
    local day_time = seg_time * day_segs
    local dusk_time = seg_time * dusk_segs
    local night_time = seg_time * night_segs

    local multiplayer_attack_modifier = 1
    local multiplayer_goldentool_modifier = 1
    local multiplayer_armor_durability_modifier = 0.7
    local multiplayer_armor_absorption_modifier = 1
    local multiplayer_wildlife_respawn_modifier = 1

    local wilson_attack = 34 * multiplayer_attack_modifier
    local wilson_health = 150
    local calories_per_day = 75

    local wilson_attack_period = .1
    -----------------------

    local perish_warp = 1--/200

    TUNING =
    {
    --global variables go here
    }
end

Итак, допустим, я хотел взять total_day_time и изменить его на 24 в modmain.lua. Какой код мне нужно написать там, чтобы сделать это? Или это невозможно? По сути, я пытаюсь увеличить количество дневных сегментов (а также увеличить время сегмента) в игре, и это, кажется, единственное место, откуда он доступен. Существует мод, который увеличивает время сегмента, но не существует мода, который увеличивает количество сегментов. Вот сегменты, о которых я говорю, на случай, если вы понятия не имеете.

1 ответ

Ты можешь использовать _G табличная переменная для хранения и извлечения ваших действительно необходимых для хранения и извлечения "глобальных" переменных. Или, лучше, создать свой собственный модуль.

Код ниже не проверен:

tuning.lua

M.TUNING_VAR = {}

--just an example
local helloWorld = function()
   print("Hello World!")
end
M.template_path = '/BASEMODULE_PATH/file.tmpl'
function M:TUNING()
  return self.TUNING_VAR
end
function M:SET_TURNING(tbl)
 if tbl == nil then
        tbl = {}
 end
 self.TURNING = tbl
end
function M:Tune(overrides)
    if overrides == nil then
        overrides = {}
    end
    --the following are the local variables used in the game
    local seg_time = 30
    local total_day_time = seg_time*16

    local day_segs = 10
    local dusk_segs = 4
    local night_segs = 2

    --default day composition. changes in winter, etc
    local day_time = seg_time * day_segs
    local dusk_time = seg_time * dusk_segs
    local night_time = seg_time * night_segs

    local multiplayer_attack_modifier = 1
    local multiplayer_goldentool_modifier = 1
    local multiplayer_armor_durability_modifier = 0.7
    local multiplayer_armor_absorption_modifier = 1
    local multiplayer_wildlife_respawn_modifier = 1

    local wilson_attack = 34 * multiplayer_attack_modifier
    local wilson_health = 150
    local calories_per_day = 75

    local wilson_attack_period = .1
    -----------------------

    local perish_warp = 1--/200
    --your code

    self:SET_TURNING(overrides) -- or whatever your want
end

M.helloWorld = helloWorld
return M

использование

the_other_lua_file.lua

local module = require "turning"
local module:TURNING()["yourwantedvariable"] = newvalue
Другие вопросы по тегам