示例#1
0
    public byte[] ToArray(MMO_MemoryStream ms, bool isChild = false)
    {
        ms.SetLength(0);
        if (!isChild)
        {
            ms.WriteUShort(ProtoCode);
        }

        ms.WriteInt(RoleType);

        byte[] buff_CurrRole = CurrRole.ToArray(new MMO_MemoryStream(), true);
        ms.WriteInt(buff_CurrRole.Length);
        ms.Write(buff_CurrRole, 0, buff_CurrRole.Length);

        if (RoleList != null)
        {
            int len_RoleList = RoleList.Count;
            ms.WriteInt(len_RoleList);
            for (int i = 0; i < len_RoleList; i++)
            {
                Role_DataProto _Role_DataProto = RoleList[i];
                byte[]         _buff_Curr      = _Role_DataProto.ToArray(new MMO_MemoryStream(), true);
                ms.WriteInt(_buff_Curr.Length);
                ms.Write(_buff_Curr, 0, _buff_Curr.Length);
            }
        }
        else
        {
            ms.WriteInt(0);
        }

        return(ms.ToArray());
    }
示例#2
0
        /// <summary>
        /// 检查发送队列
        /// </summary>
        private void CheckSendQueue()
        {
            if (m_SendCount >= GameEntry.Socket.MaxSendCount)
            {
                //等待下一帧发送
                m_SendCount = 0;
                return;
            }

            lock (m_SendQueue)
            {
                if (m_SendQueue.Count > 0 || m_IsHasUnDealBytes)
                {
                    //int smallCount = 0;

                    MMO_MemoryStream ms = m_SocketSendMS;
                    ms.SetLength(0);

                    //先处理未处理的包
                    if (m_IsHasUnDealBytes)
                    {
                        m_IsHasUnDealBytes = false;
                        ms.Write(m_UnDealBytes, 0, m_UnDealBytes.Length);
                        //smallCount++;
                    }

                    while (true)
                    {
                        if (m_SendQueue.Count == 0)
                        {
                            break;
                        }

                        //取出一个字节数组
                        byte[] buffer = m_SendQueue.Dequeue();

                        if ((buffer.Length + ms.Length) <= GameEntry.Socket.MaxSendByteCount)
                        {
                            //smallCount++;
                            ms.Write(buffer, 0, buffer.Length);
                        }
                        else
                        {
                            //已经取出了一个要发送的字节数组
                            m_UnDealBytes      = buffer;
                            m_IsHasUnDealBytes = true;
                            break; //非常重要
                        }
                    }

                    m_SendCount++;
                    //Debug.LogError("拼凑了小包数量=" + smallCount);
                    Send(ms.ToArray());
                }
            }
        }
示例#3
0
    /// <summary>
    /// 封装数据包
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    private byte[] MakeData(byte[] data)
    {
        byte[] retBuffer = null;

        using (MMO_MemoryStream ms = new MMO_MemoryStream())
        {
            ms.Write((ushort)(data.Length));
            ms.Write(data, 0, data.Length);
            retBuffer = ms.ToArray();
        }
        return(retBuffer);
    }
示例#4
0
    public static RoleOperation_CreateRoleProto GetProto(byte[] buffer, bool isChild = false)
    {
        RoleOperation_CreateRoleProto proto = new RoleOperation_CreateRoleProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.JobId        = (byte)ms.ReadByte();
        proto.RoleNickName = ms.ReadUTF8String();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#5
0
    /// <summary>
    /// 封装数据包
    /// </summary>
    /// <param name="buffer"></param>
    private byte[] MakeDataPackage(byte[] buffer)
    {
        //1.压缩
        bool isCompress = buffer.Length > m_CompressLen;

        if (isCompress)
        {
            buffer = ZlibHelper.CompressBytes(buffer);
        }

        //2.异或
        buffer = SecurityUtil.Xor(buffer);

        //3.计算CRC
        ushort crc = Crc16.CalculateCrc16(buffer);

        byte[] retData;
        using (MMO_MemoryStream ms = new MMO_MemoryStream())
        {
            ms.WriteUShort((ushort)(buffer.Length + 3));
            ms.WriteBool(isCompress);
            ms.WriteUShort(crc);
            ms.Write(buffer, 0, buffer.Length);
            retData = ms.ToArray();
        }
        return(retData);
    }
    public static GameLevel_VictoryProto GetProto(MMO_MemoryStream ms, byte[] buffer)
    {
        GameLevel_VictoryProto proto = new GameLevel_VictoryProto();

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.GameLevelId           = ms.ReadInt();
        proto.Grade                 = (byte)ms.ReadByte();
        proto.Star                  = (byte)ms.ReadByte();
        proto.Exp                   = ms.ReadInt();
        proto.Gold                  = ms.ReadInt();
        proto.KillTotalMonsterCount = ms.ReadInt();
        proto.KillMonsterList       = new List <MonsterItem>();
        for (int i = 0; i < proto.KillTotalMonsterCount; i++)
        {
            MonsterItem _KillMonster = new MonsterItem();
            _KillMonster.MonsterId    = ms.ReadInt();
            _KillMonster.MonsterCount = ms.ReadInt();
            proto.KillMonsterList.Add(_KillMonster);
        }
        proto.GoodsTotalCount = ms.ReadInt();
        proto.GetGoodsList    = new List <GoodsItem>();
        for (int i = 0; i < proto.GoodsTotalCount; i++)
        {
            GoodsItem _GetGoods = new GoodsItem();
            _GetGoods.GoodsType  = (byte)ms.ReadByte();
            _GetGoods.GoodsId    = ms.ReadInt();
            _GetGoods.GoodsCount = ms.ReadInt();
            proto.GetGoodsList.Add(_GetGoods);
        }

        return(proto);
    }
示例#7
0
    public static System_HeartbeatReturnProto GetProto(byte[] buffer, bool isChild = false)
    {
        System_HeartbeatReturnProto proto = new System_HeartbeatReturnProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.LocalTime  = ms.ReadFloat();
        proto.ServerTime = ms.ReadLong();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
    public static WorldMap_InitRoleProto GetProto(MMO_MemoryStream ms, byte[] buffer)
    {
        WorldMap_InitRoleProto proto = new WorldMap_InitRoleProto();

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.RoleCount = ms.ReadInt();
        proto.ItemList  = new List <RoleItem>();
        for (int i = 0; i < proto.RoleCount; i++)
        {
            RoleItem _Item = new RoleItem();
            _Item.RoleId       = ms.ReadInt();
            _Item.RoleNickName = ms.ReadUTF8String();
            _Item.RoleLevel    = ms.ReadInt();
            _Item.RoleMaxHP    = ms.ReadInt();
            _Item.RoleCurrHP   = ms.ReadInt();
            _Item.RoleMaxMP    = ms.ReadInt();
            _Item.RoleCurrMP   = ms.ReadInt();
            _Item.RoleJobId    = ms.ReadInt();
            _Item.RolePosX     = ms.ReadFloat();
            _Item.RolePosY     = ms.ReadFloat();
            _Item.RolePosZ     = ms.ReadFloat();
            _Item.RoleYAngle   = ms.ReadFloat();
            proto.ItemList.Add(_Item);
        }

        return(proto);
    }
示例#9
0
    /// <summary>
    /// 封装数据包
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    private byte[] MakeData(byte[] data)
    {
        byte[] retBuffer = null;
        //0.压缩标志 //数据包长度大于设定长度则压缩
        bool isCompress = data.Length > m_CompressLength ? true : false;

        if (isCompress)
        {
            data = ZlibHelper.CompressBytes(data);
        }

        //1.异或
        data = SecurityUtil.Xor(data);

        //2.CRC校验
        ushort crc = Crc16.CalculateCrc16(data);

        using (MMO_MemoryStream ms = new MMO_MemoryStream())
        {
            //3.写入包长度
            //往ms中写入数据(包长度),数据的长度+压缩标志(1byte)+CRC校验(UShort(2byte))
            ms.WriteUShort((ushort)(data.Length + 3));
            //往ms中写入数据(压缩标识)
            ms.WriteBool(isCompress);
            ms.WriteUShort(crc);
            ms.Write(data, 0, data.Length);

            retBuffer = ms.ToArray();
        }

        return(retBuffer);
    }
    public static WorldMap_OtherRoleUpdateInfoProto GetProto(byte[] buffer, bool isChild = false)
    {
        WorldMap_OtherRoleUpdateInfoProto proto = new WorldMap_OtherRoleUpdateInfoProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.RoldId       = ms.ReadInt();
        proto.RoleNickName = ms.ReadUTF8String();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#11
0
    public static WorldMap_PosProto GetProto(byte[] buffer, bool isChild = false)
    {
        WorldMap_PosProto proto = new WorldMap_PosProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.x      = ms.ReadFloat();
        proto.y      = ms.ReadFloat();
        proto.z      = ms.ReadFloat();
        proto.yAngle = ms.ReadFloat();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#12
0
        // 封装数据包
        byte[] MakeData(byte[] data)
        {
            byte[] retBuffer = null;
            // 1.1 压缩
            bool isCompress = data.Length > m_CompressLen;

            if (isCompress)
            {
                data = ZlibHelper.CompressBytes(data);
            }
            // 2 异或加密
            data = SecurityUtil.Xor(data);
            // 3 加验证
            ushort crc = Crc16.CalculateCrc16(data);

            using (MMO_MemoryStream ms = new MMO_MemoryStream())
            {
                ms.WriteUShort((ushort)(data.Length + 3));
                ms.WriteBool(isCompress);
                ms.WriteUShort(crc);
                ms.Write(data, 0, data.Length);

                retBuffer = ms.ToArray();
            }

            return(retBuffer);
        }
示例#13
0
    public static Goods_UseItemReturnProto GetProto(byte[] buffer, bool isChild = false)
    {
        Goods_UseItemReturnProto proto = new Goods_UseItemReturnProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.IsSuccess = ms.ReadBool();
        if (proto.IsSuccess)
        {
            proto.GoodsId = ms.ReadInt();
        }
        else
        {
            proto.MsgCode = ms.ReadInt();
        }

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#14
0
        /// <summary>
        /// 封装数据包
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private byte[] MakeData(byte[] data)
        {
            byte[] retBuffer = null;

            //1.如果数据包的长度 大于了m_CompressLen 则进行压缩
            bool isCompress = data.Length > m_CompressLen ? true : false;

            if (isCompress)
            {
                data = ZlibHelper.CompressBytes(data);
            }

            //2.异或
            data = SecurityUtil.Xor(data);

            //3.Crc校验 压缩后的
            ushort crc = Crc16.CalculateCrc16(data);

            Console.WriteLine("crc=" + crc);
            MMO_MemoryStream ms = this.m_SocketSendMS;

            ms.SetLength(0);

            ms.WriteUShort((ushort)(data.Length + 3));
            ms.WriteBool(isCompress);
            ms.WriteUShort(crc);
            ms.Write(data, 0, data.Length);

            retBuffer = ms.ToArray();
            return(retBuffer);
        }
    public static WorldMap_CurrRoleUseSkillProto GetProto(MMO_MemoryStream ms, byte[] buffer)
    {
        WorldMap_CurrRoleUseSkillProto proto = new WorldMap_CurrRoleUseSkillProto();

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.SkillId       = ms.ReadInt();
        proto.SkillLevel    = ms.ReadInt();
        proto.RolePosX      = ms.ReadFloat();
        proto.RolePosY      = ms.ReadFloat();
        proto.RolePosZ      = ms.ReadFloat();
        proto.RoleYAngle    = ms.ReadFloat();
        proto.BeAttackCount = ms.ReadInt();
        proto.ItemList      = new List <BeAttackItem>();
        for (int i = 0; i < proto.BeAttackCount; i++)
        {
            BeAttackItem _Item = new BeAttackItem();
            _Item.BeAttackRoleId = ms.ReadInt();
            proto.ItemList.Add(_Item);
        }

        return(proto);
    }
示例#16
0
    public static System_GameServerConfigReturnProto GetProto(byte[] buffer, bool isChild = false)
    {
        System_GameServerConfigReturnProto proto = new System_GameServerConfigReturnProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.ConfigCount      = ms.ReadInt();
        proto.ServerConfigList = new List <ConfigItem>();
        for (int i = 0; i < proto.ConfigCount; i++)
        {
            ConfigItem _ServerConfig = new ConfigItem();
            _ServerConfig.ConfigCode = ms.ReadUTF8String();
            _ServerConfig.IsOpen     = ms.ReadBool();
            _ServerConfig.Param      = ms.ReadUTF8String();
            proto.ServerConfigList.Add(_ServerConfig);
        }

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
    public static Goods_SearchEquipDetailProto GetProto(byte[] buffer, bool isChild = false)
    {
        Goods_SearchEquipDetailProto proto = new Goods_SearchEquipDetailProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.GoodsServerId = ms.ReadInt();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#18
0
        public void Recharge(Socket socket)
        {
            int len = socket.Receive(m_ReceiveBuffer);

            using (MMO_MemoryStream stream = new MMO_MemoryStream())
            {
                stream.Write(m_ReceiveBuffer, 0, len);

                byte[] buff = stream.ToArray();

                string str = System.Text.UTF8Encoding.UTF8.GetString(buff);

                Console.WriteLine("游戏服收到 {0}", str);
                //处理充值的逻辑

                string[] arr = str.Split('_');

                short channelId         = arr[0].ToShort();
                int   roleId            = arr[1].ToInt();
                int   rechargeProductId = arr[2].ToInt();

                Role role = RoleMgr.Instance.GetRole(roleId);
                if (role != null)
                {
                    role.Recharge(channelId, rechargeProductId); //游戏服 告诉这个这个角色 我要给你充值 充值的产品id=rechargeProductId
                }

                buff = null;
                socket.Disconnect(false);
                socket.Dispose();
            }
        }
示例#19
0
        /// <summary>
        /// 创建包数据:包头+包体
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        private byte[] MakeData(byte[] buffer)
        {
            //1.压缩
            bool isCompress = buffer.Length > m_CompressLen ? true : false;

            if (isCompress)
            {
                buffer = ZlibHelper.CompressBytes(buffer);
            }
            //2.CRC1校验
            ushort crc = Crc16.CalculateCrc16(buffer);

            Console.WriteLine(crc);
            //3.异或
            buffer = SecurityUtil.Xor(buffer);

            using (MMO_MemoryStream ms = new MMO_MemoryStream())
            {
                //包头长度 压缩标识1+CRC16校验+buffer的长度
                ms.WriteUShort((ushort)(buffer.Length + 3));
                ms.WriteBool(isCompress);
                ms.WriteUShort(crc);
                ms.Write(buffer, 0, buffer.Length);
                return(ms.ToArray());
            }
        }
示例#20
0
        /// <summary>
        /// 封装数据包
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private byte[] MakeData(byte[] data)
        {
            byte[] retBuffer = null;

            //1.长度压缩判断
            bool isCompress = data.Length > m_CompressLen ? true : false;

            if (isCompress)
            {
                //2.进行压缩
                data = ZlibHelper.CompressBytes(data);
            }

            //3.异或
            data = SecurityUtil.Xor(data);
            //4.异或因子 Crc 校验码
            ushort crc = Crc16.CalculateCrc16(data);

            Console.WriteLine("crc=" + crc);

            //写入
            using (MMO_MemoryStream ms = new MMO_MemoryStream())
            {
                ms.WriteUShort((ushort)(data.Length + 3)); //数据长度
                ms.WriteBool(isCompress);                  //压缩判断
                ms.WriteUShort(crc);                       //异或
                ms.Write(data, 0, data.Length);            //数据写入
                retBuffer = ms.ToArray();
            }
            return(retBuffer);
        }
    public static WorldMap_OtherRoleDieProto GetProto(byte[] buffer, bool isChild = false)
    {
        WorldMap_OtherRoleDieProto proto = new WorldMap_OtherRoleDieProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.AttackRoleId = ms.ReadInt();
        proto.DieCount     = ms.ReadInt();
        proto.RoleIdList   = new List <int>();
        for (int i = 0; i < proto.DieCount; i++)
        {
            int _RoleId = ms.ReadInt();  //角色编号
            proto.RoleIdList.Add(_RoleId);
        }

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#22
0
    public static RoleOperation_SelectRoleInfoProto GetProto(byte[] buffer, bool isChild = false)
    {
        RoleOperation_SelectRoleInfoProto proto = new RoleOperation_SelectRoleInfoProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.RoldId = ms.ReadInt();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#23
0
    public static WorldMap_OtherRoleMoveProto GetProto(byte[] buffer, bool isChild = false)
    {
        WorldMap_OtherRoleMoveProto proto = new WorldMap_OtherRoleMoveProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.RoleId     = ms.ReadInt();
        proto.TargetPosX = ms.ReadFloat();
        proto.TargetPosY = ms.ReadFloat();
        proto.TargetPosZ = ms.ReadFloat();
        proto.ServerTime = ms.ReadLong();
        proto.NeedTime   = ms.ReadInt();

        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#24
0
    public static Task_SearchTaskProto GetProto(byte[] buffer, bool isChild = false)
    {
        Task_SearchTaskProto proto = new Task_SearchTaskProto();

        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
        }
        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;


        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(proto);
    }
示例#25
0
    /// <summary>
    /// 沾包,加密数据包
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    public byte[] MakeData(byte[] data)
    {
        byte[] retBuffer = null;
        //1、是否压缩
        bool IsComPressLen = data.Length > mComPressLen ? true : false;

        if (IsComPressLen)
        {
            //压缩
            data = ZlibHelper.CompressBytes(data);
        }
        //2、异或
        data = SecurityUtil.Xor(data);
        //3、crc校验
        ushort crc = CRC16.CalculateCrc16(data);

        using (MMO_MemoryStream ms = new MMO_MemoryStream())
        {
            //1、包头(+3==Crc(2字节)+IsComPressLen(2字节))
            ms.WriteUShort((ushort)(data.Length + 3));
            ms.WriteBool(IsComPressLen);
            ms.WriteUShort(crc);
            ms.Write(data, 0, data.Length);
            retBuffer = ms.ToArray();
        }
        return(retBuffer);
    }
示例#26
0
    /// <summary>
    /// 封装数据包
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    private byte[] MakeData(byte[] data)
    {
        byte[] retBuffer = null;

        //1.如果数据包的长度 大于了m_CompressLen 则进行压缩
        bool isCompress = data.Length > m_CompressLen ? true : false;

        if (isCompress)
        {
            data = ZlibHelper.CompressBytes(data);
        }

        //2.异或
        data = SecurityUtil.Xor(data);

        //3.Crc校验 压缩后的
        ushort crc = Crc16.CalculateCrc16(data);

        using (MMO_MemoryStream ms = new MMO_MemoryStream())
        {
            ms.WriteUShort((ushort)(data.Length + 3));
            ms.WriteBool(isCompress);
            ms.WriteUShort(crc);
            ms.Write(data, 0, data.Length);

            retBuffer = ms.ToArray();
        }
        return(retBuffer);
    }
示例#27
0
    public static Goods_SearchEquipDetailReturnProto GetProto(byte[] buffer)
    {
        Goods_SearchEquipDetailReturnProto proto = new Goods_SearchEquipDetailReturnProto();
        MMO_MemoryStream ms = GameEntry.Socket.SocketReceiveMS;

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.EnchantLevel   = ms.ReadInt();
        proto.BaseAttr1Type  = (byte)ms.ReadByte();
        proto.BaseAttr1Value = ms.ReadInt();
        proto.BaseAttr2Type  = (byte)ms.ReadByte();
        proto.BaseAttr2Value = ms.ReadInt();
        proto.HP             = ms.ReadInt();
        proto.MP             = ms.ReadInt();
        proto.Attack         = ms.ReadInt();
        proto.Defense        = ms.ReadInt();
        proto.Hit            = ms.ReadInt();
        proto.Dodge          = ms.ReadInt();
        proto.Cri            = ms.ReadInt();
        proto.Res            = ms.ReadInt();
        proto.IsPutOn        = (byte)ms.ReadByte();

        return(proto);
    }
    public static Backpack_GoodsChangeReturnProto GetProto(byte[] buffer)
    {
        Backpack_GoodsChangeReturnProto proto = new Backpack_GoodsChangeReturnProto();
        MMO_MemoryStream ms = GameEntry.Socket.SocketReceiveMS;

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.BackpackItemChangeCount = ms.ReadInt();
        proto.ItemList = new List <ChangeItem>();
        for (int i = 0; i < proto.BackpackItemChangeCount; i++)
        {
            ChangeItem _Item = new ChangeItem();
            _Item.BackpackId    = ms.ReadInt();
            _Item.ChangeType    = (byte)ms.ReadByte();
            _Item.GoodsType     = (byte)ms.ReadByte();
            _Item.GoodsId       = ms.ReadInt();
            _Item.GoodsCount    = ms.ReadInt();
            _Item.GoodsServerId = ms.ReadInt();
            proto.ItemList.Add(_Item);
        }

        return(proto);
    }
示例#29
0
    public static RoleOperation_SelectRoleInfoReturnProto GetProto(MMO_MemoryStream ms, byte[] buffer)
    {
        RoleOperation_SelectRoleInfoReturnProto proto = new RoleOperation_SelectRoleInfoReturnProto();

        ms.SetLength(0);
        ms.Write(buffer, 0, buffer.Length);
        ms.Position = 0;

        proto.IsSuccess = ms.ReadBool();
        if (proto.IsSuccess)
        {
            proto.RoldId             = ms.ReadInt();
            proto.RoleNickName       = ms.ReadUTF8String();
            proto.JobId              = (byte)ms.ReadByte();
            proto.Level              = ms.ReadInt();
            proto.TotalRechargeMoney = ms.ReadInt();
            proto.Money              = ms.ReadInt();
            proto.Gold                  = ms.ReadInt();
            proto.Exp                   = ms.ReadInt();
            proto.MaxHP                 = ms.ReadInt();
            proto.MaxMP                 = ms.ReadInt();
            proto.CurrHP                = ms.ReadInt();
            proto.CurrMP                = ms.ReadInt();
            proto.ToSpeed               = ms.ReadInt();
            proto.WeaponDamageMin       = ms.ReadInt();
            proto.WeaponDamageMax       = ms.ReadInt();
            proto.AttackNumber          = ms.ReadInt();
            proto.StrikePower           = ms.ReadInt();
            proto.PiercingPower         = ms.ReadInt();
            proto.MagicPower            = ms.ReadInt();
            proto.LastInWorldMapId      = ms.ReadInt();
            proto.LastInWorldMapPos     = ms.ReadUTF8String();
            proto.Equip_Weapon          = ms.ReadInt();
            proto.Equip_Pants           = ms.ReadInt();
            proto.Equip_Clothes         = ms.ReadInt();
            proto.Equip_Belt            = ms.ReadInt();
            proto.Equip_Cuff            = ms.ReadInt();
            proto.Equip_Necklace        = ms.ReadInt();
            proto.Equip_Shoe            = ms.ReadInt();
            proto.Equip_Ring            = ms.ReadInt();
            proto.Equip_WeaponTableId   = ms.ReadInt();
            proto.Equip_PantsTableId    = ms.ReadInt();
            proto.Equip_ClothesTableId  = ms.ReadInt();
            proto.Equip_BeltTableId     = ms.ReadInt();
            proto.Equip_CuffTableId     = ms.ReadInt();
            proto.Equip_NecklaceTableId = ms.ReadInt();
            proto.Equip_ShoeTableId     = ms.ReadInt();
            proto.Equip_RingTableId     = ms.ReadInt();
            proto.ChoppingDefense       = ms.ReadInt();
            proto.PuncturDefense        = ms.ReadInt();
            proto.MagicDefense          = ms.ReadInt();
        }
        else
        {
            proto.MsgCode = ms.ReadInt();
        }

        return(proto);
    }
示例#30
0
    public byte[] ToArray(bool isChild = false)
    {
        MMO_MemoryStream ms = null;

        if (!isChild)
        {
            ms = GameEntry.Socket.SocketSendMS;
            ms.SetLength(0);
            ms.WriteUShort(ProtoCode);
        }
        else
        {
            ms = GameEntry.Pool.DequeueClassObject <MMO_MemoryStream>();
            ms.SetLength(0);
        }

        ms.WriteInt(RoleType);

        byte[] buff_CurrRole = CurrRole.ToArray(true);
        ms.WriteInt(buff_CurrRole.Length);
        ms.Write(buff_CurrRole, 0, buff_CurrRole.Length);

        if (RoleList != null)
        {
            int len_RoleList = RoleList.Count;
            ms.WriteInt(len_RoleList);
            for (int i = 0; i < len_RoleList; i++)
            {
                Role_DataProto _Role_DataProto = RoleList[i];
                byte[]         _buff_Curr      = _Role_DataProto.ToArray(true);
                ms.WriteInt(_buff_Curr.Length);
                ms.Write(_buff_Curr, 0, _buff_Curr.Length);
            }
        }
        else
        {
            ms.WriteInt(0);
        }

        byte[] retBuffer = ms.ToArray();
        if (isChild)
        {
            GameEntry.Pool.EnqueueClassObject(ms);
        }
        return(retBuffer);
    }