懒人精灵实现第一个基础框架

废话不多说直接上先上图片在代码,有问题可以加群(785554238) 群里有最新的版本,你也可以向作者提出你的需求,作者会根据你们的需求不断改进版本

1.自定义界面

 

下面是界面代码

欢迎界面

<窗口
    宽度="600"
    高度="600"
    标题=" "
    标签头高度="0"
    配置文件="ui.config"
    标签头背景="#00eeeeee"
    标签头字体大小="16"
    标签头选中字体颜色="#ffff3377"
    标签头字体默认颜色="#ff3355ff">

    <标签页 标题="界面1" 背景="#ffffffff">

    <垂直布局 id="contain" 宽度="-1" 高度="-1" 对齐="居中" 背景="#002222222">

        <垂直布局 id="div" 宽度="-1" 高度="150" 对齐="居中" 背景="#002222222">

               <文本框 id="idLabel1"  文字颜色="#ff0099ff" 默认值="欢迎使用懒人精灵" 文字大小="30" 高度="-1" 宽度="-2" 边距="0,0,0,0"/>

               <文本框 id="idLabel1" 默认值="作者懒人【学习交流群:785554238】" 文字颜色="#ff0099ff" 文字大小="20" 高度="-1" 宽度="-2" 边距="0,0,0,0"/>
        </垂直布局>
    </垂直布局>
    </标签页>
</窗口>

 

悬浮窗入口配置界面

<窗口
    宽度="600"
    高度="600"
    标题="挂机配置"
    标签头高度="0"
    配置文件="main.config"
    标签头背景="#00eeeeee"
    标签头字体大小="16"
    标签头选中字体颜色="#ffff3377"
    标签头字体默认颜色="#ff3355ff">

    <标签页 标题="界面1" 背景="#ffffffff">

        <垂直布局 id="contain" 宽度="-1" 高度="-1" 背景="#002222222">

             <下拉框
                 id="idSelect1"
                 宽度="-1"
                 边距="10,5,10,5"
                 默认值="0">
                 <选项 文本="XXX游戏版本1"/>

                <选项 文本="XXX游戏版本2"/>

                <选项 文本="XXX游戏版本3"/>
             </下拉框>

            <水平布局 id="layer1" 宽度="-1" 高度="-2" 背景="#00000000">

                <多选框

                    边距="10,20,10,10"
                    id="idtask"
                    布局方向="水平"
                    默认值="1@2@3">
                    <选项 文本="自动任务1"/>
                    <选项 文本="自动任务2"/>

                    <选项 文本="自动任务3"/>

                    <选项 文本="自动任务4"/>

                    <选项 文本="自动任务5"/>

                    <选项 文本="自动任务6"/>
                </多选框>
            </水平布局>

            <水平布局 id="lay" 对齐="垂直居中" 宽度="-1" 高度="-2" 背景="#002222299" 边距="10,1,10,1">

                <水平布局 id="layer2" 对齐="垂直居中" 宽度="-2" 高度="-2" 边距="1,1,20,1">

                    <文本框 id="idLabel1" 默认值="游戏配置【1】:" 文字大小="0" 高度="-2" 宽度="-2" 边距="0,0,0,0"/>

                    <输入框 id="idEdit1" 默认值="5" 文字大小="0" 宽度="-2" 高度="-2" 边距="0,0,0,0"/>
                </水平布局>

                <水平布局 id="layer2" 对齐="垂直居中" 宽度="-2" 高度="-2" 边距="1,1,20,1">

                    <文本框 id="idLabel1" 默认值="游戏配置【2】:" 文字大小="0" 高度="-2" 宽度="-2" 边距="0,0,0,0"/>

                    <输入框 id="idEdit2" 默认值="5" 文字大小="0" 宽度="-2" 高度="-2" 边距="0,0,0,0"/>
                </水平布局>

            </水平布局>

             <水平布局 id="lay" 对齐="垂直居中" 宽度="-1" 高度="-2" 背景="#002222299" 边距="10,1,10,1">

                <水平布局 id="layer2" 对齐="垂直居中" 宽度="-2" 高度="-2" 边距="1,1,20,1">

                    <文本框 id="idLabel1" 默认值="游戏配置【4】:" 文字大小="0" 高度="-2" 宽度="-2" 边距="0,0,0,0"/>

                    <输入框 id="idEdit3" 默认值="5" 文字大小="0" 宽度="-2" 高度="-2" 边距="0,0,0,0"/>
                </水平布局>

                <水平布局 id="layer2" 对齐="垂直居中" 宽度="-2" 高度="-2" 边距="1,1,20,1">

                    <文本框 id="idLabel1" 默认值="游戏配置【5】:" 文字大小="0" 高度="-2" 宽度="-2" 边距="0,0,0,0"/>

                    <输入框 id="idEdit4" 默认值="5" 文字大小="0" 宽度="-2" 高度="-2" 边距="0,0,0,0"/>
                </水平布局>

           </水平布局>
        </垂直布局>
    </标签页>
</窗口>

 

 

下面是脚本代码

Utils.lua

Utils = {}

ColorTable = {}

SwitchTable = {}

math.randomseed(os.time())

function rnd(start,begin)
   return math.random(start,begin)
end

function IsMulitColor(arr)
  if type(arr) == "table" and #arr == 9 then
       if type(arr[1]) ~= "string"
       or type(arr[2]) ~= "number"
       or type(arr[3]) ~= "number"
       or type(arr[4]) ~= "number"
       or type(arr[4]) ~= "number"
       or type(arr[6]) ~= "string"
       or type(arr[7]) ~= "string"
       or type(arr[8]) ~= "number"
       or type(arr[9]) ~= "number" then
           return false
       end
       return true
  end
  return false
end

function FindMColorEx(arr)
   local x,y=-1,-1
   pcall(function()
       if arr == nil or
           type(arr) ~= "table" then
          return
       end
       if IsMulitColor(arr) then
          x ,y = findMultiColor(arr[2],arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9])
       end
   end)
   return x,y
end

function GetTable(list)    
    local name,str = ""
    if type(list) == "table" then
        str = list[1]
        name = list[2]
    else
        name = list
    end
    if str == nil then
        str = ColorTable.ID
    end
    if ColorTable[str] ~= nil  then
            for k,v in pairs(ColorTable[str]) do    
                if v[1] == name then    
                    return v;
                end
            end
    end
    return nil;
end

function Utils.SetTable(tbl)
    ColorTable = tbl
end

function Utils.SetTableID(id)
    ColorTable.ID = id
end

function Utils.Switch(str)
   if SwitchTable[str] == nil then
     SwitchTable[str] = true
   else
     SwitchTable[str] = not SwitchTable[str]
   end
   return SwitchTable[str]
end

function Utils.Msg(str)
  toast(str,0,0,25)
end

function Utils.RndTap(X, Y, R) --随机点击 X:x坐标 Y:y坐标 R(可选):随机值
    R = R or 5
    R = R or 5
    local r1 = rnd(math.abs(R)*-1, math.abs(R))
    local r2 = rnd(math.abs(R)*-1, math.abs(R))
    local r3 = rnd(100,500)
    tap(X + r1, Y + r2)
    sleep(r3)
end

function Utils.Split(Str, cutSymbol) --字符串分割
    Str = tostring(Str)
    cutSymbol = tostring(cutSymbol)
    if (cutSymbol=='') then
        return false
    end
    local pos,arr = 0, {}
    for st,sp in function() return string.find(Str, cutSymbol, pos, true) end do
        table.insert(arr, string.sub(Str, pos, st - 1))
        pos = sp + 1
    end
    table.insert(arr, string.sub(Str, pos))
    return arr
end

function Utils.Post(cb,delay,...) --延迟调用
    if cb ~=nil and type(cb) == "function" then
       delay = math.ceil(tonumber(delay) or 100)
       setTimer(cb,delay,...)
    end
end

function Utils.Find(...)
    local Arr = {...}
    local Rnd ,Str,isClick= 5,"",false
    local iRet, sRet = pcall(function()
        for i = 1,#Arr do
            if type(Arr[i]) == "string" or type(Arr[i]) == "table" then
                Str = Arr[i]
            elseif type(Arr[i]) == "number" then
                Rnd = Arr[i]
            elseif type(Arr[i]) == "boolean" then
                isClick = Arr[i]
            end
        end
    end)
    colorArr = GetTable(Str)
    if colorArr == nil then
        return false
    end
    x,y = FindMColorEx(colorArr)
    if x >= 0 and y >= 0 then
       print("pos:"..x..","..y)
       if isClick then
          Utils.RndTap(x,y,R)
       end
       return true
    end
    return false
end

function Utils.FindRet(...)
    colorArr = GetTable(...)
    if colorArr == nil then
        return false
    end
    x,y = FindMColorEx(colorArr)
    return x,y
end

function Utils.ZoomIn(x1,y1,x2,y2,R) --捏合
      R = R or 5
     local r = 3 --rnd(-1*R, R)
     x1 = x1 + r
     y1 = y1 + r
     x2 = x2 + r
     y2 = y2 + r
     count = 2
     centerX = (x1 + x2) / 2
     centerY = (y1 + y2) / 2
     stepX = (centerX - x1) / count
     stepY = (centerY - y1) / count
     
     touchDown(0,x1,y1)
     sleep(10)
     touchDown(1,x2,y2)
     sleep(10)
     for i=1,count do
        x1 = math.ceil(x1 + stepX)
        y1 = math.ceil(y1 + stepY)
        x2 = math.ceil(x2 - stepX)
        y2 = math.ceil(y2 - stepY)
        touchMove(0,x1,y1)
        sleep(10)
        touchMove(1,x2,y2)
        sleep(10)
     end
     touchUp(1)
     sleep(10)
     touchUp(0)
     sleep(10)
end

function Utils.ZoomOut(x1,y1,x2,y2,R) --张开
      R = R or 5
     local r = 3 --rnd(-1*R, R)
     x1 = x1 + r
     y1 = y1 + r
     x2 = x2 + r
     y2 = y2 + r
     count = 2
     centerX = (x1 + x2) / 2
     centerY = (y1 + y2) / 2
     stepX = (centerX - x1) / count
     stepY = (centerY - y1) / count
     
     touchDown(0,centerX,centerY)
     sleep(10)
     touchDown(1,centerX,centerY)
     sleep(10)
     for i=1,count do
        x1 = math.ceil(centerX - stepX)
        y1 = math.ceil(centerY - stepY)
        x2 = math.ceil(centerY + stepX)
        y2 = math.ceil(centerY + stepY)
        touchMove(0,x1,y1)
        sleep(10)
        touchMove(1,x2,y2)
        sleep(10)
     end
     touchUp(1)
     sleep(10)
     touchUp(0)
     sleep(10)
end

return Utils

 

main.lua

Utils = require "Utils"

local GAMEPKG = "xxxxxxxxxxx" --游戏包名

local w,h = getDisplaySize() --获取当前屏幕分辨率

if(w ~= 720 or h ~= 1280) then
  Utils.Msg("目前仅支持720x1280分辨率\n当前分辩率["..w.."x"..h.."]")
  sleep(10000)
  exitScript()
else
  Utils.Msg("当前屏幕分辩率:["..w.."x"..h.."]")
end

pcall(function()
  local code,arr = showUI("悬浮窗界面.ui")
  if arr then
      local tasks = arr["idtask"]
    
  end
end)

function BeginGame()
   --开始游戏脚本任务
   Utils.SetTableID("主界面")
   if(Utils.Find("物体1")) then
       
   else
       Utils.Post(BeginGame,1000)
   end
end

function KeepGameRun(pkg,n)--定时检测游戏是否处于前台,否则启动游戏
   local delay = 1000
   setControlBarPos(0.5,1)
   if(appIsFront(pkg) == false) then
      Utils.Msg("游戏加载中请稍等")
      runApp(pkg)
      delay = 1000
   end
   Utils.Post(KeepGameRun,delay,pkg)
end

Utils.SetTable(require("res"))

Utils.Post(BeginGame,2000) --延迟2秒触发开始脚本任务

Utils.Post(KeepGameRun,0,GAMEPKG)

while true do
   sleep(100000)
end

3.res.lua

T={}

T["主界面"]={
  {"物体1",200,200,600,1100,"C850D7","-30|-27|C741E0|-17|-25|D01BE2|-22|-31|D444E8|-31|-25|B01FD8|-17|-39|B8D8D4|-15|2|72B8B0|-5|14|88C2B8|12|13|B8DCD8",0,0.9},
  {"物体2",200,200,600,1100,"48D8FF","-3|3|00B8F0|-2|6|00BCF2|3|11|20E6FF|8|8|43FEFF|7|2|48F2FF|1|4|00C3FF|11|-5|B8DCD6",0,0.95},
  {"物体3",14,11,154,154,"2356AA","36|31|496BE3|8|82|2659B1|-14|33|FFFFFF|79|26|3B94DC|54|37|C9E0ED|60|94|3DA3EE",0,0.9},
  {"物体4",161,17,233,89,"E1FEFF","12|-7|41AFF3|-21|26|8DCDFD|-42|27|84B0CF|20|22|1F69CF|-24|9|85C5F7",0,0.95},
  {"物体5",424,5,717,354,"51545E","17|2|51545E|38|216|676B74|-41|6|504DE8|-47|22|5050E8|-36|16|FFFFFF|-41|220|E0E8E8",0,0.95},
}

return T

<think>好的,我需要帮用户查找懒人精灵基础命令列表。根据用户提供的引用内容,特别是引用[1]和引用[2],里面提到了懒人精灵的教程和配置文件中的命令别名、自定义命令等。 首先,查看引用[1]中的第四章,里面详细讲解了图色功能相关命令,比如触控命令、找色、找图、文字识别等。这些应该是懒人精灵基础命令。例如,触控命令可能包括点击、滑动等操作,找色命令涉及多点找色,截图工具的使用方法,以及如何将截图保存到内存中。此外,还有命令的封装和防检测技术,这些属于进阶应用,但基础命令部分可以从中提取。 接下来,引用[2]中提到了配置文件settings.yaml,里面包含命令别名和自定义命令。虽然主要针对LazyShell,但用户可能混淆了两者,需要明确区分。不过用户的问题是关于懒人精灵基础命令,所以应集中在引用[1]的内容上。 然后,需要整理出第四章提到的各个命令类别,比如触控、找色、找图、文字识别等,并给出具体命令示例。例如,触控命令可能包括Tap、Swipe,找色命令可能是FindColor,找图命令FindImage,文字识别使用OCR相关函数。同时,引用[1]还提到截图工具的使用,所以截图命令如CaptureScreen可能也是基础命令之一。 还要注意用户可能需要的命令封装和防检测方法,虽然属于进阶内容,但可以简要提及。另外,内存操作相关命令可能在截图到内存的部分有涉及,比如CaptureToMemory。 最后,确保回答结构清晰,分点列出各个基础命令类别,并给出具体例子和说明,同时附上相关问题供用户参考。需要验证每个命令是否符合懒人精灵的实际情况,避免引用错误的信息,比如LazyShell的配置可能不适用于懒人精灵,所以需要区分开。</think>以下是根据懒人精灵教程整理的**基础命令列表**,主要涵盖图色操作、触控命令、文字识别等核心功能模块,具体内容整理自官方教程[^1]: --- ### **一、触控命令** 1. **点击操作** - 单点触控:`Tap(x, y)` 示例:`Tap(100, 200)` 表示点击屏幕坐标(100,200) - 长按操作:`Press(x, y, duration)` 示例:`Press(150, 300, 1000)` 表示长按1秒 2. **滑动操作** - 直线滑动:`Swipe(x1, y1, x2, y2, duration)` 示例:`Swipe(200, 400, 500, 400, 500)` 表示横向滑动500毫秒 --- ### **二、图色操作命令** 1. **找色与找图** - 多点找色:`FindColor(x1, y1, x2, y2, color, sim)` 示例:在指定区域查找相似度≥0.9的颜色 - 找图命令:`FindImage(x1, y1, x2, y2, image_path, sim)` 示例:`FindImage(0, 0, 720, 1280, "/res/test.png", 0.8)` 2. **截图功能** - 截图到文件:`CaptureScreen(path)` - 截图到内存:`CaptureToMemory()` 用于动态比对场景变化 --- ### **三、文字识别** 1. **OCR基础命令** - 区域识别:`OCR(x1, y1, x2, y2)` 示例:识别屏幕上指定区域的文字 - 多语言支持:通过设置参数`language="chi_sim"`切换中文识别 --- ### **四、封装与防检测** 1. **命令封装** - 将常用操作封装为函数,例如: ```lua function ClickImage(image_path) local x, y = FindImage(image_path) if x ~= -1 then Tap(x, y) end end ``` 2. **防检测技巧** - 随机化点击坐标:`Tap(x + math.random(-5,5), y + math.random(-5,5))` - 模拟人类操作间隔:`Sleep(math.random(200,500))` --- ### **五、其他实用命令** - **循环与条件判断**:`While...Do...End`、`If...Then...Else` - **变量操作**:`SetVariable("key", value)` 与 `GetVariable("key")` - **文件操作**:`ReadFile(path)`、`WriteFile(path, content)` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值