C星寻路插件,支持易语言 按键精灵 TC DELPHI vb C# 等语言
【例子】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)
{
}
}
}

浙公网安备 33010602011771号