lua脚本实例
⑴ 游戏的LUA任务脚本要怎么写
1.在主城放置一个NPC介绍任务,NPC负责出售12个生肖布偶。周一到周五玩家每天上线都可以花费5个金币在NPC处购买到一个布偶(可自行选择)。
2.玩家购买到的布偶的持续时间只能到当周日的晚上23:59分
3.玩家每购买一个布偶就在彩池处累计5个金币,每卖出5个娃娃系统抽取5个金币,抽取的5个金币不累计入彩池。系统要记录每种布偶出售的数量。
4.周六和周日开出当周幸运生肖布偶,随机从12个生肖中抽取1个作为中奖生肖,玩家可以直接点击背包中的布偶查询当周的幸运生肖,猜中得奖励,猜错返回经验。
5.周末的时候将所有彩池中的70%金币的量平分给中奖的玩家,剩余的30%金币则累计到下一个星期的彩池中。
6.每个月的最后一个周六下午15:00-16:59分进行回馈活动,将当周累计的30%金币中的10%部分系统扣除,10%部分返还给玩家。返还方式如下
7.活动时间内在主城刷新很小的生肖NPC,放在角落,玩家点击到NPC直接获得1点金币
8.全部返还后给提示活动结束,XXX个金币已经全部送出。如果金币没有送完则一直送到送完为止。
⑵ 请问自己的软件如何运行Lua脚本
programming in lua 有相关的例子,一般脚本语言和c/c++之类的互相调用分两类,一类是扩展,就是将c/c++模块封装起来给脚本语言用,用swig做封装很方便的,一类是嵌入,就是在c/c++等应用中嵌入lua引擎,一般是用来分离经常变化的逻辑部分,比如WOW就是用lua语言作为扩展,用户可以编写lua脚本来完成一些特定功能的机器人。你要做的就是使用lua c api来在你的程序中执行lua。类似这种:
int iErr = 0;
lua_State *lua = lua_open (); // Open Lua
luaopen_io (lua); // Load io library
if ((iErr = luaL_loadfile (lua, "test.lua")) == 0)
{
// Call main...
if ((iErr = lua_pcall (lua, 0, LUA_MULTRET, 0)) == 0)
{
// Push the function name onto the stack
lua_pushstring (lua, "helloWorld");
// Function is located in the Global Table
lua_gettable (lua, LUA_GLOBALSINDEX);
lua_pcall (lua, 0, 0, 0);
}
}
lua_close (lua);
⑶ lua账号密码读取脚本实现教程
lua游戏脚本中,有许多是需要登录许多小号,这些小号一般存放在一个文档里,脚本运行时需要读取这些数据。
下面有个txt文档,记录这账号与密码的数据,如下
其中,左边为账号,右边为密码,中间用空格隔开(空格数不确定)。账号允许使用中英文、数字、符号(但不允许有空格),密码允许使用中英文、数字、符号(允许有空格,但不允许出现在最前或最后),忽略每行的首尾空格。
下面在电脑上进行测试,由于我的电脑的操作系统是Windows简体中文版,也就是系统的字符编码为GBK。而手机采用的字符编码一版是UTF-8(特别要注意这点!)
为了避免乱码,将txt文档与lua文件均采用和系统的字符编码相同的编码(很重要!)
对于GBK编码的系统,保存时,选择ANSI(记事本默认保存的就是这个格式)
如果用于手机上运行,则选择UTF-8
lua实现:
运行结果:
稍作修改即可应用于手机端,这里以iOS作为演示:
日志:
本程序的主要难点在于,逐行读取的迭代器lines()函数、trim()函数实现、账号密码的匹配、table的操作。
其中用到的自定义函数string.trim()大家可以记一下,方便在自己的程序里调用,还是挺实用的。
⑷ lua脚本怎么取出自己想要的的部分字符
你好,以前没接触过lua,刚自己试了一下,就按照你问题中的"23^Hello^你好^2000^world.txt"这个字符串为例,以^为分隔符来说吧:
---------------start---------------
str = "23^Hello^你好^2000^world.txt"
list = table.pack()
for w in string.gmatch(str, "[^^]+") do
print(w)
table.insert(list, w)
end
---------------start---------------
解释:代码共6行,
第1行:定义一个变量str,内容为"23^Hello^你好^2000^world.txt",这也是我们要处理的字符串.
第二行: 定义一个空列表,它是用在下面的for循环中,存放以"^"作为分隔符的每一部分
第三行:简单来看是个for循环,深入一点来看,也就是string.gmatch(str,"[^^]+")这部分需要解释一下,它表示调用的是string库的gmatch()函数,这个函数有两个参数,第1个参数为要处理的字符串,咱们这里就是上面定义的str,第二个参数就是我们要在这个字符串中匹配什么样的内容,这里的匹配内容写的是"[^^]+",学过正则的很好理解,单纯的[abc]表示匹配任意单个字符a或b或c,有一点特殊的是一旦[]中的字符是以^打头的,则表示匹配任意非[]中列出的字符,如[^abc]表示匹配任意除abc外的其它任一字符,所以[^^]解释为匹配除^外的任一字符,举例来说,如果我们有字符串"23^Hello",如果用[^^]匹配的话,最终得到的是7个单个字符,即"2","3","H","e","l","l","o",显示这不符合我们的题意,所以在这基础上改进了一下,即在其后又加了个+号,[^^]+,这里的+号表示尽可能多地匹配它前面内容,这里也就是尽可能多地匹配[^^],所以[^^]+在处理"23^Hello"的时候,结果得到的就是"23","Hello".这里关于用到的这个正则说的不是太清楚,多练练就明白了。最后,第3行把函数部分给替换掉后,可以理解为:for w in [23,Hello,你好,2000,world.txt],每次从[]中取一个值赋给w,然后执行for下面的语句,接着往下看
第4行,接第3行尾,就是把每次赋给w的值都打印出来
第5行,将每次赋给w的值都追加到列表list中
第6行,for循环语法上的闭合关键字,这个没啥说的
到此,我们得到了一个列表值为[23,Hello,你好,2000,world.txt]的list,此时我们就可以使用list[n]来取我们想要的值了 。
*.如果你要问上面最3条最后不都有[23,Hello,你好,2000,world.txt]了嘛,为啥还要那么麻烦,直接使用string.gmatch()函数不就行了嘛,其实第3条结尾我那么写只是为了让你好理解,实际上gmatch()函数的返回值并不是列表,而是一个可迭代的函数,而for循环的作用就是把gmatch()函数返回的这个可迭代的函数中的每个元素都取出来并赋给列表list
*.说的有点啰嗦了,希望对你有帮助吧,另外,我从没用过lua,也是刚查了查,自己实践了一下,希望不会形成误导
⑸ lua编写脚本在wireshark中实现,现有偏移是offset按位偏移,在某些字段需按bit解析,应该怎么做
比如说第一个bit代表的标志为flag1,后7个bit代表的标志为flag2。那么flag1和flag2作为要加入tree的field,可以表示为:
flag1=ProtoField.uint8("your_protol_flag1", "flag1", base.DEC, null, 0x80)
flag2=ProtoField.uint8("your_protol_flag2", "flag2", base.DEC, null, 0x7F)
其中0x80,0x7F为按位操作的掩码,作用分别是取uint8的第一位和后七位。
然后将field加入子树中即可:
subtree:add(flag1, buffer(offset+2, 1))
subtree:add(flag2, buffer(offset+2, 1))
-------------------------------------------
wireshark官方API地址为:网页链接