public static NFMsg.Ident NFToPB(NFCoreEx.NFIDENTID xID)
    {
        NFMsg.Ident xIdent = new NFMsg.Ident();
        xIdent.svrid = xID.nHead64;
        xIdent.index = xID.nData64;

        return xIdent;
    }
    public void RequireAcceptTask(NFCoreEx.NFIDENTID objectID, string strTaskID)
    {
        NFMsg.ReqAcceptTask xData = new NFMsg.ReqAcceptTask();
        xData.task_id = UnicodeEncoding.Default.GetBytes(strTaskID);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAcceptTask>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_ACCEPT_TASK, stream);
    }
    public void RequireChat(NFCoreEx.NFIDENTID objectID, NFCoreEx.NFIDENTID targetID, int nType, string strData)
    {
        NFMsg.ReqAckPlayerChat xData = new NFMsg.ReqAckPlayerChat();
        xData.chat_id = NFToPB(targetID);
        xData.chat_name = UnicodeEncoding.Default.GetBytes(xNet.strRoleName);
        xData.chat_type = (NFMsg.ReqAckPlayerChat.EGameChatType)nType;
        xData.chat_info = UnicodeEncoding.Default.GetBytes(strData);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAckPlayerChat>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_CHAT, stream);
    }
    public void RequirePickUpItem(NFCoreEx.NFIDENTID objectID, NFCoreEx.NFIDENTID nItemID)
    {
        NFMsg.ReqPickDropItem xData = new NFMsg.ReqPickDropItem();
        xData.item_guid = NFToPB(nItemID);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqPickDropItem>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_PICK_ITEM, stream);
    }
    public void SendMsg(NFCoreEx.NFIDENTID xID, NFMsg.EGameMsgID unMsgID, MemoryStream stream)
    {
        if (NFStart.Instance.bDebugMode)
        {
            return;
        }

        NFMsg.MsgBase xData = new NFMsg.MsgBase();
        xData.player_id = NFToPB(xID);
        xData.msg_data = stream.ToArray();

        MemoryStream body = new MemoryStream();
        Serializer.Serialize<NFMsg.MsgBase>(body, xData);

        MsgHead head = new MsgHead();
        head.unMsgID = (UInt16)unMsgID;
        head.unDataLen = (UInt32)body.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;

        byte[] bodyByte = body.ToArray();
        byte[] headByte = StructureTransform.StructureToByteArrayEndian(head);

        byte[] sendBytes = new byte[head.unDataLen];
        headByte.CopyTo(sendBytes, 0);
        bodyByte.CopyTo(sendBytes, headByte.Length);

        xNet.mxClient.SendBytes(sendBytes);

        string strTime = DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second;
        string strData = "S***:" + strTime + " MsgID:" + head.unMsgID + " Len:" + head.unDataLen;
        xNet.mxListener.aMsgList.Add(strData);
    }
    public void RequireSwapScene(NFCoreEx.NFIDENTID objectID, int nTransferType, int nSceneID, int nLineIndex)
    {
        NFMsg.ReqAckSwapScene xData = new NFMsg.ReqAckSwapScene();
        xData.transfer_type = (NFMsg.ReqAckSwapScene.EGameSwapType)nTransferType;
        xData.scene_id = nSceneID;
        xData.line_id = nLineIndex;

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAckSwapScene>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_SWAP_SCENE, stream);
    }
    public void RequireHeartBeat(NFCoreEx.NFIDENTID objectID)
    {
        NFMsg.ReqHeartBeat xData = new NFMsg.ReqHeartBeat();

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqHeartBeat>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_STS_HEART_BEAT, stream);
    }
    public void RequireMoveImmune(NFCoreEx.NFIDENTID objectID, float fX, float fZ)
    {
        NFMsg.ReqAckPlayerMove xData = new NFMsg.ReqAckPlayerMove();
        xData.mover = NFToPB(objectID);
        xData.moveType = 0;
        NFMsg.Position xTargetPos = new NFMsg.Position();
        xTargetPos.x = fX;
        xTargetPos.z = fZ;
        xData.target_pos.Add(xTargetPos);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAckPlayerMove>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_MOVE_IMMUNE, stream);
    }
    public void RequireEnterGameServer(NFCoreEx.NFIDENTID objectID, string strAccount, string strRoleName, int nServerID)
    {
        NFMsg.ReqEnterGameServer xData = new NFMsg.ReqEnterGameServer();
        xData.name = UnicodeEncoding.Default.GetBytes(strRoleName);
        xData.account = UnicodeEncoding.Default.GetBytes(strAccount);
        xData.game_id = nServerID;
        xData.id = NFToPB(objectID);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqEnterGameServer>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_ENTER_GAME, stream);
    }
    public void RequireDelRole(NFCoreEx.NFIDENTID objectID, string strAccount, string strRoleName, int nGameID)
    {
        NFMsg.ReqDeleteRole xData = new NFMsg.ReqDeleteRole();
        xData.name = UnicodeEncoding.Default.GetBytes(strRoleName);
        xData.account = UnicodeEncoding.Default.GetBytes(strAccount);
        xData.game_id = nGameID;

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqDeleteRole>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_DELETE_ROLE, stream);
    }
    //有可能是他副本的NPC移动,因此增加64对象ID
    public void RequireUseSkill(NFCoreEx.NFIDENTID objectID, string strKillID, NFCoreEx.NFIDENTID nTargetID, float fNowX, float fNowZ, float fTarX, float fTarZ)
    {
        NFMsg.Position xNowPos = new NFMsg.Position();
        NFMsg.Position xTarPos = new NFMsg.Position();

        xNowPos.x = fNowX;
        xNowPos.y = 0.0f;
        xNowPos.z = fNowZ;
        xTarPos.x = fTarX;
        xTarPos.y = 0.0f;
        xTarPos.z = fTarZ;

        NFMsg.ReqAckUseSkill xData = new NFMsg.ReqAckUseSkill();
        xData.user = NFToPB(objectID);
        xData.skill_id = System.Text.Encoding.Default.GetBytes(strKillID);
        xData.tar_pos = xTarPos;
        xData.now_pos = xNowPos;

        NFMsg.EffectData xEffData = new NFMsg.EffectData();
        xEffData.effect_ident = (NFToPB(nTargetID));
        xEffData.effect_value = 0;
        xEffData.effect_rlt = 0;

        xData.effect_data.Add(xEffData);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAckUseSkill>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_SKILL_OBJECTX, stream);

        /////////////////////////////////////////////
        if (NFStart.Instance.bDebugMode)
        {
            NFMsg.MsgBase xAckData = new NFMsg.MsgBase();
            xAckData.player_id = NFToPB(objectID);
            xAckData.msg_data = stream.ToArray();

            MemoryStream xAckBody = new MemoryStream();
            Serializer.Serialize<NFMsg.MsgBase>(xAckBody, xAckData);

            MsgHead head = new MsgHead();
            head.unMsgID = (UInt16)NFMsg.EGameMsgID.EGMI_ACK_SKILL_OBJECTX;
            head.unDataLen = (UInt32)xAckBody.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;

            xNet.mxBinMsgEvent.OnMessageEvent(head, xAckBody.ToArray());
        }
    }
    public void RequireMoveImmune(NFCoreEx.NFIDENTID objectID, float fX, float fZ)
    {
        NFMsg.ReqAckPlayerMove xData = new NFMsg.ReqAckPlayerMove();
        xData.mover = NFToPB(objectID);
        xData.moveType = 0;
        NFMsg.Position xTargetPos = new NFMsg.Position();
        xTargetPos.x = fX;
        xTargetPos.z = fZ;
        xData.target_pos.Add(xTargetPos);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAckPlayerMove>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_MOVE_IMMUNE, stream);

        if (NFStart.Instance.bDebugMode)
        {
            NFMsg.MsgBase xAckData = new NFMsg.MsgBase();
            xAckData.player_id = xData.mover;
            xAckData.msg_data = stream.ToArray();

            MemoryStream xAckBody = new MemoryStream();
            Serializer.Serialize<NFMsg.MsgBase>(xAckBody, xAckData);

            MsgHead head = new MsgHead();
            head.unMsgID = (UInt16)NFMsg.EGameMsgID.EGMI_ACK_MOVE_IMMUNE;
            head.unDataLen = (UInt32)xAckBody.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;

            xNet.mxBinMsgEvent.OnMessageEvent(head, xAckBody.ToArray());

        }
    }
    public void RequireEnterGameServer(NFCoreEx.NFIDENTID objectID, string strAccount, string strRoleName, int nServerID)
    {
        NFMsg.ReqEnterGameServer xData = new NFMsg.ReqEnterGameServer();
        xData.name = UnicodeEncoding.Default.GetBytes(strRoleName);
        xData.account = UnicodeEncoding.Default.GetBytes(strAccount);
        xData.game_id = nServerID;
        xData.id = NFToPB(objectID);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqEnterGameServer>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_ENTER_GAME, stream);

        if (NFStart.Instance.bDebugMode)
        {
            //EGMI_ACK_OBJECT_ENTRY
            //property
            //EGMI_ACK_SWAP_SCENE
            //EGMI_ACK_OBJECT_ENTRY
            //property
            float fX = 0.0f;
            float fY = 0.0f;
            float fZ = 0.0f;
            NFIElement xElement = NFCElementManager.Instance.GetElement("1");
            if (null != xElement)
            {
                string strRelivePos = xElement.QueryString("RelivePos");
                string[] sArray = strRelivePos.Split(';');
                if (sArray.Length > 0)
                {
                    sArray = sArray[0].Split(',');
                }

                if (sArray.Length == 3)
                {
                    fX = float.Parse(sArray[0]);
                    fY = float.Parse(sArray[1]);
                    fZ = float.Parse(sArray[2]);
                }
            }
            /////////////////////////////////////////////
            //mainplayer
            NFMsg.AckPlayerEntryList xAckMainBodyData = new NFMsg.AckPlayerEntryList();
            NFMsg.PlayerEntryInfo xInfo = new NFMsg.PlayerEntryInfo();
            NFMsg.Ident xID = new NFMsg.Ident();
            xInfo.object_guid = xID;
            xInfo.x = fX;
            xInfo.y = fY;
            xInfo.z = fZ;
            xInfo.career_type = 1;
            xInfo.player_state = 1;
            xInfo.config_id = UnicodeEncoding.Default.GetBytes("");
            xInfo.scene_id = 1;
            xInfo.class_id = UnicodeEncoding.Default.GetBytes("Player");

            xAckMainBodyData.object_list.Add(xInfo);

            MemoryStream xAckMianPlayerBodyStream = new MemoryStream();
            Serializer.Serialize<NFMsg.AckPlayerEntryList>(xAckMianPlayerBodyStream, xAckMainBodyData);

            NFMsg.MsgBase xAckMianPlayerData = new NFMsg.MsgBase();
            xAckMianPlayerData.player_id = xID;
            xAckMianPlayerData.msg_data = xAckMianPlayerBodyStream.ToArray();

            MemoryStream xAckAllStream = new MemoryStream();
            Serializer.Serialize<NFMsg.MsgBase>(xAckAllStream, xAckMianPlayerData);

            MsgHead head = new MsgHead();
            head.unMsgID = (UInt16)NFMsg.EGameMsgID.EGMI_ACK_OBJECT_ENTRY;
            head.unDataLen = (UInt32)xAckAllStream.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;

            xNet.mxBinMsgEvent.OnMessageEvent(head, xAckAllStream.ToArray());
            /////////////////////////////////////////////
            //property

            NFMsg.ObjectPropertyInt propertyData = new NFMsg.ObjectPropertyInt();

            PropertyInt xPropertyInt = new PropertyInt();
            xPropertyInt.property_name = UnicodeEncoding.Default.GetBytes("MOVE_SPEED");
            xPropertyInt.data = 50000;
            propertyData.property_list.Add(xPropertyInt);
            propertyData.player_id = xID;

            MemoryStream xAckPropertyIntStream = new MemoryStream();
            Serializer.Serialize<NFMsg.ObjectPropertyInt>(xAckPropertyIntStream, propertyData);

            NFMsg.MsgBase xPropertyIntMsg = new NFMsg.MsgBase();
            xPropertyIntMsg.player_id = xID;
            xPropertyIntMsg.msg_data = xAckPropertyIntStream.ToArray();

            MemoryStream xAckPropertyIntAllStream = new MemoryStream();
            Serializer.Serialize<NFMsg.MsgBase>(xAckPropertyIntAllStream, xPropertyIntMsg);

            MsgHead xAckPropertyhead = new MsgHead();
            xAckPropertyhead.unMsgID = (UInt16)NFMsg.EGameMsgID.EGMI_ACK_PROPERTY_INT;
            xAckPropertyhead.unDataLen = (UInt32)xAckPropertyIntAllStream.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;

            xNet.mxBinMsgEvent.OnMessageEvent(xAckPropertyhead, xAckPropertyIntAllStream.ToArray());

            /////////////////////////////////////////////
            xNet.mPlayerState = NFNet.PLAYER_STATE.E_PLAYER_GAMEING;
            //NFCRenderInterface.Instance.LoadScene(1, fX, fY, fZ);
            /////////////////////////////////////////////

            //npc
            NFMsg.AckPlayerEntryList xAckNPCBodyData = new NFMsg.AckPlayerEntryList();
            for (int i = 0; i < 5; ++i)
            {
                NFMsg.PlayerEntryInfo xNPCInfo = new NFMsg.PlayerEntryInfo();

                NFMsg.Ident xNPCID = new NFMsg.Ident();
                xNPCID.index = i + 10000;
                xNPCInfo.object_guid = xNPCID;
                xNPCInfo.x = fX + i;
                xNPCInfo.y = fY;
                xNPCInfo.z = fZ + i;
                xNPCInfo.career_type = 1;
                xNPCInfo.player_state = 1;
                xNPCInfo.config_id = UnicodeEncoding.Default.GetBytes("");
                xNPCInfo.scene_id = 1;
                xNPCInfo.class_id = UnicodeEncoding.Default.GetBytes("Player");

                xAckNPCBodyData.object_list.Add(xNPCInfo);
            }

            MemoryStream xAckNPCBodyStream = new MemoryStream();
            Serializer.Serialize<NFMsg.AckPlayerEntryList>(xAckNPCBodyStream, xAckNPCBodyData);

            NFMsg.MsgBase xAckNPCrData = new NFMsg.MsgBase();
            xAckNPCrData.player_id = xID;
            xAckNPCrData.msg_data = xAckNPCBodyStream.ToArray();

            MemoryStream xAckAllNPCStream = new MemoryStream();
            Serializer.Serialize<NFMsg.MsgBase>(xAckAllNPCStream, xAckNPCrData);

            MsgHead xNPCHead = new MsgHead();
            xNPCHead.unMsgID = (UInt16)NFMsg.EGameMsgID.EGMI_ACK_OBJECT_ENTRY;
            xNPCHead.unDataLen = (UInt32)xAckAllNPCStream.Length + (UInt32)ConstDefine.NF_PACKET_HEAD_SIZE;

            xNet.mxBinMsgEvent.OnMessageEvent(xNPCHead, xAckAllNPCStream.ToArray());
            //////////////////////////////////////////////
        }
    }
    //有可能是他副本的NPC移动,因此增加64对象ID
    public void RequireUseSkill(NFCoreEx.NFIDENTID objectID, string strKillID, NFCoreEx.NFIDENTID nTargetID, float fNowX, float fNowZ, float fTarX, float fTarZ)
    {
        NFMsg.Position xNowPos = new NFMsg.Position();
        NFMsg.Position xTarPos = new NFMsg.Position();

        xNowPos.x = fNowX;
        xNowPos.y = 0.0f;
        xNowPos.z = fNowZ;
        xTarPos.x = fTarX;
        xTarPos.y = 0.0f;
        xTarPos.z = fTarZ;

        NFMsg.ReqAckUseSkill xData = new NFMsg.ReqAckUseSkill();
        xData.user = NFToPB(objectID);
        xData.skill_id = System.Text.Encoding.Default.GetBytes(strKillID);
        xData.tar_pos = xTarPos;
        xData.now_pos = xNowPos;

        NFMsg.EffectData xEffData = new NFMsg.EffectData();
        xEffData.effect_ident = (NFToPB(nTargetID));
        xEffData.effect_value = 0;
        xEffData.effect_rlt = 0;

        xData.effect_data.Add(xEffData);

        MemoryStream stream = new MemoryStream();
        Serializer.Serialize<NFMsg.ReqAckUseSkill>(stream, xData);

        SendMsg(objectID, NFMsg.EGameMsgID.EGMI_REQ_SKILL_OBJECTX, stream);
    }