2016-10-26 8 views
1

У меня проблема с модой для конкретной игры. Возможно, вы слышали об этом, это называется «Не голодать вместе».Доступ или изменение локальной переменной, которая внутри функции, вне ее?

Внутри данных игры есть файл под названием 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. Какой код мне нужно написать для этого? Или это невозможно? В основном, я пытаюсь увеличить количество дневных сегментов (а также продлить время сегмента) в игре, и это, похоже, единственное место, откуда он доступен. Существует модем, который увеличивает время сегмента, но нет моды, которая увеличивает количество сегментов. 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

 Смежные вопросы

  • Нет связанных вопросов^_^