[Nightmare aka Aselock, Jade.|2|STEAM_0:1:42403155] Lua Error:
[glua-stock] addons/glua-stock/moon/modules/functions/networkmaterial.moon:35: attempt to yield across C-call boundary
1. yield - [C]:-1
2. run - addons/glua-stock/moon/modules/functions/networkmaterial.moon:35
3. run - addons/glua-stock/moon/autorun/shared.moon:155
4. include - addons/glua-stock/moon/autorun/shared.moon:155
5. run - addons/glua-stock/moon/modules/z-manifest.moon:18
6. include - addons/glua-stock/moon/autorun/shared.moon:155
7. unknown - addons/glua-stock/moon/autorun/shared.moon:180
8. RunString - [C]:-1
9. unknown - RunString(Ex):8195
У меня получается такой порядок действий, загружается серверное ядро которое инициализирует клиентский загрузчик ядра в котором есть вызов функции
coroutine.yield который необходим в качестве стопора для загрузчика сторонней библиотеки по http протоколу. Вопрос, если я на клиенте, а вот клиентский код загрузчика ядра
module('moonscript_client_core', package.seeall)
client_core_payload = util.JSONToTable(util.Base64Decode([[#{json_table}]]))
local function gmod_run_thread_function (thread, onerror)
local function func()
status, message = pcall(thread)
if status then
timer.Simple(0.1, func)
return
else
if message ~= nil and message ~= "cannot resume dead coroutine" then
if not onerror then
error(message)
else
return onerror(message)
end
end
end
end
timer.Simple(0, func)
end
for i, path_t in pairs(client_core_payload.autorun_linear) do
_G.__running_c_path = path_t.path
--RunString(path_t.data, path_t.path)
gmod_run_thread_function(coroutine.wrap(function()
print("Run in thread", path_t.path)
RunString(path_t.data, path_t.path)
end), error)
end
_G.__running_c_path = nil
--_G.__running_c_path, client_core_payload = nil, nil
вызываю
RunString в сопрограмме, а т.е. в процедуре сопрограммы то тогда данный код должен быть валидным и не должен вызывать ошибки, но ошибка возникает, почему?
do
flag = nil
resources.http_run_code "https://raw.githubusercontent.com/vega0/gmod-imageutils/master/lua/includes/modules/imgparse.lua", (code) ->
flag = true
code\gsub "AddCSLuaFile%(%)", '' if SERVER
code
--
while not flag
coroutine.yield!