2016-10-26 62 views
1

我試圖爲特定的遊戲製作模組時遇到了一些問題。你可能聽說過它,它被稱爲不要餓死在一起。訪問或更改一個局部變量,它在一個函數內部,在它之外?

在遊戲的數據內部,有一個名爲tuning.lua的文件,它處理很多初始變量。它內部只是一個函數,其中有一些局部變量和一個名爲TUNING的表/數組/列表,其中包含一堆全局變量。函數I下面的局部變量不能訪問,因爲它們是局部變量,但我不能在那裏更改任何變量,因爲它們是局部變量。

所以,相反,我正在從一個完全不同的文件中進行工作,這個文件在我的mod中稱爲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採取和modmain.lua內將其更改爲24。我需要寫什麼代碼才能這樣做?或者這是不可能的?基本上,我試圖增加遊戲中的細分數量(以及延長細分時間),這似乎是它從中訪問的唯一地方。在那裏有一個mod可以增加分段時間,但是沒有增加分段數量的mod。 Here's segments that I'm talking about, in case you have no idea.

回答

0

您可以使用_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 
+0

這是,我不能編輯tuning.lua。就像在這裏,它是代碼,這是原始遊戲的一部分,我不能編輯或取出任何東西。我所能做的就是創建新文件,它們覆蓋它們或覆蓋它們的特定部分,無論是函數還是變量。如果我編輯其中的任何內容,那麼對於任何不編輯特定原始遊戲文件的人來說,該模式將不起作用,並且當遊戲更新時,一切都會被覆蓋,這將非常不方便。 – XirmiX

相關問題