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