Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="pos"></param>
        /// <returns></returns>
        public int SetExtraParamsFromBytes(byte[] data, int pos)
        {
            int i           = pos;
            int totalLength = 1;

            if (data.Length == 0)
            {
                return(0);
            }

            byte extraParamCount = data[i++];

            for (int k = 0; k < extraParamCount; k++)
            {
                ExtraParamType type        = (ExtraParamType)(data[i++] + (data[i++] << 8));
                uint           paramLength = (uint)(data[i++] + (data[i++] << 8) +
                                                    (data[i++] << 16) + (data[i++] << 24));
                if (type == ExtraParamType.Flexible)
                {
                    Flexible = new PrimFlexibleData(data, i);
                }
                else if (type == ExtraParamType.Light)
                {
                    Light = new PrimLightData(data, i);
                }
                i           += (int)paramLength;
                totalLength += (int)paramLength + 6;
            }

            return(totalLength);
        }
Пример #2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <param name="pos"></param>
        /// <returns></returns>
        public int SetExtraParamsFromBytes(byte[] data, int pos)
        {
            int i = pos;
            int totalLength = 1;

            if (data.Length == 0)
                return 0;

            byte extraParamCount = data[i++];

            for (int k = 0; k < extraParamCount; k++)
            {
                ExtraParamType type = (ExtraParamType)(data[i++] + (data[i++] << 8));
                uint paramLength = (uint)(data[i++] + (data[i++] << 8) +
                              (data[i++] << 16) + (data[i++] << 24));
                if (type == ExtraParamType.Flexible)
                {
                    Flexible = new PrimFlexibleData(data, i);
                }
                else if (type == ExtraParamType.Light)
                {
                    Light = new PrimLightData(data, i);
                }
                i += (int)paramLength;
                totalLength += (int)paramLength + 6;
            }

            return totalLength;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="simulator"></param>
        /// <param name="localID"></param>
        /// <param name="flexible"></param>
        public void SetFlexible(Simulator simulator, uint localID, PrimFlexibleData flexible)
        {
            ObjectExtraParamsPacket extra = new ObjectExtraParamsPacket();

            extra.AgentData.AgentID = Client.Network.AgentID;
            extra.AgentData.SessionID = Client.Network.SessionID;
            extra.ObjectData = new ObjectExtraParamsPacket.ObjectDataBlock[1];
            extra.ObjectData[0] = new ObjectExtraParamsPacket.ObjectDataBlock();
            extra.ObjectData[0].ObjectLocalID = localID;
            extra.ObjectData[0].ParamType = (byte)ExtraParamType.Flexible;
            if (flexible == null)
            {
                extra.ObjectData[0].ParamInUse = false;
                extra.ObjectData[0].ParamData = new byte[0];
            }
            else
            {
                extra.ObjectData[0].ParamInUse = true;
                extra.ObjectData[0].ParamData = flexible.GetBytes();
            }
            extra.ObjectData[0].ParamSize = (uint)extra.ObjectData[0].ParamData.Length;

            Client.Network.SendPacket(extra, simulator);
        }