lua tArgs参数问题

lua tArgs参数问题,第1张

访问全局变量表

arg就知道了

你带进去的参数true 是arg[1]

但是要注意的一点 这里是字符串true而不是booleantrue

还有一些其他参数也会有用 比如arg[0]就是你的lua文件所在路径什么的

Lua 与 delphi 的互动,通常是在 delphi 中加载 Lua 的库,比如 Lua for delphi 等。

假设用 Lua 编写了一个函数(保存在 lua_GetColorlua 文件中):

function nogi_GetColor(nR,nG,nB)  

    if nR <= 25 and nG <= 25 and nB <= 25 then -- 取出25以下黑色  

        return 1;  

    end;  

      

    return 0;  

end

那么调用上面 Lua 函数的代码:

uses LUA, LUALIB; //引入LUA库 

function lua_CheckColor(r,g,b:Integer):Boolean;  

var  

Lua : TLua;  

begin  

  Lua := TLuaCreate;   

  luaopen_debug(LuaInstance); //如果要使用debug库  

  luaopen_math(LuaInstance);// 如果要使用math库 不然就会attempt to index global 'math' (a nil value)  

  luaopen_os(LuaInstance);  

  luaopen_string(LuaInstance);  

  luaopen_table(LuaInstance);  

  LuaDoFile('lua_GetColorlua');  

  lua_getglobal(LuaLuaInstance,'nogi_GetColor');  

  lua_pushnumber(LuaLuaInstance, r); //将脚本中add函数使用的参数压栈  

  lua_pushnumber(LuaLuaInstance, g); //将脚本中add函数使用的参数压栈  

  lua_pushnumber(LuaLuaInstance, b); //将脚本中add函数使用的参数压栈  

  

  lua_pcall(LuaLuaInstance, 3, 1,0) ;  

  

  Result := (lua_toInteger(LuaLuaInstance,-1) = 1);  

  LuaFree;  

end;

--移除文件

function MkidrremoveFile(path)

              iowritefile(path, "")

               osremove(path)

end

--读取文件

function MkidrreadFile(path)

                  local file = ioopen(path, "rb")

                  if file then

                              local content = file:read("all")

                               ioclose(file)

                               return content

                    end

             return nil

end

-- Lua   lfs 库的使用

lfsattributes(filepath [, aname]) 获取路径指定属性

lfschdir(path) 改变当前工作目录,成功返回true,失败返回nil加上错误信息

lfscurrentdir 获取当前工作目录,成功返回路径,失败为nil加上错误信息

lfsdir(path) 返回一个迭代器(function)和一个目录(userdata),每次迭代器都会返回一个路径,直到不是文件目录为止,则迭代器返回nil

lfslock(filehandle, mode[, start[, length]])

lfsmkdir(dirname)  创建一个新目录

lfsrmdir(dirname) 删除一个已存在的目录,成功返回true,失败返回nil加上错误信息

-- Lua   io *** 作

ioopen (filename [, mode])

功能:按指定的模式打开一个文件,成功则返回文件句柄,失败则返回nil+错误信息

mode:

"r": 读模式 (默认);

"w": 写模式;

"a": 添加模式;

file:write()

功能:按指定的参数格式输出文件内容,参数必须为字符或数字,若要输出其它值,则需通过tostring或stringformat进行转换

file:close()

功能:关闭文件,lua有垃圾自动回收

ioexists()

测试文件是否存在,如果存在返回true

-- Lua   os   *** 作

osremove (filename)

功能:删除文件或一个空目录,若函数调用失败则返加nil加错误信息

osrename (oldname, newname)

功能:更改一个文件或目录名,若函数调用失败则返加nil加错误信息

ossetlocale (locale [, category])

功能:设置程序的当前设置,函数返回最新的值,失败则返回nil

ostime ([table])

功能:按table的内容返回一个时间值(数字),若不带参数则返回当前时间table的字段:

static int ABC(lua_State L)

{

int n =lua_gettop(L);

double sum =0;

int i;

for (i=1;i<n;i++)

{

sum+=lua_tonumber(L,i);

}

lua_pushnumber(L,sum/n);

lua_pushnumber(L,sum);

return 2;

} lua_register(L, "ABC", ABC);

lua中table的赋值,其实传递的是地址, *** 作被赋值的表内的 元素 ,会影响原来的table;但如果 *** 作的是被赋值的表这个变量本身,相当于改变了其“指针的指向”,不会影响到原来的table了。

弄懂了table赋值的问题,它作为函数参数的问题就迎刃而解了。函数内部使用的参数table,其实就是使用的它的拷贝(赋值)。

table的赋值会使两个表产生关联,可能导致一些意外的修改。为了解决这个问题,就需要用到table的克隆。

luaci给的方法:

1、首先通过解压游戏资源包,获取游戏脚本文件,可以直观的看到函数名称、参数等,是最佳的方法。

2、其次游戏没有验证lua、luaplus等dll,可以修改源码编译一个新的dll,在register函数里打印出注册的函数名称、函数地址等等。

3、然后用IDA、OllyDBG等工具查看反编译代码获取参数等信息。

4、最后直接用OllyDBG跟lua的register函数并配合所有参考字符串列表,看看都注册了哪些函数。

在Lua 52及之前的版本,所有数值都以双精度浮点格式表示,从53版本开始,Lua语言的number分为integer的64位整型和被称为float的双精度浮点型,若想要32位的整型和单精度浮点类型,可以将Lua 53编译为精简Lua(Small Lua)模式

可以使用%a参数进行格式化输出,如:

这种格式很难阅读,但是可以保留所有浮点数的精度,并且比十进制转换速度更快

// 区分整数和浮点数,由于53版本之前没有整数的概念,所以mathfloor永远返回整数,// 的 *** 作数只要有一个浮点数,则向下取整返回浮点数

取模运算的定义:

由此可知,取模和取余数差不多,当想要一个值不超过某个范围的时候,就对该值进行取模, 在整数的情况下, a % b 取模的值永远在[1,b-1]范围内,即 5 % 3的取模结果在[1,3]之间

Lua语言的关系运算六种

标准数学库math,包括三角函数(sin,cos,tan,asin等)、指数函数、取整函数、最大和最小函数max和min,random以及常量pi和huge(最大可表示数值,在大多数平台上代表inf)

mathrandom

mathrandomseed 用于设置伪随机数发生器的种子,看例子就明白了了

mathrandomseed每次设置一样的值,则mathrandom就会生成一样的随机数,不管mathrandom带不带参数。

三个取整函数:

floor 向负无穷取整;

ceil 向正无穷取整;

modf 向0取整,并会返回小数部分作为第二个结果;

如果想将数值x向最近的整数取整,这个问题没看懂??????

数学库中的常量定义了整型值的最大值mathmaxinteger和最小值mathmininteger

这段内容也没完全看懂?????

整型转行成浮点型

浮点型转行成整型

可以充分利用mathtointeger函数来判断一个数值是否为整数

从上到下,优先级从高到低

在二元运算符中,除了幂运算和连接 *** 作符是右结合外,其他都是左结合

Lua 53 支持的最大整数为2^63,而Lua 52支持的最大整数为2^53,由于52及以下版本没有整数,所以跟整数相关的函数都不支持,如mathtype()、mathmaxinteger、mathmininteger、mathtointeger等

以上就是关于lua tArgs参数问题全部的内容,包括:lua tArgs参数问题、delphi 怎么获取lua 函数的返回值、Lua 文件读取等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9353123.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存