俺是种地的 發表於 2025-10-12 20:56:00

C星寻路插件,支持易语言 按键精灵 TC DELPHI vb C# 等语言

<p><span style="background-color: rgba(255, 0, 0, 1); color: rgba(255, 255, 255, 1)">【例子】C星寻路参数详解</span></p>
<p>1 判断加载地图是否成功,返回1;否则-1<br>CheckA </p>
<p>2 释放所有对象(加载到内存中的地图对象,寻路对象等)<br>Free;</p>
<p>3 屏幕坐标转换ScreenXY 返回屏幕坐标<br>右下角坐标0,0那么模式1 ; 左下角0,0那么模式2 ;左上角0,0那么模式3 ;右上角0,0那么模式4 <br>ScreenXY(屏幕分辨率x,屏幕分辨率y,人物游戏当前坐标x,人物游戏当前坐标y,<br>FindPath算出来的坐标x,FindPath算出来的坐标y,比例尺默认40,模式)<br>例如:ScreenXY(800,600,125,365,135,375,40,3)<br><br>4 对于有偏移的坐标,可以自定义中心位置ScreenXY2 返回屏幕坐标<br>右下角坐标0,0那么模式1 ; 左下角0,0那么模式2 ;左上角0,0那么模式3 ;右上角0,0那么模式4 <br>ScreenXY2(屏幕中心x,屏幕中心y,人物游戏当前坐标x,人物游戏当前坐标y,<br>FindPath算出来的坐标x,FindPath算出来的坐标y,比例尺默认40,模式)</p>
<p>5 加载地图<br>A(全路径地图bmp,月卡卡号)</p>
<p>6 寻路,计算出下一步坐标,返回坐标 例如:202,31<br>FindPath(当前坐标X,当前坐标Y,目的地坐标X,目的地坐标Y,离墙距离,离自己几个像素)</p>
<p>7 判断地图名 返回1;否则-1<br>CheckMap(加载的地图名)</p>
<p><span style="background-color: rgba(255, 0, 0, 1); color: rgba(255, 255, 255, 1)">【例子】易语言调用例子</span></p>
<p>1、把DL_Cstar2.dll注册到易语言中,点击工具&gt;类型库或者ocx&gt;注册类库&gt;下一步&gt;保存。</p>
<p>2、点击工具&gt;支持库配置&gt;全选&gt;确定</p>
<p><br> </p>
<p>.版本 2<br>.支持库 DL_Cstar2</p>
<p>.程序集 窗口程序集1</p>
<p>.子程序 _按钮1_被单击<br>.局部变量 DD, CStar, , , &lt;!!!&gt;<br>.局部变量 Ddd, 文本型</p>
<p>DD.A (“1.bmp”, “TestRsMt1Pmpz282018030520330045435”)<br>Ddd = DD.FindPath (166, 44, 44, 210, 0, 2)<br>DD.Free ()<br>信息框 (“计算值:” + Ddd, 0, )</p>
<p><span style="background-color: rgba(255, 0, 0, 1); color: rgba(255, 255, 255, 1)">【例子】TC寻路简单例子</span></p>
<p>功能 初始化C星()<br>    变量 C星是否注册<br>    //这里添加你要执行的代码<br>    C星是否注册=注册插件("rc:DL_Cstar2.dll",真) <br>    调试输出("C星是否注册成功:"&amp;C星是否注册)<br>    cx=插件("DL2.CStar") //创建C星对象<br>结束<br>功能 寻路(StopX=102,StopY=137) //传参:终点x,终点y坐标<br>    变量 xl,xlxyb,xlxybcc //xl:寻路返回值,xlxyb:寻路下一步,xlxybcc:寻路下一步传参<br>    变量 StarX,StarY,角色屏幕X,角色屏幕Y,xlxybX,xlxybY,zhpmX,zhpmY<br>    变量 屏幕范围文本,屏幕范围数组,屏幕范围左,屏幕范围上,屏幕范围右,屏幕范围下<br>    变量 StrX,StrY,怪物_ret,物品_ret<br>    变量 怪物颜色,怪物名字<br>    变量 物品名字="天魔|圣战|裁决|屠龙|开天|雷霆"<br>    变量 物品颜色="f7b629-000000|ceb6f7-000000"<br>    变量 C星卡号="xxxxxxxxxxxxxxxxxxxxxx"<br>    怪物名字="xxx|xxx|xxx|xxxx|xxx|xxx|xxxx|xxx"<br>    怪物颜色="00ff00-000000|00ffff-000000"   <br>    屏幕范围文本="470,100,770,400"<br>    //寻路限制鼠标移动屏幕范围开始<br>    字符串分割(屏幕范围文本,",",屏幕范围数组)//先将设定的范围值分割出来赋值给限制的屏幕范围:上下左右<br>    屏幕范围左=屏幕范围数组 //屏幕限制范围x1坐标<br>    屏幕范围上=屏幕范围数组 //屏幕限制范围y1坐标<br>    屏幕范围右=屏幕范围数组 //屏幕限制范围x2坐标<br>    屏幕范围下=屏幕范围数组 //屏幕限制范围y2坐标<br>    //寻路限制鼠标移动屏幕范围结束<br>    //坐标变量<br>    角色屏幕X=627   //640 //角色正中在1280x720的游戏窗口<br>    角色屏幕Y=270   //360<br>    //    StopX=102 //终点坐标X<br>    //    StopY=137 //终点坐标Y<br>    //寻路下一步默认参数3,也就是距离当前游戏坐标需要点击下一步坐标步数<br>    xlxybcc=3<br>    <br>    如果(识别当前地图()=="xxxx一层")<br>      调试输出("当前地图:"&amp;识别当前地图())<br>      cx.A(获取资源路径("rc:xxxx一层.bmp"),C星卡号)<br>    否则如果(识别当前地图()=="xxxx二层")<br>      调试输出("当前地图:"&amp;识别当前地图())<br>      cx.A(获取资源路径("rc:xxxx二层.bmp"),C星卡号)<br>    否则<br>      调试输出("当前地图:"&amp;"没有识别到地图信息") <br>    结束<br>    <br>    //cx.CheckA()<br>    循环(真)<br>      //----------取当前地图坐标开始----------<br>      //      StarX=转整型(dm.Ocr(91,703,115,717,"00ff00-000000",1))//取当前地图实际坐标X<br>      //      StarY=转整型(dm.Ocr(110,703,141,717,"00ff00-000000",1))//取当前地图实际坐标Y<br>      dm.UseDict(1)<br>      StarX=转整型(dm.Ocr(115,703,139,718,"00ff00-000000",1))//取当前地图实际坐标X<br>      StarY=转整型(dm.Ocr(54,703,163,718,"00ff00-000000",1))//取当前地图实际坐标Y<br>      调试输出("当前坐标:"&amp;StarX&amp;":"&amp;StarY)//调试输出当前XY坐标<br>      //----------取当前地图坐标结束----------<br>      //----------   C星寻路开始    ----------<br>      xl=cx.FindPath(StarX,StarY,StopX,StopY,2,3)//动态取出下一步要到达的游戏坐标<br>      调试输出("寻路返回:"&amp;xl)<br>      字符串分割(xl,",",xlxyb)<br>      xlxybX=xlxyb<br>      xlxybY=xlxyb //寻路下一步需要到达的XY坐标<br>      调试输出("寻路下一步游戏坐标分割:"&amp;xlxybX&amp;":"&amp;xlxybY)<br>      //      zhpmX=角色屏幕X+(xlxybX-StarX)*40 //转换为屏幕点击寻路下一步的坐标<br>      //      zhpmY=角色屏幕Y+(xlxybY-StarY)*40 //zhpmX:转换后的屏幕坐标X,zhpmY:转换后的屏幕坐标Y<br>      变量 临时屏幕,临时屏幕XY<br>      临时屏幕=cx.ScreenXY2(角色屏幕X,角色屏幕Y,StarX,StarY,xlxybX,xlxybY,40,xlxybcc)<br>      字符串分割(临时屏幕,",",临时屏幕XY)<br>      zhpmX=临时屏幕XY<br>      zhpmY=临时屏幕XY<br>      调试输出("当前需要点击下一步屏幕的坐标为:"&amp;zhpmX&amp;":"&amp;zhpmY)<br>      dm.MoveTo(zhpmX,zhpmY)<br>      等待(500)<br>      dm.RightDown()<br>      等待(1000)<br>      dm.RightUp()<br>      如果(zhpmX&lt;=屏幕范围左||zhpmY&lt;=屏幕范围上||zhpmX&gt;=屏幕范围右||zhpmY&gt;=屏幕范围下) //如果鼠标移动范围越界<br>            调试输出("鼠标移动范围越界,等待一下")<br>            超级鼠标右键弹起()<br>            dm.MoveTo(角色屏幕X,角色屏幕Y)<br>            等待(500)<br>      否则<br>            调试输出("寻路状态正常进行中...") <br>      结束<br>      如果(xl==-1) //判断是否因为特殊原因没有识别到游戏坐标<br>            调试输出("寻路出现问题,可能是没有识别到当前游戏坐标")<br>            跳出<br>      结束<br>      如果(cx.CheckError(xl,15)==1)<br>            调试输出("寻路出现重复坐标,可能直角无法通过或被怪物等阻挡")<br>            <br>      否则<br>            <br>      结束<br>      dm.UseDict(0)<br>      怪物_ret=dm.FindStr(171,41,1024,549,怪物名字,怪物颜色,1,StrX,StrY)<br>      物品_ret=dm.FindStr(401,71,851,521,物品名字,物品颜色,1.0,StrX,StrY) <br>      如果(怪物_ret!=-1||物品_ret!=-1)<br>            调试输出 ("[寻路]:屏幕范围有怪和装备")<br>            跳出<br>            <br>      否则<br>            调试输出 ("[寻路]:屏幕范围没有怪/装备") <br>      结束<br>      dm.UseDict(1)<br>      如果(数学绝对值((StarX-StopX))&lt;=5&amp;&amp;数学绝对值((StarY-StopY))&lt;=5)<br>            调试输出("已经到达设置的终点范围")<br>            超级鼠标右键弹起()<br>            跳出<br>      结束<br>      <br>    结束<br>    随机寻路()<br>    <br>    <br>结束</p>
<p><span style="background-color: rgba(255, 0, 0, 1); color: rgba(255, 255, 255, 1)">C#调用大龙寻路插件</span></p>
<p>using System;<br>using System.Collections.Generic;<br>using System.ComponentModel;<br>using System.Data;<br>using System.Drawing;<br>using System.Linq;<br>using System.Text;<br>using System.Threading.Tasks;<br>using System.Windows.Forms;<br>using System.Runtime.InteropServices;</p>
<p>namespace WindowsFormsApp1<br>{<br>    public partial class Form1 : Form<br>    {<br>      public Form1()<br>      {<br>            InitializeComponent();<br>      }<br>      <br>      public static extern int A(IntPtrpar1, IntPtr ASX);</p>
<p>      <br>      public static extern int FindPath(int StarX, int StarY, int StopX, int StopY, int Space, int ClickXY, out int IntX, out int IntY);<br>      private void button1_Click(object sender, EventArgs e)<br>      {<br>            //string ss = Marshal.PtrToStringAnsi(temp);string=Marshal.PtrToStringAnsi(IntPtr) ;<br>            IntPtr Mmap = Marshal.StringToHGlobalAnsi(@"C:\1.bmp"); IntPtr Msn = Marshal.StringToHGlobalAnsi("月卡卡号");<br>            try<br>            {<br>                int CanDo = A(Mmap, Msn); MessageBox.Show(CanDo.ToString());<br>                if (CanDo == 1)<br>                {<br>                  MessageBox.Show("加载地图成功!");<br>                  int SSS = FindPath(154, 39, 35, 210, 0, 1, out int IntX, out int IntY);<br>                  MessageBox.Show(IntX.ToString() + "," + IntY.ToString());<br>                }       <br>            }<br>            catch (Exception)<br>            {<br>                throw;<br>            }<br>         <br>      }</p>
<p>      private void Form1_Load(object sender, EventArgs e)<br>      {</p>
<p>      }<br>    }<br>}</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/plug/p/19137231
頁: [1]
查看完整版本: C星寻路插件,支持易语言 按键精灵 TC DELPHI vb C# 等语言