访问或更改函数内部的局部变量吗?

时间:2016-10-26 11:39:57

标签: lua local

我尝试为特定游戏制作mod时遇到了一些问题。你可能听说过它,它叫做“不要一起饿死”。

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

所以,相反,我在一个完全不同的文件中工作,在我的mod里面,名为modmain.lua。所以,我的问题是,如何从tuning.lua脚本中的函数中获取局部变量并在modmain.lua中更改它/使用它?这是一个tune.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改成modmain.lua中的24。我需要在那里写什么代码才能这样做?或者这不可能吗?基本上,我正在尝试增加游戏中的日段数量(以及延长段时间),这似乎是唯一可以从中访问的地方。有一个mod可以增加分段时间,但是没有mod可以增加分段数量。 Here's segments that I'm talking about, in case you have no idea.

1 个答案:

答案 0 :(得分:0)

您可以使用_G表变量来存储和检索您真正需要存储和检索" global"变量。 或者,更好的是,创建自己的自定义模块。

以下代码未经过测试:

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