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注册到易语言中,点击工具>类型库或者ocx>注册类库>下一步>保存。</p>
<p>2、点击工具>支持库配置>全选>确定</p>
<p><br> </p>
<p>.版本 2<br>.支持库 DL_Cstar2</p>
<p>.程序集 窗口程序集1</p>
<p>.子程序 _按钮1_被单击<br>.局部变量 DD, CStar, , , <!!!><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星是否注册成功:"&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> 调试输出("当前地图:"&识别当前地图())<br> cx.A(获取资源路径("rc:xxxx一层.bmp"),C星卡号)<br> 否则如果(识别当前地图()=="xxxx二层")<br> 调试输出("当前地图:"&识别当前地图())<br> cx.A(获取资源路径("rc:xxxx二层.bmp"),C星卡号)<br> 否则<br> 调试输出("当前地图:"&"没有识别到地图信息") <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> 调试输出("当前坐标:"&StarX&":"&StarY)//调试输出当前XY坐标<br> //----------取当前地图坐标结束----------<br> //---------- C星寻路开始 ----------<br> xl=cx.FindPath(StarX,StarY,StopX,StopY,2,3)//动态取出下一步要到达的游戏坐标<br> 调试输出("寻路返回:"&xl)<br> 字符串分割(xl,",",xlxyb)<br> xlxybX=xlxyb<br> xlxybY=xlxyb //寻路下一步需要到达的XY坐标<br> 调试输出("寻路下一步游戏坐标分割:"&xlxybX&":"&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> 调试输出("当前需要点击下一步屏幕的坐标为:"&zhpmX&":"&zhpmY)<br> dm.MoveTo(zhpmX,zhpmY)<br> 等待(500)<br> dm.RightDown()<br> 等待(1000)<br> dm.RightUp()<br> 如果(zhpmX<=屏幕范围左||zhpmY<=屏幕范围上||zhpmX>=屏幕范围右||zhpmY>=屏幕范围下) //如果鼠标移动范围越界<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))<=5&&数学绝对值((StarY-StopY))<=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> </p><br><br>
来源:https://www.cnblogs.com/plug/p/19137231
頁:
[1]