Exemple #1
0
        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));
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        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();
                }
            }
        }