魔兽游戏中最便当的搜刮货物宏(称赞TBC) 初始化搜刮数据的宏/run i_m={};i_m.id={};i_m.nm={};t_i=0;for i=1,50000 do local nm=GetItemInfo(i);if (nm) then t_i=t_i+1;i_m.id[t_i]=i;i_m.nm[t_i]=nm;end end 用来体现货物链接的宏/run function SI_M(s) local _,lnk=GetItemInfo("item:"..s);if (lnk) then local o=s..": "..lnk;DEFAULT_CHAT_FRAME:AddMessage(o);return 1;end return 0;end 用来搜刮货物的宏/run function FI_M(str) local sum=0;for i=1,t_i do if (string.find(i_m.nm[i],str)) then sum=sum+SI_M(i狂野角斗士20100708_m.id[i]..":0:0:0:0:0:0:0");end end DEFAULT_CHAT_FRAME:AddMessage("搜刮''"..str.."'', 共查到"..sum.."件货物");end 以上三个宏在进来游戏后按序次履行过一遍就可以用下面的宏呼吁搜刮货物。 /run FI_M("复仇角斗士的皮甲");/run FI_M("骑乘虚空鳐");/run FI_M("战斗大师"); 下面对以上三条宏分散说明注解一下功能 第一条宏/run i_m={}; --初始化全局变量i_m设置为空数组;i_m.id={}; --初始化全局变量i_m的id值设置为空数组,用来寄放魔兽全国悉数货物的ID值;i_m.nm={}; --初始化全局变量i_m的nm值设置为空数组,用来寄放魔兽全国悉数货物的名称;t_i=0; --初始化全局变量t_i值为0,用来寄放魔兽全国悉数货物的总数;for i=1,50000 do --轮回50000次, local nm=GetItemInfo(i); --用API函数GetItemInfo从魔兽全国客户端货物数据库缓存中博得货物名,留存到nm中; if (nm) then --要是货物ID为i的货物生存, t_i=t_i+1; --货物的总数增补1; i_m.id[t_i]=i; --i_m.id数组留存货物的ID值为i; i_m.nm[t_i]=nm; --i_m.nm数组留存货物的名称为nm; end --if语句终结end --for轮回终结。 第二条宏/run function SI_M(s) --定义函数SI_M(ShowItem_Macro),用作体现货物链接的功能,参数是货物链接干系的8个数值组成的字符串,格局为"x:x:x:x:x:x:x:x" local _,lnk=GetItemInfo("item:"..s); --为_,lnk分散赋值为API函数GetItemInfo返回的前两个值,分散是货物的名称和货物链接; if (lnk) then --要是货物链接生存, local o=s..": "..lnk; --组合货物链接,s..": "不过货物链接之前体现的货物ID值,冒号背面才是货物链接lnk; DEFAULT_CHAT_FRAME:AddMessage(o); --在默认的聊天框中体现刚才组合的字符串,格局为“货物ID : 货物链接”; return 1; --返回一个数值1,外部挪用此函数的时刻,查找到的链接数累加1; end --if语句终结 return 0; --返回一个数值0,外部挪用此函数的时刻,查找的链接数累加0;end --函数定义终结。 第三条宏/run function FI_M(str) --定义函数FI_M(FindItem_Macro),用作搜刮货物的功能,参数是盘查货物链接所用的字符串 local sum=0; --初始化变量sum用来留存搜刮到的货物个数; for i=1,t_i do --轮回t_i次,轮回的次数根据第一条宏执行后统计的总数而定 if (string.find(i_m.nm[i],str)) then --假若找到一个适合查问恳求str的货品i_m.nm[i] sum=sum+SI_M(i_m.id[i]..":0:0:0:0:0:0:0"); --挪用由SI_M函数表现一条合成的货品链接字符串,返回的值累加到sum中; end --if语句收场 end --for循环收场 DEFAULT_CHAT_FRAME:AddMessage("搜索''"..str.."'', 共查到"..sum.."件货品"); --在默认的闲话框中表现搜索后来;end --函数界说收场。 下面申明一下查问字符串的用法 基本号令格式:/run FI_M("报仇角斗士的皮甲");/run FI_M("骑乘虚空鳐");/run FI_M("战斗大家"); 利用这个号令/run FI_M("报仇角斗士");也许查问出以下后来: ------------------------------------------------------33700:0:0:0:0:0:0:0 : [报仇角斗士的皮甲手套]33701:0:0:0:0:0:0:0 : [报仇角斗士的皮甲头盔]33702:0:0:0:0:0:0:0 : [报仇角斗士的皮甲护腿]33703:0:0:0:0:0:0:0 : [报仇角斗士的皮甲护肩]33704:0:0:0:0:0:0:0 : [报仇角斗士的皮甲外套]搜索''报仇角斗士的皮甲'', 共查到5件货品------------------------------------------------------ 利用这个号令/run FI_M("骑乘虚空鳐");也许查问出以下后来:------------------------------------------------------32314:0:0:0:0:0:0:0 : [绿色骑乘虚空狂野角斗士鳐]32316:0:0:0:0:0:0:0 : [紫色骑乘虚空鳐]32317:0:0:0:0:0:0:0 : [血色骑乘虚空鳐]32318:0:0:0:0:0:0:0 : [银色骑乘虚空鳐]32319:0:0:0:0:0:0:0 : [蓝色骑乘虚空鳐]搜索''骑乘虚空鳐'', 共查到5件货品------------------------------------------------------ 利用这个号令/run FI_M("战斗大家");也许查问出以下后来:------------------------------------------------------34576:0:0:0:0:0:0:0 : [战斗大家的凶恶]34577:0:0:0:0:0:0:0 : [战斗大家的堕落]34578:0:0:0:0:0:0:0 : [战斗大家的决心]34579:0:0:0:0:0:0:0 : [战斗大家的奋勇]34580:0:0:0:0:0:0:0 : [战斗大家的坚韧]搜索''战斗大家'', 共查到5件货品------------------------------------------------------ 还也许利用如许的字符串搜索:/run FI_M("图鉴:(.+)水玉");也许查问出以下后来:------------------------------------------------------24217:0:0:0:0:0:0:0 : [图鉴:硬化水玉]24218:0:0:0:0:0:0:0 : [图鉴:辐光水玉]24219:0:0:0:0:0:0:0 : [图鉴:眩光水玉]24220:0:0:0:0:0:0:0 : [图鉴:裂纹水玉]33783:0:0:0:0:0:0:0 : [图鉴:加强水玉]搜索''图鉴:(.+)水玉'', 共查到5件货品------------------------------------------------------ 倘若换成/run FI_M("图鉴:(.-)水玉");不妨究诘出以下结尾:------------------------------------------------------24182:0:0:0:0:0:0:0 : [图鉴:水玉猫头鹰]24217:0:0:0:0:0:0:0 : [图鉴:硬化水玉]24218:0:0:0:0:0:0:0 : [图鉴:辐光水玉]24219:0:0:0:0:0:0:0 : [图鉴:眩光水玉]24220:0:0:0:0:0:0:0 : [图鉴:裂纹水玉]33783:0:0:0:0:0:0:0 : [图鉴:加强水玉]搜索''图鉴:(.-)水玉'', 共查到6件货品------------------------------------------------------ (.+)不妨取代一个或多个字符。倘若想取代零个或多个字符请用(.-) 由于这个搜索功用是行使的Lua编程语言的string类的find函数功用,是以不妨行使模式字符串。 下面的表列出了Lua支持的全数字符类: . 任意字符 %a 字母 %c 抑制字符 %d 数字 %l 小写字母 %p 标点字符 %s 空缺符 %u 大写字母 %w 字母和数字 %x 十六进制数字 %z 代表0的字符 Lua中的模式润饰符有四个: + 般配前一字符1次或多次 * 般配前一字符0次或多次 - 般配前一字符0次或多次 ? 般配前一字符0次或1次 本来以上列出的Lua模式字符串在本搜索中很少能用到,能用的也只有(.+)和(.-),是以不妨无须费心必须明晰Lua语言。 行使这个命令的条件是 被搜索的货品必须是客户端缓存数据库中已生计的货品,换句话说就是你在行使这台电脑时曾经见过的货品。由于点火的远征2.0版本的更新,从前缓存的货品已经通盘不生计了,是以查出的货品都是你在2.0版本之后出现过的货品。自然随着你通常见到新的货品,你电脑里缓存的货品数据越来越多,能查到的对象也越来越多,那么,行使这套宏就像是在行使一个高成绩的货品审查器,想发什么货品的链接就能发。 (转载请注明出处:http://www.21feng.net/yemancanku/20100906/692.html) |