Получить доступ или изменить локальную переменную, которая внутри функции, вне ее?
У меня возникла небольшая проблема при попытке сделать мод для конкретной игры. Возможно, вы слышали об этом, это называется не голодать вместе.
Внутри данных игры есть файл 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