规则包加载流程优化

This commit is contained in:
MrZ_26
2024-08-11 13:13:03 +08:00
parent 40f148b6b3
commit a8e0574f44
2 changed files with 45 additions and 31 deletions

View File

@@ -62,10 +62,7 @@ return {
mindas=0,minarr=0,minsdarr=0, mindas=0,minarr=0,minsdarr=0,
noInitSZO=false, noInitSZO=false,
mesDisp={}, -- Some Events are registered in player/init.lua, see "tableNeedMerge"
hook_drop={},
hook_die={},
task={},
extraEvent={ extraEvent={
{'attack',4}, {'attack',4},
}, },

View File

@@ -236,17 +236,7 @@ local function _loadRemoteEnv(P,confStr)-- Load gameEnv
end end
end end
end end
local function _mergeFuncTable(f,L) local tableNeedMerge={
if type(f)=='function' then
ins(L,f)
elseif type(f)=='table' then
for i=1,#f do
ins(L,f[i])
end
end
return L
end
local hooks = {
'task', 'task',
'mesDisp', 'mesDisp',
'hook_left', 'hook_left',
@@ -260,35 +250,62 @@ local hooks = {
'hook_spawn', 'hook_spawn',
'hook_hold', 'hook_hold',
'hook_die', 'hook_die',
'extraEvent',
} }
local function _mergeFuncTable(f,L)
if type(f)=='function' then
ins(L,f)
elseif type(f)=='table' then
for i=1,#f do
ins(L,f[i])
end
end
return L
end
local function _applyGameEnv(P)-- Finish gameEnv processing local function _applyGameEnv(P)-- Finish gameEnv processing
local ENV=P.gameEnv local ENV=P.gameEnv
-- Apply events -- Create event tables
for i=1,#hooks do for i=1,#tableNeedMerge do
ENV[hooks[i]]=_mergeFuncTable(ENV[hooks[i]],{}) ENV[tableNeedMerge[i]]=_mergeFuncTable(ENV[tableNeedMerge[i]],{})
end end
-- Apply eventSet -- Apply eventSet
if ENV.eventSet and ENV.eventSet~="X" then while true do
if type(ENV.eventSet)=='string' then if not (ENV.eventSet and ENV.eventSet~="X") then
local eventSet=require('parts.eventsets.'..ENV.eventSet) break
if eventSet then end
for k,v in next,eventSet do if type(ENV.eventSet)~='string' then
if TABLE.find(hooks,k) then MES.new('warn',"Wrong event set type: "..type(ENV.eventSet))
_mergeFuncTable(v,ENV[k]) break
elseif type(v)=='table' then end
ENV[k]=TABLE.copy(v) local eventSet=require('parts.eventsets.'..ENV.eventSet)
if not eventSet then
MES.new('warn',"No event set called: "..ENV.eventSet)
break
end
for k,v in next,eventSet do
if k=='extraEventHandler' then
for ev,handler in next,v do
if ENV.extraEventHandler[ev] then
local prevHandler=ENV.extraEventHandler[ev]
ENV.extraEventHandler[ev]=function(...)
prevHandler(...)
handler(...)
end
else else
ENV[k]=v ENV.extraEventHandler[ev]=handler
end end
end end
elseif TABLE.find(tableNeedMerge,k) then
_mergeFuncTable(v,ENV[k])
elseif type(v)=='table' then
ENV[k]=TABLE.copy(v)
else else
MES.new('warn',"No event set called: "..ENV.eventSet) ENV[k]=v
end end
else
MES.new('warn',"Wrong event set type: "..type(ENV.eventSet))
end end
break
end end
P._20G=ENV.drop==0 P._20G=ENV.drop==0