| 
                                    
                                    
                                    
                                    
                                    
                                    
                                    
                                     
                                        
                                     
                                    
                                        
                                        - 博士后
 
                                        
                                        - 513852
 
                                        - 3628
 
                                        - 47
 
                                        - 4637 朵
 
                                        - 28056 个
 
                                        - 6161 个
 
                                        - 190000
 
                                        - 2010-10-09
 
                                     
                                    
                                    
                                    
                                 | 
                                
                                    
                                        
                                            
                                                
                                                1#
                                                
                                            
                                        
                                        
                                            
                                                
                                                
                                                t
                                                T
                                             
                                            
                                            
                                            
                                                
                                                发表于 2022-03-13 15:01
                                            
                                                                                        
                                            | 
                                            
                                            
                                            |只看楼主
                                            
                                         
                                     
                                    
                                    
                
                
                
                
                    
                    
                    
                   
                    
                        
                        
                        在Lua中的随机数是非常简单方便的实现的,通过math.random()这个命令即可获得范围内的随机整数,而按键精灵内置的Rnd()函数是依据VBScript封装的返回0到1之间小数功能。这里我们自己来用Lua随机数封装一个随机整数。 math.random()是范围第1个与第2个参数之间的随机整数结果,但是必须要参数1小于参数2,否则会出错。我们对它进行优化,无论大小先后顺序,只要传入两个数,就返回这两个数之间的结果,如果只传入一个参数,那么就返回0到这个参数之间的结果。
    在按键精灵中调用时,请使用Randomize重置随机数种子,然后再进行取随机值,否则会造成完全一样的序列返回结果。
    下面附上zimaoxy.lua完整插件代码
 - local _zimao = {} --这是内部私有table函数
  
- local zimao = {} --这是对外公开table函数
  
- QMPlugin = zimao --通过这行代码, 实现将zimao表中所有函数对外公开
  
  
- _zimao.version = "20220310" --插件版本号, 方便自己记忆
  
  
- local function try(block) -- 保护执行函数
  
-     local tablejoin = function (...)
  
-         local result = {}
  
-         for _, t in ipairs({...}) do
  
-             if type(t) == "table" then
  
-                 for k, v in pairs(t) do
  
-                     if type(k) == "number" then table.insert(result, v)
  
-                     else result[k] = v end
  
-                 end
  
-             else
  
-                 table.insert(result, t)
  
-             end
  
-         end
  
-         return result
  
-     end
  
-          
  
-     -- get the try function
  
-     local try = block[1]
  
-     assert(try)
  
-      
  
-     -- get catch and finally functions
  
-     local funcs = tablejoin(block[2] or {}, block[3] or {})
  
-      
  
-     -- try to call it
  
-     local result_error = {}
  
-     local results = {pcall(try)}
  
-     if not results[1] then
  
-         -- run the catch function
  
-         if funcs and funcs.catch then
  
-             result_error = {funcs.catch(results[2])}
  
-         end
  
-     end
  
-  
  
-     -- run the finally function
  
-     if funcs and funcs.finally then
  
-         local result_fin = {funcs.finally(table.unpack(results))}
  
-         if #result_fin > 0 then
  
-             return table.unpack(result_fin)
  
-         end
  
-     end
  
-  
  
-     -- ok?
  
-     if results[1] and #results > 1 then
  
-         return table.unpack(results, 2, #results)
  
-     else
  
-         if #result_error > 0 then
  
-             return table.unpack(result_error)
  
-         else
  
-             return nil
  
-         end
  
-     end
  
- end
  
- local function catch(block) --异常捕获函数
  
-     return {catch = block[1]}
  
- end
  
- local function finally(block) --最终必定执行函数
  
-     return {finally = block[1]}
  
- end
  
  
- -- 常用的内部函数, 不加入私有table中, 直接定义使用
  
- local function traceprint(...)  --调用按键精灵的调试输出命令
  
-     if QMPlugin then -- 在Lua调试环境下, QMPlugin变量的值是我们插件公开table函数值, 而在按键精灵调试运行环境下, 该变量值被替换为nil
  
-         print(...)
  
-     else
  
-         -- 获取可变长参数的第一个参数值
  
-         local line = select(1, ...)
  
-         -- 如果第一个参数是字符串, 并且符合格式 _数字 , 则判定为行号意思
  
-         if type(line) == "string" and line:match("^%_%d+[        DISCUZ_CODE_1        ]quot;) then
  
-             -- 第一个参数按照格式 _数字: 传入TracePrint中可实现打印行号功能
  
-             LuaAuxLib.TracePrint(line .. ":", table.concat({...}, " ", 2, select("#", ...)))
  
-         elseif line == ":" and #{...} > 1 then
  
-             -- 第一个参数是冒号 : 时, 表示直接打印输出数据
  
-             LuaAuxLib.TracePrint(":", table.concat({...}, " ", 2, select("#", ...)))
  
-         else
  
-             -- 其他的情况下则加上前缀后, 进行正常输出
  
-             LuaAuxLib.TracePrint(":","紫猫学院测试插件:", ...)
  
-         end
  
-     end
  
- end
  
  
- -- 实现获取变量信息的插件函数, 需对外公开, 所以使用zimao前缀
  
- function zimao.VarInfo(...)
  
-     -- 防止无法获取nil参数
  
-     local paramCount = select("#", ...)
  
-     local varType, printStr, t = "", "", {}
  
-     for i = 1, paramCount do
  
-         local v = select(i, ...)
  
-         try {
  
-             function()
  
-                 varType = type(v)
  
-                 if varType == "table" then
  
-                     printStr = "【" .. varType .." " .. tostring(#v) .. "】" .. LuaAuxLib.Encode_GetJsonLib():encode(v)
  
-                 elseif varType == "number" or varType == "string" then
  
-                     printStr = "【" .. varType .." " .. tostring(#tostring(v)) .. "】" .. tostring(v)
  
-                 elseif varType == "boolean" or varType == "null" then
  
-                     printStr = "【" .. varType .."】" .. tostring(v)
  
-                 else
  
-                     printStr = "【" .. varType .."】 未知数据,无法查看!"
  
-                 end
  
-                 table.insert( t, #t + 1, printStr )
  
-             end,
  
-             catch {
  
-                 function (errors)
  
-                     -- 下面这个traceprint是我们上面定义过的内部输出命令,注意大小写
  
-                     traceprint("发生运行时错误!错误代码:VarInfo(),错误信息:", errors)
  
-                 end
  
-             }
  
-         }
  
-     end
  
-     printStr = table.concat( t, ", " )
  
-     return printStr
  
- end
  
  
- -- 实现打印输出变量详细信息数据, 需对外公开
  
- function zimao.TracePrint(...)
  
-     -- 通过VarInfo函数获取参数的详细数据信息
  
-     local info = zimao.VarInfo(...)
  
-     try {
  
-         function()
  
-             -- 在保护模式下打印输出这个数据内容
  
-             traceprint(info)
  
-         end,
  
-         catch {
  
-             function (errors)
  
-                 traceprint("发生运行时错误!错误代码:TracePrint(),错误信息:", errors)
  
-             end
  
-         }
  
-     }
  
- end
  
  
- -- 遍历按键精灵的LuaAuxLib库下所有函数命令
  
- function zimao.ScanLuaAuxLib()
  
-     -- 以保护模式运行, 避免插件错误造成脚本终止
  
-     try {
  
-         function()
  
-             -- 遍历LuaAuxLib内的内容
  
-             for k, v in pairs(LuaAuxLib) do
  
-                 -- 使用自定义函数traceprint在按键精灵中打印函数名
  
-                 traceprint("名称: " .. k, "类型: " .. type(v))
  
-             end
  
-         end,
  
-         catch {
  
-             function (errors)
  
-                 traceprint("发生运行时错误!错误代码:ScanLuaAuxLib(),错误信息:", errors)
  
-             end
  
-         }
  
-     }
  
- end
  
  
- -- 数组排序, false为升序, true为降序, 省略默认为false
  
- function zimao.Sort(list, comp)
  
-     return try {
  
-         function ()
  
-             -- 定义排序规则函数
  
-             local f = function(a, b)
  
-                 if comp then
  
-                     return a > b
  
-                 else
  
-                     return a < b
  
-                 end
  
-             end
  
-             -- 返回排序结果
  
-             return table.sort(list, f)
  
-         end,
  
-         catch {
  
-             function (errors)
  
-                 traceprint("发生运行时错误!错误代码:Sort(),错误信息:", errors)
  
-             end
  
-         }
  
-     }
  
- end
  
  
- -- 随机数
  
- function zimao.RndNum(m, n)
  
-     return try {
  
-         function ()
  
-             m = tonumber(m) or 0
  
-             n = tonumber(n) or 0
  
-             local max = ( m > n ) and m or n
  
-             local min = ( m < n ) and m or n
  
-             return math.random(min, max)
  
-         end,
  
-         catch {
  
-             function (errors)
  
-                 traceprint("发生运行时错误!错误代码:RndNum(),错误信息:", errors)
  
-             end
  
-         }
  
-     }
  
- end
  
  复制代码   
                        
                     
                    
                    
                    
                    
                    
                    
                    
                    
                        
                        
                     
                     |