public void registerFlight(int goodsID) { string cmd = ""; //注册读取飞行棋坐标信息 ex.RegMsgCallBack(0x3B, new MsgCallBack(false, delegate(int msgType, byte[] data) { //3B 3A 00 0D if (data[3] == 0x0D) { int mid = BitConverter.ToInt16(new byte[] { data[8], data[9] }, 0); if (mapID == mid) { int point = readAxis(data, this.toAxis); //发送飞行指令 cmd = "3B 07 0F {0} {1} 00"; cmd = String.Format(cmd, StringUtil.FormatIntToHexStyle(goodsID, true).Trim(), StringUtil.FormatIntToHexStyle(point, true).Trim()); LoadDll.sendMsg((IntPtr)hwnd, cmd); } } }, true, null)); //注册飞行棋使用信息 ex.RegMsgCallBack(0x37, new MsgCallBack(false, delegate(int msgType, byte[] data) { //37 04 00 C6 D4 27 40 if (data[1] == 0x04 && data[2] == 0x00) { int gid = BitConverter.ToInt32(new byte[] { data[3], data[4], data[5], data[6] }, 0); cmd = "33 05 {0} 00"; cmd = String.Format(cmd, StringUtil.FormatIntToHexStyle(gid, true).Trim()); //回应服务器已经到了 LoadDll.sendMsg((IntPtr)hwnd, cmd); } }, true, null)); }
/// <summary> /// 注册验证 /// </summary> public void registerFontCheck() { //文字验证收到数据包 ex.RegMsgCallBack(0x42, new MsgCallBack(true, delegate(int msgType, byte[] data) { string cmd = checkFont(data, msgType); if (cmd.Trim() != "") { mxCheck.WaitOne(); Log.WriteLine("收到验证锁住对话"); new bean.DelaySend(hwnd, true, 4, 7, cmd, null, null).Run(); } }, false, null)); //文字验证服务器回复答案 ex.RegMsgCallBack(0xFF, new MsgCallBack(true, delegate(int msgType, byte[] data) { if (data[1] == 0x08) { //显示界面 mhxy.CallFunc.UIShowStatus(hwnd, true); //隐藏验证框 mhxy.CallFunc.HideCheckWin(hwnd); mxCheck.ReleaseMutex(); Log.WriteLine("验证回答正确解锁"); } }, false, null)); //服务器下发表情验证 ex.RegMsgCallBack(0xFF, new MsgCallBack(true, delegate(int msgType, byte[] data) { //FF 0A 00 BC EC B2 E2 30 36 38 38 73 73 if (data[1] == 0x0A && data[3] == 0xBC && data[4] == 0xEC && data[5] == 0xB2 && data[6] == 0xE2) { string ebqCmd = Expression(); new bean.DelaySend(hwnd, true, 2, 4, ebqCmd, delegate() { mxCheck.WaitOne(); Log.WriteLine("收到表情验证锁住对话"); }, delegate() { mxCheck.ReleaseMutex(); Log.WriteLine("回答表情验证解锁"); //显示界面 mhxy.CallFunc.UIShowStatus(hwnd, true); //隐藏验证框 mhxy.CallFunc.HideCheckWin(hwnd); }).Run(); } }, true, null)); }
private void ExcuteTask() { //设置初始化信息移动 am = new AutoMove(hwnd, 0, list[idx].mapExit.wait_x, list[idx].mapExit.wait_y, list[idx].mapExit.myMap.map_no, ex); while (runStatus) { if (init) { am.Run(); init = false; } //检查是否到达该地图出口 if (list[idx].exit_id > 0) { int[] xy = Global.addr.getPeopleXY(hwnd); //判断是否达到出口的地图 if (list[idx].mapExit.toMap.map_no == Global.addr.GetMapID(hwnd)) { //判断是否还有任务存在,如果没有就结束当前线程 if (list.Count - 1 == idx) { runStatus = false; am.Stop(); } else { //还有剩下任务没有处理,继续处理 //移动下标位置 if (idx + 1 < list.Count - 1) { idx += 1; } else { idx = list.Count - 1; } //启用下一次寻路任务 int x = list[idx].mapExit.wait_x; int y = list[idx].mapExit.wait_y; am.ReSetMove(Global.addr.GetMapID(hwnd), x, y, 0); } } else { //判断是否到达地址过出口 if (xy[0] == list[idx].mapExit.wait_x && xy[1] == list[idx].mapExit.wait_y) { if (list[idx].mapExit.npc_id == 0) { //调用过出口 mhxy.CallFunc.MhxyToExit(hwnd, list[idx].mapExit.x, list[idx].mapExit.y); } else { string cmd = mhxy.CallNPC.OpenDialog(list[idx].mapExit.npc_id); //打开NPC的对话框 LoadDll.sendMsg((IntPtr)hwnd, cmd); // NPC过出口 呼出NPC 注册收包选项 ex.RegMsgCallBack(0x81, new MsgCallBack(false, delegate(int msgType, byte[] data) { //回调代码 LoadDll.sendMsg((IntPtr)hwnd, String.Format("82 02 {0} 00", list[idx].mapExit.call_npc_option)); System.Threading.Thread.Sleep(1500); mhxy.CallFunc.CloseDia(hwnd); }, true, null)); } } else { //过口失败重新过去 if (am.status == false) { if (xy[0] != list[idx].mapExit.wait_x || xy[1] != list[idx].mapExit.wait_y) { Log.WriteLine("过出口失败,重新定位出口!"); int x = list[idx].mapExit.wait_x; int y = list[idx].mapExit.wait_y; am.ReSetMove(Global.addr.GetMapID(hwnd), x, y, 0); } } } } } System.Threading.Thread.Sleep(2000); } Log.WriteLine("已到达目的地图"); if (list[idx].is_type == 0) { MoveNPC(list[idx].target_id); } else { if (callback != null) { callback(); } } }