zmud4.62用Lua脚本写机器人
本帖最后由 oolong 于 2015-11-6 12:32 PM 编辑刚发现,很好用。下面是资料站点,自己看,要英文水平。。。
http://forums.zuggsoft.com/forums/viewtopic.php?p=110827
http://imts.sourceforge.net/doku.php
http://rrthomas.github.io/lrexlib/manual.html#match
基本扫除了zmud的唯一缺陷。。太慢
文件我再上传一下吧
我写了几个触发,你可以测试一下:
1, haha
2, hp
3,aa
4,bb 5 12
enjoy
北大侠客行MUD,中国最好的MUD zmud将更加强大了,虽然我不用它 这样为啥不直接用mush 楼主可否提供一些 触发的匹配符号 alias的制作写一点小教程!供广大462爱好者学习使用! 本帖最后由 oolong 于 2015-11-28 06:12 PM 编辑
回复 4# ffdm
匹配我是用正则的,trigger alias这些可以自己写,我提供自己写的一些供你参考。
其实本人也在学习阶段。
--trigger.lua 模仿zmud的触发器#trigger
rex = require("rex_pcre") --正则匹配库
trig_rex= trig_rex or {} --触发匹配表
trig_func= trig_func or {} --触发内容执行function函数表
trig_disable= trig_disable or {} --记录触发关闭表
reset_triggers= reset_triggers or {}--每次匹配重置id,open close 表
--1)执行触发,每次接受到服务器的信息执行
mb.server_line= function ()
local from_server_line = string.gsub(mb.raw_line, ".%[%d-;%d-m","") --去除颜色
from_server_line = string.gsub(from_server_line, ".%[%d-m","") --去除颜色
reset_trigger()--重置所有trigger开启关闭状态 防止操作table过程报错
for id,_ in pairs(trig_rex) do
local params={}
params,params,params,params,params,params,params,params,params=rex.match(from_server_line,trig_rex)
if params then
params[-1]=from_server_line
trig_func(params)
end
end
end
--2)添加trigger
function add_trigger(id,trig_rex_string,trig_func_function)
trig_rex=trig_rex_string;
trig_func=trig_func_function
trig_disable=trig_rex_string;
end
--3)删除trigger
function del_trigger(id)
trig_rex=nil;
trig_func=nil;
trig_disable=nil;
end
--3)判断id是否存在trigger
function is_trigger(id)
if trig_rex then
return true
else
return false
end
end
--4)判断id是否存在trigger是否关闭状态
function is_trigger_closed(id)
if trig_disable then
return true
else
return false
end
end
--5)临时关闭trigger下次触发重置
function close_trigger(id)
reset_triggers="close"
end
--6)临时开启trigger下次触发重置
function open_trigger(id)
reset_triggers="open"
end
--7)重置trigger,每次触发前复位
function reset_trigger()
for id,v in pairs(reset_triggers) do
if v=="close" then
if trig_rex then
trig_disable=trig_rex
end
trig_rex=nil;
end
if v=="open" then
trig_rex=trig_disable;
end
end
reset_triggers={}
end
--举例
--注意正则匹配的时候要多写一个转义符号\,比如(\S+) 写成(\\S+)
--[[
add_trigger("test","\^\\s*你「(哈哈哈)」(\\S+)几声。",function(params)
echo("\n"..C.x.."参数params[-1]:"..params[-1])
echo(C.x.."参数params: "..params)
echo(C.x.."参数params: "..params)
local test="haha 1+2="
local test1=1
local test2=2
local test3=test1+test2
send("say 我要发送: "..test1.." + "..test2.." = "..test3)
end)
--open_trigger("test")
--close_trigger("test")
--del_trigger("test")
]] 本帖最后由 oolong 于 2015-11-28 06:14 PM 编辑
回复 4# ffdm
--alias.lua 模仿zmud 命令解析器#alias
var={}--变量表var["xxx"]="yyy"
alias = alias or {}--alias 表
--1)执行客户端送来指令cmd
mb.client_aliases=function(cmd)
if var["debug"] and var["debug"]==1 then
echo("\n"..C.y.."输入指令:"..cmd)
end
excute(cmd)
return true
end
--2)增加alias
function add_alias(cmd,alias_function)
alias=alias_function
end
--3)删除alias
function del_alias(cmd)
alias=nil
end
--4)执行cmud
function excute_alias(cmd)
if string.match(cmd,"(%S+)") and string.match(cmd,"(%S+)")~="" and alias then
local i=0
local params={"","","","","","","","","",""}
for match in string.gmatch(cmd,"(%S+)") do
params=expand(match)
i=i+1
end
if alias] then
params[-1] = string.match(cmd,"^"..params.." (.+)") if params[-1] thenparams[-1]= expand(params[-1]) end
alias](params)
end
else
if var["debug"] and var["debug"]==1 then
echo(C.y..cmd)
end
send(expand(cmd))
end
end
--5)分解解析alias指令by";"
function excute(cmd)
for match in string.gmatch(cmd..";","(.-);") do
if string.match(match,"(#%d+)%s-.+") then
local times=string.match(match,"#(%d+)%s.+")
local action=string.match(match,"#%d+%s(.+)")
for i=1,times do
excute_alias(action)
end
else
excute_alias(match)
end
end
end
--6)展开变量by @
function expand(cmd)
if string.match(cmd,"@(%S+)") then
cmd=string.gsub(cmd,"@(%S+)",var)
return cmd
elseif string.match(cmd,"%$(%S+)") then
cmd=string.gsub(cmd,"%$(%S+)",var)
return cmd
else
return cmd
end
end
----例子
--[[
add_alias("aa",function(params)
var["aa"]="xixi"
local test=params[-1] or "全部参数"
local test2=params
local test3=params or "参数1"
send("say 参数0 alias: "..test2)
send("say 参数-1全部: "..test)
send("say 参数1第一个: "..test3)
excute("e;@aa;w;look")
echo("\n"..C.x.."测试alias aa完毕")
end)
]]
--定义几个alias自己用 查看trigger var alias
--listt listv lista
add_alias("listt",function(params)
echo("\n"..C.x.."以下触发trigger")
for k,v in pairs(trig_rex) do
echo(C.g.."#trigger id: "..k.." == rex: "..v)
end
echo(C.x.."以上触发trigger")
end)
add_alias("listv",function(params)
echo("\n"..C.x.."以下变量var")
for k,v in pairs(var) do
echo(C.c..'#var "'..k..'" =="'..tostring(v)..'"')
end
echo(C.x.."以上变量var")
end)
add_alias("lista",function(params)
echo("\n"..C.x.."以下别名alias")
for k,v in pairs(alias) do
echo(C.y..'#alias "'..k..'" =="'..tostring(v)..'"')
end
echo(C.x.."以上别名alias")
end) 太牛X了~~~如此的技术贴~~UP一个
看看,学习 可以举个例子来说明么光看代码好晕! 这个,到底怎么用呢?如果能解决这个问题,NND,462岂不是焕发青春了? 额,我试过了,先运行mb-core.exe
然后,zmud链接本机的127.0.0.1 1001
相当于,在zmud和服务器之间,增加了一个拦截的盒子
会把服务器发过来的东西和客户端发给服务器的东西,拦截下来
如此这般,就可以动手脚了!
确实,很不错的创意啊!
页:
[1]
2