如何在函数内部访问或更改本地变量在其外部?

我正在尝试为特定游戏制作一个修改器,但遇到了一点问题。您可能听说过它,它叫做《不要饿死在一起》。

在游戏数据内,有一个名为tuning.lua的文件,用于处理大量初始变量。其中只有一个函数,在其下面是一些本地变量和一个名为TUNING的表或数组或列表,其中包含一堆全局变量。函数下面的本地变量我无法访问,因为它们是本地变量,但我也无法更改它们,因为它们是本地变量。

所以,我现在从完全不同的文件modmain.lua中,即我的修改器内部工作。所以,我的问题是,如何从tuning.lua脚本内部的函数中获取一个本地变量,并从modmain.lua中更改或使用它?这是tuning.lua代码的一部分:

TUNING = {} -- 创建该表

function Tune(overrides)
    if overrides == nil then
        overrides = {}
    end
    --以下是游戏中使用的本地变量
    local seg_time = 30
    local total_day_time = seg_time*16

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

    --默认的白天组成。在冬天等时会发生变化
    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 =
    {
    --全局变量在这里
    }
end

假设我现在想要从modmain.lua中获取total_day_time并将其更改为24。我需要写什么代码来实现它?或者这是不可能的吗?基本上,我正在尝试增加游戏中的白天部分数(以及延长节段时间),而这似乎是唯一可以访问它们的地方。有一个修改器可以增加节段时间,但没有一个可以增加节段数量。这是我所说的部分,以防您不知道。

点赞
用户1979882
用户1979882

您可以使用_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
    --以下是游戏中使用的本地变量
    local seg_time = 30
    local total_day_time = seg_time*16

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

    --默认白天的组成。在冬天等季节发生变化
    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"
module:TURNING()["yourwantedvariable"] = newvalue
2016-10-26 12:50:44