本文整理汇总了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)
//{
示例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
{
//.........这里部分代码省略.........