当前位置: 首页>>代码示例>>C#>>正文


C# GenericReader.ReadPackedGuid方法代码示例

本文整理汇总了C#中GenericReader.ReadPackedGuid方法的典型用法代码示例。如果您正苦于以下问题:C# GenericReader.ReadPackedGuid方法的具体用法?C# GenericReader.ReadPackedGuid怎么用?C# GenericReader.ReadPackedGuid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在GenericReader的用法示例。


在下文中一共展示了GenericReader.ReadPackedGuid方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ParseMovementUpdateBlock


//.........这里部分代码省略.........
                flags3 = gr.ReadUInt32(); // looks like flags (0x0, 0x1, 0x100, 0x20000, 0x40000)...
                sb.AppendLine("flags3 " + flags3.ToString("X2"));
            }
/*
            // still used, but can't figure out when...
            if ((flags2 & 0x8000000) == 0 && objectTypeId == ObjectTypes.TYPEID_UNIT)
            {
                if ((flags3 & 0x40000) != 0)
                {
                    uint f3_3 = br.ReadUInt32();
                    sb.AppendLine("flags3_unk_value3 " + f3_3);
                }

                if ((flags3 & 0x20000) != 0)
                {
                    ulong g3 = br.ReadUInt64();
                    sb.AppendLine("flags3_guid " + g3); // ????
                }
            }
*/
            if ((UpdateFlags.UPDATEFLAG_HIGHGUID & flags) != 0) // 0x08
            {
                uint guid_high = gr.ReadUInt32(); // 2.0.10 - it's not high guid anymore
                sb.AppendLine("guid_high " + guid_high);
            }

            if ((UpdateFlags.UPDATEFLAG_FULLGUID & flags) != 0) // 0x04
            //if ((UpdateFlags.UPDATEFLAG_FULLGUID & flags) != 0 && (flags3 & 0x20000) == 0) // 0x04
            //if ((UpdateFlags.UPDATEFLAG_FULLGUID & flags) != 0 && (flags3 & 0x40000) == 0) // 0x04
            {
                //long pos = br.BaseStream.Position;
                //swe.WriteLine("flags & 0x4 at position " + pos.ToString("X2"));

                ulong guid2 = gr.ReadPackedGuid(); // looks like guid, but what guid?
                sb.AppendLine("unk guid " + guid2);
            }

            if ((UpdateFlags.UPDATEFLAG_TRANSPORT & flags) != 0) // 0x02
            {
                uint time = gr.ReadUInt32();
                sb.AppendLine("t_time " + time);
            }

            if ((flags2 & 0x8000000) != 0) // splines
            {
                uint t1 = gr.ReadUInt32();
                sb.AppendLine("t1 " + t1);

                uint t2 = gr.ReadUInt32();
                sb.AppendLine("t2 " + t2);

                //outdated 2.0.10
                //uint t3 = br.ReadUInt32();
                //sb.AppendLine("t3 " + t3);

                uint coords_count = gr.ReadUInt32();
                sb.AppendLine("coords_count " + coords_count);

                //if (coords_count > 1000)
                //{
                //    coords_count = br.ReadUInt32();
                //    sb.AppendLine("second attempt to get correct coords count, now " + coords_count);
                //}

                //if (coords_count > 1000)
                //{
开发者ID:arkanoid1,项目名称:mywowtools,代码行数:67,代码来源:a9_parser.cs

示例2: ParseBlock

        private bool ParseBlock(GenericReader gr, StringBuilder sb, StreamWriter swe, StreamWriter data)
        {
            UpdateTypes updatetype = (UpdateTypes)gr.ReadByte();
            sb.AppendLine("Updatetype: " + updatetype);

            if (updatetype < UpdateTypes.UPDATETYPE_VALUES || updatetype > UpdateTypes.UPDATETYPE_NEAR_OBJECTS)
            {
                long pos = gr.BaseStream.Position;
                swe.WriteLine("wrong updatetype at position " + pos.ToString("X2"));

                // we there only if we read packet wrong way
                swe.WriteLine("Updatetype " + updatetype + " is not supported");
                return false;
            }

            if (updatetype == UpdateTypes.UPDATETYPE_VALUES)
            {
                ulong guid = gr.ReadPackedGuid();
                sb.AppendLine("Object guid: " + guid.ToString("X16"));

                if (guid == 0)
                {
                    long pos = gr.BaseStream.Position;
                    swe.WriteLine("wrong guid at position " + pos.ToString("X2"));

                    // we there only if we read packet wrong way
                    swe.WriteLine("Updatetype " + updatetype + " can't be with NULL guid");
                    return false;
                }

                // object type detection:
                ObjectTypes objecttype;
                if (guid.ToString("X16").Substring(0, 8) == "40000000")
                    objecttype = ObjectTypes.TYPEID_ITEM;
                else if (guid.ToString("X16").Substring(0, 8) == "00000000")
                    objecttype = ObjectTypes.TYPEID_PLAYER;
                else
                    objecttype = ObjectTypes.TYPEID_UNIT;

                if (!ParseValuesUpdateBlock(gr, sb, swe, data, objecttype, updatetype))
                    return false;

                return true;
            }

            if (updatetype == UpdateTypes.UPDATETYPE_MOVEMENT)
            {
                ulong guid = gr.ReadPackedGuid();
                sb.AppendLine("Object guid: " + guid.ToString("X2"));

                if (!ParseMovementUpdateBlock(gr, sb, swe, data, ObjectTypes.TYPEID_UNIT))
                    return false;

                return true;
            }

            if (updatetype == UpdateTypes.UPDATETYPE_CREATE_OBJECT || updatetype == UpdateTypes.UPDATETYPE_CREATE_OBJECT2)
            {
                ulong guid = gr.ReadPackedGuid();
                sb.AppendLine("Object guid: " + guid.ToString("X2"));

                ObjectTypes objectTypeId = (ObjectTypes)gr.ReadByte();
                sb.AppendLine("objectTypeId " + objectTypeId);

                switch (objectTypeId)
                {
                    case ObjectTypes.TYPEID_OBJECT:
                        swe.WriteLine("Unhandled object type " + objectTypeId);
                        break;
                    case ObjectTypes.TYPEID_ITEM:
                    case ObjectTypes.TYPEID_CONTAINER:
                    case ObjectTypes.TYPEID_UNIT:
                    case ObjectTypes.TYPEID_PLAYER:
                    case ObjectTypes.TYPEID_GAMEOBJECT:
                    case ObjectTypes.TYPEID_DYNAMICOBJECT:
                    case ObjectTypes.TYPEID_CORPSE:
                        if (!ParseMovementUpdateBlock(gr, sb, swe, data, objectTypeId))
                            return false;
                        if (!ParseValuesUpdateBlock(gr, sb, swe, data, objectTypeId, updatetype))
                            return false;
                        break;
                    case ObjectTypes.TYPEID_AIGROUP:
                        swe.WriteLine("Unhandled object type " + objectTypeId);
                        break;
                    case ObjectTypes.TYPEID_AREATRIGGER:
                        swe.WriteLine("Unhandled object type " + objectTypeId);
                        break;
                    default:
                        swe.WriteLine("Unknown object type " + objectTypeId);
                        return false;
                }
                return true;
            }

            if (updatetype == UpdateTypes.UPDATETYPE_OUT_OF_RANGE_OBJECTS || updatetype == UpdateTypes.UPDATETYPE_NEAR_OBJECTS)
            {
                uint objects_count = gr.ReadUInt32();

                if (objects_count > 1000) // we read packet wrong way
                {
//.........这里部分代码省略.........
开发者ID:arkanoid1,项目名称:mywowtools,代码行数:101,代码来源:a9_parser.cs


注:本文中的GenericReader.ReadPackedGuid方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。