关于GGE源码修改报错的问题
本帖最后由 望见流星 于 2026-4-24 18:57 编辑报错如下
:12: attempt to call global 'ReadExcel1' (a nil value)..//按F4或双击此行可转到错误代码页。//
:142: attempt to call global '加载全局数据' (a nil value)..//按F4或双击此行可转到错误代码页。//
报错指向的代码如下
第一个:
炼妖配置 = ReadExcel1("炼妖数据","")
要读取的XLS文件存在
第二个:
require("Script/初始化脚本")
加载全局数据()
加载全局数据()这段的代码在脚本中存在,检查写的没问题
两个指向都没问题,但是运行就是会报空值,
但是我检查感觉是没有问题的,试过把ReadExcel1替换成ReadExcel后就会报错找不到“引擎”;感觉第二个问题有点像是因为第一段没用运行下去导致的(在初始化脚本中第一个报错在前)
本人半个小白,实在搞不明白问题出在哪里,
求大佬指点是缺文件了还是哪里缺声明:
以下是源文件链接
链接: https://pan.baidu.com/s/1UF4dhNyhcVKgA527zv0F6w?pwd=kux1 提取码: kux1
原本的服务端文件运行是正常的,就是源码编译后覆盖就会出现如上问题
有遇到这样情况的帮忙解决一下
或者上面提供信息不足的也可以说一下,我贴上来: a nil value 一个空的变量
自己检查那两行的变量值 q375907713 发表于 2026-4-21 23:52
a nil value 一个空的变量
自己检查那两行的变量值
检查过,变量是有的,只是不知道为什么没调用成功,我看不出指向的变量代码有啥问题才来问的 把相关代码和数据文件打包上来看看,光说我们也不知道他的函数是怎么实现的。 xxooyeh 发表于 2026-4-22 09:02
把相关代码和数据文件打包上来看看,光说我们也不知道他的函数是怎么实现的。
好的,源文件度盘放在主贴了: 先去客户端找找有没有ReadExcel1这个文件 应该是源文件残缺吧 zhimeng1 发表于 2026-4-23 07:23
应该是源文件残缺吧
应该是的,缺了readexcel这一段,我在试着补写: 这个一般在GEE里,也可以自己写,参考下这个
function ReadExcel(paths,stringkey)
path=程序目录.."//sysdata//"..paths..".data"
local key={}
for i=1,string.len(stringkey) do
table.insert(key,string.byte(string.sub(stringkey,i,i)))
end
-- if stringkey ~="小神授权" then
-- 引擎.关闭()
-- end
local file =assert(io.open(path, "rb"))
local DecryptData ={}
local number =0
while true do
local bytes = file:read(1)
if not bytes then break end
for b in string.gfind(bytes, ".") do
num=tonumber(string.byte(b))
-- io.write(num,",")
local a= number%#key
DecryptData=bit.bxor(tostring(num),key)
number=number+1
end
end
file:close()
localindexes=0
local bufToInt32 = function (dataTable)
local num = 0;
num = num+ math.floor(dataTable * (2 ^ 24))
num = num+ math.floor(dataTable * (2 ^ 16))
num = num+ math.floor(dataTable * (2 ^ 8))
num = num + dataTable;
indexes=indexes+4
return num;
end
localbufToInt16=function(dataTable)
local num = 0;
num = num + math.floor(dataTable * (2 ^ 8));
num = num + dataTable;
indexes=indexes+2
return num;
end
local Row= bufToInt32(DecryptData)
local Column=bufToInt32(DecryptData)
local ReadASCIIString =function(dataTable)
local len = bufToInt16(dataTable);
local a={}
for i=1,len do
table.insert(a,dataTable)
indexes=indexes+1
end
returnstring.char(unpack(a))
end
local FieldName={}
local GameData={}
local GameDataName
local funType={}
for i=1,Row do
for j=1,Column do
local str = ReadASCIIString(DecryptData);
if i==1 then
FieldName = str;
elseif i==3 then
if str=="number" then
funType=tonumber
elseif str=="string" then
funType=tostring
elseif str=="array" then
funType=toTablenumber
elseif str=="table" then
funType=toTable
elseif str=="json" then
funType=cjson.decode
end
--print(str)
elseif i>3 and str~="" then
if j==1 then
GameData(str))]={}
GameDataName=assert(funType(str))
else
--print(str)
GameData] = assert(funType(str))
end
end
end
end
print(string.format("加载%s成功-->", paths))
return GameData
end xxooyeh 发表于 2026-4-24 09:05
这个一般在GEE里,也可以自己写,参考下这个
function ReadExcel(paths,stringkey)
path=程序目录.." ...
感谢大佬,真解决了:,
十分感谢 为了增加权限,我也是拼了.
页:
[1]