所以我有一个想法,但最初的想法似乎是一个糟糕的。我想将UserData的脚本生命存储在外部表中(由require调用)。
我正在寻找实现此方法的方法,但我认为将UserData存储在全局环境中可能会很麻烦。有人能指出这种方法的任何陷阱吗?或者提供更好的建议?
外部(集中)功能 - 在脚本执行期间使用'require'加载:
--Chat.lua
--Location: Scripts/Globals/Custom/Functions/Chat
Convo = 0xD
Special = 0x1F
TempUserData = {}
TempTargetData = {}
function Show (Message, Display, Color, VAR1, VAR2, VAR3, VAR4, VAR5)
local User = TempUserData[1]
local Name = Display and TempTargetData[1]..": " or " "
Color = Color or Convo
VAR1 = VAR1 or nil
VAR2 = VAR2 or nil
VAR3 = VAR3 or nil
VAR4 = VAR4 or nil
VAR5 = VAR6 or nil
if (VAR1) then
User:PrintToUser(string.format(Name..Message, VAR1, VAR2, VAR3, VAR4, VAR5), Color)
else
User:PrintToUser(Name..Message, Color)
end
end
主要剧本:
---------------------------------------------------------------
package.loaded["Scripts/Globals/Custom/Functions/Chat"] = nil
require("Scripts/Globals/Custom/Functions/Chat")
---------------------------------------------------------------
local function foo (VAR1)
Show("Message")
Show("Message",true,Special,VAR1)
--Stuff
end
local function bar (VAR2)
Show("Message")
Show("Message",true,Special,VAR2)
--Stuff
end
function onTrigger (User, VAR1, VAR2, VAR3) --Start of script
table.insert(TempUserData, User)
table.insert(TempTargetData, "System")
--Stuff
end
我之所以这样做是因为:
用户:PrintToUser不是我的功能。它可能会在某些时候发生变化或被重命名,因为我有很多文件使用它,在一个位置更改它并将效果级联到我自己的自定义脚本对我很有吸引力。
有些消息可能很长,而且用户和目标与函数调用一致,只是一遍又一遍地添加空间。
最终结果更简洁,更清晰,从而使其在大型脚本中更具可读性。另外,让我更容易调试(多少次我拼错PrintToUser作为printToUser ...)
而不是:
User:PrintToUser(string.format("Message %s, %s", VAR1, VAR2), 0xD)
它可能更清洁:
Show("Message %s, %s", true, Convo, VAR1, VAR2) -- With variables
或
Show("Message",true) -- Display "System" with default color
Show("Message") -- Don't display "System", still with default color
我有两个问题:
根据上面的代码,如果有几个人一次使用相同的脚本,我会遇到问题吗? (即用户数据以某种方式混淆,或使用全局变量)。
以这种方式重新定义函数会不会导致性能下降?或者每次存储,检索,删除用户数据表? (200多人使用此)