我尝试为特定游戏制作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.
答案 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