本文整理汇总了C#中WowPacketParser.Misc.Packet.ReadUpdateField方法的典型用法代码示例。如果您正苦于以下问题:C# Packet.ReadUpdateField方法的具体用法?C# Packet.ReadUpdateField怎么用?C# Packet.ReadUpdateField使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WowPacketParser.Misc.Packet
的用法示例。
在下文中一共展示了Packet.ReadUpdateField方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReadValuesUpdateBlock
private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(ref Packet packet, ObjectType type, int index)
{
var maskSize = packet.ReadByte();
var updateMask = new int[maskSize];
for (var i = 0; i < maskSize; i++)
updateMask[i] = packet.ReadInt32();
var mask = new BitArray(updateMask);
var dict = new Dictionary<int, UpdateField>();
int objectEnd = UpdateFields.GetUpdateField(ObjectField.OBJECT_END);
for (var i = 0; i < mask.Count; i++)
{
if (!mask[i])
continue;
var blockVal = packet.ReadUpdateField();
string key = "Block Value " + i;
string value = blockVal.Int32Value + "/" + blockVal.SingleValue;
if (i < objectEnd)
key = UpdateFields.GetUpdateFieldName(i, "ObjectField");
else
{
switch (type)
{
case ObjectType.Container:
{
if (i < UpdateFields.GetUpdateField(ItemField.ITEM_END))
goto case ObjectType.Item;
key = UpdateFields.GetUpdateFieldName(i, "ContainerField");
break;
}
case ObjectType.Item:
{
key = UpdateFields.GetUpdateFieldName(i, "ItemField");
break;
}
case ObjectType.Player:
{
if (i < UpdateFields.GetUpdateField(UnitField.UNIT_END))
goto case ObjectType.Unit;
key = UpdateFields.GetUpdateFieldName(i, "PlayerField");
break;
}
case ObjectType.Unit:
{
key = UpdateFields.GetUpdateFieldName(i, "UnitField");
break;
}
case ObjectType.GameObject:
{
key = UpdateFields.GetUpdateFieldName(i, "GameObjectField");
break;
}
case ObjectType.DynamicObject:
{
key = UpdateFields.GetUpdateFieldName(i, "DynamicObjectField");
break;
}
case ObjectType.Corpse:
{
key = UpdateFields.GetUpdateFieldName(i, "CorpseField");
break;
}
}
}
packet.Writer.WriteLine("[" + index + "] " + key + ": " + value);
dict.Add(i, blockVal);
}
return dict;
}
示例2: HandleDBReply
//.........这里部分代码省略.........
item.AreaID = db2File.ReadUInt32<AreaId>("Area");
item.MapID = db2File.ReadInt32<MapId>("Map ID");
item.TotemCategory = db2File.ReadInt32E<TotemCategory>("Totem Category");
item.ItemSocketColors = new ItemSocketColor?[3];
for (int i = 0; i < 3; i++)
item.ItemSocketColors[i] = db2File.ReadInt32E<ItemSocketColor>("Socket Color", i);
item.SocketContent = new uint?[3];
for (int i = 0; i < 3; i++)
item.SocketContent[i] = db2File.ReadUInt32("Socket Item", i);
item.SocketBonus = db2File.ReadInt32("Socket Bonus");
item.GemProperties = db2File.ReadInt32("Gem Properties");
item.ArmorDamageModifier = db2File.ReadSingle("Armor Damage Modifier");
item.Duration = db2File.ReadUInt32("Duration");
item.ItemLimitCategory = db2File.ReadInt32("Limit Category");
item.HolidayID = db2File.ReadInt32E<Holiday>("Holiday");
item.StatScalingFactor = db2File.ReadSingle("Stat Scaling Factor");
item.CurrencySubstitutionID = db2File.ReadUInt32("Currency Substitution Id");
item.CurrencySubstitutionCount = db2File.ReadUInt32("Currency Substitution Count");
Storage.ObjectNames.Add(new ObjectName {ObjectType = ObjectType.Item, ID = (int)entry, Name = item.Name},
packet.TimeSpan);
packet.AddSniffData(StoreNameType.Item, (int) entry, "DB_REPLY");
break;
}
case DB2Hash.KeyChain:
{
db2File.ReadUInt32("Key Chain Id");
db2File.ReadBytes("Key", 32);
break;
}
case DB2Hash.SceneScript: // lua ftw!
{
db2File.ReadUInt32("Scene Script Id");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Name");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Script");
db2File.ReadUInt32("Previous Scene Script Part");
db2File.ReadUInt32("Next Scene Script Part");
break;
}
case DB2Hash.Vignette:
{
db2File.ReadUInt32("Vignette Entry");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Name");
db2File.ReadUInt32("Icon");
db2File.ReadUInt32("Flag"); // not 100% sure (8 & 32 as values only) - todo verify with more data
db2File.ReadSingle("Unk Float 1");
db2File.ReadSingle("Unk Float 2");
break;
}
case DB2Hash.WbAccessControlList:
{
db2File.ReadUInt32("Id");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Address");
db2File.ReadUInt32("Unk MoP 1");
db2File.ReadUInt32("Unk MoP 2");
db2File.ReadUInt32("Unk MoP 3");
db2File.ReadUInt32("Unk MoP 4"); // flags?
break;
}
default:
{
db2File.AddValue("Unknown DB2 file type", string.Format("{0} (0x{0:x})", type));
for (var i = 0;; ++i)
{
if (db2File.Length - 4 >= db2File.Position)
{
var blockVal = db2File.ReadUpdateField();
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
packet.AddValue(key, value);
}
else
{
var left = db2File.Length - db2File.Position;
for (var j = 0; j < left; ++j)
{
string key = "Byte Value " + i;
var value = db2File.ReadByte();
packet.AddValue(key, value);
}
break;
}
}
break;
}
}
db2File.ClosePacket(false);
}
示例3: ReadValuesUpdateBlock
public static Dictionary<int, UpdateField> ReadValuesUpdateBlock(Packet packet, ObjectType type, object index, bool isCreating)
{
var maskSize = packet.ReadByte();
var updateMask = new int[maskSize];
for (var i = 0; i < maskSize; i++)
updateMask[i] = packet.ReadInt32();
var mask = new BitArray(updateMask);
var dict = new Dictionary<int, UpdateField>();
int objectEnd = UpdateFields.GetUpdateField(ObjectField.OBJECT_END);
for (var i = 0; i < mask.Count; ++i)
{
if (!mask[i])
continue;
var blockVal = packet.ReadUpdateField();
// Don't spam 0 values at create
if (isCreating && blockVal.UInt32Value == 0)
continue;
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
if (i < objectEnd)
key = UpdateFields.GetUpdateFieldName<ObjectField>(i);
else
{
switch (type)
{
case ObjectType.Container:
{
if (i < UpdateFields.GetUpdateField(ItemField.ITEM_END))
goto case ObjectType.Item;
key = UpdateFields.GetUpdateFieldName<ContainerField>(i);
break;
}
case ObjectType.Item:
{
key = UpdateFields.GetUpdateFieldName<ItemField>(i);
break;
}
case ObjectType.Player:
{
if (i < UpdateFields.GetUpdateField(UnitField.UNIT_END) || i < UpdateFields.GetUpdateField(UnitField.UNIT_FIELD_END))
goto case ObjectType.Unit;
key = UpdateFields.GetUpdateFieldName<PlayerField>(i);
break;
}
case ObjectType.Unit:
{
key = UpdateFields.GetUpdateFieldName<UnitField>(i);
break;
}
case ObjectType.GameObject:
{
key = UpdateFields.GetUpdateFieldName<GameObjectField>(i);
break;
}
case ObjectType.DynamicObject:
{
key = UpdateFields.GetUpdateFieldName<DynamicObjectField>(i);
break;
}
case ObjectType.Corpse:
{
key = UpdateFields.GetUpdateFieldName<CorpseField>(i);
break;
}
case ObjectType.AreaTrigger:
{
key = UpdateFields.GetUpdateFieldName<AreaTriggerField>(i);
break;
}
case ObjectType.SceneObject:
{
key = UpdateFields.GetUpdateFieldName<SceneObjectField>(i);
break;
}
case ObjectType.Conversation:
{
key = UpdateFields.GetUpdateFieldName<ConversationField>(i);
break;
}
}
}
packet.AddValue(key, value, index);
dict.Add(i, blockVal);
}
objectEnd = UpdateFields.GetUpdateField(ObjectDynamicField.OBJECT_DYNAMIC_END);
if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_0_4_16016))
{
maskSize = packet.ReadByte();
updateMask = new int[maskSize];
//.........这里部分代码省略.........
示例4: ReadValuesUpdateBlock
private static Dictionary<int, UpdateField> ReadValuesUpdateBlock(ref Packet packet, ObjectType type, int index, bool isCreating)
{
var maskSize = packet.ReadByte();
var updateMask = new int[maskSize];
for (var i = 0; i < maskSize; i++)
updateMask[i] = packet.ReadInt32();
var mask = new BitArray(updateMask);
var dict = new Dictionary<int, UpdateField>();
int objectEnd = UpdateFields.GetUpdateField(ObjectField.OBJECT_END);
for (var i = 0; i < mask.Count; i++)
{
if (!mask[i])
continue;
var blockVal = packet.ReadUpdateField();
// Don't spam 0 values at create
if (isCreating && blockVal.UInt32Value == 0)
continue;
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
if (i < objectEnd)
key = UpdateFields.GetUpdateFieldName<ObjectField>(i);
else
{
switch (type)
{
case ObjectType.Container:
{
if (i < UpdateFields.GetUpdateField(ItemField.ITEM_END))
goto case ObjectType.Item;
key = UpdateFields.GetUpdateFieldName<ContainerField>(i);
break;
}
case ObjectType.Item:
{
key = UpdateFields.GetUpdateFieldName<ItemField>(i);
break;
}
case ObjectType.Player:
{
if (i < UpdateFields.GetUpdateField(UnitField.UNIT_END))
goto case ObjectType.Unit;
key = UpdateFields.GetUpdateFieldName<PlayerField>(i);
break;
}
case ObjectType.Unit:
{
key = UpdateFields.GetUpdateFieldName<UnitField>(i);
break;
}
case ObjectType.GameObject:
{
key = UpdateFields.GetUpdateFieldName<GameObjectField>(i);
break;
}
case ObjectType.DynamicObject:
{
key = UpdateFields.GetUpdateFieldName<DynamicObjectField>(i);
break;
}
case ObjectType.Corpse:
{
key = UpdateFields.GetUpdateFieldName<CorpseField>(i);
break;
}
case ObjectType.AreaTrigger:
{
key = UpdateFields.GetUpdateFieldName<AreaTriggerField>(i);
break;
}
}
}
packet.WriteLine("[" + index + "] " + key + ": " + value);
dict.Add(i, blockVal);
}
// Dynamic fields - NYI
if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_0_4_16016))
{
maskSize = packet.ReadByte();
updateMask = new int[maskSize];
for (var i = 0; i < maskSize; i++)
updateMask[i] = packet.ReadInt32();
mask = new BitArray(updateMask);
for (var i = 0; i < mask.Count; ++i)
{
if (!mask[i])
continue;
var flag = packet.ReadByte();
//.........这里部分代码省略.........
示例5: HandleDBReply
//.........这里部分代码省略.........
if (Storage.HotfixDataStore.ContainsKey(Tuple.Create(type, (int)entry)) && Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data) ||
!Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data))
Storage.ChrUpgradeBucketSpells.Add(chrUpgradeBucketSpell, packet.TimeSpan);
break;
}
case DB2Hash.BattlePetSpecies:
{
BattlePetSpecies battlePetSpecies = new BattlePetSpecies();
battlePetSpecies.ID = (uint)db2File.ReadEntry("Id").Key;
battlePetSpecies.CreatureID = db2File.ReadUInt32("CreatureID");
battlePetSpecies.IconFileID = db2File.ReadUInt32("IconFileID");
battlePetSpecies.SummonSpellID = db2File.ReadUInt32("SummonSpellID");
battlePetSpecies.PetType = db2File.ReadInt32("PetType");
battlePetSpecies.Source = db2File.ReadUInt32("Source");
battlePetSpecies.Flags = db2File.ReadUInt32("Flags");
ushort len1 = db2File.ReadUInt16();
battlePetSpecies.SourceText = db2File.ReadWoWString("SourceText", len1);
ushort len2 = db2File.ReadUInt16();
battlePetSpecies.Description = db2File.ReadWoWString("Description", len2);
if (Storage.HotfixDataStore.ContainsKey(Tuple.Create(type, (int)entry)) && Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data) ||
!Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data))
Storage.BattlePetSpeciesBag.Add(battlePetSpecies, packet.TimeSpan);
break;
}
case DB2Hash.OverrideSpellData:
{
OverrideSpellData overrideSpellData = new OverrideSpellData();
overrideSpellData.ID = db2File.ReadUInt32("Id");
overrideSpellData.SpellID = new uint?[10];
for (int i = 0; i < 10; ++i)
overrideSpellData.SpellID[i] = db2File.ReadUInt32("SpellID", i);
overrideSpellData.Flags = db2File.ReadUInt32("Flags");
overrideSpellData.PlayerActionbarFileDataID = db2File.ReadUInt32("PlayerActionbarFileDataID");
if (Storage.HotfixDataStore.ContainsKey(Tuple.Create(type, (int)entry)) && Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data) ||
!Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data))
Storage.OverrideSpellDatas.Add(overrideSpellData, packet.TimeSpan);
break;
}
case DB2Hash.PhaseXPhaseGroup:
{
PhaseXPhaseGroup phaseXPhaseGroup = new PhaseXPhaseGroup();
phaseXPhaseGroup.ID = db2File.ReadUInt32("Id");
phaseXPhaseGroup.PhaseID = db2File.ReadUInt32("PhaseID");
phaseXPhaseGroup.PhaseGroupID = db2File.ReadUInt32("PhaseGroupID");
if (Storage.HotfixDataStore.ContainsKey(Tuple.Create(type, (int)entry)) && Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data) ||
!Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.hotfix_data))
Storage.PhaseXPhaseGroups.Add(phaseXPhaseGroup, packet.TimeSpan);
break;
}
default:
{
db2File.AddValue("Unknown DB2 file type", string.Format("{0} (0x{0:x})", type));
for (int i = 0;; ++i)
{
if (db2File.Length - 4 >= db2File.Position)
{
UpdateField blockVal = db2File.ReadUpdateField();
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
packet.AddValue(key, value);
}
else
{
long left = db2File.Length - db2File.Position;
for (int j = 0; j < left; ++j)
{
string key = "Byte Value " + i;
byte value = db2File.ReadByte();
packet.AddValue(key, value);
}
break;
}
}
break;
}
}
if (db2File.Length != db2File.Position)
{
packet.WriteLine(
$"Packet not fully read! Current position is {db2File.Position}, length is {db2File.Length}, and diff is {db2File.Length - db2File.Position}.");
if (db2File.Length < 300) // If the packet isn't "too big" and it is not full read, print its hex table
packet.AsHex();
packet.Status = ParsedStatus.WithErrors;
}
}
示例6: HandleDBReply
//.........这里部分代码省略.........
(map != 0 ? StoreGetters.GetName(StoreNameType.Map, map) : map + " (No map)"));
item.BagFamily = db2File.ReadEnum<BagFamilyMask>("Bag Family", TypeCode.Int32);
item.TotemCategory = db2File.ReadEnum<TotemCategory>("Totem Category", TypeCode.Int32);
item.ItemSocketColors = new ItemSocketColor[3];
for (var i = 0; i < 3; i++)
item.ItemSocketColors[i] = db2File.ReadEnum<ItemSocketColor>("Socket Color", TypeCode.Int32, i);
item.SocketContent = new uint[3];
for (var i = 0; i < 3; i++)
item.SocketContent[i] = db2File.ReadUInt32("Socket Item", i);
item.SocketBonus = db2File.ReadInt32("Socket Bonus");
item.GemProperties = db2File.ReadInt32("Gem Properties");
item.ArmorDamageModifier = db2File.ReadSingle("Armor Damage Modifier");
item.Duration = db2File.ReadUInt32("Duration");
item.ItemLimitCategory = db2File.ReadInt32("Limit Category");
item.HolidayId = db2File.ReadEnum<Holiday>("Holiday", TypeCode.Int32);
item.StatScalingFactor = db2File.ReadSingle("Stat Scaling Factor");
item.CurrencySubstitutionId = db2File.ReadUInt32("Currency Substitution Id");
item.CurrencySubstitutionCount = db2File.ReadUInt32("Currency Substitution Count");
Storage.ObjectNames.Add(entry, new ObjectName {ObjectType = ObjectType.Item, Name = item.Name},
packet.TimeSpan);
packet.AddSniffData(StoreNameType.Item, (int) entry, "DB_REPLY");
break;
}
case DB2Hash.KeyChain:
{
db2File.ReadUInt32("Key Chain Id");
db2File.WriteLine("Key: {0}", Utilities.ByteArrayToHexString(db2File.ReadBytes(32)));
break;
}
case DB2Hash.SceneScript: // lua ftw!
{
db2File.ReadUInt32("Scene Script Id");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Name");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Script");
db2File.ReadUInt32("Previous Scene Script Part");
db2File.ReadUInt32("Next Scene Script Part");
break;
}
case DB2Hash.Vignette:
{
db2File.ReadUInt32("Vignette Entry");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Name");
db2File.ReadUInt32("Icon");
db2File.ReadUInt32("Flag"); // not 100% sure (8 & 32 as values only) - todo verify with more data
db2File.ReadSingle("Unk Float 1");
db2File.ReadSingle("Unk Float 2");
break;
}
case DB2Hash.WbAccessControlList:
{
db2File.ReadUInt32("Id");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Address");
db2File.ReadUInt32("Unk MoP 1");
db2File.ReadUInt32("Unk MoP 2");
db2File.ReadUInt32("Unk MoP 3");
db2File.ReadUInt32("Unk MoP 4"); // flags?
break;
}
default:
{
db2File.WriteLine("Unknown DB2 file type: {0} (0x{0:x})", type);
for (var i = 0;; ++i)
{
if (db2File.Length - 4 >= db2File.Position)
{
var blockVal = db2File.ReadUpdateField();
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
packet.WriteLine(key + ": " + value);
}
else
{
var left = db2File.Length - db2File.Position;
for (var j = 0; j < left; ++j)
{
string key = "Byte Value " + i;
var value = db2File.ReadByte();
packet.WriteLine(key + ": " + value);
}
break;
}
}
break;
}
}
db2File.ClosePacket();
}
示例7: HandleDBReply
//.........这里部分代码省略.........
item.TriggeredSpellCharges = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCharges[i] = db2File.ReadInt32("Triggered Spell Charges", i);
item.TriggeredSpellCooldowns = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCooldowns[i] = db2File.ReadInt32("Triggered Spell Cooldown", i);
item.TriggeredSpellCategories = new uint[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCategories[i] = db2File.ReadUInt32("Triggered Spell Category", i);
item.TriggeredSpellCategoryCooldowns = new int[5];
for (var i = 0; i < 5; i++)
item.TriggeredSpellCategoryCooldowns[i] = db2File.ReadInt32("Triggered Spell Category Cooldown", i);
item.Bonding = db2File.ReadInt32E<ItemBonding>("Bonding");
if (db2File.ReadUInt16() > 0)
item.Name = db2File.ReadCString("Name", 0);
for (var i = 1; i < 4; ++i)
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Name", i);
if (db2File.ReadUInt16() > 0)
item.Description = db2File.ReadCString("Description");
item.PageText = db2File.ReadUInt32("Page Text");
item.Language = db2File.ReadInt32E<Language>("Language");
item.PageMaterial = db2File.ReadInt32E<PageMaterial>("Page Material");
item.StartQuestId = (uint)db2File.ReadInt32<QuestId>("Start Quest");
item.LockId = db2File.ReadUInt32("Lock ID");
item.Material = db2File.ReadInt32E<Material>("Material");
item.SheathType = db2File.ReadInt32E<SheathType>("Sheath Type");
item.RandomPropery = db2File.ReadInt32("Random Property");
item.RandomSuffix = db2File.ReadUInt32("Random Suffix");
item.ItemSet = db2File.ReadUInt32("Item Set");
item.AreaId = db2File.ReadUInt32<AreaId>("Area");
var map = db2File.ReadInt32<MapId>("Map ID");
item.MapId = map;
item.BagFamily = db2File.ReadInt32E<BagFamilyMask>("Bag Family");
item.TotemCategory = db2File.ReadInt32E<TotemCategory>("Totem Category");
item.ItemSocketColors = new ItemSocketColor[3];
for (var i = 0; i < 3; i++)
item.ItemSocketColors[i] = db2File.ReadInt32E<ItemSocketColor>("Socket Color", i);
item.SocketContent = new uint[3];
for (var i = 0; i < 3; i++)
item.SocketContent[i] = db2File.ReadUInt32("Socket Item", i);
item.SocketBonus = db2File.ReadInt32("Socket Bonus");
item.GemProperties = db2File.ReadInt32("Gem Properties");
item.ArmorDamageModifier = db2File.ReadSingle("Armor Damage Modifier");
item.Duration = db2File.ReadUInt32("Duration");
item.ItemLimitCategory = db2File.ReadInt32("Limit Category");
item.HolidayId = db2File.ReadInt32E<Holiday>("Holiday");
item.StatScalingFactor = db2File.ReadSingle("Stat Scaling Factor");
item.CurrencySubstitutionId = db2File.ReadUInt32("Currency Substitution Id");
item.CurrencySubstitutionCount = db2File.ReadUInt32("Currency Substitution Count");
Storage.ObjectNames.Add(entry, new ObjectName { ObjectType = ObjectType.Item, Name = item.Name }, packet.TimeSpan);
packet.AddSniffData(StoreNameType.Item, (int)entry, "DB_REPLY");
break;
}
case DB2Hash.KeyChain:
{
db2File.ReadUInt32("Key Chain Id");
db2File.ReadBytes("Key", 32);
break;
}
default:
{
db2File.AddValue("Unknown DB2 file type", string.Format(": {0} (0x{0:x})", type));
for (var i = 0; ; ++i)
{
if (db2File.Length - 4 >= db2File.Position)
{
var blockVal = db2File.ReadUpdateField();
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
packet.AddValue("Block Value " + i, value);
}
else
{
var left = db2File.Length - db2File.Position;
for (var j = 0; j < left; ++j)
{
var value = db2File.ReadByte();
packet.AddValue("Byte Value " + i, value);
}
break;
}
}
break;
}
}
db2File.ClosePacket(false);
}
示例8: HandleDBReply
//.........这里部分代码省略.........
item.TotemCategory = db2File.ReadEnum<TotemCategory>("Totem Category", TypeCode.Int32);
item.ItemSocketColors = new ItemSocketColor[3];
for (var i = 0; i < 3; i++)
item.ItemSocketColors[i] = db2File.ReadEnum<ItemSocketColor>("Socket Color", TypeCode.Int32, i);
item.SocketContent = new uint[3];
for (var i = 0; i < 3; i++)
item.SocketContent[i] = db2File.ReadUInt32("Socket Item", i);
item.SocketBonus = db2File.ReadInt32("Socket Bonus");
item.GemProperties = db2File.ReadInt32("Gem Properties");
item.ArmorDamageModifier = db2File.ReadSingle("Armor Damage Modifier");
item.Duration = db2File.ReadUInt32("Duration");
item.ItemLimitCategory = db2File.ReadInt32("Limit Category");
item.HolidayId = db2File.ReadEnum<Holiday>("Holiday", TypeCode.Int32);
item.StatScalingFactor = db2File.ReadSingle("Stat Scaling Factor");
item.CurrencySubstitutionId = db2File.ReadUInt32("Currency Substitution Id");
item.CurrencySubstitutionCount = db2File.ReadUInt32("Currency Substitution Count");
Storage.ObjectNames.Add(entry, new ObjectName { ObjectType = ObjectType.Item, Name = item.Name }, packet.TimeSpan);
packet.AddSniffData(StoreNameType.Item, (int)entry, "DB_REPLY");
break;
}
case DB2Hash.KeyChain: // KeyChain.db2
{
db2File.ReadUInt32("Key Chain Id");
db2File.WriteLine("Key: {0}", Utilities.ByteArrayToHexString(db2File.ReadBytes(32)));
break;
}
case DB2Hash.Creature: // Creature.db2
{
db2File.ReadUInt32("Npc Entry");
db2File.ReadUInt32("Item Entry 1");
db2File.ReadUInt32("Item Entry 2");
db2File.ReadUInt32("Item Entry 3");
db2File.ReadUInt32("Projectile Entry 1");
db2File.ReadUInt32("Projectile Entry 2");
db2File.ReadUInt32("Mount");
db2File.ReadUInt32("Display Id 1");
db2File.ReadUInt32("Display Id 2");
db2File.ReadUInt32("Display Id 3");
db2File.ReadUInt32("Display Id 4");
db2File.ReadSingle("Float1");
db2File.ReadSingle("Float2");
db2File.ReadSingle("Float3");
db2File.ReadSingle("Float4");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Name");
db2File.ReadUInt32("InhabitType");
break;
}
case DB2Hash.BroadcastText:
{
db2File.ReadUInt32("Broadcast Text Entry");
db2File.ReadUInt32("Language");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Male Text");
if (db2File.ReadUInt16() > 0)
db2File.ReadCString("Female Text");
for (var i = 0; i < 3; ++i)
db2File.ReadInt32("Emote ID", i);
for (var i = 0; i < 3; ++i)
db2File.ReadInt32("Emote Delay", i);
db2File.ReadUInt32("Sound Id");
db2File.ReadUInt32("Unk0");
db2File.ReadUInt32("Unk1"); // kind of type?
break;
}
default:
{
db2File.WriteLine("Unknown DB2 file type: {0} (0x{0:x})", type);
for (var i = 0; ; ++i)
{
if (db2File.Length - 4 >= db2File.Position)
{
var blockVal = db2File.ReadUpdateField();
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
packet.WriteLine(key + ": " + value);
}
else
{
var left = db2File.Length - db2File.Position;
for (var j = 0; j < left; ++j)
{
string key = "Byte Value " + i;
var value = db2File.ReadByte();
packet.WriteLine(key + ": " + value);
}
break;
}
}
break;
}
}
}
示例9: HandleDBReply
//.........这里部分代码省略.........
spellMisc.AttributesExG = db2File.ReadUInt32("AttributesExG");
spellMisc.AttributesExH = db2File.ReadUInt32("AttributesExH");
spellMisc.AttributesExI = db2File.ReadUInt32("AttributesExI");
spellMisc.AttributesExJ = db2File.ReadUInt32("AttributesExJ");
spellMisc.AttributesExK = db2File.ReadUInt32("AttributesExK");
spellMisc.AttributesExL = db2File.ReadUInt32("AttributesExL");
spellMisc.AttributesExM = db2File.ReadUInt32("AttributesExM");
spellMisc.CastingTimeIndex = db2File.ReadUInt32("CastingTimeIndex");
spellMisc.DurationIndex = db2File.ReadUInt32("DurationIndex");
spellMisc.RangeIndex = db2File.ReadUInt32("RangeIndex");
spellMisc.Speed = db2File.ReadSingle("Speed");
spellMisc.SpellVisualID = new uint[2];
for (var i = 0; i < 2; ++i)
spellMisc.SpellVisualID[i] = db2File.ReadUInt32("SpellVisualID", i);
spellMisc.SpellIconID = db2File.ReadUInt32("SpellIconID");
spellMisc.ActiveIconID = db2File.ReadUInt32("ActiveIconID");
spellMisc.SchoolMask = db2File.ReadUInt32("SchoolMask");
spellMisc.MultistrikeSpeedMod = db2File.ReadSingle("MultistrikeSpeedMod");
Storage.SpellMiscs.Add((uint)id.Key, spellMisc, packet.TimeSpan);
break;
}
case DB2Hash.Toy: // New structure - 6.0.2
{
db2File.ReadUInt32("ID");
db2File.ReadUInt32<ItemId>("Item ID");
db2File.ReadUInt32("Flags");
var descriptionLength = db2File.ReadUInt16();
db2File.ReadWoWString("Description", descriptionLength);
db2File.ReadInt32("Source Type");
break;
}
case DB2Hash.Vignette:
{
db2File.ReadUInt32("Vignette ID");
var nameLength = db2File.ReadUInt16();
db2File.ReadWoWString("Name", nameLength);
db2File.ReadUInt32("Icon");
db2File.ReadUInt32("Flag"); // not 100% sure (8 & 32 as values only) - todo verify with more data
db2File.ReadSingle("Unk Float 1");
db2File.ReadSingle("Unk Float 2");
break;
}
case DB2Hash.WbAccessControlList:
{
db2File.ReadUInt32("Id");
var addressLength = db2File.ReadUInt16();
db2File.ReadWoWString("Address", addressLength);
db2File.ReadUInt32("Unk MoP 1");
db2File.ReadUInt32("Unk MoP 2");
db2File.ReadUInt32("Unk MoP 3");
db2File.ReadUInt32("Unk MoP 4"); // flags?
break;
}
default:
{
db2File.AddValue("Unknown DB2 file type", string.Format("{0} (0x{0:x})", type));
for (var i = 0;; ++i)
{
if (db2File.Length - 4 >= db2File.Position)
{
var blockVal = db2File.ReadUpdateField();
string key = "Block Value " + i;
string value = blockVal.UInt32Value + "/" + blockVal.SingleValue;
packet.AddValue(key, value);
}
else
{
var left = db2File.Length - db2File.Position;
for (var j = 0; j < left; ++j)
{
string key = "Byte Value " + i;
var value = db2File.ReadByte();
packet.AddValue(key, value);
}
break;
}
}
break;
}
}
if (db2File.Length != db2File.Position)
{
packet.WriteLine("Packet not fully read! Current position is {0}, length is {1}, and diff is {2}.",
db2File.Position, db2File.Length, db2File.Length - db2File.Position);
if (db2File.Length < 300) // If the packet isn't "too big" and it is not full read, print its hex table
packet.AsHex();
packet.Status = ParsedStatus.WithErrors;
}
}